modality-ts 0.0.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 (215) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -0
  3. package/dist/checker/encode/index.d.ts +2 -0
  4. package/dist/checker/encode/index.d.ts.map +1 -0
  5. package/dist/checker/encode/index.js +2 -0
  6. package/dist/checker/encode/index.js.map +1 -0
  7. package/dist/checker/index.d.ts +6 -0
  8. package/dist/checker/index.d.ts.map +1 -0
  9. package/dist/checker/index.js +6 -0
  10. package/dist/checker/index.js.map +1 -0
  11. package/dist/checker/monitors/index.d.ts +2 -0
  12. package/dist/checker/monitors/index.d.ts.map +1 -0
  13. package/dist/checker/monitors/index.js +2 -0
  14. package/dist/checker/monitors/index.js.map +1 -0
  15. package/dist/checker/search/eval.d.ts +16 -0
  16. package/dist/checker/search/eval.d.ts.map +1 -0
  17. package/dist/checker/search/eval.js +254 -0
  18. package/dist/checker/search/eval.js.map +1 -0
  19. package/dist/checker/search/index.d.ts +43 -0
  20. package/dist/checker/search/index.d.ts.map +1 -0
  21. package/dist/checker/search/index.js +532 -0
  22. package/dist/checker/search/index.js.map +1 -0
  23. package/dist/checker/slicing/index.d.ts +2 -0
  24. package/dist/checker/slicing/index.d.ts.map +1 -0
  25. package/dist/checker/slicing/index.js +2 -0
  26. package/dist/checker/slicing/index.js.map +1 -0
  27. package/dist/checker/traces/index.d.ts +2 -0
  28. package/dist/checker/traces/index.d.ts.map +1 -0
  29. package/dist/checker/traces/index.js +2 -0
  30. package/dist/checker/traces/index.js.map +1 -0
  31. package/dist/extraction/index.d.ts +31 -0
  32. package/dist/extraction/index.d.ts.map +1 -0
  33. package/dist/extraction/index.js +2254 -0
  34. package/dist/extraction/index.js.map +1 -0
  35. package/dist/extraction/pipeline/index.d.ts +45 -0
  36. package/dist/extraction/pipeline/index.d.ts.map +1 -0
  37. package/dist/extraction/pipeline/index.js +101 -0
  38. package/dist/extraction/pipeline/index.js.map +1 -0
  39. package/dist/extraction/spi/index.d.ts +99 -0
  40. package/dist/extraction/spi/index.d.ts.map +1 -0
  41. package/dist/extraction/spi/index.js +2 -0
  42. package/dist/extraction/spi/index.js.map +1 -0
  43. package/dist/harness/index.d.ts +109 -0
  44. package/dist/harness/index.d.ts.map +1 -0
  45. package/dist/harness/index.js +377 -0
  46. package/dist/harness/index.js.map +1 -0
  47. package/dist/kernel/artifacts/index.d.ts +11 -0
  48. package/dist/kernel/artifacts/index.d.ts.map +1 -0
  49. package/dist/kernel/artifacts/index.js +127 -0
  50. package/dist/kernel/artifacts/index.js.map +1 -0
  51. package/dist/kernel/index.d.ts +10 -0
  52. package/dist/kernel/index.d.ts.map +1 -0
  53. package/dist/kernel/index.js +10 -0
  54. package/dist/kernel/index.js.map +1 -0
  55. package/dist/kernel/ir/canonical.d.ts +5 -0
  56. package/dist/kernel/ir/canonical.d.ts.map +1 -0
  57. package/dist/kernel/ir/canonical.js +47 -0
  58. package/dist/kernel/ir/canonical.js.map +1 -0
  59. package/dist/kernel/ir/domains.d.ts +9 -0
  60. package/dist/kernel/ir/domains.d.ts.map +1 -0
  61. package/dist/kernel/ir/domains.js +102 -0
  62. package/dist/kernel/ir/domains.js.map +1 -0
  63. package/dist/kernel/ir/types.d.ts +224 -0
  64. package/dist/kernel/ir/types.d.ts.map +1 -0
  65. package/dist/kernel/ir/types.js +2 -0
  66. package/dist/kernel/ir/types.js.map +1 -0
  67. package/dist/kernel/ir/validator.d.ts +11 -0
  68. package/dist/kernel/ir/validator.d.ts.map +1 -0
  69. package/dist/kernel/ir/validator.js +674 -0
  70. package/dist/kernel/ir/validator.js.map +1 -0
  71. package/dist/kernel/overlay/index.d.ts +18 -0
  72. package/dist/kernel/overlay/index.d.ts.map +1 -0
  73. package/dist/kernel/overlay/index.js +59 -0
  74. package/dist/kernel/overlay/index.js.map +1 -0
  75. package/dist/kernel/props/index.d.ts +71 -0
  76. package/dist/kernel/props/index.d.ts.map +1 -0
  77. package/dist/kernel/props/index.js +122 -0
  78. package/dist/kernel/props/index.js.map +1 -0
  79. package/dist/kernel/report/types.d.ts +115 -0
  80. package/dist/kernel/report/types.d.ts.map +1 -0
  81. package/dist/kernel/report/types.js +2 -0
  82. package/dist/kernel/report/types.js.map +1 -0
  83. package/dist/kernel/trace/types.d.ts +19 -0
  84. package/dist/kernel/trace/types.d.ts.map +1 -0
  85. package/dist/kernel/trace/types.js +2 -0
  86. package/dist/kernel/trace/types.js.map +1 -0
  87. package/dist/modality/check.d.ts +3 -0
  88. package/dist/modality/check.d.ts.map +1 -0
  89. package/dist/modality/check.js +2 -0
  90. package/dist/modality/check.js.map +1 -0
  91. package/dist/modality/ci.d.ts +3 -0
  92. package/dist/modality/ci.d.ts.map +1 -0
  93. package/dist/modality/ci.js +2 -0
  94. package/dist/modality/ci.js.map +1 -0
  95. package/dist/modality/cli.d.ts +3 -0
  96. package/dist/modality/cli.d.ts.map +1 -0
  97. package/dist/modality/cli.js +223 -0
  98. package/dist/modality/cli.js.map +1 -0
  99. package/dist/modality/codegen/model.d.ts +3 -0
  100. package/dist/modality/codegen/model.d.ts.map +1 -0
  101. package/dist/modality/codegen/model.js +59 -0
  102. package/dist/modality/codegen/model.js.map +1 -0
  103. package/dist/modality/codegen/replay-test.d.ts +10 -0
  104. package/dist/modality/codegen/replay-test.d.ts.map +1 -0
  105. package/dist/modality/codegen/replay-test.js +104 -0
  106. package/dist/modality/codegen/replay-test.js.map +1 -0
  107. package/dist/modality/conform.d.ts +3 -0
  108. package/dist/modality/conform.d.ts.map +1 -0
  109. package/dist/modality/conform.js +2 -0
  110. package/dist/modality/conform.js.map +1 -0
  111. package/dist/modality/export-tla.d.ts +3 -0
  112. package/dist/modality/export-tla.d.ts.map +1 -0
  113. package/dist/modality/export-tla.js +2 -0
  114. package/dist/modality/export-tla.js.map +1 -0
  115. package/dist/modality/extract.d.ts +3 -0
  116. package/dist/modality/extract.d.ts.map +1 -0
  117. package/dist/modality/extract.js +2 -0
  118. package/dist/modality/extract.js.map +1 -0
  119. package/dist/modality/features/check/command.d.ts +23 -0
  120. package/dist/modality/features/check/command.d.ts.map +1 -0
  121. package/dist/modality/features/check/command.js +174 -0
  122. package/dist/modality/features/check/command.js.map +1 -0
  123. package/dist/modality/features/check/index.d.ts +3 -0
  124. package/dist/modality/features/check/index.d.ts.map +1 -0
  125. package/dist/modality/features/check/index.js +2 -0
  126. package/dist/modality/features/check/index.js.map +1 -0
  127. package/dist/modality/features/ci/command.d.ts +23 -0
  128. package/dist/modality/features/ci/command.d.ts.map +1 -0
  129. package/dist/modality/features/ci/command.js +176 -0
  130. package/dist/modality/features/ci/command.js.map +1 -0
  131. package/dist/modality/features/ci/index.d.ts +3 -0
  132. package/dist/modality/features/ci/index.d.ts.map +1 -0
  133. package/dist/modality/features/ci/index.js +2 -0
  134. package/dist/modality/features/ci/index.js.map +1 -0
  135. package/dist/modality/features/conform/command.d.ts +35 -0
  136. package/dist/modality/features/conform/command.d.ts.map +1 -0
  137. package/dist/modality/features/conform/command.js +162 -0
  138. package/dist/modality/features/conform/command.js.map +1 -0
  139. package/dist/modality/features/conform/index.d.ts +3 -0
  140. package/dist/modality/features/conform/index.d.ts.map +1 -0
  141. package/dist/modality/features/conform/index.js +2 -0
  142. package/dist/modality/features/conform/index.js.map +1 -0
  143. package/dist/modality/features/export/command.d.ts +13 -0
  144. package/dist/modality/features/export/command.d.ts.map +1 -0
  145. package/dist/modality/features/export/command.js +250 -0
  146. package/dist/modality/features/export/command.js.map +1 -0
  147. package/dist/modality/features/export/index.d.ts +3 -0
  148. package/dist/modality/features/export/index.d.ts.map +1 -0
  149. package/dist/modality/features/export/index.js +2 -0
  150. package/dist/modality/features/export/index.js.map +1 -0
  151. package/dist/modality/features/extract/command.d.ts +37 -0
  152. package/dist/modality/features/extract/command.d.ts.map +1 -0
  153. package/dist/modality/features/extract/command.js +443 -0
  154. package/dist/modality/features/extract/command.js.map +1 -0
  155. package/dist/modality/features/extract/index.d.ts +3 -0
  156. package/dist/modality/features/extract/index.d.ts.map +1 -0
  157. package/dist/modality/features/extract/index.js +2 -0
  158. package/dist/modality/features/extract/index.js.map +1 -0
  159. package/dist/modality/features/replay/command.d.ts +16 -0
  160. package/dist/modality/features/replay/command.d.ts.map +1 -0
  161. package/dist/modality/features/replay/command.js +50 -0
  162. package/dist/modality/features/replay/command.js.map +1 -0
  163. package/dist/modality/features/replay/index.d.ts +3 -0
  164. package/dist/modality/features/replay/index.d.ts.map +1 -0
  165. package/dist/modality/features/replay/index.js +2 -0
  166. package/dist/modality/features/replay/index.js.map +1 -0
  167. package/dist/modality/overlay.d.ts +3 -0
  168. package/dist/modality/overlay.d.ts.map +1 -0
  169. package/dist/modality/overlay.js +9 -0
  170. package/dist/modality/overlay.js.map +1 -0
  171. package/dist/modality/registry/index.d.ts +22 -0
  172. package/dist/modality/registry/index.d.ts.map +1 -0
  173. package/dist/modality/registry/index.js +89 -0
  174. package/dist/modality/registry/index.js.map +1 -0
  175. package/dist/modality/replay.d.ts +3 -0
  176. package/dist/modality/replay.d.ts.map +1 -0
  177. package/dist/modality/replay.js +2 -0
  178. package/dist/modality/replay.js.map +1 -0
  179. package/dist/runtime/index.d.ts +53 -0
  180. package/dist/runtime/index.d.ts.map +1 -0
  181. package/dist/runtime/index.js +83 -0
  182. package/dist/runtime/index.js.map +1 -0
  183. package/dist/sources/jotai/harness.d.ts +13 -0
  184. package/dist/sources/jotai/harness.d.ts.map +1 -0
  185. package/dist/sources/jotai/harness.js +20 -0
  186. package/dist/sources/jotai/harness.js.map +1 -0
  187. package/dist/sources/jotai/index.d.ts +11 -0
  188. package/dist/sources/jotai/index.d.ts.map +1 -0
  189. package/dist/sources/jotai/index.js +405 -0
  190. package/dist/sources/jotai/index.js.map +1 -0
  191. package/dist/sources/router/harness.d.ts +9 -0
  192. package/dist/sources/router/harness.d.ts.map +1 -0
  193. package/dist/sources/router/harness.js +32 -0
  194. package/dist/sources/router/harness.js.map +1 -0
  195. package/dist/sources/router/index.d.ts +15 -0
  196. package/dist/sources/router/index.d.ts.map +1 -0
  197. package/dist/sources/router/index.js +41 -0
  198. package/dist/sources/router/index.js.map +1 -0
  199. package/dist/sources/swr/harness.d.ts +12 -0
  200. package/dist/sources/swr/harness.d.ts.map +1 -0
  201. package/dist/sources/swr/harness.js +25 -0
  202. package/dist/sources/swr/harness.js.map +1 -0
  203. package/dist/sources/swr/index.d.ts +51 -0
  204. package/dist/sources/swr/index.d.ts.map +1 -0
  205. package/dist/sources/swr/index.js +428 -0
  206. package/dist/sources/swr/index.js.map +1 -0
  207. package/dist/sources/use-state/harness.d.ts +12 -0
  208. package/dist/sources/use-state/harness.d.ts.map +1 -0
  209. package/dist/sources/use-state/harness.js +19 -0
  210. package/dist/sources/use-state/harness.js.map +1 -0
  211. package/dist/sources/use-state/index.d.ts +9 -0
  212. package/dist/sources/use-state/index.d.ts.map +1 -0
  213. package/dist/sources/use-state/index.js +248 -0
  214. package/dist/sources/use-state/index.js.map +1 -0
  215. package/package.json +136 -0
@@ -0,0 +1,532 @@
1
+ import { canonicalState, initialValues, validateModel } from "modality-ts/kernel";
2
+ import { applyEffect, guardHolds, normalizeInitialRouteLocals, readPending } from "./eval.js";
3
+ export function checkModel(model, properties, options = {}) {
4
+ if (options.slicing && properties.length > 0 && properties.every((property) => property.reads !== undefined)) {
5
+ return checkModelSliced(model, properties);
6
+ }
7
+ return checkModelCore(model, properties);
8
+ }
9
+ function checkModelCore(model, properties) {
10
+ const validation = validateModel(model);
11
+ if (!validation.ok) {
12
+ return {
13
+ verdicts: properties.map((property) => ({ status: "error", property: property.name, message: validation.errors.join("; ") })),
14
+ stats: { states: 0, edges: 0, depth: 0 },
15
+ vacuityWarnings: [],
16
+ boundHits: []
17
+ };
18
+ }
19
+ installEnabledHook(model);
20
+ const parents = new Map();
21
+ const states = new Map();
22
+ const edges = [];
23
+ const enabledTransitionIds = new Set();
24
+ const boundHits = new Set();
25
+ let frontier = initialStates(model);
26
+ frontier = frontier.flatMap((state) => stabilize(model, state, initialChangedVars(model)));
27
+ frontier.sort(compareStates(model));
28
+ for (const state of frontier) {
29
+ const canon = canonicalState(model, state);
30
+ if (!parents.has(canon)) {
31
+ parents.set(canon, { parent: null, transition: null, pre: null, post: state });
32
+ states.set(canon, state);
33
+ }
34
+ }
35
+ const verdicts = new Map();
36
+ let depth = 0;
37
+ let edgeCount = 0;
38
+ observeStates(model, properties, frontier, parents, verdicts);
39
+ while (frontier.length > 0 && depth < model.bounds.maxDepth) {
40
+ const next = [];
41
+ for (const pre of frontier) {
42
+ const preCanon = canonicalState(model, pre);
43
+ const enabled = enabledTransitions(model, pre);
44
+ for (const transition of enabled) {
45
+ enabledTransitionIds.add(transition.id);
46
+ const rawPosts = applyEffect(model, pre, transition.effect, { onBoundHit: () => boundHits.add(`token cap exhausted at ${transition.id}`) });
47
+ if (rawPosts.length === 0 && effectContainsEnqueue(transition.effect)) {
48
+ boundHits.add(`pending cap saturated at ${transition.id}`);
49
+ }
50
+ for (const rawPost of rawPosts) {
51
+ for (const post of stabilize(model, rawPost, changedVars(pre, rawPost))) {
52
+ edgeCount += 1;
53
+ const postCanon = canonicalState(model, post);
54
+ const step = facts(pre, post, transition);
55
+ edges.push({ preCanon, postCanon, pre, post, transition, step });
56
+ observeEdge(model, properties, pre, post, transition, step, parents, verdicts);
57
+ if (!parents.has(postCanon)) {
58
+ parents.set(postCanon, { parent: preCanon, transition, pre, post });
59
+ states.set(postCanon, post);
60
+ next.push(post);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ }
66
+ frontier = next.sort(compareStates(model));
67
+ observeStates(model, properties, frontier, parents, verdicts);
68
+ depth += 1;
69
+ }
70
+ recordMaxDepthBoundHits(model, frontier, enabledTransitionIds, boundHits);
71
+ finalizeProperties(model, properties, parents, states, edges, verdicts);
72
+ return {
73
+ verdicts: properties.map((property) => verdicts.get(property.name) ?? { status: "verified-within-bounds", property: property.name }),
74
+ stats: { states: parents.size, edges: edgeCount, depth },
75
+ vacuityWarnings: vacuityWarnings(model, states, enabledTransitionIds),
76
+ boundHits: [...boundHits].sort()
77
+ };
78
+ }
79
+ function recordMaxDepthBoundHits(model, frontier, enabledTransitionIds, boundHits) {
80
+ if (frontier.length === 0)
81
+ return;
82
+ const blockedTransitions = new Set();
83
+ for (const state of frontier) {
84
+ for (const transition of enabledTransitions(model, state)) {
85
+ enabledTransitionIds.add(transition.id);
86
+ blockedTransitions.add(transition.id);
87
+ }
88
+ }
89
+ for (const id of [...blockedTransitions].sort()) {
90
+ boundHits.add(`maxDepth reached before ${id}`);
91
+ }
92
+ }
93
+ function checkModelSliced(model, properties) {
94
+ const groups = new Map();
95
+ for (const property of properties) {
96
+ const slice = sliceModelForProperty(model, property);
97
+ const key = slice.vars.map((decl) => decl.id).join("\0");
98
+ const group = groups.get(key);
99
+ if (group)
100
+ group.properties.push(property);
101
+ else
102
+ groups.set(key, { model: slice, properties: [property] });
103
+ }
104
+ const verdicts = new Map();
105
+ let states = 0;
106
+ let edges = 0;
107
+ let depth = 0;
108
+ const vacuity = new Set();
109
+ const boundHits = new Set();
110
+ for (const group of groups.values()) {
111
+ const result = checkModelCore(group.model, group.properties);
112
+ for (const verdict of result.verdicts)
113
+ verdicts.set(verdict.property, verdict);
114
+ for (const warning of result.vacuityWarnings)
115
+ vacuity.add(warning);
116
+ for (const hit of result.boundHits)
117
+ boundHits.add(hit);
118
+ states += result.stats.states;
119
+ edges += result.stats.edges;
120
+ depth = Math.max(depth, result.stats.depth);
121
+ }
122
+ return {
123
+ verdicts: properties.map((property) => verdicts.get(property.name) ?? { status: "error", property: property.name, message: "missing sliced verdict" }),
124
+ stats: { states, edges, depth },
125
+ vacuityWarnings: [...vacuity].sort(),
126
+ boundHits: [...boundHits].sort()
127
+ };
128
+ }
129
+ export function sliceModel(model, propertyReads) {
130
+ return sliceModelForProperty(model, { reads: propertyReads });
131
+ }
132
+ function sliceModelForProperty(model, property) {
133
+ const systemVars = new Set(model.vars.filter((decl) => decl.id.startsWith("sys:")).map((decl) => decl.id));
134
+ const forcedTransitions = new Set(property.enabledTransitions ?? []);
135
+ const needed = new Set([...systemVars, ...(property.reads ?? []), ...enabledTransitionVars(model, forcedTransitions)]);
136
+ let changed = true;
137
+ while (changed) {
138
+ changed = false;
139
+ for (const transition of model.transitions) {
140
+ if (!transition.writes.some((write) => needed.has(write)))
141
+ continue;
142
+ for (const id of [...transition.reads, ...transition.writes]) {
143
+ if (!needed.has(id)) {
144
+ needed.add(id);
145
+ changed = true;
146
+ }
147
+ }
148
+ }
149
+ }
150
+ const vars = model.vars.filter((decl) => needed.has(decl.id));
151
+ const transitions = model.transitions.filter((transition) => forcedTransitions.has(transition.id) || transition.writes.some((write) => needed.has(write)) || transition.reads.some((read) => needed.has(read)));
152
+ return { ...model, vars, transitions };
153
+ }
154
+ function enabledTransitionVars(model, transitionIds) {
155
+ const vars = new Set();
156
+ for (const id of transitionIds) {
157
+ const transition = model.transitions.find((candidate) => candidate.id === id);
158
+ if (!transition)
159
+ continue;
160
+ vars.add("sys:route");
161
+ for (const read of transition.reads)
162
+ vars.add(read);
163
+ for (const write of transition.writes)
164
+ vars.add(write);
165
+ }
166
+ return [...vars].sort();
167
+ }
168
+ export function modelInitialStates(model) {
169
+ return initialStates(model).flatMap((state) => stabilize(model, state, initialChangedVars(model))).sort(compareStates(model));
170
+ }
171
+ export function modelSuccessors(model, pre) {
172
+ return enabledTransitions(model, pre).flatMap((transition) => applyEffect(model, pre, transition.effect).flatMap((rawPost) => stabilize(model, rawPost, changedVars(pre, rawPost)).map((post) => makeTraceStep(pre, post, transition))));
173
+ }
174
+ function initialStates(model) {
175
+ return model.vars.reduce((states, decl) => {
176
+ const initials = initialValues(decl.domain, decl.initial);
177
+ return states.flatMap((state) => initials.map((value) => ({ ...state, [decl.id]: value })));
178
+ }, [{}]).flatMap((state) => normalizeInitialRouteLocals(model, state));
179
+ }
180
+ function enabledTransitions(model, state) {
181
+ return [...model.transitions]
182
+ .sort((a, b) => a.id.localeCompare(b.id))
183
+ .filter((transition) => transition.cls !== "internal" && routeLocalMounted(model, transition, state) && guardHolds(model, transition, state));
184
+ }
185
+ function stabilize(model, state, changed) {
186
+ let states = [{ state, changed }];
187
+ for (let i = 0; i < model.bounds.maxInternalSteps; i += 1) {
188
+ const next = [];
189
+ let changed = false;
190
+ for (const candidate of states) {
191
+ const internal = model.transitions
192
+ .filter((transition) => transition.cls === "internal" && routeLocalMounted(model, transition, candidate.state) && internalTriggered(transition, candidate.changed) && guardHolds(model, transition, candidate.state))
193
+ .sort((a, b) => a.id.localeCompare(b.id));
194
+ if (internal.length === 0) {
195
+ next.push(candidate);
196
+ }
197
+ else {
198
+ changed = true;
199
+ for (const sequence of stabilizingSequences(internal)) {
200
+ next.push(...applyInternalSequence(model, candidate.state, sequence));
201
+ }
202
+ }
203
+ }
204
+ states = uniqueStabilizingStates(model, next);
205
+ if (!changed)
206
+ return states.map((candidate) => candidate.state);
207
+ }
208
+ throw new Error(`Internal transitions did not stabilize within ${model.bounds.maxInternalSteps} steps`);
209
+ }
210
+ function internalTriggered(transition, changed) {
211
+ if (!transition.triggeredBy || transition.triggeredBy.length === 0)
212
+ return true;
213
+ return transition.triggeredBy.some((id) => changed.has(id));
214
+ }
215
+ function stabilizingSequences(internal) {
216
+ if (!hasWriteConflict(internal))
217
+ return [internal.slice()];
218
+ return permutations(internal);
219
+ }
220
+ function applyInternalSequence(model, state, sequence) {
221
+ return sequence.reduce((states, transition) => states.flatMap((candidate) => {
222
+ if (!routeLocalMounted(model, transition, candidate.state) || !guardHolds(model, transition, candidate.state)) {
223
+ return [candidate];
224
+ }
225
+ return applyEffect(model, candidate.state, transition.effect).map((post) => ({
226
+ state: post,
227
+ changed: changedVars(state, post)
228
+ }));
229
+ }), [{ state, changed: new Set() }]);
230
+ }
231
+ function permutations(values) {
232
+ if (values.length <= 1)
233
+ return [values.slice()];
234
+ const out = [];
235
+ for (let index = 0; index < values.length; index += 1) {
236
+ const head = values[index];
237
+ const tail = values.filter((_, candidateIndex) => candidateIndex !== index);
238
+ for (const rest of permutations(tail))
239
+ out.push([head, ...rest]);
240
+ }
241
+ return out;
242
+ }
243
+ function hasWriteConflict(transitions) {
244
+ for (let i = 0; i < transitions.length; i += 1) {
245
+ for (let j = i + 1; j < transitions.length; j += 1) {
246
+ if (intersects(transitions[i].writes, transitions[j].writes))
247
+ return true;
248
+ }
249
+ }
250
+ return false;
251
+ }
252
+ function intersects(left, right) {
253
+ const seen = new Set(left);
254
+ return right.some((item) => seen.has(item));
255
+ }
256
+ function observeStates(model, properties, candidates, parents, verdicts) {
257
+ for (const state of candidates) {
258
+ const canon = canonicalState(model, state);
259
+ for (const property of properties) {
260
+ if (verdicts.has(property.name))
261
+ continue;
262
+ try {
263
+ if (property.kind === "always" && !property.predicate(checkedState(model, property, state, "state predicate"))) {
264
+ verdicts.set(property.name, replayCheckedVerdict("violated", property.name, traceTo(parents, canon)));
265
+ }
266
+ if (property.kind === "reachable" && property.predicate(checkedState(model, property, state, "state predicate"))) {
267
+ verdicts.set(property.name, replayCheckedVerdict("reachable", property.name, traceTo(parents, canon)));
268
+ }
269
+ }
270
+ catch (error) {
271
+ verdicts.set(property.name, { status: "error", property: property.name, message: error.message });
272
+ }
273
+ }
274
+ }
275
+ }
276
+ function observeEdge(model, properties, pre, post, transition, step, parents, verdicts) {
277
+ for (const property of properties) {
278
+ if (verdicts.has(property.name))
279
+ continue;
280
+ if (property.kind !== "alwaysStep")
281
+ continue;
282
+ try {
283
+ if (!property.predicate(checkedState(model, property, pre, "step pre-state"), step, checkedState(model, property, post, "step post-state"))) {
284
+ const preCanon = canonicalState(model, pre);
285
+ verdicts.set(property.name, replayCheckedVerdict("violated", property.name, { steps: [...traceTo(parents, preCanon).steps, makeTraceStep(pre, post, transition)] }));
286
+ }
287
+ }
288
+ catch (error) {
289
+ verdicts.set(property.name, { status: "error", property: property.name, message: error.message });
290
+ }
291
+ }
292
+ }
293
+ function finalizeProperties(model, properties, parents, states, edges, verdicts) {
294
+ for (const property of properties) {
295
+ if (verdicts.has(property.name))
296
+ continue;
297
+ try {
298
+ if (property.kind === "reachable") {
299
+ verdicts.set(property.name, { status: "vacuous-warning", property: property.name, message: "No reachable witness within bounds" });
300
+ }
301
+ if (property.kind === "reachableFrom") {
302
+ const goalCanons = [...states].filter(([, state]) => property.goal(checkedState(model, property, state, "reachableFrom goal"))).map(([canon]) => canon);
303
+ const backward = new Set(goalCanons);
304
+ let changed = true;
305
+ while (changed) {
306
+ changed = false;
307
+ for (const edge of edges) {
308
+ if (backward.has(edge.postCanon) && !backward.has(edge.preCanon)) {
309
+ backward.add(edge.preCanon);
310
+ changed = true;
311
+ }
312
+ }
313
+ }
314
+ const witness = [...states].find(([canon, state]) => property.when(checkedState(model, property, state, "reachableFrom when")) && !backward.has(canon));
315
+ if (witness) {
316
+ verdicts.set(property.name, {
317
+ status: "violated",
318
+ property: property.name,
319
+ trace: traceTo(parents, witness[0]),
320
+ replayable: false,
321
+ replayBlockedReason: "reachableFrom counterexamples assert absence of a path and are not replayable"
322
+ });
323
+ }
324
+ }
325
+ if (property.kind === "leadsToWithin") {
326
+ const triggerEdges = edges.filter((edge) => property.trigger(edge.step));
327
+ if (triggerEdges.length === 0) {
328
+ verdicts.set(property.name, { status: "vacuous-warning", property: property.name, message: "Trigger never fired within bounds" });
329
+ continue;
330
+ }
331
+ const failure = triggerEdges.map((edge) => ({ edge, suffix: failingSuffixWithin(model, property, edge.post, edges) })).find((candidate) => candidate.suffix);
332
+ if (failure) {
333
+ verdicts.set(property.name, replayCheckedVerdict("violated", property.name, {
334
+ steps: [
335
+ ...traceTo(parents, failure.edge.preCanon).steps,
336
+ makeTraceStep(failure.edge.pre, failure.edge.post, failure.edge.transition),
337
+ ...failure.suffix.map((edge) => makeTraceStep(edge.pre, edge.post, edge.transition))
338
+ ]
339
+ }));
340
+ }
341
+ }
342
+ }
343
+ catch (error) {
344
+ verdicts.set(property.name, { status: "error", property: property.name, message: error.message });
345
+ }
346
+ }
347
+ }
348
+ function failingSuffixWithin(model, property, start, graphEdges) {
349
+ const maxSteps = property.budget.steps ?? property.budget.environment ?? 0;
350
+ const memo = new Map();
351
+ const visit = (state, depth) => {
352
+ if (property.goal(checkedState(model, property, state, "leadsToWithin goal")))
353
+ return undefined;
354
+ const canon = canonicalState(model, state);
355
+ const key = `${canon}:${depth}`;
356
+ const cached = memo.get(key);
357
+ if (cached !== undefined)
358
+ return cached ?? undefined;
359
+ const successors = graphEdges.filter((edge) => edge.preCanon === canon && schedulerAllows(property, edge.transition));
360
+ if (successors.length === 0) {
361
+ memo.set(key, []);
362
+ return [];
363
+ }
364
+ if (depth >= maxSteps) {
365
+ memo.set(key, [successors[0]]);
366
+ return [successors[0]];
367
+ }
368
+ for (const edge of successors) {
369
+ const suffix = visit(edge.post, depth + 1);
370
+ if (suffix) {
371
+ const failure = [edge, ...suffix];
372
+ memo.set(key, failure);
373
+ return failure;
374
+ }
375
+ }
376
+ memo.set(key, null);
377
+ return undefined;
378
+ };
379
+ return visit(start, 0);
380
+ }
381
+ function schedulerAllows(property, transition) {
382
+ if (transition.cls === "env" || transition.cls === "library" || transition.cls === "internal")
383
+ return true;
384
+ return property.allowUserEvents === true && (transition.cls === "user" || transition.cls === "nav");
385
+ }
386
+ function checkedState(model, property, state, context) {
387
+ if (property.reads === undefined)
388
+ return state;
389
+ const allowed = allowedPropertyReads(model, property);
390
+ return new Proxy(state, {
391
+ get(target, key, receiver) {
392
+ if (typeof key === "string" && !allowed.has(key)) {
393
+ throw new Error(`${property.name}: ${context} read undeclared var ${key}`);
394
+ }
395
+ return Reflect.get(target, key, receiver);
396
+ }
397
+ });
398
+ }
399
+ function allowedPropertyReads(model, property) {
400
+ return new Set([...(property.reads ?? []), ...enabledTransitionVars(model, new Set(property.enabledTransitions ?? []))]);
401
+ }
402
+ function traceTo(parents, canon) {
403
+ const steps = [];
404
+ let current = canon;
405
+ while (current) {
406
+ const parent = parents.get(current);
407
+ if (!parent)
408
+ break;
409
+ if (parent.parent && parent.transition && parent.pre) {
410
+ steps.push(makeTraceStep(parent.pre, parent.post, parent.transition));
411
+ }
412
+ current = parent.parent;
413
+ }
414
+ return { steps: steps.reverse() };
415
+ }
416
+ function makeTraceStep(pre, post, transition) {
417
+ return { transitionId: transition.id, label: transition.label, pre, post, diff: diff(pre, post) };
418
+ }
419
+ function replayCheckedVerdict(status, property, trace) {
420
+ const replayBlockedReason = replayBlockedReasonForTrace(trace);
421
+ if (!replayBlockedReason)
422
+ return { status, property, trace };
423
+ return { status, property, trace, replayable: false, replayBlockedReason };
424
+ }
425
+ function replayBlockedReasonForTrace(trace) {
426
+ const blocked = trace.steps
427
+ .filter((step) => requiresLocator(step.label) && !step.label.locator)
428
+ .map((step) => `${step.transitionId}:${step.label.kind}`);
429
+ if (blocked.length === 0)
430
+ return undefined;
431
+ return `trace contains locatorless replay steps: ${blocked.join(", ")}`;
432
+ }
433
+ function requiresLocator(label) {
434
+ return label.kind === "click" || label.kind === "submit" || label.kind === "input";
435
+ }
436
+ function facts(pre, post, transition) {
437
+ const before = readPending(pre);
438
+ const after = readPending(post);
439
+ const enqueued = after.find((op) => !before.some((candidate) => sameOp(candidate, op)));
440
+ const dequeued = before.find((op) => !after.some((candidate) => sameOp(candidate, op)));
441
+ return {
442
+ transition,
443
+ enqueued: (op) => Boolean(enqueued && enqueued.opId === op),
444
+ resolved: (op, outcome) => transition.label.kind === "resolve" && transition.label.op === op && (!outcome || transition.label.outcome === outcome),
445
+ navigatedTo: (route) => post["sys:route"] === route && pre["sys:route"] !== route,
446
+ op: enqueued ? { id: enqueued.opId, continuation: enqueued.continuation, args: enqueued.args } : dequeued ? { id: dequeued.opId, continuation: dequeued.continuation, args: dequeued.args } : undefined
447
+ };
448
+ }
449
+ function sameOp(a, b) {
450
+ return a.opId === b.opId && a.continuation === b.continuation && JSON.stringify(a.args) === JSON.stringify(b.args);
451
+ }
452
+ function diff(pre, post) {
453
+ const ids = new Set([...Object.keys(pre), ...Object.keys(post)]);
454
+ return Object.fromEntries([...ids]
455
+ .filter((id) => JSON.stringify(pre[id]) !== JSON.stringify(post[id]))
456
+ .map((id) => [id, { before: pre[id], after: post[id] }]));
457
+ }
458
+ function uniqueStates(model, states) {
459
+ const out = [];
460
+ const seen = new Set();
461
+ for (const state of states) {
462
+ const canon = canonicalState(model, state);
463
+ if (!seen.has(canon)) {
464
+ seen.add(canon);
465
+ out.push(state);
466
+ }
467
+ }
468
+ return out;
469
+ }
470
+ function uniqueStabilizingStates(model, states) {
471
+ const out = [];
472
+ const seen = new Set();
473
+ for (const candidate of states) {
474
+ const canon = canonicalState(model, candidate.state);
475
+ if (!seen.has(canon)) {
476
+ seen.add(canon);
477
+ out.push(candidate);
478
+ }
479
+ }
480
+ return out;
481
+ }
482
+ function changedVars(pre, post) {
483
+ const ids = new Set([...Object.keys(pre), ...Object.keys(post)]);
484
+ return new Set([...ids].filter((id) => JSON.stringify(pre[id]) !== JSON.stringify(post[id])));
485
+ }
486
+ function initialChangedVars(model) {
487
+ return new Set(model.vars.map((decl) => decl.id));
488
+ }
489
+ function compareStates(model) {
490
+ return (a, b) => canonicalState(model, a).localeCompare(canonicalState(model, b));
491
+ }
492
+ function installEnabledHook(model) {
493
+ globalThis.__modalityEvalGuard = (transition, state) => model.transitions.includes(transition) && routeLocalMounted(model, transition, state) && guardHolds(model, transition, state);
494
+ }
495
+ function vacuityWarnings(model, states, enabledTransitionIds) {
496
+ const warnings = [];
497
+ for (const transition of model.transitions) {
498
+ if (transition.cls !== "internal" && !enabledTransitionIds.has(transition.id)) {
499
+ warnings.push(`transition never enabled: ${transition.id}`);
500
+ }
501
+ }
502
+ for (const decl of model.vars) {
503
+ if (decl.domain.kind !== "enum")
504
+ continue;
505
+ const inhabited = new Set([...states.values()].map((state) => state[decl.id]).filter((value) => typeof value === "string"));
506
+ for (const value of decl.domain.values) {
507
+ if (!inhabited.has(value))
508
+ warnings.push(`enum value never inhabited: ${decl.id}=${value}`);
509
+ }
510
+ }
511
+ return warnings.sort();
512
+ }
513
+ function effectContainsEnqueue(effect) {
514
+ if (effect.kind === "enqueue")
515
+ return true;
516
+ if (effect.kind === "seq")
517
+ return effect.effects.some(effectContainsEnqueue);
518
+ if (effect.kind === "if")
519
+ return effectContainsEnqueue(effect.then) || effectContainsEnqueue(effect.else);
520
+ return false;
521
+ }
522
+ function routeLocalMounted(model, transition, state) {
523
+ const currentRoute = state["sys:route"];
524
+ const touched = new Set([...transition.reads, ...transition.writes]);
525
+ for (const decl of model.vars) {
526
+ if (decl.scope.kind === "route-local" && touched.has(decl.id) && decl.scope.route !== currentRoute) {
527
+ return false;
528
+ }
529
+ }
530
+ return true;
531
+ }
532
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checker/search/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,2BAA2B,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAqC9F,MAAM,UAAU,UAAU,CAAC,KAAY,EAAE,UAA+B,EAAE,UAAwB,EAAE;IAClG,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;QAC7G,OAAO,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,cAAc,CAAC,KAAY,EAAE,UAA+B;IACnE,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,OAAO;YACL,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7H,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;YACxC,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,IAAI,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3F,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/E,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IACpD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE9D,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAiB,EAAE,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC/C,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;gBACjC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,0BAA0B,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC5I,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtE,SAAS,CAAC,GAAG,CAAC,4BAA4B,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7D,CAAC;gBACD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;wBACxE,SAAS,IAAI,CAAC,CAAC;wBACf,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;wBAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;wBAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;wBACjE,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;wBAC/E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;4BAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;4BACpE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;4BAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAClB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3C,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9D,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IAED,uBAAuB,CAAC,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAC;IAC1E,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxE,OAAO;QACL,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,wBAAwB,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpI,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;QACxD,eAAe,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,oBAAoB,CAAC;QACrE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAY,EACZ,QAA+B,EAC/B,oBAAiC,EACjC,SAAsB;IAEtB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAClC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,KAAK,MAAM,UAAU,IAAI,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YAC1D,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACxC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAChD,SAAS,CAAC,GAAG,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAY,EAAE,UAA+B;IACrE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoD,CAAC;IAC3E,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK;YAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;YACtC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IACpD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7D,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;YAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/E,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,eAAe;YAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS;YAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvD,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAC9B,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAC5B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;QACtJ,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;QAC/B,eAAe,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE;QACpC,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAY,EAAE,aAAgC;IACvE,OAAO,qBAAqB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAY,EAAE,QAAwD;IACnG,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3G,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACvH,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,OAAO,OAAO,EAAE,CAAC;QACf,OAAO,GAAG,KAAK,CAAC;QAChB,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YAC3C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAAE,SAAS;YACpE,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBACpB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACf,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChN,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAY,EAAE,aAA0B;IACrE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,UAAU;YAAE,SAAS;QAC1B,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM;YAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC7C,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAChI,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAY,EAAE,GAAe;IAC3D,OAAO,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAC3D,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC7D,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CACzG,CACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAY;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAe,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAY,EAAE,KAAiB;IACzD,OAAO,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;SAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACxC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,KAAK,UAAU,IAAI,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;AAClJ,CAAC;AAOD,SAAS,SAAS,CAAC,KAAY,EAAE,KAAiB,EAAE,OAA4B;IAC9E,IAAI,MAAM,GAAuB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAuB,EAAE,CAAC;QACpC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW;iBAC/B,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,KAAK,UAAU,IAAI,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;iBACpN,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,IAAI,CAAC;gBACf,KAAK,MAAM,QAAQ,IAAI,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACtD,IAAI,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,GAAG,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,iDAAiD,KAAK,CAAC,MAAM,CAAC,gBAAgB,QAAQ,CAAC,CAAC;AAC1G,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAsB,EAAE,OAA4B;IAC7E,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChF,OAAO,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,oBAAoB,CAAC,QAA+B;IAC3D,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3D,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAY,EAAE,KAAiB,EAAE,QAA+B;IAC7F,OAAO,QAAQ,CAAC,MAAM,CACpB,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CACrB,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAC3B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9G,OAAO,CAAC,SAAS,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC3E,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;SAClC,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,EACJ,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,GAAG,EAAU,EAAE,CAAC,CACxC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAI,MAAoB;IAC3C,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,MAAM,GAAG,GAAU,EAAE,CAAC;IACtB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC;QAC5E,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAkC;IAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,IAAuB,EAAE,KAAwB;IACnE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,aAAa,CACpB,KAAY,EACZ,UAA+B,EAC/B,UAAiC,EACjC,OAA4B,EAC5B,QAAsC;IAEtC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAClC,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC1C,IAAI,CAAC;gBACH,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC;oBAC/G,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACxG,CAAC;gBACD,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC;oBACjH,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzG,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/G,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,KAAY,EACZ,UAA+B,EAC/B,GAAe,EACf,IAAgB,EAChB,UAAsB,EACtB,IAAe,EACf,OAA4B,EAC5B,QAAsC;IAEtC,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QAC1C,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY;YAAE,SAAS;QAC7C,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,gBAAgB,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC;gBAC5I,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC5C,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvK,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAY,EACZ,UAA+B,EAC/B,OAA4B,EAC5B,MAA+B,EAC/B,KAAsB,EACtB,QAAsC;IAEtC,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QAC1C,IAAI,CAAC;YACH,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAClC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC,CAAC;YACrI,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACtC,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBACxJ,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;gBACrC,IAAI,OAAO,GAAG,IAAI,CAAC;gBACnB,OAAO,OAAO,EAAE,CAAC;oBACf,OAAO,GAAG,KAAK,CAAC;oBAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;4BACjE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;4BAC5B,OAAO,GAAG,IAAI,CAAC;wBACjB,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxJ,IAAI,OAAO,EAAE,CAAC;oBACZ,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;wBAC1B,MAAM,EAAE,UAAU;wBAClB,QAAQ,EAAE,QAAQ,CAAC,IAAI;wBACvB,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;wBACnC,UAAU,EAAE,KAAK;wBACjB,mBAAmB,EAAE,+EAA+E;qBACrG,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACtC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9B,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAC;oBAClI,SAAS;gBACX,CAAC;gBACD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC7J,IAAI,OAAO,EAAE,CAAC;oBACZ,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE;wBAC1E,KAAK,EAAE;4BACL,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK;4BAChD,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;4BAC3E,GAAG,OAAO,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;yBACtF;qBACF,CAAC,CAAC,CAAC;gBACN,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAY,EACZ,QAAsD,EACtD,KAAiB,EACjB,UAA2B;IAE3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC9C,MAAM,KAAK,GAAG,CAAC,KAAiB,EAAE,KAAa,EAAsB,EAAE;QACrE,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QAChG,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,IAAI,SAAS,CAAC;QACrD,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,IAAI,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACtH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YAChC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC3C,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC;gBAClC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACvB,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IACF,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,eAAe,CAAC,QAAsD,EAAE,UAAsB;IACrG,IAAI,UAAU,CAAC,GAAG,KAAK,KAAK,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC3G,OAAO,QAAQ,CAAC,eAAe,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,MAAM,IAAI,UAAU,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;AACtG,CAAC;AAED,SAAS,YAAY,CAAC,KAAY,EAAE,QAAkB,EAAE,KAAiB,EAAE,OAAe;IACxF,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC/C,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtD,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE;QACtB,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ;YACvB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,KAAK,OAAO,wBAAwB,GAAG,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAY,CAAC;QACvD,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAY,EAAE,QAAwD;IAClG,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,qBAAqB,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3H,CAAC;AAED,SAAS,OAAO,CAAC,OAA4B,EAAE,KAAa;IAC1D,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAkB,KAAK,CAAC;IACnC,OAAO,OAAO,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM;YAAE,MAAM;QACnB,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,aAAa,CAAC,GAAe,EAAE,IAAgB,EAAE,UAAsB;IAC9E,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;AACpG,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAgC,EAChC,QAAgB,EAChB,KAAY;IAEZ,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,CAAC,mBAAmB;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC7D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;AAC7E,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAY;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK;SACxB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;SACpE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,4CAA4C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,KAAiB;IACxC,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AACrF,CAAC;AAED,SAAS,KAAK,CAAC,GAAe,EAAE,IAAgB,EAAE,UAAsB;IACtE,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACxF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACxF,OAAO;QACL,UAAU;QACV,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC;QAC3D,QAAQ,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC;QAClJ,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,KAAK;QACjF,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;KACxM,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,CAAY,EAAE,CAAY;IACxC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACrH,CAAC;AAED,SAAS,IAAI,CAAC,GAAe,EAAE,IAAgB;IAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC,WAAW,CACvB,CAAC,GAAG,GAAG,CAAC;SACL,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;SACpE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAC3D,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAY,EAAE,MAA6B;IAC/D,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAY,EAAE,MAAmC;IAChF,MAAM,GAAG,GAAuB,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,GAAe,EAAE,IAAgB;IACpD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjE,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAY;IACtC,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,aAAa,CAAC,KAAY;IACjC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAY;IACrC,UAAyG,CAAC,mBAAmB,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CACrJ,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AAClI,CAAC;AAED,SAAS,eAAe,CAAC,KAAY,EAAE,MAA+B,EAAE,oBAAiC;IACvG,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QAC3C,IAAI,UAAU,CAAC,GAAG,KAAK,UAAU,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9E,QAAQ,CAAC,IAAI,CAAC,6BAA6B,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QAC1C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC;QAC7I,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,+BAA+B,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,qBAAqB,CAAC,MAA4B;IACzD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1G,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAY,EAAE,UAAsB,EAAE,KAAiB;IAChF,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;YACnG,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { sliceModel } from "../search/index.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/checker/slicing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { sliceModel } from "../search/index.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checker/slicing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { modelInitialStates, modelSuccessors } from "../search/index.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/checker/traces/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { modelInitialStates, modelSuccessors } from "../search/index.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checker/traces/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import * as ts from "typescript";
2
+ import type { AbstractDomain, StateVarDecl, Transition, Value } from "modality-ts/kernel";
3
+ import type { WriteChannel } from "./spi/index.js";
4
+ export * from "./pipeline/index.js";
5
+ export * from "./spi/index.js";
6
+ export interface UseStateExtractionOptions {
7
+ route?: string;
8
+ fileName?: string;
9
+ effectApis?: readonly string[];
10
+ asyncOutcomes?: Record<string, {
11
+ success: Value;
12
+ error?: Value;
13
+ }>;
14
+ stateVars?: readonly StateVarDecl[];
15
+ writeChannels?: readonly WriteChannel[];
16
+ }
17
+ export interface ExtractionWarning {
18
+ message: string;
19
+ line?: number;
20
+ }
21
+ export interface UseStateExtractionResult {
22
+ vars: StateVarDecl[];
23
+ warnings: ExtractionWarning[];
24
+ }
25
+ export interface ExtractedModelSkeleton extends UseStateExtractionResult {
26
+ transitions: Transition[];
27
+ }
28
+ export declare function inferDomainFromTypeNode(node: ts.TypeNode | undefined): AbstractDomain;
29
+ export declare function extractUseStateVars(sourceText: string, options?: UseStateExtractionOptions): UseStateExtractionResult;
30
+ export declare function extractUseStateSkeleton(sourceText: string, options?: UseStateExtractionOptions): ExtractedModelSkeleton;
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extraction/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAA6B,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACrH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAE/B,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;IAClE,SAAS,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IACpC,aAAa,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAuB,SAAQ,wBAAwB;IACtE,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AA0CD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,SAAS,GAAG,cAAc,CAuBrF;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,yBAA8B,GAAG,wBAAwB,CAEzH;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,yBAA8B,GAAG,sBAAsB,CAyI3H"}