adaptive-memory-multi-model-router 1.9.4 → 2.0.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/.github/ISSUE_TEMPLATE/bug_report.md +50 -0
- package/.github/ISSUE_TEMPLATE/config.yml +11 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +37 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +44 -0
- package/.github/workflows/npm-stats-validation.yml +152 -0
- package/.github/workflows/pages.yml +37 -0
- package/CHANGELOG.md +122 -0
- package/CODE_OF_CONDUCT.md +128 -0
- package/CONTRIBUTING.md +110 -0
- package/LAUNCH-PAIN-DRIVEN.md +339 -0
- package/LAUNCH.md +575 -0
- package/POPULARITY_BOOSTERS.md +285 -0
- package/README.md +231 -300
- package/SECURITY.md +69 -0
- package/articles/CONTENT_STRUCTURE.md +292 -0
- package/articles/DEVTO_COST_GUIDE.md +473 -0
- package/articles/DEVTO_FINAL.md +416 -0
- package/articles/DEVTO_MULTI_PROVIDER.md +542 -0
- package/articles/HN_10X_BETTER.md +430 -0
- package/articles/HN_CHINESE_STYLE.md +308 -0
- package/articles/HN_FINAL.md +199 -0
- package/articles/HN_POSTED_VERSION.md +56 -0
- package/articles/HN_RESEARCH.md +364 -0
- package/articles/PAIN-DRIVEN-devto-v2.md +308 -0
- package/articles/PAIN-DRIVEN-devto-v3.md +268 -0
- package/articles/PAIN-DRIVEN-devto.md +242 -0
- package/articles/PAIN-DRIVEN-hackernews-v2.md +138 -0
- package/articles/PAIN-DRIVEN-hackernews-v3.md +151 -0
- package/articles/PAIN-DRIVEN-hackernews.md +131 -0
- package/articles/PAIN-DRIVEN-reddit-v2.md +301 -0
- package/articles/PAIN-DRIVEN-reddit-v3.md +236 -0
- package/articles/PAIN-DRIVEN-reddit.md +218 -0
- package/articles/PAIN-DRIVEN-twitter-v2.md +110 -0
- package/articles/PAIN-DRIVEN-twitter-v3.md +121 -0
- package/articles/PAIN-DRIVEN-twitter.md +120 -0
- package/articles/PORTKEY_VS_A3M.md +147 -0
- package/articles/REDDIT_FINAL.md +232 -0
- package/articles/TWITTER_FINAL.md +167 -0
- package/articles/WHY_10X_BETTER.md +261 -0
- package/articles/WHY_CHINESE_STYLE_BETTER.md +323 -0
- package/articles/ai-discoverability-llm-routing.md +210 -0
- package/articles/devto-llm-routing.md +109 -0
- package/articles/hackernews-show-hn.md +65 -0
- package/articles/hashnode-llm-cost-optimization.md +125 -0
- package/articles/medium-building-llm-router.md +205 -0
- package/articles/reddit-ml.md +86 -0
- package/articles/twitter-thread-cost-savings.md +98 -0
- package/articles/youtube-tutorial-script.md +262 -0
- package/assets/banner.svg +109 -0
- package/assets/logo.svg +68 -0
- package/assets/social-preview.svg +64 -0
- package/demo/demo-script.md +53 -0
- package/dist/analytics/costAnalytics.d.ts +77 -0
- package/dist/analytics/costAnalytics.d.ts.map +1 -0
- package/dist/analytics/costAnalytics.js +219 -0
- package/dist/analytics/costAnalytics.js.map +1 -0
- package/dist/cache/semanticCache.d.ts +62 -0
- package/dist/cache/semanticCache.d.ts.map +1 -0
- package/dist/cache/semanticCache.js +176 -0
- package/dist/cache/semanticCache.js.map +1 -0
- package/dist/cli.js +35 -0
- package/dist/geo/generativeEngineOptimization.js +321 -0
- package/dist/geo/geoRouter.js +387 -0
- package/dist/index.d.ts +4 -723
- package/dist/index.js +11 -344
- package/dist/index.js.map +1 -1
- package/dist/integrations/langchainAdapter.d.ts +146 -0
- package/dist/integrations/langchainAdapter.d.ts.map +1 -0
- package/dist/integrations/langchainAdapter.js +731 -0
- package/dist/integrations/langchainAdapter.js.map +1 -0
- package/dist/integrations/oauth.d.ts +69 -0
- package/dist/integrations/oauth.d.ts.map +1 -0
- package/dist/integrations/oauth.js +225 -21
- package/dist/integrations/oauth.js.map +1 -0
- package/dist/memory/autoFetch.d.ts +39 -0
- package/dist/memory/autoFetch.d.ts.map +1 -0
- package/dist/memory/autoFetch.js +80 -88
- package/dist/memory/autoFetch.js.map +1 -0
- package/dist/memory/memoryTree.d.ts +76 -0
- package/dist/memory/memoryTree.d.ts.map +1 -0
- package/dist/memory/memoryTree.js +185 -130
- package/dist/memory/memoryTree.js.map +1 -0
- package/dist/memory/obsidianVault.d.ts +71 -0
- package/dist/memory/obsidianVault.d.ts.map +1 -0
- package/dist/memory/obsidianVault.js +207 -22
- package/dist/memory/obsidianVault.js.map +1 -0
- package/dist/providers/providerConfig.d.ts +49 -0
- package/dist/providers/providerConfig.d.ts.map +1 -0
- package/dist/providers/providerConfig.js +806 -401
- package/dist/providers/providerConfig.js.map +1 -0
- package/dist/security/guardrails.d.ts +76 -0
- package/dist/security/guardrails.d.ts.map +1 -0
- package/dist/security/guardrails.js +479 -0
- package/dist/security/guardrails.js.map +1 -0
- package/dist/security/inputValidation.js +351 -0
- package/dist/server/dashboard.d.ts +58 -0
- package/dist/server/dashboard.d.ts.map +1 -0
- package/dist/server/dashboard.js +553 -0
- package/dist/server/dashboard.js.map +1 -0
- package/dist/server/modelMapper.d.ts +43 -0
- package/dist/server/modelMapper.d.ts.map +1 -0
- package/dist/server/modelMapper.js +154 -0
- package/dist/server/modelMapper.js.map +1 -0
- package/dist/server/proxyServer.d.ts +41 -0
- package/dist/server/proxyServer.d.ts.map +1 -0
- package/dist/server/proxyServer.js +932 -0
- package/dist/server/proxyServer.js.map +1 -0
- package/dist/skills/__tests__/skill_manager.test.d.ts +2 -0
- package/dist/skills/__tests__/skill_manager.test.d.ts.map +1 -0
- package/dist/skills/__tests__/skill_manager.test.js +268 -0
- package/dist/skills/__tests__/skill_manager.test.js.map +1 -0
- package/docs/geo/GENERATIVE_ENGINE_OPTIMIZATION.md +232 -0
- package/docs-site/index.html +347 -0
- package/llms.txt +138 -0
- package/package.json +72 -7
- package/playground/README.md +51 -0
- package/playground/codesandbox.json +12 -0
- package/playground/index.js +39 -0
- package/scripts/update-npm-badges.js +158 -0
- package/src/analytics/costAnalytics.ts +304 -0
- package/src/cache/semanticCache.ts +221 -0
- package/src/index.ts +6 -0
- package/src/integrations/langchainAdapter.ts +955 -0
- package/src/providers/providerConfig.ts +923 -0
- package/src/security/guardrails.ts +585 -0
- package/src/server/dashboard.ts +610 -0
- package/src/server/modelMapper.ts +182 -0
- package/src/server/proxyServer.ts +1105 -0
- package/src/types/langchain.d.ts +83 -0
- package/tsconfig.build.json +20 -0
|
@@ -1,26 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
|
-
* Obsidian Vault Integration
|
|
3
|
+
* Obsidian Vault Integration
|
|
4
|
+
*
|
|
5
|
+
* Stores routing decisions and context as markdown files
|
|
6
|
+
* compatible with Obsidian note-taking app.
|
|
3
7
|
*/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.ObsidianVault = void 0;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
7
45
|
class ObsidianVault {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
46
|
+
config;
|
|
47
|
+
decisions;
|
|
48
|
+
constructor(config = {}) {
|
|
49
|
+
this.config = {
|
|
50
|
+
path: config.path || './vault',
|
|
51
|
+
autoSave: config.autoSave !== false,
|
|
52
|
+
maxFileAge: config.maxFileAge || 30
|
|
53
|
+
};
|
|
54
|
+
this.decisions = [];
|
|
55
|
+
this.ensureDirectory();
|
|
56
|
+
}
|
|
57
|
+
ensureDirectory() {
|
|
58
|
+
if (!fs.existsSync(this.config.path)) {
|
|
59
|
+
fs.mkdirSync(this.config.path, { recursive: true });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Save a routing decision
|
|
64
|
+
*/
|
|
65
|
+
async saveDecision(decision) {
|
|
66
|
+
this.decisions.push(decision);
|
|
67
|
+
const filename = `routing-decision-${decision.id}.md`;
|
|
68
|
+
const filepath = path.join(this.config.path, filename);
|
|
69
|
+
const content = this.formatDecisionAsMarkdown(decision);
|
|
70
|
+
fs.writeFileSync(filepath, content, 'utf-8');
|
|
71
|
+
// Update index
|
|
72
|
+
await this.updateIndex();
|
|
73
|
+
return filepath;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Format decision as markdown
|
|
77
|
+
*/
|
|
78
|
+
formatDecisionAsMarkdown(decision) {
|
|
79
|
+
const date = new Date(decision.timestamp).toISOString();
|
|
80
|
+
return `# Routing Decision ${decision.id}
|
|
81
|
+
|
|
82
|
+
**Date:** ${date}
|
|
83
|
+
**Prompt:** ${this.escapeMarkdown(decision.prompt.substring(0, 200))}
|
|
84
|
+
|
|
85
|
+
## Decision
|
|
86
|
+
|
|
87
|
+
| Field | Value |
|
|
88
|
+
|-------|-------|
|
|
89
|
+
| Provider | ${decision.selectedProvider} |
|
|
90
|
+
| Model | ${decision.selectedModel} |
|
|
91
|
+
| Reasoning | ${this.escapeMarkdown(decision.reasoning)} |
|
|
92
|
+
| Cost | $${decision.cost.toFixed(4)} |
|
|
93
|
+
| Latency | ${decision.latency}ms |
|
|
25
94
|
|
|
26
|
-
|
|
95
|
+
## Context
|
|
96
|
+
|
|
97
|
+
\`\`\`json
|
|
98
|
+
${JSON.stringify(decision.context, null, 2)}
|
|
99
|
+
\`\`\`
|
|
100
|
+
|
|
101
|
+
## Prompt (Full)
|
|
102
|
+
|
|
103
|
+
${decision.prompt}
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
*Generated by A3M Router*
|
|
107
|
+
`;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Escape markdown special characters
|
|
111
|
+
*/
|
|
112
|
+
escapeMarkdown(text) {
|
|
113
|
+
return text
|
|
114
|
+
.replace(/\*/g, '\\*')
|
|
115
|
+
.replace(/#/g, '\\#')
|
|
116
|
+
.replace(/\|/g, '\\|')
|
|
117
|
+
.replace(/`/g, '\\`');
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Update the vault index
|
|
121
|
+
*/
|
|
122
|
+
async updateIndex() {
|
|
123
|
+
const indexPath = path.join(this.config.path, 'routing-index.md');
|
|
124
|
+
const lines = [
|
|
125
|
+
'# Routing Decisions Index',
|
|
126
|
+
'',
|
|
127
|
+
`Last updated: ${new Date().toISOString()}`,
|
|
128
|
+
'',
|
|
129
|
+
`Total decisions: ${this.decisions.length}`,
|
|
130
|
+
'',
|
|
131
|
+
'## Recent Decisions',
|
|
132
|
+
''
|
|
133
|
+
];
|
|
134
|
+
for (const decision of this.decisions.slice(-20).reverse()) {
|
|
135
|
+
const date = new Date(decision.timestamp).toLocaleDateString();
|
|
136
|
+
lines.push(`- [${decision.id}](./routing-decision-${decision.id}.md) - ${date} - ${decision.selectedProvider}/${decision.selectedModel}`);
|
|
137
|
+
}
|
|
138
|
+
fs.writeFileSync(indexPath, lines.join('\n'), 'utf-8');
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get recent decisions
|
|
142
|
+
*/
|
|
143
|
+
getRecentDecisions(count = 10) {
|
|
144
|
+
return this.decisions.slice(-count).reverse();
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Search decisions
|
|
148
|
+
*/
|
|
149
|
+
searchDecisions(query) {
|
|
150
|
+
const queryLower = query.toLowerCase();
|
|
151
|
+
return this.decisions.filter(d => d.prompt.toLowerCase().includes(queryLower) ||
|
|
152
|
+
d.selectedProvider.toLowerCase().includes(queryLower) ||
|
|
153
|
+
d.selectedModel.toLowerCase().includes(queryLower));
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Export all decisions
|
|
157
|
+
*/
|
|
158
|
+
async exportAll(filepath) {
|
|
159
|
+
const content = this.decisions.map(d => this.formatDecisionAsMarkdown(d)).join('\n\n---\n\n');
|
|
160
|
+
fs.writeFileSync(filepath, content, 'utf-8');
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get vault statistics
|
|
164
|
+
*/
|
|
165
|
+
getStats() {
|
|
166
|
+
return {
|
|
167
|
+
totalDecisions: this.decisions.length,
|
|
168
|
+
vaultPath: this.config.path,
|
|
169
|
+
fileCount: fs.readdirSync(this.config.path).filter(f => f.endsWith('.md')).length,
|
|
170
|
+
totalSize: this.getDirectorySize(this.config.path)
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
getDirectorySize(dir) {
|
|
174
|
+
let size = 0;
|
|
175
|
+
const files = fs.readdirSync(dir);
|
|
176
|
+
for (const file of files) {
|
|
177
|
+
const filepath = path.join(dir, file);
|
|
178
|
+
const stat = fs.statSync(filepath);
|
|
179
|
+
if (stat.isDirectory()) {
|
|
180
|
+
size += this.getDirectorySize(filepath);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
size += stat.size;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return size;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Clean old files
|
|
190
|
+
*/
|
|
191
|
+
async cleanOldFiles() {
|
|
192
|
+
const maxAge = this.config.maxFileAge * 24 * 60 * 60 * 1000;
|
|
193
|
+
const now = Date.now();
|
|
194
|
+
const files = fs.readdirSync(this.config.path);
|
|
195
|
+
let cleaned = 0;
|
|
196
|
+
for (const file of files) {
|
|
197
|
+
if (!file.endsWith('.md') || file === 'routing-index.md')
|
|
198
|
+
continue;
|
|
199
|
+
const filepath = path.join(this.config.path, file);
|
|
200
|
+
const stat = fs.statSync(filepath);
|
|
201
|
+
if (now - stat.mtimeMs > maxAge) {
|
|
202
|
+
fs.unlinkSync(filepath);
|
|
203
|
+
cleaned++;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return cleaned;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
exports.ObsidianVault = ObsidianVault;
|
|
210
|
+
exports.default = ObsidianVault;
|
|
211
|
+
//# sourceMappingURL=obsidianVault.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obsidianVault.js","sourceRoot":"","sources":["../../src/memory/obsidianVault.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A3M Router - Generic Provider Configuration System
|
|
3
|
+
*
|
|
4
|
+
* Users can configure their available LLM providers via:
|
|
5
|
+
* 1. Environment variables (*_API_KEY patterns)
|
|
6
|
+
* 2. Config file at ~/.config/a3m-router/providers.json
|
|
7
|
+
* 3. Runtime registration via registerProvider()
|
|
8
|
+
*
|
|
9
|
+
* 40+ providers across free, cheap, mid-tier, premium, and enterprise tiers.
|
|
10
|
+
*/
|
|
11
|
+
export type ProviderTier = 'free' | 'cheap' | 'mid' | 'premium' | 'enterprise';
|
|
12
|
+
export type ProviderFormat = 'openai' | 'anthropic' | 'google' | 'cohere' | 'aws-bedrock' | 'google-vertex';
|
|
13
|
+
export type ProviderType = 'api' | 'cli' | 'local';
|
|
14
|
+
export interface ProviderCost {
|
|
15
|
+
input: number;
|
|
16
|
+
output: number;
|
|
17
|
+
}
|
|
18
|
+
export interface ProviderDefinition {
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
baseUrl: string;
|
|
22
|
+
apiKeyEnv: string;
|
|
23
|
+
models: string[];
|
|
24
|
+
costPerK: ProviderCost;
|
|
25
|
+
tier: ProviderTier;
|
|
26
|
+
format: ProviderFormat;
|
|
27
|
+
type: ProviderType;
|
|
28
|
+
priority: number;
|
|
29
|
+
maxTokens: number;
|
|
30
|
+
cliCommand?: string;
|
|
31
|
+
apiKey?: string | null;
|
|
32
|
+
}
|
|
33
|
+
export declare const DEFAULT_PROVIDERS: Record<string, ProviderDefinition>;
|
|
34
|
+
export declare function loadConfig(configPath?: string): Record<string, ProviderDefinition>;
|
|
35
|
+
export declare function getAvailableProviders(): Record<string, ProviderDefinition>;
|
|
36
|
+
export declare function registerProvider(id: string, config: Partial<ProviderDefinition>): ProviderDefinition;
|
|
37
|
+
export declare function deregisterProvider(id: string): void;
|
|
38
|
+
export declare function updateProvider(id: string, updates: Partial<ProviderDefinition>): ProviderDefinition | null;
|
|
39
|
+
export declare function healthCheck(providerId: string): Promise<{
|
|
40
|
+
healthy: boolean;
|
|
41
|
+
error?: string;
|
|
42
|
+
latency?: number;
|
|
43
|
+
model?: string;
|
|
44
|
+
type?: string;
|
|
45
|
+
}>;
|
|
46
|
+
export declare function checkAllProviders(): Promise<Record<string, any>>;
|
|
47
|
+
export declare function findCheapestAvailableProvider(model?: string): ProviderDefinition | null;
|
|
48
|
+
export declare function findFastestAvailableProvider(): ProviderDefinition | null;
|
|
49
|
+
export declare function saveConfig(configPath?: string): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerConfig.d.ts","sourceRoot":"","sources":["../../src/providers/providerConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,YAAY,CAAC;AAC/E,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,eAAe,CAAC;AAC5G,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAMD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAonBhE,CAAC;AAaF,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CA8DlF;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAoB1E;AAMD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,CAgBpG;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,GAAG,IAAI,CAM1G;AAMD,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7D,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,CAmDD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAStE;AAED,wBAAgB,6BAA6B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CASvF;AAED,wBAAgB,4BAA4B,IAAI,kBAAkB,GAAG,IAAI,CAIxE;AAMD,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAmBtD"}
|