human2ai 0.1.5 → 0.1.6

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 (166) hide show
  1. package/README.en.md +51 -28
  2. package/README.md +51 -28
  3. package/dist/cli/main.js +33 -21
  4. package/dist/cli/main.js.map +1 -1
  5. package/dist/database/composition-session-repository.d.ts +2 -0
  6. package/dist/database/composition-session-repository.js +1 -0
  7. package/dist/database/composition-session-repository.js.map +1 -1
  8. package/dist/database/draft-version-store.d.ts +8 -1
  9. package/dist/database/draft-version-store.js +21 -4
  10. package/dist/database/draft-version-store.js.map +1 -1
  11. package/dist/database/project-session-repository.d.ts +24 -1
  12. package/dist/database/project-session-repository.js +80 -0
  13. package/dist/database/project-session-repository.js.map +1 -1
  14. package/dist/database/session-preview-validation.d.ts +3 -0
  15. package/dist/database/session-preview-validation.js +44 -0
  16. package/dist/database/session-preview-validation.js.map +1 -0
  17. package/dist/database/spatial-session-repository.d.ts +2 -0
  18. package/dist/database/spatial-session-repository.js +1 -0
  19. package/dist/database/spatial-session-repository.js.map +1 -1
  20. package/dist/database/svg-input.js +9 -1
  21. package/dist/database/svg-input.js.map +1 -1
  22. package/dist/database/ui-sketch-session-repository.d.ts +3 -0
  23. package/dist/database/ui-sketch-session-repository.js +6 -0
  24. package/dist/database/ui-sketch-session-repository.js.map +1 -1
  25. package/dist/domain/canvas-frame.d.ts +15 -0
  26. package/dist/domain/canvas-frame.js +24 -0
  27. package/dist/domain/canvas-frame.js.map +1 -0
  28. package/dist/domain/canvas-node-tone.d.ts +1 -0
  29. package/dist/domain/canvas-node-tone.js +9 -0
  30. package/dist/domain/canvas-node-tone.js.map +1 -0
  31. package/dist/domain/canvas-shape-overlap.d.ts +12 -0
  32. package/dist/domain/canvas-shape-overlap.js +79 -0
  33. package/dist/domain/canvas-shape-overlap.js.map +1 -0
  34. package/dist/domain/composition/analysis.d.ts +1 -0
  35. package/dist/domain/composition/analysis.js +6 -3
  36. package/dist/domain/composition/analysis.js.map +1 -1
  37. package/dist/domain/composition/draft.d.ts +6 -1
  38. package/dist/domain/composition/draft.js +42 -27
  39. package/dist/domain/composition/draft.js.map +1 -1
  40. package/dist/domain/composition/frame.d.ts +5 -8
  41. package/dist/domain/composition/frame.js +21 -68
  42. package/dist/domain/composition/frame.js.map +1 -1
  43. package/dist/domain/composition/index.d.ts +3 -3
  44. package/dist/domain/composition/index.js +3 -3
  45. package/dist/domain/composition/index.js.map +1 -1
  46. package/dist/domain/composition/raster.d.ts +2 -0
  47. package/dist/domain/composition/raster.js +19 -0
  48. package/dist/domain/composition/raster.js.map +1 -0
  49. package/dist/domain/composition/refinement/engine.js +1 -0
  50. package/dist/domain/composition/refinement/engine.js.map +1 -1
  51. package/dist/domain/composition/refinement/types.d.ts +1 -0
  52. package/dist/domain/composition/render.d.ts +6 -0
  53. package/dist/domain/composition/render.js +84 -20
  54. package/dist/domain/composition/render.js.map +1 -1
  55. package/dist/domain/composition/states.js +14 -8
  56. package/dist/domain/composition/states.js.map +1 -1
  57. package/dist/domain/composition/text-warp.d.ts +8 -0
  58. package/dist/domain/composition/text-warp.js +60 -0
  59. package/dist/domain/composition/text-warp.js.map +1 -0
  60. package/dist/domain/composition/types.d.ts +9 -4
  61. package/dist/domain/session/canvas-edit-history.d.ts +2 -0
  62. package/dist/domain/session/canvas-edit-history.js +2 -0
  63. package/dist/domain/session/canvas-edit-history.js.map +1 -1
  64. package/dist/domain/session/preview.d.ts +16 -0
  65. package/dist/domain/session/preview.js +48 -0
  66. package/dist/domain/session/preview.js.map +1 -0
  67. package/dist/domain/session/types.d.ts +8 -0
  68. package/dist/domain/ui-sketch/appearance.d.ts +12 -0
  69. package/dist/domain/ui-sketch/appearance.js +24 -0
  70. package/dist/domain/ui-sketch/appearance.js.map +1 -0
  71. package/dist/domain/ui-sketch/draft.js +3 -1
  72. package/dist/domain/ui-sketch/draft.js.map +1 -1
  73. package/dist/domain/ui-sketch/render.js +21 -17
  74. package/dist/domain/ui-sketch/render.js.map +1 -1
  75. package/dist/domain/ui-sketch/session-preview.d.ts +27 -0
  76. package/dist/domain/ui-sketch/session-preview.js +43 -0
  77. package/dist/domain/ui-sketch/session-preview.js.map +1 -0
  78. package/dist/domain/ui-sketch/types.d.ts +2 -0
  79. package/dist/server/app.d.ts +1 -1
  80. package/dist/server/app.js +8 -0
  81. package/dist/server/app.js.map +1 -1
  82. package/dist/server/routes/project-sessions.js +47 -3
  83. package/dist/server/routes/project-sessions.js.map +1 -1
  84. package/dist/server/routes/session-previews.d.ts +3 -0
  85. package/dist/server/routes/session-previews.js +104 -0
  86. package/dist/server/routes/session-previews.js.map +1 -0
  87. package/dist/server/session-preview-service.d.ts +55 -0
  88. package/dist/server/session-preview-service.js +255 -0
  89. package/dist/server/session-preview-service.js.map +1 -0
  90. package/locales/en/common.json +59 -6
  91. package/migrations/0011_session_groups.sql +21 -0
  92. package/package.json +1 -1
  93. package/schemas/composition-draft.schema.json +11 -2
  94. package/schemas/ui-sketch-draft.schema.json +85 -0
  95. package/skills/human2ai/SKILL.md +1 -1
  96. package/skills/human2ai/references/composition-projection.md +5 -3
  97. package/skills/human2ai/references/composition.md +51 -10
  98. package/skills/human2ai/references/ui-layout.md +7 -1
  99. package/web/out/404/index.html +1 -1
  100. package/web/out/404.html +1 -1
  101. package/web/out/__next.__PAGE__.txt +14 -13
  102. package/web/out/__next._full.txt +23 -22
  103. package/web/out/__next._tree.txt +5 -5
  104. package/web/out/_next/static/chunks/{380-6a6a9517cf13350e.js → 164-d8dd2b053f27bf62.js} +30 -30
  105. package/web/out/_next/static/chunks/348-6baeec6b3dbf02ab.js +1 -0
  106. package/web/out/_next/static/chunks/app/_not-found/page-742cf440bebb3b9b.js +1 -0
  107. package/web/out/_next/static/chunks/app/composition/page-8d037a4b99bb5546.js +1 -0
  108. package/web/out/_next/static/chunks/app/layout-ca2f61a5a618caea.js +1 -0
  109. package/web/out/_next/static/chunks/app/{page-b027a8ffdb9dda66.js → page-9b8bd42a93c9242c.js} +1 -1
  110. package/web/out/_next/static/chunks/app/spatial/page-1d16089ca24b2eb8.js +1 -0
  111. package/web/out/_next/static/chunks/app/styles/{page-87d77b1f3e8fdd21.js → page-e4d3c95957349351.js} +1 -1
  112. package/web/out/_next/static/chunks/app/ui-sketch/page-23e5c3b12d99082c.js +1 -0
  113. package/web/out/_next/static/chunks/main-app-5419a575f3ff4496.js +1 -0
  114. package/web/out/_next/static/chunks/next/dist/client/components/builtin/global-error-15f5118ed5e001a8.js +1 -0
  115. package/web/out/_next/static/chunks/webpack-e781b4e158568ba0.js +1 -0
  116. package/web/out/_next/static/css/{d42ebb6745c15e30.css → 210db1811016f805.css} +1 -1
  117. package/web/out/_next/static/css/2160a6bbf2cb551c.css +1 -0
  118. package/web/out/_next/static/css/{db78da93b4de5040.css → 28a4978acacc40b0.css} +1 -1
  119. package/web/out/_next/static/css/{c739d0131cdcc891.css → 2a0db06638359895.css} +1 -1
  120. package/web/out/_next/static/css/4b1f9941c214d619.css +5 -0
  121. package/web/out/_next/static/css/9c61ee5fe683073a.css +1 -0
  122. package/web/out/_not-found/__next._full.txt +21 -18
  123. package/web/out/_not-found/__next._not-found.__PAGE__.txt +11 -8
  124. package/web/out/_not-found/__next._tree.txt +5 -3
  125. package/web/out/_not-found/index.html +1 -1
  126. package/web/out/_not-found/index.txt +21 -18
  127. package/web/out/composition/__next._full.txt +26 -26
  128. package/web/out/composition/__next._tree.txt +6 -7
  129. package/web/out/composition/__next.composition.__PAGE__.txt +13 -13
  130. package/web/out/composition/index.html +1 -1
  131. package/web/out/composition/index.txt +26 -26
  132. package/web/out/index.html +1 -1
  133. package/web/out/index.txt +23 -22
  134. package/web/out/spatial/__next._full.txt +25 -24
  135. package/web/out/spatial/__next._tree.txt +5 -5
  136. package/web/out/spatial/__next.spatial.__PAGE__.txt +12 -11
  137. package/web/out/spatial/index.html +1 -1
  138. package/web/out/spatial/index.txt +25 -24
  139. package/web/out/styles/__next._full.txt +25 -24
  140. package/web/out/styles/__next._tree.txt +5 -5
  141. package/web/out/styles/__next.styles.__PAGE__.txt +12 -11
  142. package/web/out/styles/index.html +1 -1
  143. package/web/out/styles/index.txt +25 -24
  144. package/web/out/ui-sketch/__next._full.txt +26 -26
  145. package/web/out/ui-sketch/__next._tree.txt +6 -7
  146. package/web/out/ui-sketch/__next.ui-sketch.__PAGE__.txt +13 -13
  147. package/web/out/ui-sketch/index.html +1 -1
  148. package/web/out/ui-sketch/index.txt +26 -26
  149. package/web/out/_next/static/chunks/130-930cfe062cda6fb5.js +0 -1
  150. package/web/out/_next/static/chunks/166-64abdc6456626378.js +0 -1
  151. package/web/out/_next/static/chunks/20-0801fc297cda2a7a.js +0 -1
  152. package/web/out/_next/static/chunks/678-6a688c1f8589183c.js +0 -1
  153. package/web/out/_next/static/chunks/app/_not-found/page-527a4b0506fa60cb.js +0 -1
  154. package/web/out/_next/static/chunks/app/composition/page-945cb9644c513407.js +0 -1
  155. package/web/out/_next/static/chunks/app/layout-33fe456f6115412e.js +0 -1
  156. package/web/out/_next/static/chunks/app/spatial/page-c52d564a39d3b592.js +0 -1
  157. package/web/out/_next/static/chunks/app/ui-sketch/page-69219e06cc93c28f.js +0 -1
  158. package/web/out/_next/static/chunks/main-app-4a71cca48ead7720.js +0 -1
  159. package/web/out/_next/static/chunks/next/dist/client/components/builtin/global-error-6a956dd8904b8723.js +0 -1
  160. package/web/out/_next/static/chunks/webpack-c0280e9af5fc8cd3.js +0 -1
  161. package/web/out/_next/static/css/0ab45995828642ec.css +0 -1
  162. package/web/out/_next/static/css/0c7915cdb1509f9d.css +0 -1
  163. package/web/out/_next/static/css/4fb1bde9070d5094.css +0 -5
  164. package/web/out/_next/static/css/d787350911847f22.css +0 -1
  165. /package/web/out/_next/static/{Rem7hlT5iXtA-5codwSoe → MtSBeMOcAQHxKAV1fmedM}/_buildManifest.js +0 -0
  166. /package/web/out/_next/static/{Rem7hlT5iXtA-5codwSoe → MtSBeMOcAQHxKAV1fmedM}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- import { InvalidRecordError, ProjectNameConflictError, ProjectNotFoundError, ProjectNotEmptyError, RevisionConflictError, SessionNotFoundError, } from "../../database/project-session-repository.js";
1
+ import { InvalidRecordError, ProjectNameConflictError, ProjectNotFoundError, ProjectNotEmptyError, RevisionConflictError, SessionNotFoundError, SessionGroupNotFoundError, SessionGroupNameConflictError, } from "../../database/project-session-repository.js";
2
2
  import { SESSION_TYPES } from "../../domain/session/index.js";
3
3
  const nullableStringSchema = {
4
4
  anyOf: [{ type: "null" }, { type: "string" }],
@@ -75,6 +75,49 @@ const idParamsSchema = (key) => ({
75
75
  properties: { [key]: { type: "string", minLength: 1 } },
76
76
  });
77
77
  export function registerProjectSessionRoutes(server, repository) {
78
+ const groupSchema = {
79
+ type: "object", additionalProperties: false,
80
+ required: ["id", "projectId", "name", "revision", "sessionIds"],
81
+ properties: {
82
+ id: { type: "string" }, projectId: { type: "string" }, name: { type: "string" },
83
+ revision: { type: "integer", minimum: 1 },
84
+ sessionIds: { type: "array", items: { type: "string" } },
85
+ },
86
+ };
87
+ const groupWriteResponse = { 400: errorSchema, 404: errorSchema, 409: errorSchema };
88
+ const revisionProperty = { type: "integer", minimum: 1 };
89
+ const nameProperty = { type: "string", minLength: 1, maxLength: 200 };
90
+ server.get("/api/v1/session-groups", {
91
+ schema: { response: { 200: { type: "object", required: ["groups"], properties: { groups: { type: "array", items: groupSchema } } } } },
92
+ }, async () => ({ groups: repository.listSessionGroups() }));
93
+ server.post("/api/v1/projects/:projectId/groups", {
94
+ schema: {
95
+ params: idParamsSchema("projectId"),
96
+ body: { type: "object", additionalProperties: false, required: ["name"], properties: { name: nameProperty } },
97
+ response: { 201: groupSchema, ...groupWriteResponse },
98
+ },
99
+ }, async (request, reply) => execute(reply, 201, () => repository.createSessionGroup(request.params.projectId, request.body)));
100
+ server.patch("/api/v1/session-groups/:groupId", {
101
+ schema: {
102
+ params: idParamsSchema("groupId"),
103
+ body: { type: "object", additionalProperties: false, required: ["name", "expectedRevision"], properties: { name: nameProperty, expectedRevision: revisionProperty } },
104
+ response: { 200: groupSchema, ...groupWriteResponse },
105
+ },
106
+ }, async (request, reply) => execute(reply, 200, () => repository.renameSessionGroup(request.params.groupId, request.body)));
107
+ server.delete("/api/v1/session-groups/:groupId", {
108
+ schema: {
109
+ params: idParamsSchema("groupId"),
110
+ body: { type: "object", additionalProperties: false, required: ["expectedRevision"], properties: { expectedRevision: revisionProperty } },
111
+ response: groupWriteResponse,
112
+ },
113
+ }, async (request, reply) => execute(reply, 204, () => repository.deleteSessionGroup(request.params.groupId, request.body)));
114
+ server.put("/api/v1/projects/:projectId/sessions/:sessionId/group", {
115
+ schema: {
116
+ params: { type: "object", additionalProperties: false, required: ["projectId", "sessionId"], properties: { projectId: { type: "string", minLength: 1 }, sessionId: { type: "string", minLength: 1 } } },
117
+ body: { type: "object", additionalProperties: false, required: ["groupId"], properties: { groupId: nullableStringSchema } },
118
+ response: groupWriteResponse,
119
+ },
120
+ }, async (request, reply) => execute(reply, 204, () => repository.setSessionGroup(request.params.projectId, request.params.sessionId, request.body.groupId)));
78
121
  server.get("/api/v1/projects", {
79
122
  schema: {
80
123
  response: {
@@ -197,6 +240,7 @@ export function registerProjectSessionRoutes(server, repository) {
197
240
  sessionType: { type: "string", enum: SESSION_TYPES },
198
241
  title: { type: "string", minLength: 1, maxLength: 200 },
199
242
  projectId: nullableStringSchema,
243
+ groupId: { type: "string", minLength: 1 },
200
244
  },
201
245
  },
202
246
  response: {
@@ -276,7 +320,7 @@ function execute(reply, successStatus, operation) {
276
320
  }
277
321
  catch (error) {
278
322
  if (error instanceof ProjectNotFoundError ||
279
- error instanceof SessionNotFoundError) {
323
+ error instanceof SessionNotFoundError || error instanceof SessionGroupNotFoundError) {
280
324
  return reply.code(404).send({ code: error.code, message: error.message });
281
325
  }
282
326
  if (error instanceof RevisionConflictError) {
@@ -286,7 +330,7 @@ function execute(reply, successStatus, operation) {
286
330
  actualRevision: error.actualRevision,
287
331
  });
288
332
  }
289
- if (error instanceof ProjectNameConflictError) {
333
+ if (error instanceof ProjectNameConflictError || error instanceof SessionGroupNameConflictError) {
290
334
  return reply.code(409).send({ code: error.code, message: error.message });
291
335
  }
292
336
  if (error instanceof ProjectNotEmptyError) {
@@ -1 +1 @@
1
- {"version":3,"file":"project-sessions.js","sourceRoot":"","sources":["../../../src/server/routes/project-sessions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-sessions.js","sourceRoot":"","sources":["../../../src/server/routes/project-sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { FastifyInstance } from "fastify";
2
+ import { type SessionPreviewDependencies } from "../session-preview-service.ts";
3
+ export declare function registerSessionPreviewRoutes(server: FastifyInstance, dependencies: Omit<SessionPreviewDependencies, "renderCamera" | "onError">): void;
@@ -0,0 +1,104 @@
1
+ import sharp from "sharp";
2
+ import { compositionSvgForRaster } from "../../domain/composition/raster.js";
3
+ import { SessionPreviewService } from "../session-preview-service.js";
4
+ import { replyToDraftVersionError } from "./draft-version-routes.js";
5
+ export function registerSessionPreviewRoutes(server, dependencies) {
6
+ const service = new SessionPreviewService({ ...dependencies, onError: error => server.log.error(error),
7
+ renderCamera: async (id, camera, revision) => {
8
+ const response = await server.inject(`/api/v1/sessions/${encodeURIComponent(id)}/spatial/cameras/${encodeURIComponent(camera)}.png?revision=${revision}`);
9
+ if (response.statusCode !== 200)
10
+ throw new Error("Camera preview unavailable");
11
+ return response.rawPayload;
12
+ },
13
+ });
14
+ const streams = new Set();
15
+ server.addHook("preClose", async () => { for (const stream of streams)
16
+ stream.end(); await service.close(); });
17
+ server.addHook("onResponse", async (request) => {
18
+ if ((request.method === "PATCH" || request.method === "DELETE") && request.url.startsWith("/api/v1/sessions/"))
19
+ service.invalidateMembership();
20
+ });
21
+ const sourceProperties = {
22
+ sessionId: { type: "string", minLength: 1 }, sessionType: { enum: ["ui-layout", "image-composition", "spatial"] },
23
+ cameraId: { type: "string", minLength: 1 }, stateId: { type: "string", minLength: 1 },
24
+ };
25
+ const sourceSchema = { type: "object", additionalProperties: false, required: ["sessionId", "sessionType"], properties: sourceProperties,
26
+ allOf: [{ if: { type: "object", properties: { sessionType: { const: "spatial" } } }, then: { type: "object", required: ["cameraId"] }, else: { type: "object", required: ["stateId"] } }],
27
+ };
28
+ const normalize = (source) => source.sessionType === "spatial"
29
+ ? { sessionId: source.sessionId, sessionType: source.sessionType, cameraId: source.cameraId }
30
+ : { sessionId: source.sessionId, sessionType: source.sessionType, stateId: source.stateId };
31
+ server.get("/api/v1/sessions/:sessionId/preview-sources", async (request, reply) => {
32
+ try {
33
+ return { sources: service.sources(request.params.sessionId) };
34
+ }
35
+ catch (error) {
36
+ const result = replyToDraftVersionError(reply, error);
37
+ if (result)
38
+ return result;
39
+ throw error;
40
+ }
41
+ });
42
+ server.post("/api/v1/sessions/:sessionId/previews", { schema: { body: sourceSchema } }, async (request, reply) => {
43
+ try {
44
+ return await service.materialize(request.params.sessionId, normalize(request.body));
45
+ }
46
+ catch (error) {
47
+ const result = replyToDraftVersionError(reply, error);
48
+ if (result)
49
+ return result;
50
+ return reply.code(400).send({ code: "SESSION_PREVIEW_UNAVAILABLE", message: "Session preview unavailable." });
51
+ }
52
+ });
53
+ server.get("/api/v1/sessions/:sessionId/preview.png", { schema: { querystring: sourceSchema } }, async (request, reply) => {
54
+ try {
55
+ const output = await service.render(request.params.sessionId, normalize(request.query));
56
+ const input = output.mimeType === "image/svg+xml" && request.query.sessionType === "image-composition"
57
+ ? Buffer.from(await compositionSvgForRaster(output.data.toString("utf8"))) : output.data;
58
+ return reply.header("cache-control", "no-store").type("image/png").send(output.mimeType === "image/png" ? input : await sharp(input).png().toBuffer());
59
+ }
60
+ catch (error) {
61
+ const result = replyToDraftVersionError(reply, error);
62
+ if (result)
63
+ return result;
64
+ return reply.code(400).send({ code: "SESSION_PREVIEW_UNAVAILABLE", message: "Session preview unavailable." });
65
+ }
66
+ });
67
+ server.get("/api/v1/sessions/:sessionId/preview", { schema: { querystring: sourceSchema } }, async (request, reply) => {
68
+ try {
69
+ const output = await service.render(request.params.sessionId, normalize(request.query));
70
+ return reply.header("cache-control", "no-store").header("x-content-type-options", "nosniff")
71
+ .header("content-security-policy", "sandbox; default-src 'none'; img-src data:; style-src 'unsafe-inline'")
72
+ .type(output.mimeType).send(output.data);
73
+ }
74
+ catch (error) {
75
+ const result = replyToDraftVersionError(reply, error);
76
+ if (result)
77
+ return result;
78
+ return reply.code(400).send({ code: "SESSION_PREVIEW_UNAVAILABLE", message: "Session preview unavailable." });
79
+ }
80
+ });
81
+ server.get("/api/v1/sessions/:sessionId/preview-events", async (request, reply) => {
82
+ try {
83
+ dependencies.projectSessions.getSession(request.params.sessionId);
84
+ }
85
+ catch (error) {
86
+ const result = replyToDraftVersionError(reply, error);
87
+ if (result)
88
+ return result;
89
+ throw error;
90
+ }
91
+ reply.hijack();
92
+ const stream = reply.raw;
93
+ stream.writeHead(200, { "content-type": "text/event-stream", "cache-control": "no-cache, no-transform", connection: "keep-alive", "x-accel-buffering": "no" });
94
+ streams.add(stream);
95
+ const notify = () => { if (!stream.destroyed)
96
+ stream.write("data: {}\n\n"); };
97
+ const unsubscribe = service.subscribe(request.params.sessionId, notify);
98
+ const heartbeat = setInterval(() => { if (!stream.destroyed)
99
+ stream.write(": heartbeat\n\n"); }, 20_000);
100
+ stream.on("close", () => { clearInterval(heartbeat); unsubscribe(); streams.delete(stream); });
101
+ notify(); // Reconnection always checks the authoritative latest version.
102
+ });
103
+ }
104
+ //# sourceMappingURL=session-previews.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-previews.js","sourceRoot":"","sources":["../../../src/server/routes/session-previews.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { CompositionSessionRepository } from "../database/composition-session-repository.ts";
2
+ import type { UiSketchSessionRepository } from "../database/ui-sketch-session-repository.ts";
3
+ import type { SpatialSessionRepository } from "../database/spatial-session-repository.ts";
4
+ import type { ImageAssetRepository } from "../database/image-asset-repository.ts";
5
+ import { type ProjectSessionRepository } from "../database/project-session-repository.ts";
6
+ import { type SessionPreviewSource } from "../domain/session/preview.ts";
7
+ import type { MaterializedSessionPreview } from "../domain/ui-sketch/session-preview.ts";
8
+ export interface SessionPreviewDependencies {
9
+ projectSessions: ProjectSessionRepository;
10
+ compositionSessions: CompositionSessionRepository;
11
+ uiSketchSessions: UiSketchSessionRepository;
12
+ spatialSessions: SpatialSessionRepository;
13
+ imageAssets: ImageAssetRepository;
14
+ renderCamera(sessionId: string, cameraId: string, revision: number): Promise<Buffer>;
15
+ onError(error: unknown): void;
16
+ }
17
+ export declare class SessionPreviewService {
18
+ private readonly deps;
19
+ private readonly drafts;
20
+ private readonly pending;
21
+ private readonly listeners;
22
+ private readonly unsubscribe;
23
+ private readonly images;
24
+ private work?;
25
+ private closed;
26
+ constructor(deps: SessionPreviewDependencies);
27
+ subscribe(id: string, listener: () => void): () => void;
28
+ private notify;
29
+ invalidateMembership(): void;
30
+ sources(ownerId: string): ({
31
+ session: import("../domain/session/types.ts").Session;
32
+ revision: number;
33
+ outputs: {
34
+ id: string;
35
+ name: string;
36
+ }[];
37
+ } | {
38
+ session: import("../domain/session/types.ts").Session;
39
+ revision: number;
40
+ outputs: import("../domain/ui-sketch/types.ts").UiSketchStateTab[];
41
+ })[];
42
+ private assertSource;
43
+ private latestRevision;
44
+ render(ownerId: string, source: SessionPreviewSource, revision?: number): Promise<{
45
+ data: Buffer<ArrayBufferLike>;
46
+ mimeType: string;
47
+ extension: string;
48
+ revision: number;
49
+ }>;
50
+ materialize(ownerId: string, source: SessionPreviewSource): Promise<MaterializedSessionPreview>;
51
+ private enqueue;
52
+ private drain;
53
+ private refreshWave;
54
+ close(): Promise<void>;
55
+ }
@@ -0,0 +1,255 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { readFile } from "node:fs/promises";
3
+ import { InvalidRecordError } from "../database/project-session-repository.js";
4
+ import { compositionStates, selectCompositionState } from "../domain/composition/states.js";
5
+ import { renderCompositionReferenceSvg } from "../domain/composition/render.js";
6
+ import { renderUiSketchSvg } from "../domain/ui-sketch/render.js";
7
+ import { uiSketchStateTabs, uiSketchDraftForStage } from "../domain/ui-sketch/index.js";
8
+ import { previewSourceKey, previewWaveGroups } from "../domain/session/preview.js";
9
+ export class SessionPreviewService {
10
+ deps;
11
+ drafts = new Map();
12
+ pending = new Map();
13
+ listeners = new Map();
14
+ unsubscribe = [];
15
+ images = new Map();
16
+ work;
17
+ closed = false;
18
+ constructor(deps) {
19
+ this.deps = deps;
20
+ for (const session of deps.projectSessions.listSessions())
21
+ if (session.sessionType === "ui-layout") {
22
+ const latest = deps.uiSketchSessions.getLatestDraftVersion(session.id);
23
+ if (latest)
24
+ this.drafts.set(session.id, latest);
25
+ }
26
+ this.unsubscribe.push(deps.uiSketchSessions.onDraftSaved(event => {
27
+ this.drafts.set(event.version.sessionId, event.version);
28
+ this.notify(event.version.sessionId);
29
+ if (!event.previewBatchId)
30
+ this.enqueue(event.version.sessionId, event.version.revision);
31
+ }), deps.compositionSessions.onDraftSaved(({ version }) => this.enqueue(version.sessionId, version.revision)), deps.spatialSessions.onDraftSaved(({ version }) => this.enqueue(version.sessionId, version.revision)));
32
+ // Refresh legacy 2D raster previews through the existing finite waves. Keep
33
+ // old assets/versions immutable and skip already-vector or missing sources.
34
+ const legacySources = new Map();
35
+ for (const version of this.drafts.values())
36
+ for (const image of version.draft.images) {
37
+ if (!image.previewReference || image.previewReference.sessionType === "spatial" || !image.assetId)
38
+ continue;
39
+ try {
40
+ if (deps.imageAssets.get(version.sessionId, image.assetId).asset.mimeType === "image/png") {
41
+ legacySources.set(image.previewReference.sessionId, image.previewReference);
42
+ }
43
+ }
44
+ catch { /* A missing asset must not prevent startup. */ }
45
+ }
46
+ for (const source of legacySources.values()) {
47
+ try {
48
+ this.enqueue(source.sessionId, this.latestRevision(source));
49
+ }
50
+ catch { /* Retain deleted sources. */ }
51
+ }
52
+ }
53
+ subscribe(id, listener) {
54
+ const listeners = this.listeners.get(id) ?? new Set();
55
+ listeners.add(listener);
56
+ this.listeners.set(id, listeners);
57
+ return () => { listeners.delete(listener); if (!listeners.size)
58
+ this.listeners.delete(id); };
59
+ }
60
+ notify(id) { this.listeners.get(id)?.forEach(listener => listener()); }
61
+ invalidateMembership() {
62
+ const existing = new Set(this.deps.projectSessions.listSessions().map(s => s.id));
63
+ for (const id of this.drafts.keys())
64
+ if (!existing.has(id))
65
+ this.drafts.delete(id);
66
+ for (const id of this.listeners.keys())
67
+ this.notify(id);
68
+ }
69
+ sources(ownerId) {
70
+ const owner = this.deps.projectSessions.getSession(ownerId);
71
+ if (owner.sessionType !== "ui-layout")
72
+ throw new InvalidRecordError("Session previews belong to a UI session.");
73
+ if (!owner.projectId)
74
+ return [];
75
+ return this.deps.projectSessions.listSessions().filter(s => s.id !== ownerId && s.projectId === owner.projectId).map(session => {
76
+ if (session.sessionType === "spatial") {
77
+ const version = this.deps.spatialSessions.getLatestDraftVersion(session.id);
78
+ return { session, revision: version?.revision ?? 0, outputs: version?.draft.cameras.map(camera => ({ id: camera.id, name: camera.name })) ?? [] };
79
+ }
80
+ if (session.sessionType === "ui-layout") {
81
+ const version = this.deps.uiSketchSessions.getLatestDraftVersion(session.id);
82
+ return { session, revision: version?.revision ?? 0, outputs: version ? uiSketchStateTabs(version.draft) : [] };
83
+ }
84
+ const version = this.deps.compositionSessions.getLatestDraftVersion(session.id);
85
+ return { session, revision: version?.revision ?? 0, outputs: version ? compositionStates(version.draft).map(({ id, name, number }) => ({ id, name, number })) : [] };
86
+ });
87
+ }
88
+ assertSource(ownerId, source) {
89
+ const owner = this.deps.projectSessions.getSession(ownerId), session = this.deps.projectSessions.getSession(source.sessionId);
90
+ if (owner.sessionType !== "ui-layout" || ownerId === source.sessionId || !owner.projectId
91
+ || owner.projectId !== session.projectId || source.sessionType !== session.sessionType) {
92
+ throw new InvalidRecordError("A session preview requires another session in the same project.");
93
+ }
94
+ }
95
+ latestRevision(source) {
96
+ const repository = source.sessionType === "spatial" ? this.deps.spatialSessions
97
+ : source.sessionType === "ui-layout" ? this.deps.uiSketchSessions : this.deps.compositionSessions;
98
+ const version = repository.getLatestDraftVersion(source.sessionId);
99
+ if (!version)
100
+ throw new InvalidRecordError("Save the source session before referencing it.");
101
+ return version.revision;
102
+ }
103
+ async render(ownerId, source, revision = this.latestRevision(source)) {
104
+ this.assertSource(ownerId, source);
105
+ const vector = source.sessionType !== "spatial";
106
+ let key, create;
107
+ if (source.sessionType === "spatial") {
108
+ key = JSON.stringify([previewSourceKey(source), revision]);
109
+ create = () => this.deps.renderCamera(source.sessionId, source.cameraId, revision);
110
+ }
111
+ else {
112
+ let draft;
113
+ if (source.sessionType === "ui-layout") {
114
+ const version = this.deps.uiSketchSessions.getDraftVersion(source.sessionId, revision);
115
+ if (!uiSketchStateTabs(version.draft).some(s => s.id === source.stateId))
116
+ throw new InvalidRecordError("The selected state no longer exists.");
117
+ draft = uiSketchDraftForStage(version.draft, source.stateId);
118
+ }
119
+ else {
120
+ draft = selectCompositionState(this.deps.compositionSessions.getDraftVersion(source.sessionId, revision).draft, source.stateId);
121
+ }
122
+ const assets = new Map();
123
+ await Promise.all([...new Set(draft.images.flatMap(image => image.assetId && image.visible !== false ? [image.assetId] : []))].map(async (id) => {
124
+ const { asset, filePath } = this.deps.imageAssets.get(source.sessionId, id);
125
+ assets.set(id, `data:${asset.mimeType};base64,${(await readFile(filePath)).toString("base64")}`);
126
+ }));
127
+ const svg = draft.kind === "ui-layout-draft" ? renderUiSketchSvg(draft, id => assets.get(id)) : renderCompositionReferenceSvg(draft, id => assets.get(id));
128
+ key = createHash("sha256").update(svg).digest("hex");
129
+ create = () => Promise.resolve(Buffer.from(svg));
130
+ }
131
+ let pending = this.images.get(key);
132
+ if (!pending) {
133
+ pending = create().catch(error => { this.images.delete(key); throw error; });
134
+ this.images.set(key, pending);
135
+ if (this.images.size > 24)
136
+ this.images.delete(this.images.keys().next().value);
137
+ }
138
+ return { data: await pending, mimeType: vector ? "image/svg+xml" : "image/png", extension: vector ? "svg" : "png", revision };
139
+ }
140
+ async materialize(ownerId, source) {
141
+ const { data, extension, revision } = await this.render(ownerId, source);
142
+ this.assertSource(ownerId, source);
143
+ const asset = await this.deps.imageAssets.create(ownerId, { filename: `session-preview.${extension}`, data });
144
+ return { assetId: asset.id, width: asset.width, height: asset.height, reference: { ...source, renderedRevision: revision } };
145
+ }
146
+ enqueue(id, revision) {
147
+ if (this.closed)
148
+ return;
149
+ this.pending.set(id, revision);
150
+ if (!this.work)
151
+ this.work = this.drain().finally(() => {
152
+ this.work = undefined;
153
+ const next = this.pending.entries().next().value;
154
+ if (next)
155
+ this.enqueue(...next);
156
+ });
157
+ }
158
+ async drain() {
159
+ while (this.pending.size && !this.closed) {
160
+ const [root, revision] = this.pending.entries().next().value;
161
+ this.pending.delete(root);
162
+ try {
163
+ await this.refreshWave(root, revision);
164
+ }
165
+ catch (error) {
166
+ this.deps.onError(error);
167
+ }
168
+ }
169
+ }
170
+ async refreshWave(root, rootRevision) {
171
+ const batchId = randomUUID();
172
+ const dependencies = new Map([...this.drafts].map(([id, version]) => [id, version.draft.images.flatMap(i => i.previewReference ? [i.previewReference.sessionId] : [])]));
173
+ const groups = previewWaveGroups(root, dependencies);
174
+ const changed = new Set([root]);
175
+ for (const group of groups) {
176
+ if (this.closed)
177
+ return;
178
+ if (!group.some(id => (dependencies.get(id) ?? []).some(source => changed.has(source))))
179
+ continue;
180
+ // Freeze all source revisions before refreshing a cyclic group. No recursive
181
+ // rendering: its nested previews are already immutable source-owned assets.
182
+ const revisions = new Map([[root, rootRevision]]);
183
+ for (const id of group)
184
+ for (const image of this.drafts.get(id)?.draft.images ?? []) {
185
+ const ref = image.previewReference;
186
+ if (ref && !revisions.has(ref.sessionId)) {
187
+ try {
188
+ revisions.set(ref.sessionId, this.latestRevision(ref));
189
+ }
190
+ catch { /* Retain missing sources. */ }
191
+ }
192
+ }
193
+ for (const id of group) {
194
+ const initial = this.drafts.get(id);
195
+ if (!initial)
196
+ continue;
197
+ const updates = new Map();
198
+ const checked = new Set();
199
+ for (const image of initial.draft.images) {
200
+ const ref = image.previewReference, revision = ref && revisions.get(ref.sessionId);
201
+ if (!ref || !revision || checked.has(previewSourceKey(ref)))
202
+ continue;
203
+ if (!changed.has(ref.sessionId) && !group.includes(ref.sessionId))
204
+ continue;
205
+ checked.add(previewSourceKey(ref));
206
+ try {
207
+ const { data, extension } = await this.render(id, ref, revision);
208
+ const sha = createHash("sha256").update(data).digest("hex");
209
+ const matches = initial.draft.images.filter(item => item.previewReference && previewSourceKey(item.previewReference) === previewSourceKey(ref));
210
+ if (matches.every(item => item.assetId && this.deps.imageAssets.get(id, item.assetId).asset.sha256 === sha))
211
+ continue;
212
+ this.assertSource(id, ref);
213
+ const asset = await this.deps.imageAssets.create(id, { filename: `session-preview.${extension}`, data });
214
+ updates.set(previewSourceKey(ref), { assetId: asset.id, width: asset.width, height: asset.height, reference: { ...ref, renderedRevision: revision } });
215
+ }
216
+ catch {
217
+ this.notify(id); /* Retain the last successful image. */
218
+ }
219
+ }
220
+ if (!updates.size || this.closed)
221
+ continue;
222
+ const latest = this.deps.uiSketchSessions.getLatestDraftVersion(id);
223
+ if (!latest)
224
+ continue;
225
+ let updated = false;
226
+ const images = latest.draft.images.map(image => {
227
+ const update = image.previewReference && updates.get(previewSourceKey(image.previewReference));
228
+ if (!update || image.previewReference.renderedRevision > update.reference.renderedRevision)
229
+ return image;
230
+ try {
231
+ this.assertSource(id, update.reference);
232
+ }
233
+ catch {
234
+ return image;
235
+ }
236
+ updated = true;
237
+ return { ...image, assetId: update.assetId, previewReference: update.reference };
238
+ });
239
+ if (updated) {
240
+ const version = this.deps.uiSketchSessions.refreshPreviewVersion(id, { expectedLatestRevision: latest.revision, draft: { ...latest.draft, images } }, batchId);
241
+ this.drafts.set(id, version);
242
+ changed.add(id);
243
+ }
244
+ }
245
+ }
246
+ }
247
+ async close() {
248
+ this.closed = true;
249
+ this.unsubscribe.forEach(unsubscribe => unsubscribe());
250
+ await this.work;
251
+ this.listeners.clear();
252
+ this.images.clear();
253
+ }
254
+ }
255
+ //# sourceMappingURL=session-preview-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-preview-service.js","sourceRoot":"","sources":["../../src/server/session-preview-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAK5C,OAAO,EAAE,kBAAkB,EAAiC,MAAM,2CAA2C,CAAC;AAC9G,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC5F,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAA6B,MAAM,8BAA8B,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAA6B,MAAM,8BAA8B,CAAC;AAa9G,MAAM,OAAO,qBAAqB;IASH;IARZ,MAAM,GAAG,IAAI,GAAG,EAAgC,CAAC;IACjD,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC/C,WAAW,GAAmB,EAAE,CAAC;IACjC,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;IACrD,IAAI,CAAiB;IACrB,MAAM,GAAG,KAAK,CAAC;IAEvB,YAA6B,IAAgC;QAAhC,SAAI,GAAJ,IAAI,CAA4B;QAC3D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;YAAE,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;gBACnG,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACvE,IAAI,MAAM;oBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAClD,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,cAAc;gBAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3F,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,EAC7G,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvG,4EAA4E;QAC5E,4EAA4E;QAC5E,MAAM,aAAa,GAAG,IAAI,GAAG,EAAgC,CAAC;QAC9D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAAE,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACrF,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO;oBAAE,SAAS;gBAC5G,IAAI,CAAC;oBACH,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;wBAC1F,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;oBAC9E,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAC,+CAA+C,CAAC,CAAC;YAC7D,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC;gBAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,6BAA6B,CAAC,CAAC;QAC9G,CAAC;IACH,CAAC;IAED,SAAS,CAAC,EAAU,EAAE,QAAoB;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QACtD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAC3D,OAAO,GAAG,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;YAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,CAAC;IAEO,MAAM,CAAC,EAAU,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IAEvF,oBAAoB;QAClB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClF,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnF,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW;YAAE,MAAM,IAAI,kBAAkB,CAAC,0CAA0C,CAAC,CAAC;QAChH,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAC7H,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACpJ,CAAC;YACD,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;gBACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC7E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACjH,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAChF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACvK,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,OAAe,EAAE,MAA4B;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9H,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,IAAI,OAAO,KAAK,MAAM,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,SAAS;eACpF,KAAK,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;YACzF,MAAM,IAAI,kBAAkB,CAAC,iEAAiE,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,MAA4B;QACjD,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe;YAC7E,CAAC,CAAC,MAAM,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACpG,MAAM,OAAO,GAAG,UAAU,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,kBAAkB,CAAC,gDAAgD,CAAC,CAAC;QAC7F,OAAO,OAAO,CAAC,QAAQ,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,MAA4B,EAAE,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QAChG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC;QAChD,IAAI,GAAW,EAAE,MAA6B,CAAC;QAC/C,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC3D,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrF,CAAC;aAAM,CAAC;YACN,IAAI,KAAK,CAAC;YACV,IAAI,MAAM,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;gBACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBACvF,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC;oBAAE,MAAM,IAAI,kBAAkB,CAAC,sCAAsC,CAAC,CAAC;gBAC/I,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAClI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;YACzC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;gBAC5I,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC5E,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,KAAK,CAAC,QAAQ,WAAW,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACnG,CAAC,CAAC,CAAC,CAAC;YACJ,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3J,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAChI,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,MAA4B;QAC7D,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,mBAAmB,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9G,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,CAAC;IAC/H,CAAC;IAEO,OAAO,CAAC,EAAU,EAAE,QAAgB;QAC1C,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;gBACpD,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;gBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;gBACjD,IAAI,IAAI;oBAAE,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC;YAC9D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC;gBAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAAC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,YAAoB;QAC1D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzK,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO;YACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;gBAAE,SAAS;YAClG,6EAA6E;YAC7E,4EAA4E;YAC5E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAiB,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;YAClE,KAAK,MAAM,EAAE,IAAI,KAAK;gBAAE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;oBACpF,MAAM,GAAG,GAAG,KAAK,CAAC,gBAAgB,CAAC;oBACnC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;wBACzC,IAAI,CAAC;4BAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;wBAAC,CAAC;wBAAC,MAAM,CAAC,CAAC,6BAA6B,CAAC,CAAC;oBACzG,CAAC;gBACH,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpC,IAAI,CAAC,OAAO;oBAAE,SAAS;gBACvB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsC,CAAC;gBAC9D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;gBAClC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBACzC,MAAM,GAAG,GAAG,KAAK,CAAC,gBAAgB,EAAE,QAAQ,GAAG,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBACnF,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;wBAAE,SAAS;oBACtE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;wBAAE,SAAS;oBAC5E,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnC,IAAI,CAAC;wBACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;wBACjE,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;wBAChJ,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC;4BAAE,SAAS;wBACtH,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;wBAC3B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,mBAAmB,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;wBACzG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,GAAG,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;oBACzJ,CAAC;oBAAC,MAAM,CAAC;wBAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,uCAAuC;oBAAC,CAAC;gBACtE,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM;oBAAE,SAAS;gBAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;gBACpE,IAAI,CAAC,MAAM;oBAAE,SAAS;gBACtB,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBAC/F,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,gBAAiB,CAAC,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB;wBAAE,OAAO,KAAK,CAAC;oBAC1G,IAAI,CAAC;wBAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC;wBAAC,OAAO,KAAK,CAAC;oBAAC,CAAC;oBACxE,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnF,CAAC,CAAC,CAAC;gBACH,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,EAAE,EAAE,EAAE,sBAAsB,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;oBAC/J,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;oBAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3E,MAAM,IAAI,CAAC,IAAI,CAAC;QAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC/D,CAAC;CACF"}