verben-ng-ui 1.3.1 → 1.3.3

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.
@@ -9,7 +9,7 @@ export class SortTableComponent {
9
9
  displayedOptions = 4;
10
10
  propertyText = 'Property';
11
11
  showMoreText = 'Show more';
12
- sortButtonText = 'Sort';
12
+ sortButtonText = 'Confirm';
13
13
  pd;
14
14
  mg;
15
15
  height;
@@ -130,6 +130,7 @@ export class SortTableComponent {
130
130
  this.updateSortButtonState();
131
131
  this.checkAll = false;
132
132
  this.resetSortData.emit();
133
+ this.applySort();
133
134
  }
134
135
  updateSortButtonState() {
135
136
  this.disableSortButton = this.countSelectedSorts() === 0;
@@ -176,11 +177,11 @@ export class SortTableComponent {
176
177
  this.draggedIndex = null;
177
178
  }
178
179
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: SortTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
179
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: SortTableComponent, selector: "verben-sort-table", inputs: { enableDragAndDrop: "enableDragAndDrop", sortOptions: "sortOptions", resetText: "resetText", displayedOptions: "displayedOptions", propertyText: "propertyText", showMoreText: "showMoreText", sortButtonText: "sortButtonText", pd: "pd", mg: "mg", height: "height", width: "width", bgColor: "bgColor", boxShadow: "boxShadow", textColor: "textColor", primaryColor: "primaryColor", secondaryColor: "secondaryColor", tertiaryColor: "tertiaryColor", border: "border", borderRadius: "borderRadius", selectWidth: "selectWidth", containerHeight: "containerHeight" }, outputs: { selectedOptions: "selectedOptions", resetSortData: "resetSortData" }, ngImport: i0, template: "<div\n [style.background-color]=\"bgColor\"\n [style.box-shadow]=\"boxShadow\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.padding]=\"pd\"\n class=\"sort-wrapper\"\n>\n <!-- Header Section -->\n <div class=\"sort-header flex justify-between text-sm\">\n <span class=\"sort-title font-semibold\">\n Sort\n <sup [style.color]=\"secondaryColor\">[{{ countSelectedSorts() }}]</sup>\n </span>\n <span\n [style.color]=\"secondaryColor\"\n [style.font-size]=\"'12px'\"\n class=\"cursor-pointer\"\n (click)=\"resetSort()\"\n >\n {{ resetText }}\n </span>\n </div>\n\n <hr />\n\n <!-- Sort Options (Scrollable Section) -->\n <div class=\"sort-options flex-grow overflow-y-auto my-2\">\n <p class=\"pd\">{{ propertyText }}</p>\n\n <div class=\"flex items-center gap\" [style.padding]=\"'4px 10px'\">\n <label [style.font-size]=\"'13px'\" [style.font-weight]=\"'500'\">\n <input type=\"checkbox\" [checked]=\"checkAll\" (change)=\"toggleSelectAll()\" />\n Select All\n </label>\n </div>\n\n <div\n *ngFor=\"let option of visibleSortOptions; let i = index\"\n [attr.draggable]=\"enableDragAndDrop\"\n (dragstart)=\"onDragStart(i, $event)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop(i, $event)\"\n class=\"sort-option\"\n >\n <div [style.font-size]=\"'14px'\" [style.margin-top]=\"'13px'\">\n <div class=\"flex items-center gap-md\">\n <verben-svg\n *ngIf=\"enableDragAndDrop\"\n fill=\"var(--vbn-color-text)\"\n [width]=\"25\"\n class=\"svg\"\n icon=\"square-dot\"\n ></verben-svg>\n <div class=\"flex items-center gap\">\n <input\n type=\"checkbox\"\n [checked]=\"option.checked\"\n (change)=\"toggleSort(i)\"\n />\n <span>{{ option.name }}</span>\n </div>\n </div>\n\n <!-- Sorting Controls -->\n <div class=\"flex items-center gap\" [style.margin-left]=\"'35px'\">\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'Number'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"asc\"\n [checked]=\"selectedOrders.get(i) === 'asc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'asc')\"\n />\n 1-100\n </label>\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'Number'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"desc\"\n [checked]=\"selectedOrders.get(i) === 'desc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'desc')\"\n />\n 100-1\n </label>\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'String' || option.type === 'Date'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"asc\"\n [checked]=\"selectedOrders.get(i) === 'asc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'asc')\"\n />\n A-Z\n </label>\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'String' || option.type === 'Date'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"desc\"\n [checked]=\"selectedOrders.get(i) === 'desc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'desc')\"\n />\n Z-A\n </label>\n </div>\n </div>\n </div>\n\n <!-- Show More -->\n <div *ngIf=\"showMore && hiddenSortOptions.length > 0\">\n <span\n [style.padding]=\"'20px 10px 0px 10px'\"\n [style.color]=\"'var(--vbn-color-text)'\"\n class=\"cursor-pointer block\"\n (click)=\"toggleShowMore()\"\n >\n {{ showMoreText }}\n </span>\n </div>\n </div>\n\n <hr />\n\n <!-- Sort Button -->\n <div class=\"btn-wrapper mt-2 flex-shrink-0\">\n <button\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.padding]=\"'0.2rem 1.6rem'\"\n [style.background-color]=\"primaryColor\"\n [style.color]=\"tertiaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'600'\"\n [disabled]=\"countSelectedSorts() === 0\"\n [ngClass]=\"{\n disabledBtn: countSelectedSorts() === 0,\n enableBtn: countSelectedSorts() !== 0\n }\"\n (click)=\"applySort()\"\n >\n {{ sortButtonText }}\n </button>\n </div>\n</div>\n", styles: ["hr{border:1px solid var(--vbn-color-border);margin:.8rem 0rem}.flex{display:flex}.justify-between{justify-content:space-between}.items-center{align-items:center}.font-semibold{font-weight:600}.font-normal{font-weight:400}.text-sm{font-size:14px}.gap{gap:7px}.gap-sm{gap:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}.pd{padding:10px}.sort-header{margin-bottom:10px;padding:10px 0}input[type=checkbox].checked{accent-color:var(--vbn-color-border-focus)}.block{display:block}.btn-wrapper{display:flex;justify-content:end}.gap-md{gap:2px}.disabledBtn{cursor:not-allowed}.enabledBtn{cursor:pointer}.sort-wrapper{display:flex;flex-direction:column;overflow:hidden}.sort-options{flex-grow:1;overflow-y:auto;margin-top:.5rem;margin-bottom:.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }] });
180
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: SortTableComponent, selector: "verben-sort-table", inputs: { enableDragAndDrop: "enableDragAndDrop", sortOptions: "sortOptions", resetText: "resetText", displayedOptions: "displayedOptions", propertyText: "propertyText", showMoreText: "showMoreText", sortButtonText: "sortButtonText", pd: "pd", mg: "mg", height: "height", width: "width", bgColor: "bgColor", boxShadow: "boxShadow", textColor: "textColor", primaryColor: "primaryColor", secondaryColor: "secondaryColor", tertiaryColor: "tertiaryColor", border: "border", borderRadius: "borderRadius", selectWidth: "selectWidth", containerHeight: "containerHeight" }, outputs: { selectedOptions: "selectedOptions", resetSortData: "resetSortData" }, ngImport: i0, template: "<div\n [style.background-color]=\"bgColor\"\n [style.box-shadow]=\"boxShadow\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.padding]=\"pd\"\n class=\"sort-wrapper\"\n>\n <!-- Header Section -->\n <div class=\"sort-header flex justify-between text-sm\">\n <span class=\"sort-title font-semibold\">\n Sort\n <sup [style.color]=\"secondaryColor\">[{{ countSelectedSorts() }}]</sup>\n </span>\n <span\n [style.color]=\"secondaryColor\"\n [style.font-size]=\"'12px'\"\n class=\"cursor-pointer\"\n (click)=\"resetSort()\"\n >\n {{ resetText }}\n </span>\n </div>\n\n <hr />\n\n <!-- Sort Options (Scrollable Section) -->\n <div class=\"sort-options flex-grow overflow-y-auto my-2\">\n <p class=\"pd\">{{ propertyText }}</p>\n\n <div class=\"flex items-center gap\" [style.padding]=\"'4px 10px'\">\n <label [style.font-size]=\"'13px'\" [style.font-weight]=\"'500'\">\n <input\n type=\"checkbox\"\n [checked]=\"checkAll\"\n (change)=\"toggleSelectAll()\"\n />\n Select All\n </label>\n </div>\n\n <div\n *ngFor=\"let option of visibleSortOptions; let i = index\"\n [attr.draggable]=\"enableDragAndDrop\"\n (dragstart)=\"onDragStart(i, $event)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop(i, $event)\"\n class=\"sort-option\"\n >\n <div [style.font-size]=\"'14px'\" [style.margin-top]=\"'13px'\">\n <div class=\"flex items-center gap-md\">\n <verben-svg\n *ngIf=\"enableDragAndDrop\"\n fill=\"var(--vbn-color-text)\"\n [width]=\"25\"\n class=\"svg\"\n icon=\"square-dot\"\n ></verben-svg>\n <div class=\"flex items-center gap\">\n <input\n type=\"checkbox\"\n [checked]=\"option.checked\"\n (change)=\"toggleSort(i)\"\n />\n <span>{{ option.name }}</span>\n </div>\n </div>\n\n <!-- Sorting Controls -->\n <div class=\"flex items-center gap\" [style.margin-left]=\"'35px'\">\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'Number'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"asc\"\n [checked]=\"selectedOrders.get(i) === 'asc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'asc')\"\n />\n 1-100\n </label>\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'Number'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"desc\"\n [checked]=\"selectedOrders.get(i) === 'desc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'desc')\"\n />\n 100-1\n </label>\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'String' || option.type === 'Date'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"asc\"\n [checked]=\"selectedOrders.get(i) === 'asc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'asc')\"\n />\n A-Z\n </label>\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'String' || option.type === 'Date'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"desc\"\n [checked]=\"selectedOrders.get(i) === 'desc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'desc')\"\n />\n Z-A\n </label>\n </div>\n </div>\n </div>\n\n <!-- Show More -->\n <div *ngIf=\"showMore && hiddenSortOptions.length > 0\">\n <span\n [style.padding]=\"'20px 10px 0px 10px'\"\n [style.color]=\"'var(--vbn-color-text)'\"\n class=\"cursor-pointer block\"\n (click)=\"toggleShowMore()\"\n >\n {{ showMoreText }}\n </span>\n </div>\n </div>\n\n <hr />\n\n <!-- Sort Button -->\n <div class=\"btn-wrapper mt-2 flex-shrink-0\">\n <button\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.padding]=\"'0.2rem 1.6rem'\"\n [style.background-color]=\"primaryColor\"\n [style.color]=\"tertiaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'600'\"\n (click)=\"applySort()\"\n >\n {{ sortButtonText }}\n </button>\n </div>\n</div>\n", styles: ["hr{border:1px solid var(--vbn-color-border);margin:.8rem 0rem}.flex{display:flex}.justify-between{justify-content:space-between}.items-center{align-items:center}.font-semibold{font-weight:600}.font-normal{font-weight:400}.text-sm{font-size:14px}.gap{gap:7px}.gap-sm{gap:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}.pd{padding:10px}.sort-header{margin-bottom:10px;padding:10px 0}input[type=checkbox].checked{accent-color:var(--vbn-color-border-focus)}.block{display:block}.btn-wrapper{display:flex;justify-content:end}.gap-md{gap:2px}.disabledBtn{cursor:not-allowed}.enabledBtn{cursor:pointer}.sort-wrapper{display:flex;flex-direction:column;overflow:hidden}.sort-options{flex-grow:1;overflow-y:auto;margin-top:.5rem;margin-bottom:.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }] });
180
181
  }
181
182
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: SortTableComponent, decorators: [{
182
183
  type: Component,
183
- args: [{ selector: 'verben-sort-table', template: "<div\n [style.background-color]=\"bgColor\"\n [style.box-shadow]=\"boxShadow\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.padding]=\"pd\"\n class=\"sort-wrapper\"\n>\n <!-- Header Section -->\n <div class=\"sort-header flex justify-between text-sm\">\n <span class=\"sort-title font-semibold\">\n Sort\n <sup [style.color]=\"secondaryColor\">[{{ countSelectedSorts() }}]</sup>\n </span>\n <span\n [style.color]=\"secondaryColor\"\n [style.font-size]=\"'12px'\"\n class=\"cursor-pointer\"\n (click)=\"resetSort()\"\n >\n {{ resetText }}\n </span>\n </div>\n\n <hr />\n\n <!-- Sort Options (Scrollable Section) -->\n <div class=\"sort-options flex-grow overflow-y-auto my-2\">\n <p class=\"pd\">{{ propertyText }}</p>\n\n <div class=\"flex items-center gap\" [style.padding]=\"'4px 10px'\">\n <label [style.font-size]=\"'13px'\" [style.font-weight]=\"'500'\">\n <input type=\"checkbox\" [checked]=\"checkAll\" (change)=\"toggleSelectAll()\" />\n Select All\n </label>\n </div>\n\n <div\n *ngFor=\"let option of visibleSortOptions; let i = index\"\n [attr.draggable]=\"enableDragAndDrop\"\n (dragstart)=\"onDragStart(i, $event)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop(i, $event)\"\n class=\"sort-option\"\n >\n <div [style.font-size]=\"'14px'\" [style.margin-top]=\"'13px'\">\n <div class=\"flex items-center gap-md\">\n <verben-svg\n *ngIf=\"enableDragAndDrop\"\n fill=\"var(--vbn-color-text)\"\n [width]=\"25\"\n class=\"svg\"\n icon=\"square-dot\"\n ></verben-svg>\n <div class=\"flex items-center gap\">\n <input\n type=\"checkbox\"\n [checked]=\"option.checked\"\n (change)=\"toggleSort(i)\"\n />\n <span>{{ option.name }}</span>\n </div>\n </div>\n\n <!-- Sorting Controls -->\n <div class=\"flex items-center gap\" [style.margin-left]=\"'35px'\">\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'Number'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"asc\"\n [checked]=\"selectedOrders.get(i) === 'asc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'asc')\"\n />\n 1-100\n </label>\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'Number'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"desc\"\n [checked]=\"selectedOrders.get(i) === 'desc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'desc')\"\n />\n 100-1\n </label>\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'String' || option.type === 'Date'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"asc\"\n [checked]=\"selectedOrders.get(i) === 'asc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'asc')\"\n />\n A-Z\n </label>\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'String' || option.type === 'Date'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"desc\"\n [checked]=\"selectedOrders.get(i) === 'desc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'desc')\"\n />\n Z-A\n </label>\n </div>\n </div>\n </div>\n\n <!-- Show More -->\n <div *ngIf=\"showMore && hiddenSortOptions.length > 0\">\n <span\n [style.padding]=\"'20px 10px 0px 10px'\"\n [style.color]=\"'var(--vbn-color-text)'\"\n class=\"cursor-pointer block\"\n (click)=\"toggleShowMore()\"\n >\n {{ showMoreText }}\n </span>\n </div>\n </div>\n\n <hr />\n\n <!-- Sort Button -->\n <div class=\"btn-wrapper mt-2 flex-shrink-0\">\n <button\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.padding]=\"'0.2rem 1.6rem'\"\n [style.background-color]=\"primaryColor\"\n [style.color]=\"tertiaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'600'\"\n [disabled]=\"countSelectedSorts() === 0\"\n [ngClass]=\"{\n disabledBtn: countSelectedSorts() === 0,\n enableBtn: countSelectedSorts() !== 0\n }\"\n (click)=\"applySort()\"\n >\n {{ sortButtonText }}\n </button>\n </div>\n</div>\n", styles: ["hr{border:1px solid var(--vbn-color-border);margin:.8rem 0rem}.flex{display:flex}.justify-between{justify-content:space-between}.items-center{align-items:center}.font-semibold{font-weight:600}.font-normal{font-weight:400}.text-sm{font-size:14px}.gap{gap:7px}.gap-sm{gap:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}.pd{padding:10px}.sort-header{margin-bottom:10px;padding:10px 0}input[type=checkbox].checked{accent-color:var(--vbn-color-border-focus)}.block{display:block}.btn-wrapper{display:flex;justify-content:end}.gap-md{gap:2px}.disabledBtn{cursor:not-allowed}.enabledBtn{cursor:pointer}.sort-wrapper{display:flex;flex-direction:column;overflow:hidden}.sort-options{flex-grow:1;overflow-y:auto;margin-top:.5rem;margin-bottom:.5rem}\n"] }]
184
+ args: [{ selector: 'verben-sort-table', template: "<div\n [style.background-color]=\"bgColor\"\n [style.box-shadow]=\"boxShadow\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.padding]=\"pd\"\n class=\"sort-wrapper\"\n>\n <!-- Header Section -->\n <div class=\"sort-header flex justify-between text-sm\">\n <span class=\"sort-title font-semibold\">\n Sort\n <sup [style.color]=\"secondaryColor\">[{{ countSelectedSorts() }}]</sup>\n </span>\n <span\n [style.color]=\"secondaryColor\"\n [style.font-size]=\"'12px'\"\n class=\"cursor-pointer\"\n (click)=\"resetSort()\"\n >\n {{ resetText }}\n </span>\n </div>\n\n <hr />\n\n <!-- Sort Options (Scrollable Section) -->\n <div class=\"sort-options flex-grow overflow-y-auto my-2\">\n <p class=\"pd\">{{ propertyText }}</p>\n\n <div class=\"flex items-center gap\" [style.padding]=\"'4px 10px'\">\n <label [style.font-size]=\"'13px'\" [style.font-weight]=\"'500'\">\n <input\n type=\"checkbox\"\n [checked]=\"checkAll\"\n (change)=\"toggleSelectAll()\"\n />\n Select All\n </label>\n </div>\n\n <div\n *ngFor=\"let option of visibleSortOptions; let i = index\"\n [attr.draggable]=\"enableDragAndDrop\"\n (dragstart)=\"onDragStart(i, $event)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop(i, $event)\"\n class=\"sort-option\"\n >\n <div [style.font-size]=\"'14px'\" [style.margin-top]=\"'13px'\">\n <div class=\"flex items-center gap-md\">\n <verben-svg\n *ngIf=\"enableDragAndDrop\"\n fill=\"var(--vbn-color-text)\"\n [width]=\"25\"\n class=\"svg\"\n icon=\"square-dot\"\n ></verben-svg>\n <div class=\"flex items-center gap\">\n <input\n type=\"checkbox\"\n [checked]=\"option.checked\"\n (change)=\"toggleSort(i)\"\n />\n <span>{{ option.name }}</span>\n </div>\n </div>\n\n <!-- Sorting Controls -->\n <div class=\"flex items-center gap\" [style.margin-left]=\"'35px'\">\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'Number'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"asc\"\n [checked]=\"selectedOrders.get(i) === 'asc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'asc')\"\n />\n 1-100\n </label>\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'Number'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"desc\"\n [checked]=\"selectedOrders.get(i) === 'desc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'desc')\"\n />\n 100-1\n </label>\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'String' || option.type === 'Date'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"asc\"\n [checked]=\"selectedOrders.get(i) === 'asc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'asc')\"\n />\n A-Z\n </label>\n <label\n class=\"flex items-center gap-sm\"\n *ngIf=\"option.type === 'String' || option.type === 'Date'\"\n >\n <input\n type=\"radio\"\n name=\"sortOrder{{ i }}\"\n value=\"desc\"\n [checked]=\"selectedOrders.get(i) === 'desc'\"\n [disabled]=\"!option.checked\"\n (change)=\"setSortOrder(i, 'desc')\"\n />\n Z-A\n </label>\n </div>\n </div>\n </div>\n\n <!-- Show More -->\n <div *ngIf=\"showMore && hiddenSortOptions.length > 0\">\n <span\n [style.padding]=\"'20px 10px 0px 10px'\"\n [style.color]=\"'var(--vbn-color-text)'\"\n class=\"cursor-pointer block\"\n (click)=\"toggleShowMore()\"\n >\n {{ showMoreText }}\n </span>\n </div>\n </div>\n\n <hr />\n\n <!-- Sort Button -->\n <div class=\"btn-wrapper mt-2 flex-shrink-0\">\n <button\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.padding]=\"'0.2rem 1.6rem'\"\n [style.background-color]=\"primaryColor\"\n [style.color]=\"tertiaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'600'\"\n (click)=\"applySort()\"\n >\n {{ sortButtonText }}\n </button>\n </div>\n</div>\n", styles: ["hr{border:1px solid var(--vbn-color-border);margin:.8rem 0rem}.flex{display:flex}.justify-between{justify-content:space-between}.items-center{align-items:center}.font-semibold{font-weight:600}.font-normal{font-weight:400}.text-sm{font-size:14px}.gap{gap:7px}.gap-sm{gap:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}.pd{padding:10px}.sort-header{margin-bottom:10px;padding:10px 0}input[type=checkbox].checked{accent-color:var(--vbn-color-border-focus)}.block{display:block}.btn-wrapper{display:flex;justify-content:end}.gap-md{gap:2px}.disabledBtn{cursor:not-allowed}.enabledBtn{cursor:pointer}.sort-wrapper{display:flex;flex-direction:column;overflow:hidden}.sort-options{flex-grow:1;overflow-y:auto;margin-top:.5rem;margin-bottom:.5rem}\n"] }]
184
185
  }], propDecorators: { enableDragAndDrop: [{
185
186
  type: Input
186
187
  }], sortOptions: [{
@@ -228,4 +229,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
228
229
  }], resetSortData: [{
229
230
  type: Output
230
231
  }] } });
231
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3NvcnQtdGFibGUvc29ydC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3NvcnQtdGFibGUvc29ydC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBU3ZFLE1BQU0sT0FBTyxrQkFBa0I7SUFDcEIsaUJBQWlCLEdBQVksS0FBSyxDQUFDO0lBQ25DLFdBQVcsR0FBa0IsRUFBRSxDQUFDO0lBQ2hDLFNBQVMsR0FBVyxPQUFPLENBQUM7SUFDNUIsZ0JBQWdCLEdBQVcsQ0FBQyxDQUFDO0lBQzdCLFlBQVksR0FBVyxVQUFVLENBQUM7SUFDbEMsWUFBWSxHQUFXLFdBQVcsQ0FBQztJQUNuQyxjQUFjLEdBQVcsTUFBTSxDQUFDO0lBQ2hDLEVBQUUsQ0FBVTtJQUNaLEVBQUUsQ0FBVTtJQUNaLE1BQU0sQ0FBVTtJQUNoQixLQUFLLENBQVU7SUFDZixPQUFPLENBQVU7SUFDakIsU0FBUyxDQUFVO0lBQ25CLFNBQVMsQ0FBVTtJQUNuQixZQUFZLENBQVU7SUFDdEIsY0FBYyxDQUFVO0lBQ3hCLGFBQWEsQ0FBVTtJQUN2QixNQUFNLEdBQVksRUFBRSxDQUFDO0lBQ3JCLFlBQVksQ0FBVTtJQUN0QixXQUFXLENBQVU7SUFDckIsZUFBZSxHQUFZLE9BQU8sQ0FBQztJQUNsQyxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFDcEQsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDN0Ms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QXRCLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhRmlsdGVyVHlwZSB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBJRGF0YUZpbHRlciB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZlcmJlbi1zb3J0LXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NvcnQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zb3J0LXRhYmxlLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU29ydFRhYmxlQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZW5hYmxlRHJhZ0FuZERyb3A6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc29ydE9wdGlvbnM6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgQElucHV0KCkgcmVzZXRUZXh0OiBzdHJpbmcgPSAnUmVzZXQnO1xuICBASW5wdXQoKSBkaXNwbGF5ZWRPcHRpb25zOiBudW1iZXIgPSA0O1xuICBASW5wdXQoKSBwcm9wZXJ0eVRleHQ6IHN0cmluZyA9ICdQcm9wZXJ0eSc7XG4gIEBJbnB1dCgpIHNob3dNb3JlVGV4dDogc3RyaW5nID0gJ1Nob3cgbW9yZSc7XG4gIEBJbnB1dCgpIHNvcnRCdXR0b25UZXh0OiBzdHJpbmcgPSAnU29ydCc7XG4gIEBJbnB1dCgpIHBkPzogc3RyaW5nO1xuICBASW5wdXQoKSBtZz86IHN0cmluZztcbiAgQElucHV0KCkgaGVpZ2h0Pzogc3RyaW5nO1xuICBASW5wdXQoKSB3aWR0aD86IHN0cmluZztcbiAgQElucHV0KCkgYmdDb2xvcj86IHN0cmluZztcbiAgQElucHV0KCkgYm94U2hhZG93Pzogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXh0Q29sb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHByaW1hcnlDb2xvcj86IHN0cmluZztcbiAgQElucHV0KCkgc2Vjb25kYXJ5Q29sb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRlcnRpYXJ5Q29sb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJvcmRlcj86IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBib3JkZXJSYWRpdXM/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlbGVjdFdpZHRoPzogc3RyaW5nO1xuICBASW5wdXQoKSBjb250YWluZXJIZWlnaHQ/OiBzdHJpbmcgPSAnNDAwcHgnO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRPcHRpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxJRGF0YUZpbHRlcltdPigpO1xuICBAT3V0cHV0KCkgcmVzZXRTb3J0RGF0YSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgZHJhZ2dlZEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgdmlzaWJsZVNvcnRPcHRpb25zOiBJRGF0YUZpbHRlcltdID0gW107XG4gIGhpZGRlblNvcnRPcHRpb25zOiBJRGF0YUZpbHRlcltdID0gW107XG4gIHNob3dNb3JlOiBib29sZWFuID0gZmFsc2U7XG4gIGRpc2FibGVTb3J0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkT3JkZXJzOiBNYXA8bnVtYmVyLCAnYXNjJyB8ICdkZXNjJz4gPSBuZXcgTWFwKCk7XG4gIGRlZmF1bHRTb3J0T3B0aW9uczogSURhdGFGaWx0ZXJbXSA9IFtdO1xuICBjaGVja0FsbDogYm9vbGVhbiA9IGZhbHNlO1xuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmRlZmF1bHRTb3J0T3B0aW9ucyA9IFsuLi50aGlzLnNvcnRPcHRpb25zXTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVPcHRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVTb3J0QnV0dG9uU3RhdGUoKTtcbiAgfVxuXG4gIHVwZGF0ZVZpc2libGVPcHRpb25zKCkge1xuICAgIGlmICh0aGlzLnNvcnRPcHRpb25zLmxlbmd0aCA+IHRoaXMuZGlzcGxheWVkT3B0aW9ucykge1xuICAgICAgdGhpcy52aXNpYmxlU29ydE9wdGlvbnMgPSB0aGlzLnNvcnRPcHRpb25zLnNsaWNlKFxuICAgICAgICAwLFxuICAgICAgICB0aGlzLmRpc3BsYXllZE9wdGlvbnNcbiAgICAgICk7XG4gICAgICB0aGlzLmhpZGRlblNvcnRPcHRpb25zID0gdGhpcy5zb3J0T3B0aW9ucy5zbGljZSh0aGlzLmRpc3BsYXllZE9wdGlvbnMpO1xuICAgICAgdGhpcy5zaG93TW9yZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlzaWJsZVNvcnRPcHRpb25zID0gdGhpcy5zb3J0T3B0aW9ucztcbiAgICAgIHRoaXMuc2hvd01vcmUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVTaG93TW9yZSgpIHtcbiAgICBpZiAodGhpcy5zaG93TW9yZVRleHQgPT09ICdTaG93IG1vcmUnKSB7XG4gICAgICB0aGlzLnZpc2libGVTb3J0T3B0aW9ucy5wdXNoKC4uLnRoaXMuaGlkZGVuU29ydE9wdGlvbnMpO1xuICAgICAgdGhpcy5zaG93TW9yZVRleHQgPSAnU2hvdyBsZXNzJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlT3B0aW9ucygpO1xuICAgICAgdGhpcy5zaG93TW9yZVRleHQgPSAnU2hvdyBtb3JlJztcbiAgICB9XG4gIH1cbiAgYXBwbHlTb3J0KCkge1xuICAgIGNvbnN0IHNlbGVjdGVkU29ydERldGFpbHMgPSB0aGlzLnNvcnRPcHRpb25zLnJlZHVjZTxJRGF0YUZpbHRlcltdPihcbiAgICAgIChhY2MsIHNvcnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChzb3J0LmNoZWNrZWQpIHtcbiAgICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgICBuYW1lOiBzb3J0Lm5hbWUsXG4gICAgICAgICAgICB0eXBlOiBzb3J0LnR5cGUgfHwgJ1N0cmluZycsXG4gICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgdGhpcy5nZXRTb3J0T3JkZXIoXG4gICAgICAgICAgICAgICAgc29ydC50eXBlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcmRlcnMuZ2V0KGluZGV4KSB8fCAnYXNjJ1xuICAgICAgICAgICAgICApIHx8ICcnLFxuICAgICAgICAgICAgY2hlY2tlZDogc29ydC5jaGVja2VkIHx8IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAgW11cbiAgICApO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLmVtaXQoc2VsZWN0ZWRTb3J0RGV0YWlscyk7XG4gICAgcmV0dXJuIHNlbGVjdGVkU29ydERldGFpbHM7XG4gIH1cbiAgZ2V0U29ydE9yZGVyKHR5cGU6IERhdGFGaWx0ZXJUeXBlLCBzZWxlY3RlZE9yZGVyOiAnYXNjJyB8ICdkZXNjJykge1xuICAgIGlmICh0eXBlID09PSAnTnVtYmVyJykge1xuICAgICAgcmV0dXJuIHNlbGVjdGVkT3JkZXIgPT09ICdhc2MnID8gJ2FzYycgOiAnZGVzYyc7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnU3RyaW5nJykge1xuICAgICAgcmV0dXJuIHNlbGVjdGVkT3JkZXIgPT09ICdhc2MnID8gJ2FzYycgOiAnZGVzYyc7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnRGF0ZScpIHtcbiAgICAgIHJldHVybiBzZWxlY3RlZE9yZGVyID09PSAnYXNjJyA/ICdhc2MnIDogJ2Rlc2MnO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRvZ2dsZVNvcnQoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuc29ydE9wdGlvbnNbaW5kZXhdO1xuICAgIG9wdGlvbi5jaGVja2VkID0gIW9wdGlvbi5jaGVja2VkO1xuICAgIGlmICghb3B0aW9uLmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuY2hlY2tBbGwgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc29ydE9wdGlvbnMuZXZlcnkoKG9wdGlvbikgPT4gb3B0aW9uLmNoZWNrZWQpKSB7XG4gICAgICB0aGlzLmNoZWNrQWxsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9uLmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcmRlcnMuc2V0KGluZGV4LCAnYXNjJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcmRlcnMuZGVsZXRlKGluZGV4KTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVTb3J0QnV0dG9uU3RhdGUoKTtcbiAgfVxuICB0b2dnbGVTZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5jaGVja0FsbCA9ICF0aGlzLmNoZWNrQWxsOyAvLyBUb2dnbGUgY2hlY2tBbGwgc3RhdGVcblxuICAgIC8vIFNldCBhbGwgb3B0aW9ucyB0byBjaGVja2VkL3VuY2hlY2tlZCBhbmQgYXNzaWduIGRlZmF1bHQgc29ydCBvcmRlciB3aGVuIGNoZWNrZWRcbiAgICB0aGlzLnNvcnRPcHRpb25zLmZvckVhY2goKG9wdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgIG9wdGlvbi5jaGVja2VkID0gdGhpcy5jaGVja0FsbDtcblxuICAgICAgaWYgKHRoaXMuY2hlY2tBbGwpIHtcbiAgICAgICAgLy8gSWYgY2hlY2tlZCwgc2V0IHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgdG8gJ2FzYycgZm9yIGFsbFxuICAgICAgICB0aGlzLnNlbGVjdGVkT3JkZXJzLnNldChpbmRleCwgJ2FzYycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgdW5jaGVja2VkLCByZW1vdmUgdGhlIHNvcnQgb3JkZXJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9yZGVycy5kZWxldGUoaW5kZXgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVTb3J0QnV0dG9uU3RhdGUoKTsgLy8gVXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgc29ydCBidXR0b25cbiAgfVxuXG4gIHJlc2V0U29ydCgpIHtcbiAgICB0aGlzLnNvcnRPcHRpb25zLmZvckVhY2goKG9wdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgIG9wdGlvbi5jaGVja2VkID0gZmFsc2U7XG4gICAgICB0aGlzLnNlbGVjdGVkT3JkZXJzLmRlbGV0ZShpbmRleCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNvcnRPcHRpb25zID0gWy4uLnRoaXMuZGVmYXVsdFNvcnRPcHRpb25zXTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVPcHRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVTb3J0QnV0dG9uU3RhdGUoKTtcbiAgICB0aGlzLmNoZWNrQWxsID0gZmFsc2U7XG4gICAgdGhpcy5yZXNldFNvcnREYXRhLmVtaXQoKTtcbiAgfVxuXG4gIHVwZGF0ZVNvcnRCdXR0b25TdGF0ZSgpIHtcbiAgICB0aGlzLmRpc2FibGVTb3J0QnV0dG9uID0gdGhpcy5jb3VudFNlbGVjdGVkU29ydHMoKSA9PT0gMDtcbiAgfVxuXG4gIGNvdW50U2VsZWN0ZWRTb3J0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNvcnRPcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24uY2hlY2tlZCkubGVuZ3RoO1xuICB9XG5cbiAgc2V0U29ydE9yZGVyKGluZGV4OiBudW1iZXIsIG9yZGVyOiAnYXNjJyB8ICdkZXNjJykge1xuICAgIHRoaXMuc2VsZWN0ZWRPcmRlcnMuc2V0KGluZGV4LCBvcmRlcik7XG4gIH1cblxuICBvbkRyYWdTdGFydChpbmRleDogbnVtYmVyLCBldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZURyYWdBbmREcm9wKSByZXR1cm47XG4gICAgdGhpcy5kcmFnZ2VkSW5kZXggPSBpbmRleDtcbiAgICBldmVudC5kYXRhVHJhbnNmZXI/LnNldERhdGEoJ3RleHQvcGxhaW4nLCBTdHJpbmcoaW5kZXgpKTtcbiAgfVxuXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGlmICghdGhpcy5lbmFibGVEcmFnQW5kRHJvcCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBvbkRyb3AoaW5kZXg6IG51bWJlciwgZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGlmICghdGhpcy5lbmFibGVEcmFnQW5kRHJvcCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHRoaXMuZHJhZ2dlZEluZGV4ICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnN3YXBDb2x1bW5zKHRoaXMuZHJhZ2dlZEluZGV4LCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgc3dhcENvbHVtbnMoZnJvbUluZGV4OiBudW1iZXIsIHRvSW5kZXg6IG51bWJlcikge1xuICAgIGlmIChcbiAgICAgIGZyb21JbmRleCA8IHRoaXMudmlzaWJsZVNvcnRPcHRpb25zLmxlbmd0aCAmJlxuICAgICAgdG9JbmRleCA8IHRoaXMudmlzaWJsZVNvcnRPcHRpb25zLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc3QgdGVtcCA9IHRoaXMudmlzaWJsZVNvcnRPcHRpb25zW2Zyb21JbmRleF07XG4gICAgICB0aGlzLnZpc2libGVTb3J0T3B0aW9uc1tmcm9tSW5kZXhdID0gdGhpcy52aXNpYmxlU29ydE9wdGlvbnNbdG9JbmRleF07XG4gICAgICB0aGlzLnZpc2libGVTb3J0T3B0aW9uc1t0b0luZGV4XSA9IHRlbXA7XG5cbiAgICAgIGNvbnN0IGdsb2JhbEZyb21JbmRleCA9IHRoaXMuc29ydE9wdGlvbnMuaW5kZXhPZih0ZW1wKTtcbiAgICAgIGNvbnN0IGdsb2JhbFRvSW5kZXggPSB0aGlzLnNvcnRPcHRpb25zLmluZGV4T2YoXG4gICAgICAgIHRoaXMudmlzaWJsZVNvcnRPcHRpb25zW2Zyb21JbmRleF1cbiAgICAgICk7XG5cbiAgICAgIGlmIChnbG9iYWxGcm9tSW5kZXggIT09IC0xICYmIGdsb2JhbFRvSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IHRlbXBHbG9iYWwgPSB0aGlzLnNvcnRPcHRpb25zW2dsb2JhbEZyb21JbmRleF07XG4gICAgICAgIHRoaXMuc29ydE9wdGlvbnNbZ2xvYmFsRnJvbUluZGV4XSA9IHRoaXMuc29ydE9wdGlvbnNbZ2xvYmFsVG9JbmRleF07XG4gICAgICAgIHRoaXMuc29ydE9wdGlvbnNbZ2xvYmFsVG9JbmRleF0gPSB0ZW1wR2xvYmFsO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRyYWdnZWRJbmRleCA9IG51bGw7XG4gIH1cbn1cbiIsIjxkaXZcbiAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYmdDb2xvclwiXG4gIFtzdHlsZS5ib3gtc2hhZG93XT1cImJveFNoYWRvd1wiXG4gIFtzdHlsZS5ib3JkZXJdPVwiYm9yZGVyXCJcbiAgW3N0eWxlLmJvcmRlci1yYWRpdXNdPVwiYm9yZGVyUmFkaXVzXCJcbiAgW3N0eWxlLmNvbG9yXT1cInRleHRDb2xvclwiXG4gIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXG4gIFtzdHlsZS5oZWlnaHRdPVwiaGVpZ2h0XCJcbiAgW3N0eWxlLnBhZGRpbmddPVwicGRcIlxuICBjbGFzcz1cInNvcnQtd3JhcHBlclwiXG4+XG4gIDwhLS0gSGVhZGVyIFNlY3Rpb24gLS0+XG4gIDxkaXYgY2xhc3M9XCJzb3J0LWhlYWRlciBmbGV4IGp1c3RpZnktYmV0d2VlbiB0ZXh0LXNtXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJzb3J0LXRpdGxlIGZvbnQtc2VtaWJvbGRcIj5cbiAgICAgIFNvcnRcbiAgICAgIDxzdXAgW3N0eWxlLmNvbG9yXT1cInNlY29uZGFyeUNvbG9yXCI+W3t7IGNvdW50U2VsZWN0ZWRTb3J0cygpIH19XTwvc3VwPlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgW3N0eWxlLmNvbG9yXT1cInNlY29uZGFyeUNvbG9yXCJcbiAgICAgIFtzdHlsZS5mb250LXNpemVdPVwiJzEycHgnXCJcbiAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgKGNsaWNrKT1cInJlc2V0U29ydCgpXCJcbiAgICA+XG4gICAgICB7eyByZXNldFRleHQgfX1cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxociAvPlxuXG4gIDwhLS0gU29ydCBPcHRpb25zIChTY3JvbGxhYmxlIFNlY3Rpb24pIC0tPlxuICA8ZGl2IGNsYXNzPVwic29ydC1vcHRpb25zIGZsZXgtZ3JvdyBvdmVyZmxvdy15LWF1dG8gbXktMlwiPlxuICAgIDxwIGNsYXNzPVwicGRcIj57eyBwcm9wZXJ0eVRleHQgfX08L3A+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwXCIgW3N0eWxlLnBhZGRpbmddPVwiJzRweCAxMHB4J1wiPlxuICAgICAgPGxhYmVsIFtzdHlsZS5mb250LXNpemVdPVwiJzEzcHgnXCIgW3N0eWxlLmZvbnQtd2VpZ2h0XT1cIic1MDAnXCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJjaGVja0FsbFwiIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKClcIiAvPlxuICAgICAgICBTZWxlY3QgQWxsXG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiB2aXNpYmxlU29ydE9wdGlvbnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgW2F0dHIuZHJhZ2dhYmxlXT1cImVuYWJsZURyYWdBbmREcm9wXCJcbiAgICAgIChkcmFnc3RhcnQpPVwib25EcmFnU3RhcnQoaSwgJGV2ZW50KVwiXG4gICAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgIChkcm9wKT1cIm9uRHJvcChpLCAkZXZlbnQpXCJcbiAgICAgIGNsYXNzPVwic29ydC1vcHRpb25cIlxuICAgID5cbiAgICAgIDxkaXYgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTRweCdcIiBbc3R5bGUubWFyZ2luLXRvcF09XCInMTNweCdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC1tZFwiPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZURyYWdBbmREcm9wXCJcbiAgICAgICAgICAgIGZpbGw9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dClcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIjI1XCJcbiAgICAgICAgICAgIGNsYXNzPVwic3ZnXCJcbiAgICAgICAgICAgIGljb249XCJzcXVhcmUtZG90XCJcbiAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXBcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJvcHRpb24uY2hlY2tlZFwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU29ydChpKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+e3sgb3B0aW9uLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gU29ydGluZyBDb250cm9scyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcFwiIFtzdHlsZS5tYXJnaW4tbGVmdF09XCInMzVweCdcIj5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLXNtXCJcbiAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLnR5cGUgPT09ICdOdW1iZXInXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cInNvcnRPcmRlcnt7IGkgfX1cIlxuICAgICAgICAgICAgICB2YWx1ZT1cImFzY1wiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkT3JkZXJzLmdldChpKSA9PT0gJ2FzYydcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW9wdGlvbi5jaGVja2VkXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRTb3J0T3JkZXIoaSwgJ2FzYycpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAxLTEwMFxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC1zbVwiXG4gICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi50eXBlID09PSAnTnVtYmVyJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJzb3J0T3JkZXJ7eyBpIH19XCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJkZXNjXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRPcmRlcnMuZ2V0KGkpID09PSAnZGVzYydcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW9wdGlvbi5jaGVja2VkXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRTb3J0T3JkZXIoaSwgJ2Rlc2MnKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgMTAwLTFcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtc21cIlxuICAgICAgICAgICAgKm5nSWY9XCJvcHRpb24udHlwZSA9PT0gJ1N0cmluZycgfHwgb3B0aW9uLnR5cGUgPT09ICdEYXRlJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJzb3J0T3JkZXJ7eyBpIH19XCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJhc2NcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZE9yZGVycy5nZXQoaSkgPT09ICdhc2MnXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFvcHRpb24uY2hlY2tlZFwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0U29ydE9yZGVyKGksICdhc2MnKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgQS1aXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLXNtXCJcbiAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLnR5cGUgPT09ICdTdHJpbmcnIHx8IG9wdGlvbi50eXBlID09PSAnRGF0ZSdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwic29ydE9yZGVye3sgaSB9fVwiXG4gICAgICAgICAgICAgIHZhbHVlPVwiZGVzY1wiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkT3JkZXJzLmdldChpKSA9PT0gJ2Rlc2MnXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFvcHRpb24uY2hlY2tlZFwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0U29ydE9yZGVyKGksICdkZXNjJylcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIFotQVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNob3cgTW9yZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd01vcmUgJiYgaGlkZGVuU29ydE9wdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgW3N0eWxlLnBhZGRpbmddPVwiJzIwcHggMTBweCAwcHggMTBweCdcIlxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci10ZXh0KSdcIlxuICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIGJsb2NrXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNob3dNb3JlKClcIlxuICAgICAgPlxuICAgICAgICB7eyBzaG93TW9yZVRleHQgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGhyIC8+XG5cbiAgPCEtLSBTb3J0IEJ1dHRvbiAtLT5cbiAgPGRpdiBjbGFzcz1cImJ0bi13cmFwcGVyIG10LTIgZmxleC1zaHJpbmstMFwiPlxuICAgIDxidXR0b25cbiAgICAgIFtzdHlsZS5vdXRsaW5lXT1cIidub25lJ1wiXG4gICAgICBbc3R5bGUuYm9yZGVyXT1cIidub25lJ1wiXG4gICAgICBbc3R5bGUucGFkZGluZ109XCInMC4ycmVtIDEuNnJlbSdcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwicHJpbWFyeUNvbG9yXCJcbiAgICAgIFtzdHlsZS5jb2xvcl09XCJ0ZXJ0aWFyeUNvbG9yXCJcbiAgICAgIFtzdHlsZS5mb250LXNpemVdPVwiJzEycHgnXCJcbiAgICAgIFtzdHlsZS5mb250LXdlaWdodF09XCInNjAwJ1wiXG4gICAgICBbZGlzYWJsZWRdPVwiY291bnRTZWxlY3RlZFNvcnRzKCkgPT09IDBcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICBkaXNhYmxlZEJ0bjogY291bnRTZWxlY3RlZFNvcnRzKCkgPT09IDAsXG4gICAgICAgIGVuYWJsZUJ0bjogY291bnRTZWxlY3RlZFNvcnRzKCkgIT09IDBcbiAgICAgIH1cIlxuICAgICAgKGNsaWNrKT1cImFwcGx5U29ydCgpXCJcbiAgICA+XG4gICAgICB7eyBzb3J0QnV0dG9uVGV4dCB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3NvcnQtdGFibGUvc29ydC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3NvcnQtdGFibGUvc29ydC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBU3ZFLE1BQU0sT0FBTyxrQkFBa0I7SUFDcEIsaUJBQWlCLEdBQVksS0FBSyxDQUFDO0lBQ25DLFdBQVcsR0FBa0IsRUFBRSxDQUFDO0lBQ2hDLFNBQVMsR0FBVyxPQUFPLENBQUM7SUFDNUIsZ0JBQWdCLEdBQVcsQ0FBQyxDQUFDO0lBQzdCLFlBQVksR0FBVyxVQUFVLENBQUM7SUFDbEMsWUFBWSxHQUFXLFdBQVcsQ0FBQztJQUNuQyxjQUFjLEdBQVcsU0FBUyxDQUFDO0lBQ25DLEVBQUUsQ0FBVTtJQUNaLEVBQUUsQ0FBVTtJQUNaLE1BQU0sQ0FBVTtJQUNoQixLQUFLLENBQVU7SUFDZixPQUFPLENBQVU7SUFDakIsU0FBUyxDQUFVO0lBQ25CLFNBQVMsQ0FBVTtJQUNuQixZQUFZLENBQVU7SUFDdEIsY0FBYyxDQUFVO0lBQ3hCLGFBQWEsQ0FBVTtJQUN2QixNQUFNLEdBQVksRUFBRSxDQUFDO0lBQ3JCLFlBQVksQ0FBVTtJQUN0QixXQUFXLENBQVU7SUFDckIsZUFBZSxHQUFZLE9BQU8sQ0FBQztJQUNsQyxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFDcEQsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDN0Ms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WUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YUZpbHRlclR5cGUgfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgSURhdGFGaWx0ZXIgfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2ZXJiZW4tc29ydC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zb3J0LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc29ydC10YWJsZS5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFNvcnRUYWJsZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGVuYWJsZURyYWdBbmREcm9wOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNvcnRPcHRpb25zOiBJRGF0YUZpbHRlcltdID0gW107XG4gIEBJbnB1dCgpIHJlc2V0VGV4dDogc3RyaW5nID0gJ1Jlc2V0JztcbiAgQElucHV0KCkgZGlzcGxheWVkT3B0aW9uczogbnVtYmVyID0gNDtcbiAgQElucHV0KCkgcHJvcGVydHlUZXh0OiBzdHJpbmcgPSAnUHJvcGVydHknO1xuICBASW5wdXQoKSBzaG93TW9yZVRleHQ6IHN0cmluZyA9ICdTaG93IG1vcmUnO1xuICBASW5wdXQoKSBzb3J0QnV0dG9uVGV4dDogc3RyaW5nID0gJ0NvbmZpcm0nO1xuICBASW5wdXQoKSBwZD86IHN0cmluZztcbiAgQElucHV0KCkgbWc/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGhlaWdodD86IHN0cmluZztcbiAgQElucHV0KCkgd2lkdGg/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnQ29sb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJveFNoYWRvdz86IHN0cmluZztcbiAgQElucHV0KCkgdGV4dENvbG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBwcmltYXJ5Q29sb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlY29uZGFyeUNvbG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXJ0aWFyeUNvbG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBib3JkZXI/OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgYm9yZGVyUmFkaXVzPzogc3RyaW5nO1xuICBASW5wdXQoKSBzZWxlY3RXaWR0aD86IHN0cmluZztcbiAgQElucHV0KCkgY29udGFpbmVySGVpZ2h0Pzogc3RyaW5nID0gJzQwMHB4JztcbiAgQE91dHB1dCgpIHNlbGVjdGVkT3B0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXI8SURhdGFGaWx0ZXJbXT4oKTtcbiAgQE91dHB1dCgpIHJlc2V0U29ydERhdGEgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGRyYWdnZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHZpc2libGVTb3J0T3B0aW9uczogSURhdGFGaWx0ZXJbXSA9IFtdO1xuICBoaWRkZW5Tb3J0T3B0aW9uczogSURhdGFGaWx0ZXJbXSA9IFtdO1xuICBzaG93TW9yZTogYm9vbGVhbiA9IGZhbHNlO1xuICBkaXNhYmxlU29ydEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZE9yZGVyczogTWFwPG51bWJlciwgJ2FzYycgfCAnZGVzYyc+ID0gbmV3IE1hcCgpO1xuICBkZWZhdWx0U29ydE9wdGlvbnM6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgY2hlY2tBbGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5kZWZhdWx0U29ydE9wdGlvbnMgPSBbLi4udGhpcy5zb3J0T3B0aW9uc107XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlT3B0aW9ucygpO1xuICAgIHRoaXMudXBkYXRlU29ydEJ1dHRvblN0YXRlKCk7XG4gIH1cblxuICB1cGRhdGVWaXNpYmxlT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5zb3J0T3B0aW9ucy5sZW5ndGggPiB0aGlzLmRpc3BsYXllZE9wdGlvbnMpIHtcbiAgICAgIHRoaXMudmlzaWJsZVNvcnRPcHRpb25zID0gdGhpcy5zb3J0T3B0aW9ucy5zbGljZShcbiAgICAgICAgMCxcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRPcHRpb25zLFxuICAgICAgKTtcbiAgICAgIHRoaXMuaGlkZGVuU29ydE9wdGlvbnMgPSB0aGlzLnNvcnRPcHRpb25zLnNsaWNlKHRoaXMuZGlzcGxheWVkT3B0aW9ucyk7XG4gICAgICB0aGlzLnNob3dNb3JlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aXNpYmxlU29ydE9wdGlvbnMgPSB0aGlzLnNvcnRPcHRpb25zO1xuICAgICAgdGhpcy5zaG93TW9yZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVNob3dNb3JlKCkge1xuICAgIGlmICh0aGlzLnNob3dNb3JlVGV4dCA9PT0gJ1Nob3cgbW9yZScpIHtcbiAgICAgIHRoaXMudmlzaWJsZVNvcnRPcHRpb25zLnB1c2goLi4udGhpcy5oaWRkZW5Tb3J0T3B0aW9ucyk7XG4gICAgICB0aGlzLnNob3dNb3JlVGV4dCA9ICdTaG93IGxlc3MnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVPcHRpb25zKCk7XG4gICAgICB0aGlzLnNob3dNb3JlVGV4dCA9ICdTaG93IG1vcmUnO1xuICAgIH1cbiAgfVxuICBhcHBseVNvcnQoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRTb3J0RGV0YWlscyA9IHRoaXMuc29ydE9wdGlvbnMucmVkdWNlPElEYXRhRmlsdGVyW10+KFxuICAgICAgKGFjYywgc29ydCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHNvcnQuY2hlY2tlZCkge1xuICAgICAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IHNvcnQubmFtZSxcbiAgICAgICAgICAgIHR5cGU6IHNvcnQudHlwZSB8fCAnU3RyaW5nJyxcbiAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICB0aGlzLmdldFNvcnRPcmRlcihcbiAgICAgICAgICAgICAgICBzb3J0LnR5cGUsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9yZGVycy5nZXQoaW5kZXgpIHx8ICdhc2MnLFxuICAgICAgICAgICAgICApIHx8ICcnLFxuICAgICAgICAgICAgY2hlY2tlZDogc29ydC5jaGVja2VkIHx8IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAgW10sXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5lbWl0KHNlbGVjdGVkU29ydERldGFpbHMpO1xuICAgIHJldHVybiBzZWxlY3RlZFNvcnREZXRhaWxzO1xuICB9XG4gIGdldFNvcnRPcmRlcih0eXBlOiBEYXRhRmlsdGVyVHlwZSwgc2VsZWN0ZWRPcmRlcjogJ2FzYycgfCAnZGVzYycpIHtcbiAgICBpZiAodHlwZSA9PT0gJ051bWJlcicpIHtcbiAgICAgIHJldHVybiBzZWxlY3RlZE9yZGVyID09PSAnYXNjJyA/ICdhc2MnIDogJ2Rlc2MnO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1N0cmluZycpIHtcbiAgICAgIHJldHVybiBzZWxlY3RlZE9yZGVyID09PSAnYXNjJyA/ICdhc2MnIDogJ2Rlc2MnO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0RhdGUnKSB7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRPcmRlciA9PT0gJ2FzYycgPyAnYXNjJyA6ICdkZXNjJztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0b2dnbGVTb3J0KGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLnNvcnRPcHRpb25zW2luZGV4XTtcbiAgICBvcHRpb24uY2hlY2tlZCA9ICFvcHRpb24uY2hlY2tlZDtcbiAgICBpZiAoIW9wdGlvbi5jaGVja2VkKSB7XG4gICAgICB0aGlzLmNoZWNrQWxsID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNvcnRPcHRpb25zLmV2ZXJ5KChvcHRpb24pID0+IG9wdGlvbi5jaGVja2VkKSkge1xuICAgICAgdGhpcy5jaGVja0FsbCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbi5jaGVja2VkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkT3JkZXJzLnNldChpbmRleCwgJ2FzYycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkT3JkZXJzLmRlbGV0ZShpbmRleCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU29ydEJ1dHRvblN0YXRlKCk7XG4gIH1cbiAgdG9nZ2xlU2VsZWN0QWxsKCkge1xuICAgIHRoaXMuY2hlY2tBbGwgPSAhdGhpcy5jaGVja0FsbDsgLy8gVG9nZ2xlIGNoZWNrQWxsIHN0YXRlXG5cbiAgICAvLyBTZXQgYWxsIG9wdGlvbnMgdG8gY2hlY2tlZC91bmNoZWNrZWQgYW5kIGFzc2lnbiBkZWZhdWx0IHNvcnQgb3JkZXIgd2hlbiBjaGVja2VkXG4gICAgdGhpcy5zb3J0T3B0aW9ucy5mb3JFYWNoKChvcHRpb24sIGluZGV4KSA9PiB7XG4gICAgICBvcHRpb24uY2hlY2tlZCA9IHRoaXMuY2hlY2tBbGw7XG5cbiAgICAgIGlmICh0aGlzLmNoZWNrQWxsKSB7XG4gICAgICAgIC8vIElmIGNoZWNrZWQsIHNldCB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIHRvICdhc2MnIGZvciBhbGxcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9yZGVycy5zZXQoaW5kZXgsICdhc2MnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHVuY2hlY2tlZCwgcmVtb3ZlIHRoZSBzb3J0IG9yZGVyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcmRlcnMuZGVsZXRlKGluZGV4KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlU29ydEJ1dHRvblN0YXRlKCk7IC8vIFVwZGF0ZSB0aGUgc3RhdGUgb2YgdGhlIHNvcnQgYnV0dG9uXG4gIH1cblxuICByZXNldFNvcnQoKSB7XG4gICAgdGhpcy5zb3J0T3B0aW9ucy5mb3JFYWNoKChvcHRpb24sIGluZGV4KSA9PiB7XG4gICAgICBvcHRpb24uY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZWxlY3RlZE9yZGVycy5kZWxldGUoaW5kZXgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zb3J0T3B0aW9ucyA9IFsuLi50aGlzLmRlZmF1bHRTb3J0T3B0aW9uc107XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlT3B0aW9ucygpO1xuICAgIHRoaXMudXBkYXRlU29ydEJ1dHRvblN0YXRlKCk7XG4gICAgdGhpcy5jaGVja0FsbCA9IGZhbHNlO1xuICAgIHRoaXMucmVzZXRTb3J0RGF0YS5lbWl0KCk7XG4gICAgdGhpcy5hcHBseVNvcnQoKTtcbiAgfVxuXG4gIHVwZGF0ZVNvcnRCdXR0b25TdGF0ZSgpIHtcbiAgICB0aGlzLmRpc2FibGVTb3J0QnV0dG9uID0gdGhpcy5jb3VudFNlbGVjdGVkU29ydHMoKSA9PT0gMDtcbiAgfVxuXG4gIGNvdW50U2VsZWN0ZWRTb3J0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNvcnRPcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24uY2hlY2tlZCkubGVuZ3RoO1xuICB9XG5cbiAgc2V0U29ydE9yZGVyKGluZGV4OiBudW1iZXIsIG9yZGVyOiAnYXNjJyB8ICdkZXNjJykge1xuICAgIHRoaXMuc2VsZWN0ZWRPcmRlcnMuc2V0KGluZGV4LCBvcmRlcik7XG4gIH1cblxuICBvbkRyYWdTdGFydChpbmRleDogbnVtYmVyLCBldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZURyYWdBbmREcm9wKSByZXR1cm47XG4gICAgdGhpcy5kcmFnZ2VkSW5kZXggPSBpbmRleDtcbiAgICBldmVudC5kYXRhVHJhbnNmZXI/LnNldERhdGEoJ3RleHQvcGxhaW4nLCBTdHJpbmcoaW5kZXgpKTtcbiAgfVxuXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGlmICghdGhpcy5lbmFibGVEcmFnQW5kRHJvcCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBvbkRyb3AoaW5kZXg6IG51bWJlciwgZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGlmICghdGhpcy5lbmFibGVEcmFnQW5kRHJvcCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHRoaXMuZHJhZ2dlZEluZGV4ICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnN3YXBDb2x1bW5zKHRoaXMuZHJhZ2dlZEluZGV4LCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgc3dhcENvbHVtbnMoZnJvbUluZGV4OiBudW1iZXIsIHRvSW5kZXg6IG51bWJlcikge1xuICAgIGlmIChcbiAgICAgIGZyb21JbmRleCA8IHRoaXMudmlzaWJsZVNvcnRPcHRpb25zLmxlbmd0aCAmJlxuICAgICAgdG9JbmRleCA8IHRoaXMudmlzaWJsZVNvcnRPcHRpb25zLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc3QgdGVtcCA9IHRoaXMudmlzaWJsZVNvcnRPcHRpb25zW2Zyb21JbmRleF07XG4gICAgICB0aGlzLnZpc2libGVTb3J0T3B0aW9uc1tmcm9tSW5kZXhdID0gdGhpcy52aXNpYmxlU29ydE9wdGlvbnNbdG9JbmRleF07XG4gICAgICB0aGlzLnZpc2libGVTb3J0T3B0aW9uc1t0b0luZGV4XSA9IHRlbXA7XG5cbiAgICAgIGNvbnN0IGdsb2JhbEZyb21JbmRleCA9IHRoaXMuc29ydE9wdGlvbnMuaW5kZXhPZih0ZW1wKTtcbiAgICAgIGNvbnN0IGdsb2JhbFRvSW5kZXggPSB0aGlzLnNvcnRPcHRpb25zLmluZGV4T2YoXG4gICAgICAgIHRoaXMudmlzaWJsZVNvcnRPcHRpb25zW2Zyb21JbmRleF0sXG4gICAgICApO1xuXG4gICAgICBpZiAoZ2xvYmFsRnJvbUluZGV4ICE9PSAtMSAmJiBnbG9iYWxUb0luZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCB0ZW1wR2xvYmFsID0gdGhpcy5zb3J0T3B0aW9uc1tnbG9iYWxGcm9tSW5kZXhdO1xuICAgICAgICB0aGlzLnNvcnRPcHRpb25zW2dsb2JhbEZyb21JbmRleF0gPSB0aGlzLnNvcnRPcHRpb25zW2dsb2JhbFRvSW5kZXhdO1xuICAgICAgICB0aGlzLnNvcnRPcHRpb25zW2dsb2JhbFRvSW5kZXhdID0gdGVtcEdsb2JhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5kcmFnZ2VkSW5kZXggPSBudWxsO1xuICB9XG59XG4iLCI8ZGl2XG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJnQ29sb3JcIlxuICBbc3R5bGUuYm94LXNoYWRvd109XCJib3hTaGFkb3dcIlxuICBbc3R5bGUuYm9yZGVyXT1cImJvcmRlclwiXG4gIFtzdHlsZS5ib3JkZXItcmFkaXVzXT1cImJvcmRlclJhZGl1c1wiXG4gIFtzdHlsZS5jb2xvcl09XCJ0ZXh0Q29sb3JcIlxuICBbc3R5bGUud2lkdGhdPVwid2lkdGhcIlxuICBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiXG4gIFtzdHlsZS5wYWRkaW5nXT1cInBkXCJcbiAgY2xhc3M9XCJzb3J0LXdyYXBwZXJcIlxuPlxuICA8IS0tIEhlYWRlciBTZWN0aW9uIC0tPlxuICA8ZGl2IGNsYXNzPVwic29ydC1oZWFkZXIgZmxleCBqdXN0aWZ5LWJldHdlZW4gdGV4dC1zbVwiPlxuICAgIDxzcGFuIGNsYXNzPVwic29ydC10aXRsZSBmb250LXNlbWlib2xkXCI+XG4gICAgICBTb3J0XG4gICAgICA8c3VwIFtzdHlsZS5jb2xvcl09XCJzZWNvbmRhcnlDb2xvclwiPlt7eyBjb3VudFNlbGVjdGVkU29ydHMoKSB9fV08L3N1cD5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW5cbiAgICAgIFtzdHlsZS5jb2xvcl09XCJzZWNvbmRhcnlDb2xvclwiXG4gICAgICBbc3R5bGUuZm9udC1zaXplXT1cIicxMnB4J1wiXG4gICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgIChjbGljayk9XCJyZXNldFNvcnQoKVwiXG4gICAgPlxuICAgICAge3sgcmVzZXRUZXh0IH19XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cblxuICA8aHIgLz5cblxuICA8IS0tIFNvcnQgT3B0aW9ucyAoU2Nyb2xsYWJsZSBTZWN0aW9uKSAtLT5cbiAgPGRpdiBjbGFzcz1cInNvcnQtb3B0aW9ucyBmbGV4LWdyb3cgb3ZlcmZsb3cteS1hdXRvIG15LTJcIj5cbiAgICA8cCBjbGFzcz1cInBkXCI+e3sgcHJvcGVydHlUZXh0IH19PC9wPlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcFwiIFtzdHlsZS5wYWRkaW5nXT1cIic0cHggMTBweCdcIj5cbiAgICAgIDxsYWJlbCBbc3R5bGUuZm9udC1zaXplXT1cIicxM3B4J1wiIFtzdHlsZS5mb250LXdlaWdodF09XCInNTAwJ1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIFtjaGVja2VkXT1cImNoZWNrQWxsXCJcbiAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbCgpXCJcbiAgICAgICAgLz5cbiAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgdmlzaWJsZVNvcnRPcHRpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgIFthdHRyLmRyYWdnYWJsZV09XCJlbmFibGVEcmFnQW5kRHJvcFwiXG4gICAgICAoZHJhZ3N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KGksICRldmVudClcIlxuICAgICAgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50KVwiXG4gICAgICAoZHJvcCk9XCJvbkRyb3AoaSwgJGV2ZW50KVwiXG4gICAgICBjbGFzcz1cInNvcnQtb3B0aW9uXCJcbiAgICA+XG4gICAgICA8ZGl2IFtzdHlsZS5mb250LXNpemVdPVwiJzE0cHgnXCIgW3N0eWxlLm1hcmdpbi10b3BdPVwiJzEzcHgnXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtbWRcIj5cbiAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgKm5nSWY9XCJlbmFibGVEcmFnQW5kRHJvcFwiXG4gICAgICAgICAgICBmaWxsPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIyNVwiXG4gICAgICAgICAgICBjbGFzcz1cInN2Z1wiXG4gICAgICAgICAgICBpY29uPVwic3F1YXJlLWRvdFwiXG4gICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwib3B0aW9uLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNvcnQoaSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPnt7IG9wdGlvbi5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFNvcnRpbmcgQ29udHJvbHMgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXBcIiBbc3R5bGUubWFyZ2luLWxlZnRdPVwiJzM1cHgnXCI+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC1zbVwiXG4gICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi50eXBlID09PSAnTnVtYmVyJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJzb3J0T3JkZXJ7eyBpIH19XCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJhc2NcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZE9yZGVycy5nZXQoaSkgPT09ICdhc2MnXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFvcHRpb24uY2hlY2tlZFwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0U29ydE9yZGVyKGksICdhc2MnKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgMS0xMDBcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtc21cIlxuICAgICAgICAgICAgKm5nSWY9XCJvcHRpb24udHlwZSA9PT0gJ051bWJlcidcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwic29ydE9yZGVye3sgaSB9fVwiXG4gICAgICAgICAgICAgIHZhbHVlPVwiZGVzY1wiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkT3JkZXJzLmdldChpKSA9PT0gJ2Rlc2MnXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFvcHRpb24uY2hlY2tlZFwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0U29ydE9yZGVyKGksICdkZXNjJylcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDEwMC0xXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLXNtXCJcbiAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLnR5cGUgPT09ICdTdHJpbmcnIHx8IG9wdGlvbi50eXBlID09PSAnRGF0ZSdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwic29ydE9yZGVye3sgaSB9fVwiXG4gICAgICAgICAgICAgIHZhbHVlPVwiYXNjXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRPcmRlcnMuZ2V0KGkpID09PSAnYXNjJ1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhb3B0aW9uLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFNvcnRPcmRlcihpLCAnYXNjJylcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIEEtWlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC1zbVwiXG4gICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi50eXBlID09PSAnU3RyaW5nJyB8fCBvcHRpb24udHlwZSA9PT0gJ0RhdGUnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cInNvcnRPcmRlcnt7IGkgfX1cIlxuICAgICAgICAgICAgICB2YWx1ZT1cImRlc2NcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZE9yZGVycy5nZXQoaSkgPT09ICdkZXNjJ1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhb3B0aW9uLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFNvcnRPcmRlcihpLCAnZGVzYycpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICBaLUFcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTaG93IE1vcmUgLS0+XG4gICAgPGRpdiAqbmdJZj1cInNob3dNb3JlICYmIGhpZGRlblNvcnRPcHRpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtzdHlsZS5wYWRkaW5nXT1cIicyMHB4IDEwcHggMHB4IDEwcHgnXCJcbiAgICAgICAgW3N0eWxlLmNvbG9yXT1cIid2YXIoLS12Ym4tY29sb3ItdGV4dCknXCJcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBibG9ja1wiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93TW9yZSgpXCJcbiAgICAgID5cbiAgICAgICAge3sgc2hvd01vcmVUZXh0IH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxociAvPlxuXG4gIDwhLS0gU29ydCBCdXR0b24gLS0+XG4gIDxkaXYgY2xhc3M9XCJidG4td3JhcHBlciBtdC0yIGZsZXgtc2hyaW5rLTBcIj5cbiAgICA8YnV0dG9uXG4gICAgICBbc3R5bGUub3V0bGluZV09XCInbm9uZSdcIlxuICAgICAgW3N0eWxlLmJvcmRlcl09XCInbm9uZSdcIlxuICAgICAgW3N0eWxlLnBhZGRpbmddPVwiJzAuMnJlbSAxLjZyZW0nXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInByaW1hcnlDb2xvclwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwidGVydGlhcnlDb2xvclwiXG4gICAgICBbc3R5bGUuZm9udC1zaXplXT1cIicxMnB4J1wiXG4gICAgICBbc3R5bGUuZm9udC13ZWlnaHRdPVwiJzYwMCdcIlxuICAgICAgKGNsaWNrKT1cImFwcGx5U29ydCgpXCJcbiAgICA+XG4gICAgICB7eyBzb3J0QnV0dG9uVGV4dCB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19