ngx-techlify-core 14.16.0 → 14.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/entity-files/entity-file-form/entity-file-form.component.mjs +1 -1
- package/esm2020/lib/entity-files/entity-files-view-all.component.mjs +1 -1
- package/esm2020/lib/login/login.component.mjs +14 -9
- package/esm2020/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.component.mjs +16 -5
- package/esm2020/lib/user/users-view-all.component.mjs +3 -3
- package/fesm2015/ngx-techlify-core.mjs +26 -12
- package/fesm2015/ngx-techlify-core.mjs.map +1 -1
- package/fesm2020/ngx-techlify-core.mjs +26 -12
- package/fesm2020/ngx-techlify-core.mjs.map +1 -1
- package/lib/login/login.component.d.ts +1 -0
- package/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.component.d.ts +4 -3
- package/package.json +1 -1
package/esm2020/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.component.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var TechlifyTaggerTagFormFieldComponent_1;
|
|
2
2
|
import { __decorate } from "tslib";
|
|
3
3
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
4
|
-
import { Component, ViewChild, Input, Inject, Optional, Self } from '@angular/core';
|
|
4
|
+
import { Component, ViewChild, Input, Inject, Optional, Self, Output, EventEmitter } from '@angular/core';
|
|
5
5
|
import { UntypedFormControl } from '@angular/forms';
|
|
6
6
|
import { MatFormFieldControl, MAT_FORM_FIELD } from '@angular/material/form-field';
|
|
7
7
|
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
|
|
@@ -32,6 +32,7 @@ let TechlifyTaggerTagFormFieldComponent = TechlifyTaggerTagFormFieldComponent_1
|
|
|
32
32
|
this.onChange = (_) => { };
|
|
33
33
|
this.onTouched = () => { };
|
|
34
34
|
this.tagInputCtrl = new UntypedFormControl();
|
|
35
|
+
this.selectionChange = new EventEmitter();
|
|
35
36
|
/**Pass the configuration for Techlify Tagger */
|
|
36
37
|
this.config = new TechlifyTaggerTagFormConfigModel();
|
|
37
38
|
/**Pass the default list of tags */
|
|
@@ -92,8 +93,15 @@ let TechlifyTaggerTagFormFieldComponent = TechlifyTaggerTagFormFieldComponent_1
|
|
|
92
93
|
return this._value;
|
|
93
94
|
}
|
|
94
95
|
set value(tagIds) {
|
|
95
|
-
|
|
96
|
-
|
|
96
|
+
if (tagIds) {
|
|
97
|
+
if (Array.isArray(tagIds)) {
|
|
98
|
+
this._value = tagIds || [];
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this._value.push(tagIds);
|
|
102
|
+
}
|
|
103
|
+
this.stateChanges.next();
|
|
104
|
+
}
|
|
97
105
|
}
|
|
98
106
|
get errorState() {
|
|
99
107
|
return this.tagInputCtrl.dirty && this.required && (this.value.length == 0);
|
|
@@ -233,6 +241,7 @@ let TechlifyTaggerTagFormFieldComponent = TechlifyTaggerTagFormFieldComponent_1
|
|
|
233
241
|
}
|
|
234
242
|
_handleInput() {
|
|
235
243
|
this.onChange(this.value);
|
|
244
|
+
this.selectionChange.emit(this.value);
|
|
236
245
|
}
|
|
237
246
|
ngOnDestroy() {
|
|
238
247
|
this.stateChanges.complete();
|
|
@@ -241,7 +250,7 @@ let TechlifyTaggerTagFormFieldComponent = TechlifyTaggerTagFormFieldComponent_1
|
|
|
241
250
|
};
|
|
242
251
|
TechlifyTaggerTagFormFieldComponent.nextId = 0;
|
|
243
252
|
TechlifyTaggerTagFormFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: TechlifyTaggerTagFormFieldComponent, deps: [{ token: i1.FocusMonitor }, { token: i0.ElementRef }, { token: i2.HttpService }, { token: MAT_FORM_FIELD, optional: true }, { token: i3.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
244
|
-
TechlifyTaggerTagFormFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: TechlifyTaggerTagFormFieldComponent, selector: "app-techlify-tagger-tag-form-field", inputs: { config: "config", modelType: "modelType", modelId: "modelId", allTags: "allTags", categories: "categories", defaultCreateCategory: "defaultCreateCategory", required: "required", disabled: "disabled", value: "value", placeholder: "placeholder" }, providers: [{ provide: MatFormFieldControl, useExisting: TechlifyTaggerTagFormFieldComponent_1 }], viewQueries: [{ propertyName: "tagInput", first: true, predicate: ["tagInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-chip-list #chipList aria-label=\"Tag Selection\">\n <mat-chip *ngFor=\"let tag of tags\" [selectable]=\"config.selectable\" [removable]=\"config.removable\"\n (removed)=\"remove(tag)\">\n {{tag.title}}\n <button matChipRemove *ngIf=\"config.removable\" class=\"border-0\">\n <mat-icon class=\"mat-relative-icon\">cancel</mat-icon>\n </button>\n </mat-chip>\n <input placeholder=\"{{config.isCreateable? config.placeholder:''}}\" #tagInput [formControl]=\"tagInputCtrl\"\n [matAutocomplete]=\"auto\" [matChipInputFor]=\"chipList\"\n [matChipInputSeparatorKeyCodes]=\"config.separatorKeysCodes\" (matChipInputTokenEnd)=\"add($event)\"\n #trigger=\"matAutocompleteTrigger\" (click)=\"trigger.openPanel()\">\n</mat-chip-list>\n<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\n <mat-option *ngFor=\"let tag of filteredTags\" [value]=\"tag.id\">\n {{tag.title}}\n </mat-option>\n</mat-autocomplete>", styles: [".mat-relative-icon{position:relative;top:-3px;right:7px;font-size:20px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i7.MatChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i7.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
|
|
253
|
+
TechlifyTaggerTagFormFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: TechlifyTaggerTagFormFieldComponent, selector: "app-techlify-tagger-tag-form-field", inputs: { config: "config", modelType: "modelType", modelId: "modelId", allTags: "allTags", categories: "categories", defaultCreateCategory: "defaultCreateCategory", required: "required", disabled: "disabled", value: "value", placeholder: "placeholder" }, outputs: { selectionChange: "selectionChange" }, providers: [{ provide: MatFormFieldControl, useExisting: TechlifyTaggerTagFormFieldComponent_1 }], viewQueries: [{ propertyName: "tagInput", first: true, predicate: ["tagInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-chip-list #chipList aria-label=\"Tag Selection\">\n <mat-chip *ngFor=\"let tag of tags\" [selectable]=\"config.selectable\" [removable]=\"config.removable\"\n (removed)=\"remove(tag)\">\n {{tag.title}}\n <button matChipRemove *ngIf=\"config.removable\" class=\"border-0\">\n <mat-icon class=\"mat-relative-icon\">cancel</mat-icon>\n </button>\n </mat-chip>\n <input placeholder=\"{{config.isCreateable? config.placeholder:''}}\" #tagInput [formControl]=\"tagInputCtrl\"\n [matAutocomplete]=\"auto\" [matChipInputFor]=\"chipList\"\n [matChipInputSeparatorKeyCodes]=\"config.separatorKeysCodes\" (matChipInputTokenEnd)=\"add($event)\"\n #trigger=\"matAutocompleteTrigger\" (click)=\"trigger.openPanel()\">\n</mat-chip-list>\n<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\n <mat-option *ngFor=\"let tag of filteredTags\" [value]=\"tag.id\">\n {{tag.title}}\n </mat-option>\n</mat-autocomplete>", styles: [".mat-relative-icon{position:relative;top:-3px;right:7px;font-size:20px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i7.MatChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i7.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
|
|
245
254
|
TechlifyTaggerTagFormFieldComponent = TechlifyTaggerTagFormFieldComponent_1 = __decorate([
|
|
246
255
|
UntilDestroy()
|
|
247
256
|
], TechlifyTaggerTagFormFieldComponent);
|
|
@@ -261,6 +270,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
|
|
|
261
270
|
}] }]; }, propDecorators: { tagInput: [{
|
|
262
271
|
type: ViewChild,
|
|
263
272
|
args: ['tagInput']
|
|
273
|
+
}], selectionChange: [{
|
|
274
|
+
type: Output
|
|
264
275
|
}], config: [{
|
|
265
276
|
type: Input
|
|
266
277
|
}], modelType: [{
|
|
@@ -282,4 +293,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
|
|
|
282
293
|
}], placeholder: [{
|
|
283
294
|
type: Input
|
|
284
295
|
}] } });
|
|
285
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktdGFnZ2VyLXRhZy1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvdGVjaGxpZnktdGFnZ2VyLXRhZy1mb3JtLWZpZWxkL3RlY2hsaWZ5LXRhZ2dlci10YWctZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3RlY2hsaWZ5LXRhZ2dlci10YWctZm9ybS1maWVsZC90ZWNobGlmeS10YWdnZXItdGFnLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBYyxTQUFTLEVBQVUsS0FBSyxFQUFhLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUM3SSxPQUFPLEVBQXdCLGtCQUFrQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFHckYsT0FBTyxFQUFnQixtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7OztJQVM5RSxtQ0FBbUMsaURBQW5DLG1DQUFtQztJQXFLOUMsWUFDVSxhQUEyQixFQUMzQixXQUFvQyxFQUNwQyxXQUF3QixFQUNXLFVBQXdCLEVBQ3hDLFNBQW9CO1FBSnZDLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUF5QjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNXLGVBQVUsR0FBVixVQUFVLENBQWM7UUFDeEMsY0FBUyxHQUFULFNBQVMsQ0FBVztRQXZLakQsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ25DLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyw0QkFBNEIsQ0FBQztRQUMzQyxPQUFFLEdBQUcsOEJBQThCLHFDQUFtQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFFbEYsYUFBUSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0IsY0FBUyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV0QixpQkFBWSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUl4QyxnREFBZ0Q7UUFDdkMsV0FBTSxHQUFxQyxJQUFJLGdDQUFnQyxFQUFFLENBQUM7UUFNM0YsbUNBQW1DO1FBQzNCLGFBQVEsR0FBVSxFQUFFLENBQUM7UUFTN0IsK0NBQStDO1FBQ3RDLGVBQVUsR0FBYSxFQUFFLENBQUM7UUF5QjNCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFXbEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUdsQixXQUFNLEdBQVUsRUFBRSxDQUFDO1FBb0d6QixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVk7YUFDM0IsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUwsbUJBQW1CO1FBQ25CLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMxRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUNsQjtZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtZQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBcktELElBQ0ksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSztRQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFPRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELDREQUE0RDtJQUM1RCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBR0QsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFLRCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLE1BQWE7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBSUQsUUFBUTtJQUVSLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFFaEMseUNBQXlDO1FBQ3pDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxXQUFXO2lCQUNiLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO2lCQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZCLE1BQU0sRUFBRTtvQkFDTixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO29CQUNyQyxPQUFPLEVBQUUsTUFBTTtpQkFDaEI7YUFDRixDQUFDLENBQUMsSUFBSSxDQUNMLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUNyQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELGtEQUFrRDtRQUNsRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQzFDLG9HQUFvRztZQUNwRyxJQUFJLENBQUMsV0FBVztpQkFDYixLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztpQkFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUN2QixNQUFNLEVBQUU7b0JBQ04sVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztvQkFDckMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTO29CQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3RCLE9BQU8sRUFBRSxNQUFNO2lCQUNoQjthQUNGLENBQUMsQ0FBQyxJQUFJLENBQ0wsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixjQUFjLENBQUMsSUFBSSxDQUFDLENBQ3JCLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUM1QyxtR0FBbUc7WUFDbkcsSUFBSSxDQUFDLFdBQVc7aUJBQ2IsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7aUJBQy9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtnQkFDdkIsTUFBTSxFQUFFO29CQUNOLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQ3JDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUztvQkFDMUIsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPO2lCQUN2QjthQUNGLENBQUMsQ0FBQyxJQUFJLENBQ0wsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUNyQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBNEJELGlCQUFpQixDQUFDLEdBQWE7UUFDN0IsMkRBQTJEO0lBQzdELENBQUM7SUFFRCxnQkFBZ0I7UUFDZCwyREFBMkQ7SUFDN0QsQ0FBQztJQUdELEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBd0I7UUFDaEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pDLGNBQWM7UUFDZCwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDdEQsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUU7Z0JBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQzFCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ1IsNEJBQTRCO29CQUM1QixJQUFJO3dCQUNGLE1BQU0sTUFBTSxHQUFRLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUU7NEJBQ3hFLEtBQUssRUFBRSxLQUFLOzRCQUNaLFdBQVcsRUFBRSxLQUFLOzRCQUNsQixjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO3lCQUNuSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7d0JBQ2YsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7cUJBQ25CO29CQUFDLE9BQU8sS0FBSyxFQUFFO3dCQUNkLE9BQU87cUJBQ1I7b0JBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3hCO3FCQUFNO29CQUNMLHlEQUF5RDtvQkFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDbEI7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDckI7U0FDRjtRQUVELHdCQUF3QjtRQUN4QixLQUFLLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBRXhDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBUTtRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQW1DO1FBQzFDLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN0RCw4Q0FBOEM7WUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxPQUFPO1FBQ2IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzFGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekcsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUN6SCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQWE7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFLRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEQsQ0FBQztDQUVGLENBQUE7QUE3UlEsMENBQU0sR0FBRyxDQUFDLENBQUM7Z0lBRlAsbUNBQW1DLG1HQXlLeEIsY0FBYztvSEF6S3pCLG1DQUFtQyw2VEFGbkMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUscUNBQW1DLEVBQUUsQ0FBQyxxSkNsQmpHLHcvQkFpQm1CO0FER04sbUNBQW1DO0lBUC9DLFlBQVksRUFBRTtHQU9GLG1DQUFtQyxDQStSL0M7U0EvUlksbUNBQW1DOzJGQUFuQyxtQ0FBbUM7a0JBTi9DLFNBQVM7K0JBQ0Usb0NBQW9DLGFBR25DLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxxQ0FBcUMsRUFBRSxDQUFDOzswQkEySzVGLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYzs7MEJBQ2pDLFFBQVE7OzBCQUFJLElBQUk7NENBN0pJLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFHWixNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0YsT0FBTztzQkFEVixLQUFLO2dCQVNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQWdCRixRQUFRO3NCQURYLEtBQUs7Z0JBV0YsUUFBUTtzQkFEWCxLQUFLO2dCQWNGLEtBQUs7c0JBRFIsS0FBSztnQkFjRixXQUFXO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgT25Jbml0LCBJbnB1dCwgT25EZXN0cm95LCBJbmplY3QsIE9wdGlvbmFsLCBTZWxmLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBVbnR5cGVkRm9ybUNvbnRyb2wsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0Q2hpcElucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQsIE1hdEZvcm1GaWVsZENvbnRyb2wsIE1BVF9GT1JNX0ZJRUxEIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGVjaGxpZnlUYWdnZXJUYWdGb3JtQ29uZmlnTW9kZWwgfSBmcm9tICcuL3RlY2hsaWZ5LXRhZ2dlci10YWctZm9ybS1jb25maWcubW9kZWwnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC10ZWNobGlmeS10YWdnZXItdGFnLWZvcm0tZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVjaGxpZnktdGFnZ2VyLXRhZy1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGVjaGxpZnktdGFnZ2VyLXRhZy1mb3JtLWZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IFRlY2hsaWZ5VGFnZ2VyVGFnRm9ybUZpZWxkQ29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBUZWNobGlmeVRhZ2dlclRhZ0Zvcm1GaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE1hdEZvcm1GaWVsZENvbnRyb2w8YW55PiwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIHN0YXRpYyBuZXh0SWQgPSAwO1xuICBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBmb2N1c2VkID0gZmFsc2U7XG4gIGNvbnRyb2xUeXBlID0gJ3RlY2hsaWZ5LXRhZ2dlci1mb3JtLWZpZWxkJztcbiAgaWQgPSBgdGVjaGxpZnktdGFnZ2VyLWZvcm0tZmllbGQtJHtUZWNobGlmeVRhZ2dlclRhZ0Zvcm1GaWVsZENvbXBvbmVudC5uZXh0SWQrK31gO1xuXG4gIG9uQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xuICBvblRvdWNoZWQgPSAoKSA9PiB7IH07XG5cbiAgdGFnSW5wdXRDdHJsID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuICBmaWx0ZXJTdHJpbmc6IGFueTtcbiAgQFZpZXdDaGlsZCgndGFnSW5wdXQnKSB0YWdJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAvKipQYXNzIHRoZSBjb25maWd1cmF0aW9uIGZvciBUZWNobGlmeSBUYWdnZXIgKi9cbiAgQElucHV0KCkgY29uZmlnOiBUZWNobGlmeVRhZ2dlclRhZ0Zvcm1Db25maWdNb2RlbCA9IG5ldyBUZWNobGlmeVRhZ2dlclRhZ0Zvcm1Db25maWdNb2RlbCgpO1xuICAvKipQYXNzIHRoZSBNb2RlbCBUeXBlIGZvciBUZWNobGlmeSBUYWdnZXIsIFJlcXVpcmVkICovXG4gIEBJbnB1dCgpIG1vZGVsVHlwZSE6IHN0cmluZztcbiAgLyoqUGFzcyB0aGUgTW9kZWwgSUQgZm9yIFRlY2hsaWZ5IFRhZ2dlciAqL1xuICBASW5wdXQoKSBtb2RlbElkOiBzdHJpbmc7XG5cbiAgLyoqUGFzcyB0aGUgZGVmYXVsdCBsaXN0IG9mIHRhZ3MgKi9cbiAgcHJpdmF0ZSBfYWxsVGFnczogYW55W10gPSBbXTtcbiAgQElucHV0KClcbiAgZ2V0IGFsbFRhZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbFRhZ3M7XG4gIH1cbiAgc2V0IGFsbFRhZ3ModmFsdWUpIHtcbiAgICB0aGlzLl9hbGxUYWdzID0gdmFsdWU7XG4gIH1cblxuICAvKipQYXNzIHRoZSBDYXRlZ29yaWVzIHRvIGZpbHRlciBmb3IgYSBtb2RlbCAqL1xuICBASW5wdXQoKSBjYXRlZ29yaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAvKipQYXNzIGRlZmF1bHQgY2F0ZWdvcnkgdG8gYmUgdXNlZCBmb3IgYXNzaWduaW5nIHRoZSB0YWdzLCB3aGVuIHdlIGZpbHRlciBieSBtb3JlIHRoYW4gb25lIGNhdGVnb3J5ICovXG4gIEBJbnB1dCgpIGRlZmF1bHRDcmVhdGVDYXRlZ29yeTogc3RyaW5nO1xuXG4gIGdldCB0YWdzKCkge1xuICAgIHJldHVybiB0aGlzLmFsbFRhZ3MuZmlsdGVyKHggPT4gdGhpcy52YWx1ZS5zb21lKHkgPT4geSA9PSB4LmlkKSk7XG4gIH1cblxuICAvL0RlZmF1bHQgR2V0dGVyIGFuZCBTZXR0ZXJzIGZvciBhIEZvcm0gRmllbGQgSW1wbGVtZW50YXRpb25cbiAgZ2V0IGVtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLmxlbmd0aCA9PSAwO1xuICB9XG5cbiAgZ2V0IHNob3VsZExhYmVsRmxvYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCB8fCAhdGhpcy5lbXB0eSB8fCB0aGlzLnRhZ0lucHV0Q3RybC52YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMuX2Rpc2FibGVkID8gdGhpcy50YWdJbnB1dEN0cmwuZGlzYWJsZSgpIDogdGhpcy50YWdJbnB1dEN0cmwuZW5hYmxlKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cblxuICBwcml2YXRlIF92YWx1ZTogYW55W10gPSBbXTtcbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKHRhZ0lkczogYW55W10pIHtcbiAgICB0aGlzLl92YWx1ZSA9IHRhZ0lkcyB8fCBbXTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBnZXQgZXJyb3JTdGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50YWdJbnB1dEN0cmwuZGlydHkgJiYgdGhpcy5yZXF1aXJlZCAmJiAodGhpcy52YWx1ZS5sZW5ndGggPT0gMCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gIH1cbiAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nO1xuXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcblxuICAgIC8vQVBJIHRvIGxvYWQgYWxsIHRhZ3MgZm9yIHRoZSBtb2RlbCB0eXBlXG4gICAgaWYgKHRoaXMuYWxsVGFncy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5odHRwU2VydmljZVxuICAgICAgICAuY2FjaGUoIXRoaXMuY29uZmlnLmlzQ2FjaGVUYWdzKVxuICAgICAgICAuZ2V0KHRoaXMuY29uZmlnLmFwaVVybCwge1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgY2F0ZWdvcmllczogdGhpcy5jYXRlZ29yaWVzLmpvaW4oJywnKSxcbiAgICAgICAgICAgIHBlclBhZ2U6ICcxMDAwJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgICApLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmFsbFRhZ3MgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy9BUEkgdG8gbG9hZCBvbmx5IHRoZSBzZWxlY3RlZCB0YWdzIGZvciB0aGUgbW9kZWxcbiAgICBpZiAodGhpcy5tb2RlbElkICYmIHRoaXMudmFsdWUubGVuZ3RoID09IDApIHtcbiAgICAgIC8vTW9kZWwgSWQgaXMgcGFzc2VkIGFuZCBubyB0YWdzIGFyZSBwcmVzZW50LCBzbyB3ZSBxdWVyeSBkYiBmb3IgdGhlIGF2aWxhYmxlIHRhZ3MgZm9yIHRoZSBtb2RlbCBJRC5cbiAgICAgIHRoaXMuaHR0cFNlcnZpY2VcbiAgICAgICAgLmNhY2hlKCF0aGlzLmNvbmZpZy5pc0NhY2hlVGFncylcbiAgICAgICAgLmdldCh0aGlzLmNvbmZpZy5hcGlVcmwsIHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IHRoaXMuY2F0ZWdvcmllcy5qb2luKCcsJyksXG4gICAgICAgICAgICBtb2RlbF90eXBlOiB0aGlzLm1vZGVsVHlwZSxcbiAgICAgICAgICAgIG1vZGVsX2lkOiB0aGlzLm1vZGVsSWQsXG4gICAgICAgICAgICBwZXJQYWdlOiAnMTAwMCdcbiAgICAgICAgICB9XG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IChyZXN1bHQ/LmRhdGEgfHwgW10pLm1hcCgoeDogYW55KSA9PiB4LmlkKTtcbiAgICAgICAgICB0aGlzLl9oYW5kbGVJbnB1dCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpbml0KCkge1xuICAgIGlmICh0aGlzLm1vZGVsSWQgJiYgdGhpcy5hbGxUYWdzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAvL01vZGVsIElkIGlzIHBhc3NlZCBhbmQgbm8gdGFncyBhcmUgcGFzc2VkLCBzbyB3ZSBxdWVyeSBkYiBmb3IgdGhlIGF2aWxhYmxlIHRhZ3MgZm9yIHRoZSBtb2RlbCBJRC5cbiAgICAgIHRoaXMuaHR0cFNlcnZpY2VcbiAgICAgICAgLmNhY2hlKCF0aGlzLmNvbmZpZy5pc0NhY2hlVGFncylcbiAgICAgICAgLmdldCh0aGlzLmNvbmZpZy5hcGlVcmwsIHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IHRoaXMuY2F0ZWdvcmllcy5qb2luKCcsJyksXG4gICAgICAgICAgICBtb2RlbF90eXBlOiB0aGlzLm1vZGVsVHlwZSxcbiAgICAgICAgICAgIG1vZGVsX2lkOiB0aGlzLm1vZGVsSWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5hbGxUYWdzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWx0ZXJlZFRhZ3MoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXIoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2ZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgaHR0cFNlcnZpY2U6IEh0dHBTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0ZPUk1fRklFTEQpIHB1YmxpYyBfZm9ybUZpZWxkOiBNYXRGb3JtRmllbGQsXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wpIHtcblxuICAgIHRoaXMudGFnSW5wdXRDdHJsLnZhbHVlQ2hhbmdlc1xuICAgICAgLnN1YnNjcmliZShmaWx0ZXJWYWx1ZSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyU3RyaW5nID0gZmlsdGVyVmFsdWU7XG4gICAgICB9KTtcblxuICAgIC8vU2V0IEZvY3VzIE1vbml0b3JcbiAgICBfZm9jdXNNb25pdG9yLm1vbml0b3IoX2VsZW1lbnRSZWYsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgaWYgKHRoaXMuZm9jdXNlZCAmJiAhb3JpZ2luKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvY3VzZWQgPSAhIW9yaWdpbjtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKSB7XG4gICAgLy8gSnVzdCBhIGVtcHR5IGltcGxlbWVudGF0aW9uIGZvciBNYXQgRm9ybSBGaWVsZCBJbnRlcmZhY2VcbiAgfVxuXG4gIG9uQ29udGFpbmVyQ2xpY2soKSB7XG4gICAgLy8gSnVzdCBhIGVtcHR5IGltcGxlbWVudGF0aW9uIGZvciBNYXQgRm9ybSBGaWVsZCBJbnRlcmZhY2VcbiAgfVxuXG5cbiAgYXN5bmMgYWRkKGV2ZW50OiBNYXRDaGlwSW5wdXRFdmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnZhbHVlIHx8ICcnKS50cmltKCk7XG4gICAgLy8gQWRkIG91ciB0YWdcbiAgICAvLyBWYWxpZGF0ZSBmb3Igc2luZ2xlIG1vZGVcbiAgICBpZiAoIXRoaXMuY29uZmlnLmlzU2luZ2xlIHx8ICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIGlmICh2YWx1ZSAmJiB0aGlzLmNvbmZpZy5pc0NyZWF0ZWFibGUpIHtcbiAgICAgICAgY29uc3QgdGFncyA9IHRoaXMuYWxsVGFncztcbiAgICAgICAgbGV0IHRhZyA9IHRhZ3MuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnRpdGxlLnRvTG93ZXJDYXNlKCkgPT0gdmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmICghdGFnKSB7XG4gICAgICAgICAgLy9ObyB0YWcgcHJlc2VudCBpbiB0aGUgbGlzdFxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IGF3YWl0IHRoaXMuaHR0cFNlcnZpY2UucG9zdCh0aGlzLmNvbmZpZy5jcmVhdGVBcGlVcmwsIHtcbiAgICAgICAgICAgICAgdGl0bGU6IHZhbHVlLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsdWUsXG4gICAgICAgICAgICAgIGNhdGVnb3J5X3RpdGxlOiAodGhpcy5jYXRlZ29yaWVzLmxlbmd0aCA+IDApID8gKHRoaXMuZGVmYXVsdENyZWF0ZUNhdGVnb3J5ID8gdGhpcy5kZWZhdWx0Q3JlYXRlQ2F0ZWdvcnkgOiB0aGlzLmNhdGVnb3JpZXNbMF0pIDogJydcbiAgICAgICAgICAgIH0pLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgdGFnID0gcmVzdWx0Lml0ZW07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5hbGxUYWdzLnB1c2godGFnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvL09wdGlvbmFsbHkgY2xlYW4gdGhlIGV4aXN0aW5nIHZhbHVlLCB0byBhdm9pZCBkdXBsaWNhdGVcbiAgICAgICAgICB0aGlzLnJlbW92ZSh0YWcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0YWcuaWQpO1xuICAgICAgICB0aGlzLl9oYW5kbGVJbnB1dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFyIHRoZSBpbnB1dCB2YWx1ZVxuICAgIGV2ZW50LmNoaXBJbnB1dC5pbnB1dEVsZW1lbnQudmFsdWUgPSAnJztcblxuICAgIHRoaXMudGFnSW5wdXRDdHJsLnNldFZhbHVlKG51bGwpO1xuICB9XG5cbiAgcmVtb3ZlKHRhZzogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUuZmlsdGVyKHggPT4geCAhPT0gdGFnLmlkKTtcbiAgICB0aGlzLl9oYW5kbGVJbnB1dCgpO1xuICB9XG5cbiAgc2VsZWN0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBWYWxpZGF0ZSBmb3Igc2luZ2xlIG1vZGVcbiAgICBpZiAoIXRoaXMuY29uZmlnLmlzU2luZ2xlIHx8ICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIC8vQ2xlYW4gdGhlIGV4aXN0aW5nIHZhbHVlLCB0byBhdm9pZCBkdXBsaWNhdGVcbiAgICAgIHRoaXMucmVtb3ZlKHsgaWQ6IGV2ZW50Lm9wdGlvbi52YWx1ZSB9KTtcbiAgICAgIHRoaXMudmFsdWUucHVzaChldmVudC5vcHRpb24udmFsdWUpO1xuICAgICAgdGhpcy5faGFuZGxlSW5wdXQoKTtcbiAgICB9XG4gICAgdGhpcy50YWdJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgdGhpcy50YWdJbnB1dEN0cmwuc2V0VmFsdWUobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXIoKTogYW55W10ge1xuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdGhpcy5maWx0ZXJTdHJpbmcgPyB0aGlzLmZpbHRlclN0cmluZy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xuICAgIGNvbnN0IGF2YWlsYWJsZVRhZ3MgPSB0aGlzLmFsbFRhZ3MuZmlsdGVyKCh0YWc6IGFueSkgPT4gIXRoaXMudmFsdWUuc29tZSgoaXRlbTogYW55KSA9PiBpdGVtID09IHRhZy5pZCkpO1xuICAgIHJldHVybiBmaWx0ZXJWYWx1ZSA/IGF2YWlsYWJsZVRhZ3MuZmlsdGVyKCh0YWc6IGFueSkgPT4gdGFnLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKSA6IGF2YWlsYWJsZVRhZ3M7XG4gIH1cblxuICB3cml0ZVZhbHVlKHRhZ0lkczogYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdGFnSWRzIHx8IFtdO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIF9oYW5kbGVJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVkOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZXF1aXJlZDogQm9vbGVhbklucHV0O1xuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpO1xuICB9XG5cbn1cbiIsIjxtYXQtY2hpcC1saXN0ICNjaGlwTGlzdCBhcmlhLWxhYmVsPVwiVGFnIFNlbGVjdGlvblwiPlxuICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgdGFnIG9mIHRhZ3NcIiBbc2VsZWN0YWJsZV09XCJjb25maWcuc2VsZWN0YWJsZVwiIFtyZW1vdmFibGVdPVwiY29uZmlnLnJlbW92YWJsZVwiXG4gICAgICAgIChyZW1vdmVkKT1cInJlbW92ZSh0YWcpXCI+XG4gICAgICAgIHt7dGFnLnRpdGxlfX1cbiAgICAgICAgPGJ1dHRvbiBtYXRDaGlwUmVtb3ZlICpuZ0lmPVwiY29uZmlnLnJlbW92YWJsZVwiIGNsYXNzPVwiYm9yZGVyLTBcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC1yZWxhdGl2ZS1pY29uXCI+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtY2hpcD5cbiAgICA8aW5wdXQgcGxhY2Vob2xkZXI9XCJ7e2NvbmZpZy5pc0NyZWF0ZWFibGU/IGNvbmZpZy5wbGFjZWhvbGRlcjonJ319XCIgI3RhZ0lucHV0IFtmb3JtQ29udHJvbF09XCJ0YWdJbnB1dEN0cmxcIlxuICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIiBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBMaXN0XCJcbiAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cImNvbmZpZy5zZXBhcmF0b3JLZXlzQ29kZXNcIiAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwiYWRkKCRldmVudClcIlxuICAgICAgICAjdHJpZ2dlcj1cIm1hdEF1dG9jb21wbGV0ZVRyaWdnZXJcIiAoY2xpY2spPVwidHJpZ2dlci5vcGVuUGFuZWwoKVwiPlxuPC9tYXQtY2hpcC1saXN0PlxuPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwic2VsZWN0ZWQoJGV2ZW50KVwiPlxuICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB0YWcgb2YgZmlsdGVyZWRUYWdzXCIgW3ZhbHVlXT1cInRhZy5pZFwiPlxuICAgICAgICB7e3RhZy50aXRsZX19XG4gICAgPC9tYXQtb3B0aW9uPlxuPC9tYXQtYXV0b2NvbXBsZXRlPiJdfQ==
|
|
296
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktdGFnZ2VyLXRhZy1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvdGVjaGxpZnktdGFnZ2VyLXRhZy1mb3JtLWZpZWxkL3RlY2hsaWZ5LXRhZ2dlci10YWctZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3RlY2hsaWZ5LXRhZ2dlci10YWctZm9ybS1maWVsZC90ZWNobGlmeS10YWdnZXItdGFnLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBYyxTQUFTLEVBQVUsS0FBSyxFQUFhLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUE0QixNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25LLE9BQU8sRUFBd0Isa0JBQWtCLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyRixPQUFPLEVBQWdCLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7Ozs7Ozs7O0lBUzlFLG1DQUFtQyxpREFBbkMsbUNBQW1DO0lBNks5QyxZQUNVLGFBQTJCLEVBQzNCLFdBQW9DLEVBQ3BDLFdBQXdCLEVBQ1csVUFBd0IsRUFDeEMsU0FBb0I7UUFKdkMsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBQ3BDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ1csZUFBVSxHQUFWLFVBQVUsQ0FBYztRQUN4QyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBL0tqRCxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDbkMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixnQkFBVyxHQUFHLDRCQUE0QixDQUFDO1FBQzNDLE9BQUUsR0FBRyw4QkFBOEIscUNBQW1DLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUVsRixhQUFRLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzQixjQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLGlCQUFZLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBSTlCLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUvQyxnREFBZ0Q7UUFDdkMsV0FBTSxHQUFxQyxJQUFJLGdDQUFnQyxFQUFFLENBQUM7UUFNM0YsbUNBQW1DO1FBQzNCLGFBQVEsR0FBVSxFQUFFLENBQUM7UUFTN0IsK0NBQStDO1FBQ3RDLGVBQVUsR0FBYSxFQUFFLENBQUM7UUF5QjNCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFXbEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUdsQixXQUFNLEdBQVUsRUFBRSxDQUFDO1FBMEd6QixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVk7YUFDM0IsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUwsbUJBQW1CO1FBQ25CLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMxRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUNsQjtZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtZQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBM0tELElBQ0ksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSztRQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFPRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELDREQUE0RDtJQUM1RCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBR0QsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFLRCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLE1BQVc7UUFDbkIsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQzthQUM1QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMxQjtZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELElBQ0ksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxXQUFXLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFJRCxRQUFRO0lBRVIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUVoQyx5Q0FBeUM7UUFDekMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFdBQVc7aUJBQ2IsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7aUJBQy9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtnQkFDdkIsTUFBTSxFQUFFO29CQUNOLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQ3JDLE9BQU8sRUFBRSxNQUFNO2lCQUNoQjthQUNGLENBQUMsQ0FBQyxJQUFJLENBQ0wsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixjQUFjLENBQUMsSUFBSSxDQUFDLENBQ3JCLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsa0RBQWtEO1FBQ2xELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDMUMsb0dBQW9HO1lBQ3BHLElBQUksQ0FBQyxXQUFXO2lCQUNiLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO2lCQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZCLE1BQU0sRUFBRTtvQkFDTixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO29CQUNyQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQzFCLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDdEIsT0FBTyxFQUFFLE1BQU07aUJBQ2hCO2FBQ0YsQ0FBQyxDQUFDLElBQUksQ0FDTCxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FDckIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0gsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQzVDLG1HQUFtRztZQUNuRyxJQUFJLENBQUMsV0FBVztpQkFDYixLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztpQkFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUN2QixNQUFNLEVBQUU7b0JBQ04sVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztvQkFDckMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTO29CQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU87aUJBQ3ZCO2FBQ0YsQ0FBQyxDQUFDLElBQUksQ0FDTCxjQUFjLENBQUMsSUFBSSxDQUFDLENBQ3JCLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0gsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUE0QkQsaUJBQWlCLENBQUMsR0FBYTtRQUM3QiwyREFBMkQ7SUFDN0QsQ0FBQztJQUVELGdCQUFnQjtRQUNkLDJEQUEyRDtJQUM3RCxDQUFDO0lBR0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUF3QjtRQUNoQyxNQUFNLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsY0FBYztRQUNkLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN0RCxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTtnQkFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDMUIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDcEYsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDUiw0QkFBNEI7b0JBQzVCLElBQUk7d0JBQ0YsTUFBTSxNQUFNLEdBQVEsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTs0QkFDeEUsS0FBSyxFQUFFLEtBQUs7NEJBQ1osV0FBVyxFQUFFLEtBQUs7NEJBQ2xCLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7eUJBQ25JLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzt3QkFDZixHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztxQkFDbkI7b0JBQUMsT0FBTyxLQUFLLEVBQUU7d0JBQ2QsT0FBTztxQkFDUjtvQkFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDeEI7cUJBQU07b0JBQ0wseURBQXlEO29CQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNsQjtnQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUNyQjtTQUNGO1FBRUQsd0JBQXdCO1FBQ3hCLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFFeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFRO1FBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBbUM7UUFDMUMsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3RELDhDQUE4QztZQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLE9BQU87UUFDYixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDMUYsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RyxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO0lBQ3pILENBQUM7SUFFRCxVQUFVLENBQUMsTUFBYTtRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFLRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEQsQ0FBQztDQUVGLENBQUE7QUF0U1EsMENBQU0sR0FBRyxDQUFDLENBQUM7Z0lBRlAsbUNBQW1DLG1HQWlMeEIsY0FBYztvSEFqTHpCLG1DQUFtQyw4V0FGbkMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUscUNBQW1DLEVBQUUsQ0FBQyxxSkNsQmpHLHcvQkFpQm1CO0FER04sbUNBQW1DO0lBUC9DLFlBQVksRUFBRTtHQU9GLG1DQUFtQyxDQXdTL0M7U0F4U1ksbUNBQW1DOzJGQUFuQyxtQ0FBbUM7a0JBTi9DLFNBQVM7K0JBQ0Usb0NBQW9DLGFBR25DLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxxQ0FBcUMsRUFBRSxDQUFDOzswQkFtTDVGLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYzs7MEJBQ2pDLFFBQVE7OzBCQUFJLElBQUk7NENBcktJLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFFWCxlQUFlO3NCQUF4QixNQUFNO2dCQUdFLE1BQU07c0JBQWQsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFLRixPQUFPO3NCQURWLEtBQUs7Z0JBU0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBZ0JGLFFBQVE7c0JBRFgsS0FBSztnQkFXRixRQUFRO3NCQURYLEtBQUs7Z0JBY0YsS0FBSztzQkFEUixLQUFLO2dCQW9CRixXQUFXO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgT25Jbml0LCBJbnB1dCwgT25EZXN0cm95LCBJbmplY3QsIE9wdGlvbmFsLCBTZWxmLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVW50eXBlZEZvcm1Db250cm9sLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdENoaXBJbnB1dEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkLCBNYXRGb3JtRmllbGRDb250cm9sLCBNQVRfRk9STV9GSUVMRCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uL2NvcmUvaHR0cC5zZXJ2aWNlJztcbmltcG9ydCB7IFRlY2hsaWZ5VGFnZ2VyVGFnRm9ybUNvbmZpZ01vZGVsIH0gZnJvbSAnLi90ZWNobGlmeS10YWdnZXItdGFnLWZvcm0tY29uZmlnLm1vZGVsJztcblxuQFVudGlsRGVzdHJveSgpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdGVjaGxpZnktdGFnZ2VyLXRhZy1mb3JtLWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RlY2hsaWZ5LXRhZ2dlci10YWctZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RlY2hsaWZ5LXRhZ2dlci10YWctZm9ybS1maWVsZC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE1hdEZvcm1GaWVsZENvbnRyb2wsIHVzZUV4aXN0aW5nOiBUZWNobGlmeVRhZ2dlclRhZ0Zvcm1GaWVsZENvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgVGVjaGxpZnlUYWdnZXJUYWdGb3JtRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBNYXRGb3JtRmllbGRDb250cm9sPGFueT4sIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICBzdGF0aWMgbmV4dElkID0gMDtcbiAgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgZm9jdXNlZCA9IGZhbHNlO1xuICBjb250cm9sVHlwZSA9ICd0ZWNobGlmeS10YWdnZXItZm9ybS1maWVsZCc7XG4gIGlkID0gYHRlY2hsaWZ5LXRhZ2dlci1mb3JtLWZpZWxkLSR7VGVjaGxpZnlUYWdnZXJUYWdGb3JtRmllbGRDb21wb25lbnQubmV4dElkKyt9YDtcblxuICBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcbiAgb25Ub3VjaGVkID0gKCkgPT4geyB9O1xuXG4gIHRhZ0lucHV0Q3RybCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgZmlsdGVyU3RyaW5nOiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ3RhZ0lucHV0JykgdGFnSW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipQYXNzIHRoZSBjb25maWd1cmF0aW9uIGZvciBUZWNobGlmeSBUYWdnZXIgKi9cbiAgQElucHV0KCkgY29uZmlnOiBUZWNobGlmeVRhZ2dlclRhZ0Zvcm1Db25maWdNb2RlbCA9IG5ldyBUZWNobGlmeVRhZ2dlclRhZ0Zvcm1Db25maWdNb2RlbCgpO1xuICAvKipQYXNzIHRoZSBNb2RlbCBUeXBlIGZvciBUZWNobGlmeSBUYWdnZXIsIFJlcXVpcmVkICovXG4gIEBJbnB1dCgpIG1vZGVsVHlwZSE6IHN0cmluZztcbiAgLyoqUGFzcyB0aGUgTW9kZWwgSUQgZm9yIFRlY2hsaWZ5IFRhZ2dlciAqL1xuICBASW5wdXQoKSBtb2RlbElkOiBzdHJpbmc7XG5cbiAgLyoqUGFzcyB0aGUgZGVmYXVsdCBsaXN0IG9mIHRhZ3MgKi9cbiAgcHJpdmF0ZSBfYWxsVGFnczogYW55W10gPSBbXTtcbiAgQElucHV0KClcbiAgZ2V0IGFsbFRhZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbFRhZ3M7XG4gIH1cbiAgc2V0IGFsbFRhZ3ModmFsdWUpIHtcbiAgICB0aGlzLl9hbGxUYWdzID0gdmFsdWU7XG4gIH1cblxuICAvKipQYXNzIHRoZSBDYXRlZ29yaWVzIHRvIGZpbHRlciBmb3IgYSBtb2RlbCAqL1xuICBASW5wdXQoKSBjYXRlZ29yaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAvKipQYXNzIGRlZmF1bHQgY2F0ZWdvcnkgdG8gYmUgdXNlZCBmb3IgYXNzaWduaW5nIHRoZSB0YWdzLCB3aGVuIHdlIGZpbHRlciBieSBtb3JlIHRoYW4gb25lIGNhdGVnb3J5ICovXG4gIEBJbnB1dCgpIGRlZmF1bHRDcmVhdGVDYXRlZ29yeTogc3RyaW5nO1xuXG4gIGdldCB0YWdzKCkge1xuICAgIHJldHVybiB0aGlzLmFsbFRhZ3MuZmlsdGVyKHggPT4gdGhpcy52YWx1ZS5zb21lKHkgPT4geSA9PSB4LmlkKSk7XG4gIH1cblxuICAvL0RlZmF1bHQgR2V0dGVyIGFuZCBTZXR0ZXJzIGZvciBhIEZvcm0gRmllbGQgSW1wbGVtZW50YXRpb25cbiAgZ2V0IGVtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLmxlbmd0aCA9PSAwO1xuICB9XG5cbiAgZ2V0IHNob3VsZExhYmVsRmxvYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCB8fCAhdGhpcy5lbXB0eSB8fCB0aGlzLnRhZ0lucHV0Q3RybC52YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMuX2Rpc2FibGVkID8gdGhpcy50YWdJbnB1dEN0cmwuZGlzYWJsZSgpIDogdGhpcy50YWdJbnB1dEN0cmwuZW5hYmxlKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cblxuICBwcml2YXRlIF92YWx1ZTogYW55W10gPSBbXTtcbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKHRhZ0lkczogYW55KSB7XG4gICAgaWYgKHRhZ0lkcykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFnSWRzKSkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHRhZ0lkcyB8fCBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlLnB1c2godGFnSWRzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZXJyb3JTdGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50YWdJbnB1dEN0cmwuZGlydHkgJiYgdGhpcy5yZXF1aXJlZCAmJiAodGhpcy52YWx1ZS5sZW5ndGggPT0gMCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gIH1cbiAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nO1xuXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcblxuICAgIC8vQVBJIHRvIGxvYWQgYWxsIHRhZ3MgZm9yIHRoZSBtb2RlbCB0eXBlXG4gICAgaWYgKHRoaXMuYWxsVGFncy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5odHRwU2VydmljZVxuICAgICAgICAuY2FjaGUoIXRoaXMuY29uZmlnLmlzQ2FjaGVUYWdzKVxuICAgICAgICAuZ2V0KHRoaXMuY29uZmlnLmFwaVVybCwge1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgY2F0ZWdvcmllczogdGhpcy5jYXRlZ29yaWVzLmpvaW4oJywnKSxcbiAgICAgICAgICAgIHBlclBhZ2U6ICcxMDAwJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgICApLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmFsbFRhZ3MgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy9BUEkgdG8gbG9hZCBvbmx5IHRoZSBzZWxlY3RlZCB0YWdzIGZvciB0aGUgbW9kZWxcbiAgICBpZiAodGhpcy5tb2RlbElkICYmIHRoaXMudmFsdWUubGVuZ3RoID09IDApIHtcbiAgICAgIC8vTW9kZWwgSWQgaXMgcGFzc2VkIGFuZCBubyB0YWdzIGFyZSBwcmVzZW50LCBzbyB3ZSBxdWVyeSBkYiBmb3IgdGhlIGF2aWxhYmxlIHRhZ3MgZm9yIHRoZSBtb2RlbCBJRC5cbiAgICAgIHRoaXMuaHR0cFNlcnZpY2VcbiAgICAgICAgLmNhY2hlKCF0aGlzLmNvbmZpZy5pc0NhY2hlVGFncylcbiAgICAgICAgLmdldCh0aGlzLmNvbmZpZy5hcGlVcmwsIHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IHRoaXMuY2F0ZWdvcmllcy5qb2luKCcsJyksXG4gICAgICAgICAgICBtb2RlbF90eXBlOiB0aGlzLm1vZGVsVHlwZSxcbiAgICAgICAgICAgIG1vZGVsX2lkOiB0aGlzLm1vZGVsSWQsXG4gICAgICAgICAgICBwZXJQYWdlOiAnMTAwMCdcbiAgICAgICAgICB9XG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IChyZXN1bHQ/LmRhdGEgfHwgW10pLm1hcCgoeDogYW55KSA9PiB4LmlkKTtcbiAgICAgICAgICB0aGlzLl9oYW5kbGVJbnB1dCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpbml0KCkge1xuICAgIGlmICh0aGlzLm1vZGVsSWQgJiYgdGhpcy5hbGxUYWdzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAvL01vZGVsIElkIGlzIHBhc3NlZCBhbmQgbm8gdGFncyBhcmUgcGFzc2VkLCBzbyB3ZSBxdWVyeSBkYiBmb3IgdGhlIGF2aWxhYmxlIHRhZ3MgZm9yIHRoZSBtb2RlbCBJRC5cbiAgICAgIHRoaXMuaHR0cFNlcnZpY2VcbiAgICAgICAgLmNhY2hlKCF0aGlzLmNvbmZpZy5pc0NhY2hlVGFncylcbiAgICAgICAgLmdldCh0aGlzLmNvbmZpZy5hcGlVcmwsIHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IHRoaXMuY2F0ZWdvcmllcy5qb2luKCcsJyksXG4gICAgICAgICAgICBtb2RlbF90eXBlOiB0aGlzLm1vZGVsVHlwZSxcbiAgICAgICAgICAgIG1vZGVsX2lkOiB0aGlzLm1vZGVsSWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5hbGxUYWdzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWx0ZXJlZFRhZ3MoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXIoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2ZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgaHR0cFNlcnZpY2U6IEh0dHBTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0ZPUk1fRklFTEQpIHB1YmxpYyBfZm9ybUZpZWxkOiBNYXRGb3JtRmllbGQsXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wpIHtcblxuICAgIHRoaXMudGFnSW5wdXRDdHJsLnZhbHVlQ2hhbmdlc1xuICAgICAgLnN1YnNjcmliZShmaWx0ZXJWYWx1ZSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyU3RyaW5nID0gZmlsdGVyVmFsdWU7XG4gICAgICB9KTtcblxuICAgIC8vU2V0IEZvY3VzIE1vbml0b3JcbiAgICBfZm9jdXNNb25pdG9yLm1vbml0b3IoX2VsZW1lbnRSZWYsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgaWYgKHRoaXMuZm9jdXNlZCAmJiAhb3JpZ2luKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvY3VzZWQgPSAhIW9yaWdpbjtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKSB7XG4gICAgLy8gSnVzdCBhIGVtcHR5IGltcGxlbWVudGF0aW9uIGZvciBNYXQgRm9ybSBGaWVsZCBJbnRlcmZhY2VcbiAgfVxuXG4gIG9uQ29udGFpbmVyQ2xpY2soKSB7XG4gICAgLy8gSnVzdCBhIGVtcHR5IGltcGxlbWVudGF0aW9uIGZvciBNYXQgRm9ybSBGaWVsZCBJbnRlcmZhY2VcbiAgfVxuXG5cbiAgYXN5bmMgYWRkKGV2ZW50OiBNYXRDaGlwSW5wdXRFdmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnZhbHVlIHx8ICcnKS50cmltKCk7XG4gICAgLy8gQWRkIG91ciB0YWdcbiAgICAvLyBWYWxpZGF0ZSBmb3Igc2luZ2xlIG1vZGVcbiAgICBpZiAoIXRoaXMuY29uZmlnLmlzU2luZ2xlIHx8ICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIGlmICh2YWx1ZSAmJiB0aGlzLmNvbmZpZy5pc0NyZWF0ZWFibGUpIHtcbiAgICAgICAgY29uc3QgdGFncyA9IHRoaXMuYWxsVGFncztcbiAgICAgICAgbGV0IHRhZyA9IHRhZ3MuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnRpdGxlLnRvTG93ZXJDYXNlKCkgPT0gdmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmICghdGFnKSB7XG4gICAgICAgICAgLy9ObyB0YWcgcHJlc2VudCBpbiB0aGUgbGlzdFxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IGF3YWl0IHRoaXMuaHR0cFNlcnZpY2UucG9zdCh0aGlzLmNvbmZpZy5jcmVhdGVBcGlVcmwsIHtcbiAgICAgICAgICAgICAgdGl0bGU6IHZhbHVlLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsdWUsXG4gICAgICAgICAgICAgIGNhdGVnb3J5X3RpdGxlOiAodGhpcy5jYXRlZ29yaWVzLmxlbmd0aCA+IDApID8gKHRoaXMuZGVmYXVsdENyZWF0ZUNhdGVnb3J5ID8gdGhpcy5kZWZhdWx0Q3JlYXRlQ2F0ZWdvcnkgOiB0aGlzLmNhdGVnb3JpZXNbMF0pIDogJydcbiAgICAgICAgICAgIH0pLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgdGFnID0gcmVzdWx0Lml0ZW07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5hbGxUYWdzLnB1c2godGFnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvL09wdGlvbmFsbHkgY2xlYW4gdGhlIGV4aXN0aW5nIHZhbHVlLCB0byBhdm9pZCBkdXBsaWNhdGVcbiAgICAgICAgICB0aGlzLnJlbW92ZSh0YWcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0YWcuaWQpO1xuICAgICAgICB0aGlzLl9oYW5kbGVJbnB1dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFyIHRoZSBpbnB1dCB2YWx1ZVxuICAgIGV2ZW50LmNoaXBJbnB1dC5pbnB1dEVsZW1lbnQudmFsdWUgPSAnJztcblxuICAgIHRoaXMudGFnSW5wdXRDdHJsLnNldFZhbHVlKG51bGwpO1xuICB9XG5cbiAgcmVtb3ZlKHRhZzogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUuZmlsdGVyKHggPT4geCAhPT0gdGFnLmlkKTtcbiAgICB0aGlzLl9oYW5kbGVJbnB1dCgpO1xuICB9XG5cbiAgc2VsZWN0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBWYWxpZGF0ZSBmb3Igc2luZ2xlIG1vZGVcbiAgICBpZiAoIXRoaXMuY29uZmlnLmlzU2luZ2xlIHx8ICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIC8vQ2xlYW4gdGhlIGV4aXN0aW5nIHZhbHVlLCB0byBhdm9pZCBkdXBsaWNhdGVcbiAgICAgIHRoaXMucmVtb3ZlKHsgaWQ6IGV2ZW50Lm9wdGlvbi52YWx1ZSB9KTtcbiAgICAgIHRoaXMudmFsdWUucHVzaChldmVudC5vcHRpb24udmFsdWUpO1xuICAgICAgdGhpcy5faGFuZGxlSW5wdXQoKTtcbiAgICB9XG4gICAgdGhpcy50YWdJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgdGhpcy50YWdJbnB1dEN0cmwuc2V0VmFsdWUobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXIoKTogYW55W10ge1xuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdGhpcy5maWx0ZXJTdHJpbmcgPyB0aGlzLmZpbHRlclN0cmluZy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xuICAgIGNvbnN0IGF2YWlsYWJsZVRhZ3MgPSB0aGlzLmFsbFRhZ3MuZmlsdGVyKCh0YWc6IGFueSkgPT4gIXRoaXMudmFsdWUuc29tZSgoaXRlbTogYW55KSA9PiBpdGVtID09IHRhZy5pZCkpO1xuICAgIHJldHVybiBmaWx0ZXJWYWx1ZSA/IGF2YWlsYWJsZVRhZ3MuZmlsdGVyKCh0YWc6IGFueSkgPT4gdGFnLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKSA6IGF2YWlsYWJsZVRhZ3M7XG4gIH1cblxuICB3cml0ZVZhbHVlKHRhZ0lkczogYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdGFnSWRzIHx8IFtdO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIF9oYW5kbGVJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzYWJsZWQ6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3JlcXVpcmVkOiBCb29sZWFuSW5wdXQ7XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcbiAgICB0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZik7XG4gIH1cblxufVxuIiwiPG1hdC1jaGlwLWxpc3QgI2NoaXBMaXN0IGFyaWEtbGFiZWw9XCJUYWcgU2VsZWN0aW9uXCI+XG4gICAgPG1hdC1jaGlwICpuZ0Zvcj1cImxldCB0YWcgb2YgdGFnc1wiIFtzZWxlY3RhYmxlXT1cImNvbmZpZy5zZWxlY3RhYmxlXCIgW3JlbW92YWJsZV09XCJjb25maWcucmVtb3ZhYmxlXCJcbiAgICAgICAgKHJlbW92ZWQpPVwicmVtb3ZlKHRhZylcIj5cbiAgICAgICAge3t0YWcudGl0bGV9fVxuICAgICAgICA8YnV0dG9uIG1hdENoaXBSZW1vdmUgKm5nSWY9XCJjb25maWcucmVtb3ZhYmxlXCIgY2xhc3M9XCJib3JkZXItMFwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LXJlbGF0aXZlLWljb25cIj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC1jaGlwPlxuICAgIDxpbnB1dCBwbGFjZWhvbGRlcj1cInt7Y29uZmlnLmlzQ3JlYXRlYWJsZT8gY29uZmlnLnBsYWNlaG9sZGVyOicnfX1cIiAjdGFnSW5wdXQgW2Zvcm1Db250cm9sXT1cInRhZ0lucHV0Q3RybFwiXG4gICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RcIlxuICAgICAgICBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwiY29uZmlnLnNlcGFyYXRvcktleXNDb2Rlc1wiIChtYXRDaGlwSW5wdXRUb2tlbkVuZCk9XCJhZGQoJGV2ZW50KVwiXG4gICAgICAgICN0cmlnZ2VyPVwibWF0QXV0b2NvbXBsZXRlVHJpZ2dlclwiIChjbGljayk9XCJ0cmlnZ2VyLm9wZW5QYW5lbCgpXCI+XG48L21hdC1jaGlwLWxpc3Q+XG48bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJzZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHRhZyBvZiBmaWx0ZXJlZFRhZ3NcIiBbdmFsdWVdPVwidGFnLmlkXCI+XG4gICAgICAgIHt7dGFnLnRpdGxlfX1cbiAgICA8L21hdC1vcHRpb24+XG48L21hdC1hdXRvY29tcGxldGU+Il19
|
|
@@ -186,14 +186,14 @@ let UsersViewAllComponent = class UsersViewAllComponent extends TechlifyListingC
|
|
|
186
186
|
}
|
|
187
187
|
};
|
|
188
188
|
UsersViewAllComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UsersViewAllComponent, deps: [{ token: i1.HttpService }, { token: i1.AlertService }, { token: i2.CurrentUserService }, { token: i3.UserConfigService }, { token: i4.MatDialog }, { token: i5.UserService }, { token: i6.UntypedFormBuilder }, { token: i7.RequestHelperService }, { token: i8.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
189
|
-
UsersViewAllComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UsersViewAllComponent, selector: "app-users-view-all", inputs: { clientId: "clientId", userTypeIds: "userTypeIds", title: "title" }, usesInheritance: true, ngImport: i0, template: "<div [ngClass]=\"{'m-4':config?.userConfig?.showDefaultMargin}\">\n <mat-card class=\"mb-2\">\n <mat-card-content class=\"d-flex justify-content-between align-items center gap-2\">\n <section class=\"d-flex justify-content-start align-items-center gap-2\">\n <h3 class=\"mb-0\">\n {{ title }}\n </h3>\n <mat-icon class=\"cursor-pointer\" matTooltip=\"New User\"\n *ngIf=\"config?.userConfig?.showAddUser && currentUserService?.hasPermission('user_create')\"\n (click)=\"createOrEditUser()\">add</mat-icon>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../import']\" *ngIf=\"config?.userConfig?.showImportButton\">\n Import User\n </button>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../roles']\" *ngIf=\"config?.userConfig?.showRoles\">\n <mat-icon>people</mat-icon>\n Manage Roles\n </button>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../role-permissions']\"\n *ngIf=\"config?.userConfig?.showPermissions\">\n <mat-icon>lock</mat-icon>\n Role Permissions\n </button>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../configurations']\"\n *ngIf=\"config?.userConfig?.showConfigurations && currentUser?.user_type_id === 2\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n toggle_on\n </span>\n </mat-icon>\n Configurations\n </button>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../restrictors']\"\n *ngIf=\"config?.userConfig?.showRestrictors && currentUser?.user_type_id === 2\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n vpn_lock\n </span>\n </mat-icon>\n Restrictors\n </button>\n </section>\n <form [formGroup]=\"filterForm\" class=\"d-flex justify-content-end align-items-center gap-2\">\n <mat-form-field style=\"max-width: 150px;\">\n <mat-label>Search</mat-label>\n <input autocomplete=\"off\" matInput type=\"text\" name=\"search\" placeholder=\"Search by name, email\" formControlName=\"search\">\n </mat-form-field>\n <mat-form-field style=\"max-width: 150px;\">\n <mat-label>Role</mat-label>\n <app-searchable-selector apiUrl=\"api/roles\" [multiple]=\"true\" formControlName=\"role_ids\"\n titleField=\"label\"></app-searchable-selector>\n </mat-form-field>\n <mat-button-toggle-group formControlName=\"status\" multiple>\n <mat-button-toggle value=\"enabled\">Enabled</mat-button-toggle>\n <mat-button-toggle value=\"disabled\">Disabled</mat-button-toggle>\n </mat-button-toggle-group>\n </form>\n </mat-card-content>\n </mat-card>\n <mat-card class=\"mt-2 p-0\">\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" class=\"w-100\" aria-describedby=\"Users\" infiniteScroll\n [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\" [infiniteScrollContainer]=\"scrollContainer\"\n [fromRoot]=\"true\" (scrolled)=\"onScroll()\" matSort (matSortChange)=\"onSortChange($event)\">\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index;\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Name Column -->\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell mat-sort-header=\"name\" *matHeaderCellDef> Name </th>\n <td mat-cell *matCellDef=\"let element\">\n <a [routerLink]=\"[element?.id]\" class=\"text-decoration-none\">\n {{ element.name }}\n </a>\n <p class=\"mb-0 text-secondary\">\n {{ element?.user_client?.is_enabled ? 'Enabled' : 'Disabled' }}\n </p>\n </td>\n </ng-container>\n\n <!-- Email Column -->\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell mat-sort-header=\"email\" *matHeaderCellDef> Email </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.email}} </td>\n </ng-container>\n\n <!-- Type Column -->\n <ng-container matColumnDef=\"type\">\n <th mat-header-cell mat-sort-header=\"user_type_id\" *matHeaderCellDef> User Type </th>\n <td mat-cell *matCellDef=\"let element\"> {{ getUserType(element) }} </td>\n </ng-container>\n\n <!-- Roles Column -->\n <ng-container matColumnDef=\"roles\">\n <th mat-header-cell *matHeaderCellDef> Role </th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"d-flex justify-content-start align-items-center gap-1 flex-wrap\">\n <span\n *ngFor=\"let role of element?.roles\"\n class=\"badge bg-secondary\"\n >\n {{ role?.label }}\n </span>\n </div>\n </td>\n </ng-container>\n\n <!-- Last Login Column -->\n <ng-container matColumnDef=\"last_login\">\n <th mat-header-cell *matHeaderCellDef> Last Login </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.last_login | date:'medium' }}</td>\n </ng-container>\n\n <!-- Added By Column -->\n <ng-container matColumnDef=\"added_by\">\n <th mat-header-cell *matHeaderCellDef> Added By </th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-0\">{{ element?.creator?.name }}</p>\n <p class=\"text-secondary\">{{ element?.created_at | date }}</p>\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef> Action </th>\n <td mat-cell *matCellDef=\"let element\">\n <div fxLayout fxLayoutAlign=\"start center\" fxLayoutGap=\"5px\">\n <button type=\"button\" mat-icon-button [routerLink]=\"[element.id]\">\n <mat-icon>visibility</mat-icon>\n </button>\n\n <button *ngIf=\"currentUserService.hasPermission('user_update')\" type=\"button\" mat-icon-button\n (click)=\"createOrEditUser(element)\">\n <mat-icon>edit</mat-icon>\n </button>\n\n <button *ngIf=\"currentUserService.hasPermission('user_delete')\" type=\"button\" mat-icon-button\n (click)=\"deleteUser(element)\">\n <mat-icon>delete</mat-icon>\n </button>\n <app-user-enable-button [user]=\"element\" (onSave)=\"reload()\"></app-user-enable-button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n <mat-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n </mat-card-content>\n </mat-card>\n</div>\n", dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i8.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatLabel, selector: "mat-label" }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i13.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"] }, { kind: "directive", type: i14.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i14.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i15.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i15.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i15.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i15.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i15.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i15.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i15.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i15.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i15.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i15.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i16.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i16.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "directive", type: i17.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i18.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i18.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: i19.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i19.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i19.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i20.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i21.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "component", type: i22.SearchableSelectorComponent, selector: "app-searchable-selector", inputs: ["valueField", "titleField", "subtitleField", "apiUrl", "multiple", "selectedValue", "enableSearch", "add", "addConfig", "edit", "editConfig", "sort", "sortBy", "searchField", "itemComponent", "items", "apiDataProperty", "cache", "perPage", "inDataSearch", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange"] }, { kind: "component", type: i23.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i24.UserEnableButtonComponent, selector: "app-user-enable-button", inputs: ["user", "isUseIcons"], outputs: ["onSave"] }, { kind: "pipe", type: i9.DatePipe, name: "date" }] });
|
|
189
|
+
UsersViewAllComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UsersViewAllComponent, selector: "app-users-view-all", inputs: { clientId: "clientId", userTypeIds: "userTypeIds", title: "title" }, usesInheritance: true, ngImport: i0, template: "<div [ngClass]=\"{'m-4':config?.userConfig?.showDefaultMargin}\">\n <mat-card class=\"mb-2\">\n <mat-card-content class=\"d-flex justify-content-between align-items center gap-2\">\n <section class=\"d-flex justify-content-start align-items-center gap-2\">\n <h3 class=\"mb-0\">\n {{ title }}\n </h3>\n <mat-icon class=\"cursor-pointer\" matTooltip=\"New User\"\n *ngIf=\"config?.userConfig?.showAddUser && currentUserService?.hasPermission('user_create')\"\n (click)=\"createOrEditUser()\">add</mat-icon>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../import']\" *ngIf=\"config?.userConfig?.showImportButton\">\n Import User\n </button>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../roles']\" *ngIf=\"config?.userConfig?.showRoles\">\n <mat-icon>people</mat-icon>\n Roles\n </button>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../role-permissions']\"\n *ngIf=\"config?.userConfig?.showPermissions\">\n <mat-icon>lock</mat-icon>\n Role Permissions\n </button>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../configurations']\"\n *ngIf=\"config?.userConfig?.showConfigurations && currentUser?.user_type_id === 2\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n toggle_on\n </span>\n </mat-icon>\n Configurations\n </button>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../restrictors']\"\n *ngIf=\"config?.userConfig?.showRestrictors && currentUser?.user_type_id === 2\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n vpn_lock\n </span>\n </mat-icon>\n Restrictors\n </button>\n </section>\n <form [formGroup]=\"filterForm\" class=\"d-flex justify-content-end align-items-center gap-2\">\n <mat-form-field style=\"max-width: 150px;\">\n <mat-label>Search</mat-label>\n <input autocomplete=\"off\" matInput type=\"text\" name=\"search\" placeholder=\"Search by name, email\" formControlName=\"search\">\n </mat-form-field>\n <mat-form-field style=\"max-width: 150px;\">\n <mat-label>Role</mat-label>\n <app-searchable-selector apiUrl=\"api/roles\" [multiple]=\"true\" formControlName=\"role_ids\"\n titleField=\"label\"></app-searchable-selector>\n </mat-form-field>\n <mat-button-toggle-group formControlName=\"status\" multiple>\n <mat-button-toggle value=\"enabled\">Enabled</mat-button-toggle>\n <mat-button-toggle value=\"disabled\">Disabled</mat-button-toggle>\n </mat-button-toggle-group>\n </form>\n </mat-card-content>\n </mat-card>\n <mat-card class=\"mt-2 p-0\">\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" class=\"w-100\" aria-describedby=\"Users\" infiniteScroll\n [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\" [infiniteScrollContainer]=\"scrollContainer\"\n [fromRoot]=\"true\" (scrolled)=\"onScroll()\" matSort (matSortChange)=\"onSortChange($event)\">\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index;\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Name Column -->\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell mat-sort-header=\"name\" *matHeaderCellDef> Name </th>\n <td mat-cell *matCellDef=\"let element\">\n <a [routerLink]=\"[element?.id]\" class=\"text-decoration-none\">\n {{ element.name }}\n </a>\n <p class=\"mb-0 text-secondary\">\n <!-- !element?.user_client condition added to check if user has user_client record -->\n {{ !element?.user_client ? '' : element?.user_client?.is_enabled ? 'Enabled' : 'Disabled' }}\n </p>\n </td>\n </ng-container>\n\n <!-- Email Column -->\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell mat-sort-header=\"email\" *matHeaderCellDef> Email </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.email}} </td>\n </ng-container>\n\n <!-- Type Column -->\n <ng-container matColumnDef=\"type\">\n <th mat-header-cell mat-sort-header=\"user_type_id\" *matHeaderCellDef> User Type </th>\n <td mat-cell *matCellDef=\"let element\"> {{ getUserType(element) }} </td>\n </ng-container>\n\n <!-- Roles Column -->\n <ng-container matColumnDef=\"roles\">\n <th mat-header-cell *matHeaderCellDef> Role </th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"d-flex justify-content-start align-items-center gap-1 flex-wrap\">\n <span\n *ngFor=\"let role of element?.roles\"\n class=\"badge bg-secondary\"\n >\n {{ role?.label }}\n </span>\n </div>\n </td>\n </ng-container>\n\n <!-- Last Login Column -->\n <ng-container matColumnDef=\"last_login\">\n <th mat-header-cell *matHeaderCellDef> Last Login </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.last_login | date:'medium' }}</td>\n </ng-container>\n\n <!-- Added By Column -->\n <ng-container matColumnDef=\"added_by\">\n <th mat-header-cell *matHeaderCellDef> Added By </th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-0\">{{ element?.creator?.name }}</p>\n <p class=\"text-secondary\">{{ element?.created_at | date }}</p>\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef> Action </th>\n <td mat-cell *matCellDef=\"let element\">\n <div fxLayout fxLayoutAlign=\"start center\" fxLayoutGap=\"5px\">\n <button type=\"button\" mat-icon-button [routerLink]=\"[element.id]\">\n <mat-icon>visibility</mat-icon>\n </button>\n\n <button *ngIf=\"currentUserService.hasPermission('user_update')\" type=\"button\" mat-icon-button\n (click)=\"createOrEditUser(element)\">\n <mat-icon>edit</mat-icon>\n </button>\n\n <button *ngIf=\"currentUserService.hasPermission('user_delete')\" type=\"button\" mat-icon-button\n (click)=\"deleteUser(element)\">\n <mat-icon>delete</mat-icon>\n </button>\n <app-user-enable-button [user]=\"element\" (onSave)=\"reload()\"></app-user-enable-button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n <mat-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n </mat-card-content>\n </mat-card>\n</div>\n", dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i8.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatLabel, selector: "mat-label" }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i13.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"] }, { kind: "directive", type: i14.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i14.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i15.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i15.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i15.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i15.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i15.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i15.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i15.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i15.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i15.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i15.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i16.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i16.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "directive", type: i17.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i18.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i18.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: i19.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i19.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i19.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i20.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i21.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "component", type: i22.SearchableSelectorComponent, selector: "app-searchable-selector", inputs: ["valueField", "titleField", "subtitleField", "apiUrl", "multiple", "selectedValue", "enableSearch", "add", "addConfig", "edit", "editConfig", "sort", "sortBy", "searchField", "itemComponent", "items", "apiDataProperty", "cache", "perPage", "inDataSearch", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange"] }, { kind: "component", type: i23.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i24.UserEnableButtonComponent, selector: "app-user-enable-button", inputs: ["user", "isUseIcons"], outputs: ["onSave"] }, { kind: "pipe", type: i9.DatePipe, name: "date" }] });
|
|
190
190
|
UsersViewAllComponent = __decorate([
|
|
191
191
|
UntilDestroy()
|
|
192
192
|
], UsersViewAllComponent);
|
|
193
193
|
export { UsersViewAllComponent };
|
|
194
194
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UsersViewAllComponent, decorators: [{
|
|
195
195
|
type: Component,
|
|
196
|
-
args: [{ selector: 'app-users-view-all', template: "<div [ngClass]=\"{'m-4':config?.userConfig?.showDefaultMargin}\">\n <mat-card class=\"mb-2\">\n <mat-card-content class=\"d-flex justify-content-between align-items center gap-2\">\n <section class=\"d-flex justify-content-start align-items-center gap-2\">\n <h3 class=\"mb-0\">\n {{ title }}\n </h3>\n <mat-icon class=\"cursor-pointer\" matTooltip=\"New User\"\n *ngIf=\"config?.userConfig?.showAddUser && currentUserService?.hasPermission('user_create')\"\n (click)=\"createOrEditUser()\">add</mat-icon>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../import']\" *ngIf=\"config?.userConfig?.showImportButton\">\n Import User\n </button>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../roles']\" *ngIf=\"config?.userConfig?.showRoles\">\n <mat-icon>people</mat-icon>\n
|
|
196
|
+
args: [{ selector: 'app-users-view-all', template: "<div [ngClass]=\"{'m-4':config?.userConfig?.showDefaultMargin}\">\n <mat-card class=\"mb-2\">\n <mat-card-content class=\"d-flex justify-content-between align-items center gap-2\">\n <section class=\"d-flex justify-content-start align-items-center gap-2\">\n <h3 class=\"mb-0\">\n {{ title }}\n </h3>\n <mat-icon class=\"cursor-pointer\" matTooltip=\"New User\"\n *ngIf=\"config?.userConfig?.showAddUser && currentUserService?.hasPermission('user_create')\"\n (click)=\"createOrEditUser()\">add</mat-icon>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../import']\" *ngIf=\"config?.userConfig?.showImportButton\">\n Import User\n </button>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../roles']\" *ngIf=\"config?.userConfig?.showRoles\">\n <mat-icon>people</mat-icon>\n Roles\n </button>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../role-permissions']\"\n *ngIf=\"config?.userConfig?.showPermissions\">\n <mat-icon>lock</mat-icon>\n Role Permissions\n </button>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../configurations']\"\n *ngIf=\"config?.userConfig?.showConfigurations && currentUser?.user_type_id === 2\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n toggle_on\n </span>\n </mat-icon>\n Configurations\n </button>\n <button mat-raised-button type=\"button\" [routerLink]=\"['../restrictors']\"\n *ngIf=\"config?.userConfig?.showRestrictors && currentUser?.user_type_id === 2\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n vpn_lock\n </span>\n </mat-icon>\n Restrictors\n </button>\n </section>\n <form [formGroup]=\"filterForm\" class=\"d-flex justify-content-end align-items-center gap-2\">\n <mat-form-field style=\"max-width: 150px;\">\n <mat-label>Search</mat-label>\n <input autocomplete=\"off\" matInput type=\"text\" name=\"search\" placeholder=\"Search by name, email\" formControlName=\"search\">\n </mat-form-field>\n <mat-form-field style=\"max-width: 150px;\">\n <mat-label>Role</mat-label>\n <app-searchable-selector apiUrl=\"api/roles\" [multiple]=\"true\" formControlName=\"role_ids\"\n titleField=\"label\"></app-searchable-selector>\n </mat-form-field>\n <mat-button-toggle-group formControlName=\"status\" multiple>\n <mat-button-toggle value=\"enabled\">Enabled</mat-button-toggle>\n <mat-button-toggle value=\"disabled\">Disabled</mat-button-toggle>\n </mat-button-toggle-group>\n </form>\n </mat-card-content>\n </mat-card>\n <mat-card class=\"mt-2 p-0\">\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" class=\"w-100\" aria-describedby=\"Users\" infiniteScroll\n [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\" [infiniteScrollContainer]=\"scrollContainer\"\n [fromRoot]=\"true\" (scrolled)=\"onScroll()\" matSort (matSortChange)=\"onSortChange($event)\">\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index;\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Name Column -->\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell mat-sort-header=\"name\" *matHeaderCellDef> Name </th>\n <td mat-cell *matCellDef=\"let element\">\n <a [routerLink]=\"[element?.id]\" class=\"text-decoration-none\">\n {{ element.name }}\n </a>\n <p class=\"mb-0 text-secondary\">\n <!-- !element?.user_client condition added to check if user has user_client record -->\n {{ !element?.user_client ? '' : element?.user_client?.is_enabled ? 'Enabled' : 'Disabled' }}\n </p>\n </td>\n </ng-container>\n\n <!-- Email Column -->\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell mat-sort-header=\"email\" *matHeaderCellDef> Email </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.email}} </td>\n </ng-container>\n\n <!-- Type Column -->\n <ng-container matColumnDef=\"type\">\n <th mat-header-cell mat-sort-header=\"user_type_id\" *matHeaderCellDef> User Type </th>\n <td mat-cell *matCellDef=\"let element\"> {{ getUserType(element) }} </td>\n </ng-container>\n\n <!-- Roles Column -->\n <ng-container matColumnDef=\"roles\">\n <th mat-header-cell *matHeaderCellDef> Role </th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"d-flex justify-content-start align-items-center gap-1 flex-wrap\">\n <span\n *ngFor=\"let role of element?.roles\"\n class=\"badge bg-secondary\"\n >\n {{ role?.label }}\n </span>\n </div>\n </td>\n </ng-container>\n\n <!-- Last Login Column -->\n <ng-container matColumnDef=\"last_login\">\n <th mat-header-cell *matHeaderCellDef> Last Login </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.last_login | date:'medium' }}</td>\n </ng-container>\n\n <!-- Added By Column -->\n <ng-container matColumnDef=\"added_by\">\n <th mat-header-cell *matHeaderCellDef> Added By </th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-0\">{{ element?.creator?.name }}</p>\n <p class=\"text-secondary\">{{ element?.created_at | date }}</p>\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef> Action </th>\n <td mat-cell *matCellDef=\"let element\">\n <div fxLayout fxLayoutAlign=\"start center\" fxLayoutGap=\"5px\">\n <button type=\"button\" mat-icon-button [routerLink]=\"[element.id]\">\n <mat-icon>visibility</mat-icon>\n </button>\n\n <button *ngIf=\"currentUserService.hasPermission('user_update')\" type=\"button\" mat-icon-button\n (click)=\"createOrEditUser(element)\">\n <mat-icon>edit</mat-icon>\n </button>\n\n <button *ngIf=\"currentUserService.hasPermission('user_delete')\" type=\"button\" mat-icon-button\n (click)=\"deleteUser(element)\">\n <mat-icon>delete</mat-icon>\n </button>\n <app-user-enable-button [user]=\"element\" (onSave)=\"reload()\"></app-user-enable-button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n <mat-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n </mat-card-content>\n </mat-card>\n</div>\n" }]
|
|
197
197
|
}], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i1.AlertService }, { type: i2.CurrentUserService }, { type: i3.UserConfigService }, { type: i4.MatDialog }, { type: i5.UserService }, { type: i6.UntypedFormBuilder }, { type: i7.RequestHelperService }, { type: i8.ActivatedRoute }]; }, propDecorators: { clientId: [{
|
|
198
198
|
type: Input
|
|
199
199
|
}], userTypeIds: [{
|
|
@@ -201,4 +201,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
|
|
|
201
201
|
}], title: [{
|
|
202
202
|
type: Input
|
|
203
203
|
}] } });
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMtdmlldy1hbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi91c2VyL3VzZXJzLXZpZXctYWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvdXNlci91c2Vycy12aWV3LWFsbC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUt6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBS3JELE9BQU8sRUFBZSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBU3RELHFCQUFxQixTQUFyQixxQkFBc0IsU0FBUSxrQ0FBa0M7SUF5QjNFLFlBQ1UsSUFBaUIsRUFDakIsWUFBMEIsRUFDM0Isa0JBQXNDLEVBQ3RDLGlCQUFvQyxFQUNuQyxNQUFpQixFQUNqQixXQUF3QixFQUN4QixFQUFzQixFQUN0QixvQkFBMEMsRUFDMUMsY0FBOEI7UUFFdEMsS0FBSyxFQUFFLENBQUM7UUFWQSxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzNCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsc0JBQWlCLEdBQWpCLGlCQUFpQixD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QUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxZQUFZLEtBQUssWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUM3RixVQUFVLEdBQUksSUFBSSxFQUFFLFlBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoRzthQUFNO1lBQ0wsVUFBVSxHQUFJLElBQUksRUFBRSxZQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQzlHO1FBQ0QsT0FBTyxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDdkMsQ0FBQztDQUNGLENBQUE7a0hBbkxZLHFCQUFxQjtzR0FBckIscUJBQXFCLCtKQ3pCbEMsc2xPQTBKQTtBRGpJYSxxQkFBcUI7SUFOakMsWUFBWSxFQUFFO0dBTUYscUJBQXFCLENBbUxqQztTQW5MWSxxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFFRSxvQkFBb0I7aVZBTXJCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFNRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuL3VzZXIubW9kZWwnO1xuaW1wb3J0IHsgQ3VycmVudFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi9jdXJyZW50LXVzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vdXNlci1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNdWx0aVVzZXJDb25maWcsIFVzZXJDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vdXNlci1jb25maWcnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSB9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICcuLi9kYXRhLXRhYmxlJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IFJlcXVlc3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vcmVxdWVzdC1oZWxwZXIvcmVxdWVzdC1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBY3Rpb25Qb3B1cCwgQWN0aW9uUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9hY3Rpb24tcG9wdXAnO1xuaW1wb3J0IHsgVXNlclR5cGVFbnVtIH0gZnJvbSAnLi91c2VyLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBUZWNobGlmeUxpc3RpbmdDb250cm9sbGVySW50ZXJmYWNlIH0gZnJvbSAnLi4vYmFzZS1tb2RlbCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtdXNlcnMtdmlldy1hbGwnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlcnMtdmlldy1hbGwuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXNlcnNWaWV3QWxsQ29tcG9uZW50IGV4dGVuZHMgVGVjaGxpZnlMaXN0aW5nQ29udHJvbGxlckludGVyZmFjZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLy8gRm9yIGFkbWluIHBhZ2Ugd2UgbmVlZCB0byBwYXNzIHRoZSBjbGllbnQgSWRcbiAgQElucHV0KCkgY2xpZW50SWQ6IG51bWJlcjtcbiAgQElucHV0KCkgdXNlclR5cGVJZHM6IG51bWJlcltdID0gW107XG5cbiAgY3VycmVudFVzZXI6IFVzZXI7XG4gIGlzV29ya2luZyA9IGZhbHNlO1xuICBjb25maWc6IE11bHRpVXNlckNvbmZpZztcbiAgdXNlcjogVXNlcjtcbiAgQElucHV0KCkgdGl0bGUgPSAnVXNlciBNYW5hZ2VtZW50JztcbiAgcGFnZUV2ZW50OiBQYWdlRXZlbnQgPSB7IHBhZ2U6IDEsIHBlclBhZ2U6IDI1LCBsYXN0UGFnZTogMSB9O1xuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFtcbiAgICAnaW5kZXgnLFxuICAgICduYW1lJyxcbiAgICAnZW1haWwnLFxuICAgICd0eXBlJyxcbiAgICAncm9sZXMnLFxuICAgICdsYXN0X2xvZ2luJyxcbiAgICAnYWRkZWRfYnknLFxuICAgICdhY3Rpb25zJ1xuICBdO1xuXG4gIHNjcm9sbENvbnRhaW5lciA9ICcubWF0LXNpZGVuYXYtY29udGVudCc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHB1YmxpYyBjdXJyZW50VXNlclNlcnZpY2U6IEN1cnJlbnRVc2VyU2VydmljZSxcbiAgICBwdWJsaWMgdXNlckNvbmZpZ1NlcnZpY2U6IFVzZXJDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcmVxdWVzdEhlbHBlclNlcnZpY2U6IFJlcXVlc3RIZWxwZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sYXN0UGFnZSA9IDA7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLnVzZXJDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnPy5zY3JvbGxDb250YWluZXIpIHtcbiAgICAgIC8vIFNldCB0byBudWxsIGlmIHNjcm9sbCBoYXMgdG8gYmUgZG9uZSBmcm9tIHJvb3RcbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5jb25maWc/LnNjcm9sbENvbnRhaW5lciA9PT0gJ3Jvb3QnID8gbnVsbCA6IHRoaXMuY29uZmlnPy5zY3JvbGxDb250YWluZXI7XG4gICAgfVxuICB9XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnR5cGVkZWZcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gY3JlYXRlIHRoZSBmaWx0ZXIgZm9ybVxuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xuICAgIHRoaXMuY3VycmVudFVzZXIgPSB0aGlzLmN1cnJlbnRVc2VyU2VydmljZS5nZXRVc2VyKCk7XG5cbiAgICB0aGlzLmZpbHRlckZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHRoaXMucmVxdWVzdEhlbHBlclNlcnZpY2UuY29udmVydFRvRm9ybURhdGEodmFsdWUpO1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWxwZXJTZXJ2aWNlLnVwZGF0ZVF1ZXJ5UGFyYW1zKHBhcmFtcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyB1cGRhdGUgZm9ybSB3aXRoIHF1ZXJ5IHBhcmFtc1xuICAgIHRoaXMucmVxdWVzdEhlbHBlclNlcnZpY2UudXBkYXRlRm9ybVdpdGhRdWVyeVBhcmFtcyh0aGlzLmZpbHRlckZvcm0sIHtcbiAgICAgIHJvbGVfaWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgICBzdGF0dXM6IHsgbXVsdGlwbGU6IHRydWUgfSxcbiAgICB9KTtcblxuICAgIC8vIGxpc3RlbiBmb3Igcm91dGUgY2hhbmdlXG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtc1xuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDgwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgc2VhcmNoOiBbJyddLFxuICAgICAgcm9sZV9pZHM6IFsnJ10sXG4gICAgICBzdGF0dXM6IFsnZW5hYmxlZCddLFxuICAgICAgc29ydF9ieTogWydpZHxBU0MnXSxcbiAgICAgIHJlbGF0aW9uczogWydyb2xlcyx0eXBlLHVzZXJDbGllbnRzLnR5cGUsY3JlYXRvcix1c2VyQ2xpZW50J10sXG4gICAgICBhcHBlbmRzOiBbJ2xhc3RfbG9naW4nXSxcbiAgICAgIGNsaWVudF9pZDogW3RoaXMuY2xpZW50SWRdXG4gICAgfSk7XG4gIH1cblxuICBsb2FkRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgbGV0IHBhcmFtczogYW55ID0gdGhpcy5yZXF1ZXN0SGVscGVyU2VydmljZS5jb252ZXJ0VG9Gb3JtRGF0YSh0aGlzLmZpbHRlckZvcm0udmFsdWUpO1xuICAgIGNvbnN0IGNsaWVudElkID0gdGhpcy5jbGllbnRJZCA/PyB0aGlzLmN1cnJlbnRVc2VyPy5jbGllbnRfaWQ7XG4gICAgcGFyYW1zID0geyAuLi5wYXJhbXMsIG51bV9pdGVtczogYCR7dGhpcy5wYWdlRXZlbnQucGVyUGFnZX18JHt0aGlzLnBhZ2VFdmVudC5wYWdlfWAsIHVzZXJfdHlwZV9pZHM6IHRoaXMudXNlclR5cGVJZHMudG9TdHJpbmcoKSB9O1xuXG4gICAgdGhpcy5odHRwLmdldCgnYXBpL3VzZXJzJywgeyBwYXJhbXMgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzV29ya2luZyA9IGZhbHNlO1xuICAgICAgICBjb25zdCB1c2VyczogYW55W10gPSB0aGlzLm1vZGVscz8uY29uY2F0KHJlc3VsdD8uZGF0YSk7XG4gICAgICAgIHRoaXMucGFnZUV2ZW50LnBhZ2UgPSByZXN1bHQuY3VycmVudF9wYWdlO1xuICAgICAgICB0aGlzLnBhZ2VFdmVudC5sYXN0UGFnZSA9IHJlc3VsdC5sYXN0X3BhZ2U7XG4gICAgICAgIHVzZXJzLmZvckVhY2goKHVzZXJEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBjbGllbnQ6IGFueSA9ICh1c2VyRGF0YT8udXNlcl9jbGllbnRzIGFzIGFueVtdIHx8IFtdKVxuICAgICAgICAgICAgLmZpbmQoKHVzZXJDbGllbnQ6IGFueSkgPT4gdXNlckNsaWVudC5jbGllbnRfaWQgPT09IGNsaWVudElkICYmIHVzZXJDbGllbnQudXNlcl9pZCA9PT0gdXNlckRhdGEuaWQpO1xuICAgICAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgICAgIHVzZXJEYXRhLnVzZXJfdHlwZV9pZCA9IGNsaWVudC51c2VyX3R5cGVfaWQ7XG4gICAgICAgICAgICB1c2VyRGF0YS5jbGllbnRfaWQgPSBjbGllbnQuY2xpZW50X2lkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubW9kZWxzID0gdXNlcnM7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHRoaXMuaXNXb3JraW5nID0gZmFsc2VcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZU9yRWRpdFVzZXIodXNlcj86IGFueSk6IHZvaWQge1xuICAgIHVzZXIgPSB1c2VyID8gdXNlciA6IHt9O1xuICAgIHVzZXIuY2xpZW50X2lkID0gdGhpcy5jbGllbnRJZCA/PyB0aGlzLmN1cnJlbnRVc2VyPy5jbGllbnRfaWQ7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihVc2VyRm9ybUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc3MDBweCcsXG4gICAgICBkYXRhOiB1c2VyLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgIHJlc3RvcmVGb2N1czogZmFsc2VcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShhc3luYyByZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlVXNlcih1c2VyOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50VXNlci5pZCAhPT0gdXNlcj8uaWQpIHtcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWN0aW9uUG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB0aXRsZTogJ0RlbGV0aW5nIFVzZXInLFxuICAgICAgICAgIG1lc3NhZ2U6IGBBcmUgeW91IHN1cmUgdG8gcHJvY2VlZCBkZWxldGluZyB0aGUgdXNlciAke3VzZXIubmFtZX0/YFxuICAgICAgICB9IGFzIEFjdGlvblBvcHVwLFxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKGFzeW5jIHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAvLyBBY3Rpb24gY29uZmlybWVkXG4gICAgICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5kZWxldGVVc2VyKFxuICAgICAgICAgICAgdXNlci5pZCxcbiAgICAgICAgICAgIHsgY2xpZW50X2lkOiB1c2VyLmNsaWVudF9pZCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnQ3VycmVudCB1c2VyIGNhbm5vdCBiZSBkZWxldGVkJywgJ3dhcm4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHRoZSBzb3J0IGNoYW5nZSBldmVudC5cbiAgICogQHBhcmFtIHNvcnQgU29ydFxuICAgKi9cbiAgb25Tb3J0Q2hhbmdlKHNvcnQ6IFNvcnQpOiB2b2lkIHtcbiAgICBjb25zdCBkaXJlY3Rpb246IHN0cmluZyA9IHNvcnQuZGlyZWN0aW9uID8gc29ydC5kaXJlY3Rpb24gOiAnYXNjJztcbiAgICBjb25zdCBjb2x1bW46IHN0cmluZyA9IHNvcnQuYWN0aXZlID8gc29ydC5hY3RpdmUgOiAnaWQnO1xuICAgIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ3NvcnRfYnknKS5zZXRWYWx1ZShjb2x1bW4gKyAnfCcgKyBkaXJlY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdXNlciB0eXBlIGZvciB0aGUgY3VycmVudCBjbGllbnQuXG4gICAqXG4gICAqIEBwYXJhbSB1c2VyIFVzZXJcbiAgICovXG4gIGdldFVzZXJUeXBlKHVzZXI6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IHVzZXJDbGllbnQ6IGFueTtcbiAgICBpZiAodGhpcy5jdXJyZW50VXNlclNlcnZpY2UuZ2V0VXNlcigpPy51c2VyX3R5cGVfaWQgPT09IFVzZXJUeXBlRW51bS5BRE1JTiAmJiAhIXRoaXMuY2xpZW50SWQpIHtcbiAgICAgIHVzZXJDbGllbnQgPSAodXNlcj8udXNlcl9jbGllbnRzIGFzIFtdKS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0/LmNsaWVudF9pZCA9PT0gdGhpcy5jbGllbnRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVzZXJDbGllbnQgPSAodXNlcj8udXNlcl9jbGllbnRzIGFzIFtdKS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0/LmNsaWVudF9pZCA9PT0gdGhpcy5jdXJyZW50VXNlcj8uY2xpZW50X2lkKTtcbiAgICB9XG4gICAgcmV0dXJuIHVzZXJDbGllbnQ/LnR5cGU/LnRpdGxlIHx8ICcnO1xuICB9XG59XG4iLCI8ZGl2IFtuZ0NsYXNzXT1cInsnbS00Jzpjb25maWc/LnVzZXJDb25maWc/LnNob3dEZWZhdWx0TWFyZ2lufVwiPlxuICA8bWF0LWNhcmQgY2xhc3M9XCJtYi0yXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMgY2VudGVyIGdhcC0yXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cIm1iLTBcIj5cbiAgICAgICAgICB7eyB0aXRsZSB9fVxuICAgICAgICA8L2gzPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIG1hdFRvb2x0aXA9XCJOZXcgVXNlclwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbmZpZz8udXNlckNvbmZpZz8uc2hvd0FkZFVzZXIgJiYgY3VycmVudFVzZXJTZXJ2aWNlPy5oYXNQZXJtaXNzaW9uKCd1c2VyX2NyZWF0ZScpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVPckVkaXRVc2VyKClcIj5hZGQ8L21hdC1pY29uPlxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBbcm91dGVyTGlua109XCJbJy4uL2ltcG9ydCddXCIgKm5nSWY9XCJjb25maWc/LnVzZXJDb25maWc/LnNob3dJbXBvcnRCdXR0b25cIj5cbiAgICAgICAgICBJbXBvcnQgVXNlclxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW3JvdXRlckxpbmtdPVwiWycuLi9yb2xlcyddXCIgKm5nSWY9XCJjb25maWc/LnVzZXJDb25maWc/LnNob3dSb2xlc1wiPlxuICAgICAgICAgIDxtYXQtaWNvbj5wZW9wbGU8L21hdC1pY29uPlxuICAgICAgICAgIE1hbmFnZSBSb2xlc1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW3JvdXRlckxpbmtdPVwiWycuLi9yb2xlLXBlcm1pc3Npb25zJ11cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnPy51c2VyQ29uZmlnPy5zaG93UGVybWlzc2lvbnNcIj5cbiAgICAgICAgICA8bWF0LWljb24+bG9jazwvbWF0LWljb24+XG4gICAgICAgICAgUm9sZSBQZXJtaXNzaW9uc1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW3JvdXRlckxpbmtdPVwiWycuLi9jb25maWd1cmF0aW9ucyddXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbmZpZz8udXNlckNvbmZpZz8uc2hvd0NvbmZpZ3VyYXRpb25zICYmIGN1cnJlbnRVc2VyPy51c2VyX3R5cGVfaWQgPT09IDJcIj5cbiAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cbiAgICAgICAgICB0b2dnbGVfb25cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgQ29uZmlndXJhdGlvbnNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiIFtyb3V0ZXJMaW5rXT1cIlsnLi4vcmVzdHJpY3RvcnMnXVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb25maWc/LnVzZXJDb25maWc/LnNob3dSZXN0cmljdG9ycyAmJiBjdXJyZW50VXNlcj8udXNlcl90eXBlX2lkID09PSAyXCI+XG4gICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XG4gICAgICAgICAgdnBuX2xvY2tcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgUmVzdHJpY3RvcnNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1cIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJtYXgtd2lkdGg6IDE1MHB4O1wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+U2VhcmNoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNlYXJjaFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGJ5IG5hbWUsIGVtYWlsXCIgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoXCI+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBzdHlsZT1cIm1heC13aWR0aDogMTUwcHg7XCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5Sb2xlPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yIGFwaVVybD1cImFwaS9yb2xlc1wiIFttdWx0aXBsZV09XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwicm9sZV9pZHNcIlxuICAgICAgICAgICAgdGl0bGVGaWVsZD1cImxhYmVsXCI+PC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIGZvcm1Db250cm9sTmFtZT1cInN0YXR1c1wiIG11bHRpcGxlPlxuICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cImVuYWJsZWRcIj5FbmFibGVkPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJkaXNhYmxlZFwiPkRpc2FibGVkPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgIDwvZm9ybT5cbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gIDwvbWF0LWNhcmQ+XG4gIDxtYXQtY2FyZCBjbGFzcz1cIm10LTIgcC0wXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cIm1vZGVsc1wiIGNsYXNzPVwidy0xMDBcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiVXNlcnNcIiBpbmZpbml0ZVNjcm9sbFxuICAgICAgICAgICAgIFtpbmZpbml0ZVNjcm9sbERpc3RhbmNlXT1cIjJcIiBbaW5maW5pdGVTY3JvbGxUaHJvdHRsZV09XCI1MFwiIFtpbmZpbml0ZVNjcm9sbENvbnRhaW5lcl09XCJzY3JvbGxDb250YWluZXJcIlxuICAgICAgICAgICAgIFtmcm9tUm9vdF09XCJ0cnVlXCIgKHNjcm9sbGVkKT1cIm9uU2Nyb2xsKClcIiBtYXRTb3J0IChtYXRTb3J0Q2hhbmdlKT1cIm9uU29ydENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDwhLS0gSW5kZXggQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImluZGV4XCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gIyA8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50OyBsZXQgaSA9IGluZGV4O1wiPiB7eyBpICsgMSB9fSA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIE5hbWUgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm5hbWVcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsIG1hdC1zb3J0LWhlYWRlcj1cIm5hbWVcIiAqbWF0SGVhZGVyQ2VsbERlZj4gTmFtZSA8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbZWxlbWVudD8uaWRdXCIgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZVwiPlxuICAgICAgICAgICAgICB7eyBlbGVtZW50Lm5hbWUgfX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCB0ZXh0LXNlY29uZGFyeVwiPlxuICAgICAgICAgICAgICB7eyBlbGVtZW50Py51c2VyX2NsaWVudD8uaXNfZW5hYmxlZCA/ICdFbmFibGVkJyA6ICdEaXNhYmxlZCcgfX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIEVtYWlsIENvbHVtbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJlbWFpbFwiPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgbWF0LXNvcnQtaGVhZGVyPVwiZW1haWxcIiAqbWF0SGVhZGVyQ2VsbERlZj4gRW1haWwgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPiB7e2VsZW1lbnQuZW1haWx9fSA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFR5cGUgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInR5cGVcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsIG1hdC1zb3J0LWhlYWRlcj1cInVzZXJfdHlwZV9pZFwiICptYXRIZWFkZXJDZWxsRGVmPiBVc2VyIFR5cGUgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPiB7eyBnZXRVc2VyVHlwZShlbGVtZW50KSB9fSA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFJvbGVzIENvbHVtbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyb2xlc1wiPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IFJvbGUgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xIGZsZXgtd3JhcFwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByb2xlIG9mIGVsZW1lbnQ/LnJvbGVzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJnLXNlY29uZGFyeVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyByb2xlPy5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIExhc3QgTG9naW4gQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImxhc3RfbG9naW5cIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiBMYXN0IExvZ2luIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj57eyBlbGVtZW50Py5sYXN0X2xvZ2luIHwgZGF0ZTonbWVkaXVtJyB9fTwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gQWRkZWQgQnkgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImFkZGVkX2J5XCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gQWRkZWQgQnkgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCI+e3sgZWxlbWVudD8uY3JlYXRvcj8ubmFtZSB9fTwvcD5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIj57eyBlbGVtZW50Py5jcmVhdGVkX2F0IHwgZGF0ZSB9fTwvcD5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIEFjdGlvbnMgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImFjdGlvbnNcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiBBY3Rpb24gPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dCBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhMYXlvdXRHYXA9XCI1cHhcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIFtyb3V0ZXJMaW5rXT1cIltlbGVtZW50LmlkXVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj52aXNpYmlsaXR5PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImN1cnJlbnRVc2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKCd1c2VyX3VwZGF0ZScpXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVPckVkaXRVc2VyKGVsZW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY3VycmVudFVzZXJTZXJ2aWNlLmhhc1Blcm1pc3Npb24oJ3VzZXJfZGVsZXRlJylcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVVzZXIoZWxlbWVudClcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxhcHAtdXNlci1lbmFibGUtYnV0dG9uIFt1c2VyXT1cImVsZW1lbnRcIiAob25TYXZlKT1cInJlbG9hZCgpXCI+PC9hcHAtdXNlci1lbmFibGUtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCI+PC90cj5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8bWF0LXByb2dyZXNzLWJhciAqbmdJZj1cImlzV29ya2luZ1wiIG1vZGU9XCJpbmRldGVybWluYXRlXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPC9tYXQtY2FyZD5cbjwvZGl2PlxuIl19
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMtdmlldy1hbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi91c2VyL3VzZXJzLXZpZXctYWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvdXNlci91c2Vycy12aWV3LWFsbC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUt6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBS3JELE9BQU8sRUFBZSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBU3RELHFCQUFxQixTQUFyQixxQkFBc0IsU0FBUSxrQ0FBa0M7SUF5QjNFLFlBQ1UsSUFBaUIsRUFDakIsWUFBMEIsRUFDM0Isa0JBQXNDLEVBQ3RDLGlCQUFvQyxFQUNuQyxNQUFpQixFQUNqQixXQUF3QixFQUN4QixFQUFzQixFQUN0QixvQkFBMEMsRUFDMUMsY0FBOEI7UUFFdEMsS0FBSyxFQUFFLENBQUM7UUFWQSxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzNCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsc0JBQWlCLEdBQWpCLGlCQUFpQixD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QUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxZQUFZLEtBQUssWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUM3RixVQUFVLEdBQUksSUFBSSxFQUFFLFlBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoRzthQUFNO1lBQ0wsVUFBVSxHQUFJLElBQUksRUFBRSxZQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQzlHO1FBQ0QsT0FBTyxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDdkMsQ0FBQztDQUNGLENBQUE7a0hBbkxZLHFCQUFxQjtzR0FBckIscUJBQXFCLCtKQ3pCbEMsa3RPQTJKQTtBRGxJYSxxQkFBcUI7SUFOakMsWUFBWSxFQUFFO0dBTUYscUJBQXFCLENBbUxqQztTQW5MWSxxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFFRSxvQkFBb0I7aVZBTXJCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFNRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuL3VzZXIubW9kZWwnO1xuaW1wb3J0IHsgQ3VycmVudFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi9jdXJyZW50LXVzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vdXNlci1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNdWx0aVVzZXJDb25maWcsIFVzZXJDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vdXNlci1jb25maWcnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSB9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICcuLi9kYXRhLXRhYmxlJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IFJlcXVlc3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vcmVxdWVzdC1oZWxwZXIvcmVxdWVzdC1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBY3Rpb25Qb3B1cCwgQWN0aW9uUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9hY3Rpb24tcG9wdXAnO1xuaW1wb3J0IHsgVXNlclR5cGVFbnVtIH0gZnJvbSAnLi91c2VyLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBUZWNobGlmeUxpc3RpbmdDb250cm9sbGVySW50ZXJmYWNlIH0gZnJvbSAnLi4vYmFzZS1tb2RlbCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtdXNlcnMtdmlldy1hbGwnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlcnMtdmlldy1hbGwuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXNlcnNWaWV3QWxsQ29tcG9uZW50IGV4dGVuZHMgVGVjaGxpZnlMaXN0aW5nQ29udHJvbGxlckludGVyZmFjZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLy8gRm9yIGFkbWluIHBhZ2Ugd2UgbmVlZCB0byBwYXNzIHRoZSBjbGllbnQgSWRcbiAgQElucHV0KCkgY2xpZW50SWQ6IG51bWJlcjtcbiAgQElucHV0KCkgdXNlclR5cGVJZHM6IG51bWJlcltdID0gW107XG5cbiAgY3VycmVudFVzZXI6IFVzZXI7XG4gIGlzV29ya2luZyA9IGZhbHNlO1xuICBjb25maWc6IE11bHRpVXNlckNvbmZpZztcbiAgdXNlcjogVXNlcjtcbiAgQElucHV0KCkgdGl0bGUgPSAnVXNlciBNYW5hZ2VtZW50JztcbiAgcGFnZUV2ZW50OiBQYWdlRXZlbnQgPSB7IHBhZ2U6IDEsIHBlclBhZ2U6IDI1LCBsYXN0UGFnZTogMSB9O1xuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFtcbiAgICAnaW5kZXgnLFxuICAgICduYW1lJyxcbiAgICAnZW1haWwnLFxuICAgICd0eXBlJyxcbiAgICAncm9sZXMnLFxuICAgICdsYXN0X2xvZ2luJyxcbiAgICAnYWRkZWRfYnknLFxuICAgICdhY3Rpb25zJ1xuICBdO1xuXG4gIHNjcm9sbENvbnRhaW5lciA9ICcubWF0LXNpZGVuYXYtY29udGVudCc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHB1YmxpYyBjdXJyZW50VXNlclNlcnZpY2U6IEN1cnJlbnRVc2VyU2VydmljZSxcbiAgICBwdWJsaWMgdXNlckNvbmZpZ1NlcnZpY2U6IFVzZXJDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcmVxdWVzdEhlbHBlclNlcnZpY2U6IFJlcXVlc3RIZWxwZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sYXN0UGFnZSA9IDA7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLnVzZXJDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnPy5zY3JvbGxDb250YWluZXIpIHtcbiAgICAgIC8vIFNldCB0byBudWxsIGlmIHNjcm9sbCBoYXMgdG8gYmUgZG9uZSBmcm9tIHJvb3RcbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5jb25maWc/LnNjcm9sbENvbnRhaW5lciA9PT0gJ3Jvb3QnID8gbnVsbCA6IHRoaXMuY29uZmlnPy5zY3JvbGxDb250YWluZXI7XG4gICAgfVxuICB9XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnR5cGVkZWZcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gY3JlYXRlIHRoZSBmaWx0ZXIgZm9ybVxuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xuICAgIHRoaXMuY3VycmVudFVzZXIgPSB0aGlzLmN1cnJlbnRVc2VyU2VydmljZS5nZXRVc2VyKCk7XG5cbiAgICB0aGlzLmZpbHRlckZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHRoaXMucmVxdWVzdEhlbHBlclNlcnZpY2UuY29udmVydFRvRm9ybURhdGEodmFsdWUpO1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWxwZXJTZXJ2aWNlLnVwZGF0ZVF1ZXJ5UGFyYW1zKHBhcmFtcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyB1cGRhdGUgZm9ybSB3aXRoIHF1ZXJ5IHBhcmFtc1xuICAgIHRoaXMucmVxdWVzdEhlbHBlclNlcnZpY2UudXBkYXRlRm9ybVdpdGhRdWVyeVBhcmFtcyh0aGlzLmZpbHRlckZvcm0sIHtcbiAgICAgIHJvbGVfaWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgICBzdGF0dXM6IHsgbXVsdGlwbGU6IHRydWUgfSxcbiAgICB9KTtcblxuICAgIC8vIGxpc3RlbiBmb3Igcm91dGUgY2hhbmdlXG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtc1xuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDgwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgc2VhcmNoOiBbJyddLFxuICAgICAgcm9sZV9pZHM6IFsnJ10sXG4gICAgICBzdGF0dXM6IFsnZW5hYmxlZCddLFxuICAgICAgc29ydF9ieTogWydpZHxBU0MnXSxcbiAgICAgIHJlbGF0aW9uczogWydyb2xlcyx0eXBlLHVzZXJDbGllbnRzLnR5cGUsY3JlYXRvcix1c2VyQ2xpZW50J10sXG4gICAgICBhcHBlbmRzOiBbJ2xhc3RfbG9naW4nXSxcbiAgICAgIGNsaWVudF9pZDogW3RoaXMuY2xpZW50SWRdXG4gICAgfSk7XG4gIH1cblxuICBsb2FkRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgbGV0IHBhcmFtczogYW55ID0gdGhpcy5yZXF1ZXN0SGVscGVyU2VydmljZS5jb252ZXJ0VG9Gb3JtRGF0YSh0aGlzLmZpbHRlckZvcm0udmFsdWUpO1xuICAgIGNvbnN0IGNsaWVudElkID0gdGhpcy5jbGllbnRJZCA/PyB0aGlzLmN1cnJlbnRVc2VyPy5jbGllbnRfaWQ7XG4gICAgcGFyYW1zID0geyAuLi5wYXJhbXMsIG51bV9pdGVtczogYCR7dGhpcy5wYWdlRXZlbnQucGVyUGFnZX18JHt0aGlzLnBhZ2VFdmVudC5wYWdlfWAsIHVzZXJfdHlwZV9pZHM6IHRoaXMudXNlclR5cGVJZHMudG9TdHJpbmcoKSB9O1xuXG4gICAgdGhpcy5odHRwLmdldCgnYXBpL3VzZXJzJywgeyBwYXJhbXMgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzV29ya2luZyA9IGZhbHNlO1xuICAgICAgICBjb25zdCB1c2VyczogYW55W10gPSB0aGlzLm1vZGVscz8uY29uY2F0KHJlc3VsdD8uZGF0YSk7XG4gICAgICAgIHRoaXMucGFnZUV2ZW50LnBhZ2UgPSByZXN1bHQuY3VycmVudF9wYWdlO1xuICAgICAgICB0aGlzLnBhZ2VFdmVudC5sYXN0UGFnZSA9IHJlc3VsdC5sYXN0X3BhZ2U7XG4gICAgICAgIHVzZXJzLmZvckVhY2goKHVzZXJEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBjbGllbnQ6IGFueSA9ICh1c2VyRGF0YT8udXNlcl9jbGllbnRzIGFzIGFueVtdIHx8IFtdKVxuICAgICAgICAgICAgLmZpbmQoKHVzZXJDbGllbnQ6IGFueSkgPT4gdXNlckNsaWVudC5jbGllbnRfaWQgPT09IGNsaWVudElkICYmIHVzZXJDbGllbnQudXNlcl9pZCA9PT0gdXNlckRhdGEuaWQpO1xuICAgICAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgICAgIHVzZXJEYXRhLnVzZXJfdHlwZV9pZCA9IGNsaWVudC51c2VyX3R5cGVfaWQ7XG4gICAgICAgICAgICB1c2VyRGF0YS5jbGllbnRfaWQgPSBjbGllbnQuY2xpZW50X2lkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubW9kZWxzID0gdXNlcnM7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHRoaXMuaXNXb3JraW5nID0gZmFsc2VcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZU9yRWRpdFVzZXIodXNlcj86IGFueSk6IHZvaWQge1xuICAgIHVzZXIgPSB1c2VyID8gdXNlciA6IHt9O1xuICAgIHVzZXIuY2xpZW50X2lkID0gdGhpcy5jbGllbnRJZCA/PyB0aGlzLmN1cnJlbnRVc2VyPy5jbGllbnRfaWQ7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihVc2VyRm9ybUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc3MDBweCcsXG4gICAgICBkYXRhOiB1c2VyLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgIHJlc3RvcmVGb2N1czogZmFsc2VcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShhc3luYyByZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlVXNlcih1c2VyOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50VXNlci5pZCAhPT0gdXNlcj8uaWQpIHtcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWN0aW9uUG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB0aXRsZTogJ0RlbGV0aW5nIFVzZXInLFxuICAgICAgICAgIG1lc3NhZ2U6IGBBcmUgeW91IHN1cmUgdG8gcHJvY2VlZCBkZWxldGluZyB0aGUgdXNlciAke3VzZXIubmFtZX0/YFxuICAgICAgICB9IGFzIEFjdGlvblBvcHVwLFxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKGFzeW5jIHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAvLyBBY3Rpb24gY29uZmlybWVkXG4gICAgICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5kZWxldGVVc2VyKFxuICAgICAgICAgICAgdXNlci5pZCxcbiAgICAgICAgICAgIHsgY2xpZW50X2lkOiB1c2VyLmNsaWVudF9pZCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnQ3VycmVudCB1c2VyIGNhbm5vdCBiZSBkZWxldGVkJywgJ3dhcm4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHRoZSBzb3J0IGNoYW5nZSBldmVudC5cbiAgICogQHBhcmFtIHNvcnQgU29ydFxuICAgKi9cbiAgb25Tb3J0Q2hhbmdlKHNvcnQ6IFNvcnQpOiB2b2lkIHtcbiAgICBjb25zdCBkaXJlY3Rpb246IHN0cmluZyA9IHNvcnQuZGlyZWN0aW9uID8gc29ydC5kaXJlY3Rpb24gOiAnYXNjJztcbiAgICBjb25zdCBjb2x1bW46IHN0cmluZyA9IHNvcnQuYWN0aXZlID8gc29ydC5hY3RpdmUgOiAnaWQnO1xuICAgIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ3NvcnRfYnknKS5zZXRWYWx1ZShjb2x1bW4gKyAnfCcgKyBkaXJlY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdXNlciB0eXBlIGZvciB0aGUgY3VycmVudCBjbGllbnQuXG4gICAqXG4gICAqIEBwYXJhbSB1c2VyIFVzZXJcbiAgICovXG4gIGdldFVzZXJUeXBlKHVzZXI6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IHVzZXJDbGllbnQ6IGFueTtcbiAgICBpZiAodGhpcy5jdXJyZW50VXNlclNlcnZpY2UuZ2V0VXNlcigpPy51c2VyX3R5cGVfaWQgPT09IFVzZXJUeXBlRW51bS5BRE1JTiAmJiAhIXRoaXMuY2xpZW50SWQpIHtcbiAgICAgIHVzZXJDbGllbnQgPSAodXNlcj8udXNlcl9jbGllbnRzIGFzIFtdKS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0/LmNsaWVudF9pZCA9PT0gdGhpcy5jbGllbnRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVzZXJDbGllbnQgPSAodXNlcj8udXNlcl9jbGllbnRzIGFzIFtdKS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0/LmNsaWVudF9pZCA9PT0gdGhpcy5jdXJyZW50VXNlcj8uY2xpZW50X2lkKTtcbiAgICB9XG4gICAgcmV0dXJuIHVzZXJDbGllbnQ/LnR5cGU/LnRpdGxlIHx8ICcnO1xuICB9XG59XG4iLCI8ZGl2IFtuZ0NsYXNzXT1cInsnbS00Jzpjb25maWc/LnVzZXJDb25maWc/LnNob3dEZWZhdWx0TWFyZ2lufVwiPlxuICA8bWF0LWNhcmQgY2xhc3M9XCJtYi0yXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMgY2VudGVyIGdhcC0yXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cIm1iLTBcIj5cbiAgICAgICAgICB7eyB0aXRsZSB9fVxuICAgICAgICA8L2gzPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIG1hdFRvb2x0aXA9XCJOZXcgVXNlclwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbmZpZz8udXNlckNvbmZpZz8uc2hvd0FkZFVzZXIgJiYgY3VycmVudFVzZXJTZXJ2aWNlPy5oYXNQZXJtaXNzaW9uKCd1c2VyX2NyZWF0ZScpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVPckVkaXRVc2VyKClcIj5hZGQ8L21hdC1pY29uPlxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBbcm91dGVyTGlua109XCJbJy4uL2ltcG9ydCddXCIgKm5nSWY9XCJjb25maWc/LnVzZXJDb25maWc/LnNob3dJbXBvcnRCdXR0b25cIj5cbiAgICAgICAgICBJbXBvcnQgVXNlclxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW3JvdXRlckxpbmtdPVwiWycuLi9yb2xlcyddXCIgKm5nSWY9XCJjb25maWc/LnVzZXJDb25maWc/LnNob3dSb2xlc1wiPlxuICAgICAgICAgIDxtYXQtaWNvbj5wZW9wbGU8L21hdC1pY29uPlxuICAgICAgICAgIFJvbGVzXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBbcm91dGVyTGlua109XCJbJy4uL3JvbGUtcGVybWlzc2lvbnMnXVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb25maWc/LnVzZXJDb25maWc/LnNob3dQZXJtaXNzaW9uc1wiPlxuICAgICAgICAgIDxtYXQtaWNvbj5sb2NrPC9tYXQtaWNvbj5cbiAgICAgICAgICBSb2xlIFBlcm1pc3Npb25zXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBbcm91dGVyTGlua109XCJbJy4uL2NvbmZpZ3VyYXRpb25zJ11cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnPy51c2VyQ29uZmlnPy5zaG93Q29uZmlndXJhdGlvbnMgJiYgY3VycmVudFVzZXI/LnVzZXJfdHlwZV9pZCA9PT0gMlwiPlxuICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPlxuICAgICAgICAgIHRvZ2dsZV9vblxuICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICBDb25maWd1cmF0aW9uc1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW3JvdXRlckxpbmtdPVwiWycuLi9yZXN0cmljdG9ycyddXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbmZpZz8udXNlckNvbmZpZz8uc2hvd1Jlc3RyaWN0b3JzICYmIGN1cnJlbnRVc2VyPy51c2VyX3R5cGVfaWQgPT09IDJcIj5cbiAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cbiAgICAgICAgICB2cG5fbG9ja1xuICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICBSZXN0cmljdG9yc1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBzdHlsZT1cIm1heC13aWR0aDogMTUwcHg7XCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5TZWFyY2g8L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic2VhcmNoXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggYnkgbmFtZSwgZW1haWxcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hcIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwibWF4LXdpZHRoOiAxNTBweDtcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPlJvbGU8L21hdC1sYWJlbD5cbiAgICAgICAgICA8YXBwLXNlYXJjaGFibGUtc2VsZWN0b3IgYXBpVXJsPVwiYXBpL3JvbGVzXCIgW211bHRpcGxlXT1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJyb2xlX2lkc1wiXG4gICAgICAgICAgICB0aXRsZUZpZWxkPVwibGFiZWxcIj48L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgZm9ybUNvbnRyb2xOYW1lPVwic3RhdHVzXCIgbXVsdGlwbGU+XG4gICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwiZW5hYmxlZFwiPkVuYWJsZWQ8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cImRpc2FibGVkXCI+RGlzYWJsZWQ8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICAgICAgPC9mb3JtPlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPC9tYXQtY2FyZD5cbiAgPG1hdC1jYXJkIGNsYXNzPVwibXQtMiBwLTBcIj5cbiAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwibW9kZWxzXCIgY2xhc3M9XCJ3LTEwMFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJVc2Vyc1wiIGluZmluaXRlU2Nyb2xsXG4gICAgICAgICAgICAgW2luZmluaXRlU2Nyb2xsRGlzdGFuY2VdPVwiMlwiIFtpbmZpbml0ZVNjcm9sbFRocm90dGxlXT1cIjUwXCIgW2luZmluaXRlU2Nyb2xsQ29udGFpbmVyXT1cInNjcm9sbENvbnRhaW5lclwiXG4gICAgICAgICAgICAgW2Zyb21Sb290XT1cInRydWVcIiAoc2Nyb2xsZWQpPVwib25TY3JvbGwoKVwiIG1hdFNvcnQgKG1hdFNvcnRDaGFuZ2UpPVwib25Tb3J0Q2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPCEtLSBJbmRleCBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiaW5kZXhcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiAjIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7IGxldCBpID0gaW5kZXg7XCI+IHt7IGkgKyAxIH19IDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gTmFtZSBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibmFtZVwiPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgbWF0LXNvcnQtaGVhZGVyPVwibmFtZVwiICptYXRIZWFkZXJDZWxsRGVmPiBOYW1lIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIltlbGVtZW50Py5pZF1cIiBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi1ub25lXCI+XG4gICAgICAgICAgICAgIHt7IGVsZW1lbnQubmFtZSB9fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIHRleHQtc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgICAgIDwhLS0gIWVsZW1lbnQ/LnVzZXJfY2xpZW50IGNvbmRpdGlvbiBhZGRlZCB0byBjaGVjayBpZiB1c2VyIGhhcyB1c2VyX2NsaWVudCByZWNvcmQgLS0+XG4gICAgICAgICAgICAgIHt7ICFlbGVtZW50Py51c2VyX2NsaWVudCA/ICcnIDogZWxlbWVudD8udXNlcl9jbGllbnQ/LmlzX2VuYWJsZWQgPyAnRW5hYmxlZCcgOiAnRGlzYWJsZWQnIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBFbWFpbCBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZW1haWxcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsIG1hdC1zb3J0LWhlYWRlcj1cImVtYWlsXCIgKm1hdEhlYWRlckNlbGxEZWY+IEVtYWlsIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj4ge3tlbGVtZW50LmVtYWlsfX0gPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBUeXBlIENvbHVtbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ0eXBlXCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCBtYXQtc29ydC1oZWFkZXI9XCJ1c2VyX3R5cGVfaWRcIiAqbWF0SGVhZGVyQ2VsbERlZj4gVXNlciBUeXBlIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj4ge3sgZ2V0VXNlclR5cGUoZWxlbWVudCkgfX0gPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBSb2xlcyBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicm9sZXNcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiBSb2xlIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMSBmbGV4LXdyYXBcIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcm9sZSBvZiBlbGVtZW50Py5yb2xlc1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJiYWRnZSBiZy1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcm9sZT8ubGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBMYXN0IExvZ2luIENvbHVtbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJsYXN0X2xvZ2luXCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gTGFzdCBMb2dpbiA8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+e3sgZWxlbWVudD8ubGFzdF9sb2dpbiB8IGRhdGU6J21lZGl1bScgfX08L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIEFkZGVkIEJ5IENvbHVtbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhZGRlZF9ieVwiPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IEFkZGVkIEJ5IDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMFwiPnt7IGVsZW1lbnQ/LmNyZWF0b3I/Lm5hbWUgfX08L3A+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+e3sgZWxlbWVudD8uY3JlYXRlZF9hdCB8IGRhdGUgfX08L3A+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBBY3Rpb25zIENvbHVtbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gQWN0aW9uIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiNXB4XCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBbcm91dGVyTGlua109XCJbZWxlbWVudC5pZF1cIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+dmlzaWJpbGl0eTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjdXJyZW50VXNlclNlcnZpY2UuaGFzUGVybWlzc2lvbigndXNlcl91cGRhdGUnKVwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlT3JFZGl0VXNlcihlbGVtZW50KVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImN1cnJlbnRVc2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKCd1c2VyX2RlbGV0ZScpXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVVc2VyKGVsZW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YXBwLXVzZXItZW5hYmxlLWJ1dHRvbiBbdXNlcl09XCJlbGVtZW50XCIgKG9uU2F2ZSk9XCJyZWxvYWQoKVwiPjwvYXBwLXVzZXItZW5hYmxlLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XG4gICAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zO1wiPjwvdHI+XG4gICAgICA8L3RhYmxlPlxuICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgKm5nSWY9XCJpc1dvcmtpbmdcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gIDwvbWF0LWNhcmQ+XG48L2Rpdj5cbiJdfQ==
|