@contractspec/example.versioned-knowledge-base 1.57.0 → 1.59.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.
Files changed (76) hide show
  1. package/.turbo/turbo-build.log +52 -52
  2. package/.turbo/turbo-prebuild.log +1 -0
  3. package/CHANGELOG.md +25 -0
  4. package/dist/browser/docs/index.js +44 -0
  5. package/dist/browser/docs/versioned-knowledge-base.docblock.js +44 -0
  6. package/dist/browser/entities/index.js +74 -0
  7. package/dist/browser/entities/models.js +74 -0
  8. package/dist/browser/events.js +101 -0
  9. package/dist/browser/example.js +35 -0
  10. package/dist/browser/handlers/index.js +115 -0
  11. package/dist/browser/handlers/memory.handlers.js +115 -0
  12. package/dist/browser/index.js +586 -0
  13. package/dist/browser/operations/index.js +257 -0
  14. package/dist/browser/operations/kb.js +257 -0
  15. package/dist/browser/versioned-knowledge-base.feature.js +36 -0
  16. package/dist/docs/index.d.ts +2 -1
  17. package/dist/docs/index.d.ts.map +1 -0
  18. package/dist/docs/index.js +45 -1
  19. package/dist/docs/versioned-knowledge-base.docblock.d.ts +2 -1
  20. package/dist/docs/versioned-knowledge-base.docblock.d.ts.map +1 -0
  21. package/dist/docs/versioned-knowledge-base.docblock.js +42 -28
  22. package/dist/entities/index.d.ts +2 -2
  23. package/dist/entities/index.d.ts.map +1 -0
  24. package/dist/entities/index.js +75 -3
  25. package/dist/entities/models.d.ts +127 -132
  26. package/dist/entities/models.d.ts.map +1 -1
  27. package/dist/entities/models.js +69 -145
  28. package/dist/events.d.ts +52 -58
  29. package/dist/events.d.ts.map +1 -1
  30. package/dist/events.js +92 -114
  31. package/dist/example.d.ts +2 -6
  32. package/dist/example.d.ts.map +1 -1
  33. package/dist/example.js +34 -46
  34. package/dist/handlers/index.d.ts +2 -2
  35. package/dist/handlers/index.d.ts.map +1 -0
  36. package/dist/handlers/index.js +116 -3
  37. package/dist/handlers/memory.handlers.d.ts +62 -64
  38. package/dist/handlers/memory.handlers.d.ts.map +1 -1
  39. package/dist/handlers/memory.handlers.js +110 -97
  40. package/dist/handlers/memory.handlers.test.d.ts +2 -0
  41. package/dist/handlers/memory.handlers.test.d.ts.map +1 -0
  42. package/dist/index.d.ts +13 -9
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +587 -11
  45. package/dist/node/docs/index.js +44 -0
  46. package/dist/node/docs/versioned-knowledge-base.docblock.js +44 -0
  47. package/dist/node/entities/index.js +74 -0
  48. package/dist/node/entities/models.js +74 -0
  49. package/dist/node/events.js +101 -0
  50. package/dist/node/example.js +35 -0
  51. package/dist/node/handlers/index.js +115 -0
  52. package/dist/node/handlers/memory.handlers.js +115 -0
  53. package/dist/node/index.js +586 -0
  54. package/dist/node/operations/index.js +257 -0
  55. package/dist/node/operations/kb.js +257 -0
  56. package/dist/node/versioned-knowledge-base.feature.js +36 -0
  57. package/dist/operations/index.d.ts +2 -2
  58. package/dist/operations/index.d.ts.map +1 -0
  59. package/dist/operations/index.js +257 -2
  60. package/dist/operations/kb.d.ts +252 -258
  61. package/dist/operations/kb.d.ts.map +1 -1
  62. package/dist/operations/kb.js +246 -244
  63. package/dist/versioned-knowledge-base.feature.d.ts +1 -6
  64. package/dist/versioned-knowledge-base.feature.d.ts.map +1 -1
  65. package/dist/versioned-knowledge-base.feature.js +35 -68
  66. package/package.json +141 -38
  67. package/tsdown.config.js +1 -2
  68. package/.turbo/turbo-build$colon$bundle.log +0 -52
  69. package/dist/docs/versioned-knowledge-base.docblock.js.map +0 -1
  70. package/dist/entities/models.js.map +0 -1
  71. package/dist/events.js.map +0 -1
  72. package/dist/example.js.map +0 -1
  73. package/dist/handlers/memory.handlers.js.map +0 -1
  74. package/dist/operations/kb.js.map +0 -1
  75. package/dist/versioned-knowledge-base.feature.js.map +0 -1
  76. package/tsconfig.tsbuildinfo +0 -1
@@ -1,78 +1,76 @@
1
- //#region src/handlers/memory.handlers.d.ts
2
1
  interface SourceRef {
3
- sourceDocumentId: string;
4
- excerpt?: string;
2
+ sourceDocumentId: string;
3
+ excerpt?: string;
5
4
  }
6
5
  interface SourceDocument {
7
- id: string;
8
- jurisdiction: string;
9
- authority: string;
10
- title: string;
11
- fetchedAt: Date;
12
- hash: string;
13
- fileId: string;
6
+ id: string;
7
+ jurisdiction: string;
8
+ authority: string;
9
+ title: string;
10
+ fetchedAt: Date;
11
+ hash: string;
12
+ fileId: string;
14
13
  }
15
14
  interface Rule {
16
- id: string;
17
- jurisdiction: string;
18
- topicKey: string;
15
+ id: string;
16
+ jurisdiction: string;
17
+ topicKey: string;
19
18
  }
20
19
  interface RuleVersion {
21
- id: string;
22
- ruleId: string;
23
- jurisdiction: string;
24
- topicKey: string;
25
- version: string;
26
- content: string;
27
- sourceRefs: SourceRef[];
28
- status: 'draft' | 'approved' | 'rejected';
29
- approvedBy?: string;
30
- approvedAt?: Date;
31
- createdAt: Date;
32
- }
33
- interface KBSnapshot {
34
- id: string;
35
- jurisdiction: string;
36
- asOfDate: Date;
37
- includedRuleVersionIds: string[];
38
- publishedAt: Date;
39
- }
40
- interface MemoryKbStore {
41
- sources: Map<string, SourceDocument>;
42
- rules: Map<string, Rule>;
43
- ruleVersions: Map<string, RuleVersion>;
44
- snapshots: Map<string, KBSnapshot>;
45
- nextRuleVersionNumberByRuleId: Map<string, number>;
46
- }
47
- declare function createMemoryKbStore(): MemoryKbStore;
48
- interface MemoryKbHandlers {
49
- createRule(rule: Rule): Promise<Rule>;
50
- ingestSource(input: Omit<SourceDocument, 'id'>): Promise<SourceDocument>;
51
- upsertRuleVersion(input: {
20
+ id: string;
52
21
  ruleId: string;
22
+ jurisdiction: string;
23
+ topicKey: string;
24
+ version: string;
53
25
  content: string;
54
26
  sourceRefs: SourceRef[];
55
- }): Promise<RuleVersion>;
56
- approveRuleVersion(input: {
57
- ruleVersionId: string;
58
- approver: string;
59
- }): Promise<RuleVersion>;
60
- publishSnapshot(input: {
27
+ status: 'draft' | 'approved' | 'rejected';
28
+ approvedBy?: string;
29
+ approvedAt?: Date;
30
+ createdAt: Date;
31
+ }
32
+ interface KBSnapshot {
33
+ id: string;
61
34
  jurisdiction: string;
62
35
  asOfDate: Date;
63
- }): Promise<KBSnapshot>;
64
- search(input: {
65
- snapshotId: string;
66
- jurisdiction: string;
67
- query: string;
68
- }): Promise<{
69
- items: {
70
- ruleVersionId: string;
71
- excerpt?: string;
72
- }[];
73
- }>;
36
+ includedRuleVersionIds: string[];
37
+ publishedAt: Date;
38
+ }
39
+ export interface MemoryKbStore {
40
+ sources: Map<string, SourceDocument>;
41
+ rules: Map<string, Rule>;
42
+ ruleVersions: Map<string, RuleVersion>;
43
+ snapshots: Map<string, KBSnapshot>;
44
+ nextRuleVersionNumberByRuleId: Map<string, number>;
45
+ }
46
+ export declare function createMemoryKbStore(): MemoryKbStore;
47
+ export interface MemoryKbHandlers {
48
+ createRule(rule: Rule): Promise<Rule>;
49
+ ingestSource(input: Omit<SourceDocument, 'id'>): Promise<SourceDocument>;
50
+ upsertRuleVersion(input: {
51
+ ruleId: string;
52
+ content: string;
53
+ sourceRefs: SourceRef[];
54
+ }): Promise<RuleVersion>;
55
+ approveRuleVersion(input: {
56
+ ruleVersionId: string;
57
+ approver: string;
58
+ }): Promise<RuleVersion>;
59
+ publishSnapshot(input: {
60
+ jurisdiction: string;
61
+ asOfDate: Date;
62
+ }): Promise<KBSnapshot>;
63
+ search(input: {
64
+ snapshotId: string;
65
+ jurisdiction: string;
66
+ query: string;
67
+ }): Promise<{
68
+ items: {
69
+ ruleVersionId: string;
70
+ excerpt?: string;
71
+ }[];
72
+ }>;
74
73
  }
75
- declare function createMemoryKbHandlers(store: MemoryKbStore): MemoryKbHandlers;
76
- //#endregion
77
- export { MemoryKbHandlers, MemoryKbStore, createMemoryKbHandlers, createMemoryKbStore };
74
+ export declare function createMemoryKbHandlers(store: MemoryKbStore): MemoryKbHandlers;
75
+ export {};
78
76
  //# sourceMappingURL=memory.handlers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory.handlers.d.ts","names":[],"sources":["../../src/handlers/memory.handlers.ts"],"mappings":";UAAU,SAAA;EACR,gBAAA;EACA,OAAA;AAAA;AAAA,UAEQ,cAAA;EACR,EAAA;EACA,YAAA;EACA,SAAA;EACA,KAAA;EACA,SAAA,EAAW,IAAA;EACX,IAAA;EACA,MAAA;AAAA;AAAA,UAEQ,IAAA;EACR,EAAA;EACA,YAAA;EACA,QAAA;AAAA;AAAA,UAEQ,WAAA;EACR,EAAA;EACA,MAAA;EACA,YAAA;EACA,QAAA;EACA,OAAA;EACA,OAAA;EACA,UAAA,EAAY,SAAA;EACZ,MAAA;EACA,UAAA;EACA,UAAA,GAAa,IAAA;EACb,SAAA,EAAW,IAAA;AAAA;AAAA,UAEH,UAAA;EACR,EAAA;EACA,YAAA;EACA,QAAA,EAAU,IAAA;EACV,sBAAA;EACA,WAAA,EAAa,IAAA;AAAA;AAAA,UAGE,aAAA;EACf,OAAA,EAAS,GAAA,SAAY,cAAA;EACrB,KAAA,EAAO,GAAA,SAAY,IAAA;EACnB,YAAA,EAAc,GAAA,SAAY,WAAA;EAC1B,SAAA,EAAW,GAAA,SAAY,UAAA;EACvB,6BAAA,EAA+B,GAAA;AAAA;AAAA,iBAGjB,mBAAA,CAAA,GAAuB,aAAA;AAAA,UAUtB,gBAAA;EACf,UAAA,CAAW,IAAA,EAAM,IAAA,GAAO,OAAA,CAAQ,IAAA;EAChC,YAAA,CAAa,KAAA,EAAO,IAAA,CAAK,cAAA,UAAwB,OAAA,CAAQ,cAAA;EACzD,iBAAA,CAAkB,KAAA;IAChB,MAAA;IACA,OAAA;IACA,UAAA,EAAY,SAAA;EAAA,IACV,OAAA,CAAQ,WAAA;EACZ,kBAAA,CAAmB,KAAA;IACjB,aAAA;IACA,QAAA;EAAA,IACE,OAAA,CAAQ,WAAA;EACZ,eAAA,CAAgB,KAAA;IACd,YAAA;IACA,QAAA,EAAU,IAAA;EAAA,IACR,OAAA,CAAQ,UAAA;EACZ,MAAA,CAAO,KAAA;IACL,UAAA;IACA,YAAA;IACA,KAAA;EAAA,IACE,OAAA;IAAU,KAAA;MAAS,aAAA;MAAuB,OAAA;IAAA;EAAA;AAAA;AAAA,iBAOhC,sBAAA,CAAuB,KAAA,EAAO,aAAA,GAAgB,gBAAA"}
1
+ {"version":3,"file":"memory.handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/memory.handlers.ts"],"names":[],"mappings":"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"}
@@ -1,103 +1,116 @@
1
- //#region src/handlers/memory.handlers.ts
1
+ // @bun
2
+ // src/handlers/memory.handlers.ts
2
3
  function createMemoryKbStore() {
3
- return {
4
- sources: /* @__PURE__ */ new Map(),
5
- rules: /* @__PURE__ */ new Map(),
6
- ruleVersions: /* @__PURE__ */ new Map(),
7
- snapshots: /* @__PURE__ */ new Map(),
8
- nextRuleVersionNumberByRuleId: /* @__PURE__ */ new Map()
9
- };
4
+ return {
5
+ sources: new Map,
6
+ rules: new Map,
7
+ ruleVersions: new Map,
8
+ snapshots: new Map,
9
+ nextRuleVersionNumberByRuleId: new Map
10
+ };
10
11
  }
11
12
  function stableId(prefix, value) {
12
- return `${prefix}_${value.replace(/[^a-zA-Z0-9_-]/g, "_")}`;
13
+ return `${prefix}_${value.replace(/[^a-zA-Z0-9_-]/g, "_")}`;
13
14
  }
14
15
  function createMemoryKbHandlers(store) {
15
- async function createRule(rule) {
16
- store.rules.set(rule.id, rule);
17
- return rule;
18
- }
19
- async function ingestSource(input) {
20
- const id = stableId("src", `${input.jurisdiction}_${input.hash}`);
21
- const doc = {
22
- id,
23
- ...input
24
- };
25
- store.sources.set(id, doc);
26
- return doc;
27
- }
28
- async function upsertRuleVersion(input) {
29
- if (!input.sourceRefs.length) throw new Error("SOURCE_REFS_REQUIRED");
30
- const rule = store.rules.get(input.ruleId);
31
- if (!rule) throw new Error("RULE_NOT_FOUND");
32
- const next = (store.nextRuleVersionNumberByRuleId.get(input.ruleId) ?? 0) + 1;
33
- const id = stableId("rv", `${input.ruleId}_${next}`);
34
- const ruleVersion = {
35
- id,
36
- ruleId: input.ruleId,
37
- jurisdiction: rule.jurisdiction,
38
- topicKey: rule.topicKey,
39
- version: next.toString(),
40
- content: input.content,
41
- sourceRefs: input.sourceRefs,
42
- status: "draft",
43
- createdAt: /* @__PURE__ */ new Date(),
44
- approvedAt: void 0,
45
- approvedBy: void 0
46
- };
47
- store.ruleVersions.set(id, ruleVersion);
48
- return ruleVersion;
49
- }
50
- async function approveRuleVersion(input) {
51
- const existing = store.ruleVersions.get(input.ruleVersionId);
52
- if (!existing) throw new Error("RULE_VERSION_NOT_FOUND");
53
- const approved = {
54
- ...existing,
55
- status: "approved",
56
- approvedBy: input.approver,
57
- approvedAt: /* @__PURE__ */ new Date()
58
- };
59
- store.ruleVersions.set(approved.id, approved);
60
- return approved;
61
- }
62
- async function publishSnapshot(input) {
63
- const approved = [...store.ruleVersions.values()].filter((rv) => rv.status === "approved" && rv.jurisdiction === input.jurisdiction);
64
- if (approved.length === 0) throw new Error("NO_APPROVED_RULES");
65
- const includedRuleVersionIds = approved.map((rv) => rv.id).sort();
66
- const id = stableId("snap", `${input.jurisdiction}_${input.asOfDate.toISOString().slice(0, 10)}_${includedRuleVersionIds.length}`);
67
- const snapshot = {
68
- id,
69
- jurisdiction: input.jurisdiction,
70
- asOfDate: input.asOfDate,
71
- includedRuleVersionIds,
72
- publishedAt: /* @__PURE__ */ new Date()
73
- };
74
- store.snapshots.set(id, snapshot);
75
- return snapshot;
76
- }
77
- async function search(input) {
78
- const snapshot = store.snapshots.get(input.snapshotId);
79
- if (!snapshot) throw new Error("SNAPSHOT_NOT_FOUND");
80
- if (snapshot.jurisdiction !== input.jurisdiction) throw new Error("JURISDICTION_MISMATCH");
81
- const tokens = input.query.toLowerCase().split(/\s+/).map((t) => t.trim()).filter(Boolean);
82
- return { items: snapshot.includedRuleVersionIds.map((id) => store.ruleVersions.get(id)).filter((rv) => Boolean(rv)).filter((rv) => {
83
- if (tokens.length === 0) return true;
84
- const hay = rv.content.toLowerCase();
85
- return tokens.every((token) => hay.includes(token));
86
- }).map((rv) => ({
87
- ruleVersionId: rv.id,
88
- excerpt: rv.content.slice(0, 120)
89
- })) };
90
- }
91
- return {
92
- createRule,
93
- ingestSource,
94
- upsertRuleVersion,
95
- approveRuleVersion,
96
- publishSnapshot,
97
- search
98
- };
16
+ async function createRule(rule) {
17
+ store.rules.set(rule.id, rule);
18
+ return rule;
19
+ }
20
+ async function ingestSource(input) {
21
+ const id = stableId("src", `${input.jurisdiction}_${input.hash}`);
22
+ const doc = { id, ...input };
23
+ store.sources.set(id, doc);
24
+ return doc;
25
+ }
26
+ async function upsertRuleVersion(input) {
27
+ if (!input.sourceRefs.length) {
28
+ throw new Error("SOURCE_REFS_REQUIRED");
29
+ }
30
+ const rule = store.rules.get(input.ruleId);
31
+ if (!rule) {
32
+ throw new Error("RULE_NOT_FOUND");
33
+ }
34
+ const next = (store.nextRuleVersionNumberByRuleId.get(input.ruleId) ?? 0) + 1;
35
+ const id = stableId("rv", `${input.ruleId}_${next}`);
36
+ const ruleVersion = {
37
+ id,
38
+ ruleId: input.ruleId,
39
+ jurisdiction: rule.jurisdiction,
40
+ topicKey: rule.topicKey,
41
+ version: next.toString(),
42
+ content: input.content,
43
+ sourceRefs: input.sourceRefs,
44
+ status: "draft",
45
+ createdAt: new Date,
46
+ approvedAt: undefined,
47
+ approvedBy: undefined
48
+ };
49
+ store.ruleVersions.set(id, ruleVersion);
50
+ return ruleVersion;
51
+ }
52
+ async function approveRuleVersion(input) {
53
+ const existing = store.ruleVersions.get(input.ruleVersionId);
54
+ if (!existing) {
55
+ throw new Error("RULE_VERSION_NOT_FOUND");
56
+ }
57
+ const approved = {
58
+ ...existing,
59
+ status: "approved",
60
+ approvedBy: input.approver,
61
+ approvedAt: new Date
62
+ };
63
+ store.ruleVersions.set(approved.id, approved);
64
+ return approved;
65
+ }
66
+ async function publishSnapshot(input) {
67
+ const approved = [...store.ruleVersions.values()].filter((rv) => rv.status === "approved" && rv.jurisdiction === input.jurisdiction);
68
+ if (approved.length === 0) {
69
+ throw new Error("NO_APPROVED_RULES");
70
+ }
71
+ const includedRuleVersionIds = approved.map((rv) => rv.id).sort();
72
+ const id = stableId("snap", `${input.jurisdiction}_${input.asOfDate.toISOString().slice(0, 10)}_${includedRuleVersionIds.length}`);
73
+ const snapshot = {
74
+ id,
75
+ jurisdiction: input.jurisdiction,
76
+ asOfDate: input.asOfDate,
77
+ includedRuleVersionIds,
78
+ publishedAt: new Date
79
+ };
80
+ store.snapshots.set(id, snapshot);
81
+ return snapshot;
82
+ }
83
+ async function search(input) {
84
+ const snapshot = store.snapshots.get(input.snapshotId);
85
+ if (!snapshot) {
86
+ throw new Error("SNAPSHOT_NOT_FOUND");
87
+ }
88
+ if (snapshot.jurisdiction !== input.jurisdiction) {
89
+ throw new Error("JURISDICTION_MISMATCH");
90
+ }
91
+ const q = input.query.toLowerCase();
92
+ const tokens = q.split(/\s+/).map((t) => t.trim()).filter(Boolean);
93
+ const items = snapshot.includedRuleVersionIds.map((id) => store.ruleVersions.get(id)).filter((rv) => Boolean(rv)).filter((rv) => {
94
+ if (tokens.length === 0)
95
+ return true;
96
+ const hay = rv.content.toLowerCase();
97
+ return tokens.every((token) => hay.includes(token));
98
+ }).map((rv) => ({
99
+ ruleVersionId: rv.id,
100
+ excerpt: rv.content.slice(0, 120)
101
+ }));
102
+ return { items };
103
+ }
104
+ return {
105
+ createRule,
106
+ ingestSource,
107
+ upsertRuleVersion,
108
+ approveRuleVersion,
109
+ publishSnapshot,
110
+ search
111
+ };
99
112
  }
100
-
101
- //#endregion
102
- export { createMemoryKbHandlers, createMemoryKbStore };
103
- //# sourceMappingURL=memory.handlers.js.map
113
+ export {
114
+ createMemoryKbStore,
115
+ createMemoryKbHandlers
116
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=memory.handlers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.handlers.test.d.ts","sourceRoot":"","sources":["../../src/handlers/memory.handlers.test.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,13 @@
1
- import { KBSnapshotModel, RuleModel, RuleVersionModel, SourceDocumentModel, SourceRefModel } from "./entities/models.js";
2
- import "./entities/index.js";
3
- import { KbRuleVersionApprovedEvent, KbRuleVersionCreatedEvent, KbSnapshotPublishedEvent, KbSourceIngestedEvent } from "./events.js";
4
- import example from "./example.js";
5
- import { MemoryKbHandlers, MemoryKbStore, createMemoryKbHandlers, createMemoryKbStore } from "./handlers/memory.handlers.js";
6
- import { KbApproveRuleVersionContract, KbIngestSourceContract, KbPublishSnapshotContract, KbSearchContract, KbUpsertRuleVersionContract } from "./operations/kb.js";
7
- import "./operations/index.js";
8
- import { VersionedKnowledgeBaseFeature } from "./versioned-knowledge-base.feature.js";
9
- export { KBSnapshotModel, KbApproveRuleVersionContract, KbIngestSourceContract, KbPublishSnapshotContract, KbRuleVersionApprovedEvent, KbRuleVersionCreatedEvent, KbSearchContract, KbSnapshotPublishedEvent, KbSourceIngestedEvent, KbUpsertRuleVersionContract, MemoryKbHandlers, MemoryKbStore, RuleModel, RuleVersionModel, SourceDocumentModel, SourceRefModel, VersionedKnowledgeBaseFeature, createMemoryKbHandlers, createMemoryKbStore, example };
1
+ /**
2
+ * Versioned Knowledge Base Example
3
+ *
4
+ * Curated KB with immutable sources, reviewable rule versions, and published snapshots.
5
+ */
6
+ export * from './entities';
7
+ export * from './operations';
8
+ export * from './events';
9
+ export * from './handlers';
10
+ export * from './versioned-knowledge-base.feature';
11
+ export { default as example } from './example';
12
+ import './docs';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,oCAAoC,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,QAAQ,CAAC"}