@corenel/tools-web 0.11.4 → 0.12.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 (46) hide show
  1. package/dist/composerPicks.d.ts +30 -0
  2. package/dist/composerPicks.d.ts.map +1 -0
  3. package/dist/composerPicks.js +123 -0
  4. package/dist/composerPicks.js.map +1 -0
  5. package/dist/core/protocol.d.ts +36 -1
  6. package/dist/core/protocol.d.ts.map +1 -1
  7. package/dist/injectionCheck.d.ts +44 -0
  8. package/dist/injectionCheck.d.ts.map +1 -0
  9. package/dist/injectionCheck.js +73 -0
  10. package/dist/injectionCheck.js.map +1 -0
  11. package/dist/liveFold.d.ts +4 -0
  12. package/dist/liveFold.d.ts.map +1 -1
  13. package/dist/liveFold.js +15 -0
  14. package/dist/liveFold.js.map +1 -1
  15. package/dist/mutationHook.d.ts +32 -0
  16. package/dist/mutationHook.d.ts.map +1 -0
  17. package/dist/mutationHook.js +108 -0
  18. package/dist/mutationHook.js.map +1 -0
  19. package/dist/runtime.d.ts +145 -41
  20. package/dist/runtime.d.ts.map +1 -1
  21. package/dist/runtime.js +1045 -975
  22. package/dist/runtime.js.map +1 -1
  23. package/dist/sessionTools.d.ts +5 -3
  24. package/dist/sessionTools.d.ts.map +1 -1
  25. package/dist/sessionTools.js +12 -7
  26. package/dist/sessionTools.js.map +1 -1
  27. package/dist/systemOneGate/gate.d.ts +45 -0
  28. package/dist/systemOneGate/gate.d.ts.map +1 -0
  29. package/dist/systemOneGate/gate.js +380 -0
  30. package/dist/systemOneGate/gate.js.map +1 -0
  31. package/dist/systemOneGate/requests.d.ts +67 -0
  32. package/dist/systemOneGate/requests.d.ts.map +1 -0
  33. package/dist/systemOneGate/requests.js +201 -0
  34. package/dist/systemOneGate/requests.js.map +1 -0
  35. package/dist/workerClient.d.ts +39 -1
  36. package/dist/workerClient.d.ts.map +1 -1
  37. package/dist/workerClient.js +96 -7
  38. package/dist/workerClient.js.map +1 -1
  39. package/dist/workerHandler.d.ts.map +1 -1
  40. package/dist/workerHandler.js +118 -20
  41. package/dist/workerHandler.js.map +1 -1
  42. package/dist/workspaceBlock.d.ts +5 -0
  43. package/dist/workspaceBlock.d.ts.map +1 -0
  44. package/dist/workspaceBlock.js +18 -0
  45. package/dist/workspaceBlock.js.map +1 -0
  46. package/package.json +4 -4
@@ -0,0 +1,380 @@
1
+ import { INJECTION_CHECK_NAME } from '@corenel/protocol';
2
+ import { checksTool, errorCode } from '../injectionCheck';
3
+ import { buildEventRequests, commitStateFits, hooksFor, readEventAnswers } from './requests';
4
+ export const CHECK_NAME = INJECTION_CHECK_NAME;
5
+ const NO_ANSWER = 'System One did not answer';
6
+ const REFUSED = new Set(['nothing', 'secret', 'guard']);
7
+ /** Why a before-commit hook was not sent, as its ask says it. */
8
+ const CHANGES_FAILED = {
9
+ changes_unreadable: 'the changes this commit would take could not be read',
10
+ changes_too_large: 'the changes this commit would take are too large to send',
11
+ };
12
+ export const beforeRefusal = (name) => `Blocked: the "${name}" check stopped this tool call before it ran.`;
13
+ export const afterRefusal = (name) => `Blocked: the "${name}" check stopped this tool result. Its content was not passed on.`;
14
+ export const noteText = (name, note) => `[Note from the "${name}" hook] ${note}\n\n`;
15
+ const two = (n) => n.toFixed(2);
16
+ const isObject = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);
17
+ export function createSystemOneGate(post, opts = {}) {
18
+ const maxInFlight = Math.max(1, opts.maxInFlight ?? 4);
19
+ // The gate's own bound on one post, sign-in token included: a post that never
20
+ // settles would otherwise hold its queue slot for good and hang the run.
21
+ const timeoutMs = opts.timeoutMs ?? 20000;
22
+ const now = opts.now ?? (() => Date.now());
23
+ let off = false;
24
+ let inFlight = 0;
25
+ const waiting = [];
26
+ /** A slot for one post. FIFO: a freed slot goes straight to the oldest waiter. */
27
+ function acquire() {
28
+ if (inFlight < maxInFlight) {
29
+ inFlight++;
30
+ return Promise.resolve();
31
+ }
32
+ return new Promise((resolve) => { waiting.push(resolve); });
33
+ }
34
+ function release() {
35
+ const next = waiting.shift();
36
+ if (next)
37
+ next();
38
+ else
39
+ inFlight--;
40
+ }
41
+ async function send(req) {
42
+ await acquire();
43
+ const started = now();
44
+ try {
45
+ let res;
46
+ let timer;
47
+ try {
48
+ const expired = new Promise((_, reject) => {
49
+ timer = setTimeout(() => reject(Object.assign(new Error('System One did not answer in time'), { name: 'TimeoutError' })), timeoutMs);
50
+ });
51
+ res = await Promise.race([post(req.body), expired]);
52
+ }
53
+ catch (e) {
54
+ const timeout = isObject(e) && e.name === 'TimeoutError';
55
+ return { kind: 'failed', code: timeout ? 'timeout' : 'network', ms: now() - started };
56
+ }
57
+ finally {
58
+ clearTimeout(timer);
59
+ }
60
+ const ms = now() - started;
61
+ if (!res)
62
+ return { kind: 'skip' };
63
+ if (res.status === 503 && errorCode(res.status, res.body) === 'not_configured')
64
+ return { kind: 'off' };
65
+ if (res.status === 404 || res.status === 405)
66
+ return { kind: 'off' };
67
+ if (res.status < 200 || res.status > 299)
68
+ return { kind: 'failed', code: errorCode(res.status, res.body), ms };
69
+ const scores = readEventAnswers(res.body, req.keys);
70
+ if (!scores)
71
+ return { kind: 'failed', code: 'bad_answer', ms };
72
+ const body = isObject(res.body) ? res.body : {};
73
+ return {
74
+ kind: 'answered',
75
+ hooks: scores.hooks,
76
+ ...(scores.injection === undefined ? {} : { injection: scores.injection }),
77
+ provider: typeof body.provider === 'string' ? body.provider : 'unknown',
78
+ ...(typeof body.model === 'string' ? { model: body.model } : {}),
79
+ ms,
80
+ cut: req.cut,
81
+ };
82
+ }
83
+ finally {
84
+ release();
85
+ }
86
+ }
87
+ /** Whether to gate a before-commit event: false only for a known missing
88
+ * token. A probe that does not settle in time counts as signed in, so the
89
+ * post (and its own timeout) decides, never a silent pass. */
90
+ async function signedIn() {
91
+ if (!opts.hasToken)
92
+ return true;
93
+ let timer;
94
+ try {
95
+ const expired = new Promise((resolve) => { timer = setTimeout(() => resolve(true), timeoutMs); });
96
+ return (await Promise.race([opts.hasToken(), expired])) === true;
97
+ }
98
+ catch {
99
+ return false;
100
+ }
101
+ finally {
102
+ clearTimeout(timer);
103
+ }
104
+ }
105
+ /** What the commit would take, read once through the tool's host preview
106
+ * and bounded like a post. A refusal tagged with a known `reason` (nothing,
107
+ * secret, guard) is 'refused' and carries its text: the caller answers it as
108
+ * the tool result and never runs the real commit. An untagged refusal, an
109
+ * older sidecar's, a missing or non-text diff, a throw or a timeout is
110
+ * `changes_unreadable`; a cut diff or one over the state limit is
111
+ * `changes_too_large`. Both of those ask. */
112
+ async function readChanges(tool, args, tctx) {
113
+ const unreadable = { ok: false, code: 'changes_unreadable' };
114
+ if (!tool.approvalDetail)
115
+ return unreadable;
116
+ let timer;
117
+ let detail;
118
+ try {
119
+ const expired = new Promise((resolve) => { timer = setTimeout(() => resolve(null), timeoutMs); });
120
+ detail = await Promise.race([tool.approvalDetail(args, tctx, { changes: true }), expired]);
121
+ }
122
+ catch {
123
+ return unreadable;
124
+ }
125
+ finally {
126
+ clearTimeout(timer);
127
+ }
128
+ if (!detail)
129
+ return unreadable;
130
+ // Only a refusal the tool made on purpose: the real commit refuses the
131
+ // same way. Any other failure, or an older sidecar's untagged refusal, is
132
+ // a read that failed.
133
+ if (!detail.ok)
134
+ return detail.reason !== undefined && REFUSED.has(detail.reason) ? { ok: 'refused', error: detail.error } : unreadable;
135
+ if (typeof detail.diff !== 'string')
136
+ return unreadable;
137
+ if (detail.cut === true || !commitStateFits(tool.name, args, detail.diff))
138
+ return { ok: false, code: 'changes_too_large' };
139
+ return { ok: true, diff: detail.diff };
140
+ }
141
+ /** Ask System One about one event and decide: pass (with notes), block,
142
+ * off, or skip (no sign-in token: this event is not gated). Asks the person
143
+ * when anything asks. A hook in `unsent` is not sent: it asks, with why. */
144
+ async function evaluate(args) {
145
+ const unsent = args.unsent ?? new Map();
146
+ const requests = buildEventRequests({
147
+ toolName: args.toolName, args: args.toolArgs, output: args.output, changes: args.changes,
148
+ hooks: args.hooks.filter((h) => !unsent.has(h)), injection: args.injection,
149
+ });
150
+ if (requests.length === 0 && unsent.size === 0)
151
+ return { kind: 'pass', notes: [], marks: [] };
152
+ const sent = await Promise.all(requests.map(send));
153
+ if (sent.some((s) => s.kind === 'off')) {
154
+ off = true;
155
+ return { kind: 'off' };
156
+ }
157
+ if (sent.some((s) => s.kind === 'skip'))
158
+ return { kind: 'skip' };
159
+ const { askAt, blockAt } = args.gate.rules.checks;
160
+ const reasons = [];
161
+ const asking = [];
162
+ const notes = [];
163
+ const marks = [];
164
+ let check;
165
+ let checkAsked = false;
166
+ let checkFailed = false;
167
+ // The check: always in the first request when it was asked.
168
+ if (args.injection) {
169
+ const s = sent[0];
170
+ if (s.kind === 'answered' && s.injection !== undefined) {
171
+ check = { ok: true, score: s.injection, provider: s.provider, ...(s.model ? { model: s.model } : {}), ms: s.ms, cut: s.cut };
172
+ if (s.injection >= blockAt) {
173
+ return { kind: 'block', name: CHECK_NAME, marks: [], check: { ...check, outcome: 'blocked' } };
174
+ }
175
+ if (s.injection >= askAt) {
176
+ checkAsked = true;
177
+ asking.push({ name: CHECK_NAME });
178
+ reasons.push(`${CHECK_NAME}: scored ${two(s.injection)}, asks at ${two(askAt)}`);
179
+ }
180
+ }
181
+ else if (s.kind === 'failed') {
182
+ check = { ok: false, code: s.code, ms: s.ms };
183
+ checkAsked = true;
184
+ checkFailed = true;
185
+ asking.push({ name: CHECK_NAME });
186
+ reasons.push(`${CHECK_NAME}: ${NO_ANSWER}`);
187
+ }
188
+ }
189
+ const checkWith = (outcome) => check ? { ...check, outcome } : undefined;
190
+ // Hooks, top to bottom. Each one's answer is in the request that carried it.
191
+ for (const hook of args.hooks) {
192
+ const why = unsent.get(hook);
193
+ if (why !== undefined) {
194
+ asking.push({ name: hook.name, hook });
195
+ reasons.push(`${hook.name}: ${CHANGES_FAILED[why]}`);
196
+ continue;
197
+ }
198
+ const s = sent[requests.findIndex((r) => [...r.keys.hook.values()].includes(hook))];
199
+ if (s.kind !== 'answered') {
200
+ asking.push({ name: hook.name, hook });
201
+ reasons.push(`${hook.name}: ${NO_ANSWER}`);
202
+ continue;
203
+ }
204
+ const score = s.hooks.get(hook.id);
205
+ if (score === undefined || score < hook.yesAt)
206
+ continue;
207
+ if (hook.action === 'block') {
208
+ // Asks earlier in the chain are never put to the person: the call is blocked.
209
+ for (const a of asking)
210
+ if (a.hook)
211
+ marks.push({ name: a.hook.name, action: a.hook.action, outcome: 'blocked' });
212
+ marks.push({ name: hook.name, action: 'block', outcome: 'blocked' });
213
+ return {
214
+ kind: 'block', name: hook.name, marks,
215
+ check: checkWith(checkAsked ? (checkFailed ? 'failed-asked-blocked' : 'blocked') : 'passed'),
216
+ };
217
+ }
218
+ if (hook.action === 'ask') {
219
+ asking.push({ name: hook.name, hook });
220
+ reasons.push(`${hook.name}: scored ${two(score)}, asks at ${two(hook.yesAt)}`);
221
+ }
222
+ else {
223
+ notes.push(hook);
224
+ }
225
+ }
226
+ if (asking.length === 0)
227
+ return { kind: 'pass', notes, marks, check: checkWith('passed') };
228
+ let allowed;
229
+ try {
230
+ allowed = await args.gate.ask({
231
+ runId: args.gate.runId, callId: args.callId, tool: args.toolName, reasons,
232
+ ...(args.output === undefined ? {} : { result: args.output }),
233
+ });
234
+ }
235
+ catch {
236
+ allowed = false;
237
+ }
238
+ allowed = allowed === true;
239
+ for (const a of asking)
240
+ if (a.hook)
241
+ marks.push({ name: a.hook.name, action: a.hook.action, outcome: allowed ? 'allowed' : 'blocked' });
242
+ const outcome = checkFailed
243
+ ? (allowed ? 'failed-asked-allowed' : 'failed-asked-blocked')
244
+ : checkAsked ? (allowed ? 'asked-allowed' : 'asked-blocked') : 'passed';
245
+ if (!allowed)
246
+ return { kind: 'block', name: asking[0].name, marks, check: checkWith(outcome) };
247
+ return { kind: 'pass', notes, marks, check: checkWith(outcome) };
248
+ }
249
+ function wrapOne(tool, gate) {
250
+ const checked = checksTool(tool);
251
+ const anyHook = hooksFor(gate.rules, 'before-tool', tool.name).length > 0
252
+ || hooksFor(gate.rules, 'after-tool', tool.name).length > 0;
253
+ if (!checked && !anyHook)
254
+ return tool;
255
+ return {
256
+ ...tool,
257
+ run: async (args, tctx) => {
258
+ const callId = tctx.callId ?? '';
259
+ const marks = [];
260
+ const notes = [];
261
+ let hooksOff = false;
262
+ let check;
263
+ let blockedText;
264
+ const flush = () => {
265
+ const hooks = marks.length > 0 || hooksOff
266
+ ? { marks, ...(hooksOff ? { off: true } : {}) }
267
+ : undefined;
268
+ if (!hooks && !check && blockedText === undefined)
269
+ return;
270
+ try {
271
+ gate.report(callId, tool.name, {
272
+ ...(check ? { check } : {}),
273
+ ...(hooks ? { hooks } : {}),
274
+ ...(blockedText === undefined ? {} : { blockedText }),
275
+ });
276
+ }
277
+ catch { /* a gone UI must not change the tool result */ }
278
+ };
279
+ // before-tool
280
+ const before = hooksFor(gate.rules, 'before-tool', tool.name);
281
+ let active = !off && gate.allow();
282
+ if (!active) {
283
+ if (before.length > 0)
284
+ hooksOff = true;
285
+ }
286
+ else if (before.length > 0) {
287
+ // args.preview is the model's to send and is never trusted: the real
288
+ // call is gated whatever it says.
289
+ const commitHooks = before.filter((h) => h.event === 'before-commit');
290
+ const hooks = before;
291
+ let changes;
292
+ let unsent;
293
+ let ungated = false;
294
+ if (commitHooks.length > 0) {
295
+ if (!await signedIn()) {
296
+ ungated = true;
297
+ }
298
+ else {
299
+ const c = await readChanges(tool, args, tctx);
300
+ if (c.ok === true) {
301
+ changes = c.diff;
302
+ }
303
+ else if (c.ok === 'refused') {
304
+ // The commit is not run: what made the preview refuse could
305
+ // be undone before it, and the commit would then go unjudged.
306
+ // The model gets the refusal the commit would have given.
307
+ flush();
308
+ return JSON.stringify({ ok: false, error: c.error });
309
+ }
310
+ else {
311
+ unsent = new Map(commitHooks.map((h) => [h, c.code]));
312
+ }
313
+ }
314
+ }
315
+ const v = ungated ? { kind: 'skip' }
316
+ : await evaluate({ gate, callId, toolName: tool.name, toolArgs: args, changes, hooks, unsent, injection: false });
317
+ if (v.kind === 'off') {
318
+ hooksOff = true;
319
+ active = false;
320
+ }
321
+ else if (v.kind !== 'skip') {
322
+ marks.push(...v.marks);
323
+ if (v.kind === 'block') {
324
+ flush();
325
+ return beforeRefusal(v.name);
326
+ }
327
+ notes.push(...v.notes);
328
+ }
329
+ }
330
+ let output;
331
+ try {
332
+ output = await tool.run(args, tctx);
333
+ }
334
+ catch (e) {
335
+ flush();
336
+ throw e;
337
+ }
338
+ // Not text: nothing reads it and nothing is put before it.
339
+ if (typeof output !== 'string') {
340
+ flush();
341
+ return output;
342
+ }
343
+ // after-tool
344
+ const after = hooksFor(gate.rules, 'after-tool', tool.name);
345
+ const injection = checked && output.trim() !== '';
346
+ const wouldApply = after.length > 0 || injection;
347
+ let afterNotes = [];
348
+ if (wouldApply && (!active || off || !gate.allow())) {
349
+ hooksOff = true;
350
+ }
351
+ else if (wouldApply) {
352
+ const v = await evaluate({ gate, callId, toolName: tool.name, toolArgs: args, output, hooks: after, injection });
353
+ if (v.kind === 'off') {
354
+ hooksOff = true;
355
+ }
356
+ else if (v.kind !== 'skip') {
357
+ marks.push(...v.marks);
358
+ check = v.check;
359
+ if (v.kind === 'block') {
360
+ blockedText = output;
361
+ flush();
362
+ return afterRefusal(v.name);
363
+ }
364
+ afterNotes = v.notes;
365
+ }
366
+ }
367
+ const all = [...notes, ...afterNotes];
368
+ for (const n of all)
369
+ marks.push({ name: n.name, action: 'note', outcome: 'noted' });
370
+ flush();
371
+ return all.map((n) => noteText(n.name, n.note ?? '')).join('') + output;
372
+ },
373
+ };
374
+ }
375
+ return {
376
+ rearm() { off = false; },
377
+ wrap(tools, gate) { return tools.map((t) => wrapOne(t, gate)); },
378
+ };
379
+ }
380
+ //# sourceMappingURL=gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.js","sourceRoot":"","sources":["../../systemOneGate/gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { HookRule, RouteCategory, SystemOneRules } from '@corenel/protocol';
2
+ /** The enabled hooks that apply to this event and tool, in list order. A
3
+ * `before-commit` hook applies on `before-tool` to sidecar_git_commit only. */
4
+ export declare function hooksFor(rules: SystemOneRules, event: 'before-tool' | 'after-tool', toolName: string): HookRule[];
5
+ export interface EventKeys {
6
+ hook: Map<string, HookRule>;
7
+ injection: boolean;
8
+ }
9
+ export interface EventRequest {
10
+ body: {
11
+ state: unknown;
12
+ questions: Record<string, unknown>;
13
+ };
14
+ keys: EventKeys;
15
+ cut: boolean;
16
+ }
17
+ /** True when a commit's arguments (its message) and `changes` fit the state
18
+ * whole. A before-commit hook is sent only then: System One never judges a
19
+ * commit from part of its changes. */
20
+ export declare function commitStateFits(toolName: string, args: unknown, changes: string): boolean;
21
+ /** The decisions requests for one tool event: at most 16 questions each, the
22
+ * injection check (key `injection`) first, hooks as `h0..hN`. Every request
23
+ * carries the same state. No requests when there is nothing to ask. */
24
+ export declare function buildEventRequests(args: {
25
+ toolName: string;
26
+ args: unknown;
27
+ output?: string;
28
+ /** A commit's diff, for a before-commit hook (never with `output`). */
29
+ changes?: string;
30
+ hooks: HookRule[];
31
+ injection: boolean;
32
+ }): EventRequest[];
33
+ /** The scores for one request: hook scores by hook id, and the injection score
34
+ * when it was asked. Null when any asked key is missing or is not a noul in [0,1]. */
35
+ export declare function readEventAnswers(body: unknown, keys: EventKeys): {
36
+ hooks: Map<string, number>;
37
+ injection?: number;
38
+ } | null;
39
+ export interface RouteItem {
40
+ id: string;
41
+ label: string;
42
+ task: string;
43
+ }
44
+ export interface RouteRequest {
45
+ body: {
46
+ state: {
47
+ items: Record<string, {
48
+ label: string;
49
+ task: string;
50
+ }>;
51
+ };
52
+ questions: Record<string, unknown>;
53
+ };
54
+ /** question key (q0..) to item id */
55
+ ids: Map<string, string>;
56
+ }
57
+ /** Batches of at most 16 items. Task text is cut to share the state budget; an
58
+ * item is never dropped. Categories are the criteria c0..cN of every question. */
59
+ export declare function buildRouteRequests(items: RouteItem[], categories: RouteCategory[]): RouteRequest[];
60
+ /** Category name and confidence per item id. An answer with no confidence reads
61
+ * as 0, so the caller's confidence floor sends it to the fallback model. Null
62
+ * when any asked item has no valid choice answer. */
63
+ export declare function readRouteAnswers(body: unknown, ids: Map<string, string>, categories: RouteCategory[]): Map<string, {
64
+ category: string;
65
+ confidence: number;
66
+ }> | null;
67
+ //# sourceMappingURL=requests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../../systemOneGate/requests.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAsCjF;+EAC+E;AAC/E,wBAAgB,QAAQ,CACtB,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,aAAa,GAAG,YAAY,EACnC,QAAQ,EAAE,MAAM,GACf,QAAQ,EAAE,CAOZ;AAED,MAAM,WAAW,SAAS;IAAG,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE;AAC9E,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE;AAkC7H;;sCAEsC;AACtC,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEzF;AAED;;uEAEuE;AACvE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB,GAAG,YAAY,EAAE,CAuBjB;AAED;sFACsF;AACtF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG;IAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAiB1H;AAED,MAAM,WAAW,SAAS;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACtE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QAAE,KAAK,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAChH,qCAAqC;IACrC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1B;AAED;kFACkF;AAClF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,CAkClG;AAED;;qDAEqD;AACrD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACxB,UAAU,EAAE,aAAa,EAAE,GAC1B,GAAG,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAa9D"}