@messaia/cdk 13.3.3-rc34 → 13.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.
@@ -382,14 +382,14 @@ export class VdChipsComponent extends AbstractMatFormField {
382
382
  }
383
383
  }
384
384
  /** @nocollapse */ /** @nocollapse */ VdChipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdChipsComponent, deps: [{ token: i0.Injector }, { token: i1.NgControl, optional: true, self: true }, { token: i1.NgForm, optional: true }, { token: i1.FormGroupDirective, optional: true }, { token: i2.ErrorStateMatcher }, { token: i3.FocusMonitor }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
385
- /** @nocollapse */ /** @nocollapse */ VdChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: VdChipsComponent, selector: "vd-chips", inputs: { chips: "chips", endpoint: "endpoint", params: "params", projection: "projection", path: "path", key: "key", searchField: "searchField", searchFields: "searchFields", termMinlength: "termMinlength", limit: "limit", removable: "removable", debounce: "debounce", suffixButtons: "suffixButtons", default: "default" }, outputs: { initSelect: "initSelect", selected: "selected", cleared: "cleared", onLaunch: "launch", chipFocus: "chipFocus" }, providers: [
385
+ /** @nocollapse */ /** @nocollapse */ VdChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: VdChipsComponent, selector: "vd-chips", inputs: { chips: "chips", endpoint: "endpoint", params: "params", projection: "projection", path: "path", context: "context", key: "key", searchField: "searchField", searchFields: "searchFields", termMinlength: "termMinlength", limit: "limit", removable: "removable", debounce: "debounce", suffixButtons: "suffixButtons", default: "default" }, outputs: { initSelect: "initSelect", selected: "selected", cleared: "cleared", onLaunch: "launch", chipFocus: "chipFocus" }, providers: [
386
386
  { provide: MatFormFieldControl, useExisting: VdChipsComponent }
387
- ], queries: [{ propertyName: "chipTemplate", first: true, predicate: VdChipDirective, descendants: true }, { propertyName: "autocompleteOptionTemplate", first: true, predicate: VdAutocompleteOptionDirective, descendants: true }], viewQueries: [{ propertyName: "chipInput", first: true, predicate: MatInput, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<mat-chip-list #chipList [required]=\"required\" [disabled]=\"readonly\">\r\n\t<!-- #region Chips -->\r\n\t<ng-template let-chip let-first=\"first\" let-index=\"index\" ngFor [ngForOf]=\"chips\">\r\n\t\t<!-- <mat-basic-chip [selectable]=\"!readonly\" [removable]=\"!readonly\" (removed)=\"handleRemovedEvent()\" disableRipple>\r\n\t\t\t<span class=\"vd-chip-content\">\r\n\t\t\t\t<span *ngIf=\"!chipTemplate?.templateRef\">\r\n\t\t\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{ chip }}</span>\r\n\t\t\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: chip }\"></ng-template>\r\n\t\t\t\t</span>\r\n\t\t\t\t<ng-template *ngIf=\"chipTemplate?.templateRef\" [ngTemplateOutlet]=\"chipTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ chip: chip }\"></ng-template>\r\n\t\t\t</span>\r\n\t\t\t<mat-icon *ngFor=\"let button of suffixButtons\" class=\"vd-chip-launch\" [ngClass]=\"{'removable': !readonly}\" (click)=\"$event.stopPropagation(); button.event && button.event(chips[0])\">{{button.icon}}</mat-icon>\r\n\t\t\t<mat-icon *ngIf=\"onLaunch?.observers?.length > 0\" class=\"vd-chip-launch\" [ngClass]=\"{'removable': !readonly}\" (click)=\"$event.stopPropagation(); handleLaunchClicked()\">launch</mat-icon>\r\n\t\t\t<mat-icon matChipRemove *ngIf=\"!readonly\">backspace</mat-icon>\r\n\t\t</mat-basic-chip> -->\r\n\r\n\t\t<mat-basic-chip [selectable]=\"!readonly\" [removable]=\"!readonly\" (removed)=\"handleRemovedEvent()\" disableRipple>\r\n\t\t\t<span class=\"vd-chip-content\">\r\n\t\t\t\t<span *ngIf=\"!chipTemplate?.templateRef\">\r\n\t\t\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{ chip }}</span>\r\n\t\t\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: chip }\"></ng-template>\r\n\t\t\t\t</span>\r\n\t\t\t\t<ng-template *ngIf=\"chipTemplate?.templateRef\" [ngTemplateOutlet]=\"chipTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ chip: chip }\"></ng-template>\r\n\t\t\t</span>\r\n\t\t\t<ng-template let-button let-first=\"first\" ngFor [ngForOf]=\"suffixButtons\">\r\n\t\t\t\t<a mat-icon-button *ngIf=\"!button.hide || !button.hide(chips[0])\" (click)=\"$event.stopPropagation(); button.event && button.event(chips[0])\">\r\n\t\t\t\t\t<mat-icon>{{button.icon}}</mat-icon>\r\n\t\t\t\t</a>\r\n\t\t\t</ng-template>\r\n\t\t\t<a mat-icon-button *ngIf=\"onLaunch?.observers?.length > 0\" (click)=\"$event.stopPropagation(); handleLaunchClicked()\">\r\n\t\t\t\t<mat-icon>launch</mat-icon>\r\n\t\t\t</a>\r\n\t\t\t<a mat-icon-button>\r\n\t\t\t\t<mat-icon matChipRemove>close</mat-icon>\r\n\t\t\t</a>\r\n\t\t</mat-basic-chip>\r\n\t</ng-template>\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Search box -->\r\n\t<input matInput [hidden]=\"value && !empty\" placeholder=\"{{placeholder}}\" [readonly]=\"readonly\" [matChipInputFor]=\"chipList\" [matAutocomplete]=\"auto\" [formControl]=\"autoCompleteChipList\" #chipInput />\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Progress -->\r\n\t<mat-spinner diameter=\"18\" *ngIf=\"loading\"></mat-spinner>\r\n\t<!-- #endregion -->\r\n</mat-chip-list>\r\n\r\n<!-- #region Autocomplete -->\r\n<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"addChip($event, chipInput)\">\r\n\t<ng-template let-item let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n\t\t<mat-option [value]=\"item\">\r\n\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{ item }}</span>\r\n\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: item }\"></ng-template>\r\n\t\t</mat-option>\r\n\t</ng-template>\r\n</mat-autocomplete>\r\n<!-- #endregion -->", styles: [":host ::ng-deep .mat-chip-list-wrapper{min-height:24px}:host ::ng-deep .mat-chip{display:flex;flex-direction:row;width:100%;padding:0 5px;justify-content:center}:host ::ng-deep .mat-chip.mat-chip-disabled{color:#000000a3}:host ::ng-deep .mat-chip .vd-chip-content{flex-grow:1!important;font-weight:initial;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;flex-direction:column;justify-content:center}:host ::ng-deep .mat-chip .mat-icon-button{display:inline-flex;justify-content:center;align-items:center;width:2.5em;height:2.5em;margin-top:-10px}:host ::ng-deep .mat-chip .mat-icon-button .mat-icon{font-size:24px}:host ::ng-deep .mat-chip .mat-icon{cursor:pointer}:host ::ng-deep .mat-chip .vd-chip-launch{font-size:18px;position:absolute;right:4px;top:0;cursor:pointer}:host ::ng-deep .mat-chip .vd-chip-launch.removable{right:34px}mat-spinner{margin-top:-9px;margin-right:6px}\n"], components: [{ type: i4.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i5.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i2.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.MatChipRemove, selector: "[matChipRemove]" }, { type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i4.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { 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]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
387
+ ], queries: [{ propertyName: "chipTemplate", first: true, predicate: VdChipDirective, descendants: true }, { propertyName: "autocompleteOptionTemplate", first: true, predicate: VdAutocompleteOptionDirective, descendants: true }], viewQueries: [{ propertyName: "chipInput", first: true, predicate: MatInput, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<mat-chip-list #chipList [required]=\"required\" [disabled]=\"readonly\">\r\n\t<!-- #region Chips -->\r\n\t<ng-template let-chip let-first=\"first\" let-index=\"index\" ngFor [ngForOf]=\"chips\">\r\n\t\t<mat-basic-chip [selectable]=\"!readonly\" [removable]=\"!readonly\" (removed)=\"handleRemovedEvent()\" disableRipple>\r\n\t\t\t<span class=\"vd-chip-content\">\r\n\t\t\t\t<span *ngIf=\"!chipTemplate?.templateRef\">\r\n\t\t\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{ chip }}</span>\r\n\t\t\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: chip }\"></ng-template>\r\n\t\t\t\t</span>\r\n\t\t\t\t<ng-template *ngIf=\"chipTemplate?.templateRef\" [ngTemplateOutlet]=\"chipTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ chip: chip }\"></ng-template>\r\n\t\t\t</span>\r\n\t\t\t<ng-template let-button let-first=\"first\" ngFor [ngForOf]=\"suffixButtons\">\r\n\t\t\t\t<a mat-icon-button *ngIf=\"!button.hide || !button.hide(chips[0], context)\" (click)=\"$event.stopPropagation(); button.event && button.event(chips[0], context)\">\r\n\t\t\t\t\t<mat-icon>{{button.icon}}</mat-icon>\r\n\t\t\t\t</a>\r\n\t\t\t</ng-template>\r\n\t\t\t<a mat-icon-button *ngIf=\"onLaunch?.observers?.length > 0\" (click)=\"$event.stopPropagation(); handleLaunchClicked()\">\r\n\t\t\t\t<mat-icon>launch</mat-icon>\r\n\t\t\t</a>\r\n\t\t\t<a mat-icon-button *ngIf=\"!readonly\">\r\n\t\t\t\t<mat-icon matChipRemove>close</mat-icon>\r\n\t\t\t</a>\r\n\t\t</mat-basic-chip>\r\n\t</ng-template>\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Search box -->\r\n\t<input matInput [hidden]=\"value && !empty\" placeholder=\"{{placeholder}}\" [readonly]=\"readonly\" [matChipInputFor]=\"chipList\" [matAutocomplete]=\"auto\" [formControl]=\"autoCompleteChipList\" #chipInput />\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Progress -->\r\n\t<mat-spinner diameter=\"18\" *ngIf=\"loading\"></mat-spinner>\r\n\t<!-- #endregion -->\r\n</mat-chip-list>\r\n\r\n<!-- #region Autocomplete -->\r\n<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"addChip($event, chipInput)\">\r\n\t<ng-template let-item let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n\t\t<mat-option [value]=\"item\">\r\n\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{ item }}</span>\r\n\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: item }\"></ng-template>\r\n\t\t</mat-option>\r\n\t</ng-template>\r\n</mat-autocomplete>\r\n<!-- #endregion -->", styles: [":host ::ng-deep .mat-chip-list-wrapper{min-height:24px}:host ::ng-deep .mat-chip{display:flex;flex-direction:row;width:100%;padding:0 5px;justify-content:center}:host ::ng-deep .mat-chip.mat-chip-disabled{color:#000000a3}:host ::ng-deep .mat-chip .vd-chip-content{flex-grow:1!important;font-weight:initial;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;flex-direction:column;justify-content:center}:host ::ng-deep .mat-chip .mat-icon-button{display:inline-flex;justify-content:center;align-items:center;width:2.5em;height:2.5em;margin-top:-10px}:host ::ng-deep .mat-chip .mat-icon-button .mat-icon{font-size:24px}:host ::ng-deep .mat-chip .mat-icon{cursor:pointer}:host ::ng-deep .mat-chip .vd-chip-launch{font-size:18px;position:absolute;right:4px;top:0;cursor:pointer}:host ::ng-deep .mat-chip .vd-chip-launch.removable{right:34px}mat-spinner{margin-top:-9px;margin-right:6px}\n"], components: [{ type: i4.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i5.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i2.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.MatChipRemove, selector: "[matChipRemove]" }, { type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i4.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { 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]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
388
388
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdChipsComponent, decorators: [{
389
389
  type: Component,
390
390
  args: [{ selector: 'vd-chips', providers: [
391
391
  { provide: MatFormFieldControl, useExisting: VdChipsComponent }
392
- ], template: "<mat-chip-list #chipList [required]=\"required\" [disabled]=\"readonly\">\r\n\t<!-- #region Chips -->\r\n\t<ng-template let-chip let-first=\"first\" let-index=\"index\" ngFor [ngForOf]=\"chips\">\r\n\t\t<!-- <mat-basic-chip [selectable]=\"!readonly\" [removable]=\"!readonly\" (removed)=\"handleRemovedEvent()\" disableRipple>\r\n\t\t\t<span class=\"vd-chip-content\">\r\n\t\t\t\t<span *ngIf=\"!chipTemplate?.templateRef\">\r\n\t\t\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{ chip }}</span>\r\n\t\t\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: chip }\"></ng-template>\r\n\t\t\t\t</span>\r\n\t\t\t\t<ng-template *ngIf=\"chipTemplate?.templateRef\" [ngTemplateOutlet]=\"chipTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ chip: chip }\"></ng-template>\r\n\t\t\t</span>\r\n\t\t\t<mat-icon *ngFor=\"let button of suffixButtons\" class=\"vd-chip-launch\" [ngClass]=\"{'removable': !readonly}\" (click)=\"$event.stopPropagation(); button.event && button.event(chips[0])\">{{button.icon}}</mat-icon>\r\n\t\t\t<mat-icon *ngIf=\"onLaunch?.observers?.length > 0\" class=\"vd-chip-launch\" [ngClass]=\"{'removable': !readonly}\" (click)=\"$event.stopPropagation(); handleLaunchClicked()\">launch</mat-icon>\r\n\t\t\t<mat-icon matChipRemove *ngIf=\"!readonly\">backspace</mat-icon>\r\n\t\t</mat-basic-chip> -->\r\n\r\n\t\t<mat-basic-chip [selectable]=\"!readonly\" [removable]=\"!readonly\" (removed)=\"handleRemovedEvent()\" disableRipple>\r\n\t\t\t<span class=\"vd-chip-content\">\r\n\t\t\t\t<span *ngIf=\"!chipTemplate?.templateRef\">\r\n\t\t\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{ chip }}</span>\r\n\t\t\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: chip }\"></ng-template>\r\n\t\t\t\t</span>\r\n\t\t\t\t<ng-template *ngIf=\"chipTemplate?.templateRef\" [ngTemplateOutlet]=\"chipTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ chip: chip }\"></ng-template>\r\n\t\t\t</span>\r\n\t\t\t<ng-template let-button let-first=\"first\" ngFor [ngForOf]=\"suffixButtons\">\r\n\t\t\t\t<a mat-icon-button *ngIf=\"!button.hide || !button.hide(chips[0])\" (click)=\"$event.stopPropagation(); button.event && button.event(chips[0])\">\r\n\t\t\t\t\t<mat-icon>{{button.icon}}</mat-icon>\r\n\t\t\t\t</a>\r\n\t\t\t</ng-template>\r\n\t\t\t<a mat-icon-button *ngIf=\"onLaunch?.observers?.length > 0\" (click)=\"$event.stopPropagation(); handleLaunchClicked()\">\r\n\t\t\t\t<mat-icon>launch</mat-icon>\r\n\t\t\t</a>\r\n\t\t\t<a mat-icon-button>\r\n\t\t\t\t<mat-icon matChipRemove>close</mat-icon>\r\n\t\t\t</a>\r\n\t\t</mat-basic-chip>\r\n\t</ng-template>\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Search box -->\r\n\t<input matInput [hidden]=\"value && !empty\" placeholder=\"{{placeholder}}\" [readonly]=\"readonly\" [matChipInputFor]=\"chipList\" [matAutocomplete]=\"auto\" [formControl]=\"autoCompleteChipList\" #chipInput />\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Progress -->\r\n\t<mat-spinner diameter=\"18\" *ngIf=\"loading\"></mat-spinner>\r\n\t<!-- #endregion -->\r\n</mat-chip-list>\r\n\r\n<!-- #region Autocomplete -->\r\n<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"addChip($event, chipInput)\">\r\n\t<ng-template let-item let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n\t\t<mat-option [value]=\"item\">\r\n\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{ item }}</span>\r\n\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: item }\"></ng-template>\r\n\t\t</mat-option>\r\n\t</ng-template>\r\n</mat-autocomplete>\r\n<!-- #endregion -->", styles: [":host ::ng-deep .mat-chip-list-wrapper{min-height:24px}:host ::ng-deep .mat-chip{display:flex;flex-direction:row;width:100%;padding:0 5px;justify-content:center}:host ::ng-deep .mat-chip.mat-chip-disabled{color:#000000a3}:host ::ng-deep .mat-chip .vd-chip-content{flex-grow:1!important;font-weight:initial;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;flex-direction:column;justify-content:center}:host ::ng-deep .mat-chip .mat-icon-button{display:inline-flex;justify-content:center;align-items:center;width:2.5em;height:2.5em;margin-top:-10px}:host ::ng-deep .mat-chip .mat-icon-button .mat-icon{font-size:24px}:host ::ng-deep .mat-chip .mat-icon{cursor:pointer}:host ::ng-deep .mat-chip .vd-chip-launch{font-size:18px;position:absolute;right:4px;top:0;cursor:pointer}:host ::ng-deep .mat-chip .vd-chip-launch.removable{right:34px}mat-spinner{margin-top:-9px;margin-right:6px}\n"] }]
392
+ ], template: "<mat-chip-list #chipList [required]=\"required\" [disabled]=\"readonly\">\r\n\t<!-- #region Chips -->\r\n\t<ng-template let-chip let-first=\"first\" let-index=\"index\" ngFor [ngForOf]=\"chips\">\r\n\t\t<mat-basic-chip [selectable]=\"!readonly\" [removable]=\"!readonly\" (removed)=\"handleRemovedEvent()\" disableRipple>\r\n\t\t\t<span class=\"vd-chip-content\">\r\n\t\t\t\t<span *ngIf=\"!chipTemplate?.templateRef\">\r\n\t\t\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{ chip }}</span>\r\n\t\t\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: chip }\"></ng-template>\r\n\t\t\t\t</span>\r\n\t\t\t\t<ng-template *ngIf=\"chipTemplate?.templateRef\" [ngTemplateOutlet]=\"chipTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ chip: chip }\"></ng-template>\r\n\t\t\t</span>\r\n\t\t\t<ng-template let-button let-first=\"first\" ngFor [ngForOf]=\"suffixButtons\">\r\n\t\t\t\t<a mat-icon-button *ngIf=\"!button.hide || !button.hide(chips[0], context)\" (click)=\"$event.stopPropagation(); button.event && button.event(chips[0], context)\">\r\n\t\t\t\t\t<mat-icon>{{button.icon}}</mat-icon>\r\n\t\t\t\t</a>\r\n\t\t\t</ng-template>\r\n\t\t\t<a mat-icon-button *ngIf=\"onLaunch?.observers?.length > 0\" (click)=\"$event.stopPropagation(); handleLaunchClicked()\">\r\n\t\t\t\t<mat-icon>launch</mat-icon>\r\n\t\t\t</a>\r\n\t\t\t<a mat-icon-button *ngIf=\"!readonly\">\r\n\t\t\t\t<mat-icon matChipRemove>close</mat-icon>\r\n\t\t\t</a>\r\n\t\t</mat-basic-chip>\r\n\t</ng-template>\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Search box -->\r\n\t<input matInput [hidden]=\"value && !empty\" placeholder=\"{{placeholder}}\" [readonly]=\"readonly\" [matChipInputFor]=\"chipList\" [matAutocomplete]=\"auto\" [formControl]=\"autoCompleteChipList\" #chipInput />\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Progress -->\r\n\t<mat-spinner diameter=\"18\" *ngIf=\"loading\"></mat-spinner>\r\n\t<!-- #endregion -->\r\n</mat-chip-list>\r\n\r\n<!-- #region Autocomplete -->\r\n<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"addChip($event, chipInput)\">\r\n\t<ng-template let-item let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n\t\t<mat-option [value]=\"item\">\r\n\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{ item }}</span>\r\n\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: item }\"></ng-template>\r\n\t\t</mat-option>\r\n\t</ng-template>\r\n</mat-autocomplete>\r\n<!-- #endregion -->", styles: [":host ::ng-deep .mat-chip-list-wrapper{min-height:24px}:host ::ng-deep .mat-chip{display:flex;flex-direction:row;width:100%;padding:0 5px;justify-content:center}:host ::ng-deep .mat-chip.mat-chip-disabled{color:#000000a3}:host ::ng-deep .mat-chip .vd-chip-content{flex-grow:1!important;font-weight:initial;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;flex-direction:column;justify-content:center}:host ::ng-deep .mat-chip .mat-icon-button{display:inline-flex;justify-content:center;align-items:center;width:2.5em;height:2.5em;margin-top:-10px}:host ::ng-deep .mat-chip .mat-icon-button .mat-icon{font-size:24px}:host ::ng-deep .mat-chip .mat-icon{cursor:pointer}:host ::ng-deep .mat-chip .vd-chip-launch{font-size:18px;position:absolute;right:4px;top:0;cursor:pointer}:host ::ng-deep .mat-chip .vd-chip-launch.removable{right:34px}mat-spinner{margin-top:-9px;margin-right:6px}\n"] }]
393
393
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.NgControl, decorators: [{
394
394
  type: Optional
395
395
  }, {
@@ -417,6 +417,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImpor
417
417
  type: Input
418
418
  }], path: [{
419
419
  type: Input
420
+ }], context: [{
421
+ type: Input
420
422
  }], key: [{
421
423
  type: Input
422
424
  }], searchField: [{
@@ -448,4 +450,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImpor
448
450
  }], default: [{
449
451
  type: Input
450
452
  }] } });
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvY2hpcHMvY29tcG9uZW50cy9jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9jaGlwcy9jb21wb25lbnRzL2NoaXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoTCxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUs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RSxJQUFJLEVBQUU7Z0JBNEI5QixLQUFLO3NCQURYLEtBQUs7Z0JBT0MsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxlQUFlO2dCQU90QiwwQkFBMEI7c0JBRGhDLFlBQVk7dUJBQUMsNkJBQTZCO2dCQVl2QyxRQUFRO3NCQURYLEtBQUs7Z0JBaUJGLE1BQU07c0JBRFQsS0FBSztnQkF5QkYsVUFBVTtzQkFEYixLQUFLO2dCQWlCRixJQUFJO3NCQURQLEtBQUs7Z0JBd0JDLEdBQUc7c0JBRFQsS0FBSztnQkFPQyxXQUFXO3NCQURqQixLQUFLO2dCQU9DLFlBQVk7c0JBRGxCLEtBQUs7Z0JBT0MsYUFBYTtzQkFEbkIsS0FBSztnQkFPQyxLQUFLO3NCQURYLEtBQUs7Z0JBT0MsU0FBUztzQkFEZixLQUFLO2dCQVFDLFFBQVE7c0JBRGQsS0FBSzt1QkFBQyxVQUFVO2dCQU9WLFVBQVU7c0JBRGhCLE1BQU07Z0JBT0EsUUFBUTtzQkFEZCxNQUFNO2dCQU9BLE9BQU87c0JBRGIsTUFBTTtnQkFPQSxRQUFRO3NCQURkLE1BQU07dUJBQUMsUUFBUTtnQkFPVCxhQUFhO3NCQURuQixLQUFLO2dCQVNDLFNBQVM7c0JBRGYsTUFBTTtnQkFZSCxPQUFPO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XHJcbmltcG9ydCB7IENka1BvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT3B0aW9uYWwsIE91dHB1dCwgU2VsZiwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwRGlyZWN0aXZlLCBOZ0NvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IEVycm9yU3RhdGVNYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHNraXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFN1ZmZpeEJ1dHRvbiB9IGZyb20gJy4uLy4uL2NvbW1vbi9jb21tb24ubW9kdWxlJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi9jb21tb24vZnVuY3Rpb25zL3V0aWxzJztcclxuaW1wb3J0IHsgQWJzdHJhY3RNYXRGb3JtRmllbGQgfSBmcm9tICcuLi8uLi9mb3Jtcy9oZWxwZXJzL2Fic3RyYWN0LW1hdC1mb3JtLWZpZWxkJztcclxuXHJcbi8qKlxyXG4gKiBWZENoaXBEaXJlY3RpdmUgY2xhc3NcclxuICovXHJcbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1t2ZC1jaGlwXW5nLXRlbXBsYXRlJyB9KVxyXG5leHBvcnQgY2xhc3MgVmRDaGlwRGlyZWN0aXZlIGV4dGVuZHMgQ2RrUG9ydGFsIHtcclxuXHRjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Piwgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xyXG5cdFx0c3VwZXIodGVtcGxhdGVSZWYsIHZpZXdDb250YWluZXJSZWYpO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFZkQXV0b2NvbXBsZXRlT3B0aW9uRGlyZWN0aXZlIGNsYXNzXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbdmQtYXV0b2NvbXBsZXRlLW9wdGlvbl1uZy10ZW1wbGF0ZScgfSlcclxuZXhwb3J0IGNsYXNzIFZkQXV0b2NvbXBsZXRlT3B0aW9uRGlyZWN0aXZlIGV4dGVuZHMgQ2RrUG9ydGFsIHtcclxuXHRjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Piwgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xyXG5cdFx0c3VwZXIodGVtcGxhdGVSZWYsIHZpZXdDb250YWluZXJSZWYpO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFZkQ2hpcHNDb21wb25lbnQgY2xhc3NcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAndmQtY2hpcHMnLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9jaGlwcy5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vY2hpcHMuY29tcG9uZW50LnNjc3MnXSxcclxuXHRwcm92aWRlcnM6IFtcclxuXHRcdHsgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IFZkQ2hpcHNDb21wb25lbnQgfVxyXG5cdF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFZkQ2hpcHNDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdE1hdEZvcm1GaWVsZDxhbnk+IHtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGh0dHAgc2VydmljZSBmcm9tIHRvIGdldCB0aGUgZGF0YVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50ID0gbnVsbDtcclxuXHJcblx0LyoqIFxyXG5cdCAqIFRoZSBzZWxlY3QgZWxlbWVudC5cclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKE1hdElucHV0LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG5cdHB1YmxpYyBjaGlwSW5wdXQ6IE1hdElucHV0O1xyXG5cclxuXHQvKipcclxuXHQgKiBSZXByZXNlbnRzIGEgdmFsdWUgdGhhdCBjaGFuZ2VzIG92ZXIgdGltZS4gXHJcblx0ICogT2JzZXJ2ZXJzIGNhbiBzdWJzY3JpYmUgdG8gdGhlIHN1YmplY3QgdG8gcmVjZWl2ZSBwZGYgZmlsZSBjaGFuZ2VzXHJcblx0ICovXHJcblx0cHJpdmF0ZSBfZW5kcG9pbnRDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgdXAgcmVhY3RpdmUgZm9ybWNvbnRyb2xcclxuXHQgKi9cclxuXHRwdWJsaWMgYXV0b0NvbXBsZXRlQ2hpcExpc3Q6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBsaXN0IG9mIGZpbHRlcmVkIG9wdGlvbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgZmlsdGVyZWRPcHRpb25zOiBhbnlbXTtcclxuXHJcblx0LyoqXHJcblx0ICogc2VhcmNoT3BlcmF0b3JzOiBzdHJpbmdbXVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzZWFyY2hPcGVyYXRvcnM6IHN0cmluZ1tdID0gW1wiIT1cIiwgXCIhXCIsIFwiPD5cIiwgXCI+PVwiLCBcIj5cIiwgXCI8PVwiLCBcIjxcIiwgXCJeXCIsIFwiJFwiLCBcIn5cIl07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBsaXN0IG9mIGNoaXBzXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgY2hpcHMgPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogVmRDaGlwIHRlbXBsYXRlXHJcblx0ICovXHJcblx0QENvbnRlbnRDaGlsZChWZENoaXBEaXJlY3RpdmUpXHJcblx0cHVibGljIGNoaXBUZW1wbGF0ZTogVmRDaGlwRGlyZWN0aXZlO1xyXG5cclxuXHQvKipcclxuXHQgKiBBdXRvY29tcGxldGVPcHRpb24gdGVtcGxhdGVcclxuXHQgKi9cclxuXHRAQ29udGVudENoaWxkKFZkQXV0b2NvbXBsZXRlT3B0aW9uRGlyZWN0aXZlKVxyXG5cdHB1YmxpYyBhdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZTogVmRBdXRvY29tcGxldGVPcHRpb25EaXJlY3RpdmU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIF9lbmRwb2ludDogc3RyaW5nXHJcblx0ICovXHJcblx0cHVibGljIF9lbmRwb2ludDogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIG9yIHNldHMgZW5kcG9pbnRcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdGdldCBlbmRwb2ludCgpOiBhbnkgeyByZXR1cm4gdGhpcy5fZW5kcG9pbnQ7IH1cclxuXHRzZXQgZW5kcG9pbnQoZW5kcG9pbnQ6IGFueSkge1xyXG5cdFx0dGhpcy5fZW5kcG9pbnQgPSBlbmRwb2ludDtcclxuXHRcdHRoaXMuY2xlYXIoKTtcclxuXHRcdHRoaXMuX2VuZHBvaW50Q2hhbmdlLm5leHQoW3RoaXMuZW5kcG9pbnQsIHRoaXMucGF0aCwgdGhpcy5wYXJhbXMsIHRoaXMucHJvamVjdGlvbl0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogX3BhcmFtczogYW55XHJcblx0ICovXHJcblx0cHVibGljIF9wYXJhbXM6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogcGFyYW1zOiBhbnlcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdGdldCBwYXJhbXMoKSB7IHJldHVybiB0aGlzLl9wYXJhbXM7IH1cclxuXHRzZXQgcGFyYW1zKHBhcmFtczogYW55KSB7XHJcblx0XHQvKiBSZW1vdmUgZW1wdHkgcGFyYW1zICovXHJcblx0XHRPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG5cdFx0XHRpZiAoKHBhcmFtc1trZXldID09IG51bGwgfHwgcGFyYW1zW2tleV0gPT0gJycgfHwgcGFyYW1zW2tleV0gPT0gJ3VuZGVmaW5lZCcpKSB7XHJcblx0XHRcdFx0ZGVsZXRlIHBhcmFtc1trZXldO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy5fcGFyYW1zKSAhPT0gSlNPTi5zdHJpbmdpZnkocGFyYW1zKSkge1xyXG5cdFx0XHR0aGlzLl9wYXJhbXMgPSBwYXJhbXM7XHJcblx0XHRcdHRoaXMuX2VuZHBvaW50Q2hhbmdlLm5leHQoW3RoaXMuZW5kcG9pbnQsIHRoaXMucGF0aCwgdGhpcy5fcGFyYW1zLCB0aGlzLnByb2plY3Rpb25dKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIF9wcm9qZWN0aW9uOiBhbnlcclxuXHQgKi9cclxuXHRwdWJsaWMgX3Byb2plY3Rpb246IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogcHJvamVjdGlvbjogYW55XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRnZXQgcHJvamVjdGlvbigpIHsgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb247IH1cclxuXHRzZXQgcHJvamVjdGlvbihwcm9qZWN0aW9uOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuX3Byb2plY3Rpb24gPSBwcm9qZWN0aW9uO1xyXG5cdFx0dGhpcy5jbGVhcigpO1xyXG5cdFx0dGhpcy5fZW5kcG9pbnRDaGFuZ2UubmV4dChbdGhpcy5lbmRwb2ludCwgdGhpcy5wYXRoLCB0aGlzLnBhcmFtcywgdGhpcy5wcm9qZWN0aW9uXSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBfcGF0aDogYW55XHJcblx0ICovXHJcblx0cHVibGljIF9wYXRoOiBhbnkgPSAnJztcclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyBvciBzZXRzIHBhdGhcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdGdldCBwYXRoKCkgeyByZXR1cm4gdGhpcy5fcGF0aDsgfVxyXG5cdHNldCBwYXRoKHBhdGgpIHtcclxuXHRcdHRoaXMuX3BhdGggPSBwYXRoO1xyXG5cdFx0dGhpcy5jbGVhcigpO1xyXG5cdFx0dGhpcy5fZW5kcG9pbnRDaGFuZ2UubmV4dChbdGhpcy5lbmRwb2ludCwgdGhpcy5wYXRoLCB0aGlzLnBhcmFtcywgdGhpcy5wcm9qZWN0aW9uXSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXRzIHRoZSBkaXNhYmxlZC5cclxuXHQgKiBAcGFyYW0gZGlzYWJsZWRcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0IGRpc2FibGVkKCkge1xyXG5cdFx0aWYgKHRoaXMuX3JlYWRvbmx5KSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBzdXBlci5kaXNhYmxlZDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGtleTogc3RyaW5nXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMga2V5OiBzdHJpbmcgPSAnaWQnO1xyXG5cclxuXHQvKipcclxuXHQgKiBzZWFyY2hGaWVsZDogc3RyaW5nXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgc2VhcmNoRmllbGQ6IHN0cmluZyA9ICdzZWFyY2gnO1xyXG5cclxuXHQvKipcclxuXHQgKiBzZWFyY2hGaWVsZHM6IHN0cmluZ1xyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIHNlYXJjaEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogdGVybU1pbmxlbmd0aDogbnVtYmVyXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgdGVybU1pbmxlbmd0aDogbnVtYmVyID0gMjtcclxuXHJcblx0LyoqXHJcblx0ICogbGltaXQ6IG51bWJlclxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGxpbWl0OiBudW1iZXIgPSAzMDtcclxuXHJcblx0LyoqXHJcblx0ICogcmVtb3ZhYmxlOiBib29sZWFuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgcmVtb3ZhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogZGVib3VuY2U/OiBudW1iZXJcclxuXHQgKiBEZWJvdW5jZSB0aW1lb3V0IGJldHdlZW4ga2V5cHJlc3Nlcy4gRGVmYXVsdHMgdG8gNDAwLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgnZGVib3VuY2UnKVxyXG5cdHB1YmxpYyBkZWJvdW5jZTogbnVtYmVyID0gNDAwO1xyXG5cclxuXHQvKipcclxuXHQgKiBpbml0U2VsZWN0PzogZnVuY3Rpb25cclxuXHQgKi9cclxuXHRAT3V0cHV0KClcclxuXHRwdWJsaWMgaW5pdFNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcblx0LyoqXHJcblx0ICogc2VsZWN0ZWQ/OiBmdW5jdGlvblxyXG5cdCAqL1xyXG5cdEBPdXRwdXQoKVxyXG5cdHB1YmxpYyBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcblx0LyoqXHJcblx0ICogY2xlYXJlZD86IGZ1bmN0aW9uXHJcblx0ICovXHJcblx0QE91dHB1dCgpXHJcblx0cHVibGljIGNsZWFyZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIGxhdW5jaD86IGZ1bmN0aW9uXHJcblx0ICovXHJcblx0QE91dHB1dCgnbGF1bmNoJylcclxuXHRwdWJsaWMgb25MYXVuY2g6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHN1ZmZpeEJ1dHRvbnM6IFN1ZmZpeEJ1dHRvbjxhbnk+W11cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBzdWZmaXhCdXR0b25zOiBTdWZmaXhCdXR0b25bXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBjaGlwRm9jdXM/OiBmdW5jdGlvblxyXG5cdCAqIE1ldGhvZCB0byBiZSBleGVjdXRlZCB3aGVuIGEgY2hpcCBpcyBmb2N1c2VkLlxyXG5cdCAqIFNlbmRzIGNoaXAgdmFsdWUgYXMgZXZlbnQuXHJcblx0ICovXHJcblx0QE91dHB1dCgpXHJcblx0cHVibGljIGNoaXBGb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcblx0LyoqIFxyXG5cdCAqIFdoZXRoZXIgdGhlIHNlbGVjdCBoYXMgYSB2YWx1ZS5cclxuXHQgKi9cclxuXHRnZXQgZW1wdHkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNoaXBzLmxlbmd0aCA8PSAwOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERlZmF1bHQgY2hpcFxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0Z2V0IGRlZmF1bHQoKSB7IHJldHVybiB0aGlzLmNoaXBzWzBdOyB9XHJcblx0c2V0IGRlZmF1bHQoX2NoaXApIHtcclxuXHRcdGlmIChfY2hpcCkge1xyXG5cdFx0XHQvKiBBZGQgY2hpcCBmb3Igc2VsZWN0ZWQgb3B0aW9uICovXHJcblx0XHRcdHRoaXMuY2hpcHMgPSBbX2NoaXBdO1xyXG5cclxuXHRcdFx0LyogXHRTZXQgdGhlIHZhbHVlIChuZ01vZGVsKSAqL1xyXG5cdFx0XHR0aGlzLnZhbHVlID0gX2NoaXBbdGhpcy5rZXldO1xyXG5cclxuXHRcdFx0LyogRGlhYmxlZCB0aGUgaW5wdXQsIGFsbG93IG9ubHkgb25lIGNoaXAgKi9cclxuXHRcdFx0dGhpcy5hdXRvQ29tcGxldGVDaGlwTGlzdC5kaXNhYmxlKCk7XHJcblxyXG5cdFx0XHQvKiBSZXNldCB0aGUgYXV0b2NvbXBsZXRlIGlucHV0IHRleHQgdmFsdWUgKi9cclxuXHRcdFx0dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogV2hldGhlciB0aGUgYE1hdEZvcm1GaWVsZGAgbGFiZWwgc2hvdWxkIHRyeSB0byBmbG9hdC5cclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0IHNob3VsZExhYmVsRmxvYXQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gc3VwZXIuc2hvdWxkTGFiZWxGbG9hdCB8fCAhdGhpcy5jaGlwSW5wdXQ/LmVtcHR5O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogbG9hZGluZzogYm9vbGVhblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2FkaW5nOiBib29sZWFuO1xyXG5cclxuXHQvKipcclxuXHQgKiBlbXB0eVJlc3VsdDogYm9vbGVhblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBlbXB0eVJlc3VsdDogYm9vbGVhbjtcclxuXHJcblx0LyoqXHJcblx0ICogQ29uc3RydWN0b3JcclxuXHQgKiBAcGFyYW0gbmdDb250cm9sIFxyXG5cdCAqIEBwYXJhbSBwYXJlbnRGb3JtIFxyXG5cdCAqIEBwYXJhbSBwYXJlbnRGb3JtR3JvdXAgXHJcblx0ICogQHBhcmFtIGRlZmF1bHRFcnJvclN0YXRlTWF0Y2hlciBcclxuXHQgKiBAcGFyYW0gZm9jdXNNb25pdG9yIFxyXG5cdCAqIEBwYXJhbSBlbGVtZW50UmVmIFxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsIEBPcHRpb25hbCgpIEBTZWxmKCkgbmdDb250cm9sOiBOZ0NvbnRyb2wsIEBPcHRpb25hbCgpIHBhcmVudEZvcm06IE5nRm9ybSwgQE9wdGlvbmFsKCkgcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmUsIGRlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIsIGZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLCBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XHJcblx0XHRzdXBlcihcImFwcC12ZC1jaGlwc1wiLCBuZ0NvbnRyb2wsIHBhcmVudEZvcm0sIHBhcmVudEZvcm1Hcm91cCwgZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyLCBmb2N1c01vbml0b3IsIGVsZW1lbnRSZWYpO1xyXG5cdFx0dGhpcy5odHRwID0gaW5qZWN0b3IuZ2V0KEh0dHBDbGllbnQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcclxuXHQgKiBAcGFyYW0gdmFsdWUgXHJcblx0ICovXHJcblx0d3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XHJcblx0XHQvKiBTZXQgdGhlIHZhbHVlICovXHJcblx0XHR0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG5cclxuXHRcdC8qIENsZWFyIHRoZSBjaGlwcyBsaXN0ICovXHJcblx0XHR0aGlzLmNoaXBzID0gW107XHJcblxyXG5cdFx0aWYgKHZhbHVlICYmIHRoaXMuY2hpcHM/Lmxlbmd0aCA8PSAwKSB7XHJcblx0XHRcdHRoaXMubG9hZGluZyA9IHRydWU7XHJcblx0XHRcdGxldCBfcGFyYW1zOiBhbnkgPSB7fTtcclxuXHJcblx0XHRcdC8qIEFkZCBpbmNsdWRlcywgaWYgYW55ICovXHJcblx0XHRcdGlmICh0aGlzLl9wYXJhbXM/LmluY2x1ZGVzKSB7XHJcblx0XHRcdFx0X3BhcmFtcy5pbmNsdWRlcyA9IHRoaXMuX3BhcmFtcy5pbmNsdWRlcztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogQWRkIHByb2plY3Rpb24sIGlmIGFueSAqL1xyXG5cdFx0XHRpZiAodGhpcy5wcm9qZWN0aW9uKSB7XHJcblx0XHRcdFx0X3BhcmFtcy5wcm9qZWN0aW9uID0gdGhpcy5wcm9qZWN0aW9uO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBHZXQgYmFzZSB1cmwgKi9cclxuXHRcdFx0dmFyIHVybFBhcnRzID0gdGhpcy5lbmRwb2ludC5zcGxpdCgnPycpO1xyXG5cdFx0XHR0aGlzLmh0dHAuZ2V0KGAke3VybFBhcnRzWzBdfS8ke3ZhbHVlfSR7dXJsUGFydHMubGVuZ3RoID4gMSA/IGA/JHt1cmxQYXJ0c1sxXX1gIDogJyd9YCwgeyBwYXJhbXM6IFV0aWxzLmNsZWFuT2JqZWN0KF9wYXJhbXMpIH0pLnN1YnNjcmliZSh4ID0+IHtcclxuXHRcdFx0XHR0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0LyogQWRkIGNoaXAgZm9yIHNlbGVjdGVkIG9wdGlvbiAqL1xyXG5cdFx0XHRcdHRoaXMuY2hpcHMucHVzaCh4KTtcclxuXHJcblx0XHRcdFx0LyogRW1pdCBzZWxlY3RlZCBldmVudCAqL1xyXG5cdFx0XHRcdHRoaXMuaW5pdFNlbGVjdC5lbWl0KHgpO1xyXG5cclxuXHRcdFx0XHQvKiBEaWFibGVkIHRoZSBpbnB1dCwgYWxsb3cgb25seSBvbmUgY2hpcCAqL1xyXG5cdFx0XHRcdHRoaXMuYXV0b0NvbXBsZXRlQ2hpcExpc3QuZGlzYWJsZSgpO1xyXG5cdFx0XHR9LCBfID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuY2xlYXIoZmFsc2UpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyBjb250cm9sIGZvY3VzXHJcblx0ICovXHJcblx0cHVibGljIGZvY3VzKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5jaGlwSW5wdXQ/LmZvY3VzKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCBhZnRlciBkYXRhLWJvdW5kIHByb3BlcnRpZXMgb2YgYSBcclxuXHQgKiBkaXJlY3RpdmUgYXJlIGluaXRpYWxpemVkLlxyXG5cdCAqL1xyXG5cdG5nT25Jbml0KCkge1xyXG5cdFx0dGhpcy5hdXRvQ29tcGxldGVDaGlwTGlzdC52YWx1ZUNoYW5nZXNcclxuXHRcdFx0LnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2UpKVxyXG5cdFx0XHQuc3Vic2NyaWJlKHYgPT4gdGhpcy5maWx0ZXJPcHRpb25zKHYpKTtcclxuXHJcblx0XHR0aGlzLm5nQ29udHJvbD8udmFsdWVDaGFuZ2VzPy5waXBlKHNraXAoMSkpLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRpZiAoIXZhbHVlKSB7XHJcblx0XHRcdFx0dGhpcy5jaGlwcyA9IFtdO1xyXG5cdFx0XHRcdHRoaXMuX3ZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHR0aGlzLmF1dG9Db21wbGV0ZUNoaXBMaXN0LnNldFZhbHVlKFwiXCIpO1xyXG5cdFx0XHRcdHRoaXMuYXV0b0NvbXBsZXRlQ2hpcExpc3QuZW5hYmxlKCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkcyBhIGNoaXBcclxuXHQgKiBAcGFyYW0gZXZlbnQgXHJcblx0ICogQHBhcmFtIGlucHV0IFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhZGRDaGlwKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50LCBpbnB1dDogYW55KTogdm9pZCB7XHJcblx0XHQvKiBEZWZpbmUgc2VsZWN0aW9uIGNvbnN0YW50ICovXHJcblx0XHRjb25zdCBzZWxlY3Rpb24gPSBldmVudC5vcHRpb24udmFsdWU7XHJcblxyXG5cdFx0LyogQWRkIGNoaXAgZm9yIHNlbGVjdGVkIG9wdGlvbiAqL1xyXG5cdFx0dGhpcy5jaGlwcy5wdXNoKHNlbGVjdGlvbik7XHJcblxyXG5cdFx0LyogRW1pdCBzZWxlY3RlZCBldmVudCAqL1xyXG5cdFx0dGhpcy5zZWxlY3RlZC5lbWl0KHNlbGVjdGlvbik7XHJcblxyXG5cdFx0LyogXHRTZXQgdGhlIHZhbHVlIChuZ01vZGVsKSAqL1xyXG5cdFx0dGhpcy52YWx1ZSA9IHNlbGVjdGlvblt0aGlzLmtleV07XHJcblxyXG5cdFx0LyogRGlhYmxlZCB0aGUgaW5wdXQsIGFsbG93IG9ubHkgb25lIGNoaXAgKi9cclxuXHRcdHRoaXMuYXV0b0NvbXBsZXRlQ2hpcExpc3QuZGlzYWJsZSgpO1xyXG5cclxuXHRcdC8qIFJlc2V0IHRoZSBhdXRvY29tcGxldGUgaW5wdXQgdGV4dCB2YWx1ZSAqL1xyXG5cdFx0aWYgKGlucHV0KSB7XHJcblx0XHRcdGlucHV0LnZhbHVlID0gJyc7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmVzIGFsbCBjaGlwc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBjbGVhcih0cmlnZ2VyU3RhdGVDaGFuZ2VzOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG5cdFx0LyogUmVtb3ZlIGtleSBmcm9tIGNoaXBzIGFycmF5ICovXHJcblx0XHR0aGlzLnZhbHVlID0gbnVsbDtcclxuXHRcdHRoaXMuY2hpcHMgPSBbXTtcclxuXHJcblx0XHQvKiBNYXJrIHRoZSBjb250cm9sIGFzIHRvdWNoZWQgKi9cclxuXHRcdGlmICh0aGlzLm5nQ29udHJvbC5jb250cm9sKSB7XHJcblx0XHRcdHRoaXMubmdDb250cm9sLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFJlc2V0IHRoZSB2YWx1ZSAobmdNb2RlbCkgKi9cclxuXHRcdHRoaXMuYXV0b0NvbXBsZXRlQ2hpcExpc3Quc2V0VmFsdWUoXCJcIik7XHJcblxyXG5cdFx0aWYgKHRyaWdnZXJTdGF0ZUNoYW5nZXMpIHtcclxuXHRcdFx0dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEVuYWJsZSB0aGUgaW5wdXQgKi9cclxuXHRcdHRoaXMuYXV0b0NvbXBsZXRlQ2hpcExpc3QuZW5hYmxlKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBGaWx0ZXJzIG9wdGlvbnNcclxuXHQgKiBAcGFyYW0gdGV4dCBcclxuXHQgKi9cclxuXHRwcml2YXRlIGZpbHRlck9wdGlvbnModGV4dDogc3RyaW5nKSB7XHJcblx0XHR0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFtdO1xyXG5cdFx0aWYgKHRoaXMuZW5kcG9pbnQgJiYgdHlwZW9mIHRleHQgPT09ICdzdHJpbmcnICYmIHRleHQubGVuZ3RoID49IHRoaXMudGVybU1pbmxlbmd0aCkge1xyXG5cdFx0XHQvKiBJbml0IHBhcmFtcyBpZiBudWxsICovXHJcblx0XHRcdHRoaXMuX3BhcmFtcyA9IHRoaXMuX3BhcmFtcyB8fCB7fTtcclxuXHJcblx0XHRcdC8qIEFkZCBzZWFyY2ggd29yZCB0byB0aGUgcGFyYW1zICovXHJcblx0XHRcdGlmICh0aGlzLnNlYXJjaEZpZWxkICYmIHRoaXMuc2VhcmNoRmllbGRzLmxlbmd0aCA8PSAwKSB7XHJcblx0XHRcdFx0dmFyIHJlc3VsdCA9IG5ldyBSZWdFeHAoYChcXFxcJHt0aGlzLnNlYXJjaE9wZXJhdG9ycy5qb2luKCd8XFxcXCcpfSk/KC4qKWApLmV4ZWModGhpcy5zZWFyY2hGaWVsZCk7XHJcblx0XHRcdFx0dGhpcy5fcGFyYW1zW3Jlc3VsdFsyXV0gPSBgJHtyZXN1bHRbMV0gPyByZXN1bHRbMV0gOiAnJ30ke3RleHR9YDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogQWRkIHNlYXJjaCB3b3JkIHRvIHRoZSBwYXJhbXMgKi9cclxuXHRcdFx0dGhpcy5zZWFyY2hGaWVsZHM/Lm1hcCh4ID0+IHgudHJpbSgpKT8uZm9yRWFjaCh4ID0+IHtcclxuXHRcdFx0XHR2YXIgcmVzdWx0ID0gbmV3IFJlZ0V4cChgKFxcXFwke3RoaXMuc2VhcmNoT3BlcmF0b3JzLmpvaW4oJ3xcXFxcJyl9KT8oLiopYCkuZXhlYyh4KTtcclxuXHRcdFx0XHR0aGlzLl9wYXJhbXNbcmVzdWx0WzJdXSA9IGAke3Jlc3VsdFsxXSA/IHJlc3VsdFsxXSA6ICcnfSR7dGV4dH1gO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8qIEFkZCBsaW1pdCB0byB0aGUgcGFyYW1zICovXHJcblx0XHRcdHRoaXMuX3BhcmFtcy5saW1pdCA9IHRoaXMubGltaXQ7XHJcblxyXG5cdFx0XHQvKiBBZGQgcHJvamVjdGlvbiwgaWYgYW55ICovXHJcblx0XHRcdGlmICh0aGlzLnByb2plY3Rpb24pIHtcclxuXHRcdFx0XHR0aGlzLl9wYXJhbXMucHJvamVjdGlvbiA9IHRoaXMucHJvamVjdGlvbjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogR2V0IHJlc3VsdHMgZnJvbSBzZXJ2ZXIgKi9cclxuXHRcdFx0dGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5odHRwLmdldChgJHt0aGlzLmVuZHBvaW50fSR7dGhpcy5wYXRoIHx8ICcnfWAsIHsgcGFyYW1zOiBVdGlscy5jbGVhbk9iamVjdCh0aGlzLl9wYXJhbXMpIH0pXHJcblx0XHRcdFx0LnN1YnNjcmliZSh7XHJcblx0XHRcdFx0XHRuZXh0OiAoeDogYW55W10pID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdHRoaXMuZmlsdGVyZWRPcHRpb25zID0geDtcclxuXHRcdFx0XHRcdFx0dGhpcy5lbXB0eVJlc3VsdCA9ICF4IHx8ICF4Lmxlbmd0aDtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRlcnJvcjogKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2VcclxuXHRcdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEhhbmRsZXMgcmVtb3ZlZCBldmVudFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBoYW5kbGVSZW1vdmVkRXZlbnQoKTogdm9pZCB7XHJcblx0XHR0aGlzLmNsZWFyZWQ/LmVtaXQodGhpcy52YWx1ZSk7XHJcblx0XHRpZiAodGhpcy5yZW1vdmFibGUpIHtcclxuXHRcdFx0dGhpcy5jbGVhcigpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSGFuZGxlcyBsYXVuY2ggYnV0dG9uIGNsaWNrXHJcblx0ICovXHJcblx0cHVibGljIGhhbmRsZUxhdW5jaENsaWNrZWQoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5jaGlwcz8ubGVuZ3RoID4gMCkge1xyXG5cdFx0XHR0aGlzLm9uTGF1bmNoLmVtaXQodGhpcy5jaGlwc1swXSk7XHJcblx0XHR9XHJcblx0fVxyXG59IiwiPG1hdC1jaGlwLWxpc3QgI2NoaXBMaXN0IFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtkaXNhYmxlZF09XCJyZWFkb25seVwiPlxyXG5cdDwhLS0gI3JlZ2lvbiBDaGlwcyAtLT5cclxuXHQ8bmctdGVtcGxhdGUgbGV0LWNoaXAgbGV0LWZpcnN0PVwiZmlyc3RcIiBsZXQtaW5kZXg9XCJpbmRleFwiIG5nRm9yIFtuZ0Zvck9mXT1cImNoaXBzXCI+XHJcblx0XHQ8IS0tIDxtYXQtYmFzaWMtY2hpcCBbc2VsZWN0YWJsZV09XCIhcmVhZG9ubHlcIiBbcmVtb3ZhYmxlXT1cIiFyZWFkb25seVwiIChyZW1vdmVkKT1cImhhbmRsZVJlbW92ZWRFdmVudCgpXCIgZGlzYWJsZVJpcHBsZT5cclxuXHRcdFx0PHNwYW4gY2xhc3M9XCJ2ZC1jaGlwLWNvbnRlbnRcIj5cclxuXHRcdFx0XHQ8c3BhbiAqbmdJZj1cIiFjaGlwVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCI+XHJcblx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cIiFhdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZT8udGVtcGxhdGVSZWZcIj57eyBjaGlwIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgb3B0aW9uOiBjaGlwIH1cIj48L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJjaGlwVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2hpcFRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGNoaXA6IGNoaXAgfVwiPjwvbmctdGVtcGxhdGU+XHJcblx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0PG1hdC1pY29uICpuZ0Zvcj1cImxldCBidXR0b24gb2Ygc3VmZml4QnV0dG9uc1wiIGNsYXNzPVwidmQtY2hpcC1sYXVuY2hcIiBbbmdDbGFzc109XCJ7J3JlbW92YWJsZSc6ICFyZWFkb25seX1cIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBidXR0b24uZXZlbnQgJiYgYnV0dG9uLmV2ZW50KGNoaXBzWzBdKVwiPnt7YnV0dG9uLmljb259fTwvbWF0LWljb24+XHJcblx0XHRcdDxtYXQtaWNvbiAqbmdJZj1cIm9uTGF1bmNoPy5vYnNlcnZlcnM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cInZkLWNoaXAtbGF1bmNoXCIgW25nQ2xhc3NdPVwieydyZW1vdmFibGUnOiAhcmVhZG9ubHl9XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgaGFuZGxlTGF1bmNoQ2xpY2tlZCgpXCI+bGF1bmNoPC9tYXQtaWNvbj5cclxuXHRcdFx0PG1hdC1pY29uIG1hdENoaXBSZW1vdmUgKm5nSWY9XCIhcmVhZG9ubHlcIj5iYWNrc3BhY2U8L21hdC1pY29uPlxyXG5cdFx0PC9tYXQtYmFzaWMtY2hpcD4gLS0+XHJcblxyXG5cdFx0PG1hdC1iYXNpYy1jaGlwIFtzZWxlY3RhYmxlXT1cIiFyZWFkb25seVwiIFtyZW1vdmFibGVdPVwiIXJlYWRvbmx5XCIgKHJlbW92ZWQpPVwiaGFuZGxlUmVtb3ZlZEV2ZW50KClcIiBkaXNhYmxlUmlwcGxlPlxyXG5cdFx0XHQ8c3BhbiBjbGFzcz1cInZkLWNoaXAtY29udGVudFwiPlxyXG5cdFx0XHRcdDxzcGFuICpuZ0lmPVwiIWNoaXBUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIj5cclxuXHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwiIWF1dG9jb21wbGV0ZU9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiPnt7IGNoaXAgfX08L3NwYW4+XHJcblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJhdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZT8udGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJhdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZT8udGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBvcHRpb246IGNoaXAgfVwiPjwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImNoaXBUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlwVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY2hpcDogY2hpcCB9XCI+PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0PC9zcGFuPlxyXG5cdFx0XHQ8bmctdGVtcGxhdGUgbGV0LWJ1dHRvbiBsZXQtZmlyc3Q9XCJmaXJzdFwiIG5nRm9yIFtuZ0Zvck9mXT1cInN1ZmZpeEJ1dHRvbnNcIj5cclxuXHRcdFx0XHQ8YSBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCIhYnV0dG9uLmhpZGUgfHwgIWJ1dHRvbi5oaWRlKGNoaXBzWzBdKVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGJ1dHRvbi5ldmVudCAmJiBidXR0b24uZXZlbnQoY2hpcHNbMF0pXCI+XHJcblx0XHRcdFx0XHQ8bWF0LWljb24+e3tidXR0b24uaWNvbn19PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2E+XHJcblx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdDxhIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cIm9uTGF1bmNoPy5vYnNlcnZlcnM/Lmxlbmd0aCA+IDBcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBoYW5kbGVMYXVuY2hDbGlja2VkKClcIj5cclxuXHRcdFx0XHQ8bWF0LWljb24+bGF1bmNoPC9tYXQtaWNvbj5cclxuXHRcdFx0PC9hPlxyXG5cdFx0XHQ8YSBtYXQtaWNvbi1idXR0b24+XHJcblx0XHRcdFx0PG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2xvc2U8L21hdC1pY29uPlxyXG5cdFx0XHQ8L2E+XHJcblx0XHQ8L21hdC1iYXNpYy1jaGlwPlxyXG5cdDwvbmctdGVtcGxhdGU+XHJcblx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuXHQ8IS0tICNyZWdpb24gU2VhcmNoIGJveCAtLT5cclxuXHQ8aW5wdXQgbWF0SW5wdXQgW2hpZGRlbl09XCJ2YWx1ZSAmJiAhZW1wdHlcIiBwbGFjZWhvbGRlcj1cInt7cGxhY2Vob2xkZXJ9fVwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIiBbZm9ybUNvbnRyb2xdPVwiYXV0b0NvbXBsZXRlQ2hpcExpc3RcIiAjY2hpcElucHV0IC8+XHJcblx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuXHQ8IS0tICNyZWdpb24gUHJvZ3Jlc3MgLS0+XHJcblx0PG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiMThcIiAqbmdJZj1cImxvYWRpbmdcIj48L21hdC1zcGlubmVyPlxyXG5cdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuPC9tYXQtY2hpcC1saXN0PlxyXG5cclxuPCEtLSAjcmVnaW9uIEF1dG9jb21wbGV0ZSAtLT5cclxuPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwiYWRkQ2hpcCgkZXZlbnQsIGNoaXBJbnB1dClcIj5cclxuXHQ8bmctdGVtcGxhdGUgbGV0LWl0ZW0gbGV0LWZpcnN0PVwiZmlyc3RcIiBuZ0ZvciBbbmdGb3JPZl09XCJmaWx0ZXJlZE9wdGlvbnNcIj5cclxuXHRcdDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtXCI+XHJcblx0XHRcdDxzcGFuICpuZ0lmPVwiIWF1dG9jb21wbGV0ZU9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiPnt7IGl0ZW0gfX08L3NwYW4+XHJcblx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImF1dG9jb21wbGV0ZU9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImF1dG9jb21wbGV0ZU9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbjogaXRlbSB9XCI+PC9uZy10ZW1wbGF0ZT5cclxuXHRcdDwvbWF0LW9wdGlvbj5cclxuXHQ8L25nLXRlbXBsYXRlPlxyXG48L21hdC1hdXRvY29tcGxldGU+XHJcbjwhLS0gI2VuZHJlZ2lvbiAtLT4iXX0=
453
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvY2hpcHMvY29tcG9uZW50cy9jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9jaGlwcy9jb21wb25lbnRzL2NoaXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoTCxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUs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RSxJQUFJLEVBQUU7Z0JBNEI5QixLQUFLO3NCQURYLEtBQUs7Z0JBT0MsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxlQUFlO2dCQU90QiwwQkFBMEI7c0JBRGhDLFlBQVk7dUJBQUMsNkJBQTZCO2dCQVl2QyxRQUFRO3NCQURYLEtBQUs7Z0JBaUJGLE1BQU07c0JBRFQsS0FBSztnQkF5QkYsVUFBVTtzQkFEYixLQUFLO2dCQWlCRixJQUFJO3NCQURQLEtBQUs7Z0JBeUJDLE9BQU87c0JBRGIsS0FBSztnQkFPQyxHQUFHO3NCQURULEtBQUs7Z0JBT0MsV0FBVztzQkFEakIsS0FBSztnQkFPQyxZQUFZO3NCQURsQixLQUFLO2dCQU9DLGFBQWE7c0JBRG5CLEtBQUs7Z0JBT0MsS0FBSztzQkFEWCxLQUFLO2dCQU9DLFNBQVM7c0JBRGYsS0FBSztnQkFRQyxRQUFRO3NCQURkLEtBQUs7dUJBQUMsVUFBVTtnQkFPVixVQUFVO3NCQURoQixNQUFNO2dCQU9BLFFBQVE7c0JBRGQsTUFBTTtnQkFPQSxPQUFPO3NCQURiLE1BQU07Z0JBT0EsUUFBUTtzQkFEZCxNQUFNO3VCQUFDLFFBQVE7Z0JBT1QsYUFBYTtzQkFEbkIsS0FBSztnQkFTQyxTQUFTO3NCQURmLE1BQU07Z0JBWUgsT0FBTztzQkFEVixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xyXG5pbXBvcnQgeyBDZGtQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIFNlbGYsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTmdDb250cm9sLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgeyBFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTdWZmaXhCdXR0b24gfSBmcm9tICcuLi8uLi9jb21tb24vY29tbW9uLm1vZHVsZSc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Z1bmN0aW9ucy91dGlscyc7XHJcbmltcG9ydCB7IEFic3RyYWN0TWF0Rm9ybUZpZWxkIH0gZnJvbSAnLi4vLi4vZm9ybXMvaGVscGVycy9hYnN0cmFjdC1tYXQtZm9ybS1maWVsZCc7XHJcblxyXG4vKipcclxuICogVmRDaGlwRGlyZWN0aXZlIGNsYXNzXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbdmQtY2hpcF1uZy10ZW1wbGF0ZScgfSlcclxuZXhwb3J0IGNsYXNzIFZkQ2hpcERpcmVjdGl2ZSBleHRlbmRzIENka1BvcnRhbCB7XHJcblx0Y29uc3RydWN0b3IodGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcclxuXHRcdHN1cGVyKHRlbXBsYXRlUmVmLCB2aWV3Q29udGFpbmVyUmVmKTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWZEF1dG9jb21wbGV0ZU9wdGlvbkRpcmVjdGl2ZSBjbGFzc1xyXG4gKi9cclxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW3ZkLWF1dG9jb21wbGV0ZS1vcHRpb25dbmctdGVtcGxhdGUnIH0pXHJcbmV4cG9ydCBjbGFzcyBWZEF1dG9jb21wbGV0ZU9wdGlvbkRpcmVjdGl2ZSBleHRlbmRzIENka1BvcnRhbCB7XHJcblx0Y29uc3RydWN0b3IodGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcclxuXHRcdHN1cGVyKHRlbXBsYXRlUmVmLCB2aWV3Q29udGFpbmVyUmVmKTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWZENoaXBzQ29tcG9uZW50IGNsYXNzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ3ZkLWNoaXBzJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vY2hpcHMuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL2NoaXBzLmNvbXBvbmVudC5zY3NzJ10sXHJcblx0cHJvdmlkZXJzOiBbXHJcblx0XHR7IHByb3ZpZGU6IE1hdEZvcm1GaWVsZENvbnRyb2wsIHVzZUV4aXN0aW5nOiBWZENoaXBzQ29tcG9uZW50IH1cclxuXHRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWZENoaXBzQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RNYXRGb3JtRmllbGQ8YW55PiB7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBodHRwIHNlcnZpY2UgZnJvbSB0byBnZXQgdGhlIGRhdGFcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCA9IG51bGw7XHJcblxyXG5cdC8qKiBcclxuXHQgKiBUaGUgc2VsZWN0IGVsZW1lbnQuXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZChNYXRJbnB1dCwgeyBzdGF0aWM6IHRydWUgfSlcclxuXHRwdWJsaWMgY2hpcElucHV0OiBNYXRJbnB1dDtcclxuXHJcblx0LyoqXHJcblx0ICogUmVwcmVzZW50cyBhIHZhbHVlIHRoYXQgY2hhbmdlcyBvdmVyIHRpbWUuIFxyXG5cdCAqIE9ic2VydmVycyBjYW4gc3Vic2NyaWJlIHRvIHRoZSBzdWJqZWN0IHRvIHJlY2VpdmUgcGRmIGZpbGUgY2hhbmdlc1xyXG5cdCAqL1xyXG5cdHByaXZhdGUgX2VuZHBvaW50Q2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuXHJcblx0LyoqXHJcblx0ICogU2V0IHVwIHJlYWN0aXZlIGZvcm1jb250cm9sXHJcblx0ICovXHJcblx0cHVibGljIGF1dG9Db21wbGV0ZUNoaXBMaXN0OiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgbGlzdCBvZiBmaWx0ZXJlZCBvcHRpb25zXHJcblx0ICovXHJcblx0cHVibGljIGZpbHRlcmVkT3B0aW9uczogYW55W107XHJcblxyXG5cdC8qKlxyXG5cdCAqIHNlYXJjaE9wZXJhdG9yczogc3RyaW5nW11cclxuXHQgKi9cclxuXHRwdWJsaWMgc2VhcmNoT3BlcmF0b3JzOiBzdHJpbmdbXSA9IFtcIiE9XCIsIFwiIVwiLCBcIjw+XCIsIFwiPj1cIiwgXCI+XCIsIFwiPD1cIiwgXCI8XCIsIFwiXlwiLCBcIiRcIiwgXCJ+XCJdO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgbGlzdCBvZiBjaGlwc1xyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGNoaXBzID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFZkQ2hpcCB0ZW1wbGF0ZVxyXG5cdCAqL1xyXG5cdEBDb250ZW50Q2hpbGQoVmRDaGlwRGlyZWN0aXZlKVxyXG5cdHB1YmxpYyBjaGlwVGVtcGxhdGU6IFZkQ2hpcERpcmVjdGl2ZTtcclxuXHJcblx0LyoqXHJcblx0ICogQXV0b2NvbXBsZXRlT3B0aW9uIHRlbXBsYXRlXHJcblx0ICovXHJcblx0QENvbnRlbnRDaGlsZChWZEF1dG9jb21wbGV0ZU9wdGlvbkRpcmVjdGl2ZSlcclxuXHRwdWJsaWMgYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGU6IFZkQXV0b2NvbXBsZXRlT3B0aW9uRGlyZWN0aXZlO1xyXG5cclxuXHQvKipcclxuXHQgKiBfZW5kcG9pbnQ6IHN0cmluZ1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBfZW5kcG9pbnQ6IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyBvciBzZXRzIGVuZHBvaW50XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRnZXQgZW5kcG9pbnQoKTogYW55IHsgcmV0dXJuIHRoaXMuX2VuZHBvaW50OyB9XHJcblx0c2V0IGVuZHBvaW50KGVuZHBvaW50OiBhbnkpIHtcclxuXHRcdHRoaXMuX2VuZHBvaW50ID0gZW5kcG9pbnQ7XHJcblx0XHR0aGlzLmNsZWFyKCk7XHJcblx0XHR0aGlzLl9lbmRwb2ludENoYW5nZS5uZXh0KFt0aGlzLmVuZHBvaW50LCB0aGlzLnBhdGgsIHRoaXMucGFyYW1zLCB0aGlzLnByb2plY3Rpb25dKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIF9wYXJhbXM6IGFueVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBfcGFyYW1zOiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHBhcmFtczogYW55XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRnZXQgcGFyYW1zKCkgeyByZXR1cm4gdGhpcy5fcGFyYW1zOyB9XHJcblx0c2V0IHBhcmFtcyhwYXJhbXM6IGFueSkge1xyXG5cdFx0LyogUmVtb3ZlIGVtcHR5IHBhcmFtcyAqL1xyXG5cdFx0T2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcclxuXHRcdFx0aWYgKChwYXJhbXNba2V5XSA9PSBudWxsIHx8IHBhcmFtc1trZXldID09ICcnIHx8IHBhcmFtc1trZXldID09ICd1bmRlZmluZWQnKSkge1xyXG5cdFx0XHRcdGRlbGV0ZSBwYXJhbXNba2V5XTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0aWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuX3BhcmFtcykgIT09IEpTT04uc3RyaW5naWZ5KHBhcmFtcykpIHtcclxuXHRcdFx0dGhpcy5fcGFyYW1zID0gcGFyYW1zO1xyXG5cdFx0XHR0aGlzLl9lbmRwb2ludENoYW5nZS5uZXh0KFt0aGlzLmVuZHBvaW50LCB0aGlzLnBhdGgsIHRoaXMuX3BhcmFtcywgdGhpcy5wcm9qZWN0aW9uXSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBfcHJvamVjdGlvbjogYW55XHJcblx0ICovXHJcblx0cHVibGljIF9wcm9qZWN0aW9uOiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHByb2plY3Rpb246IGFueVxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0Z2V0IHByb2plY3Rpb24oKSB7IHJldHVybiB0aGlzLl9wcm9qZWN0aW9uOyB9XHJcblx0c2V0IHByb2plY3Rpb24ocHJvamVjdGlvbjogc3RyaW5nKSB7XHJcblx0XHR0aGlzLl9wcm9qZWN0aW9uID0gcHJvamVjdGlvbjtcclxuXHRcdHRoaXMuY2xlYXIoKTtcclxuXHRcdHRoaXMuX2VuZHBvaW50Q2hhbmdlLm5leHQoW3RoaXMuZW5kcG9pbnQsIHRoaXMucGF0aCwgdGhpcy5wYXJhbXMsIHRoaXMucHJvamVjdGlvbl0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogX3BhdGg6IGFueVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBfcGF0aDogYW55ID0gJyc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgb3Igc2V0cyBwYXRoXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRnZXQgcGF0aCgpIHsgcmV0dXJuIHRoaXMuX3BhdGg7IH1cclxuXHRzZXQgcGF0aChwYXRoKSB7XHJcblx0XHR0aGlzLl9wYXRoID0gcGF0aDtcclxuXHRcdHRoaXMuY2xlYXIoKTtcclxuXHRcdHRoaXMuX2VuZHBvaW50Q2hhbmdlLm5leHQoW3RoaXMuZW5kcG9pbnQsIHRoaXMucGF0aCwgdGhpcy5wYXJhbXMsIHRoaXMucHJvamVjdGlvbl0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyB0aGUgZGlzYWJsZWQuXHJcblx0ICogQHBhcmFtIGRpc2FibGVkXHJcblx0ICovXHJcblx0cHVibGljIGdldCBkaXNhYmxlZCgpIHtcclxuXHRcdGlmICh0aGlzLl9yZWFkb25seSkge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gc3VwZXIuZGlzYWJsZWQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBjb250ZXh0OiBhbnlcclxuXHQgKiBUaGUgY3VycmVudCBjb250ZXh0XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgY29udGV4dDogYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBrZXk6IHN0cmluZ1xyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGtleTogc3RyaW5nID0gJ2lkJztcclxuXHJcblx0LyoqXHJcblx0ICogc2VhcmNoRmllbGQ6IHN0cmluZ1xyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIHNlYXJjaEZpZWxkOiBzdHJpbmcgPSAnc2VhcmNoJztcclxuXHJcblx0LyoqXHJcblx0ICogc2VhcmNoRmllbGRzOiBzdHJpbmdcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBzZWFyY2hGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIHRlcm1NaW5sZW5ndGg6IG51bWJlclxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIHRlcm1NaW5sZW5ndGg6IG51bWJlciA9IDI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIGxpbWl0OiBudW1iZXJcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBsaW1pdDogbnVtYmVyID0gMzA7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHJlbW92YWJsZTogYm9vbGVhblxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIHJlbW92YWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIGRlYm91bmNlPzogbnVtYmVyXHJcblx0ICogRGVib3VuY2UgdGltZW91dCBiZXR3ZWVuIGtleXByZXNzZXMuIERlZmF1bHRzIHRvIDQwMC5cclxuXHQgKi9cclxuXHRASW5wdXQoJ2RlYm91bmNlJylcclxuXHRwdWJsaWMgZGVib3VuY2U6IG51bWJlciA9IDQwMDtcclxuXHJcblx0LyoqXHJcblx0ICogaW5pdFNlbGVjdD86IGZ1bmN0aW9uXHJcblx0ICovXHJcblx0QE91dHB1dCgpXHJcblx0cHVibGljIGluaXRTZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHNlbGVjdGVkPzogZnVuY3Rpb25cclxuXHQgKi9cclxuXHRAT3V0cHV0KClcclxuXHRwdWJsaWMgc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIGNsZWFyZWQ/OiBmdW5jdGlvblxyXG5cdCAqL1xyXG5cdEBPdXRwdXQoKVxyXG5cdHB1YmxpYyBjbGVhcmVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuXHQvKipcclxuXHQgKiBsYXVuY2g/OiBmdW5jdGlvblxyXG5cdCAqL1xyXG5cdEBPdXRwdXQoJ2xhdW5jaCcpXHJcblx0cHVibGljIG9uTGF1bmNoOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuXHQvKipcclxuXHQgKiBzdWZmaXhCdXR0b25zOiBTdWZmaXhCdXR0b248YW55PltdXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgc3VmZml4QnV0dG9uczogU3VmZml4QnV0dG9uW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogY2hpcEZvY3VzPzogZnVuY3Rpb25cclxuXHQgKiBNZXRob2QgdG8gYmUgZXhlY3V0ZWQgd2hlbiBhIGNoaXAgaXMgZm9jdXNlZC5cclxuXHQgKiBTZW5kcyBjaGlwIHZhbHVlIGFzIGV2ZW50LlxyXG5cdCAqL1xyXG5cdEBPdXRwdXQoKVxyXG5cdHB1YmxpYyBjaGlwRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG5cdC8qKiBcclxuXHQgKiBXaGV0aGVyIHRoZSBzZWxlY3QgaGFzIGEgdmFsdWUuXHJcblx0ICovXHJcblx0Z2V0IGVtcHR5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jaGlwcy5sZW5ndGggPD0gMDsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBEZWZhdWx0IGNoaXBcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdGdldCBkZWZhdWx0KCkgeyByZXR1cm4gdGhpcy5jaGlwc1swXTsgfVxyXG5cdHNldCBkZWZhdWx0KF9jaGlwKSB7XHJcblx0XHRpZiAoX2NoaXApIHtcclxuXHRcdFx0LyogQWRkIGNoaXAgZm9yIHNlbGVjdGVkIG9wdGlvbiAqL1xyXG5cdFx0XHR0aGlzLmNoaXBzID0gW19jaGlwXTtcclxuXHJcblx0XHRcdC8qIFx0U2V0IHRoZSB2YWx1ZSAobmdNb2RlbCkgKi9cclxuXHRcdFx0dGhpcy52YWx1ZSA9IF9jaGlwW3RoaXMua2V5XTtcclxuXHJcblx0XHRcdC8qIERpYWJsZWQgdGhlIGlucHV0LCBhbGxvdyBvbmx5IG9uZSBjaGlwICovXHJcblx0XHRcdHRoaXMuYXV0b0NvbXBsZXRlQ2hpcExpc3QuZGlzYWJsZSgpO1xyXG5cclxuXHRcdFx0LyogUmVzZXQgdGhlIGF1dG9jb21wbGV0ZSBpbnB1dCB0ZXh0IHZhbHVlICovXHJcblx0XHRcdHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdoZXRoZXIgdGhlIGBNYXRGb3JtRmllbGRgIGxhYmVsIHNob3VsZCB0cnkgdG8gZmxvYXQuXHJcblx0ICovXHJcblx0cHVibGljIGdldCBzaG91bGRMYWJlbEZsb2F0KCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHN1cGVyLnNob3VsZExhYmVsRmxvYXQgfHwgIXRoaXMuY2hpcElucHV0Py5lbXB0eTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGxvYWRpbmc6IGJvb2xlYW5cclxuXHQgKi9cclxuXHRwdWJsaWMgbG9hZGluZzogYm9vbGVhbjtcclxuXHJcblx0LyoqXHJcblx0ICogZW1wdHlSZXN1bHQ6IGJvb2xlYW5cclxuXHQgKi9cclxuXHRwdWJsaWMgZW1wdHlSZXN1bHQ6IGJvb2xlYW47XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnN0cnVjdG9yXHJcblx0ICogQHBhcmFtIG5nQ29udHJvbCBcclxuXHQgKiBAcGFyYW0gcGFyZW50Rm9ybSBcclxuXHQgKiBAcGFyYW0gcGFyZW50Rm9ybUdyb3VwIFxyXG5cdCAqIEBwYXJhbSBkZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIgXHJcblx0ICogQHBhcmFtIGZvY3VzTW9uaXRvciBcclxuXHQgKiBAcGFyYW0gZWxlbWVudFJlZiBcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLCBAT3B0aW9uYWwoKSBAU2VsZigpIG5nQ29udHJvbDogTmdDb250cm9sLCBAT3B0aW9uYWwoKSBwYXJlbnRGb3JtOiBOZ0Zvcm0sIEBPcHRpb25hbCgpIHBhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwRGlyZWN0aXZlLCBkZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLCBmb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvciwgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xyXG5cdFx0c3VwZXIoXCJhcHAtdmQtY2hpcHNcIiwgbmdDb250cm9sLCBwYXJlbnRGb3JtLCBwYXJlbnRGb3JtR3JvdXAsIGRlZmF1bHRFcnJvclN0YXRlTWF0Y2hlciwgZm9jdXNNb25pdG9yLCBlbGVtZW50UmVmKTtcclxuXHRcdHRoaXMuaHR0cCA9IGluamVjdG9yLmdldChIdHRwQ2xpZW50KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXHJcblx0ICogQHBhcmFtIHZhbHVlIFxyXG5cdCAqL1xyXG5cdHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG5cdFx0LyogU2V0IHRoZSB2YWx1ZSAqL1xyXG5cdFx0dGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuXHJcblx0XHQvKiBDbGVhciB0aGUgY2hpcHMgbGlzdCAqL1xyXG5cdFx0dGhpcy5jaGlwcyA9IFtdO1xyXG5cclxuXHRcdGlmICh2YWx1ZSAmJiB0aGlzLmNoaXBzPy5sZW5ndGggPD0gMCkge1xyXG5cdFx0XHR0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG5cdFx0XHRsZXQgX3BhcmFtczogYW55ID0ge307XHJcblxyXG5cdFx0XHQvKiBBZGQgaW5jbHVkZXMsIGlmIGFueSAqL1xyXG5cdFx0XHRpZiAodGhpcy5fcGFyYW1zPy5pbmNsdWRlcykge1xyXG5cdFx0XHRcdF9wYXJhbXMuaW5jbHVkZXMgPSB0aGlzLl9wYXJhbXMuaW5jbHVkZXM7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIEFkZCBwcm9qZWN0aW9uLCBpZiBhbnkgKi9cclxuXHRcdFx0aWYgKHRoaXMucHJvamVjdGlvbikge1xyXG5cdFx0XHRcdF9wYXJhbXMucHJvamVjdGlvbiA9IHRoaXMucHJvamVjdGlvbjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogR2V0IGJhc2UgdXJsICovXHJcblx0XHRcdHZhciB1cmxQYXJ0cyA9IHRoaXMuZW5kcG9pbnQuc3BsaXQoJz8nKTtcclxuXHRcdFx0dGhpcy5odHRwLmdldChgJHt1cmxQYXJ0c1swXX0vJHt2YWx1ZX0ke3VybFBhcnRzLmxlbmd0aCA+IDEgPyBgPyR7dXJsUGFydHNbMV19YCA6ICcnfWAsIHsgcGFyYW1zOiBVdGlscy5jbGVhbk9iamVjdChfcGFyYW1zKSB9KS5zdWJzY3JpYmUoeCA9PiB7XHJcblx0XHRcdFx0dGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdC8qIEFkZCBjaGlwIGZvciBzZWxlY3RlZCBvcHRpb24gKi9cclxuXHRcdFx0XHR0aGlzLmNoaXBzLnB1c2goeCk7XHJcblxyXG5cdFx0XHRcdC8qIEVtaXQgc2VsZWN0ZWQgZXZlbnQgKi9cclxuXHRcdFx0XHR0aGlzLmluaXRTZWxlY3QuZW1pdCh4KTtcclxuXHJcblx0XHRcdFx0LyogRGlhYmxlZCB0aGUgaW5wdXQsIGFsbG93IG9ubHkgb25lIGNoaXAgKi9cclxuXHRcdFx0XHR0aGlzLmF1dG9Db21wbGV0ZUNoaXBMaXN0LmRpc2FibGUoKTtcclxuXHRcdFx0fSwgXyA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmNsZWFyKGZhbHNlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldHMgY29udHJvbCBmb2N1c1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBmb2N1cygpOiB2b2lkIHtcclxuXHRcdHRoaXMuY2hpcElucHV0Py5mb2N1cygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzIG9mIGEgXHJcblx0ICogZGlyZWN0aXZlIGFyZSBpbml0aWFsaXplZC5cclxuXHQgKi9cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHRoaXMuYXV0b0NvbXBsZXRlQ2hpcExpc3QudmFsdWVDaGFuZ2VzXHJcblx0XHRcdC5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlKSlcclxuXHRcdFx0LnN1YnNjcmliZSh2ID0+IHRoaXMuZmlsdGVyT3B0aW9ucyh2KSk7XHJcblxyXG5cdFx0dGhpcy5uZ0NvbnRyb2w/LnZhbHVlQ2hhbmdlcz8ucGlwZShza2lwKDEpKS5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0aWYgKCF2YWx1ZSkge1xyXG5cdFx0XHRcdHRoaXMuY2hpcHMgPSBbXTtcclxuXHRcdFx0XHR0aGlzLl92YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0dGhpcy5hdXRvQ29tcGxldGVDaGlwTGlzdC5zZXRWYWx1ZShcIlwiKTtcclxuXHRcdFx0XHR0aGlzLmF1dG9Db21wbGV0ZUNoaXBMaXN0LmVuYWJsZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZHMgYSBjaGlwXHJcblx0ICogQHBhcmFtIGV2ZW50IFxyXG5cdCAqIEBwYXJhbSBpbnB1dCBcclxuXHQgKi9cclxuXHRwdWJsaWMgYWRkQ2hpcChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCwgaW5wdXQ6IGFueSk6IHZvaWQge1xyXG5cdFx0LyogRGVmaW5lIHNlbGVjdGlvbiBjb25zdGFudCAqL1xyXG5cdFx0Y29uc3Qgc2VsZWN0aW9uID0gZXZlbnQub3B0aW9uLnZhbHVlO1xyXG5cclxuXHRcdC8qIEFkZCBjaGlwIGZvciBzZWxlY3RlZCBvcHRpb24gKi9cclxuXHRcdHRoaXMuY2hpcHMucHVzaChzZWxlY3Rpb24pO1xyXG5cclxuXHRcdC8qIEVtaXQgc2VsZWN0ZWQgZXZlbnQgKi9cclxuXHRcdHRoaXMuc2VsZWN0ZWQuZW1pdChzZWxlY3Rpb24pO1xyXG5cclxuXHRcdC8qIFx0U2V0IHRoZSB2YWx1ZSAobmdNb2RlbCkgKi9cclxuXHRcdHRoaXMudmFsdWUgPSBzZWxlY3Rpb25bdGhpcy5rZXldO1xyXG5cclxuXHRcdC8qIERpYWJsZWQgdGhlIGlucHV0LCBhbGxvdyBvbmx5IG9uZSBjaGlwICovXHJcblx0XHR0aGlzLmF1dG9Db21wbGV0ZUNoaXBMaXN0LmRpc2FibGUoKTtcclxuXHJcblx0XHQvKiBSZXNldCB0aGUgYXV0b2NvbXBsZXRlIGlucHV0IHRleHQgdmFsdWUgKi9cclxuXHRcdGlmIChpbnB1dCkge1xyXG5cdFx0XHRpbnB1dC52YWx1ZSA9ICcnO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlcyBhbGwgY2hpcHNcclxuXHQgKi9cclxuXHRwdWJsaWMgY2xlYXIodHJpZ2dlclN0YXRlQ2hhbmdlczogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuXHRcdC8qIFJlbW92ZSBrZXkgZnJvbSBjaGlwcyBhcnJheSAqL1xyXG5cdFx0dGhpcy52YWx1ZSA9IG51bGw7XHJcblx0XHR0aGlzLmNoaXBzID0gW107XHJcblxyXG5cdFx0LyogTWFyayB0aGUgY29udHJvbCBhcyB0b3VjaGVkICovXHJcblx0XHRpZiAodGhpcy5uZ0NvbnRyb2wuY29udHJvbCkge1xyXG5cdFx0XHR0aGlzLm5nQ29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBSZXNldCB0aGUgdmFsdWUgKG5nTW9kZWwpICovXHJcblx0XHR0aGlzLmF1dG9Db21wbGV0ZUNoaXBMaXN0LnNldFZhbHVlKFwiXCIpO1xyXG5cclxuXHRcdGlmICh0cmlnZ2VyU3RhdGVDaGFuZ2VzKSB7XHJcblx0XHRcdHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBFbmFibGUgdGhlIGlucHV0ICovXHJcblx0XHR0aGlzLmF1dG9Db21wbGV0ZUNoaXBMaXN0LmVuYWJsZSgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRmlsdGVycyBvcHRpb25zXHJcblx0ICogQHBhcmFtIHRleHQgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBmaWx0ZXJPcHRpb25zKHRleHQ6IHN0cmluZykge1xyXG5cdFx0dGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbXTtcclxuXHRcdGlmICh0aGlzLmVuZHBvaW50ICYmIHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJyAmJiB0ZXh0Lmxlbmd0aCA+PSB0aGlzLnRlcm1NaW5sZW5ndGgpIHtcclxuXHRcdFx0LyogSW5pdCBwYXJhbXMgaWYgbnVsbCAqL1xyXG5cdFx0XHR0aGlzLl9wYXJhbXMgPSB0aGlzLl9wYXJhbXMgfHwge307XHJcblxyXG5cdFx0XHQvKiBBZGQgc2VhcmNoIHdvcmQgdG8gdGhlIHBhcmFtcyAqL1xyXG5cdFx0XHRpZiAodGhpcy5zZWFyY2hGaWVsZCAmJiB0aGlzLnNlYXJjaEZpZWxkcy5sZW5ndGggPD0gMCkge1xyXG5cdFx0XHRcdHZhciByZXN1bHQgPSBuZXcgUmVnRXhwKGAoXFxcXCR7dGhpcy5zZWFyY2hPcGVyYXRvcnMuam9pbignfFxcXFwnKX0pPyguKilgKS5leGVjKHRoaXMuc2VhcmNoRmllbGQpO1xyXG5cdFx0XHRcdHRoaXMuX3BhcmFtc1tyZXN1bHRbMl1dID0gYCR7cmVzdWx0WzFdID8gcmVzdWx0WzFdIDogJyd9JHt0ZXh0fWA7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIEFkZCBzZWFyY2ggd29yZCB0byB0aGUgcGFyYW1zICovXHJcblx0XHRcdHRoaXMuc2VhcmNoRmllbGRzPy5tYXAoeCA9PiB4LnRyaW0oKSk/LmZvckVhY2goeCA9PiB7XHJcblx0XHRcdFx0dmFyIHJlc3VsdCA9IG5ldyBSZWdFeHAoYChcXFxcJHt0aGlzLnNlYXJjaE9wZXJhdG9ycy5qb2luKCd8XFxcXCcpfSk/KC4qKWApLmV4ZWMoeCk7XHJcblx0XHRcdFx0dGhpcy5fcGFyYW1zW3Jlc3VsdFsyXV0gPSBgJHtyZXN1bHRbMV0gPyByZXN1bHRbMV0gOiAnJ30ke3RleHR9YDtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvKiBBZGQgbGltaXQgdG8gdGhlIHBhcmFtcyAqL1xyXG5cdFx0XHR0aGlzLl9wYXJhbXMubGltaXQgPSB0aGlzLmxpbWl0O1xyXG5cclxuXHRcdFx0LyogQWRkIHByb2plY3Rpb24sIGlmIGFueSAqL1xyXG5cdFx0XHRpZiAodGhpcy5wcm9qZWN0aW9uKSB7XHJcblx0XHRcdFx0dGhpcy5fcGFyYW1zLnByb2plY3Rpb24gPSB0aGlzLnByb2plY3Rpb247XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIEdldCByZXN1bHRzIGZyb20gc2VydmVyICovXHJcblx0XHRcdHRoaXMubG9hZGluZyA9IHRydWU7XHJcblx0XHRcdHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbmRwb2ludH0ke3RoaXMucGF0aCB8fCAnJ31gLCB7IHBhcmFtczogVXRpbHMuY2xlYW5PYmplY3QodGhpcy5fcGFyYW1zKSB9KVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdFx0bmV4dDogKHg6IGFueVtdKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHg7XHJcblx0XHRcdFx0XHRcdHRoaXMuZW1wdHlSZXN1bHQgPSAheCB8fCAheC5sZW5ndGg7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyb3I6ICgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlXHJcblx0XHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBIYW5kbGVzIHJlbW92ZWQgZXZlbnRcclxuXHQgKi9cclxuXHRwdWJsaWMgaGFuZGxlUmVtb3ZlZEV2ZW50KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5jbGVhcmVkPy5lbWl0KHRoaXMudmFsdWUpO1xyXG5cdFx0aWYgKHRoaXMucmVtb3ZhYmxlKSB7XHJcblx0XHRcdHRoaXMuY2xlYXIoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEhhbmRsZXMgbGF1bmNoIGJ1dHRvbiBjbGlja1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBoYW5kbGVMYXVuY2hDbGlja2VkKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuY2hpcHM/Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0dGhpcy5vbkxhdW5jaC5lbWl0KHRoaXMuY2hpcHNbMF0pO1xyXG5cdFx0fVxyXG5cdH1cclxufSIsIjxtYXQtY2hpcC1saXN0ICNjaGlwTGlzdCBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIj5cclxuXHQ8IS0tICNyZWdpb24gQ2hpcHMgLS0+XHJcblx0PG5nLXRlbXBsYXRlIGxldC1jaGlwIGxldC1maXJzdD1cImZpcnN0XCIgbGV0LWluZGV4PVwiaW5kZXhcIiBuZ0ZvciBbbmdGb3JPZl09XCJjaGlwc1wiPlxyXG5cdFx0PG1hdC1iYXNpYy1jaGlwIFtzZWxlY3RhYmxlXT1cIiFyZWFkb25seVwiIFtyZW1vdmFibGVdPVwiIXJlYWRvbmx5XCIgKHJlbW92ZWQpPVwiaGFuZGxlUmVtb3ZlZEV2ZW50KClcIiBkaXNhYmxlUmlwcGxlPlxyXG5cdFx0XHQ8c3BhbiBjbGFzcz1cInZkLWNoaXAtY29udGVudFwiPlxyXG5cdFx0XHRcdDxzcGFuICpuZ0lmPVwiIWNoaXBUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIj5cclxuXHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwiIWF1dG9jb21wbGV0ZU9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiPnt7IGNoaXAgfX08L3NwYW4+XHJcblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJhdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZT8udGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJhdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZT8udGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBvcHRpb246IGNoaXAgfVwiPjwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImNoaXBUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlwVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY2hpcDogY2hpcCB9XCI+PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0PC9zcGFuPlxyXG5cdFx0XHQ8bmctdGVtcGxhdGUgbGV0LWJ1dHRvbiBsZXQtZmlyc3Q9XCJmaXJzdFwiIG5nRm9yIFtuZ0Zvck9mXT1cInN1ZmZpeEJ1dHRvbnNcIj5cclxuXHRcdFx0XHQ8YSBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCIhYnV0dG9uLmhpZGUgfHwgIWJ1dHRvbi5oaWRlKGNoaXBzWzBdLCBjb250ZXh0KVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGJ1dHRvbi5ldmVudCAmJiBidXR0b24uZXZlbnQoY2hpcHNbMF0sIGNvbnRleHQpXCI+XHJcblx0XHRcdFx0XHQ8bWF0LWljb24+e3tidXR0b24uaWNvbn19PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2E+XHJcblx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdDxhIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cIm9uTGF1bmNoPy5vYnNlcnZlcnM/Lmxlbmd0aCA+IDBcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBoYW5kbGVMYXVuY2hDbGlja2VkKClcIj5cclxuXHRcdFx0XHQ8bWF0LWljb24+bGF1bmNoPC9tYXQtaWNvbj5cclxuXHRcdFx0PC9hPlxyXG5cdFx0XHQ8YSBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCIhcmVhZG9ubHlcIj5cclxuXHRcdFx0XHQ8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jbG9zZTwvbWF0LWljb24+XHJcblx0XHRcdDwvYT5cclxuXHRcdDwvbWF0LWJhc2ljLWNoaXA+XHJcblx0PC9uZy10ZW1wbGF0ZT5cclxuXHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdDwhLS0gI3JlZ2lvbiBTZWFyY2ggYm94IC0tPlxyXG5cdDxpbnB1dCBtYXRJbnB1dCBbaGlkZGVuXT1cInZhbHVlICYmICFlbXB0eVwiIHBsYWNlaG9sZGVyPVwie3twbGFjZWhvbGRlcn19XCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwTGlzdFwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiIFtmb3JtQ29udHJvbF09XCJhdXRvQ29tcGxldGVDaGlwTGlzdFwiICNjaGlwSW5wdXQgLz5cclxuXHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdDwhLS0gI3JlZ2lvbiBQcm9ncmVzcyAtLT5cclxuXHQ8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCIxOFwiICpuZ0lmPVwibG9hZGluZ1wiPjwvbWF0LXNwaW5uZXI+XHJcblx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG48L21hdC1jaGlwLWxpc3Q+XHJcblxyXG48IS0tICNyZWdpb24gQXV0b2NvbXBsZXRlIC0tPlxyXG48bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJhZGRDaGlwKCRldmVudCwgY2hpcElucHV0KVwiPlxyXG5cdDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBsZXQtZmlyc3Q9XCJmaXJzdFwiIG5nRm9yIFtuZ0Zvck9mXT1cImZpbHRlcmVkT3B0aW9uc1wiPlxyXG5cdFx0PG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW1cIj5cclxuXHRcdFx0PHNwYW4gKm5nSWY9XCIhYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCI+e3sgaXRlbSB9fTwvc3Bhbj5cclxuXHRcdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgb3B0aW9uOiBpdGVtIH1cIj48L25nLXRlbXBsYXRlPlxyXG5cdFx0PC9tYXQtb3B0aW9uPlxyXG5cdDwvbmctdGVtcGxhdGU+XHJcbjwvbWF0LWF1dG9jb21wbGV0ZT5cclxuPCEtLSAjZW5kcmVnaW9uIC0tPiJdfQ==