@pagopa/selfcare-common-frontend 1.34.14 → 1.34.16

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/CHANGELOG.md CHANGED
@@ -4,8 +4,10 @@ All notable changes to this project will be documented in this file. Dates are d
4
4
 
5
5
  Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
6
6
 
7
- #### [v1.34.14](https://github.com/pagopa/selfcare-common-frontend/compare/v1.35.0...v1.34.14)
7
+ #### [v1.34.16](https://github.com/pagopa/selfcare-common-frontend/compare/v1.35.0...v1.34.16)
8
8
 
9
+ - feat: changed test token [`#203`](https://github.com/pagopa/selfcare-common-frontend/pull/203)
10
+ - [SELC-4521] feat: Added two new exportable utilities methods for storage managment: parseJwt and isExpiredToken [`#202`](https://github.com/pagopa/selfcare-common-frontend/pull/202)
9
11
  - [SELC-3936] feat: Created a method that return productTitle receiving productId [`#196`](https://github.com/pagopa/selfcare-common-frontend/pull/196)
10
12
  - [SELC-3324] Updated React version from 17.0.2 to 18.0.2 + updated other project dependencies for ensure compatibility [`#195`](https://github.com/pagopa/selfcare-common-frontend/pull/195)
11
13
  - [SELC-1712] feat: change footer link label of privacy policy [`#194`](https://github.com/pagopa/selfcare-common-frontend/pull/194)
@@ -19,6 +21,7 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
19
21
  - SELC-2590 [`#186`](https://github.com/pagopa/selfcare-common-frontend/pull/186)
20
22
  - SELC-2590 - update common [`#185`](https://github.com/pagopa/selfcare-common-frontend/pull/185)
21
23
  - Used a environment variable to manage correct links in the footer based to product and actual environment [`#184`](https://github.com/pagopa/selfcare-common-frontend/pull/184)
24
+ - [SELC-4521] feat: Added two new exportable utilities methods for storage managment: parseJwt and isExpiredToken (#202) [`#4521`](https://pagopa.atlassian.net/browse/4521)
22
25
  - Merge pull request #196 from pagopa/SELC-3936 [`#3936`](https://pagopa.atlassian.net/browse/3936) [`#3936`](https://pagopa.atlassian.net/browse/3936)
23
26
  - [SELC-3936] feat: Added UnitTest [`#3936`](https://pagopa.atlassian.net/browse/3936)
24
27
  - [SELC-3936] feat: Created a method that return productTitle receiving productId [`#3936`](https://pagopa.atlassian.net/browse/3936)
@@ -45,13 +48,30 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
45
48
  - SELC-2590 - update common (#185) [`#2590`](https://pagopa.atlassian.net/browse/2590)
46
49
  - SELC-2590 - update common [`#2590`](https://pagopa.atlassian.net/browse/2590)
47
50
  - Used a environment variable to manage correct links in the footer based to product and actual environment [`960e2fb`](https://github.com/pagopa/selfcare-common-frontend/commit/960e2fbaa8aa8f79061639b26dc1a27f28b8aae3)
51
+ - Update README.md [`a360cdb`](https://github.com/pagopa/selfcare-common-frontend/commit/a360cdbf86d7f5b7aa9df4aec586f76362e13e3a)
48
52
  - Fixed broken unitTest [`d9bb4de`](https://github.com/pagopa/selfcare-common-frontend/commit/d9bb4deafebc474c7dfe475ca68bce898c762cfd)
49
- - empty space [`8b39bc7`](https://github.com/pagopa/selfcare-common-frontend/commit/8b39bc7af38c4e8b916c257d39c9b54bd6120e9f)
50
53
 
51
- #### [v1.35.0](https://github.com/pagopa/selfcare-common-frontend/compare/v1.34.13...v1.35.0)
54
+ #### [v1.35.0](https://github.com/pagopa/selfcare-common-frontend/compare/v1.34.15...v1.35.0)
52
55
 
53
56
  > 20 July 2023
54
57
 
58
+ #### [v1.34.15](https://github.com/pagopa/selfcare-common-frontend/compare/v1.34.14...v1.34.15)
59
+
60
+ > 18 March 2024
61
+
62
+ - [SELC-4521] feat: Added two new exportable utilities methods for storage managment: parseJwt and isExpiredToken [`#202`](https://github.com/pagopa/selfcare-common-frontend/pull/202)
63
+ - [SELC-4521] feat: Added two new exportable utilities methods for storage managment: parseJwt and isExpiredToken (#202) [`#4521`](https://pagopa.atlassian.net/browse/4521)
64
+ - Update README.md [`a360cdb`](https://github.com/pagopa/selfcare-common-frontend/commit/a360cdbf86d7f5b7aa9df4aec586f76362e13e3a)
65
+
66
+ #### [v1.34.14](https://github.com/pagopa/selfcare-common-frontend/compare/v1.34.13...v1.34.14)
67
+
68
+ > 23 January 2024
69
+
70
+ - [SELC-3936] feat: Created a method that return productTitle receiving productId [`#196`](https://github.com/pagopa/selfcare-common-frontend/pull/196)
71
+ - Merge pull request #196 from pagopa/SELC-3936 [`#3936`](https://pagopa.atlassian.net/browse/3936) [`#3936`](https://pagopa.atlassian.net/browse/3936)
72
+ - [SELC-3936] feat: Added UnitTest [`#3936`](https://pagopa.atlassian.net/browse/3936)
73
+ - [SELC-3936] feat: Created a method that return productTitle receiving productId [`#3936`](https://pagopa.atlassian.net/browse/3936)
74
+
55
75
  #### [v1.34.13](https://github.com/pagopa/selfcare-common-frontend/compare/v1.34.12...v1.34.13)
56
76
 
57
77
  > 20 December 2023
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # SelfCare's common components & features
1
+ # SelfCare's common components & features
2
2
  This library contains [utilities](#utilities), [components](#components), [decorators](#decorators), [custom hooks](#custom-hooks) and [features](#features) built for the selfcare project.
3
3
 
4
4
  # Localization
@@ -243,6 +243,12 @@ An object containing a complete set of operation on the storage regarding the ke
243
243
  ### storageUserOps
244
244
  An object containing a complete set of operation on the storage regarding the key used to store in the storage the loggedUser in selfcare projects.
245
245
 
246
+ ## parseJwt
247
+ Decode and then convert the jwt into a JWTUser object
248
+
249
+ ## isExpiredToken
250
+ Determines whether the token has expired
251
+
246
252
  # Decorators
247
253
  ## withLogin
248
254
  This feature is based on react-redux library and require to register the reducer build in userSlice into the application's redux store.
@@ -420,4 +426,4 @@ The tool used is [OneTrust](#https://www.onetrust.it/), and in order to be able
420
426
 
421
427
  | Key | Type | Description | DefaultValue |
422
428
  |-----|------|-------------|--------------|
423
- | COOKIE_GROUP_ANALYTICS | string | The cookie group configured for the analytics tool. MixPanel's cookies are configured as default by OneTrust with C0004 group, or as Targeting Cookies | C0004 |
429
+ | COOKIE_GROUP_ANALYTICS | string | The cookie group configured for the analytics tool. MixPanel's cookies are configured as default by OneTrust with C0004 group, or as Targeting Cookies | C0004 |
package/build.info CHANGED
@@ -1,2 +1,2 @@
1
- 20240123.3 - selfcare-common-frontend.deploy(137526)
2
- tags/v1.29.0~1^2 316c7b663ae523dd4b2d29e2d81091b51a794818
1
+ 20240318.4 - selfcare-common-frontend.deploy(148195)
2
+ tags/v1.29.0~1^2 74a89449f6a48e81600b71d5ce68e80859d98c00
package/config/env.js CHANGED
@@ -29,7 +29,7 @@ exports.CONFIG = {
29
29
  COOKIE_GROUP_ANALYTICS: 'C0002',
30
30
  },
31
31
  TEST: {
32
- JWT: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Imp3dF84Njo3NDoxZTozNTphZTphNjpkODo0YjpkYzplOTpmYzo4ZTphMDozNTo2ODpiNSJ9.eyJlbWFpbCI6ImZ1cmlvdml0YWxlQG1hcnRpbm8uaXQiLCJmYW1pbHlfbmFtZSI6IlNhcnRvcmkiLCJmaXNjYWxfbnVtYmVyIjoiU1JUTkxNMDlUMDZHNjM1UyIsIm5hbWUiOiJBbnNlbG1vIiwiZnJvbV9hYSI6ZmFsc2UsInVpZCI6IjUwOTZlNGM2LTI1YTEtNDVkNS05YmRmLTJmYjk3NGE3YzFjOCIsImxldmVsIjoiTDIiLCJpYXQiOjE2NzQ4MTQxODAsImF1ZCI6ImFwaS5kZXYuc2VsZmNhcmUucGFnb3BhLml0IiwiaXNzIjoiU1BJRCIsImp0aSI6IjAxR1FTQjhLSDNCSks4QkFTRDE4MlZKSDhEIn0.JOfxEC3o8Wor0l430Fq68mWVl4h-NUpFlFuSf6Xgxmu-wqeQyUjRKIfl3M9J0H_8ihxyNMEu5u3PqqQBubGx1mjy24uEsoRPFdLQxlGnpMAM-15SFv8ShDWvMaTSz8hO6vCRJxUtNQgX7SplIG7ZlBBSt7ihwioW1CsKWFISuG0tHwe797NWwaMJlRnzW3R7BIrsGU1eJeue2QqYUnKXZIwYQh21E3EssCNFrusATEuJT_opGaTMzSHpUZxI6cCG2pOE8Cmm0Z75Q2HAM2eoi1_Mx8llZvuk1oVhgDGsACpNRb9Vyxt6jAPUEh3DlkGpLqS8AUD1vRQydzNifiSb4A',
32
+ JWT: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmYW1pbHlfbmFtZSI6Im1vY2tlZCIsImZpc2NhbF9udW1iZXIiOiIyMjMzNDQ1Njc4NiIsIm5hbWUiOiJ1c2VyIiwiZnJvbV9hYSI6ZmFsc2UsInVpZCI6IjUwNTRwZWM2LTIyMzMyLTQ1ZDUtOWJkZi0yYmg5NzRhN2MxYzgiLCJsZXZlbCI6IkwyIiwiaWF0IjoxNzEwNzU4Njk0LCJleHAiOjE3MDgyNTMxODl9.qGqULn7A29daBAvc34azOgL5PhLt6Srge0PxopPj_DA',
33
33
  },
34
34
  FOOTER: {
35
35
  LINK: {
package/config/env.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/lib/config/env.ts"],"names":[],"mappings":";;;;AAAA,qDAA+B;AAElB,QAAA,MAAM,GAAG;IACpB,MAAM,EAAE;QACN,YAAY,EAAE,cAAc;QAC5B,KAAK,EAAE,aAAa;QACpB,MAAM,EAAE,cAAc;QACtB,UAAU,EAAE,aAAa;KAC1B;IAED,KAAK,EAAE;QACL,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;KACpE;IAED,QAAQ,EAAE;QACR,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;QACvE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;QACnE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;QACrE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;QACjE,QAAQ,EAAE,6BAA6B;QACvC,WAAW,EAAE,cAAc;QAC3B,MAAM,EAAE,KAAK;QACb,kBAAkB,EAAE,CAAC,cAAc,EAAE,mBAAmB,EAAE,WAAW,CAAC;QACtE,qBAAqB,EAAE,EAAE;QACzB,+BAA+B,EAAE,EAAE;KACpC;IAED,OAAO,EAAE;QACP,sBAAsB,EAAE,OAAO;KAChC;IAED,IAAI,EAAE;QACJ,GAAG,EAAE,y0BAAy0B;KAC/0B;IAED,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,UAAU,EAAE,wBAAwB;YACpC,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,QAAQ,EAAE;YACrE,kBAAkB,EAAE,GAAG,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,QAAQ,EAAE;YAC5E,wBAAwB,EACtB,yHAAyH;YAC3H,OAAO,EAAE,6CAA6C;YACtD,KAAK,EAAE,2BAA2B;YAClC,UAAU,EAAE,0CAA0C;YACtD,cAAc,EAAE,0CAA0C;YAC1D,mBAAmB,EACjB,yEAAyE;YAC3E,kBAAkB,EAAE,sDAAsD;YAC1E,gBAAgB,EAAE,yDAAyD;YAC3E,QAAQ,EACN,oFAAoF;YACtF,QAAQ,EAAE,0CAA0C;YACpD,OAAO,EAAE,4BAA4B;YACrC,SAAS,EAAE,sCAAsC;YACjD,MAAM,EAAE,+BAA+B;YACvC,aAAa,EAAE,qEAAqE;YACpF,eAAe;SAChB;KACF;IAED,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,QAAQ,EAAE,wBAAwB;YAClC,UAAU,EAAE,YAAY;SACzB;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/lib/config/env.ts"],"names":[],"mappings":";;;;AAAA,qDAA+B;AAElB,QAAA,MAAM,GAAG;IACpB,MAAM,EAAE;QACN,YAAY,EAAE,cAAc;QAC5B,KAAK,EAAE,aAAa;QACpB,MAAM,EAAE,cAAc;QACtB,UAAU,EAAE,aAAa;KAC1B;IAED,KAAK,EAAE;QACL,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;KACpE;IAED,QAAQ,EAAE;QACR,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;QACvE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;QACnE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;QACrE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;QACjE,QAAQ,EAAE,6BAA6B;QACvC,WAAW,EAAE,cAAc;QAC3B,MAAM,EAAE,KAAK;QACb,kBAAkB,EAAE,CAAC,cAAc,EAAE,mBAAmB,EAAE,WAAW,CAAC;QACtE,qBAAqB,EAAE,EAAE;QACzB,+BAA+B,EAAE,EAAE;KACpC;IAED,OAAO,EAAE;QACP,sBAAsB,EAAE,OAAO;KAChC;IAED,IAAI,EAAE;QACJ,GAAG,EAAE,+TAA+T;KACrU;IAED,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,UAAU,EAAE,wBAAwB;YACpC,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,QAAQ,EAAE;YACrE,kBAAkB,EAAE,GAAG,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,QAAQ,EAAE;YAC5E,wBAAwB,EACtB,yHAAyH;YAC3H,OAAO,EAAE,6CAA6C;YACtD,KAAK,EAAE,2BAA2B;YAClC,UAAU,EAAE,0CAA0C;YACtD,cAAc,EAAE,0CAA0C;YAC1D,mBAAmB,EACjB,yEAAyE;YAC3E,kBAAkB,EAAE,sDAAsD;YAC1E,gBAAgB,EAAE,yDAAyD;YAC3E,QAAQ,EACN,oFAAoF;YACtF,QAAQ,EAAE,0CAA0C;YACpD,OAAO,EAAE,4BAA4B;YACrC,SAAS,EAAE,sCAAsC;YACjD,MAAM,EAAE,+BAA+B;YACvC,aAAa,EAAE,qEAAqE;YACpF,eAAe;SAChB;KACF;IAED,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,QAAQ,EAAE,wBAAwB;YAClC,UAAU,EAAE,YAAY;SACzB;KACF;CACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type JwtUser = {
2
+ uid: string;
3
+ fiscal_number: string;
4
+ name: string;
5
+ family_name: string;
6
+ email: string;
7
+ exp: string;
8
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=JwtUser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JwtUser.js","sourceRoot":"","sources":["../../src/lib/model/JwtUser.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pagopa/selfcare-common-frontend",
3
3
  "description": "Shared React components for the pagopa selfcare project",
4
- "version": "1.34.14",
4
+ "version": "1.34.16",
5
5
  "license": "MIT",
6
6
  "repository": "https://github.com/pagopa/selfcare-common-frontend",
7
7
  "author": "https://www.pagopa.gov.it",
@@ -1,5 +1,10 @@
1
1
  import { User } from '../model/User';
2
+ import { JwtUser } from '../model/JwtUser';
2
3
  /** An object containing a complete set of operation on the storage regarding the key used to store in the storage the loggedUser token in selfcare projects */
3
4
  export declare const storageTokenOps: import("./storage-utils").StorageOps<string>;
4
5
  /** An object containing a complete set of operation on the storage regarding the key used to store in the storage the loggedUser in selfcare projects */
5
6
  export declare const storageUserOps: import("./storage-utils").StorageOps<User>;
7
+ /** Decode and then convert the jwt into a JWTUser object */
8
+ export declare const parseJwt: (token: string) => JwtUser | null;
9
+ /** Determines whether the token has expired */
10
+ export declare const isExpiredToken: (token: string) => boolean;
package/utils/storage.js CHANGED
@@ -1,9 +1,36 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.storageUserOps = exports.storageTokenOps = void 0;
3
+ exports.isExpiredToken = exports.parseJwt = exports.storageUserOps = exports.storageTokenOps = void 0;
4
4
  const storage_utils_1 = require("./storage-utils");
5
5
  /** An object containing a complete set of operation on the storage regarding the key used to store in the storage the loggedUser token in selfcare projects */
6
6
  exports.storageTokenOps = (0, storage_utils_1.storageOpsBuilder)('token', 'string', true);
7
7
  /** An object containing a complete set of operation on the storage regarding the key used to store in the storage the loggedUser in selfcare projects */
8
8
  exports.storageUserOps = (0, storage_utils_1.storageOpsBuilder)('user', 'object', true);
9
+ function decodeUTF8(binary) {
10
+ const bytes = new Uint8Array(binary.length);
11
+ // eslint-disable-next-line functional/no-let
12
+ for (let b = 0; b < bytes.length; ++b) {
13
+ // eslint-disable-next-line functional/immutable-data
14
+ bytes[b] = binary.charCodeAt(b);
15
+ }
16
+ const decoder = new TextDecoder('utf-8');
17
+ return decoder.decode(bytes);
18
+ }
19
+ /** Decode and then convert the jwt into a JWTUser object */
20
+ const parseJwt = (token) => {
21
+ try {
22
+ return JSON.parse(decodeUTF8(atob(token.split('.')[1])));
23
+ }
24
+ catch (e) {
25
+ return null;
26
+ }
27
+ };
28
+ exports.parseJwt = parseJwt;
29
+ /** Determines whether the token has expired */
30
+ const isExpiredToken = (token) => {
31
+ const jwtUser = (0, exports.parseJwt)(token);
32
+ const tokenExpDate = new Date(Number(jwtUser.exp) * 1000);
33
+ return new Date() >= tokenExpDate;
34
+ };
35
+ exports.isExpiredToken = isExpiredToken;
9
36
  //# sourceMappingURL=storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/lib/utils/storage.ts"],"names":[],"mappings":";;;AACA,mDAAoD;AAEpD,+JAA+J;AAClJ,QAAA,eAAe,GAAG,IAAA,iCAAiB,EAAS,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAClF,yJAAyJ;AAC5I,QAAA,cAAc,GAAG,IAAA,iCAAiB,EAAO,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/lib/utils/storage.ts"],"names":[],"mappings":";;;AAEA,mDAAoD;AAEpD,+JAA+J;AAClJ,QAAA,eAAe,GAAG,IAAA,iCAAiB,EAAS,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAClF,yJAAyJ;AAC5I,QAAA,cAAc,GAAG,IAAA,iCAAiB,EAAO,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAE9E,SAAS,UAAU,CAAC,MAAc;IAChC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,6CAA6C;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QACrC,qDAAqD;QACrD,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KACjC;IACD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,4DAA4D;AACrD,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;IACxC,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAY,CAAC;KACrE;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,IAAI,CAAC;KACb;AACH,CAAC,CAAC;AANW,QAAA,QAAQ,YAMnB;AAEF,+CAA+C;AACxC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,EAAE;IAC9C,MAAM,OAAO,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAY,CAAC;IAC3C,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAE1D,OAAO,IAAI,IAAI,EAAE,IAAI,YAAY,CAAC;AACpC,CAAC,CAAC;AALW,QAAA,cAAc,kBAKzB"}