tango-app-ui-store-builder 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/create-layout/create-layout.component.mjs +1 -1
- package/esm2022/lib/components/create-store/create-store.component.mjs +1 -1
- package/esm2022/lib/components/custom-select/custom-select.component.mjs +6 -3
- package/esm2022/lib/components/fixture-template/template-products/template-products.component.mjs +1 -1
- package/esm2022/lib/components/layout-summary/layout-summary.component.mjs +1 -1
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +38 -7
- package/esm2022/lib/components/manage-store-plano/plano-rollout/plano-rollout.component.mjs +1 -1
- package/esm2022/lib/components/manage-store-plano/template-products/template-products.component.mjs +2 -2
- package/esm2022/lib/components/manage-store-plano/verification-feedback/action-confirm-popup/action-confirm-popup.component.mjs +11 -1
- package/esm2022/lib/components/manage-store-plano/verification-feedback/fixture/fixture.component.mjs +1 -1
- package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +2 -2
- package/esm2022/lib/components/manage-store-plano/verification-feedback/zone-editable-fixture/zone-editable-fixture.component.mjs +628 -0
- package/esm2022/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.mjs +24 -12
- package/esm2022/lib/components/multiselect-chip-dropdown/multiselect-chip-dropdown.component.mjs +34 -8
- package/esm2022/lib/components/onboard-store-plano/create-planogram/create-planogram.component.mjs +19 -7
- package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +2 -2
- package/esm2022/lib/components/planogram/plano-details-parent/plano-details-parent.component.mjs +1 -1
- package/esm2022/lib/services/store-builder.service.mjs +10 -2
- package/esm2022/lib/tango-store-builder.module.mjs +8 -1
- package/fesm2022/tango-app-ui-store-builder.mjs +761 -40
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/custom-select/custom-select.component.d.ts +2 -1
- package/lib/components/manage-plano/onboard-table/onboard-table.component.d.ts +1 -1
- package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +4 -4
- package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +5 -5
- package/lib/components/manage-store-plano/manage-store-plano.component.d.ts +1 -0
- package/lib/components/manage-store-plano/verification-feedback/action-confirm-popup/action-confirm-popup.component.d.ts +1 -1
- package/lib/components/manage-store-plano/verification-feedback/zone-editable-fixture/zone-editable-fixture.component.d.ts +89 -0
- package/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.d.ts +4 -1
- package/lib/components/multiselect-chip-dropdown/multiselect-chip-dropdown.component.d.ts +9 -2
- package/lib/components/onboard-store-plano/create-planogram/create-planogram.component.d.ts +1 -0
- package/lib/components/onboard-store-plano/onboard-store-plano.component.d.ts +1 -1
- package/lib/services/store-builder.service.d.ts +5 -3
- package/lib/tango-store-builder.module.d.ts +68 -66
- package/package.json +1 -1
package/esm2022/lib/components/multiselect-chip-dropdown/multiselect-chip-dropdown.component.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, Input, forwardRef, HostListener } from '@angular/core';
|
|
2
|
+
import { Component, EventEmitter, Input, Output, forwardRef, HostListener } from '@angular/core';
|
|
3
3
|
import { FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@angular/forms";
|
|
@@ -14,6 +14,11 @@ export class MultiselectChipDropdownComponent {
|
|
|
14
14
|
items = [];
|
|
15
15
|
search = false;
|
|
16
16
|
searchField;
|
|
17
|
+
maxSelection = 0; // 0 = unlimited
|
|
18
|
+
compact = false;
|
|
19
|
+
extraActionLabel = '';
|
|
20
|
+
extraActionActive = false;
|
|
21
|
+
extraActionClick = new EventEmitter();
|
|
17
22
|
selectedValues = [];
|
|
18
23
|
dropdownOpen = false;
|
|
19
24
|
isDisabled = false;
|
|
@@ -73,16 +78,27 @@ export class MultiselectChipDropdownComponent {
|
|
|
73
78
|
toggleItemSelection(item) {
|
|
74
79
|
if (this.isDisabled)
|
|
75
80
|
return;
|
|
76
|
-
const
|
|
81
|
+
const id = item[this.idField];
|
|
82
|
+
const index = this.selectedValues.indexOf(id);
|
|
77
83
|
if (index > -1) {
|
|
78
84
|
this.selectedValues.splice(index, 1);
|
|
79
85
|
}
|
|
80
86
|
else {
|
|
81
|
-
|
|
87
|
+
if (this.isAtMaxSelection)
|
|
88
|
+
return;
|
|
89
|
+
this.selectedValues.push(id);
|
|
82
90
|
}
|
|
83
91
|
this.onChange(this.selectedValues);
|
|
84
92
|
this.onTouched();
|
|
85
93
|
}
|
|
94
|
+
get isAtMaxSelection() {
|
|
95
|
+
return (this.maxSelection > 0 && this.selectedValues.length >= this.maxSelection);
|
|
96
|
+
}
|
|
97
|
+
isItemDisabledByMax(item) {
|
|
98
|
+
if (!this.maxSelection)
|
|
99
|
+
return false;
|
|
100
|
+
return (this.isAtMaxSelection && !this.isItemSelected(item[this.idField]));
|
|
101
|
+
}
|
|
86
102
|
removeChip(value) {
|
|
87
103
|
if (this.isDisabled)
|
|
88
104
|
return;
|
|
@@ -98,7 +114,7 @@ export class MultiselectChipDropdownComponent {
|
|
|
98
114
|
return item ? item[this.nameField] : value;
|
|
99
115
|
}
|
|
100
116
|
toggleSelectAll(event) {
|
|
101
|
-
if (this.isDisabled)
|
|
117
|
+
if (this.isDisabled || this.maxSelection > 0)
|
|
102
118
|
return;
|
|
103
119
|
const target = event.target;
|
|
104
120
|
if (target.checked) {
|
|
@@ -142,13 +158,13 @@ export class MultiselectChipDropdownComponent {
|
|
|
142
158
|
}
|
|
143
159
|
}
|
|
144
160
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MultiselectChipDropdownComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
145
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MultiselectChipDropdownComponent, isStandalone: true, selector: "multiselect-chip-dropdown", inputs: { idField: "idField", nameField: "nameField", placeholder: "placeholder", items: "items", search: "search", searchField: "searchField" }, host: { listeners: { "document:click": "onClick($event)" } }, providers: [
|
|
161
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MultiselectChipDropdownComponent, isStandalone: true, selector: "multiselect-chip-dropdown", inputs: { idField: "idField", nameField: "nameField", placeholder: "placeholder", items: "items", search: "search", searchField: "searchField", maxSelection: "maxSelection", compact: "compact", extraActionLabel: "extraActionLabel", extraActionActive: "extraActionActive" }, outputs: { extraActionClick: "extraActionClick" }, host: { listeners: { "document:click": "onClick($event)" } }, providers: [
|
|
146
162
|
{
|
|
147
163
|
provide: NG_VALUE_ACCESSOR,
|
|
148
164
|
useExisting: forwardRef(() => MultiselectChipDropdownComponent),
|
|
149
165
|
multi: true
|
|
150
166
|
}
|
|
151
|
-
], usesOnChanges: true, ngImport: i0, template: "<div class=\"multiselect-container\" [class.disabled]=\"isDisabled\">\r\n <div class=\"chip-list\" (click)=\"toggleDropdown()\">\r\n <ng-container *ngIf=\"selectedValues.length; else multiPlaceholder\">\r\n <div class=\"chip\" *ngFor=\"let value of selectedValues\">\r\n {{ getItemLabel(value) }}\r\n <span class=\"chip-remove\" (click)=\"removeChip(value)\">×</span>\r\n </div>\r\n </ng-container>\r\n <ng-template #multiPlaceholder>\r\n <p class=\"multi-placeholder\">{{ placeholder }}</p>\r\n </ng-template>\r\n </div>\r\n\r\n <span *ngIf=\"selectedValues.length; else downArrow\" (click)=\"clearAll()\" class=\"chip-remove cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M6.25 5.89645L7.57322 4.57322C7.67085 4.47559 7.82915 4.47559 7.92678 4.57322C8.02441 4.67085 8.02441 4.82915 7.92678 4.92678L6.60355 6.25L7.92678 7.57322C8.02441 7.67085 8.02441 7.82915 7.92678 7.92678C7.82915 8.02441 7.67085 8.02441 7.57322 7.92678L6.25 6.60355L4.92678 7.92678C4.82915 8.02441 4.67085 8.02441 4.57322 7.92678C4.47559 7.82915 4.47559 7.67085 4.57322 7.57322L5.89645 6.25L4.57322 4.92678C4.47559 4.82915 4.47559 4.67085 4.57322 4.57322C4.67085 4.47559 4.82915 4.47559 4.92678 4.57322L6.25 5.89645ZM6.25 11.5C3.35051 11.5 1 9.14949 1 6.25C1 3.35051 3.35051 1 6.25 1C9.14949 1 11.5 3.35051 11.5 6.25C11.5 9.14949 9.14949 11.5 6.25 11.5ZM6.25 11C8.87335 11 11 8.87335 11 6.25C11 3.62665 8.87335 1.5 6.25 1.5C3.62665 1.5 1.5 3.62665 1.5 6.25C1.5 8.87335 3.62665 11 6.25 11Z\"\r\n fill=\"black\"\r\n />\r\n </svg>\r\n </span>\r\n\r\n <ng-template #downArrow>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </ng-template>\r\n\r\n <div class=\"dropdown-panel\" [class.open]=\"dropdownOpen\">\r\n <div *ngIf=\"search && items.length\" class=\"p-2\">\r\n <input class=\"form-control\" placeholder=\"Search\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearch()\" />\r\n </div>\r\n <div class=\"dropdown-option\" *ngIf=\"data.length; else noData\">\r\n <label>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isAllSelected()\"\r\n [indeterminate]=\"isIndeterminate()\"\r\n (change)=\"toggleSelectAll($event)\"\r\n [disabled]=\"isDisabled || !availableItemsToSelect.length\"\r\n />\r\n Select All\r\n </label>\r\n </div>\r\n <ng-template #noData>\r\n <div class=\"dropdown-option disabled-click\">\r\n <label> No Items</label>\r\n </div>\r\n </ng-template>\r\n <div class=\"scroll\">\r\n <div\r\n class=\"dropdown-option\"\r\n *ngFor=\"let item of data\"\r\n [class.disabled-click]=\"item?.disabled && !isItemSelected(item[idField])\"\r\n >\r\n <label>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isItemSelected(item[idField])\"\r\n (change)=\"toggleItemSelection(item)\"\r\n [disabled]=\"isDisabled\"\r\n />\r\n {{ item[nameField] }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".multiselect-container{position:relative;padding:10px 14px;display:flex;align-items:center;gap:8px;border-radius:.475rem;border:1px solid var(--Gray-300, #d0d5dd);background:var(--White, #fff);cursor:pointer}.multiselect-container.disabled{background-color:var(--bs-gray-200);border-color:var(--bs-gray-300);opacity:1}.multiselect-container.disabled .multiselect-label{color:var(--bs-gray-500)}.multiselect-container.disabled .chip-remove{cursor:not-allowed;pointer-events:none}.multiselect-container .multiselect-label{display:block;padding:4px 0;font-size:14px;color:#333;-webkit-user-select:none;user-select:none;position:relative}.multiselect-container .multiselect-label .dropdown-arrow{position:absolute;right:0;top:50%;transform:translateY(-50%) rotate(0);transition:transform .2s ease-in-out;font-size:12px;line-height:1}.multiselect-container .multiselect-label .dropdown-arrow.open{transform:translateY(-50%) rotate(180deg)}.multiselect-container .chip-list{display:flex;flex-wrap:wrap;width:100%;gap:5px;min-height:24px}.multiselect-container .chip-list .chip{border-radius:16px;background:var(--Gray-100, #f2f4f7);display:flex;padding:2px 6px 2px 8px;justify-content:center;align-items:center;gap:4px}.multiselect-container .chip-list .chip .chip-remove{margin-left:5px;cursor:pointer;font-weight:700;font-size:14px;line-height:1;color:#7a7a7a}.multiselect-container .chip-list .chip .chip-remove:hover{color:#575757}.multiselect-container .dropdown-panel{position:absolute;top:100%;left:0;right:0;border:1px solid #f1f1f4;background-color:#fff;z-index:1;display:none;border-radius:4px;margin-top:8px}.multiselect-container .dropdown-panel.open{display:block}.multiselect-container .dropdown-panel .dropdown-option{padding:1rem 1.25rem;cursor:pointer}.multiselect-container .dropdown-panel .dropdown-option:hover{background-color:var(--Gray-50, #f9fafb)}.multiselect-container .dropdown-panel .dropdown-option label{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px;display:flex;align-items:center;width:100%;cursor:inherit}.multiselect-container .dropdown-panel .dropdown-option label input[type=checkbox]{margin-right:8px;cursor:inherit}.multiselect-container .dropdown-panel .scroll{max-height:300px;overflow-y:auto;overflow-x:hidden}.multiselect-container .multi-placeholder{color:var(--Gray-500, #667085);font-size:14px;font-style:normal;font-weight:400;line-height:24px;margin:0}.disabled-click{pointer-events:none!important;opacity:.5}.disabled-click:hover{cursor:not-allowed!important}input[type=checkbox]{width:14px!important;height:14px!important;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;padding-left:3px;padding-top:10px;padding-right:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
167
|
+
], usesOnChanges: true, ngImport: i0, template: "<div class=\"multiselect-container\" [class.disabled]=\"isDisabled\" [class.compact]=\"compact\">\r\n <div class=\"chip-list\" (click)=\"toggleDropdown()\">\r\n <ng-container *ngIf=\"selectedValues.length; else multiPlaceholder\">\r\n <div class=\"chip\" *ngFor=\"let value of selectedValues\">\r\n {{ getItemLabel(value) }}\r\n <span class=\"chip-remove\" (click)=\"removeChip(value)\">×</span>\r\n </div>\r\n </ng-container>\r\n <ng-template #multiPlaceholder>\r\n <p class=\"multi-placeholder\">{{ placeholder }}</p>\r\n </ng-template>\r\n </div>\r\n\r\n <span *ngIf=\"selectedValues.length; else downArrow\" (click)=\"clearAll()\" class=\"chip-remove cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M6.25 5.89645L7.57322 4.57322C7.67085 4.47559 7.82915 4.47559 7.92678 4.57322C8.02441 4.67085 8.02441 4.82915 7.92678 4.92678L6.60355 6.25L7.92678 7.57322C8.02441 7.67085 8.02441 7.82915 7.92678 7.92678C7.82915 8.02441 7.67085 8.02441 7.57322 7.92678L6.25 6.60355L4.92678 7.92678C4.82915 8.02441 4.67085 8.02441 4.57322 7.92678C4.47559 7.82915 4.47559 7.67085 4.57322 7.57322L5.89645 6.25L4.57322 4.92678C4.47559 4.82915 4.47559 4.67085 4.57322 4.57322C4.67085 4.47559 4.82915 4.47559 4.92678 4.57322L6.25 5.89645ZM6.25 11.5C3.35051 11.5 1 9.14949 1 6.25C1 3.35051 3.35051 1 6.25 1C9.14949 1 11.5 3.35051 11.5 6.25C11.5 9.14949 9.14949 11.5 6.25 11.5ZM6.25 11C8.87335 11 11 8.87335 11 6.25C11 3.62665 8.87335 1.5 6.25 1.5C3.62665 1.5 1.5 3.62665 1.5 6.25C1.5 8.87335 3.62665 11 6.25 11Z\"\r\n fill=\"black\"\r\n />\r\n </svg>\r\n </span>\r\n\r\n <ng-template #downArrow>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </ng-template>\r\n\r\n <div class=\"dropdown-panel\" [class.open]=\"dropdownOpen\">\r\n <div *ngIf=\"search && items.length\" class=\"p-2\">\r\n <input class=\"form-control\" placeholder=\"Search\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearch()\" />\r\n </div>\r\n <button\r\n type=\"button\"\r\n *ngIf=\"extraActionLabel\"\r\n class=\"dropdown-extra-action\"\r\n [class.active]=\"extraActionActive\"\r\n (click)=\"extraActionClick.emit()\">\r\n {{ extraActionLabel }}\r\n </button>\r\n <div class=\"dropdown-option\" *ngIf=\"data.length && !maxSelection; else noData\">\r\n <label>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isAllSelected()\"\r\n [indeterminate]=\"isIndeterminate()\"\r\n (change)=\"toggleSelectAll($event)\"\r\n [disabled]=\"isDisabled || !availableItemsToSelect.length\"\r\n />\r\n Select All\r\n </label>\r\n </div>\r\n <ng-template #noData>\r\n <div class=\"dropdown-option disabled-click\" *ngIf=\"!data.length\">\r\n <label> No Items</label>\r\n </div>\r\n </ng-template>\r\n <div class=\"scroll\">\r\n <div\r\n class=\"dropdown-option\"\r\n *ngFor=\"let item of data\"\r\n [class.disabled-click]=\"(item?.disabled || isItemDisabledByMax(item)) && !isItemSelected(item[idField])\"\r\n >\r\n <label>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isItemSelected(item[idField])\"\r\n (change)=\"toggleItemSelection(item)\"\r\n [disabled]=\"isDisabled || isItemDisabledByMax(item)\"\r\n />\r\n {{ item[nameField] }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".multiselect-container{position:relative;padding:10px 14px;display:flex;align-items:center;gap:8px;border-radius:.475rem;border:1px solid var(--Gray-300, #d0d5dd);background:var(--White, #fff);cursor:pointer}.multiselect-container.disabled{background-color:var(--bs-gray-200);border-color:var(--bs-gray-300);opacity:1}.multiselect-container.disabled .multiselect-label{color:var(--bs-gray-500)}.multiselect-container.disabled .chip-remove{cursor:not-allowed;pointer-events:none}.multiselect-container .multiselect-label{display:block;padding:4px 0;font-size:14px;color:#333;-webkit-user-select:none;user-select:none;position:relative}.multiselect-container .multiselect-label .dropdown-arrow{position:absolute;right:0;top:50%;transform:translateY(-50%) rotate(0);transition:transform .2s ease-in-out;font-size:12px;line-height:1}.multiselect-container .multiselect-label .dropdown-arrow.open{transform:translateY(-50%) rotate(180deg)}.multiselect-container .chip-list{display:flex;flex-wrap:wrap;width:100%;gap:5px;min-height:24px}.multiselect-container .chip-list .chip{border-radius:16px;background:var(--Gray-100, #f2f4f7);display:flex;padding:2px 6px 2px 8px;justify-content:center;align-items:center;gap:4px}.multiselect-container .chip-list .chip .chip-remove{margin-left:5px;cursor:pointer;font-weight:700;font-size:14px;line-height:1;color:#7a7a7a}.multiselect-container .chip-list .chip .chip-remove:hover{color:#575757}.multiselect-container .dropdown-panel{position:absolute;top:100%;left:0;right:0;border:1px solid #f1f1f4;background-color:#fff;z-index:1;display:none;border-radius:4px;margin-top:8px}.multiselect-container .dropdown-panel.open{display:block}.multiselect-container .dropdown-panel .dropdown-option{padding:1rem 1.25rem;cursor:pointer}.multiselect-container .dropdown-panel .dropdown-option:hover{background-color:var(--Gray-50, #f9fafb)}.multiselect-container .dropdown-panel .dropdown-option label{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px;display:flex;align-items:center;width:100%;cursor:inherit}.multiselect-container .dropdown-panel .dropdown-option label input[type=checkbox]{margin-right:8px;cursor:inherit}.multiselect-container .dropdown-panel .scroll{max-height:300px;overflow-y:auto;overflow-x:hidden}.multiselect-container .dropdown-panel .dropdown-extra-action{display:block;width:calc(100% - 16px);margin:4px 8px;padding:4px 8px;border:1px dashed var(--Primary-300, #6bcaff);border-radius:6px;background:transparent;color:var(--Primary-600, #00a3ff);font-size:12px;font-weight:500;cursor:pointer;text-align:center}.multiselect-container .dropdown-panel .dropdown-extra-action:hover{background:var(--Primary-50, #eaf8ff)}.multiselect-container .dropdown-panel .dropdown-extra-action.active{background:var(--Primary-50, #eaf8ff);border-style:solid}.multiselect-container .multi-placeholder{color:var(--Gray-500, #667085);font-size:14px;font-style:normal;font-weight:400;line-height:24px;margin:0}.multiselect-container.compact .dropdown-panel>.p-2{padding:4px!important}.multiselect-container.compact .dropdown-panel>.p-2 input.form-control{padding:3px 8px;font-size:12px;height:26px;min-height:26px}.multiselect-container.compact .dropdown-panel .dropdown-option{padding:4px 10px}.multiselect-container.compact .dropdown-panel .dropdown-option label{font-size:12px;line-height:16px}.multiselect-container.compact .dropdown-panel .scroll{max-height:180px}.disabled-click{pointer-events:none!important;opacity:.5}.disabled-click:hover{cursor:not-allowed!important}input[type=checkbox]{width:14px!important;height:14px!important;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;padding-left:3px;padding-top:10px;padding-right:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
152
168
|
}
|
|
153
169
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MultiselectChipDropdownComponent, decorators: [{
|
|
154
170
|
type: Component,
|
|
@@ -160,7 +176,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
160
176
|
useExisting: forwardRef(() => MultiselectChipDropdownComponent),
|
|
161
177
|
multi: true
|
|
162
178
|
}
|
|
163
|
-
], template: "<div class=\"multiselect-container\" [class.disabled]=\"isDisabled\">\r\n <div class=\"chip-list\" (click)=\"toggleDropdown()\">\r\n <ng-container *ngIf=\"selectedValues.length; else multiPlaceholder\">\r\n <div class=\"chip\" *ngFor=\"let value of selectedValues\">\r\n {{ getItemLabel(value) }}\r\n <span class=\"chip-remove\" (click)=\"removeChip(value)\">×</span>\r\n </div>\r\n </ng-container>\r\n <ng-template #multiPlaceholder>\r\n <p class=\"multi-placeholder\">{{ placeholder }}</p>\r\n </ng-template>\r\n </div>\r\n\r\n <span *ngIf=\"selectedValues.length; else downArrow\" (click)=\"clearAll()\" class=\"chip-remove cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M6.25 5.89645L7.57322 4.57322C7.67085 4.47559 7.82915 4.47559 7.92678 4.57322C8.02441 4.67085 8.02441 4.82915 7.92678 4.92678L6.60355 6.25L7.92678 7.57322C8.02441 7.67085 8.02441 7.82915 7.92678 7.92678C7.82915 8.02441 7.67085 8.02441 7.57322 7.92678L6.25 6.60355L4.92678 7.92678C4.82915 8.02441 4.67085 8.02441 4.57322 7.92678C4.47559 7.82915 4.47559 7.67085 4.57322 7.57322L5.89645 6.25L4.57322 4.92678C4.47559 4.82915 4.47559 4.67085 4.57322 4.57322C4.67085 4.47559 4.82915 4.47559 4.92678 4.57322L6.25 5.89645ZM6.25 11.5C3.35051 11.5 1 9.14949 1 6.25C1 3.35051 3.35051 1 6.25 1C9.14949 1 11.5 3.35051 11.5 6.25C11.5 9.14949 9.14949 11.5 6.25 11.5ZM6.25 11C8.87335 11 11 8.87335 11 6.25C11 3.62665 8.87335 1.5 6.25 1.5C3.62665 1.5 1.5 3.62665 1.5 6.25C1.5 8.87335 3.62665 11 6.25 11Z\"\r\n fill=\"black\"\r\n />\r\n </svg>\r\n </span>\r\n\r\n <ng-template #downArrow>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </ng-template>\r\n\r\n <div class=\"dropdown-panel\" [class.open]=\"dropdownOpen\">\r\n <div *ngIf=\"search && items.length\" class=\"p-2\">\r\n <input class=\"form-control\" placeholder=\"Search\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearch()\" />\r\n </div>\r\n <div class=\"dropdown-option\" *ngIf=\"data.length; else noData\">\r\n <label>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isAllSelected()\"\r\n [indeterminate]=\"isIndeterminate()\"\r\n (change)=\"toggleSelectAll($event)\"\r\n [disabled]=\"isDisabled || !availableItemsToSelect.length\"\r\n />\r\n Select All\r\n </label>\r\n </div>\r\n <ng-template #noData>\r\n <div class=\"dropdown-option disabled-click\">\r\n <label> No Items</label>\r\n </div>\r\n </ng-template>\r\n <div class=\"scroll\">\r\n <div\r\n class=\"dropdown-option\"\r\n *ngFor=\"let item of data\"\r\n [class.disabled-click]=\"item?.disabled && !isItemSelected(item[idField])\"\r\n >\r\n <label>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isItemSelected(item[idField])\"\r\n (change)=\"toggleItemSelection(item)\"\r\n [disabled]=\"isDisabled\"\r\n />\r\n {{ item[nameField] }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".multiselect-container{position:relative;padding:10px 14px;display:flex;align-items:center;gap:8px;border-radius:.475rem;border:1px solid var(--Gray-300, #d0d5dd);background:var(--White, #fff);cursor:pointer}.multiselect-container.disabled{background-color:var(--bs-gray-200);border-color:var(--bs-gray-300);opacity:1}.multiselect-container.disabled .multiselect-label{color:var(--bs-gray-500)}.multiselect-container.disabled .chip-remove{cursor:not-allowed;pointer-events:none}.multiselect-container .multiselect-label{display:block;padding:4px 0;font-size:14px;color:#333;-webkit-user-select:none;user-select:none;position:relative}.multiselect-container .multiselect-label .dropdown-arrow{position:absolute;right:0;top:50%;transform:translateY(-50%) rotate(0);transition:transform .2s ease-in-out;font-size:12px;line-height:1}.multiselect-container .multiselect-label .dropdown-arrow.open{transform:translateY(-50%) rotate(180deg)}.multiselect-container .chip-list{display:flex;flex-wrap:wrap;width:100%;gap:5px;min-height:24px}.multiselect-container .chip-list .chip{border-radius:16px;background:var(--Gray-100, #f2f4f7);display:flex;padding:2px 6px 2px 8px;justify-content:center;align-items:center;gap:4px}.multiselect-container .chip-list .chip .chip-remove{margin-left:5px;cursor:pointer;font-weight:700;font-size:14px;line-height:1;color:#7a7a7a}.multiselect-container .chip-list .chip .chip-remove:hover{color:#575757}.multiselect-container .dropdown-panel{position:absolute;top:100%;left:0;right:0;border:1px solid #f1f1f4;background-color:#fff;z-index:1;display:none;border-radius:4px;margin-top:8px}.multiselect-container .dropdown-panel.open{display:block}.multiselect-container .dropdown-panel .dropdown-option{padding:1rem 1.25rem;cursor:pointer}.multiselect-container .dropdown-panel .dropdown-option:hover{background-color:var(--Gray-50, #f9fafb)}.multiselect-container .dropdown-panel .dropdown-option label{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px;display:flex;align-items:center;width:100%;cursor:inherit}.multiselect-container .dropdown-panel .dropdown-option label input[type=checkbox]{margin-right:8px;cursor:inherit}.multiselect-container .dropdown-panel .scroll{max-height:300px;overflow-y:auto;overflow-x:hidden}.multiselect-container .multi-placeholder{color:var(--Gray-500, #667085);font-size:14px;font-style:normal;font-weight:400;line-height:24px;margin:0}.disabled-click{pointer-events:none!important;opacity:.5}.disabled-click:hover{cursor:not-allowed!important}input[type=checkbox]{width:14px!important;height:14px!important;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;padding-left:3px;padding-top:10px;padding-right:0}\n"] }]
|
|
179
|
+
], template: "<div class=\"multiselect-container\" [class.disabled]=\"isDisabled\" [class.compact]=\"compact\">\r\n <div class=\"chip-list\" (click)=\"toggleDropdown()\">\r\n <ng-container *ngIf=\"selectedValues.length; else multiPlaceholder\">\r\n <div class=\"chip\" *ngFor=\"let value of selectedValues\">\r\n {{ getItemLabel(value) }}\r\n <span class=\"chip-remove\" (click)=\"removeChip(value)\">×</span>\r\n </div>\r\n </ng-container>\r\n <ng-template #multiPlaceholder>\r\n <p class=\"multi-placeholder\">{{ placeholder }}</p>\r\n </ng-template>\r\n </div>\r\n\r\n <span *ngIf=\"selectedValues.length; else downArrow\" (click)=\"clearAll()\" class=\"chip-remove cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M6.25 5.89645L7.57322 4.57322C7.67085 4.47559 7.82915 4.47559 7.92678 4.57322C8.02441 4.67085 8.02441 4.82915 7.92678 4.92678L6.60355 6.25L7.92678 7.57322C8.02441 7.67085 8.02441 7.82915 7.92678 7.92678C7.82915 8.02441 7.67085 8.02441 7.57322 7.92678L6.25 6.60355L4.92678 7.92678C4.82915 8.02441 4.67085 8.02441 4.57322 7.92678C4.47559 7.82915 4.47559 7.67085 4.57322 7.57322L5.89645 6.25L4.57322 4.92678C4.47559 4.82915 4.47559 4.67085 4.57322 4.57322C4.67085 4.47559 4.82915 4.47559 4.92678 4.57322L6.25 5.89645ZM6.25 11.5C3.35051 11.5 1 9.14949 1 6.25C1 3.35051 3.35051 1 6.25 1C9.14949 1 11.5 3.35051 11.5 6.25C11.5 9.14949 9.14949 11.5 6.25 11.5ZM6.25 11C8.87335 11 11 8.87335 11 6.25C11 3.62665 8.87335 1.5 6.25 1.5C3.62665 1.5 1.5 3.62665 1.5 6.25C1.5 8.87335 3.62665 11 6.25 11Z\"\r\n fill=\"black\"\r\n />\r\n </svg>\r\n </span>\r\n\r\n <ng-template #downArrow>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </ng-template>\r\n\r\n <div class=\"dropdown-panel\" [class.open]=\"dropdownOpen\">\r\n <div *ngIf=\"search && items.length\" class=\"p-2\">\r\n <input class=\"form-control\" placeholder=\"Search\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearch()\" />\r\n </div>\r\n <button\r\n type=\"button\"\r\n *ngIf=\"extraActionLabel\"\r\n class=\"dropdown-extra-action\"\r\n [class.active]=\"extraActionActive\"\r\n (click)=\"extraActionClick.emit()\">\r\n {{ extraActionLabel }}\r\n </button>\r\n <div class=\"dropdown-option\" *ngIf=\"data.length && !maxSelection; else noData\">\r\n <label>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isAllSelected()\"\r\n [indeterminate]=\"isIndeterminate()\"\r\n (change)=\"toggleSelectAll($event)\"\r\n [disabled]=\"isDisabled || !availableItemsToSelect.length\"\r\n />\r\n Select All\r\n </label>\r\n </div>\r\n <ng-template #noData>\r\n <div class=\"dropdown-option disabled-click\" *ngIf=\"!data.length\">\r\n <label> No Items</label>\r\n </div>\r\n </ng-template>\r\n <div class=\"scroll\">\r\n <div\r\n class=\"dropdown-option\"\r\n *ngFor=\"let item of data\"\r\n [class.disabled-click]=\"(item?.disabled || isItemDisabledByMax(item)) && !isItemSelected(item[idField])\"\r\n >\r\n <label>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isItemSelected(item[idField])\"\r\n (change)=\"toggleItemSelection(item)\"\r\n [disabled]=\"isDisabled || isItemDisabledByMax(item)\"\r\n />\r\n {{ item[nameField] }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".multiselect-container{position:relative;padding:10px 14px;display:flex;align-items:center;gap:8px;border-radius:.475rem;border:1px solid var(--Gray-300, #d0d5dd);background:var(--White, #fff);cursor:pointer}.multiselect-container.disabled{background-color:var(--bs-gray-200);border-color:var(--bs-gray-300);opacity:1}.multiselect-container.disabled .multiselect-label{color:var(--bs-gray-500)}.multiselect-container.disabled .chip-remove{cursor:not-allowed;pointer-events:none}.multiselect-container .multiselect-label{display:block;padding:4px 0;font-size:14px;color:#333;-webkit-user-select:none;user-select:none;position:relative}.multiselect-container .multiselect-label .dropdown-arrow{position:absolute;right:0;top:50%;transform:translateY(-50%) rotate(0);transition:transform .2s ease-in-out;font-size:12px;line-height:1}.multiselect-container .multiselect-label .dropdown-arrow.open{transform:translateY(-50%) rotate(180deg)}.multiselect-container .chip-list{display:flex;flex-wrap:wrap;width:100%;gap:5px;min-height:24px}.multiselect-container .chip-list .chip{border-radius:16px;background:var(--Gray-100, #f2f4f7);display:flex;padding:2px 6px 2px 8px;justify-content:center;align-items:center;gap:4px}.multiselect-container .chip-list .chip .chip-remove{margin-left:5px;cursor:pointer;font-weight:700;font-size:14px;line-height:1;color:#7a7a7a}.multiselect-container .chip-list .chip .chip-remove:hover{color:#575757}.multiselect-container .dropdown-panel{position:absolute;top:100%;left:0;right:0;border:1px solid #f1f1f4;background-color:#fff;z-index:1;display:none;border-radius:4px;margin-top:8px}.multiselect-container .dropdown-panel.open{display:block}.multiselect-container .dropdown-panel .dropdown-option{padding:1rem 1.25rem;cursor:pointer}.multiselect-container .dropdown-panel .dropdown-option:hover{background-color:var(--Gray-50, #f9fafb)}.multiselect-container .dropdown-panel .dropdown-option label{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px;display:flex;align-items:center;width:100%;cursor:inherit}.multiselect-container .dropdown-panel .dropdown-option label input[type=checkbox]{margin-right:8px;cursor:inherit}.multiselect-container .dropdown-panel .scroll{max-height:300px;overflow-y:auto;overflow-x:hidden}.multiselect-container .dropdown-panel .dropdown-extra-action{display:block;width:calc(100% - 16px);margin:4px 8px;padding:4px 8px;border:1px dashed var(--Primary-300, #6bcaff);border-radius:6px;background:transparent;color:var(--Primary-600, #00a3ff);font-size:12px;font-weight:500;cursor:pointer;text-align:center}.multiselect-container .dropdown-panel .dropdown-extra-action:hover{background:var(--Primary-50, #eaf8ff)}.multiselect-container .dropdown-panel .dropdown-extra-action.active{background:var(--Primary-50, #eaf8ff);border-style:solid}.multiselect-container .multi-placeholder{color:var(--Gray-500, #667085);font-size:14px;font-style:normal;font-weight:400;line-height:24px;margin:0}.multiselect-container.compact .dropdown-panel>.p-2{padding:4px!important}.multiselect-container.compact .dropdown-panel>.p-2 input.form-control{padding:3px 8px;font-size:12px;height:26px;min-height:26px}.multiselect-container.compact .dropdown-panel .dropdown-option{padding:4px 10px}.multiselect-container.compact .dropdown-panel .dropdown-option label{font-size:12px;line-height:16px}.multiselect-container.compact .dropdown-panel .scroll{max-height:180px}.disabled-click{pointer-events:none!important;opacity:.5}.disabled-click:hover{cursor:not-allowed!important}input[type=checkbox]{width:14px!important;height:14px!important;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;padding-left:3px;padding-top:10px;padding-right:0}\n"] }]
|
|
164
180
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { idField: [{
|
|
165
181
|
type: Input
|
|
166
182
|
}], nameField: [{
|
|
@@ -173,8 +189,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
173
189
|
type: Input
|
|
174
190
|
}], searchField: [{
|
|
175
191
|
type: Input
|
|
192
|
+
}], maxSelection: [{
|
|
193
|
+
type: Input
|
|
194
|
+
}], compact: [{
|
|
195
|
+
type: Input
|
|
196
|
+
}], extraActionLabel: [{
|
|
197
|
+
type: Input
|
|
198
|
+
}], extraActionActive: [{
|
|
199
|
+
type: Input
|
|
200
|
+
}], extraActionClick: [{
|
|
201
|
+
type: Output
|
|
176
202
|
}], onClick: [{
|
|
177
203
|
type: HostListener,
|
|
178
204
|
args: ['document:click', ['$event']]
|
|
179
205
|
}] } });
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlzZWxlY3QtY2hpcC1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duL211bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGlzZWxlY3QtY2hpcC1kcm9wZG93bi9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxVQUFVLEVBRVYsWUFBWSxFQUliLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFrQjNHLE1BQU0sT0FBTyxnQ0FBZ0M7SUFzQmpDO0lBQ0E7SUF0QlYsTUFBTSxDQUFDLGNBQWMsR0FBNEMsSUFBSSxDQUFDO0lBRTdELE9BQU8sQ0FBVTtJQUNqQixTQUFTLENBQVU7SUFDbkIsV0FBVyxHQUFXLFFBQVEsQ0FBQztJQUMvQixLQUFLLEdBQVUsRUFBRSxDQUFDO0lBQ2xCLE1BQU0sR0FBWSxLQUFLLENBQUM7SUFDeEIsV0FBVyxDQUFVO0lBRTlCLGNBQWMsR0FBYSxFQUFFLENBQUM7SUFDOUIsWUFBWSxHQUFZLEtBQUssQ0FBQztJQUM5QixVQUFVLEdBQVksS0FBSyxDQUFDO0lBRTVCLElBQUksR0FBVSxFQUFFLENBQUM7SUFFakIsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUVoQixR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O3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQXdCTixPQUFPO3NCQUROLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBmb3J3YXJkUmVmLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIENoYW5nZURldGVjdG9yUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ211bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgQ29tbW9uTW9kdWxlXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE11bHRpc2VsZWN0Q2hpcERyb3Bkb3duQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aXNlbGVjdENoaXBEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkNoYW5nZXMge1xyXG4gIHN0YXRpYyBhY3RpdmVEcm9wZG93bjogTXVsdGlzZWxlY3RDaGlwRHJvcGRvd25Db21wb25lbnQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQElucHV0KCkgaWRGaWVsZCE6IHN0cmluZztcclxuICBASW5wdXQoKSBuYW1lRmllbGQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9IFwiU2VsZWN0XCI7XHJcbiAgQElucHV0KCkgaXRlbXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgc2VhcmNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VhcmNoRmllbGQhOiBzdHJpbmc7XHJcblxyXG4gIHNlbGVjdGVkVmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGRyb3Bkb3duT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZGF0YTogYW55W10gPSBbXTtcclxuXHJcbiAgc2VhcmNoVGVybTogc3RyaW5nID0gJyc7XHJcblxyXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4geyB9O1xyXG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4geyB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhID0gc3RydWN0dXJlZENsb25lKHRoaXMuaXRlbXMpO1xyXG4gICAgdGhpcy5zZWFyY2hGaWVsZCA/Pz0gdGhpcy5uYW1lRmllbGQ7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd25PcGVuID0gZmFsc2U7XHJcbiAgICAgIGlmIChNdWx0aXNlbGVjdENoaXBEcm9wZG93bkNvbXBvbmVudC5hY3RpdmVEcm9wZG93biA9PT0gdGhpcykge1xyXG4gICAgICAgIE11bHRpc2VsZWN0Q2hpcERyb3Bkb3duQ29tcG9uZW50LmFjdGl2ZURyb3Bkb3duID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUob2JqOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IEFycmF5LmlzQXJyYXkob2JqKSA/IFsuLi5vYmpdIDogW107XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRHJvcGRvd24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5kcm9wZG93bk9wZW4gPSAhdGhpcy5kcm9wZG93bk9wZW47XHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmRyb3Bkb3duT3Blbikge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgTXVsdGlzZWxlY3RDaGlwRHJvcGRvd25Db21wb25lbnQuYWN0aXZlRHJvcGRvd24gJiZcclxuICAgICAgICBNdWx0aXNlbGVjdENoaXBEcm9wZG93bkNvbXBvbmVudC5hY3RpdmVEcm9wZG93biAhPT0gdGhpc1xyXG4gICAgICApIHtcclxuICAgICAgICBNdWx0aXNlbGVjdENoaXBEcm9wZG93bkNvbXBvbmVudC5hY3RpdmVEcm9wZG93bi5kcm9wZG93bk9wZW4gPSBmYWxzZTtcclxuICAgICAgICBNdWx0aXNlbGVjdENoaXBEcm9wZG93bkNvbXBvbmVudC5hY3RpdmVEcm9wZG93bi5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgICAgTXVsdGlzZWxlY3RDaGlwRHJvcGRvd25Db21wb25lbnQuYWN0aXZlRHJvcGRvd24gPSB0aGlzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgTXVsdGlzZWxlY3RDaGlwRHJvcGRvd25Db21wb25lbnQuYWN0aXZlRHJvcGRvd24gPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNJdGVtU2VsZWN0ZWQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlSXRlbVNlbGVjdGlvbihpdGVtOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMuaW5kZXhPZihpdGVtW3RoaXMuaWRGaWVsZF0pO1xyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5wdXNoKGl0ZW1bdGhpcy5pZEZpZWxkXSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUNoaXAodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZFZhbHVlcy5pbmRleE9mKHZhbHVlKTtcclxuICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEl0ZW1MYWJlbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGEuZmluZChpID0+IGlbdGhpcy5pZEZpZWxkXSA9PT0gdmFsdWUpO1xyXG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtW3RoaXMubmFtZUZpZWxkXSA6IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlU2VsZWN0QWxsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKHRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSB0aGlzLmF2YWlsYWJsZUl0ZW1zVG9TZWxlY3QubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLmlkRmllbGRdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZFZhbHVlcyk7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGF2YWlsYWJsZUl0ZW1zVG9TZWxlY3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhLmZpbHRlcihlID0+ICFlWydkaXNhYmxlZCddIHx8IHRoaXMuc2VsZWN0ZWRWYWx1ZXMuaW5jbHVkZXMoZVt0aGlzLmlkRmllbGRdKSk7XHJcbiAgfVxyXG5cclxuICBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSB0aGlzLmF2YWlsYWJsZUl0ZW1zVG9TZWxlY3QubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgaXNJbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlSXRlbXNUb1NlbGVjdC5sZW5ndGggPiAwICYmICF0aGlzLmlzQWxsU2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyQWxsKCkge1xyXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IFtdO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaCgpIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgY29uc3Qgc2VhcmNoV29yZHMgPSB0aGlzLnNlYXJjaFRlcm1cclxuICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgIC5zcGxpdCgvXFxzKy8pXHJcbiAgICAgICAgLm1hcCh3b3JkID0+IHdvcmQucmVwbGFjZSgvXFxzL2csICcnKSk7XHJcblxyXG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLml0ZW1zLmZpbHRlcigoZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IChlW3RoaXMuc2VhcmNoRmllbGRdID8/IFwiXCIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xyXG4gICAgICAgIHJldHVybiBzZWFyY2hXb3Jkcy5ldmVyeSh0ZXJtID0+IGZpZWxkVmFsdWUuaW5jbHVkZXModGVybSkpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGF0YSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLml0ZW1zKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm11bHRpc2VsZWN0LWNvbnRhaW5lclwiIFtjbGFzcy5kaXNhYmxlZF09XCJpc0Rpc2FibGVkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNoaXAtbGlzdFwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWYWx1ZXMubGVuZ3RoOyBlbHNlIG11bHRpUGxhY2Vob2xkZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNoaXBcIiAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygc2VsZWN0ZWRWYWx1ZXNcIj5cclxuICAgICAgICB7eyBnZXRJdGVtTGFiZWwodmFsdWUpIH19XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwLXJlbW92ZVwiIChjbGljayk9XCJyZW1vdmVDaGlwKHZhbHVlKVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctdGVtcGxhdGUgI211bHRpUGxhY2Vob2xkZXI+XHJcbiAgICAgIDxwIGNsYXNzPVwibXVsdGktcGxhY2Vob2xkZXJcIj57eyBwbGFjZWhvbGRlciB9fTwvcD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRWYWx1ZXMubGVuZ3RoOyBlbHNlIGRvd25BcnJvd1wiIChjbGljayk9XCJjbGVhckFsbCgpXCIgY2xhc3M9XCJjaGlwLXJlbW92ZSBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgIDxwYXRoXHJcbiAgICAgICAgZD1cIk02LjI1IDUuODk2NDVMNy41NzMyMiA0LjU3MzIyQzcuNjcwODUgNC40NzU1OSA3LjgyOTE1IDQuNDc1NTkgNy45MjY3OCA0LjU3MzIyQzguMDI0NDEgNC42NzA4NSA4LjAyNDQxIDQuODI5MTUgNy45MjY3OCA0LjkyNjc4TDYuNjAzNTUgNi4yNUw3LjkyNjc4IDcuNTczMjJDOC4wMjQ0MSA3LjY3MDg1IDguMDI0NDEgNy44MjkxNSA3LjkyNjc4IDcuOTI2NzhDNy44MjkxNSA4LjAyNDQxIDcuNjcwODUgOC4wMjQ0MSA3LjU3MzIyIDcuOTI2NzhMNi4yNSA2LjYwMzU1TDQuOTI2NzggNy45MjY3OEM0LjgyOTE1IDguMDI0NDEgNC42NzA4NSA4LjAyNDQxIDQuNTczMjIgNy45MjY3OEM0LjQ3NTU5IDcuODI5MTUgNC40NzU1OSA3LjY3MDg1IDQuNTczMjIgNy41NzMyMkw1Ljg5NjQ1IDYuMjVMNC41NzMyMiA0LjkyNjc4QzQuNDc1NTkgNC44MjkxNSA0LjQ3NTU5IDQuNjcwODUgNC41NzMyMiA0LjU3MzIyQzQuNjcwODUgNC40NzU1OSA0LjgyOTE1IDQuNDc1NTkgNC45MjY3OCA0LjU3MzIyTDYuMjUgNS44OTY0NVpNNi4yNSAxMS41QzMuMzUwNTEgMTEuNSAxIDkuMTQ5NDkgMSA2LjI1QzEgMy4zNTA1MSAzLjM1MDUxIDEgNi4yNSAxQzkuMTQ5NDkgMSAxMS41IDMuMzUwNTEgMTEuNSA2LjI1QzExLjUgOS4xNDk0OSA5LjE0OTQ5IDExLjUgNi4yNSAxMS41Wk02LjI1IDExQzguODczMzUgMTEgMTEgOC44NzMzNSAxMSA2LjI1QzExIDMuNjI2NjUgOC44NzMzNSAxLjUgNi4yNSAxLjVDMy42MjY2NSAxLjUgMS41IDMuNjI2NjUgMS41IDYuMjVDMS41IDguODczMzUgMy42MjY2NSAxMSA2LjI1IDExWlwiXHJcbiAgICAgICAgZmlsbD1cImJsYWNrXCJcclxuICAgICAgLz5cclxuICAgIDwvc3ZnPlxyXG4gIDwvc3Bhbj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNkb3duQXJyb3c+XHJcbiAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgPHBhdGggZD1cIk01IDcuNUwxMCAxMi41TDE1IDcuNVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgIDwvc3ZnPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1wYW5lbFwiIFtjbGFzcy5vcGVuXT1cImRyb3Bkb3duT3BlblwiPlxyXG4gICAgPGRpdiAqbmdJZj1cInNlYXJjaCAmJiBpdGVtcy5sZW5ndGhcIiBjbGFzcz1cInAtMlwiPlxyXG4gICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoKClcIiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tb3B0aW9uXCIgKm5nSWY9XCJkYXRhLmxlbmd0aDsgZWxzZSBub0RhdGFcIj5cclxuICAgICAgPGxhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJpc0luZGV0ZXJtaW5hdGUoKVwiXHJcbiAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbCgkZXZlbnQpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkIHx8ICFhdmFpbGFibGVJdGVtc1RvU2VsZWN0Lmxlbmd0aFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICBTZWxlY3QgQWxsXHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tb3B0aW9uIGRpc2FibGVkLWNsaWNrXCI+XHJcbiAgICAgICAgPGxhYmVsPiBObyBJdGVtczwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxcIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZHJvcGRvd24tb3B0aW9uXCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhXCJcclxuICAgICAgICBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwiaXRlbT8uZGlzYWJsZWQgJiYgIWlzSXRlbVNlbGVjdGVkKGl0ZW1baWRGaWVsZF0pXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc0l0ZW1TZWxlY3RlZChpdGVtW2lkRmllbGRdKVwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlSXRlbVNlbGVjdGlvbihpdGVtKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICB7eyBpdGVtW25hbWVGaWVsZF0gfX1cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlzZWxlY3QtY2hpcC1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duL211bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGlzZWxlY3QtY2hpcC1kcm9wZG93bi9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFVBQVUsRUFFVixZQUFZLEVBSWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQWtCM0csTUFBTSxPQUFPLGdDQUFnQztJQTJCakM7SUFDQTtJQTNCVixNQUFNLENBQUMsY0FBYyxHQUE0QyxJQUFJLENBQUM7SUFFN0QsT0FBTyxDQUFVO0lBQ2pCLFNBQVMsQ0FBVTtJQUNuQixXQUFXLEdBQVcsUUFBUSxDQUFDO0lBQy9CLEtBQUssR0FBVSxFQUFFLENBQUM7SUFDbEIsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixXQUFXLENBQVU7SUFDckIsWUFBWSxHQUFXLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtJQUMxQyxPQUFPLEdBQVksS0FBSyxDQUFDO0lBQ3pCLGdCQUFnQixHQUFXLEVBQUUsQ0FBQztJQUM5QixpQkFBaUIsR0FBWSxLQUFLLENB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bSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBmb3J3YXJkUmVmLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIENoYW5nZURldGVjdG9yUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ211bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tdWx0aXNlbGVjdC1jaGlwLWRyb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgQ29tbW9uTW9kdWxlXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE11bHRpc2VsZWN0Q2hpcERyb3Bkb3duQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aXNlbGVjdENoaXBEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkNoYW5nZXMge1xyXG4gIHN0YXRpYyBhY3RpdmVEcm9wZG93bjogTXVsdGlzZWxlY3RDaGlwRHJvcGRvd25Db21wb25lbnQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQElucHV0KCkgaWRGaWVsZCE6IHN0cmluZztcclxuICBASW5wdXQoKSBuYW1lRmllbGQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9IFwiU2VsZWN0XCI7XHJcbiAgQElucHV0KCkgaXRlbXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgc2VhcmNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VhcmNoRmllbGQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbWF4U2VsZWN0aW9uOiBudW1iZXIgPSAwOyAvLyAwID0gdW5saW1pdGVkXHJcbiAgQElucHV0KCkgY29tcGFjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGV4dHJhQWN0aW9uTGFiZWw6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGV4dHJhQWN0aW9uQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIGV4dHJhQWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIHNlbGVjdGVkVmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGRyb3Bkb3duT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZGF0YTogYW55W10gPSBbXTtcclxuXHJcbiAgc2VhcmNoVGVybTogc3RyaW5nID0gJyc7XHJcblxyXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4geyB9O1xyXG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4geyB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhID0gc3RydWN0dXJlZENsb25lKHRoaXMuaXRlbXMpO1xyXG4gICAgdGhpcy5zZWFyY2hGaWVsZCA/Pz0gdGhpcy5uYW1lRmllbGQ7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd25PcGVuID0gZmFsc2U7XHJcbiAgICAgIGlmIChNdWx0aXNlbGVjdENoaXBEcm9wZG93bkNvbXBvbmVudC5hY3RpdmVEcm9wZG93biA9PT0gdGhpcykge1xyXG4gICAgICAgIE11bHRpc2VsZWN0Q2hpcERyb3Bkb3duQ29tcG9uZW50LmFjdGl2ZURyb3Bkb3duID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUob2JqOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IEFycmF5LmlzQXJyYXkob2JqKSA/IFsuLi5vYmpdIDogW107XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRHJvcGRvd24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5kcm9wZG93bk9wZW4gPSAhdGhpcy5kcm9wZG93bk9wZW47XHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmRyb3Bkb3duT3Blbikge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgTXVsdGlzZWxlY3RDaGlwRHJvcGRvd25Db21wb25lbnQuYWN0aXZlRHJvcGRvd24gJiZcclxuICAgICAgICBNdWx0aXNlbGVjdENoaXBEcm9wZG93bkNvbXBvbmVudC5hY3RpdmVEcm9wZG93biAhPT0gdGhpc1xyXG4gICAgICApIHtcclxuICAgICAgICBNdWx0aXNlbGVjdENoaXBEcm9wZG93bkNvbXBvbmVudC5hY3RpdmVEcm9wZG93bi5kcm9wZG93bk9wZW4gPSBmYWxzZTtcclxuICAgICAgICBNdWx0aXNlbGVjdENoaXBEcm9wZG93bkNvbXBvbmVudC5hY3RpdmVEcm9wZG93bi5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgICAgTXVsdGlzZWxlY3RDaGlwRHJvcGRvd25Db21wb25lbnQuYWN0aXZlRHJvcGRvd24gPSB0aGlzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgTXVsdGlzZWxlY3RDaGlwRHJvcGRvd25Db21wb25lbnQuYWN0aXZlRHJvcGRvd24gPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNJdGVtU2VsZWN0ZWQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlSXRlbVNlbGVjdGlvbihpdGVtOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBpZCA9IGl0ZW1bdGhpcy5pZEZpZWxkXTtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZFZhbHVlcy5pbmRleE9mKGlkKTtcclxuICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzQXRNYXhTZWxlY3Rpb24pIHJldHVybjtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5wdXNoKGlkKTtcclxuICAgIH1cclxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZFZhbHVlcyk7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQXRNYXhTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLm1heFNlbGVjdGlvbiA+IDAgJiYgdGhpcy5zZWxlY3RlZFZhbHVlcy5sZW5ndGggPj0gdGhpcy5tYXhTZWxlY3Rpb25cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc0l0ZW1EaXNhYmxlZEJ5TWF4KGl0ZW06IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLm1heFNlbGVjdGlvbikgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5pc0F0TWF4U2VsZWN0aW9uICYmICF0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW1bdGhpcy5pZEZpZWxkXSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVDaGlwKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMuaW5kZXhPZih2YWx1ZSk7XHJcbiAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRJdGVtTGFiZWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5kYXRhLmZpbmQoaSA9PiBpW3RoaXMuaWRGaWVsZF0gPT09IHZhbHVlKTtcclxuICAgIHJldHVybiBpdGVtID8gaXRlbVt0aGlzLm5hbWVGaWVsZF0gOiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVNlbGVjdEFsbChldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQgfHwgdGhpcy5tYXhTZWxlY3Rpb24gPiAwKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBpZiAodGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IHRoaXMuYXZhaWxhYmxlSXRlbXNUb1NlbGVjdC5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuaWRGaWVsZF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXZhaWxhYmxlSXRlbXNUb1NlbGVjdCgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGEuZmlsdGVyKGUgPT4gIWVbJ2Rpc2FibGVkJ10gfHwgdGhpcy5zZWxlY3RlZFZhbHVlcy5pbmNsdWRlcyhlW3RoaXMuaWRGaWVsZF0pKTtcclxuICB9XHJcblxyXG4gIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZFZhbHVlcy5sZW5ndGggPT09IHRoaXMuYXZhaWxhYmxlSXRlbXNUb1NlbGVjdC5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVJdGVtc1RvU2VsZWN0Lmxlbmd0aCA+IDAgJiYgIXRoaXMuaXNBbGxTZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJBbGwoKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSByZXR1cm47XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gW107XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKCkge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoVGVybSkge1xyXG4gICAgICBjb25zdCBzZWFyY2hXb3JkcyA9IHRoaXMuc2VhcmNoVGVybVxyXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgLnNwbGl0KC9cXHMrLylcclxuICAgICAgICAubWFwKHdvcmQgPT4gd29yZC5yZXBsYWNlKC9cXHMvZywgJycpKTtcclxuXHJcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMuaXRlbXMuZmlsdGVyKChlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gKGVbdGhpcy5zZWFyY2hGaWVsZF0gPz8gXCJcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMvZywgXCJcIik7XHJcbiAgICAgICAgcmV0dXJuIHNlYXJjaFdvcmRzLmV2ZXJ5KHRlcm0gPT4gZmllbGRWYWx1ZS5pbmNsdWRlcyh0ZXJtKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRhID0gc3RydWN0dXJlZENsb25lKHRoaXMuaXRlbXMpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibXVsdGlzZWxlY3QtY29udGFpbmVyXCIgW2NsYXNzLmRpc2FibGVkXT1cImlzRGlzYWJsZWRcIiBbY2xhc3MuY29tcGFjdF09XCJjb21wYWN0XCI+XHJcbiAgPGRpdiBjbGFzcz1cImNoaXAtbGlzdFwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWYWx1ZXMubGVuZ3RoOyBlbHNlIG11bHRpUGxhY2Vob2xkZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNoaXBcIiAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygc2VsZWN0ZWRWYWx1ZXNcIj5cclxuICAgICAgICB7eyBnZXRJdGVtTGFiZWwodmFsdWUpIH19XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwLXJlbW92ZVwiIChjbGljayk9XCJyZW1vdmVDaGlwKHZhbHVlKVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctdGVtcGxhdGUgI211bHRpUGxhY2Vob2xkZXI+XHJcbiAgICAgIDxwIGNsYXNzPVwibXVsdGktcGxhY2Vob2xkZXJcIj57eyBwbGFjZWhvbGRlciB9fTwvcD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRWYWx1ZXMubGVuZ3RoOyBlbHNlIGRvd25BcnJvd1wiIChjbGljayk9XCJjbGVhckFsbCgpXCIgY2xhc3M9XCJjaGlwLXJlbW92ZSBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgIDxwYXRoXHJcbiAgICAgICAgZD1cIk02LjI1IDUuODk2NDVMNy41NzMyMiA0LjU3MzIyQzcuNjcwODUgNC40NzU1OSA3LjgyOTE1IDQuNDc1NTkgNy45MjY3OCA0LjU3MzIyQzguMDI0NDEgNC42NzA4NSA4LjAyNDQxIDQuODI5MTUgNy45MjY3OCA0LjkyNjc4TDYuNjAzNTUgNi4yNUw3LjkyNjc4IDcuNTczMjJDOC4wMjQ0MSA3LjY3MDg1IDguMDI0NDEgNy44MjkxNSA3LjkyNjc4IDcuOTI2NzhDNy44MjkxNSA4LjAyNDQxIDcuNjcwODUgOC4wMjQ0MSA3LjU3MzIyIDcuOTI2NzhMNi4yNSA2LjYwMzU1TDQuOTI2NzggNy45MjY3OEM0LjgyOTE1IDguMDI0NDEgNC42NzA4NSA4LjAyNDQxIDQuNTczMjIgNy45MjY3OEM0LjQ3NTU5IDcuODI5MTUgNC40NzU1OSA3LjY3MDg1IDQuNTczMjIgNy41NzMyMkw1Ljg5NjQ1IDYuMjVMNC41NzMyMiA0LjkyNjc4QzQuNDc1NTkgNC44MjkxNSA0LjQ3NTU5IDQuNjcwODUgNC41NzMyMiA0LjU3MzIyQzQuNjcwODUgNC40NzU1OSA0LjgyOTE1IDQuNDc1NTkgNC45MjY3OCA0LjU3MzIyTDYuMjUgNS44OTY0NVpNNi4yNSAxMS41QzMuMzUwNTEgMTEuNSAxIDkuMTQ5NDkgMSA2LjI1QzEgMy4zNTA1MSAzLjM1MDUxIDEgNi4yNSAxQzkuMTQ5NDkgMSAxMS41IDMuMzUwNTEgMTEuNSA2LjI1QzExLjUgOS4xNDk0OSA5LjE0OTQ5IDExLjUgNi4yNSAxMS41Wk02LjI1IDExQzguODczMzUgMTEgMTEgOC44NzMzNSAxMSA2LjI1QzExIDMuNjI2NjUgOC44NzMzNSAxLjUgNi4yNSAxLjVDMy42MjY2NSAxLjUgMS41IDMuNjI2NjUgMS41IDYuMjVDMS41IDguODczMzUgMy42MjY2NSAxMSA2LjI1IDExWlwiXHJcbiAgICAgICAgZmlsbD1cImJsYWNrXCJcclxuICAgICAgLz5cclxuICAgIDwvc3ZnPlxyXG4gIDwvc3Bhbj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNkb3duQXJyb3c+XHJcbiAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgPHBhdGggZD1cIk01IDcuNUwxMCAxMi41TDE1IDcuNVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgIDwvc3ZnPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1wYW5lbFwiIFtjbGFzcy5vcGVuXT1cImRyb3Bkb3duT3BlblwiPlxyXG4gICAgPGRpdiAqbmdJZj1cInNlYXJjaCAmJiBpdGVtcy5sZW5ndGhcIiBjbGFzcz1cInAtMlwiPlxyXG4gICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoKClcIiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAqbmdJZj1cImV4dHJhQWN0aW9uTGFiZWxcIlxyXG4gICAgICBjbGFzcz1cImRyb3Bkb3duLWV4dHJhLWFjdGlvblwiXHJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiZXh0cmFBY3Rpb25BY3RpdmVcIlxyXG4gICAgICAoY2xpY2spPVwiZXh0cmFBY3Rpb25DbGljay5lbWl0KClcIj5cclxuICAgICAge3sgZXh0cmFBY3Rpb25MYWJlbCB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tb3B0aW9uXCIgKm5nSWY9XCJkYXRhLmxlbmd0aCAmJiAhbWF4U2VsZWN0aW9uOyBlbHNlIG5vRGF0YVwiPlxyXG4gICAgICA8bGFiZWw+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwiaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImlzSW5kZXRlcm1pbmF0ZSgpXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKCRldmVudClcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQgfHwgIWF2YWlsYWJsZUl0ZW1zVG9TZWxlY3QubGVuZ3RoXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIFNlbGVjdCBBbGxcclxuICAgICAgPC9sYWJlbD5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLXRlbXBsYXRlICNub0RhdGE+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1vcHRpb24gZGlzYWJsZWQtY2xpY2tcIiAqbmdJZj1cIiFkYXRhLmxlbmd0aFwiPlxyXG4gICAgICAgIDxsYWJlbD4gTm8gSXRlbXM8L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW9wdGlvblwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YVwiXHJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cIihpdGVtPy5kaXNhYmxlZCB8fCBpc0l0ZW1EaXNhYmxlZEJ5TWF4KGl0ZW0pKSAmJiAhaXNJdGVtU2VsZWN0ZWQoaXRlbVtpZEZpZWxkXSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImlzSXRlbVNlbGVjdGVkKGl0ZW1baWRGaWVsZF0pXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVJdGVtU2VsZWN0aW9uKGl0ZW0pXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQgfHwgaXNJdGVtRGlzYWJsZWRCeU1heChpdGVtKVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAge3sgaXRlbVtuYW1lRmllbGRdIH19XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|