@mneme-ai/core 2.88.0 → 2.89.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/dist/agent_manifest.d.ts.map +1 -1
- package/dist/agent_manifest.js +2 -0
- package/dist/agent_manifest.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/truth_gate/claims.d.ts.map +1 -1
- package/dist/truth_gate/claims.js +7 -0
- package/dist/truth_gate/claims.js.map +1 -1
- package/dist/truth_gate/probes.d.ts.map +1 -1
- package/dist/truth_gate/probes.js +37 -0
- package/dist/truth_gate/probes.js.map +1 -1
- package/dist/truth_kernel/aletheia.d.ts +12 -0
- package/dist/truth_kernel/aletheia.d.ts.map +1 -1
- package/dist/truth_kernel/aletheia.js +15 -1
- package/dist/truth_kernel/aletheia.js.map +1 -1
- package/dist/truth_kernel/lattice.d.ts +141 -0
- package/dist/truth_kernel/lattice.d.ts.map +1 -0
- package/dist/truth_kernel/lattice.js +315 -0
- package/dist/truth_kernel/lattice.js.map +1 -0
- package/dist/truth_kernel/lattice.test.d.ts +18 -0
- package/dist/truth_kernel/lattice.test.d.ts.map +1 -0
- package/dist/truth_kernel/lattice.test.js +175 -0
- package/dist/truth_kernel/lattice.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.89.0 — 💎 AXIOM LATTICE tests (ALETHEIA's living proof graph).
|
|
3
|
+
*
|
|
4
|
+
* L1 record + read round-trip; node is signed + hash-chained
|
|
5
|
+
* L2 contradiction: opposite-verdict (same subject, TRUE vs FALSE)
|
|
6
|
+
* L3 contradiction: negation-pair (X vs not-X, both TRUE)
|
|
7
|
+
* L4 contradiction: value-conflict (subject = two different values, both TRUE)
|
|
8
|
+
* L5 no false contradiction across DIFFERENT subjects / against UNKNOWN
|
|
9
|
+
* L6 whyTrue walks the proof to bedrock (deterministic) through dependencies
|
|
10
|
+
* L7 retract CASCADE — dependents → PENDING_REVERIFY + signed frame
|
|
11
|
+
* L8 verifyLattice OFFLINE — clean chain ok; tamper the body → caught; forge a
|
|
12
|
+
* receipt verdict → caught; break the chain (delete a middle node) → caught
|
|
13
|
+
* L9 latticeStatus counts (active/retracted/pending) + open contradictions
|
|
14
|
+
* L10 QUAN — never throws over fuzz; chain stays valid across N random records
|
|
15
|
+
* L11 assertClaim({record}) persists + surfaces contradictions end-to-end
|
|
16
|
+
*/
|
|
17
|
+
import { describe, it, expect } from "vitest";
|
|
18
|
+
import { mkdtempSync, writeFileSync } from "node:fs";
|
|
19
|
+
import { tmpdir } from "node:os";
|
|
20
|
+
import { join } from "node:path";
|
|
21
|
+
import { recordAssertion, detectContradictions, whyTrue, retract, latticeStatus, verifyLattice, readLattice, normalizeSubject, } from "./lattice.js";
|
|
22
|
+
import { assertClaim } from "./aletheia.js";
|
|
23
|
+
function repo() { return mkdtempSync(join(tmpdir(), "lattice-")); }
|
|
24
|
+
const T = 1_700_000_000_000;
|
|
25
|
+
function latPath(r) { return join(r, ".mneme", "aletheia", "lattice.jsonl"); }
|
|
26
|
+
describe("v2.89.0 💎 AXIOM LATTICE — ALETHEIA's living proof graph", () => {
|
|
27
|
+
it("L1 record + read round-trip; node is signed + hash-chained", () => {
|
|
28
|
+
const r = repo();
|
|
29
|
+
const a = recordAssertion(r, { claim: "2+2=4", verdict: "TRUE", pTrue: 1, lineageSummary: ["arithmetic"] }, { issuedAt: T });
|
|
30
|
+
expect(a.node.verdict).toBe("TRUE");
|
|
31
|
+
expect(a.node.receipt).not.toBeNull();
|
|
32
|
+
expect(a.node.prev).toBeNull(); // first node = root
|
|
33
|
+
const b = recordAssertion(r, { claim: "10*10=100", verdict: "TRUE", pTrue: 1, lineageSummary: ["arithmetic"] }, { issuedAt: T });
|
|
34
|
+
expect(b.node.prev).toBe(a.node.receipt.receiptId); // chained
|
|
35
|
+
expect(readLattice(r).length).toBe(2);
|
|
36
|
+
});
|
|
37
|
+
it("L2 contradiction: opposite-verdict", () => {
|
|
38
|
+
const r = repo();
|
|
39
|
+
recordAssertion(r, { claim: "2+2=4", verdict: "TRUE", pTrue: 1, lineageSummary: ["arithmetic"] }, { issuedAt: T });
|
|
40
|
+
const c = recordAssertion(r, { claim: "2+2=4", verdict: "FALSE", pTrue: 0, lineageSummary: ["arithmetic"] }, { issuedAt: T });
|
|
41
|
+
expect(c.contradictions.map((x) => x.kind)).toContain("opposite-verdict");
|
|
42
|
+
});
|
|
43
|
+
it("L3 contradiction: negation-pair", () => {
|
|
44
|
+
const r = repo();
|
|
45
|
+
recordAssertion(r, { claim: "mneme is written in TypeScript", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
|
|
46
|
+
const c = recordAssertion(r, { claim: "mneme is not written in TypeScript", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
|
|
47
|
+
expect(c.contradictions.map((x) => x.kind)).toContain("negation-pair");
|
|
48
|
+
});
|
|
49
|
+
it("L4 contradiction: value-conflict", () => {
|
|
50
|
+
const r = repo();
|
|
51
|
+
recordAssertion(r, { claim: "the project version is 1.2", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
|
|
52
|
+
const c = recordAssertion(r, { claim: "the project version is 1.3", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
|
|
53
|
+
expect(c.contradictions.map((x) => x.kind)).toContain("value-conflict");
|
|
54
|
+
});
|
|
55
|
+
it("L5 no false contradiction across different subjects / against UNKNOWN", () => {
|
|
56
|
+
const r = repo();
|
|
57
|
+
recordAssertion(r, { claim: "the sky is blue", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
|
|
58
|
+
expect(detectContradictions(r, "the grass is green", "TRUE").length).toBe(0); // different subject
|
|
59
|
+
expect(detectContradictions(r, "the sky is blue", "UNKNOWN").length).toBe(0); // UNKNOWN asserts nothing
|
|
60
|
+
// re-affirming the SAME claim+verdict is not a contradiction
|
|
61
|
+
expect(detectContradictions(r, "the sky is blue", "TRUE").length).toBe(0);
|
|
62
|
+
});
|
|
63
|
+
it("L6 whyTrue walks the proof to bedrock through dependencies", () => {
|
|
64
|
+
const r = repo();
|
|
65
|
+
const a = recordAssertion(r, { claim: "2+2=4", verdict: "TRUE", pTrue: 1, lineageSummary: ["arithmetic"] }, { issuedAt: T });
|
|
66
|
+
const b = recordAssertion(r, { claim: "the sum check passes", verdict: "TRUE", pTrue: 0.9, lineageSummary: ["apoptosis"] }, { issuedAt: T, dependsOn: [a.node.id] });
|
|
67
|
+
const w = whyTrue(r, b.node.id);
|
|
68
|
+
expect(w.found).toBe(true);
|
|
69
|
+
expect(w.proof.length).toBeGreaterThanOrEqual(2);
|
|
70
|
+
expect(w.proof.some((l) => l.includes("bedrock"))).toBe(true); // reaches the deterministic axiom
|
|
71
|
+
expect(whyTrue(r, "no such claim").found).toBe(false);
|
|
72
|
+
});
|
|
73
|
+
it("L7 retract CASCADE — dependents → PENDING_REVERIFY + signed frame", () => {
|
|
74
|
+
const r = repo();
|
|
75
|
+
const a = recordAssertion(r, { claim: "base fact", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
|
|
76
|
+
const b = recordAssertion(r, { claim: "derived from base", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T, dependsOn: [a.node.id] });
|
|
77
|
+
const c = recordAssertion(r, { claim: "derived from derived", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T, dependsOn: [b.node.id] });
|
|
78
|
+
const res = retract(r, a.node.id, "refuted", { issuedAt: T });
|
|
79
|
+
expect(res.retracted).toContain(a.node.id);
|
|
80
|
+
expect(res.cascade).toContain(b.node.id); // direct dependent
|
|
81
|
+
expect(res.cascade).toContain(c.node.id); // transitive dependent
|
|
82
|
+
expect(res.retractionReceiptId).not.toBeNull();
|
|
83
|
+
const nodes = readLattice(r);
|
|
84
|
+
expect(nodes.find((n) => n.id === a.node.id).status).toBe("RETRACTED");
|
|
85
|
+
expect(nodes.find((n) => n.id === b.node.id).status).toBe("PENDING_REVERIFY");
|
|
86
|
+
expect(nodes.find((n) => n.id === c.node.id).status).toBe("PENDING_REVERIFY");
|
|
87
|
+
});
|
|
88
|
+
it("L8 verifyLattice OFFLINE — clean ok; body-tamper / forged-receipt / broken-chain all caught", () => {
|
|
89
|
+
const mk = () => {
|
|
90
|
+
const r = repo();
|
|
91
|
+
recordAssertion(r, { claim: "alpha is true", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
|
|
92
|
+
recordAssertion(r, { claim: "beta is true", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
|
|
93
|
+
recordAssertion(r, { claim: "gamma is true", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
|
|
94
|
+
return r;
|
|
95
|
+
};
|
|
96
|
+
// clean
|
|
97
|
+
expect(verifyLattice(mk()).ok).toBe(true);
|
|
98
|
+
// (a) tamper the NODE BODY (flip a verdict in the jsonl) → mismatch vs signed payload
|
|
99
|
+
{
|
|
100
|
+
const r = mk();
|
|
101
|
+
const nodes = readLattice(r);
|
|
102
|
+
nodes[1].verdict = "FALSE";
|
|
103
|
+
writeFileSync(latPath(r), nodes.map((n) => JSON.stringify(n)).join("\n") + "\n", "utf8");
|
|
104
|
+
const v = verifyLattice(r);
|
|
105
|
+
expect(v.ok).toBe(false);
|
|
106
|
+
expect(v.badSignatures).toContain(nodes[1].id);
|
|
107
|
+
}
|
|
108
|
+
// (b) forge the VERDICT inside the signed receipt payload → Ed25519 sig breaks
|
|
109
|
+
{
|
|
110
|
+
const r = mk();
|
|
111
|
+
const nodes = readLattice(r);
|
|
112
|
+
nodes[1].receipt.payload.verdict = "FALSE";
|
|
113
|
+
nodes[1].verdict = "FALSE"; // keep body consistent so only the sig check fails
|
|
114
|
+
writeFileSync(latPath(r), nodes.map((n) => JSON.stringify(n)).join("\n") + "\n", "utf8");
|
|
115
|
+
expect(verifyLattice(r).ok).toBe(false);
|
|
116
|
+
}
|
|
117
|
+
// (c) break the CHAIN — delete the middle node so prev no longer matches
|
|
118
|
+
{
|
|
119
|
+
const r = mk();
|
|
120
|
+
const nodes = readLattice(r);
|
|
121
|
+
const without = [nodes[0], nodes[2]];
|
|
122
|
+
writeFileSync(latPath(r), without.map((n) => JSON.stringify(n)).join("\n") + "\n", "utf8");
|
|
123
|
+
const v = verifyLattice(r);
|
|
124
|
+
expect(v.ok).toBe(false);
|
|
125
|
+
expect(v.brokenAt).toBe(nodes[2].seq);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
it("L9 latticeStatus counts + open contradictions among ACTIVE truths only", () => {
|
|
129
|
+
const r = repo();
|
|
130
|
+
recordAssertion(r, { claim: "x is red", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
|
|
131
|
+
recordAssertion(r, { claim: "x is not red", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T }); // contradiction
|
|
132
|
+
const a = recordAssertion(r, { claim: "y is fine", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
|
|
133
|
+
let s = latticeStatus(r);
|
|
134
|
+
expect(s.nodes).toBe(3);
|
|
135
|
+
expect(s.active).toBe(3);
|
|
136
|
+
expect(s.openContradictions).toBe(1);
|
|
137
|
+
expect(s.chainValid).toBe(true);
|
|
138
|
+
// retracting one side closes the contradiction
|
|
139
|
+
retract(r, a.node.id, "n/a", { issuedAt: T });
|
|
140
|
+
retract(r, readLattice(r)[1].id, "resolved", { issuedAt: T });
|
|
141
|
+
s = latticeStatus(r);
|
|
142
|
+
expect(s.openContradictions).toBe(0);
|
|
143
|
+
expect(s.retracted).toBe(2);
|
|
144
|
+
});
|
|
145
|
+
it("L10 QUAN — never throws over fuzz; chain stays valid across random records", () => {
|
|
146
|
+
const r = repo();
|
|
147
|
+
for (let i = 0; i < 50; i++) {
|
|
148
|
+
const claim = ["", " ", `fact ${i}`, `v = ${i}`, `${i}+${i}=${i * 2}`, "weird chars", `${i} is not ${i}`][i % 7];
|
|
149
|
+
const verdict = ["TRUE", "FALSE", "UNKNOWN"][i % 3];
|
|
150
|
+
expect(() => recordAssertion(r, { claim, verdict, pTrue: (i % 10) / 10 }, { issuedAt: T })).not.toThrow();
|
|
151
|
+
}
|
|
152
|
+
expect(verifyLattice(r).ok).toBe(true);
|
|
153
|
+
expect(() => latticeStatus(r)).not.toThrow();
|
|
154
|
+
expect(() => normalizeSubject("")).not.toThrow();
|
|
155
|
+
expect(() => whyTrue(r, "nothing")).not.toThrow();
|
|
156
|
+
expect(() => retract(r, "nothing", "x", { issuedAt: T })).not.toThrow();
|
|
157
|
+
});
|
|
158
|
+
it("L11 assertClaim({record}) persists + surfaces contradictions end-to-end", async () => {
|
|
159
|
+
const r = repo();
|
|
160
|
+
const t1 = await assertClaim(r, "2+2=4", { record: true, issuedAt: T });
|
|
161
|
+
expect(t1.verdict).toBe("TRUE");
|
|
162
|
+
expect(t1.latticeNodeId).toBeTruthy();
|
|
163
|
+
expect(t1.contradictions).toEqual([]);
|
|
164
|
+
// assert the SAME subject with the opposite truth → contradiction surfaced inline
|
|
165
|
+
// (force it via custom sensor so we get a definite FALSE on the same subject)
|
|
166
|
+
const t2 = await assertClaim(r, "2+2=4", {
|
|
167
|
+
record: true, issuedAt: T,
|
|
168
|
+
sensors: [{ id: "forced", weight: 2, run: () => ({ sensor: "forced", verdict: "FALSE", confidence: 1 }) }],
|
|
169
|
+
});
|
|
170
|
+
expect(t2.verdict).toBe("FALSE");
|
|
171
|
+
expect(t2.contradictions?.some((c) => c.kind === "opposite-verdict")).toBe(true);
|
|
172
|
+
expect(verifyLattice(r).ok).toBe(true);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
//# sourceMappingURL=lattice.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lattice.test.js","sourceRoot":"","sources":["../../src/truth_kernel/lattice.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAgB,aAAa,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,eAAe,EAAE,oBAAoB,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EACtE,aAAa,EAAE,WAAW,EAAE,gBAAgB,GAC7C,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,SAAS,IAAI,KAAa,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,MAAM,CAAC,GAAG,iBAAiB,CAAC;AAC5B,SAAS,OAAO,CAAC,CAAS,IAAY,OAAO,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AAE9F,QAAQ,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACxE,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7H,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,oBAAoB;QACpD,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACjI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;QAC/D,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QACjB,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACnH,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9H,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QACjB,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9G,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,oCAAoC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5H,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QACjB,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1G,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACpH,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QACjB,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/F,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,oBAAoB,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAClG,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B;QACxG,6DAA6D;QAC7D,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7H,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACrK,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,kCAAkC;QACjG,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACnG,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnI,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACtI,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB;QAC7D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB;QACjE,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6FAA6F,EAAE,GAAG,EAAE;QACrG,MAAM,EAAE,GAAG,GAAW,EAAE;YACtB,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACjB,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7F,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5F,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7F,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;QACF,QAAQ;QACR,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,sFAAsF;QACtF,CAAC;YACC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC7B,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,GAAG,OAAO,CAAC;YAC5B,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;YACzF,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,+EAA+E;QAC/E,CAAC;YACC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC5B,KAAK,CAAC,CAAC,CAAE,CAAC,OAAQ,CAAC,OAAgC,CAAC,OAAO,GAAG,OAAO,CAAC;YACvE,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,mDAAmD;YAChF,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;YACzF,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,yEAAyE;QACzE,CAAC;YACC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;YACvC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3F,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QACjB,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACxF,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB;QAC7G,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACnG,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,+CAA+C;QAC/C,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;YACvH,MAAM,OAAO,GAAI,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAW,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;YAChE,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC5G,CAAC;QACD,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QACjB,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACxE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtC,kFAAkF;QAClF,8EAA8E;QAC9E,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE;YACvC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;SAC3G,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjF,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|