overmind-mcp 2.0.0 → 2.0.2
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 +145 -139
- package/dist/server.d.ts +40 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +104 -61
- package/dist/server.js.map +1 -1
- package/dist/services/ClaudeRunner.d.ts.map +1 -1
- package/dist/services/ClaudeRunner.js +68 -47
- package/dist/services/ClaudeRunner.js.map +1 -1
- package/docs/INDEX.md +144 -0
- package/docs/README.md +128 -0
- package/docs/api/prompt/Claude_code.md +74 -0
- package/docs/api/prompt/Kilo.md +74 -0
- package/docs/api/prompt/Kilo_Hermes.md +170 -0
- package/docs/api/prompt/Minimax4.md +96 -0
- package/docs/changelog/CHANGELOG.add.md +106 -0
- package/docs/changelog/CHANGELOG.md +339 -0
- package/docs/guides/DEPLOYMENT.md +418 -0
- package/docs/guides/SWARM_USAGE.md +444 -0
- package/docs/index.html +569 -0
- package/docs/library.html +239 -0
- package/docs/prompt.html +1212 -0
- package/docs/script.js +428 -0
- package/docs/styles.css +2816 -0
- package/docs/tools.md +794 -0
- package/package.json +26 -11
- package/scripts/docker-manager.mjs +200 -0
- package/scripts/install-dependencies.mjs +462 -0
- package/scripts/postinstall.mjs +192 -0
- package/scripts/setup-overmind-db.mjs +199 -0
- package/scripts/setup-windows.js +264 -0
- package/scripts/setup.mjs +394 -0
- package/scripts/uninstall.mjs +224 -0
- package/dist/tools/metadata.d.ts +0 -20
- package/dist/tools/metadata.d.ts.map +0 -1
- package/dist/tools/metadata.js +0 -246
- package/dist/tools/metadata.js.map +0 -1
package/dist/tools/metadata.js
DELETED
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { readdir, readFile, stat, realpath } from 'fs/promises';
|
|
3
|
-
import { join, extname, basename, resolve, sep } from 'path';
|
|
4
|
-
export const metadataSchema = z.object({
|
|
5
|
-
path: z.string().default('.').describe('Chemin du projet (défaut: répertoire courant)'),
|
|
6
|
-
depth: z.number().min(1).max(8).default(3).describe("Profondeur de l'arborescence (défaut: 3)"),
|
|
7
|
-
includeStats: z.boolean().default(true).describe('Inclure les statistiques (défaut: true)'),
|
|
8
|
-
});
|
|
9
|
-
const IGNORED = new Set([
|
|
10
|
-
'node_modules',
|
|
11
|
-
'.git',
|
|
12
|
-
'.github',
|
|
13
|
-
'dist',
|
|
14
|
-
'.next',
|
|
15
|
-
'build',
|
|
16
|
-
'coverage',
|
|
17
|
-
'__pycache__',
|
|
18
|
-
'.cache',
|
|
19
|
-
'.turbo',
|
|
20
|
-
'.pnpm-store',
|
|
21
|
-
]);
|
|
22
|
-
const CONFIG_FILES = [
|
|
23
|
-
'package.json',
|
|
24
|
-
'tsconfig.json',
|
|
25
|
-
'tsconfig.base.json',
|
|
26
|
-
'.env.example',
|
|
27
|
-
'vite.config.ts',
|
|
28
|
-
'vite.config.js',
|
|
29
|
-
'vitest.config.ts',
|
|
30
|
-
'eslint.config.js',
|
|
31
|
-
'.eslintrc.json',
|
|
32
|
-
'prettier.config.js',
|
|
33
|
-
'.prettierrc',
|
|
34
|
-
'Dockerfile',
|
|
35
|
-
'docker-compose.yml',
|
|
36
|
-
];
|
|
37
|
-
const LANG_MAP = {
|
|
38
|
-
'.ts': 'TypeScript',
|
|
39
|
-
'.tsx': 'TypeScript (JSX)',
|
|
40
|
-
'.js': 'JavaScript',
|
|
41
|
-
'.jsx': 'JavaScript (JSX)',
|
|
42
|
-
'.py': 'Python',
|
|
43
|
-
'.go': 'Go',
|
|
44
|
-
'.rs': 'Rust',
|
|
45
|
-
'.java': 'Java',
|
|
46
|
-
'.cs': 'C#',
|
|
47
|
-
'.cpp': 'C++',
|
|
48
|
-
'.c': 'C',
|
|
49
|
-
'.md': 'Markdown',
|
|
50
|
-
'.json': 'JSON',
|
|
51
|
-
'.yaml': 'YAML',
|
|
52
|
-
'.yml': 'YAML',
|
|
53
|
-
'.toml': 'TOML',
|
|
54
|
-
'.sh': 'Shell',
|
|
55
|
-
'.bat': 'Batch',
|
|
56
|
-
'.sql': 'SQL',
|
|
57
|
-
'.html': 'HTML',
|
|
58
|
-
'.css': 'CSS',
|
|
59
|
-
'.scss': 'SCSS',
|
|
60
|
-
};
|
|
61
|
-
async function buildTree(dir, depth, currentDepth = 0) {
|
|
62
|
-
if (currentDepth >= depth)
|
|
63
|
-
return [];
|
|
64
|
-
let entries;
|
|
65
|
-
try {
|
|
66
|
-
entries = await readdir(dir, { withFileTypes: true });
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
return [];
|
|
70
|
-
}
|
|
71
|
-
const nodes = [];
|
|
72
|
-
for (const entry of entries) {
|
|
73
|
-
if (IGNORED.has(entry.name) || (entry.name.startsWith('.') && entry.name !== '.env.example'))
|
|
74
|
-
continue;
|
|
75
|
-
if (entry.isDirectory()) {
|
|
76
|
-
const children = await buildTree(join(dir, entry.name), depth, currentDepth + 1);
|
|
77
|
-
nodes.push({ name: entry.name, type: 'dir', children });
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
nodes.push({ name: entry.name, type: 'file' });
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return nodes.sort((a, b) => {
|
|
84
|
-
if (a.type !== b.type)
|
|
85
|
-
return a.type === 'dir' ? -1 : 1;
|
|
86
|
-
return a.name.localeCompare(b.name);
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
function renderTree(nodes, prefix = '') {
|
|
90
|
-
let out = '';
|
|
91
|
-
for (let i = 0; i < nodes.length; i++) {
|
|
92
|
-
const node = nodes[i];
|
|
93
|
-
const isLast = i === nodes.length - 1;
|
|
94
|
-
const connector = isLast ? '└── ' : '├── ';
|
|
95
|
-
const icon = node.type === 'dir' ? '📁 ' : '📄 ';
|
|
96
|
-
out += `${prefix}${connector}${icon}${node.name}\n`;
|
|
97
|
-
if (node.children?.length) {
|
|
98
|
-
out += renderTree(node.children, prefix + (isLast ? ' ' : '│ '));
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return out;
|
|
102
|
-
}
|
|
103
|
-
async function collectStats(dir) {
|
|
104
|
-
const stats = { totalFiles: 0, totalLines: 0, languages: {}, filePaths: [] };
|
|
105
|
-
async function walk(d) {
|
|
106
|
-
let entries;
|
|
107
|
-
try {
|
|
108
|
-
entries = await readdir(d, { withFileTypes: true });
|
|
109
|
-
}
|
|
110
|
-
catch {
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
for (const entry of entries) {
|
|
114
|
-
if (IGNORED.has(entry.name))
|
|
115
|
-
continue;
|
|
116
|
-
const fullPath = join(d, entry.name);
|
|
117
|
-
if (entry.isDirectory()) {
|
|
118
|
-
await walk(fullPath);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
const ext = extname(entry.name).toLowerCase();
|
|
122
|
-
const lang = LANG_MAP[ext];
|
|
123
|
-
if (lang) {
|
|
124
|
-
stats.totalFiles++;
|
|
125
|
-
stats.languages[lang] = (stats.languages[lang] ?? 0) + 1;
|
|
126
|
-
// Store relative path from project root
|
|
127
|
-
stats.filePaths.push(fullPath.slice(dir.length + 1).replace(/\\/g, '/'));
|
|
128
|
-
try {
|
|
129
|
-
const content = await readFile(fullPath, 'utf8');
|
|
130
|
-
stats.totalLines += content.split('\n').length;
|
|
131
|
-
}
|
|
132
|
-
catch {
|
|
133
|
-
// skip unreadable files
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
await walk(dir);
|
|
140
|
-
stats.filePaths.sort();
|
|
141
|
-
return stats;
|
|
142
|
-
}
|
|
143
|
-
async function getConfigs(dir) {
|
|
144
|
-
const result = {};
|
|
145
|
-
for (const file of CONFIG_FILES) {
|
|
146
|
-
try {
|
|
147
|
-
const filePath = join(dir, file);
|
|
148
|
-
const s = await stat(filePath);
|
|
149
|
-
if (s.size > 1024 * 1024) {
|
|
150
|
-
result[file] = '[FILE TOO LARGE >1MB — skipped]';
|
|
151
|
-
continue;
|
|
152
|
-
}
|
|
153
|
-
const content = await readFile(filePath, 'utf8');
|
|
154
|
-
result[file] = content.length > 2000 ? content.slice(0, 2000) + '\n…(tronqué)' : content;
|
|
155
|
-
}
|
|
156
|
-
catch {
|
|
157
|
-
// file absent
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return result;
|
|
161
|
-
}
|
|
162
|
-
function withinRoot(candidate, root) {
|
|
163
|
-
// Normalize: add trailing sep so /foo doesn't match /foobar
|
|
164
|
-
const norm = (s) => {
|
|
165
|
-
const withSep = s.endsWith(sep) ? s : s + sep;
|
|
166
|
-
// Case-insensitive on Windows
|
|
167
|
-
return process.platform === 'win32' ? withSep.toLowerCase() : withSep;
|
|
168
|
-
};
|
|
169
|
-
return norm(candidate).startsWith(norm(root));
|
|
170
|
-
}
|
|
171
|
-
async function resolveAbsPath(p) {
|
|
172
|
-
const cwd = await realpath(process.cwd());
|
|
173
|
-
if (!p || p === '.')
|
|
174
|
-
return cwd;
|
|
175
|
-
// Pre-check before stat (catches obvious traversal early)
|
|
176
|
-
const candidate = resolve(cwd, p);
|
|
177
|
-
if (!withinRoot(candidate, cwd)) {
|
|
178
|
-
throw new Error(`Chemin refusé : "${p}" est en dehors du répertoire de travail. Utilisez un chemin relatif.`);
|
|
179
|
-
}
|
|
180
|
-
let real;
|
|
181
|
-
try {
|
|
182
|
-
const s = await stat(candidate);
|
|
183
|
-
if (!s.isDirectory())
|
|
184
|
-
throw new Error(`"${p}" n'est pas un répertoire.`);
|
|
185
|
-
// Resolve symlinks and re-check — prevents symlink escape on Linux/Mac
|
|
186
|
-
real = await realpath(candidate);
|
|
187
|
-
}
|
|
188
|
-
catch (e) {
|
|
189
|
-
if (e instanceof Error && (e.message.startsWith('Chemin refusé') || e.message.startsWith('"')))
|
|
190
|
-
throw e;
|
|
191
|
-
throw new Error(`Répertoire introuvable : "${p}"`);
|
|
192
|
-
}
|
|
193
|
-
if (!withinRoot(real, cwd)) {
|
|
194
|
-
throw new Error(`Chemin refusé : "${p}" pointe (via symlink) en dehors du répertoire de travail.`);
|
|
195
|
-
}
|
|
196
|
-
return real;
|
|
197
|
-
}
|
|
198
|
-
export async function metadataTool(args) {
|
|
199
|
-
const { path: rawPath, depth, includeStats } = args;
|
|
200
|
-
let absPath;
|
|
201
|
-
try {
|
|
202
|
-
absPath = await resolveAbsPath(rawPath);
|
|
203
|
-
}
|
|
204
|
-
catch (e) {
|
|
205
|
-
return {
|
|
206
|
-
isError: true,
|
|
207
|
-
content: [
|
|
208
|
-
{ type: 'text', text: `❌ ${e instanceof Error ? e.message : String(e)}` },
|
|
209
|
-
],
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
const projectName = basename(absPath);
|
|
213
|
-
let output = `# 🗂️ Metadata — \`${projectName}\`\n\n`;
|
|
214
|
-
output += `> **Chemin :** \`${absPath}\`\n\n`;
|
|
215
|
-
// Arborescence
|
|
216
|
-
const tree = await buildTree(absPath, depth);
|
|
217
|
-
output += `## 📁 Arborescence (profondeur ${depth})\n\`\`\`\n${projectName}/\n${renderTree(tree)}\`\`\`\n\n`;
|
|
218
|
-
// Configs
|
|
219
|
-
const configs = await getConfigs(absPath);
|
|
220
|
-
if (Object.keys(configs).length > 0) {
|
|
221
|
-
output += `## ⚙️ Fichiers de configuration\n`;
|
|
222
|
-
for (const [file, content] of Object.entries(configs)) {
|
|
223
|
-
const ext = file.endsWith('.json') ? 'json' : file.endsWith('.md') ? 'markdown' : 'yaml';
|
|
224
|
-
output += `### \`${file}\`\n\`\`\`${ext}\n${content}\n\`\`\`\n\n`;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
// Stats
|
|
228
|
-
if (includeStats) {
|
|
229
|
-
const stats = await collectStats(absPath);
|
|
230
|
-
output += `## 📊 Statistiques\n`;
|
|
231
|
-
output += `- **Fichiers sources :** ${stats.totalFiles}\n`;
|
|
232
|
-
output += `- **Lignes totales :** ${stats.totalLines.toLocaleString()}\n`;
|
|
233
|
-
output += `- **Langages :**\n`;
|
|
234
|
-
const sorted = Object.entries(stats.languages).sort((a, b) => b[1] - a[1]);
|
|
235
|
-
for (const [lang, count] of sorted) {
|
|
236
|
-
output += ` - ${lang}: ${count} fichier${count > 1 ? 's' : ''}\n`;
|
|
237
|
-
}
|
|
238
|
-
output += `\n## 📋 Fichiers sources (${stats.totalFiles})\n\`\`\`\n`;
|
|
239
|
-
output += stats.filePaths.join('\n');
|
|
240
|
-
output += `\n\`\`\`\n`;
|
|
241
|
-
}
|
|
242
|
-
return {
|
|
243
|
-
content: [{ type: 'text', text: output }],
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
//# sourceMappingURL=metadata.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/tools/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAE7D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IACvF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IAC/F,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;CAC5F,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;IACtB,cAAc;IACd,MAAM;IACN,SAAS;IACT,MAAM;IACN,OAAO;IACP,OAAO;IACP,UAAU;IACV,aAAa;IACb,QAAQ;IACR,QAAQ;IACR,aAAa;CACd,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG;IACnB,cAAc;IACd,eAAe;IACf,oBAAoB;IACpB,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;IAClB,gBAAgB;IAChB,oBAAoB;IACpB,aAAa;IACb,YAAY;IACZ,oBAAoB;CACrB,CAAC;AAEF,MAAM,QAAQ,GAA2B;IACvC,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,kBAAkB;IAC1B,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,kBAAkB;IAC1B,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,UAAU;IACjB,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,MAAM;CAChB,CAAC;AAQF,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,KAAa,EAAE,YAAY,GAAG,CAAC;IACnE,IAAI,YAAY,IAAI,KAAK;QAAE,OAAO,EAAE,CAAC;IAErC,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC;YAC1F,SAAS;QAEX,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;YACjF,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACzB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,KAAiB,EAAE,MAAM,GAAG,EAAE;IAChD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACjD,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;QACpD,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YAC1B,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AASD,KAAK,UAAU,YAAY,CAAC,GAAW;IACrC,MAAM,KAAK,GAAU,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAEpF,KAAK,UAAU,IAAI,CAAC,CAAS;QAC3B,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,OAAO,CAAC,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,CAAC,UAAU,EAAE,CAAC;oBACnB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBACzD,wCAAwC;oBACxC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;oBACzE,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;wBACjD,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;oBACjD,CAAC;oBAAC,MAAM,CAAC;wBACP,wBAAwB;oBAC1B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACvB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAW;IACnC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,GAAG,iCAAiC,CAAC;gBACjD,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3F,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,SAAiB,EAAE,IAAY;IACjD,4DAA4D;IAC5D,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE;QACzB,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAC9C,8BAA8B;QAC9B,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACxE,CAAC,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,CAAS;IACrC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IAEhC,0DAA0D;IAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAClC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,oBAAoB,CAAC,uEAAuE,CAC7F,CAAC;IACJ,CAAC;IAED,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACzE,uEAAuE;QACvE,IAAI,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC5F,MAAM,CAAC,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,oBAAoB,CAAC,4DAA4D,CAClF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAoC;IACrE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAEpD,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;aACnF;SACF,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEtC,IAAI,MAAM,GAAG,sBAAsB,WAAW,QAAQ,CAAC;IACvD,MAAM,IAAI,oBAAoB,OAAO,QAAQ,CAAC;IAE9C,eAAe;IACf,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7C,MAAM,IAAI,kCAAkC,KAAK,cAAc,WAAW,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;IAE7G,UAAU;IACV,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,mCAAmC,CAAC;QAC9C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACtD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;YACzF,MAAM,IAAI,SAAS,IAAI,aAAa,GAAG,KAAK,OAAO,cAAc,CAAC;QACpE,CAAC;IACH,CAAC;IAED,QAAQ;IACR,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,IAAI,sBAAsB,CAAC;QACjC,MAAM,IAAI,4BAA4B,KAAK,CAAC,UAAU,IAAI,CAAC;QAC3D,MAAM,IAAI,0BAA0B,KAAK,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC;QAC1E,MAAM,IAAI,oBAAoB,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,OAAO,IAAI,KAAK,KAAK,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QACrE,CAAC;QACD,MAAM,IAAI,6BAA6B,KAAK,CAAC,UAAU,aAAa,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,IAAI,YAAY,CAAC;IACzB,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC"}
|