impreza-mcp 0.40.0 → 0.41.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/README.md +718 -672
- package/dist/client.d.ts +16 -0
- package/dist/client.js +119 -20
- package/dist/client.js.map +1 -1
- package/dist/env.d.ts +30 -0
- package/dist/env.js +67 -0
- package/dist/env.js.map +1 -0
- package/dist/server.js +285 -17
- package/dist/server.js.map +1 -1
- package/dist/socks5.d.ts +14 -0
- package/dist/socks5.js +145 -0
- package/dist/socks5.js.map +1 -0
- package/package.json +2 -3
package/dist/client.d.ts
CHANGED
|
@@ -4,12 +4,19 @@ export interface ImprezaConfig {
|
|
|
4
4
|
apiSecret: string;
|
|
5
5
|
/** Wall-clock budget per HTTP call. Default 60s. */
|
|
6
6
|
timeoutMs?: number;
|
|
7
|
+
/**
|
|
8
|
+
* Optional `socks5://host:port` proxy (typically a local Tor daemon) that
|
|
9
|
+
* EVERY API call is routed through. Fail-closed: when set and the proxy is
|
|
10
|
+
* unreachable, requests fail — there is no silent fallback to clearnet.
|
|
11
|
+
*/
|
|
12
|
+
proxy?: string;
|
|
7
13
|
}
|
|
8
14
|
export declare class ImprezaClient {
|
|
9
15
|
private readonly baseURL;
|
|
10
16
|
private readonly apiKey;
|
|
11
17
|
private readonly apiSecret;
|
|
12
18
|
private readonly timeoutMs;
|
|
19
|
+
private readonly proxy;
|
|
13
20
|
constructor(cfg: ImprezaConfig);
|
|
14
21
|
/**
|
|
15
22
|
* Authenticated GET. Decodes the standard envelope ({success, data,
|
|
@@ -47,6 +54,15 @@ export declare class ImprezaClient {
|
|
|
47
54
|
*/
|
|
48
55
|
postRaw<T>(path: string, contentType: string, bytes: Uint8Array): Promise<T>;
|
|
49
56
|
private fetch;
|
|
57
|
+
/**
|
|
58
|
+
* fetch() equivalent routed through the configured SOCKS5 proxy. The proxy
|
|
59
|
+
* resolves the target hostname (remote DNS — no local lookup, no leak) and
|
|
60
|
+
* TLS, when the URL is https, is layered on top of the proxied socket. Uses
|
|
61
|
+
* node:http with a per-request `createConnection` (the one form Node honors
|
|
62
|
+
* — an Agent-constructor option is silently ignored), so no dependency is
|
|
63
|
+
* needed. Any proxy/handshake failure throws: fail closed, never direct.
|
|
64
|
+
*/
|
|
65
|
+
private proxiedFetch;
|
|
50
66
|
private parseEnvelope;
|
|
51
67
|
}
|
|
52
68
|
import { VERSION } from './version.js';
|
package/dist/client.js
CHANGED
|
@@ -2,25 +2,38 @@
|
|
|
2
2
|
// OpenAPI surface in impreza-platform/specs/openapi-platform.yaml.
|
|
3
3
|
//
|
|
4
4
|
// Auth: standard X-API-Key + X-API-Secret headers, sourced from env.
|
|
5
|
-
// Network: native fetch (Node ≥ 20 has it)
|
|
6
|
-
//
|
|
5
|
+
// Network: native fetch (Node ≥ 20 has it), or a hand-rolled no-auth SOCKS5
|
|
6
|
+
// transport over node:net/node:http when `proxy` is configured (Tor usage —
|
|
7
|
+
// see socks5.ts). No retry / circuit-breaker in v1 — the AI client retries
|
|
8
|
+
// the tool call if it cares.
|
|
7
9
|
import { createHash } from 'node:crypto';
|
|
10
|
+
import { once } from 'node:events';
|
|
8
11
|
import { readFile, stat } from 'node:fs/promises';
|
|
12
|
+
import http from 'node:http';
|
|
9
13
|
import { tmpdir } from 'node:os';
|
|
10
14
|
import { join } from 'node:path';
|
|
11
15
|
import { createWriteStream } from 'node:fs';
|
|
16
|
+
import tls from 'node:tls';
|
|
12
17
|
import { unlink } from 'node:fs/promises';
|
|
13
18
|
import * as tar from 'tar';
|
|
19
|
+
import { parseSocksProxy, socks5Connect } from './socks5.js';
|
|
20
|
+
import { isOnionHost } from './env.js';
|
|
14
21
|
export class ImprezaClient {
|
|
15
22
|
baseURL;
|
|
16
23
|
apiKey;
|
|
17
24
|
apiSecret;
|
|
18
25
|
timeoutMs;
|
|
26
|
+
proxy;
|
|
19
27
|
constructor(cfg) {
|
|
20
28
|
this.baseURL = cfg.baseURL.replace(/\/+$/, '');
|
|
21
29
|
this.apiKey = cfg.apiKey;
|
|
22
30
|
this.apiSecret = cfg.apiSecret;
|
|
23
31
|
this.timeoutMs = cfg.timeoutMs ?? 60_000;
|
|
32
|
+
this.proxy = cfg.proxy ? parseSocksProxy(cfg.proxy) : undefined;
|
|
33
|
+
const host = new URL(this.baseURL).hostname;
|
|
34
|
+
if (host.endsWith('.onion') && (!isOnionHost(host) || !this.proxy)) {
|
|
35
|
+
throw new Error('An onion API requires a valid v3 hostname and an explicit SOCKS5 proxy; no direct connection is allowed.');
|
|
36
|
+
}
|
|
24
37
|
}
|
|
25
38
|
/**
|
|
26
39
|
* Authenticated GET. Decodes the standard envelope ({success, data,
|
|
@@ -106,25 +119,26 @@ export class ImprezaClient {
|
|
|
106
119
|
async fetch(url, init) {
|
|
107
120
|
const ctrl = new AbortController();
|
|
108
121
|
const timer = setTimeout(() => ctrl.abort(), this.timeoutMs);
|
|
122
|
+
const headers = {
|
|
123
|
+
Accept: 'application/json',
|
|
124
|
+
'X-API-Key': this.apiKey,
|
|
125
|
+
'X-API-Secret': this.apiSecret,
|
|
126
|
+
'User-Agent': `impreza-mcp/${VERSION}`,
|
|
127
|
+
// All callers pass plain objects — cast keeps HeadersInit's array/Headers
|
|
128
|
+
// variants from poisoning the merged shape.
|
|
129
|
+
...(init.headers ?? {}),
|
|
130
|
+
};
|
|
109
131
|
try {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
// Cookie and Proxy-Authorization when a redirect crosses to another
|
|
121
|
-
// origin — it has no idea ours are credentials, so it would carry the
|
|
122
|
-
// customer's key and secret to whatever host a 3xx names. The API
|
|
123
|
-
// answers JSON on every endpoint and never redirects, so we take the
|
|
124
|
-
// redirect ourselves and refuse it.
|
|
125
|
-
redirect: 'manual',
|
|
126
|
-
signal: ctrl.signal,
|
|
127
|
-
});
|
|
132
|
+
// The credentials above are CUSTOM headers. Fetch strips Authorization,
|
|
133
|
+
// Cookie and Proxy-Authorization when a redirect crosses to another
|
|
134
|
+
// origin — it has no idea ours are credentials, so it would carry the
|
|
135
|
+
// customer's key and secret to whatever host a 3xx names. The API
|
|
136
|
+
// answers JSON on every endpoint and never redirects, so we take the
|
|
137
|
+
// redirect ourselves and refuse it. (node:http never follows redirects
|
|
138
|
+
// at all, so the proxied path is equally strict by construction.)
|
|
139
|
+
const res = this.proxy
|
|
140
|
+
? await this.proxiedFetch(url, init, headers, ctrl.signal)
|
|
141
|
+
: await fetch(url, { ...init, headers, redirect: 'manual', signal: ctrl.signal });
|
|
128
142
|
if (res.status >= 300 && res.status < 400) {
|
|
129
143
|
throw new Error(`UNEXPECTED_REDIRECT: the API answered HTTP ${res.status} for ${url.pathname}. ` +
|
|
130
144
|
'Refusing to resend your API credentials to the redirect target. ' +
|
|
@@ -136,6 +150,91 @@ export class ImprezaClient {
|
|
|
136
150
|
clearTimeout(timer);
|
|
137
151
|
}
|
|
138
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* fetch() equivalent routed through the configured SOCKS5 proxy. The proxy
|
|
155
|
+
* resolves the target hostname (remote DNS — no local lookup, no leak) and
|
|
156
|
+
* TLS, when the URL is https, is layered on top of the proxied socket. Uses
|
|
157
|
+
* node:http with a per-request `createConnection` (the one form Node honors
|
|
158
|
+
* — an Agent-constructor option is silently ignored), so no dependency is
|
|
159
|
+
* needed. Any proxy/handshake failure throws: fail closed, never direct.
|
|
160
|
+
*/
|
|
161
|
+
async proxiedFetch(url, init, headers, signal) {
|
|
162
|
+
if (!this.proxy)
|
|
163
|
+
throw new Error('proxiedFetch without a configured proxy');
|
|
164
|
+
const isTls = url.protocol === 'https:';
|
|
165
|
+
const port = url.port ? Number(url.port) : isTls ? 443 : 80;
|
|
166
|
+
let socket;
|
|
167
|
+
const onAbort = () => socket?.destroy(new Error('Proxied request aborted'));
|
|
168
|
+
signal.addEventListener('abort', onAbort);
|
|
169
|
+
try {
|
|
170
|
+
signal.throwIfAborted();
|
|
171
|
+
socket = await socks5Connect(this.proxy, url.hostname, port, this.timeoutMs, signal);
|
|
172
|
+
signal.throwIfAborted();
|
|
173
|
+
if (isTls) {
|
|
174
|
+
const tlsSocket = tls.connect({ socket, servername: url.hostname });
|
|
175
|
+
// Abort removes once() listeners before destroy(error) emits. Keep a
|
|
176
|
+
// sink for that late event; the awaited handshake/request still rejects.
|
|
177
|
+
tlsSocket.on('error', () => { });
|
|
178
|
+
socket = tlsSocket;
|
|
179
|
+
await once(tlsSocket, 'secureConnect', { signal });
|
|
180
|
+
}
|
|
181
|
+
const established = socket;
|
|
182
|
+
const body = init.body;
|
|
183
|
+
const reqHeaders = { ...headers };
|
|
184
|
+
if (body !== undefined) {
|
|
185
|
+
reqHeaders['Content-Length'] = String(typeof body === 'string' ? Buffer.byteLength(body) : body.byteLength);
|
|
186
|
+
}
|
|
187
|
+
return await new Promise((resolve, reject) => {
|
|
188
|
+
const req = http.request({
|
|
189
|
+
method: init.method ?? 'GET',
|
|
190
|
+
host: url.hostname,
|
|
191
|
+
port,
|
|
192
|
+
path: url.pathname + url.search,
|
|
193
|
+
headers: reqHeaders,
|
|
194
|
+
createConnection: () => established,
|
|
195
|
+
}, (res) => {
|
|
196
|
+
const chunks = [];
|
|
197
|
+
let bytes = 0;
|
|
198
|
+
res.on('data', (c) => {
|
|
199
|
+
bytes += c.length;
|
|
200
|
+
if (bytes > 16 * 1024 * 1024) {
|
|
201
|
+
req.destroy(new Error('Proxied response exceeds 16 MiB'));
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
chunks.push(c);
|
|
205
|
+
});
|
|
206
|
+
res.on('end', () => {
|
|
207
|
+
try {
|
|
208
|
+
const resHeaders = new Headers();
|
|
209
|
+
for (let i = 0; i + 1 < res.rawHeaders.length; i += 2) {
|
|
210
|
+
resHeaders.append(res.rawHeaders[i], res.rawHeaders[i + 1]);
|
|
211
|
+
}
|
|
212
|
+
resolve(new Response([204, 205, 304].includes(res.statusCode ?? 0) ? null : Buffer.concat(chunks), {
|
|
213
|
+
status: res.statusCode ?? 502,
|
|
214
|
+
statusText: res.statusMessage ?? '',
|
|
215
|
+
headers: resHeaders,
|
|
216
|
+
}));
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
reject(err);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
res.on('error', reject);
|
|
223
|
+
res.on('aborted', () => reject(new Error('Proxied response was truncated')));
|
|
224
|
+
});
|
|
225
|
+
req.setTimeout(this.timeoutMs, () => req.destroy(new Error(`proxied request timed out after ${this.timeoutMs}ms`)));
|
|
226
|
+
req.on('error', reject);
|
|
227
|
+
if (body !== undefined)
|
|
228
|
+
req.write(body);
|
|
229
|
+
req.end();
|
|
230
|
+
established.resume();
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
finally {
|
|
234
|
+
signal.removeEventListener('abort', onAbort);
|
|
235
|
+
socket?.destroy();
|
|
236
|
+
}
|
|
237
|
+
}
|
|
139
238
|
async parseEnvelope(res) {
|
|
140
239
|
const text = await res.text();
|
|
141
240
|
let env;
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const isOnionHost: (host: string) => boolean;
|
|
3
|
+
export declare const IMPREZA_BASE_URL_SCHEMA: z.ZodDefault<z.ZodEffects<z.ZodString, string, string>>;
|
|
4
|
+
export declare const IMPREZA_PROXY_SCHEMA: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
5
|
+
export declare const envSchema: z.ZodEffects<z.ZodObject<{
|
|
6
|
+
IMPREZA_API_KEY: z.ZodString;
|
|
7
|
+
IMPREZA_API_SECRET: z.ZodString;
|
|
8
|
+
IMPREZA_BASE_URL: z.ZodDefault<z.ZodEffects<z.ZodString, string, string>>;
|
|
9
|
+
IMPREZA_PROXY: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
IMPREZA_API_KEY: string;
|
|
12
|
+
IMPREZA_API_SECRET: string;
|
|
13
|
+
IMPREZA_BASE_URL: string;
|
|
14
|
+
IMPREZA_PROXY?: string | undefined;
|
|
15
|
+
}, {
|
|
16
|
+
IMPREZA_API_KEY: string;
|
|
17
|
+
IMPREZA_API_SECRET: string;
|
|
18
|
+
IMPREZA_BASE_URL?: string | undefined;
|
|
19
|
+
IMPREZA_PROXY?: string | undefined;
|
|
20
|
+
}>, {
|
|
21
|
+
IMPREZA_API_KEY: string;
|
|
22
|
+
IMPREZA_API_SECRET: string;
|
|
23
|
+
IMPREZA_BASE_URL: string;
|
|
24
|
+
IMPREZA_PROXY?: string | undefined;
|
|
25
|
+
}, {
|
|
26
|
+
IMPREZA_API_KEY: string;
|
|
27
|
+
IMPREZA_API_SECRET: string;
|
|
28
|
+
IMPREZA_BASE_URL?: string | undefined;
|
|
29
|
+
IMPREZA_PROXY?: string | undefined;
|
|
30
|
+
}>;
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// Env validation for the MCP server, extracted from server.ts so the rules
|
|
2
|
+
// can be unit-tested without booting the server itself.
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { parseSocksProxy } from './socks5.js';
|
|
5
|
+
// IMPREZA_BASE_URL must be https:// — the API key + secret travel in request
|
|
6
|
+
// headers on every call, so an http:// (or otherwise downgraded) base URL
|
|
7
|
+
// would expose them in cleartext. Refusing non-https here prevents an
|
|
8
|
+
// attacker who can influence the environment from pointing the client at a
|
|
9
|
+
// malicious or plaintext endpoint to harvest credentials.
|
|
10
|
+
//
|
|
11
|
+
// The single exception is a .onion host: onion circuits are end-to-end
|
|
12
|
+
// encrypted by Tor itself, so http:// to a .onion never crosses the network
|
|
13
|
+
// in cleartext. A proxy is mandatory for either scheme on an onion host.
|
|
14
|
+
export const isOnionHost = (host) => /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z2-7]{56}\.onion$/i.test(host);
|
|
15
|
+
export const IMPREZA_BASE_URL_SCHEMA = z
|
|
16
|
+
.string()
|
|
17
|
+
.url()
|
|
18
|
+
.refine((u) => {
|
|
19
|
+
let url;
|
|
20
|
+
try {
|
|
21
|
+
url = new URL(u);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
if (url.username || url.password || url.search || url.hash)
|
|
27
|
+
return false;
|
|
28
|
+
if (url.hostname.endsWith('.onion') && !isOnionHost(url.hostname))
|
|
29
|
+
return false;
|
|
30
|
+
if (url.protocol === 'https:')
|
|
31
|
+
return true;
|
|
32
|
+
return url.protocol === 'http:' && isOnionHost(url.hostname);
|
|
33
|
+
}, 'IMPREZA_BASE_URL must be an https:// URL — http:// is accepted only for .onion hosts')
|
|
34
|
+
.default('https://api.imprezahost.com');
|
|
35
|
+
// IMPREZA_PROXY routes every API call through a local SOCKS5 proxy (typically
|
|
36
|
+
// the Tor daemon). Format checked with the same parser the client uses, so a
|
|
37
|
+
// value that validates here cannot fail at request time.
|
|
38
|
+
export const IMPREZA_PROXY_SCHEMA = z
|
|
39
|
+
.string()
|
|
40
|
+
.refine((v) => {
|
|
41
|
+
try {
|
|
42
|
+
parseSocksProxy(v);
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}, 'IMPREZA_PROXY must be a socks5://host:port URL (e.g. socks5://127.0.0.1:9050)')
|
|
49
|
+
.optional();
|
|
50
|
+
export const envSchema = z.object({
|
|
51
|
+
IMPREZA_API_KEY: z.string().min(8, 'IMPREZA_API_KEY must be set (starts with imp_)'),
|
|
52
|
+
IMPREZA_API_SECRET: z.string().min(16, 'IMPREZA_API_SECRET must be set'),
|
|
53
|
+
IMPREZA_BASE_URL: IMPREZA_BASE_URL_SCHEMA,
|
|
54
|
+
IMPREZA_PROXY: IMPREZA_PROXY_SCHEMA,
|
|
55
|
+
}).superRefine((cfg, ctx) => {
|
|
56
|
+
let host;
|
|
57
|
+
try {
|
|
58
|
+
host = new URL(cfg.IMPREZA_BASE_URL).hostname;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (host.endsWith('.onion') && !cfg.IMPREZA_PROXY) {
|
|
64
|
+
ctx.addIssue({ code: z.ZodIssueCode.custom, path: ['IMPREZA_PROXY'], message: 'An onion API requires IMPREZA_PROXY; direct DNS and connections are refused.' });
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,wDAAwD;AAExD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,6EAA6E;AAC7E,0EAA0E;AAC1E,sEAAsE;AACtE,2EAA2E;AAC3E,0DAA0D;AAC1D,EAAE;AACF,uEAAuE;AACvE,4EAA4E;AAC5E,yEAAyE;AACzE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,mEAAmE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrI,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,EAAE;KACR,GAAG,EAAE;KACL,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;IACZ,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACzE,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAChF,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/D,CAAC,EAAE,sFAAsF,CAAC;KACzF,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAE1C,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;IACZ,IAAI,CAAC;QACH,eAAe,CAAC,CAAC,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,EAAE,+EAA+E,CAAC;KAClF,QAAQ,EAAE,CAAC;AAEd,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,gDAAgD,CAAC;IACpF,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,gCAAgC,CAAC;IACxE,gBAAgB,EAAE,uBAAuB;IACzC,aAAa,EAAE,oBAAoB;CACpC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC1B,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QAAC,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO;IAAC,CAAC;IACxE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAClD,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,8EAA8E,EAAE,CAAC,CAAC;IAClK,CAAC;AACH,CAAC,CAAC,CAAC"}
|