@proophboard/exploration-runtime 0.0.0-stage → 0.1.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 (66) hide show
  1. package/dist/index.d.ts +68 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +61 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/lib/connectionRules.d.ts +39 -0
  6. package/dist/lib/connectionRules.d.ts.map +1 -0
  7. package/dist/lib/connectionRules.js +475 -0
  8. package/dist/lib/connectionRules.js.map +1 -0
  9. package/dist/lib/toClassName.d.ts +42 -0
  10. package/dist/lib/toClassName.d.ts.map +1 -0
  11. package/dist/lib/toClassName.js +81 -0
  12. package/dist/lib/toClassName.js.map +1 -0
  13. package/dist/playFunction/ambientTypes.d.ts +30 -0
  14. package/dist/playFunction/ambientTypes.d.ts.map +1 -0
  15. package/dist/playFunction/ambientTypes.js +174 -0
  16. package/dist/playFunction/ambientTypes.js.map +1 -0
  17. package/dist/playFunction/cascadeBudget.d.ts +53 -0
  18. package/dist/playFunction/cascadeBudget.d.ts.map +1 -0
  19. package/dist/playFunction/cascadeBudget.js +74 -0
  20. package/dist/playFunction/cascadeBudget.js.map +1 -0
  21. package/dist/playFunction/clock.d.ts +58 -0
  22. package/dist/playFunction/clock.d.ts.map +1 -0
  23. package/dist/playFunction/clock.js +104 -0
  24. package/dist/playFunction/clock.js.map +1 -0
  25. package/dist/playFunction/modelTypes.d.ts +74 -0
  26. package/dist/playFunction/modelTypes.d.ts.map +1 -0
  27. package/dist/playFunction/modelTypes.js +345 -0
  28. package/dist/playFunction/modelTypes.js.map +1 -0
  29. package/dist/playFunction/playLog.d.ts +29 -0
  30. package/dist/playFunction/playLog.d.ts.map +1 -0
  31. package/dist/playFunction/playLog.js +64 -0
  32. package/dist/playFunction/playLog.js.map +1 -0
  33. package/dist/playFunction/playType.d.ts +52 -0
  34. package/dist/playFunction/playType.d.ts.map +1 -0
  35. package/dist/playFunction/playType.js +94 -0
  36. package/dist/playFunction/playType.js.map +1 -0
  37. package/dist/playFunction/runtimeFold.d.ts +51 -0
  38. package/dist/playFunction/runtimeFold.d.ts.map +1 -0
  39. package/dist/playFunction/runtimeFold.js +620 -0
  40. package/dist/playFunction/runtimeFold.js.map +1 -0
  41. package/dist/playFunction/runtimeSteps.d.ts +45 -0
  42. package/dist/playFunction/runtimeSteps.d.ts.map +1 -0
  43. package/dist/playFunction/runtimeSteps.js +112 -0
  44. package/dist/playFunction/runtimeSteps.js.map +1 -0
  45. package/dist/playFunction/sandbox.d.ts +52 -0
  46. package/dist/playFunction/sandbox.d.ts.map +1 -0
  47. package/dist/playFunction/sandbox.js +91 -0
  48. package/dist/playFunction/sandbox.js.map +1 -0
  49. package/dist/playFunction/scenarioRunner.d.ts +49 -0
  50. package/dist/playFunction/scenarioRunner.d.ts.map +1 -0
  51. package/dist/playFunction/scenarioRunner.js +331 -0
  52. package/dist/playFunction/scenarioRunner.js.map +1 -0
  53. package/dist/playFunction/transpile.d.ts +33 -0
  54. package/dist/playFunction/transpile.d.ts.map +1 -0
  55. package/dist/playFunction/transpile.js +71 -0
  56. package/dist/playFunction/transpile.js.map +1 -0
  57. package/dist/types/eventModel.d.ts +79 -0
  58. package/dist/types/eventModel.d.ts.map +1 -0
  59. package/dist/types/eventModel.js +12 -0
  60. package/dist/types/eventModel.js.map +1 -0
  61. package/dist/types/exploration.d.ts +143 -0
  62. package/dist/types/exploration.d.ts.map +1 -0
  63. package/dist/types/exploration.js +28 -0
  64. package/dist/types/exploration.js.map +1 -0
  65. package/package.json +48 -4
  66. package/README.md +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playLog.js","sourceRoot":"","sources":["../../src/playFunction/playLog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAkBH,+EAA+E;AAC/E,MAAM,aAAa,GAAgC;IACjD,QAAQ,EAAE,SAAS,EAAE,eAAe;IACpC,MAAM,EAAI,SAAS,EAAE,oBAAoB;IACzC,KAAK,EAAK,SAAS,EAAE,6BAA6B;IAClD,IAAI,EAAM,SAAS,EAAE,6BAA6B;IAClD,KAAK,EAAK,SAAS,EAAE,gCAAgC;IACrD,OAAO,EAAG,SAAS,EAAE,2BAA2B;IAChD,KAAK,EAAK,SAAS,EAAE,0BAA0B;IAC/C,KAAK,EAAK,SAAS,EAAE,uCAAuC;IAC5D,OAAO,EAAG,SAAS,EAAE,6BAA6B;IAClD,IAAI,EAAM,SAAS,EAAE,0BAA0B;IAC/C,KAAK,EAAK,SAAS,EAAE,oBAAoB;CAC1C,CAAC;AAEF,+EAA+E;AAC/E,MAAM,SAAS,GAA+B;IAC5C,IAAI,EAAE,SAAS,EAAQ,YAAY;IACnC,UAAU,EAAE,SAAS,EAAE,aAAa;CACrC,CAAC;AAEF,MAAM,UAAU,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC;AAElD;;;GAGG;AACH,MAAM,UAAU,OAAO,CACrB,MAAkB,EAClB,OAAoB,EACpB,OAAe,EACf,GAAG,IAAe;IAElB,IAAI,CAAC,UAAU;QAAE,OAAO;IACxB,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,qEAAqE;IACrE,MAAM,MAAM,GAAG,MAAM,MAAM,OAAO,OAAO,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,cAAc,KAAK,+DAA+D,CAAC;IACpG,MAAM,OAAO,GAAG,SAAS,KAAK,kBAAkB,CAAC;IACjD,IAAI,CAAC;QACH,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,cAAc,CAAC,MAAkB;IAC/C,OAAO,CAAC,OAAoB,EAAE,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE,CACnE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * playType — helpers for the Play Function "Type" sub-editor (author-defined
3
+ * payload types, Exploration).
4
+ *
5
+ * STORAGE CONTRACT: `element.playType` holds a BARE TypeScript type EXPRESSION
6
+ * (e.g. `{ title: string; due?: string }`) — no alias, no name. It slots directly
7
+ * into the generated payload maps as `"<element>": <expr>;` (see modelTypes.ts).
8
+ *
9
+ * EDITOR CONTRACT: the author edits a VISIBLE, valid-standalone alias so Monaco
10
+ * type-checks it as a real type (not a statement block):
11
+ *
12
+ * type Payload = {
13
+ * title: string;
14
+ * };
15
+ *
16
+ * On save we strip the `type Payload =` wrapper (and optional trailing `;`) and
17
+ * store the inner expression; on load we re-wrap it. The fixed alias name
18
+ * (`Payload`) keeps extraction a deterministic prefix-strip — no AST parse, no
19
+ * name handling.
20
+ */
21
+ /** The fixed alias name the Type editor wraps the payload expression in. */
22
+ export declare const PLAY_TYPE_ALIAS = "Payload";
23
+ /**
24
+ * Wrap a stored bare type expression into the editable alias form. An empty/absent
25
+ * expression seeds an empty object body so the author has a valid starting point.
26
+ */
27
+ export declare function wrapPlayType(expr: string | undefined): string;
28
+ /** Result of validating/extracting the Type editor buffer on save. */
29
+ export type PlayTypeParse = {
30
+ ok: true;
31
+ value: string | undefined;
32
+ } | {
33
+ ok: false;
34
+ error: string;
35
+ };
36
+ /**
37
+ * Validate the Type editor buffer and extract the bare expression.
38
+ *
39
+ * Lightweight guard (as requested): the buffer MUST declare `type Payload = …`.
40
+ * We do NOT deep-validate the body — Monaco already type-checks it live. An empty
41
+ * body (`type Payload = {}` with nothing meaningful, or a blank buffer) resolves
42
+ * to `undefined` so absence ⇒ the permissive payload fallback.
43
+ */
44
+ export declare function parsePlayType(buffer: string): PlayTypeParse;
45
+ /**
46
+ * A prefill for the Type editor, element-type-aware so the author gets a sensible
47
+ * starting shape. Returns the WRAPPED alias form (what the editor shows).
48
+ */
49
+ export declare function prefillPlayType(elementType: string): string;
50
+ /** Which element types support an author-defined payload type (Type editor shown). */
51
+ export declare function hasPlayType(elementType: string): boolean;
52
+ //# sourceMappingURL=playType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playType.d.ts","sourceRoot":"","sources":["../../src/playFunction/playType.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,4EAA4E;AAC5E,eAAO,MAAM,eAAe,YAAY,CAAC;AAYzC;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAM7D;AAED,sEAAsE;AACtE,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACvC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAsB3D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAa3D;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAOxD"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * playType — helpers for the Play Function "Type" sub-editor (author-defined
3
+ * payload types, Exploration).
4
+ *
5
+ * STORAGE CONTRACT: `element.playType` holds a BARE TypeScript type EXPRESSION
6
+ * (e.g. `{ title: string; due?: string }`) — no alias, no name. It slots directly
7
+ * into the generated payload maps as `"<element>": <expr>;` (see modelTypes.ts).
8
+ *
9
+ * EDITOR CONTRACT: the author edits a VISIBLE, valid-standalone alias so Monaco
10
+ * type-checks it as a real type (not a statement block):
11
+ *
12
+ * type Payload = {
13
+ * title: string;
14
+ * };
15
+ *
16
+ * On save we strip the `type Payload =` wrapper (and optional trailing `;`) and
17
+ * store the inner expression; on load we re-wrap it. The fixed alias name
18
+ * (`Payload`) keeps extraction a deterministic prefix-strip — no AST parse, no
19
+ * name handling.
20
+ */
21
+ /** The fixed alias name the Type editor wraps the payload expression in. */
22
+ export const PLAY_TYPE_ALIAS = 'Payload';
23
+ /** Matches a leading `type Payload =` wrapper, tolerating whitespace. */
24
+ const ALIAS_PREFIX_RE = new RegExp(`^type\\s+${PLAY_TYPE_ALIAS}\\s*=\\s*`);
25
+ /** Strip `//` line and `/* *\/` block comments (so validation sees real code). */
26
+ function stripComments(text) {
27
+ return text
28
+ .replace(/\/\*[\s\S]*?\*\//g, '')
29
+ .replace(/(^|[^:])\/\/.*$/gm, '$1');
30
+ }
31
+ /**
32
+ * Wrap a stored bare type expression into the editable alias form. An empty/absent
33
+ * expression seeds an empty object body so the author has a valid starting point.
34
+ */
35
+ export function wrapPlayType(expr) {
36
+ const body = (expr ?? '').trim();
37
+ if (body.length === 0) {
38
+ return `type ${PLAY_TYPE_ALIAS} = {\n \n};\n`;
39
+ }
40
+ return `type ${PLAY_TYPE_ALIAS} = ${body};\n`;
41
+ }
42
+ /**
43
+ * Validate the Type editor buffer and extract the bare expression.
44
+ *
45
+ * Lightweight guard (as requested): the buffer MUST declare `type Payload = …`.
46
+ * We do NOT deep-validate the body — Monaco already type-checks it live. An empty
47
+ * body (`type Payload = {}` with nothing meaningful, or a blank buffer) resolves
48
+ * to `undefined` so absence ⇒ the permissive payload fallback.
49
+ */
50
+ export function parsePlayType(buffer) {
51
+ const code = stripComments(buffer).trim();
52
+ // A fully blank buffer ⇒ no declared type (permissive fallback).
53
+ if (code.length === 0)
54
+ return { ok: true, value: undefined };
55
+ if (!ALIAS_PREFIX_RE.test(code)) {
56
+ return {
57
+ ok: false,
58
+ error: `The type must be declared as \`type ${PLAY_TYPE_ALIAS} = …\`.`,
59
+ };
60
+ }
61
+ // Strip the wrapper and the optional trailing semicolon.
62
+ const inner = code.replace(ALIAS_PREFIX_RE, '').replace(/;\s*$/, '').trim();
63
+ // `type Payload =` with an empty / `{}` body ⇒ nothing declared (permissive).
64
+ if (inner.length === 0 || /^\{\s*\}$/.test(inner)) {
65
+ return { ok: true, value: undefined };
66
+ }
67
+ return { ok: true, value: inner };
68
+ }
69
+ /**
70
+ * A prefill for the Type editor, element-type-aware so the author gets a sensible
71
+ * starting shape. Returns the WRAPPED alias form (what the editor shows).
72
+ */
73
+ export function prefillPlayType(elementType) {
74
+ switch (elementType) {
75
+ case 'command':
76
+ return `type ${PLAY_TYPE_ALIAS} = {\n // the fields this command carries\n id: string;\n};\n`;
77
+ case 'event':
78
+ return `type ${PLAY_TYPE_ALIAS} = {\n // the facts this event records\n id: string;\n};\n`;
79
+ case 'information':
80
+ return `type ${PLAY_TYPE_ALIAS} = {\n // the stored shape of this information\n id: string;\n};\n`;
81
+ case 'ui':
82
+ return `type ${PLAY_TYPE_ALIAS} = {\n // the input this screen captures\n};\n`;
83
+ default:
84
+ return wrapPlayType(undefined);
85
+ }
86
+ }
87
+ /** Which element types support an author-defined payload type (Type editor shown). */
88
+ export function hasPlayType(elementType) {
89
+ return (elementType === 'command' ||
90
+ elementType === 'event' ||
91
+ elementType === 'information' ||
92
+ elementType === 'ui');
93
+ }
94
+ //# sourceMappingURL=playType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playType.js","sourceRoot":"","sources":["../../src/playFunction/playType.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,4EAA4E;AAC5E,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC,yEAAyE;AACzE,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,YAAY,eAAe,WAAW,CAAC,CAAC;AAE3E,kFAAkF;AAClF,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI;SACR,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAwB;IACnD,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,QAAQ,eAAe,gBAAgB,CAAC;IACjD,CAAC;IACD,OAAO,QAAQ,eAAe,MAAM,IAAI,KAAK,CAAC;AAChD,CAAC;AAOD;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1C,iEAAiE;IACjE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAE7D,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,uCAAuC,eAAe,SAAS;SACvE,CAAC;IACJ,CAAC;IAED,yDAAyD;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAE5E,8EAA8E;IAC9E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACxC,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,QAAQ,eAAe,iEAAiE,CAAC;QAClG,KAAK,OAAO;YACV,OAAO,QAAQ,eAAe,8DAA8D,CAAC;QAC/F,KAAK,aAAa;YAChB,OAAO,QAAQ,eAAe,sEAAsE,CAAC;QACvG,KAAK,IAAI;YACP,OAAO,QAAQ,eAAe,iDAAiD,CAAC;QAClF;YACE,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,OAAO,CACL,WAAW,KAAK,SAAS;QACzB,WAAW,KAAK,OAAO;QACvB,WAAW,KAAK,aAAa;QAC7B,WAAW,KAAK,IAAI,CACrB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * runtimeFold — the pure, environment-independent Exploration fold that executes
3
+ * AUTHORED play functions (4b), falling back to the built-in defaults (R11) when
4
+ * an element has no `playFunction`.
5
+ *
6
+ * This is deliberately NOT a hook and touches no DOM/worker API, so it is:
7
+ * - unit-testable directly (the Web Worker can't be exercised under jsdom), and
8
+ * - usable both inside the Worker (handlerWorker.ts) and on the main-thread
9
+ * synchronous fast-path (when no element has a playFunction).
10
+ *
11
+ * Contract parity: with no authored handlers this reproduces `runReplay`'s exact
12
+ * default behaviour (so the M1–M3 runtime contract/tests still hold). Authored
13
+ * handlers extend it with: six handler kinds (interact/decide/apply/read/react/
14
+ * process), ordered multi-event commands, sequential apply, two-level leaf-replace
15
+ * merge, non-object Information shapes (via apply), deterministic clock + uuid(),
16
+ * the per-step cascade budget, and reject().
17
+ *
18
+ * Handler sources arrive PRE-TRANSPILED (TS→JS done by the caller/worker), so the
19
+ * fold stays synchronous. Compilation (`new Function`) is cached per source.
20
+ */
21
+ import { Chapter } from '../types/eventModel.js';
22
+ import { ImplicitScenario, RuntimeResultV2 } from '../types/exploration.js';
23
+ import { RuntimeStep } from './runtimeSteps.js';
24
+ import { CascadeLimits } from './cascadeBudget.js';
25
+ import { PlaySource } from './playLog.js';
26
+ /** Pre-transpiled handler sources keyed by element id (JS, type-erased). */
27
+ export type TranspiledHandlers = Record<string, string>;
28
+ export interface FoldInput {
29
+ chapter: Chapter;
30
+ steps: RuntimeStep[];
31
+ scenario: ImplicitScenario;
32
+ playheadIndex: number;
33
+ /** Per-step live/collected UI input (R25), keyed by step index. */
34
+ liveStorage?: Record<number, Record<string, unknown>>;
35
+ /** element.id → transpiled JS handler source. Absent id ⇒ use default. */
36
+ handlers: TranspiledHandlers;
37
+ cascadeLimits?: CascadeLimits;
38
+ /** Which thread this fold runs on — tags debug logs ([Play] vs [PlayWorker]). */
39
+ logSource?: PlaySource;
40
+ }
41
+ /** Test seam. */
42
+ export declare function __clearCompiledCache(): void;
43
+ /** Does any element in the chapter carry an authored play function? */
44
+ export declare function hasAnyPlayFunction(chapter: Chapter | undefined): boolean;
45
+ /**
46
+ * Run the authored-handler fold. Pure: `(input) → RuntimeResultV2`.
47
+ */
48
+ export declare function runFold(input: FoldInput): RuntimeResultV2;
49
+ /** Convenience: derive steps + run the fold in one call (used by the worker). */
50
+ export declare function foldChapter(chapter: Chapter | undefined, scenario: ImplicitScenario, playheadIndex: number, handlers: TranspiledHandlers, liveStorage?: Record<number, Record<string, unknown>>, cascadeLimits?: CascadeLimits, logSource?: PlaySource): RuntimeResultV2;
51
+ //# sourceMappingURL=runtimeFold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimeFold.d.ts","sourceRoot":"","sources":["../../src/playFunction/runtimeFold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,OAAO,EAAW,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,gBAAgB,EAKhB,eAAe,EAGhB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAIL,WAAW,EAEZ,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAiE,aAAa,EAA0B,MAAM,oBAAoB,CAAC;AAS1I,OAAO,EAAkB,UAAU,EAAE,MAAM,cAAc,CAAC;AAS1D,4EAA4E;AAC5E,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAExD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD,0EAA0E;IAC1E,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,iFAAiF;IACjF,SAAS,CAAC,EAAE,UAAU,CAAC;CACxB;AAaD,iBAAiB;AACjB,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAGxE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,eAAe,CA4iBzD;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,GAAG,SAAS,EAC5B,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACrD,aAAa,CAAC,EAAE,aAAa,EAC7B,SAAS,CAAC,EAAE,UAAU,GACrB,eAAe,CAOjB"}