@descryy/runtime-database-observation 0.5.1 → 0.5.3

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 (56) hide show
  1. package/dist/index.d.ts +7 -5
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +4 -3
  4. package/dist/index.js.map +1 -1
  5. package/dist/mysql-row-collector.d.ts +33 -19
  6. package/dist/mysql-row-collector.d.ts.map +1 -1
  7. package/dist/mysql-row-collector.js +480 -26
  8. package/dist/mysql-row-collector.js.map +1 -1
  9. package/dist/postgres-log-parser.d.ts +15 -29
  10. package/dist/postgres-log-parser.d.ts.map +1 -1
  11. package/dist/postgres-log-parser.js +103 -32
  12. package/dist/postgres-log-parser.js.map +1 -1
  13. package/dist/postgres-log-source.d.ts +2 -0
  14. package/dist/postgres-log-source.d.ts.map +1 -1
  15. package/dist/postgres-log-source.js +171 -35
  16. package/dist/postgres-log-source.js.map +1 -1
  17. package/dist/postgres-query-collector.d.ts.map +1 -1
  18. package/dist/postgres-query-collector.js +43 -13
  19. package/dist/postgres-query-collector.js.map +1 -1
  20. package/dist/postgres-row-collector.d.ts +9 -0
  21. package/dist/postgres-row-collector.d.ts.map +1 -1
  22. package/dist/postgres-row-collector.js +114 -18
  23. package/dist/postgres-row-collector.js.map +1 -1
  24. package/dist/prisma-instrumentation.d.ts +20 -0
  25. package/dist/prisma-instrumentation.d.ts.map +1 -0
  26. package/dist/prisma-instrumentation.js +99 -0
  27. package/dist/prisma-instrumentation.js.map +1 -0
  28. package/dist/query-collector.d.ts +2 -0
  29. package/dist/query-collector.d.ts.map +1 -1
  30. package/dist/query-collector.js +38 -13
  31. package/dist/query-collector.js.map +1 -1
  32. package/dist/query-line-parser.d.ts.map +1 -1
  33. package/dist/query-line-parser.js +2 -1
  34. package/dist/query-line-parser.js.map +1 -1
  35. package/dist/query-marker.d.ts +10 -1
  36. package/dist/query-marker.d.ts.map +1 -1
  37. package/dist/query-marker.js +2 -0
  38. package/dist/query-marker.js.map +1 -1
  39. package/dist/row-capture-policy.d.ts +31 -0
  40. package/dist/row-capture-policy.d.ts.map +1 -0
  41. package/dist/row-capture-policy.js +95 -0
  42. package/dist/row-capture-policy.js.map +1 -0
  43. package/dist/smoke.d.ts +2 -0
  44. package/dist/smoke.d.ts.map +1 -0
  45. package/dist/smoke.js +28 -0
  46. package/dist/smoke.js.map +1 -0
  47. package/dist/sqlite-instrumentation.js +9 -2
  48. package/dist/sqlite-instrumentation.js.map +1 -1
  49. package/dist/sqlite-row-snapshot.d.ts +4 -0
  50. package/dist/sqlite-row-snapshot.d.ts.map +1 -1
  51. package/dist/sqlite-row-snapshot.js +153 -25
  52. package/dist/sqlite-row-snapshot.js.map +1 -1
  53. package/dist/table-extraction.d.ts.map +1 -1
  54. package/dist/table-extraction.js +124 -5
  55. package/dist/table-extraction.js.map +1 -1
  56. package/package.json +10 -8
package/dist/index.d.ts CHANGED
@@ -2,11 +2,11 @@ export { extractTargetTable } from "./table-extraction.ts";
2
2
  export { QUERY_MARKER, type CapturedMethod, type CapturedQuery } from "./query-line-parser.ts";
3
3
  export { parseQueryLine } from "./query-line-parser.ts";
4
4
  export type { DatabaseQueryCollectorOptions } from "./query-collector.ts";
5
- export { createDatabaseQueryCollector, SQLITE_PRELOAD_MODULE_PATH } from "./query-collector.ts";
5
+ export { createDatabaseQueryCollector, SQLITE_PRELOAD_MODULE_PATH, PRISMA_PRELOAD_MODULE_PATH } from "./query-collector.ts";
6
6
  export type { ObservedDatabaseQueryResolution } from "./graph-mapping.ts";
7
7
  export { resolveObservedDatabaseQuery } from "./graph-mapping.ts";
8
- export type { PostgresLogQuery } from "./postgres-log-parser.ts";
9
- export { parsePostgresLogLine } from "./postgres-log-parser.ts";
8
+ export type { PostgresLogQuery, PostgresLogReader } from "./postgres-log-parser.ts";
9
+ export { parsePostgresLogLine, createPostgresLogReader, MAX_STATEMENT_CHARS } from "./postgres-log-parser.ts";
10
10
  export type { PostgresQueryCollectorOptions } from "./postgres-query-collector.ts";
11
11
  export { createPostgresQueryCollector } from "./postgres-query-collector.ts";
12
12
  export type { PostgresStatementLogSource } from "./postgres-log-source.ts";
@@ -17,6 +17,8 @@ export type { PgRowClient, PostgresRowChangeCollectorOptions } from "./postgres-
17
17
  export { createPostgresRowChangeCollector } from "./postgres-row-collector.ts";
18
18
  export type { SqliteRowSource, SqliteRowOp, SqliteRowDiff, TableSnapshot, SqliteRowChangeCollectorOptions } from "./sqlite-row-snapshot.ts";
19
19
  export { createSqliteRowChangeCollector, diffTableSnapshot } from "./sqlite-row-snapshot.ts";
20
- export type { MysqlRowChangeCollectorOptions } from "./mysql-row-collector.ts";
21
- export { createMysqlRowChangeCollector, MYSQL_ROW_CAPTURE_REFUSAL_REASON } from "./mysql-row-collector.ts";
20
+ export type { MysqlRowChangeCollectorOptions, MysqlRowClient } from "./mysql-row-collector.ts";
21
+ export { createMysqlRowChangeCollector, MYSQL_ROW_CAPTURE_REFUSAL_REASON, MysqlDriverMissingError } from "./mysql-row-collector.ts";
22
+ export { resolveRowCapturePolicy, WITHHELD_MARKER } from "./row-capture-policy.ts";
23
+ export type { RowCapturePolicy, ResolvedRowCapturePolicy } from "./row-capture-policy.ts";
22
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,YAAY,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEhG,YAAY,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAElE,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,YAAY,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAE7E,YAAY,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,YAAY,EAAE,WAAW,EAAE,iCAAiC,EAAE,MAAM,6BAA6B,CAAC;AAClG,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAE/E,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC5I,OAAO,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7F,YAAY,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,YAAY,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAE5H,YAAY,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAElE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE9G,YAAY,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAE7E,YAAY,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,YAAY,EAAE,WAAW,EAAE,iCAAiC,EAAE,MAAM,6BAA6B,CAAC;AAClG,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAE/E,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC5I,OAAO,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7F,YAAY,EAAE,8BAA8B,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,6BAA6B,EAAE,gCAAgC,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACpI,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACnF,YAAY,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -1,13 +1,14 @@
1
1
  export { extractTargetTable } from "./table-extraction.js";
2
2
  export { QUERY_MARKER } from "./query-line-parser.js";
3
3
  export { parseQueryLine } from "./query-line-parser.js";
4
- export { createDatabaseQueryCollector, SQLITE_PRELOAD_MODULE_PATH } from "./query-collector.js";
4
+ export { createDatabaseQueryCollector, SQLITE_PRELOAD_MODULE_PATH, PRISMA_PRELOAD_MODULE_PATH } from "./query-collector.js";
5
5
  export { resolveObservedDatabaseQuery } from "./graph-mapping.js";
6
- export { parsePostgresLogLine } from "./postgres-log-parser.js";
6
+ export { parsePostgresLogLine, createPostgresLogReader, MAX_STATEMENT_CHARS } from "./postgres-log-parser.js";
7
7
  export { createPostgresQueryCollector } from "./postgres-query-collector.js";
8
8
  export { createPostgresLogSource } from "./postgres-log-source.js";
9
9
  export { parseTestDecodingLine } from "./postgres-decoding-parser.js";
10
10
  export { createPostgresRowChangeCollector } from "./postgres-row-collector.js";
11
11
  export { createSqliteRowChangeCollector, diffTableSnapshot } from "./sqlite-row-snapshot.js";
12
- export { createMysqlRowChangeCollector, MYSQL_ROW_CAPTURE_REFUSAL_REASON } from "./mysql-row-collector.js";
12
+ export { createMysqlRowChangeCollector, MYSQL_ROW_CAPTURE_REFUSAL_REASON, MysqlDriverMissingError } from "./mysql-row-collector.js";
13
+ export { resolveRowCapturePolicy, WITHHELD_MARKER } from "./row-capture-policy.js";
13
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAA2C,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAGhG,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAGlE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAG7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAG/E,OAAO,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7F,OAAO,EAAE,6BAA6B,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAA2C,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAG5H,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAGlE,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG9G,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAG7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAG/E,OAAO,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7F,OAAO,EAAE,6BAA6B,EAAE,gCAAgC,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACpI,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,28 +1,42 @@
1
- /**
2
- * MySQL/MariaDB row-change capture: a named, remediable refusal, not a
3
- * binlog implementation. See DEC-NEXT-mysql-row-and-schema-capture-refused-no-driver
4
- * (descry-core decisions inbox) for the full reasoning — in short, this
5
- * repo's `pnpm-lock.yaml` carries no MySQL driver (`mysql2` or otherwise)
6
- * today, and this lane cannot install one, so writing binlog-protocol
7
- * parsing code that has never run against a real driver would be a worse
8
- * violation of honest degradation (rule 7) than declining to write it.
9
- *
10
- * Shaped as a `Collector` for the same reason `createPostgresRowChangeCollector`
11
- * is: a caller wiring up database observation for a run can try to start
12
- * this collector unconditionally, exactly like the others, and get back a
13
- * refusal it can disclose rather than a branch it has to special-case.
14
- *
15
- * The moment `mysql2` (with `binlog_format=ROW` and full row images) becomes
16
- * an installed dependency, this refusal should be replaced with a real
17
- * binlog client, following `postgres-row-collector.ts`'s dynamic-import
18
- * pattern -- optional dependency, loaded lazily, refuse-by-name if absent.
19
- */
20
1
  import type { Collector } from "@descryy/runtime-contracts";
2
+ import { type RowCapturePolicy } from "./row-capture-policy.ts";
3
+ import { type SqliteRowDiff, type TableSnapshot } from "./sqlite-row-snapshot.ts";
4
+ export interface MysqlRowClient {
5
+ query(sql: string, params?: readonly unknown[]): Promise<readonly Record<string, unknown>[]>;
6
+ end(): Promise<void>;
7
+ }
21
8
  export interface MysqlRowChangeCollectorOptions {
22
9
  readonly connectionString: string;
23
10
  readonly service?: string;
24
11
  readonly processId?: string;
12
+ readonly rowCap?: number;
13
+ readonly statementTimeoutMs?: number;
14
+ readonly snapshotDeadlineMs?: number;
15
+ readonly clientFactory?: (connectionString: string, statementTimeoutMs: number) => Promise<MysqlRowClient> | MysqlRowClient;
16
+ readonly rowCapture?: RowCapturePolicy;
25
17
  }
26
18
  export declare const MYSQL_ROW_CAPTURE_REFUSAL_REASON: string;
19
+ export declare class MysqlDriverMissingError extends Error {
20
+ }
21
+ interface MysqlPromiseConnection {
22
+ query(options: {
23
+ sql: string;
24
+ values?: readonly unknown[];
25
+ timeout?: number;
26
+ }): Promise<readonly unknown[]>;
27
+ end(): Promise<void>;
28
+ }
29
+ interface MysqlPromiseModule {
30
+ createConnection(config: Record<string, unknown>): Promise<MysqlPromiseConnection>;
31
+ }
32
+ export declare function mysqlPromiseModule(loaded: unknown): MysqlPromiseModule;
33
+ export declare function loadMysqlPromiseModule(): Promise<MysqlPromiseModule>;
34
+ export declare function defaultClientFactory(connectionString: string, statementTimeoutMs: number): Promise<MysqlRowClient>;
35
+ export declare function describeMysqlTarget(connectionString: string): string;
36
+ export declare function scrubConnectionSecrets(message: string, connectionString: string): string;
37
+ export declare function quoteMysqlIdentifier(name: string): string;
38
+ export declare function normaliseMysqlValue(value: unknown): unknown;
39
+ export declare function diffAgainstKnownRows(table: string, before: TableSnapshot, currentOfBefore: ReadonlyMap<string, Record<string, unknown>>, afterWindow: TableSnapshot): SqliteRowDiff[];
27
40
  export declare function createMysqlRowChangeCollector(options: MysqlRowChangeCollectorOptions): Collector;
41
+ export {};
28
42
  //# sourceMappingURL=mysql-row-collector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mysql-row-collector.d.ts","sourceRoot":"","sources":["../src/mysql-row-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAiE,MAAM,4BAA4B,CAAC;AAE3H,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,gCAAgC,QAEkC,CAAC;AAEhF,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,8BAA8B,GAAG,SAAS,CAmChG"}
1
+ {"version":3,"file":"mysql-row-collector.d.ts","sourceRoot":"","sources":["../src/mysql-row-collector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAmF,MAAM,4BAA4B,CAAC;AAG7I,OAAO,EAAmI,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACjM,OAAO,EAAqB,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAErG,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7F,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC;IAC5H,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CACxC;AAED,eAAO,MAAM,gCAAgC,QAEqE,CAAC;AASnH,qBAAa,uBAAwB,SAAQ,KAAK;CAAG;AAErD,UAAU,sBAAsB;IAC9B,KAAK,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;IAC5G,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED,UAAU,kBAAkB;IAC1B,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACpF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,kBAAkB,CAKtE;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAW1E;AAED,wBAAsB,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAoBxH;AAED,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAQpE;AAYD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAkBxF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQ3D;AA+ED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,EACrB,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC7D,WAAW,EAAE,aAAa,GACzB,aAAa,EAAE,CAOjB;AAsDD,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,8BAA8B,GAAG,SAAS,CAmRhG"}