@messaia/cdk 13.3.5-rc23 → 13.3.5-rc26

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.
@@ -384,12 +384,12 @@ export class VdChipsComponent extends AbstractMatFormField {
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
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<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"] }] });
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{opacity:.6}: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.2em;height:2.2em;margin-top:-10px}:host ::ng-deep .mat-chip .mat-icon-button .mat-button-wrapper{line-height:20px}:host ::ng-deep .mat-chip .mat-icon-button .mat-button-wrapper .mat-icon{font-size:21px;line-height:21px}: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<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"] }]
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{opacity:.6}: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.2em;height:2.2em;margin-top:-10px}:host ::ng-deep .mat-chip .mat-icon-button .mat-button-wrapper{line-height:20px}:host ::ng-deep .mat-chip .mat-icon-button .mat-button-wrapper .mat-icon{font-size:21px;line-height:21px}: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
  }, {
@@ -17,8 +17,9 @@ import * as i1 from "@angular/forms";
17
17
  import * as i2 from "@angular/material/core";
18
18
  import * as i3 from "@angular/cdk/a11y";
19
19
  import * as i4 from "@angular/material/select";
20
- import * as i5 from "@angular/material/icon";
21
- import * as i6 from "@angular/common";
20
+ import * as i5 from "@angular/material/button";
21
+ import * as i6 from "@angular/material/icon";
22
+ import * as i7 from "@angular/common";
22
23
  /**
23
24
  * VdSelectComponent class
24
25
  */
@@ -340,10 +341,10 @@ export class VdSelectComponent extends AbstractMatFormField {
340
341
  }
341
342
  }
342
343
  /** @nocollapse */ /** @nocollapse */ VdSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdSelectComponent, 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 });
343
- /** @nocollapse */ /** @nocollapse */ VdSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: VdSelectComponent, selector: "vd-select", inputs: { multiple: "multiple", disabled: "disabled", sorted: "sorted", textPrefix: "textPrefix", endpoint: "endpoint", params: "params", projection: "projection", enum: "enum", key: "key", text: "text", prefix: "prefix", options: "options", filteredOptions: "filteredOptions", filterable: "filterable", cache: "cache", sortBy: "sortBy", mapper: "mapper", compareWith: "compareWith", searchField: "searchField" }, outputs: { onValueChange: "change", onItemChange: "itemChange", onSelected: "selected", onItemSelected: "itemSelected", onLaunch: "launch" }, providers: [{ provide: MatFormFieldControl, useExisting: VdSelectComponent }], queries: [{ propertyName: "optionTemplate", first: true, predicate: VdSelectOptionDirective, descendants: true }, { propertyName: "triggerTemplate", first: true, predicate: VdSelectTriggerDirective, descendants: true }], viewQueries: [{ propertyName: "selectEl", first: true, predicate: MatSelect, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-select [placeholder]=\"placeholder\" i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelect\" (selectionChange)=\"handleChange($event)\" *ngIf=\"!readonly\" [multiple]=\"multiple\" [compareWith]=\"compareWith\" [disabled]=\"disabled\" flex>\r\n <!-- #region Filter input -->\r\n <input #filterInput *ngIf=\"filterable\" type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter\" (keyup)=\"handleFilter($event.target.value)\">\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for launch button -->\r\n <mat-select-trigger *ngIf=\"onLaunch?.observers?.length > 0\">\r\n <span>{{getTriggerValues(select.selected)}}</span>\r\n <mat-icon class=\"vd-select-launch\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom trigger template -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && triggerTemplate?.templateRef\">\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ trigger: getTriggerValues(select.selected) }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option template as trigger -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && !triggerTemplate?.templateRef && optionTemplate?.templateRef\">\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ trigger: getTriggerValues(select.selected) }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Default option -->\r\n <mat-option class=\"tc-grey-500\" *ngIf=\"!multiple\" i18n=\"@@pleaseSelect\">--- Please Select ---</mat-option>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Options -->\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-option [value]=\"mapper ? option : option[key]\">\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option[text], select, option {option} other {{{option[text]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </mat-option>\r\n </ng-template>\r\n <!-- #endregion -->\r\n</mat-select>\r\n\r\n<!-- #region Read only value -->\r\n<div *ngIf=\"readonly\">\r\n <div *ngIf=\"currentValue\">\r\n <div class=\"readonly-value\">\r\n <span *ngIf=\"!optionTemplate?.templateRef && !triggerTemplate?.templateRef\">\r\n <span *ngIf=\"!multiple\" i18n=\"@@selection\">{currentValue[text], select, option {option} other {{{currentValue[text]}}}}</span>\r\n <ng-container *ngIf=\"multiple\">\r\n <span *ngFor=\"let optionValue of currentValue; let last = last\">\r\n <span i18n=\"@@selection\">{optionValue[text], select, option {option} other {{{optionValue[text]}}}}</span>\r\n <span *ngIf=\"!last\">,&nbsp;</span>\r\n </span>\r\n </ng-container>\r\n </span>\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ trigger: getTriggerValues(currentValue) }\"></ng-template>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef && !triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: getTriggerValues(currentValue) }\"></ng-template>\r\n </div>\r\n <mat-icon *ngIf=\"onLaunch?.observers?.length > 0\" class=\"vd-select-launch-readonly\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </div>\r\n <div *ngIf=\"!currentValue\">&nbsp;</div>\r\n</div>\r\n<!-- #endregion -->", styles: [".vd-select-launch{position:absolute;right:30px;top:-5px;font-size:18px;cursor:pointer}.readonly-value{padding-right:24px;color:#000000a3;min-height:15px}.vd-select-launch-readonly{position:absolute;right:0px;top:9px;font-size:18px;cursor:pointer}.vd-select-filter{position:sticky;top:0;z-index:100;font-size:inherit;box-shadow:none;border-radius:0;padding:16px;box-sizing:border-box;border:none;border-bottom:1px solid #dcdcdc;width:100%;background-color:#f5f5f5;outline:none}\n"], components: [{ type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.MatSelectTrigger, selector: "mat-select-trigger" }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
344
+ /** @nocollapse */ /** @nocollapse */ VdSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: VdSelectComponent, selector: "vd-select", inputs: { multiple: "multiple", disabled: "disabled", sorted: "sorted", textPrefix: "textPrefix", endpoint: "endpoint", params: "params", projection: "projection", enum: "enum", key: "key", text: "text", prefix: "prefix", options: "options", filteredOptions: "filteredOptions", filterable: "filterable", cache: "cache", sortBy: "sortBy", mapper: "mapper", compareWith: "compareWith", searchField: "searchField" }, outputs: { onValueChange: "change", onItemChange: "itemChange", onSelected: "selected", onItemSelected: "itemSelected", onLaunch: "launch" }, providers: [{ provide: MatFormFieldControl, useExisting: VdSelectComponent }], queries: [{ propertyName: "optionTemplate", first: true, predicate: VdSelectOptionDirective, descendants: true }, { propertyName: "triggerTemplate", first: true, predicate: VdSelectTriggerDirective, descendants: true }], viewQueries: [{ propertyName: "selectEl", first: true, predicate: MatSelect, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-select [placeholder]=\"placeholder\" i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelect\" (selectionChange)=\"handleChange($event)\" *ngIf=\"!readonly\" [multiple]=\"multiple\" [compareWith]=\"compareWith\" [disabled]=\"disabled\" flex>\r\n <!-- #region Filter input -->\r\n <div *ngIf=\"filterable\" class=\"vd-select-filter-wrap\">\r\n <div class=\"vd-select-filter-inner\">\r\n <a mat-icon-button disabled *ngIf=\"!filterInput.value\">\r\n <mat-icon>search</mat-icon>\r\n </a>\r\n <a mat-icon-button *ngIf=\"filterInput.value\" (click)=\"filterInput.value = null; handleFilter('')\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n <input #filterInput type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter mat-input-element\" (keyup)=\"handleFilter($event.target.value)\">\r\n </div>\r\n <div class=\"mat-divider\"></div>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for launch button -->\r\n <mat-select-trigger *ngIf=\"onLaunch?.observers?.length > 0\">\r\n <span>{{getTriggerValues(select.selected)}}</span>\r\n <mat-icon class=\"vd-select-launch\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom trigger template -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && triggerTemplate?.templateRef\">\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ trigger: getTriggerValues(select.selected) }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option template as trigger -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && !triggerTemplate?.templateRef && optionTemplate?.templateRef\">\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ trigger: getTriggerValues(select.selected) }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Default option -->\r\n <mat-option class=\"tc-grey-500\" *ngIf=\"!multiple\" i18n=\"@@pleaseSelect\">--- Please Select ---</mat-option>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Options -->\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-option [value]=\"mapper ? option : option[key]\">\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option[text], select, option {option} other {{{option[text]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </mat-option>\r\n </ng-template>\r\n <!-- #endregion -->\r\n</mat-select>\r\n\r\n<!-- #region Read only value -->\r\n<div *ngIf=\"readonly\">\r\n <div *ngIf=\"currentValue\">\r\n <div class=\"readonly-value\">\r\n <span *ngIf=\"!optionTemplate?.templateRef && !triggerTemplate?.templateRef\">\r\n <span *ngIf=\"!multiple\" i18n=\"@@selection\">{currentValue[text], select, option {option} other {{{currentValue[text]}}}}</span>\r\n <ng-container *ngIf=\"multiple\">\r\n <span *ngFor=\"let optionValue of currentValue; let last = last\">\r\n <span i18n=\"@@selection\">{optionValue[text], select, option {option} other {{{optionValue[text]}}}}</span>\r\n <span *ngIf=\"!last\">,&nbsp;</span>\r\n </span>\r\n </ng-container>\r\n </span>\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ trigger: currentValue }\"></ng-template>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef && !triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: currentValue }\"></ng-template>\r\n </div>\r\n <mat-icon *ngIf=\"onLaunch?.observers?.length > 0\" class=\"vd-select-launch-readonly\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </div>\r\n <div *ngIf=\"!currentValue\">&nbsp;</div>\r\n</div>\r\n<!-- #endregion -->", styles: [".vd-select-launch{position:absolute;right:30px;top:-5px;font-size:18px;cursor:pointer}.readonly-value{padding-right:24px;opacity:.6;min-height:15px}.vd-select-launch-readonly{position:absolute;right:0px;top:9px;font-size:18px;cursor:pointer}.vd-select-filter-wrap{background:inherit;position:sticky;top:0;box-sizing:border-box;z-index:100}.vd-select-filter-wrap .vd-select-filter-inner{z-index:100;display:flex;flex-direction:row;align-items:center;background:inherit}.vd-select-filter-wrap .vd-select-filter-inner .mat-icon-button{margin:4px}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter{box-shadow:none;padding:16px 16px 16px 0;box-sizing:border-box}.vd-select-filter-wrap .mat-divider{display:block;width:100%;border-top-width:1px;border-top-style:solid;box-sizing:border-box}\n"], components: [{ type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { 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: i2.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.MatSelectTrigger, selector: "mat-select-trigger" }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
344
345
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdSelectComponent, decorators: [{
345
346
  type: Component,
346
- args: [{ selector: 'vd-select', providers: [{ provide: MatFormFieldControl, useExisting: VdSelectComponent }], template: "<mat-select [placeholder]=\"placeholder\" i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelect\" (selectionChange)=\"handleChange($event)\" *ngIf=\"!readonly\" [multiple]=\"multiple\" [compareWith]=\"compareWith\" [disabled]=\"disabled\" flex>\r\n <!-- #region Filter input -->\r\n <input #filterInput *ngIf=\"filterable\" type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter\" (keyup)=\"handleFilter($event.target.value)\">\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for launch button -->\r\n <mat-select-trigger *ngIf=\"onLaunch?.observers?.length > 0\">\r\n <span>{{getTriggerValues(select.selected)}}</span>\r\n <mat-icon class=\"vd-select-launch\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom trigger template -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && triggerTemplate?.templateRef\">\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ trigger: getTriggerValues(select.selected) }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option template as trigger -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && !triggerTemplate?.templateRef && optionTemplate?.templateRef\">\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ trigger: getTriggerValues(select.selected) }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Default option -->\r\n <mat-option class=\"tc-grey-500\" *ngIf=\"!multiple\" i18n=\"@@pleaseSelect\">--- Please Select ---</mat-option>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Options -->\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-option [value]=\"mapper ? option : option[key]\">\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option[text], select, option {option} other {{{option[text]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </mat-option>\r\n </ng-template>\r\n <!-- #endregion -->\r\n</mat-select>\r\n\r\n<!-- #region Read only value -->\r\n<div *ngIf=\"readonly\">\r\n <div *ngIf=\"currentValue\">\r\n <div class=\"readonly-value\">\r\n <span *ngIf=\"!optionTemplate?.templateRef && !triggerTemplate?.templateRef\">\r\n <span *ngIf=\"!multiple\" i18n=\"@@selection\">{currentValue[text], select, option {option} other {{{currentValue[text]}}}}</span>\r\n <ng-container *ngIf=\"multiple\">\r\n <span *ngFor=\"let optionValue of currentValue; let last = last\">\r\n <span i18n=\"@@selection\">{optionValue[text], select, option {option} other {{{optionValue[text]}}}}</span>\r\n <span *ngIf=\"!last\">,&nbsp;</span>\r\n </span>\r\n </ng-container>\r\n </span>\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ trigger: getTriggerValues(currentValue) }\"></ng-template>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef && !triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: getTriggerValues(currentValue) }\"></ng-template>\r\n </div>\r\n <mat-icon *ngIf=\"onLaunch?.observers?.length > 0\" class=\"vd-select-launch-readonly\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </div>\r\n <div *ngIf=\"!currentValue\">&nbsp;</div>\r\n</div>\r\n<!-- #endregion -->", styles: [".vd-select-launch{position:absolute;right:30px;top:-5px;font-size:18px;cursor:pointer}.readonly-value{padding-right:24px;color:#000000a3;min-height:15px}.vd-select-launch-readonly{position:absolute;right:0px;top:9px;font-size:18px;cursor:pointer}.vd-select-filter{position:sticky;top:0;z-index:100;font-size:inherit;box-shadow:none;border-radius:0;padding:16px;box-sizing:border-box;border:none;border-bottom:1px solid #dcdcdc;width:100%;background-color:#f5f5f5;outline:none}\n"] }]
347
+ args: [{ selector: 'vd-select', providers: [{ provide: MatFormFieldControl, useExisting: VdSelectComponent }], template: "<mat-select [placeholder]=\"placeholder\" i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelect\" (selectionChange)=\"handleChange($event)\" *ngIf=\"!readonly\" [multiple]=\"multiple\" [compareWith]=\"compareWith\" [disabled]=\"disabled\" flex>\r\n <!-- #region Filter input -->\r\n <div *ngIf=\"filterable\" class=\"vd-select-filter-wrap\">\r\n <div class=\"vd-select-filter-inner\">\r\n <a mat-icon-button disabled *ngIf=\"!filterInput.value\">\r\n <mat-icon>search</mat-icon>\r\n </a>\r\n <a mat-icon-button *ngIf=\"filterInput.value\" (click)=\"filterInput.value = null; handleFilter('')\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n <input #filterInput type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter mat-input-element\" (keyup)=\"handleFilter($event.target.value)\">\r\n </div>\r\n <div class=\"mat-divider\"></div>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for launch button -->\r\n <mat-select-trigger *ngIf=\"onLaunch?.observers?.length > 0\">\r\n <span>{{getTriggerValues(select.selected)}}</span>\r\n <mat-icon class=\"vd-select-launch\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom trigger template -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && triggerTemplate?.templateRef\">\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ trigger: getTriggerValues(select.selected) }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option template as trigger -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && !triggerTemplate?.templateRef && optionTemplate?.templateRef\">\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ trigger: getTriggerValues(select.selected) }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Default option -->\r\n <mat-option class=\"tc-grey-500\" *ngIf=\"!multiple\" i18n=\"@@pleaseSelect\">--- Please Select ---</mat-option>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Options -->\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-option [value]=\"mapper ? option : option[key]\">\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option[text], select, option {option} other {{{option[text]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </mat-option>\r\n </ng-template>\r\n <!-- #endregion -->\r\n</mat-select>\r\n\r\n<!-- #region Read only value -->\r\n<div *ngIf=\"readonly\">\r\n <div *ngIf=\"currentValue\">\r\n <div class=\"readonly-value\">\r\n <span *ngIf=\"!optionTemplate?.templateRef && !triggerTemplate?.templateRef\">\r\n <span *ngIf=\"!multiple\" i18n=\"@@selection\">{currentValue[text], select, option {option} other {{{currentValue[text]}}}}</span>\r\n <ng-container *ngIf=\"multiple\">\r\n <span *ngFor=\"let optionValue of currentValue; let last = last\">\r\n <span i18n=\"@@selection\">{optionValue[text], select, option {option} other {{{optionValue[text]}}}}</span>\r\n <span *ngIf=\"!last\">,&nbsp;</span>\r\n </span>\r\n </ng-container>\r\n </span>\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ trigger: currentValue }\"></ng-template>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef && !triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef\" [ngTemplateOutletContext]=\"{ option: currentValue }\"></ng-template>\r\n </div>\r\n <mat-icon *ngIf=\"onLaunch?.observers?.length > 0\" class=\"vd-select-launch-readonly\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </div>\r\n <div *ngIf=\"!currentValue\">&nbsp;</div>\r\n</div>\r\n<!-- #endregion -->", styles: [".vd-select-launch{position:absolute;right:30px;top:-5px;font-size:18px;cursor:pointer}.readonly-value{padding-right:24px;opacity:.6;min-height:15px}.vd-select-launch-readonly{position:absolute;right:0px;top:9px;font-size:18px;cursor:pointer}.vd-select-filter-wrap{background:inherit;position:sticky;top:0;box-sizing:border-box;z-index:100}.vd-select-filter-wrap .vd-select-filter-inner{z-index:100;display:flex;flex-direction:row;align-items:center;background:inherit}.vd-select-filter-wrap .vd-select-filter-inner .mat-icon-button{margin:4px}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter{box-shadow:none;padding:16px 16px 16px 0;box-sizing:border-box}.vd-select-filter-wrap .mat-divider{display:block;width:100%;border-top-width:1px;border-top-style:solid;box-sizing:border-box}\n"] }]
347
348
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.NgControl, decorators: [{
348
349
  type: Optional
349
350
  }, {
@@ -418,4 +419,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImpor
418
419
  }], searchField: [{
419
420
  type: Input
420
421
  }] } });
421
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL3NlbGVjdC9jb21wb25lbnRzL3NlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9zZWxlY3QvY29tcG9uZW50cy9zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckosT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUs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O2dCQU9DLE1BQU07c0JBRFosS0FBSztnQkFPQyxPQUFPO3NCQURiLEtBQUs7Z0JBT0MsZUFBZTtzQkFEckIsS0FBSztnQkFPQyxVQUFVO3NCQURoQixLQUFLO2dCQU9DLEtBQUs7c0JBRFgsS0FBSztnQkFPQyxNQUFNO3NCQURaLEtBQUs7Z0JBT0MsTUFBTTtzQkFEWixLQUFLO2dCQVNGLFdBQVc7c0JBRGQsS0FBSztnQkFRWSxhQUFhO3NCQUE5QixNQUFNO3VCQUFDLFFBQVE7Z0JBS00sWUFBWTtzQkFBakMsTUFBTTt1QkFBQyxZQUFZO2dCQUtBLFVBQVU7c0JBQTdCLE1BQU07dUJBQUMsVUFBVTtnQkFLTSxjQUFjO3NCQUFyQyxNQUFNO3VCQUFDLGNBQWM7Z0JBS0osUUFBUTtzQkFBekIsTUFBTTt1QkFBQyxRQUFRO2dCQUtQLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XHJcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIFNlbGYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBFcnJvclN0YXRlTWF0Y2hlciwgTWF0T3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRW51bVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24vY29tbW9uLm1vZHVsZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0TWF0Rm9ybUZpZWxkIH0gZnJvbSAnLi4vLi4vZm9ybXMvaGVscGVycy9hYnN0cmFjdC1tYXQtZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IFZkU2VsZWN0T3B0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy92ZC1zZWxlY3Qtb3B0aW9uLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFZkU2VsZWN0VHJpZ2dlckRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdmQtc2VsZWN0LXRyaWdnZXIuZGlyZWN0aXZlJztcclxuXHJcbi8qKlxyXG4gKiBWZFNlbGVjdENvbXBvbmVudCBjbGFzc1xyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICd2ZC1zZWxlY3QnLFxyXG5cdHRlbXBsYXRlVXJsOiAnc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnc2VsZWN0LmNvbXBvbmVudC5zY3NzJ10sXHJcblx0cHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogVmRTZWxlY3RDb21wb25lbnQgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFZkU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RNYXRGb3JtRmllbGQ8YW55PiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgaHR0cCBzZXJ2aWNlIGZyb20gdG8gZ2V0IHRoZSBkYXRhXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQgPSBudWxsO1xyXG5cclxuXHQvKipcclxuXHQgKiBPcHRpb24gdGVtcGxhdGVcclxuXHQgKi9cclxuXHRAQ29udGVudENoaWxkKFZkU2VsZWN0T3B0aW9uRGlyZWN0aXZlKVxyXG5cdHB1YmxpYyBvcHRpb25UZW1wbGF0ZTogVmRTZWxlY3RPcHRpb25EaXJlY3RpdmU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRyaWdnZXIgdGVtcGxhdGVcclxuXHQgKi9cclxuXHRAQ29udGVudENoaWxkKFZkU2VsZWN0VHJpZ2dlckRpcmVjdGl2ZSlcclxuXHRwdWJsaWMgdHJpZ2dlclRlbXBsYXRlOiBWZFNlbGVjdFRyaWdnZXJEaXJlY3RpdmU7XHJcblxyXG5cdC8qKiBcclxuXHQgKiBUaGUgc2VsZWN0IGVsZW1lbnQuXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZChNYXRTZWxlY3QsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG5cdHB1YmxpYyBzZWxlY3RFbDogTWF0U2VsZWN0O1xyXG5cclxuXHQvKiogXHJcblx0ICogVGhlIHNlbGVjdCBlbGVtZW50LlxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGQoJ2ZpbHRlcklucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcblx0cHVibGljIGZpbHRlcklucHV0OiBFbGVtZW50UmVmO1xyXG5cclxuXHQvKipcclxuXHQgKiBNdWx0aXBsZSBzZWxlY3Qgb3B0aW9uXHJcblx0ICovXHJcblx0cHVibGljIF9tdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBNdWx0aXBsZSBzZWxlY3Qgb3B0aW9uXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRnZXQgbXVsdGlwbGUoKSB7IHJldHVybiB0aGlzLl9tdWx0aXBsZTsgfVxyXG5cdHNldCBtdWx0aXBsZShtdWx0aSkge1xyXG5cdFx0dGhpcy5fbXVsdGlwbGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkobXVsdGkpO1xyXG5cdFx0dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyB0aGUgY29udHJvbCBpcyBkaXNhYmxlZC5cclxuXHQgKiBAcGFyYW0gZGlzYWJsZWRcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBzZXQgZGlzYWJsZWQoZGlzYWJsZWQ6IGFueSkge1xyXG5cdFx0dGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkoZGlzYWJsZWQpO1xyXG5cdFx0aWYgKHRoaXMuZm9jdXNlZCkge1xyXG5cdFx0XHR0aGlzLmZvY3VzZWQgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyB0aGUgZGlzYWJsZWQuXHJcblx0ICogQHBhcmFtIGRpc2FibGVkXHJcblx0ICovXHJcblx0cHVibGljIGdldCBkaXNhYmxlZCgpIHtcclxuXHRcdGlmICh0aGlzLl9yZWFkb25seSkge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gc3VwZXIuZGlzYWJsZWQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTb3J0cyBvcHRpb25zXHJcblx0ICovXHJcblx0cHVibGljIF9zb3J0ZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBTb3J0cyBvcHRpb25zXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRnZXQgc29ydGVkKCkgeyByZXR1cm4gdGhpcy5fc29ydGVkOyB9XHJcblx0c2V0IHNvcnRlZChtdWx0aSkge1xyXG5cdFx0dGhpcy5fc29ydGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KG11bHRpKTtcclxuXHRcdHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIHRleHRQcmVmaXg/OiBhbnlcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyB0ZXh0UHJlZml4OiBzdHJpbmcgPSAnJztcclxuXHJcblx0LyoqIFxyXG5cdCAqIFdoZXRoZXIgdGhlIHNlbGVjdCBoYXMgYSB2YWx1ZS5cclxuXHQgKi9cclxuXHRnZXQgZW1wdHkoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5fcmVhZG9ubHkgPyAhdGhpcy5jdXJyZW50VmFsdWUgOiAhdGhpcy5zZWxlY3RFbD8uX3NlbGVjdGlvbk1vZGVsIHx8IHRoaXMuc2VsZWN0RWw/Ll9zZWxlY3Rpb25Nb2RlbD8uaXNFbXB0eSgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVwcmVzZW50cyBhIHZhbHVlIHRoYXQgY2hhbmdlcyBvdmVyIHRpbWUuIFxyXG5cdCAqIE9ic2VydmVycyBjYW4gc3Vic2NyaWJlIHRvIHRoZSBzdWJqZWN0IHRvIHJlY2VpdmUgcGRmIGZpbGUgY2hhbmdlc1xyXG5cdCAqL1xyXG5cdHByaXZhdGUgX2VuZHBvaW50Q2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuXHJcblx0LyoqXHJcblx0ICogX2VuZHBvaW50OiBzdHJpbmdcclxuXHQgKi9cclxuXHRwdWJsaWMgX2VuZHBvaW50OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgcGRmIGVuZHBvaW50XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRnZXQgZW5kcG9pbnQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2VuZHBvaW50OyB9XHJcblx0c2V0IGVuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuX2VuZHBvaW50ID0gZW5kcG9pbnQ7XHJcblx0XHR0aGlzLl9lbmRwb2ludENoYW5nZS5uZXh0KFt0aGlzLmVuZHBvaW50LCB0aGlzLnBhcmFtcywgdGhpcy5wcm9qZWN0aW9uXSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBfcGFyYW1zOiBhbnlcclxuXHQgKi9cclxuXHRwdWJsaWMgX3BhcmFtczogYW55ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIHBhcmFtczogYW55XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRnZXQgcGFyYW1zKCkgeyByZXR1cm4gdGhpcy5fcGFyYW1zOyB9XHJcblx0c2V0IHBhcmFtcyhwYXJhbXM6IGFueSkge1xyXG5cdFx0LyogUmVtb3ZlIGVtcHR5IHBhcmFtcyAqL1xyXG5cdFx0T2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcclxuXHRcdFx0aWYgKChwYXJhbXNba2V5XSA9PSBudWxsIHx8IHBhcmFtc1trZXldID09ICcnIHx8IHBhcmFtc1trZXldID09ICd1bmRlZmluZWQnKSkge1xyXG5cdFx0XHRcdGRlbGV0ZSBwYXJhbXNba2V5XTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0aWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuX3BhcmFtcykgIT09IEpTT04uc3RyaW5naWZ5KHBhcmFtcykpIHtcclxuXHRcdFx0dGhpcy5fcGFyYW1zID0gcGFyYW1zO1xyXG5cdFx0XHR0aGlzLl9lbmRwb2ludENoYW5nZS5uZXh0KFt0aGlzLmVuZHBvaW50LCB0aGlzLl9wYXJhbXMsIHRoaXMucHJvamVjdGlvbl0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogX3Byb2plY3Rpb246IGFueVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBfcHJvamVjdGlvbjogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBwcm9qZWN0aW9uOiBhbnlcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdGdldCBwcm9qZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5fcHJvamVjdGlvbjsgfVxyXG5cdHNldCBwcm9qZWN0aW9uKHByb2plY3Rpb246IHN0cmluZykge1xyXG5cdFx0dGhpcy5fcHJvamVjdGlvbiA9IHByb2plY3Rpb247XHJcblx0XHR0aGlzLl9lbmRwb2ludENoYW5nZS5uZXh0KFt0aGlzLmVuZHBvaW50LCB0aGlzLnBhcmFtcywgdGhpcy5wcm9qZWN0aW9uXSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIGN1cnJlbnQgdmFsdWVcclxuXHQgKi9cclxuXHRnZXQgY3VycmVudFZhbHVlKCk6IGFueSB7XHJcblx0XHRpZiAodGhpcy5tdWx0aXBsZSkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zPy5maWx0ZXIoKHg6IGFueSkgPT4gKHRoaXMuX3ZhbHVlIHx8IFtdKS5pbmNsdWRlcyh4W3RoaXMua2V5XSkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLm9wdGlvbnM/LmZpbHRlcigoeDogYW55KSA9PiB4W3RoaXMua2V5XSA9PSB0aGlzLl92YWx1ZSlbMF07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgbmFtZSBvZiB0aGUgZW5kcG9pbnRcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHByaXZhdGUgZW51bTogYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUga2V5XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMga2V5OiBhbnkgPSAnaWQnO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgdGV4dFxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIHRleHQ6IGFueSA9ICduYW1lJztcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIHByZWZpeFxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIHByZWZpeDogYW55ID0gJyc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIE9wdGlvbiBsaXN0XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgb3B0aW9uczogYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBmaWx0ZXJlZCBvcHRpb24gbGlzdFxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGZpbHRlcmVkT3B0aW9uczogYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBmaWx0ZXJhYmxlP1xyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGZpbHRlcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBjYWNoZT9cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBjYWNoZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHNvcnRCeT9cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBzb3J0Qnk6IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogbWFwcGVyOiBGdW5jdGlvblxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIG1hcHBlcjogRnVuY3Rpb247XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgZnVuY3Rpb24gdG8gY29tcGFyZSB0aGUgb3B0aW9uIHZhbHVlcyB3aXRoIHRoZSBzZWxlY3RlZCB2YWx1ZXMuIFRoZSBmaXJzdCBhcmd1bWVudFxyXG5cdCAqIGlzIGEgdmFsdWUgZnJvbSBhbiBvcHRpb24uIFRoZSBzZWNvbmQgaXMgYSB2YWx1ZSBmcm9tIHRoZSBzZWxlY3Rpb24uIEEgYm9vbGVhblxyXG5cdCAqIHNob3VsZCBiZSByZXR1cm5lZC5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdGdldCBjb21wYXJlV2l0aCgpOiAobzE6IGFueSwgbzI6IGFueSkgPT4gYm9vbGVhbiB7IHJldHVybiB0aGlzLl9jb21wYXJlV2l0aDsgfVxyXG5cdHNldCBjb21wYXJlV2l0aChmbjogKG8xOiBhbnksIG8yOiBhbnkpID0+IGJvb2xlYW4pIHsgdGhpcy5fY29tcGFyZVdpdGggPSBmbjsgfVxyXG5cdHByaXZhdGUgX2NvbXBhcmVXaXRoID0gKG8xOiBhbnksIG8yOiBhbnkpID0+IG8xID09PSBvMjtcclxuXHJcblx0LyoqXHJcblx0ICogY2hhbmdlPzogZnVuY3Rpb25cclxuXHQgKi9cclxuXHRAT3V0cHV0KCdjaGFuZ2UnKSBvblZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuXHQvKipcclxuXHQgKiBpdGVtQ2hhbmdlPzogZnVuY3Rpb25cclxuXHQgKi9cclxuXHRAT3V0cHV0KCdpdGVtQ2hhbmdlJykgb25JdGVtQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuXHQvKipcclxuXHQgKiBzZWxlY3RlZD86IGZ1bmN0aW9uXHJcblx0ICovXHJcblx0QE91dHB1dCgnc2VsZWN0ZWQnKSBvblNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuXHQvKipcclxuXHQgKiBpdGVtU2VsZWN0ZWQ/OiBmdW5jdGlvblxyXG5cdCAqL1xyXG5cdEBPdXRwdXQoJ2l0ZW1TZWxlY3RlZCcpIG9uSXRlbVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuXHQvKipcclxuXHQgKiBsYXVuY2g/OiBmdW5jdGlvblxyXG5cdCAqL1xyXG5cdEBPdXRwdXQoJ2xhdW5jaCcpIG9uTGF1bmNoOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuXHQvKipcclxuXHQgKiBzZWFyY2hGaWVsZD86IGZ1bmN0aW9uXHJcblx0ICovXHJcblx0QElucHV0KCkgc2VhcmNoRmllbGQ6ICh4OiBhbnkpID0+IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogQ29uc3RydWN0b3JcclxuXHQgKiBAcGFyYW0gbmdDb250cm9sIFxyXG5cdCAqIEBwYXJhbSBwYXJlbnRGb3JtIFxyXG5cdCAqIEBwYXJhbSBwYXJlbnRGb3JtR3JvdXAgXHJcblx0ICogQHBhcmFtIGRlZmF1bHRFcnJvclN0YXRlTWF0Y2hlciBcclxuXHQgKiBAcGFyYW0gZm9jdXNNb25pdG9yIFxyXG5cdCAqIEBwYXJhbSBlbGVtZW50UmVmIFxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsIEBPcHRpb25hbCgpIEBTZWxmKCkgbmdDb250cm9sOiBOZ0NvbnRyb2wsIEBPcHRpb25hbCgpIHBhcmVudEZvcm06IE5nRm9ybSwgQE9wdGlvbmFsKCkgcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmUsIGRlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIsIGZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLCBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XHJcblx0XHRzdXBlcihcInZkLXNlbGVjdFwiLCBuZ0NvbnRyb2wsIHBhcmVudEZvcm0sIHBhcmVudEZvcm1Hcm91cCwgZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyLCBmb2N1c01vbml0b3IsIGVsZW1lbnRSZWYpO1xyXG5cdFx0aWYgKCF0aGlzLmVudW0pIHtcclxuXHRcdFx0dGhpcy5odHRwID0gaW5qZWN0b3IuZ2V0KEh0dHBDbGllbnQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQncyBcclxuXHQgKiB2aWV3IGhhcyBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLlxyXG5cdCAqL1xyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuZW51bSkge1xyXG5cdFx0XHR0aGlzLmZpbHRlcmFibGUgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBFbnVtU2VydmljZS50b0FycmF5KHRoaXMuZW51bSwgdGhpcy5wcmVmaXgpO1xyXG5cclxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zKSkge1xyXG5cdFx0XHRcdHRoaXMuaGFuZGxlSXRlbVNlbGVjdGVkKHRoaXMudmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMpIHtcclxuXHRcdFx0dGhpcy5fZW5kcG9pbnRDaGFuZ2UucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5waXBlKGRlYm91bmNlVGltZSgxKSkuc3Vic2NyaWJlKF8gPT4ge1xyXG5cdFx0XHRcdGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcblx0XHRcdFx0aWYgKHRoaXMuY2FjaGUpIHtcclxuXHRcdFx0XHRcdGhlYWRlcnMuc2V0KCdDbGllbnQtQ2FjaGUnLCAnWWVzJyk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBJbml0IHBhcmFtcywgaWYgbnVsbCAqL1xyXG5cdFx0XHRcdGxldCBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wYXJhbXMgfHwge30pO1xyXG5cclxuXHRcdFx0XHQvKiBBZGQgcHJvamVjdGlvbiwgaWYgYW55ICovXHJcblx0XHRcdFx0aWYgKHRoaXMucHJvamVjdGlvbikge1xyXG5cdFx0XHRcdFx0cGFyYW1zLnByb2plY3Rpb24gPSB0aGlzLnByb2plY3Rpb247XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBBZGQgc29ydGluZyAqL1xyXG5cdFx0XHRcdGlmICghdGhpcy5wYXJhbXMuc29ydEJ5ICYmICh0aGlzLnNvcnRCeSB8fCB0aGlzLnNvcnRlZCkpIHtcclxuXHRcdFx0XHRcdHBhcmFtcy5zb3J0QnkgPSB0aGlzLnNvcnRCeSB8fCB0aGlzLnRleHQ7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBHZXQgcmVzdWx0IGZyb20gc2VydmVyICovXHJcblx0XHRcdFx0dGhpcy5odHRwLmdldCh0aGlzLmVuZHBvaW50LCB7IHBhcmFtczogcGFyYW1zLCBoZWFkZXJzOiBoZWFkZXJzIH0pXHJcblx0XHRcdFx0XHQucGlwZShtYXAoKHg6IGFueVtdKSA9PiB0aGlzLm1hcHBlciA/IHRoaXMubWFwcGVyKHgpIDogeCkpXHJcblx0XHRcdFx0XHQuc3Vic2NyaWJlKHggPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IHg7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMpKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVJdGVtU2VsZWN0ZWQodGhpcy52YWx1ZSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgY2FsbGJhY2sgbWV0aG9kIHRoYXQgaXMgaW52b2tlZCBpbW1lZGlhdGVseSBhZnRlclxyXG5cdCAqIEFuZ3VsYXIgaGFzIGNvbXBsZXRlZCBpbml0aWFsaXphdGlvbiBvZiBhIGNvbXBvbmVudCdzIHZpZXcuXHJcblx0ICogSXQgaXMgaW52b2tlZCBvbmx5IG9uY2Ugd2hlbiB0aGUgdmlldyBpcyBpbnN0YW50aWF0ZWQuXHJcblx0ICpcclxuXHQgKi9cclxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlbGVjdEVsPy5vcGVuZWRDaGFuZ2U/LnN1YnNjcmliZSh4ID0+IHtcclxuXHRcdFx0aWYgKHggJiYgdGhpcy5maWx0ZXJhYmxlKSB7XHJcblx0XHRcdFx0dGhpcy5maWx0ZXJJbnB1dD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldHMgY29udHJvbCBmb2N1c1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBmb2N1cygpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2VsZWN0RWw/LmZvY3VzKCk7XHJcblx0XHR0aGlzLnNlbGVjdEVsPy5vcGVuKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxyXG5cdCAqIEBwYXJhbSB2YWx1ZSBcclxuXHQgKi9cclxuXHR3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuXHRcdHN1cGVyLndyaXRlVmFsdWUodmFsdWUpO1xyXG5cdFx0dGhpcy5vblNlbGVjdGVkLmVtaXQodmFsdWUpO1xyXG5cclxuXHRcdGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucykpIHtcclxuXHRcdFx0dGhpcy5oYW5kbGVJdGVtU2VsZWN0ZWQodGhpcy52YWx1ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCF0aGlzLnZhbHVlKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0RWw/LndyaXRlVmFsdWUobnVsbCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBNZXRob2QgZXhlY3V0ZWQgd2hlbiBhbiBvcHRpb24gY2hhbmdlc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBoYW5kbGVDaGFuZ2UoJGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuXHRcdHRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KCRldmVudCk7XHJcblx0XHR0aGlzLmhhbmRsZUl0ZW1DaGFuZ2UoJGV2ZW50LnZhbHVlKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEhhbmRsZXMgaXRlbSBjaGFuZ2VzXHJcblx0ICogQHBhcmFtIHZhbHVlIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBoYW5kbGVJdGVtU2VsZWN0ZWQodmFsdWU6IGFueSk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcclxuXHRcdFx0dGhpcy5vbkl0ZW1TZWxlY3RlZC5lbWl0KHRoaXMub3B0aW9ucy5maWx0ZXIoKHg6IGFueSkgPT4gKHZhbHVlIHx8IFtdKS5pbmNsdWRlcyh4W3RoaXMua2V5XSkpKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMub25JdGVtU2VsZWN0ZWQuZW1pdCh0aGlzLm9wdGlvbnMuZmlsdGVyKCh4OiBhbnkpID0+IHhbdGhpcy5rZXldID09IHZhbHVlKVswXSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBIYW5kbGVzIGl0ZW0gY2hhbmdlc1xyXG5cdCAqIEBwYXJhbSB2YWx1ZSBcclxuXHQgKi9cclxuXHRwdWJsaWMgaGFuZGxlSXRlbUNoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5tdWx0aXBsZSkge1xyXG5cdFx0XHR0aGlzLm9uSXRlbUNoYW5nZS5lbWl0KHRoaXMub3B0aW9ucy5maWx0ZXIoKHg6IGFueSkgPT4gKHZhbHVlIHx8IFtdKS5pbmNsdWRlcyh4W3RoaXMua2V5XSkpKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMub25JdGVtQ2hhbmdlLmVtaXQodGhpcy5vcHRpb25zLmZpbHRlcigoeDogYW55KSA9PiB4W3RoaXMua2V5XSA9PSB2YWx1ZSlbMF0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSGFuZGxlcyBsYXVuY2ggYnV0dG9uIGNsaWNrXHJcblx0ICogQHBhcmFtIHZhbHVlIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBoYW5kbGVMYXVuY2hDbGlja2VkKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLm11bHRpcGxlKSB7XHJcblx0XHRcdHRoaXMub25MYXVuY2guZW1pdCh0aGlzLm9wdGlvbnMuZmlsdGVyKCh4OiBhbnkpID0+ICh2YWx1ZSB8fCBbXSkuaW5jbHVkZXMoeFt0aGlzLmtleV0pKSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLm9uTGF1bmNoLmVtaXQodGhpcy5vcHRpb25zLmZpbHRlcigoeDogYW55KSA9PiB4W3RoaXMua2V5XSA9PSB2YWx1ZSlbMF0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSGFuZGVscyBmaWx0ZXIgZXZlbnRcclxuXHQgKiBAcGFyYW0gc2VhcmNoVGV4dCBcclxuXHQgKi9cclxuXHRwdWJsaWMgaGFuZGxlRmlsdGVyKHNlYXJjaFRleHQ6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuc2VhcmNoRmllbGQpIHtcclxuXHRcdFx0dGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKCh4OiBhbnkpID0+IHRoaXMuc2VhcmNoRmllbGQoeCk/LnRvTG93ZXJDYXNlKCkuc2VhcmNoKHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSkgPiAtMSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIoKHg6IGFueSkgPT4geFt0aGlzLnRleHRdPy50b0xvd2VyQ2FzZSgpLnNlYXJjaChzZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpID4gLTEpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyB0aGUgdmFsdWVzIG9mIHRoZSBzZWxlY3RlZCBvcHRpb25zIGZvciB0aGUgdHJpZ2dlclxyXG5cdCAqIEBwYXJhbSBvcHRpb25zIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBnZXRUcmlnZ2VyVmFsdWVzKG9wdGlvbnM6IE1hdE9wdGlvbiB8IE1hdE9wdGlvbltdKTogYW55IHtcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XHJcblx0XHRcdHJldHVybiAob3B0aW9ucyB8fCBbXSk/Lm1hcCh4ID0+IHRoaXMubWFwcGVyID8geC52YWx1ZSA6IHgudmlld1ZhbHVlKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiB0aGlzLm1hcHBlciA/IG9wdGlvbnM/LnZhbHVlIDogb3B0aW9ucz8udmlld1ZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxufSIsIjxtYXQtc2VsZWN0IFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIGkxOG4tcGxhY2Vob2xkZXIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiICNzZWxlY3Q9XCJtYXRTZWxlY3RcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cImhhbmRsZUNoYW5nZSgkZXZlbnQpXCIgKm5nSWY9XCIhcmVhZG9ubHlcIiBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIiBbY29tcGFyZVdpdGhdPVwiY29tcGFyZVdpdGhcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBmbGV4PlxyXG4gICAgPCEtLSAjcmVnaW9uIEZpbHRlciBpbnB1dCAtLT5cclxuICAgIDxpbnB1dCAjZmlsdGVySW5wdXQgKm5nSWY9XCJmaWx0ZXJhYmxlXCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkZpbHRlci4uLlwiIGNsYXNzPVwidmQtc2VsZWN0LWZpbHRlclwiIChrZXl1cCk9XCJoYW5kbGVGaWx0ZXIoJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cclxuICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbiAgICA8IS0tICNyZWdpb24gVHJpZ2dlciBmb3IgbGF1bmNoIGJ1dHRvbiAtLT5cclxuICAgIDxtYXQtc2VsZWN0LXRyaWdnZXIgKm5nSWY9XCJvbkxhdW5jaD8ub2JzZXJ2ZXJzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPHNwYW4+e3tnZXRUcmlnZ2VyVmFsdWVzKHNlbGVjdC5zZWxlY3RlZCl9fTwvc3Bhbj5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ2ZC1zZWxlY3QtbGF1bmNoXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgaGFuZGxlTGF1bmNoQ2xpY2tlZCh2YWx1ZSlcIj5sYXVuY2g8L21hdC1pY29uPlxyXG4gICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG4gICAgPCEtLSAjcmVnaW9uIEN1c3RvbSB0cmlnZ2VyIHRlbXBsYXRlIC0tPlxyXG4gICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj1cIiFvbkxhdW5jaD8ub2JzZXJ2ZXJzPy5sZW5ndGggJiYgdHJpZ2dlclRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInRyaWdnZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmlnZ2VyVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdHJpZ2dlcjogZ2V0VHJpZ2dlclZhbHVlcyhzZWxlY3Quc2VsZWN0ZWQpIH1cIj48L25nLXRlbXBsYXRlPlxyXG4gICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG4gICAgPCEtLSAjcmVnaW9uIE9wdGlvbiB0ZW1wbGF0ZSBhcyB0cmlnZ2VyIC0tPlxyXG4gICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj1cIiFvbkxhdW5jaD8ub2JzZXJ2ZXJzPy5sZW5ndGggJiYgIXRyaWdnZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWYgJiYgb3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwib3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdHJpZ2dlcjogZ2V0VHJpZ2dlclZhbHVlcyhzZWxlY3Quc2VsZWN0ZWQpIH1cIj48L25nLXRlbXBsYXRlPlxyXG4gICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG4gICAgPCEtLSAjcmVnaW9uIERlZmF1bHQgb3B0aW9uIC0tPlxyXG4gICAgPG1hdC1vcHRpb24gY2xhc3M9XCJ0Yy1ncmV5LTUwMFwiICpuZ0lmPVwiIW11bHRpcGxlXCIgaTE4bj1cIkBAcGxlYXNlU2VsZWN0XCI+LS0tIFBsZWFzZSBTZWxlY3QgLS0tPC9tYXQtb3B0aW9uPlxyXG4gICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICAgIDwhLS0gI3JlZ2lvbiBPcHRpb25zIC0tPlxyXG4gICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb24gbGV0LWZpcnN0PVwiZmlyc3RcIiBuZ0ZvciBbbmdGb3JPZl09XCJmaWx0ZXJlZE9wdGlvbnNcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwibWFwcGVyID8gb3B0aW9uIDogb3B0aW9uW2tleV1cIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhb3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgaTE4bj1cIkBAc2VsZWN0aW9uXCI+e29wdGlvblt0ZXh0XSwgc2VsZWN0LCBvcHRpb24ge29wdGlvbn0gb3RoZXIge3t7b3B0aW9uW3RleHRdfX19fTwvc3Bhbj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwib3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgb3B0aW9uOiBvcHRpb24gfVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuPC9tYXQtc2VsZWN0PlxyXG5cclxuPCEtLSAjcmVnaW9uIFJlYWQgb25seSB2YWx1ZSAtLT5cclxuPGRpdiAqbmdJZj1cInJlYWRvbmx5XCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFZhbHVlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJlYWRvbmx5LXZhbHVlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIW9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZiAmJiAhdHJpZ2dlclRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbXVsdGlwbGVcIiBpMThuPVwiQEBzZWxlY3Rpb25cIj57Y3VycmVudFZhbHVlW3RleHRdLCBzZWxlY3QsIG9wdGlvbiB7b3B0aW9ufSBvdGhlciB7e3tjdXJyZW50VmFsdWVbdGV4dF19fX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm11bHRpcGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IG9wdGlvblZhbHVlIG9mIGN1cnJlbnRWYWx1ZTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGkxOG49XCJAQHNlbGVjdGlvblwiPntvcHRpb25WYWx1ZVt0ZXh0XSwgc2VsZWN0LCBvcHRpb24ge29wdGlvbn0gb3RoZXIge3t7b3B0aW9uVmFsdWVbdGV4dF19fX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsYXN0XCI+LCZuYnNwOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ0cmlnZ2VyVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJpZ2dlclRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHRyaWdnZXI6IGdldFRyaWdnZXJWYWx1ZXMoY3VycmVudFZhbHVlKSB9XCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwib3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmICYmICF0cmlnZ2VyVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgb3B0aW9uOiBnZXRUcmlnZ2VyVmFsdWVzKGN1cnJlbnRWYWx1ZSkgfVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib25MYXVuY2g/Lm9ic2VydmVycz8ubGVuZ3RoID4gMFwiIGNsYXNzPVwidmQtc2VsZWN0LWxhdW5jaC1yZWFkb25seVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGhhbmRsZUxhdW5jaENsaWNrZWQodmFsdWUpXCI+bGF1bmNoPC9tYXQtaWNvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIiFjdXJyZW50VmFsdWVcIj4mbmJzcDs8L2Rpdj5cclxuPC9kaXY+XHJcbjwhLS0gI2VuZHJlZ2lvbiAtLT4iXX0=
422
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL3NlbGVjdC9jb21wb25lbnRzL3NlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9zZWxlY3QvY29tcG9uZW50cy9zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckosT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUs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SztnQkFPQyxNQUFNO3NCQURaLEtBQUs7Z0JBT0MsT0FBTztzQkFEYixLQUFLO2dCQU9DLGVBQWU7c0JBRHJCLEtBQUs7Z0JBT0MsVUFBVTtzQkFEaEIsS0FBSztnQkFPQyxLQUFLO3NCQURYLEtBQUs7Z0JBT0MsTUFBTTtzQkFEWixLQUFLO2dCQU9DLE1BQU07c0JBRFosS0FBSztnQkFTRixXQUFXO3NCQURkLEtBQUs7Z0JBUVksYUFBYTtzQkFBOUIsTUFBTTt1QkFBQyxRQUFRO2dCQUtNLFlBQVk7c0JBQWpDLE1BQU07dUJBQUMsWUFBWTtnQkFLQSxVQUFVO3NCQUE3QixNQUFNO3VCQUFDLFVBQVU7Z0JBS00sY0FBYztzQkFBckMsTUFBTTt1QkFBQyxjQUFjO2dCQUtKLFFBQVE7c0JBQXpCLE1BQU07dUJBQUMsUUFBUTtnQkFLUCxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xyXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPcHRpb25hbCwgT3V0cHV0LCBTZWxmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwRGlyZWN0aXZlLCBOZ0NvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRXJyb3JTdGF0ZU1hdGNoZXIsIE1hdE9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEVudW1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2NvbW1vbi5tb2R1bGUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdE1hdEZvcm1GaWVsZCB9IGZyb20gJy4uLy4uL2Zvcm1zL2hlbHBlcnMvYWJzdHJhY3QtbWF0LWZvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBWZFNlbGVjdE9wdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdmQtc2VsZWN0LW9wdGlvbi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBWZFNlbGVjdFRyaWdnZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3ZkLXNlbGVjdC10cmlnZ2VyLmRpcmVjdGl2ZSc7XHJcblxyXG4vKipcclxuICogVmRTZWxlY3RDb21wb25lbnQgY2xhc3NcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAndmQtc2VsZWN0JyxcclxuXHR0ZW1wbGF0ZVVybDogJ3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJ3NlbGVjdC5jb21wb25lbnQuc2NzcyddLFxyXG5cdHByb3ZpZGVyczogW3sgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IFZkU2VsZWN0Q29tcG9uZW50IH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWZFNlbGVjdENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0TWF0Rm9ybUZpZWxkPGFueT4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGh0dHAgc2VydmljZSBmcm9tIHRvIGdldCB0aGUgZGF0YVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50ID0gbnVsbDtcclxuXHJcblx0LyoqXHJcblx0ICogT3B0aW9uIHRlbXBsYXRlXHJcblx0ICovXHJcblx0QENvbnRlbnRDaGlsZChWZFNlbGVjdE9wdGlvbkRpcmVjdGl2ZSlcclxuXHRwdWJsaWMgb3B0aW9uVGVtcGxhdGU6IFZkU2VsZWN0T3B0aW9uRGlyZWN0aXZlO1xyXG5cclxuXHQvKipcclxuXHQgKiBUcmlnZ2VyIHRlbXBsYXRlXHJcblx0ICovXHJcblx0QENvbnRlbnRDaGlsZChWZFNlbGVjdFRyaWdnZXJEaXJlY3RpdmUpXHJcblx0cHVibGljIHRyaWdnZXJUZW1wbGF0ZTogVmRTZWxlY3RUcmlnZ2VyRGlyZWN0aXZlO1xyXG5cclxuXHQvKiogXHJcblx0ICogVGhlIHNlbGVjdCBlbGVtZW50LlxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGQoTWF0U2VsZWN0LCB7IHN0YXRpYzogZmFsc2UgfSlcclxuXHRwdWJsaWMgc2VsZWN0RWw6IE1hdFNlbGVjdDtcclxuXHJcblx0LyoqIFxyXG5cdCAqIFRoZSBzZWxlY3QgZWxlbWVudC5cclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKCdmaWx0ZXJJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG5cdHB1YmxpYyBmaWx0ZXJJbnB1dDogRWxlbWVudFJlZjtcclxuXHJcblx0LyoqXHJcblx0ICogTXVsdGlwbGUgc2VsZWN0IG9wdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBfbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogTXVsdGlwbGUgc2VsZWN0IG9wdGlvblxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0Z2V0IG11bHRpcGxlKCkgeyByZXR1cm4gdGhpcy5fbXVsdGlwbGU7IH1cclxuXHRzZXQgbXVsdGlwbGUobXVsdGkpIHtcclxuXHRcdHRoaXMuX211bHRpcGxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KG11bHRpKTtcclxuXHRcdHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuXHJcblx0ICogQHBhcmFtIGRpc2FibGVkXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgc2V0IGRpc2FibGVkKGRpc2FibGVkOiBhbnkpIHtcclxuXHRcdHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGRpc2FibGVkKTtcclxuXHRcdGlmICh0aGlzLmZvY3VzZWQpIHtcclxuXHRcdFx0dGhpcy5mb2N1c2VkID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldHMgdGhlIGRpc2FibGVkLlxyXG5cdCAqIEBwYXJhbSBkaXNhYmxlZFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBnZXQgZGlzYWJsZWQoKSB7XHJcblx0XHRpZiAodGhpcy5fcmVhZG9ubHkpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHN1cGVyLmRpc2FibGVkO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU29ydHMgb3B0aW9uc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBfc29ydGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogU29ydHMgb3B0aW9uc1xyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0Z2V0IHNvcnRlZCgpIHsgcmV0dXJuIHRoaXMuX3NvcnRlZDsgfVxyXG5cdHNldCBzb3J0ZWQobXVsdGkpIHtcclxuXHRcdHRoaXMuX3NvcnRlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShtdWx0aSk7XHJcblx0XHR0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiB0ZXh0UHJlZml4PzogYW55XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgdGV4dFByZWZpeDogc3RyaW5nID0gJyc7XHJcblxyXG5cdC8qKiBcclxuXHQgKiBXaGV0aGVyIHRoZSBzZWxlY3QgaGFzIGEgdmFsdWUuXHJcblx0ICovXHJcblx0Z2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3JlYWRvbmx5ID8gIXRoaXMuY3VycmVudFZhbHVlIDogIXRoaXMuc2VsZWN0RWw/Ll9zZWxlY3Rpb25Nb2RlbCB8fCB0aGlzLnNlbGVjdEVsPy5fc2VsZWN0aW9uTW9kZWw/LmlzRW1wdHkoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlcHJlc2VudHMgYSB2YWx1ZSB0aGF0IGNoYW5nZXMgb3ZlciB0aW1lLiBcclxuXHQgKiBPYnNlcnZlcnMgY2FuIHN1YnNjcmliZSB0byB0aGUgc3ViamVjdCB0byByZWNlaXZlIHBkZiBmaWxlIGNoYW5nZXNcclxuXHQgKi9cclxuXHRwcml2YXRlIF9lbmRwb2ludENoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIF9lbmRwb2ludDogc3RyaW5nXHJcblx0ICovXHJcblx0cHVibGljIF9lbmRwb2ludDogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIHBkZiBlbmRwb2ludFxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0Z2V0IGVuZHBvaW50KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9lbmRwb2ludDsgfVxyXG5cdHNldCBlbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XHJcblx0XHR0aGlzLl9lbmRwb2ludCA9IGVuZHBvaW50O1xyXG5cdFx0dGhpcy5fZW5kcG9pbnRDaGFuZ2UubmV4dChbdGhpcy5lbmRwb2ludCwgdGhpcy5wYXJhbXMsIHRoaXMucHJvamVjdGlvbl0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogX3BhcmFtczogYW55XHJcblx0ICovXHJcblx0cHVibGljIF9wYXJhbXM6IGFueSA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBwYXJhbXM6IGFueVxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0Z2V0IHBhcmFtcygpIHsgcmV0dXJuIHRoaXMuX3BhcmFtczsgfVxyXG5cdHNldCBwYXJhbXMocGFyYW1zOiBhbnkpIHtcclxuXHRcdC8qIFJlbW92ZSBlbXB0eSBwYXJhbXMgKi9cclxuXHRcdE9iamVjdC5rZXlzKHBhcmFtcykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcblx0XHRcdGlmICgocGFyYW1zW2tleV0gPT0gbnVsbCB8fCBwYXJhbXNba2V5XSA9PSAnJyB8fCBwYXJhbXNba2V5XSA9PSAndW5kZWZpbmVkJykpIHtcclxuXHRcdFx0XHRkZWxldGUgcGFyYW1zW2tleV07XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLl9wYXJhbXMpICE9PSBKU09OLnN0cmluZ2lmeShwYXJhbXMpKSB7XHJcblx0XHRcdHRoaXMuX3BhcmFtcyA9IHBhcmFtcztcclxuXHRcdFx0dGhpcy5fZW5kcG9pbnRDaGFuZ2UubmV4dChbdGhpcy5lbmRwb2ludCwgdGhpcy5fcGFyYW1zLCB0aGlzLnByb2plY3Rpb25dKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIF9wcm9qZWN0aW9uOiBhbnlcclxuXHQgKi9cclxuXHRwdWJsaWMgX3Byb2plY3Rpb246IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogcHJvamVjdGlvbjogYW55XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRnZXQgcHJvamVjdGlvbigpIHsgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb247IH1cclxuXHRzZXQgcHJvamVjdGlvbihwcm9qZWN0aW9uOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuX3Byb2plY3Rpb24gPSBwcm9qZWN0aW9uO1xyXG5cdFx0dGhpcy5fZW5kcG9pbnRDaGFuZ2UubmV4dChbdGhpcy5lbmRwb2ludCwgdGhpcy5wYXJhbXMsIHRoaXMucHJvamVjdGlvbl0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyBjdXJyZW50IHZhbHVlXHJcblx0ICovXHJcblx0Z2V0IGN1cnJlbnRWYWx1ZSgpOiBhbnkge1xyXG5cdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucz8uZmlsdGVyKCh4OiBhbnkpID0+ICh0aGlzLl92YWx1ZSB8fCBbXSkuaW5jbHVkZXMoeFt0aGlzLmtleV0pKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zPy5maWx0ZXIoKHg6IGFueSkgPT4geFt0aGlzLmtleV0gPT0gdGhpcy5fdmFsdWUpWzBdO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGhlIG5hbWUgb2YgdGhlIGVuZHBvaW50XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwcml2YXRlIGVudW06IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGtleVxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGtleTogYW55ID0gJ2lkJztcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIHRleHRcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyB0ZXh0OiBhbnkgPSAnbmFtZSc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBwcmVmaXhcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBwcmVmaXg6IGFueSA9ICcnO1xyXG5cclxuXHQvKipcclxuXHQgKiBPcHRpb24gbGlzdFxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIG9wdGlvbnM6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogZmlsdGVyZWQgb3B0aW9uIGxpc3RcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBmaWx0ZXJlZE9wdGlvbnM6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogZmlsdGVyYWJsZT9cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBmaWx0ZXJhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogY2FjaGU/XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgY2FjaGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBzb3J0Qnk/XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgc29ydEJ5OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIG1hcHBlcjogRnVuY3Rpb25cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBtYXBwZXI6IEZ1bmN0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIGZ1bmN0aW9uIHRvIGNvbXBhcmUgdGhlIG9wdGlvbiB2YWx1ZXMgd2l0aCB0aGUgc2VsZWN0ZWQgdmFsdWVzLiBUaGUgZmlyc3QgYXJndW1lbnRcclxuXHQgKiBpcyBhIHZhbHVlIGZyb20gYW4gb3B0aW9uLiBUaGUgc2Vjb25kIGlzIGEgdmFsdWUgZnJvbSB0aGUgc2VsZWN0aW9uLiBBIGJvb2xlYW5cclxuXHQgKiBzaG91bGQgYmUgcmV0dXJuZWQuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRnZXQgY29tcGFyZVdpdGgoKTogKG8xOiBhbnksIG8yOiBhbnkpID0+IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fY29tcGFyZVdpdGg7IH1cclxuXHRzZXQgY29tcGFyZVdpdGgoZm46IChvMTogYW55LCBvMjogYW55KSA9PiBib29sZWFuKSB7IHRoaXMuX2NvbXBhcmVXaXRoID0gZm47IH1cclxuXHRwcml2YXRlIF9jb21wYXJlV2l0aCA9IChvMTogYW55LCBvMjogYW55KSA9PiBvMSA9PT0gbzI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIGNoYW5nZT86IGZ1bmN0aW9uXHJcblx0ICovXHJcblx0QE91dHB1dCgnY2hhbmdlJykgb25WYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcblx0LyoqXHJcblx0ICogaXRlbUNoYW5nZT86IGZ1bmN0aW9uXHJcblx0ICovXHJcblx0QE91dHB1dCgnaXRlbUNoYW5nZScpIG9uSXRlbUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcblx0LyoqXHJcblx0ICogc2VsZWN0ZWQ/OiBmdW5jdGlvblxyXG5cdCAqL1xyXG5cdEBPdXRwdXQoJ3NlbGVjdGVkJykgb25TZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcblx0LyoqXHJcblx0ICogaXRlbVNlbGVjdGVkPzogZnVuY3Rpb25cclxuXHQgKi9cclxuXHRAT3V0cHV0KCdpdGVtU2VsZWN0ZWQnKSBvbkl0ZW1TZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcblx0LyoqXHJcblx0ICogbGF1bmNoPzogZnVuY3Rpb25cclxuXHQgKi9cclxuXHRAT3V0cHV0KCdsYXVuY2gnKSBvbkxhdW5jaDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcblx0LyoqXHJcblx0ICogc2VhcmNoRmllbGQ/OiBmdW5jdGlvblxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHNlYXJjaEZpZWxkOiAoeDogYW55KSA9PiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnN0cnVjdG9yXHJcblx0ICogQHBhcmFtIG5nQ29udHJvbCBcclxuXHQgKiBAcGFyYW0gcGFyZW50Rm9ybSBcclxuXHQgKiBAcGFyYW0gcGFyZW50Rm9ybUdyb3VwIFxyXG5cdCAqIEBwYXJhbSBkZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIgXHJcblx0ICogQHBhcmFtIGZvY3VzTW9uaXRvciBcclxuXHQgKiBAcGFyYW0gZWxlbWVudFJlZiBcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLCBAT3B0aW9uYWwoKSBAU2VsZigpIG5nQ29udHJvbDogTmdDb250cm9sLCBAT3B0aW9uYWwoKSBwYXJlbnRGb3JtOiBOZ0Zvcm0sIEBPcHRpb25hbCgpIHBhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwRGlyZWN0aXZlLCBkZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLCBmb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvciwgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xyXG5cdFx0c3VwZXIoXCJ2ZC1zZWxlY3RcIiwgbmdDb250cm9sLCBwYXJlbnRGb3JtLCBwYXJlbnRGb3JtR3JvdXAsIGRlZmF1bHRFcnJvclN0YXRlTWF0Y2hlciwgZm9jdXNNb25pdG9yLCBlbGVtZW50UmVmKTtcclxuXHRcdGlmICghdGhpcy5lbnVtKSB7XHJcblx0XHRcdHRoaXMuaHR0cCA9IGluamVjdG9yLmdldChIdHRwQ2xpZW50KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIGEgY29tcG9uZW50J3MgXHJcblx0ICogdmlldyBoYXMgYmVlbiBmdWxseSBpbml0aWFsaXplZC5cclxuXHQgKi9cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmVudW0pIHtcclxuXHRcdFx0dGhpcy5maWx0ZXJhYmxlID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zID0gRW51bVNlcnZpY2UudG9BcnJheSh0aGlzLmVudW0sIHRoaXMucHJlZml4KTtcclxuXHJcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucykpIHtcclxuXHRcdFx0XHR0aGlzLmhhbmRsZUl0ZW1TZWxlY3RlZCh0aGlzLnZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmICghdGhpcy5vcHRpb25zKSB7XHJcblx0XHRcdHRoaXMuX2VuZHBvaW50Q2hhbmdlLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSkucGlwZShkZWJvdW5jZVRpbWUoMSkpLnN1YnNjcmliZShfID0+IHtcclxuXHRcdFx0XHRsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG5cdFx0XHRcdGlmICh0aGlzLmNhY2hlKSB7XHJcblx0XHRcdFx0XHRoZWFkZXJzLnNldCgnQ2xpZW50LUNhY2hlJywgJ1llcycpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyogSW5pdCBwYXJhbXMsIGlmIG51bGwgKi9cclxuXHRcdFx0XHRsZXQgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcGFyYW1zIHx8IHt9KTtcclxuXHJcblx0XHRcdFx0LyogQWRkIHByb2plY3Rpb24sIGlmIGFueSAqL1xyXG5cdFx0XHRcdGlmICh0aGlzLnByb2plY3Rpb24pIHtcclxuXHRcdFx0XHRcdHBhcmFtcy5wcm9qZWN0aW9uID0gdGhpcy5wcm9qZWN0aW9uO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyogQWRkIHNvcnRpbmcgKi9cclxuXHRcdFx0XHRpZiAoIXRoaXMucGFyYW1zLnNvcnRCeSAmJiAodGhpcy5zb3J0QnkgfHwgdGhpcy5zb3J0ZWQpKSB7XHJcblx0XHRcdFx0XHRwYXJhbXMuc29ydEJ5ID0gdGhpcy5zb3J0QnkgfHwgdGhpcy50ZXh0O1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyogR2V0IHJlc3VsdCBmcm9tIHNlcnZlciAqL1xyXG5cdFx0XHRcdHRoaXMuaHR0cC5nZXQodGhpcy5lbmRwb2ludCwgeyBwYXJhbXM6IHBhcmFtcywgaGVhZGVyczogaGVhZGVycyB9KVxyXG5cdFx0XHRcdFx0LnBpcGUobWFwKCh4OiBhbnlbXSkgPT4gdGhpcy5tYXBwZXIgPyB0aGlzLm1hcHBlcih4KSA6IHgpKVxyXG5cdFx0XHRcdFx0LnN1YnNjcmliZSh4ID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB4O1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zKSkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlSXRlbVNlbGVjdGVkKHRoaXMudmFsdWUpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIGNhbGxiYWNrIG1ldGhvZCB0aGF0IGlzIGludm9rZWQgaW1tZWRpYXRlbHkgYWZ0ZXJcclxuXHQgKiBBbmd1bGFyIGhhcyBjb21wbGV0ZWQgaW5pdGlhbGl6YXRpb24gb2YgYSBjb21wb25lbnQncyB2aWV3LlxyXG5cdCAqIEl0IGlzIGludm9rZWQgb25seSBvbmNlIHdoZW4gdGhlIHZpZXcgaXMgaW5zdGFudGlhdGVkLlxyXG5cdCAqXHJcblx0ICovXHJcblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zZWxlY3RFbD8ub3BlbmVkQ2hhbmdlPy5zdWJzY3JpYmUoeCA9PiB7XHJcblx0XHRcdGlmICh4ICYmIHRoaXMuZmlsdGVyYWJsZSkge1xyXG5cdFx0XHRcdHRoaXMuZmlsdGVySW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXRzIGNvbnRyb2wgZm9jdXNcclxuXHQgKi9cclxuXHRwdWJsaWMgZm9jdXMoKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlbGVjdEVsPy5mb2N1cygpO1xyXG5cdFx0dGhpcy5zZWxlY3RFbD8ub3BlbigpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcclxuXHQgKiBAcGFyYW0gdmFsdWUgXHJcblx0ICovXHJcblx0d3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XHJcblx0XHRzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcclxuXHRcdHRoaXMub25TZWxlY3RlZC5lbWl0KHZhbHVlKTtcclxuXHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMpKSB7XHJcblx0XHRcdHRoaXMuaGFuZGxlSXRlbVNlbGVjdGVkKHRoaXMudmFsdWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghdGhpcy52YWx1ZSkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdEVsPy53cml0ZVZhbHVlKG51bGwpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTWV0aG9kIGV4ZWN1dGVkIHdoZW4gYW4gb3B0aW9uIGNoYW5nZXNcclxuXHQgKi9cclxuXHRwdWJsaWMgaGFuZGxlQ2hhbmdlKCRldmVudDogYW55KTogdm9pZCB7XHJcblx0XHR0aGlzLm9uVmFsdWVDaGFuZ2UuZW1pdCgkZXZlbnQpO1xyXG5cdFx0dGhpcy5oYW5kbGVJdGVtQ2hhbmdlKCRldmVudC52YWx1ZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBIYW5kbGVzIGl0ZW0gY2hhbmdlc1xyXG5cdCAqIEBwYXJhbSB2YWx1ZSBcclxuXHQgKi9cclxuXHRwdWJsaWMgaGFuZGxlSXRlbVNlbGVjdGVkKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLm11bHRpcGxlKSB7XHJcblx0XHRcdHRoaXMub25JdGVtU2VsZWN0ZWQuZW1pdCh0aGlzLm9wdGlvbnMuZmlsdGVyKCh4OiBhbnkpID0+ICh2YWx1ZSB8fCBbXSkuaW5jbHVkZXMoeFt0aGlzLmtleV0pKSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLm9uSXRlbVNlbGVjdGVkLmVtaXQodGhpcy5vcHRpb25zLmZpbHRlcigoeDogYW55KSA9PiB4W3RoaXMua2V5XSA9PSB2YWx1ZSlbMF0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSGFuZGxlcyBpdGVtIGNoYW5nZXNcclxuXHQgKiBAcGFyYW0gdmFsdWUgXHJcblx0ICovXHJcblx0cHVibGljIGhhbmRsZUl0ZW1DaGFuZ2UodmFsdWU6IGFueSk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcclxuXHRcdFx0dGhpcy5vbkl0ZW1DaGFuZ2UuZW1pdCh0aGlzLm9wdGlvbnMuZmlsdGVyKCh4OiBhbnkpID0+ICh2YWx1ZSB8fCBbXSkuaW5jbHVkZXMoeFt0aGlzLmtleV0pKSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLm9uSXRlbUNoYW5nZS5lbWl0KHRoaXMub3B0aW9ucy5maWx0ZXIoKHg6IGFueSkgPT4geFt0aGlzLmtleV0gPT0gdmFsdWUpWzBdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEhhbmRsZXMgbGF1bmNoIGJ1dHRvbiBjbGlja1xyXG5cdCAqIEBwYXJhbSB2YWx1ZSBcclxuXHQgKi9cclxuXHRwdWJsaWMgaGFuZGxlTGF1bmNoQ2xpY2tlZCh2YWx1ZTogYW55KTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5tdWx0aXBsZSkge1xyXG5cdFx0XHR0aGlzLm9uTGF1bmNoLmVtaXQodGhpcy5vcHRpb25zLmZpbHRlcigoeDogYW55KSA9PiAodmFsdWUgfHwgW10pLmluY2x1ZGVzKHhbdGhpcy5rZXldKSkpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5vbkxhdW5jaC5lbWl0KHRoaXMub3B0aW9ucy5maWx0ZXIoKHg6IGFueSkgPT4geFt0aGlzLmtleV0gPT0gdmFsdWUpWzBdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEhhbmRlbHMgZmlsdGVyIGV2ZW50XHJcblx0ICogQHBhcmFtIHNlYXJjaFRleHQgXHJcblx0ICovXHJcblx0cHVibGljIGhhbmRsZUZpbHRlcihzZWFyY2hUZXh0OiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLnNlYXJjaEZpZWxkKSB7XHJcblx0XHRcdHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcigoeDogYW55KSA9PiB0aGlzLnNlYXJjaEZpZWxkKHgpPy50b0xvd2VyQ2FzZSgpLnNlYXJjaChzZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpID4gLTEpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKCh4OiBhbnkpID0+IHhbdGhpcy50ZXh0XT8udG9Mb3dlckNhc2UoKS5zZWFyY2goc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKSA+IC0xKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgdGhlIHZhbHVlcyBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBmb3IgdGhlIHRyaWdnZXJcclxuXHQgKiBAcGFyYW0gb3B0aW9ucyBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0VHJpZ2dlclZhbHVlcyhvcHRpb25zOiBNYXRPcHRpb24gfCBNYXRPcHRpb25bXSk6IGFueSB7XHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xyXG5cdFx0XHRyZXR1cm4gKG9wdGlvbnMgfHwgW10pPy5tYXAoeCA9PiB0aGlzLm1hcHBlciA/IHgudmFsdWUgOiB4LnZpZXdWYWx1ZSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXBwZXIgPyBvcHRpb25zPy52YWx1ZSA6IG9wdGlvbnM/LnZpZXdWYWx1ZTtcclxuXHRcdH1cclxuXHR9XHJcbn0iLCI8bWF0LXNlbGVjdCBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBpMThuLXBsYWNlaG9sZGVyIFsobmdNb2RlbCldPVwidmFsdWVcIiAjc2VsZWN0PVwibWF0U2VsZWN0XCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoJGV2ZW50KVwiICpuZ0lmPVwiIXJlYWRvbmx5XCIgW211bHRpcGxlXT1cIm11bHRpcGxlXCIgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVXaXRoXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgZmxleD5cclxuICAgIDwhLS0gI3JlZ2lvbiBGaWx0ZXIgaW5wdXQgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyYWJsZVwiIGNsYXNzPVwidmQtc2VsZWN0LWZpbHRlci13cmFwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZkLXNlbGVjdC1maWx0ZXItaW5uZXJcIj5cclxuICAgICAgICAgICAgPGEgbWF0LWljb24tYnV0dG9uIGRpc2FibGVkICpuZ0lmPVwiIWZpbHRlcklucHV0LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8YSBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCJmaWx0ZXJJbnB1dC52YWx1ZVwiIChjbGljayk9XCJmaWx0ZXJJbnB1dC52YWx1ZSA9IG51bGw7IGhhbmRsZUZpbHRlcignJylcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPGlucHV0ICNmaWx0ZXJJbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRmlsdGVyLi4uXCIgY2xhc3M9XCJ2ZC1zZWxlY3QtZmlsdGVyIG1hdC1pbnB1dC1lbGVtZW50XCIgKGtleXVwKT1cImhhbmRsZUZpbHRlcigkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG4gICAgPCEtLSAjcmVnaW9uIFRyaWdnZXIgZm9yIGxhdW5jaCBidXR0b24gLS0+XHJcbiAgICA8bWF0LXNlbGVjdC10cmlnZ2VyICpuZ0lmPVwib25MYXVuY2g/Lm9ic2VydmVycz8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxzcGFuPnt7Z2V0VHJpZ2dlclZhbHVlcyhzZWxlY3Quc2VsZWN0ZWQpfX08L3NwYW4+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwidmQtc2VsZWN0LWxhdW5jaFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGhhbmRsZUxhdW5jaENsaWNrZWQodmFsdWUpXCI+bGF1bmNoPC9tYXQtaWNvbj5cclxuICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICAgIDwhLS0gI3JlZ2lvbiBDdXN0b20gdHJpZ2dlciB0ZW1wbGF0ZSAtLT5cclxuICAgIDxtYXQtc2VsZWN0LXRyaWdnZXIgKm5nSWY9XCIhb25MYXVuY2g/Lm9ic2VydmVycz8ubGVuZ3RoICYmIHRyaWdnZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ0cmlnZ2VyVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJpZ2dlclRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHRyaWdnZXI6IGdldFRyaWdnZXJWYWx1ZXMoc2VsZWN0LnNlbGVjdGVkKSB9XCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICAgIDwhLS0gI3JlZ2lvbiBPcHRpb24gdGVtcGxhdGUgYXMgdHJpZ2dlciAtLT5cclxuICAgIDxtYXQtc2VsZWN0LXRyaWdnZXIgKm5nSWY9XCIhb25MYXVuY2g/Lm9ic2VydmVycz8ubGVuZ3RoICYmICF0cmlnZ2VyVGVtcGxhdGU/LnRlbXBsYXRlUmVmICYmIG9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIm9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHRyaWdnZXI6IGdldFRyaWdnZXJWYWx1ZXMoc2VsZWN0LnNlbGVjdGVkKSB9XCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICAgIDwhLS0gI3JlZ2lvbiBEZWZhdWx0IG9wdGlvbiAtLT5cclxuICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwidGMtZ3JleS01MDBcIiAqbmdJZj1cIiFtdWx0aXBsZVwiIGkxOG49XCJAQHBsZWFzZVNlbGVjdFwiPi0tLSBQbGVhc2UgU2VsZWN0IC0tLTwvbWF0LW9wdGlvbj5cclxuICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbiAgICA8IS0tICNyZWdpb24gT3B0aW9ucyAtLT5cclxuICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uIGxldC1maXJzdD1cImZpcnN0XCIgbmdGb3IgW25nRm9yT2ZdPVwiZmlsdGVyZWRPcHRpb25zXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm1hcHBlciA/IG9wdGlvbiA6IG9wdGlvbltrZXldXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIW9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIGkxOG49XCJAQHNlbGVjdGlvblwiPntvcHRpb25bdGV4dF0sIHNlbGVjdCwgb3B0aW9uIHtvcHRpb259IG90aGVyIHt7e29wdGlvblt0ZXh0XX19fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIm9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbjogb3B0aW9uIH1cIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbjwvbWF0LXNlbGVjdD5cclxuXHJcbjwhLS0gI3JlZ2lvbiBSZWFkIG9ubHkgdmFsdWUgLS0+XHJcbjxkaXYgKm5nSWY9XCJyZWFkb25seVwiPlxyXG4gICAgPGRpdiAqbmdJZj1cImN1cnJlbnRWYWx1ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWFkb25seS12YWx1ZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFvcHRpb25UZW1wbGF0ZT8udGVtcGxhdGVSZWYgJiYgIXRyaWdnZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIW11bHRpcGxlXCIgaTE4bj1cIkBAc2VsZWN0aW9uXCI+e2N1cnJlbnRWYWx1ZVt0ZXh0XSwgc2VsZWN0LCBvcHRpb24ge29wdGlvbn0gb3RoZXIge3t7Y3VycmVudFZhbHVlW3RleHRdfX19fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtdWx0aXBsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBvcHRpb25WYWx1ZSBvZiBjdXJyZW50VmFsdWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpMThuPVwiQEBzZWxlY3Rpb25cIj57b3B0aW9uVmFsdWVbdGV4dF0sIHNlbGVjdCwgb3B0aW9uIHtvcHRpb259IG90aGVyIHt7e29wdGlvblZhbHVlW3RleHRdfX19fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbGFzdFwiPiwmbmJzcDs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwidHJpZ2dlclRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyaWdnZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB0cmlnZ2VyOiBjdXJyZW50VmFsdWUgfVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIm9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZiAmJiAhdHJpZ2dlclRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbjogY3VycmVudFZhbHVlIH1cIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9uTGF1bmNoPy5vYnNlcnZlcnM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cInZkLXNlbGVjdC1sYXVuY2gtcmVhZG9ubHlcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBoYW5kbGVMYXVuY2hDbGlja2VkKHZhbHVlKVwiPmxhdW5jaDwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCIhY3VycmVudFZhbHVlXCI+Jm5ic3A7PC9kaXY+XHJcbjwvZGl2PlxyXG48IS0tICNlbmRyZWdpb24gLS0+Il19