@nmshd/consumption 2.0.0-alpha.14 → 2.0.0-alpha.17

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.
Files changed (64) hide show
  1. package/dist/buildInformation.js +5 -5
  2. package/dist/consumption/ConsumptionController.d.ts +6 -1
  3. package/dist/consumption/ConsumptionController.js +10 -6
  4. package/dist/consumption/ConsumptionController.js.map +1 -1
  5. package/dist/consumption/ConsumptionErrors.d.ts +3 -1
  6. package/dist/consumption/ConsumptionErrors.js +7 -1
  7. package/dist/consumption/ConsumptionErrors.js.map +1 -1
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.js +1 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/modules/attributes/ConsumptionAttributesController.d.ts +5 -1
  12. package/dist/modules/attributes/ConsumptionAttributesController.js +17 -2
  13. package/dist/modules/attributes/ConsumptionAttributesController.js.map +1 -1
  14. package/dist/modules/attributes/GetIdentityAttributesParams.d.ts +9 -0
  15. package/dist/modules/attributes/GetIdentityAttributesParams.js +26 -0
  16. package/dist/modules/attributes/GetIdentityAttributesParams.js.map +1 -0
  17. package/dist/modules/attributes/GetRelationshipAttributesParams.d.ts +9 -0
  18. package/dist/modules/attributes/GetRelationshipAttributesParams.js +26 -0
  19. package/dist/modules/attributes/GetRelationshipAttributesParams.js.map +1 -0
  20. package/dist/modules/attributes/{SuccedConsumptionAttributeParams.d.ts → SucceedConsumptionAttributeParams.d.ts} +0 -0
  21. package/dist/modules/attributes/{SuccedConsumptionAttributeParams.js → SucceedConsumptionAttributeParams.js} +1 -1
  22. package/dist/modules/attributes/SucceedConsumptionAttributeParams.js.map +1 -0
  23. package/dist/modules/attributes/local/QueryTranslator.d.ts +3 -0
  24. package/dist/modules/attributes/local/QueryTranslator.js +110 -0
  25. package/dist/modules/attributes/local/QueryTranslator.js.map +1 -0
  26. package/dist/modules/index.d.ts +10 -3
  27. package/dist/modules/index.js +10 -3
  28. package/dist/modules/index.js.map +1 -1
  29. package/dist/modules/requests/incoming/IncomingRequestsController.js +24 -19
  30. package/dist/modules/requests/incoming/IncomingRequestsController.js.map +1 -1
  31. package/dist/modules/requests/itemProcessors/AbstractRequestItemProcessor.d.ts +19 -0
  32. package/dist/modules/requests/itemProcessors/AbstractRequestItemProcessor.js +10 -0
  33. package/dist/modules/requests/itemProcessors/AbstractRequestItemProcessor.js.map +1 -0
  34. package/dist/modules/requests/itemProcessors/GenericRequestItemProcessor.d.ts +10 -9
  35. package/dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js +10 -8
  36. package/dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js.map +1 -1
  37. package/dist/modules/requests/itemProcessors/IRequestItemProcessor.d.ts +7 -6
  38. package/dist/modules/requests/itemProcessors/ProcessorConstructor.d.ts +2 -1
  39. package/dist/modules/requests/itemProcessors/RequestItemProcessorRegistry.d.ts +3 -1
  40. package/dist/modules/requests/itemProcessors/RequestItemProcessorRegistry.js +3 -2
  41. package/dist/modules/requests/itemProcessors/RequestItemProcessorRegistry.js.map +1 -1
  42. package/dist/modules/requests/itemProcessors/ValidationResult.d.ts +4 -4
  43. package/dist/modules/requests/itemProcessors/ValidationResult.js +6 -6
  44. package/dist/modules/requests/itemProcessors/ValidationResult.js.map +1 -1
  45. package/dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.d.ts +10 -0
  46. package/dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.js +29 -0
  47. package/dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.js.map +1 -0
  48. package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.d.ts +10 -0
  49. package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.js +48 -0
  50. package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.js.map +1 -0
  51. package/dist/modules/requests/outgoing/OutgoingRequestsController.js +10 -10
  52. package/dist/modules/requests/outgoing/OutgoingRequestsController.js.map +1 -1
  53. package/lib-web/nmshd.consumption.js +9212 -186
  54. package/lib-web/nmshd.consumption.js.map +1 -1
  55. package/lib-web/nmshd.consumption.min.js +1 -1
  56. package/lib-web/nmshd.consumption.min.js.map +1 -1
  57. package/package.json +16 -13
  58. package/dist/modules/attributes/SuccedConsumptionAttributeParams.js.map +0 -1
  59. package/dist/modules/signatures/Signature.d.ts +0 -16
  60. package/dist/modules/signatures/Signature.js +0 -56
  61. package/dist/modules/signatures/Signature.js.map +0 -1
  62. package/dist/modules/signatures/SignatureContent.d.ts +0 -21
  63. package/dist/modules/signatures/SignatureContent.js +0 -59
  64. package/dist/modules/signatures/SignatureContent.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nmshd/consumption",
3
- "version": "2.0.0-alpha.14",
3
+ "version": "2.0.0-alpha.17",
4
4
  "description": "The consumption library extends the transport library.",
5
5
  "homepage": "https://enmeshed.eu",
6
6
  "repository": "github:nmshd/cns-consumption",
@@ -17,10 +17,6 @@
17
17
  "ui5.yaml"
18
18
  ],
19
19
  "scripts": {
20
- "lint": "npm run lint:prettier && npm run lint:eslint && npm run lint:tsc",
21
- "lint:prettier": "prettier --check .",
22
- "lint:eslint": "eslint --ext ts ./src ./test",
23
- "lint:tsc": "tsc --noEmit && tsc -p test/tsconfig.json --noEmit",
24
20
  "bt": "npm run test:node && npm run build:node && npm run build:test && npm run bundle && npm run test:web",
25
21
  "build": "npm run build:node && npm run build:test && npm run bundle",
26
22
  "build:ci": "npm run build:node && .ci/writeBuildInformation.sh && npm run build:test && npm run bundle",
@@ -31,19 +27,26 @@
31
27
  "bundle:min": "webpack --stats-all --config webpack.min.config.js",
32
28
  "bundle:test": "webpack --stats-all --config webpack.test.config.js",
33
29
  "cdep": "tsc && madge --circular dist",
30
+ "lint": "npm run lint:prettier && npm run lint:eslint && npm run lint:tsc",
31
+ "lint:eslint": "eslint --ext ts ./src ./test",
32
+ "lint:prettier": "prettier --check .",
33
+ "lint:tsc": "tsc --noEmit && tsc -p test/tsconfig.json --noEmit",
34
34
  "test": "npm run test:node && npm run test:web",
35
35
  "test:ci": "npm run test",
36
36
  "test:local": "npm run build && npm run test:local:node && npm run test:web",
37
37
  "test:local:node": ". ./scripts/testSetup.sh && npm run test:node",
38
- "test:local:node:mongodb": ". ./scripts/testSetup.sh && npm run test:node:mongodb",
39
38
  "test:local:node:lokijs": "npm run test:node:lokijs",
39
+ "test:local:node:mongodb": ". ./scripts/testSetup.sh && npm run test:node:mongodb",
40
40
  "test:local:teardown": "docker-compose -f test/docker-compose.yml rm -fsv",
41
41
  "test:node": "mocha -r ts-node/register -r tsconfig-paths/register ./test/index.node.ts --project ./test/tsconfig.json --exit",
42
- "test:node:mongodb": "mocha -r ts-node/register -r tsconfig-paths/register ./test/index.node.mongo.ts --project ./test/tsconfig.json --exit",
43
42
  "test:node:lokijs": "mocha -r ts-node/register -r tsconfig-paths/register ./test/index.node.loki.ts --project ./test/tsconfig.json --exit",
43
+ "test:node:mongodb": "mocha -r ts-node/register -r tsconfig-paths/register ./test/index.node.mongo.ts --project ./test/tsconfig.json --exit",
44
44
  "test:web": "browsertest-runner",
45
45
  "test:web:debug": "browsertest-runner-debug"
46
46
  },
47
+ "dependencies": {
48
+ "@js-soft/docdb-querytranslator": "^1.0.1"
49
+ },
47
50
  "devDependencies": {
48
51
  "@js-soft/docdb-access-loki": "1.0.2",
49
52
  "@js-soft/docdb-access-mongo": "1.0.5",
@@ -53,26 +56,26 @@
53
56
  "@js-soft/ts-serval": "2.0.3",
54
57
  "@js-soft/ts-utils": "1.1.2",
55
58
  "@js-soft/web-logger": "1.0.1",
56
- "@nmshd/content": "2.0.0-alpha.14",
59
+ "@nmshd/content": "2.0.0-alpha.24",
57
60
  "@nmshd/crypto": "2.0.1",
58
61
  "@nmshd/transport": "2.0.0-alpha.1",
59
62
  "@types/chai": "^4.3.1",
60
63
  "@types/glob": "^7.2.0",
61
64
  "@types/luxon": "^2.3.2",
62
65
  "@types/mocha": "^9.1.1",
63
- "@types/node": "^17.0.33",
66
+ "@types/node": "^17.0.36",
64
67
  "bt-runner": "^2.0.5",
65
68
  "chai": "^4.3.6",
66
- "copy-webpack-plugin": "^10.2.4",
67
- "eslint": "^8.15.0",
69
+ "copy-webpack-plugin": "^11.0.0",
70
+ "eslint": "^8.16.0",
68
71
  "madge": "^5.0.1",
69
72
  "mocha": "^10.0.0",
70
73
  "mocha-param": "^2.0.1",
71
74
  "prettier": "^2.6.2",
72
75
  "terser-webpack-plugin": "5.3.1",
73
- "ts-node": "^10.7.0",
76
+ "ts-node": "^10.8.0",
74
77
  "tsconfig-paths": "^4.0.0",
75
- "typescript": "^4.6.4",
78
+ "typescript": "^4.7.2",
76
79
  "webpack": "^5.72.1",
77
80
  "webpack-cli": "^4.9.2"
78
81
  },
@@ -1 +0,0 @@
1
- {"version":3,"file":"SuccedConsumptionAttributeParams.js","sourceRoot":"","sources":["../../../src/modules/attributes/SuccedConsumptionAttributeParams.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAAqF;AACrF,4CAAqH;AACrH,gDAAkD;AAOlD,MAAa,iCAAkC,SAAQ,wBAAY;IASxD,MAAM,CAAC,IAAI,CAAC,KAAyC;QACxD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;CACJ;AATG;IAFC,IAAA,qBAAS,EAAC,EAAE,UAAU,EAAE,CAAC,2BAAiB,EAAE,+BAAqB,CAAC,EAAE,CAAC;IACrE,IAAA,oBAAQ,GAAE;;2EACuD;AAIlE;IAFC,IAAA,qBAAS,GAAE;IACX,IAAA,oBAAQ,GAAE;8BACM,kBAAM;mEAAA;AAP3B,8EAYC"}
@@ -1,16 +0,0 @@
1
- import { CryptoSignature, CryptoSignaturePublicKey } from "@nmshd/crypto";
2
- import { CoreSerializable, ICoreSerializable } from "@nmshd/transport";
3
- import { ISignatureContent, SignatureContent } from "./SignatureContent";
4
- export interface ISignature extends ICoreSerializable {
5
- content: ISignatureContent;
6
- signature: string;
7
- }
8
- export declare class Signature extends CoreSerializable {
9
- content: SignatureContent;
10
- signature: CryptoSignature;
11
- protected static preFrom(value: any): any;
12
- static from(value: ISignature): Signature;
13
- verify(content: string, publicKey: CryptoSignaturePublicKey): Promise<boolean>;
14
- toJSON(): object;
15
- serialize(): string;
16
- }
@@ -1,56 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.Signature = void 0;
13
- const ts_serval_1 = require("@js-soft/ts-serval");
14
- const crypto_1 = require("@nmshd/crypto");
15
- const transport_1 = require("@nmshd/transport");
16
- const SignatureContent_1 = require("./SignatureContent");
17
- let Signature = class Signature extends transport_1.CoreSerializable {
18
- static preFrom(value) {
19
- if (value.signature instanceof crypto_1.CryptoSignature) {
20
- value.signature = crypto_1.CryptoSignature.fromBase64(value.signature);
21
- }
22
- return value;
23
- }
24
- static from(value) {
25
- return this.fromAny(value);
26
- }
27
- async verify(content, publicKey) {
28
- const hash = await crypto_1.CryptoHash.hash(crypto_1.CoreBuffer.fromUtf8(content), this.content.hashAlgorithm);
29
- if (hash.toBase64() !== this.content.hash.hash)
30
- return false;
31
- const str = this.content.serialize();
32
- const correct = await transport_1.CoreCrypto.verify(crypto_1.CoreBuffer.fromUtf8(str), this.signature, publicKey);
33
- return correct;
34
- }
35
- toJSON() {
36
- return { content: this.content.toJSON(), signature: this.signature.toBase64() };
37
- }
38
- serialize() {
39
- return JSON.stringify(this.toJSON());
40
- }
41
- };
42
- __decorate([
43
- (0, ts_serval_1.validate)(),
44
- (0, ts_serval_1.serialize)(),
45
- __metadata("design:type", SignatureContent_1.SignatureContent)
46
- ], Signature.prototype, "content", void 0);
47
- __decorate([
48
- (0, ts_serval_1.validate)(),
49
- (0, ts_serval_1.serialize)(),
50
- __metadata("design:type", crypto_1.CryptoSignature)
51
- ], Signature.prototype, "signature", void 0);
52
- Signature = __decorate([
53
- (0, ts_serval_1.type)("Signature")
54
- ], Signature);
55
- exports.Signature = Signature;
56
- //# sourceMappingURL=Signature.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Signature.js","sourceRoot":"","sources":["../../../src/modules/signatures/Signature.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAA8D;AAC9D,0CAAiG;AACjG,gDAAkF;AAClF,yDAAwE;AAQxE,IAAa,SAAS,GAAtB,MAAa,SAAU,SAAQ,4BAAgB;IASjC,MAAM,CAAU,OAAO,CAAC,KAAU;QACxC,IAAI,KAAK,CAAC,SAAS,YAAY,wBAAe,EAAE;YAC5C,KAAK,CAAC,SAAS,GAAG,wBAAe,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;SAChE;QAED,OAAO,KAAK,CAAA;IAChB,CAAC;IAEM,MAAM,CAAC,IAAI,CAAC,KAAiB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,SAAmC;QACpE,MAAM,IAAI,GAAG,MAAM,mBAAU,CAAC,IAAI,CAAC,mBAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QAC5F,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAA;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAA;QACpC,MAAM,OAAO,GAAG,MAAM,sBAAU,CAAC,MAAM,CAAC,mBAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC5F,OAAO,OAAO,CAAA;IAClB,CAAC;IAEe,MAAM;QAClB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAA;IACnF,CAAC;IAEe,SAAS;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;IACxC,CAAC;CACJ,CAAA;AAjCG;IAFC,IAAA,oBAAQ,GAAE;IACV,IAAA,qBAAS,GAAE;8BACI,mCAAgB;0CAAA;AAIhC;IAFC,IAAA,oBAAQ,GAAE;IACV,IAAA,qBAAS,GAAE;8BACM,wBAAe;4CAAA;AAPxB,SAAS;IADrB,IAAA,gBAAI,EAAC,WAAW,CAAC;GACL,SAAS,CAoCrB;AApCY,8BAAS"}
@@ -1,21 +0,0 @@
1
- import { CryptoHashAlgorithm, CryptoSignatureAlgorithm } from "@nmshd/crypto";
2
- import { CoreAddress, CoreDate, CoreHash, CoreId, CoreSerializable, ICoreSerializable } from "@nmshd/transport";
3
- export interface ISignatureContent extends ICoreSerializable {
4
- version: number;
5
- signatureAlgorithm: CryptoSignatureAlgorithm;
6
- hashAlgorithm: CryptoHashAlgorithm;
7
- signedAt: string;
8
- signer: string;
9
- keyId: string;
10
- hash: string;
11
- }
12
- export declare class SignatureContent extends CoreSerializable {
13
- version: number;
14
- signatureAlgorithm: CryptoSignatureAlgorithm;
15
- hashAlgorithm: CryptoHashAlgorithm;
16
- signedAt: CoreDate;
17
- signer: CoreAddress;
18
- keyId: CoreId;
19
- hash: CoreHash;
20
- static from(value: ISignatureContent): SignatureContent;
21
- }
@@ -1,59 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.SignatureContent = void 0;
13
- const ts_serval_1 = require("@js-soft/ts-serval");
14
- const transport_1 = require("@nmshd/transport");
15
- let SignatureContent = class SignatureContent extends transport_1.CoreSerializable {
16
- static from(value) {
17
- return this.fromAny(value);
18
- }
19
- };
20
- __decorate([
21
- (0, ts_serval_1.validate)(),
22
- (0, ts_serval_1.serialize)(),
23
- __metadata("design:type", Number)
24
- ], SignatureContent.prototype, "version", void 0);
25
- __decorate([
26
- (0, ts_serval_1.validate)(),
27
- (0, ts_serval_1.serialize)(),
28
- __metadata("design:type", Number)
29
- ], SignatureContent.prototype, "signatureAlgorithm", void 0);
30
- __decorate([
31
- (0, ts_serval_1.validate)(),
32
- (0, ts_serval_1.serialize)(),
33
- __metadata("design:type", Number)
34
- ], SignatureContent.prototype, "hashAlgorithm", void 0);
35
- __decorate([
36
- (0, ts_serval_1.validate)(),
37
- (0, ts_serval_1.serialize)(),
38
- __metadata("design:type", transport_1.CoreDate)
39
- ], SignatureContent.prototype, "signedAt", void 0);
40
- __decorate([
41
- (0, ts_serval_1.validate)(),
42
- (0, ts_serval_1.serialize)(),
43
- __metadata("design:type", transport_1.CoreAddress)
44
- ], SignatureContent.prototype, "signer", void 0);
45
- __decorate([
46
- (0, ts_serval_1.validate)(),
47
- (0, ts_serval_1.serialize)(),
48
- __metadata("design:type", transport_1.CoreId)
49
- ], SignatureContent.prototype, "keyId", void 0);
50
- __decorate([
51
- (0, ts_serval_1.validate)(),
52
- (0, ts_serval_1.serialize)(),
53
- __metadata("design:type", transport_1.CoreHash)
54
- ], SignatureContent.prototype, "hash", void 0);
55
- SignatureContent = __decorate([
56
- (0, ts_serval_1.type)("SignatureContent")
57
- ], SignatureContent);
58
- exports.SignatureContent = SignatureContent;
59
- //# sourceMappingURL=SignatureContent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SignatureContent.js","sourceRoot":"","sources":["../../../src/modules/signatures/SignatureContent.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAA8D;AAE9D,gDAA+G;AAa/G,IAAa,gBAAgB,GAA7B,MAAa,gBAAiB,SAAQ,4BAAgB;IA6B3C,MAAM,CAAC,IAAI,CAAC,KAAwB;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;CACJ,CAAA;AA7BG;IAFC,IAAA,oBAAQ,GAAE;IACV,IAAA,qBAAS,GAAE;;iDACU;AAItB;IAFC,IAAA,oBAAQ,GAAE;IACV,IAAA,qBAAS,GAAE;;4DACuC;AAInD;IAFC,IAAA,oBAAQ,GAAE;IACV,IAAA,qBAAS,GAAE;;uDAC6B;AAIzC;IAFC,IAAA,oBAAQ,GAAE;IACV,IAAA,qBAAS,GAAE;8BACK,oBAAQ;kDAAA;AAIzB;IAFC,IAAA,oBAAQ,GAAE;IACV,IAAA,qBAAS,GAAE;8BACG,uBAAW;gDAAA;AAI1B;IAFC,IAAA,oBAAQ,GAAE;IACV,IAAA,qBAAS,GAAE;8BACE,kBAAM;+CAAA;AAIpB;IAFC,IAAA,oBAAQ,GAAE;IACV,IAAA,qBAAS,GAAE;8BACC,oBAAQ;8CAAA;AA3BZ,gBAAgB;IAD5B,IAAA,gBAAI,EAAC,kBAAkB,CAAC;GACZ,gBAAgB,CAgC5B;AAhCY,4CAAgB"}