@dzhechkov/harness-core 0.3.149 → 0.4.1

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 (107) hide show
  1. package/.dz-manifest.json +399 -55
  2. package/README.md +80 -3
  3. package/dist/agentdb-index.d.ts.map +1 -1
  4. package/dist/agentdb-index.js +10 -2
  5. package/dist/agentdb-index.js.map +1 -1
  6. package/dist/backlog-embed.d.ts +94 -0
  7. package/dist/backlog-embed.d.ts.map +1 -0
  8. package/dist/backlog-embed.js +138 -0
  9. package/dist/backlog-embed.js.map +1 -0
  10. package/dist/backlog.d.ts +180 -7
  11. package/dist/backlog.d.ts.map +1 -1
  12. package/dist/backlog.js +429 -26
  13. package/dist/backlog.js.map +1 -1
  14. package/dist/challenge-panel.d.ts +3 -0
  15. package/dist/challenge-panel.d.ts.map +1 -1
  16. package/dist/challenge-panel.js +3 -0
  17. package/dist/challenge-panel.js.map +1 -1
  18. package/dist/export-holdout.d.ts +149 -0
  19. package/dist/export-holdout.d.ts.map +1 -0
  20. package/dist/export-holdout.js +198 -0
  21. package/dist/export-holdout.js.map +1 -0
  22. package/dist/feature-adr-checkpoints.d.ts +82 -0
  23. package/dist/feature-adr-checkpoints.d.ts.map +1 -1
  24. package/dist/feature-adr-checkpoints.js +138 -1
  25. package/dist/feature-adr-checkpoints.js.map +1 -1
  26. package/dist/feature-adr-routing.d.ts +3 -0
  27. package/dist/feature-adr-routing.d.ts.map +1 -1
  28. package/dist/feature-adr-routing.js +3 -0
  29. package/dist/feature-adr-routing.js.map +1 -1
  30. package/dist/guard.d.ts +42 -0
  31. package/dist/guard.d.ts.map +1 -1
  32. package/dist/guard.js +73 -1
  33. package/dist/guard.js.map +1 -1
  34. package/dist/index.d.ts +17 -2
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +28 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/loop-blobs.generated.d.ts +33 -0
  39. package/dist/loop-blobs.generated.d.ts.map +1 -0
  40. package/dist/loop-blobs.generated.js +101 -0
  41. package/dist/loop-blobs.generated.js.map +1 -0
  42. package/dist/loop-lint.d.ts +63 -0
  43. package/dist/loop-lint.d.ts.map +1 -0
  44. package/dist/loop-lint.js +606 -0
  45. package/dist/loop-lint.js.map +1 -0
  46. package/dist/loop-plan.d.ts +416 -0
  47. package/dist/loop-plan.d.ts.map +1 -0
  48. package/dist/loop-plan.js +1151 -0
  49. package/dist/loop-plan.js.map +1 -0
  50. package/dist/loop-render.d.ts +104 -0
  51. package/dist/loop-render.d.ts.map +1 -0
  52. package/dist/loop-render.js +989 -0
  53. package/dist/loop-render.js.map +1 -0
  54. package/dist/loop-trace.d.ts +204 -0
  55. package/dist/loop-trace.d.ts.map +1 -0
  56. package/dist/loop-trace.js +550 -0
  57. package/dist/loop-trace.js.map +1 -0
  58. package/dist/mutation-gate.d.ts +247 -0
  59. package/dist/mutation-gate.d.ts.map +1 -0
  60. package/dist/mutation-gate.js +535 -0
  61. package/dist/mutation-gate.js.map +1 -0
  62. package/dist/no-stubs.d.ts +53 -0
  63. package/dist/no-stubs.d.ts.map +1 -0
  64. package/dist/no-stubs.js +190 -0
  65. package/dist/no-stubs.js.map +1 -0
  66. package/dist/package-skill-layouts.d.ts +67 -0
  67. package/dist/package-skill-layouts.d.ts.map +1 -0
  68. package/dist/package-skill-layouts.js +81 -0
  69. package/dist/package-skill-layouts.js.map +1 -0
  70. package/dist/patterns.d.ts.map +1 -1
  71. package/dist/patterns.js +156 -75
  72. package/dist/patterns.js.map +1 -1
  73. package/dist/recall-domain-boost.d.ts +96 -0
  74. package/dist/recall-domain-boost.d.ts.map +1 -0
  75. package/dist/recall-domain-boost.js +158 -0
  76. package/dist/recall-domain-boost.js.map +1 -0
  77. package/dist/store-lock.d.ts +108 -0
  78. package/dist/store-lock.d.ts.map +1 -0
  79. package/dist/store-lock.js +231 -0
  80. package/dist/store-lock.js.map +1 -0
  81. package/dist/workflows.d.ts +16 -22
  82. package/dist/workflows.d.ts.map +1 -1
  83. package/dist/workflows.js +17 -98
  84. package/dist/workflows.js.map +1 -1
  85. package/package.json +7 -5
  86. package/sbom.json +1062 -202
  87. package/src/agentdb-index.ts +10 -1
  88. package/src/backlog-embed.ts +156 -0
  89. package/src/backlog.ts +536 -28
  90. package/src/challenge-panel.ts +4 -0
  91. package/src/export-holdout.ts +235 -0
  92. package/src/feature-adr-checkpoints.ts +192 -1
  93. package/src/feature-adr-routing.ts +4 -0
  94. package/src/guard.ts +106 -1
  95. package/src/index.ts +72 -1
  96. package/src/loop-blobs.generated.ts +114 -0
  97. package/src/loop-lint.ts +643 -0
  98. package/src/loop-plan.ts +1419 -0
  99. package/src/loop-render.ts +1050 -0
  100. package/src/loop-trace.ts +650 -0
  101. package/src/mutation-gate.ts +701 -0
  102. package/src/no-stubs.ts +204 -0
  103. package/src/package-skill-layouts.ts +107 -0
  104. package/src/patterns.ts +135 -60
  105. package/src/recall-domain-boost.ts +178 -0
  106. package/src/store-lock.ts +258 -0
  107. package/src/workflows.ts +18 -117
@@ -0,0 +1,247 @@
1
+ /** One named safety property: mutate the protection, run the suite, require red. */
2
+ export interface MutationRegistryEntry {
3
+ /** stable kebab-case id, unique within the registry. */
4
+ readonly id: string;
5
+ /** the sentence the code claims — named so a failure report can say WHAT is undefended. */
6
+ readonly property: string;
7
+ /** package-relative path of the file carrying the protection. */
8
+ readonly file: string;
9
+ /** exact text surgery: `find` must occur EXACTLY ONCE in the file (rule 1). */
10
+ readonly mutation: {
11
+ readonly find: string;
12
+ readonly replace: string;
13
+ };
14
+ /** how many tests MUST go red under the mutation (default 1). */
15
+ readonly minFailing?: number;
16
+ /** how many actually did at the time of writing — makes a coverage DROP visible. */
17
+ readonly observed?: number;
18
+ /**
19
+ * the MOST tests that may go red before the redness stops being attributable to THIS protection
20
+ * (route-c guard — see effectiveMaxFailing for the default when absent). A structural blow-up
21
+ * (broken export surface, dead import) reddens the whole suite; that is not discrimination.
22
+ */
23
+ readonly maxFailing?: number;
24
+ }
25
+ export interface MutationRegistry {
26
+ /** optional suite command override for the whole registry (default `npm test`). */
27
+ readonly testCommand?: string;
28
+ readonly entries: readonly MutationRegistryEntry[];
29
+ }
30
+ export type MutationVerdict = 'PROVEN' | 'UNDEFENDED' | 'NOT_APPLIED' | 'BELOW_MIN' | 'MUTATION_UNPARSEABLE' | 'MUTATION_LOAD_FATAL' | 'OVER_FAILING' | 'INCONCLUSIVE';
31
+ export interface MutationObservation {
32
+ readonly entry: MutationRegistryEntry;
33
+ /** how many times `find` occurred in the file text (1 = applied). Missing file ⇒ 0. */
34
+ readonly occurrences: number;
35
+ /** the suite's exit code under the mutation; null when it produced none (killed / spawn error). */
36
+ readonly exitCode: number | null;
37
+ /** best-effort failing-test count parsed from runner output; null when unparseable. */
38
+ readonly failingCount: number | null;
39
+ /**
40
+ * set (to the parser's message) when the MUTATED file failed to parse as its own language —
41
+ * the executor checks BEFORE running the suite. Absent/undefined = parsed fine or not checked.
42
+ */
43
+ readonly parseError?: string;
44
+ /**
45
+ * set (to the classifier's evidence line) when THE SUITE RUN's own output reports a test FILE
46
+ * failing to LOAD under the mutation — the route-a′ guard, round-6 rework. The signal comes from
47
+ * the SAME run that produced the failing count (no isolated child, no environment mismatch — the
48
+ * round-5 isolated `import()` had three measured false-PASS routes precisely because an isolated
49
+ * import is a DIFFERENT environment than the test runner). A file-load failure means the redness
50
+ * is STRUCTURAL — the mutation broke the module, so the count is not attributable to the
51
+ * protection. Absent/undefined = the red output showed test ASSERTION failures (behavioural —
52
+ * redness IS the deleted protection), or the run was green / never ran.
53
+ */
54
+ readonly fileLoadFailure?: string;
55
+ /**
56
+ * set (to an explanation) when the suite went RED but the output SHAPE matched no runner the
57
+ * classifier knows (`classifyRunFailure` returned 'unrecognised') — a runner-coverage gap of
58
+ * THIS TOOL, not a property of the module under test. The verdict is INCONCLUSIVE (a loud
59
+ * failure), NEVER PROVEN: redness that cannot be attributed proves nothing.
60
+ */
61
+ readonly outputUnrecognised?: string;
62
+ /**
63
+ * exit code of the suite re-run on the RESTORED tree after this entry (the attribution check
64
+ * for flaky neighbours). undefined = not run; 0 = reproducibly green; any other value (or null)
65
+ * = the "green" baseline is not reproducible, so the red under mutation is not attributable.
66
+ */
67
+ readonly rebaselineExitCode?: number | null;
68
+ }
69
+ export interface MutationEntryResult {
70
+ readonly id: string;
71
+ readonly property: string;
72
+ readonly file: string;
73
+ readonly applied: boolean;
74
+ readonly occurrences: number;
75
+ readonly exitCode: number | null;
76
+ readonly failingCount: number | null;
77
+ readonly verdict: MutationVerdict;
78
+ /** true when the count is reliable, non-zero, and LOWER than `observed` — the early warning that
79
+ * arrives before the property breaks. A WARNING, not a failure — see classifyMutationOutcome. */
80
+ readonly drop: boolean;
81
+ /**
82
+ * QE round-7 honesty (loop-designer, cross-family reviewer): a coverage DROP can only ever be
83
+ * DETECTED for an entry that carries an `observed` anchor — `drop` is computed as
84
+ * `failingCount < observed`, so an entry with only a `minFailing` threshold is structurally
85
+ * incapable of reporting one. `"0 coverage drops"` therefore means *"0 drops among the entries
86
+ * where a drop is comparable at all"*, and the report must say which denominator that is instead
87
+ * of letting the reader assume it covers every entry.
88
+ */
89
+ readonly dropComparable: boolean;
90
+ /** human sentence for the report line — names the undefended property on a green suite. */
91
+ readonly detail: string;
92
+ }
93
+ export interface ParsedRegistry {
94
+ readonly registry: MutationRegistry | null;
95
+ /** every defect found — ANY error makes the registry unusable (a half-valid registry that runs
96
+ * its valid half reports a partial scan as a full one). */
97
+ readonly errors: readonly string[];
98
+ }
99
+ /** Parse + validate a registry JSON text. Accepts a bare array of entries or `{testCommand, entries}`. */
100
+ export declare function parseMutationRegistry(text: string): ParsedRegistry;
101
+ export interface AppliedMutation {
102
+ readonly ok: boolean;
103
+ readonly occurrences: number;
104
+ /** the mutated text when ok. */
105
+ readonly text?: string;
106
+ }
107
+ /** Count NON-OVERLAPPING occurrences and apply only when the count is exactly 1. */
108
+ export declare function applyMutationToText(source: string, find: string, replace: string): AppliedMutation;
109
+ /**
110
+ * The route-c upper bound: the most failing tests a mutation may cause and still be read as
111
+ * BEHAVIOURAL redness attributable to this one protection. Explicit `maxFailing` wins; otherwise
112
+ * `max(anchor*5, anchor+10)` where anchor = `observed` (the measured blast radius) falling back to
113
+ * `minFailing`. k=5 / N=10 justification, MEASURED on the live data: every health-advisor registry
114
+ * entry has observed 1–4 ⇒ bounds 11–20, so legitimate growth (more tests covering the property —
115
+ * 5× proportional, or +10 absolute so tiny `observed` is not strangled) still passes, while the
116
+ * two measured structural blow-ups (route a: whole 484-test suite dead on a parse error; route c:
117
+ * 200+ failing vs observed 1) exceed the bound by an order of magnitude. NEVER unbounded — an
118
+ * entry with no `observed` anchors on its own minFailing contract.
119
+ */
120
+ export declare function effectiveMaxFailing(entry: MutationRegistryEntry): number;
121
+ /**
122
+ * Parse a failing-test count from runner output. Order of preference:
123
+ * 1. node --test / TAP summary `# fail N` (authoritative for TAP);
124
+ * 2. vitest/jest summary `Tests N failed` / `N failed`;
125
+ * 3. top-level (unindented) `not ok` line count.
126
+ * Returns null when nothing parses — the verdict then rests on the exit code ALONE, by design:
127
+ * count parsing failure must never flip red/green (SPEC design decision).
128
+ */
129
+ export declare function countFailingTests(rawOutput: string): number | null;
130
+ export type RunnerKind = 'node-test' | 'vitest' | 'unknown';
131
+ export interface RunFailureClassification {
132
+ /** which runner's output shape was recognised. */
133
+ readonly runner: RunnerKind;
134
+ /**
135
+ * 'file-load' — the run reported a test FILE failing to load: STRUCTURAL, the mutation broke
136
+ * the module and the failing count is not attributable to the protection;
137
+ * 'assertions' — the red is test ASSERTION failures inside running tests: BEHAVIOURAL, the
138
+ * redness IS the deleted protection;
139
+ * 'unrecognised' — the output shape matched no known runner (or a known runner's red output
140
+ * carried no classifiable failure): a runner-coverage gap of this tool — the
141
+ * verdict must be INCONCLUSIVE, never PROVEN.
142
+ */
143
+ readonly kind: 'file-load' | 'assertions' | 'unrecognised';
144
+ /** for 'file-load': the evidence line; for 'unrecognised': what could not be classified. */
145
+ readonly evidence?: string;
146
+ }
147
+ /**
148
+ * Classify a RED suite run's output: did a test FILE fail to LOAD (structural) or did test
149
+ * ASSERTIONS fail (behavioural)? This is the round-6 replacement for the isolated-child
150
+ * `import()` load-check, whose three false-PASS routes were ALL artifacts of the isolated import
151
+ * being a DIFFERENT environment than the test runner (env-dependent module goals, unsettled
152
+ * top-level await draining a child's event loop, non-deterministic load aborts dodging a second
153
+ * spawn). The correct signal comes from the SAME run that produced the failing count — no second
154
+ * child, no environment mismatch, nothing to disagree with itself.
155
+ *
156
+ * Runner shapes, both MEASURED (node v22.22.0, vitest 3.2.4 — reproducers in
157
+ * harness-cli/test/mutation-gate-cli.test.ts and this file's unit tests):
158
+ *
159
+ * node --test (flat TAP): every failure is a column-0 `not ok N - <name>` followed by an indented
160
+ * YAML diagnostic block. A test FILE that dies (throw at load, `process.exit` at import, unsettled
161
+ * top-level await ⇒ exit 13, dead require) is reported as a file-named test point whose block
162
+ * carries an `exitCode:` field (and `signal:` when killed) — `failureType: 'testCodeFailure'`,
163
+ * `error: 'test failed'`, `code: 'ERR_TEST_FAILURE'`. An ASSERTION failure — and equally a plain
164
+ * throw INSIDE a running test — NEVER carries `exitCode:`/`signal:`: those fields describe the
165
+ * spawned per-file process, which only appears when the file itself died. That asymmetry is the
166
+ * discriminator, and it is exactly the honest-mutation boundary: delete a guard clause and the
167
+ * file loads, assertions fire, no `exitCode:` field ⇒ behavioural.
168
+ *
169
+ * vitest (`vitest run`): a load/transform/collection error is reported under a `Failed Suites N`
170
+ * section as `FAIL <path> [ <path> ]` (the bracketed suite name repeats the path) with the error
171
+ * where a test name would be, and the summary counts it under `Test Files N failed` while `Tests`
172
+ * shows `no tests` for that file. Assertion failures appear under `Failed Tests N` as
173
+ * `FAIL <path> > <test name>` with `Tests N failed` in the summary. (An unsettled top-level await
174
+ * HANGS vitest rather than failing the file — the suite times out, exitCode null, INCONCLUSIVE —
175
+ * measured, and honestly out of scope for this classifier.)
176
+ *
177
+ * Runner detection is from the OUTPUT SHAPE, not the command (a `npm test` alias hides the
178
+ * runner): node --test requires the TAP header AND node's `# duration_ms` trailer (tape emits TAP
179
+ * + `# fail` but not `# duration_ms`); vitest requires its `RUN v<semver>` banner or `Test Files`
180
+ * summary line. Anything else — jest, mocha, tape, a bare script — is 'unknown'/'unrecognised':
181
+ * the honest, narrowed gap. It is about THIS TOOL's runner coverage, fails LOUD (INCONCLUSIVE),
182
+ * and never silently passes on output it cannot read.
183
+ */
184
+ export declare function classifyRunFailure(rawOutput: string): RunFailureClassification;
185
+ export interface BaselineResult {
186
+ readonly ok: boolean;
187
+ readonly detail: string;
188
+ }
189
+ /**
190
+ * A RED baseline in the scratch copy is a SETUP error, never a mutation result: every subsequent
191
+ * "red under mutation" would be noise, and every "green" a lie about an unrunnable copy.
192
+ */
193
+ export declare function classifyBaseline(exitCode: number | null): BaselineResult;
194
+ /**
195
+ * Classify one entry's observation.
196
+ *
197
+ * PRECEDENCE LATTICE (checked top to bottom; each verdict is justified by what it invalidates
198
+ * BELOW it — a verdict may only outrank another when it makes that other's evidence meaningless):
199
+ * 1. NOT_APPLIED — nothing was mutated, so no run observation means anything;
200
+ * 2. MUTATION_UNPARSEABLE — the mutated file is not even syntactically a module; a non-parsing
201
+ * file never RUNS, so no load- or count-signal can exist (which is
202
+ * why it sits above MUTATION_LOAD_FATAL);
203
+ * 3. MUTATION_LOAD_FATAL — the run happened, but its own output says a test FILE died at
204
+ * load: the redness is structural and every count from that same run
205
+ * is non-attributable — so it outranks every count-based verdict AND
206
+ * the flaky-rebaseline check (a structurally-broken run needs no
207
+ * attribution analysis);
208
+ * 4. INCONCLUSIVE (no exit) — the run produced nothing to classify at all;
209
+ * 5. UNDEFENDED (exit 0) — the disjoint GREEN arm: mutually exclusive with every red-based
210
+ * verdict below;
211
+ * 6. INCONCLUSIVE (unrecognised output) — red, but the shape is unreadable: counts parsed out of
212
+ * unrecognised output must not reach BELOW_MIN/OVER_FAILING/PROVEN;
213
+ * 7. INCONCLUSIVE (flaky rebaseline) — red, readable, but not attributable;
214
+ * 8. BELOW_MIN → 9. OVER_FAILING — reliable-count contract checks, both failing;
215
+ * 10. PROVEN — applied, red, behavioural, attributable, within bounds.
216
+ *
217
+ * THE DROP DECISION (SPEC §Reporting, decided here + justified): `failing < observed` but still
218
+ * `>= minFailing` is a LOUD WARNING, not a failure. Two reasons, both load-bearing:
219
+ * • the count is a BEST-EFFORT secondary parsed from runner output — making it verdict-deciding
220
+ * would let a count-parse failure flip red/green, which the design decisions forbid;
221
+ * • `observed` is a historical measurement, `minFailing` is the entry's declared CONTRACT. A
222
+ * contract violation fails (BELOW_MIN — only ever on a reliable count); history drifting down
223
+ * while the contract still holds is the early warning, reported loudly so a human re-pins
224
+ * `observed` or investigates — silently normalising it would erase the signal.
225
+ */
226
+ export declare function classifyMutationOutcome(obs: MutationObservation): MutationEntryResult;
227
+ /** Exit contract: 0 all proven · 1 any entry failed (or red baseline) · (2 = usage/setup, CLI-side). */
228
+ export declare function mutationGateExitCode(results: readonly MutationEntryResult[], baselineOk: boolean): number;
229
+ export interface MutationGateSummary {
230
+ readonly total: number;
231
+ readonly proven: number;
232
+ readonly undefended: number;
233
+ readonly notApplied: number;
234
+ readonly belowMin: number;
235
+ readonly unparseable: number;
236
+ readonly loadFatal: number;
237
+ readonly overFailing: number;
238
+ readonly inconclusive: number;
239
+ readonly drops: number;
240
+ /** how many entries a drop is COMPARABLE for (they carry an `observed` anchor) — the honest
241
+ * denominator of `drops`. `drops: 0` over `dropComparable: 23` of `total: 62` says what it can
242
+ * and cannot see; a bare "0 coverage drops" over-reads as "all 62 checked" (QE round-7). */
243
+ readonly dropComparable: number;
244
+ }
245
+ export declare function summarizeMutationResults(results: readonly MutationEntryResult[]): MutationGateSummary;
246
+ export declare function renderMutationReport(results: readonly MutationEntryResult[], baseline: BaselineResult, packageDir: string): string;
247
+ //# sourceMappingURL=mutation-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-gate.d.ts","sourceRoot":"","sources":["../src/mutation-gate.ts"],"names":[],"mappings":"AAsBA,oFAAoF;AACpF,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,2FAA2F;IAC3F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,iEAAiE;IACjE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,oFAAoF;IACpF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,mFAAmF;IACnF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACpD;AAED,MAAM,MAAM,eAAe,GACvB,QAAQ,GACR,YAAY,GACZ,aAAa,GACb,WAAW,GACX,sBAAsB,GACtB,qBAAqB,GACrB,cAAc,GACd,cAAc,CAAC;AAEnB,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,uFAAuF;IACvF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,mGAAmG;IACnG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,uFAAuF;IACvF,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;;;;OASG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC;sGACkG;IAClG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAQD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC3C;gEAC4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,0GAA0G;AAC1G,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAwGlE;AAID,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,gCAAgC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAQlG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAIxE;AAID;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAclE;AAYD,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,wBAAwB;IACvC,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B;;;;;;;;OAQG;IACH,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,GAAG,cAAc,CAAC;IAC3D,4FAA4F;IAC5F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,wBAAwB,CA0D9E;AAID,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAMxE;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,mBAAmB,GAAG,mBAAmB,CAwIrF;AAKD,wGAAwG;AACxG,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,CAIzG;AAID,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;iGAE6F;IAC7F,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,GAAG,mBAAmB,CAcrG;AAaD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,mBAAmB,EAAE,EACvC,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,MAAM,GACjB,MAAM,CAgBR"}