@jigyasudham/veto 2.0.2 → 2.1.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 +391 -320
- package/dist/agents/executor.d.ts.map +1 -1
- package/dist/agents/executor.js +3 -1
- package/dist/agents/executor.js.map +1 -1
- package/dist/agents/llm-runner.d.ts.map +1 -1
- package/dist/agents/llm-runner.js +62 -58
- package/dist/agents/llm-runner.js.map +1 -1
- package/dist/cli.js +40 -4
- package/dist/cli.js.map +1 -1
- package/dist/log.d.ts +9 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +33 -0
- package/dist/log.js.map +1 -0
- package/dist/memory/config.d.ts +1 -0
- package/dist/memory/config.d.ts.map +1 -1
- package/dist/memory/config.js +3 -2
- package/dist/memory/config.js.map +1 -1
- package/dist/memory/local.d.ts.map +1 -1
- package/dist/memory/local.js +3 -1
- package/dist/memory/local.js.map +1 -1
- package/dist/memory/schema.d.ts +1 -1
- package/dist/memory/schema.d.ts.map +1 -1
- package/dist/memory/schema.js +1 -0
- package/dist/memory/schema.js.map +1 -1
- package/dist/router/learning-updater.d.ts +4 -1
- package/dist/router/learning-updater.d.ts.map +1 -1
- package/dist/router/learning-updater.js +10 -0
- package/dist/router/learning-updater.js.map +1 -1
- package/dist/server/handlers/advisors.d.ts +3 -0
- package/dist/server/handlers/advisors.d.ts.map +1 -0
- package/dist/server/handlers/advisors.js +331 -0
- package/dist/server/handlers/advisors.js.map +1 -0
- package/dist/server/handlers/agents.d.ts +3 -0
- package/dist/server/handlers/agents.d.ts.map +1 -0
- package/dist/server/handlers/agents.js +202 -0
- package/dist/server/handlers/agents.js.map +1 -0
- package/dist/server/handlers/core.d.ts +3 -0
- package/dist/server/handlers/core.d.ts.map +1 -0
- package/dist/server/handlers/core.js +169 -0
- package/dist/server/handlers/core.js.map +1 -0
- package/dist/server/handlers/council.d.ts +3 -0
- package/dist/server/handlers/council.d.ts.map +1 -0
- package/dist/server/handlers/council.js +277 -0
- package/dist/server/handlers/council.js.map +1 -0
- package/dist/server/handlers/devtools.d.ts +3 -0
- package/dist/server/handlers/devtools.d.ts.map +1 -0
- package/dist/server/handlers/devtools.js +41 -0
- package/dist/server/handlers/devtools.js.map +1 -0
- package/dist/server/handlers/generators.d.ts +3 -0
- package/dist/server/handlers/generators.d.ts.map +1 -0
- package/dist/server/handlers/generators.js +541 -0
- package/dist/server/handlers/generators.js.map +1 -0
- package/dist/server/handlers/git.d.ts +3 -0
- package/dist/server/handlers/git.d.ts.map +1 -0
- package/dist/server/handlers/git.js +225 -0
- package/dist/server/handlers/git.js.map +1 -0
- package/dist/server/handlers/learning.d.ts +3 -0
- package/dist/server/handlers/learning.d.ts.map +1 -0
- package/dist/server/handlers/learning.js +60 -0
- package/dist/server/handlers/learning.js.map +1 -0
- package/dist/server/handlers/memory.d.ts +3 -0
- package/dist/server/handlers/memory.d.ts.map +1 -0
- package/dist/server/handlers/memory.js +181 -0
- package/dist/server/handlers/memory.js.map +1 -0
- package/dist/server/handlers/observability.d.ts +3 -0
- package/dist/server/handlers/observability.d.ts.map +1 -0
- package/dist/server/handlers/observability.js +132 -0
- package/dist/server/handlers/observability.js.map +1 -0
- package/dist/server/handlers/review.d.ts +3 -0
- package/dist/server/handlers/review.d.ts.map +1 -0
- package/dist/server/handlers/review.js +327 -0
- package/dist/server/handlers/review.js.map +1 -0
- package/dist/server/handlers/session.d.ts +3 -0
- package/dist/server/handlers/session.d.ts.map +1 -0
- package/dist/server/handlers/session.js +272 -0
- package/dist/server/handlers/session.js.map +1 -0
- package/dist/server/handlers/watch.d.ts +3 -0
- package/dist/server/handlers/watch.d.ts.map +1 -0
- package/dist/server/handlers/watch.js +29 -0
- package/dist/server/handlers/watch.js.map +1 -0
- package/dist/server/handlers/workers.d.ts +3 -0
- package/dist/server/handlers/workers.d.ts.map +1 -0
- package/dist/server/handlers/workers.js +27 -0
- package/dist/server/handlers/workers.js.map +1 -0
- package/dist/server/registry.d.ts +11 -0
- package/dist/server/registry.d.ts.map +1 -0
- package/dist/server/registry.js +9 -0
- package/dist/server/registry.js.map +1 -0
- package/dist/server/runtime.d.ts +49 -0
- package/dist/server/runtime.d.ts.map +1 -0
- package/dist/server/runtime.js +81 -0
- package/dist/server/runtime.js.map +1 -0
- package/dist/server/scan-core.d.ts +32 -0
- package/dist/server/scan-core.d.ts.map +1 -0
- package/dist/server/scan-core.js +82 -0
- package/dist/server/scan-core.js.map +1 -0
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +64 -2946
- package/dist/server.js.map +1 -1
- package/dist/tools/definitions.d.ts +4 -4
- package/dist/tools/definitions.js +4 -4
- package/dist/tools/definitions.js.map +1 -1
- package/package.json +2 -2
- package/AGENTS.md +0 -134
|
@@ -0,0 +1,541 @@
|
|
|
1
|
+
// Single-agent generator/advisor tools: each gathers project evidence (git
|
|
2
|
+
// history, config files, source) and runs one expert agent to produce an
|
|
3
|
+
// artifact — a debt register, ADR, .env.example, optimized prompt, error-budget
|
|
4
|
+
// advice, Mermaid diagram, RCA, release notes, postmortem, doc comments, or an
|
|
5
|
+
// onboarding guide. They share the executeOne + recordOutcome + buildContextString
|
|
6
|
+
// shape; bodies are the verbatim switch handlers.
|
|
7
|
+
import { readFileSync, writeFileSync, readdirSync, mkdirSync, existsSync } from 'node:fs';
|
|
8
|
+
import { join, extname } from 'node:path';
|
|
9
|
+
import { execSync } from 'node:child_process';
|
|
10
|
+
import { executeOne } from '../../agents/executor.js';
|
|
11
|
+
import { recordOutcome } from '../../router/index.js';
|
|
12
|
+
import { getAuditLog } from '../../memory/local.js';
|
|
13
|
+
import { buildContextString } from '../../context/reader.js';
|
|
14
|
+
export const generatorHandlers = {
|
|
15
|
+
veto_debt_register: async ({ args }) => {
|
|
16
|
+
const project_dir = String(args?.project_dir ?? '').trim();
|
|
17
|
+
if (!project_dir)
|
|
18
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: 'project_dir is required.' }) }], isError: true };
|
|
19
|
+
let gitLog = '';
|
|
20
|
+
try {
|
|
21
|
+
gitLog = execSync('git log --since=90.days --name-only --format="" --no-merges', {
|
|
22
|
+
cwd: project_dir, timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'],
|
|
23
|
+
}).toString();
|
|
24
|
+
}
|
|
25
|
+
catch { /* not a git repo */ }
|
|
26
|
+
const churnMap = {};
|
|
27
|
+
for (const line of gitLog.split('\n').filter(Boolean)) {
|
|
28
|
+
if (line.includes('.')) {
|
|
29
|
+
churnMap[line.trim()] = (churnMap[line.trim()] ?? 0) + 1;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const maxFiles = typeof args?.max_files === 'number' ? Math.min(args.max_files, 30) : 10;
|
|
33
|
+
const extensions = Array.isArray(args?.extensions) ? args.extensions.map(String) : ['.ts', '.js', '.py', '.go', '.java'];
|
|
34
|
+
const topFiles = Object.entries(churnMap)
|
|
35
|
+
.filter(([f]) => extensions.some((ext) => f.endsWith(ext)))
|
|
36
|
+
.sort((a, b) => b[1] - a[1])
|
|
37
|
+
.slice(0, maxFiles)
|
|
38
|
+
.map(([file, commits]) => ({ file, commits }));
|
|
39
|
+
const fileContents = topFiles.map(({ file, commits }) => {
|
|
40
|
+
try {
|
|
41
|
+
const abs = join(project_dir, file);
|
|
42
|
+
const content = readFileSync(abs, 'utf8').slice(0, 3000);
|
|
43
|
+
return { file, commits, content };
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return { file, commits, content: '' };
|
|
47
|
+
}
|
|
48
|
+
}).filter(f => f.content);
|
|
49
|
+
if (fileContents.length === 0) {
|
|
50
|
+
return { content: [{ type: 'text', text: JSON.stringify({
|
|
51
|
+
total_files_analyzed: 0,
|
|
52
|
+
date_range: 'last 90 days',
|
|
53
|
+
debt_items: [],
|
|
54
|
+
summary: 'No eligible files found in git history for the last 90 days.',
|
|
55
|
+
}, null, 2) }] };
|
|
56
|
+
}
|
|
57
|
+
const debtCode = fileContents
|
|
58
|
+
.map(f => `=== ${f.file} (${f.commits} commits) ===\n${f.content}`)
|
|
59
|
+
.join('\n\n')
|
|
60
|
+
.slice(0, 8000);
|
|
61
|
+
const debtResult = await executeOne({
|
|
62
|
+
id: `debt-${Date.now()}`,
|
|
63
|
+
agent: 'code-quality',
|
|
64
|
+
task: 'Analyze these high-churn source files for technical debt. For each file, identify: (1) the primary debt type (complexity/duplication/coupling/coverage/documentation), (2) severity (high/medium/low), (3) estimated fix effort in hours, (4) recommended agent to fix it. Rank by: high-churn × high-severity first.',
|
|
65
|
+
code: debtCode,
|
|
66
|
+
});
|
|
67
|
+
recordOutcome('debt-register', 50, 2, 'code-quality', Math.round(debtResult.output.confidence * 100));
|
|
68
|
+
const steps = debtResult.plan?.steps ?? [];
|
|
69
|
+
let debtItems;
|
|
70
|
+
if (steps.length > 0) {
|
|
71
|
+
debtItems = steps.map((step, i) => {
|
|
72
|
+
const matchedFile = fileContents[i] ?? fileContents[0];
|
|
73
|
+
return {
|
|
74
|
+
file: matchedFile.file,
|
|
75
|
+
churn_commits: matchedFile?.commits ?? 0,
|
|
76
|
+
priority: i < Math.ceil(steps.length / 3) ? 'high' : i < Math.ceil(steps.length * 2 / 3) ? 'medium' : 'low',
|
|
77
|
+
debt_type: 'complexity',
|
|
78
|
+
suggested_agent: 'refactor',
|
|
79
|
+
estimated_hours: 2,
|
|
80
|
+
description: step,
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
debtItems = fileContents.map(f => ({
|
|
86
|
+
file: f.file,
|
|
87
|
+
churn_commits: f.commits,
|
|
88
|
+
priority: f.commits > 20 ? 'high' : f.commits > 10 ? 'medium' : 'low',
|
|
89
|
+
debt_type: 'complexity',
|
|
90
|
+
suggested_agent: 'refactor',
|
|
91
|
+
estimated_hours: 2,
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
return { content: [{ type: 'text', text: JSON.stringify({
|
|
95
|
+
total_files_analyzed: fileContents.length,
|
|
96
|
+
date_range: 'last 90 days',
|
|
97
|
+
debt_items: debtItems,
|
|
98
|
+
summary: (debtResult.plan?.approach ?? debtResult.output.recommendation ?? '').trim(),
|
|
99
|
+
}, null, 2) }] };
|
|
100
|
+
},
|
|
101
|
+
veto_adr: ({ args }) => {
|
|
102
|
+
const task = String(args?.task ?? '').trim();
|
|
103
|
+
const verdict = String(args?.verdict ?? '').trim().toUpperCase();
|
|
104
|
+
const recommended = String(args?.recommended ?? '').trim();
|
|
105
|
+
const rationale = args?.rationale ? String(args.rationale) : undefined;
|
|
106
|
+
const consequences = args?.consequences ? String(args.consequences) : undefined;
|
|
107
|
+
const projectDir = args?.project_dir ? String(args.project_dir) : undefined;
|
|
108
|
+
const outcomeId = args?.outcome_id ? String(args.outcome_id) : undefined;
|
|
109
|
+
if (!task || !verdict || !recommended) {
|
|
110
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: 'task, verdict, and recommended are required.' }) }], isError: true };
|
|
111
|
+
}
|
|
112
|
+
const statusMap = {
|
|
113
|
+
GREEN: 'Accepted',
|
|
114
|
+
YELLOW: 'Accepted with reservations',
|
|
115
|
+
RED: 'Rejected',
|
|
116
|
+
DEADLOCK: 'Deferred',
|
|
117
|
+
};
|
|
118
|
+
const adrStatus = statusMap[verdict] ?? 'Under review';
|
|
119
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
120
|
+
const outcomeRef = outcomeId ? ` (outcome: ${outcomeId})` : '';
|
|
121
|
+
const adrContent = [
|
|
122
|
+
`# ${task.slice(0, 80)}`,
|
|
123
|
+
'',
|
|
124
|
+
`Date: ${today}`,
|
|
125
|
+
`Status: ${adrStatus}`,
|
|
126
|
+
`Council verdict: ${verdict}${outcomeRef}`,
|
|
127
|
+
'',
|
|
128
|
+
'## Context',
|
|
129
|
+
'',
|
|
130
|
+
task,
|
|
131
|
+
...(rationale ? ['', rationale] : []),
|
|
132
|
+
'',
|
|
133
|
+
'## Decision',
|
|
134
|
+
'',
|
|
135
|
+
recommended,
|
|
136
|
+
'',
|
|
137
|
+
'## Consequences',
|
|
138
|
+
'',
|
|
139
|
+
consequences ?? 'Under review.',
|
|
140
|
+
].join('\n');
|
|
141
|
+
let adrFilePath = null;
|
|
142
|
+
if (projectDir) {
|
|
143
|
+
const slug = task.toLowerCase().replace(/[^a-z0-9]+/g, '-').slice(0, 40);
|
|
144
|
+
const decisionsDir = join(projectDir, 'docs', 'decisions');
|
|
145
|
+
let nextNum = 1;
|
|
146
|
+
try {
|
|
147
|
+
const files = readdirSync(decisionsDir);
|
|
148
|
+
nextNum = files.filter(f => /^\d{4}-/.test(f)).length + 1;
|
|
149
|
+
}
|
|
150
|
+
catch { /* directory doesn't exist yet */ }
|
|
151
|
+
const paddedNum = String(nextNum).padStart(4, '0');
|
|
152
|
+
adrFilePath = join(decisionsDir, `${paddedNum}-${slug}.md`);
|
|
153
|
+
mkdirSync(decisionsDir, { recursive: true });
|
|
154
|
+
writeFileSync(adrFilePath, adrContent, 'utf8');
|
|
155
|
+
}
|
|
156
|
+
return { content: [{ type: 'text', text: JSON.stringify({
|
|
157
|
+
success: true,
|
|
158
|
+
adr: adrContent,
|
|
159
|
+
file_path: adrFilePath,
|
|
160
|
+
status: adrStatus,
|
|
161
|
+
}, null, 2) }] };
|
|
162
|
+
},
|
|
163
|
+
veto_env_setup: async ({ args }) => {
|
|
164
|
+
const projectDir = String(args?.project_dir ?? '').trim();
|
|
165
|
+
const writeFiles = args?.write_files === true;
|
|
166
|
+
if (!projectDir) {
|
|
167
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: 'project_dir is required.' }) }], isError: true };
|
|
168
|
+
}
|
|
169
|
+
const detected = [];
|
|
170
|
+
const summaryParts = [];
|
|
171
|
+
// Read package.json
|
|
172
|
+
const pkgPath = join(projectDir, 'package.json');
|
|
173
|
+
if (existsSync(pkgPath)) {
|
|
174
|
+
detected.push('node');
|
|
175
|
+
try {
|
|
176
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
177
|
+
summaryParts.push(`Node project: ${pkg.name ?? 'unnamed'}`);
|
|
178
|
+
if (pkg.scripts && typeof pkg.scripts === 'object') {
|
|
179
|
+
summaryParts.push(`Scripts: ${Object.keys(pkg.scripts).join(', ')}`);
|
|
180
|
+
}
|
|
181
|
+
if (pkg.dependencies && typeof pkg.dependencies === 'object') {
|
|
182
|
+
summaryParts.push(`Dependencies: ${Object.keys(pkg.dependencies).slice(0, 20).join(', ')}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
catch { /* ignore parse errors */ }
|
|
186
|
+
}
|
|
187
|
+
// Read .env or .env.local
|
|
188
|
+
for (const envFile of ['.env', '.env.local']) {
|
|
189
|
+
const envPath = join(projectDir, envFile);
|
|
190
|
+
if (existsSync(envPath)) {
|
|
191
|
+
try {
|
|
192
|
+
const lines = readFileSync(envPath, 'utf8').split('\n');
|
|
193
|
+
const vars = lines.filter(l => /^[A-Z_]+=/.test(l)).map(l => l.split('=')[0]);
|
|
194
|
+
if (vars.length > 0) {
|
|
195
|
+
summaryParts.push(`Existing env vars (${envFile}): ${vars.join(', ')}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch { /* ignore */ }
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// Note other config files
|
|
202
|
+
for (const f of ['requirements.txt', 'pyproject.toml']) {
|
|
203
|
+
if (existsSync(join(projectDir, f))) {
|
|
204
|
+
detected.push('python');
|
|
205
|
+
summaryParts.push(`Python config found: ${f}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (existsSync(join(projectDir, 'Cargo.toml'))) {
|
|
209
|
+
detected.push('rust');
|
|
210
|
+
summaryParts.push('Rust project found: Cargo.toml');
|
|
211
|
+
}
|
|
212
|
+
for (const f of ['docker-compose.yml', 'docker-compose.yaml']) {
|
|
213
|
+
if (existsSync(join(projectDir, f))) {
|
|
214
|
+
summaryParts.push(`Docker Compose found: ${f}`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const projectSummary = summaryParts.join('\n') || 'No configuration files found.';
|
|
218
|
+
const enrichedCtx = buildContextString(projectDir, projectSummary);
|
|
219
|
+
const agentTask = 'Generate a .env.example file for this project. List every environment variable needed with a placeholder value and a one-line comment explaining what it is. Then write a numbered setup guide (5-10 steps) for a developer setting up this project from scratch.';
|
|
220
|
+
const envResult = await executeOne({ id: 'env-setup-1', agent: 'devops', task: agentTask, context: enrichedCtx || undefined, project_dir: projectDir });
|
|
221
|
+
const rawOutput = envResult.output.recommendation ?? envResult.plan?.approach ?? '';
|
|
222
|
+
const envLines = rawOutput.split('\n').filter((l) => /^[A-Z_]+=/.test(l));
|
|
223
|
+
const envExample = envLines.length > 0 ? envLines.join('\n') : '# Add your environment variables here\n';
|
|
224
|
+
let written = false;
|
|
225
|
+
if (writeFiles) {
|
|
226
|
+
writeFileSync(join(projectDir, '.env.example'), envExample, 'utf8');
|
|
227
|
+
written = true;
|
|
228
|
+
}
|
|
229
|
+
return { content: [{ type: 'text', text: JSON.stringify({
|
|
230
|
+
env_example: envExample,
|
|
231
|
+
setup_guide: rawOutput,
|
|
232
|
+
written,
|
|
233
|
+
detected: [...new Set(detected)],
|
|
234
|
+
}, null, 2) }] };
|
|
235
|
+
},
|
|
236
|
+
veto_prompt_optimizer: async ({ args }) => {
|
|
237
|
+
const rawPrompt = String(args?.prompt ?? '').trim();
|
|
238
|
+
const goal = args?.goal ? String(args.goal) : undefined;
|
|
239
|
+
if (!rawPrompt)
|
|
240
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: 'prompt is required.' }) }], isError: true };
|
|
241
|
+
const prompt = rawPrompt.length > 8000 ? rawPrompt.slice(0, 8000) : rawPrompt;
|
|
242
|
+
// Deterministic pre-scan
|
|
243
|
+
const issues = [];
|
|
244
|
+
const p = prompt.toLowerCase();
|
|
245
|
+
if (!p.includes('you are') && !p.includes('your role') && !p.includes('act as') && !p.includes('you\'re a')) {
|
|
246
|
+
issues.push({ category: 'role', severity: 'medium', finding: 'No role definition found. Add "You are a [role]..." to anchor behavior.' });
|
|
247
|
+
}
|
|
248
|
+
if (!p.includes('format') && !p.includes('json') && !p.includes('markdown') && !p.includes('return') && !p.includes('output')) {
|
|
249
|
+
issues.push({ category: 'output_format', severity: 'medium', finding: 'No output format specified. Specify JSON, markdown, or plain text.' });
|
|
250
|
+
}
|
|
251
|
+
if (/ignore (previous|prior|above|all)|disregard|forget|pretend/i.test(prompt)) {
|
|
252
|
+
issues.push({ category: 'injection', severity: 'high', finding: 'Prompt may be injection-prone — contains phrases attackers commonly use.' });
|
|
253
|
+
}
|
|
254
|
+
if (prompt.trim().split(/\s+/).length < 20) {
|
|
255
|
+
issues.push({ category: 'specificity', severity: 'low', finding: 'Prompt is very short. Add more context and constraints for better results.' });
|
|
256
|
+
}
|
|
257
|
+
const result = await executeOne({
|
|
258
|
+
id: 'prompt-optimizer-1',
|
|
259
|
+
agent: 'documentation',
|
|
260
|
+
task: 'You are a prompt engineering expert. Analyze this prompt for failure modes: vague instructions, missing context, ambiguous outputs, injection risks, lack of examples, poor role definition. Then rewrite it to be clearer, more specific, and safer. Return: 1) A numbered list of issues found, 2) A complete rewritten version of the prompt.',
|
|
261
|
+
code: prompt,
|
|
262
|
+
context: goal ? `Goal: ${goal}` : undefined,
|
|
263
|
+
});
|
|
264
|
+
const quality = result.analysis?.score ?? Math.round(result.output.confidence * 100);
|
|
265
|
+
recordOutcome('prompt-optimizer', 50, 2, 'documentation', quality);
|
|
266
|
+
const highCount = issues.filter(i => i.severity === 'high').length;
|
|
267
|
+
const mediumCount = issues.filter(i => i.severity === 'medium').length;
|
|
268
|
+
const lowCount = issues.filter(i => i.severity === 'low').length;
|
|
269
|
+
const score = Math.min(100, Math.max(0, 100 - highCount * 20 - mediumCount * 10 - lowCount * 5));
|
|
270
|
+
const rewritten_prompt = result.plan?.approach ?? result.output.recommendation ?? '';
|
|
271
|
+
const improvement_summary = result.analysis?.summary ?? result.plan?.steps?.join('; ') ?? '';
|
|
272
|
+
return { content: [{ type: 'text', text: JSON.stringify({
|
|
273
|
+
score,
|
|
274
|
+
issues,
|
|
275
|
+
rewritten_prompt,
|
|
276
|
+
improvement_summary,
|
|
277
|
+
}, null, 2) }] };
|
|
278
|
+
},
|
|
279
|
+
veto_sre_advisor: async ({ args }) => {
|
|
280
|
+
const slo_target = Number(args?.slo_target);
|
|
281
|
+
const window_days = Number(args?.window_days);
|
|
282
|
+
const downtime_minutes = Number(args?.downtime_minutes);
|
|
283
|
+
const service_name = args?.service_name ? String(args.service_name) : undefined;
|
|
284
|
+
const incidents = Array.isArray(args?.incidents) ? args.incidents : [];
|
|
285
|
+
if (!slo_target || !window_days || isNaN(downtime_minutes)) {
|
|
286
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: 'slo_target, window_days, and downtime_minutes are required.' }) }], isError: true };
|
|
287
|
+
}
|
|
288
|
+
// Deterministic error budget math
|
|
289
|
+
const sloFraction = slo_target / 100;
|
|
290
|
+
const windowMinutes = window_days * 24 * 60;
|
|
291
|
+
const totalBudgetMinutes = windowMinutes * (1 - sloFraction);
|
|
292
|
+
const consumedMinutes = downtime_minutes;
|
|
293
|
+
const remainingMinutes = Math.max(0, totalBudgetMinutes - consumedMinutes);
|
|
294
|
+
const remainingPct = totalBudgetMinutes > 0 ? Math.round((remainingMinutes / totalBudgetMinutes) * 1000) / 10 : 0;
|
|
295
|
+
const exhaustedAt = consumedMinutes > 0 && remainingMinutes > 0
|
|
296
|
+
? new Date(Date.now() + (remainingMinutes / consumedMinutes) * window_days * 86400_000).toISOString().slice(0, 10)
|
|
297
|
+
: consumedMinutes >= totalBudgetMinutes ? 'EXHAUSTED' : null;
|
|
298
|
+
const status = remainingPct > 50 ? 'healthy' : remainingPct > 20 ? 'at_risk' : remainingPct > 0 ? 'critical' : 'exhausted';
|
|
299
|
+
// Build incident summary for the agent
|
|
300
|
+
const incidentSummary = incidents.length > 0
|
|
301
|
+
? 'Recent incidents:\n' + incidents.map(i => `- ${i.date}: ${i.duration_minutes} min — ${i.description}`).join('\n')
|
|
302
|
+
: 'No incident data provided.';
|
|
303
|
+
const sreResult = await executeOne({
|
|
304
|
+
id: 'sre-advisor-1',
|
|
305
|
+
agent: 'performance',
|
|
306
|
+
task: 'You are an SRE advisor. Given this service\'s error budget status, suggest: 1) Top 3 reliability improvements ranked by error budget recovery potential, 2) Whether to freeze non-critical deployments, 3) Specific monitoring improvements. Be concrete and actionable.',
|
|
307
|
+
context: `Service: ${service_name || 'unknown'}\nSLO: ${slo_target}%\nWindow: ${window_days} days\nBudget remaining: ${remainingPct}% (${remainingMinutes.toFixed(1)} min)\nStatus: ${status}\n${incidentSummary}`,
|
|
308
|
+
});
|
|
309
|
+
const recommendations = sreResult.plan?.approach ?? sreResult.output.recommendation ?? '';
|
|
310
|
+
return { content: [{ type: 'text', text: JSON.stringify({
|
|
311
|
+
slo_target_pct: slo_target,
|
|
312
|
+
window_days,
|
|
313
|
+
total_budget_minutes: Math.round(totalBudgetMinutes * 10) / 10,
|
|
314
|
+
consumed_minutes: consumedMinutes,
|
|
315
|
+
remaining_minutes: Math.round(remainingMinutes * 10) / 10,
|
|
316
|
+
remaining_pct: remainingPct,
|
|
317
|
+
status,
|
|
318
|
+
projected_exhaustion: exhaustedAt,
|
|
319
|
+
recommendations,
|
|
320
|
+
freeze_recommended: remainingPct < 20,
|
|
321
|
+
}, null, 2) }] };
|
|
322
|
+
},
|
|
323
|
+
veto_diagram: async ({ args }) => {
|
|
324
|
+
const project_dir = String(args?.project_dir ?? '').trim();
|
|
325
|
+
const diagramType = String(args?.diagram_type ?? 'flowchart').trim();
|
|
326
|
+
const focus = args?.focus ? String(args.focus) : undefined;
|
|
327
|
+
if (!project_dir)
|
|
328
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: 'project_dir is required.' }) }], isError: true };
|
|
329
|
+
const ctx = buildContextString(project_dir);
|
|
330
|
+
let fileTree = '';
|
|
331
|
+
try {
|
|
332
|
+
fileTree = execSync('git ls-files --others --cached --exclude-standard', {
|
|
333
|
+
cwd: project_dir, timeout: 3000, stdio: ['pipe', 'pipe', 'pipe'],
|
|
334
|
+
}).toString().split('\n').filter((f) => !f.includes('node_modules') && !f.includes('dist/')).slice(0, 60).join('\n');
|
|
335
|
+
}
|
|
336
|
+
catch { /* not a git repo */ }
|
|
337
|
+
const diagramResult = await executeOne({
|
|
338
|
+
id: 'diagram-1',
|
|
339
|
+
agent: 'documentation',
|
|
340
|
+
task: `Generate a ${diagramType} Mermaid diagram of this project's architecture. Output ONLY the raw Mermaid diagram code (starting with 'flowchart TD' or similar — no markdown fences, no explanation text). Focus on: ${focus || 'overall system architecture, main modules, and data flow'}. Keep it under 30 nodes for readability.`,
|
|
341
|
+
code: fileTree.slice(0, 4000),
|
|
342
|
+
context: ctx || undefined,
|
|
343
|
+
});
|
|
344
|
+
const diagramQuality = diagramResult.analysis?.score ?? Math.round(diagramResult.output.confidence * 100);
|
|
345
|
+
recordOutcome('diagram', 50, 2, 'documentation', diagramQuality);
|
|
346
|
+
const rawOutput = diagramResult.plan?.approach ?? diagramResult.output.recommendation ?? '';
|
|
347
|
+
// Extract Mermaid block — find first line matching a known diagram type keyword
|
|
348
|
+
const lines = rawOutput.split('\n');
|
|
349
|
+
const startIdx = lines.findIndex((l) => /^(flowchart|graph|classDiagram|sequenceDiagram|C4Context|erDiagram)/.test(l.trim()));
|
|
350
|
+
const mermaid = startIdx >= 0 ? lines.slice(startIdx).join('\n').trim() : rawOutput.trim();
|
|
351
|
+
return { content: [{ type: 'text', text: JSON.stringify({
|
|
352
|
+
diagram_type: diagramType,
|
|
353
|
+
mermaid,
|
|
354
|
+
render_hint: 'Paste into https://mermaid.live or a GitHub markdown code block with ```mermaid',
|
|
355
|
+
}, null, 2) }] };
|
|
356
|
+
},
|
|
357
|
+
veto_rca: async ({ args }) => {
|
|
358
|
+
const error = String(args?.error ?? '').trim();
|
|
359
|
+
const projectDir = args?.project_dir ? String(args.project_dir).trim() : '';
|
|
360
|
+
const fileHint = args?.file_hint ? String(args.file_hint).trim() : '';
|
|
361
|
+
if (!error)
|
|
362
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: 'error is required.' }) }], isError: true };
|
|
363
|
+
const userContext = buildContextString(projectDir || undefined);
|
|
364
|
+
let gitContext = '';
|
|
365
|
+
try {
|
|
366
|
+
const recent = execSync('git log --oneline -15', { cwd: projectDir || undefined, timeout: 4000, stdio: ['pipe', 'pipe', 'pipe'] }).toString();
|
|
367
|
+
gitContext = `Recent commits:\n${recent}`;
|
|
368
|
+
if (fileHint) {
|
|
369
|
+
const blame = execSync(`git log --oneline -10 -- "${fileHint}"`, { cwd: projectDir || undefined, timeout: 4000, stdio: ['pipe', 'pipe', 'pipe'] }).toString();
|
|
370
|
+
gitContext += `\nRecent changes to ${fileHint}:\n${blame}`;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
catch { /* not a git repo */ }
|
|
374
|
+
const result = await executeOne({
|
|
375
|
+
id: 'rca-1',
|
|
376
|
+
agent: 'debugger',
|
|
377
|
+
task: 'Perform a structured root-cause analysis. Identify: (1) the most likely root cause, (2) the probable introducing commit or change, (3) immediate fix steps, (4) prevention recommendations.',
|
|
378
|
+
code: error.slice(0, 6000),
|
|
379
|
+
context: [gitContext, userContext].filter(Boolean).join('\n') || undefined,
|
|
380
|
+
});
|
|
381
|
+
const quality = Math.round(result.output.confidence * 100);
|
|
382
|
+
recordOutcome('rca', 50, 2, 'debugger', quality);
|
|
383
|
+
const root_cause = result.plan?.approach?.slice(0, 200) ?? result.output.recommendation.slice(0, 200);
|
|
384
|
+
const fix_steps = result.plan?.steps?.slice(0, 5) ?? [];
|
|
385
|
+
const hypothesis = result.output.recommendation;
|
|
386
|
+
return { content: [{ type: 'text', text: JSON.stringify({
|
|
387
|
+
root_cause,
|
|
388
|
+
hypothesis,
|
|
389
|
+
suspect_commits: [],
|
|
390
|
+
fix_steps,
|
|
391
|
+
prevention: [],
|
|
392
|
+
confidence: quality,
|
|
393
|
+
}, null, 2) }] };
|
|
394
|
+
},
|
|
395
|
+
veto_release_notes: async ({ args }) => {
|
|
396
|
+
const projectDir = String(args?.project_dir ?? '').trim();
|
|
397
|
+
const audience = String(args?.audience ?? 'user') === 'developer' ? 'developer' : 'user';
|
|
398
|
+
if (!projectDir)
|
|
399
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: 'project_dir is required.' }) }], isError: true };
|
|
400
|
+
let fromRef = args?.from_ref ? String(args.from_ref) : '';
|
|
401
|
+
if (!fromRef) {
|
|
402
|
+
try {
|
|
403
|
+
fromRef = execSync('git describe --tags --abbrev=0', { cwd: projectDir, timeout: 3000, stdio: ['pipe', 'pipe', 'pipe'] }).toString().trim();
|
|
404
|
+
}
|
|
405
|
+
catch {
|
|
406
|
+
fromRef = '';
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
const logCmd = fromRef ? `git log ${fromRef}..HEAD --oneline --no-merges` : 'git log --oneline --no-merges -30';
|
|
410
|
+
let commits = '';
|
|
411
|
+
try {
|
|
412
|
+
commits = execSync(logCmd, { cwd: projectDir, timeout: 4000, stdio: ['pipe', 'pipe', 'pipe'] }).toString().trim();
|
|
413
|
+
}
|
|
414
|
+
catch {
|
|
415
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: 'Could not read git log. Ensure project_dir is a git repository.' }) }], isError: true };
|
|
416
|
+
}
|
|
417
|
+
if (!commits)
|
|
418
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: true, release_notes: 'No changes since last tag.', commits_processed: 0 }) }] };
|
|
419
|
+
const commitsCount = commits.split('\n').filter(Boolean).length;
|
|
420
|
+
const result = await executeOne({
|
|
421
|
+
id: 'relnotes-1',
|
|
422
|
+
agent: 'documentation',
|
|
423
|
+
task: `Generate ${audience === 'developer' ? 'developer-facing' : 'user-facing'} release notes from these git commits. Rewrite technical commit messages into clear benefit-focused language. Group by: New Features, Improvements, Bug Fixes, Other. Each line should be one sentence describing the user benefit.`,
|
|
424
|
+
code: commits.slice(0, 4000),
|
|
425
|
+
});
|
|
426
|
+
const release_notes = result.plan?.approach ?? result.output.recommendation;
|
|
427
|
+
return { content: [{ type: 'text', text: JSON.stringify({
|
|
428
|
+
release_notes,
|
|
429
|
+
from_ref: fromRef || 'HEAD~30',
|
|
430
|
+
commits_processed: commitsCount,
|
|
431
|
+
audience,
|
|
432
|
+
}, null, 2) }] };
|
|
433
|
+
},
|
|
434
|
+
veto_postmortem: async ({ args }) => {
|
|
435
|
+
const incident = String(args?.incident ?? '').trim();
|
|
436
|
+
const timeline = args?.timeline ? String(args.timeline).trim() : '';
|
|
437
|
+
const projectDir = args?.project_dir ? String(args.project_dir).trim() : '';
|
|
438
|
+
const service = args?.service ? String(args.service).trim() : '';
|
|
439
|
+
if (!incident)
|
|
440
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: 'incident is required.' }) }], isError: true };
|
|
441
|
+
let auditCtx = '';
|
|
442
|
+
let correlatedRedVerdicts = 0;
|
|
443
|
+
try {
|
|
444
|
+
const log = getAuditLog({ verdict: 'RED', limit: 5 });
|
|
445
|
+
if (log.length > 0) {
|
|
446
|
+
correlatedRedVerdicts = log.length;
|
|
447
|
+
auditCtx = `Past RED council verdicts:\n${log.map((e) => `- ${e.summary ?? ''}`).join('\n')}`;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
catch { /* ignore */ }
|
|
451
|
+
const context = [
|
|
452
|
+
timeline && `Timeline:\n${timeline}`,
|
|
453
|
+
service && `Service: ${service}`,
|
|
454
|
+
auditCtx || '',
|
|
455
|
+
].filter(Boolean).join('\n\n') || undefined;
|
|
456
|
+
const result = await executeOne({
|
|
457
|
+
id: 'pm-1',
|
|
458
|
+
agent: 'debugger',
|
|
459
|
+
task: 'Write a blameless postmortem. Include: (1) Incident summary (2) Root cause (five-whys analysis) (3) Impact (4) Timeline of detection/response/resolution (5) Action items with owner and deadline (6) What went well (7) Prevention measures. Use a constructive tone — blame systems not people.',
|
|
460
|
+
code: incident.slice(0, 4000),
|
|
461
|
+
context,
|
|
462
|
+
});
|
|
463
|
+
const postmortem = result.plan?.approach ?? result.output.recommendation;
|
|
464
|
+
const root_cause = result.output.recommendation.split(/[.!?]/)[0]?.trim() ?? '';
|
|
465
|
+
const action_items = result.plan?.steps?.slice(0, 10) ?? [];
|
|
466
|
+
return { content: [{ type: 'text', text: JSON.stringify({
|
|
467
|
+
postmortem,
|
|
468
|
+
root_cause,
|
|
469
|
+
action_items,
|
|
470
|
+
correlated_red_verdicts: correlatedRedVerdicts,
|
|
471
|
+
}, null, 2) }] };
|
|
472
|
+
},
|
|
473
|
+
veto_doc_gen: async ({ args }) => {
|
|
474
|
+
const filePath = String(args?.file_path ?? '').trim();
|
|
475
|
+
const styleArg = String(args?.style ?? 'auto').trim();
|
|
476
|
+
if (!filePath)
|
|
477
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: 'file_path is required.' }) }], isError: true };
|
|
478
|
+
let content = '';
|
|
479
|
+
try {
|
|
480
|
+
content = readFileSync(filePath, 'utf8');
|
|
481
|
+
}
|
|
482
|
+
catch (e) {
|
|
483
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: `Could not read file: ${e.message}` }) }], isError: true };
|
|
484
|
+
}
|
|
485
|
+
let detectedStyle = styleArg;
|
|
486
|
+
if (styleArg === 'auto') {
|
|
487
|
+
const ext = extname(filePath).toLowerCase();
|
|
488
|
+
if (ext === '.ts' || ext === '.tsx')
|
|
489
|
+
detectedStyle = 'tsdoc';
|
|
490
|
+
else if (ext === '.py')
|
|
491
|
+
detectedStyle = 'docstring';
|
|
492
|
+
else
|
|
493
|
+
detectedStyle = 'jsdoc';
|
|
494
|
+
}
|
|
495
|
+
const docGenResult = await executeOne({
|
|
496
|
+
id: 'docgen-1',
|
|
497
|
+
agent: 'documentation',
|
|
498
|
+
task: `Add ${detectedStyle} documentation comments to all public functions, classes, interfaces, and exported constants in this file. For each, add: (1) a one-line summary, (2) @param descriptions, (3) @returns description, (4) @throws if applicable. Return the COMPLETE file content with documentation added — do not truncate.`,
|
|
499
|
+
code: content.slice(0, 10000),
|
|
500
|
+
});
|
|
501
|
+
const docQuality = docGenResult.analysis?.score ?? Math.round(docGenResult.output.confidence * 100);
|
|
502
|
+
recordOutcome('doc-gen', 50, 2, 'documentation', docQuality);
|
|
503
|
+
const annotatedContent = docGenResult.plan?.approach ?? docGenResult.output.recommendation ?? '';
|
|
504
|
+
const symbolsDocumented = (annotatedContent.match(/@param\b/g) ?? []).length;
|
|
505
|
+
return { content: [{ type: 'text', text: JSON.stringify({
|
|
506
|
+
file_path: filePath,
|
|
507
|
+
style: detectedStyle,
|
|
508
|
+
annotated_content: annotatedContent,
|
|
509
|
+
symbols_documented: symbolsDocumented,
|
|
510
|
+
}, null, 2) }] };
|
|
511
|
+
},
|
|
512
|
+
veto_onboard: async ({ args }) => {
|
|
513
|
+
const projectDir = String(args?.project_dir ?? '').trim();
|
|
514
|
+
const role = args?.role ? String(args.role).trim() : '';
|
|
515
|
+
if (!projectDir)
|
|
516
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: 'project_dir is required.' }) }], isError: true };
|
|
517
|
+
let readme = '';
|
|
518
|
+
for (const name of ['README.md', 'readme.md', 'README.txt']) {
|
|
519
|
+
try {
|
|
520
|
+
readme = readFileSync(join(projectDir, name), 'utf8').slice(0, 3000);
|
|
521
|
+
break;
|
|
522
|
+
}
|
|
523
|
+
catch { /* skip */ }
|
|
524
|
+
}
|
|
525
|
+
const onboardResult = await executeOne({
|
|
526
|
+
id: 'onboard-1',
|
|
527
|
+
agent: 'documentation',
|
|
528
|
+
task: `Write a complete onboarding guide for a new ${role || 'fullstack'} developer joining this project. Include: (1) Setup steps (clone, install, env vars, first run), (2) Architecture overview (key directories and their purpose), (3) Key files to understand first, (4) How to run tests, (5) Development workflow, (6) First PR checklist (what to check before submitting). Be specific to this codebase.`,
|
|
529
|
+
context: [buildContextString(projectDir), readme ? `README:\n${readme}` : ''].filter(Boolean).join('\n\n') || undefined,
|
|
530
|
+
project_dir: projectDir,
|
|
531
|
+
});
|
|
532
|
+
const onboardQuality = onboardResult.analysis?.score ?? Math.round(onboardResult.output.confidence * 100);
|
|
533
|
+
recordOutcome('onboard', 50, 2, 'documentation', onboardQuality);
|
|
534
|
+
return { content: [{ type: 'text', text: JSON.stringify({
|
|
535
|
+
guide: onboardResult.plan?.approach ?? onboardResult.output.recommendation ?? '',
|
|
536
|
+
role: role || 'fullstack',
|
|
537
|
+
sections: ['Setup', 'Architecture', 'Key Files', 'Testing', 'Workflow', 'First PR'],
|
|
538
|
+
}, null, 2) }] };
|
|
539
|
+
},
|
|
540
|
+
};
|
|
541
|
+
//# sourceMappingURL=generators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../src/server/handlers/generators.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,yEAAyE;AACzE,gFAAgF;AAChF,+EAA+E;AAC/E,mFAAmF;AACnF,kDAAkD;AAElD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAI7D,MAAM,CAAC,MAAM,iBAAiB,GAAe;IAC3C,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACrC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAEvJ,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,QAAQ,CAAC,6DAA6D,EAAE;gBAC/E,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aACjE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;QAEhC,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACtD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,IAAI,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACzH,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;aACtC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;aAClE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;aAClB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAEjD,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;YACtD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBACpC,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBACzD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YAAC,CAAC;QACpD,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAE1B,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACtD,oBAAoB,EAAE,CAAC;4BACvB,UAAU,EAAE,cAAc;4BAC1B,UAAU,EAAE,EAAE;4BACd,OAAO,EAAE,8DAA8D;yBACxE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,YAAY;aAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,kBAAkB,CAAC,CAAC,OAAO,EAAE,CAAC;aAClE,IAAI,CAAC,MAAM,CAAC;aACZ,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAElB,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC;YAClC,EAAE,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;YACxB,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,uTAAuT;YAC7T,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;QAEH,aAAa,CAAC,eAAe,EAAE,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;QAEtG,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAC3C,IAAI,SAOF,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,CAAS,EAAE,EAAE;gBAChD,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;gBACvD,OAAO;oBACL,IAAI,EAAE,WAAW,CAAC,IAAI;oBACtB,aAAa,EAAE,WAAW,EAAE,OAAO,IAAI,CAAC;oBACxC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;oBAC3G,SAAS,EAAE,YAAY;oBACvB,eAAe,EAAE,UAAU;oBAC3B,eAAe,EAAE,CAAC;oBAClB,WAAW,EAAE,IAAI;iBAClB,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,aAAa,EAAE,CAAC,CAAC,OAAO;gBACxB,QAAQ,EAAE,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;gBACrE,SAAS,EAAE,YAAY;gBACvB,eAAe,EAAE,UAAU;gBAC3B,eAAe,EAAE,CAAC;aACnB,CAAC,CAAC,CAAC;QACN,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACtD,oBAAoB,EAAE,YAAY,CAAC,MAAM;wBACzC,UAAU,EAAE,cAAc;wBAC1B,UAAU,EAAE,SAAS;wBACrB,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,IAAI,UAAU,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;qBACtF,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QACrB,MAAM,IAAI,GAAW,MAAM,CAAC,IAAI,EAAE,IAAI,IAAY,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,MAAM,OAAO,GAAQ,MAAM,CAAC,IAAI,EAAE,OAAO,IAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3E,MAAM,WAAW,GAAI,MAAM,CAAC,IAAI,EAAE,WAAW,IAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,MAAM,SAAS,GAAM,IAAI,EAAE,SAAS,CAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAI,CAAC,CAAC,SAAS,CAAC;QAChF,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChF,MAAM,UAAU,GAAK,IAAI,EAAE,WAAW,CAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAE,CAAC,CAAC,SAAS,CAAC;QAChF,MAAM,SAAS,GAAM,IAAI,EAAE,UAAU,CAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAG,CAAC,CAAC,SAAS,CAAC;QAEhF,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;YACtC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3J,CAAC;QAED,MAAM,SAAS,GAA2B;YACxC,KAAK,EAAK,UAAU;YACpB,MAAM,EAAI,4BAA4B;YACtC,GAAG,EAAO,UAAU;YACpB,QAAQ,EAAE,UAAU;SACrB,CAAC;QACF,MAAM,SAAS,GAAI,SAAS,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC;QACxD,MAAM,KAAK,GAAQ,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,cAAc,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAE/D,MAAM,UAAU,GAAG;YACjB,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YACxB,EAAE;YACF,SAAS,KAAK,EAAE;YAChB,WAAW,SAAS,EAAE;YACtB,oBAAoB,OAAO,GAAG,UAAU,EAAE;YAC1C,EAAE;YACF,YAAY;YACZ,EAAE;YACF,IAAI;YACJ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,EAAE;YACF,aAAa;YACb,EAAE;YACF,WAAW;YACX,EAAE;YACF,iBAAiB;YACjB,EAAE;YACF,YAAY,IAAI,eAAe;SAChC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,WAAW,GAAkB,IAAI,CAAC;QACtC,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,GAAW,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjF,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YAC3D,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;gBACxC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC,CAAC,iCAAiC,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACnD,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,SAAS,IAAI,IAAI,KAAK,CAAC,CAAC;YAC5D,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,aAAa,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACtD,OAAO,EAAI,IAAI;wBACf,GAAG,EAAQ,UAAU;wBACrB,SAAS,EAAE,WAAW;wBACtB,MAAM,EAAK,SAAS;qBACrB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,cAAc,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAG,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;QAE9C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACvI,CAAC;QAED,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAClC,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,oBAAoB;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QACjD,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAA4B,CAAC;gBACjF,YAAY,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;gBAC5D,IAAI,GAAG,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACnD,YAAY,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjF,CAAC;gBACD,IAAI,GAAG,CAAC,YAAY,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;oBAC7D,YAAY,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAsB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACxG,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;QACvC,CAAC;QAED,0BAA0B;QAC1B,KAAK,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC1C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACxD,MAAM,IAAI,GAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/E,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACpB,YAAY,CAAC,IAAI,CAAC,sBAAsB,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC1E,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,KAAK,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACvD,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAAC,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;QACnH,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;YAC/C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAAC,YAAY,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC7E,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,EAAE,CAAC;YAC9D,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,YAAY,CAAC,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;QAC3F,CAAC;QAED,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,+BAA+B,CAAC;QAClF,MAAM,WAAW,GAAM,kBAAkB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QACtE,MAAM,SAAS,GAAQ,mQAAmQ,CAAC;QAC3R,MAAM,SAAS,GAAQ,MAAM,UAAU,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,IAAI,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;QAE7J,MAAM,SAAS,GAAI,SAAS,CAAC,MAAM,CAAC,cAAc,IAAI,SAAS,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;QACrF,MAAM,QAAQ,GAAK,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,yCAAyC,CAAC;QAEzG,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,UAAU,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YACpE,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACtD,WAAW,EAAE,UAAU;wBACvB,WAAW,EAAE,SAAS;wBACtB,OAAO;wBACP,QAAQ,EAAK,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;qBACpC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,qBAAqB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACxC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,MAAM,IAAI,GAAQ,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE7D,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAEhJ,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE9E,yBAAyB;QACzB,MAAM,MAAM,GAAmE,EAAE,CAAC;QAClF,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5G,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,yEAAyE,EAAE,CAAC,CAAC;QAC5I,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9H,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,oEAAoE,EAAE,CAAC,CAAC;QAChJ,CAAC;QACD,IAAI,6DAA6D,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/E,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,0EAA0E,EAAE,CAAC,CAAC;QAChJ,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,4EAA4E,EAAE,CAAC,CAAC;QACnJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAC9B,EAAE,EAAO,oBAAoB;YAC7B,KAAK,EAAI,eAAkC;YAC3C,IAAI,EAAK,kVAAkV;YAC3V,IAAI,EAAK,MAAM;YACf,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;SAC5C,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;QACrF,aAAa,CAAC,kBAAkB,EAAE,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;QAEnE,MAAM,SAAS,GAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;QACrE,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;QACvE,MAAM,QAAQ,GAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC;QACpE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,SAAS,GAAG,EAAE,GAAG,WAAW,GAAG,EAAE,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;QAEjG,MAAM,gBAAgB,GAAM,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;QACxF,MAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAE7F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACtD,KAAK;wBACL,MAAM;wBACN,gBAAgB;wBAChB,mBAAmB;qBACpB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,gBAAgB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACnC,MAAM,UAAU,GAAS,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAClD,MAAM,WAAW,GAAQ,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACnD,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACxD,MAAM,YAAY,GAAO,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpF,MAAM,SAAS,GAAU,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,SAAoF,CAAC,CAAC,CAAC,EAAE,CAAC;QAE1J,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC3D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,6DAA6D,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1K,CAAC;QAED,kCAAkC;QAClC,MAAM,WAAW,GAAU,UAAU,GAAG,GAAG,CAAC;QAC5C,MAAM,aAAa,GAAQ,WAAW,GAAG,EAAE,GAAG,EAAE,CAAC;QACjD,MAAM,kBAAkB,GAAG,aAAa,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;QAC7D,MAAM,eAAe,GAAM,gBAAgB,CAAC;QAC5C,MAAM,gBAAgB,GAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,GAAG,eAAe,CAAC,CAAC;QAC7E,MAAM,YAAY,GAAS,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,gBAAgB,GAAG,kBAAkB,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxH,MAAM,WAAW,GAAkB,eAAe,GAAG,CAAC,IAAI,gBAAgB,GAAG,CAAC;YAC5E,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,gBAAgB,GAAG,eAAe,CAAC,GAAG,WAAW,GAAG,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAClH,CAAC,CAAC,eAAe,IAAI,kBAAkB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,MAAM,MAAM,GAAG,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;QAE3H,uCAAuC;QACvC,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;YAC1C,CAAC,CAAC,qBAAqB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,gBAAgB,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACpH,CAAC,CAAC,4BAA4B,CAAC;QAEjC,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC;YACjC,EAAE,EAAO,eAAe;YACxB,KAAK,EAAI,aAAgC;YACzC,IAAI,EAAK,0QAA0Q;YACnR,OAAO,EAAE,YAAY,YAAY,IAAI,SAAS,UAAU,UAAU,cAAc,WAAW,4BAA4B,YAAY,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,MAAM,KAAK,eAAe,EAAE;SACnN,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;QAE1F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACtD,cAAc,EAAQ,UAAU;wBAChC,WAAW;wBACX,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC,GAAG,EAAE;wBAC9D,gBAAgB,EAAM,eAAe;wBACrC,iBAAiB,EAAK,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,GAAG,EAAE;wBAC5D,aAAa,EAAS,YAAY;wBAClC,MAAM;wBACN,oBAAoB,EAAE,WAAW;wBACjC,eAAe;wBACf,kBAAkB,EAAI,YAAY,GAAG,EAAE;qBACxC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,YAAY,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAC/B,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,YAAY,IAAI,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QACrE,MAAM,KAAK,GAAS,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEjE,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAEvJ,MAAM,GAAG,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAE5C,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,QAAQ,GAAG,QAAQ,CAAC,mDAAmD,EAAE;gBACvE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aACjE,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/H,CAAC;QAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;QAEhC,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC;YACrC,EAAE,EAAO,WAAW;YACpB,KAAK,EAAI,eAAkC;YAC3C,IAAI,EAAK,cAAc,WAAW,4LAA4L,KAAK,IAAI,0DAA0D,2CAA2C;YAC5U,IAAI,EAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;YAChC,OAAO,EAAE,GAAG,IAAI,SAAS;SAC1B,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;QAC1G,aAAa,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;QAEjE,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,IAAI,aAAa,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;QAE5F,gFAAgF;QAChF,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,qEAAqE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtI,MAAM,OAAO,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAE3F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACtD,YAAY,EAAE,WAAW;wBACzB,OAAO;wBACP,WAAW,EAAE,iFAAiF;qBAC/F,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAQ,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,QAAQ,GAAK,IAAI,EAAE,SAAS,CAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAG,CAAC,CAAC,EAAE,CAAC;QAE5E,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAE3I,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC;QAEhE,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,uBAAuB,EAAE,EAAE,GAAG,EAAE,UAAU,IAAI,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC9I,UAAU,GAAG,oBAAoB,MAAM,EAAE,CAAC;YAC1C,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,QAAQ,CAAC,6BAA6B,QAAQ,GAAG,EAAE,EAAE,GAAG,EAAE,UAAU,IAAI,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC9J,UAAU,IAAI,uBAAuB,QAAQ,MAAM,KAAK,EAAE,CAAC;YAC7D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;QAEhC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAC9B,EAAE,EAAO,OAAO;YAChB,KAAK,EAAI,UAA6B;YACtC,IAAI,EAAK,6LAA6L;YACtM,IAAI,EAAK,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;YAC7B,OAAO,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS;SAC3E,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;QAC3D,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAEjD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACtG,MAAM,SAAS,GAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;QAEhD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACtD,UAAU;wBACV,UAAU;wBACV,eAAe,EAAE,EAAE;wBACnB,SAAS;wBACT,UAAU,EAAG,EAAE;wBACf,UAAU,EAAG,OAAO;qBACrB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACrC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,QAAQ,GAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,MAAM,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;QAE3F,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAEtJ,IAAI,OAAO,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC;gBAAC,OAAO,GAAG,QAAQ,CAAC,gCAAgC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YAAC,CAAC;YACpJ,MAAM,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;YAAC,CAAC;QACzB,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,OAAO,8BAA8B,CAAC,CAAC,CAAC,mCAAmC,CAAC;QAChH,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC;YAAC,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAAC,CAAC;QAC1H,MAAM,CAAC;YAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iEAAiE,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAAC,CAAC;QAEtL,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAEjK,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAEhE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAC9B,EAAE,EAAK,YAAY;YACnB,KAAK,EAAE,eAAkC;YACzC,IAAI,EAAG,YAAY,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,aAAa,qOAAqO;YACrT,IAAI,EAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;SAC9B,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;QAE5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACtD,aAAa;wBACb,QAAQ,EAAW,OAAO,IAAI,SAAS;wBACvC,iBAAiB,EAAE,YAAY;wBAC/B,QAAQ;qBACT,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,eAAe,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAK,IAAI,EAAE,QAAQ,CAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAG,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,UAAU,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,OAAO,GAAM,IAAI,EAAE,OAAO,CAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAK,CAAC,CAAC,EAAE,CAAC;QAE5E,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAEjJ,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,qBAAqB,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACtD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnB,qBAAqB,GAAG,GAAG,CAAC,MAAM,CAAC;gBACnC,QAAQ,GAAG,+BAA+B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAuB,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAExB,MAAM,OAAO,GAAG;YACd,QAAQ,IAAM,cAAc,QAAQ,EAAE;YACtC,OAAO,IAAO,YAAY,OAAO,EAAE;YACnC,QAAQ,IAAM,EAAE;SACjB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;QAE5C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAC9B,EAAE,EAAO,MAAM;YACf,KAAK,EAAI,UAA6B;YACtC,IAAI,EAAK,mSAAmS;YAC5S,IAAI,EAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;YAChC,OAAO;SACR,CAAC,CAAC;QAEH,MAAM,UAAU,GAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;QAC1E,MAAM,UAAU,GAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACjF,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QAE5D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACtD,UAAU;wBACV,UAAU;wBACV,YAAY;wBACZ,uBAAuB,EAAE,qBAAqB;qBAC/C,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,YAAY,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAEtD,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAElJ,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,wBAAyB,CAAW,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3J,CAAC;QAED,IAAI,aAAa,GAAG,QAAQ,CAAC;QAC7B,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5C,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM;gBAAE,aAAa,GAAG,OAAO,CAAC;iBACxD,IAAI,GAAG,KAAK,KAAK;gBAAE,aAAa,GAAG,WAAW,CAAC;;gBAC/C,aAAa,GAAG,OAAO,CAAC;QAC/B,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC;YACpC,EAAE,EAAK,UAAU;YACjB,KAAK,EAAE,eAAkC;YACzC,IAAI,EAAG,OAAO,aAAa,8SAA8S;YACzU,IAAI,EAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SAC/B,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;QACpG,aAAa,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;QAE7D,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,EAAE,QAAQ,IAAI,YAAY,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;QACjG,MAAM,iBAAiB,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAE7E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACtD,SAAS,EAAW,QAAQ;wBAC5B,KAAK,EAAe,aAAa;wBACjC,iBAAiB,EAAG,gBAAgB;wBACpC,kBAAkB,EAAE,iBAAiB;qBACtC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,YAAY,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAS,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE9D,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAEtJ,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC;gBAAC,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAAC,MAAM;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QAC3G,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC;YACrC,EAAE,EAAW,WAAW;YACxB,KAAK,EAAQ,eAAkC;YAC/C,IAAI,EAAS,+CAA+C,IAAI,IAAI,WAAW,4UAA4U;YAC3Z,OAAO,EAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,SAAS;YAC3H,WAAW,EAAE,UAAU;SACxB,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;QAC1G,aAAa,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;QAEjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACtD,KAAK,EAAK,aAAa,CAAC,IAAI,EAAE,QAAQ,IAAI,aAAa,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE;wBACnF,IAAI,EAAM,IAAI,IAAI,WAAW;wBAC7B,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;qBACpF,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACnB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/git.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,eAAO,MAAM,WAAW,EAAE,UAkOzB,CAAC"}
|