@cqa-lib/cqa-ui 1.1.354 → 1.1.356

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/esm2020/lib/step-builder/step-builder-action/step-builder-action.component.mjs +9 -4
  2. package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +9 -4
  3. package/esm2020/lib/step-builder/step-builder-condition/step-builder-condition.component.mjs +9 -4
  4. package/esm2020/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.mjs +9 -4
  5. package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +7 -3
  6. package/esm2020/lib/step-builder/step-builder-document/step-builder-document.component.mjs +9 -4
  7. package/esm2020/lib/step-builder/step-builder-group/step-builder-group.component.mjs +9 -4
  8. package/esm2020/lib/step-builder/step-builder-loop/step-builder-loop.component.mjs +9 -4
  9. package/esm2020/lib/test-case-details/api-edit-step/api-edit-step.component.mjs +9 -4
  10. package/esm2020/lib/test-case-details/normal-step/normal-step.component.mjs +3 -3
  11. package/esm2020/lib/test-case-details/scroll-step/scroll-step.component.mjs +3 -3
  12. package/fesm2015/cqa-lib-cqa-ui.mjs +58 -22
  13. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  14. package/fesm2020/cqa-lib-cqa-ui.mjs +58 -22
  15. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  16. package/lib/step-builder/step-builder-action/step-builder-action.component.d.ts +3 -1
  17. package/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.d.ts +3 -1
  18. package/lib/step-builder/step-builder-condition/step-builder-condition.component.d.ts +3 -1
  19. package/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.d.ts +3 -1
  20. package/lib/step-builder/step-builder-database/step-builder-database.component.d.ts +3 -1
  21. package/lib/step-builder/step-builder-document/step-builder-document.component.d.ts +3 -1
  22. package/lib/step-builder/step-builder-group/step-builder-group.component.d.ts +3 -1
  23. package/lib/step-builder/step-builder-loop/step-builder-loop.component.d.ts +3 -1
  24. package/lib/test-case-details/api-edit-step/api-edit-step.component.d.ts +3 -1
  25. package/package.json +1 -1
  26. package/styles.css +1 -1
@@ -8,7 +8,8 @@ import * as i4 from "../template-variables-form/template-variables-form.componen
8
8
  import * as i5 from "@angular/material/icon";
9
9
  import * as i6 from "../advanced-variables-form/advanced-variables-form.component";
10
10
  import * as i7 from "@angular/material/slide-toggle";
11
- import * as i8 from "@angular/common";
11
+ import * as i8 from "../../badge/badge.component";
12
+ import * as i9 from "@angular/common";
12
13
  export class StepBuilderConditionComponent {
13
14
  constructor(fb, cdr) {
14
15
  this.fb = fb;
@@ -45,6 +46,8 @@ export class StepBuilderConditionComponent {
45
46
  this.environmentOptions = [];
46
47
  this.hasMoreEnvironments = false;
47
48
  this.isLoadingEnvironments = false;
49
+ /** True while parent is creating the step (API in progress); show loader on Create Step button */
50
+ this.isCreatingStep = false;
48
51
  /** Emit when step is created */
49
52
  this.createStep = new EventEmitter();
50
53
  /** Emit when cancelled */
@@ -749,10 +752,10 @@ export class StepBuilderConditionComponent {
749
752
  }
750
753
  }
751
754
  StepBuilderConditionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderConditionComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
752
- StepBuilderConditionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderConditionComponent, selector: "cqa-step-builder-condition", inputs: { operatorOptions: "operatorOptions", conditionTemplates: "conditionTemplates", setConditionTemplateVariables: "setConditionTemplateVariables", setAdvancedSettingsVariables: "setAdvancedSettingsVariables", elementOptions: "elementOptions", hasMoreElements: "hasMoreElements", isLoadingElements: "isLoadingElements", screenNameOptions: "screenNameOptions", hasMoreScreenNames: "hasMoreScreenNames", isLoadingScreenNames: "isLoadingScreenNames", parameterOptions: "parameterOptions", hasMoreParameters: "hasMoreParameters", isLoadingParameters: "isLoadingParameters", environmentOptions: "environmentOptions", hasMoreEnvironments: "hasMoreEnvironments", isLoadingEnvironments: "isLoadingEnvironments", defaultTestDataProfileId: "defaultTestDataProfileId", defaultTestDataStartIndex: "defaultTestDataStartIndex" }, outputs: { createStep: "createStep", cancelled: "cancelled", loadMoreElements: "loadMoreElements", searchElements: "searchElements", searchElementsByScreenName: "searchElementsByScreenName", createElement: "createElement", searchScreenName: "searchScreenName", loadMoreScreenNames: "loadMoreScreenNames", createScreenNameRequest: "createScreenNameRequest", searchParameters: "searchParameters", loadMoreParameters: "loadMoreParameters", searchEnvironments: "searchEnvironments", loadMoreEnvironments: "loadMoreEnvironments", redirectToParameter: "redirectToParameter", redirectToEnvironment: "redirectToEnvironment" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Create Condition Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Condition Builder Section -->\n <div class=\"cqa-mb-6\">\n <div class=\"cqa-mb-3\">\n <h3 class=\"cqa-text-sm cqa-text-[12px] cqa-font-semibold cqa-text-gray-900\">\n Condition Builder\n </h3>\n </div>\n\n <!-- Condition Rows -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-mb-3\">\n <ng-container *ngFor=\"let condition of conditionsFormArray.controls; let i = index; trackBy: trackByConditionIndex\">\n <div\n *ngIf=\"isConditionIf(i) || isConditionElseIf(i)\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <!-- Condition Row -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Condition Label -->\n <div class=\"cqa-text-[12px] cqa-font-semibold\">\n {{ getConditionLabel(i) }}\n </div>\n\n <!-- Operator Dropdown -->\n <!-- <div class=\"cqa-flex-1 cqa-max-w-[100px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getOperatorConfig(i)\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Value Template Dropdown -->\n <div class=\"cqa-flex-1 cqa-min-w-[150px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getValueConfig(i)\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Remove Button -->\n <cqa-button\n *ngIf=\"i >= 1\"\n variant=\"text\"\n icon=\"close\"\n iconPosition=\"start\"\n [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n (click)=\"removeCondition(i)\"\n [attr.aria-label]=\"'Remove condition'\">\n </cqa-button>\n <!-- <button type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-rounded cqa-text-gray-500 hover:cqa-text-gray-700 hover:cqa-bg-gray-100 cqa-transition-colors\"\n (click)=\"removeCondition(i)\" *ngIf=\"i >= 1\"\n [attr.aria-label]=\"'Remove condition'\">\n <mat-icon class=\"cqa-text-lg cqa-text-[24px]\">close</mat-icon>\n </button> -->\n </div>\n\n <!-- Template Variables Section (shown when template is selected) -->\n <div *ngIf=\"getSelectedTemplate(i)\" class=\"cqa-mt-2\">\n <!-- Template Grammar Display -->\n <div class=\"cqa-mb-4 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700\">\n <div class=\"cqa-action-format cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n [innerHTML]=\"getSelectedTemplate(i)?.htmlGrammar || getSelectedTemplate(i)?.naturalText || ''\">\n </div>\n \n </div>\n \n <!-- Template Variables Form Component (includes Description and Metadata) -->\n <cqa-template-variables-form\n style=\"width: 100%;\"\n [templateVariables]=\"getConditionTemplateVariables(i)\"\n [variablesForm]=\"getConditionVariablesForm(i)\"\n [metadata]=\"getConditionFormGroup(i).get('metadata')?.value || ''\"\n [description]=\"getConditionFormGroup(i).get('description')?.value || ''\"\n [elementOptions]=\"elementOptions\"\n [hasMoreElements]=\"hasMoreElements\"\n [isLoadingElements]=\"isLoadingElements\"\n [screenNameOptions]=\"screenNameOptions\"\n [hasMoreScreenNames]=\"hasMoreScreenNames\"\n [isLoadingScreenNames]=\"isLoadingScreenNames\"\n [parameterOptions]=\"parameterOptions\"\n [hasMoreParameters]=\"hasMoreParameters\"\n [isLoadingParameters]=\"isLoadingParameters\"\n [environmentOptions]=\"environmentOptions\"\n [hasMoreEnvironments]=\"hasMoreEnvironments\"\n [isLoadingEnvironments]=\"isLoadingEnvironments\"\n [defaultTestDataProfileId]=\"defaultTestDataProfileId\"\n [defaultTestDataStartIndex]=\"defaultTestDataStartIndex\"\n (variableValueChange)=\"onConditionVariableValueChange(i, $event.name, $event.value)\"\n (variableBooleanChange)=\"onConditionVariableBooleanChange(i, $event.name, $event.value)\"\n (metadataChange)=\"getConditionFormGroup(i).get('metadata')?.setValue($event)\"\n (descriptionChange)=\"getConditionFormGroup(i).get('description')?.setValue($event)\"\n (loadMoreElements)=\"loadMoreElements.emit()\"\n (searchElements)=\"searchElements.emit($event)\"\n (searchElementsByScreenName)=\"searchElementsByScreenName.emit($event)\"\n (createElement)=\"createElement.emit($event)\"\n (searchScreenName)=\"searchScreenName.emit($event)\"\n (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n (searchParameters)=\"searchParameters.emit($event)\"\n (loadMoreParameters)=\"loadMoreParameters.emit()\"\n (searchEnvironments)=\"searchEnvironments.emit($event)\"\n (loadMoreEnvironments)=\"loadMoreEnvironments.emit()\">\n </cqa-template-variables-form>\n \n <!-- Advanced Settings Variables Form -->\n <div *ngIf=\"getConditionAdvancedSettingsVariables(i).length > 0\" class=\"cqa-mt-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <button type=\"button\"\n class=\"cqa-flex cqa-w-full cqa-items-center cqa-justify-between cqa-gap-2 cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0 cqa-mb-1.5\"\n (click)=\"toggleConditionAdvanced(i)\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-base\" [class.cqa-rotate-180]=\"getConditionAdvancedExpanded(i)\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"getConditionAdvancedExpanded(i)\" class=\"cqa-mt-2\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"getConditionAdvancedSettingsVariables(i)\"\n [advancedVariableForm]=\"getConditionAdvancedVariablesForm(i)\"\n (variableBooleanChange)=\"onConditionAdvancedVariableBooleanChange(i, $event.name, $event.value)\"\n (variableValueChange)=\"onConditionAdvancedVariableValueChange(i, $event.name, $event.value)\">\n </cqa-advanced-variables-form>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- Add Condition Button -->\n <div class=\"cqa-border-2 cqa-border-dashed cqa-border-gray-300 cqa-rounded-lg cqa-p-1 cqa-mt-3\">\n <cqa-button\n variant=\"text\"\n icon=\"add\"\n iconPosition=\"start\"\n [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n [text]=\"'Add Condition'\"\n (clicked)=\"addCondition('CONDITION_ELSE_IF')\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Include ELSE Branch Section -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-6 cqa-p-3 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-flex cqa-flex-col\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-gray-900 cqa-mb-1\">\n Include ELSE branch\n </h3>\n <p class=\"cqa-text-[12px] cqa-text-gray-600\">\n Execute alternative steps when condition is not met.\n </p>\n </div>\n <mat-slide-toggle [checked]=\"includeElse\" (change)=\"onIncludeElseChange($event.checked)\" color=\"primary\">\n </mat-slide-toggle>\n </div>\n </div>\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-w-1/2\" variant=\"filled\" text=\"Create Step\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i4.TemplateVariablesFormComponent, selector: "cqa-template-variables-form", inputs: ["templateVariables", "variablesForm", "metadata", "description", "elementOptions", "hasMoreElements", "isLoadingElements", "screenNameOptions", "hasMoreScreenNames", "isLoadingScreenNames", "parameterOptions", "hasMoreParameters", "isLoadingParameters", "uploadOptions", "hasMoreUploads", "isLoadingUploads", "environmentOptions", "hasMoreEnvironments", "isLoadingEnvironments", "defaultTestDataProfileId", "defaultTestDataStartIndex", "isEditInDepth", "createElementVisible"], outputs: ["variableValueChange", "variableBooleanChange", "metadataChange", "descriptionChange", "loadMoreElements", "searchElements", "searchElementsByScreenName", "createElement", "searchScreenName", "loadMoreScreenNames", "createScreenNameRequest", "searchParameters", "loadMoreParameters", "searchUploads", "loadMoreUploads", "searchEnvironments", "loadMoreEnvironments", "cancelElementForm", "elementFormVisibilityChange"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: ["advancedVariables", "advancedVariableForm"], outputs: ["variableBooleanChange", "variableValueChange"] }, { type: i7.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }], directives: [{ type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
755
+ StepBuilderConditionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderConditionComponent, selector: "cqa-step-builder-condition", inputs: { operatorOptions: "operatorOptions", conditionTemplates: "conditionTemplates", setConditionTemplateVariables: "setConditionTemplateVariables", setAdvancedSettingsVariables: "setAdvancedSettingsVariables", elementOptions: "elementOptions", hasMoreElements: "hasMoreElements", isLoadingElements: "isLoadingElements", screenNameOptions: "screenNameOptions", hasMoreScreenNames: "hasMoreScreenNames", isLoadingScreenNames: "isLoadingScreenNames", parameterOptions: "parameterOptions", hasMoreParameters: "hasMoreParameters", isLoadingParameters: "isLoadingParameters", environmentOptions: "environmentOptions", hasMoreEnvironments: "hasMoreEnvironments", isLoadingEnvironments: "isLoadingEnvironments", defaultTestDataProfileId: "defaultTestDataProfileId", defaultTestDataStartIndex: "defaultTestDataStartIndex", isCreatingStep: "isCreatingStep" }, outputs: { createStep: "createStep", cancelled: "cancelled", loadMoreElements: "loadMoreElements", searchElements: "searchElements", searchElementsByScreenName: "searchElementsByScreenName", createElement: "createElement", searchScreenName: "searchScreenName", loadMoreScreenNames: "loadMoreScreenNames", createScreenNameRequest: "createScreenNameRequest", searchParameters: "searchParameters", loadMoreParameters: "loadMoreParameters", searchEnvironments: "searchEnvironments", loadMoreEnvironments: "loadMoreEnvironments", redirectToParameter: "redirectToParameter", redirectToEnvironment: "redirectToEnvironment" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Create Condition Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Condition Builder Section -->\n <div class=\"cqa-mb-6\">\n <div class=\"cqa-mb-3\">\n <h3 class=\"cqa-text-sm cqa-text-[12px] cqa-font-semibold cqa-text-gray-900\">\n Condition Builder\n </h3>\n </div>\n\n <!-- Condition Rows -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-mb-3\">\n <ng-container *ngFor=\"let condition of conditionsFormArray.controls; let i = index; trackBy: trackByConditionIndex\">\n <div\n *ngIf=\"isConditionIf(i) || isConditionElseIf(i)\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <!-- Condition Row -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Condition Label -->\n <div class=\"cqa-text-[12px] cqa-font-semibold\">\n {{ getConditionLabel(i) }}\n </div>\n\n <!-- Operator Dropdown -->\n <!-- <div class=\"cqa-flex-1 cqa-max-w-[100px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getOperatorConfig(i)\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Value Template Dropdown -->\n <div class=\"cqa-flex-1 cqa-min-w-[150px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getValueConfig(i)\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Remove Button -->\n <cqa-button\n *ngIf=\"i >= 1\"\n variant=\"text\"\n icon=\"close\"\n iconPosition=\"start\"\n [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n (click)=\"removeCondition(i)\"\n [attr.aria-label]=\"'Remove condition'\">\n </cqa-button>\n <!-- <button type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-rounded cqa-text-gray-500 hover:cqa-text-gray-700 hover:cqa-bg-gray-100 cqa-transition-colors\"\n (click)=\"removeCondition(i)\" *ngIf=\"i >= 1\"\n [attr.aria-label]=\"'Remove condition'\">\n <mat-icon class=\"cqa-text-lg cqa-text-[24px]\">close</mat-icon>\n </button> -->\n </div>\n\n <!-- Template Variables Section (shown when template is selected) -->\n <div *ngIf=\"getSelectedTemplate(i)\" class=\"cqa-mt-2\">\n <!-- Template Grammar Display -->\n <div class=\"cqa-mb-4 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700\">\n <div class=\"cqa-action-format cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n [innerHTML]=\"getSelectedTemplate(i)?.htmlGrammar || getSelectedTemplate(i)?.naturalText || ''\">\n </div>\n \n </div>\n \n <!-- Template Variables Form Component (includes Description and Metadata) -->\n <cqa-template-variables-form\n style=\"width: 100%;\"\n [templateVariables]=\"getConditionTemplateVariables(i)\"\n [variablesForm]=\"getConditionVariablesForm(i)\"\n [metadata]=\"getConditionFormGroup(i).get('metadata')?.value || ''\"\n [description]=\"getConditionFormGroup(i).get('description')?.value || ''\"\n [elementOptions]=\"elementOptions\"\n [hasMoreElements]=\"hasMoreElements\"\n [isLoadingElements]=\"isLoadingElements\"\n [screenNameOptions]=\"screenNameOptions\"\n [hasMoreScreenNames]=\"hasMoreScreenNames\"\n [isLoadingScreenNames]=\"isLoadingScreenNames\"\n [parameterOptions]=\"parameterOptions\"\n [hasMoreParameters]=\"hasMoreParameters\"\n [isLoadingParameters]=\"isLoadingParameters\"\n [environmentOptions]=\"environmentOptions\"\n [hasMoreEnvironments]=\"hasMoreEnvironments\"\n [isLoadingEnvironments]=\"isLoadingEnvironments\"\n [defaultTestDataProfileId]=\"defaultTestDataProfileId\"\n [defaultTestDataStartIndex]=\"defaultTestDataStartIndex\"\n (variableValueChange)=\"onConditionVariableValueChange(i, $event.name, $event.value)\"\n (variableBooleanChange)=\"onConditionVariableBooleanChange(i, $event.name, $event.value)\"\n (metadataChange)=\"getConditionFormGroup(i).get('metadata')?.setValue($event)\"\n (descriptionChange)=\"getConditionFormGroup(i).get('description')?.setValue($event)\"\n (loadMoreElements)=\"loadMoreElements.emit()\"\n (searchElements)=\"searchElements.emit($event)\"\n (searchElementsByScreenName)=\"searchElementsByScreenName.emit($event)\"\n (createElement)=\"createElement.emit($event)\"\n (searchScreenName)=\"searchScreenName.emit($event)\"\n (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n (searchParameters)=\"searchParameters.emit($event)\"\n (loadMoreParameters)=\"loadMoreParameters.emit()\"\n (searchEnvironments)=\"searchEnvironments.emit($event)\"\n (loadMoreEnvironments)=\"loadMoreEnvironments.emit()\">\n </cqa-template-variables-form>\n \n <!-- Advanced Settings Variables Form -->\n <div *ngIf=\"getConditionAdvancedSettingsVariables(i).length > 0\" class=\"cqa-mt-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <button type=\"button\"\n class=\"cqa-flex cqa-w-full cqa-items-center cqa-justify-between cqa-gap-2 cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0 cqa-mb-1.5\"\n (click)=\"toggleConditionAdvanced(i)\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-base\" [class.cqa-rotate-180]=\"getConditionAdvancedExpanded(i)\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"getConditionAdvancedExpanded(i)\" class=\"cqa-mt-2\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"getConditionAdvancedSettingsVariables(i)\"\n [advancedVariableForm]=\"getConditionAdvancedVariablesForm(i)\"\n (variableBooleanChange)=\"onConditionAdvancedVariableBooleanChange(i, $event.name, $event.value)\"\n (variableValueChange)=\"onConditionAdvancedVariableValueChange(i, $event.name, $event.value)\">\n </cqa-advanced-variables-form>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- Add Condition Button -->\n <div class=\"cqa-border-2 cqa-border-dashed cqa-border-gray-300 cqa-rounded-lg cqa-p-1 cqa-mt-3\">\n <cqa-button\n variant=\"text\"\n icon=\"add\"\n iconPosition=\"start\"\n [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n [text]=\"'Add Condition'\"\n (clicked)=\"addCondition('CONDITION_ELSE_IF')\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Include ELSE Branch Section -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-6 cqa-p-3 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-flex cqa-flex-col\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-gray-900 cqa-mb-1\">\n Include ELSE branch\n </h3>\n <p class=\"cqa-text-[12px] cqa-text-gray-600\">\n Execute alternative steps when condition is not met.\n </p>\n </div>\n <mat-slide-toggle [checked]=\"includeElse\" (change)=\"onIncludeElseChange($event.checked)\" color=\"primary\">\n </mat-slide-toggle>\n </div>\n </div>\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button *ngIf=\"!isCreatingStep\" class=\"cqa-w-1/2\" variant=\"filled\" text=\"Create Step\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n <div *ngIf=\"isCreatingStep\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n <cqa-badge label=\"Creating\u2026\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n variant=\"info\" size=\"medium\"></cqa-badge>\n </div>\n </div>\n</div>", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i4.TemplateVariablesFormComponent, selector: "cqa-template-variables-form", inputs: ["templateVariables", "variablesForm", "metadata", "description", "elementOptions", "hasMoreElements", "isLoadingElements", "screenNameOptions", "hasMoreScreenNames", "isLoadingScreenNames", "parameterOptions", "hasMoreParameters", "isLoadingParameters", "uploadOptions", "hasMoreUploads", "isLoadingUploads", "environmentOptions", "hasMoreEnvironments", "isLoadingEnvironments", "defaultTestDataProfileId", "defaultTestDataStartIndex", "isEditInDepth", "createElementVisible"], outputs: ["variableValueChange", "variableBooleanChange", "metadataChange", "descriptionChange", "loadMoreElements", "searchElements", "searchElementsByScreenName", "createElement", "searchScreenName", "loadMoreScreenNames", "createScreenNameRequest", "searchParameters", "loadMoreParameters", "searchUploads", "loadMoreUploads", "searchEnvironments", "loadMoreEnvironments", "cancelElementForm", "elementFormVisibilityChange"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: ["advancedVariables", "advancedVariableForm"], outputs: ["variableBooleanChange", "variableValueChange"] }, { type: i7.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i8.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent"] }], directives: [{ type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
753
756
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderConditionComponent, decorators: [{
754
757
  type: Component,
755
- args: [{ selector: 'cqa-step-builder-condition', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Create Condition Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Condition Builder Section -->\n <div class=\"cqa-mb-6\">\n <div class=\"cqa-mb-3\">\n <h3 class=\"cqa-text-sm cqa-text-[12px] cqa-font-semibold cqa-text-gray-900\">\n Condition Builder\n </h3>\n </div>\n\n <!-- Condition Rows -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-mb-3\">\n <ng-container *ngFor=\"let condition of conditionsFormArray.controls; let i = index; trackBy: trackByConditionIndex\">\n <div\n *ngIf=\"isConditionIf(i) || isConditionElseIf(i)\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <!-- Condition Row -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Condition Label -->\n <div class=\"cqa-text-[12px] cqa-font-semibold\">\n {{ getConditionLabel(i) }}\n </div>\n\n <!-- Operator Dropdown -->\n <!-- <div class=\"cqa-flex-1 cqa-max-w-[100px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getOperatorConfig(i)\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Value Template Dropdown -->\n <div class=\"cqa-flex-1 cqa-min-w-[150px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getValueConfig(i)\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Remove Button -->\n <cqa-button\n *ngIf=\"i >= 1\"\n variant=\"text\"\n icon=\"close\"\n iconPosition=\"start\"\n [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n (click)=\"removeCondition(i)\"\n [attr.aria-label]=\"'Remove condition'\">\n </cqa-button>\n <!-- <button type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-rounded cqa-text-gray-500 hover:cqa-text-gray-700 hover:cqa-bg-gray-100 cqa-transition-colors\"\n (click)=\"removeCondition(i)\" *ngIf=\"i >= 1\"\n [attr.aria-label]=\"'Remove condition'\">\n <mat-icon class=\"cqa-text-lg cqa-text-[24px]\">close</mat-icon>\n </button> -->\n </div>\n\n <!-- Template Variables Section (shown when template is selected) -->\n <div *ngIf=\"getSelectedTemplate(i)\" class=\"cqa-mt-2\">\n <!-- Template Grammar Display -->\n <div class=\"cqa-mb-4 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700\">\n <div class=\"cqa-action-format cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n [innerHTML]=\"getSelectedTemplate(i)?.htmlGrammar || getSelectedTemplate(i)?.naturalText || ''\">\n </div>\n \n </div>\n \n <!-- Template Variables Form Component (includes Description and Metadata) -->\n <cqa-template-variables-form\n style=\"width: 100%;\"\n [templateVariables]=\"getConditionTemplateVariables(i)\"\n [variablesForm]=\"getConditionVariablesForm(i)\"\n [metadata]=\"getConditionFormGroup(i).get('metadata')?.value || ''\"\n [description]=\"getConditionFormGroup(i).get('description')?.value || ''\"\n [elementOptions]=\"elementOptions\"\n [hasMoreElements]=\"hasMoreElements\"\n [isLoadingElements]=\"isLoadingElements\"\n [screenNameOptions]=\"screenNameOptions\"\n [hasMoreScreenNames]=\"hasMoreScreenNames\"\n [isLoadingScreenNames]=\"isLoadingScreenNames\"\n [parameterOptions]=\"parameterOptions\"\n [hasMoreParameters]=\"hasMoreParameters\"\n [isLoadingParameters]=\"isLoadingParameters\"\n [environmentOptions]=\"environmentOptions\"\n [hasMoreEnvironments]=\"hasMoreEnvironments\"\n [isLoadingEnvironments]=\"isLoadingEnvironments\"\n [defaultTestDataProfileId]=\"defaultTestDataProfileId\"\n [defaultTestDataStartIndex]=\"defaultTestDataStartIndex\"\n (variableValueChange)=\"onConditionVariableValueChange(i, $event.name, $event.value)\"\n (variableBooleanChange)=\"onConditionVariableBooleanChange(i, $event.name, $event.value)\"\n (metadataChange)=\"getConditionFormGroup(i).get('metadata')?.setValue($event)\"\n (descriptionChange)=\"getConditionFormGroup(i).get('description')?.setValue($event)\"\n (loadMoreElements)=\"loadMoreElements.emit()\"\n (searchElements)=\"searchElements.emit($event)\"\n (searchElementsByScreenName)=\"searchElementsByScreenName.emit($event)\"\n (createElement)=\"createElement.emit($event)\"\n (searchScreenName)=\"searchScreenName.emit($event)\"\n (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n (searchParameters)=\"searchParameters.emit($event)\"\n (loadMoreParameters)=\"loadMoreParameters.emit()\"\n (searchEnvironments)=\"searchEnvironments.emit($event)\"\n (loadMoreEnvironments)=\"loadMoreEnvironments.emit()\">\n </cqa-template-variables-form>\n \n <!-- Advanced Settings Variables Form -->\n <div *ngIf=\"getConditionAdvancedSettingsVariables(i).length > 0\" class=\"cqa-mt-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <button type=\"button\"\n class=\"cqa-flex cqa-w-full cqa-items-center cqa-justify-between cqa-gap-2 cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0 cqa-mb-1.5\"\n (click)=\"toggleConditionAdvanced(i)\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-base\" [class.cqa-rotate-180]=\"getConditionAdvancedExpanded(i)\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"getConditionAdvancedExpanded(i)\" class=\"cqa-mt-2\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"getConditionAdvancedSettingsVariables(i)\"\n [advancedVariableForm]=\"getConditionAdvancedVariablesForm(i)\"\n (variableBooleanChange)=\"onConditionAdvancedVariableBooleanChange(i, $event.name, $event.value)\"\n (variableValueChange)=\"onConditionAdvancedVariableValueChange(i, $event.name, $event.value)\">\n </cqa-advanced-variables-form>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- Add Condition Button -->\n <div class=\"cqa-border-2 cqa-border-dashed cqa-border-gray-300 cqa-rounded-lg cqa-p-1 cqa-mt-3\">\n <cqa-button\n variant=\"text\"\n icon=\"add\"\n iconPosition=\"start\"\n [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n [text]=\"'Add Condition'\"\n (clicked)=\"addCondition('CONDITION_ELSE_IF')\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Include ELSE Branch Section -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-6 cqa-p-3 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-flex cqa-flex-col\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-gray-900 cqa-mb-1\">\n Include ELSE branch\n </h3>\n <p class=\"cqa-text-[12px] cqa-text-gray-600\">\n Execute alternative steps when condition is not met.\n </p>\n </div>\n <mat-slide-toggle [checked]=\"includeElse\" (change)=\"onIncludeElseChange($event.checked)\" color=\"primary\">\n </mat-slide-toggle>\n </div>\n </div>\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-w-1/2\" variant=\"filled\" text=\"Create Step\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>", styles: [] }]
758
+ args: [{ selector: 'cqa-step-builder-condition', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Create Condition Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Condition Builder Section -->\n <div class=\"cqa-mb-6\">\n <div class=\"cqa-mb-3\">\n <h3 class=\"cqa-text-sm cqa-text-[12px] cqa-font-semibold cqa-text-gray-900\">\n Condition Builder\n </h3>\n </div>\n\n <!-- Condition Rows -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-mb-3\">\n <ng-container *ngFor=\"let condition of conditionsFormArray.controls; let i = index; trackBy: trackByConditionIndex\">\n <div\n *ngIf=\"isConditionIf(i) || isConditionElseIf(i)\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <!-- Condition Row -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Condition Label -->\n <div class=\"cqa-text-[12px] cqa-font-semibold\">\n {{ getConditionLabel(i) }}\n </div>\n\n <!-- Operator Dropdown -->\n <!-- <div class=\"cqa-flex-1 cqa-max-w-[100px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getOperatorConfig(i)\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Value Template Dropdown -->\n <div class=\"cqa-flex-1 cqa-min-w-[150px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getValueConfig(i)\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Remove Button -->\n <cqa-button\n *ngIf=\"i >= 1\"\n variant=\"text\"\n icon=\"close\"\n iconPosition=\"start\"\n [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n (click)=\"removeCondition(i)\"\n [attr.aria-label]=\"'Remove condition'\">\n </cqa-button>\n <!-- <button type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-rounded cqa-text-gray-500 hover:cqa-text-gray-700 hover:cqa-bg-gray-100 cqa-transition-colors\"\n (click)=\"removeCondition(i)\" *ngIf=\"i >= 1\"\n [attr.aria-label]=\"'Remove condition'\">\n <mat-icon class=\"cqa-text-lg cqa-text-[24px]\">close</mat-icon>\n </button> -->\n </div>\n\n <!-- Template Variables Section (shown when template is selected) -->\n <div *ngIf=\"getSelectedTemplate(i)\" class=\"cqa-mt-2\">\n <!-- Template Grammar Display -->\n <div class=\"cqa-mb-4 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700\">\n <div class=\"cqa-action-format cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n [innerHTML]=\"getSelectedTemplate(i)?.htmlGrammar || getSelectedTemplate(i)?.naturalText || ''\">\n </div>\n \n </div>\n \n <!-- Template Variables Form Component (includes Description and Metadata) -->\n <cqa-template-variables-form\n style=\"width: 100%;\"\n [templateVariables]=\"getConditionTemplateVariables(i)\"\n [variablesForm]=\"getConditionVariablesForm(i)\"\n [metadata]=\"getConditionFormGroup(i).get('metadata')?.value || ''\"\n [description]=\"getConditionFormGroup(i).get('description')?.value || ''\"\n [elementOptions]=\"elementOptions\"\n [hasMoreElements]=\"hasMoreElements\"\n [isLoadingElements]=\"isLoadingElements\"\n [screenNameOptions]=\"screenNameOptions\"\n [hasMoreScreenNames]=\"hasMoreScreenNames\"\n [isLoadingScreenNames]=\"isLoadingScreenNames\"\n [parameterOptions]=\"parameterOptions\"\n [hasMoreParameters]=\"hasMoreParameters\"\n [isLoadingParameters]=\"isLoadingParameters\"\n [environmentOptions]=\"environmentOptions\"\n [hasMoreEnvironments]=\"hasMoreEnvironments\"\n [isLoadingEnvironments]=\"isLoadingEnvironments\"\n [defaultTestDataProfileId]=\"defaultTestDataProfileId\"\n [defaultTestDataStartIndex]=\"defaultTestDataStartIndex\"\n (variableValueChange)=\"onConditionVariableValueChange(i, $event.name, $event.value)\"\n (variableBooleanChange)=\"onConditionVariableBooleanChange(i, $event.name, $event.value)\"\n (metadataChange)=\"getConditionFormGroup(i).get('metadata')?.setValue($event)\"\n (descriptionChange)=\"getConditionFormGroup(i).get('description')?.setValue($event)\"\n (loadMoreElements)=\"loadMoreElements.emit()\"\n (searchElements)=\"searchElements.emit($event)\"\n (searchElementsByScreenName)=\"searchElementsByScreenName.emit($event)\"\n (createElement)=\"createElement.emit($event)\"\n (searchScreenName)=\"searchScreenName.emit($event)\"\n (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n (searchParameters)=\"searchParameters.emit($event)\"\n (loadMoreParameters)=\"loadMoreParameters.emit()\"\n (searchEnvironments)=\"searchEnvironments.emit($event)\"\n (loadMoreEnvironments)=\"loadMoreEnvironments.emit()\">\n </cqa-template-variables-form>\n \n <!-- Advanced Settings Variables Form -->\n <div *ngIf=\"getConditionAdvancedSettingsVariables(i).length > 0\" class=\"cqa-mt-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <button type=\"button\"\n class=\"cqa-flex cqa-w-full cqa-items-center cqa-justify-between cqa-gap-2 cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0 cqa-mb-1.5\"\n (click)=\"toggleConditionAdvanced(i)\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-base\" [class.cqa-rotate-180]=\"getConditionAdvancedExpanded(i)\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"getConditionAdvancedExpanded(i)\" class=\"cqa-mt-2\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"getConditionAdvancedSettingsVariables(i)\"\n [advancedVariableForm]=\"getConditionAdvancedVariablesForm(i)\"\n (variableBooleanChange)=\"onConditionAdvancedVariableBooleanChange(i, $event.name, $event.value)\"\n (variableValueChange)=\"onConditionAdvancedVariableValueChange(i, $event.name, $event.value)\">\n </cqa-advanced-variables-form>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- Add Condition Button -->\n <div class=\"cqa-border-2 cqa-border-dashed cqa-border-gray-300 cqa-rounded-lg cqa-p-1 cqa-mt-3\">\n <cqa-button\n variant=\"text\"\n icon=\"add\"\n iconPosition=\"start\"\n [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n [text]=\"'Add Condition'\"\n (clicked)=\"addCondition('CONDITION_ELSE_IF')\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Include ELSE Branch Section -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-6 cqa-p-3 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-flex cqa-flex-col\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-gray-900 cqa-mb-1\">\n Include ELSE branch\n </h3>\n <p class=\"cqa-text-[12px] cqa-text-gray-600\">\n Execute alternative steps when condition is not met.\n </p>\n </div>\n <mat-slide-toggle [checked]=\"includeElse\" (change)=\"onIncludeElseChange($event.checked)\" color=\"primary\">\n </mat-slide-toggle>\n </div>\n </div>\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button *ngIf=\"!isCreatingStep\" class=\"cqa-w-1/2\" variant=\"filled\" text=\"Create Step\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n <div *ngIf=\"isCreatingStep\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n <cqa-badge label=\"Creating\u2026\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n variant=\"info\" size=\"medium\"></cqa-badge>\n </div>\n </div>\n</div>", styles: [] }]
756
759
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { operatorOptions: [{
757
760
  type: Input
758
761
  }], conditionTemplates: [{
@@ -789,6 +792,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
789
792
  type: Input
790
793
  }], defaultTestDataStartIndex: [{
791
794
  type: Input
795
+ }], isCreatingStep: [{
796
+ type: Input
792
797
  }], createStep: [{
793
798
  type: Output
794
799
  }], cancelled: [{
@@ -820,4 +825,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
820
825
  }], redirectToEnvironment: [{
821
826
  type: Output
822
827
  }] } });
823
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWNvbmRpdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3N0ZXAtYnVpbGRlci9zdGVwLWJ1aWxkZXItY29uZGl0aW9uL3N0ZXAtYnVpbGRlci1jb25kaXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWNvbmRpdGlvbi9zdGVwLWJ1aWxkZXItY29uZGl0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQW9DLHVCQUF1QixFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNySixPQUFPLEVBQUUsU0FBUyxFQUEwQixXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFtQzVGLE1BQU0sT0FBTyw2QkFBNkI7SUFzRnhDLFlBQW9CLEVBQWUsRUFBVSxHQUFzQjtRQUEvQyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFyRm5FLG9DQUFvQztRQUMzQixvQkFBZSxHQUFtQjtZQUN6QyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDbEUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO1lBQ2xGLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtZQUMxRSxFQUFFLEVBQUUsRUFBRSxj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QU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGlvblRlbXBsYXRlIH0gZnJvbSAnLi4vc3RlcC1idWlsZGVyLWFjdGlvbi9zdGVwLWJ1aWxkZXItYWN0aW9uLmNvbXBvbmVudCc7XG5cbi8vIEltcG9ydCBFbGVtZW50IHR5cGUgLSB1c2luZyBhbnkgZm9yIG5vdyBzaW5jZSBFbGVtZW50IGlzIGZyb20gdHMtcG9ydGFsLXVpXG5pbnRlcmZhY2UgRWxlbWVudCB7XG4gIGlkPzogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGxvY2F0b3JWYWx1ZT86IHN0cmluZztcbiAgb3RoZXJMb2NhdG9yPzogc3RyaW5nW107XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25Sb3cge1xuICBmaWVsZDogc3RyaW5nO1xuICBvcGVyYXRvcjogc3RyaW5nO1xuICB2YWx1ZTogQWN0aW9uVGVtcGxhdGU7XG4gIHRlbXBsYXRlVmFyaWFibGVzPzogYW55W107XG4gIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM/OiBhbnlbXTtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbmRpdGlvbkZvcm1EYXRhIHtcbiAgY29uZGl0aW9uczogQ29uZGl0aW9uUm93W107XG4gIGluY2x1ZGVFbHNlOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtc3RlcC1idWlsZGVyLWNvbmRpdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwLWJ1aWxkZXItY29uZGl0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTdGVwQnVpbGRlckNvbmRpdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIE9wdGlvbnMgZm9yIG9wZXJhdG9yIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIG9wZXJhdG9yT3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXG4gICAgeyBpZDogJ2VxdWFscycsIHZhbHVlOiAnZXF1YWxzJywgbmFtZTogJ2VxdWFscycsIGxhYmVsOiAnZXF1YWxzJyB9LFxuICAgIHsgaWQ6ICdub3RfZXF1YWxzJywgdmFsdWU6ICdub3RfZXF1YWxzJywgbmFtZTogJ25vdCBlcXVhbHMnLCBsYWJlbDogJ25vdCBlcXVhbHMnIH0sXG4gICAgeyBpZDogJ2NvbnRhaW5zJywgdmFsdWU6ICdjb250YWlucycsIG5hbWU6ICdjb250YWlucycsIGxhYmVsOiAnY29udGFpbnMnIH0sXG4gICAgeyBpZDogJ25vdF9jb250YWlucycsIHZhbHVlOiAnbm90X2NvbnRhaW5zJywgbmFtZTogJ25vdCBjb250YWlucycsIGxhYmVsOiAnbm90IGNvbnRhaW5zJyB9LFxuICAgIHsgaWQ6ICdncmVhdGVyX3RoYW4nLCB2YWx1ZTogJ2dyZWF0ZXJfdGhhbicsIG5hbWU6ICdncmVhdGVyIHRoYW4nLCBsYWJlbDogJ2dyZWF0ZXIgdGhhbicgfSxcbiAgICB7IGlkOiAnbGVzc190aGFuJywgdmFsdWU6ICdsZXNzX3RoYW4nLCBuYW1lOiAnbGVzcyB0aGFuJywgbGFiZWw6ICdsZXNzIHRoYW4nIH1cbiAgXTtcblxuICAvKiogTGlzdCBvZiBhY3Rpb24gdGVtcGxhdGVzIHRvIGRpc3BsYXkgaW4gdmFsdWUgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgY29uZGl0aW9uVGVtcGxhdGVzOiBBY3Rpb25UZW1wbGF0ZVtdID0gW107XG4gIC8qKiBGdW5jdGlvbiB0byBoYW5kbGUgdmFyaWFibGUgcHJvY2Vzc2luZyBvciBjdXN0b20gbG9naWMuIENhbiBiZSBwYXNzZWQgZnJvbSBwYXJlbnQgY29tcG9uZW50LiAqL1xuICBASW5wdXQoKSBzZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlczogKHZhcmlhYmxlczogQWN0aW9uVGVtcGxhdGUpID0+IGFueSA9ICgpID0+IHsgcmV0dXJuIFtdfTtcbiAgLyoqIEZ1bmN0aW9uIHRvIGhhbmRsZSBhZHZhbmNlZCBzZXR0aW5ncyB2YXJpYWJsZXMuIENhbiBiZSBwYXNzZWQgZnJvbSBwYXJlbnQgY29tcG9uZW50LiAqL1xuICBASW5wdXQoKSBzZXRBZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiAodGVtcGxhdGU6IEFjdGlvblRlbXBsYXRlLCB0ZXN0U3RlcD86IGFueSkgPT4gYW55W10gPSAoKSA9PiB7IHJldHVybiBbXX07XG4gIEBJbnB1dCgpIGVsZW1lbnRPcHRpb25zOiBFbGVtZW50W10gPSBbXTsgLy8gRWxlbWVudCBvYmplY3RzIGZvciBlbGVtZW50IGRyb3Bkb3duXG4gIEBJbnB1dCgpIGhhc01vcmVFbGVtZW50czogYm9vbGVhbiA9IGZhbHNlOyAvLyBXaGV0aGVyIG1vcmUgZWxlbWVudHMgYXJlIGF2YWlsYWJsZVxuICBASW5wdXQoKSBpc0xvYWRpbmdFbGVtZW50czogYm9vbGVhbiA9IGZhbHNlOyAvLyBMb2FkaW5nIHN0YXRlIGZvciBlbGVtZW50c1xuICAvKiogU2NyZWVuIG5hbWUgb3B0aW9ucyBmb3IgZWxlbWVudCBmb3JtIGF1dG9jb21wbGV0ZSAoZnJvbSBBUEkpICovXG4gIEBJbnB1dCgpIHNjcmVlbk5hbWVPcHRpb25zOiB7IGlkPzogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfVtdID0gW107XG4gIC8qKiBXaGV0aGVyIG1vcmUgc2NyZWVuIG5hbWVzIGFyZSBhdmFpbGFibGUgZm9yIGluZmluaXRlIHNjcm9sbCAqL1xuICBASW5wdXQoKSBoYXNNb3JlU2NyZWVuTmFtZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFRydWUgd2hpbGUgcGFyZW50IGlzIGxvYWRpbmcgc2NyZWVuIG5hbWVzIChzZWFyY2ggb3IgbG9hZCBtb3JlKSAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdTY3JlZW5OYW1lczogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLyoqIFBhcmFtZXRlciBmZXRjaGluZyBwcm9wZXJ0aWVzICovXG4gIEBJbnB1dCgpIHBhcmFtZXRlck9wdGlvbnM6IGFueVtdID0gW107IC8vIFRlc3REYXRhW10gLSByYXcgdGVzdCBkYXRhIHByb2ZpbGVzXG4gIEBJbnB1dCgpIGhhc01vcmVQYXJhbWV0ZXJzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzTG9hZGluZ1BhcmFtZXRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8qKiBFbnZpcm9ubWVudCBmZXRjaGluZyBwcm9wZXJ0aWVzICovXG4gIEBJbnB1dCgpIGVudmlyb25tZW50T3B0aW9uczogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IGVudmlyb25tZW50OiBzdHJpbmcgfVtdID0gW107XG4gIEBJbnB1dCgpIGhhc01vcmVFbnZpcm9ubWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNMb2FkaW5nRW52aXJvbm1lbnRzOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvKiogRGVmYXVsdCB0ZXN0IGRhdGEgcHJvZmlsZSBwcm9wZXJ0aWVzICovXG4gIEBJbnB1dCgpIGRlZmF1bHRUZXN0RGF0YVByb2ZpbGVJZD86IG51bWJlcjtcbiAgQElucHV0KCkgZGVmYXVsdFRlc3REYXRhU3RhcnRJbmRleD86IG51bWJlcjtcblxuICAvKiogRW1pdCB3aGVuIHN0ZXAgaXMgY3JlYXRlZCAqL1xuICBAT3V0cHV0KCkgY3JlYXRlU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29uZGl0aW9uRm9ybURhdGE+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBjYW5jZWxsZWQgKi9cbiAgQE91dHB1dCgpIGNhbmNlbGxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGxvYWRNb3JlRWxlbWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7IC8vIEVtaXQgd2hlbiBsb2FkIG1vcmUgaXMgcmVxdWVzdGVkXG4gIEBPdXRwdXQoKSBzZWFyY2hFbGVtZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpOyAvLyBFbWl0IHdoZW4gdXNlciBzZWFyY2hlcyBmb3IgZWxlbWVudHNcbiAgQE91dHB1dCgpIHNlYXJjaEVsZW1lbnRzQnlTY3JlZW5OYW1lID0gbmV3IEV2ZW50RW1pdHRlcjx7IHNjcmVlbk5hbWVJZDogbnVtYmVyOyBzZWFyY2hUZXJtPzogc3RyaW5nIH0+KCk7IC8vIEVtaXQgd2hlbiBzY3JlZW4gbmFtZSBpcyBzZWxlY3RlZCB0byBmZXRjaCBlbGVtZW50cyBmaWx0ZXJlZCBieSBzY3JlZW4gbmFtZVxuICBAT3V0cHV0KCkgY3JlYXRlRWxlbWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyAvLyBFbWl0IHdoZW4gZWxlbWVudCBpcyBjcmVhdGVkXG4gIEBPdXRwdXQoKSBzZWFyY2hTY3JlZW5OYW1lID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7IC8vIEVtaXQgd2hlbiB1c2VyIHNlYXJjaGVzIHNjcmVlbiBuYW1lc1xuICBAT3V0cHV0KCkgbG9hZE1vcmVTY3JlZW5OYW1lcyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpOyAvLyBFbWl0IHdoZW4gdXNlciBzY3JvbGxzIHRvIGxvYWQgbW9yZSBzY3JlZW4gbmFtZXNcbiAgQE91dHB1dCgpIGNyZWF0ZVNjcmVlbk5hbWVSZXF1ZXN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7IC8vIEVtaXQgd2hlbiB1c2VyIHJlcXVlc3RzIHRvIGNyZWF0ZSBhIG5ldyBzY3JlZW4gbmFtZVxuICBAT3V0cHV0KCkgc2VhcmNoUGFyYW1ldGVycyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpOyAvLyBFbWl0IHdoZW4gdXNlciBzZWFyY2hlcyBmb3IgcGFyYW1ldGVyc1xuICBAT3V0cHV0KCkgbG9hZE1vcmVQYXJhbWV0ZXJzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpOyAvLyBFbWl0IHdoZW4gdXNlciBzY3JvbGxzIHRvIGxvYWQgbW9yZSBwYXJhbWV0ZXJzXG4gIEBPdXRwdXQoKSBzZWFyY2hFbnZpcm9ubWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTsgLy8gRW1pdCB3aGVuIHVzZXIgc2VhcmNoZXMgZm9yIGVudmlyb25tZW50c1xuICBAT3V0cHV0KCkgbG9hZE1vcmVFbnZpcm9ubWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7IC8vIEVtaXQgd2hlbiB1c2VyIHNjcm9sbHMgdG8gbG9hZCBtb3JlIGVudmlyb25tZW50c1xuICBAT3V0cHV0KCkgcmVkaXJlY3RUb1BhcmFtZXRlciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlZGlyZWN0VG9FbnZpcm9ubWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBjb25kaXRpb25Gb3JtOiBGb3JtR3JvdXA7XG4gIGluY2x1ZGVFbHNlOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvLyBDYWNoZSBmb3IgdmFsdWUgY29uZmlncyB0byBhdm9pZCByZWNyZWF0aW5nIG9uIGV2ZXJ5IGNoYW5nZSBkZXRlY3Rpb25cbiAgcHJpdmF0ZSB2YWx1ZUNvbmZpZ0NhY2hlOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgfCBudWxsID0gbnVsbDtcbiAgXG4gIC8vIENhY2hlIGZvciBvcGVyYXRvciBjb25maWdzIChzdGF0aWMsIG5vIG5lZWQgdG8gcmVjcmVhdGUpXG4gIHByaXZhdGUgb3BlcmF0b3JDb25maWdDYWNoZTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHwgbnVsbCA9IG51bGw7XG4gIFxuICAvLyBDYWNoZSBmb3IgdmFsdWUgY29uZmlncyB3aXRoIG9uQ2hhbmdlIGhhbmRsZXJzIHBlciBpbmRleFxuICBwcml2YXRlIHZhbHVlQ29uZmlnc1dpdGhIYW5kbGVyczogTWFwPG51bWJlciwgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnPiA9IG5ldyBNYXAoKTtcbiAgXG4gIC8vIFRyYWNrIHNlbGVjdGVkIHRlbXBsYXRlcyBhbmQgdGhlaXIgdmFyaWFibGVzIGZvciBlYWNoIGNvbmRpdGlvbiByb3dcbiAgcHJpdmF0ZSBzZWxlY3RlZFRlbXBsYXRlczogTWFwPG51bWJlciwgQWN0aW9uVGVtcGxhdGU+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGNvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzOiBNYXA8bnVtYmVyLCBhbnlbXT4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgY29uZGl0aW9uVmFyaWFibGVzRm9ybXM6IE1hcDxudW1iZXIsIEZvcm1BcnJheT4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgY29uZGl0aW9uVXBkYXRlZEh0bWxHcmFtbWFyOiBNYXA8bnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcCgpOyAvLyBVcGRhdGVkIEhUTUwgZ3JhbW1hciBwZXIgY29uZGl0aW9uXG4gIFxuICAvLyBBZHZhbmNlZCBzZXR0aW5ncyB2YXJpYWJsZXMgcGVyIGNvbmRpdGlvblxuICBwcml2YXRlIGNvbmRpdGlvbkFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM6IE1hcDxudW1iZXIsIGFueVtdPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBjb25kaXRpb25BZHZhbmNlZFZhcmlhYmxlc0Zvcm1zOiBNYXA8bnVtYmVyLCBGb3JtQXJyYXk+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGNvbmRpdGlvbkFkdmFuY2VkRXhwYW5kZWQ6IE1hcDxudW1iZXIsIGJvb2xlYW4+ID0gbmV3IE1hcCgpO1xuICBcbiAgLy8gQ2FjaGUgZm9yIGNvbmRpdGlvbiBmb3JtIGdyb3VwcyB0byBhdm9pZCByZXBlYXRlZCBsb29rdXBzXG4gIHByaXZhdGUgY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGU6IE1hcDxudW1iZXIsIEZvcm1Hcm91cD4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHRoaXMuY29uZGl0aW9uRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY29uZGl0aW9uczogdGhpcy5mYi5hcnJheShbXSksXG4gICAgICBpbmNsdWRlRWxzZTogW2ZhbHNlXVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gQWRkIGluaXRpYWwgY29uZGl0aW9uIHJvd1xuICAgIHRoaXMuYWRkQ29uZGl0aW9uKFwiQ09ORElUSU9OX0lGXCIpO1xuICAgIC8vIEluaXRpYWxpemUgY29uZmlnIGNhY2hlc1xuICAgIHRoaXMudXBkYXRlVmFsdWVDb25maWdDYWNoZSgpO1xuICAgIHRoaXMudXBkYXRlT3BlcmF0b3JDb25maWdDYWNoZSgpO1xuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIFJlZ2VuZXJhdGUgdmFsdWUgY29uZmlnIGNhY2hlIHdoZW4gY29uZGl0aW9uVGVtcGxhdGVzIGNoYW5nZXNcbiAgICBpZiAoY2hhbmdlc1snY29uZGl0aW9uVGVtcGxhdGVzJ10gJiYgIWNoYW5nZXNbJ2NvbmRpdGlvblRlbXBsYXRlcyddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlQ29uZmlnQ2FjaGUoKTtcbiAgICAgIC8vIENsZWFyIHZhbHVlIGNvbmZpZ3Mgd2l0aCBoYW5kbGVycyBzaW5jZSBiYXNlIGNvbmZpZyBjaGFuZ2VkXG4gICAgICB0aGlzLnZhbHVlQ29uZmlnc1dpdGhIYW5kbGVycy5jbGVhcigpO1xuICAgIH1cbiAgICAvLyBNYXJrIGZvciBjaGVjayBzaW5jZSB3ZSdyZSB1c2luZyBPblB1c2hcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSB1cGRhdGVPcGVyYXRvckNvbmZpZ0NhY2hlKCk6IHZvaWQge1xuICAgIHRoaXMub3BlcmF0b3JDb25maWdDYWNoZSA9IHtcbiAgICAgIGtleTogJ29wZXJhdG9yJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IG9wZXJhdG9yJyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgb3B0aW9uczogdGhpcy5vcGVyYXRvck9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbnNGb3JtQXJyYXkoKTogRm9ybUFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5jb25kaXRpb25Gb3JtLmdldCgnY29uZGl0aW9ucycpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIGFkZENvbmRpdGlvbihjb25kaXRpb25UeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb25kaXRpb25Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZmllbGQ6IFtjb25kaXRpb25UeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG9wZXJhdG9yOiBbJ2VxdWFscycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgdmFsdWU6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSwgLy8gV2lsbCBzdG9yZSB0ZW1wbGF0ZSBJRCwgdGhlbiBtYXAgdG8gQWN0aW9uVGVtcGxhdGVcbiAgICAgIGRlc2NyaXB0aW9uOiBbJyddLFxuICAgICAgbWV0YWRhdGE6IFsnJ10sXG4gICAgfSk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbmRpdGlvbnNGb3JtQXJyYXkubGVuZ3RoO1xuICAgIHRoaXMuY29uZGl0aW9uc0Zvcm1BcnJheS5wdXNoKGNvbmRpdGlvbkdyb3VwKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHZhcmlhYmxlcyBmb3JtIGZvciB0aGlzIGNvbmRpdGlvbiAoRm9ybUFycmF5KVxuICAgIHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuc2V0KGluZGV4LCB0aGlzLmZiLmFycmF5KFtdKSk7XG4gICAgXG4gICAgLy8gQ2FjaGUgdGhlIGZvcm0gZ3JvdXBcbiAgICB0aGlzLmNvbmRpdGlvbkZvcm1Hcm91cENhY2hlLnNldChpbmRleCwgY29uZGl0aW9uR3JvdXApO1xuICAgIFxuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVtb3ZlQ29uZGl0aW9uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25kaXRpb25zRm9ybUFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uc0Zvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XG4gICAgICAvLyBDbGVhbiB1cCBhc3NvY2lhdGVkIGRhdGFcbiAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGUuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMudmFsdWVDb25maWdzV2l0aEhhbmRsZXJzLmRlbGV0ZShpbmRleCk7XG4gICAgICBcbiAgICAgIC8vIFJlaW5kZXggcmVtYWluaW5nIGNvbmRpdGlvbnNcbiAgICAgIHRoaXMucmVpbmRleENvbmRpdGlvbkRhdGEoaW5kZXgpO1xuICAgICAgXG4gICAgICAvLyBNYXJrIGZvciBjaGVjayBzaW5jZSB3ZSdyZSB1c2luZyBPblB1c2hcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuICBcbiAgcHJpdmF0ZSByZWluZGV4Q29uZGl0aW9uRGF0YShyZW1vdmVkSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIENyZWF0ZSBuZXcgbWFwcyB3aXRoIHJlaW5kZXhlZCBkYXRhXG4gICAgY29uc3QgbmV3U2VsZWN0ZWRUZW1wbGF0ZXMgPSBuZXcgTWFwPG51bWJlciwgQWN0aW9uVGVtcGxhdGU+KCk7XG4gICAgY29uc3QgbmV3VGVtcGxhdGVWYXJpYWJsZXMgPSBuZXcgTWFwPG51bWJlciwgYW55W10+KCk7XG4gICAgY29uc3QgbmV3VmFyaWFibGVzRm9ybXMgPSBuZXcgTWFwPG51bWJlciwgRm9ybUFycmF5PigpO1xuICAgIGNvbnN0IG5ld0Zvcm1Hcm91cENhY2hlID0gbmV3IE1hcDxudW1iZXIsIEZvcm1Hcm91cD4oKTtcbiAgICBjb25zdCBuZXdWYWx1ZUNvbmZpZ3MgPSBuZXcgTWFwPG51bWJlciwgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnPigpO1xuICAgIGNvbnN0IG5ld1VwZGF0ZWRIdG1sR3JhbW1hciA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG4gICAgY29uc3QgbmV3QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyA9IG5ldyBNYXA8bnVtYmVyLCBhbnlbXT4oKTtcbiAgICBjb25zdCBuZXdBZHZhbmNlZFZhcmlhYmxlc0Zvcm1zID0gbmV3IE1hcDxudW1iZXIsIEZvcm1BcnJheT4oKTtcbiAgICBjb25zdCBuZXdBZHZhbmNlZEV4cGFuZGVkID0gbmV3IE1hcDxudW1iZXIsIGJvb2xlYW4+KCk7XG4gICAgXG4gICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlcy5mb3JFYWNoKCh0ZW1wbGF0ZSwgb2xkSW5kZXgpID0+IHtcbiAgICAgIGlmIChvbGRJbmRleCA8IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdTZWxlY3RlZFRlbXBsYXRlcy5zZXQob2xkSW5kZXgsIHRlbXBsYXRlKTtcbiAgICAgIH0gZWxzZSBpZiAob2xkSW5kZXggPiByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3U2VsZWN0ZWRUZW1wbGF0ZXMuc2V0KG9sZEluZGV4IC0gMSwgdGVtcGxhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZm9yRWFjaCgodmFyaWFibGVzLCBvbGRJbmRleCkgPT4ge1xuICAgICAgaWYgKG9sZEluZGV4IDwgcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIG5ld1RlbXBsYXRlVmFyaWFibGVzLnNldChvbGRJbmRleCwgdmFyaWFibGVzKTtcbiAgICAgIH0gZWxzZSBpZiAob2xkSW5kZXggPiByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3VGVtcGxhdGVWYXJpYWJsZXMuc2V0KG9sZEluZGV4IC0gMSwgdmFyaWFibGVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLmNvbmRpdGlvblZhcmlhYmxlc0Zvcm1zLmZvckVhY2goKGZvcm0sIG9sZEluZGV4KSA9PiB7XG4gICAgICBpZiAob2xkSW5kZXggPCByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3VmFyaWFibGVzRm9ybXMuc2V0KG9sZEluZGV4LCBmb3JtKTtcbiAgICAgIH0gZWxzZSBpZiAob2xkSW5kZXggPiByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3VmFyaWFibGVzRm9ybXMuc2V0KG9sZEluZGV4IC0gMSwgZm9ybSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5jb25kaXRpb25Gb3JtR3JvdXBDYWNoZS5mb3JFYWNoKChmb3JtR3JvdXAsIG9sZEluZGV4KSA9PiB7XG4gICAgICBpZiAob2xkSW5kZXggPCByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3Rm9ybUdyb3VwQ2FjaGUuc2V0KG9sZEluZGV4LCBmb3JtR3JvdXApO1xuICAgICAgfSBlbHNlIGlmIChvbGRJbmRleCA+IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdGb3JtR3JvdXBDYWNoZS5zZXQob2xkSW5kZXggLSAxLCBmb3JtR3JvdXApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMudmFsdWVDb25maWdzV2l0aEhhbmRsZXJzLmZvckVhY2goKGNvbmZpZywgb2xkSW5kZXgpID0+IHtcbiAgICAgIGlmIChvbGRJbmRleCA8IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdWYWx1ZUNvbmZpZ3Muc2V0KG9sZEluZGV4LCBjb25maWcpO1xuICAgICAgfSBlbHNlIGlmIChvbGRJbmRleCA+IHJlbW92ZWRJbmRleCkge1xuICAgICAgICAvLyBSZWNyZWF0ZSBjb25maWcgd2l0aCBuZXcgaW5kZXggZm9yIG9uQ2hhbmdlIGhhbmRsZXJcbiAgICAgICAgY29uc3QgbmV3Q29uZmlnID0ge1xuICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25UZW1wbGF0ZVZhbHVlQ2hhbmdlKG9sZEluZGV4IC0gMSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbmV3VmFsdWVDb25maWdzLnNldChvbGRJbmRleCAtIDEsIG5ld0NvbmZpZyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5jb25kaXRpb25VcGRhdGVkSHRtbEdyYW1tYXIuZm9yRWFjaCgoZ3JhbW1hciwgb2xkSW5kZXgpID0+IHtcbiAgICAgIGlmIChvbGRJbmRleCA8IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdVcGRhdGVkSHRtbEdyYW1tYXIuc2V0KG9sZEluZGV4LCBncmFtbWFyKTtcbiAgICAgIH0gZWxzZSBpZiAob2xkSW5kZXggPiByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3VXBkYXRlZEh0bWxHcmFtbWFyLnNldChvbGRJbmRleCAtIDEsIGdyYW1tYXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuY29uZGl0aW9uQWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5mb3JFYWNoKCh2YXJpYWJsZXMsIG9sZEluZGV4KSA9PiB7XG4gICAgICBpZiAob2xkSW5kZXggPCByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5zZXQob2xkSW5kZXgsIHZhcmlhYmxlcyk7XG4gICAgICB9IGVsc2UgaWYgKG9sZEluZGV4ID4gcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIG5ld0FkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuc2V0KG9sZEluZGV4IC0gMSwgdmFyaWFibGVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuZm9yRWFjaCgoZm9ybSwgb2xkSW5kZXgpID0+IHtcbiAgICAgIGlmIChvbGRJbmRleCA8IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdBZHZhbmNlZFZhcmlhYmxlc0Zvcm1zLnNldChvbGRJbmRleCwgZm9ybSk7XG4gICAgICB9IGVsc2UgaWYgKG9sZEluZGV4ID4gcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIG5ld0FkdmFuY2VkVmFyaWFibGVzRm9ybXMuc2V0KG9sZEluZGV4IC0gMSwgZm9ybSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5jb25kaXRpb25BZHZhbmNlZEV4cGFuZGVkLmZvckVhY2goKGV4cGFuZGVkLCBvbGRJbmRleCkgPT4ge1xuICAgICAgaWYgKG9sZEluZGV4IDwgcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIG5ld0FkdmFuY2VkRXhwYW5kZWQuc2V0KG9sZEluZGV4LCBleHBhbmRlZCk7XG4gICAgICB9IGVsc2UgaWYgKG9sZEluZGV4ID4gcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIG5ld0FkdmFuY2VkRXhwYW5kZWQuc2V0KG9sZEluZGV4IC0gMSwgZXhwYW5kZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMgPSBuZXdTZWxlY3RlZFRlbXBsYXRlcztcbiAgICB0aGlzLmNvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzID0gbmV3VGVtcGxhdGVWYXJpYWJsZXM7XG4gICAgdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3JtcyA9IG5ld1ZhcmlhYmxlc0Zvcm1zO1xuICAgIHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGUgPSBuZXdGb3JtR3JvdXBDYWNoZTtcbiAgICB0aGlzLnZhbHVlQ29uZmlnc1dpdGhIYW5kbGVycyA9IG5ld1ZhbHVlQ29uZmlncztcbiAgICB0aGlzLmNvbmRpdGlvblVwZGF0ZWRIdG1sR3JhbW1hciA9IG5ld1VwZGF0ZWRIdG1sR3JhbW1hcjtcbiAgICB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgPSBuZXdBZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzO1xuICAgIHRoaXMuY29uZGl0aW9uQWR2YW5jZWRWYXJpYWJsZXNGb3JtcyA9IG5ld0FkdmFuY2VkVmFyaWFibGVzRm9ybXM7XG4gICAgdGhpcy5jb25kaXRpb25BZHZhbmNlZEV4cGFuZGVkID0gbmV3QWR2YW5jZWRFeHBhbmRlZDtcbiAgfVxuXG4gIGdldE9wZXJhdG9yQ29uZmlnKGluZGV4OiBudW1iZXIpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIC8vIFJldHVybiBjYWNoZWQgY29uZmlnIChzdGF0aWMsIHNhbWUgZm9yIGFsbCBjb25kaXRpb25zKVxuICAgIGlmICghdGhpcy5vcGVyYXRvckNvbmZpZ0NhY2hlKSB7XG4gICAgICB0aGlzLnVwZGF0ZU9wZXJhdG9yQ29uZmlnQ2FjaGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3JDb25maWdDYWNoZSE7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlQ29uZmlnQ2FjaGUoKTogdm9pZCB7XG4gICAgLy8gQ29udmVydCBBY3Rpb25UZW1wbGF0ZVtdIHRvIFNlbGVjdE9wdGlvbltdXG4gICAgY29uc3QgdGVtcGxhdGVPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9ICh0aGlzLmNvbmRpdGlvblRlbXBsYXRlcyB8fCBbXSkubWFwKHRlbXBsYXRlID0+ICh7XG4gICAgICBpZDogdGVtcGxhdGUuaWQ/LnRvU3RyaW5nKCkgfHwgdGVtcGxhdGUuZGlzcGxheU5hbWUgfHwgJycsXG4gICAgICB2YWx1ZTogdGVtcGxhdGUuaWQ/LnRvU3RyaW5nKCkgfHwgdGVtcGxhdGUuZGlzcGxheU5hbWUgfHwgJycsXG4gICAgICBuYW1lOiB0ZW1wbGF0ZS5odG1sR3JhbW1hciB8fCB0ZW1wbGF0ZS5uYXR1cmFsVGV4dCB8fCAnJyxcbiAgICAgIGxhYmVsOiB0ZW1wbGF0ZS5odG1sR3JhbW1hciB8fCB0ZW1wbGF0ZS5uYXR1cmFsVGV4dCB8fCAnJ1xuICAgIH0pKTtcblxuICAgIHRoaXMudmFsdWVDb25maWdDYWNoZSA9IHtcbiAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IFRlbXBsYXRlKicsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgZGlzcGxheUxhYmVsQXNJbm5lckh0bWw6IHRydWUsXG4gICAgICBvcHRpb25zOiB0ZW1wbGF0ZU9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0VmFsdWVDb25maWcoaW5kZXg6IG51bWJlcik6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgLy8gUmV0dXJuIGNhY2hlZCBjb25maWcgd2l0aCBoYW5kbGVyIHRvIGF2b2lkIHJlY3JlYXRpbmcgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvblxuICAgIGlmICh0aGlzLnZhbHVlQ29uZmlnc1dpdGhIYW5kbGVycy5oYXMoaW5kZXgpKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZUNvbmZpZ3NXaXRoSGFuZGxlcnMuZ2V0KGluZGV4KSE7XG4gICAgfVxuICAgIFxuICAgIC8vIEVuc3VyZSBiYXNlIGNvbmZpZyBjYWNoZSBleGlzdHNcbiAgICBpZiAoIXRoaXMudmFsdWVDb25maWdDYWNoZSkge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZUNvbmZpZ0NhY2hlKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSBhbmQgY2FjaGUgY29uZmlnIHdpdGggb25DaGFuZ2UgaGFuZGxlciBmb3IgdGhpcyBzcGVjaWZpYyBpbmRleFxuICAgIGNvbnN0IGNvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgICAgLi4udGhpcy52YWx1ZUNvbmZpZ0NhY2hlISxcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uVGVtcGxhdGVWYWx1ZUNoYW5nZShpbmRleCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgdGhpcy52YWx1ZUNvbmZpZ3NXaXRoSGFuZGxlcnMuc2V0KGluZGV4LCBjb25maWcpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgXG4gIG9uVGVtcGxhdGVWYWx1ZUNoYW5nZShpbmRleDogbnVtYmVyLCB0ZW1wbGF0ZUlkOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBGaW5kIHRoZSBzZWxlY3RlZCB0ZW1wbGF0ZVxuICAgIGNvbnN0IHNlbGVjdGVkVGVtcGxhdGUgPSB0aGlzLmNvbmRpdGlvblRlbXBsYXRlcy5maW5kKFxuICAgICAgdCA9PiAodC5pZD8udG9TdHJpbmcoKSA9PT0gdGVtcGxhdGVJZCkgfHwgKHQuZGlzcGxheU5hbWUgPT09IHRlbXBsYXRlSWQpXG4gICAgKTtcbiAgICBcbiAgICBpZiAoc2VsZWN0ZWRUZW1wbGF0ZSAmJiB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzKSB7XG4gICAgICAvLyBTdG9yZSBzZWxlY3RlZCB0ZW1wbGF0ZVxuICAgICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlcy5zZXQoaW5kZXgsIHNlbGVjdGVkVGVtcGxhdGUpO1xuICAgICAgXG4gICAgICAvLyBHZXQgdGVtcGxhdGUgdmFyaWFibGVzIHVzaW5nIHRoZSBwcm92aWRlZCBmdW5jdGlvblxuICAgICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyhzZWxlY3RlZFRlbXBsYXRlKTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuc2V0KGluZGV4LCB2YXJpYWJsZXMpO1xuICAgICAgLy8gQnVpbGQgZm9ybSBmb3IgdGVtcGxhdGUgdmFyaWFibGVzXG4gICAgICB0aGlzLmJ1aWxkQ29uZGl0aW9uVmFyaWFibGVzRm9ybShpbmRleCwgdmFyaWFibGVzKTtcbiAgICAgIC8vIEluaXRpYWxpemUgdXBkYXRlZCBIVE1MIGdyYW1tYXJcbiAgICAgIHRoaXMudXBkYXRlQ29uZGl0aW9uSHRtbEdyYW1tYXIoaW5kZXgpO1xuICAgICAgXG4gICAgICAvLyBJbml0aWFsaXplIGFkdmFuY2VkIHNldHRpbmdzIHZhcmlhYmxlc1xuICAgICAgaWYgKHRoaXMuc2V0QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcykge1xuICAgICAgICBjb25zdCBhZHZhbmNlZFZhcmlhYmxlcyA9IHRoaXMuc2V0QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyhzZWxlY3RlZFRlbXBsYXRlKTtcbiAgICAgICAgdGhpcy5jb25kaXRpb25BZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLnNldChpbmRleCwgYWR2YW5jZWRWYXJpYWJsZXMpO1xuICAgICAgICB0aGlzLmJ1aWxkQ29uZGl0aW9uQWR2YW5jZWRWYXJpYWJsZXNGb3JtKGluZGV4LCBhZHZhbmNlZFZhcmlhYmxlcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENsZWFyIHRlbXBsYXRlIGFuZCB2YXJpYWJsZXMgaWYgbm8gdGVtcGxhdGUgc2VsZWN0ZWRcbiAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVXBkYXRlZEh0bWxHcmFtbWFyLmRlbGV0ZShpbmRleCk7XG4gICAgICB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuZ2V0KGluZGV4KTtcbiAgICAgIGlmIChmb3JtQXJyYXkpIHtcbiAgICAgICAgd2hpbGUgKGZvcm1BcnJheS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICBmb3JtQXJyYXkucmVtb3ZlQXQoMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGFkdmFuY2VkRm9ybUFycmF5ID0gdGhpcy5jb25kaXRpb25BZHZhbmNlZFZhcmlhYmxlc0Zvcm1zLmdldChpbmRleCk7XG4gICAgICBpZiAoYWR2YW5jZWRGb3JtQXJyYXkpIHtcbiAgICAgICAgd2hpbGUgKGFkdmFuY2VkRm9ybUFycmF5Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIGFkdmFuY2VkRm9ybUFycmF5LnJlbW92ZUF0KDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIFxuICBwcml2YXRlIGJ1aWxkQ29uZGl0aW9uVmFyaWFibGVzRm9ybShpbmRleDogbnVtYmVyLCB2YXJpYWJsZXM6IGFueVtdKTogdm9pZCB7XG4gICAgbGV0IGZvcm1BcnJheSA9IHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuZ2V0KGluZGV4KTtcbiAgICBpZiAoIWZvcm1BcnJheSkge1xuICAgICAgZm9ybUFycmF5ID0gdGhpcy5mYi5hcnJheShbXSk7XG4gICAgICB0aGlzLmNvbmRpdGlvblZhcmlhYmxlc0Zvcm1zLnNldChpbmRleCwgZm9ybUFycmF5KTtcbiAgICB9XG4gICAgXG4gICAgLy8gRW5zdXJlIGZvcm1BcnJheSBpcyBub3QgdW5kZWZpbmVkIChUeXBlU2NyaXB0IGd1YXJkKVxuICAgIGlmICghZm9ybUFycmF5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIFN0b3JlIHJlZmVyZW5jZSB0byBhdm9pZCBUeXBlU2NyaXB0IGlzc3VlcyBpbiBmb3JFYWNoIGNhbGxiYWNrXG4gICAgLy8gVHlwZVNjcmlwdCBrbm93cyBmb3JtQXJyYXkgaXMgZGVmaW5lZCBoZXJlIGR1ZSB0byB0aGUgZWFybHkgcmV0dXJuIGFib3ZlXG4gICAgY29uc3QgZm9ybUFycmF5UmVmOiBGb3JtQXJyYXkgPSBmb3JtQXJyYXk7XG4gICAgXG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgZm9ybSBhcnJheVxuICAgIHdoaWxlIChmb3JtQXJyYXlSZWYubGVuZ3RoICE9PSAwKSB7XG4gICAgICBmb3JtQXJyYXlSZWYucmVtb3ZlQXQoMCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEFkZCBmb3JtIGdyb3VwcyBmb3IgZWFjaCB2YXJpYWJsZVxuICAgIHZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIC8vIEhhbmRsZSBib29sZWFuIHZhcmlhYmxlcyAtIHVzZSBib29sZWFuIHZhbHVlLCBvdGhlcnMgdXNlIHN0cmluZ1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nIFxuICAgICAgICA/ICh2YXJpYWJsZS52YWx1ZSA9PT0gdHJ1ZSB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gJ3RydWUnIHx8IHZhcmlhYmxlLnZhbHVlID09PSAxKVxuICAgICAgICA6ICh2YXJpYWJsZS52YWx1ZSB8fCAnJyk7XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBhIEZvcm1Hcm91cCBmb3IgZWFjaCB2YXJpYWJsZSB3aXRoIG5hbWUgYW5kIHZhbHVlXG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZS5uYW1lXSxcbiAgICAgICAgdmFsdWU6IFtkZWZhdWx0VmFsdWVdLFxuICAgICAgICB0eXBlOiBbdmFyaWFibGUudHlwZSB8fCAnc3RyaW5nJ10sXG4gICAgICAgIGxhYmVsOiBbdmFyaWFibGUubGFiZWwgfHwgJyddLFxuICAgICAgICBvcHRpb25zOiBbdmFyaWFibGUub3B0aW9ucyB8fCBbXV1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBBZGQgZGF0YVR5cGUgY29udHJvbCBmb3IgdGVzdC1kYXRhIHZhcmlhYmxlcyBpZiBuZWVkZWRcbiAgICAgIGNvbnN0IGxhYmVsID0gdmFyaWFibGUubGFiZWw/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgICBpZiAobGFiZWwgPT09ICd0ZXN0LWRhdGEnIHx8IGxhYmVsID09PSAnc291cmNlLXZhbHVlJyB8fCBsYWJlbCA9PT0gJ3RhcmdldC12YWx1ZScgfHwgXG4gICAgICAgICAgbGFiZWwgPT09ICdzb3VyY2VfdmFsdWUnIHx8IGxhYmVsID09PSAndGFyZ2V0X3ZhbHVlJykge1xuICAgICAgICAvLyBQYXJzZSB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGRhdGEgdHlwZVxuICAgICAgICBjb25zdCB2YWx1ZVN0ciA9IFN0cmluZyhkZWZhdWx0VmFsdWUgfHwgJycpO1xuICAgICAgICBsZXQgZGF0YVR5cGUgPSAncGxhaW4tdGV4dCc7XG4gICAgICAgIGlmICh2YWx1ZVN0ci5zdGFydHNXaXRoKCdAfCcpICYmIHZhbHVlU3RyLmVuZHNXaXRoKCd8JykpIHtcbiAgICAgICAgICBkYXRhVHlwZSA9ICdwYXJhbWV0ZXInO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlU3RyLnN0YXJ0c1dpdGgoJyR8JykgJiYgdmFsdWVTdHIuZW5kc1dpdGgoJ3wnKSkge1xuICAgICAgICAgIGRhdGFUeXBlID0gJ3J1bnRpbWUnO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlU3RyLnN0YXJ0c1dpdGgoJyp8JykgJiYgdmFsdWVTdHIuZW5kc1dpdGgoJ3wnKSkge1xuICAgICAgICAgIGRhdGFUeXBlID0gJ2Vudmlyb25tZW50JztcbiAgICAgICAgfVxuICAgICAgICB2YXJpYWJsZUdyb3VwLmFkZENvbnRyb2woJ2RhdGFUeXBlJywgbmV3IEZvcm1Db250cm9sKGRhdGFUeXBlKSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGZvcm1BcnJheVJlZi5wdXNoKHZhcmlhYmxlR3JvdXApO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdXBkYXRlZCBIVE1MIGdyYW1tYXIgZm9yIHRoaXMgY29uZGl0aW9uXG4gICAgdGhpcy51cGRhdGVDb25kaXRpb25IdG1sR3JhbW1hcihpbmRleCk7XG4gIH1cbiAgXG4gIGdldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzKGluZGV4OiBudW1iZXIpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZ2V0KGluZGV4KSB8fCBbXTtcbiAgfVxuICBcbiAgZ2V0Q29uZGl0aW9uVmFyaWFibGVzRm9ybShpbmRleDogbnVtYmVyKTogRm9ybUFycmF5IHtcbiAgICBsZXQgZm9ybUFycmF5ID0gdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3Jtcy5nZXQoaW5kZXgpO1xuICAgIGlmICghZm9ybUFycmF5KSB7XG4gICAgICBmb3JtQXJyYXkgPSB0aGlzLmZiLmFycmF5KFtdKTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuc2V0KGluZGV4LCBmb3JtQXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybUFycmF5O1xuICB9XG4gIFxuICBnZXRDb25kaXRpb25Gb3JtR3JvdXBBdChpbmRleDogbnVtYmVyLCB2YXJpYWJsZUluZGV4OiBudW1iZXIpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZ2V0Q29uZGl0aW9uVmFyaWFibGVzRm9ybShpbmRleCk7XG4gICAgcmV0dXJuIGZvcm1BcnJheS5hdCh2YXJpYWJsZUluZGV4KSBhcyBGb3JtR3JvdXA7XG4gIH1cbiAgXG4gIGdldENvbmRpdGlvblVwZGF0ZWRIdG1sR3JhbW1hcihpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMuZ2V0KGluZGV4KTtcbiAgICBpZiAoIXRlbXBsYXRlKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uVXBkYXRlZEh0bWxHcmFtbWFyLmdldChpbmRleCkgfHwgdGVtcGxhdGUuaHRtbEdyYW1tYXIgfHwgdGVtcGxhdGUubmF0dXJhbFRleHQgfHwgJyc7XG4gIH1cbiAgXG4gIGdldFNlbGVjdGVkVGVtcGxhdGUoaW5kZXg6IG51bWJlcik6IEFjdGlvblRlbXBsYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMuZ2V0KGluZGV4KSB8fCBudWxsO1xuICB9XG4gIFxuICBnZXRTZWxlY3RDb25maWdGb3JWYXJpYWJsZShpbmRleDogbnVtYmVyLCB2YXJpYWJsZTogYW55KTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICBjb25zdCBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9ICh2YXJpYWJsZS5vcHRpb25zIHx8IFtdKS5tYXAoKG9wdDogc3RyaW5nKSA9PiAoe1xuICAgICAgaWQ6IG9wdCxcbiAgICAgIHZhbHVlOiBvcHQsXG4gICAgICBuYW1lOiBvcHQsXG4gICAgICBsYWJlbDogb3B0XG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogdmFyaWFibGUubmFtZSxcbiAgICAgIHBsYWNlaG9sZGVyOiBgU2VsZWN0ICR7dmFyaWFibGUubGFiZWx9YCxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uQ29uZGl0aW9uVmFyaWFibGVWYWx1ZUNoYW5nZShpbmRleCwgdmFyaWFibGUubmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgXG4gIG9uQ29uZGl0aW9uVmFyaWFibGVWYWx1ZUNoYW5nZShjb25kaXRpb25JbmRleDogbnVtYmVyLCB2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSB0aGUgdmFyaWFibGUgaW4gdGVtcGxhdGVWYXJpYWJsZXMgYXJyYXlcbiAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmNvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzLmdldChjb25kaXRpb25JbmRleCkgfHwgW107XG4gICAgY29uc3QgdmFyaWFibGUgPSB2YXJpYWJsZXMuZmluZCh2ID0+IHYubmFtZSA9PT0gdmFyaWFibGVOYW1lKTtcbiAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgIHZhcmlhYmxlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIC8vIEFsc28gdXBkYXRlIGZvcm0gYXJyYXlcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmNvbmRpdGlvblZhcmlhYmxlc0Zvcm1zLmdldChjb25kaXRpb25JbmRleCk7XG4gICAgaWYgKGZvcm1BcnJheSkge1xuICAgICAgY29uc3QgdmFyaWFibGVJbmRleCA9IGZvcm1BcnJheS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICAgKTtcbiAgICAgIGlmICh2YXJpYWJsZUluZGV4ICE9PSAtMSkge1xuICAgICAgICBmb3JtQXJyYXkuYXQodmFyaWFibGVJbmRleCkuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBVcGRhdGUgSFRNTCBncmFtbWFyIGZvciB0aGlzIGNvbmRpdGlvblxuICAgIHRoaXMudXBkYXRlQ29uZGl0aW9uSHRtbEdyYW1tYXIoY29uZGl0aW9uSW5kZXgpO1xuICAgIFxuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIFxuICBvbkNvbmRpdGlvblZhcmlhYmxlSW5wdXRDaGFuZ2UoY29uZGl0aW9uSW5kZXg6IG51bWJlciwgdmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIHRlbXBsYXRlVmFyaWFibGVzIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5jb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcy5nZXQoY29uZGl0aW9uSW5kZXgpIHx8IFtdO1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGNvbnRyb2xcbiAgICBjb25zdCBmb3JtID0gdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3Jtcy5nZXQoY29uZGl0aW9uSW5kZXgpO1xuICAgIGlmIChmb3JtICYmIGZvcm0uZ2V0KHZhcmlhYmxlTmFtZSkpIHtcbiAgICAgIGZvcm0uZ2V0KHZhcmlhYmxlTmFtZSk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBvbkNvbmRpdGlvblZhcmlhYmxlQm9vbGVhbkNoYW5nZShjb25kaXRpb25JbmRleDogbnVtYmVyLCB2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIHRlbXBsYXRlVmFyaWFibGVzIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5jb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcy5nZXQoY29uZGl0aW9uSW5kZXgpIHx8IFtdO1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGFycmF5XG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3Jtcy5nZXQoY29uZGl0aW9uSW5kZXgpO1xuICAgIGlmICghZm9ybUFycmF5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSBmb3JtQXJyYXkuY29udHJvbHMuZmluZEluZGV4KFxuICAgICAgY29udHJvbCA9PiBjb250cm9sLmdldCgnbmFtZScpPy52YWx1ZSA9PT0gdmFyaWFibGVOYW1lXG4gICAgKTtcbiAgICBpZiAodmFyaWFibGVJbmRleCAhPT0gLTEpIHtcbiAgICAgIGZvcm1BcnJheS5hdCh2YXJpYWJsZUluZGV4KS5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBuZXcgZm9ybSBncm91cCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZU5hbWVdLFxuICAgICAgICB2YWx1ZTogW3ZhbHVlXSxcbiAgICAgICAgdHlwZTogWydib29sZWFuJ10sXG4gICAgICAgIGxhYmVsOiBbdmFyaWFibGU/LmxhYmVsIHx8ICcnXSxcbiAgICAgICAgb3B0aW9uczogW3ZhcmlhYmxlPy5vcHRpb25zIHx8IFtdXVxuICAgICAgfSk7XG4gICAgICAvLyBmb3JtQXJyYXkgaXMgZ3VhcmFudGVlZCB0byBiZSBkZWZpbmVkIGhlcmUgZHVlIHRvIHRoZSBlYXJseSByZXR1cm4gYWJvdmVcbiAgICAgIGZvcm1BcnJheS5wdXNoKHZhcmlhYmxlR3JvdXApO1xuICAgIH1cbiAgICBcbiAgICAvLyBVcGRhdGUgSFRNTCBncmFtbWFyIGZvciB0aGlzIGNvbmRpdGlvblxuICAgIHRoaXMudXBkYXRlQ29uZGl0aW9uSHRtbEdyYW1tYXIoY29uZGl0aW9uSW5kZXgpO1xuICAgIFxuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIFxuICAvKipcbiAgICogU3RyaXAgSFRNTCB0YWdzIGZyb20gYSBzdHJpbmcgZm9yIHNlYXJjaCBmdW5jdGlvbmFsaXR5XG4gICAqL1xuICBwcml2YXRlIHN0cmlwSHRtbFRhZ3MoaHRtbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWh0bWxTdHJpbmcpIHJldHVybiAnJztcbiAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgZGl2IGVsZW1lbnQgdG8gcGFyc2UgSFRNTFxuICAgIGNvbnN0IHRtcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICAgIHRtcC5pbm5lckhUTUwgPSBodG1sU3RyaW5nO1xuICAgIHJldHVybiB0bXAudGV4dENvbnRlbnQgfHwgdG1wLmlubmVyVGV4dCB8fCAnJztcbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSBIVE1MIGdyYW1tYXIgZm9yIGEgc3BlY2lmaWMgY29uZGl0aW9uIHdpdGggYWN0dWFsIHZhcmlhYmxlIHZhbHVlc1xuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVDb25kaXRpb25IdG1sR3JhbW1hcihjb25kaXRpb25JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnNlbGVjdGVkVGVtcGxhdGVzLmdldChjb25kaXRpb25JbmRleCk7XG4gICAgaWYgKCF0ZW1wbGF0ZSB8fCAhdGVtcGxhdGUuaHRtbEdyYW1tYXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgbGV0IHVwZGF0ZWRHcmFtbWFyID0gdGVtcGxhdGUuaHRtbEdyYW1tYXI7XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5jb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcy5nZXQoY29uZGl0aW9uSW5kZXgpIHx8IFtdO1xuICAgIFxuICAgIC8vIFJlcGxhY2UgcGxhY2Vob2xkZXJzIHdpdGggYWN0dWFsIHZhbHVlc1xuICAgIHZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gbmV3IFJlZ0V4cChgPHNwYW5bXj5dKmRhdGEtZXZlbnQta2V5PVwiJHt2YXJpYWJsZS5uYW1lfVwiW14+XSo+Lio/PC9zcGFuPmAsICdnaScpO1xuICAgICAgY29uc3QgdmFsdWUgPSB2YXJpYWJsZS52YWx1ZSB8fCAnJztcbiAgICAgIC8vIEVzY2FwZSBIVE1MIGluIHZhbHVlIHRvIHByZXZlbnQgWFNTXG4gICAgICBjb25zdCBlc2NhcGVkVmFsdWUgPSBTdHJpbmcodmFsdWUpLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbiAgICAgIHVwZGF0ZWRHcmFtbWFyID0gdXBkYXRlZEdyYW1tYXIucmVwbGFjZShwbGFjZWhvbGRlciwgZXNjYXBlZFZhbHVlKTtcbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLmNvbmRpdGlvblVwZGF0ZWRIdG1sR3JhbW1hci5zZXQoY29uZGl0aW9uSW5kZXgsIHVwZGF0ZWRHcmFtbWFyKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb25kaXRpb25BZHZhbmNlZFZhcmlhYmxlc0Zvcm0oaW5kZXg6IG51bWJlciwgdmFyaWFibGVzOiBhbnlbXSk6IHZvaWQge1xuICAgIGxldCBmb3JtQXJyYXkgPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuZ2V0KGluZGV4KTtcbiAgICBpZiAoIWZvcm1BcnJheSkge1xuICAgICAgZm9ybUFycmF5ID0gdGhpcy5mYi5hcnJheShbXSk7XG4gICAgICB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuc2V0KGluZGV4LCBmb3JtQXJyYXkpO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBmb3JtQXJyYXkgaXMgbm90IHVuZGVmaW5lZCAoVHlwZVNjcmlwdCBndWFyZClcbiAgICBpZiAoIWZvcm1BcnJheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFN0b3JlIHJlZmVyZW5jZSB0byBhdm9pZCBUeXBlU2NyaXB0IGlzc3VlcyBpbiBmb3JFYWNoIGNhbGxiYWNrXG4gICAgY29uc3QgZm9ybUFycmF5UmVmOiBGb3JtQXJyYXkgPSBmb3JtQXJyYXk7XG5cbiAgICAvLyBDbGVhciBleGlzdGluZyBmb3JtIGFycmF5XG4gICAgd2hpbGUgKGZvcm1BcnJheVJlZi5sZW5ndGggIT09IDApIHtcbiAgICAgIGZvcm1BcnJheVJlZi5yZW1vdmVBdCgwKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgZm9ybSBncm91cHMgZm9yIGVhY2ggYWR2YW5jZWQgdmFyaWFibGVcbiAgICB2YXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IHR5cGVzXG4gICAgICBsZXQgZGVmYXVsdFZhbHVlOiBhbnk7XG4gICAgICBpZiAodmFyaWFibGUudHlwZSA9PT0gJ3N0cl9saXN0Jykge1xuICAgICAgICAvLyBGb3Igc3RyX2xpc3QsIGNyZWF0ZSBhIEZvcm1BcnJheVxuICAgICAgICBjb25zdCB2YWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZS52YWx1ZSkgPyB2YXJpYWJsZS52YWx1ZSA6IFtdO1xuICAgICAgICBjb25zdCBmb3JtQXJyYXlWYWx1ZSA9IHRoaXMuZmIuYXJyYXkoXG4gICAgICAgICAgdmFsdWVBcnJheS5sZW5ndGggPiAwIFxuICAgICAgICAgICAgPyB2YWx1ZUFycmF5Lm1hcCgoaXRlbTogc3RyaW5nKSA9PiB0aGlzLmZiLmNvbnRyb2woaXRlbSkpXG4gICAgICAgICAgICA6IFt0aGlzLmZiLmNvbnRyb2woJycpXSAvLyBTdGFydCB3aXRoIG9uZSBlbXB0eSBjb250cm9sXG4gICAgICAgICk7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGZvcm1BcnJheVZhbHVlO1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS50eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhcmlhYmxlLnZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudmFsdWUgPT09IHRydWUgfHwgdmFyaWFibGUudmFsdWUgPT09ICd0cnVlJyB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnZhbHVlIHx8ICcnO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDcmVhdGUgYSBGb3JtR3JvdXAgZm9yIGVhY2ggdmFyaWFibGVcbiAgICAgIGNvbnN0IHZhcmlhYmxlR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgbmFtZTogW3ZhcmlhYmxlLm5hbWVdLFxuICAgICAgICB2YWx1ZTogdmFyaWFibGUudHlwZSA9PT0gJ3N0cl9saXN0JyA/IGRlZmF1bHRWYWx1ZSA6IFtkZWZhdWx0VmFsdWVdLFxuICAgICAgICB0eXBlOiBbdmFyaWFibGUudHlwZSB8fCAnc3RyaW5nJ10sXG4gICAgICAgIGxhYmVsOiBbdmFyaWFibGUubGFiZWwgfHwgJyddXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgZm9ybUFycmF5UmVmLnB1c2godmFyaWFibGVHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25kaXRpb25BZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzKGluZGV4OiBudW1iZXIpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uQWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5nZXQoaW5kZXgpIHx8IFtdO1xuICB9XG5cbiAgZ2V0Q29uZGl0aW9uQWR2YW5jZWRWYXJpYWJsZXNGb3JtKGluZGV4OiBudW1iZXIpOiBGb3JtQXJyYXkge1xuICAgIGxldCBmb3JtQXJyYXkgPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuZ2V0KGluZGV4KTtcbiAgICBpZiAoIWZvcm1BcnJheSkge1xuICAgICAgZm9ybUFycmF5ID0gdGhpcy5mYi5hcnJheShbXSk7XG4gICAgICB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuc2V0KGluZGV4LCBmb3JtQXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybUFycmF5O1xuICB9XG5cbiAgZ2V0Q29uZGl0aW9uQWR2YW5jZWRFeHBhbmRlZChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uQWR2YW5jZWRFeHBhbmRlZC5nZXQoaW5kZXgpIHx8IGZhbHNlO1xuICB9XG5cbiAgdG9nZ2xlQ29uZGl0aW9uQWR2YW5jZWQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkRXhwYW5kZWQuZ2V0KGluZGV4KSB8fCBmYWxzZTtcbiAgICB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkRXhwYW5kZWQuc2V0KGluZGV4LCAhY3VycmVudCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKGNvbmRpdGlvbkluZGV4OiBudW1iZXIsIHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSB0aGUgdmFyaWFibGUgaW4gYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyBhcnJheVxuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuY29uZGl0aW9uQWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5nZXQoY29uZGl0aW9uSW5kZXgpIHx8IFtdO1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGVJbmRleCA9IHRoaXMuY29uZGl0aW9uQWR2YW5jZWRWYXJpYWJsZXNGb3Jtcy5nZXQoY29uZGl0aW9uSW5kZXgpPy5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wuZ2V0KCduYW1lJyk/LnZhbHVlID09PSB2YXJpYWJsZU5hbWVcbiAgICApO1xuICAgIGlmICh2YXJpYWJsZUluZGV4ICE9PSB1bmRlZmluZWQgJiYgdmFyaWFibGVJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uQWR2YW5jZWRWYXJpYWJsZXNGb3Jtcy5nZXQoY29uZGl0aW9uSW5kZXgpPy5hdCh2YXJpYWJsZUluZGV4KS5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgb25Db25kaXRpb25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UoY29uZGl0aW9uSW5kZXg6IG51bWJlciwgdmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgYXJyYXlcbiAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZ2V0KGNvbmRpdGlvbkluZGV4KSB8fCBbXTtcbiAgICBjb25zdCB2YXJpYWJsZSA9IHZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgLy8gQWxzbyB1cGRhdGUgZm9ybSBhcnJheVxuICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuZ2V0KGNvbmRpdGlvbkluZGV4KT8uY29udHJvbHMuZmluZEluZGV4KFxuICAgICAgY29udHJvbCA9PiBjb250cm9sLmdldCgnbmFtZScpPy52YWx1ZSA9PT0gdmFyaWFibGVOYW1lXG4gICAgKTtcbiAgICBpZiAodmFyaWFibGVJbmRleCAhPT0gdW5kZWZpbmVkICYmIHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuZ2V0KGNvbmRpdGlvbkluZGV4KT8uYXQodmFyaWFibGVJbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgICAgLy8gRm9yIHN0cl9saXN0LCB0aGUgRm9ybUFycmF5IGlzIGFscmVhZHkgbWFuYWdlZCBpbnNpZGUgQWR2YW5jZWRWYXJpYWJsZXNGb3JtQ29tcG9uZW50LFxuICAgICAgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byByZWJ1aWxkIG9yIHVwZGF0ZSBpdCBoZXJlIHRvIGF2b2lkIGZvY3VzIGxvc3MuXG4gICAgICBpZiAodmFyaWFibGU/LnR5cGUgIT09ICdzdHJfbGlzdCcpIHtcbiAgICAgICAgZm9ybUdyb3VwPy5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29uZGl0aW9uRm9ybUdyb3VwKGluZGV4OiBudW1iZXIpOiBGb3JtR3JvdXAge1xuICAgIC8vIFVzZSBjYWNoZSB0byBhdm9pZCByZXBlYXRlZCBsb29rdXBzXG4gICAgaWYgKHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGUuaGFzKGluZGV4KSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGUuZ2V0KGluZGV4KSE7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuY29uZGl0aW9uc0Zvcm1BcnJheS5hdChpbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGUuc2V0KGluZGV4LCBmb3JtR3JvdXApO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybUdyb3VwO1xuICB9XG4gIFxuICBnZXRDb25kaXRpb25GaWVsZFZhbHVlKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZ2V0Q29uZGl0aW9uRm9ybUdyb3VwKGluZGV4KTtcbiAgICByZXR1cm4gZm9ybUdyb3VwPy5nZXQoJ2ZpZWxkJyk/LnZhbHVlIHx8ICcnO1xuICB9XG4gIFxuICBpc0NvbmRpdGlvbklmKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb25kaXRpb25GaWVsZFZhbHVlKGluZGV4KSA9PT0gJ0NPTkRJVElPTl9JRic7XG4gIH1cbiAgXG4gIGlzQ29uZGl0aW9uRWxzZUlmKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb25kaXRpb25GaWVsZFZhbHVlKGluZGV4KSA9PT0gJ0NPTkRJVElPTl9FTFNFX0lGJztcbiAgfVxuICBcbiAgZ2V0Q29uZGl0aW9uTGFiZWwoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuZ2V0Q29uZGl0aW9uRmllbGRWYWx1ZShpbmRleCk7XG4gICAgaWYgKGZpZWxkVmFsdWUgPT09ICdDT05ESVRJT05fSUYnKSByZXR1cm4gJ0lGJztcbiAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJ0NPTkRJVElPTl9FTFNFX0lGJykgcmV0dXJuICdFTFNFIElGJztcbiAgICByZXR1cm4gJ0VMU0UnO1xuICB9XG4gIFxuICB0cmFja0J5Q29uZGl0aW9uSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgb25JbmNsdWRlRWxzZUNoYW5nZShjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pbmNsdWRlRWxzZSA9IGNoZWNrZWQ7XG4gICAgdGhpcy5jb25kaXRpb25Gb3JtLnBhdGNoVmFsdWUoeyBpbmNsdWRlRWxzZTogY2hlY2tlZCB9KTtcbiAgICBcbiAgICAvLyBNYXJrIGZvciBjaGVjayBzaW5jZSB3ZSdyZSB1c2luZyBPblB1c2hcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVyYWxsIGZvcm0gdmFsaWRpdHkgZm9yIGNvbmRpdGlvbiBzdGVwLlxuICAgKiBJbiBhZGRpdGlvbiB0byBBbmd1bGFyIGZvcm0gdmFsaWRpdHksIHdlIG11c3QgZW5zdXJlIHRoYXQgZm9yIGFueSB0ZW1wbGF0ZSB2YXJpYWJsZVxuICAgKiB3aXRoIGRhdGFLZXkgJ3Rlc3RfZGF0YScgfCAnc291cmNlX3ZhbHVlJyB8ICd0YXJnZXRfdmFsdWUnIGFuZCBkYXRhVHlwZSAncGxhaW4tdGV4dCdcbiAgICogb3IgJ3J1bnRpbWUnLCB0aGUgdmFsdWUgaXMgbm9uLWVtcHR5LlxuICAgKi9cbiAgaXNGb3JtVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgLy8gRmlyc3QsIHJlbHkgb24gdGhlIHJlYWN0aXZlIGZvcm0gdmFsaWRpdHkgZm9yIGJhc2UgY29uZGl0aW9uIGZpZWxkc1xuICAgIGlmICghdGhpcy5jb25kaXRpb25Gb3JtLnZhbGlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhlbiBlbmZvcmNlIHRoZSBzYW1lIHRlc3QtZGF0YSB2YWxpZGF0aW9uIHJ1bGUgdXNlZCBpbiBhY3Rpb24gYnVpbGRlclxuICAgIGxldCBjdXN0b21WYXJpYWJsZXNWYWxpZCA9IHRydWU7XG5cbiAgICB0aGlzLmNvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzLmZvckVhY2goKHZhcmlhYmxlcykgPT4ge1xuICAgICAgaWYgKCF2YXJpYWJsZXMgfHwgIXZhcmlhYmxlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbGxWYWxpZEZvckNvbmRpdGlvbiA9IHZhcmlhYmxlcy5ldmVyeSgodmFyaWFibGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdmFyaWFibGUgJiZcbiAgICAgICAgICAodmFyaWFibGUuZGF0YUtleSA9PT0gJ3Rlc3RfZGF0YScgfHxcbiAgICAgICAgICAgIHZhcmlhYmxlLmRhdGFLZXkgPT09ICdzb3VyY2VfdmFsdWUnIHx8XG4gICAgICAgICAgICB2YXJpYWJsZS5kYXRhS2V5ID09PSAndGFyZ2V0X3ZhbHVlJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHZhcmlhYmxlLmRhdGFUeXBlID09PSAncGxhaW4tdGV4dCcgfHwgdmFyaWFibGUuZGF0YVR5cGUgPT09ICdydW50aW1lJykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YXJpYWJsZS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFhbGxWYWxpZEZvckNvbmRpdGlvbikge1xuICAgICAgICBjdXN0b21WYXJpYWJsZXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGN1c3RvbVZhcmlhYmxlc1ZhbGlkO1xuICB9XG5cbiAgb25DcmVhdGVTdGVwKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0Zvcm1WYWxpZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZGl0aW9uRm9ybS52YWxpZCkge1xuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5jb25kaXRpb25Gb3JtLnZhbHVlO1xuICAgICAgXG4gICAgICAvLyBTeW5jIGFkdmFuY2VkIHZhcmlhYmxlcyBmcm9tIGZvcm0gdG8gYXJyYXkgZm9yIGFsbCBjb25kaXRpb25zXG4gICAgICB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCgodmFyaWFibGVzLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuZ2V0KGluZGV4KTtcbiAgICAgICAgaWYgKGZvcm1BcnJheSkge1xuICAgICAgICAgIHZhcmlhYmxlcy5mb3JFYWNoKCh2YXJpYWJsZSwgdmFySW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGZvcm1BcnJheS5hdCh2YXJJbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgICAgaWYgKGZvcm1Hcm91cCkge1xuICAgICAgICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpPy52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcgJiYgZm9ybVZhbHVlIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB2YWx1ZXMgZnJvbSBGb3JtQXJyYXlcbiAgICAgICAgICAgICAgICB2YXJpYWJsZS52YWx1ZSA9IGZvcm1WYWx1ZS5jb250cm9scy5tYXAoY29udHJvbCA9PiBjb250cm9sLnZhbHVlKS5maWx0ZXIoKHZhbDogc3RyaW5nKSA9PiB2YWwgJiYgdmFsLnRyaW0oKSAhPT0gJycpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhcmlhYmxlLnZhbHVlID0gZm9ybVZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBjb25zdCBzdGVwRGF0YTogQ29uZGl0aW9uRm9ybURhdGEgPSB7XG4gICAgICAgIGNvbmRpdGlvbnM6IGZvcm1WYWx1ZS5jb25kaXRpb25zLm1hcCgoY29uZDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgLy8gRmluZCB0aGUgQWN0aW9uVGVtcGxhdGUgb2JqZWN0IGZyb20gdGhlIHN0b3JlZCBJRC92YWx1ZVxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlSWQgPSBjb25kLnZhbHVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVGVtcGxhdGUgPSB0aGlzLmNvbmRpdGlvblRlbXBsYXRlcy5maW5kKFxuICAgICAgICAgICAgdCA9PiAodC5pZD8udG9TdHJpbmcoKSA9PT0gdGVtcGxhdGVJZCkgfHwgKHQuZGlzcGxheU5hbWUgPT09IHRlbXBsYXRlSWQpXG4gICAgICAgICAgKSB8fCB0aGlzLnNlbGVjdGVkVGVtcGxhdGVzLmdldChpbmRleCk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gR2V0IHRlbXBsYXRlIHZhcmlhYmxlcyBmb3IgdGhpcyBjb25kaXRpb25cbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZVZhcmlhYmxlcyA9IHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZ2V0KGluZGV4KSB8fCBbXTtcbiAgICAgICAgICAvLyBHZXQgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzIGZvciB0aGlzIGNvbmRpdGlvblxuICAgICAgICAgIGNvbnN0IGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZ2V0KGluZGV4KSB8fCBbXTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmllbGQ6IGNvbmQuZmllbGQsXG4gICAgICAgICAgICBvcGVyYXRvcjogY29uZC5vcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBzZWxlY3RlZFRlbXBsYXRlIHx8IG51bGwsXG4gICAgICAgICAgICB0ZW1wbGF0ZVZhcmlhYmxlczogdGVtcGxhdGVWYXJpYWJsZXMsXG4gICAgICAgICAgICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGNvbmQuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICBtZXRhZGF0YTogY29uZC5tZXRhZGF0YSB8fCAnJ1xuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgICBpbmNsdWRlRWxzZTogZm9ybVZhbHVlLmluY2x1ZGVFbHNlIHx8IGZhbHNlXG4gICAgICB9O1xuICAgICAgY29uc29sZS5sb2coJ3N0ZXBEYXRhJywgc3RlcERhdGEpO1xuICAgICAgdGhpcy5jcmVhdGVTdGVwLmVtaXQoc3RlcERhdGEpO1xuICAgIH1cbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1oLWZ1bGwgY3FhLWJnLXdoaXRlIGNxYS1weC00IGNxYS1weS0yXCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8aDIgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtYmxhY2stMTAwIGNxYS1tYi00XCI+XG4gICAgQ3JlYXRlIENvbmRpdGlvbiBTdGVwXG4gIDwvaDI+XG5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZmxleC0xIGNxYS1vdmVyZmxvdy15LWF1dG9cIj5cbiAgICA8IS0tIENvbmRpdGlvbiBCdWlsZGVyIFNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTNcIj5cbiAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1ncmF5LTkwMFwiPlxuICAgICAgICBDb25kaXRpb24gQnVpbGRlclxuICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENvbmRpdGlvbiBSb3dzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTMgY3FhLW1iLTNcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnNGb3JtQXJyYXkuY29udHJvbHM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlDb25kaXRpb25JbmRleFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiaXNDb25kaXRpb25JZihpKSB8fCBpc0NvbmRpdGlvbkVsc2VJZihpKVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgIDwhLS0gQ29uZGl0aW9uIFJvdyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgICAgICA8IS0tIENvbmRpdGlvbiBMYWJlbCAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgIHt7IGdldENvbmRpdGlvbkxhYmVsKGkpIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gT3BlcmF0b3IgRHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW1heC13LVsxMDBweF0gY3FhLXRleHQtWzEwcHhdXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJnZXRDb25kaXRpb25Gb3JtR3JvdXAoaSlcIiBbY29uZmlnXT1cImdldE9wZXJhdG9yQ29uZmlnKGkpXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgICA8IS0tIFZhbHVlIFRlbXBsYXRlIERyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWluLXctWzE1MHB4XSBjcWEtdGV4dC1bMTBweF1cIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImdldENvbmRpdGlvbkZvcm1Hcm91cChpKVwiIFtjb25maWddPVwiZ2V0VmFsdWVDb25maWcoaSlcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBSZW1vdmUgQnV0dG9uIC0tPlxuICAgICAgICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaSA+PSAxXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwidGV4dFwiXG4gICAgICAgICAgICAgICAgaWNvbj1cImNsb3NlXCJcbiAgICAgICAgICAgICAgICBpY29uUG9zaXRpb249XCJzdGFydFwiXG4gICAgICAgICAgICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdy1mdWxsIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUNvbmRpdGlvbihpKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVtb3ZlIGNvbmRpdGlvbidcIj5cbiAgICAgICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgICAgICA8IS0tIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy04IGNxYS1oLTggY3FhLXJvdW5kZWQgY3FhLXRleHQtZ3JheS01MDAgaG92ZXI6Y3FhLXRleHQtZ3JheS03MDAgaG92ZXI6Y3FhLWJnLWdyYXktMTAwIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUNvbmRpdGlvbihpKVwiICpuZ0lmPVwiaSA+PSAxXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZW1vdmUgY29uZGl0aW9uJ1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LWxnIGNxYS10ZXh0LVsyNHB4XVwiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+IC0tPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gVGVtcGxhdGUgVmFyaWFibGVzIFNlY3Rpb24gKHNob3duIHdoZW4gdGVtcGxhdGUgaXMgc2VsZWN0ZWQpIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldFNlbGVjdGVkVGVtcGxhdGUoaSlcIiBjbGFzcz1cImNxYS1tdC0yXCI+XG4gICAgICAgICAgICAgIDwhLS0gVGVtcGxhdGUgR3JhbW1hciBEaXNwbGF5IC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZmxleC13cmFwIGNxYS1nYXAtMSBjcWEtdGV4dC1zbSBjcWEtdGV4dC1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYWN0aW9uLWZvcm1hdCBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzIzcHhdIGNxYS10ZXh0LWJsYWNrLTEwMFwiXG4gICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFNlbGVjdGVkVGVtcGxhdGUoaSk/Lmh0bWxHcmFtbWFyIHx8IGdldFNlbGVjdGVkVGVtcGxhdGUoaSk/Lm5hdHVyYWxUZXh0IHx8ICcnXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPCEtLSBUZW1wbGF0ZSBWYXJpYWJsZXMgRm9ybSBDb21wb25lbnQgKGluY2x1ZGVzIERlc2NyaXB0aW9uIGFuZCBNZXRhZGF0YSkgLS0+XG4gICAgICAgICAgICAgIDxjcWEtdGVtcGxhdGUtdmFyaWFibGVzLWZvcm1cbiAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlO1wiXG4gICAgICAgICAgICAgICAgW3RlbXBsYXRlVmFyaWFibGVzXT1cImdldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzKGkpXCJcbiAgICAgICAgICAgICAgICBbdmFyaWFibGVzRm9ybV09XCJnZXRDb25kaXRpb25WYXJpYWJsZXNGb3JtKGkpXCJcbiAgICAgICAgICAgICAgICBbbWV0YWRhdGFdPVwiZ2V0Q29uZGl0aW9uRm9ybUdyb3VwKGkpLmdldCgnbWV0YWRhdGEnKT8udmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCJnZXRDb25kaXRpb25Gb3JtR3JvdXAoaSkuZ2V0KCdkZXNjcmlwdGlvbicpPy52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgW2VsZW1lbnRPcHRpb25zXT1cImVsZW1lbnRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbaGFzTW9yZUVsZW1lbnRzXT1cImhhc01vcmVFbGVtZW50c1wiXG4gICAgICAgICAgICAgICAgW2lzTG9hZGluZ0VsZW1lbnRzXT1cImlzTG9hZGluZ0VsZW1lbnRzXCJcbiAgICAgICAgICAgICAgICBbc2NyZWVuTmFtZU9wdGlvbnNdPVwic2NyZWVuTmFtZU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIFtoYXNNb3JlU2NyZWVuTmFtZXNdPVwiaGFzTW9yZVNjcmVlbk5hbWVzXCJcbiAgICAgICAgICAgICAgICBbaXNMb2FkaW5nU2NyZWVuTmFtZXNdPVwiaXNMb2FkaW5nU2NyZWVuTmFtZXNcIlxuICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJPcHRpb25zXT1cInBhcmFtZXRlck9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIFtoYXNNb3JlUGFyYW1ldGVyc109XCJoYXNNb3JlUGFyYW1ldGVyc1wiXG4gICAgICAgICAgICAgICAgW2lzTG9hZGluZ1BhcmFtZXRlcnNdPVwiaXNMb2FkaW5nUGFyYW1ldGVyc1wiXG4gICAgICAgICAgICAgICAgW2Vudmlyb25tZW50T3B0aW9uc109XCJlbnZpcm9ubWVudE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIFtoYXNNb3JlRW52aXJvbm1lbnRzXT1cImhhc01vcmVFbnZpcm9ubWVudHNcIlxuICAgICAgICAgICAgICAgIFtpc0xvYWRpbmdFbnZpcm9ubWVudHNdPVwiaXNMb2FkaW5nRW52aXJvbm1lbnRzXCJcbiAgICAgICAgICAgICAgICBbZGVmYXVsdFRlc3REYXRhUHJvZmlsZUlkXT1cImRlZmF1bHRUZXN0RGF0YVByb2ZpbGVJZFwiXG4gICAgICAgICAgICAgICAgW2RlZmF1bHRUZXN0RGF0YVN0YXJ0SW5kZXhdPVwiZGVmYXVsdFRlc3REYXRhU3RhcnRJbmRleFwiXG4gICAgICAgICAgICAgICAgKHZhcmlhYmxlVmFsdWVDaGFuZ2UpPVwib25Db25kaXRpb25WYXJpYWJsZVZhbHVlQ2hhbmdlKGksICRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAodmFyaWFibGVCb29sZWFuQ2hhbmdlKT1cIm9uQ29uZGl0aW9uVmFyaWFibGVCb29sZWFuQ2hhbmdlKGksICRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAobWV0YWRhdGFDaGFuZ2UpPVwiZ2V0Q29uZGl0aW9uRm9ybUdyb3VwKGkpLmdldCgnbWV0YWRhdGEnKT8uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGRlc2NyaXB0aW9uQ2hhbmdlKT1cImdldENvbmRpdGlvbkZvcm1Hcm91cChpKS5nZXQoJ2Rlc2NyaXB0aW9uJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChsb2FkTW9yZUVsZW1lbnRzKT1cImxvYWRNb3JlRWxlbWVudHMuZW1pdCgpXCJcbiAgICAgICAgICAgICAgICAoc2VhcmNoRWxlbWVudHMpPVwic2VhcmNoRWxlbWVudHMuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoc2VhcmNoRWxlbWVudHNCeVNjcmVlbk5hbWUpPVwic2VhcmNoRWxlbWVudHNCeVNjcmVlbk5hbWUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY3JlYXRlRWxlbWVudCk9XCJjcmVhdGVFbGVtZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNlYXJjaFNjcmVlbk5hbWUpPVwic2VhcmNoU2NyZWVuTmFtZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChsb2FkTW9yZVNjcmVlbk5hbWVzKT1cImxvYWRNb3JlU2NyZWVuTmFtZXMuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY3JlYXRlU2NyZWVuTmFtZVJlcXVlc3QpPVwiY3JlYXRlU2NyZWVuTmFtZVJlcXVlc3QuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoc2VhcmNoUGFyYW1ldGVycyk9XCJzZWFyY2hQYXJhbWV0ZXJzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGxvYWRNb3JlUGFyYW1ldGVycyk9XCJsb2FkTW9yZVBhcmFtZXRlcnMuZW1pdCgpXCJcbiAgICAgICAgICAgICAgICAoc2VhcmNoRW52aXJvbm1lbnRzKT1cInNlYXJjaEVudmlyb25tZW50cy5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChsb2FkTW9yZUVudmlyb25tZW50cyk9XCJsb2FkTW9yZUVudmlyb25tZW50cy5lbWl0KClcIj5cbiAgICAgICAgICAgICAgPC9jcWEtdGVtcGxhdGUtdmFyaWFibGVzLWZvcm0+XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8IS0tIEFkdmFuY2VkIFNldHRpbmdzIFZhcmlhYmxlcyBGb3JtIC0tPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0Q29uZGl0aW9uQWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyhpKS5sZW5ndGggPiAwXCIgY2xhc3M9XCJjcWEtbXQtNFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtdy1mdWxsIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTIgY3FhLXRleHQtc20gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtYm9yZGVyLW5vbmUgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1wLTAgY3FhLW1iLTEuNVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb25kaXRpb25BZHZhbmNlZChpKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XVwiPkFkdmFuY2VkPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1iYXNlXCIgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cImdldENvbmRpdGlvbkFkdmFuY2VkRXhwYW5kZWQoaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICBleHBhbmRfbW9yZVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0Q29uZGl0aW9uQWR2YW5jZWRFeHBhbmRlZChpKVwiIGNsYXNzPVwiY3FhLW10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGNxYS1hZHZhbmNlZC12YXJpYWJsZXMtZm9ybSBcbiAgICAgICAgICAgICAgICAgICAgICBbYWR2YW5jZWRWYXJpYWJsZXNdPVwiZ2V0Q29uZGl0aW9uQWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyhpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FkdmFuY2VkVmFyaWFibGVGb3JtXT1cImdldENvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybShpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKHZhcmlhYmxlQm9vbGVhbkNoYW5nZSk9XCJvbkNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKGksICRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAodmFyaWFibGVWYWx1ZUNoYW5nZSk9XCJvbkNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVWYWx1ZUNoYW5nZShpLCAkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2NxYS1hZHZhbmNlZC12YXJpYWJsZXMtZm9ybT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEFkZCBDb25kaXRpb24gQnV0dG9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1ib3JkZXItMiBjcWEtYm9yZGVyLWRhc2hlZCBjcWEtYm9yZGVyLWdyYXktMzAwIGNxYS1yb3VuZGVkLWxnIGNxYS1wLTEgY3FhLW10LTNcIj5cbiAgICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgICB2YXJpYW50PVwidGV4dFwiXG4gICAgICAgICAgaWNvbj1cImFkZFwiXG4gICAgICAgICAgaWNvblBvc2l0aW9uPVwic3RhcnRcIlxuICAgICAgICAgIFtjdXN0b21DbGFzc109XCInY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlcidcIlxuICAgICAgICAgIFt0ZXh0XT1cIidBZGQgQ29uZGl0aW9uJ1wiXG4gICAgICAgICAgKGNsaWNrZWQpPVwiYWRkQ29uZGl0aW9uKCdDT05ESVRJT05fRUxTRV9JRicpXCI+XG4gICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBJbmNsdWRlIEVMU0UgQnJhbmNoIFNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtbWItNiBjcWEtcC0zIGNxYS1iZy1ncmF5LTUwIGNxYS1yb3VuZGVkLWxnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1ncmF5LTkwMCBjcWEtbWItMVwiPlxuICAgICAgICAgIEluY2x1ZGUgRUxTRSBicmFuY2hcbiAgICAgICAgPC9oMz5cbiAgICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICBFeGVjdXRlIGFsdGVybmF0aXZlIHN0ZXBzIHdoZW4gY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgW2NoZWNrZWRdPVwiaW5jbHVkZUVsc2VcIiAoY2hhbmdlKT1cIm9uSW5jbHVkZUVsc2VDaGFuZ2UoJGV2ZW50LmNoZWNrZWQpXCIgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMlwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIHRleHQ9XCJDYW5jZWxcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMlwiIHZhcmlhbnQ9XCJmaWxsZWRcIiB0ZXh0PVwiQ3JlYXRlIFN0ZXBcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFpc0Zvcm1WYWxpZCgpXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ3JlYXRlU3RlcCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
828
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWNvbmRpdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3N0ZXAtYnVpbGRlci9zdGVwLWJ1aWxkZXItY29uZGl0aW9uL3N0ZXAtYnVpbGRlci1jb25kaXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWNvbmRpdGlvbi9zdGVwLWJ1aWxkZXItY29uZGl0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQW9DLHVCQUF1QixFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNySixPQUFPLEVBQUUsU0FBUyxFQUEwQixXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBbUM1RixNQUFNLE9BQU8sNkJBQTZCO0lBeUZ4QyxZQUFvQixFQUFlLEVBQVUsR0FBc0I7UUFBL0MsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBeEZuRSxvQ0FBb0M7UUFDM0Isb0JBQWUsR0FBbUI7WUFDekMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1lBQ2xFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtZQUNsRixFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7WUFDMUUsRUFBRSxFQUFFLEVBQUUs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QUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcsIFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3Rpb25UZW1wbGF0ZSB9IGZyb20gJy4uL3N0ZXAtYnVpbGRlci1hY3Rpb24vc3RlcC1idWlsZGVyLWFjdGlvbi5jb21wb25lbnQnO1xuXG4vLyBJbXBvcnQgRWxlbWVudCB0eXBlIC0gdXNpbmcgYW55IGZvciBub3cgc2luY2UgRWxlbWVudCBpcyBmcm9tIHRzLXBvcnRhbC11aVxuaW50ZXJmYWNlIEVsZW1lbnQge1xuICBpZD86IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBsb2NhdG9yVmFsdWU/OiBzdHJpbmc7XG4gIG90aGVyTG9jYXRvcj86IHN0cmluZ1tdO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uUm93IHtcbiAgZmllbGQ6IHN0cmluZztcbiAgb3BlcmF0b3I6IHN0cmluZztcbiAgdmFsdWU6IEFjdGlvblRlbXBsYXRlO1xuICB0ZW1wbGF0ZVZhcmlhYmxlcz86IGFueVtdO1xuICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzPzogYW55W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBtZXRhZGF0YT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25Gb3JtRGF0YSB7XG4gIGNvbmRpdGlvbnM6IENvbmRpdGlvblJvd1tdO1xuICBpbmNsdWRlRWxzZTogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXN0ZXAtYnVpbGRlci1jb25kaXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RlcC1idWlsZGVyLWNvbmRpdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU3RlcEJ1aWxkZXJDb25kaXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBPcHRpb25zIGZvciBvcGVyYXRvciBkcm9wZG93biAqL1xuICBASW5wdXQoKSBvcGVyYXRvck9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW1xuICAgIHsgaWQ6ICdlcXVhbHMnLCB2YWx1ZTogJ2VxdWFscycsIG5hbWU6ICdlcXVhbHMnLCBsYWJlbDogJ2VxdWFscycgfSxcbiAgICB7IGlkOiAnbm90X2VxdWFscycsIHZhbHVlOiAnbm90X2VxdWFscycsIG5hbWU6ICdub3QgZXF1YWxzJywgbGFiZWw6ICdub3QgZXF1YWxzJyB9LFxuICAgIHsgaWQ6ICdjb250YWlucycsIHZhbHVlOiAnY29udGFpbnMnLCBuYW1lOiAnY29udGFpbnMnLCBsYWJlbDogJ2NvbnRhaW5zJyB9LFxuICAgIHsgaWQ6ICdub3RfY29udGFpbnMnLCB2YWx1ZTogJ25vdF9jb250YWlucycsIG5hbWU6ICdub3QgY29udGFpbnMnLCBsYWJlbDogJ25vdCBjb250YWlucycgfSxcbiAgICB7IGlkOiAnZ3JlYXRlcl90aGFuJywgdmFsdWU6ICdncmVhdGVyX3RoYW4nLCBuYW1lOiAnZ3JlYXRlciB0aGFuJywgbGFiZWw6ICdncmVhdGVyIHRoYW4nIH0sXG4gICAgeyBpZDogJ2xlc3NfdGhhbicsIHZhbHVlOiAnbGVzc190aGFuJywgbmFtZTogJ2xlc3MgdGhhbicsIGxhYmVsOiAnbGVzcyB0aGFuJyB9XG4gIF07XG5cbiAgLyoqIExpc3Qgb2YgYWN0aW9uIHRlbXBsYXRlcyB0byBkaXNwbGF5IGluIHZhbHVlIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIGNvbmRpdGlvblRlbXBsYXRlczogQWN0aW9uVGVtcGxhdGVbXSA9IFtdO1xuICAvKiogRnVuY3Rpb24gdG8gaGFuZGxlIHZhcmlhYmxlIHByb2Nlc3Npbmcgb3IgY3VzdG9tIGxvZ2ljLiBDYW4gYmUgcGFzc2VkIGZyb20gcGFyZW50IGNvbXBvbmVudC4gKi9cbiAgQElucHV0KCkgc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXM6ICh2YXJpYWJsZXM6IEFjdGlvblRlbXBsYXRlKSA9PiBhbnkgPSAoKSA9PiB7IHJldHVybiBbXX07XG4gIC8qKiBGdW5jdGlvbiB0byBoYW5kbGUgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzLiBDYW4gYmUgcGFzc2VkIGZyb20gcGFyZW50IGNvbXBvbmVudC4gKi9cbiAgQElucHV0KCkgc2V0QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlczogKHRlbXBsYXRlOiBBY3Rpb25UZW1wbGF0ZSwgdGVzdFN0ZXA/OiBhbnkpID0+IGFueVtdID0gKCkgPT4geyByZXR1cm4gW119O1xuICBASW5wdXQoKSBlbGVtZW50T3B0aW9uczogRWxlbWVudFtdID0gW107IC8vIEVsZW1lbnQgb2JqZWN0cyBmb3IgZWxlbWVudCBkcm9wZG93blxuICBASW5wdXQoKSBoYXNNb3JlRWxlbWVudHM6IGJvb2xlYW4gPSBmYWxzZTsgLy8gV2hldGhlciBtb3JlIGVsZW1lbnRzIGFyZSBhdmFpbGFibGVcbiAgQElucHV0KCkgaXNMb2FkaW5nRWxlbWVudHM6IGJvb2xlYW4gPSBmYWxzZTsgLy8gTG9hZGluZyBzdGF0ZSBmb3IgZWxlbWVudHNcbiAgLyoqIFNjcmVlbiBuYW1lIG9wdGlvbnMgZm9yIGVsZW1lbnQgZm9ybSBhdXRvY29tcGxldGUgKGZyb20gQVBJKSAqL1xuICBASW5wdXQoKSBzY3JlZW5OYW1lT3B0aW9uczogeyBpZD86IG51bWJlcjsgbmFtZTogc3RyaW5nIH1bXSA9IFtdO1xuICAvKiogV2hldGhlciBtb3JlIHNjcmVlbiBuYW1lcyBhcmUgYXZhaWxhYmxlIGZvciBpbmZpbml0ZSBzY3JvbGwgKi9cbiAgQElucHV0KCkgaGFzTW9yZVNjcmVlbk5hbWVzOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBUcnVlIHdoaWxlIHBhcmVudCBpcyBsb2FkaW5nIHNjcmVlbiBuYW1lcyAoc2VhcmNoIG9yIGxvYWQgbW9yZSkgKi9cbiAgQElucHV0KCkgaXNMb2FkaW5nU2NyZWVuTmFtZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8qKiBQYXJhbWV0ZXIgZmV0Y2hpbmcgcHJvcGVydGllcyAqL1xuICBASW5wdXQoKSBwYXJhbWV0ZXJPcHRpb25zOiBhbnlbXSA9IFtdOyAvLyBUZXN0RGF0YVtdIC0gcmF3IHRlc3QgZGF0YSBwcm9maWxlc1xuICBASW5wdXQoKSBoYXNNb3JlUGFyYW1ldGVyczogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0xvYWRpbmdQYXJhbWV0ZXJzOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvKiogRW52aXJvbm1lbnQgZmV0Y2hpbmcgcHJvcGVydGllcyAqL1xuICBASW5wdXQoKSBlbnZpcm9ubWVudE9wdGlvbnM6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyBlbnZpcm9ubWVudDogc3RyaW5nIH1bXSA9IFtdO1xuICBASW5wdXQoKSBoYXNNb3JlRW52aXJvbm1lbnRzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzTG9hZGluZ0Vudmlyb25tZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLyoqIERlZmF1bHQgdGVzdCBkYXRhIHByb2ZpbGUgcHJvcGVydGllcyAqL1xuICBASW5wdXQoKSBkZWZhdWx0VGVzdERhdGFQcm9maWxlSWQ/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGRlZmF1bHRUZXN0RGF0YVN0YXJ0SW5kZXg/OiBudW1iZXI7XG5cbiAgLyoqIFRydWUgd2hpbGUgcGFyZW50IGlzIGNyZWF0aW5nIHRoZSBzdGVwIChBUEkgaW4gcHJvZ3Jlc3MpOyBzaG93IGxvYWRlciBvbiBDcmVhdGUgU3RlcCBidXR0b24gKi9cbiAgQElucHV0KCkgaXNDcmVhdGluZ1N0ZXA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRW1pdCB3aGVuIHN0ZXAgaXMgY3JlYXRlZCAqL1xuICBAT3V0cHV0KCkgY3JlYXRlU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29uZGl0aW9uRm9ybURhdGE+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBjYW5jZWxsZWQgKi9cbiAgQE91dHB1dCgpIGNhbmNlbGxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGxvYWRNb3JlRWxlbWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7IC8vIEVtaXQgd2hlbiBsb2FkIG1vcmUgaXMgcmVxdWVzdGVkXG4gIEBPdXRwdXQoKSBzZWFyY2hFbGVtZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpOyAvLyBFbWl0IHdoZW4gdXNlciBzZWFyY2hlcyBmb3IgZWxlbWVudHNcbiAgQE91dHB1dCgpIHNlYXJjaEVsZW1lbnRzQnlTY3JlZW5OYW1lID0gbmV3IEV2ZW50RW1pdHRlcjx7IHNjcmVlbk5hbWVJZDogbnVtYmVyOyBzZWFyY2hUZXJtPzogc3RyaW5nIH0+KCk7IC8vIEVtaXQgd2hlbiBzY3JlZW4gbmFtZSBpcyBzZWxlY3RlZCB0byBmZXRjaCBlbGVtZW50cyBmaWx0ZXJlZCBieSBzY3JlZW4gbmFtZVxuICBAT3V0cHV0KCkgY3JlYXRlRWxlbWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyAvLyBFbWl0IHdoZW4gZWxlbWVudCBpcyBjcmVhdGVkXG4gIEBPdXRwdXQoKSBzZWFyY2hTY3JlZW5OYW1lID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7IC8vIEVtaXQgd2hlbiB1c2VyIHNlYXJjaGVzIHNjcmVlbiBuYW1lc1xuICBAT3V0cHV0KCkgbG9hZE1vcmVTY3JlZW5OYW1lcyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpOyAvLyBFbWl0IHdoZW4gdXNlciBzY3JvbGxzIHRvIGxvYWQgbW9yZSBzY3JlZW4gbmFtZXNcbiAgQE91dHB1dCgpIGNyZWF0ZVNjcmVlbk5hbWVSZXF1ZXN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7IC8vIEVtaXQgd2hlbiB1c2VyIHJlcXVlc3RzIHRvIGNyZWF0ZSBhIG5ldyBzY3JlZW4gbmFtZVxuICBAT3V0cHV0KCkgc2VhcmNoUGFyYW1ldGVycyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpOyAvLyBFbWl0IHdoZW4gdXNlciBzZWFyY2hlcyBmb3IgcGFyYW1ldGVyc1xuICBAT3V0cHV0KCkgbG9hZE1vcmVQYXJhbWV0ZXJzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpOyAvLyBFbWl0IHdoZW4gdXNlciBzY3JvbGxzIHRvIGxvYWQgbW9yZSBwYXJhbWV0ZXJzXG4gIEBPdXRwdXQoKSBzZWFyY2hFbnZpcm9ubWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTsgLy8gRW1pdCB3aGVuIHVzZXIgc2VhcmNoZXMgZm9yIGVudmlyb25tZW50c1xuICBAT3V0cHV0KCkgbG9hZE1vcmVFbnZpcm9ubWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7IC8vIEVtaXQgd2hlbiB1c2VyIHNjcm9sbHMgdG8gbG9hZCBtb3JlIGVudmlyb25tZW50c1xuICBAT3V0cHV0KCkgcmVkaXJlY3RUb1BhcmFtZXRlciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlZGlyZWN0VG9FbnZpcm9ubWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBjb25kaXRpb25Gb3JtOiBGb3JtR3JvdXA7XG4gIGluY2x1ZGVFbHNlOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvLyBDYWNoZSBmb3IgdmFsdWUgY29uZmlncyB0byBhdm9pZCByZWNyZWF0aW5nIG9uIGV2ZXJ5IGNoYW5nZSBkZXRlY3Rpb25cbiAgcHJpdmF0ZSB2YWx1ZUNvbmZpZ0NhY2hlOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgfCBudWxsID0gbnVsbDtcbiAgXG4gIC8vIENhY2hlIGZvciBvcGVyYXRvciBjb25maWdzIChzdGF0aWMsIG5vIG5lZWQgdG8gcmVjcmVhdGUpXG4gIHByaXZhdGUgb3BlcmF0b3JDb25maWdDYWNoZTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHwgbnVsbCA9IG51bGw7XG4gIFxuICAvLyBDYWNoZSBmb3IgdmFsdWUgY29uZmlncyB3aXRoIG9uQ2hhbmdlIGhhbmRsZXJzIHBlciBpbmRleFxuICBwcml2YXRlIHZhbHVlQ29uZmlnc1dpdGhIYW5kbGVyczogTWFwPG51bWJlciwgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnPiA9IG5ldyBNYXAoKTtcbiAgXG4gIC8vIFRyYWNrIHNlbGVjdGVkIHRlbXBsYXRlcyBhbmQgdGhlaXIgdmFyaWFibGVzIGZvciBlYWNoIGNvbmRpdGlvbiByb3dcbiAgcHJpdmF0ZSBzZWxlY3RlZFRlbXBsYXRlczogTWFwPG51bWJlciwgQWN0aW9uVGVtcGxhdGU+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGNvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzOiBNYXA8bnVtYmVyLCBhbnlbXT4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgY29uZGl0aW9uVmFyaWFibGVzRm9ybXM6IE1hcDxudW1iZXIsIEZvcm1BcnJheT4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgY29uZGl0aW9uVXBkYXRlZEh0bWxHcmFtbWFyOiBNYXA8bnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcCgpOyAvLyBVcGRhdGVkIEhUTUwgZ3JhbW1hciBwZXIgY29uZGl0aW9uXG4gIFxuICAvLyBBZHZhbmNlZCBzZXR0aW5ncyB2YXJpYWJsZXMgcGVyIGNvbmRpdGlvblxuICBwcml2YXRlIGNvbmRpdGlvbkFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM6IE1hcDxudW1iZXIsIGFueVtdPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBjb25kaXRpb25BZHZhbmNlZFZhcmlhYmxlc0Zvcm1zOiBNYXA8bnVtYmVyLCBGb3JtQXJyYXk+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGNvbmRpdGlvbkFkdmFuY2VkRXhwYW5kZWQ6IE1hcDxudW1iZXIsIGJvb2xlYW4+ID0gbmV3IE1hcCgpO1xuICBcbiAgLy8gQ2FjaGUgZm9yIGNvbmRpdGlvbiBmb3JtIGdyb3VwcyB0byBhdm9pZCByZXBlYXRlZCBsb29rdXBzXG4gIHByaXZhdGUgY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGU6IE1hcDxudW1iZXIsIEZvcm1Hcm91cD4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHRoaXMuY29uZGl0aW9uRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY29uZGl0aW9uczogdGhpcy5mYi5hcnJheShbXSksXG4gICAgICBpbmNsdWRlRWxzZTogW2ZhbHNlXVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gQWRkIGluaXRpYWwgY29uZGl0aW9uIHJvd1xuICAgIHRoaXMuYWRkQ29uZGl0aW9uKFwiQ09ORElUSU9OX0lGXCIpO1xuICAgIC8vIEluaXRpYWxpemUgY29uZmlnIGNhY2hlc1xuICAgIHRoaXMudXBkYXRlVmFsdWVDb25maWdDYWNoZSgpO1xuICAgIHRoaXMudXBkYXRlT3BlcmF0b3JDb25maWdDYWNoZSgpO1xuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIFJlZ2VuZXJhdGUgdmFsdWUgY29uZmlnIGNhY2hlIHdoZW4gY29uZGl0aW9uVGVtcGxhdGVzIGNoYW5nZXNcbiAgICBpZiAoY2hhbmdlc1snY29uZGl0aW9uVGVtcGxhdGVzJ10gJiYgIWNoYW5nZXNbJ2NvbmRpdGlvblRlbXBsYXRlcyddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlQ29uZmlnQ2FjaGUoKTtcbiAgICAgIC8vIENsZWFyIHZhbHVlIGNvbmZpZ3Mgd2l0aCBoYW5kbGVycyBzaW5jZSBiYXNlIGNvbmZpZyBjaGFuZ2VkXG4gICAgICB0aGlzLnZhbHVlQ29uZmlnc1dpdGhIYW5kbGVycy5jbGVhcigpO1xuICAgIH1cbiAgICAvLyBNYXJrIGZvciBjaGVjayBzaW5jZSB3ZSdyZSB1c2luZyBPblB1c2hcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSB1cGRhdGVPcGVyYXRvckNvbmZpZ0NhY2hlKCk6IHZvaWQge1xuICAgIHRoaXMub3BlcmF0b3JDb25maWdDYWNoZSA9IHtcbiAgICAgIGtleTogJ29wZXJhdG9yJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IG9wZXJhdG9yJyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgb3B0aW9uczogdGhpcy5vcGVyYXRvck9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbnNGb3JtQXJyYXkoKTogRm9ybUFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5jb25kaXRpb25Gb3JtLmdldCgnY29uZGl0aW9ucycpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIGFkZENvbmRpdGlvbihjb25kaXRpb25UeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb25kaXRpb25Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZmllbGQ6IFtjb25kaXRpb25UeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG9wZXJhdG9yOiBbJ2VxdWFscycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgdmFsdWU6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSwgLy8gV2lsbCBzdG9yZSB0ZW1wbGF0ZSBJRCwgdGhlbiBtYXAgdG8gQWN0aW9uVGVtcGxhdGVcbiAgICAgIGRlc2NyaXB0aW9uOiBbJyddLFxuICAgICAgbWV0YWRhdGE6IFsnJ10sXG4gICAgfSk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbmRpdGlvbnNGb3JtQXJyYXkubGVuZ3RoO1xuICAgIHRoaXMuY29uZGl0aW9uc0Zvcm1BcnJheS5wdXNoKGNvbmRpdGlvbkdyb3VwKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHZhcmlhYmxlcyBmb3JtIGZvciB0aGlzIGNvbmRpdGlvbiAoRm9ybUFycmF5KVxuICAgIHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuc2V0KGluZGV4LCB0aGlzLmZiLmFycmF5KFtdKSk7XG4gICAgXG4gICAgLy8gQ2FjaGUgdGhlIGZvcm0gZ3JvdXBcbiAgICB0aGlzLmNvbmRpdGlvbkZvcm1Hcm91cENhY2hlLnNldChpbmRleCwgY29uZGl0aW9uR3JvdXApO1xuICAgIFxuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVtb3ZlQ29uZGl0aW9uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25kaXRpb25zRm9ybUFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uc0Zvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XG4gICAgICAvLyBDbGVhbiB1cCBhc3NvY2lhdGVkIGRhdGFcbiAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGUuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMudmFsdWVDb25maWdzV2l0aEhhbmRsZXJzLmRlbGV0ZShpbmRleCk7XG4gICAgICBcbiAgICAgIC8vIFJlaW5kZXggcmVtYWluaW5nIGNvbmRpdGlvbnNcbiAgICAgIHRoaXMucmVpbmRleENvbmRpdGlvbkRhdGEoaW5kZXgpO1xuICAgICAgXG4gICAgICAvLyBNYXJrIGZvciBjaGVjayBzaW5jZSB3ZSdyZSB1c2luZyBPblB1c2hcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuICBcbiAgcHJpdmF0ZSByZWluZGV4Q29uZGl0aW9uRGF0YShyZW1vdmVkSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIENyZWF0ZSBuZXcgbWFwcyB3aXRoIHJlaW5kZXhlZCBkYXRhXG4gICAgY29uc3QgbmV3U2VsZWN0ZWRUZW1wbGF0ZXMgPSBuZXcgTWFwPG51bWJlciwgQWN0aW9uVGVtcGxhdGU+KCk7XG4gICAgY29uc3QgbmV3VGVtcGxhdGVWYXJpYWJsZXMgPSBuZXcgTWFwPG51bWJlciwgYW55W10+KCk7XG4gICAgY29uc3QgbmV3VmFyaWFibGVzRm9ybXMgPSBuZXcgTWFwPG51bWJlciwgRm9ybUFycmF5PigpO1xuICAgIGNvbnN0IG5ld0Zvcm1Hcm91cENhY2hlID0gbmV3IE1hcDxudW1iZXIsIEZvcm1Hcm91cD4oKTtcbiAgICBjb25zdCBuZXdWYWx1ZUNvbmZpZ3MgPSBuZXcgTWFwPG51bWJlciwgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnPigpO1xuICAgIGNvbnN0IG5ld1VwZGF0ZWRIdG1sR3JhbW1hciA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG4gICAgY29uc3QgbmV3QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyA9IG5ldyBNYXA8bnVtYmVyLCBhbnlbXT4oKTtcbiAgICBjb25zdCBuZXdBZHZhbmNlZFZhcmlhYmxlc0Zvcm1zID0gbmV3IE1hcDxudW1iZXIsIEZvcm1BcnJheT4oKTtcbiAgICBjb25zdCBuZXdBZHZhbmNlZEV4cGFuZGVkID0gbmV3IE1hcDxudW1iZXIsIGJvb2xlYW4+KCk7XG4gICAgXG4gICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlcy5mb3JFYWNoKCh0ZW1wbGF0ZSwgb2xkSW5kZXgpID0+IHtcbiAgICAgIGlmIChvbGRJbmRleCA8IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdTZWxlY3RlZFRlbXBsYXRlcy5zZXQob2xkSW5kZXgsIHRlbXBsYXRlKTtcbiAgICAgIH0gZWxzZSBpZiAob2xkSW5kZXggPiByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3U2VsZWN0ZWRUZW1wbGF0ZXMuc2V0KG9sZEluZGV4IC0gMSwgdGVtcGxhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZm9yRWFjaCgodmFyaWFibGVzLCBvbGRJbmRleCkgPT4ge1xuICAgICAgaWYgKG9sZEluZGV4IDwgcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIG5ld1RlbXBsYXRlVmFyaWFibGVzLnNldChvbGRJbmRleCwgdmFyaWFibGVzKTtcbiAgICAgIH0gZWxzZSBpZiAob2xkSW5kZXggPiByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3VGVtcGxhdGVWYXJpYWJsZXMuc2V0KG9sZEluZGV4IC0gMSwgdmFyaWFibGVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLmNvbmRpdGlvblZhcmlhYmxlc0Zvcm1zLmZvckVhY2goKGZvcm0sIG9sZEluZGV4KSA9PiB7XG4gICAgICBpZiAob2xkSW5kZXggPCByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3VmFyaWFibGVzRm9ybXMuc2V0KG9sZEluZGV4LCBmb3JtKTtcbiAgICAgIH0gZWxzZSBpZiAob2xkSW5kZXggPiByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3VmFyaWFibGVzRm9ybXMuc2V0KG9sZEluZGV4IC0gMSwgZm9ybSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5jb25kaXRpb25Gb3JtR3JvdXBDYWNoZS5mb3JFYWNoKChmb3JtR3JvdXAsIG9sZEluZGV4KSA9PiB7XG4gICAgICBpZiAob2xkSW5kZXggPCByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3Rm9ybUdyb3VwQ2FjaGUuc2V0KG9sZEluZGV4LCBmb3JtR3JvdXApO1xuICAgICAgfSBlbHNlIGlmIChvbGRJbmRleCA+IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdGb3JtR3JvdXBDYWNoZS5zZXQob2xkSW5kZXggLSAxLCBmb3JtR3JvdXApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMudmFsdWVDb25maWdzV2l0aEhhbmRsZXJzLmZvckVhY2goKGNvbmZpZywgb2xkSW5kZXgpID0+IHtcbiAgICAgIGlmIChvbGRJbmRleCA8IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdWYWx1ZUNvbmZpZ3Muc2V0KG9sZEluZGV4LCBjb25maWcpO1xuICAgICAgfSBlbHNlIGlmIChvbGRJbmRleCA+IHJlbW92ZWRJbmRleCkge1xuICAgICAgICAvLyBSZWNyZWF0ZSBjb25maWcgd2l0aCBuZXcgaW5kZXggZm9yIG9uQ2hhbmdlIGhhbmRsZXJcbiAgICAgICAgY29uc3QgbmV3Q29uZmlnID0ge1xuICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25UZW1wbGF0ZVZhbHVlQ2hhbmdlKG9sZEluZGV4IC0gMSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbmV3VmFsdWVDb25maWdzLnNldChvbGRJbmRleCAtIDEsIG5ld0NvbmZpZyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5jb25kaXRpb25VcGRhdGVkSHRtbEdyYW1tYXIuZm9yRWFjaCgoZ3JhbW1hciwgb2xkSW5kZXgpID0+IHtcbiAgICAgIGlmIChvbGRJbmRleCA8IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdVcGRhdGVkSHRtbEdyYW1tYXIuc2V0KG9sZEluZGV4LCBncmFtbWFyKTtcbiAgICAgIH0gZWxzZSBpZiAob2xkSW5kZXggPiByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3VXBkYXRlZEh0bWxHcmFtbWFyLnNldChvbGRJbmRleCAtIDEsIGdyYW1tYXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuY29uZGl0aW9uQWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5mb3JFYWNoKCh2YXJpYWJsZXMsIG9sZEluZGV4KSA9PiB7XG4gICAgICBpZiAob2xkSW5kZXggPCByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5zZXQob2xkSW5kZXgsIHZhcmlhYmxlcyk7XG4gICAgICB9IGVsc2UgaWYgKG9sZEluZGV4ID4gcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIG5ld0FkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuc2V0KG9sZEluZGV4IC0gMSwgdmFyaWFibGVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuZm9yRWFjaCgoZm9ybSwgb2xkSW5kZXgpID0+IHtcbiAgICAgIGlmIChvbGRJbmRleCA8IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdBZHZhbmNlZFZhcmlhYmxlc0Zvcm1zLnNldChvbGRJbmRleCwgZm9ybSk7XG4gICAgICB9IGVsc2UgaWYgKG9sZEluZGV4ID4gcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIG5ld0FkdmFuY2VkVmFyaWFibGVzRm9ybXMuc2V0KG9sZEluZGV4IC0gMSwgZm9ybSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5jb25kaXRpb25BZHZhbmNlZEV4cGFuZGVkLmZvckVhY2goKGV4cGFuZGVkLCBvbGRJbmRleCkgPT4ge1xuICAgICAgaWYgKG9sZEluZGV4IDwgcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIG5ld0FkdmFuY2VkRXhwYW5kZWQuc2V0KG9sZEluZGV4LCBleHBhbmRlZCk7XG4gICAgICB9IGVsc2UgaWYgKG9sZEluZGV4ID4gcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIG5ld0FkdmFuY2VkRXhwYW5kZWQuc2V0KG9sZEluZGV4IC0gMSwgZXhwYW5kZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMgPSBuZXdTZWxlY3RlZFRlbXBsYXRlcztcbiAgICB0aGlzLmNvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzID0gbmV3VGVtcGxhdGVWYXJpYWJsZXM7XG4gICAgdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3JtcyA9IG5ld1ZhcmlhYmxlc0Zvcm1zO1xuICAgIHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGUgPSBuZXdGb3JtR3JvdXBDYWNoZTtcbiAgICB0aGlzLnZhbHVlQ29uZmlnc1dpdGhIYW5kbGVycyA9IG5ld1ZhbHVlQ29uZmlncztcbiAgICB0aGlzLmNvbmRpdGlvblVwZGF0ZWRIdG1sR3JhbW1hciA9IG5ld1VwZGF0ZWRIdG1sR3JhbW1hcjtcbiAgICB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgPSBuZXdBZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzO1xuICAgIHRoaXMuY29uZGl0aW9uQWR2YW5jZWRWYXJpYWJsZXNGb3JtcyA9IG5ld0FkdmFuY2VkVmFyaWFibGVzRm9ybXM7XG4gICAgdGhpcy5jb25kaXRpb25BZHZhbmNlZEV4cGFuZGVkID0gbmV3QWR2YW5jZWRFeHBhbmRlZDtcbiAgfVxuXG4gIGdldE9wZXJhdG9yQ29uZmlnKGluZGV4OiBudW1iZXIpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIC8vIFJldHVybiBjYWNoZWQgY29uZmlnIChzdGF0aWMsIHNhbWUgZm9yIGFsbCBjb25kaXRpb25zKVxuICAgIGlmICghdGhpcy5vcGVyYXRvckNvbmZpZ0NhY2hlKSB7XG4gICAgICB0aGlzLnVwZGF0ZU9wZXJhdG9yQ29uZmlnQ2FjaGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3JDb25maWdDYWNoZSE7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlQ29uZmlnQ2FjaGUoKTogdm9pZCB7XG4gICAgLy8gQ29udmVydCBBY3Rpb25UZW1wbGF0ZVtdIHRvIFNlbGVjdE9wdGlvbltdXG4gICAgY29uc3QgdGVtcGxhdGVPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9ICh0aGlzLmNvbmRpdGlvblRlbXBsYXRlcyB8fCBbXSkubWFwKHRlbXBsYXRlID0+ICh7XG4gICAgICBpZDogdGVtcGxhdGUuaWQ/LnRvU3RyaW5nKCkgfHwgdGVtcGxhdGUuZGlzcGxheU5hbWUgfHwgJycsXG4gICAgICB2YWx1ZTogdGVtcGxhdGUuaWQ/LnRvU3RyaW5nKCkgfHwgdGVtcGxhdGUuZGlzcGxheU5hbWUgfHwgJycsXG4gICAgICBuYW1lOiB0ZW1wbGF0ZS5odG1sR3JhbW1hciB8fCB0ZW1wbGF0ZS5uYXR1cmFsVGV4dCB8fCAnJyxcbiAgICAgIGxhYmVsOiB0ZW1wbGF0ZS5odG1sR3JhbW1hciB8fCB0ZW1wbGF0ZS5uYXR1cmFsVGV4dCB8fCAnJ1xuICAgIH0pKTtcblxuICAgIHRoaXMudmFsdWVDb25maWdDYWNoZSA9IHtcbiAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IFRlbXBsYXRlKicsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgZGlzcGxheUxhYmVsQXNJbm5lckh0bWw6IHRydWUsXG4gICAgICBvcHRpb25zOiB0ZW1wbGF0ZU9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0VmFsdWVDb25maWcoaW5kZXg6IG51bWJlcik6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgLy8gUmV0dXJuIGNhY2hlZCBjb25maWcgd2l0aCBoYW5kbGVyIHRvIGF2b2lkIHJlY3JlYXRpbmcgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvblxuICAgIGlmICh0aGlzLnZhbHVlQ29uZmlnc1dpdGhIYW5kbGVycy5oYXMoaW5kZXgpKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZUNvbmZpZ3NXaXRoSGFuZGxlcnMuZ2V0KGluZGV4KSE7XG4gICAgfVxuICAgIFxuICAgIC8vIEVuc3VyZSBiYXNlIGNvbmZpZyBjYWNoZSBleGlzdHNcbiAgICBpZiAoIXRoaXMudmFsdWVDb25maWdDYWNoZSkge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZUNvbmZpZ0NhY2hlKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSBhbmQgY2FjaGUgY29uZmlnIHdpdGggb25DaGFuZ2UgaGFuZGxlciBmb3IgdGhpcyBzcGVjaWZpYyBpbmRleFxuICAgIGNvbnN0IGNvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgICAgLi4udGhpcy52YWx1ZUNvbmZpZ0NhY2hlISxcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uVGVtcGxhdGVWYWx1ZUNoYW5nZShpbmRleCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgdGhpcy52YWx1ZUNvbmZpZ3NXaXRoSGFuZGxlcnMuc2V0KGluZGV4LCBjb25maWcpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgXG4gIG9uVGVtcGxhdGVWYWx1ZUNoYW5nZShpbmRleDogbnVtYmVyLCB0ZW1wbGF0ZUlkOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBGaW5kIHRoZSBzZWxlY3RlZCB0ZW1wbGF0ZVxuICAgIGNvbnN0IHNlbGVjdGVkVGVtcGxhdGUgPSB0aGlzLmNvbmRpdGlvblRlbXBsYXRlcy5maW5kKFxuICAgICAgdCA9PiAodC5pZD8udG9TdHJpbmcoKSA9PT0gdGVtcGxhdGVJZCkgfHwgKHQuZGlzcGxheU5hbWUgPT09IHRlbXBsYXRlSWQpXG4gICAgKTtcbiAgICBcbiAgICBpZiAoc2VsZWN0ZWRUZW1wbGF0ZSAmJiB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzKSB7XG4gICAgICAvLyBTdG9yZSBzZWxlY3RlZCB0ZW1wbGF0ZVxuICAgICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlcy5zZXQoaW5kZXgsIHNlbGVjdGVkVGVtcGxhdGUpO1xuICAgICAgXG4gICAgICAvLyBHZXQgdGVtcGxhdGUgdmFyaWFibGVzIHVzaW5nIHRoZSBwcm92aWRlZCBmdW5jdGlvblxuICAgICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyhzZWxlY3RlZFRlbXBsYXRlKTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuc2V0KGluZGV4LCB2YXJpYWJsZXMpO1xuICAgICAgLy8gQnVpbGQgZm9ybSBmb3IgdGVtcGxhdGUgdmFyaWFibGVzXG4gICAgICB0aGlzLmJ1aWxkQ29uZGl0aW9uVmFyaWFibGVzRm9ybShpbmRleCwgdmFyaWFibGVzKTtcbiAgICAgIC8vIEluaXRpYWxpemUgdXBkYXRlZCBIVE1MIGdyYW1tYXJcbiAgICAgIHRoaXMudXBkYXRlQ29uZGl0aW9uSHRtbEdyYW1tYXIoaW5kZXgpO1xuICAgICAgXG4gICAgICAvLyBJbml0aWFsaXplIGFkdmFuY2VkIHNldHRpbmdzIHZhcmlhYmxlc1xuICAgICAgaWYgKHRoaXMuc2V0QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcykge1xuICAgICAgICBjb25zdCBhZHZhbmNlZFZhcmlhYmxlcyA9IHRoaXMuc2V0QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyhzZWxlY3RlZFRlbXBsYXRlKTtcbiAgICAgICAgdGhpcy5jb25kaXRpb25BZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLnNldChpbmRleCwgYWR2YW5jZWRWYXJpYWJsZXMpO1xuICAgICAgICB0aGlzLmJ1aWxkQ29uZGl0aW9uQWR2YW5jZWRWYXJpYWJsZXNGb3JtKGluZGV4LCBhZHZhbmNlZFZhcmlhYmxlcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENsZWFyIHRlbXBsYXRlIGFuZCB2YXJpYWJsZXMgaWYgbm8gdGVtcGxhdGUgc2VsZWN0ZWRcbiAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVXBkYXRlZEh0bWxHcmFtbWFyLmRlbGV0ZShpbmRleCk7XG4gICAgICB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuZ2V0KGluZGV4KTtcbiAgICAgIGlmIChmb3JtQXJyYXkpIHtcbiAgICAgICAgd2hpbGUgKGZvcm1BcnJheS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICBmb3JtQXJyYXkucmVtb3ZlQXQoMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGFkdmFuY2VkRm9ybUFycmF5ID0gdGhpcy5jb25kaXRpb25BZHZhbmNlZFZhcmlhYmxlc0Zvcm1zLmdldChpbmRleCk7XG4gICAgICBpZiAoYWR2YW5jZWRGb3JtQXJyYXkpIHtcbiAgICAgICAgd2hpbGUgKGFkdmFuY2VkRm9ybUFycmF5Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIGFkdmFuY2VkRm9ybUFycmF5LnJlbW92ZUF0KDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIFxuICBwcml2YXRlIGJ1aWxkQ29uZGl0aW9uVmFyaWFibGVzRm9ybShpbmRleDogbnVtYmVyLCB2YXJpYWJsZXM6IGFueVtdKTogdm9pZCB7XG4gICAgbGV0IGZvcm1BcnJheSA9IHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuZ2V0KGluZGV4KTtcbiAgICBpZiAoIWZvcm1BcnJheSkge1xuICAgICAgZm9ybUFycmF5ID0gdGhpcy5mYi5hcnJheShbXSk7XG4gICAgICB0aGlzLmNvbmRpdGlvblZhcmlhYmxlc0Zvcm1zLnNldChpbmRleCwgZm9ybUFycmF5KTtcbiAgICB9XG4gICAgXG4gICAgLy8gRW5zdXJlIGZvcm1BcnJheSBpcyBub3QgdW5kZWZpbmVkIChUeXBlU2NyaXB0IGd1YXJkKVxuICAgIGlmICghZm9ybUFycmF5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIFN0b3JlIHJlZmVyZW5jZSB0byBhdm9pZCBUeXBlU2NyaXB0IGlzc3VlcyBpbiBmb3JFYWNoIGNhbGxiYWNrXG4gICAgLy8gVHlwZVNjcmlwdCBrbm93cyBmb3JtQXJyYXkgaXMgZGVmaW5lZCBoZXJlIGR1ZSB0byB0aGUgZWFybHkgcmV0dXJuIGFib3ZlXG4gICAgY29uc3QgZm9ybUFycmF5UmVmOiBGb3JtQXJyYXkgPSBmb3JtQXJyYXk7XG4gICAgXG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgZm9ybSBhcnJheVxuICAgIHdoaWxlIChmb3JtQXJyYXlSZWYubGVuZ3RoICE9PSAwKSB7XG4gICAgICBmb3JtQXJyYXlSZWYucmVtb3ZlQXQoMCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEFkZCBmb3JtIGdyb3VwcyBmb3IgZWFjaCB2YXJpYWJsZVxuICAgIHZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIC8vIEhhbmRsZSBib29sZWFuIHZhcmlhYmxlcyAtIHVzZSBib29sZWFuIHZhbHVlLCBvdGhlcnMgdXNlIHN0cmluZ1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nIFxuICAgICAgICA/ICh2YXJpYWJsZS52YWx1ZSA9PT0gdHJ1ZSB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gJ3RydWUnIHx8IHZhcmlhYmxlLnZhbHVlID09PSAxKVxuICAgICAgICA6ICh2YXJpYWJsZS52YWx1ZSB8fCAnJyk7XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBhIEZvcm1Hcm91cCBmb3IgZWFjaCB2YXJpYWJsZSB3aXRoIG5hbWUgYW5kIHZhbHVlXG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZS5uYW1lXSxcbiAgICAgICAgdmFsdWU6IFtkZWZhdWx0VmFsdWVdLFxuICAgICAgICB0eXBlOiBbdmFyaWFibGUudHlwZSB8fCAnc3RyaW5nJ10sXG4gICAgICAgIGxhYmVsOiBbdmFyaWFibGUubGFiZWwgfHwgJyddLFxuICAgICAgICBvcHRpb25zOiBbdmFyaWFibGUub3B0aW9ucyB8fCBbXV1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBBZGQgZGF0YVR5cGUgY29udHJvbCBmb3IgdGVzdC1kYXRhIHZhcmlhYmxlcyBpZiBuZWVkZWRcbiAgICAgIGNvbnN0IGxhYmVsID0gdmFyaWFibGUubGFiZWw/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgICBpZiAobGFiZWwgPT09ICd0ZXN0LWRhdGEnIHx8IGxhYmVsID09PSAnc291cmNlLXZhbHVlJyB8fCBsYWJlbCA9PT0gJ3RhcmdldC12YWx1ZScgfHwgXG4gICAgICAgICAgbGFiZWwgPT09ICdzb3VyY2VfdmFsdWUnIHx8IGxhYmVsID09PSAndGFyZ2V0X3ZhbHVlJykge1xuICAgICAgICAvLyBQYXJzZSB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGRhdGEgdHlwZVxuICAgICAgICBjb25zdCB2YWx1ZVN0ciA9IFN0cmluZyhkZWZhdWx0VmFsdWUgfHwgJycpO1xuICAgICAgICBsZXQgZGF0YVR5cGUgPSAncGxhaW4tdGV4dCc7XG4gICAgICAgIGlmICh2YWx1ZVN0ci5zdGFydHNXaXRoKCdAfCcpICYmIHZhbHVlU3RyLmVuZHNXaXRoKCd8JykpIHtcbiAgICAgICAgICBkYXRhVHlwZSA9ICdwYXJhbWV0ZXInO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlU3RyLnN0YXJ0c1dpdGgoJyR8JykgJiYgdmFsdWVTdHIuZW5kc1dpdGgoJ3wnKSkge1xuICAgICAgICAgIGRhdGFUeXBlID0gJ3J1bnRpbWUnO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlU3RyLnN0YXJ0c1dpdGgoJyp8JykgJiYgdmFsdWVTdHIuZW5kc1dpdGgoJ3wnKSkge1xuICAgICAgICAgIGRhdGFUeXBlID0gJ2Vudmlyb25tZW50JztcbiAgICAgICAgfVxuICAgICAgICB2YXJpYWJsZUdyb3VwLmFkZENvbnRyb2woJ2RhdGFUeXBlJywgbmV3IEZvcm1Db250cm9sKGRhdGFUeXBlKSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGZvcm1BcnJheVJlZi5wdXNoKHZhcmlhYmxlR3JvdXApO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdXBkYXRlZCBIVE1MIGdyYW1tYXIgZm9yIHRoaXMgY29uZGl0aW9uXG4gICAgdGhpcy51cGRhdGVDb25kaXRpb25IdG1sR3JhbW1hcihpbmRleCk7XG4gIH1cbiAgXG4gIGdldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzKGluZGV4OiBudW1iZXIpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZ2V0KGluZGV4KSB8fCBbXTtcbiAgfVxuICBcbiAgZ2V0Q29uZGl0aW9uVmFyaWFibGVzRm9ybShpbmRleDogbnVtYmVyKTogRm9ybUFycmF5IHtcbiAgICBsZXQgZm9ybUFycmF5ID0gdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3Jtcy5nZXQoaW5kZXgpO1xuICAgIGlmICghZm9ybUFycmF5KSB7XG4gICAgICBmb3JtQXJyYXkgPSB0aGlzLmZiLmFycmF5KFtdKTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuc2V0KGluZGV4LCBmb3JtQXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybUFycmF5O1xuICB9XG4gIFxuICBnZXRDb25kaXRpb25Gb3JtR3JvdXBBdChpbmRleDogbnVtYmVyLCB2YXJpYWJsZUluZGV4OiBudW1iZXIpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZ2V0Q29uZGl0aW9uVmFyaWFibGVzRm9ybShpbmRleCk7XG4gICAgcmV0dXJuIGZvcm1BcnJheS5hdCh2YXJpYWJsZUluZGV4KSBhcyBGb3JtR3JvdXA7XG4gIH1cbiAgXG4gIGdldENvbmRpdGlvblVwZGF0ZWRIdG1sR3JhbW1hcihpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMuZ2V0KGluZGV4KTtcbiAgICBpZiAoIXRlbXBsYXRlKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uVXBkYXRlZEh0bWxHcmFtbWFyLmdldChpbmRleCkgfHwgdGVtcGxhdGUuaHRtbEdyYW1tYXIgfHwgdGVtcGxhdGUubmF0dXJhbFRleHQgfHwgJyc7XG4gIH1cbiAgXG4gIGdldFNlbGVjdGVkVGVtcGxhdGUoaW5kZXg6IG51bWJlcik6IEFjdGlvblRlbXBsYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMuZ2V0KGluZGV4KSB8fCBudWxsO1xuICB9XG4gIFxuICBnZXRTZWxlY3RDb25maWdGb3JWYXJpYWJsZShpbmRleDogbnVtYmVyLCB2YXJpYWJsZTogYW55KTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICBjb25zdCBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9ICh2YXJpYWJsZS5vcHRpb25zIHx8IFtdKS5tYXAoKG9wdDogc3RyaW5nKSA9PiAoe1xuICAgICAgaWQ6IG9wdCxcbiAgICAgIHZhbHVlOiBvcHQsXG4gICAgICBuYW1lOiBvcHQsXG4gICAgICBsYWJlbDogb3B0XG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogdmFyaWFibGUubmFtZSxcbiAgICAgIHBsYWNlaG9sZGVyOiBgU2VsZWN0ICR7dmFyaWFibGUubGFiZWx9YCxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uQ29uZGl0aW9uVmFyaWFibGVWYWx1ZUNoYW5nZShpbmRleCwgdmFyaWFibGUubmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgXG4gIG9uQ29uZGl0aW9uVmFyaWFibGVWYWx1ZUNoYW5nZShjb25kaXRpb25JbmRleDogbnVtYmVyLCB2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSB0aGUgdmFyaWFibGUgaW4gdGVtcGxhdGVWYXJpYWJsZXMgYXJyYXlcbiAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmNvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzLmdldChjb25kaXRpb25JbmRleCkgfHwgW107XG4gICAgY29uc3QgdmFyaWFibGUgPSB2YXJpYWJsZXMuZmluZCh2ID0+IHYubmFtZSA9PT0gdmFyaWFibGVOYW1lKTtcbiAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgIHZhcmlhYmxlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIC8vIEFsc28gdXBkYXRlIGZvcm0gYXJyYXlcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmNvbmRpdGlvblZhcmlhYmxlc0Zvcm1zLmdldChjb25kaXRpb25JbmRleCk7XG4gICAgaWYgKGZvcm1BcnJheSkge1xuICAgICAgY29uc3QgdmFyaWFibGVJbmRleCA9IGZvcm1BcnJheS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICAgKTtcbiAgICAgIGlmICh2YXJpYWJsZUluZGV4ICE9PSAtMSkge1xuICAgICAgICBmb3JtQXJyYXkuYXQodmFyaWFibGVJbmRleCkuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBVcGRhdGUgSFRNTCBncmFtbWFyIGZvciB0aGlzIGNvbmRpdGlvblxuICAgIHRoaXMudXBkYXRlQ29uZGl0aW9uSHRtbEdyYW1tYXIoY29uZGl0aW9uSW5kZXgpO1xuICAgIFxuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIFxuICBvbkNvbmRpdGlvblZhcmlhYmxlSW5wdXRDaGFuZ2UoY29uZGl0aW9uSW5kZXg6IG51bWJlciwgdmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIHRlbXBsYXRlVmFyaWFibGVzIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5jb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcy5nZXQoY29uZGl0aW9uSW5kZXgpIHx8IFtdO1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGNvbnRyb2xcbiAgICBjb25zdCBmb3JtID0gdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3Jtcy5nZXQoY29uZGl0aW9uSW5kZXgpO1xuICAgIGlmIChmb3JtICYmIGZvcm0uZ2V0KHZhcmlhYmxlTmFtZSkpIHtcbiAgICAgIGZvcm0uZ2V0KHZhcmlhYmxlTmFtZSk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBvbkNvbmRpdGlvblZhcmlhYmxlQm9vbGVhbkNoYW5nZShjb25kaXRpb25JbmRleDogbnVtYmVyLCB2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIHRlbXBsYXRlVmFyaWFibGVzIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5jb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcy5nZXQoY29uZGl0aW9uSW5kZXgpIHx8IFtdO1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGFycmF5XG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3Jtcy5nZXQoY29uZGl0aW9uSW5kZXgpO1xuICAgIGlmICghZm9ybUFycmF5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSBmb3JtQXJyYXkuY29udHJvbHMuZmluZEluZGV4KFxuICAgICAgY29udHJvbCA9PiBjb250cm9sLmdldCgnbmFtZScpPy52YWx1ZSA9PT0gdmFyaWFibGVOYW1lXG4gICAgKTtcbiAgICBpZiAodmFyaWFibGVJbmRleCAhPT0gLTEpIHtcbiAgICAgIGZvcm1BcnJheS5hdCh2YXJpYWJsZUluZGV4KS5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBuZXcgZm9ybSBncm91cCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZU5hbWVdLFxuICAgICAgICB2YWx1ZTogW3ZhbHVlXSxcbiAgICAgICAgdHlwZTogWydib29sZWFuJ10sXG4gICAgICAgIGxhYmVsOiBbdmFyaWFibGU/LmxhYmVsIHx8ICcnXSxcbiAgICAgICAgb3B0aW9uczogW3ZhcmlhYmxlPy5vcHRpb25zIHx8IFtdXVxuICAgICAgfSk7XG4gICAgICAvLyBmb3JtQXJyYXkgaXMgZ3VhcmFudGVlZCB0byBiZSBkZWZpbmVkIGhlcmUgZHVlIHRvIHRoZSBlYXJseSByZXR1cm4gYWJvdmVcbiAgICAgIGZvcm1BcnJheS5wdXNoKHZhcmlhYmxlR3JvdXApO1xuICAgIH1cbiAgICBcbiAgICAvLyBVcGRhdGUgSFRNTCBncmFtbWFyIGZvciB0aGlzIGNvbmRpdGlvblxuICAgIHRoaXMudXBkYXRlQ29uZGl0aW9uSHRtbEdyYW1tYXIoY29uZGl0aW9uSW5kZXgpO1xuICAgIFxuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIFxuICAvKipcbiAgICogU3RyaXAgSFRNTCB0YWdzIGZyb20gYSBzdHJpbmcgZm9yIHNlYXJjaCBmdW5jdGlvbmFsaXR5XG4gICAqL1xuICBwcml2YXRlIHN0cmlwSHRtbFRhZ3MoaHRtbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWh0bWxTdHJpbmcpIHJldHVybiAnJztcbiAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgZGl2IGVsZW1lbnQgdG8gcGFyc2UgSFRNTFxuICAgIGNvbnN0IHRtcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICAgIHRtcC5pbm5lckhUTUwgPSBodG1sU3RyaW5nO1xuICAgIHJldHVybiB0bXAudGV4dENvbnRlbnQgfHwgdG1wLmlubmVyVGV4dCB8fCAnJztcbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSBIVE1MIGdyYW1tYXIgZm9yIGEgc3BlY2lmaWMgY29uZGl0aW9uIHdpdGggYWN0dWFsIHZhcmlhYmxlIHZhbHVlc1xuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVDb25kaXRpb25IdG1sR3JhbW1hcihjb25kaXRpb25JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnNlbGVjdGVkVGVtcGxhdGVzLmdldChjb25kaXRpb25JbmRleCk7XG4gICAgaWYgKCF0ZW1wbGF0ZSB8fCAhdGVtcGxhdGUuaHRtbEdyYW1tYXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgbGV0IHVwZGF0ZWRHcmFtbWFyID0gdGVtcGxhdGUuaHRtbEdyYW1tYXI7XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5jb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcy5nZXQoY29uZGl0aW9uSW5kZXgpIHx8IFtdO1xuICAgIFxuICAgIC8vIFJlcGxhY2UgcGxhY2Vob2xkZXJzIHdpdGggYWN0dWFsIHZhbHVlc1xuICAgIHZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gbmV3IFJlZ0V4cChgPHNwYW5bXj5dKmRhdGEtZXZlbnQta2V5PVwiJHt2YXJpYWJsZS5uYW1lfVwiW14+XSo+Lio/PC9zcGFuPmAsICdnaScpO1xuICAgICAgY29uc3QgdmFsdWUgPSB2YXJpYWJsZS52YWx1ZSB8fCAnJztcbiAgICAgIC8vIEVzY2FwZSBIVE1MIGluIHZhbHVlIHRvIHByZXZlbnQgWFNTXG4gICAgICBjb25zdCBlc2NhcGVkVmFsdWUgPSBTdHJpbmcodmFsdWUpLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbiAgICAgIHVwZGF0ZWRHcmFtbWFyID0gdXBkYXRlZEdyYW1tYXIucmVwbGFjZShwbGFjZWhvbGRlciwgZXNjYXBlZFZhbHVlKTtcbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLmNvbmRpdGlvblVwZGF0ZWRIdG1sR3JhbW1hci5zZXQoY29uZGl0aW9uSW5kZXgsIHVwZGF0ZWRHcmFtbWFyKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb25kaXRpb25BZHZhbmNlZFZhcmlhYmxlc0Zvcm0oaW5kZXg6IG51bWJlciwgdmFyaWFibGVzOiBhbnlbXSk6IHZvaWQge1xuICAgIGxldCBmb3JtQXJyYXkgPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuZ2V0KGluZGV4KTtcbiAgICBpZiAoIWZvcm1BcnJheSkge1xuICAgICAgZm9ybUFycmF5ID0gdGhpcy5mYi5hcnJheShbXSk7XG4gICAgICB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuc2V0KGluZGV4LCBmb3JtQXJyYXkpO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBmb3JtQXJyYXkgaXMgbm90IHVuZGVmaW5lZCAoVHlwZVNjcmlwdCBndWFyZClcbiAgICBpZiAoIWZvcm1BcnJheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFN0b3JlIHJlZmVyZW5jZSB0byBhdm9pZCBUeXBlU2NyaXB0IGlzc3VlcyBpbiBmb3JFYWNoIGNhbGxiYWNrXG4gICAgY29uc3QgZm9ybUFycmF5UmVmOiBGb3JtQXJyYXkgPSBmb3JtQXJyYXk7XG5cbiAgICAvLyBDbGVhciBleGlzdGluZyBmb3JtIGFycmF5XG4gICAgd2hpbGUgKGZvcm1BcnJheVJlZi5sZW5ndGggIT09IDApIHtcbiAgICAgIGZvcm1BcnJheVJlZi5yZW1vdmVBdCgwKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgZm9ybSBncm91cHMgZm9yIGVhY2ggYWR2YW5jZWQgdmFyaWFibGVcbiAgICB2YXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IHR5cGVzXG4gICAgICBsZXQgZGVmYXVsdFZhbHVlOiBhbnk7XG4gICAgICBpZiAodmFyaWFibGUudHlwZSA9PT0gJ3N0cl9saXN0Jykge1xuICAgICAgICAvLyBGb3Igc3RyX2xpc3QsIGNyZWF0ZSBhIEZvcm1BcnJheVxuICAgICAgICBjb25zdCB2YWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZS52YWx1ZSkgPyB2YXJpYWJsZS52YWx1ZSA6IFtdO1xuICAgICAgICBjb25zdCBmb3JtQXJyYXlWYWx1ZSA9IHRoaXMuZmIuYXJyYXkoXG4gICAgICAgICAgdmFsdWVBcnJheS5sZW5ndGggPiAwIFxuICAgICAgICAgICAgPyB2YWx1ZUFycmF5Lm1hcCgoaXRlbTogc3RyaW5nKSA9PiB0aGlzLmZiLmNvbnRyb2woaXRlbSkpXG4gICAgICAgICAgICA6IFt0aGlzLmZiLmNvbnRyb2woJycpXSAvLyBTdGFydCB3aXRoIG9uZSBlbXB0eSBjb250cm9sXG4gICAgICAgICk7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGZvcm1BcnJheVZhbHVlO1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS50eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhcmlhYmxlLnZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudmFsdWUgPT09IHRydWUgfHwgdmFyaWFibGUudmFsdWUgPT09ICd0cnVlJyB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnZhbHVlIHx8ICcnO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDcmVhdGUgYSBGb3JtR3JvdXAgZm9yIGVhY2ggdmFyaWFibGVcbiAgICAgIGNvbnN0IHZhcmlhYmxlR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgbmFtZTogW3ZhcmlhYmxlLm5hbWVdLFxuICAgICAgICB2YWx1ZTogdmFyaWFibGUudHlwZSA9PT0gJ3N0cl9saXN0JyA/IGRlZmF1bHRWYWx1ZSA6IFtkZWZhdWx0VmFsdWVdLFxuICAgICAgICB0eXBlOiBbdmFyaWFibGUudHlwZSB8fCAnc3RyaW5nJ10sXG4gICAgICAgIGxhYmVsOiBbdmFyaWFibGUubGFiZWwgfHwgJyddXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgZm9ybUFycmF5UmVmLnB1c2godmFyaWFibGVHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25kaXRpb25BZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzKGluZGV4OiBudW1iZXIpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uQWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5nZXQoaW5kZXgpIHx8IFtdO1xuICB9XG5cbiAgZ2V0Q29uZGl0aW9uQWR2YW5jZWRWYXJpYWJsZXNGb3JtKGluZGV4OiBudW1iZXIpOiBGb3JtQXJyYXkge1xuICAgIGxldCBmb3JtQXJyYXkgPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuZ2V0KGluZGV4KTtcbiAgICBpZiAoIWZvcm1BcnJheSkge1xuICAgICAgZm9ybUFycmF5ID0gdGhpcy5mYi5hcnJheShbXSk7XG4gICAgICB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuc2V0KGluZGV4LCBmb3JtQXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybUFycmF5O1xuICB9XG5cbiAgZ2V0Q29uZGl0aW9uQWR2YW5jZWRFeHBhbmRlZChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uQWR2YW5jZWRFeHBhbmRlZC5nZXQoaW5kZXgpIHx8IGZhbHNlO1xuICB9XG5cbiAgdG9nZ2xlQ29uZGl0aW9uQWR2YW5jZWQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkRXhwYW5kZWQuZ2V0KGluZGV4KSB8fCBmYWxzZTtcbiAgICB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkRXhwYW5kZWQuc2V0KGluZGV4LCAhY3VycmVudCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKGNvbmRpdGlvbkluZGV4OiBudW1iZXIsIHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSB0aGUgdmFyaWFibGUgaW4gYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyBhcnJheVxuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuY29uZGl0aW9uQWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5nZXQoY29uZGl0aW9uSW5kZXgpIHx8IFtdO1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGVJbmRleCA9IHRoaXMuY29uZGl0aW9uQWR2YW5jZWRWYXJpYWJsZXNGb3Jtcy5nZXQoY29uZGl0aW9uSW5kZXgpPy5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wuZ2V0KCduYW1lJyk/LnZhbHVlID09PSB2YXJpYWJsZU5hbWVcbiAgICApO1xuICAgIGlmICh2YXJpYWJsZUluZGV4ICE9PSB1bmRlZmluZWQgJiYgdmFyaWFibGVJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uQWR2YW5jZWRWYXJpYWJsZXNGb3Jtcy5nZXQoY29uZGl0aW9uSW5kZXgpPy5hdCh2YXJpYWJsZUluZGV4KS5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgb25Db25kaXRpb25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UoY29uZGl0aW9uSW5kZXg6IG51bWJlciwgdmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgYXJyYXlcbiAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZ2V0KGNvbmRpdGlvbkluZGV4KSB8fCBbXTtcbiAgICBjb25zdCB2YXJpYWJsZSA9IHZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgLy8gQWxzbyB1cGRhdGUgZm9ybSBhcnJheVxuICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuZ2V0KGNvbmRpdGlvbkluZGV4KT8uY29udHJvbHMuZmluZEluZGV4KFxuICAgICAgY29udHJvbCA9PiBjb250cm9sLmdldCgnbmFtZScpPy52YWx1ZSA9PT0gdmFyaWFibGVOYW1lXG4gICAgKTtcbiAgICBpZiAodmFyaWFibGVJbmRleCAhPT0gdW5kZWZpbmVkICYmIHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuZ2V0KGNvbmRpdGlvbkluZGV4KT8uYXQodmFyaWFibGVJbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgICAgLy8gRm9yIHN0cl9saXN0LCB0aGUgRm9ybUFycmF5IGlzIGFscmVhZHkgbWFuYWdlZCBpbnNpZGUgQWR2YW5jZWRWYXJpYWJsZXNGb3JtQ29tcG9uZW50LFxuICAgICAgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byByZWJ1aWxkIG9yIHVwZGF0ZSBpdCBoZXJlIHRvIGF2b2lkIGZvY3VzIGxvc3MuXG4gICAgICBpZiAodmFyaWFibGU/LnR5cGUgIT09ICdzdHJfbGlzdCcpIHtcbiAgICAgICAgZm9ybUdyb3VwPy5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29uZGl0aW9uRm9ybUdyb3VwKGluZGV4OiBudW1iZXIpOiBGb3JtR3JvdXAge1xuICAgIC8vIFVzZSBjYWNoZSB0byBhdm9pZCByZXBlYXRlZCBsb29rdXBzXG4gICAgaWYgKHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGUuaGFzKGluZGV4KSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGUuZ2V0KGluZGV4KSE7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuY29uZGl0aW9uc0Zvcm1BcnJheS5hdChpbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGUuc2V0KGluZGV4LCBmb3JtR3JvdXApO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybUdyb3VwO1xuICB9XG4gIFxuICBnZXRDb25kaXRpb25GaWVsZFZhbHVlKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZ2V0Q29uZGl0aW9uRm9ybUdyb3VwKGluZGV4KTtcbiAgICByZXR1cm4gZm9ybUdyb3VwPy5nZXQoJ2ZpZWxkJyk/LnZhbHVlIHx8ICcnO1xuICB9XG4gIFxuICBpc0NvbmRpdGlvbklmKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb25kaXRpb25GaWVsZFZhbHVlKGluZGV4KSA9PT0gJ0NPTkRJVElPTl9JRic7XG4gIH1cbiAgXG4gIGlzQ29uZGl0aW9uRWxzZUlmKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb25kaXRpb25GaWVsZFZhbHVlKGluZGV4KSA9PT0gJ0NPTkRJVElPTl9FTFNFX0lGJztcbiAgfVxuICBcbiAgZ2V0Q29uZGl0aW9uTGFiZWwoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuZ2V0Q29uZGl0aW9uRmllbGRWYWx1ZShpbmRleCk7XG4gICAgaWYgKGZpZWxkVmFsdWUgPT09ICdDT05ESVRJT05fSUYnKSByZXR1cm4gJ0lGJztcbiAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJ0NPTkRJVElPTl9FTFNFX0lGJykgcmV0dXJuICdFTFNFIElGJztcbiAgICByZXR1cm4gJ0VMU0UnO1xuICB9XG4gIFxuICB0cmFja0J5Q29uZGl0aW9uSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgb25JbmNsdWRlRWxzZUNoYW5nZShjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pbmNsdWRlRWxzZSA9IGNoZWNrZWQ7XG4gICAgdGhpcy5jb25kaXRpb25Gb3JtLnBhdGNoVmFsdWUoeyBpbmNsdWRlRWxzZTogY2hlY2tlZCB9KTtcbiAgICBcbiAgICAvLyBNYXJrIGZvciBjaGVjayBzaW5jZSB3ZSdyZSB1c2luZyBPblB1c2hcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVyYWxsIGZvcm0gdmFsaWRpdHkgZm9yIGNvbmRpdGlvbiBzdGVwLlxuICAgKiBJbiBhZGRpdGlvbiB0byBBbmd1bGFyIGZvcm0gdmFsaWRpdHksIHdlIG11c3QgZW5zdXJlIHRoYXQgZm9yIGFueSB0ZW1wbGF0ZSB2YXJpYWJsZVxuICAgKiB3aXRoIGRhdGFLZXkgJ3Rlc3RfZGF0YScgfCAnc291cmNlX3ZhbHVlJyB8ICd0YXJnZXRfdmFsdWUnIGFuZCBkYXRhVHlwZSAncGxhaW4tdGV4dCdcbiAgICogb3IgJ3J1bnRpbWUnLCB0aGUgdmFsdWUgaXMgbm9uLWVtcHR5LlxuICAgKi9cbiAgaXNGb3JtVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgLy8gRmlyc3QsIHJlbHkgb24gdGhlIHJlYWN0aXZlIGZvcm0gdmFsaWRpdHkgZm9yIGJhc2UgY29uZGl0aW9uIGZpZWxkc1xuICAgIGlmICghdGhpcy5jb25kaXRpb25Gb3JtLnZhbGlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhlbiBlbmZvcmNlIHRoZSBzYW1lIHRlc3QtZGF0YSB2YWxpZGF0aW9uIHJ1bGUgdXNlZCBpbiBhY3Rpb24gYnVpbGRlclxuICAgIGxldCBjdXN0b21WYXJpYWJsZXNWYWxpZCA9IHRydWU7XG5cbiAgICB0aGlzLmNvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzLmZvckVhY2goKHZhcmlhYmxlcykgPT4ge1xuICAgICAgaWYgKCF2YXJpYWJsZXMgfHwgIXZhcmlhYmxlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbGxWYWxpZEZvckNvbmRpdGlvbiA9IHZhcmlhYmxlcy5ldmVyeSgodmFyaWFibGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdmFyaWFibGUgJiZcbiAgICAgICAgICAodmFyaWFibGUuZGF0YUtleSA9PT0gJ3Rlc3RfZGF0YScgfHxcbiAgICAgICAgICAgIHZhcmlhYmxlLmRhdGFLZXkgPT09ICdzb3VyY2VfdmFsdWUnIHx8XG4gICAgICAgICAgICB2YXJpYWJsZS5kYXRhS2V5ID09PSAndGFyZ2V0X3ZhbHVlJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHZhcmlhYmxlLmRhdGFUeXBlID09PSAncGxhaW4tdGV4dCcgfHwgdmFyaWFibGUuZGF0YVR5cGUgPT09ICdydW50aW1lJykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YXJpYWJsZS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFhbGxWYWxpZEZvckNvbmRpdGlvbikge1xuICAgICAgICBjdXN0b21WYXJpYWJsZXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGN1c3RvbVZhcmlhYmxlc1ZhbGlkO1xuICB9XG5cbiAgb25DcmVhdGVTdGVwKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0Zvcm1WYWxpZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZGl0aW9uRm9ybS52YWxpZCkge1xuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5jb25kaXRpb25Gb3JtLnZhbHVlO1xuICAgICAgXG4gICAgICAvLyBTeW5jIGFkdmFuY2VkIHZhcmlhYmxlcyBmcm9tIGZvcm0gdG8gYXJyYXkgZm9yIGFsbCBjb25kaXRpb25zXG4gICAgICB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCgodmFyaWFibGVzLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybXMuZ2V0KGluZGV4KTtcbiAgICAgICAgaWYgKGZvcm1BcnJheSkge1xuICAgICAgICAgIHZhcmlhYmxlcy5mb3JFYWNoKCh2YXJpYWJsZSwgdmFySW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGZvcm1BcnJheS5hdCh2YXJJbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgICAgaWYgKGZvcm1Hcm91cCkge1xuICAgICAgICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpPy52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcgJiYgZm9ybVZhbHVlIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB2YWx1ZXMgZnJvbSBGb3JtQXJyYXlcbiAgICAgICAgICAgICAgICB2YXJpYWJsZS52YWx1ZSA9IGZvcm1WYWx1ZS5jb250cm9scy5tYXAoY29udHJvbCA9PiBjb250cm9sLnZhbHVlKS5maWx0ZXIoKHZhbDogc3RyaW5nKSA9PiB2YWwgJiYgdmFsLnRyaW0oKSAhPT0gJycpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhcmlhYmxlLnZhbHVlID0gZm9ybVZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBjb25zdCBzdGVwRGF0YTogQ29uZGl0aW9uRm9ybURhdGEgPSB7XG4gICAgICAgIGNvbmRpdGlvbnM6IGZvcm1WYWx1ZS5jb25kaXRpb25zLm1hcCgoY29uZDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgLy8gRmluZCB0aGUgQWN0aW9uVGVtcGxhdGUgb2JqZWN0IGZyb20gdGhlIHN0b3JlZCBJRC92YWx1ZVxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlSWQgPSBjb25kLnZhbHVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVGVtcGxhdGUgPSB0aGlzLmNvbmRpdGlvblRlbXBsYXRlcy5maW5kKFxuICAgICAgICAgICAgdCA9PiAodC5pZD8udG9TdHJpbmcoKSA9PT0gdGVtcGxhdGVJZCkgfHwgKHQuZGlzcGxheU5hbWUgPT09IHRlbXBsYXRlSWQpXG4gICAgICAgICAgKSB8fCB0aGlzLnNlbGVjdGVkVGVtcGxhdGVzLmdldChpbmRleCk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gR2V0IHRlbXBsYXRlIHZhcmlhYmxlcyBmb3IgdGhpcyBjb25kaXRpb25cbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZVZhcmlhYmxlcyA9IHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZ2V0KGluZGV4KSB8fCBbXTtcbiAgICAgICAgICAvLyBHZXQgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzIGZvciB0aGlzIGNvbmRpdGlvblxuICAgICAgICAgIGNvbnN0IGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgPSB0aGlzLmNvbmRpdGlvbkFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZ2V0KGluZGV4KSB8fCBbXTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmllbGQ6IGNvbmQuZmllbGQsXG4gICAgICAgICAgICBvcGVyYXRvcjogY29uZC5vcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBzZWxlY3RlZFRlbXBsYXRlIHx8IG51bGwsXG4gICAgICAgICAgICB0ZW1wbGF0ZVZhcmlhYmxlczogdGVtcGxhdGVWYXJpYWJsZXMsXG4gICAgICAgICAgICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGNvbmQuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICBtZXRhZGF0YTogY29uZC5tZXRhZGF0YSB8fCAnJ1xuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgICBpbmNsdWRlRWxzZTogZm9ybVZhbHVlLmluY2x1ZGVFbHNlIHx8IGZhbHNlXG4gICAgICB9O1xuICAgICAgY29uc29sZS5sb2coJ3N0ZXBEYXRhJywgc3RlcERhdGEpO1xuICAgICAgdGhpcy5jcmVhdGVTdGVwLmVtaXQoc3RlcERhdGEpO1xuICAgIH1cbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1oLWZ1bGwgY3FhLWJnLXdoaXRlIGNxYS1weC00IGNxYS1weS0yXCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8aDIgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtYmxhY2stMTAwIGNxYS1tYi00XCI+XG4gICAgQ3JlYXRlIENvbmRpdGlvbiBTdGVwXG4gIDwvaDI+XG5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZmxleC0xIGNxYS1vdmVyZmxvdy15LWF1dG9cIj5cbiAgICA8IS0tIENvbmRpdGlvbiBCdWlsZGVyIFNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTNcIj5cbiAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1ncmF5LTkwMFwiPlxuICAgICAgICBDb25kaXRpb24gQnVpbGRlclxuICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENvbmRpdGlvbiBSb3dzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTMgY3FhLW1iLTNcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnNGb3JtQXJyYXkuY29udHJvbHM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlDb25kaXRpb25JbmRleFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiaXNDb25kaXRpb25JZihpKSB8fCBpc0NvbmRpdGlvbkVsc2VJZihpKVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgIDwhLS0gQ29uZGl0aW9uIFJvdyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgICAgICA8IS0tIENvbmRpdGlvbiBMYWJlbCAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgIHt7IGdldENvbmRpdGlvbkxhYmVsKGkpIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gT3BlcmF0b3IgRHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW1heC13LVsxMDBweF0gY3FhLXRleHQtWzEwcHhdXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJnZXRDb25kaXRpb25Gb3JtR3JvdXAoaSlcIiBbY29uZmlnXT1cImdldE9wZXJhdG9yQ29uZmlnKGkpXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgICA8IS0tIFZhbHVlIFRlbXBsYXRlIERyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWluLXctWzE1MHB4XSBjcWEtdGV4dC1bMTBweF1cIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImdldENvbmRpdGlvbkZvcm1Hcm91cChpKVwiIFtjb25maWddPVwiZ2V0VmFsdWVDb25maWcoaSlcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBSZW1vdmUgQnV0dG9uIC0tPlxuICAgICAgICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaSA+PSAxXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwidGV4dFwiXG4gICAgICAgICAgICAgICAgaWNvbj1cImNsb3NlXCJcbiAgICAgICAgICAgICAgICBpY29uUG9zaXRpb249XCJzdGFydFwiXG4gICAgICAgICAgICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdy1mdWxsIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUNvbmRpdGlvbihpKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVtb3ZlIGNvbmRpdGlvbidcIj5cbiAgICAgICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgICAgICA8IS0tIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy04IGNxYS1oLTggY3FhLXJvdW5kZWQgY3FhLXRleHQtZ3JheS01MDAgaG92ZXI6Y3FhLXRleHQtZ3JheS03MDAgaG92ZXI6Y3FhLWJnLWdyYXktMTAwIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUNvbmRpdGlvbihpKVwiICpuZ0lmPVwiaSA+PSAxXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZW1vdmUgY29uZGl0aW9uJ1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LWxnIGNxYS10ZXh0LVsyNHB4XVwiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+IC0tPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gVGVtcGxhdGUgVmFyaWFibGVzIFNlY3Rpb24gKHNob3duIHdoZW4gdGVtcGxhdGUgaXMgc2VsZWN0ZWQpIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldFNlbGVjdGVkVGVtcGxhdGUoaSlcIiBjbGFzcz1cImNxYS1tdC0yXCI+XG4gICAgICAgICAgICAgIDwhLS0gVGVtcGxhdGUgR3JhbW1hciBEaXNwbGF5IC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZmxleC13cmFwIGNxYS1nYXAtMSBjcWEtdGV4dC1zbSBjcWEtdGV4dC1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYWN0aW9uLWZvcm1hdCBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzIzcHhdIGNxYS10ZXh0LWJsYWNrLTEwMFwiXG4gICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFNlbGVjdGVkVGVtcGxhdGUoaSk/Lmh0bWxHcmFtbWFyIHx8IGdldFNlbGVjdGVkVGVtcGxhdGUoaSk/Lm5hdHVyYWxUZXh0IHx8ICcnXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPCEtLSBUZW1wbGF0ZSBWYXJpYWJsZXMgRm9ybSBDb21wb25lbnQgKGluY2x1ZGVzIERlc2NyaXB0aW9uIGFuZCBNZXRhZGF0YSkgLS0+XG4gICAgICAgICAgICAgIDxjcWEtdGVtcGxhdGUtdmFyaWFibGVzLWZvcm1cbiAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlO1wiXG4gICAgICAgICAgICAgICAgW3RlbXBsYXRlVmFyaWFibGVzXT1cImdldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzKGkpXCJcbiAgICAgICAgICAgICAgICBbdmFyaWFibGVzRm9ybV09XCJnZXRDb25kaXRpb25WYXJpYWJsZXNGb3JtKGkpXCJcbiAgICAgICAgICAgICAgICBbbWV0YWRhdGFdPVwiZ2V0Q29uZGl0aW9uRm9ybUdyb3VwKGkpLmdldCgnbWV0YWRhdGEnKT8udmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCJnZXRDb25kaXRpb25Gb3JtR3JvdXAoaSkuZ2V0KCdkZXNjcmlwdGlvbicpPy52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgW2VsZW1lbnRPcHRpb25zXT1cImVsZW1lbnRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbaGFzTW9yZUVsZW1lbnRzXT1cImhhc01vcmVFbGVtZW50c1wiXG4gICAgICAgICAgICAgICAgW2lzTG9hZGluZ0VsZW1lbnRzXT1cImlzTG9hZGluZ0VsZW1lbnRzXCJcbiAgICAgICAgICAgICAgICBbc2NyZWVuTmFtZU9wdGlvbnNdPVwic2NyZWVuTmFtZU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIFtoYXNNb3JlU2NyZWVuTmFtZXNdPVwiaGFzTW9yZVNjcmVlbk5hbWVzXCJcbiAgICAgICAgICAgICAgICBbaXNMb2FkaW5nU2NyZWVuTmFtZXNdPVwiaXNMb2FkaW5nU2NyZWVuTmFtZXNcIlxuICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJPcHRpb25zXT1cInBhcmFtZXRlck9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIFtoYXNNb3JlUGFyYW1ldGVyc109XCJoYXNNb3JlUGFyYW1ldGVyc1wiXG4gICAgICAgICAgICAgICAgW2lzTG9hZGluZ1BhcmFtZXRlcnNdPVwiaXNMb2FkaW5nUGFyYW1ldGVyc1wiXG4gICAgICAgICAgICAgICAgW2Vudmlyb25tZW50T3B0aW9uc109XCJlbnZpcm9ubWVudE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIFtoYXNNb3JlRW52aXJvbm1lbnRzXT1cImhhc01vcmVFbnZpcm9ubWVudHNcIlxuICAgICAgICAgICAgICAgIFtpc0xvYWRpbmdFbnZpcm9ubWVudHNdPVwiaXNMb2FkaW5nRW52aXJvbm1lbnRzXCJcbiAgICAgICAgICAgICAgICBbZGVmYXVsdFRlc3REYXRhUHJvZmlsZUlkXT1cImRlZmF1bHRUZXN0RGF0YVByb2ZpbGVJZFwiXG4gICAgICAgICAgICAgICAgW2RlZmF1bHRUZXN0RGF0YVN0YXJ0SW5kZXhdPVwiZGVmYXVsdFRlc3REYXRhU3RhcnRJbmRleFwiXG4gICAgICAgICAgICAgICAgKHZhcmlhYmxlVmFsdWVDaGFuZ2UpPVwib25Db25kaXRpb25WYXJpYWJsZVZhbHVlQ2hhbmdlKGksICRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAodmFyaWFibGVCb29sZWFuQ2hhbmdlKT1cIm9uQ29uZGl0aW9uVmFyaWFibGVCb29sZWFuQ2hhbmdlKGksICRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAobWV0YWRhdGFDaGFuZ2UpPVwiZ2V0Q29uZGl0aW9uRm9ybUdyb3VwKGkpLmdldCgnbWV0YWRhdGEnKT8uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGRlc2NyaXB0aW9uQ2hhbmdlKT1cImdldENvbmRpdGlvbkZvcm1Hcm91cChpKS5nZXQoJ2Rlc2NyaXB0aW9uJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChsb2FkTW9yZUVsZW1lbnRzKT1cImxvYWRNb3JlRWxlbWVudHMuZW1pdCgpXCJcbiAgICAgICAgICAgICAgICAoc2VhcmNoRWxlbWVudHMpPVwic2VhcmNoRWxlbWVudHMuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoc2VhcmNoRWxlbWVudHNCeVNjcmVlbk5hbWUpPVwic2VhcmNoRWxlbWVudHNCeVNjcmVlbk5hbWUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY3JlYXRlRWxlbWVudCk9XCJjcmVhdGVFbGVtZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNlYXJjaFNjcmVlbk5hbWUpPVwic2VhcmNoU2NyZWVuTmFtZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChsb2FkTW9yZVNjcmVlbk5hbWVzKT1cImxvYWRNb3JlU2NyZWVuTmFtZXMuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY3JlYXRlU2NyZWVuTmFtZVJlcXVlc3QpPVwiY3JlYXRlU2NyZWVuTmFtZVJlcXVlc3QuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoc2VhcmNoUGFyYW1ldGVycyk9XCJzZWFyY2hQYXJhbWV0ZXJzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGxvYWRNb3JlUGFyYW1ldGVycyk9XCJsb2FkTW9yZVBhcmFtZXRlcnMuZW1pdCgpXCJcbiAgICAgICAgICAgICAgICAoc2VhcmNoRW52aXJvbm1lbnRzKT1cInNlYXJjaEVudmlyb25tZW50cy5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChsb2FkTW9yZUVudmlyb25tZW50cyk9XCJsb2FkTW9yZUVudmlyb25tZW50cy5lbWl0KClcIj5cbiAgICAgICAgICAgICAgPC9jcWEtdGVtcGxhdGUtdmFyaWFibGVzLWZvcm0+XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8IS0tIEFkdmFuY2VkIFNldHRpbmdzIFZhcmlhYmxlcyBGb3JtIC0tPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0Q29uZGl0aW9uQWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyhpKS5sZW5ndGggPiAwXCIgY2xhc3M9XCJjcWEtbXQtNFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtdy1mdWxsIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTIgY3FhLXRleHQtc20gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtYm9yZGVyLW5vbmUgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1wLTAgY3FhLW1iLTEuNVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb25kaXRpb25BZHZhbmNlZChpKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XVwiPkFkdmFuY2VkPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1iYXNlXCIgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cImdldENvbmRpdGlvbkFkdmFuY2VkRXhwYW5kZWQoaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICBleHBhbmRfbW9yZVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0Q29uZGl0aW9uQWR2YW5jZWRFeHBhbmRlZChpKVwiIGNsYXNzPVwiY3FhLW10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGNxYS1hZHZhbmNlZC12YXJpYWJsZXMtZm9ybSBcbiAgICAgICAgICAgICAgICAgICAgICBbYWR2YW5jZWRWYXJpYWJsZXNdPVwiZ2V0Q29uZGl0aW9uQWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyhpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FkdmFuY2VkVmFyaWFibGVGb3JtXT1cImdldENvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVzRm9ybShpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKHZhcmlhYmxlQm9vbGVhbkNoYW5nZSk9XCJvbkNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKGksICRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAodmFyaWFibGVWYWx1ZUNoYW5nZSk9XCJvbkNvbmRpdGlvbkFkdmFuY2VkVmFyaWFibGVWYWx1ZUNoYW5nZShpLCAkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2NxYS1hZHZhbmNlZC12YXJpYWJsZXMtZm9ybT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEFkZCBDb25kaXRpb24gQnV0dG9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1ib3JkZXItMiBjcWEtYm9yZGVyLWRhc2hlZCBjcWEtYm9yZGVyLWdyYXktMzAwIGNxYS1yb3VuZGVkLWxnIGNxYS1wLTEgY3FhLW10LTNcIj5cbiAgICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgICB2YXJpYW50PVwidGV4dFwiXG4gICAgICAgICAgaWNvbj1cImFkZFwiXG4gICAgICAgICAgaWNvblBvc2l0aW9uPVwic3RhcnRcIlxuICAgICAgICAgIFtjdXN0b21DbGFzc109XCInY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlcidcIlxuICAgICAgICAgIFt0ZXh0XT1cIidBZGQgQ29uZGl0aW9uJ1wiXG4gICAgICAgICAgKGNsaWNrZWQpPVwiYWRkQ29uZGl0aW9uKCdDT05ESVRJT05fRUxTRV9JRicpXCI+XG4gICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBJbmNsdWRlIEVMU0UgQnJhbmNoIFNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtbWItNiBjcWEtcC0zIGNxYS1iZy1ncmF5LTUwIGNxYS1yb3VuZGVkLWxnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1ncmF5LTkwMCBjcWEtbWItMVwiPlxuICAgICAgICAgIEluY2x1ZGUgRUxTRSBicmFuY2hcbiAgICAgICAgPC9oMz5cbiAgICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICBFeGVjdXRlIGFsdGVybmF0aXZlIHN0ZXBzIHdoZW4gY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgW2NoZWNrZWRdPVwiaW5jbHVkZUVsc2VcIiAoY2hhbmdlKT1cIm9uSW5jbHVkZUVsc2VDaGFuZ2UoJGV2ZW50LmNoZWNrZWQpXCIgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMlwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIHRleHQ9XCJDYW5jZWxcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8Y3FhLWJ1dHRvbiAqbmdJZj1cIiFpc0NyZWF0aW5nU3RlcFwiIGNsYXNzPVwiY3FhLXctMS8yXCIgdmFyaWFudD1cImZpbGxlZFwiIHRleHQ9XCJDcmVhdGUgU3RlcFwiIFtjdXN0b21DbGFzc109XCInY3FhLWZsZXgtMSBjcWEtdy1mdWxsJ1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzRm9ybVZhbGlkKClcIlxuICAgICAgKGNsaWNrZWQpPVwib25DcmVhdGVTdGVwKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGRpdiAqbmdJZj1cImlzQ3JlYXRpbmdTdGVwXCIgY2xhc3M9XCJjcWEtdy0xLzIgY3FhLWZsZXgtMSBjcWEtbWluLWgtWzM4cHhdIGNxYS1yb3VuZGVkLVs4cHhdXCI+XG4gICAgICA8Y3FhLWJhZGdlIGxhYmVsPVwiQ3JlYXRpbmfigKZcIiBpY29uPVwiYXV0b3JlbmV3XCIgW2lzTG9hZGluZ109XCJ0cnVlXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgW2NlbnRlckNvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgIFtpbmxpbmVTdHlsZXNdPVwiJ21pbi1oZWlnaHQ6IDM4cHg7IGhlaWdodDogMzhweDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7J1wiXG4gICAgICAgIHZhcmlhbnQ9XCJpbmZvXCIgc2l6ZT1cIm1lZGl1bVwiPjwvY3FhLWJhZGdlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==