run402 1.69.5 → 1.69.7

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 (44) hide show
  1. package/lib/agent.mjs +37 -11
  2. package/lib/apps.mjs +92 -40
  3. package/lib/argparse.mjs +53 -1
  4. package/lib/billing.mjs +65 -24
  5. package/lib/blob.mjs +87 -49
  6. package/lib/cdn.mjs +21 -8
  7. package/lib/contracts.mjs +112 -33
  8. package/lib/deploy-v2.mjs +159 -62
  9. package/lib/domains.mjs +22 -11
  10. package/lib/functions.mjs +42 -6
  11. package/lib/image.mjs +17 -8
  12. package/lib/message.mjs +4 -1
  13. package/lib/secrets.mjs +29 -12
  14. package/lib/sender-domain.mjs +32 -14
  15. package/lib/sites.mjs +39 -16
  16. package/lib/subdomains.mjs +31 -35
  17. package/lib/tier.mjs +26 -4
  18. package/package.json +1 -1
  19. package/sdk/dist/namespaces/ai.d.ts.map +1 -1
  20. package/sdk/dist/namespaces/ai.js +7 -2
  21. package/sdk/dist/namespaces/ai.js.map +1 -1
  22. package/sdk/dist/namespaces/blobs.d.ts +3 -2
  23. package/sdk/dist/namespaces/blobs.d.ts.map +1 -1
  24. package/sdk/dist/namespaces/blobs.js +38 -7
  25. package/sdk/dist/namespaces/blobs.js.map +1 -1
  26. package/sdk/dist/namespaces/blobs.types.d.ts +5 -6
  27. package/sdk/dist/namespaces/blobs.types.d.ts.map +1 -1
  28. package/sdk/dist/namespaces/contracts.d.ts.map +1 -1
  29. package/sdk/dist/namespaces/contracts.js +17 -4
  30. package/sdk/dist/namespaces/contracts.js.map +1 -1
  31. package/sdk/dist/namespaces/deploy.d.ts.map +1 -1
  32. package/sdk/dist/namespaces/deploy.js +13 -1
  33. package/sdk/dist/namespaces/deploy.js.map +1 -1
  34. package/sdk/dist/namespaces/functions.d.ts.map +1 -1
  35. package/sdk/dist/namespaces/functions.js +92 -1
  36. package/sdk/dist/namespaces/functions.js.map +1 -1
  37. package/sdk/dist/node/files.d.ts +11 -5
  38. package/sdk/dist/node/files.d.ts.map +1 -1
  39. package/sdk/dist/node/files.js +31 -7
  40. package/sdk/dist/node/files.js.map +1 -1
  41. package/sdk/dist/validation.d.ts +2 -0
  42. package/sdk/dist/validation.d.ts.map +1 -1
  43. package/sdk/dist/validation.js +10 -0
  44. package/sdk/dist/validation.js.map +1 -1
@@ -5,6 +5,18 @@
5
5
  * `/projects/v1/admin/:id/functions*` and `/functions/v1/:name`.
6
6
  */
7
7
  import { LocalError, ProjectNotFound } from "../errors.js";
8
+ const FUNCTION_NAME_RE = /^[a-z0-9][a-z0-9_-]{0,127}$/;
9
+ const FUNCTION_LOG_REQUEST_ID_RE = /^req_[A-Za-z0-9_-]{4,128}$/;
10
+ const FUNCTION_LOG_TAIL_MAX = 1000;
11
+ const FUNCTION_DEP_MAX = 30;
12
+ const FUNCTION_DEP_SPEC_MAX = 200;
13
+ const DISALLOWED_FUNCTION_DEPS = new Set([
14
+ "@run402/functions",
15
+ "run402-functions",
16
+ "sharp",
17
+ "canvas",
18
+ "bcrypt",
19
+ ]);
8
20
  export class Functions {
9
21
  client;
10
22
  constructor(client) {
@@ -29,7 +41,11 @@ export class Functions {
29
41
  * @throws {PaymentRequired} when the project lease has expired.
30
42
  */
31
43
  async deploy(projectId, opts) {
44
+ validateFunctionName(opts.name, "name", "deploying function");
45
+ validateFunctionCode(opts.code, "code", "deploying function");
32
46
  validateFunctionConfig(opts.config, "config", "deploying function");
47
+ validateFunctionDeps(opts.deps, "deps", "deploying function");
48
+ validateFunctionSchedule(opts.schedule, "schedule", "deploying function");
33
49
  const project = await this.client.getProject(projectId);
34
50
  if (!project)
35
51
  throw new ProjectNotFound(projectId, "deploying function");
@@ -95,11 +111,13 @@ export class Functions {
95
111
  if (!project)
96
112
  throw new ProjectNotFound(projectId, "fetching function logs");
97
113
  const tail = opts.tail ?? 50;
114
+ validatePositiveJsonInteger(tail, "tail", "fetching function logs", { max: FUNCTION_LOG_TAIL_MAX });
98
115
  const search = new URLSearchParams({ tail: String(tail) });
99
116
  if (opts.since !== undefined) {
100
117
  search.set("since", String(parseLogSince(opts.since)));
101
118
  }
102
119
  if (opts.requestId !== undefined) {
120
+ validateFunctionLogRequestId(opts.requestId, "requestId", "fetching function logs");
103
121
  search.set("request_id", opts.requestId);
104
122
  }
105
123
  const path = `/projects/v1/admin/${projectId}/functions/${encodeURIComponent(name)}/logs?${search.toString()}`;
@@ -137,6 +155,10 @@ export class Functions {
137
155
  async update(projectId, name, opts) {
138
156
  validatePositiveJsonInteger(opts.timeout, "timeout", "updating function");
139
157
  validatePositiveJsonInteger(opts.memory, "memory", "updating function");
158
+ validateFunctionSchedule(opts.schedule, "schedule", "updating function");
159
+ if (opts.schedule === undefined && opts.timeout === undefined && opts.memory === undefined) {
160
+ throw new LocalError("Provide at least one supported update field: schedule, timeout, or memory", "updating function");
161
+ }
140
162
  const project = await this.client.getProject(projectId);
141
163
  if (!project)
142
164
  throw new ProjectNotFound(projectId, "updating function");
@@ -178,11 +200,80 @@ function validateFunctionConfig(config, resource, context) {
178
200
  validatePositiveJsonInteger(record.timeout, `${resource}.timeout`, context);
179
201
  validatePositiveJsonInteger(record.memory, `${resource}.memory`, context);
180
202
  }
181
- function validatePositiveJsonInteger(value, resource, context) {
203
+ function validateFunctionName(value, resource, context) {
204
+ if (typeof value !== "string" || !FUNCTION_NAME_RE.test(value)) {
205
+ throw new LocalError(`${resource} must be a lowercase URL-safe function name (1-128 chars, starts with a letter or digit)`, context);
206
+ }
207
+ }
208
+ function validateFunctionCode(value, resource, context) {
209
+ if (typeof value !== "string" || value.trim() === "") {
210
+ throw new LocalError(`${resource} must be a non-empty source string`, context);
211
+ }
212
+ }
213
+ function validateFunctionDeps(value, resource, context) {
214
+ if (value === undefined)
215
+ return;
216
+ if (!Array.isArray(value)) {
217
+ throw new LocalError(`${resource} must be an array of npm package specs`, context);
218
+ }
219
+ if (value.length > FUNCTION_DEP_MAX) {
220
+ throw new LocalError(`${resource} must contain at most ${FUNCTION_DEP_MAX} entries`, context);
221
+ }
222
+ for (const [index, dep] of value.entries()) {
223
+ const entry = `${resource}[${index}]`;
224
+ if (typeof dep !== "string" || dep.trim() === "") {
225
+ throw new LocalError(`${entry} must be a non-empty npm package spec`, context);
226
+ }
227
+ if (dep !== dep.trim()) {
228
+ throw new LocalError(`${entry} must not contain leading or trailing whitespace`, context);
229
+ }
230
+ if (dep.length > FUNCTION_DEP_SPEC_MAX) {
231
+ throw new LocalError(`${entry} must be ${FUNCTION_DEP_SPEC_MAX} characters or fewer`, context);
232
+ }
233
+ if (/\s/.test(dep)) {
234
+ throw new LocalError(`${entry} must not contain whitespace`, context);
235
+ }
236
+ const packageName = depPackageName(dep);
237
+ if (DISALLOWED_FUNCTION_DEPS.has(packageName)) {
238
+ throw new LocalError(`${entry} references unsupported dependency ${packageName}`, context);
239
+ }
240
+ }
241
+ }
242
+ function depPackageName(spec) {
243
+ if (spec.startsWith("@")) {
244
+ const slash = spec.indexOf("/");
245
+ if (slash === -1)
246
+ return spec;
247
+ const versionAt = spec.indexOf("@", slash);
248
+ return versionAt === -1 ? spec : spec.slice(0, versionAt);
249
+ }
250
+ const versionAt = spec.indexOf("@");
251
+ return versionAt === -1 ? spec : spec.slice(0, versionAt);
252
+ }
253
+ function validateFunctionSchedule(value, resource, context) {
254
+ if (value === undefined || value === null)
255
+ return;
256
+ if (typeof value !== "string") {
257
+ throw new LocalError(`${resource} must be a 5-field cron string, null, or undefined`, context);
258
+ }
259
+ const parts = value.trim().split(/\s+/);
260
+ if (value.trim() === "" || parts.length !== 5 || parts.some((part) => part === "")) {
261
+ throw new LocalError(`${resource} must be a 5-field cron string`, context);
262
+ }
263
+ }
264
+ function validateFunctionLogRequestId(value, resource, context) {
265
+ if (typeof value !== "string" || !FUNCTION_LOG_REQUEST_ID_RE.test(value)) {
266
+ throw new LocalError(`${resource} must match req_<4-128 url-safe chars>`, context);
267
+ }
268
+ }
269
+ function validatePositiveJsonInteger(value, resource, context, opts = {}) {
182
270
  if (value === undefined)
183
271
  return;
184
272
  if (!Number.isSafeInteger(value) || value < 1) {
185
273
  throw new LocalError(`${resource} must be a positive safe JSON integer`, context);
186
274
  }
275
+ if (opts.max !== undefined && value > opts.max) {
276
+ throw new LocalError(`${resource} must be <= ${opts.max}`, context);
277
+ }
187
278
  }
188
279
  //# sourceMappingURL=functions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../src/namespaces/functions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../src/namespaces/functions.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,12 @@
9
9
  import type { FileSet } from "../namespaces/deploy.types.js";
10
10
  export interface FileSetFromDirOptions {
11
11
  /** Additional names to skip at any depth. Merged with the default ignore
12
- * list (`.git`, `node_modules`, `.DS_Store`). */
12
+ * list (`.git`, `node_modules`, `.DS_Store`) and, unless
13
+ * `includeSensitive` is true, common secret-bearing filenames. */
13
14
  ignore?: Iterable<string>;
15
+ /** Include dotenv, npmrc, and private-key-like files that are skipped by
16
+ * default. Use only when these files are intentional deploy artifacts. */
17
+ includeSensitive?: boolean;
14
18
  }
15
19
  /**
16
20
  * Walk a directory and return a `FileSet` whose values are `FsFileSource`
@@ -18,10 +22,12 @@ export interface FileSetFromDirOptions {
18
22
  * content-type; the deploy normalizer hashes and uploads each file from
19
23
  * disk on demand.
20
24
  *
21
- * Skips `.git`, `node_modules`, `.DS_Store` (plus any names in
22
- * `opts.ignore`) at every depth. Rejects symlinks. Throws `LocalError` if
23
- * the directory does not exist, is not a directory, or contains no
24
- * deployable files after the ignore list is applied.
25
+ * Skips `.git`, `node_modules`, `.DS_Store`, common secret-bearing filenames
26
+ * like `.env`, `.npmrc`, and private-key material (plus any names in
27
+ * `opts.ignore`) at every depth. Pass `{ includeSensitive: true }` to opt in
28
+ * to collecting those sensitive filenames deliberately. Rejects symlinks.
29
+ * Throws `LocalError` if the directory does not exist, is not a directory, or
30
+ * contains no deployable files after the ignore list is applied.
25
31
  *
26
32
  * @example
27
33
  * import { run402 } from "@run402/sdk/node";
@@ -1 +1 @@
1
- {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/node/files.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,+BAA+B,CAAC;AAK3E,MAAM,WAAW,qBAAqB;IACpC;sDACkD;IAClD,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,OAAO,CAAC,CAkClB;AAsCD,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD"}
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/node/files.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,+BAA+B,CAAC;AAmB3E,MAAM,WAAW,qBAAqB;IACpC;;uEAEmE;IACnE,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B;+EAC2E;IAC3E,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,OAAO,CAAC,CAkClB;AAiDD,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD"}
@@ -10,6 +10,20 @@ import { readdir, lstat } from "node:fs/promises";
10
10
  import { join, relative, sep } from "node:path";
11
11
  import { LocalError } from "../errors.js";
12
12
  const DEFAULT_IGNORE = new Set([".git", "node_modules", ".DS_Store"]);
13
+ const DEFAULT_SENSITIVE_IGNORE_NAMES = new Set([
14
+ ".env",
15
+ ".envrc",
16
+ ".npmrc",
17
+ ".pnpmrc",
18
+ ".yarnrc",
19
+ ".netrc",
20
+ ".pypirc",
21
+ "id_dsa",
22
+ "id_ecdsa",
23
+ "id_ed25519",
24
+ "id_rsa",
25
+ ]);
26
+ const DEFAULT_SENSITIVE_IGNORE_SUFFIXES = [".key", ".pem", ".p12", ".pfx"];
13
27
  const CONTEXT = "collecting files for deploy";
14
28
  /**
15
29
  * Walk a directory and return a `FileSet` whose values are `FsFileSource`
@@ -17,10 +31,12 @@ const CONTEXT = "collecting files for deploy";
17
31
  * content-type; the deploy normalizer hashes and uploads each file from
18
32
  * disk on demand.
19
33
  *
20
- * Skips `.git`, `node_modules`, `.DS_Store` (plus any names in
21
- * `opts.ignore`) at every depth. Rejects symlinks. Throws `LocalError` if
22
- * the directory does not exist, is not a directory, or contains no
23
- * deployable files after the ignore list is applied.
34
+ * Skips `.git`, `node_modules`, `.DS_Store`, common secret-bearing filenames
35
+ * like `.env`, `.npmrc`, and private-key material (plus any names in
36
+ * `opts.ignore`) at every depth. Pass `{ includeSensitive: true }` to opt in
37
+ * to collecting those sensitive filenames deliberately. Rejects symlinks.
38
+ * Throws `LocalError` if the directory does not exist, is not a directory, or
39
+ * contains no deployable files after the ignore list is applied.
24
40
  *
25
41
  * @example
26
42
  * import { run402 } from "@run402/sdk/node";
@@ -50,13 +66,13 @@ export async function fileSetFromDir(root, opts = {}) {
50
66
  throw new LocalError(`path ${root} is not a directory`, CONTEXT);
51
67
  }
52
68
  const out = {};
53
- await walkInto(root, root, ignore, out);
69
+ await walkInto(root, root, ignore, opts.includeSensitive === true, out);
54
70
  if (Object.keys(out).length === 0) {
55
71
  throw new LocalError(`directory ${root} contains no deployable files`, CONTEXT);
56
72
  }
57
73
  return out;
58
74
  }
59
- async function walkInto(root, current, ignore, out) {
75
+ async function walkInto(root, current, ignore, includeSensitive, out) {
60
76
  let entries;
61
77
  try {
62
78
  entries = await readdir(current, { withFileTypes: true });
@@ -67,12 +83,14 @@ async function walkInto(root, current, ignore, out) {
67
83
  for (const entry of entries) {
68
84
  if (ignore.has(entry.name))
69
85
  continue;
86
+ if (!includeSensitive && isSensitiveIgnoredName(entry.name))
87
+ continue;
70
88
  const fullPath = join(current, entry.name);
71
89
  if (entry.isSymbolicLink()) {
72
90
  throw new LocalError(`symlink found at ${fullPath} (following symlinks is not supported)`, CONTEXT);
73
91
  }
74
92
  if (entry.isDirectory()) {
75
- await walkInto(root, fullPath, ignore, out);
93
+ await walkInto(root, fullPath, ignore, includeSensitive, out);
76
94
  continue;
77
95
  }
78
96
  if (entry.isFile()) {
@@ -81,6 +99,12 @@ async function walkInto(root, current, ignore, out) {
81
99
  }
82
100
  }
83
101
  }
102
+ function isSensitiveIgnoredName(name) {
103
+ const lower = name.toLowerCase();
104
+ return (lower.startsWith(".env.") ||
105
+ DEFAULT_SENSITIVE_IGNORE_NAMES.has(lower) ||
106
+ DEFAULT_SENSITIVE_IGNORE_SUFFIXES.some((suffix) => lower.endsWith(suffix)));
107
+ }
84
108
  /** Normalize a relative path to POSIX forward slashes. Exposed for tests. */
85
109
  export function normalizeRelPath(rel) {
86
110
  return sep === "/" ? rel : rel.split(sep).join("/");
@@ -1 +1 @@
1
- {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/node/files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/node/files.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
1
  export declare function assertPositiveSafeInteger(value: number, name: string, context: string): void;
2
2
  export declare function assertWeiString(value: string, name: string, context: string): void;
3
+ export declare function assertEvmAddress(value: string, name: string, context: string): void;
4
+ export declare function assertStringInSet<T extends string>(value: string, allowed: readonly T[], name: string, context: string): asserts value is T;
3
5
  //# sourceMappingURL=validation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAEA,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,IAAI,CAIN;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,IAAI,CAIN"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAEA,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,IAAI,CAIN;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,IAAI,CAIN;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,IAAI,CAIN;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAChD,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,CAAC,EAAE,EACrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,KAAK,IAAI,CAAC,CAIpB"}
@@ -9,4 +9,14 @@ export function assertWeiString(value, name, context) {
9
9
  throw new LocalError(`${name} must be a decimal non-negative integer string in wei.`, context);
10
10
  }
11
11
  }
12
+ export function assertEvmAddress(value, name, context) {
13
+ if (typeof value !== "string" || !/^0x[a-fA-F0-9]{40}$/.test(value)) {
14
+ throw new LocalError(`${name} must be a 0x-prefixed 20-byte EVM address.`, context);
15
+ }
16
+ }
17
+ export function assertStringInSet(value, allowed, name, context) {
18
+ if (!allowed.includes(value)) {
19
+ throw new LocalError(`${name} must be one of: ${allowed.join(", ")}.`, context);
20
+ }
21
+ }
12
22
  //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,yBAAyB,CACvC,KAAa,EACb,IAAY,EACZ,OAAe;IAEf,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,mCAAmC,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAa,EACb,IAAY,EACZ,OAAe;IAEf,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,wDAAwD,EAAE,OAAO,CAAC,CAAC;IACjG,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,yBAAyB,CACvC,KAAa,EACb,IAAY,EACZ,OAAe;IAEf,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,mCAAmC,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAa,EACb,IAAY,EACZ,OAAe;IAEf,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,wDAAwD,EAAE,OAAO,CAAC,CAAC;IACjG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,IAAY,EACZ,OAAe;IAEf,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,6CAA6C,EAAE,OAAO,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,OAAqB,EACrB,IAAY,EACZ,OAAe;IAEf,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAU,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAClF,CAAC;AACH,CAAC"}