new-front-common-library 16.1.21 → 16.1.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/util/services/guard/auth.guard.mjs +20 -20
- package/esm2022/lib/util/services/guard/login.guard.mjs +7 -4
- package/fesm2022/new-front-common-library.mjs +23 -21
- package/fesm2022/new-front-common-library.mjs.map +1 -1
- package/lib/util/services/guard/auth.guard.d.ts +2 -1
- package/lib/util/services/guard/login.guard.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import { Router } from '@angular/router';
|
|
2
1
|
import { WEB_CONFIG } from '../../config';
|
|
3
2
|
import { CookieService } from 'ngx-cookie-service';
|
|
4
3
|
import { CommonApiService } from '../api/common-api.service';
|
|
5
|
-
import { map } from 'rxjs/operators';
|
|
4
|
+
import { catchError, map } from 'rxjs/operators';
|
|
6
5
|
import { inject } from '@angular/core';
|
|
7
6
|
import { AuthService } from '../auth/auth.service';
|
|
8
|
-
|
|
7
|
+
import { of } from "rxjs";
|
|
8
|
+
export const authGuard = (route, state) => {
|
|
9
9
|
const cookieService = inject(CookieService);
|
|
10
10
|
const commonApiService = inject(CommonApiService);
|
|
11
11
|
const webConfig = inject(WEB_CONFIG);
|
|
12
|
-
const router = inject(Router);
|
|
13
12
|
const authService = inject(AuthService);
|
|
14
|
-
if (
|
|
15
|
-
|
|
16
|
-
authService.setAuthenticated(true);
|
|
17
|
-
return true;
|
|
18
|
-
}
|
|
19
|
-
const user = commonApiService.getUserDataFromToken();
|
|
20
|
-
const email = user.secondary ? user.email : cookieService.get('auth-mail');
|
|
21
|
-
return commonApiService.ssoLogin(email).pipe(map((data) => {
|
|
22
|
-
user.secondary ? commonApiService.setSecondaryToken(data.token) : commonApiService.setToken(data.token);
|
|
23
|
-
authService.setAuthenticated(true);
|
|
24
|
-
return true;
|
|
25
|
-
}));
|
|
13
|
+
if (state.url.includes('/login/invalid')) {
|
|
14
|
+
return true;
|
|
26
15
|
}
|
|
27
|
-
|
|
28
|
-
authService.setAuthenticated(
|
|
29
|
-
return
|
|
16
|
+
if (commonApiService.isTokenValid()) {
|
|
17
|
+
authService.setAuthenticated(true);
|
|
18
|
+
return true;
|
|
30
19
|
}
|
|
20
|
+
const user = commonApiService.getUserDataFromToken();
|
|
21
|
+
const email = user.secondary ? user.email : cookieService.get('auth-mail');
|
|
22
|
+
return commonApiService.ssoLogin(email).pipe(map((data) => {
|
|
23
|
+
user.secondary ? commonApiService.setSecondaryToken(data.token) : commonApiService.setToken(data.token);
|
|
24
|
+
authService.setAuthenticated(true);
|
|
25
|
+
return true;
|
|
26
|
+
}), catchError(() => {
|
|
27
|
+
authService.setAuthenticated(false);
|
|
28
|
+
window.location.href = webConfig.api_url + '/login/invalid';
|
|
29
|
+
return of(false);
|
|
30
|
+
}));
|
|
31
31
|
};
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldy1mcm9udC1jb21tb24tbGlicmFyeS9zcmMvbGliL3V0aWwvc2VydmljZXMvZ3VhcmQvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUIsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFrQixDQUN0QyxLQUE2QixFQUM3QixLQUEwQixFQUMxQixFQUFFO0lBQ0YsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUV4QyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7UUFDeEMsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELElBQUksZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEVBQUU7UUFDbkMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxNQUFNLElBQUksR0FBa0IsZ0JBQWdCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNwRSxNQUFNLEtBQUssR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRW5GLE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDMUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDO1FBQzVELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkFjdGl2YXRlRm4sIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgV0VCX0NPTkZJRyB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZS1zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbkFwaVNlcnZpY2UgfSBmcm9tICcuLi9hcGkvY29tbW9uLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEF1dGhVc2VyTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGgvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IG9mIH0gZnJvbSBcInJ4anNcIjtcblxuZXhwb3J0IGNvbnN0IGF1dGhHdWFyZDogQ2FuQWN0aXZhdGVGbiA9IChcbiAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG4pID0+IHtcbiAgY29uc3QgY29va2llU2VydmljZSA9IGluamVjdChDb29raWVTZXJ2aWNlKTtcbiAgY29uc3QgY29tbW9uQXBpU2VydmljZSA9IGluamVjdChDb21tb25BcGlTZXJ2aWNlKTtcbiAgY29uc3Qgd2ViQ29uZmlnID0gaW5qZWN0KFdFQl9DT05GSUcpO1xuICBjb25zdCBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG5cbiAgaWYgKHN0YXRlLnVybC5pbmNsdWRlcygnL2xvZ2luL2ludmFsaWQnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGNvbW1vbkFwaVNlcnZpY2UuaXNUb2tlblZhbGlkKCkpIHtcbiAgICBhdXRoU2VydmljZS5zZXRBdXRoZW50aWNhdGVkKHRydWUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgdXNlcjogQXV0aFVzZXJNb2RlbCA9IGNvbW1vbkFwaVNlcnZpY2UuZ2V0VXNlckRhdGFGcm9tVG9rZW4oKTtcbiAgY29uc3QgZW1haWw6IHN0cmluZyA9IHVzZXIuc2Vjb25kYXJ5ID8gdXNlci5lbWFpbCA6IGNvb2tpZVNlcnZpY2UuZ2V0KCdhdXRoLW1haWwnKTtcblxuICByZXR1cm4gY29tbW9uQXBpU2VydmljZS5zc29Mb2dpbihlbWFpbCkucGlwZShcbiAgICBtYXAoKGRhdGEpID0+IHtcbiAgICAgIHVzZXIuc2Vjb25kYXJ5ID8gY29tbW9uQXBpU2VydmljZS5zZXRTZWNvbmRhcnlUb2tlbihkYXRhLnRva2VuKSA6IGNvbW1vbkFwaVNlcnZpY2Uuc2V0VG9rZW4oZGF0YS50b2tlbik7XG4gICAgICBhdXRoU2VydmljZS5zZXRBdXRoZW50aWNhdGVkKHRydWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSksXG4gICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICBhdXRoU2VydmljZS5zZXRBdXRoZW50aWNhdGVkKGZhbHNlKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gd2ViQ29uZmlnLmFwaV91cmwgKyAnL2xvZ2luL2ludmFsaWQnO1xuICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICB9KVxuICApO1xufTtcbiJdfQ==
|
|
@@ -2,6 +2,7 @@ import { inject } from '@angular/core';
|
|
|
2
2
|
import { MatDialog } from '@angular/material/dialog';
|
|
3
3
|
import { MyDialogPopupLoginComponent } from '../../component/popup/popup-login/popup-login.component';
|
|
4
4
|
import { AuthService } from '../auth/auth.service';
|
|
5
|
+
import { map } from "rxjs/operators";
|
|
5
6
|
export const loginGuard = () => {
|
|
6
7
|
const dialog = inject(MatDialog);
|
|
7
8
|
const authService = inject(AuthService);
|
|
@@ -10,11 +11,13 @@ export const loginGuard = () => {
|
|
|
10
11
|
return true;
|
|
11
12
|
}
|
|
12
13
|
else {
|
|
13
|
-
const dialogRef = dialog.open(MyDialogPopupLoginComponent, {
|
|
14
|
-
|
|
14
|
+
const dialogRef = dialog.open(MyDialogPopupLoginComponent, {
|
|
15
|
+
disableClose: true
|
|
16
|
+
});
|
|
17
|
+
return dialogRef.afterClosed().pipe(map((res) => {
|
|
15
18
|
authService.setAuthenticated(res);
|
|
16
19
|
return res;
|
|
17
|
-
});
|
|
20
|
+
}));
|
|
18
21
|
}
|
|
19
22
|
};
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXctZnJvbnQtY29tbW9uLWxpYnJhcnkvc3JjL2xpYi91dGlsL3NlcnZpY2VzL2d1YXJkL2xvZ2luLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRTtJQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTFDLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDOUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7U0FBTTtRQUNMLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDekQsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUNqQyxHQUFHLENBQUMsQ0FBQyxHQUFZLEVBQUUsRUFBRTtZQUNuQixXQUFXLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0tBQ0g7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNeURpYWxvZ1BvcHVwTG9naW5Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnQvcG9wdXAvcG9wdXAtbG9naW4vcG9wdXAtbG9naW4uY29tcG9uZW50JztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHttYXB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5leHBvcnQgY29uc3QgbG9naW5HdWFyZCA9ICgpID0+IHtcbiAgICBjb25zdCBkaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgICBjb25zdCBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG5cbiAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2F1dGhUb2tlbicpICE9PSBudWxsKSB7XG4gICAgICBhdXRoU2VydmljZS5zZXRBdXRoZW50aWNhdGVkKHRydWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gZGlhbG9nLm9wZW4oTXlEaWFsb2dQb3B1cExvZ2luQ29tcG9uZW50LCB7XG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICB9KTtcblxuICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgYXV0aFNlcnZpY2Uuc2V0QXV0aGVudGljYXRlZChyZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59O1xuIl19
|
|
@@ -19,7 +19,7 @@ import { NgxPermissionsModule } from 'ngx-permissions';
|
|
|
19
19
|
import * as i6 from '@angular/material/progress-spinner';
|
|
20
20
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
21
21
|
import * as i1$3 from '@angular/router';
|
|
22
|
-
import { RouterModule
|
|
22
|
+
import { RouterModule } from '@angular/router';
|
|
23
23
|
import * as i7$1 from '@angular/forms';
|
|
24
24
|
import { FormControl, Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';
|
|
25
25
|
import * as i9 from '@angular/cdk/overlay';
|
|
@@ -5323,29 +5323,29 @@ class FamilyModel {
|
|
|
5323
5323
|
}
|
|
5324
5324
|
}
|
|
5325
5325
|
|
|
5326
|
-
const authGuard = () => {
|
|
5326
|
+
const authGuard = (route, state) => {
|
|
5327
5327
|
const cookieService = inject(CookieService);
|
|
5328
5328
|
const commonApiService = inject(CommonApiService);
|
|
5329
5329
|
const webConfig = inject(WEB_CONFIG);
|
|
5330
|
-
const router = inject(Router);
|
|
5331
5330
|
const authService = inject(AuthService);
|
|
5332
|
-
if (
|
|
5333
|
-
|
|
5334
|
-
authService.setAuthenticated(true);
|
|
5335
|
-
return true;
|
|
5336
|
-
}
|
|
5337
|
-
const user = commonApiService.getUserDataFromToken();
|
|
5338
|
-
const email = user.secondary ? user.email : cookieService.get('auth-mail');
|
|
5339
|
-
return commonApiService.ssoLogin(email).pipe(map((data) => {
|
|
5340
|
-
user.secondary ? commonApiService.setSecondaryToken(data.token) : commonApiService.setToken(data.token);
|
|
5341
|
-
authService.setAuthenticated(true);
|
|
5342
|
-
return true;
|
|
5343
|
-
}));
|
|
5331
|
+
if (state.url.includes('/login/invalid')) {
|
|
5332
|
+
return true;
|
|
5344
5333
|
}
|
|
5345
|
-
|
|
5346
|
-
authService.setAuthenticated(
|
|
5347
|
-
return
|
|
5334
|
+
if (commonApiService.isTokenValid()) {
|
|
5335
|
+
authService.setAuthenticated(true);
|
|
5336
|
+
return true;
|
|
5348
5337
|
}
|
|
5338
|
+
const user = commonApiService.getUserDataFromToken();
|
|
5339
|
+
const email = user.secondary ? user.email : cookieService.get('auth-mail');
|
|
5340
|
+
return commonApiService.ssoLogin(email).pipe(map((data) => {
|
|
5341
|
+
user.secondary ? commonApiService.setSecondaryToken(data.token) : commonApiService.setToken(data.token);
|
|
5342
|
+
authService.setAuthenticated(true);
|
|
5343
|
+
return true;
|
|
5344
|
+
}), catchError(() => {
|
|
5345
|
+
authService.setAuthenticated(false);
|
|
5346
|
+
window.location.href = webConfig.api_url + '/login/invalid';
|
|
5347
|
+
return of(false);
|
|
5348
|
+
}));
|
|
5349
5349
|
};
|
|
5350
5350
|
|
|
5351
5351
|
const loginGuard = () => {
|
|
@@ -5356,11 +5356,13 @@ const loginGuard = () => {
|
|
|
5356
5356
|
return true;
|
|
5357
5357
|
}
|
|
5358
5358
|
else {
|
|
5359
|
-
const dialogRef = dialog.open(MyDialogPopupLoginComponent, {
|
|
5360
|
-
|
|
5359
|
+
const dialogRef = dialog.open(MyDialogPopupLoginComponent, {
|
|
5360
|
+
disableClose: true
|
|
5361
|
+
});
|
|
5362
|
+
return dialogRef.afterClosed().pipe(map((res) => {
|
|
5361
5363
|
authService.setAuthenticated(res);
|
|
5362
5364
|
return res;
|
|
5363
|
-
});
|
|
5365
|
+
}));
|
|
5364
5366
|
}
|
|
5365
5367
|
};
|
|
5366
5368
|
|