@myrmidon/auth-jwt-admin 4.1.0 → 4.2.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/README.md +24 -24
- package/esm2022/lib/auth-jwt-admin.module.mjs +14 -22
- package/esm2022/lib/components/auth-jwt-registration/auth-jwt-registration.component.mjs +11 -12
- package/esm2022/lib/components/confirm-dialog/confirm-dialog.component.mjs +3 -3
- package/esm2022/lib/components/password-strength-bar/password-strength-bar.component.mjs +5 -5
- package/esm2022/lib/components/state/user-list.repository.mjs +3 -3
- package/esm2022/lib/components/user-editor/user-editor.component.mjs +11 -12
- package/esm2022/lib/components/user-filter/user-filter.component.mjs +5 -5
- package/esm2022/lib/components/user-list/user-list.component.mjs +14 -14
- package/esm2022/lib/services/auth-jwt-account.service.mjs +4 -4
- package/esm2022/lib/services/dialog.service.mjs +3 -3
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/myrmidon-auth-jwt-admin.mjs +56 -64
- package/fesm2022/myrmidon-auth-jwt-admin.mjs.map +1 -1
- package/lib/auth-jwt-admin.module.d.ts +17 -18
- package/package.json +6 -6
- package/src/locale/messages.it.xlf +558 -558
- package/src/locale/messages.xlf +494 -494
package/README.md
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
# AuthJwtAdmin
|
|
2
|
-
|
|
3
|
-
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.1.0.
|
|
4
|
-
|
|
5
|
-
## Code scaffolding
|
|
6
|
-
|
|
7
|
-
Run `ng generate component component-name --project auth-jwt-admin` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project auth-jwt-admin`.
|
|
8
|
-
> Note: Don't forget to add `--project auth-jwt-admin` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
-
|
|
10
|
-
## Build
|
|
11
|
-
|
|
12
|
-
Run `ng build auth-jwt-admin` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
-
|
|
14
|
-
## Publishing
|
|
15
|
-
|
|
16
|
-
After building your library with `ng build auth-jwt-admin`, go to the dist folder `cd dist/auth-jwt-admin` and run `npm publish`.
|
|
17
|
-
|
|
18
|
-
## Running unit tests
|
|
19
|
-
|
|
20
|
-
Run `ng test auth-jwt-admin` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
-
|
|
22
|
-
## Further help
|
|
23
|
-
|
|
24
|
-
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
1
|
+
# AuthJwtAdmin
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.1.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project auth-jwt-admin` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project auth-jwt-admin`.
|
|
8
|
+
> Note: Don't forget to add `--project auth-jwt-admin` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build auth-jwt-admin` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build auth-jwt-admin`, go to the dist folder `cd dist/auth-jwt-admin` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test auth-jwt-admin` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
|
-
import {
|
|
2
|
+
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
|
|
3
3
|
import { NgModule } from '@angular/core';
|
|
4
4
|
import { RouterModule } from '@angular/router';
|
|
5
5
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
@@ -25,14 +25,13 @@ import { ConfirmDialogComponent } from './components/confirm-dialog/confirm-dial
|
|
|
25
25
|
import { UserEditorComponent } from './components/user-editor/user-editor.component';
|
|
26
26
|
import * as i0 from "@angular/core";
|
|
27
27
|
export class AuthJwtAdminModule {
|
|
28
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
29
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
28
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: AuthJwtAdminModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
29
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: AuthJwtAdminModule, declarations: [AuthJwtRegistrationComponent,
|
|
30
30
|
PasswordStrengthBarComponent,
|
|
31
31
|
UserFilterComponent,
|
|
32
32
|
UserListComponent,
|
|
33
33
|
ConfirmDialogComponent,
|
|
34
34
|
UserEditorComponent], imports: [CommonModule,
|
|
35
|
-
HttpClientModule,
|
|
36
35
|
FormsModule,
|
|
37
36
|
RouterModule,
|
|
38
37
|
ReactiveFormsModule,
|
|
@@ -54,8 +53,7 @@ export class AuthJwtAdminModule {
|
|
|
54
53
|
PasswordStrengthBarComponent,
|
|
55
54
|
UserFilterComponent,
|
|
56
55
|
UserListComponent] }); }
|
|
57
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
58
|
-
HttpClientModule,
|
|
56
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: AuthJwtAdminModule, providers: [provideHttpClient(withInterceptorsFromDi())], imports: [CommonModule,
|
|
59
57
|
FormsModule,
|
|
60
58
|
RouterModule,
|
|
61
59
|
ReactiveFormsModule,
|
|
@@ -75,10 +73,9 @@ export class AuthJwtAdminModule {
|
|
|
75
73
|
AuthJwtLoginModule,
|
|
76
74
|
NgToolsModule] }); }
|
|
77
75
|
}
|
|
78
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
76
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: AuthJwtAdminModule, decorators: [{
|
|
79
77
|
type: NgModule,
|
|
80
|
-
args: [{
|
|
81
|
-
declarations: [
|
|
78
|
+
args: [{ declarations: [
|
|
82
79
|
AuthJwtRegistrationComponent,
|
|
83
80
|
PasswordStrengthBarComponent,
|
|
84
81
|
UserFilterComponent,
|
|
@@ -86,9 +83,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
86
83
|
ConfirmDialogComponent,
|
|
87
84
|
UserEditorComponent,
|
|
88
85
|
],
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
exports: [
|
|
87
|
+
AuthJwtRegistrationComponent,
|
|
88
|
+
PasswordStrengthBarComponent,
|
|
89
|
+
UserFilterComponent,
|
|
90
|
+
UserListComponent
|
|
91
|
+
], imports: [CommonModule,
|
|
92
92
|
FormsModule,
|
|
93
93
|
RouterModule,
|
|
94
94
|
ReactiveFormsModule,
|
|
@@ -106,14 +106,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
106
106
|
MatSnackBarModule,
|
|
107
107
|
MatTooltipModule,
|
|
108
108
|
AuthJwtLoginModule,
|
|
109
|
-
NgToolsModule
|
|
110
|
-
],
|
|
111
|
-
exports: [
|
|
112
|
-
AuthJwtRegistrationComponent,
|
|
113
|
-
PasswordStrengthBarComponent,
|
|
114
|
-
UserFilterComponent,
|
|
115
|
-
UserListComponent
|
|
116
|
-
],
|
|
117
|
-
}]
|
|
109
|
+
NgToolsModule], providers: [provideHttpClient(withInterceptorsFromDi())] }]
|
|
118
110
|
}] });
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1qd3QtYWRtaW4ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vYXV0aC1qd3QtYWRtaW4vc3JjL2xpYi9hdXRoLWp3dC1hZG1pbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7QUFrQ3JGLE1BQU0sT0FBTyxrQkFBa0I7OEdBQWxCLGtCQUFrQjsrR0FBbEIsa0JBQWtCLGlCQS9CdkIsNEJBQTRCO1lBQzVCLDRCQUE0QjtZQUM1QixtQkFBbUI7WUFDbkIsaUJBQWlCO1lBQ2pCLHNCQUFzQjtZQUN0QixtQkFBbUIsYUFPVixZQUFZO1lBQ3JCLFdBQVc7WUFDWCxZQUFZO1lBQ1osbUJBQW1CO1lBQ25CLFdBQVc7WUFDWCxlQUFlO1lBQ2YsYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixlQUFlO1lBQ2Ysa0JBQWtCO1lBQ2xCLGFBQWE7WUFDYixjQUFjO1lBQ2Qsa0JBQWtCO1lBQ2xCLG9CQUFvQjtZQUNwQix3QkFBd0I7WUFDeEIsaUJBQWlCO1lBQ2pCLGdCQUFnQjtZQUNoQixrQkFBa0I7WUFDbEIsYUFBYSxhQXRCYiw0QkFBNEI7WUFDNUIsNEJBQTRCO1lBQzVCLG1CQUFtQjtZQUNuQixpQkFBaUI7K0dBb0JaLGtCQUFrQixhQURJLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLFlBbEIvRCxZQUFZO1lBQ3JCLFdBQVc7WUFDWCxZQUFZO1lBQ1osbUJBQW1CO1lBQ25CLFdBQVc7WUFDWCxlQUFlO1lBQ2YsYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixlQUFlO1lBQ2Ysa0JBQWtCO1lBQ2xCLGFBQWE7WUFDYixjQUFjO1lBQ2Qsa0JBQWtCO1lBQ2xCLG9CQUFvQjtZQUNwQix3QkFBd0I7WUFDeEIsaUJBQWlCO1lBQ2pCLGdCQUFnQjtZQUNoQixrQkFBa0I7WUFDbEIsYUFBYTs7MkZBQ1Isa0JBQWtCO2tCQWhDOUIsUUFBUTttQkFBQyxFQUFFLFlBQVksRUFBRTt3QkFDbEIsNEJBQTRCO3dCQUM1Qiw0QkFBNEI7d0JBQzVCLG1CQUFtQjt3QkFDbkIsaUJBQWlCO3dCQUNqQixzQkFBc0I7d0JBQ3RCLG1CQUFtQjtxQkFDdEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLDRCQUE0Qjt3QkFDNUIsNEJBQTRCO3dCQUM1QixtQkFBbUI7d0JBQ25CLGlCQUFpQjtxQkFDcEIsRUFBRSxPQUFPLEVBQUUsQ0FBQyxZQUFZO3dCQUNyQixXQUFXO3dCQUNYLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLHdCQUF3Qjt3QkFDeEIsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsYUFBYSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBwcm92aWRlSHR0cENsaWVudCwgd2l0aEludGVyY2VwdG9yc0Zyb21EaSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBNYXRDYXJkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2FyZCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQge01hdEV4cGFuc2lvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3JNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xyXG5pbXBvcnQgeyBNYXRTbmFja0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5pbXBvcnQgeyBBdXRoSnd0TG9naW5Nb2R1bGUgfSBmcm9tICdAbXlybWlkb24vYXV0aC1qd3QtbG9naW4nO1xyXG5pbXBvcnQgeyBOZ1Rvb2xzTW9kdWxlIH0gZnJvbSAnQG15cm1pZG9uL25nLXRvb2xzJztcclxuXHJcbmltcG9ydCB7IEF1dGhKd3RSZWdpc3RyYXRpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYXV0aC1qd3QtcmVnaXN0cmF0aW9uL2F1dGgtand0LXJlZ2lzdHJhdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQYXNzd29yZFN0cmVuZ3RoQmFyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoLWJhci9wYXNzd29yZC1zdHJlbmd0aC1iYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVXNlckZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy91c2VyLWZpbHRlci91c2VyLWZpbHRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVc2VyTGlzdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy91c2VyLWxpc3QvdXNlci1saXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbmZpcm1EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29uZmlybS1kaWFsb2cvY29uZmlybS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVXNlckVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy91c2VyLWVkaXRvci91c2VyLWVkaXRvci5jb21wb25lbnQnO1xyXG5cclxuQE5nTW9kdWxlKHsgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIEF1dGhKd3RSZWdpc3RyYXRpb25Db21wb25lbnQsXG4gICAgICAgIFBhc3N3b3JkU3RyZW5ndGhCYXJDb21wb25lbnQsXG4gICAgICAgIFVzZXJGaWx0ZXJDb21wb25lbnQsXG4gICAgICAgIFVzZXJMaXN0Q29tcG9uZW50LFxuICAgICAgICBDb25maXJtRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICBVc2VyRWRpdG9yQ29tcG9uZW50LFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBBdXRoSnd0UmVnaXN0cmF0aW9uQ29tcG9uZW50LFxuICAgICAgICBQYXNzd29yZFN0cmVuZ3RoQmFyQ29tcG9uZW50LFxuICAgICAgICBVc2VyRmlsdGVyQ29tcG9uZW50LFxuICAgICAgICBVc2VyTGlzdENvbXBvbmVudFxuICAgIF0sIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSb3V0ZXJNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIC8vIG1hdGVyaWFsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0Q2FyZE1vZHVsZSxcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIE1hdERpYWxvZ01vZHVsZSxcbiAgICAgICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICAgICAgTWF0UGFnaW5hdG9yTW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBNYXRTbmFja0Jhck1vZHVsZSxcbiAgICAgICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICAgICAgQXV0aEp3dExvZ2luTW9kdWxlLFxuICAgICAgICBOZ1Rvb2xzTW9kdWxlXSwgcHJvdmlkZXJzOiBbcHJvdmlkZUh0dHBDbGllbnQod2l0aEludGVyY2VwdG9yc0Zyb21EaSgpKV0gfSlcclxuZXhwb3J0IGNsYXNzIEF1dGhKd3RBZG1pbk1vZHVsZSB7fVxyXG4iXX0=
|
|
@@ -7,13 +7,12 @@ import * as i1 from "@angular/forms";
|
|
|
7
7
|
import * as i2 from "@angular/material/snack-bar";
|
|
8
8
|
import * as i3 from "../../services/auth-jwt-account.service";
|
|
9
9
|
import * as i4 from "../state/user-list.repository";
|
|
10
|
-
import * as i5 from "@angular/
|
|
11
|
-
import * as i6 from "@angular/material/
|
|
12
|
-
import * as i7 from "@angular/material/
|
|
13
|
-
import * as i8 from "@angular/material/
|
|
14
|
-
import * as i9 from "@angular/material/
|
|
15
|
-
import * as i10 from "
|
|
16
|
-
import * as i11 from "../password-strength-bar/password-strength-bar.component";
|
|
10
|
+
import * as i5 from "@angular/material/button";
|
|
11
|
+
import * as i6 from "@angular/material/icon";
|
|
12
|
+
import * as i7 from "@angular/material/input";
|
|
13
|
+
import * as i8 from "@angular/material/form-field";
|
|
14
|
+
import * as i9 from "@angular/material/progress-spinner";
|
|
15
|
+
import * as i10 from "../password-strength-bar/password-strength-bar.component";
|
|
17
16
|
export class AuthJwtRegistrationComponent {
|
|
18
17
|
constructor(formBuilder, _snackbar, _accountService, _userRepository) {
|
|
19
18
|
this._snackbar = _snackbar;
|
|
@@ -156,13 +155,13 @@ export class AuthJwtRegistrationComponent {
|
|
|
156
155
|
},
|
|
157
156
|
});
|
|
158
157
|
}
|
|
159
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
160
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: AuthJwtRegistrationComponent, selector: "auth-jwt-registration", outputs: { registered: "registered" }, ngImport: i0, template: "<div>\r\n <form role=\"form\" [formGroup]=\"form\" (submit)=\"onSubmit()\">\r\n <fieldset>\r\n <legend i18n=\"auth-jwt-admin\">registration</legend>\r\n <!-- email -->\r\n <div class=\"form-row\">\r\n <mat-form-field>\r\n <mat-label i18n>email</mat-label>\r\n <input\r\n matInput\r\n type=\"email\"\r\n id=\"email\"\r\n maxlength=\"256\"\r\n required\r\n autofocus\r\n spellcheck=\"false\"\r\n [formControl]=\"email\"\r\n />\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(email).errors?.required && (email.dirty || email.touched)\r\n \"\r\n >email required</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"$any(email).errors?.email && (email.dirty || email.touched)\"\r\n >invalid email</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(email).errors?.uniqueEmail && (email.dirty || email.touched)\r\n \"\r\n >email already registered</mat-error\r\n >\r\n </mat-form-field>\r\n <mat-icon *ngIf=\"email.pending\">hourglass</mat-icon>\r\n </div>\r\n\r\n <!-- name -->\r\n <div class=\"form-row\">\r\n <mat-form-field>\r\n <mat-label i18n=\"auth-jwt-admin\">username</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n id=\"name\"\r\n maxlength=\"50\"\r\n required\r\n pattern=\"^[a-zA-Z][a-zA-Z0-9]{2,49}$\"\r\n spellcheck=\"false\"\r\n [formControl]=\"name\"\r\n />\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"$any(name).errors?.required && (name.dirty || name.touched)\"\r\n >username required</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"$any(name).errors?.pattern && (name.dirty || name.touched)\"\r\n >invalid username</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(name).errors?.uniqueName && (name.dirty || name.touched)\r\n \"\r\n >username already registered</mat-error\r\n >\r\n </mat-form-field>\r\n <mat-icon *ngIf=\"name.pending\">hourglass</mat-icon>\r\n </div>\r\n\r\n <!-- first name -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label i18n=\"auth-jwt-admin\">first name</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n id=\"firstName\"\r\n maxlength=\"50\"\r\n required\r\n spellcheck=\"false\"\r\n [formControl]=\"firstName\"\r\n />\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n firstName.hasError('required') &&\r\n (firstName.dirty || firstName.touched)\r\n \"\r\n class=\"text-danger small\"\r\n >\r\n first name required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- last name -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label i18n=\"auth-jwt-admin\">last name</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n id=\"lastName\"\r\n maxlength=\"50\"\r\n required\r\n spellcheck=\"false\"\r\n [formControl]=\"lastName\"\r\n />\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n lastName.hasError('required') &&\r\n (lastName.dirty || lastName.touched)\r\n \"\r\n class=\"text-danger small\"\r\n >\r\n last name required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- <div [formGroup]=\"passwords\"> -->\r\n <!-- password -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label i18n=\"auth-jwt-admin\">password</mat-label>\r\n <input\r\n matInput\r\n [type]=\"hide ? 'password' : 'text'\"\r\n name=\"password\"\r\n autocomplete=\"new-password\"\r\n maxlength=\"50\"\r\n required\r\n spellcheck=\"false\"\r\n [formControl]=\"password\"\r\n />\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matSuffix\r\n (click)=\"hide = !hide\"\r\n i18n-aria-label=\"auth-jwt-login\"\r\n aria-label=\"Hide password\"\r\n [attr.aria-pressed]=\"hide\"\r\n >\r\n <mat-icon>{{ hide ? \"visibility_off\" : \"visibility\" }}</mat-icon>\r\n </button>\r\n <auth-jwt-password-strength-bar [passwordToCheck]=\"password.value\">\r\n </auth-jwt-password-strength-bar>\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(password).errors?.required &&\r\n (password.dirty || password.touched)\r\n \"\r\n >password required</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(password).errors?.passwordtooshort &&\r\n (password.dirty || password.touched)\r\n \"\r\n >at least 8 characters</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(password).errors?.noupperinpassword &&\r\n (password.dirty || password.touched)\r\n \"\r\n >at least 1 uppercase letter</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(password).errors?.nolowerinpassword &&\r\n (password.dirty || password.touched)\r\n \"\r\n >at least 1 lowercase letter</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(password).errors?.nosymbolinpassword &&\r\n (password.dirty || password.touched)\r\n \"\r\n >at least 1 punctuation/symbol</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- confirm password -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label i18n=\"auth-jwt-admin\">confirm password</mat-label>\r\n <input\r\n matInput\r\n [type]=\"hide ? 'password' : 'text'\"\r\n name=\"confirmPassword\"\r\n maxlength=\"50\"\r\n required\r\n spellcheck=\"false\"\r\n [formControl]=\"confirmPassword\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n <div\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"form.errors?.areequal && confirmPassword.touched\"\r\n style=\"color: red\"\r\n >\r\n password differs from confirmation password\r\n </div>\r\n\r\n <button\r\n i18n=\"auth-jwt-admin\"\r\n mat-raised-button\r\n type=\"submit\"\r\n color=\"primary\"\r\n [disabled]=\"\r\n form.invalid || form.pristine || busy || name.pending || email.pending\r\n \"\r\n >\r\n register\r\n </button>\r\n <mat-progress-spinner diameter=\"20\" *ngIf=\"busy\"></mat-progress-spinner>\r\n </fieldset>\r\n </form>\r\n\r\n <details>\r\n <summary i18n=\"auth-jwt-admin\">Hints</summary>\r\n <div class=\"info\">\r\n <p i18n=\"auth-jwt-admin\">\r\n To register a new user, you must provide his email address, choose a\r\n password, and choose a username, which must be unique (you will be\r\n notified if another user has already taken that name). The username must\r\n include only letters/digits, start with a letter, and be no shorter than\r\n 3 characters, nor longer than 50.\r\n </p>\r\n <p i18n=\"auth-jwt-admin\">\r\n To promote a decent security level, the password must include at least 8\r\n characters, uppercase and lowercase letters, digits, and punctuation\r\n (like dashes, stops, parentheses, etc.).\r\n </p>\r\n <p i18n=\"auth-jwt-admin\">\r\n Once registered, if messaging is enabled on the server side the user\r\n will receive an email message to the email address you specified; he\r\n will have to click on the provided link to complete the registration\r\n process. Otherwise, you should edit the newly created user and confirm\r\n the email registration.\r\n </p>\r\n </div>\r\n </details>\r\n</div>\r\n", styles: ["mat-form-field{width:400px}fieldset{border:1px solid silver;border-radius:8px;padding:16px}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}details{margin:8px}.info{column-width:600px}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { 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.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: "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: i9.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i11.PasswordStrengthBarComponent, selector: "auth-jwt-password-strength-bar", inputs: ["passwordToCheck"], outputs: ["strengthChange"] }] }); }
|
|
158
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: AuthJwtRegistrationComponent, deps: [{ token: i1.FormBuilder }, { token: i2.MatSnackBar }, { token: i3.AuthJwtAccountService }, { token: i4.UserListRepository }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
159
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: AuthJwtRegistrationComponent, selector: "auth-jwt-registration", outputs: { registered: "registered" }, ngImport: i0, template: "<div>\n <form role=\"form\" [formGroup]=\"form\" (submit)=\"onSubmit()\">\n <fieldset>\n <legend i18n=\"auth-jwt-admin\">registration</legend>\n <!-- email -->\n <div class=\"form-row\">\n <mat-form-field>\n <mat-label i18n>email</mat-label>\n <input\n matInput\n type=\"email\"\n id=\"email\"\n maxlength=\"256\"\n required\n autofocus\n spellcheck=\"false\"\n [formControl]=\"email\"\n />\n @if (\n $any(email).errors?.required && (email.dirty || email.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >email required</mat-error\n >\n }\n @if ($any(email).errors?.email && (email.dirty || email.touched)) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >invalid email</mat-error\n >\n }\n @if (\n $any(email).errors?.uniqueEmail && (email.dirty || email.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >email already registered</mat-error\n >\n }\n </mat-form-field>\n @if (email.pending) {\n <mat-icon>hourglass</mat-icon>\n }\n </div>\n\n <!-- name -->\n <div class=\"form-row\">\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">username</mat-label>\n <input\n matInput\n type=\"text\"\n id=\"name\"\n maxlength=\"50\"\n required\n pattern=\"^[a-zA-Z][a-zA-Z0-9]{2,49}$\"\n spellcheck=\"false\"\n [formControl]=\"name\"\n />\n @if ($any(name).errors?.required && (name.dirty || name.touched)) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >username required</mat-error\n >\n }\n @if ($any(name).errors?.pattern && (name.dirty || name.touched)) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >invalid username</mat-error\n >\n }\n @if (\n $any(name).errors?.uniqueName && (name.dirty || name.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >username already registered</mat-error\n >\n }\n </mat-form-field>\n @if (name.pending) {\n <mat-icon>hourglass</mat-icon>\n }\n </div>\n\n <!-- first name -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">first name</mat-label>\n <input\n matInput\n type=\"text\"\n id=\"firstName\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"firstName\"\n />\n @if (\n firstName.hasError('required') &&\n (firstName.dirty || firstName.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n class=\"text-danger small\"\n >\n first name required\r\n </mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- last name -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">last name</mat-label>\n <input\n matInput\n type=\"text\"\n id=\"lastName\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"lastName\"\n />\n @if (\n lastName.hasError('required') &&\n (lastName.dirty || lastName.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n class=\"text-danger small\"\n >\n last name required\r\n </mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- <div [formGroup]=\"passwords\"> -->\n <!-- password -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">password</mat-label>\n <input\n matInput\n [type]=\"hide ? 'password' : 'text'\"\n name=\"password\"\n autocomplete=\"new-password\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"password\"\n />\n <button\n type=\"button\"\n mat-icon-button\n matSuffix\n (click)=\"hide = !hide\"\n i18n-aria-label=\"auth-jwt-login\"\n aria-label=\"Hide password\"\n [attr.aria-pressed]=\"hide\"\n >\n <mat-icon>{{ hide ? \"visibility_off\" : \"visibility\" }}</mat-icon>\n </button>\n <auth-jwt-password-strength-bar [passwordToCheck]=\"password.value\">\n </auth-jwt-password-strength-bar>\n @if (\n $any(password).errors?.required &&\n (password.dirty || password.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >password required</mat-error\n >\n }\n @if (\n $any(password).errors?.passwordtooshort &&\n (password.dirty || password.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >at least 8 characters</mat-error\n >\n }\n @if (\n $any(password).errors?.noupperinpassword &&\n (password.dirty || password.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >at least 1 uppercase letter</mat-error\n >\n }\n @if (\n $any(password).errors?.nolowerinpassword &&\n (password.dirty || password.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >at least 1 lowercase letter</mat-error\n >\n }\n @if (\n $any(password).errors?.nosymbolinpassword &&\n (password.dirty || password.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >at least 1 punctuation/symbol</mat-error\n >\n }\n </mat-form-field>\n </div>\n\n <!-- confirm password -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">confirm password</mat-label>\n <input\n matInput\n [type]=\"hide ? 'password' : 'text'\"\n name=\"confirmPassword\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"confirmPassword\"\n />\n </mat-form-field>\n </div>\n @if (form.errors?.areequal && confirmPassword.touched) {\n <div\n i18n=\"auth-jwt-admin\"\n style=\"color: red\"\n >\n password differs from confirmation password\r\n </div>\n }\n\n <button\n i18n=\"auth-jwt-admin\"\n mat-raised-button\n type=\"submit\"\n color=\"primary\"\n [disabled]=\"\r\n form.invalid || form.pristine || busy || name.pending || email.pending\r\n \"\r\n >\n register\r\n </button>\r\n @if (busy) {\n <mat-progress-spinner diameter=\"20\"></mat-progress-spinner>\n }\n </fieldset>\n </form>\n\n <details>\n <summary i18n=\"auth-jwt-admin\">Hints</summary>\n <div class=\"info\">\n <p i18n=\"auth-jwt-admin\">\n To register a new user, you must provide his email address, choose a\r\n password, and choose a username, which must be unique (you will be\r\n notified if another user has already taken that name). The username must\r\n include only letters/digits, start with a letter, and be no shorter than\r\n 3 characters, nor longer than 50.\r\n </p>\r\n <p i18n=\"auth-jwt-admin\">\n To promote a decent security level, the password must include at least 8\r\n characters, uppercase and lowercase letters, digits, and punctuation\r\n (like dashes, stops, parentheses, etc.).\r\n </p>\r\n <p i18n=\"auth-jwt-admin\">\n Once registered, if messaging is enabled on the server side the user\r\n will receive an email message to the email address you specified; he\r\n will have to click on the provided link to complete the registration\r\n process. Otherwise, you should edit the newly created user and confirm\r\n the email registration.\r\n </p>\r\n </div>\n </details>\n </div>\n", styles: ["mat-form-field{width:400px}fieldset{border:1px solid silver;border-radius:8px;padding:16px}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}details{margin:8px}.info{column-width:600px}\n"], dependencies: [{ 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.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.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: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i10.PasswordStrengthBarComponent, selector: "auth-jwt-password-strength-bar", inputs: ["passwordToCheck"], outputs: ["strengthChange"] }] }); }
|
|
161
160
|
}
|
|
162
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
161
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: AuthJwtRegistrationComponent, decorators: [{
|
|
163
162
|
type: Component,
|
|
164
|
-
args: [{ selector: 'auth-jwt-registration', template: "<div>\r\n <form role=\"form\" [formGroup]=\"form\" (submit)=\"onSubmit()\">\r\n <fieldset>\r\n <legend i18n=\"auth-jwt-admin\">registration</legend>\r\n <!-- email -->\r\n <div class=\"form-row\">\r\n <mat-form-field>\r\n <mat-label i18n>email</mat-label>\r\n <input\r\n matInput\r\n type=\"email\"\r\n id=\"email\"\r\n maxlength=\"256\"\r\n required\r\n autofocus\r\n spellcheck=\"false\"\r\n [formControl]=\"email\"\r\n />\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(email).errors?.required && (email.dirty || email.touched)\r\n \"\r\n >email required</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"$any(email).errors?.email && (email.dirty || email.touched)\"\r\n >invalid email</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(email).errors?.uniqueEmail && (email.dirty || email.touched)\r\n \"\r\n >email already registered</mat-error\r\n >\r\n </mat-form-field>\r\n <mat-icon *ngIf=\"email.pending\">hourglass</mat-icon>\r\n </div>\r\n\r\n <!-- name -->\r\n <div class=\"form-row\">\r\n <mat-form-field>\r\n <mat-label i18n=\"auth-jwt-admin\">username</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n id=\"name\"\r\n maxlength=\"50\"\r\n required\r\n pattern=\"^[a-zA-Z][a-zA-Z0-9]{2,49}$\"\r\n spellcheck=\"false\"\r\n [formControl]=\"name\"\r\n />\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"$any(name).errors?.required && (name.dirty || name.touched)\"\r\n >username required</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"$any(name).errors?.pattern && (name.dirty || name.touched)\"\r\n >invalid username</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(name).errors?.uniqueName && (name.dirty || name.touched)\r\n \"\r\n >username already registered</mat-error\r\n >\r\n </mat-form-field>\r\n <mat-icon *ngIf=\"name.pending\">hourglass</mat-icon>\r\n </div>\r\n\r\n <!-- first name -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label i18n=\"auth-jwt-admin\">first name</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n id=\"firstName\"\r\n maxlength=\"50\"\r\n required\r\n spellcheck=\"false\"\r\n [formControl]=\"firstName\"\r\n />\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n firstName.hasError('required') &&\r\n (firstName.dirty || firstName.touched)\r\n \"\r\n class=\"text-danger small\"\r\n >\r\n first name required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- last name -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label i18n=\"auth-jwt-admin\">last name</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n id=\"lastName\"\r\n maxlength=\"50\"\r\n required\r\n spellcheck=\"false\"\r\n [formControl]=\"lastName\"\r\n />\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n lastName.hasError('required') &&\r\n (lastName.dirty || lastName.touched)\r\n \"\r\n class=\"text-danger small\"\r\n >\r\n last name required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- <div [formGroup]=\"passwords\"> -->\r\n <!-- password -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label i18n=\"auth-jwt-admin\">password</mat-label>\r\n <input\r\n matInput\r\n [type]=\"hide ? 'password' : 'text'\"\r\n name=\"password\"\r\n autocomplete=\"new-password\"\r\n maxlength=\"50\"\r\n required\r\n spellcheck=\"false\"\r\n [formControl]=\"password\"\r\n />\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matSuffix\r\n (click)=\"hide = !hide\"\r\n i18n-aria-label=\"auth-jwt-login\"\r\n aria-label=\"Hide password\"\r\n [attr.aria-pressed]=\"hide\"\r\n >\r\n <mat-icon>{{ hide ? \"visibility_off\" : \"visibility\" }}</mat-icon>\r\n </button>\r\n <auth-jwt-password-strength-bar [passwordToCheck]=\"password.value\">\r\n </auth-jwt-password-strength-bar>\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(password).errors?.required &&\r\n (password.dirty || password.touched)\r\n \"\r\n >password required</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(password).errors?.passwordtooshort &&\r\n (password.dirty || password.touched)\r\n \"\r\n >at least 8 characters</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(password).errors?.noupperinpassword &&\r\n (password.dirty || password.touched)\r\n \"\r\n >at least 1 uppercase letter</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(password).errors?.nolowerinpassword &&\r\n (password.dirty || password.touched)\r\n \"\r\n >at least 1 lowercase letter</mat-error\r\n >\r\n <mat-error\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"\r\n $any(password).errors?.nosymbolinpassword &&\r\n (password.dirty || password.touched)\r\n \"\r\n >at least 1 punctuation/symbol</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- confirm password -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label i18n=\"auth-jwt-admin\">confirm password</mat-label>\r\n <input\r\n matInput\r\n [type]=\"hide ? 'password' : 'text'\"\r\n name=\"confirmPassword\"\r\n maxlength=\"50\"\r\n required\r\n spellcheck=\"false\"\r\n [formControl]=\"confirmPassword\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n <div\r\n i18n=\"auth-jwt-admin\"\r\n *ngIf=\"form.errors?.areequal && confirmPassword.touched\"\r\n style=\"color: red\"\r\n >\r\n password differs from confirmation password\r\n </div>\r\n\r\n <button\r\n i18n=\"auth-jwt-admin\"\r\n mat-raised-button\r\n type=\"submit\"\r\n color=\"primary\"\r\n [disabled]=\"\r\n form.invalid || form.pristine || busy || name.pending || email.pending\r\n \"\r\n >\r\n register\r\n </button>\r\n <mat-progress-spinner diameter=\"20\" *ngIf=\"busy\"></mat-progress-spinner>\r\n </fieldset>\r\n </form>\r\n\r\n <details>\r\n <summary i18n=\"auth-jwt-admin\">Hints</summary>\r\n <div class=\"info\">\r\n <p i18n=\"auth-jwt-admin\">\r\n To register a new user, you must provide his email address, choose a\r\n password, and choose a username, which must be unique (you will be\r\n notified if another user has already taken that name). The username must\r\n include only letters/digits, start with a letter, and be no shorter than\r\n 3 characters, nor longer than 50.\r\n </p>\r\n <p i18n=\"auth-jwt-admin\">\r\n To promote a decent security level, the password must include at least 8\r\n characters, uppercase and lowercase letters, digits, and punctuation\r\n (like dashes, stops, parentheses, etc.).\r\n </p>\r\n <p i18n=\"auth-jwt-admin\">\r\n Once registered, if messaging is enabled on the server side the user\r\n will receive an email message to the email address you specified; he\r\n will have to click on the provided link to complete the registration\r\n process. Otherwise, you should edit the newly created user and confirm\r\n the email registration.\r\n </p>\r\n </div>\r\n </details>\r\n</div>\r\n", styles: ["mat-form-field{width:400px}fieldset{border:1px solid silver;border-radius:8px;padding:16px}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}details{margin:8px}.info{column-width:600px}\n"] }]
|
|
163
|
+
args: [{ selector: 'auth-jwt-registration', template: "<div>\n <form role=\"form\" [formGroup]=\"form\" (submit)=\"onSubmit()\">\n <fieldset>\n <legend i18n=\"auth-jwt-admin\">registration</legend>\n <!-- email -->\n <div class=\"form-row\">\n <mat-form-field>\n <mat-label i18n>email</mat-label>\n <input\n matInput\n type=\"email\"\n id=\"email\"\n maxlength=\"256\"\n required\n autofocus\n spellcheck=\"false\"\n [formControl]=\"email\"\n />\n @if (\n $any(email).errors?.required && (email.dirty || email.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >email required</mat-error\n >\n }\n @if ($any(email).errors?.email && (email.dirty || email.touched)) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >invalid email</mat-error\n >\n }\n @if (\n $any(email).errors?.uniqueEmail && (email.dirty || email.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >email already registered</mat-error\n >\n }\n </mat-form-field>\n @if (email.pending) {\n <mat-icon>hourglass</mat-icon>\n }\n </div>\n\n <!-- name -->\n <div class=\"form-row\">\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">username</mat-label>\n <input\n matInput\n type=\"text\"\n id=\"name\"\n maxlength=\"50\"\n required\n pattern=\"^[a-zA-Z][a-zA-Z0-9]{2,49}$\"\n spellcheck=\"false\"\n [formControl]=\"name\"\n />\n @if ($any(name).errors?.required && (name.dirty || name.touched)) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >username required</mat-error\n >\n }\n @if ($any(name).errors?.pattern && (name.dirty || name.touched)) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >invalid username</mat-error\n >\n }\n @if (\n $any(name).errors?.uniqueName && (name.dirty || name.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >username already registered</mat-error\n >\n }\n </mat-form-field>\n @if (name.pending) {\n <mat-icon>hourglass</mat-icon>\n }\n </div>\n\n <!-- first name -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">first name</mat-label>\n <input\n matInput\n type=\"text\"\n id=\"firstName\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"firstName\"\n />\n @if (\n firstName.hasError('required') &&\n (firstName.dirty || firstName.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n class=\"text-danger small\"\n >\n first name required\r\n </mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- last name -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">last name</mat-label>\n <input\n matInput\n type=\"text\"\n id=\"lastName\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"lastName\"\n />\n @if (\n lastName.hasError('required') &&\n (lastName.dirty || lastName.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n class=\"text-danger small\"\n >\n last name required\r\n </mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- <div [formGroup]=\"passwords\"> -->\n <!-- password -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">password</mat-label>\n <input\n matInput\n [type]=\"hide ? 'password' : 'text'\"\n name=\"password\"\n autocomplete=\"new-password\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"password\"\n />\n <button\n type=\"button\"\n mat-icon-button\n matSuffix\n (click)=\"hide = !hide\"\n i18n-aria-label=\"auth-jwt-login\"\n aria-label=\"Hide password\"\n [attr.aria-pressed]=\"hide\"\n >\n <mat-icon>{{ hide ? \"visibility_off\" : \"visibility\" }}</mat-icon>\n </button>\n <auth-jwt-password-strength-bar [passwordToCheck]=\"password.value\">\n </auth-jwt-password-strength-bar>\n @if (\n $any(password).errors?.required &&\n (password.dirty || password.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >password required</mat-error\n >\n }\n @if (\n $any(password).errors?.passwordtooshort &&\n (password.dirty || password.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >at least 8 characters</mat-error\n >\n }\n @if (\n $any(password).errors?.noupperinpassword &&\n (password.dirty || password.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >at least 1 uppercase letter</mat-error\n >\n }\n @if (\n $any(password).errors?.nolowerinpassword &&\n (password.dirty || password.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >at least 1 lowercase letter</mat-error\n >\n }\n @if (\n $any(password).errors?.nosymbolinpassword &&\n (password.dirty || password.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >at least 1 punctuation/symbol</mat-error\n >\n }\n </mat-form-field>\n </div>\n\n <!-- confirm password -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">confirm password</mat-label>\n <input\n matInput\n [type]=\"hide ? 'password' : 'text'\"\n name=\"confirmPassword\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"confirmPassword\"\n />\n </mat-form-field>\n </div>\n @if (form.errors?.areequal && confirmPassword.touched) {\n <div\n i18n=\"auth-jwt-admin\"\n style=\"color: red\"\n >\n password differs from confirmation password\r\n </div>\n }\n\n <button\n i18n=\"auth-jwt-admin\"\n mat-raised-button\n type=\"submit\"\n color=\"primary\"\n [disabled]=\"\r\n form.invalid || form.pristine || busy || name.pending || email.pending\r\n \"\r\n >\n register\r\n </button>\r\n @if (busy) {\n <mat-progress-spinner diameter=\"20\"></mat-progress-spinner>\n }\n </fieldset>\n </form>\n\n <details>\n <summary i18n=\"auth-jwt-admin\">Hints</summary>\n <div class=\"info\">\n <p i18n=\"auth-jwt-admin\">\n To register a new user, you must provide his email address, choose a\r\n password, and choose a username, which must be unique (you will be\r\n notified if another user has already taken that name). The username must\r\n include only letters/digits, start with a letter, and be no shorter than\r\n 3 characters, nor longer than 50.\r\n </p>\r\n <p i18n=\"auth-jwt-admin\">\n To promote a decent security level, the password must include at least 8\r\n characters, uppercase and lowercase letters, digits, and punctuation\r\n (like dashes, stops, parentheses, etc.).\r\n </p>\r\n <p i18n=\"auth-jwt-admin\">\n Once registered, if messaging is enabled on the server side the user\r\n will receive an email message to the email address you specified; he\r\n will have to click on the provided link to complete the registration\r\n process. Otherwise, you should edit the newly created user and confirm\r\n the email registration.\r\n </p>\r\n </div>\n </details>\n </div>\n", styles: ["mat-form-field{width:400px}fieldset{border:1px solid silver;border-radius:8px;padding:16px}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}details{margin:8px}.info{column-width:600px}\n"] }]
|
|
165
164
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.MatSnackBar }, { type: i3.AuthJwtAccountService }, { type: i4.UserListRepository }], propDecorators: { registered: [{
|
|
166
165
|
type: Output
|
|
167
166
|
}] } });
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1qd3QtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2F1dGgtand0LWFkbWluL3NyYy9saWIvY29tcG9uZW50cy9hdXRoLWp3dC1yZWdpc3RyYXRpb24vYXV0aC1qd3QtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2F1dGgtand0LWFkbWluL3NyYy9saWIvY29tcG9uZW50cy9hdXRoLWp3dC1yZWdpc3RyYXRpb24vYXV0aC1qd3QtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQ0wsVUFBVSxHQU1YLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBT3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7Ozs7O0FBUTFFLE1BQU0sT0FBTyw0QkFBNEI7SUFxQnZDLFlBQ0UsV0FBd0IsRUFDaEIsU0FBc0IsRUFDdEIsZUFBc0MsRUFDdEMsZUFBbUM7UUFGbkMsY0FBUyxHQUFULFNBQVMsQ0FBYTtRQUN0QixvQkFBZSxHQUFmLGVBQWUsQ0FBdUI7UUFDdEMsb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBTnRDLFNBQUksR0FBRyxJQUFJLENBQUM7UUFRakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzFDLE9BQU87UUFDUCxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ25DLFVBQVUsRUFBRSxDQUFDLFVBQVUs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SSxDQUNMLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QixDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQ1gscUJBQXFCLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUM3RCxDQUFDO2dCQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUNqQixTQUFTLENBQUEsb0NBQW9DLEVBQzdDLElBQUksQ0FDTCxDQUFDO1lBQ0osQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBcE1VLDRCQUE0QjtrR0FBNUIsNEJBQTRCLG9HQzFCekMsODRSQXNRQTs7MkZENU9hLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSx1QkFBdUI7K0tBcUIxQixVQUFVO3NCQURoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgVmFsaWRhdG9ycyxcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgVmFsaWRhdGlvbkVycm9ycyxcclxuICBGb3JtR3JvdXAsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgRm9ybUJ1aWxkZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQXV0aEp3dEFjY291bnRTZXJ2aWNlLFxyXG4gIEV4aXN0UmVzdWx0LFxyXG4gIFJlZ2lzdHJhdGlvbk1vZGVsLFxyXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGgtand0LWFjY291bnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFBhc3N3b3JkVmFsaWRhdG9ycyB9IGZyb20gJy4uLy4uL3ZhbGlkYXRvcnMvcGFzc3dvcmQudmFsaWRhdG9ycyc7XHJcbmltcG9ydCB7IFVzZXJMaXN0UmVwb3NpdG9yeSB9IGZyb20gJy4uL3N0YXRlL3VzZXItbGlzdC5yZXBvc2l0b3J5JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXV0aC1qd3QtcmVnaXN0cmF0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXV0aC1qd3QtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hdXRoLWp3dC1yZWdpc3RyYXRpb24uY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aEp3dFJlZ2lzdHJhdGlvbkNvbXBvbmVudCB7XHJcbiAgcHVibGljIGJ1c3k6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcbiAgLy8gZm9ybVxyXG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgcHVibGljIGVtYWlsOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xyXG4gIHB1YmxpYyBuYW1lOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xyXG4gIHB1YmxpYyBmaXJzdE5hbWU6IEZvcm1Db250cm9sPHN0cmluZz47XHJcbiAgcHVibGljIGxhc3ROYW1lOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xyXG4gIHB1YmxpYyBwYXNzd29yZDogRm9ybUNvbnRyb2w8c3RyaW5nPjtcclxuICBwdWJsaWMgY29uZmlybVBhc3N3b3JkOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW4gYSB1c2VyIHdhcyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZC4gVXN1YWxseVxyXG4gICAqIHlvdSBzaG91bGQgaGFuZGxlIHRoaXMgdG8gbW92ZSBhd2F5IGZyb20gdGhlIHJlZ2lzdHJhdGlvblxyXG4gICAqIHBhZ2UuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHJlZ2lzdGVyZWQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG5cclxuICBwdWJsaWMgaGlkZSA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfc25hY2tiYXI6IE1hdFNuYWNrQmFyLFxyXG4gICAgcHJpdmF0ZSBfYWNjb3VudFNlcnZpY2U6IEF1dGhKd3RBY2NvdW50U2VydmljZSxcclxuICAgIHByaXZhdGUgX3VzZXJSZXBvc2l0b3J5OiBVc2VyTGlzdFJlcG9zaXRvcnlcclxuICApIHtcclxuICAgIHRoaXMucmVnaXN0ZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgLy8gZm9ybVxyXG4gICAgdGhpcy5lbWFpbCA9IGZvcm1CdWlsZGVyLmNvbnRyb2woJycsIHtcclxuICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdLFxyXG4gICAgICBhc3luY1ZhbGlkYXRvcnM6IHRoaXMuZ2V0VW5pcXVlRW1haWxWYWxpZGF0b3IodGhpcy5fYWNjb3VudFNlcnZpY2UpLmJpbmQoXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApLFxyXG4gICAgICBub25OdWxsYWJsZTogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IGZvcm1CdWlsZGVyLmNvbnRyb2woJycsIHtcclxuICAgICAgdmFsaWRhdG9yczogVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgYXN5bmNWYWxpZGF0b3JzOiB0aGlzLmdldFVuaXF1ZU5hbWVWYWxpZGF0b3IodGhpcy5fYWNjb3VudFNlcnZpY2UpLmJpbmQoXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApLFxyXG4gICAgICBub25OdWxsYWJsZTogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZmlyc3ROYW1lID0gZm9ybUJ1aWxkZXIuY29udHJvbCgnJywge1xyXG4gICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTApXSxcclxuICAgICAgbm9uTnVsbGFibGU6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIHRoaXMubGFzdE5hbWUgPSBmb3JtQnVpbGRlci5jb250cm9sKCcnLCB7XHJcbiAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCg1MCldLFxyXG4gICAgICBub25OdWxsYWJsZTogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU0NzQ5OTEvYW5ndWxhci0yLWZvcm0tdmFsaWRhdGluZy1mb3ItcmVwZWF0LXBhc3N3b3JkXHJcbiAgICB0aGlzLnBhc3N3b3JkID0gZm9ybUJ1aWxkZXIuY29udHJvbCgnJywge1xyXG4gICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgUGFzc3dvcmRWYWxpZGF0b3JzLnN0YW5kYXJkKCldLFxyXG4gICAgICBub25OdWxsYWJsZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jb25maXJtUGFzc3dvcmQgPSBmb3JtQnVpbGRlci5jb250cm9sKCcnLCB7XHJcbiAgICAgIHZhbGlkYXRvcnM6IFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mb3JtID0gZm9ybUJ1aWxkZXIuZ3JvdXAoXHJcbiAgICAgIHtcclxuICAgICAgICBlbWFpbDogdGhpcy5lbWFpbCxcclxuICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgZmlyc3ROYW1lOiB0aGlzLmZpcnN0TmFtZSxcclxuICAgICAgICBsYXN0TmFtZTogdGhpcy5sYXN0TmFtZSxcclxuICAgICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZCxcclxuICAgICAgICBjb25maXJtUGFzc3dvcmQ6IHRoaXMuY29uZmlybVBhc3N3b3JkLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdmFsaWRhdG9yczogW1xyXG4gICAgICAgICAgUGFzc3dvcmRWYWxpZGF0b3JzLmFyZUVxdWFsKCdwYXNzd29yZCcsICdjb25maXJtUGFzc3dvcmQnKSxcclxuICAgICAgICBdLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIHVuaXF1ZSBuYW1lIHZhbGlkYXRvci4gVGhlcmUgaXMgbm8gZGVwZW5kZW5jeSBpbmplY3Rpb24gYXQgdGhpcyBsZXZlbCxcclxuICAgKiBidXQgd2UgY2FuIHVzZSBjbG9zdXJlcy4gQXMgYSBtYXR0ZXIgb2YgZmFjdCwgd2UgaGF2ZSBhY2Nlc3MgdG8gdGhlIHNlcnZpY2UgaW5zdGFuY2VcclxuICAgKiBmcm9tIHRoZSBjb21wb25lbnQgd2hlcmUgd2UgcmVnaXN0ZXIgdmFsaWRhdG9ycy4gU28gd2Ugd2lsbCBpbXBsZW1lbnQgYSBmdW5jdGlvblxyXG4gICAqIHRoYXQgd2lsbCBhY2NlcHQgdGhlIHNlcnZpY2UgYXMgcGFyYW1ldGVyLCBhbmQgY3JlYXRlIHRoZSBhY3R1YWwgdmFsaWRhdGlvbiBmdW5jdGlvbi5cclxuICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaGF2ZSBhY2Nlc3MgdG8gdGhlIHNlcnZpY2Ugd2hlbiBjYWxsZWQgZHVyaW5nIHRoZSB2YWxpZGF0aW9uIHByb2Nlc3MuXHJcbiAgICogU2VlIGh0dHA6Ly9yZXN0bGV0LmNvbS9ibG9nLzIwMTYvMDIvMTcvaW1wbGVtZW50aW5nLWFuZ3VsYXIyLWZvcm1zLWJleW9uZC1iYXNpY3MtcGFydC0yLy5cclxuICAgKi9cclxuICBwcml2YXRlIGdldFVuaXF1ZU5hbWVWYWxpZGF0b3Ioc2VydmljZTogQXV0aEp3dEFjY291bnRTZXJ2aWNlKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2xcclxuICAgICk6XHJcbiAgICAgIHwgUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD5cclxuICAgICAgfCBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPiA9PiB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgLy8gYXZvaWQgY2hlY2tpbmcgaWYgZW1wdHlcclxuICAgICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICAgIHJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNlcnZpY2UuaXNOYW1lUmVnaXN0ZXJlZChjb250cm9sLnZhbHVlKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZGF0YTogRXhpc3RSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWRhdGEuaXNFeGlzdGluZykge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHVuaXF1ZU5hbWU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICdVbmlxdWUgbmFtZSB2YWxpZGF0b3IgZXJyb3InICtcclxuICAgICAgICAgICAgICAgICAgKGVycm9yID8gSlNPTi5zdHJpbmdpZnkoZXJyb3IpIDogJycpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICByZXNvbHZlKHsgdW5pcXVlTmFtZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRVbmlxdWVFbWFpbFZhbGlkYXRvcihzZXJ2aWNlOiBBdXRoSnd0QWNjb3VudFNlcnZpY2UpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbFxyXG4gICAgKTpcclxuICAgICAgfCBQcm9taXNlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPlxyXG4gICAgICB8IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+ID0+IHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAvLyBhdm9pZCBjaGVja2luZyBpZiBlbXB0eVxyXG4gICAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2VydmljZS5pc0VtYWlsUmVnaXN0ZXJlZChjb250cm9sLnZhbHVlKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZGF0YTogRXhpc3RSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWRhdGEuaXNFeGlzdGluZykge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHVuaXF1ZUVtYWlsOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAnVW5pcXVlIGVtYWlsIHZhbGlkYXRvciBlcnJvcicgK1xyXG4gICAgICAgICAgICAgICAgICAoZXJyb3IgPyBKU09OLnN0cmluZ2lmeShlcnJvcikgOiAnJylcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHJlc29sdmUoeyB1bmlxdWVFbWFpbDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uU3VibWl0KCk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5mb3JtLnZhbGlkIHx8XHJcbiAgICAgIHRoaXMuYnVzeSB8fFxyXG4gICAgICB0aGlzLm5hbWUucGVuZGluZyB8fFxyXG4gICAgICB0aGlzLmVtYWlsLnBlbmRpbmdcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbW9kZWw6IFJlZ2lzdHJhdGlvbk1vZGVsID0ge1xyXG4gICAgICBlbWFpbDogdGhpcy5lbWFpbC52YWx1ZSxcclxuICAgICAgbmFtZTogdGhpcy5uYW1lLnZhbHVlLFxyXG4gICAgICBmaXJzdE5hbWU6IHRoaXMuZmlyc3ROYW1lLnZhbHVlLFxyXG4gICAgICBsYXN0TmFtZTogdGhpcy5sYXN0TmFtZS52YWx1ZSxcclxuICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQudmFsdWUsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICB0aGlzLl9hY2NvdW50U2VydmljZVxyXG4gICAgICAucmVnaXN0ZXIobW9kZWwpXHJcbiAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fc25hY2tiYXIub3BlbihcclxuICAgICAgICAgICAgJGxvY2FsaXplYDphdXRoLWp3dC1hZG1pbjpSZWdpc3RyYXRpb24gc3VjY2VlZGVkYCxcclxuICAgICAgICAgICAgJ09LJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuX3VzZXJSZXBvc2l0b3J5LnJlc2V0KCk7XHJcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyZWQuZW1pdCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAnUmVnaXN0cmF0aW9uICBlcnJvcicgKyAoZXJyb3IgPyBKU09OLnN0cmluZ2lmeShlcnJvcikgOiAnJylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuKFxyXG4gICAgICAgICAgICAkbG9jYWxpemVgOmF1dGgtand0LWFkbWluOlJlZ2lzdHJhdGlvbiBlcnJvcmAsXHJcbiAgICAgICAgICAgICdPSydcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXY+XHJcbiAgPGZvcm0gcm9sZT1cImZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cIm9uU3VibWl0KClcIj5cclxuICAgIDxmaWVsZHNldD5cclxuICAgICAgPGxlZ2VuZCBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIj5yZWdpc3RyYXRpb248L2xlZ2VuZD5cclxuICAgICAgPCEtLSBlbWFpbCAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbCBpMThuPmVtYWlsPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgdHlwZT1cImVtYWlsXCJcclxuICAgICAgICAgICAgaWQ9XCJlbWFpbFwiXHJcbiAgICAgICAgICAgIG1heGxlbmd0aD1cIjI1NlwiXHJcbiAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgIGF1dG9mb2N1c1xyXG4gICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZW1haWxcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgaTE4bj1cImF1dGgtand0LWFkbWluXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAkYW55KGVtYWlsKS5lcnJvcnM/LnJlcXVpcmVkICYmIChlbWFpbC5kaXJ0eSB8fCBlbWFpbC50b3VjaGVkKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+ZW1haWwgcmVxdWlyZWQ8L21hdC1lcnJvclxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiRhbnkoZW1haWwpLmVycm9ycz8uZW1haWwgJiYgKGVtYWlsLmRpcnR5IHx8IGVtYWlsLnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgPmludmFsaWQgZW1haWw8L21hdC1lcnJvclxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIlxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICRhbnkoZW1haWwpLmVycm9ycz8udW5pcXVlRW1haWwgJiYgKGVtYWlsLmRpcnR5IHx8IGVtYWlsLnRvdWNoZWQpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5lbWFpbCBhbHJlYWR5IHJlZ2lzdGVyZWQ8L21hdC1lcnJvclxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiZW1haWwucGVuZGluZ1wiPmhvdXJnbGFzczwvbWF0LWljb24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBuYW1lIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsIGkxOG49XCJhdXRoLWp3dC1hZG1pblwiPnVzZXJuYW1lPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICBpZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICBtYXhsZW5ndGg9XCI1MFwiXHJcbiAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgIHBhdHRlcm49XCJeW2EtekEtWl1bYS16QS1aMC05XXsyLDQ5fSRcIlxyXG4gICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwibmFtZVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiRhbnkobmFtZSkuZXJyb3JzPy5yZXF1aXJlZCAmJiAobmFtZS5kaXJ0eSB8fCBuYW1lLnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgPnVzZXJuYW1lIHJlcXVpcmVkPC9tYXQtZXJyb3JcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgaTE4bj1cImF1dGgtand0LWFkbWluXCJcclxuICAgICAgICAgICAgKm5nSWY9XCIkYW55KG5hbWUpLmVycm9ycz8ucGF0dGVybiAmJiAobmFtZS5kaXJ0eSB8fCBuYW1lLnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgPmludmFsaWQgdXNlcm5hbWU8L21hdC1lcnJvclxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIlxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICRhbnkobmFtZSkuZXJyb3JzPy51bmlxdWVOYW1lICYmIChuYW1lLmRpcnR5IHx8IG5hbWUudG91Y2hlZClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPnVzZXJuYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDwvbWF0LWVycm9yXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJuYW1lLnBlbmRpbmdcIj5ob3VyZ2xhc3M8L21hdC1pY29uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gZmlyc3QgbmFtZSAtLT5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsIGkxOG49XCJhdXRoLWp3dC1hZG1pblwiPmZpcnN0IG5hbWU8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIGlkPVwiZmlyc3ROYW1lXCJcclxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNTBcIlxyXG4gICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZmlyc3ROYW1lXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgIGkxOG49XCJhdXRoLWp3dC1hZG1pblwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgZmlyc3ROYW1lLmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmXHJcbiAgICAgICAgICAgICAgKGZpcnN0TmFtZS5kaXJ0eSB8fCBmaXJzdE5hbWUudG91Y2hlZClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlciBzbWFsbFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIGZpcnN0IG5hbWUgcmVxdWlyZWRcclxuICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBsYXN0IG5hbWUgLS0+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbCBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIj5sYXN0IG5hbWU8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIGlkPVwibGFzdE5hbWVcIlxyXG4gICAgICAgICAgICBtYXhsZW5ndGg9XCI1MFwiXHJcbiAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJsYXN0TmFtZVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIlxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIGxhc3ROYW1lLmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmXHJcbiAgICAgICAgICAgICAgKGxhc3ROYW1lLmRpcnR5IHx8IGxhc3ROYW1lLnRvdWNoZWQpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYW5nZXIgc21hbGxcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBsYXN0IG5hbWUgcmVxdWlyZWRcclxuICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSA8ZGl2IFtmb3JtR3JvdXBdPVwicGFzc3dvcmRzXCI+IC0tPlxyXG4gICAgICA8IS0tIHBhc3N3b3JkIC0tPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtbGFiZWwgaTE4bj1cImF1dGgtand0LWFkbWluXCI+cGFzc3dvcmQ8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICBbdHlwZV09XCJoaWRlID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J1wiXHJcbiAgICAgICAgICAgIG5hbWU9XCJwYXNzd29yZFwiXHJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXHJcbiAgICAgICAgICAgIG1heGxlbmd0aD1cIjUwXCJcclxuICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICAgIChjbGljayk9XCJoaWRlID0gIWhpZGVcIlxyXG4gICAgICAgICAgICBpMThuLWFyaWEtbGFiZWw9XCJhdXRoLWp3dC1sb2dpblwiXHJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJIaWRlIHBhc3N3b3JkXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cImhpZGVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+e3sgaGlkZSA/IFwidmlzaWJpbGl0eV9vZmZcIiA6IFwidmlzaWJpbGl0eVwiIH19PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGF1dGgtand0LXBhc3N3b3JkLXN0cmVuZ3RoLWJhciBbcGFzc3dvcmRUb0NoZWNrXT1cInBhc3N3b3JkLnZhbHVlXCI+XHJcbiAgICAgICAgICA8L2F1dGgtand0LXBhc3N3b3JkLXN0cmVuZ3RoLWJhcj5cclxuICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgaTE4bj1cImF1dGgtand0LWFkbWluXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAkYW55KHBhc3N3b3JkKS5lcnJvcnM/LnJlcXVpcmVkICYmXHJcbiAgICAgICAgICAgICAgKHBhc3N3b3JkLmRpcnR5IHx8IHBhc3N3b3JkLnRvdWNoZWQpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5wYXNzd29yZCByZXF1aXJlZDwvbWF0LWVycm9yXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgIGkxOG49XCJhdXRoLWp3dC1hZG1pblwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgJGFueShwYXNzd29yZCkuZXJyb3JzPy5wYXNzd29yZHRvb3Nob3J0ICYmXHJcbiAgICAgICAgICAgICAgKHBhc3N3b3JkLmRpcnR5IHx8IHBhc3N3b3JkLnRvdWNoZWQpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5hdCBsZWFzdCA4IGNoYXJhY3RlcnM8L21hdC1lcnJvclxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIlxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICRhbnkocGFzc3dvcmQpLmVycm9ycz8ubm91cHBlcmlucGFzc3dvcmQgJiZcclxuICAgICAgICAgICAgICAocGFzc3dvcmQuZGlydHkgfHwgcGFzc3dvcmQudG91Y2hlZClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPmF0IGxlYXN0IDEgdXBwZXJjYXNlIGxldHRlcjwvbWF0LWVycm9yXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgIGkxOG49XCJhdXRoLWp3dC1hZG1pblwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgJGFueShwYXNzd29yZCkuZXJyb3JzPy5ub2xvd2VyaW5wYXNzd29yZCAmJlxyXG4gICAgICAgICAgICAgIChwYXNzd29yZC5kaXJ0eSB8fCBwYXNzd29yZC50b3VjaGVkKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+YXQgbGVhc3QgMSBsb3dlcmNhc2UgbGV0dGVyPC9tYXQtZXJyb3JcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgaTE4bj1cImF1dGgtand0LWFkbWluXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAkYW55KHBhc3N3b3JkKS5lcnJvcnM/Lm5vc3ltYm9saW5wYXNzd29yZCAmJlxyXG4gICAgICAgICAgICAgIChwYXNzd29yZC5kaXJ0eSB8fCBwYXNzd29yZC50b3VjaGVkKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+YXQgbGVhc3QgMSBwdW5jdHVhdGlvbi9zeW1ib2w8L21hdC1lcnJvclxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBjb25maXJtIHBhc3N3b3JkIC0tPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtbGFiZWwgaTE4bj1cImF1dGgtand0LWFkbWluXCI+Y29uZmlybSBwYXNzd29yZDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgIFt0eXBlXT1cImhpZGUgPyAncGFzc3dvcmQnIDogJ3RleHQnXCJcclxuICAgICAgICAgICAgbmFtZT1cImNvbmZpcm1QYXNzd29yZFwiXHJcbiAgICAgICAgICAgIG1heGxlbmd0aD1cIjUwXCJcclxuICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbmZpcm1QYXNzd29yZFwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgaTE4bj1cImF1dGgtand0LWFkbWluXCJcclxuICAgICAgICAqbmdJZj1cImZvcm0uZXJyb3JzPy5hcmVlcXVhbCAmJiBjb25maXJtUGFzc3dvcmQudG91Y2hlZFwiXHJcbiAgICAgICAgc3R5bGU9XCJjb2xvcjogcmVkXCJcclxuICAgICAgPlxyXG4gICAgICAgIHBhc3N3b3JkIGRpZmZlcnMgZnJvbSBjb25maXJtYXRpb24gcGFzc3dvcmRcclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgaTE4bj1cImF1dGgtand0LWFkbWluXCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICAgZm9ybS5pbnZhbGlkIHx8IGZvcm0ucHJpc3RpbmUgfHwgYnVzeSB8fCBuYW1lLnBlbmRpbmcgfHwgZW1haWwucGVuZGluZ1xyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICByZWdpc3RlclxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyIGRpYW1ldGVyPVwiMjBcIiAqbmdJZj1cImJ1c3lcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxyXG4gICAgPC9maWVsZHNldD5cclxuICA8L2Zvcm0+XHJcblxyXG4gIDxkZXRhaWxzPlxyXG4gICAgPHN1bW1hcnkgaTE4bj1cImF1dGgtand0LWFkbWluXCI+SGludHM8L3N1bW1hcnk+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5mb1wiPlxyXG4gICAgICA8cCBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIj5cclxuICAgICAgICBUbyByZWdpc3RlciBhIG5ldyB1c2VyLCB5b3UgbXVzdCBwcm92aWRlIGhpcyBlbWFpbCBhZGRyZXNzLCBjaG9vc2UgYVxyXG4gICAgICAgIHBhc3N3b3JkLCBhbmQgY2hvb3NlIGEgdXNlcm5hbWUsIHdoaWNoIG11c3QgYmUgdW5pcXVlICh5b3Ugd2lsbCBiZVxyXG4gICAgICAgIG5vdGlmaWVkIGlmIGFub3RoZXIgdXNlciBoYXMgYWxyZWFkeSB0YWtlbiB0aGF0IG5hbWUpLiBUaGUgdXNlcm5hbWUgbXVzdFxyXG4gICAgICAgIGluY2x1ZGUgb25seSBsZXR0ZXJzL2RpZ2l0cywgc3RhcnQgd2l0aCBhIGxldHRlciwgYW5kIGJlIG5vIHNob3J0ZXIgdGhhblxyXG4gICAgICAgIDMgY2hhcmFjdGVycywgbm9yIGxvbmdlciB0aGFuIDUwLlxyXG4gICAgICA8L3A+XHJcbiAgICAgIDxwIGkxOG49XCJhdXRoLWp3dC1hZG1pblwiPlxyXG4gICAgICAgIFRvIHByb21vdGUgYSBkZWNlbnQgc2VjdXJpdHkgbGV2ZWwsIHRoZSBwYXNzd29yZCBtdXN0IGluY2x1ZGUgYXQgbGVhc3QgOFxyXG4gICAgICAgIGNoYXJhY3RlcnMsIHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlIGxldHRlcnMsIGRpZ2l0cywgYW5kIHB1bmN0dWF0aW9uXHJcbiAgICAgICAgKGxpa2UgZGFzaGVzLCBzdG9wcywgcGFyZW50aGVzZXMsIGV0Yy4pLlxyXG4gICAgICA8L3A+XHJcbiAgICAgIDxwIGkxOG49XCJhdXRoLWp3dC1hZG1pblwiPlxyXG4gICAgICAgIE9uY2UgcmVnaXN0ZXJlZCwgaWYgbWVzc2FnaW5nIGlzIGVuYWJsZWQgb24gdGhlIHNlcnZlciBzaWRlIHRoZSB1c2VyXHJcbiAgICAgICAgd2lsbCByZWNlaXZlIGFuIGVtYWlsIG1lc3NhZ2UgdG8gdGhlIGVtYWlsIGFkZHJlc3MgeW91IHNwZWNpZmllZDsgaGVcclxuICAgICAgICB3aWxsIGhhdmUgdG8gY2xpY2sgb24gdGhlIHByb3ZpZGVkIGxpbmsgdG8gY29tcGxldGUgdGhlIHJlZ2lzdHJhdGlvblxyXG4gICAgICAgIHByb2Nlc3MuIE90aGVyd2lzZSwgeW91IHNob3VsZCBlZGl0IHRoZSBuZXdseSBjcmVhdGVkIHVzZXIgYW5kIGNvbmZpcm1cclxuICAgICAgICB0aGUgZW1haWwgcmVnaXN0cmF0aW9uLlxyXG4gICAgICA8L3A+XHJcbiAgICA8L2Rpdj5cclxuICA8L2RldGFpbHM+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1qd3QtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2F1dGgtand0LWFkbWluL3NyYy9saWIvY29tcG9uZW50cy9hdXRoLWp3dC1yZWdpc3RyYXRpb24vYXV0aC1qd3QtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2F1dGgtand0LWFkbWluL3NyYy9saWIvY29tcG9uZW50cy9hdXRoLWp3dC1yZWdpc3RyYXRpb24vYXV0aC1qd3QtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQ0wsVUFBVSxHQU1YLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBT3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7Ozs7QUFRMUUsTUFBTSxPQUFPLDRCQUE0QjtJQXFCdkMsWUFDRSxXQUF3QixFQUNoQixTQUFzQixFQUN0QixlQUFzQyxFQUN0QyxlQUFtQztRQUZuQyxjQUFTLEdBQVQsU0FBUyxDQUFhO1FBQ3RCLG9CQUFlLEdBQWYsZUFBZSxDQUF1QjtRQUN0QyxvQkFBZSxHQUFmLGVBQWUsQ0FBb0I7UUFOdEMsU0FBSSxHQUFHLElBQUksQ0FBQztRQVFqQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDMUMsT0FBTztRQUNQLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDbkMsVUFBVSxFQUFFLENBQUMsVUFBVSxD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LENBQ0wsQ0FBQztnQkFDRixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pCLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztnQkFDbEIsT0FBTyxDQUFDLEtBQUssQ0FDWCxxQkFBcUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQzdELENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ2pCLFNBQVMsQ0FBQSxvQ0FBb0MsRUFDN0MsSUFBSSxDQUNMLENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0FwTVUsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsb0dDMUJ6QywweVlBMFJBOzsyRkRoUWEsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLHVCQUF1QjsrS0FxQjFCLFVBQVU7c0JBRGhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBWYWxpZGF0b3JzLFxyXG4gIEFic3RyYWN0Q29udHJvbCxcclxuICBWYWxpZGF0aW9uRXJyb3JzLFxyXG4gIEZvcm1Hcm91cCxcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtQnVpbGRlcixcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBBdXRoSnd0QWNjb3VudFNlcnZpY2UsXHJcbiAgRXhpc3RSZXN1bHQsXHJcbiAgUmVnaXN0cmF0aW9uTW9kZWwsXHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC1qd3QtYWNjb3VudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFzc3dvcmRWYWxpZGF0b3JzIH0gZnJvbSAnLi4vLi4vdmFsaWRhdG9ycy9wYXNzd29yZC52YWxpZGF0b3JzJztcclxuaW1wb3J0IHsgVXNlckxpc3RSZXBvc2l0b3J5IH0gZnJvbSAnLi4vc3RhdGUvdXNlci1saXN0LnJlcG9zaXRvcnknO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdXRoLWp3dC1yZWdpc3RyYXRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRoLWp3dC1yZWdpc3RyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2F1dGgtand0LXJlZ2lzdHJhdGlvbi5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoSnd0UmVnaXN0cmF0aW9uQ29tcG9uZW50IHtcclxuICBwdWJsaWMgYnVzeTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuICAvLyBmb3JtXHJcbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcclxuICBwdWJsaWMgZW1haWw6IEZvcm1Db250cm9sPHN0cmluZz47XHJcbiAgcHVibGljIG5hbWU6IEZvcm1Db250cm9sPHN0cmluZz47XHJcbiAgcHVibGljIGZpcnN0TmFtZTogRm9ybUNvbnRyb2w8c3RyaW5nPjtcclxuICBwdWJsaWMgbGFzdE5hbWU6IEZvcm1Db250cm9sPHN0cmluZz47XHJcbiAgcHVibGljIHBhc3N3b3JkOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xyXG4gIHB1YmxpYyBjb25maXJtUGFzc3dvcmQ6IEZvcm1Db250cm9sPHN0cmluZz47XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXR0ZWQgd2hlbiBhIHVzZXIgd2FzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLiBVc3VhbGx5XHJcbiAgICogeW91IHNob3VsZCBoYW5kbGUgdGhpcyB0byBtb3ZlIGF3YXkgZnJvbSB0aGUgcmVnaXN0cmF0aW9uXHJcbiAgICogcGFnZS5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgcmVnaXN0ZXJlZDogRXZlbnRFbWl0dGVyPGFueT47XHJcblxyXG4gIHB1YmxpYyBoaWRlID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9zbmFja2JhcjogTWF0U25hY2tCYXIsXHJcbiAgICBwcml2YXRlIF9hY2NvdW50U2VydmljZTogQXV0aEp3dEFjY291bnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdXNlclJlcG9zaXRvcnk6IFVzZXJMaXN0UmVwb3NpdG9yeVxyXG4gICkge1xyXG4gICAgdGhpcy5yZWdpc3RlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICAvLyBmb3JtXHJcbiAgICB0aGlzLmVtYWlsID0gZm9ybUJ1aWxkZXIuY29udHJvbCgnJywge1xyXG4gICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0sXHJcbiAgICAgIGFzeW5jVmFsaWRhdG9yczogdGhpcy5nZXRVbmlxdWVFbWFpbFZhbGlkYXRvcih0aGlzLl9hY2NvdW50U2VydmljZSkuYmluZChcclxuICAgICAgICB0aGlzXHJcbiAgICAgICksXHJcbiAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gZm9ybUJ1aWxkZXIuY29udHJvbCgnJywge1xyXG4gICAgICB2YWxpZGF0b3JzOiBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICBhc3luY1ZhbGlkYXRvcnM6IHRoaXMuZ2V0VW5pcXVlTmFtZVZhbGlkYXRvcih0aGlzLl9hY2NvdW50U2VydmljZSkuYmluZChcclxuICAgICAgICB0aGlzXHJcbiAgICAgICksXHJcbiAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5maXJzdE5hbWUgPSBmb3JtQnVpbGRlci5jb250cm9sKCcnLCB7XHJcbiAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCg1MCldLFxyXG4gICAgICBub25OdWxsYWJsZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5sYXN0TmFtZSA9IGZvcm1CdWlsZGVyLmNvbnRyb2woJycsIHtcclxuICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKV0sXHJcbiAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTQ3NDk5MS9hbmd1bGFyLTItZm9ybS12YWxpZGF0aW5nLWZvci1yZXBlYXQtcGFzc3dvcmRcclxuICAgIHRoaXMucGFzc3dvcmQgPSBmb3JtQnVpbGRlci5jb250cm9sKCcnLCB7XHJcbiAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBQYXNzd29yZFZhbGlkYXRvcnMuc3RhbmRhcmQoKV0sXHJcbiAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNvbmZpcm1QYXNzd29yZCA9IGZvcm1CdWlsZGVyLmNvbnRyb2woJycsIHtcclxuICAgICAgdmFsaWRhdG9yczogVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgbm9uTnVsbGFibGU6IHRydWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZvcm0gPSBmb3JtQnVpbGRlci5ncm91cChcclxuICAgICAge1xyXG4gICAgICAgIGVtYWlsOiB0aGlzLmVtYWlsLFxyXG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICBmaXJzdE5hbWU6IHRoaXMuZmlyc3ROYW1lLFxyXG4gICAgICAgIGxhc3ROYW1lOiB0aGlzLmxhc3ROYW1lLFxyXG4gICAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLFxyXG4gICAgICAgIGNvbmZpcm1QYXNzd29yZDogdGhpcy5jb25maXJtUGFzc3dvcmQsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB2YWxpZGF0b3JzOiBbXHJcbiAgICAgICAgICBQYXNzd29yZFZhbGlkYXRvcnMuYXJlRXF1YWwoJ3Bhc3N3b3JkJywgJ2NvbmZpcm1QYXNzd29yZCcpLFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgdW5pcXVlIG5hbWUgdmFsaWRhdG9yLiBUaGVyZSBpcyBubyBkZXBlbmRlbmN5IGluamVjdGlvbiBhdCB0aGlzIGxldmVsLFxyXG4gICAqIGJ1dCB3ZSBjYW4gdXNlIGNsb3N1cmVzLiBBcyBhIG1hdHRlciBvZiBmYWN0LCB3ZSBoYXZlIGFjY2VzcyB0byB0aGUgc2VydmljZSBpbnN0YW5jZVxyXG4gICAqIGZyb20gdGhlIGNvbXBvbmVudCB3aGVyZSB3ZSByZWdpc3RlciB2YWxpZGF0b3JzLiBTbyB3ZSB3aWxsIGltcGxlbWVudCBhIGZ1bmN0aW9uXHJcbiAgICogdGhhdCB3aWxsIGFjY2VwdCB0aGUgc2VydmljZSBhcyBwYXJhbWV0ZXIsIGFuZCBjcmVhdGUgdGhlIGFjdHVhbCB2YWxpZGF0aW9uIGZ1bmN0aW9uLlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBoYXZlIGFjY2VzcyB0byB0aGUgc2VydmljZSB3aGVuIGNhbGxlZCBkdXJpbmcgdGhlIHZhbGlkYXRpb24gcHJvY2Vzcy5cclxuICAgKiBTZWUgaHR0cDovL3Jlc3RsZXQuY29tL2Jsb2cvMjAxNi8wMi8xNy9pbXBsZW1lbnRpbmctYW5ndWxhcjItZm9ybXMtYmV5b25kLWJhc2ljcy1wYXJ0LTIvLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0VW5pcXVlTmFtZVZhbGlkYXRvcihzZXJ2aWNlOiBBdXRoSnd0QWNjb3VudFNlcnZpY2UpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbFxyXG4gICAgKTpcclxuICAgICAgfCBQcm9taXNlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPlxyXG4gICAgICB8IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+ID0+IHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAvLyBhdm9pZCBjaGVja2luZyBpZiBlbXB0eVxyXG4gICAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2VydmljZS5pc05hbWVSZWdpc3RlcmVkKGNvbnRyb2wudmFsdWUpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChkYXRhOiBFeGlzdFJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghZGF0YS5pc0V4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgdW5pcXVlTmFtZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgJ1VuaXF1ZSBuYW1lIHZhbGlkYXRvciBlcnJvcicgK1xyXG4gICAgICAgICAgICAgICAgICAoZXJyb3IgPyBKU09OLnN0cmluZ2lmeShlcnJvcikgOiAnJylcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHJlc29sdmUoeyB1bmlxdWVOYW1lOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFVuaXF1ZUVtYWlsVmFsaWRhdG9yKHNlcnZpY2U6IEF1dGhKd3RBY2NvdW50U2VydmljZSkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sXHJcbiAgICApOlxyXG4gICAgICB8IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+XHJcbiAgICAgIHwgT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gPT4ge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIC8vIGF2b2lkIGNoZWNraW5nIGlmIGVtcHR5XHJcbiAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgICByZXNvbHZlKG51bGwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzZXJ2aWNlLmlzRW1haWxSZWdpc3RlcmVkKGNvbnRyb2wudmFsdWUpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChkYXRhOiBFeGlzdFJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghZGF0YS5pc0V4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgdW5pcXVlRW1haWw6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICdVbmlxdWUgZW1haWwgdmFsaWRhdG9yIGVycm9yJyArXHJcbiAgICAgICAgICAgICAgICAgIChlcnJvciA/IEpTT04uc3RyaW5naWZ5KGVycm9yKSA6ICcnKVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7IHVuaXF1ZUVtYWlsOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25TdWJtaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmZvcm0udmFsaWQgfHxcclxuICAgICAgdGhpcy5idXN5IHx8XHJcbiAgICAgIHRoaXMubmFtZS5wZW5kaW5nIHx8XHJcbiAgICAgIHRoaXMuZW1haWwucGVuZGluZ1xyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtb2RlbDogUmVnaXN0cmF0aW9uTW9kZWwgPSB7XHJcbiAgICAgIGVtYWlsOiB0aGlzLmVtYWlsLnZhbHVlLFxyXG4gICAgICBuYW1lOiB0aGlzLm5hbWUudmFsdWUsXHJcbiAgICAgIGZpcnN0TmFtZTogdGhpcy5maXJzdE5hbWUudmFsdWUsXHJcbiAgICAgIGxhc3ROYW1lOiB0aGlzLmxhc3ROYW1lLnZhbHVlLFxyXG4gICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZC52YWx1ZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgIHRoaXMuX2FjY291bnRTZXJ2aWNlXHJcbiAgICAgIC5yZWdpc3Rlcihtb2RlbClcclxuICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuKFxyXG4gICAgICAgICAgICAkbG9jYWxpemVgOmF1dGgtand0LWFkbWluOlJlZ2lzdHJhdGlvbiBzdWNjZWVkZWRgLFxyXG4gICAgICAgICAgICAnT0snXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5fdXNlclJlcG9zaXRvcnkucmVzZXQoKTtcclxuICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZC5lbWl0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICdSZWdpc3RyYXRpb24gIGVycm9yJyArIChlcnJvciA/IEpTT04uc3RyaW5naWZ5KGVycm9yKSA6ICcnKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW4oXHJcbiAgICAgICAgICAgICRsb2NhbGl6ZWA6YXV0aC1qd3QtYWRtaW46UmVnaXN0cmF0aW9uIGVycm9yYCxcclxuICAgICAgICAgICAgJ09LJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdj5cbiAgPGZvcm0gcm9sZT1cImZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cIm9uU3VibWl0KClcIj5cbiAgICA8ZmllbGRzZXQ+XG4gICAgICA8bGVnZW5kIGkxOG49XCJhdXRoLWp3dC1hZG1pblwiPnJlZ2lzdHJhdGlvbjwvbGVnZW5kPlxuICAgICAgPCEtLSBlbWFpbCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbCBpMThuPmVtYWlsPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICAgIGlkPVwiZW1haWxcIlxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMjU2XCJcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZW1haWxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICRhbnkoZW1haWwpLmVycm9ycz8ucmVxdWlyZWQgJiYgKGVtYWlsLmRpcnR5IHx8IGVtYWlsLnRvdWNoZWQpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgaTE4bj1cImF1dGgtand0LWFkbWluXCJcbiAgICAgICAgICAgICAgICA+ZW1haWwgcmVxdWlyZWQ8L21hdC1lcnJvclxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoJGFueShlbWFpbCkuZXJyb3JzPy5lbWFpbCAmJiAoZW1haWwuZGlydHkgfHwgZW1haWwudG91Y2hlZCkpIHtcbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgIGkxOG49XCJhdXRoLWp3dC1hZG1pblwiXG4gICAgICAgICAgICAgICAgPmludmFsaWQgZW1haWw8L21hdC1lcnJvclxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICRhbnkoZW1haWwpLmVycm9ycz8udW5pcXVlRW1haWwgJiYgKGVtYWlsLmRpcnR5IHx8IGVtYWlsLnRvdWNoZWQpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgaTE4bj1cImF1dGgtand0LWFkbWluXCJcbiAgICAgICAgICAgICAgICAgID5lbWFpbCBhbHJlYWR5IHJlZ2lzdGVyZWQ8L21hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgQGlmIChlbWFpbC5wZW5kaW5nKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmhvdXJnbGFzczwvbWF0LWljb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIG5hbWUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgaTE4bj1cImF1dGgtand0LWFkbWluXCI+dXNlcm5hbWU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBpZD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNTBcIlxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJeW2EtekEtWl1bYS16QS1aMC05XXsyLDQ5fSRcIlxuICAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICBAaWYgKCRhbnkobmFtZSkuZXJyb3JzPy5yZXF1aXJlZCAmJiAobmFtZS5kaXJ0eSB8fCBuYW1lLnRvdWNoZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIlxuICAgICAgICAgICAgICAgICAgICAgID51c2VybmFtZSByZXF1aXJlZDwvbWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGlmICgkYW55KG5hbWUpLmVycm9ycz8ucGF0dGVybiAmJiAobmFtZS5kaXJ0eSB8fCBuYW1lLnRvdWNoZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIlxuICAgICAgICAgICAgICAgICAgICAgID5pbnZhbGlkIHVzZXJuYW1lPC9tYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAkYW55KG5hbWUpLmVycm9ycz8udW5pcXVlTmFtZSAmJiAobmFtZS5kaXJ0eSB8fCBuYW1lLnRvdWNoZWQpXG4gICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgaTE4bj1cImF1dGgtand0LWFkbWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID51c2VybmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ8L21hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChuYW1lLnBlbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+aG91cmdsYXNzPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gZmlyc3QgbmFtZSAtLT5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGkxOG49XCJhdXRoLWp3dC1hZG1pblwiPmZpcnN0IG5hbWU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImZpcnN0TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI1MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmaXJzdE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0TmFtZS5oYXNFcnJvcigncmVxdWlyZWQnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlyc3ROYW1lLmRpcnR5IHx8IGZpcnN0TmFtZS50b3VjaGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG49XCJhdXRoLWp3dC1hZG1pblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlciBzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgZmlyc3QgbmFtZSByZXF1aXJlZFxyXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBsYXN0IG5hbWUgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIj5sYXN0IG5hbWU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibGFzdE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI1MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJsYXN0TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE5hbWUuaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFzdE5hbWUuZGlydHkgfHwgbGFzdE5hbWUudG91Y2hlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlciBzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICBsYXN0IG5hbWUgcmVxdWlyZWRcclxuICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IFtmb3JtR3JvdXBdPVwicGFzc3dvcmRzXCI+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gcGFzc3dvcmQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIj5wYXNzd29yZDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImhpZGUgPyAncGFzc3dvcmQnIDogJ3RleHQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhpZGUgPSAhaGlkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuLWFyaWEtbGFiZWw9XCJhdXRoLWp3dC1sb2dpblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiSGlkZSBwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwiaGlkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+e3sgaGlkZSA/IFwidmlzaWJpbGl0eV9vZmZcIiA6IFwidmlzaWJpbGl0eVwiIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXV0aC1qd3QtcGFzc3dvcmQtc3RyZW5ndGgtYmFyIFtwYXNzd29yZFRvQ2hlY2tdPVwicGFzc3dvcmQudmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2F1dGgtand0LXBhc3N3b3JkLXN0cmVuZ3RoLWJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFueShwYXNzd29yZCkuZXJyb3JzPy5yZXF1aXJlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhc3N3b3JkLmRpcnR5IHx8IHBhc3N3b3JkLnRvdWNoZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE4bj1cImF1dGgtand0LWFkbWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnBhc3N3b3JkIHJlcXVpcmVkPC9tYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFueShwYXNzd29yZCkuZXJyb3JzPy5wYXNzd29yZHRvb3Nob3J0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFzc3dvcmQuZGlydHkgfHwgcGFzc3dvcmQudG91Y2hlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+YXQgbGVhc3QgOCBjaGFyYWN0ZXJzPC9tYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFueShwYXNzd29yZCkuZXJyb3JzPy5ub3VwcGVyaW5wYXNzd29yZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFzc3dvcmQuZGlydHkgfHwgcGFzc3dvcmQudG91Y2hlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5hdCBsZWFzdCAxIHVwcGVyY2FzZSBsZXR0ZXI8L21hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbnkocGFzc3dvcmQpLmVycm9ycz8ubm9sb3dlcmlucGFzc3dvcmQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFzc3dvcmQuZGlydHkgfHwgcGFzc3dvcmQudG91Y2hlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPmF0IGxlYXN0IDEgbG93ZXJjYXNlIGxldHRlcjwvbWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYW55KHBhc3N3b3JkKS5lcnJvcnM/Lm5vc3ltYm9saW5wYXNzd29yZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhc3N3b3JkLmRpcnR5IHx8IHBhc3N3b3JkLnRvdWNoZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE4bj1cImF1dGgtand0LWFkbWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPmF0IGxlYXN0IDEgcHVuY3R1YXRpb24vc3ltYm9sPC9tYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gY29uZmlybSBwYXNzd29yZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGkxOG49XCJhdXRoLWp3dC1hZG1pblwiPmNvbmZpcm0gcGFzc3dvcmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJoaWRlID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjb25maXJtUGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI1MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb25maXJtUGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGZvcm0uZXJyb3JzPy5hcmVlcXVhbCAmJiBjb25maXJtUGFzc3dvcmQudG91Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuPVwiYXV0aC1qd3QtYWRtaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiByZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgIHBhc3N3b3JkIGRpZmZlcnMgZnJvbSBjb25maXJtYXRpb24gcGFzc3dvcmRcclxuICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE4bj1cImF1dGgtand0LWFkbWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgIGZvcm0uaW52YWxpZCB8fCBmb3JtLnByaXN0aW5lIHx8IGJ1c3kgfHwgbmFtZS5wZW5kaW5nIHx8IGVtYWlsLnBlbmRpbmdcclxuICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgIHJlZ2lzdGVyXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChidXN5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgZGlhbWV0ZXI9XCIyMFwiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGV0YWlscz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnkgaTE4bj1cImF1dGgtand0LWFkbWluXCI+SGludHM8L3N1bW1hcnk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgaTE4bj1cImF1dGgtand0LWFkbWluXCI+XG4gICAgICAgIFRvIHJlZ2lzdGVyIGEgbmV3IHVzZXIsIHlvdSBtdXN0IHByb3ZpZGUgaGlzIGVtYWlsIGFkZHJlc3MsIGNob29zZSBhXHJcbiAgICAgICAgcGFzc3dvcmQsIGFuZCBjaG9vc2UgYSB1c2VybmFtZSwgd2hpY2ggbXVzdCBiZSB1bmlxdWUgKHlvdSB3aWxsIGJlXHJcbiAgICAgICAgbm90aWZpZWQgaWYgYW5vdGhlciB1c2VyIGhhcyBhbHJlYWR5IHRha2VuIHRoYXQgbmFtZSkuIFRoZSB1c2VybmFtZSBtdXN0XHJcbiAgICAgICAgaW5jbHVkZSBvbmx5IGxldHRlcnMvZGlnaXRzLCBzdGFydCB3aXRoIGEgbGV0dGVyLCBhbmQgYmUgbm8gc2hvcnRlciB0aGFuXHJcbiAgICAgICAgMyBjaGFyYWN0ZXJzLCBub3IgbG9uZ2VyIHRoYW4gNTAuXHJcbiAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGkxOG49XCJhdXRoLWp3dC1hZG1pblwiPlxuICAgICAgICBUbyBwcm9tb3RlIGEgZGVjZW50IHNlY3VyaXR5IGxldmVsLCB0aGUgcGFzc3dvcmQgbXVzdCBpbmNsdWRlIGF0IGxlYXN0IDhcclxuICAgICAgICBjaGFyYWN0ZXJzLCB1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIGFuZCBwdW5jdHVhdGlvblxyXG4gICAgICAgIChsaWtlIGRhc2hlcywgc3RvcHMsIHBhcmVudGhlc2VzLCBldGMuKS5cclxuICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgaTE4bj1cImF1dGgtand0LWFkbWluXCI+XG4gICAgICAgIE9uY2UgcmVnaXN0ZXJlZCwgaWYgbWVzc2FnaW5nIGlzIGVuYWJsZWQgb24gdGhlIHNlcnZlciBzaWRlIHRoZSB1c2VyXHJcbiAgICAgICAgd2lsbCByZWNlaXZlIGFuIGVtYWlsIG1lc3NhZ2UgdG8gdGhlIGVtYWlsIGFkZHJlc3MgeW91IHNwZWNpZmllZDsgaGVcclxuICAgICAgICB3aWxsIGhhdmUgdG8gY2xpY2sgb24gdGhlIHByb3ZpZGVkIGxpbmsgdG8gY29tcGxldGUgdGhlIHJlZ2lzdHJhdGlvblxyXG4gICAgICAgIHByb2Nlc3MuIE90aGVyd2lzZSwgeW91IHNob3VsZCBlZGl0IHRoZSBuZXdseSBjcmVhdGVkIHVzZXIgYW5kIGNvbmZpcm1cclxuICAgICAgICB0aGUgZW1haWwgcmVnaXN0cmF0aW9uLlxyXG4gICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RldGFpbHM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4iXX0=
|
|
@@ -14,10 +14,10 @@ export class ConfirmDialogComponent {
|
|
|
14
14
|
this.cancel = $localize `:auth-jwt-admin:no`;
|
|
15
15
|
}
|
|
16
16
|
ngOnInit() { }
|
|
17
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
18
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
17
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ConfirmDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.0", type: ConfirmDialogComponent, selector: "ng-component", ngImport: i0, template: "<h1 mat-dialog-title>{{ title }}</h1>\r\n<mat-dialog-content>\r\n {{ prompt }}\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button\r\n type=\"button\"\r\n mat-raised-button\r\n color=\"warn\"\r\n (click)=\"dialogRef.close(true)\"\r\n >\r\n {{ ok }}\r\n </button>\r\n <button type=\"button\" mat-button (click)=\"dialogRef.close()\">\r\n {{ cancel }}\r\n </button>\r\n</mat-dialog-actions>\r\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] }); }
|
|
19
19
|
}
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ConfirmDialogComponent, decorators: [{
|
|
21
21
|
type: Component,
|
|
22
22
|
args: [{ template: "<h1 mat-dialog-title>{{ title }}</h1>\r\n<mat-dialog-content>\r\n {{ prompt }}\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button\r\n type=\"button\"\r\n mat-raised-button\r\n color=\"warn\"\r\n (click)=\"dialogRef.close(true)\"\r\n >\r\n {{ ok }}\r\n </button>\r\n <button type=\"button\" mat-button (click)=\"dialogRef.close()\">\r\n {{ cancel }}\r\n </button>\r\n</mat-dialog-actions>\r\n" }]
|
|
23
23
|
}], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
@@ -66,15 +66,15 @@ export class PasswordStrengthBarComponent {
|
|
|
66
66
|
this.bars[n] = col;
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
70
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
69
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: PasswordStrengthBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
70
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.0", type: PasswordStrengthBarComponent, selector: "auth-jwt-password-strength-bar", inputs: { passwordToCheck: "passwordToCheck" }, outputs: { strengthChange: "strengthChange" }, usesOnChanges: true, ngImport: i0, template: "<div id=\"strength\">\r\n <small>strength:</small>\r\n <ul id=\"strengthBar\">\r\n <li class=\"point\" [style.background-color]=\"bars[0]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[1]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[2]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[3]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[4]\"></li>\r\n </ul>\r\n</div>\r\n", styles: ["ul#strengthBar{display:inline;list-style:none;margin:0 0 0 15px;padding:0;vertical-align:2px}li.point:last{margin:0!important}li.point{background:#ddd;border-radius:2px;display:inline-block;height:5px;margin-right:1px;width:20px}\n"] }); }
|
|
71
71
|
}
|
|
72
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: PasswordStrengthBarComponent, decorators: [{
|
|
73
73
|
type: Component,
|
|
74
|
-
args: [{ selector: 'auth-jwt-password-strength-bar', template: "<div id=\"strength\">\n <small>strength:</small>\n <ul id=\"strengthBar\">\n <li class=\"point\" [style.background-color]=\"bars[0]\"></li>\n <li class=\"point\" [style.background-color]=\"bars[1]\"></li>\n <li class=\"point\" [style.background-color]=\"bars[2]\"></li>\n <li class=\"point\" [style.background-color]=\"bars[3]\"></li>\n <li class=\"point\" [style.background-color]=\"bars[4]\"></li>\n </ul>\n</div>\n", styles: ["ul#strengthBar{display:inline;list-style:none;margin:0 0 0 15px;padding:0;vertical-align:2px}li.point:last{margin:0!important}li.point{background:#ddd;border-radius:2px;display:inline-block;height:5px;margin-right:1px;width:20px}\n"] }]
|
|
74
|
+
args: [{ selector: 'auth-jwt-password-strength-bar', template: "<div id=\"strength\">\r\n <small>strength:</small>\r\n <ul id=\"strengthBar\">\r\n <li class=\"point\" [style.background-color]=\"bars[0]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[1]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[2]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[3]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[4]\"></li>\r\n </ul>\r\n</div>\r\n", styles: ["ul#strengthBar{display:inline;list-style:none;margin:0 0 0 15px;padding:0;vertical-align:2px}li.point:last{margin:0!important}li.point{background:#ddd;border-radius:2px;display:inline-block;height:5px;margin-right:1px;width:20px}\n"] }]
|
|
75
75
|
}], ctorParameters: () => [], propDecorators: { passwordToCheck: [{
|
|
76
76
|
type: Input
|
|
77
77
|
}], strengthChange: [{
|
|
78
78
|
type: Output
|
|
79
79
|
}] } });
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtc3RyZW5ndGgtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2F1dGgtand0LWFkbWluL3NyYy9saWIvY29tcG9uZW50cy9wYXNzd29yZC1zdHJlbmd0aC1iYXIvcGFzc3dvcmQtc3RyZW5ndGgtYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2F1dGgtand0LWFkbWluL3NyYy9saWIvY29tcG9uZW50cy9wYXNzd29yZC1zdHJlbmd0aC1iYXIvcGFzc3dvcmQtc3RyZW5ndGgtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7O0FBT3ZCLE1BQU0sT0FBTyw0QkFBNEI7SUFTdkM7UUFSUSxZQUFPLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFJakQsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBS3BELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNqRCxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sZUFBZSxDQUFDLENBQVM7UUFDL0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsTUFBTSxLQUFLLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxJQUFJO1FBRTNDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLE9BQU8s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LENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYSxFQUFFLEdBQVc7UUFDN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDOzhHQTlFVSw0QkFBNEI7a0dBQTVCLDRCQUE0QiwwTENkekMseWNBVUE7OzJGRElhLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSxnQ0FBZ0M7d0RBT2pDLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUksY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXV0aC1qd3QtcGFzc3dvcmQtc3RyZW5ndGgtYmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGFzc3dvcmQtc3RyZW5ndGgtYmFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wYXNzd29yZC1zdHJlbmd0aC1iYXIuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRTdHJlbmd0aEJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgcHJpdmF0ZSBfY29sb3JzID0gWycjRjAwJywgJyNGOTAnLCAnI0ZGMCcsICcjOUYwJywgJyMwRjAnXTtcclxuXHJcbiAgQElucHV0KCkgcGFzc3dvcmRUb0NoZWNrOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBPdXRwdXQoKSBzdHJlbmd0aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG5cclxuICBwdWJsaWMgYmFyczogc3RyaW5nW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5zdHJlbmd0aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gICAgdGhpcy5iYXJzID0gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lYXN1cmVTdHJlbmd0aChwOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IGZvcmNlID0gMDtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL1skLS86LT97LX4hXCJeX2BcXFtcXF1dL2c7IC8vIFwiXHJcblxyXG4gICAgY29uc3QgbG93ZXJMZXR0ZXJzID0gL1thLXpdKy8udGVzdChwKTtcclxuICAgIGNvbnN0IHVwcGVyTGV0dGVycyA9IC9bQS1aXSsvLnRlc3QocCk7XHJcbiAgICBjb25zdCBudW1iZXJzID0gL1swLTldKy8udGVzdChwKTtcclxuICAgIGNvbnN0IHN5bWJvbHMgPSByZWdleC50ZXN0KHApO1xyXG5cclxuICAgIGNvbnN0IGZsYWdzID0gW2xvd2VyTGV0dGVycywgdXBwZXJMZXR0ZXJzLCBudW1iZXJzLCBzeW1ib2xzXTtcclxuXHJcbiAgICBsZXQgcGFzc2VkTWF0Y2hlcyA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGZsYWcgb2YgZmxhZ3MpIHtcclxuICAgICAgcGFzc2VkTWF0Y2hlcyArPSBmbGFnID09PSB0cnVlID8gMSA6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yY2UgKz0gMiAqIHAubGVuZ3RoICsgKHAubGVuZ3RoID49IDEwID8gMSA6IDApO1xyXG4gICAgZm9yY2UgKz0gcGFzc2VkTWF0Y2hlcyAqIDEwO1xyXG5cclxuICAgIC8vIHBlbmFsdHkgKHNob3J0IHBhc3N3b3JkKVxyXG4gICAgZm9yY2UgPSBwLmxlbmd0aCA8PSA2ID8gTWF0aC5taW4oZm9yY2UsIDEwKSA6IGZvcmNlO1xyXG5cclxuICAgIC8vIHBlbmFsdHkgKHBvb3IgbGV0aWV0eSBvZiBjaGFyYWN0ZXJzKVxyXG4gICAgZm9yY2UgPSBwYXNzZWRNYXRjaGVzID09PSAxID8gTWF0aC5taW4oZm9yY2UsIDEwKSA6IGZvcmNlO1xyXG4gICAgZm9yY2UgPSBwYXNzZWRNYXRjaGVzID09PSAyID8gTWF0aC5taW4oZm9yY2UsIDIwKSA6IGZvcmNlO1xyXG4gICAgZm9yY2UgPSBwYXNzZWRNYXRjaGVzID09PSAzID8gTWF0aC5taW4oZm9yY2UsIDQwKSA6IGZvcmNlO1xyXG5cclxuICAgIHJldHVybiBmb3JjZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29sb3IoczogbnVtYmVyKSB7XHJcbiAgICBsZXQgaWR4ID0gMDtcclxuICAgIGlmIChzIDw9IDEwKSB7XHJcbiAgICAgIGlkeCA9IDA7XHJcbiAgICB9IGVsc2UgaWYgKHMgPD0gMjApIHtcclxuICAgICAgaWR4ID0gMTtcclxuICAgIH0gZWxzZSBpZiAocyA8PSAzMCkge1xyXG4gICAgICBpZHggPSAyO1xyXG4gICAgfSBlbHNlIGlmIChzIDw9IDQwKSB7XHJcbiAgICAgIGlkeCA9IDM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZHggPSA0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaWR4OiBpZHggKyAxLFxyXG4gICAgICBjb2w6IHRoaXMuX2NvbG9yc1tpZHhdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSk6IHZvaWQge1xyXG4gICAgY29uc3QgcGFzc3dvcmQgPSBjaGFuZ2VzWydwYXNzd29yZFRvQ2hlY2snXS5jdXJyZW50VmFsdWU7XHJcbiAgICB0aGlzLnNldEJhckNvbG9ycyg1LCAnI0RERCcpO1xyXG4gICAgaWYgKHBhc3N3b3JkKSB7XHJcbiAgICAgIGNvbnN0IHN0cmVuZ3RoID0gdGhpcy5tZWFzdXJlU3RyZW5ndGgocGFzc3dvcmQpO1xyXG4gICAgICBjb25zdCBjID0gdGhpcy5nZXRDb2xvcihzdHJlbmd0aCk7XHJcbiAgICAgIHRoaXMuc2V0QmFyQ29sb3JzKGMuaWR4LCBjLmNvbCk7XHJcbiAgICAgIHRoaXMuc3RyZW5ndGhDaGFuZ2UuZW1pdChzdHJlbmd0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEJhckNvbG9ycyhjb3VudDogbnVtYmVyLCBjb2w6IHN0cmluZykge1xyXG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCBjb3VudDsgbisrKSB7XHJcbiAgICAgIHRoaXMuYmFyc1tuXSA9IGNvbDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cInN0cmVuZ3RoXCI+XHJcbiAgPHNtYWxsPnN0cmVuZ3RoOjwvc21hbGw+XHJcbiAgPHVsIGlkPVwic3RyZW5ndGhCYXJcIj5cclxuICAgIDxsaSBjbGFzcz1cInBvaW50XCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYmFyc1swXVwiPjwvbGk+XHJcbiAgICA8bGkgY2xhc3M9XCJwb2ludFwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJhcnNbMV1cIj48L2xpPlxyXG4gICAgPGxpIGNsYXNzPVwicG9pbnRcIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJiYXJzWzJdXCI+PC9saT5cclxuICAgIDxsaSBjbGFzcz1cInBvaW50XCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYmFyc1szXVwiPjwvbGk+XHJcbiAgICA8bGkgY2xhc3M9XCJwb2ludFwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJhcnNbNF1cIj48L2xpPlxyXG4gIDwvdWw+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -116,10 +116,10 @@ export class UserListRepository {
|
|
|
116
116
|
});
|
|
117
117
|
return promise;
|
|
118
118
|
}
|
|
119
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
120
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
119
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: UserListRepository, deps: [{ token: i1.AuthJwtAccountService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
120
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: UserListRepository, providedIn: 'root' }); }
|
|
121
121
|
}
|
|
122
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: UserListRepository, decorators: [{
|
|
123
123
|
type: Injectable,
|
|
124
124
|
args: [{ providedIn: 'root' }]
|
|
125
125
|
}], ctorParameters: () => [{ type: i1.AuthJwtAccountService }] });
|