@opendatalabs/personal-server-ts-server 1.33.8 → 1.34.1

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 (167) hide show
  1. package/dist/__fixtures__/bound-record-store.d.ts +19 -0
  2. package/dist/__fixtures__/bound-record-store.d.ts.map +1 -0
  3. package/dist/__fixtures__/bound-record-store.js +60 -0
  4. package/dist/__fixtures__/bound-record-store.js.map +1 -0
  5. package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.d.ts +41 -0
  6. package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.d.ts.map +1 -0
  7. package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.js +34 -0
  8. package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.js.map +1 -0
  9. package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.d.ts +112 -0
  10. package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.d.ts.map +1 -0
  11. package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.js +226 -0
  12. package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.js.map +1 -0
  13. package/dist/__fixtures__/cg-pdpp-client/pdpp-types.d.ts +135 -0
  14. package/dist/__fixtures__/cg-pdpp-client/pdpp-types.d.ts.map +1 -0
  15. package/dist/__fixtures__/cg-pdpp-client/pdpp-types.js +21 -0
  16. package/dist/__fixtures__/cg-pdpp-client/pdpp-types.js.map +1 -0
  17. package/dist/api-auth.d.ts +18 -2
  18. package/dist/api-auth.d.ts.map +1 -1
  19. package/dist/api-auth.js +114 -22
  20. package/dist/api-auth.js.map +1 -1
  21. package/dist/app.d.ts +60 -1
  22. package/dist/app.d.ts.map +1 -1
  23. package/dist/app.js +139 -1
  24. package/dist/app.js.map +1 -1
  25. package/dist/bootstrap.d.ts +10 -0
  26. package/dist/bootstrap.d.ts.map +1 -1
  27. package/dist/bootstrap.js +359 -8
  28. package/dist/bootstrap.js.map +1 -1
  29. package/dist/enclave-main.d.ts +4 -0
  30. package/dist/enclave-main.d.ts.map +1 -1
  31. package/dist/enclave-main.js +152 -1
  32. package/dist/enclave-main.js.map +1 -1
  33. package/dist/middleware/body-limit.d.ts +1 -1
  34. package/dist/middleware/body-limit.d.ts.map +1 -1
  35. package/dist/middleware/body-limit.js +8 -3
  36. package/dist/middleware/body-limit.js.map +1 -1
  37. package/dist/middleware/cors.d.ts.map +1 -1
  38. package/dist/middleware/cors.js +1 -0
  39. package/dist/middleware/cors.js.map +1 -1
  40. package/dist/package.json +9 -1
  41. package/dist/pdpp/bootstrap.d.ts +72 -0
  42. package/dist/pdpp/bootstrap.d.ts.map +1 -0
  43. package/dist/pdpp/bootstrap.js +270 -0
  44. package/dist/pdpp/bootstrap.js.map +1 -0
  45. package/dist/pdpp/chain-enforcement.d.ts +95 -0
  46. package/dist/pdpp/chain-enforcement.d.ts.map +1 -0
  47. package/dist/pdpp/chain-enforcement.js +145 -0
  48. package/dist/pdpp/chain-enforcement.js.map +1 -0
  49. package/dist/pdpp/client-document-fetch.d.ts +63 -0
  50. package/dist/pdpp/client-document-fetch.d.ts.map +1 -0
  51. package/dist/pdpp/client-document-fetch.js +254 -0
  52. package/dist/pdpp/client-document-fetch.js.map +1 -0
  53. package/dist/pdpp/declaration-registry.d.ts +83 -0
  54. package/dist/pdpp/declaration-registry.d.ts.map +1 -0
  55. package/dist/pdpp/declaration-registry.js +251 -0
  56. package/dist/pdpp/declaration-registry.js.map +1 -0
  57. package/dist/pdpp/deployment.d.ts +70 -0
  58. package/dist/pdpp/deployment.d.ts.map +1 -0
  59. package/dist/pdpp/deployment.js +104 -0
  60. package/dist/pdpp/deployment.js.map +1 -0
  61. package/dist/pdpp/record-schema.d.ts +2 -0
  62. package/dist/pdpp/record-schema.d.ts.map +1 -0
  63. package/dist/pdpp/record-schema.js +2 -0
  64. package/dist/pdpp/record-schema.js.map +1 -0
  65. package/dist/pdpp/records-bootstrap.d.ts +111 -0
  66. package/dist/pdpp/records-bootstrap.d.ts.map +1 -0
  67. package/dist/pdpp/records-bootstrap.js +353 -0
  68. package/dist/pdpp/records-bootstrap.js.map +1 -0
  69. package/dist/pdpp/source-id-compat.d.ts +5 -0
  70. package/dist/pdpp/source-id-compat.d.ts.map +1 -0
  71. package/dist/pdpp/source-id-compat.js +16 -0
  72. package/dist/pdpp/source-id-compat.js.map +1 -0
  73. package/dist/pdpp/test-connections.d.ts +6 -0
  74. package/dist/pdpp/test-connections.d.ts.map +1 -0
  75. package/dist/pdpp/test-connections.js +37 -0
  76. package/dist/pdpp/test-connections.js.map +1 -0
  77. package/dist/routes/auth-device.d.ts.map +1 -1
  78. package/dist/routes/auth-device.js +3 -0
  79. package/dist/routes/auth-device.js.map +1 -1
  80. package/dist/routes/chunked-scope-import.d.ts +41 -0
  81. package/dist/routes/chunked-scope-import.d.ts.map +1 -0
  82. package/dist/routes/chunked-scope-import.js +901 -0
  83. package/dist/routes/chunked-scope-import.js.map +1 -0
  84. package/dist/routes/data.d.ts +23 -1
  85. package/dist/routes/data.d.ts.map +1 -1
  86. package/dist/routes/data.js +112 -1
  87. package/dist/routes/data.js.map +1 -1
  88. package/dist/routes/grants.d.ts.map +1 -1
  89. package/dist/routes/grants.js +2 -0
  90. package/dist/routes/grants.js.map +1 -1
  91. package/dist/routes/mcp.d.ts.map +1 -1
  92. package/dist/routes/mcp.js +3 -0
  93. package/dist/routes/mcp.js.map +1 -1
  94. package/dist/routes/pdpp-auth.d.ts +157 -0
  95. package/dist/routes/pdpp-auth.d.ts.map +1 -0
  96. package/dist/routes/pdpp-auth.js +953 -0
  97. package/dist/routes/pdpp-auth.js.map +1 -0
  98. package/dist/routes/pdpp-blobs.d.ts +26 -0
  99. package/dist/routes/pdpp-blobs.d.ts.map +1 -0
  100. package/dist/routes/pdpp-blobs.js +179 -0
  101. package/dist/routes/pdpp-blobs.js.map +1 -0
  102. package/dist/routes/pdpp-connections.d.ts +28 -0
  103. package/dist/routes/pdpp-connections.d.ts.map +1 -0
  104. package/dist/routes/pdpp-connections.js +144 -0
  105. package/dist/routes/pdpp-connections.js.map +1 -0
  106. package/dist/routes/pdpp-declarations.d.ts +58 -0
  107. package/dist/routes/pdpp-declarations.d.ts.map +1 -0
  108. package/dist/routes/pdpp-declarations.js +94 -0
  109. package/dist/routes/pdpp-declarations.js.map +1 -0
  110. package/dist/routes/pdpp-instance-bindings.d.ts +26 -0
  111. package/dist/routes/pdpp-instance-bindings.d.ts.map +1 -0
  112. package/dist/routes/pdpp-instance-bindings.js +124 -0
  113. package/dist/routes/pdpp-instance-bindings.js.map +1 -0
  114. package/dist/routes/pdpp-records.d.ts +158 -0
  115. package/dist/routes/pdpp-records.d.ts.map +1 -0
  116. package/dist/routes/pdpp-records.js +1537 -0
  117. package/dist/routes/pdpp-records.js.map +1 -0
  118. package/dist/routes/pdpp-well-known.d.ts +13 -0
  119. package/dist/routes/pdpp-well-known.d.ts.map +1 -0
  120. package/dist/routes/pdpp-well-known.js +20 -0
  121. package/dist/routes/pdpp-well-known.js.map +1 -0
  122. package/dist/storage/declaration-witness.d.ts +56 -0
  123. package/dist/storage/declaration-witness.d.ts.map +1 -0
  124. package/dist/storage/declaration-witness.js +273 -0
  125. package/dist/storage/declaration-witness.js.map +1 -0
  126. package/dist/storage/hierarchy.d.ts +25 -1
  127. package/dist/storage/hierarchy.d.ts.map +1 -1
  128. package/dist/storage/hierarchy.js +210 -16
  129. package/dist/storage/hierarchy.js.map +1 -1
  130. package/dist/storage/import-operations.d.ts +11 -0
  131. package/dist/storage/import-operations.d.ts.map +1 -0
  132. package/dist/storage/import-operations.js +261 -0
  133. package/dist/storage/import-operations.js.map +1 -0
  134. package/dist/storage/index-manager.d.ts +24 -2
  135. package/dist/storage/index-manager.d.ts.map +1 -1
  136. package/dist/storage/index-manager.js +279 -30
  137. package/dist/storage/index-manager.js.map +1 -1
  138. package/dist/storage/index-schema.d.ts +1 -1
  139. package/dist/storage/index-schema.d.ts.map +1 -1
  140. package/dist/storage/index-schema.js +189 -8
  141. package/dist/storage/index-schema.js.map +1 -1
  142. package/dist/storage/legacy-scope-authority.d.ts +14 -0
  143. package/dist/storage/legacy-scope-authority.d.ts.map +1 -0
  144. package/dist/storage/legacy-scope-authority.js +298 -0
  145. package/dist/storage/legacy-scope-authority.js.map +1 -0
  146. package/dist/storage/node-data-storage.d.ts +6 -0
  147. package/dist/storage/node-data-storage.d.ts.map +1 -1
  148. package/dist/storage/node-data-storage.js +161 -2
  149. package/dist/storage/node-data-storage.js.map +1 -1
  150. package/dist/storage/pdpp-grant-binding-sqlite-store.d.ts +17 -0
  151. package/dist/storage/pdpp-grant-binding-sqlite-store.d.ts.map +1 -0
  152. package/dist/storage/pdpp-grant-binding-sqlite-store.js +159 -0
  153. package/dist/storage/pdpp-grant-binding-sqlite-store.js.map +1 -0
  154. package/dist/storage/pdpp-records-sqlite-store.d.ts +112 -0
  155. package/dist/storage/pdpp-records-sqlite-store.d.ts.map +1 -0
  156. package/dist/storage/pdpp-records-sqlite-store.js +1440 -0
  157. package/dist/storage/pdpp-records-sqlite-store.js.map +1 -0
  158. package/dist/storage/pdpp-stream-completion.d.ts +5 -0
  159. package/dist/storage/pdpp-stream-completion.d.ts.map +1 -0
  160. package/dist/storage/pdpp-stream-completion.js +10 -0
  161. package/dist/storage/pdpp-stream-completion.js.map +1 -0
  162. package/dist/storage/scope-deletion-history.d.ts +8 -0
  163. package/dist/storage/scope-deletion-history.d.ts.map +1 -0
  164. package/dist/storage/scope-deletion-history.js +40 -0
  165. package/dist/storage/scope-deletion-history.js.map +1 -0
  166. package/dist/ui/ps-lite-debug.js +3981 -1109
  167. package/package.json +12 -4
@@ -0,0 +1,157 @@
1
+ /**
2
+ * PDPP Core v0.1.0 Authorization Server HTTP surface.
3
+ *
4
+ * The endpoints under `/pdpp/v1`:
5
+ *
6
+ * POST /authorize — accept an RFC 9396 selection request
7
+ * GET /authorize/:session_id/review — the owner's consent review model
8
+ * POST /authorize/:session_id/approve — authenticated owner approval
9
+ * POST /authorize/:session_id/deny — authenticated owner denial
10
+ * POST /token — code redemption + refresh rotation
11
+ * POST /introspect — RFC 7662 introspection
12
+ * GET /grants — the owner's grants, with status
13
+ * POST /revoke — owner-initiated grant revocation
14
+ *
15
+ * This is deliberately a NEW surface rather than an extension of
16
+ * `oauth-token.ts`. That endpoint serves the control-plane and CLI device
17
+ * flows against the legacy `TokenStore`; PDPP tokens are grant-bound and live
18
+ * in their own store with their own lifecycle. Mixing them would mean one
19
+ * endpoint with two token authorities, which §8 explicitly warns against
20
+ * ("do not query or create a second grant authority"). Existing clients of
21
+ * `/oauth/token` are untouched.
22
+ *
23
+ * Every response carries `Cache-Control: no-store` and `Pragma: no-cache`
24
+ * (RFC 6749 §5.1 for token responses; delivery scope §1 requires it on every
25
+ * token response specifically).
26
+ *
27
+ * Two things that cost integrators a debug cycle, so stated plainly:
28
+ *
29
+ * - **Content types differ by endpoint.** `/authorize`, `/approve` and
30
+ * `/deny` take JSON. `/token`, `/introspect` and `/revoke` take
31
+ * `application/x-www-form-urlencoded`, because they follow the RFC 6749 /
32
+ * 7662 / 7009 wire conventions a standard OAuth client library already
33
+ * speaks. Sending JSON to the form endpoints parses to an empty body and
34
+ * reads as a missing parameter.
35
+ * - **The review digest is nested.** `GET /authorize/:id/review` returns
36
+ * `{ session_id, review, expires_at }`, so the digest is at
37
+ * `review.review_digest`, not at the top level. The envelope also carries
38
+ * `instance_choice_required` instead of `review` when the owner still has
39
+ * an instance to pick.
40
+ */
41
+ import { Hono, type Context } from "hono";
42
+ import type { Logger } from "pino";
43
+ import type { ClientIdentityResult } from "@opendatalabs/personal-server-ts-core/pdpp";
44
+ import type { AuthorizationSessionStore, PdppTokenService } from "@opendatalabs/personal-server-ts-core/pdpp";
45
+ import { type DeclarationSnapshot, type InstanceInventory, type PdppAuthStore, type RecipientTerms, type RegisteredRedirectPolicy, type SelectionRequest } from "@opendatalabs/personal-server-ts-core/pdpp";
46
+ import type { TokenStore } from "../token-store.js";
47
+ /** Owner tokens are short-lived: they authorize consent decisions. */
48
+ export declare const OWNER_TOKEN_TTL_SECONDS: number;
49
+ export interface PdppAuthRouteDeps {
50
+ logger: Logger;
51
+ store: PdppAuthStore;
52
+ tokens: PdppTokenService;
53
+ sessions: AuthorizationSessionStore;
54
+ /**
55
+ * Resolve the retained declaration snapshot for a source. The AS resolves
56
+ * only against this snapshot — never a live re-fetch at approval time.
57
+ */
58
+ resolveDeclaration(sourceId: string): DeclarationSnapshot | null;
59
+ /** Resolve an owner-token source from the independent connection registry. */
60
+ resolveConnectionSourceId?(sourceId: string): string | undefined;
61
+ /** The owner's connected instances, read fresh at review and approval. */
62
+ inventoryFor(subjectId: string, sourceId: string): InstanceInventory;
63
+ connectionState?(instanceId: string): {
64
+ sourceId: string | null;
65
+ deleted: boolean;
66
+ };
67
+ /**
68
+ * The authenticated owner for an incoming authorization request. Returns
69
+ * null when no owner session is present.
70
+ */
71
+ currentSubjectId(c: Context): string | null;
72
+ /**
73
+ * Resolve the PDPP subject for a request that already passed the PS owner
74
+ * proof (`web3-auth` + `owner-check`). Used only by
75
+ * `POST /owner/token`. Defaults to `currentSubjectId` when a deployment
76
+ * uses one notion of owner identity for both.
77
+ */
78
+ ownerSubjectId?(c: Context): string | null;
79
+ /**
80
+ * Owner-proof wiring. When supplied, `POST /owner/token` is guarded by the
81
+ * PS's existing `web3-auth` + `owner-check` middleware — the same wallet
82
+ * signature chain every other owner route uses — and the verified signer
83
+ * becomes the PDPP subject. Absent, the route falls back to
84
+ * `ownerSubjectId`/`currentSubjectId`, which is how the unit tests drive it.
85
+ */
86
+ ownerAuth?: {
87
+ serverOrigin: string | (() => string);
88
+ serverOwner?: `0x${string}`;
89
+ devToken?: string;
90
+ accessToken?: string;
91
+ tokenStore?: TokenStore;
92
+ };
93
+ /**
94
+ * Registered metadata for a client, used to validate `redirect_uri` by
95
+ * exact match (RFC 6749 §3.1.2.2). Returning null means the client is
96
+ * unregistered, and an unregistered client cannot receive an authorization
97
+ * code — the AS fails closed rather than trusting the requested target.
98
+ */
99
+ registeredClient?(clientId: string): RegisteredRedirectPolicy | null;
100
+ /**
101
+ * Resolve a URL-hosted client identity (§6) when a client is not locally
102
+ * registered. Optional: leaving it unset preserves registration-only
103
+ * behavior exactly, and performs no outbound fetch.
104
+ */
105
+ resolveClientIdentity?(clientId: string): Promise<ClientIdentityResult>;
106
+ /**
107
+ * AS-policy grant expiry, when the deployment sets one.
108
+ *
109
+ * `clientId` is the second argument (not folded into `request`) because it
110
+ * is authorization-request context, not part of the RFC 9396 selection
111
+ * request itself — Core's `SelectionRequest` stays binding-neutral and
112
+ * carries no client identity. `request` remains first for compatibility
113
+ * with any existing caller that only closed over it.
114
+ */
115
+ grantExpiryFor?(request: SelectionRequest, clientId: string): string | undefined;
116
+ /**
117
+ * Require PKCE on the authorization code flow. Defaults to true and should
118
+ * stay true: PDPP clients are public clients, so without a verifier an
119
+ * intercepted code is redeemable by whoever intercepted it.
120
+ */
121
+ requirePkce?: boolean;
122
+ /**
123
+ * Standing terms this client has authorized, when the deployment tracks
124
+ * them.
125
+ *
126
+ * Absent means the AS knows of no standing terms, which is the safe default
127
+ * rather than a gap: with no terms, only conditions the client's own request
128
+ * already covers can become commitments, and anything else refuses. v0.2 is
129
+ * explicit that a capability advertisement is not acceptance, so an AS that
130
+ * cannot evidence acceptance must not assume it.
131
+ */
132
+ standingTermsFor?(clientId: string): RecipientTerms | null;
133
+ /**
134
+ * This authorization server's issuer identifier, used to build the absolute
135
+ * endpoint URLs in its metadata document. Absent omits the document
136
+ * entirely rather than publishing relative or guessed URLs — a client that
137
+ * cannot resolve the endpoints is worse off than one that finds no document
138
+ * and falls back to configuration.
139
+ */
140
+ issuer?: string | (() => string);
141
+ }
142
+ /**
143
+ * The PDPP AS metadata document, as a handler both of its locations share.
144
+ *
145
+ * Exported because the two URLs it is served at live in different routers: the
146
+ * path-first one inside `/pdpp/v1`, and the RFC 8414 §3 one
147
+ * (`/.well-known/oauth-authorization-server/pdpp/v1`) at the app root, outside
148
+ * this prefix. One handler rather than two so the documents can never drift --
149
+ * a client discovering through either must find the same authority.
150
+ *
151
+ * `issuer` is accepted as a thunk for deployments that resolve their own origin
152
+ * late (a bound port unknown at construction). It is resolved per request so
153
+ * the document never advertises a stale origin.
154
+ */
155
+ export declare function pdppAsMetadataHandler(issuerSource: PdppAuthRouteDeps["issuer"]): (c: Context) => Response;
156
+ export declare function pdppAuthRoutes(deps: PdppAuthRouteDeps): Hono;
157
+ //# sourceMappingURL=pdpp-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdpp-auth.d.ts","sourceRoot":"","sources":["../../src/routes/pdpp-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAAE,IAAI,EAAE,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EACV,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAYL,KAAK,mBAAmB,EAExB,KAAK,iBAAiB,EAGtB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EAEtB,MAAM,4CAA4C,CAAC;AAIpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AASpD,sEAAsE;AACtE,eAAO,MAAM,uBAAuB,QAAU,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,yBAAyB,CAAC;IACpC;;;OAGG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAAC;IACjE,8EAA8E;IAC9E,yBAAyB,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACjE,0EAA0E;IAC1E,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAAC;IACrE,eAAe,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG;QACpC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IACF;;;OAGG;IACH,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5C;;;;;OAKG;IACH,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3C;;;;;;OAMG;IACH,SAAS,CAAC,EAAE;QACV,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;QACtC,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;QAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB,CAAC;IACF;;;;;OAKG;IACH,gBAAgB,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAAC;IACrE;;;;OAIG;IACH,qBAAqB,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACxE;;;;;;;;OAQG;IACH,cAAc,CAAC,CACb,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,SAAS,CAAC;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;;;OASG;IACH,gBAAgB,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IAC3D;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;CAClC;AA8HD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GACxC,CAAC,CAAC,EAAE,OAAO,KAAK,QAAQ,CAoC1B;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAy6B5D"}