mimo2codex 0.1.3 → 0.1.5
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/AGENTS.md +20 -5
- package/README.md +139 -14
- package/README.zh.md +140 -15
- package/dist/admin/router.js +288 -0
- package/dist/admin/router.js.map +1 -0
- package/dist/cli.js +83 -7
- package/dist/cli.js.map +1 -1
- package/dist/config.js +89 -10
- package/dist/config.js.map +1 -1
- package/dist/db/dataDir.js +14 -0
- package/dist/db/dataDir.js.map +1 -0
- package/dist/db/index.js +110 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/logs.js +94 -0
- package/dist/db/logs.js.map +1 -0
- package/dist/db/models.js +114 -0
- package/dist/db/models.js.map +1 -0
- package/dist/db/schema.js +74 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/db/settings.js +44 -0
- package/dist/db/settings.js.map +1 -0
- package/dist/providers/deepseek.js +76 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/mimo.js +88 -0
- package/dist/providers/mimo.js.map +1 -0
- package/dist/providers/registry.js +25 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/server.js +281 -67
- package/dist/server.js.map +1 -1
- package/dist/upstream/{mimoClient.js → openaiCompatClient.js} +21 -32
- package/dist/upstream/openaiCompatClient.js.map +1 -0
- package/dist/web/assets/index-DAJbSznk.css +1 -0
- package/dist/web/assets/index-DwvEnXbj.js +67 -0
- package/dist/web/index.html +13 -0
- package/package.json +9 -3
- package/dist/upstream/mimoClient.js.map +0 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { mimo } from "./mimo.js";
|
|
2
|
+
import { deepseek } from "./deepseek.js";
|
|
3
|
+
export const PROVIDERS = {
|
|
4
|
+
mimo,
|
|
5
|
+
deepseek,
|
|
6
|
+
};
|
|
7
|
+
export const PROVIDER_LIST = [mimo, deepseek];
|
|
8
|
+
export function byShortcut(s) {
|
|
9
|
+
const norm = s.toLowerCase();
|
|
10
|
+
return PROVIDER_LIST.find((p) => p.shortcut === norm || p.id === norm);
|
|
11
|
+
}
|
|
12
|
+
// Find which provider owns a given client-supplied model id (or alias).
|
|
13
|
+
// Used in PR2+ for per-request routing; in PR1 callers fall back to the
|
|
14
|
+
// configured default provider when this returns undefined.
|
|
15
|
+
export function byClientModel(model) {
|
|
16
|
+
for (const p of PROVIDER_LIST) {
|
|
17
|
+
if (p.resolveModel(model))
|
|
18
|
+
return p;
|
|
19
|
+
}
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
export function isProviderId(s) {
|
|
23
|
+
return s === "mimo" || s === "deepseek";
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,MAAM,CAAC,MAAM,SAAS,GAA2C;IAC/D,IAAI;IACJ,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAEnE,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7B,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,wEAAwE;AACxE,wEAAwE;AACxE,2DAA2D;AAC3D,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,OAAO,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,UAAU,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":""}
|
package/dist/server.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { createServer } from "node:http";
|
|
2
|
-
import { reqToChat } from "./translate/reqToChat.js";
|
|
3
2
|
import { respToResponses } from "./translate/respToResponses.js";
|
|
4
3
|
import { pipeChatStreamToResponses } from "./translate/streamToSse.js";
|
|
5
4
|
import { iterChatStreamChunks } from "./upstream/chatStream.js";
|
|
6
|
-
import {
|
|
5
|
+
import { callOpenAICompat, UpstreamError } from "./upstream/openaiCompatClient.js";
|
|
6
|
+
import { byClientModel, PROVIDER_LIST, PROVIDERS } from "./providers/registry.js";
|
|
7
7
|
import { makeServerResponseSink } from "./util/sse.js";
|
|
8
8
|
import { log } from "./util/log.js";
|
|
9
|
+
import { handleAdmin } from "./admin/router.js";
|
|
10
|
+
import { insertLog } from "./db/logs.js";
|
|
9
11
|
const KEEPALIVE_INTERVAL_MS = 15_000;
|
|
10
12
|
async function readJsonBody(req, maxBytes = 16 * 1024 * 1024) {
|
|
11
13
|
return await new Promise((resolve, reject) => {
|
|
@@ -55,6 +57,57 @@ function errorEnvelope(status, code, message) {
|
|
|
55
57
|
},
|
|
56
58
|
};
|
|
57
59
|
}
|
|
60
|
+
function recordLog(cfg, entry) {
|
|
61
|
+
if (!cfg.adminEnabled)
|
|
62
|
+
return;
|
|
63
|
+
const ts = Date.now();
|
|
64
|
+
setImmediate(() => {
|
|
65
|
+
try {
|
|
66
|
+
insertLog({ ...entry, ts });
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
log.warn("chat_logs insert failed", { error: err.message });
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function usageFromChatResponse(u) {
|
|
74
|
+
if (!u)
|
|
75
|
+
return { prompt_tokens: null, completion_tokens: null, total_tokens: null };
|
|
76
|
+
return {
|
|
77
|
+
prompt_tokens: u.prompt_tokens ?? null,
|
|
78
|
+
completion_tokens: u.completion_tokens ?? null,
|
|
79
|
+
total_tokens: u.total_tokens ?? null,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
// Route a request to a provider based on the client-supplied model field:
|
|
83
|
+
// 1. If the model matches an enabled non-default provider's catalog → switch.
|
|
84
|
+
// 2. Otherwise use the configured default provider; the body.model is
|
|
85
|
+
// rewritten to the default provider's defaultModel so we never forward
|
|
86
|
+
// an unknown id (which would 400 at the upstream).
|
|
87
|
+
function selectProvider(clientModel, cfg) {
|
|
88
|
+
const matched = byClientModel(clientModel);
|
|
89
|
+
if (matched && cfg.providers[matched.id]) {
|
|
90
|
+
const resolved = matched.resolveModel(clientModel);
|
|
91
|
+
return {
|
|
92
|
+
provider: matched,
|
|
93
|
+
runtime: cfg.providers[matched.id],
|
|
94
|
+
upstreamModel: resolved?.id ?? matched.defaultModel,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const provider = PROVIDERS[cfg.defaultProviderId];
|
|
98
|
+
const runtime = cfg.providers[cfg.defaultProviderId];
|
|
99
|
+
if (!runtime) {
|
|
100
|
+
throw new Error(`provider ${cfg.defaultProviderId} has no runtime (missing api key)`);
|
|
101
|
+
}
|
|
102
|
+
// Unknown model → use the default provider's defaultModel so we don't pass
|
|
103
|
+
// a foreign id to the upstream.
|
|
104
|
+
const resolved = provider.resolveModel(clientModel);
|
|
105
|
+
return {
|
|
106
|
+
provider,
|
|
107
|
+
runtime,
|
|
108
|
+
upstreamModel: resolved?.id ?? provider.defaultModel,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
58
111
|
async function handleResponses(cfg, req, res) {
|
|
59
112
|
let payload;
|
|
60
113
|
try {
|
|
@@ -76,88 +129,148 @@ async function handleResponses(cfg, req, res) {
|
|
|
76
129
|
log.debug("incoming POST /v1/responses raw body", payload);
|
|
77
130
|
// Health-check probe short-circuit. Tools like cc-switch's "test connection"
|
|
78
131
|
// send POST /v1/responses with just `{model, stream}` and no input — our
|
|
79
|
-
// translation would forward `messages: []` to
|
|
80
|
-
// probe shape (no input, no instructions) and answer with a
|
|
81
|
-
// without burning an upstream call.
|
|
132
|
+
// translation would forward `messages: []` to the upstream, which 400s.
|
|
133
|
+
// Detect the probe shape (no input, no instructions) and answer with a
|
|
134
|
+
// synthetic 200 without burning an upstream call.
|
|
82
135
|
const hasInput = Array.isArray(payload.input) && payload.input.length > 0;
|
|
83
136
|
const hasInstructions = typeof payload.instructions === "string" && payload.instructions.length > 0;
|
|
84
137
|
if (!hasInput && !hasInstructions) {
|
|
85
138
|
log.debug("matched probe shape — returning synthetic 200 without upstream call");
|
|
86
139
|
return respondToResponsesProbe(payload, res, !!payload.stream);
|
|
87
140
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
// Note on web_search:
|
|
94
|
-
// - On token-plan accounts (`tp-*` keys / token-plan-cn host), the Web
|
|
95
|
-
// Search Plugin isn't available, so we proactively strip web_search
|
|
96
|
-
// before forwarding (cfg.isTokenPlan).
|
|
97
|
-
// - On pay-as-you-go accounts (`sk-*`), we keep forwarding. If the user
|
|
98
|
-
// hasn't activated the plugin, MiMo returns 400 "webSearchEnabled is
|
|
99
|
-
// false" — we surface that with a friendlier hint (see mimoClient.ts)
|
|
100
|
-
// so the user activates the plugin and restarts.
|
|
101
|
-
//
|
|
102
|
-
// Note: we deliberately do NOT set `thinking: {type: "disabled"}` so that
|
|
103
|
-
// MiMo keeps generating `reasoning_content`. The user typically wants to
|
|
104
|
-
// see the thinking in the Codex terminal (use `--no-reasoning` to hide it).
|
|
105
|
-
const chat = reqToChat(payload, {
|
|
106
|
-
forceParallelToolCalls: true,
|
|
107
|
-
enableWebSearch: !cfg.isTokenPlan,
|
|
141
|
+
const { provider, runtime, upstreamModel } = selectProvider(payload.model, cfg);
|
|
142
|
+
log.debug(`routing to provider=${provider.id}`, {
|
|
143
|
+
baseUrl: runtime.baseUrl,
|
|
144
|
+
clientModel: payload.model,
|
|
145
|
+
upstreamModel,
|
|
108
146
|
});
|
|
147
|
+
const chat = provider.preprocessResponses(payload, {
|
|
148
|
+
runtime,
|
|
149
|
+
exposeReasoning: cfg.exposeReasoning,
|
|
150
|
+
});
|
|
151
|
+
chat.model = upstreamModel;
|
|
109
152
|
chat.stream = !!payload.stream;
|
|
110
153
|
const stream = !!payload.stream;
|
|
111
154
|
const ac = new AbortController();
|
|
112
155
|
req.on("close", () => ac.abort());
|
|
156
|
+
const startedAt = Date.now();
|
|
157
|
+
const baseEntry = {
|
|
158
|
+
request_id: null,
|
|
159
|
+
provider_id: provider.id,
|
|
160
|
+
client_model: payload.model,
|
|
161
|
+
upstream_model: upstreamModel,
|
|
162
|
+
endpoint: "/v1/responses",
|
|
163
|
+
stream,
|
|
164
|
+
};
|
|
113
165
|
if (!stream) {
|
|
114
166
|
try {
|
|
115
|
-
const upstreamRes = await
|
|
167
|
+
const upstreamRes = await callOpenAICompat({
|
|
168
|
+
baseUrl: runtime.baseUrl,
|
|
169
|
+
apiKey: runtime.apiKey,
|
|
170
|
+
userAgent: cfg.userAgent,
|
|
171
|
+
enhanceError: provider.enhanceError.bind(provider),
|
|
172
|
+
}, chat, ac.signal);
|
|
116
173
|
const chatJson = (await upstreamRes.json());
|
|
117
174
|
const responses = respToResponses(chatJson, payload, {
|
|
118
175
|
exposeReasoning: cfg.exposeReasoning,
|
|
119
176
|
});
|
|
120
|
-
|
|
177
|
+
sendJson(res, 200, responses);
|
|
178
|
+
recordLog(cfg, {
|
|
179
|
+
...baseEntry,
|
|
180
|
+
request_id: chatJson.id ?? null,
|
|
181
|
+
status_code: 200,
|
|
182
|
+
duration_ms: Date.now() - startedAt,
|
|
183
|
+
...usageFromChatResponse(chatJson.usage),
|
|
184
|
+
error_code: null,
|
|
185
|
+
error_snippet: null,
|
|
186
|
+
});
|
|
187
|
+
return;
|
|
121
188
|
}
|
|
122
189
|
catch (err) {
|
|
123
190
|
if (err instanceof UpstreamError) {
|
|
124
|
-
|
|
191
|
+
sendJson(res, err.status, errorEnvelope(err.status, err.code, err.message));
|
|
192
|
+
recordLog(cfg, {
|
|
193
|
+
...baseEntry,
|
|
194
|
+
status_code: err.status,
|
|
195
|
+
duration_ms: Date.now() - startedAt,
|
|
196
|
+
prompt_tokens: null,
|
|
197
|
+
completion_tokens: null,
|
|
198
|
+
total_tokens: null,
|
|
199
|
+
error_code: err.code,
|
|
200
|
+
error_snippet: err.bodySnippet ?? err.message,
|
|
201
|
+
});
|
|
202
|
+
return;
|
|
125
203
|
}
|
|
126
204
|
log.error("non-stream request failed", { error: err.message });
|
|
127
|
-
|
|
205
|
+
sendJson(res, 500, errorEnvelope(500, "internal_error", err.message));
|
|
206
|
+
recordLog(cfg, {
|
|
207
|
+
...baseEntry,
|
|
208
|
+
status_code: 500,
|
|
209
|
+
duration_ms: Date.now() - startedAt,
|
|
210
|
+
prompt_tokens: null,
|
|
211
|
+
completion_tokens: null,
|
|
212
|
+
total_tokens: null,
|
|
213
|
+
error_code: "internal_error",
|
|
214
|
+
error_snippet: err.message,
|
|
215
|
+
});
|
|
216
|
+
return;
|
|
128
217
|
}
|
|
129
218
|
}
|
|
130
|
-
// Streaming path.
|
|
131
|
-
// know the upstream is OK. This way upstream errors map to clean HTTP errors
|
|
132
|
-
// instead of half-opened SSE streams that confuse the Codex client.
|
|
219
|
+
// Streaming path.
|
|
133
220
|
let upstreamRes;
|
|
134
221
|
try {
|
|
135
|
-
upstreamRes = await
|
|
222
|
+
upstreamRes = await callOpenAICompat({
|
|
223
|
+
baseUrl: runtime.baseUrl,
|
|
224
|
+
apiKey: runtime.apiKey,
|
|
225
|
+
userAgent: cfg.userAgent,
|
|
226
|
+
enhanceError: provider.enhanceError.bind(provider),
|
|
227
|
+
}, chat, ac.signal);
|
|
136
228
|
}
|
|
137
229
|
catch (err) {
|
|
138
230
|
if (err instanceof UpstreamError) {
|
|
139
|
-
|
|
231
|
+
sendJson(res, err.status, errorEnvelope(err.status, err.code, err.message));
|
|
232
|
+
recordLog(cfg, {
|
|
233
|
+
...baseEntry,
|
|
234
|
+
status_code: err.status,
|
|
235
|
+
duration_ms: Date.now() - startedAt,
|
|
236
|
+
prompt_tokens: null,
|
|
237
|
+
completion_tokens: null,
|
|
238
|
+
total_tokens: null,
|
|
239
|
+
error_code: err.code,
|
|
240
|
+
error_snippet: err.bodySnippet ?? err.message,
|
|
241
|
+
});
|
|
242
|
+
return;
|
|
140
243
|
}
|
|
141
244
|
log.error("stream request failed (pre-stream)", { error: err.message });
|
|
142
|
-
|
|
245
|
+
sendJson(res, 500, errorEnvelope(500, "internal_error", err.message));
|
|
246
|
+
recordLog(cfg, {
|
|
247
|
+
...baseEntry,
|
|
248
|
+
status_code: 500,
|
|
249
|
+
duration_ms: Date.now() - startedAt,
|
|
250
|
+
prompt_tokens: null,
|
|
251
|
+
completion_tokens: null,
|
|
252
|
+
total_tokens: null,
|
|
253
|
+
error_code: "internal_error",
|
|
254
|
+
error_snippet: err.message,
|
|
255
|
+
});
|
|
256
|
+
return;
|
|
143
257
|
}
|
|
144
|
-
// Upstream returned 200 — now we can safely open the SSE stream.
|
|
145
258
|
const sink = makeServerResponseSink(res);
|
|
146
259
|
const keepalive = setInterval(() => sink.comment("keepalive"), KEEPALIVE_INTERVAL_MS);
|
|
147
260
|
res.on("close", () => clearInterval(keepalive));
|
|
261
|
+
let streamError = null;
|
|
148
262
|
try {
|
|
149
263
|
const chunks = iterChatStreamChunks(upstreamRes);
|
|
150
264
|
await pipeChatStreamToResponses(sink, { chunks }, payload, { exposeReasoning: cfg.exposeReasoning });
|
|
151
265
|
}
|
|
152
266
|
catch (err) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
// so reaching here means something unexpected in our own code.
|
|
267
|
+
streamError = err;
|
|
268
|
+
log.error("stream request failed (mid-stream)", { error: streamError.message });
|
|
156
269
|
if (!sink.closed()) {
|
|
157
270
|
sink.write("error", {
|
|
158
271
|
type: "error",
|
|
159
272
|
code: "server_error",
|
|
160
|
-
message:
|
|
273
|
+
message: streamError.message,
|
|
161
274
|
sequence_number: 9999,
|
|
162
275
|
});
|
|
163
276
|
sink.end();
|
|
@@ -165,11 +278,18 @@ async function handleResponses(cfg, req, res) {
|
|
|
165
278
|
}
|
|
166
279
|
finally {
|
|
167
280
|
clearInterval(keepalive);
|
|
281
|
+
recordLog(cfg, {
|
|
282
|
+
...baseEntry,
|
|
283
|
+
status_code: streamError ? 500 : 200,
|
|
284
|
+
duration_ms: Date.now() - startedAt,
|
|
285
|
+
prompt_tokens: null,
|
|
286
|
+
completion_tokens: null,
|
|
287
|
+
total_tokens: null,
|
|
288
|
+
error_code: streamError ? "stream_error" : null,
|
|
289
|
+
error_snippet: streamError ? streamError.message : null,
|
|
290
|
+
});
|
|
168
291
|
}
|
|
169
292
|
}
|
|
170
|
-
// Build a synthetic Responses object that satisfies probes (cc-switch test
|
|
171
|
-
// connection, etc.) without forwarding to MiMo. Status 200 + minimally-shaped
|
|
172
|
-
// response is enough for connection-test tools, which only check the status.
|
|
173
293
|
function respondToResponsesProbe(payload, res, stream) {
|
|
174
294
|
const id = `resp_probe_${Date.now()}`;
|
|
175
295
|
const created_at = Math.floor(Date.now() / 1000);
|
|
@@ -202,8 +322,6 @@ function respondToResponsesProbe(payload, res, stream) {
|
|
|
202
322
|
res.write(`event: response.completed\ndata: ${JSON.stringify({ type: "response.completed", response: completed, sequence_number: 1 })}\n\n`);
|
|
203
323
|
res.end();
|
|
204
324
|
}
|
|
205
|
-
// Synthetic Chat Completion for probes hitting /v1/chat/completions with empty
|
|
206
|
-
// messages. Mirror of respondToResponsesProbe but in OpenAI Chat shape.
|
|
207
325
|
function respondToChatProbe(payload, res, stream) {
|
|
208
326
|
const id = `chatcmpl_probe_${Date.now()}`;
|
|
209
327
|
const created = Math.floor(Date.now() / 1000);
|
|
@@ -240,12 +358,6 @@ function respondToChatProbe(payload, res, stream) {
|
|
|
240
358
|
res.write(`data: [DONE]\n\n`);
|
|
241
359
|
res.end();
|
|
242
360
|
}
|
|
243
|
-
// Passthrough for POST /v1/chat/completions. mimo2codex's primary surface is
|
|
244
|
-
// the Responses API translation, but plenty of tools (cc-switch's "test
|
|
245
|
-
// connection" probe, Cherry Studio, raw OpenAI SDKs) only speak Chat
|
|
246
|
-
// Completions. Since MiMo is itself Chat Completions–native, the cleanest
|
|
247
|
-
// answer is to forward the body verbatim and stream/return whatever upstream
|
|
248
|
-
// gives back. No translation, no state.
|
|
249
361
|
async function handleChatPassthrough(cfg, req, res) {
|
|
250
362
|
let payload;
|
|
251
363
|
try {
|
|
@@ -264,23 +376,68 @@ async function handleChatPassthrough(cfg, req, res) {
|
|
|
264
376
|
keys: Object.keys(payload),
|
|
265
377
|
});
|
|
266
378
|
log.debug("incoming POST /v1/chat/completions raw body", payload);
|
|
267
|
-
// Probe short-circuit (mirrors handleResponses): empty messages → synthetic 200.
|
|
268
379
|
if (!Array.isArray(payload.messages) || payload.messages.length === 0) {
|
|
269
380
|
log.debug("matched probe shape — returning synthetic 200 without upstream call");
|
|
270
381
|
return respondToChatProbe(payload, res, !!payload.stream);
|
|
271
382
|
}
|
|
383
|
+
const { provider, runtime, upstreamModel } = selectProvider(payload.model, cfg);
|
|
384
|
+
log.debug(`routing chat passthrough to provider=${provider.id}`, {
|
|
385
|
+
clientModel: payload.model,
|
|
386
|
+
upstreamModel,
|
|
387
|
+
});
|
|
388
|
+
const body = provider.preprocessChat(payload, {
|
|
389
|
+
runtime,
|
|
390
|
+
exposeReasoning: cfg.exposeReasoning,
|
|
391
|
+
});
|
|
392
|
+
body.model = upstreamModel;
|
|
272
393
|
const ac = new AbortController();
|
|
273
394
|
req.on("close", () => ac.abort());
|
|
395
|
+
const startedAt = Date.now();
|
|
396
|
+
const baseEntry = {
|
|
397
|
+
request_id: null,
|
|
398
|
+
provider_id: provider.id,
|
|
399
|
+
client_model: payload.model,
|
|
400
|
+
upstream_model: upstreamModel,
|
|
401
|
+
endpoint: "/v1/chat/completions",
|
|
402
|
+
stream: !!payload.stream,
|
|
403
|
+
};
|
|
274
404
|
let upstreamRes;
|
|
275
405
|
try {
|
|
276
|
-
upstreamRes = await
|
|
406
|
+
upstreamRes = await callOpenAICompat({
|
|
407
|
+
baseUrl: runtime.baseUrl,
|
|
408
|
+
apiKey: runtime.apiKey,
|
|
409
|
+
userAgent: cfg.userAgent,
|
|
410
|
+
enhanceError: provider.enhanceError.bind(provider),
|
|
411
|
+
}, body, ac.signal);
|
|
277
412
|
}
|
|
278
413
|
catch (err) {
|
|
279
414
|
if (err instanceof UpstreamError) {
|
|
280
|
-
|
|
415
|
+
sendJson(res, err.status, errorEnvelope(err.status, err.code, err.message));
|
|
416
|
+
recordLog(cfg, {
|
|
417
|
+
...baseEntry,
|
|
418
|
+
status_code: err.status,
|
|
419
|
+
duration_ms: Date.now() - startedAt,
|
|
420
|
+
prompt_tokens: null,
|
|
421
|
+
completion_tokens: null,
|
|
422
|
+
total_tokens: null,
|
|
423
|
+
error_code: err.code,
|
|
424
|
+
error_snippet: err.bodySnippet ?? err.message,
|
|
425
|
+
});
|
|
426
|
+
return;
|
|
281
427
|
}
|
|
282
428
|
log.error("chat passthrough failed", { error: err.message });
|
|
283
|
-
|
|
429
|
+
sendJson(res, 500, errorEnvelope(500, "internal_error", err.message));
|
|
430
|
+
recordLog(cfg, {
|
|
431
|
+
...baseEntry,
|
|
432
|
+
status_code: 500,
|
|
433
|
+
duration_ms: Date.now() - startedAt,
|
|
434
|
+
prompt_tokens: null,
|
|
435
|
+
completion_tokens: null,
|
|
436
|
+
total_tokens: null,
|
|
437
|
+
error_code: "internal_error",
|
|
438
|
+
error_snippet: err.message,
|
|
439
|
+
});
|
|
440
|
+
return;
|
|
284
441
|
}
|
|
285
442
|
const contentType = upstreamRes.headers.get("content-type") ?? "application/json";
|
|
286
443
|
res.statusCode = 200;
|
|
@@ -288,9 +445,20 @@ async function handleChatPassthrough(cfg, req, res) {
|
|
|
288
445
|
if (payload.stream) {
|
|
289
446
|
if (!upstreamRes.body) {
|
|
290
447
|
res.end();
|
|
448
|
+
recordLog(cfg, {
|
|
449
|
+
...baseEntry,
|
|
450
|
+
status_code: 200,
|
|
451
|
+
duration_ms: Date.now() - startedAt,
|
|
452
|
+
prompt_tokens: null,
|
|
453
|
+
completion_tokens: null,
|
|
454
|
+
total_tokens: null,
|
|
455
|
+
error_code: null,
|
|
456
|
+
error_snippet: null,
|
|
457
|
+
});
|
|
291
458
|
return;
|
|
292
459
|
}
|
|
293
460
|
const reader = upstreamRes.body.getReader();
|
|
461
|
+
let streamError = null;
|
|
294
462
|
try {
|
|
295
463
|
// eslint-disable-next-line no-constant-condition
|
|
296
464
|
while (true) {
|
|
@@ -302,35 +470,77 @@ async function handleChatPassthrough(cfg, req, res) {
|
|
|
302
470
|
}
|
|
303
471
|
}
|
|
304
472
|
catch (err) {
|
|
305
|
-
|
|
473
|
+
streamError = err;
|
|
474
|
+
log.error("chat passthrough stream error", { error: streamError.message });
|
|
306
475
|
}
|
|
307
476
|
finally {
|
|
308
477
|
res.end();
|
|
478
|
+
recordLog(cfg, {
|
|
479
|
+
...baseEntry,
|
|
480
|
+
status_code: streamError ? 500 : 200,
|
|
481
|
+
duration_ms: Date.now() - startedAt,
|
|
482
|
+
prompt_tokens: null,
|
|
483
|
+
completion_tokens: null,
|
|
484
|
+
total_tokens: null,
|
|
485
|
+
error_code: streamError ? "stream_error" : null,
|
|
486
|
+
error_snippet: streamError ? streamError.message : null,
|
|
487
|
+
});
|
|
309
488
|
}
|
|
310
489
|
return;
|
|
311
490
|
}
|
|
312
491
|
const text = await upstreamRes.text();
|
|
313
492
|
res.end(text);
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
493
|
+
// Try to extract token usage from the JSON body so logs reflect cost.
|
|
494
|
+
let usage;
|
|
495
|
+
try {
|
|
496
|
+
const parsed = JSON.parse(text);
|
|
497
|
+
usage = parsed.usage;
|
|
498
|
+
}
|
|
499
|
+
catch {
|
|
500
|
+
// ignore
|
|
501
|
+
}
|
|
502
|
+
recordLog(cfg, {
|
|
503
|
+
...baseEntry,
|
|
504
|
+
status_code: 200,
|
|
505
|
+
duration_ms: Date.now() - startedAt,
|
|
506
|
+
...usageFromChatResponse(usage),
|
|
507
|
+
error_code: null,
|
|
508
|
+
error_snippet: null,
|
|
323
509
|
});
|
|
324
510
|
}
|
|
511
|
+
function handleModels(cfg, res) {
|
|
512
|
+
// Aggregate the catalogs of every provider whose api key is configured. The
|
|
513
|
+
// default provider's catalog comes first so existing tools that pick the top
|
|
514
|
+
// entry keep their previous behavior.
|
|
515
|
+
const ordered = [
|
|
516
|
+
PROVIDERS[cfg.defaultProviderId],
|
|
517
|
+
...PROVIDER_LIST.filter((p) => p.id !== cfg.defaultProviderId),
|
|
518
|
+
];
|
|
519
|
+
const data = [];
|
|
520
|
+
for (const p of ordered) {
|
|
521
|
+
if (!cfg.providers[p.id])
|
|
522
|
+
continue;
|
|
523
|
+
const ownedBy = p.id === "mimo" ? "xiaomi" : "deepseek";
|
|
524
|
+
for (const m of p.builtinModels) {
|
|
525
|
+
data.push({ id: m.id, object: "model", owned_by: ownedBy });
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
sendJson(res, 200, { object: "list", data });
|
|
529
|
+
}
|
|
325
530
|
export function startServer(cfg) {
|
|
326
531
|
const server = createServer((req, res) => {
|
|
327
532
|
const url = req.url ?? "/";
|
|
328
533
|
if (req.method === "GET" && (url === "/healthz" || url === "/")) {
|
|
329
|
-
sendJson(res, 200, {
|
|
534
|
+
sendJson(res, 200, {
|
|
535
|
+
ok: true,
|
|
536
|
+
name: "mimo2codex",
|
|
537
|
+
provider: cfg.defaultProviderId,
|
|
538
|
+
baseUrl: cfg.baseUrl,
|
|
539
|
+
});
|
|
330
540
|
return;
|
|
331
541
|
}
|
|
332
542
|
if (req.method === "GET" && url.startsWith("/v1/models")) {
|
|
333
|
-
handleModels(res);
|
|
543
|
+
handleModels(cfg, res);
|
|
334
544
|
return;
|
|
335
545
|
}
|
|
336
546
|
if (req.method === "POST" && url.startsWith("/v1/responses")) {
|
|
@@ -341,6 +551,10 @@ export function startServer(cfg) {
|
|
|
341
551
|
void handleChatPassthrough(cfg, req, res);
|
|
342
552
|
return;
|
|
343
553
|
}
|
|
554
|
+
if (cfg.adminEnabled && (url === "/admin" || url.startsWith("/admin/"))) {
|
|
555
|
+
void handleAdmin(cfg, req, res);
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
344
558
|
sendJson(res, 404, errorEnvelope(404, "not_found", `no route for ${req.method} ${url}`));
|
|
345
559
|
});
|
|
346
560
|
server.listen(cfg.port, cfg.host);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA0D,MAAM,WAAW,CAAC;AAEjG,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAElF,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAqB,MAAM,cAAc,CAAC;AAE5D,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC,KAAK,UAAU,YAAY,CAAI,GAAoB,EAAE,QAAQ,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;IAC9E,OAAO,MAAM,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAC/B,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;YACtB,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;gBAC5C,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACrD,IAAI,CAAC,IAAI;oBAAE,OAAO,OAAO,CAAC,EAAO,CAAC,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC,CAAC;YACjC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,GAAmB,EAAE,MAAc,EAAE,IAAa;IAClE,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC;IACxB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAC;IACjE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,aAAa,CAAC,MAAc,EAAE,IAAY,EAAE,OAAe;IAGlE,OAAO;QACL,KAAK,EAAE;YACL,IAAI,EACF,MAAM,KAAK,GAAG;gBACZ,CAAC,CAAC,sBAAsB;gBACxB,CAAC,CAAC,MAAM,KAAK,GAAG;oBACd,CAAC,CAAC,qBAAqB;oBACvB,CAAC,CAAC,MAAM,IAAI,GAAG;wBACb,CAAC,CAAC,cAAc;wBAChB,CAAC,CAAC,uBAAuB;YACjC,IAAI;YACJ,OAAO;YACP,MAAM;SACP;KACF,CAAC;AACJ,CAAC;AAQD,SAAS,SAAS,CAAC,GAAW,EAAE,KAA+B;IAC7D,IAAI,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO;IAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,YAAY,CAAC,GAAG,EAAE;QAChB,IAAI,CAAC;YACH,SAAS,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAAC,CAAwB;IAKrD,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACpF,OAAO;QACL,aAAa,EAAE,CAAC,CAAC,aAAa,IAAI,IAAI;QACtC,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,IAAI,IAAI;QAC9C,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,IAAI;KACrC,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,gFAAgF;AAChF,wEAAwE;AACxE,4EAA4E;AAC5E,wDAAwD;AACxD,SAAS,cAAc,CAAC,WAAmB,EAAE,GAAW;IACtD,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACnD,OAAO;YACL,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAE;YACnC,aAAa,EAAE,QAAQ,EAAE,EAAE,IAAI,OAAO,CAAC,YAAY;SACpD,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACrD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,iBAAiB,mCAAmC,CAAC,CAAC;IACxF,CAAC;IACD,2EAA2E;IAC3E,gCAAgC;IAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IACpD,OAAO;QACL,QAAQ;QACR,OAAO;QACP,aAAa,EAAE,QAAQ,EAAE,EAAE,IAAI,QAAQ,CAAC,YAAY;KACrD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,GAAW,EACX,GAAoB,EACpB,GAAmB;IAEnB,IAAI,OAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,YAAY,CAAmB,GAAG,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,QAAQ,CACb,GAAG,EACH,GAAG,EACH,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,iCAAkC,GAAa,CAAC,OAAO,EAAE,CAAC,CAC9F,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,QAAQ,CACb,GAAG,EACH,GAAG,EACH,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,mCAAmC,CAAC,CACzE,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE;QACvC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;QACxB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QACrE,eAAe,EAAE,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;KAC3B,CAAC,CAAC;IACH,GAAG,CAAC,KAAK,CAAC,sCAAsC,EAAE,OAAO,CAAC,CAAC;IAE3D,6EAA6E;IAC7E,yEAAyE;IACzE,wEAAwE;IACxE,uEAAuE;IACvE,kDAAkD;IAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1E,MAAM,eAAe,GAAG,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IACpG,IAAI,CAAC,QAAQ,IAAI,CAAC,eAAe,EAAE,CAAC;QAClC,GAAG,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACjF,OAAO,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChF,GAAG,CAAC,KAAK,CAAC,uBAAuB,QAAQ,CAAC,EAAE,EAAE,EAAE;QAC9C,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,WAAW,EAAE,OAAO,CAAC,KAAK;QAC1B,aAAa;KACd,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE;QACjD,OAAO;QACP,eAAe,EAAE,GAAG,CAAC,eAAe;KACrC,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;IAC3B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAEhC,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IAElC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG;QAChB,UAAU,EAAE,IAAqB;QACjC,WAAW,EAAE,QAAQ,CAAC,EAAE;QACxB,YAAY,EAAE,OAAO,CAAC,KAAK;QAC3B,cAAc,EAAE,aAAa;QAC7B,QAAQ,EAAE,eAAe;QACzB,MAAM;KACP,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,gBAAgB,CACxC;gBACE,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;aACnD,EACD,IAAI,EACJ,EAAE,CAAC,MAAM,CACV,CAAC;YACF,MAAM,QAAQ,GAAG,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,CAAiB,CAAC;YAC5D,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE;gBACnD,eAAe,EAAE,GAAG,CAAC,eAAe;aACrC,CAAC,CAAC;YACH,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;YAC9B,SAAS,CAAC,GAAG,EAAE;gBACb,GAAG,SAAS;gBACZ,UAAU,EAAE,QAAQ,CAAC,EAAE,IAAI,IAAI;gBAC/B,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBACnC,GAAG,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACxC,UAAU,EAAE,IAAI;gBAChB,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;gBACjC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC5E,SAAS,CAAC,GAAG,EAAE;oBACb,GAAG,SAAS;oBACZ,WAAW,EAAE,GAAG,CAAC,MAAM;oBACvB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBACnC,aAAa,EAAE,IAAI;oBACnB,iBAAiB,EAAE,IAAI;oBACvB,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE,GAAG,CAAC,IAAI;oBACpB,aAAa,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,OAAO;iBAC9C,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,GAAG,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1E,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC;YACjF,SAAS,CAAC,GAAG,EAAE;gBACb,GAAG,SAAS;gBACZ,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBACnC,aAAa,EAAE,IAAI;gBACnB,iBAAiB,EAAE,IAAI;gBACvB,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,gBAAgB;gBAC5B,aAAa,EAAG,GAAa,CAAC,OAAO;aACtC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,WAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,gBAAgB,CAClC;YACE,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;SACnD,EACD,IAAI,EACJ,EAAE,CAAC,MAAM,CACV,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;YACjC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5E,SAAS,CAAC,GAAG,EAAE;gBACb,GAAG,SAAS;gBACZ,WAAW,EAAE,GAAG,CAAC,MAAM;gBACvB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBACnC,aAAa,EAAE,IAAI;gBACnB,iBAAiB,EAAE,IAAI;gBACvB,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,GAAG,CAAC,IAAI;gBACpB,aAAa,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,OAAO;aAC9C,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACnF,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QACjF,SAAS,CAAC,GAAG,EAAE;YACb,GAAG,SAAS;YACZ,WAAW,EAAE,GAAG;YAChB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YACnC,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,IAAI;YACvB,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,gBAAgB;YAC5B,aAAa,EAAG,GAAa,CAAC,OAAO;SACtC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC,CAAC;IACtF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhD,IAAI,WAAW,GAAiB,IAAI,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,yBAAyB,CAC7B,IAAI,EACJ,EAAE,MAAM,EAAE,EACV,OAAO,EACP,EAAE,eAAe,EAAE,GAAG,CAAC,eAAe,EAAE,CACzC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,GAAG,GAAY,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;gBAClB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,eAAe,EAAE,IAAI;aACtB,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;IACH,CAAC;YAAS,CAAC;QACT,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,SAAS,CAAC,GAAG,EAAE;YACb,GAAG,SAAS;YACZ,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;YACpC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YACnC,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,IAAI;YACvB,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;YAC/C,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;SACxD,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAyB,EACzB,GAAmB,EACnB,MAAe;IAEf,MAAM,EAAE,GAAG,cAAc,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG;QAChB,EAAE;QACF,MAAM,EAAE,UAAU;QAClB,UAAU;QACV,MAAM,EAAE,WAAW;QACnB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE;QAC7D,mBAAmB,EAAE,IAAI;QACzB,WAAW,EAAE,MAAM;QACnB,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAClC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;QAC1C,kBAAkB,EAAE,IAAI;QACxB,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;IACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kCAAkC,CAAC,CAAC;IAClE,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC;IACzD,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC3D,GAAG,CAAC,KAAK,CACP,kCAAkC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,MAAM,CAC/H,CAAC;IACF,GAAG,CAAC,KAAK,CACP,oCAAoC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,MAAM,CAClI,CAAC;IACF,GAAG,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,kBAAkB,CACzB,OAAoB,EACpB,GAAmB,EACnB,MAAe;IAEf,MAAM,EAAE,GAAG,kBAAkB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;YACjB,EAAE;YACF,MAAM,EAAE,iBAAiB;YACzB,OAAO;YACP,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE;gBACP;oBACE,KAAK,EAAE,CAAC;oBACR,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE;oBAC3C,aAAa,EAAE,MAAM;iBACtB;aACF;YACD,KAAK,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE;SACnE,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;IACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kCAAkC,CAAC,CAAC;IAClE,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC;IACzD,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,MAAqB,EAAU,EAAE,CAC7D,SAAS,IAAI,CAAC,SAAS,CAAC;QACtB,EAAE;QACF,MAAM,EAAE,uBAAuB;QAC/B,OAAO;QACP,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;KACtD,CAAC,MAAM,CAAC;IACX,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3D,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7B,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC9B,GAAG,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,GAAW,EACX,GAAoB,EACpB,GAAmB;IAEnB,IAAI,OAAoB,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,YAAY,CAAc,GAAG,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,QAAQ,CACb,GAAG,EACH,GAAG,EACH,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,iCAAkC,GAAa,CAAC,OAAO,EAAE,CAAC,CAC9F,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,QAAQ,CACb,GAAG,EACH,GAAG,EACH,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,mCAAmC,CAAC,CACzE,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,oCAAoC,EAAE;QAC9C,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;QACxB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QAC3E,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;KAC3B,CAAC,CAAC;IACH,GAAG,CAAC,KAAK,CAAC,6CAA6C,EAAE,OAAO,CAAC,CAAC;IAElE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACjF,OAAO,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChF,GAAG,CAAC,KAAK,CAAC,wCAAwC,QAAQ,CAAC,EAAE,EAAE,EAAE;QAC/D,WAAW,EAAE,OAAO,CAAC,KAAK;QAC1B,aAAa;KACd,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE;QAC5C,OAAO;QACP,eAAe,EAAE,GAAG,CAAC,eAAe;KACrC,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;IAE3B,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IAElC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG;QAChB,UAAU,EAAE,IAAqB;QACjC,WAAW,EAAE,QAAQ,CAAC,EAAE;QACxB,YAAY,EAAE,OAAO,CAAC,KAAK;QAC3B,cAAc,EAAE,aAAa;QAC7B,QAAQ,EAAE,sBAAsB;QAChC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;KACzB,CAAC;IAEF,IAAI,WAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,gBAAgB,CAClC;YACE,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;SACnD,EACD,IAAI,EACJ,EAAE,CAAC,MAAM,CACV,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;YACjC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5E,SAAS,CAAC,GAAG,EAAE;gBACb,GAAG,SAAS;gBACZ,WAAW,EAAE,GAAG,CAAC,MAAM;gBACvB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBACnC,aAAa,EAAE,IAAI;gBACnB,iBAAiB,EAAE,IAAI;gBACvB,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,GAAG,CAAC,IAAI;gBACpB,aAAa,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,OAAO;aAC9C,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QACjF,SAAS,CAAC,GAAG,EAAE;YACb,GAAG,SAAS;YACZ,WAAW,EAAE,GAAG;YAChB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YACnC,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,IAAI;YACvB,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,gBAAgB;YAC5B,aAAa,EAAG,GAAa,CAAC,OAAO;SACtC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,kBAAkB,CAAC;IAClF,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;IACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAE3C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACtB,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,SAAS,CAAC,GAAG,EAAE;gBACb,GAAG,SAAS;gBACZ,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBACnC,aAAa,EAAE,IAAI;gBACnB,iBAAiB,EAAE,IAAI;gBACvB,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI;gBAChB,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5C,IAAI,WAAW,GAAiB,IAAI,CAAC;QACrC,IAAI,CAAC;YACH,iDAAiD;YACjD,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAChB,IAAI,KAAK;oBAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,GAAG,GAAY,CAAC;YAC3B,GAAG,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7E,CAAC;gBAAS,CAAC;YACT,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,SAAS,CAAC,GAAG,EAAE;gBACb,GAAG,SAAS;gBACZ,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;gBACpC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBACnC,aAAa,EAAE,IAAI;gBACnB,iBAAiB,EAAE,IAAI;gBACvB,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;gBAC/C,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;aACxD,CAAC,CAAC;QACL,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;IACtC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACd,sEAAsE;IACtE,IAAI,KAA4B,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA0B,CAAC;QACzD,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,SAAS;QACZ,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;QACnC,GAAG,qBAAqB,CAAC,KAAK,CAAC;QAC/B,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,GAAW,EAAE,GAAmB;IACpD,4EAA4E;IAC5E,6EAA6E;IAC7E,sCAAsC;IACtC,MAAM,OAAO,GAAe;QAC1B,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAChC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,iBAAiB,CAAC;KAC/D,CAAC;IACF,MAAM,IAAI,GAA6D,EAAE,CAAC;IAC1E,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,SAAS;QACnC,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;QAE3B,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;YAChE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;gBACjB,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,GAAG,CAAC,iBAAiB;gBAC/B,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACzD,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAC7D,KAAK,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACpE,KAAK,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,YAAY,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACxE,KAAK,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,gBAAgB,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|