ngx-techlify-core 18.11.0 → 18.12.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/esm2022/lib/login/login-form-fields/login-form-fields.component.mjs +25 -10
- package/esm2022/lib/role/permission/permissions-management.component.mjs +10 -11
- package/esm2022/lib/searchable-selector/searchable-selector.component.mjs +3 -3
- package/esm2022/lib/user/user-form.component.mjs +7 -8
- package/fesm2022/ngx-techlify-core.mjs +86 -72
- package/fesm2022/ngx-techlify-core.mjs.map +1 -1
- package/lib/login/login-form-fields/login-form-fields.component.d.ts +3 -1
- package/package.json +1 -1
|
@@ -14,13 +14,14 @@ import * as i2 from "../../core";
|
|
|
14
14
|
import * as i3 from "../../user";
|
|
15
15
|
import * as i4 from "@angular/router";
|
|
16
16
|
import * as i5 from "../../user-config";
|
|
17
|
-
import * as i6 from "
|
|
18
|
-
import * as i7 from "@angular/
|
|
19
|
-
import * as i8 from "@angular/material/
|
|
20
|
-
import * as i9 from "@angular/material/
|
|
21
|
-
import * as i10 from "@angular/material/
|
|
17
|
+
import * as i6 from "ngx-permissions";
|
|
18
|
+
import * as i7 from "@angular/common";
|
|
19
|
+
import * as i8 from "@angular/material/button";
|
|
20
|
+
import * as i9 from "@angular/material/form-field";
|
|
21
|
+
import * as i10 from "@angular/material/input";
|
|
22
|
+
import * as i11 from "@angular/material/list";
|
|
22
23
|
let LoginFormFieldsComponent = class LoginFormFieldsComponent extends TechlifyFormComponentInterface {
|
|
23
|
-
constructor(fb, formValidatorService, config, credentialService, currentUserService, authService, router, route, userConfigService, errorHandler) {
|
|
24
|
+
constructor(fb, formValidatorService, config, credentialService, currentUserService, authService, router, route, userConfigService, errorHandler, ngxPermissionsService) {
|
|
24
25
|
super(formValidatorService);
|
|
25
26
|
this.fb = fb;
|
|
26
27
|
this.config = config;
|
|
@@ -31,6 +32,7 @@ let LoginFormFieldsComponent = class LoginFormFieldsComponent extends TechlifyFo
|
|
|
31
32
|
this.route = route;
|
|
32
33
|
this.userConfigService = userConfigService;
|
|
33
34
|
this.errorHandler = errorHandler;
|
|
35
|
+
this.ngxPermissionsService = ngxPermissionsService;
|
|
34
36
|
this.isWorking = false;
|
|
35
37
|
this.userType = UserTypeEnum;
|
|
36
38
|
this.errorMessages = {
|
|
@@ -96,6 +98,19 @@ let LoginFormFieldsComponent = class LoginFormFieldsComponent extends TechlifyFo
|
|
|
96
98
|
const login$ = this.authService.login(data);
|
|
97
99
|
login$.pipe(finalize(() => this.isWorking = false), untilDestroyed(this)).subscribe(credentials => {
|
|
98
100
|
this.currentUserService.updateCurrentUser(credentials?.user);
|
|
101
|
+
const user = credentials?.user;
|
|
102
|
+
const permissions = (user?.permissions || []).map((x) => x.slug);
|
|
103
|
+
if (user?.user_type_id === this.userType.ADMIN) {
|
|
104
|
+
permissions.push('app_admin');
|
|
105
|
+
}
|
|
106
|
+
else if (user?.user_type_id === this.userType.CLIENT_ADMIN) {
|
|
107
|
+
permissions.push('client_admin');
|
|
108
|
+
}
|
|
109
|
+
else if (user?.user_type_id === this.userType.CLIENT_USER) {
|
|
110
|
+
permissions.push('client_user');
|
|
111
|
+
}
|
|
112
|
+
this.ngxPermissionsService.flushPermissions();
|
|
113
|
+
this.ngxPermissionsService.loadPermissions(permissions);
|
|
99
114
|
this.handleUserRedirect();
|
|
100
115
|
}, error => {
|
|
101
116
|
this.handleLoginErrors(error);
|
|
@@ -113,8 +128,8 @@ let LoginFormFieldsComponent = class LoginFormFieldsComponent extends TechlifyFo
|
|
|
113
128
|
redirect(provider) {
|
|
114
129
|
window.location.href = this.userConfig.socialLoginRedirectUrl + provider;
|
|
115
130
|
}
|
|
116
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoginFormFieldsComponent, deps: [{ token: i1.FormBuilder }, { token: i2.FormValidatorService }, { token: i2.ConfigService }, { token: i2.CredentialsService }, { token: i3.CurrentUserService }, { token: i2.AuthenticationService }, { token: i4.Router }, { token: i4.ActivatedRoute }, { token: i5.UserConfigService }, { token: i2.ErrorHandlerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
117
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LoginFormFieldsComponent, isStandalone: true, selector: "app-login-form-fields", inputs: { userConfig: "userConfig" }, usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (ngSubmit)=\"login()\" class='d-flex flex-column gap-3'>\n <div *ngIf=\"!userClients\" class='d-flex flex-column gap-2'>\n <mat-form-field>\n <mat-label>Email</mat-label>\n <input matInput formControlName=\"email\" placeholder=\"Email\" type=\"email\" autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('email')\">{{getErrorMessage('email')}}</mat-error>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Password</mat-label>\n <input matInput formControlName=\"password\" placeholder=\"Password\" type=\"password\" autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('password')\">{{getErrorMessage('password')}}</mat-error>\n </mat-form-field>\n\n <div class=\"alert alert-danger\" *ngIf=\"loginError\">\n <p class=\"mb-0\">{{ loginError?.message }}</p>\n </div>\n\n <button mat-raised-button color=\"primary\" class=\"w-100\" type=\"submit\" [disabled]=\"isWorking\">\n LOGIN\n </button>\n\n <div class=\"mt-2\" *ngIf=\"userConfig.showSocialLogin\">\n <button class=\"w-100 google-button mb-2\" mat-raised-button type=\"button\"\n (click)=\"redirect('google')\">Google</button>\n\n <button class=\"w-100 facebook-button\" mat-raised-button type=\"button\"\n (click)=\"redirect('facebook')\">Facebook</button>\n </div>\n <div class=\"mt-2 mb-4 text-center\" *ngIf=\"userConfig.showForgotPassword\">\n <a href=\"javascript:;\" [routerLink]=\"['/forgot-password']\">Forgot password?</a>\n </div>\n </div>\n\n <div *ngIf=\"userClients\" class='d-flex flex-column gap-2'>\n <h4 class=\"section-title text-center mt-4\">\n {{ userClients ? 'SELECT CLIENT TO LOGIN WITH' : 'LOGIN' }}\n </h4>\n\n <mat-selection-list formControlName=\"selected_client\" [multiple]=\"false\">\n <mat-list-option *ngFor=\"let userClient of userClients\" [value]=\"userClient?.client_id\"\n [disabled]=\"!userClient?.is_enabled || isWorking\">\n {{ userClient?.client?.name }}\n </mat-list-option>\n </mat-selection-list>\n\n <div class=\"mt-2 mb-4 text-center\" *ngIf=\"userConfig.showForgotPassword\">\n <a href=\"javascript:;\" (click)=\"backToLogin()\">Back to Login</a>\n </div>\n </div>\n\n</form>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type:
|
|
131
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoginFormFieldsComponent, deps: [{ token: i1.FormBuilder }, { token: i2.FormValidatorService }, { token: i2.ConfigService }, { token: i2.CredentialsService }, { token: i3.CurrentUserService }, { token: i2.AuthenticationService }, { token: i4.Router }, { token: i4.ActivatedRoute }, { token: i5.UserConfigService }, { token: i2.ErrorHandlerService }, { token: i6.NgxPermissionsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
132
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LoginFormFieldsComponent, isStandalone: true, selector: "app-login-form-fields", inputs: { userConfig: "userConfig" }, usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (ngSubmit)=\"login()\" class='d-flex flex-column gap-3'>\n <div *ngIf=\"!userClients\" class='d-flex flex-column gap-2'>\n <mat-form-field>\n <mat-label>Email</mat-label>\n <input matInput formControlName=\"email\" placeholder=\"Email\" type=\"email\" autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('email')\">{{getErrorMessage('email')}}</mat-error>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Password</mat-label>\n <input matInput formControlName=\"password\" placeholder=\"Password\" type=\"password\" autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('password')\">{{getErrorMessage('password')}}</mat-error>\n </mat-form-field>\n\n <div class=\"alert alert-danger\" *ngIf=\"loginError\">\n <p class=\"mb-0\">{{ loginError?.message }}</p>\n </div>\n\n <button mat-raised-button color=\"primary\" class=\"w-100\" type=\"submit\" [disabled]=\"isWorking\">\n LOGIN\n </button>\n\n <div class=\"mt-2\" *ngIf=\"userConfig.showSocialLogin\">\n <button class=\"w-100 google-button mb-2\" mat-raised-button type=\"button\"\n (click)=\"redirect('google')\">Google</button>\n\n <button class=\"w-100 facebook-button\" mat-raised-button type=\"button\"\n (click)=\"redirect('facebook')\">Facebook</button>\n </div>\n <div class=\"mt-2 mb-4 text-center\" *ngIf=\"userConfig.showForgotPassword\">\n <a href=\"javascript:;\" [routerLink]=\"['/forgot-password']\">Forgot password?</a>\n </div>\n </div>\n\n <div *ngIf=\"userClients\" class='d-flex flex-column gap-2'>\n <h4 class=\"section-title text-center mt-4\">\n {{ userClients ? 'SELECT CLIENT TO LOGIN WITH' : 'LOGIN' }}\n </h4>\n\n <mat-selection-list formControlName=\"selected_client\" [multiple]=\"false\">\n <mat-list-option *ngFor=\"let userClient of userClients\" [value]=\"userClient?.client_id\"\n [disabled]=\"!userClient?.is_enabled || isWorking\">\n {{ userClient?.client?.name }}\n </mat-list-option>\n </mat-selection-list>\n\n <div class=\"mt-2 mb-4 text-center\" *ngIf=\"userConfig.showForgotPassword\">\n <a href=\"javascript:;\" (click)=\"backToLogin()\">Back to Login</a>\n </div>\n </div>\n\n</form>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MaterialModule }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatLabel, selector: "mat-label" }, { kind: "directive", type: i9.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i11.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i11.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
|
|
118
133
|
};
|
|
119
134
|
LoginFormFieldsComponent = __decorate([
|
|
120
135
|
UntilDestroy()
|
|
@@ -128,7 +143,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
128
143
|
ReactiveFormsModule,
|
|
129
144
|
RouterModule
|
|
130
145
|
], template: "<form [formGroup]=\"form\" (ngSubmit)=\"login()\" class='d-flex flex-column gap-3'>\n <div *ngIf=\"!userClients\" class='d-flex flex-column gap-2'>\n <mat-form-field>\n <mat-label>Email</mat-label>\n <input matInput formControlName=\"email\" placeholder=\"Email\" type=\"email\" autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('email')\">{{getErrorMessage('email')}}</mat-error>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Password</mat-label>\n <input matInput formControlName=\"password\" placeholder=\"Password\" type=\"password\" autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('password')\">{{getErrorMessage('password')}}</mat-error>\n </mat-form-field>\n\n <div class=\"alert alert-danger\" *ngIf=\"loginError\">\n <p class=\"mb-0\">{{ loginError?.message }}</p>\n </div>\n\n <button mat-raised-button color=\"primary\" class=\"w-100\" type=\"submit\" [disabled]=\"isWorking\">\n LOGIN\n </button>\n\n <div class=\"mt-2\" *ngIf=\"userConfig.showSocialLogin\">\n <button class=\"w-100 google-button mb-2\" mat-raised-button type=\"button\"\n (click)=\"redirect('google')\">Google</button>\n\n <button class=\"w-100 facebook-button\" mat-raised-button type=\"button\"\n (click)=\"redirect('facebook')\">Facebook</button>\n </div>\n <div class=\"mt-2 mb-4 text-center\" *ngIf=\"userConfig.showForgotPassword\">\n <a href=\"javascript:;\" [routerLink]=\"['/forgot-password']\">Forgot password?</a>\n </div>\n </div>\n\n <div *ngIf=\"userClients\" class='d-flex flex-column gap-2'>\n <h4 class=\"section-title text-center mt-4\">\n {{ userClients ? 'SELECT CLIENT TO LOGIN WITH' : 'LOGIN' }}\n </h4>\n\n <mat-selection-list formControlName=\"selected_client\" [multiple]=\"false\">\n <mat-list-option *ngFor=\"let userClient of userClients\" [value]=\"userClient?.client_id\"\n [disabled]=\"!userClient?.is_enabled || isWorking\">\n {{ userClient?.client?.name }}\n </mat-list-option>\n </mat-selection-list>\n\n <div class=\"mt-2 mb-4 text-center\" *ngIf=\"userConfig.showForgotPassword\">\n <a href=\"javascript:;\" (click)=\"backToLogin()\">Back to Login</a>\n </div>\n </div>\n\n</form>" }]
|
|
131
|
-
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.FormValidatorService }, { type: i2.ConfigService }, { type: i2.CredentialsService }, { type: i3.CurrentUserService }, { type: i2.AuthenticationService }, { type: i4.Router }, { type: i4.ActivatedRoute }, { type: i5.UserConfigService }, { type: i2.ErrorHandlerService }], propDecorators: { userConfig: [{
|
|
146
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.FormValidatorService }, { type: i2.ConfigService }, { type: i2.CredentialsService }, { type: i3.CurrentUserService }, { type: i2.AuthenticationService }, { type: i4.Router }, { type: i4.ActivatedRoute }, { type: i5.UserConfigService }, { type: i2.ErrorHandlerService }, { type: i6.NgxPermissionsService }], propDecorators: { userConfig: [{
|
|
132
147
|
type: Input
|
|
133
148
|
}] } });
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4tZm9ybS1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi9sb2dpbi9sb2dpbi1mb3JtLWZpZWxkcy9sb2dpbi1mb3JtLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2xvZ2luL2xvZ2luLWZvcm0tZmllbGRzL2xvZ2luLWZvcm0tZmllbGRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBMEIsbUJBQW1CLEVBQW9CLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckUsT0FBTyxFQUEwQixZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7OztBQWVsRCxJQUFNLHdCQUF3QixHQUE5QixNQUFNLHdCQUF5QixTQUFRLDhCQUE4QjtJQVcxRSxZQUFvQixFQUFlLEVBQ2pDLG9CQUEwQyxFQUNsQyxNQUFxQixFQUNyQixpQkFBcUMsRUFDdEMsa0JBQXNDLEVBQ3JDLFdBQWtDLEVBQ2xD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aUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8saUJBQWlCLENBQUMsUUFBYTtRQUNyQyxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxHQUFHLFFBQVEsRUFBRSxLQUFLLENBQUM7UUFDbkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUM7UUFDOUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQVE7UUFDZixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixHQUFHLFFBQVEsQ0FBQztJQUMzRSxDQUFDOytHQXJIVSx3QkFBd0I7bUdBQXhCLHdCQUF3Qiw4SUMxQnJDLDZ2RUFrRE8seUREOUJILFlBQVksK1BBQ1osY0FBYyxnMUNBQ2QsbUJBQW1CLHlxQ0FDbkIsWUFBWTs7QUFHSCx3QkFBd0I7SUFicEMsWUFBWSxFQUFFO0dBYUYsd0JBQXdCLENBc0hwQzs7NEZBdEhZLHdCQUF3QjtrQkFacEMsU0FBUzsrQkFDRSx1QkFBdUIsY0FHckIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLFlBQVk7cUJBQ2I7eVdBSVEsVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdGVyaWFsTW9kdWxlIH0gZnJvbSAnLi4vLi4vbWF0ZXJpYWwubW9kdWxlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUZWNobGlmeUZvcm1Db21wb25lbnRJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi9iYXNlLW1vZGVsJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSwgQ29uZmlnU2VydmljZSwgQ3JlZGVudGlhbHNTZXJ2aWNlLCBFcnJvckhhbmRsZXJTZXJ2aWNlLCBGb3JtVmFsaWRhdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBDdXJyZW50VXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNdWx0aVVzZXJDb25maWcsIFVzZXJDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXNlci1jb25maWcnO1xuaW1wb3J0IHsgVXNlclR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vdXNlci91c2VyLXR5cGUuZW51bSc7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWxvZ2luLWZvcm0tZmllbGRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLWZvcm0tZmllbGRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbG9naW4tZm9ybS1maWVsZHMuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRlcmlhbE1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFJvdXRlck1vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExvZ2luRm9ybUZpZWxkc0NvbXBvbmVudCBleHRlbmRzIFRlY2hsaWZ5Rm9ybUNvbXBvbmVudEludGVyZmFjZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgdXNlckNvbmZpZz86IE11bHRpVXNlckNvbmZpZztcblxuICBpc1dvcmtpbmcgPSBmYWxzZTtcbiAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgbG9naW5FcnJvcjogeyB0eXBlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9O1xuICB1c2VyQ2xpZW50cyE6IGFueVtdO1xuXG4gIHVzZXJUeXBlOiB0eXBlb2YgVXNlclR5cGVFbnVtID0gVXNlclR5cGVFbnVtO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIGZvcm1WYWxpZGF0b3JTZXJ2aWNlOiBGb3JtVmFsaWRhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGNyZWRlbnRpYWxTZXJ2aWNlOiBDcmVkZW50aWFsc1NlcnZpY2UsXG4gICAgcHVibGljIGN1cnJlbnRVc2VyU2VydmljZTogQ3VycmVudFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHB1YmxpYyB1c2VyQ29uZmlnU2VydmljZTogVXNlckNvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoZm9ybVZhbGlkYXRvclNlcnZpY2UpO1xuXG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0ge1xuICAgICAgZW1haWw6IHtcbiAgICAgICAgcmVxdWlyZWQ6ICdFbWFpbCBpcyByZXF1aXJlZCcsXG4gICAgICAgIGVtYWlsOiAnSW52YWxpZCBlbWFpbCdcbiAgICAgIH0sXG4gICAgICBwYXNzd29yZDoge1xuICAgICAgICByZXF1aXJlZDogJ1Bhc3N3b3JkIGlzIHJlcXVpcmVkJ1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmZvcm0gPSBmYi5ncm91cCh7XG4gICAgICBlbWFpbDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF1dLFxuICAgICAgcGFzc3dvcmQ6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBzZWxlY3RlZF9jbGllbnQ6IFsnJ10sXG4gICAgfSk7XG5cbiAgICAvLyBJZiB0aGUgY29uZmlnIHdhcyBub3QgcGFzc2VkIGxvYWQgaXQgZnJvbSB0aGUgc2VydmljZVxuICAgIGlmICghdGhpcy51c2VyQ29uZmlnKSB7XG4gICAgICB0aGlzLnVzZXJDb25maWcgPSB0aGlzLnVzZXJDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIGxpc3RlbiBmb3Igc2VsZWN0ZWRfY2xpZW50IGNoYW5nZSBhbmQgc3VibWl0IHRoZSBmb3JtLlxuICAgIHRoaXMuZm9ybS5nZXQoJ3NlbGVjdGVkX2NsaWVudCcpLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubG9naW4oKSk7XG5cbiAgICBpZiAodGhpcy5jcmVkZW50aWFsU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIHRoaXMuaGFuZGxlVXNlclJlZGlyZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlVXNlclJlZGlyZWN0KCkge1xuICAgIHRoaXMuY3VycmVudFVzZXJTZXJ2aWNlLmdldFVzZXJPYnNlcnZhYmxlKHRydWUpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAodXNlcikgPT4ge1xuICAgICAgICBpZiAodXNlci51c2VyX3R5cGVfaWQgPT0gdGhpcy51c2VyVHlwZS5BRE1JTikge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnJlZGlyZWN0IHx8ICdhcHAtYWRtaW4nXSwgeyByZXBsYWNlVXJsOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnJlZGlyZWN0IHx8ICdkYXNoYm9hcmQnXSwgeyByZXBsYWNlVXJsOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBsb2dpbigpIHtcbiAgICBpZiAoIXRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgLy8gcmVzZXQgbG9naW4gZXJyb3JcbiAgICB0aGlzLmxvZ2luRXJyb3IgPSBudWxsO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGNsaWVudF9pZDogMixcbiAgICAgIGNsaWVudF9zZWNyZXQ6IHRoaXMuY29uZmlnLmdldEF1dGhDbGllbnRTZWNyZXQoKSxcbiAgICAgIGdyYW50X3R5cGU6IHRoaXMuY29uZmlnLmdldEF1dGhHcmFudFR5cGUoKSxcbiAgICAgIHVzZXJuYW1lOiB0aGlzLmZvcm0udmFsdWUuZW1haWwsXG4gICAgICBwYXNzd29yZDogdGhpcy5mb3JtLnZhbHVlLnBhc3N3b3JkLFxuICAgICAgc2VsZWN0ZWRfY2xpZW50OiB0aGlzLmZvcm0udmFsdWUuc2VsZWN0ZWRfY2xpZW50Py50b1N0cmluZygpLFxuICAgICAgcmVtZW1iZXI6IHRydWVcbiAgICB9O1xuICAgIHRoaXMuY3JlZGVudGlhbFNlcnZpY2Uuc2V0Q3JlZGVudGlhbHMoKTtcbiAgICBjb25zdCBsb2dpbiQgPSB0aGlzLmF1dGhTZXJ2aWNlLmxvZ2luKGRhdGEpO1xuICAgIGxvZ2luJC5waXBlKFxuICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5pc1dvcmtpbmcgPSBmYWxzZSksXG4gICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICkuc3Vic2NyaWJlKGNyZWRlbnRpYWxzID0+IHtcbiAgICAgIHRoaXMuY3VycmVudFVzZXJTZXJ2aWNlLnVwZGF0ZUN1cnJlbnRVc2VyKGNyZWRlbnRpYWxzPy51c2VyKTtcbiAgICAgIHRoaXMuaGFuZGxlVXNlclJlZGlyZWN0KCk7XG4gICAgfSxcbiAgICAgIGVycm9yID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVMb2dpbkVycm9ycyhlcnJvcik7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTG9naW5FcnJvcnMoZXJyb3JPYmo6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHsgZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9uLCB1c2VyX2NsaWVudHMgfSA9IGVycm9yT2JqPy5lcnJvcjtcbiAgICB0aGlzLmxvZ2luRXJyb3IgPSB7IHR5cGU6IGVycm9yLCBtZXNzYWdlOiBlcnJvcl9kZXNjcmlwdGlvbiB9O1xuICAgIHRoaXMudXNlckNsaWVudHMgPSB1c2VyX2NsaWVudHM7XG4gIH1cblxuICBiYWNrVG9Mb2dpbigpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJDbGllbnRzID0gbnVsbDtcbiAgICB0aGlzLmxvZ2luRXJyb3IgPSBudWxsO1xuICB9XG5cbiAgcmVkaXJlY3QocHJvdmlkZXIpIHtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMudXNlckNvbmZpZy5zb2NpYWxMb2dpblJlZGlyZWN0VXJsICsgcHJvdmlkZXI7XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJsb2dpbigpXCIgY2xhc3M9J2QtZmxleCBmbGV4LWNvbHVtbiBnYXAtMyc+XG4gIDxkaXYgKm5nSWY9XCIhdXNlckNsaWVudHNcIiBjbGFzcz0nZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0yJz5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LWxhYmVsPkVtYWlsPC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIiBwbGFjZWhvbGRlcj1cIkVtYWlsXCIgdHlwZT1cImVtYWlsXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcmVxdWlyZWQgLz5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ2VtYWlsJylcIj57e2dldEVycm9yTWVzc2FnZSgnZW1haWwnKX19PC9tYXQtZXJyb3I+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LWxhYmVsPlBhc3N3b3JkPC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicGFzc3dvcmRcIiBwbGFjZWhvbGRlcj1cIlBhc3N3b3JkXCIgdHlwZT1cInBhc3N3b3JkXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcmVxdWlyZWQgLz5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ3Bhc3N3b3JkJylcIj57e2dldEVycm9yTWVzc2FnZSgncGFzc3dvcmQnKX19PC9tYXQtZXJyb3I+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIiAqbmdJZj1cImxvZ2luRXJyb3JcIj5cbiAgICAgIDxwIGNsYXNzPVwibWItMFwiPnt7IGxvZ2luRXJyb3I/Lm1lc3NhZ2UgfX08L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwidy0xMDBcIiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cImlzV29ya2luZ1wiPlxuICAgICAgTE9HSU5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJ1c2VyQ29uZmlnLnNob3dTb2NpYWxMb2dpblwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInctMTAwIGdvb2dsZS1idXR0b24gbWItMlwiIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwicmVkaXJlY3QoJ2dvb2dsZScpXCI+R29vZ2xlPC9idXR0b24+XG5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJ3LTEwMCBmYWNlYm9vay1idXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cInJlZGlyZWN0KCdmYWNlYm9vaycpXCI+RmFjZWJvb2s8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibXQtMiBtYi00IHRleHQtY2VudGVyXCIgKm5nSWY9XCJ1c2VyQ29uZmlnLnNob3dGb3Jnb3RQYXNzd29yZFwiPlxuICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIFtyb3V0ZXJMaW5rXT1cIlsnL2ZvcmdvdC1wYXNzd29yZCddXCI+Rm9yZ290IHBhc3N3b3JkPzwvYT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cInVzZXJDbGllbnRzXCIgY2xhc3M9J2QtZmxleCBmbGV4LWNvbHVtbiBnYXAtMic+XG4gICAgPGg0IGNsYXNzPVwic2VjdGlvbi10aXRsZSB0ZXh0LWNlbnRlciBtdC00XCI+XG4gICAgICB7eyB1c2VyQ2xpZW50cyA/ICdTRUxFQ1QgQ0xJRU5UIFRPIExPR0lOIFdJVEgnIDogJ0xPR0lOJyB9fVxuICAgIDwvaDQ+XG5cbiAgICA8bWF0LXNlbGVjdGlvbi1saXN0IGZvcm1Db250cm9sTmFtZT1cInNlbGVjdGVkX2NsaWVudFwiIFttdWx0aXBsZV09XCJmYWxzZVwiPlxuICAgICAgPG1hdC1saXN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdXNlckNsaWVudCBvZiB1c2VyQ2xpZW50c1wiIFt2YWx1ZV09XCJ1c2VyQ2xpZW50Py5jbGllbnRfaWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIXVzZXJDbGllbnQ/LmlzX2VuYWJsZWQgfHwgaXNXb3JraW5nXCI+XG4gICAgICAgIHt7IHVzZXJDbGllbnQ/LmNsaWVudD8ubmFtZSB9fVxuICAgICAgPC9tYXQtbGlzdC1vcHRpb24+XG4gICAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XG5cbiAgICA8ZGl2IGNsYXNzPVwibXQtMiBtYi00IHRleHQtY2VudGVyXCIgKm5nSWY9XCJ1c2VyQ29uZmlnLnNob3dGb3Jnb3RQYXNzd29yZFwiPlxuICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJiYWNrVG9Mb2dpbigpXCI+QmFjayB0byBMb2dpbjwvYT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvZm9ybT4iXX0=
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4tZm9ybS1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi9sb2dpbi9sb2dpbi1mb3JtLWZpZWxkcy9sb2dpbi1mb3JtLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2xvZ2luL2xvZ2luLWZvcm0tZmllbGRzL2xvZ2luLWZvcm0tZmllbGRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBMEIsbUJBQW1CLEVBQW9CLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckUsT0FBTyxFQUEwQixZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFnQmxELElBQU0sd0JBQXdCLEdBQTlCLE1BQU0sd0JBQXlCLFNBQVEsOEJBQThCO0lBVzFFLFlBQ1UsRUFBZSxFQUN2QixvQkFBMEMsRUFDbEMsTUFBcUIsRUFDckIsaUJBQXFDLEVBQ3RDLGtCQUFzQyxFQUNyQyxXQUFrQyxFQUNs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LElBQUksQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVELFFBQVEsQ0FBQyxRQUFRO1FBQ2YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsR0FBRyxRQUFRLENBQUM7SUFDM0UsQ0FBQzsrR0F0SVUsd0JBQXdCO21HQUF4Qix3QkFBd0IsOElDM0JyQyw2dkVBa0RPLHlERDdCSCxZQUFZLCtQQUNaLGNBQWMsaTFDQUNkLG1CQUFtQix5cUNBQ25CLFlBQVk7O0FBR0gsd0JBQXdCO0lBYnBDLFlBQVksRUFBRTtHQWFGLHdCQUF3QixDQXVJcEM7OzRGQXZJWSx3QkFBd0I7a0JBWnBDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBR3JCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixZQUFZO3FCQUNiOzZZQUlRLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRlcmlhbE1vZHVsZSB9IGZyb20gJy4uLy4uL21hdGVyaWFsLm1vZHVsZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGVjaGxpZnlGb3JtQ29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vYmFzZS1tb2RlbCc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UsIENvbmZpZ1NlcnZpY2UsIENyZWRlbnRpYWxzU2VydmljZSwgRXJyb3JIYW5kbGVyU2VydmljZSwgRm9ybVZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmluYWxpemUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgQ3VycmVudFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXNlcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTXVsdGlVc2VyQ29uZmlnLCBVc2VyQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3VzZXItY29uZmlnJztcbmltcG9ydCB7IFVzZXJUeXBlRW51bSB9IGZyb20gJy4uLy4uL3VzZXIvdXNlci10eXBlLmVudW0nO1xuaW1wb3J0IHsgTmd4UGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSAnbmd4LXBlcm1pc3Npb25zJztcblxuQFVudGlsRGVzdHJveSgpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbG9naW4tZm9ybS1maWVsZHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbG9naW4tZm9ybS1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9sb2dpbi1mb3JtLWZpZWxkcy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdGVyaWFsTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgUm91dGVyTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTG9naW5Gb3JtRmllbGRzQ29tcG9uZW50IGV4dGVuZHMgVGVjaGxpZnlGb3JtQ29tcG9uZW50SW50ZXJmYWNlIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSB1c2VyQ29uZmlnPzogTXVsdGlVc2VyQ29uZmlnO1xuXG4gIGlzV29ya2luZyA9IGZhbHNlO1xuICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBsb2dpbkVycm9yOiB7IHR5cGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nIH07XG4gIHVzZXJDbGllbnRzITogYW55W107XG5cbiAgdXNlclR5cGU6IHR5cGVvZiBVc2VyVHlwZUVudW0gPSBVc2VyVHlwZUVudW07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgZm9ybVZhbGlkYXRvclNlcnZpY2U6IEZvcm1WYWxpZGF0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgY3JlZGVudGlhbFNlcnZpY2U6IENyZWRlbnRpYWxzU2VydmljZSxcbiAgICBwdWJsaWMgY3VycmVudFVzZXJTZXJ2aWNlOiBDdXJyZW50VXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHVibGljIHVzZXJDb25maWdTZXJ2aWNlOiBVc2VyQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICBwcml2YXRlIG5neFBlcm1pc3Npb25zU2VydmljZTogTmd4UGVybWlzc2lvbnNTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGZvcm1WYWxpZGF0b3JTZXJ2aWNlKTtcblxuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IHtcbiAgICAgIGVtYWlsOiB7XG4gICAgICAgIHJlcXVpcmVkOiAnRW1haWwgaXMgcmVxdWlyZWQnLFxuICAgICAgICBlbWFpbDogJ0ludmFsaWQgZW1haWwnXG4gICAgICB9LFxuICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgcmVxdWlyZWQ6ICdQYXNzd29yZCBpcyByZXF1aXJlZCdcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5mb3JtID0gZmIuZ3JvdXAoe1xuICAgICAgZW1haWw6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdXSxcbiAgICAgIHBhc3N3b3JkOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgc2VsZWN0ZWRfY2xpZW50OiBbJyddLFxuICAgIH0pO1xuXG4gICAgLy8gSWYgdGhlIGNvbmZpZyB3YXMgbm90IHBhc3NlZCBsb2FkIGl0IGZyb20gdGhlIHNlcnZpY2VcbiAgICBpZiAoIXRoaXMudXNlckNvbmZpZykge1xuICAgICAgdGhpcy51c2VyQ29uZmlnID0gdGhpcy51c2VyQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBsaXN0ZW4gZm9yIHNlbGVjdGVkX2NsaWVudCBjaGFuZ2UgYW5kIHN1Ym1pdCB0aGUgZm9ybS5cbiAgICB0aGlzLmZvcm0uZ2V0KCdzZWxlY3RlZF9jbGllbnQnKS52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvZ2luKCkpO1xuXG4gICAgaWYgKHRoaXMuY3JlZGVudGlhbFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKSB7XG4gICAgICB0aGlzLmhhbmRsZVVzZXJSZWRpcmVjdCgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVVzZXJSZWRpcmVjdCgpIHtcbiAgICB0aGlzLmN1cnJlbnRVc2VyU2VydmljZS5nZXRVc2VyT2JzZXJ2YWJsZSh0cnVlKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHVzZXIpID0+IHtcbiAgICAgICAgaWYgKHVzZXIudXNlcl90eXBlX2lkID09IHRoaXMudXNlclR5cGUuQURNSU4pIHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5yZWRpcmVjdCB8fCAnYXBwLWFkbWluJ10sIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5yZWRpcmVjdCB8fCAnZGFzaGJvYXJkJ10sIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9naW4oKSB7XG4gICAgaWYgKCF0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc1dvcmtpbmcgPSB0cnVlO1xuICAgIC8vIHJlc2V0IGxvZ2luIGVycm9yXG4gICAgdGhpcy5sb2dpbkVycm9yID0gbnVsbDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBjbGllbnRfaWQ6IDIsXG4gICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNvbmZpZy5nZXRBdXRoQ2xpZW50U2VjcmV0KCksXG4gICAgICBncmFudF90eXBlOiB0aGlzLmNvbmZpZy5nZXRBdXRoR3JhbnRUeXBlKCksXG4gICAgICB1c2VybmFtZTogdGhpcy5mb3JtLnZhbHVlLmVtYWlsLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMuZm9ybS52YWx1ZS5wYXNzd29yZCxcbiAgICAgIHNlbGVjdGVkX2NsaWVudDogdGhpcy5mb3JtLnZhbHVlLnNlbGVjdGVkX2NsaWVudD8udG9TdHJpbmcoKSxcbiAgICAgIHJlbWVtYmVyOiB0cnVlXG4gICAgfTtcbiAgICB0aGlzLmNyZWRlbnRpYWxTZXJ2aWNlLnNldENyZWRlbnRpYWxzKCk7XG4gICAgY29uc3QgbG9naW4kID0gdGhpcy5hdXRoU2VydmljZS5sb2dpbihkYXRhKTtcbiAgICBsb2dpbiQucGlwZShcbiAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuaXNXb3JraW5nID0gZmFsc2UpLFxuICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICApLnN1YnNjcmliZShjcmVkZW50aWFscyA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudFVzZXJTZXJ2aWNlLnVwZGF0ZUN1cnJlbnRVc2VyKGNyZWRlbnRpYWxzPy51c2VyKTtcblxuICAgICAgICBjb25zdCB1c2VyID0gY3JlZGVudGlhbHM/LnVzZXI7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gKCh1c2VyPy5wZXJtaXNzaW9ucyBhcyBbXSkgfHwgW10pLm1hcCgoeDogYW55KSA9PiB4LnNsdWcpO1xuXG4gICAgICAgIGlmICh1c2VyPy51c2VyX3R5cGVfaWQgPT09IHRoaXMudXNlclR5cGUuQURNSU4pIHtcbiAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKCdhcHBfYWRtaW4nKTtcbiAgICAgICAgfSBlbHNlIGlmICh1c2VyPy51c2VyX3R5cGVfaWQgPT09IHRoaXMudXNlclR5cGUuQ0xJRU5UX0FETUlOKSB7XG4gICAgICAgICAgcGVybWlzc2lvbnMucHVzaCgnY2xpZW50X2FkbWluJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodXNlcj8udXNlcl90eXBlX2lkID09PSB0aGlzLnVzZXJUeXBlLkNMSUVOVF9VU0VSKSB7XG4gICAgICAgICAgcGVybWlzc2lvbnMucHVzaCgnY2xpZW50X3VzZXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmd4UGVybWlzc2lvbnNTZXJ2aWNlLmZsdXNoUGVybWlzc2lvbnMoKTtcbiAgICAgICAgdGhpcy5uZ3hQZXJtaXNzaW9uc1NlcnZpY2UubG9hZFBlcm1pc3Npb25zKHBlcm1pc3Npb25zKTtcblxuICAgICAgICB0aGlzLmhhbmRsZVVzZXJSZWRpcmVjdCgpO1xuICAgICAgfSxcbiAgICAgIGVycm9yID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVMb2dpbkVycm9ycyhlcnJvcik7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTG9naW5FcnJvcnMoZXJyb3JPYmo6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHsgZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9uLCB1c2VyX2NsaWVudHMgfSA9IGVycm9yT2JqPy5lcnJvcjtcbiAgICB0aGlzLmxvZ2luRXJyb3IgPSB7IHR5cGU6IGVycm9yLCBtZXNzYWdlOiBlcnJvcl9kZXNjcmlwdGlvbiB9O1xuICAgIHRoaXMudXNlckNsaWVudHMgPSB1c2VyX2NsaWVudHM7XG4gIH1cblxuICBiYWNrVG9Mb2dpbigpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJDbGllbnRzID0gbnVsbDtcbiAgICB0aGlzLmxvZ2luRXJyb3IgPSBudWxsO1xuICB9XG5cbiAgcmVkaXJlY3QocHJvdmlkZXIpIHtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMudXNlckNvbmZpZy5zb2NpYWxMb2dpblJlZGlyZWN0VXJsICsgcHJvdmlkZXI7XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJsb2dpbigpXCIgY2xhc3M9J2QtZmxleCBmbGV4LWNvbHVtbiBnYXAtMyc+XG4gIDxkaXYgKm5nSWY9XCIhdXNlckNsaWVudHNcIiBjbGFzcz0nZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0yJz5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LWxhYmVsPkVtYWlsPC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIiBwbGFjZWhvbGRlcj1cIkVtYWlsXCIgdHlwZT1cImVtYWlsXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcmVxdWlyZWQgLz5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ2VtYWlsJylcIj57e2dldEVycm9yTWVzc2FnZSgnZW1haWwnKX19PC9tYXQtZXJyb3I+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LWxhYmVsPlBhc3N3b3JkPC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicGFzc3dvcmRcIiBwbGFjZWhvbGRlcj1cIlBhc3N3b3JkXCIgdHlwZT1cInBhc3N3b3JkXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcmVxdWlyZWQgLz5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ3Bhc3N3b3JkJylcIj57e2dldEVycm9yTWVzc2FnZSgncGFzc3dvcmQnKX19PC9tYXQtZXJyb3I+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIiAqbmdJZj1cImxvZ2luRXJyb3JcIj5cbiAgICAgIDxwIGNsYXNzPVwibWItMFwiPnt7IGxvZ2luRXJyb3I/Lm1lc3NhZ2UgfX08L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwidy0xMDBcIiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cImlzV29ya2luZ1wiPlxuICAgICAgTE9HSU5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJ1c2VyQ29uZmlnLnNob3dTb2NpYWxMb2dpblwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInctMTAwIGdvb2dsZS1idXR0b24gbWItMlwiIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwicmVkaXJlY3QoJ2dvb2dsZScpXCI+R29vZ2xlPC9idXR0b24+XG5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJ3LTEwMCBmYWNlYm9vay1idXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cInJlZGlyZWN0KCdmYWNlYm9vaycpXCI+RmFjZWJvb2s8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibXQtMiBtYi00IHRleHQtY2VudGVyXCIgKm5nSWY9XCJ1c2VyQ29uZmlnLnNob3dGb3Jnb3RQYXNzd29yZFwiPlxuICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIFtyb3V0ZXJMaW5rXT1cIlsnL2ZvcmdvdC1wYXNzd29yZCddXCI+Rm9yZ290IHBhc3N3b3JkPzwvYT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cInVzZXJDbGllbnRzXCIgY2xhc3M9J2QtZmxleCBmbGV4LWNvbHVtbiBnYXAtMic+XG4gICAgPGg0IGNsYXNzPVwic2VjdGlvbi10aXRsZSB0ZXh0LWNlbnRlciBtdC00XCI+XG4gICAgICB7eyB1c2VyQ2xpZW50cyA/ICdTRUxFQ1QgQ0xJRU5UIFRPIExPR0lOIFdJVEgnIDogJ0xPR0lOJyB9fVxuICAgIDwvaDQ+XG5cbiAgICA8bWF0LXNlbGVjdGlvbi1saXN0IGZvcm1Db250cm9sTmFtZT1cInNlbGVjdGVkX2NsaWVudFwiIFttdWx0aXBsZV09XCJmYWxzZVwiPlxuICAgICAgPG1hdC1saXN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdXNlckNsaWVudCBvZiB1c2VyQ2xpZW50c1wiIFt2YWx1ZV09XCJ1c2VyQ2xpZW50Py5jbGllbnRfaWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIXVzZXJDbGllbnQ/LmlzX2VuYWJsZWQgfHwgaXNXb3JraW5nXCI+XG4gICAgICAgIHt7IHVzZXJDbGllbnQ/LmNsaWVudD8ubmFtZSB9fVxuICAgICAgPC9tYXQtbGlzdC1vcHRpb24+XG4gICAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XG5cbiAgICA8ZGl2IGNsYXNzPVwibXQtMiBtYi00IHRleHQtY2VudGVyXCIgKm5nSWY9XCJ1c2VyQ29uZmlnLnNob3dGb3Jnb3RQYXNzd29yZFwiPlxuICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJiYWNrVG9Mb2dpbigpXCI+QmFjayB0byBMb2dpbjwvYT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvZm9ybT4iXX0=
|
|
@@ -7,14 +7,13 @@ import * as i2 from "@angular/router";
|
|
|
7
7
|
import * as i3 from "../../user-config";
|
|
8
8
|
import * as i4 from "@angular/forms";
|
|
9
9
|
import * as i5 from "@angular/common";
|
|
10
|
-
import * as i6 from "@angular/
|
|
11
|
-
import * as i7 from "@angular/material/
|
|
12
|
-
import * as i8 from "@angular/material/
|
|
13
|
-
import * as i9 from "@angular/material/
|
|
14
|
-
import * as i10 from "@angular/material/
|
|
15
|
-
import * as i11 from "@angular/material/
|
|
16
|
-
import * as i12 from "@angular/material/
|
|
17
|
-
import * as i13 from "@angular/material/card";
|
|
10
|
+
import * as i6 from "@angular/material/button";
|
|
11
|
+
import * as i7 from "@angular/material/form-field";
|
|
12
|
+
import * as i8 from "@angular/material/icon";
|
|
13
|
+
import * as i9 from "@angular/material/input";
|
|
14
|
+
import * as i10 from "@angular/material/core";
|
|
15
|
+
import * as i11 from "@angular/material/select";
|
|
16
|
+
import * as i12 from "@angular/material/card";
|
|
18
17
|
/**
|
|
19
18
|
* Role Permissions management controller
|
|
20
19
|
*
|
|
@@ -120,12 +119,12 @@ export class PermissionsManagementComponent {
|
|
|
120
119
|
}
|
|
121
120
|
}
|
|
122
121
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionsManagementComponent, deps: [{ token: i1.HttpService }, { token: i1.AlertService }, { token: i2.ActivatedRoute }, { token: i1.CredentialsService }, { token: i1.ErrorHandlerService }, { token: i3.UserConfigService }, { token: i4.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
123
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PermissionsManagementComponent, selector: "role-permissions-management", inputs: { clientId: "clientId" }, ngImport: i0, template: "<div
|
|
122
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PermissionsManagementComponent, selector: "role-permissions-management", inputs: { clientId: "clientId" }, ngImport: i0, template: "<div class=\"d-flex flex-column justify-content-start gap-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-3\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <h3 class=\"m-0 fw-bold\">\n Manage Role Permissions\n </h3>\n <button *ngIf=\"!config.permissionConfig.disableUsers\" [routerLink]=\"['../users']\" class=\"ml-1\"\n mat-raised-button>\n <i class=\"icon fas fa-users\"></i> Users\n </button>\n <button *ngIf=\"!config.permissionConfig.disableRoles\" [routerLink]=\"['../roles']\" class=\"ml-1\"\n mat-raised-button>\n <i class=\"fas fa-user-md\"></i> Manage Roles\n </button>\n </div>\n <form [formGroup]=\"filterForm\" class=\"d-flex justify-content-end align-items-center gap-2\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Search</mat-label>\n <input autocomplete=\"off\" formControlName=\"search\" matInput placeholder=\"Search Permissions\"\n type=\"text\"/>\n <button (click)=\"filterForm.get('search').setValue('')\" *ngIf=\"filterForm.get('search').value\" mat-icon-button matSuffix\n type=\"button\">\n <mat-icon>clear</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"roles\" appearance=\"outline\" class=\"ml-2\">\n <mat-label>Show Roles</mat-label>\n <mat-select formControlName='role_ids' multiple>\n <mat-option *ngFor=\"let role of roles\" [value]=\"role?.id\">\n {{ role.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </form>\n </mat-card-content>\n </mat-card>\n\n <mat-card class=\"mt-2\">\n <mat-card-content class=\"p-0\">\n <form>\n <table aria-describedby=\"Role Permissions\"\n class=\"table table-sm table-bordered table-condensed table-striped\">\n <thead>\n <tr>\n <th>Permissions</th>\n <ng-container *ngFor=\"let role of roles\">\n <th *ngIf=\"filterForm.get('role_ids').value.includes(role.id)\" class=\"text-center\">\n {{ role.label }}\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let permission of filteredPermissions\">\n <td>\n {{ permission.label }}\n </td>\n <ng-container *ngFor=\"let role of roles\">\n <td *ngIf=\"filterForm.get('role_ids').value.includes(role.id)\" class=\"text-center align-middle\">\n <div class=\"d-flex justify-content-center align-items-center h-100\">\n <input (change)=\"updateRolePermission(role, permission)\"\n [checked]=\"role.hasPermission(permission.slug)\"\n [disabled]=\"isDisabled(role.is_global, role.is_editable)\"\n name=\"{{role.id}}[{{permission?.label}}]\" type=\"checkbox\"/>\n </div>\n </td>\n </ng-container>\n </tr>\n </tbody>\n </table>\n </form>\n </mat-card-content>\n </mat-card>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.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: "component", type: i10.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i12.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
|
|
124
123
|
}
|
|
125
124
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionsManagementComponent, decorators: [{
|
|
126
125
|
type: Component,
|
|
127
|
-
args: [{ selector: 'role-permissions-management', template: "<div
|
|
126
|
+
args: [{ selector: 'role-permissions-management', template: "<div class=\"d-flex flex-column justify-content-start gap-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-3\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <h3 class=\"m-0 fw-bold\">\n Manage Role Permissions\n </h3>\n <button *ngIf=\"!config.permissionConfig.disableUsers\" [routerLink]=\"['../users']\" class=\"ml-1\"\n mat-raised-button>\n <i class=\"icon fas fa-users\"></i> Users\n </button>\n <button *ngIf=\"!config.permissionConfig.disableRoles\" [routerLink]=\"['../roles']\" class=\"ml-1\"\n mat-raised-button>\n <i class=\"fas fa-user-md\"></i> Manage Roles\n </button>\n </div>\n <form [formGroup]=\"filterForm\" class=\"d-flex justify-content-end align-items-center gap-2\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Search</mat-label>\n <input autocomplete=\"off\" formControlName=\"search\" matInput placeholder=\"Search Permissions\"\n type=\"text\"/>\n <button (click)=\"filterForm.get('search').setValue('')\" *ngIf=\"filterForm.get('search').value\" mat-icon-button matSuffix\n type=\"button\">\n <mat-icon>clear</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"roles\" appearance=\"outline\" class=\"ml-2\">\n <mat-label>Show Roles</mat-label>\n <mat-select formControlName='role_ids' multiple>\n <mat-option *ngFor=\"let role of roles\" [value]=\"role?.id\">\n {{ role.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </form>\n </mat-card-content>\n </mat-card>\n\n <mat-card class=\"mt-2\">\n <mat-card-content class=\"p-0\">\n <form>\n <table aria-describedby=\"Role Permissions\"\n class=\"table table-sm table-bordered table-condensed table-striped\">\n <thead>\n <tr>\n <th>Permissions</th>\n <ng-container *ngFor=\"let role of roles\">\n <th *ngIf=\"filterForm.get('role_ids').value.includes(role.id)\" class=\"text-center\">\n {{ role.label }}\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let permission of filteredPermissions\">\n <td>\n {{ permission.label }}\n </td>\n <ng-container *ngFor=\"let role of roles\">\n <td *ngIf=\"filterForm.get('role_ids').value.includes(role.id)\" class=\"text-center align-middle\">\n <div class=\"d-flex justify-content-center align-items-center h-100\">\n <input (change)=\"updateRolePermission(role, permission)\"\n [checked]=\"role.hasPermission(permission.slug)\"\n [disabled]=\"isDisabled(role.is_global, role.is_editable)\"\n name=\"{{role.id}}[{{permission?.label}}]\" type=\"checkbox\"/>\n </div>\n </td>\n </ng-container>\n </tr>\n </tbody>\n </table>\n </form>\n </mat-card-content>\n </mat-card>\n</div>\n" }]
|
|
128
127
|
}], ctorParameters: () => [{ type: i1.HttpService }, { type: i1.AlertService }, { type: i2.ActivatedRoute }, { type: i1.CredentialsService }, { type: i1.ErrorHandlerService }, { type: i3.UserConfigService }, { type: i4.FormBuilder }], propDecorators: { clientId: [{
|
|
129
128
|
type: Input
|
|
130
129
|
}] } });
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtbWFuYWdlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3JvbGUvcGVybWlzc2lvbi9wZXJtaXNzaW9ucy1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvcm9sZS9wZXJtaXNzaW9uL3Blcm1pc3Npb25zLW1hbmFnZW1lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUt6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSXJDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQUUxRDs7Ozs7R0FLRztBQUtILE1BQU0sT0FBTyw4QkFBOEI7SUFVdkMsWUFBb0IsSUFBaUIsRUFDekIsWUFBMEIsRUFDMUIsS0FBcUIsRUFDckIsa0JBQXNDLEVBQ3RDLFlBQWlDLEVBQ2xDLGlCQUFvQyxFQUNuQyxFQUFlO1FBTlAsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUN6QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNsQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ25DLE9BQUUsR0FBRixFQUFFLENBQWE7UUFFdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFF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LENBQUMsRUFBRSxHQUFHLGVBQWUsR0FBRyxVQUFVLENBQUMsRUFBRSxHQUFHLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQ3hHLEdBQUcsQ0FBQyxFQUFFO2dCQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDekUsQ0FBQyxDQUNKLENBQUM7UUFDTixDQUFDO2FBQ0ksQ0FBQztZQUNGLHdCQUF3QjtZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxlQUFlLEdBQUcsVUFBVSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUNyRyxHQUFHLENBQUMsRUFBRTtnQkFDRixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN2RSxDQUFDLENBQ0osQ0FBQztRQUNOLENBQUM7SUFDTCxDQUFDOytHQWpJUSw4QkFBOEI7bUdBQTlCLDhCQUE4QixxR0NyQjNDLGd3R0FxRU07OzRGRGhETyw4QkFBOEI7a0JBSjFDLFNBQVM7K0JBQ0ksNkJBQTZCO3FRQVE5QixRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgQ3JlZGVudGlhbHNTZXJ2aWNlLCBFcnJvckhhbmRsZXJTZXJ2aWNlLCBIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuXG5pbXBvcnQgeyBSb2xlIH0gZnJvbSAnLi4vcm9sZS5tb2RlbCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uIH0gZnJvbSAnLi9wZXJtaXNzaW9uLm1vZGVsJztcbmltcG9ydCB7IE11bHRpVXNlckNvbmZpZywgVXNlckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLWNvbmZpZyc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBSb2xlIFBlcm1pc3Npb25zIG1hbmFnZW1lbnQgY29udHJvbGxlclxuICpcbiAqIEBhdXRob3IgSm9zaHVhIEtpc3Nvb25cbiAqIEBzaW5jZSAyMDE2MTAxM1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3JvbGUtcGVybWlzc2lvbnMtbWFuYWdlbWVudCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Blcm1pc3Npb25zLW1hbmFnZW1lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbnNNYW5hZ2VtZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICByb2xlczogUm9sZVtdO1xuICAgIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uW107XG4gICAgZmlsdGVyZWRQZXJtaXNzaW9uczogUGVybWlzc2lvbltdO1xuICAgIG1vZHVsZUNvZGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBjbGllbnRJZDogbnVtYmVyO1xuICAgIGNvbmZpZzogTXVsdGlVc2VyQ29uZmlnO1xuXG4gICAgZmlsdGVyRm9ybTogRm9ybUdyb3VwO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgY3JlZGVudGlhbHNTZXJ2aWNlOiBDcmVkZW50aWFsc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgdXNlckNvbmZpZ1NlcnZpY2U6IFVzZXJDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlclxuICAgICkge1xuICAgICAgICB0aGlzLm1vZHVsZUNvZGUgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IHRoaXMudXNlckNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBzZWFyY2g6IFsnJ10sXG4gICAgICAgICAgICByb2xlX2lkczogW11cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0RmlsdGVyZWRQZXJtaXNzaW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyRm9ybS5nZXQoJ3NlYXJjaCcpLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkUGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigocGVybWlzc2lvbjogUGVybWlzc2lvbikgPT4gcGVybWlzc2lvbi5sYWJlbC50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLmZpbHRlckZvcm0uZ2V0KCdzZWFyY2gnKS52YWx1ZS50b1N0cmluZygpLnRvTG9jYWxlTG93ZXJDYXNlKCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRQZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnM7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmZpbHRlckZvcm0uZ2V0KCdzZWFyY2gnKS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKF8gPT4gdGhpcy5zZXRGaWx0ZXJlZFBlcm1pc3Npb25zKCkpO1xuICAgICAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJhbXMubW9kdWxlX2NvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlQ29kZSA9IHBhcmFtcy5tb2R1bGVfY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9hZFJvbGVzKCk7XG4gICAgICAgICAgICB0aGlzLmxvYWRQZXJtaXNzaW9ucygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc0Rpc2FibGVkKGlzR2xvYmFsOiBib29sZWFuLCBpc0VkaXRhYmxlOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChpc0dsb2JhbCAmJiB0aGlzLmNyZWRlbnRpYWxzU2VydmljZS5jcmVkZW50aWFscz8udXNlcj8udXNlcl90eXBlX2lkICE9PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gIWlzRWRpdGFibGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxvYWRQZXJtaXNzaW9ucygpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyczogYW55ID0ge307XG4gICAgICAgIGlmICh0aGlzLm1vZHVsZUNvZGUpIHtcbiAgICAgICAgICAgIGZpbHRlcnMubW9kdWxlX2NvZGUgPSB0aGlzLm1vZHVsZUNvZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2xpZW50SWQpIHtcbiAgICAgICAgICAgIGZpbHRlcnMuY2xpZW50X2lkID0gdGhpcy5jbGllbnRJZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmh0dHAuZ2V0KCdhcGkvcGVybWlzc2lvbnMnLCB7IHBhcmFtczogZmlsdGVycyB9KS50b1Byb21pc2UoKS50aGVuKFxuICAgICAgICAgICAgKHJlczogYW55KSA9PiB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXJlZFBlcm1pc3Npb25zKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCB0aGUgUm9sZXMgZnJvbSB0aGUgREJcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvYWRSb2xlcygpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyczogYW55ID0ge1xuICAgICAgICAgICAgbG9hZFBlcm1pc3Npb25zOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5jbGllbnRJZCkge1xuICAgICAgICAgICAgZmlsdGVycy5jbGllbnRfaWQgPSB0aGlzLmNsaWVudElkO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5odHRwLmdldCgnYXBpL3JvbGVzJywgeyBwYXJhbXM6IGZpbHRlcnMgfSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm9sZXMgPSBuZXcgQXJyYXk8Um9sZT4oKTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiByZXMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcm9sZSA9IG5ldyBSb2xlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJvbGUubG9hZEZyb21Kc29uKHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9sZXMucHVzaChyb2xlKTtcbiAgICAgICAgICAgICAgICAgICAgcm9sZS5zZXR1cEJsYW5rUGVybWlzc2lvbnNGb3JOZ01vZGVsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ3JvbGVfaWRzJykuc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9sZXMubWFwKHJvbGUgPT4gcm9sZS5pZClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1cGRhdGVSb2xlUGVybWlzc2lvbihyb2xlOiBSb2xlLCBwZXJtaXNzaW9uOiBQZXJtaXNzaW9uKSB7XG4gICAgICAgIGxldCBkYXRhID0ge1xuICAgICAgICAgICAgcmlkOiByb2xlLmlkLFxuICAgICAgICAgICAgcGVybWlzc2lvbjogcGVybWlzc2lvbi5zbHVnXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHJvbGUuaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uLnNsdWcpKSB7XG4gICAgICAgICAgICAvKiBSZW1vdmUgdGhlIHBlcm1pc3Npb24gICovXG4gICAgICAgICAgICB0aGlzLmh0dHAucGF0Y2goJ2FwaS9yb2xlcy8nICsgcm9sZS5pZCArICcvcGVybWlzc2lvbnMvJyArIHBlcm1pc3Npb24uaWQgKyAnL3JlbW92ZScsIGRhdGEpLnRvUHJvbWlzZSgpLnRoZW4oXG4gICAgICAgICAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcm9sZS5yZW1vdmVQZXJtaXNzaW9uKHBlcm1pc3Npb24pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydChwZXJtaXNzaW9uLmxhYmVsICsgJyByZW1vdmVkJywgJ3dhcm5pbmcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyogQWRkIHRoZSBwZXJtaXNzaW9uICovXG4gICAgICAgICAgICB0aGlzLmh0dHAucGF0Y2goJ2FwaS9yb2xlcy8nICsgcm9sZS5pZCArICcvcGVybWlzc2lvbnMvJyArIHBlcm1pc3Npb24uaWQgKyAnL2FkZCcsIGRhdGEpLnRvUHJvbWlzZSgpLnRoZW4oXG4gICAgICAgICAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcm9sZS5hZGRQZXJtaXNzaW9uKHBlcm1pc3Npb24pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydChwZXJtaXNzaW9uLmxhYmVsICsgJyBhZGRlZCcsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIiwiPGRpdiBmeExheW91dD1cImNvbHVtblwiIGNsYXNzPVwibS0yXCI+XG5cbiAgICA8bWF0LWNhcmQgYXBwZWFyYW5jZT1cIm91dGxpbmVkXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxuICAgICAgICA8aDUgY2xhc3M9XCJtLTBcIj5cbiAgICAgICAgICAgIE1hbmFnZSBSb2xlIFBlcm1pc3Npb25zXG4gICAgICAgIDwvaDU+XG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gW3JvdXRlckxpbmtdPVwiWycuLi91c2VycyddXCIgKm5nSWY9XCIhY29uZmlnLnBlcm1pc3Npb25Db25maWcuZGlzYWJsZVVzZXJzXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIGZhcyBmYS11c2Vyc1wiPjwvaT4gVXNlcnNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gW3JvdXRlckxpbmtdPVwiWycuLi9yb2xlcyddXCIgKm5nSWY9XCIhY29uZmlnLnBlcm1pc3Npb25Db25maWcuZGlzYWJsZVJvbGVzXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdXNlci1tZFwiPjwvaT4gTWFuYWdlIFJvbGVzXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1cIj5cblxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5TZWFyY2g8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQZXJtaXNzaW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImZpbHRlckZvcm0uZ2V0KCdzZWFyY2gnKS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWx0ZXJGb3JtLmdldCgnc2VhcmNoJykuc2V0VmFsdWUoJycpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJyb2xlc1wiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJtbC0yXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5TaG93IFJvbGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSdyb2xlX2lkcycgbXVsdGlwbGU+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCByb2xlIG9mIHJvbGVzXCIgW3ZhbHVlXT1cInJvbGU/LmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e3JvbGUubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9mb3JtPlxuICAgIDwvbWF0LWNhcmQ+XG5cbiAgICA8bWF0LWNhcmQgYXBwZWFyYW5jZT1cIm91dGxpbmVkXCIgY2xhc3M9XCJwLTAgbXQtMlwiPlxuICAgICAgICA8Zm9ybT5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXNtIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWNvbmRlbnNlZCB0YWJsZS1zdHJpcGVkXCJcbiAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiUm9sZSBQZXJtaXNzaW9uc1wiPlxuICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBlcm1pc3Npb25zPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvbGUgb2Ygcm9sZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiICpuZ0lmPVwiZmlsdGVyRm9ybS5nZXQoJ3JvbGVfaWRzJykudmFsdWUuaW5jbHVkZXMocm9sZS5pZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyb2xlLmxhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcGVybWlzc2lvbiBvZiBmaWx0ZXJlZFBlcm1pc3Npb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3twZXJtaXNzaW9uLmxhYmVsfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm9sZSBvZiByb2xlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyXCIgKm5nSWY9XCJmaWx0ZXJGb3JtLmdldCgncm9sZV9pZHMnKS52YWx1ZS5pbmNsdWRlcyhyb2xlLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQocm9sZS5pc19nbG9iYWwsIHJvbGUuaXNfZWRpdGFibGUpXCIgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ7e3JvbGUuaWR9fVt7e3Blcm1pc3Npb24/LmxhYmVsfX1dXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJvbGUuaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uLnNsdWcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlUm9sZVBlcm1pc3Npb24ocm9sZSwgcGVybWlzc2lvbilcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9mb3JtPlxuICAgIDwvbWF0LWNhcmQ+XG48L2Rpdj4iXX0=
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtbWFuYWdlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3JvbGUvcGVybWlzc2lvbi9wZXJtaXNzaW9ucy1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvcm9sZS9wZXJtaXNzaW9uL3Blcm1pc3Npb25zLW1hbmFnZW1lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUt6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSXJDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBRTFEOzs7OztHQUtHO0FBS0gsTUFBTSxPQUFPLDhCQUE4QjtJQVV2QyxZQUFvQixJQUFpQixFQUN6QixZQUEwQixFQUMxQixLQUFxQixFQUNyQixrQkFBc0MsRUFDdEMsWUFBaUMsRUFDbEMsaUJBQW9DLEVBQ25DLEVBQWU7UUFOUCxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ3pCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2xDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDbkMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUV2QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVq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Q0FBQyxFQUFFLEdBQUcsZUFBZSxHQUFHLFVBQVUsQ0FBQyxFQUFFLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FDeEcsR0FBRyxDQUFDLEVBQUU7Z0JBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN6RSxDQUFDLENBQ0osQ0FBQztRQUNOLENBQUM7YUFDSSxDQUFDO1lBQ0Ysd0JBQXdCO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLGVBQWUsR0FBRyxVQUFVLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQ3JHLEdBQUcsQ0FBQyxFQUFFO2dCQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZFLENBQUMsQ0FDSixDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7K0dBaklRLDhCQUE4QjttR0FBOUIsOEJBQThCLHFHQ3JCM0MsaXdHQTRFQTs7NEZEdkRhLDhCQUE4QjtrQkFKMUMsU0FBUzsrQkFDSSw2QkFBNkI7cVFBUTlCLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBDcmVkZW50aWFsc1NlcnZpY2UsIEVycm9ySGFuZGxlclNlcnZpY2UsIEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5cbmltcG9ydCB7IFJvbGUgfSBmcm9tICcuLi9yb2xlLm1vZGVsJztcbmltcG9ydCB7IFBlcm1pc3Npb24gfSBmcm9tICcuL3Blcm1pc3Npb24ubW9kZWwnO1xuaW1wb3J0IHsgTXVsdGlVc2VyQ29uZmlnLCBVc2VyQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3VzZXItY29uZmlnJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIFJvbGUgUGVybWlzc2lvbnMgbWFuYWdlbWVudCBjb250cm9sbGVyXG4gKlxuICogQGF1dGhvciBKb3NodWEgS2lzc29vblxuICogQHNpbmNlIDIwMTYxMDEzXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncm9sZS1wZXJtaXNzaW9ucy1tYW5hZ2VtZW50JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbnMtbWFuYWdlbWVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uc01hbmFnZW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHJvbGVzOiBSb2xlW107XG4gICAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25bXTtcbiAgICBmaWx0ZXJlZFBlcm1pc3Npb25zOiBQZXJtaXNzaW9uW107XG4gICAgbW9kdWxlQ29kZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNsaWVudElkOiBudW1iZXI7XG4gICAgY29uZmlnOiBNdWx0aVVzZXJDb25maWc7XG5cbiAgICBmaWx0ZXJGb3JtOiBGb3JtR3JvdXA7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSBjcmVkZW50aWFsc1NlcnZpY2U6IENyZWRlbnRpYWxzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyB1c2VyQ29uZmlnU2VydmljZTogVXNlckNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMubW9kdWxlQ29kZSA9IG51bGw7XG4gICAgICAgIHRoaXMuY29uZmlnID0gdGhpcy51c2VyQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcblxuICAgICAgICB0aGlzLmZpbHRlckZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIHNlYXJjaDogWycnXSxcbiAgICAgICAgICAgIHJvbGVfaWRzOiBbXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRGaWx0ZXJlZFBlcm1pc3Npb25zKCkge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJGb3JtLmdldCgnc2VhcmNoJykudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRQZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChwZXJtaXNzaW9uOiBQZXJtaXNzaW9uKSA9PiBwZXJtaXNzaW9uLmxhYmVsLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKHRoaXMuZmlsdGVyRm9ybS5nZXQoJ3NlYXJjaCcpLnZhbHVlLnRvU3RyaW5nKCkudG9Mb2NhbGVMb3dlckNhc2UoKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucztcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ3NlYXJjaCcpLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUoXyA9PiB0aGlzLnNldEZpbHRlcmVkUGVybWlzc2lvbnMoKSk7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgICAgICAgaWYgKHBhcmFtcy5tb2R1bGVfY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVDb2RlID0gcGFyYW1zLm1vZHVsZV9jb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb2FkUm9sZXMoKTtcbiAgICAgICAgICAgIHRoaXMubG9hZFBlcm1pc3Npb25zKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlzRGlzYWJsZWQoaXNHbG9iYWw6IGJvb2xlYW4sIGlzRWRpdGFibGU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKGlzR2xvYmFsICYmIHRoaXMuY3JlZGVudGlhbHNTZXJ2aWNlLmNyZWRlbnRpYWxzPy51c2VyPy51c2VyX3R5cGVfaWQgIT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAhaXNFZGl0YWJsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbG9hZFBlcm1pc3Npb25zKCkge1xuICAgICAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICAgICAgaWYgKHRoaXMubW9kdWxlQ29kZSkge1xuICAgICAgICAgICAgZmlsdGVycy5tb2R1bGVfY29kZSA9IHRoaXMubW9kdWxlQ29kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jbGllbnRJZCkge1xuICAgICAgICAgICAgZmlsdGVycy5jbGllbnRfaWQgPSB0aGlzLmNsaWVudElkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaHR0cC5nZXQoJ2FwaS9wZXJtaXNzaW9ucycsIHsgcGFyYW1zOiBmaWx0ZXJzIH0pLnRvUHJvbWlzZSgpLnRoZW4oXG4gICAgICAgICAgICAocmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZpbHRlcmVkUGVybWlzc2lvbnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIHRoZSBSb2xlcyBmcm9tIHRoZSBEQlxuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZFJvbGVzKCkge1xuICAgICAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7XG4gICAgICAgICAgICBsb2FkUGVybWlzc2lvbnM6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmNsaWVudElkKSB7XG4gICAgICAgICAgICBmaWx0ZXJzLmNsaWVudF9pZCA9IHRoaXMuY2xpZW50SWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmh0dHAuZ2V0KCdhcGkvcm9sZXMnLCB7IHBhcmFtczogZmlsdGVycyB9KS50b1Byb21pc2UoKS50aGVuKFxuICAgICAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlcyA9IG5ldyBBcnJheTxSb2xlPigpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIHJlcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByb2xlID0gbmV3IFJvbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcm9sZS5sb2FkRnJvbUpzb24ocm93KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb2xlcy5wdXNoKHJvbGUpO1xuICAgICAgICAgICAgICAgICAgICByb2xlLnNldHVwQmxhbmtQZXJtaXNzaW9uc0Zvck5nTW9kZWwoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JtLmdldCgncm9sZV9pZHMnKS5zZXRWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb2xlcy5tYXAocm9sZSA9PiByb2xlLmlkKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHVwZGF0ZVJvbGVQZXJtaXNzaW9uKHJvbGU6IFJvbGUsIHBlcm1pc3Npb246IFBlcm1pc3Npb24pIHtcbiAgICAgICAgbGV0IGRhdGEgPSB7XG4gICAgICAgICAgICByaWQ6IHJvbGUuaWQsXG4gICAgICAgICAgICBwZXJtaXNzaW9uOiBwZXJtaXNzaW9uLnNsdWdcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocm9sZS5oYXNQZXJtaXNzaW9uKHBlcm1pc3Npb24uc2x1ZykpIHtcbiAgICAgICAgICAgIC8qIFJlbW92ZSB0aGUgcGVybWlzc2lvbiAgKi9cbiAgICAgICAgICAgIHRoaXMuaHR0cC5wYXRjaCgnYXBpL3JvbGVzLycgKyByb2xlLmlkICsgJy9wZXJtaXNzaW9ucy8nICsgcGVybWlzc2lvbi5pZCArICcvcmVtb3ZlJywgZGF0YSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICByb2xlLnJlbW92ZVBlcm1pc3Npb24ocGVybWlzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KHBlcm1pc3Npb24ubGFiZWwgKyAnIHJlbW92ZWQnLCAnd2FybmluZycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvKiBBZGQgdGhlIHBlcm1pc3Npb24gKi9cbiAgICAgICAgICAgIHRoaXMuaHR0cC5wYXRjaCgnYXBpL3JvbGVzLycgKyByb2xlLmlkICsgJy9wZXJtaXNzaW9ucy8nICsgcGVybWlzc2lvbi5pZCArICcvYWRkJywgZGF0YSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICByb2xlLmFkZFBlcm1pc3Npb24ocGVybWlzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KHBlcm1pc3Npb24ubGFiZWwgKyAnIGFkZGVkJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1zdGFydCBnYXAtM1wiPlxuICA8bWF0LWNhcmQ+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibS0wIGZ3LWJvbGRcIj5cbiAgICAgICAgICBNYW5hZ2UgUm9sZSBQZXJtaXNzaW9uc1xuICAgICAgICA8L2gzPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWNvbmZpZy5wZXJtaXNzaW9uQ29uZmlnLmRpc2FibGVVc2Vyc1wiIFtyb3V0ZXJMaW5rXT1cIlsnLi4vdXNlcnMnXVwiIGNsYXNzPVwibWwtMVwiXG4gICAgICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b24+XG4gICAgICAgICAgPGkgY2xhc3M9XCJpY29uIGZhcyBmYS11c2Vyc1wiPjwvaT4gVXNlcnNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhY29uZmlnLnBlcm1pc3Npb25Db25maWcuZGlzYWJsZVJvbGVzXCIgW3JvdXRlckxpbmtdPVwiWycuLi9yb2xlcyddXCIgY2xhc3M9XCJtbC0xXCJcbiAgICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS11c2VyLW1kXCI+PC9pPiBNYW5hZ2UgUm9sZXNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+U2VhcmNoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoIFBlcm1pc3Npb25zXCJcbiAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIi8+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZmlsdGVyRm9ybS5nZXQoJ3NlYXJjaCcpLnNldFZhbHVlKCcnKVwiICpuZ0lmPVwiZmlsdGVyRm9ybS5nZXQoJ3NlYXJjaCcpLnZhbHVlXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJyb2xlc1wiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJtbC0yXCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5TaG93IFJvbGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSdyb2xlX2lkcycgbXVsdGlwbGU+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgcm9sZSBvZiByb2xlc1wiIFt2YWx1ZV09XCJyb2xlPy5pZFwiPlxuICAgICAgICAgICAgICB7eyByb2xlLmxhYmVsIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9mb3JtPlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPC9tYXQtY2FyZD5cblxuICA8bWF0LWNhcmQgY2xhc3M9XCJtdC0yXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJwLTBcIj5cbiAgICAgIDxmb3JtPlxuICAgICAgICA8dGFibGUgYXJpYS1kZXNjcmliZWRieT1cIlJvbGUgUGVybWlzc2lvbnNcIlxuICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zbSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1jb25kZW5zZWQgdGFibGUtc3RyaXBlZFwiPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGg+UGVybWlzc2lvbnM8L3RoPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm9sZSBvZiByb2xlc1wiPlxuICAgICAgICAgICAgICA8dGggKm5nSWY9XCJmaWx0ZXJGb3JtLmdldCgncm9sZV9pZHMnKS52YWx1ZS5pbmNsdWRlcyhyb2xlLmlkKVwiIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICB7eyByb2xlLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcGVybWlzc2lvbiBvZiBmaWx0ZXJlZFBlcm1pc3Npb25zXCI+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIHt7IHBlcm1pc3Npb24ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb2xlIG9mIHJvbGVzXCI+XG4gICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImZpbHRlckZvcm0uZ2V0KCdyb2xlX2lkcycpLnZhbHVlLmluY2x1ZGVzKHJvbGUuaWQpXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBhbGlnbi1taWRkbGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgKGNoYW5nZSk9XCJ1cGRhdGVSb2xlUGVybWlzc2lvbihyb2xlLCBwZXJtaXNzaW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwicm9sZS5oYXNQZXJtaXNzaW9uKHBlcm1pc3Npb24uc2x1ZylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKHJvbGUuaXNfZ2xvYmFsLCByb2xlLmlzX2VkaXRhYmxlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7cm9sZS5pZH19W3t7cGVybWlzc2lvbj8ubGFiZWx9fV1cIiB0eXBlPVwiY2hlY2tib3hcIi8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICA8L21hdC1jYXJkPlxuPC9kaXY+XG4iXX0=
|
|
@@ -279,7 +279,7 @@ export class SearchableSelectorComponent {
|
|
|
279
279
|
provide: MatFormFieldControl,
|
|
280
280
|
useExisting: SearchableSelectorComponent
|
|
281
281
|
}
|
|
282
|
-
], viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "<ng-container [formGroup]=\"selectorForm\">\n <div class=\"searchable-selector-container\">\n <!-- Selector and Suffix Icons -->\n <mat-select formControlName=\"select_value\" [multiple]=\"multiple\" [required]=\"required\"\n (selectionChange)=\"_handleInput()\" (openedChange)=\"openedChange($event)\" [panelWidth]=\"panelWidth\">\n <!-- Search Field -->\n <mat-form-field *ngIf=\"enableSearch\" class=\"p-1 w-100\">\n <input matInput formControlName=\"search\" placeholder=\"Search...\" (keydown)=\"$event.stopPropagation();\"\n autocomplete=\"off\" #searchInput>\n </mat-form-field>\n\n <!-- Options with Scrollable Container -->\n <div class=\"searchable-selector-scrollable-container\" cdkScrollable (scrollend)=\"onScroll()\">\n <mat-option *ngFor=\"let item of dataItems\" [value]=\"getPropertyValue(item, valueField)\">\n <span>{{ getPropertyValue(item, titleField) }}</span>\n <span *ngIf=\"subtitleField\" class=\"text-secondary\" style=\"font-size: 14px;\">\n - {{ getPropertyValue(item, subtitleField) }}\n </span>\n </mat-option>\n <mat-progress-bar *ngIf=\"isLoading\" color=\"primary\" mode=\"indeterminate\"></mat-progress-bar>\n </div>\n </mat-select>\n\n <!-- Add and Edit Buttons -->\n <mat-icon class=\"cursor-pointer\" *ngIf=\"add\" (click)=\"addItem($event)\">\n add\n </mat-icon>\n <mat-icon class=\"cursor-pointer\" *ngIf=\"edit && selectedValue\" (click)=\"editItem($event)\">\n edit\n </mat-icon>\n </div>\n</ng-container
|
|
282
|
+
], viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "<ng-container [formGroup]=\"selectorForm\">\n <div class=\"searchable-selector-container\">\n <!-- Selector and Suffix Icons -->\n <mat-select formControlName=\"select_value\" [multiple]=\"multiple\" [required]=\"required\"\n (selectionChange)=\"_handleInput()\" (openedChange)=\"openedChange($event)\" [panelWidth]=\"panelWidth\">\n <!-- Search Field -->\n <mat-form-field *ngIf=\"enableSearch\" class=\"p-1 w-100\">\n <input matInput formControlName=\"search\" placeholder=\"Search...\" (keydown)=\"$event.stopPropagation();\"\n autocomplete=\"off\" #searchInput>\n </mat-form-field>\n\n <!-- Options with Scrollable Container -->\n <div class=\"searchable-selector-scrollable-container\" cdkScrollable (scrollend)=\"onScroll()\">\n <mat-option *ngFor=\"let item of dataItems\" [value]=\"getPropertyValue(item, valueField)\">\n <span>{{ getPropertyValue(item, titleField) }}</span>\n <span *ngIf=\"subtitleField\" class=\"text-secondary\" style=\"font-size: 14px;\">\n - {{ getPropertyValue(item, subtitleField) }}\n </span>\n </mat-option>\n <mat-progress-bar *ngIf=\"isLoading\" color=\"primary\" mode=\"indeterminate\"></mat-progress-bar>\n </div>\n </mat-select>\n\n <!-- Add and Edit Buttons -->\n <mat-icon class=\"cursor-pointer\" style=\"margin-top: -12px;\" *ngIf=\"add\" (click)=\"addItem($event)\">\n add\n </mat-icon>\n <mat-icon class=\"cursor-pointer\" style=\"margin-top: -12px;\" *ngIf=\"edit && selectedValue\" (click)=\"editItem($event)\">\n edit\n </mat-icon>\n </div>\n</ng-container>\n", styles: [".searchable-selector-container{display:flex;align-items:center}.searchable-selector-container mat-select{flex-grow:1}.searchable-selector-container mat-icon{margin-left:2px}.relative-icon{position:relative;top:-4px}.searchable-selector-scrollable-container{max-height:175px;overflow-y:auto}:host ::ng-deep .mat-mdc-floating-label{pointer-events:none!important}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.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: i9.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "component", type: i10.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] }); }
|
|
283
283
|
}
|
|
284
284
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchableSelectorComponent, decorators: [{
|
|
285
285
|
type: Component,
|
|
@@ -288,7 +288,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
288
288
|
provide: MatFormFieldControl,
|
|
289
289
|
useExisting: SearchableSelectorComponent
|
|
290
290
|
}
|
|
291
|
-
], template: "<ng-container [formGroup]=\"selectorForm\">\n <div class=\"searchable-selector-container\">\n <!-- Selector and Suffix Icons -->\n <mat-select formControlName=\"select_value\" [multiple]=\"multiple\" [required]=\"required\"\n (selectionChange)=\"_handleInput()\" (openedChange)=\"openedChange($event)\" [panelWidth]=\"panelWidth\">\n <!-- Search Field -->\n <mat-form-field *ngIf=\"enableSearch\" class=\"p-1 w-100\">\n <input matInput formControlName=\"search\" placeholder=\"Search...\" (keydown)=\"$event.stopPropagation();\"\n autocomplete=\"off\" #searchInput>\n </mat-form-field>\n\n <!-- Options with Scrollable Container -->\n <div class=\"searchable-selector-scrollable-container\" cdkScrollable (scrollend)=\"onScroll()\">\n <mat-option *ngFor=\"let item of dataItems\" [value]=\"getPropertyValue(item, valueField)\">\n <span>{{ getPropertyValue(item, titleField) }}</span>\n <span *ngIf=\"subtitleField\" class=\"text-secondary\" style=\"font-size: 14px;\">\n - {{ getPropertyValue(item, subtitleField) }}\n </span>\n </mat-option>\n <mat-progress-bar *ngIf=\"isLoading\" color=\"primary\" mode=\"indeterminate\"></mat-progress-bar>\n </div>\n </mat-select>\n\n <!-- Add and Edit Buttons -->\n <mat-icon class=\"cursor-pointer\" *ngIf=\"add\" (click)=\"addItem($event)\">\n add\n </mat-icon>\n <mat-icon class=\"cursor-pointer\" *ngIf=\"edit && selectedValue\" (click)=\"editItem($event)\">\n edit\n </mat-icon>\n </div>\n</ng-container
|
|
291
|
+
], template: "<ng-container [formGroup]=\"selectorForm\">\n <div class=\"searchable-selector-container\">\n <!-- Selector and Suffix Icons -->\n <mat-select formControlName=\"select_value\" [multiple]=\"multiple\" [required]=\"required\"\n (selectionChange)=\"_handleInput()\" (openedChange)=\"openedChange($event)\" [panelWidth]=\"panelWidth\">\n <!-- Search Field -->\n <mat-form-field *ngIf=\"enableSearch\" class=\"p-1 w-100\">\n <input matInput formControlName=\"search\" placeholder=\"Search...\" (keydown)=\"$event.stopPropagation();\"\n autocomplete=\"off\" #searchInput>\n </mat-form-field>\n\n <!-- Options with Scrollable Container -->\n <div class=\"searchable-selector-scrollable-container\" cdkScrollable (scrollend)=\"onScroll()\">\n <mat-option *ngFor=\"let item of dataItems\" [value]=\"getPropertyValue(item, valueField)\">\n <span>{{ getPropertyValue(item, titleField) }}</span>\n <span *ngIf=\"subtitleField\" class=\"text-secondary\" style=\"font-size: 14px;\">\n - {{ getPropertyValue(item, subtitleField) }}\n </span>\n </mat-option>\n <mat-progress-bar *ngIf=\"isLoading\" color=\"primary\" mode=\"indeterminate\"></mat-progress-bar>\n </div>\n </mat-select>\n\n <!-- Add and Edit Buttons -->\n <mat-icon class=\"cursor-pointer\" style=\"margin-top: -12px;\" *ngIf=\"add\" (click)=\"addItem($event)\">\n add\n </mat-icon>\n <mat-icon class=\"cursor-pointer\" style=\"margin-top: -12px;\" *ngIf=\"edit && selectedValue\" (click)=\"editItem($event)\">\n edit\n </mat-icon>\n </div>\n</ng-container>\n", styles: [".searchable-selector-container{display:flex;align-items:center}.searchable-selector-container mat-select{flex-grow:1}.searchable-selector-container mat-icon{margin-left:2px}.relative-icon{position:relative;top:-4px}.searchable-selector-scrollable-container{max-height:175px;overflow-y:auto}:host ::ng-deep .mat-mdc-floating-label{pointer-events:none!important}\n"] }]
|
|
292
292
|
}], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.FocusMonitor }, { type: i3.HttpService }, { type: i0.ElementRef }, { type: i4.MatDialog }, { type: i1.NgControl, decorators: [{
|
|
293
293
|
type: Optional
|
|
294
294
|
}, {
|
|
@@ -353,4 +353,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
353
353
|
}], value: [{
|
|
354
354
|
type: Input
|
|
355
355
|
}] } });
|
|
356
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3NlYXJjaGFibGUtc2VsZWN0b3Ivc2VhcmNoYWJsZS1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3NlYXJjaGFibGUtc2VsZWN0b3Ivc2VhcmNoYWJsZS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFHTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLE1BQU0sRUFDTixZQUFZLEVBRVosU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBeUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBZ0JwRyxNQUFNLE9BQU8sMkJBQTJCO2FBZ0MvQixXQUFNLEdBQUcsQ0FBQyxBQUFKLENBQUs7SUFXbEIsSUFBSSxLQUFLO1FBQ1AsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN0RCxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3ZCLENBQUM7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O3NCQUFyQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0ksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNFLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNFLGlCQUFpQjtzQkFBekIsS0FBSztnQkF3QkYsUUFBUTtzQkFEWCxLQUFLO2dCQVVGLFFBQVE7c0JBRFgsS0FBSztnQkFVRixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBTZWxmLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFN1YmplY3QsIG9mLCBmcm9tLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uL2NvcmUvaHR0cC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXNlYXJjaGFibGUtc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoYWJsZS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaGFibGUtc2VsZWN0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCxcbiAgICAgIHVzZUV4aXN0aW5nOiBTZWFyY2hhYmxlU2VsZWN0b3JDb21wb25lbnRcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoYWJsZVNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBzZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKSB2YWx1ZUZpZWxkOiBzdHJpbmcgPSAnaWQnO1xuICBASW5wdXQoKSB0aXRsZUZpZWxkOiBzdHJpbmcgPSAndGl0bGUnO1xuICBASW5wdXQoKSBzdWJ0aXRsZUZpZWxkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwaVVybCE6IHN0cmluZztcbiAgQElucHV0KCkgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2VsZWN0ZWRWYWx1ZTogYW55O1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgZW5hYmxlU2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgYWRkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFkZENvbmZpZzogYW55O1xuICBASW5wdXQoKSBlZGl0OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVkaXRDb25maWc6IGFueTtcbiAgQElucHV0KCkgc29ydDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNvcnRCeTogc3RyaW5nO1xuICBASW5wdXQoKSBzZWFyY2hGaWVsZDogc3RyaW5nO1xuICBASW5wdXQoKSBpdGVtQ29tcG9uZW50OiBDb21wb25lbnRUeXBlPHVua25vd24+IHwgVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gIEBJbnB1dCgpIGl0ZW1zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBhcGlEYXRhUHJvcGVydHk6IHN0cmluZyA9ICdkYXRhJztcbiAgQElucHV0KCkgY2FjaGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcGVyUGFnZTogbnVtYmVyID0gMjU7XG4gIEBJbnB1dCgpIGluRGF0YVNlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwYW5lbFdpZHRoOiBzdHJpbmcgPSAnJztcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBmb2N1c1NlYXJjaE9uT3BlbiA9IGZhbHNlO1xuXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcbiAgc3RhdGljIG5leHRJZCA9IDA7XG4gIHNlbGVjdG9yRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgZm9jdXNlZCA9IGZhbHNlO1xuICBjb250cm9sVHlwZSA9ICdzZWFyY2hhYmxlLXNlbGN0b3InO1xuICBpZCA9IGBzZWFyY2hhYmxlLXNlbGN0b3ItJHtTZWFyY2hhYmxlU2VsZWN0b3JDb21wb25lbnQubmV4dElkKyt9YDtcbiAgZGVzY3JpYmVkQnkgPSAnJztcbiAgZmlsdGVyczogYW55O1xuICBjYWNoZWRJdGVtczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgZ2V0IGVtcHR5KCkge1xuICAgIGNvbnN0IHsgdmFsdWU6IHsgc2VsZWN0X3ZhbHVlIH0gfSA9IHRoaXMuc2VsZWN0b3JGb3JtO1xuICAgIHJldHVybiAhc2VsZWN0X3ZhbHVlO1xuICB9XG5cbiAgZ2V0IHNob3VsZExhYmVsRmxvYXQoKSB7IHJldHVybiB0aGlzLmZvY3VzZWQgfHwgIXRoaXMuZW1wdHk7IH1cblxuICBASW5wdXQoKVxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9yZXF1aXJlZDsgfVxuICBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNlbGVjdG9yRm9ybS5nZXQoJ3NlbGVjdF92YWx1ZScpLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2Rpc2FibGVkOyB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLl9kaXNhYmxlZCA/IHRoaXMuc2VsZWN0b3JGb3JtLmRpc2FibGUoKSA6IHRoaXMuc2VsZWN0b3JGb3JtLmVuYWJsZSgpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9yRm9ybS5nZXQoJ3NlbGVjdF92YWx1ZScpPy52YWx1ZSB8fCAnJztcbiAgfVxuICBzZXQgdmFsdWUoZGF0YTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RvckZvcm0ucGF0Y2hWYWx1ZSh7IHNlbGVjdF92YWx1ZTogZGF0YSB8fCAnJyB9KTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgX2ZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCkge1xuXG4gICAgdGhpcy5zZWxlY3RvckZvcm0gPSBmb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBzZWxlY3RfdmFsdWU6IFtudWxsXSxcbiAgICAgIHNlYXJjaDogJydcbiAgICB9KTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBfZm9jdXNNb25pdG9yLm1vbml0b3IoX2VsZW1lbnRSZWYsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkICYmICFvcmlnaW4pIHtcbiAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9ICEhb3JpZ2luO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT0gbnVsbCkge1xuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgb3BlbmVkQ2hhbmdlKG9wZW5lZDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmRhdGFJdGVtcy5sZW5ndGggPT09IDAgJiYgdGhpcy5zZWxlY3RvckZvcm0uZ2V0KCdzZWFyY2gnKS52YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RvckZvcm0uZ2V0KCdzZWFyY2gnKS5zZXRWYWx1ZSgnJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wZW5lZCAmJiB0aGlzLmVuYWJsZVNlYXJjaCAmJiB0aGlzLmZvY3VzU2VhcmNoT25PcGVuKSB7XG4gICAgICAvLyBGb2N1cyB0aGUgc2VhcmNoIGlucHV0IGZpZWxkXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpLCAwKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGF0YUl0ZW1zKCk6IGFueVtdIHtcbiAgICBsZXQgaXRlbXM6IGFueVtdID0gW107XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5zZWxlY3RlZFZhbHVlICYmICh0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID4gMCkpXG4gICAgICBpdGVtcyA9IFsuLi50aGlzLnNlbGVjdGVkVmFsdWUsIC4uLnRoaXMuaXRlbXNdO1xuICAgIGVsc2UgaWYgKCghdGhpcy5tdWx0aXBsZSkgJiYgdGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgICAgaXRlbXMgPSBbdGhpcy5zZWxlY3RlZFZhbHVlLCAuLi50aGlzLml0ZW1zXTtcbiAgICBlbHNlXG4gICAgICBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoKHYsIGksIGEpID0+IGEuZmluZEluZGV4KHYgPT4gdlt0aGlzLnZhbHVlRmllbGRdID09PSBhW2ldW3RoaXMudmFsdWVGaWVsZF0pID09PSBpKTtcbiAgICAvL0VtaXQgdGhlIGl0ZW1zIHRvIGFueSBjaGlsZCBjb21wb25lbnRcbiAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnNlbGVjdG9yRm9ybS5nZXQoJ3NlYXJjaCcpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVNlYXJjaClcbiAgICAgICAgICB0aGlzLnNlYXJjaCh2YWx1ZSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmZpbHRlcnMgPSB7XG4gICAgICBwZXJQYWdlOiB0aGlzLnBlclBhZ2UsXG4gICAgICBzZWFyY2g6ICcnLFxuICAgICAgcGFnZTogMSxcbiAgICAgIGxhc3RQYWdlOiAxXG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnQpIHtcbiAgICAgIHRoaXMuZmlsdGVycy5zb3J0X2J5ID0gdGhpcy5zb3J0QnkgfHwgYCR7dGhpcy50aXRsZUZpZWxkfXxhc2NgO1xuICAgIH1cblxuICAgIC8vRmV0Y2ggSXRlbXMgb25seSBpZiBpdCBpcyBub3QgcHJlc2VudCwgY2FuIGJlIHVzZWQgaW4gcGxhY2VzIHdoZXJlIHdlIGxvYWQgbWFueSBlbnRyaWVzLlxuICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5mZXRjaEl0ZW1MaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgZmV0Y2hJdGVtTGlzdCgpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgbGV0IHJlcXVlc3QgPSB0aGlzLmh0dHAuZ2V0KHRoaXMuYXBpVXJsLCB7IHBhcmFtczogdGhpcy5maWx0ZXJzIH0pXG4gICAgaWYgKHRoaXMuY2FjaGUpIHtcbiAgICAgIHJlcXVlc3QgPSB0aGlzLmh0dHAuY2FjaGUoKS5nZXQodGhpcy5hcGlVcmwsIHsgcGFyYW1zOiB0aGlzLmZpbHRlcnMgfSlcbiAgICB9XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIG9mKCkucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRydWUpLFxuICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IGZyb20ocmVxdWVzdCkpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzTG9hZGluZyA9IGZhbHNlKSxcbiAgICAgICkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5jb25jYXQocmVzdWx0W3RoaXMuYXBpRGF0YVByb3BlcnR5XSk7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgdGhpcy5jYWNoZWRJdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJzLnBhZ2UgPSByZXN1bHQ/LmN1cnJlbnRfcGFnZSB8fCAxO1xuICAgICAgICB0aGlzLmZpbHRlcnMubGFzdFBhZ2UgPSByZXN1bHQ/Lmxhc3RfcGFnZSB8fCAxO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xuICB9XG5cbiAgb25Db250YWluZXJDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gZGF0YTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eVZhbHVlKGVsZTogYW55LCBrZXlTdHJpbmc6IHN0cmluZykge1xuICAgIGtleVN0cmluZyA9IGtleVN0cmluZy5yZXBsYWNlKC9cXFsoXFx3KylcXF0vZywgXCIuJDFcIik7IC8vIGNvbnZlcnQgaW5kZXhlcyB0byBwcm9wZXJ0aWVzXG4gICAga2V5U3RyaW5nID0ga2V5U3RyaW5nLnJlcGxhY2UoL15cXC4vLCBcIlwiKTsgLy8gc3RyaXAgYSBsZWFkaW5nIGRvdFxuICAgIGNvbnN0IGtleUxpc3QgPSBrZXlTdHJpbmcuc3BsaXQoXCIuXCIpO1xuICAgIGZvciAobGV0IGkgPSAwLCBuID0ga2V5TGlzdC5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleUxpc3RbaV07XG4gICAgICBpZiAoZWxlICYmIGtleSBpbiBlbGUpIHtcbiAgICAgICAgZWxlID0gZWxlW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBfaGFuZGxlSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSlcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9ICh0aGlzLnZhbHVlIGFzIFtdKS5tYXAoeCA9PiB0aGlzLmRhdGFJdGVtcy5maW5kKHkgPT4geVt0aGlzLnZhbHVlRmllbGRdID09PSB4KSk7XG4gICAgZWxzZVxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5kYXRhSXRlbXMuZmluZCh4ID0+IHhbdGhpcy52YWx1ZUZpZWxkXSA9PT0gdGhpcy52YWx1ZSk7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICB9XG5cbiAgZ2V0IGVycm9yU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLm5nQ29udHJvbCAmJiB0aGlzLm5nQ29udHJvbC5pbnZhbGlkICYmICh0aGlzLm5nQ29udHJvbC50b3VjaGVkIHx8IHRoaXMubmdDb250cm9sLmRpcnR5KSk7XG4gIH1cblxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzYWJsZWQ6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcmVxdWlyZWQ6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIG9uU2Nyb2xsKCkge1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmcgJiYgdGhpcy5maWx0ZXJzLmxhc3RQYWdlID4gdGhpcy5maWx0ZXJzLnBhZ2UpIHtcbiAgICAgIHRoaXMuZmlsdGVycy5wYWdlICs9IDE7XG4gICAgICB0aGlzLmZldGNoSXRlbUxpc3QoKTtcbiAgICB9XG4gIH1cblxuICByZWxvYWREYXRhKCkge1xuICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZpbHRlcnMucGFnZSA9IDE7XG4gICAgdGhpcy5maWx0ZXJzLmxhc3RQYWdlID0gMTtcbiAgICB0aGlzLmZldGNoSXRlbUxpc3QoKTtcbiAgfVxuXG4gIHNlYXJjaChldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoRmllbGQpIHtcbiAgICAgIHRoaXMuZmlsdGVyc1t0aGlzLnNlYXJjaEZpZWxkXSA9IGV2ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcnMuc2VhcmNoID0gZXZlbnQ7XG4gICAgfVxuICAgIC8vIHdlIG5lZWQgc2VhcmNoIGZpZWxkIHRvIHNlYXJjaCBpbiBkYXRhXG4gICAgaWYgKHRoaXMuaW5EYXRhU2VhcmNoICYmIHRoaXMuc2VhcmNoRmllbGQpIHtcbiAgICAgIHRoaXMuZmlsdGVySXRlbXMoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJJdGVtcyhldmVudDogc3RyaW5nKSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5jYWNoZWRJdGVtcy5maWx0ZXIoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZVt0aGlzLnNlYXJjaEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuc2VhcmNoKGV2ZW50LnRvTG93ZXJDYXNlKCkpICE9IC0xXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5jYWNoZWRJdGVtcztcbiAgICB9XG4gIH1cblxuICBhZGRJdGVtKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuaXRlbUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgZGF0YToge30sXG4gICAgICAuLi50aGlzLmFkZENvbmZpZ1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLml0ZW1zLnB1c2gocmVzdWx0Lml0ZW0pO1xuICAgICAgICB0aGlzLnNlbGVjdG9yRm9ybS5nZXQoJ3NlbGVjdF92YWx1ZScpLnNldFZhbHVlKHJlc3VsdC5pdGVtW3RoaXMudmFsdWVGaWVsZF0pO1xuICAgICAgICB0aGlzLl9oYW5kbGVJbnB1dCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgZWRpdEl0ZW0oZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5pdGVtQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzQwMHB4JyxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGl0ZW06IHRoaXMuc2VsZWN0ZWRWYWx1ZVxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMuZWRpdENvbmZpZ1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoeCA9PiB4W3RoaXMudmFsdWVGaWVsZF0gIT09IHRoaXMuc2VsZWN0ZWRWYWx1ZVt0aGlzLnZhbHVlRmllbGRdKTtcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHJlc3VsdC5pdGVtKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RvckZvcm0uZ2V0KCdzZWxlY3RfdmFsdWUnKS5zZXRWYWx1ZShyZXN1bHQuaXRlbVt0aGlzLnZhbHVlRmllbGRdKTtcbiAgICAgICAgdGhpcy5faGFuZGxlSW5wdXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwic2VsZWN0b3JGb3JtXCI+XG4gIDxkaXYgY2xhc3M9XCJzZWFyY2hhYmxlLXNlbGVjdG9yLWNvbnRhaW5lclwiPlxuICAgIDwhLS0gU2VsZWN0b3IgYW5kIFN1ZmZpeCBJY29ucyAtLT5cbiAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RfdmFsdWVcIiBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJfaGFuZGxlSW5wdXQoKVwiIChvcGVuZWRDaGFuZ2UpPVwib3BlbmVkQ2hhbmdlKCRldmVudClcIiBbcGFuZWxXaWR0aF09XCJwYW5lbFdpZHRoXCI+XG4gICAgICA8IS0tIFNlYXJjaCBGaWVsZCAtLT5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cImVuYWJsZVNlYXJjaFwiIGNsYXNzPVwicC0xIHctMTAwXCI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIlxuICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiICNzZWFyY2hJbnB1dD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgIDwhLS0gT3B0aW9ucyB3aXRoIFNjcm9sbGFibGUgQ29udGFpbmVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaGFibGUtc2VsZWN0b3Itc2Nyb2xsYWJsZS1jb250YWluZXJcIiBjZGtTY3JvbGxhYmxlIChzY3JvbGxlbmQpPVwib25TY3JvbGwoKVwiPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhSXRlbXNcIiBbdmFsdWVdPVwiZ2V0UHJvcGVydHlWYWx1ZShpdGVtLCB2YWx1ZUZpZWxkKVwiPlxuICAgICAgICAgIDxzcGFuPnt7IGdldFByb3BlcnR5VmFsdWUoaXRlbSwgdGl0bGVGaWVsZCkgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJzdWJ0aXRsZUZpZWxkXCIgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiPlxuICAgICAgICAgICAgLSB7eyBnZXRQcm9wZXJ0eVZhbHVlKGl0ZW0sIHN1YnRpdGxlRmllbGQpIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyICpuZ0lmPVwiaXNMb2FkaW5nXCIgY29sb3I9XCJwcmltYXJ5XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1zZWxlY3Q+XG5cbiAgICA8IS0tIEFkZCBhbmQgRWRpdCBCdXR0b25zIC0tPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJhZGRcIiAoY2xpY2spPVwiYWRkSXRlbSgkZXZlbnQpXCI+XG4gICAgICBhZGRcbiAgICA8L21hdC1pY29uPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJlZGl0ICYmIHNlbGVjdGVkVmFsdWVcIiAoY2xpY2spPVwiZWRpdEl0ZW0oJGV2ZW50KVwiPlxuICAgICAgZWRpdFxuICAgIDwvbWF0LWljb24+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+Il19
|
|
356
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3NlYXJjaGFibGUtc2VsZWN0b3Ivc2VhcmNoYWJsZS1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3NlYXJjaGFibGUtc2VsZWN0b3Ivc2VhcmNoYWJsZS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFHTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLE1BQU0sRUFDTixZQUFZLEVBRVosU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBeUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBZ0JwRyxNQUFNLE9BQU8sMkJBQTJCO2FBZ0MvQixXQUFNLEdBQUcsQ0FBQyxBQUFKLENBQUs7SUFXbEIsSUFBSSxLQUFLO1FBQ1AsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN0RCxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3ZCLENBQUM7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O3NCQUFyQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0ksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNFLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNFLGlCQUFpQjtzQkFBekIsS0FBSztnQkF3QkYsUUFBUTtzQkFEWCxLQUFLO2dCQVVGLFFBQVE7c0JBRFgsS0FBSztnQkFVRixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBTZWxmLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFN1YmplY3QsIG9mLCBmcm9tLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uL2NvcmUvaHR0cC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXNlYXJjaGFibGUtc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoYWJsZS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaGFibGUtc2VsZWN0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCxcbiAgICAgIHVzZUV4aXN0aW5nOiBTZWFyY2hhYmxlU2VsZWN0b3JDb21wb25lbnRcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoYWJsZVNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBzZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKSB2YWx1ZUZpZWxkOiBzdHJpbmcgPSAnaWQnO1xuICBASW5wdXQoKSB0aXRsZUZpZWxkOiBzdHJpbmcgPSAndGl0bGUnO1xuICBASW5wdXQoKSBzdWJ0aXRsZUZpZWxkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwaVVybCE6IHN0cmluZztcbiAgQElucHV0KCkgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2VsZWN0ZWRWYWx1ZTogYW55O1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgZW5hYmxlU2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgYWRkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFkZENvbmZpZzogYW55O1xuICBASW5wdXQoKSBlZGl0OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVkaXRDb25maWc6IGFueTtcbiAgQElucHV0KCkgc29ydDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNvcnRCeTogc3RyaW5nO1xuICBASW5wdXQoKSBzZWFyY2hGaWVsZDogc3RyaW5nO1xuICBASW5wdXQoKSBpdGVtQ29tcG9uZW50OiBDb21wb25lbnRUeXBlPHVua25vd24+IHwgVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gIEBJbnB1dCgpIGl0ZW1zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBhcGlEYXRhUHJvcGVydHk6IHN0cmluZyA9ICdkYXRhJztcbiAgQElucHV0KCkgY2FjaGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcGVyUGFnZTogbnVtYmVyID0gMjU7XG4gIEBJbnB1dCgpIGluRGF0YVNlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwYW5lbFdpZHRoOiBzdHJpbmcgPSAnJztcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBmb2N1c1NlYXJjaE9uT3BlbiA9IGZhbHNlO1xuXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcbiAgc3RhdGljIG5leHRJZCA9IDA7XG4gIHNlbGVjdG9yRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgZm9jdXNlZCA9IGZhbHNlO1xuICBjb250cm9sVHlwZSA9ICdzZWFyY2hhYmxlLXNlbGN0b3InO1xuICBpZCA9IGBzZWFyY2hhYmxlLXNlbGN0b3ItJHtTZWFyY2hhYmxlU2VsZWN0b3JDb21wb25lbnQubmV4dElkKyt9YDtcbiAgZGVzY3JpYmVkQnkgPSAnJztcbiAgZmlsdGVyczogYW55O1xuICBjYWNoZWRJdGVtczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgZ2V0IGVtcHR5KCkge1xuICAgIGNvbnN0IHsgdmFsdWU6IHsgc2VsZWN0X3ZhbHVlIH0gfSA9IHRoaXMuc2VsZWN0b3JGb3JtO1xuICAgIHJldHVybiAhc2VsZWN0X3ZhbHVlO1xuICB9XG5cbiAgZ2V0IHNob3VsZExhYmVsRmxvYXQoKSB7IHJldHVybiB0aGlzLmZvY3VzZWQgfHwgIXRoaXMuZW1wdHk7IH1cblxuICBASW5wdXQoKVxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9yZXF1aXJlZDsgfVxuICBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNlbGVjdG9yRm9ybS5nZXQoJ3NlbGVjdF92YWx1ZScpLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2Rpc2FibGVkOyB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLl9kaXNhYmxlZCA/IHRoaXMuc2VsZWN0b3JGb3JtLmRpc2FibGUoKSA6IHRoaXMuc2VsZWN0b3JGb3JtLmVuYWJsZSgpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9yRm9ybS5nZXQoJ3NlbGVjdF92YWx1ZScpPy52YWx1ZSB8fCAnJztcbiAgfVxuICBzZXQgdmFsdWUoZGF0YTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RvckZvcm0ucGF0Y2hWYWx1ZSh7IHNlbGVjdF92YWx1ZTogZGF0YSB8fCAnJyB9KTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgX2ZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCkge1xuXG4gICAgdGhpcy5zZWxlY3RvckZvcm0gPSBmb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBzZWxlY3RfdmFsdWU6IFtudWxsXSxcbiAgICAgIHNlYXJjaDogJydcbiAgICB9KTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBfZm9jdXNNb25pdG9yLm1vbml0b3IoX2VsZW1lbnRSZWYsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkICYmICFvcmlnaW4pIHtcbiAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9ICEhb3JpZ2luO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT0gbnVsbCkge1xuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgb3BlbmVkQ2hhbmdlKG9wZW5lZDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmRhdGFJdGVtcy5sZW5ndGggPT09IDAgJiYgdGhpcy5zZWxlY3RvckZvcm0uZ2V0KCdzZWFyY2gnKS52YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RvckZvcm0uZ2V0KCdzZWFyY2gnKS5zZXRWYWx1ZSgnJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wZW5lZCAmJiB0aGlzLmVuYWJsZVNlYXJjaCAmJiB0aGlzLmZvY3VzU2VhcmNoT25PcGVuKSB7XG4gICAgICAvLyBGb2N1cyB0aGUgc2VhcmNoIGlucHV0IGZpZWxkXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpLCAwKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGF0YUl0ZW1zKCk6IGFueVtdIHtcbiAgICBsZXQgaXRlbXM6IGFueVtdID0gW107XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5zZWxlY3RlZFZhbHVlICYmICh0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID4gMCkpXG4gICAgICBpdGVtcyA9IFsuLi50aGlzLnNlbGVjdGVkVmFsdWUsIC4uLnRoaXMuaXRlbXNdO1xuICAgIGVsc2UgaWYgKCghdGhpcy5tdWx0aXBsZSkgJiYgdGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgICAgaXRlbXMgPSBbdGhpcy5zZWxlY3RlZFZhbHVlLCAuLi50aGlzLml0ZW1zXTtcbiAgICBlbHNlXG4gICAgICBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoKHYsIGksIGEpID0+IGEuZmluZEluZGV4KHYgPT4gdlt0aGlzLnZhbHVlRmllbGRdID09PSBhW2ldW3RoaXMudmFsdWVGaWVsZF0pID09PSBpKTtcbiAgICAvL0VtaXQgdGhlIGl0ZW1zIHRvIGFueSBjaGlsZCBjb21wb25lbnRcbiAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnNlbGVjdG9yRm9ybS5nZXQoJ3NlYXJjaCcpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVNlYXJjaClcbiAgICAgICAgICB0aGlzLnNlYXJjaCh2YWx1ZSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmZpbHRlcnMgPSB7XG4gICAgICBwZXJQYWdlOiB0aGlzLnBlclBhZ2UsXG4gICAgICBzZWFyY2g6ICcnLFxuICAgICAgcGFnZTogMSxcbiAgICAgIGxhc3RQYWdlOiAxXG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnQpIHtcbiAgICAgIHRoaXMuZmlsdGVycy5zb3J0X2J5ID0gdGhpcy5zb3J0QnkgfHwgYCR7dGhpcy50aXRsZUZpZWxkfXxhc2NgO1xuICAgIH1cblxuICAgIC8vRmV0Y2ggSXRlbXMgb25seSBpZiBpdCBpcyBub3QgcHJlc2VudCwgY2FuIGJlIHVzZWQgaW4gcGxhY2VzIHdoZXJlIHdlIGxvYWQgbWFueSBlbnRyaWVzLlxuICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5mZXRjaEl0ZW1MaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgZmV0Y2hJdGVtTGlzdCgpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgbGV0IHJlcXVlc3QgPSB0aGlzLmh0dHAuZ2V0KHRoaXMuYXBpVXJsLCB7IHBhcmFtczogdGhpcy5maWx0ZXJzIH0pXG4gICAgaWYgKHRoaXMuY2FjaGUpIHtcbiAgICAgIHJlcXVlc3QgPSB0aGlzLmh0dHAuY2FjaGUoKS5nZXQodGhpcy5hcGlVcmwsIHsgcGFyYW1zOiB0aGlzLmZpbHRlcnMgfSlcbiAgICB9XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIG9mKCkucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRydWUpLFxuICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IGZyb20ocmVxdWVzdCkpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzTG9hZGluZyA9IGZhbHNlKSxcbiAgICAgICkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5jb25jYXQocmVzdWx0W3RoaXMuYXBpRGF0YVByb3BlcnR5XSk7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgdGhpcy5jYWNoZWRJdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJzLnBhZ2UgPSByZXN1bHQ/LmN1cnJlbnRfcGFnZSB8fCAxO1xuICAgICAgICB0aGlzLmZpbHRlcnMubGFzdFBhZ2UgPSByZXN1bHQ/Lmxhc3RfcGFnZSB8fCAxO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xuICB9XG5cbiAgb25Db250YWluZXJDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gZGF0YTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eVZhbHVlKGVsZTogYW55LCBrZXlTdHJpbmc6IHN0cmluZykge1xuICAgIGtleVN0cmluZyA9IGtleVN0cmluZy5yZXBsYWNlKC9cXFsoXFx3KylcXF0vZywgXCIuJDFcIik7IC8vIGNvbnZlcnQgaW5kZXhlcyB0byBwcm9wZXJ0aWVzXG4gICAga2V5U3RyaW5nID0ga2V5U3RyaW5nLnJlcGxhY2UoL15cXC4vLCBcIlwiKTsgLy8gc3RyaXAgYSBsZWFkaW5nIGRvdFxuICAgIGNvbnN0IGtleUxpc3QgPSBrZXlTdHJpbmcuc3BsaXQoXCIuXCIpO1xuICAgIGZvciAobGV0IGkgPSAwLCBuID0ga2V5TGlzdC5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleUxpc3RbaV07XG4gICAgICBpZiAoZWxlICYmIGtleSBpbiBlbGUpIHtcbiAgICAgICAgZWxlID0gZWxlW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBfaGFuZGxlSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSlcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9ICh0aGlzLnZhbHVlIGFzIFtdKS5tYXAoeCA9PiB0aGlzLmRhdGFJdGVtcy5maW5kKHkgPT4geVt0aGlzLnZhbHVlRmllbGRdID09PSB4KSk7XG4gICAgZWxzZVxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5kYXRhSXRlbXMuZmluZCh4ID0+IHhbdGhpcy52YWx1ZUZpZWxkXSA9PT0gdGhpcy52YWx1ZSk7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICB9XG5cbiAgZ2V0IGVycm9yU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLm5nQ29udHJvbCAmJiB0aGlzLm5nQ29udHJvbC5pbnZhbGlkICYmICh0aGlzLm5nQ29udHJvbC50b3VjaGVkIHx8IHRoaXMubmdDb250cm9sLmRpcnR5KSk7XG4gIH1cblxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzYWJsZWQ6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcmVxdWlyZWQ6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIG9uU2Nyb2xsKCkge1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmcgJiYgdGhpcy5maWx0ZXJzLmxhc3RQYWdlID4gdGhpcy5maWx0ZXJzLnBhZ2UpIHtcbiAgICAgIHRoaXMuZmlsdGVycy5wYWdlICs9IDE7XG4gICAgICB0aGlzLmZldGNoSXRlbUxpc3QoKTtcbiAgICB9XG4gIH1cblxuICByZWxvYWREYXRhKCkge1xuICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZpbHRlcnMucGFnZSA9IDE7XG4gICAgdGhpcy5maWx0ZXJzLmxhc3RQYWdlID0gMTtcbiAgICB0aGlzLmZldGNoSXRlbUxpc3QoKTtcbiAgfVxuXG4gIHNlYXJjaChldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoRmllbGQpIHtcbiAgICAgIHRoaXMuZmlsdGVyc1t0aGlzLnNlYXJjaEZpZWxkXSA9IGV2ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcnMuc2VhcmNoID0gZXZlbnQ7XG4gICAgfVxuICAgIC8vIHdlIG5lZWQgc2VhcmNoIGZpZWxkIHRvIHNlYXJjaCBpbiBkYXRhXG4gICAgaWYgKHRoaXMuaW5EYXRhU2VhcmNoICYmIHRoaXMuc2VhcmNoRmllbGQpIHtcbiAgICAgIHRoaXMuZmlsdGVySXRlbXMoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJJdGVtcyhldmVudDogc3RyaW5nKSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5jYWNoZWRJdGVtcy5maWx0ZXIoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZVt0aGlzLnNlYXJjaEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuc2VhcmNoKGV2ZW50LnRvTG93ZXJDYXNlKCkpICE9IC0xXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5jYWNoZWRJdGVtcztcbiAgICB9XG4gIH1cblxuICBhZGRJdGVtKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuaXRlbUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgZGF0YToge30sXG4gICAgICAuLi50aGlzLmFkZENvbmZpZ1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLml0ZW1zLnB1c2gocmVzdWx0Lml0ZW0pO1xuICAgICAgICB0aGlzLnNlbGVjdG9yRm9ybS5nZXQoJ3NlbGVjdF92YWx1ZScpLnNldFZhbHVlKHJlc3VsdC5pdGVtW3RoaXMudmFsdWVGaWVsZF0pO1xuICAgICAgICB0aGlzLl9oYW5kbGVJbnB1dCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgZWRpdEl0ZW0oZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5pdGVtQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzQwMHB4JyxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGl0ZW06IHRoaXMuc2VsZWN0ZWRWYWx1ZVxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMuZWRpdENvbmZpZ1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoeCA9PiB4W3RoaXMudmFsdWVGaWVsZF0gIT09IHRoaXMuc2VsZWN0ZWRWYWx1ZVt0aGlzLnZhbHVlRmllbGRdKTtcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHJlc3VsdC5pdGVtKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RvckZvcm0uZ2V0KCdzZWxlY3RfdmFsdWUnKS5zZXRWYWx1ZShyZXN1bHQuaXRlbVt0aGlzLnZhbHVlRmllbGRdKTtcbiAgICAgICAgdGhpcy5faGFuZGxlSW5wdXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwic2VsZWN0b3JGb3JtXCI+XG4gIDxkaXYgY2xhc3M9XCJzZWFyY2hhYmxlLXNlbGVjdG9yLWNvbnRhaW5lclwiPlxuICAgIDwhLS0gU2VsZWN0b3IgYW5kIFN1ZmZpeCBJY29ucyAtLT5cbiAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RfdmFsdWVcIiBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJfaGFuZGxlSW5wdXQoKVwiIChvcGVuZWRDaGFuZ2UpPVwib3BlbmVkQ2hhbmdlKCRldmVudClcIiBbcGFuZWxXaWR0aF09XCJwYW5lbFdpZHRoXCI+XG4gICAgICA8IS0tIFNlYXJjaCBGaWVsZCAtLT5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cImVuYWJsZVNlYXJjaFwiIGNsYXNzPVwicC0xIHctMTAwXCI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIlxuICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiICNzZWFyY2hJbnB1dD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgIDwhLS0gT3B0aW9ucyB3aXRoIFNjcm9sbGFibGUgQ29udGFpbmVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaGFibGUtc2VsZWN0b3Itc2Nyb2xsYWJsZS1jb250YWluZXJcIiBjZGtTY3JvbGxhYmxlIChzY3JvbGxlbmQpPVwib25TY3JvbGwoKVwiPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhSXRlbXNcIiBbdmFsdWVdPVwiZ2V0UHJvcGVydHlWYWx1ZShpdGVtLCB2YWx1ZUZpZWxkKVwiPlxuICAgICAgICAgIDxzcGFuPnt7IGdldFByb3BlcnR5VmFsdWUoaXRlbSwgdGl0bGVGaWVsZCkgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJzdWJ0aXRsZUZpZWxkXCIgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiPlxuICAgICAgICAgICAgLSB7eyBnZXRQcm9wZXJ0eVZhbHVlKGl0ZW0sIHN1YnRpdGxlRmllbGQpIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyICpuZ0lmPVwiaXNMb2FkaW5nXCIgY29sb3I9XCJwcmltYXJ5XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1zZWxlY3Q+XG5cbiAgICA8IS0tIEFkZCBhbmQgRWRpdCBCdXR0b25zIC0tPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAtMTJweDtcIiAqbmdJZj1cImFkZFwiIChjbGljayk9XCJhZGRJdGVtKCRldmVudClcIj5cbiAgICAgIGFkZFxuICAgIDwvbWF0LWljb24+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBzdHlsZT1cIm1hcmdpbi10b3A6IC0xMnB4O1wiICpuZ0lmPVwiZWRpdCAmJiBzZWxlY3RlZFZhbHVlXCIgKGNsaWNrKT1cImVkaXRJdGVtKCRldmVudClcIj5cbiAgICAgIGVkaXRcbiAgICA8L21hdC1pY29uPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
|