run402 4.79.1 → 4.80.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/gitvault-surface.json +1 -1
- package/lib/buzz-notifications.mjs +6 -11
- package/lib/errors.mjs +5 -3
- package/package.json +1 -1
- package/sdk/dist/namespaces/errors.d.ts +4 -2
- package/sdk/dist/namespaces/errors.d.ts.map +1 -1
- package/sdk/dist/namespaces/errors.js +19 -9
- package/sdk/dist/namespaces/errors.js.map +1 -1
package/gitvault-surface.json
CHANGED
|
@@ -27,9 +27,9 @@ Usage:
|
|
|
27
27
|
--on-call <hex> the Buzz agent (64-hex pubkey) a crash or platform incident pages with a p mention — the tag that wakes a managed Buzz agent
|
|
28
28
|
--on-call-name <name> the @name the page addresses it by (what Buzz renders as a mention chip); omitted, the gateway reads it from the agent's Buzz profile
|
|
29
29
|
run402 buzz notifications on-call <buzzper_id> --agent <hex-pubkey> [--name <display>] | --clear
|
|
30
|
-
set or clear the route's on-call agent (a PATCH at the route's current revision). Prints the
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
set or clear the route's on-call agent (a PATCH at the route's current revision). Prints the ONE pubkey
|
|
31
|
+
the agent must allow: pages are signed by the installation identity, and a managed Buzz agent answers only
|
|
32
|
+
its owner by default — add it to the agent's respond-to allowlist (or set respond-to to anyone).
|
|
33
33
|
run402 buzz notifications status [--org <uuid> | <buzzper_id>]
|
|
34
34
|
run402 buzz notifications test <buzzper_id> [--wait] [--poll-seconds <n>] [--timeout-seconds <n>]
|
|
35
35
|
run402 buzz notifications deliveries <buzzper_id> [--limit <n>] [--cursor <c>] [--delivery <buzzped_id>]
|
|
@@ -174,14 +174,9 @@ async function onCall(args) {
|
|
|
174
174
|
} else {
|
|
175
175
|
console.error(`On-call agent set: a crash or platform incident on this route carries a p tag for ${updated.on_call_buzz_pubkey}. No display name was found on its Buzz profile, so the page has no @mention text; rerun with --name <display> to add it.`);
|
|
176
176
|
}
|
|
177
|
-
|
|
178
|
-
console.error("
|
|
179
|
-
|
|
180
|
-
console.error("Add these project-bot pubkeys to the agent's respond-to allowlist (Buzz Desktop agent settings, or --respond-to allowlist --respond-to-allowlist ...), then restart it:");
|
|
181
|
-
for (const bot of bots) console.error(` ${bot.pubkey} (${bot.display_name ?? bot.project_id})`);
|
|
182
|
-
} else {
|
|
183
|
-
console.error("Its project bots are minted on first delivery; rerun `run402 buzz notifications status <buzzper_id>` afterwards for the bots[].pubkey values to allowlist.");
|
|
184
|
-
}
|
|
177
|
+
console.error("A managed Buzz agent answers only its owner by default and drops a page before seeing it.");
|
|
178
|
+
console.error("Pages are signed by the installation identity, so allowlist this ONE pubkey on the agent (Buzz Desktop agent settings, or --respond-to allowlist --respond-to-allowlist ...), then restart it:");
|
|
179
|
+
console.error(` ${current.notification_pubkey} (run402 installation identity — one entry covers every routed project)`);
|
|
185
180
|
} catch (err) {
|
|
186
181
|
reportSdkError(err);
|
|
187
182
|
}
|
package/lib/errors.mjs
CHANGED
|
@@ -108,9 +108,11 @@ Exit codes (the promote gate — only when --fail-on-new is set):
|
|
|
108
108
|
from 1. Without --fail-on-new, failures are the usual exit 1.
|
|
109
109
|
|
|
110
110
|
Auth:
|
|
111
|
-
The addressed project's own
|
|
112
|
-
|
|
113
|
-
|
|
111
|
+
The addressed project's own service_key when it is cached locally; otherwise
|
|
112
|
+
your wallet / session / delegate, which the gateway authorizes with
|
|
113
|
+
project.read — an org member or teammate agent needs no project key. A key
|
|
114
|
+
for project A requesting project B's errors gets 403 (never a 404 that
|
|
115
|
+
leaks existence). Read-only; never lifecycle-gated.
|
|
114
116
|
|
|
115
117
|
The golden path — gate a promote:
|
|
116
118
|
run402 deploy promote --project <id> --release <rel>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "run402",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.80.0",
|
|
4
4
|
"description": "CLI for Run402 — full-stack backend infrastructure for AI agents: Postgres, auth, storage, serverless functions and atomic deploys. Paid with x402/MPP. Includes $0.03 image generation.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -24,8 +24,10 @@
|
|
|
24
24
|
* client recount. Exposed both unscoped (`r.errors.list(projectId, …)`) and
|
|
25
25
|
* project-scoped (`r.project(id).errors.list(…)`), mirroring `r.events`.
|
|
26
26
|
*
|
|
27
|
-
* Auth: the addressed project's OWN key
|
|
28
|
-
*
|
|
27
|
+
* Auth: the addressed project's OWN key when it is cached locally; otherwise
|
|
28
|
+
* the client's principal (SIWX wallet / session / delegate) with
|
|
29
|
+
* `project.read`. A key for a different project gets 403, never a 404 that
|
|
30
|
+
* would confirm existence.
|
|
29
31
|
*/
|
|
30
32
|
import type { Client } from "../kernel.js";
|
|
31
33
|
import type { ErrorsPage, ErrorFingerprintDetail, ListErrorsOptions, WatchErrorsOptions, WatchErrorsResult } from "./errors.types.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/namespaces/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/namespaces/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,EACV,UAAU,EAEV,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AA2E3B,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C;;;;;;OAMG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IAchF;;;;;;;OAOG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAkBpF;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAyFrF"}
|
|
@@ -24,12 +24,13 @@
|
|
|
24
24
|
* client recount. Exposed both unscoped (`r.errors.list(projectId, …)`) and
|
|
25
25
|
* project-scoped (`r.project(id).errors.list(…)`), mirroring `r.events`.
|
|
26
26
|
*
|
|
27
|
-
* Auth: the addressed project's OWN key
|
|
28
|
-
*
|
|
27
|
+
* Auth: the addressed project's OWN key when it is cached locally; otherwise
|
|
28
|
+
* the client's principal (SIWX wallet / session / delegate) with
|
|
29
|
+
* `project.read`. A key for a different project gets 403, never a 404 that
|
|
30
|
+
* would confirm existence.
|
|
29
31
|
*/
|
|
30
32
|
import { LocalError } from "../errors.js";
|
|
31
33
|
import { isRun402Error } from "../errors.js";
|
|
32
|
-
import { requireProjectCredentials } from "../project-credentials.js";
|
|
33
34
|
const WATCH_DEFAULT_DURATION_MS = 600_000;
|
|
34
35
|
const WATCH_DEFAULT_INTERVAL_MS = 15_000;
|
|
35
36
|
/** Consecutive tolerated-failure polls before `watch` rethrows the last error. */
|
|
@@ -99,6 +100,19 @@ function sleepRacingSignal(ms, signal) {
|
|
|
99
100
|
signal.addEventListener("abort", finish, { once: true });
|
|
100
101
|
});
|
|
101
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* The credential for an error read. The project's own service key when it is
|
|
105
|
+
* cached locally (the historical path); otherwise the client's principal
|
|
106
|
+
* credential — a SIWX wallet, session, or delegate — which the gateway
|
|
107
|
+
* authorizes through `project.read`. That second path is how the agent a Buzz
|
|
108
|
+
* page addresses runs `run402 errors --project …` on a project it never
|
|
109
|
+
* deployed: an org member or teammate holds no project key and does not need
|
|
110
|
+
* one.
|
|
111
|
+
*/
|
|
112
|
+
async function credentialFor(client, projectId) {
|
|
113
|
+
const keys = await client.getProjectCredentials(projectId);
|
|
114
|
+
return keys ? { headers: { apikey: keys.service_key }, withAuth: false } : { withAuth: true };
|
|
115
|
+
}
|
|
102
116
|
export class Errors {
|
|
103
117
|
client;
|
|
104
118
|
constructor(client) {
|
|
@@ -115,11 +129,9 @@ export class Errors {
|
|
|
115
129
|
if (!projectId) {
|
|
116
130
|
throw new LocalError("errors.list requires a projectId", "reading release error fingerprints");
|
|
117
131
|
}
|
|
118
|
-
const keys = await requireProjectCredentials(this.client, projectId, "reading release error fingerprints");
|
|
119
132
|
return this.client.request(`/projects/v1/${encodeURIComponent(projectId)}/errors${errorsQuery(opts)}`, {
|
|
120
133
|
method: "GET",
|
|
121
|
-
|
|
122
|
-
withAuth: false,
|
|
134
|
+
...(await credentialFor(this.client, projectId)),
|
|
123
135
|
context: "reading release error fingerprints",
|
|
124
136
|
});
|
|
125
137
|
}
|
|
@@ -138,11 +150,9 @@ export class Errors {
|
|
|
138
150
|
if (!fingerprintId) {
|
|
139
151
|
throw new LocalError("errors.get requires a fingerprintId", "reading an error fingerprint");
|
|
140
152
|
}
|
|
141
|
-
const keys = await requireProjectCredentials(this.client, projectId, "reading an error fingerprint");
|
|
142
153
|
return this.client.request(`/projects/v1/${encodeURIComponent(projectId)}/errors/${encodeURIComponent(fingerprintId)}`, {
|
|
143
154
|
method: "GET",
|
|
144
|
-
|
|
145
|
-
withAuth: false,
|
|
155
|
+
...(await credentialFor(this.client, projectId)),
|
|
146
156
|
context: "reading an error fingerprint",
|
|
147
157
|
});
|
|
148
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/namespaces/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/namespaces/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAU7C,MAAM,yBAAyB,GAAG,OAAO,CAAC;AAC1C,MAAM,yBAAyB,GAAG,MAAM,CAAC;AACzC,kFAAkF;AAClF,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEzC,iGAAiG;AACjG,SAAS,WAAW,CAAC,OAA0B,EAAE;IAC/C,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAChF,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAAC,GAAY;IACzC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IACrB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,EAAU,EAAE,MAAoB;IACzD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACnC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,IAAI,KAAgD,CAAC;QACrD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,GAAS,EAAE;YACxB,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,KAAK,KAAK,SAAS;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,MAAM;gBAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACxD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QACF,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/B,IAAI,MAAM;YAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,SAAiB;IAC5D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAChG,CAAC;AAED,MAAM,OAAO,MAAM;IACY;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,CAAC,SAAiB,EAAE,OAA0B,EAAE;QACxD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,UAAU,CAAC,kCAAkC,EAAE,oCAAoC,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,UAAU,WAAW,CAAC,IAAI,CAAC,EAAE,EAC1E;YACE,MAAM,EAAE,KAAK;YACb,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAChD,OAAO,EAAE,oCAAoC;SAC9C,CACF,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,GAAG,CAAC,SAAiB,EAAE,aAAqB;QAChD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,UAAU,CAAC,iCAAiC,EAAE,8BAA8B,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAAC,qCAAqC,EAAE,8BAA8B,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,WAAW,kBAAkB,CAAC,aAAa,CAAC,EAAE,EAC3F;YACE,MAAM,EAAE,KAAK;YACb,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAChD,OAAO,EAAE,8BAA8B;SACxC,CACF,CAAC;IACJ,CAAC;IAGD;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,KAAK,CAAC,KAAK,CAAC,SAAiB,EAAE,IAAwB;QACrD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,UAAU,CAAC,mCAAmC,EAAE,yBAAyB,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,UAAU,CAClB,6DAA6D,EAC7D,yBAAyB,CAC1B,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,yBAAyB,CAAC;QAChE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,yBAAyB,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,SAAkB,CAAC;QACvB,IAAI,QAAgC,CAAC;QACrC,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,SAAS,CAAC;YACR,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM;YACR,CAAC;YAED,2EAA2E;YAC3E,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,IAAI,UAAU,CAAC;YAEzD,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC/D,mBAAmB,GAAG,CAAC,CAAC;gBACxB,KAAK,IAAI,CAAC,CAAC;gBACX,QAAQ,GAAG,IAAI,CAAC;gBAChB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChB,IAAI,CAAC;wBACH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;oBACtE,CAAC;oBAAC,MAAM,CAAC;wBACP,qDAAqD;oBACvD,CAAC;gBACH,CAAC;gBACD,IAAI,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,CAAC;oBAAE,SAAS,GAAG,IAAI,CAAC;YACtE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,SAAS,GAAG,GAAG,CAAC;gBAChB,yEAAyE;gBACzE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;oBAAE,MAAM,GAAG,CAAC;gBAC3C,mBAAmB,IAAI,CAAC,CAAC;gBACzB,iDAAiD;gBACjD,IAAI,mBAAmB,IAAI,8BAA8B;oBAAE,MAAM,GAAG,CAAC;YACvE,CAAC;YAED,IAAI,SAAS;gBAAE,MAAM;YACrB,IAAI,aAAa;gBAAE,MAAM,CAAC,yDAAyD;YAEnF,MAAM,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC5C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,0BAA0B;YAC1B,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,IAAI,UAAU,CAClB,oDAAoD,EACpD,yBAAyB,EACzB,EAAE,KAAK,EAAE,SAAS,EAAE,CACrB,CAAC;YACJ,CAAC;YACD,iEAAiE;YACjE,IAAI,SAAS,KAAK,SAAS;gBAAE,MAAM,SAAS,CAAC;YAC7C,MAAM,IAAI,UAAU,CAAC,iCAAiC,EAAE,yBAAyB,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,SAAS,GAAuB,QAAQ,CAAC,MAAM,CAAC;QACtD,MAAM,MAAM,GAAsB;YAChC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,KAAK,CAAC;YAC9C,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,UAAU,EAAE,SAAS;YACrB,KAAK;YACL,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;SACjC,CAAC;QACF,IAAI,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|