@claude-flow/plugin-legal-contracts 3.0.0-alpha.1
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 -0
- package/dist/bridges/attention-bridge.d.ts +83 -0
- package/dist/bridges/attention-bridge.d.ts.map +1 -0
- package/dist/bridges/attention-bridge.js +348 -0
- package/dist/bridges/attention-bridge.js.map +1 -0
- package/dist/bridges/dag-bridge.d.ts +75 -0
- package/dist/bridges/dag-bridge.d.ts.map +1 -0
- package/dist/bridges/dag-bridge.js +423 -0
- package/dist/bridges/dag-bridge.js.map +1 -0
- package/dist/bridges/index.d.ts +8 -0
- package/dist/bridges/index.d.ts.map +1 -0
- package/dist/bridges/index.js +8 -0
- package/dist/bridges/index.js.map +1 -0
- package/dist/index.d.ts +107 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +149 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-tools.d.ts +93 -0
- package/dist/mcp-tools.d.ts.map +1 -0
- package/dist/mcp-tools.js +966 -0
- package/dist/mcp-tools.js.map +1 -0
- package/dist/types.d.ts +840 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +272 -0
- package/dist/types.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flash Attention Bridge for Legal Contract Analysis
|
|
3
|
+
*
|
|
4
|
+
* Provides cross-attention computation for clause alignment and similarity
|
|
5
|
+
* using ruvector-attention-wasm for high-performance attention operations.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Cross-attention for contract comparison
|
|
9
|
+
* - Clause alignment between documents
|
|
10
|
+
* - Semantic similarity scoring
|
|
11
|
+
* - Memory-efficient attention patterns
|
|
12
|
+
*
|
|
13
|
+
* Based on ADR-034: Legal Contract Analysis Plugin
|
|
14
|
+
*
|
|
15
|
+
* @module v3/plugins/legal-contracts/bridges/attention-bridge
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Flash Attention Bridge Implementation
|
|
19
|
+
*/
|
|
20
|
+
export class AttentionBridge {
|
|
21
|
+
wasmModule = null;
|
|
22
|
+
initialized = false;
|
|
23
|
+
embeddingDim;
|
|
24
|
+
constructor(embeddingDim = 384) {
|
|
25
|
+
this.embeddingDim = embeddingDim;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Initialize the WASM module
|
|
29
|
+
*/
|
|
30
|
+
async initialize() {
|
|
31
|
+
if (this.initialized)
|
|
32
|
+
return;
|
|
33
|
+
try {
|
|
34
|
+
// Dynamic import of WASM module
|
|
35
|
+
// In production, this would load from @claude-flow/ruvector-upstream
|
|
36
|
+
const wasmModule = await this.loadWasmModule();
|
|
37
|
+
this.wasmModule = wasmModule;
|
|
38
|
+
this.initialized = true;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
// Fallback to pure JS implementation if WASM not available
|
|
42
|
+
console.warn('WASM attention module not available, using JS fallback');
|
|
43
|
+
this.wasmModule = null;
|
|
44
|
+
this.initialized = true;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if initialized
|
|
49
|
+
*/
|
|
50
|
+
isInitialized() {
|
|
51
|
+
return this.initialized;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Compute cross-attention between clause embeddings
|
|
55
|
+
*/
|
|
56
|
+
async computeCrossAttention(queryEmbeddings, keyEmbeddings, mask) {
|
|
57
|
+
if (!this.initialized) {
|
|
58
|
+
await this.initialize();
|
|
59
|
+
}
|
|
60
|
+
const queryLen = queryEmbeddings.length;
|
|
61
|
+
const keyLen = keyEmbeddings.length;
|
|
62
|
+
if (queryLen === 0 || keyLen === 0) {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
// Flatten embeddings for WASM
|
|
66
|
+
const dim = queryEmbeddings[0]?.length ?? this.embeddingDim;
|
|
67
|
+
const flatQuery = this.flattenEmbeddings(queryEmbeddings, dim);
|
|
68
|
+
const flatKey = this.flattenEmbeddings(keyEmbeddings, dim);
|
|
69
|
+
// Create mask if provided
|
|
70
|
+
let maskArray = null;
|
|
71
|
+
if (mask) {
|
|
72
|
+
maskArray = new Uint8Array(queryLen * keyLen);
|
|
73
|
+
for (let i = 0; i < queryLen; i++) {
|
|
74
|
+
for (let j = 0; j < keyLen; j++) {
|
|
75
|
+
maskArray[i * keyLen + j] = mask[i]?.[j] ? 1 : 0;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Compute attention scores
|
|
80
|
+
let scores;
|
|
81
|
+
if (this.wasmModule) {
|
|
82
|
+
scores = this.wasmModule.attention_scores(flatQuery, flatKey, queryLen, keyLen, dim);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
scores = this.computeAttentionScoresJS(flatQuery, flatKey, queryLen, keyLen, dim);
|
|
86
|
+
}
|
|
87
|
+
// Apply mask if provided
|
|
88
|
+
if (maskArray) {
|
|
89
|
+
for (let i = 0; i < scores.length; i++) {
|
|
90
|
+
if (maskArray[i] === 0) {
|
|
91
|
+
scores[i] = -Infinity;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Apply softmax row-wise
|
|
96
|
+
const result = [];
|
|
97
|
+
for (let i = 0; i < queryLen; i++) {
|
|
98
|
+
const row = [];
|
|
99
|
+
const rowStart = i * keyLen;
|
|
100
|
+
const rowEnd = rowStart + keyLen;
|
|
101
|
+
const rowScores = scores.slice(rowStart, rowEnd);
|
|
102
|
+
const softmaxed = this.softmax(rowScores);
|
|
103
|
+
for (let j = 0; j < keyLen; j++) {
|
|
104
|
+
row.push(new Float32Array([softmaxed[j] ?? 0]));
|
|
105
|
+
}
|
|
106
|
+
result.push(row);
|
|
107
|
+
}
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Align clauses between two documents using attention
|
|
112
|
+
*/
|
|
113
|
+
async alignClauses(baseClauses, compareClauses) {
|
|
114
|
+
if (!this.initialized) {
|
|
115
|
+
await this.initialize();
|
|
116
|
+
}
|
|
117
|
+
if (baseClauses.length === 0 || compareClauses.length === 0) {
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
// Get or compute embeddings
|
|
121
|
+
const baseEmbeddings = await this.getOrComputeEmbeddings(baseClauses);
|
|
122
|
+
const compareEmbeddings = await this.getOrComputeEmbeddings(compareClauses);
|
|
123
|
+
// Compute similarity matrix using attention
|
|
124
|
+
const similarities = await this.computeCrossAttention(baseEmbeddings, compareEmbeddings);
|
|
125
|
+
// Create alignments based on similarity scores
|
|
126
|
+
const alignments = [];
|
|
127
|
+
const usedCompare = new Set();
|
|
128
|
+
// For each base clause, find best matching compare clause
|
|
129
|
+
for (let i = 0; i < baseClauses.length; i++) {
|
|
130
|
+
const baseClause = baseClauses[i];
|
|
131
|
+
if (!baseClause)
|
|
132
|
+
continue;
|
|
133
|
+
const row = similarities[i];
|
|
134
|
+
if (!row)
|
|
135
|
+
continue;
|
|
136
|
+
// Find best match not already used
|
|
137
|
+
let bestJ = -1;
|
|
138
|
+
let bestScore = 0;
|
|
139
|
+
for (let j = 0; j < compareClauses.length; j++) {
|
|
140
|
+
if (usedCompare.has(j))
|
|
141
|
+
continue;
|
|
142
|
+
const score = row[j]?.[0] ?? 0;
|
|
143
|
+
if (score > bestScore) {
|
|
144
|
+
bestScore = score;
|
|
145
|
+
bestJ = j;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const compareClause = bestJ >= 0 ? compareClauses[bestJ] : undefined;
|
|
149
|
+
// Determine alignment type based on score
|
|
150
|
+
let alignmentType;
|
|
151
|
+
if (bestScore > 0.95) {
|
|
152
|
+
alignmentType = 'exact';
|
|
153
|
+
}
|
|
154
|
+
else if (bestScore > 0.8) {
|
|
155
|
+
alignmentType = 'similar';
|
|
156
|
+
}
|
|
157
|
+
else if (bestScore > 0.5) {
|
|
158
|
+
alignmentType = 'related';
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
alignmentType = 'no_match';
|
|
162
|
+
}
|
|
163
|
+
const differences = this.computeDifferences(baseClause, compareClause);
|
|
164
|
+
alignments.push({
|
|
165
|
+
baseClauseId: baseClause.id,
|
|
166
|
+
compareClauseId: compareClause?.id ?? '',
|
|
167
|
+
similarity: bestScore,
|
|
168
|
+
alignmentType,
|
|
169
|
+
differences,
|
|
170
|
+
});
|
|
171
|
+
if (bestJ >= 0) {
|
|
172
|
+
usedCompare.add(bestJ);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return alignments;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Find most relevant clauses for a given query
|
|
179
|
+
*/
|
|
180
|
+
async findRelevantClauses(query, clauses, topK) {
|
|
181
|
+
if (!this.initialized) {
|
|
182
|
+
await this.initialize();
|
|
183
|
+
}
|
|
184
|
+
if (clauses.length === 0) {
|
|
185
|
+
return [];
|
|
186
|
+
}
|
|
187
|
+
// Convert query to embedding if string
|
|
188
|
+
const queryEmbedding = typeof query === 'string'
|
|
189
|
+
? await this.embedText(query)
|
|
190
|
+
: query;
|
|
191
|
+
// Get clause embeddings
|
|
192
|
+
const clauseEmbeddings = await this.getOrComputeEmbeddings(clauses);
|
|
193
|
+
// Compute similarities
|
|
194
|
+
const similarities = await this.computeCrossAttention([queryEmbedding], clauseEmbeddings);
|
|
195
|
+
const scores = similarities[0] ?? [];
|
|
196
|
+
// Create scored results
|
|
197
|
+
const scoredClauses = clauses.map((clause, i) => ({
|
|
198
|
+
clause,
|
|
199
|
+
score: scores[i]?.[0] ?? 0,
|
|
200
|
+
}));
|
|
201
|
+
// Sort by score and take top K
|
|
202
|
+
scoredClauses.sort((a, b) => b.score - a.score);
|
|
203
|
+
return scoredClauses.slice(0, topK);
|
|
204
|
+
}
|
|
205
|
+
// ============================================================================
|
|
206
|
+
// Private Helper Methods
|
|
207
|
+
// ============================================================================
|
|
208
|
+
/**
|
|
209
|
+
* Load WASM module dynamically
|
|
210
|
+
*/
|
|
211
|
+
async loadWasmModule() {
|
|
212
|
+
// In production, this would load from @claude-flow/ruvector-upstream
|
|
213
|
+
// For now, throw to trigger JS fallback
|
|
214
|
+
throw new Error('WASM module loading not implemented');
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Flatten array of embeddings into single Float32Array
|
|
218
|
+
*/
|
|
219
|
+
flattenEmbeddings(embeddings, dim) {
|
|
220
|
+
const flat = new Float32Array(embeddings.length * dim);
|
|
221
|
+
for (let i = 0; i < embeddings.length; i++) {
|
|
222
|
+
const emb = embeddings[i];
|
|
223
|
+
if (emb) {
|
|
224
|
+
flat.set(emb.slice(0, dim), i * dim);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return flat;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Compute attention scores in pure JavaScript (fallback)
|
|
231
|
+
*/
|
|
232
|
+
computeAttentionScoresJS(query, key, queryLen, keyLen, dim) {
|
|
233
|
+
const scores = new Float32Array(queryLen * keyLen);
|
|
234
|
+
const scale = 1 / Math.sqrt(dim);
|
|
235
|
+
for (let i = 0; i < queryLen; i++) {
|
|
236
|
+
for (let j = 0; j < keyLen; j++) {
|
|
237
|
+
let dot = 0;
|
|
238
|
+
for (let k = 0; k < dim; k++) {
|
|
239
|
+
const qVal = query[i * dim + k] ?? 0;
|
|
240
|
+
const kVal = key[j * dim + k] ?? 0;
|
|
241
|
+
dot += qVal * kVal;
|
|
242
|
+
}
|
|
243
|
+
scores[i * keyLen + j] = dot * scale;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return scores;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Compute softmax over array
|
|
250
|
+
*/
|
|
251
|
+
softmax(arr) {
|
|
252
|
+
const max = Math.max(...arr);
|
|
253
|
+
const exps = new Float32Array(arr.length);
|
|
254
|
+
let sum = 0;
|
|
255
|
+
for (let i = 0; i < arr.length; i++) {
|
|
256
|
+
const val = arr[i] ?? 0;
|
|
257
|
+
const exp = Math.exp(val - max);
|
|
258
|
+
exps[i] = exp;
|
|
259
|
+
sum += exp;
|
|
260
|
+
}
|
|
261
|
+
for (let i = 0; i < exps.length; i++) {
|
|
262
|
+
exps[i] = (exps[i] ?? 0) / sum;
|
|
263
|
+
}
|
|
264
|
+
return exps;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get embeddings from clauses or compute them
|
|
268
|
+
*/
|
|
269
|
+
async getOrComputeEmbeddings(clauses) {
|
|
270
|
+
const embeddings = [];
|
|
271
|
+
for (const clause of clauses) {
|
|
272
|
+
if (clause.embedding) {
|
|
273
|
+
embeddings.push(clause.embedding);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
// Compute embedding from text
|
|
277
|
+
const embedding = await this.embedText(clause.text);
|
|
278
|
+
embeddings.push(embedding);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return embeddings;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Embed text to vector (placeholder - would use embedding model)
|
|
285
|
+
*/
|
|
286
|
+
async embedText(text) {
|
|
287
|
+
// In production, this would use an embedding model
|
|
288
|
+
// For now, create a simple hash-based embedding
|
|
289
|
+
const embedding = new Float32Array(this.embeddingDim);
|
|
290
|
+
// Simple hash-based embedding (placeholder)
|
|
291
|
+
for (let i = 0; i < text.length && i < this.embeddingDim; i++) {
|
|
292
|
+
const charCode = text.charCodeAt(i);
|
|
293
|
+
const idx = i % this.embeddingDim;
|
|
294
|
+
embedding[idx] = (embedding[idx] ?? 0) + charCode / 1000;
|
|
295
|
+
}
|
|
296
|
+
// Normalize
|
|
297
|
+
let norm = 0;
|
|
298
|
+
for (let i = 0; i < embedding.length; i++) {
|
|
299
|
+
norm += (embedding[i] ?? 0) * (embedding[i] ?? 0);
|
|
300
|
+
}
|
|
301
|
+
norm = Math.sqrt(norm);
|
|
302
|
+
if (norm > 0) {
|
|
303
|
+
for (let i = 0; i < embedding.length; i++) {
|
|
304
|
+
embedding[i] = (embedding[i] ?? 0) / norm;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return embedding;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Compute differences between two clauses
|
|
311
|
+
*/
|
|
312
|
+
computeDifferences(baseClause, compareClause) {
|
|
313
|
+
const differences = [];
|
|
314
|
+
if (compareClause === undefined) {
|
|
315
|
+
differences.push('No matching clause found in comparison document');
|
|
316
|
+
return differences;
|
|
317
|
+
}
|
|
318
|
+
// Type difference
|
|
319
|
+
if (baseClause.type !== compareClause.type) {
|
|
320
|
+
differences.push(`Type changed: ${baseClause.type} -> ${compareClause.type}`);
|
|
321
|
+
}
|
|
322
|
+
// Length difference
|
|
323
|
+
const lengthDiff = Math.abs(baseClause.text.length - compareClause.text.length);
|
|
324
|
+
if (lengthDiff > 100) {
|
|
325
|
+
differences.push(`Significant length difference: ${lengthDiff} characters`);
|
|
326
|
+
}
|
|
327
|
+
// Key terms difference
|
|
328
|
+
const baseTerms = new Set(baseClause.keyTerms);
|
|
329
|
+
const compareTerms = new Set(compareClause.keyTerms);
|
|
330
|
+
const addedTerms = [...compareTerms].filter(t => !baseTerms.has(t));
|
|
331
|
+
const removedTerms = [...baseTerms].filter(t => !compareTerms.has(t));
|
|
332
|
+
if (addedTerms.length > 0) {
|
|
333
|
+
differences.push(`Added terms: ${addedTerms.join(', ')}`);
|
|
334
|
+
}
|
|
335
|
+
if (removedTerms.length > 0) {
|
|
336
|
+
differences.push(`Removed terms: ${removedTerms.join(', ')}`);
|
|
337
|
+
}
|
|
338
|
+
return differences;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Create and export default bridge instance
|
|
343
|
+
*/
|
|
344
|
+
export function createAttentionBridge(embeddingDim = 384) {
|
|
345
|
+
return new AttentionBridge(embeddingDim);
|
|
346
|
+
}
|
|
347
|
+
export default AttentionBridge;
|
|
348
|
+
//# sourceMappingURL=attention-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attention-bridge.js","sourceRoot":"","sources":["../../src/bridges/attention-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DAG Bridge for Obligation Tracking
|
|
3
|
+
*
|
|
4
|
+
* Provides directed acyclic graph operations for obligation dependency
|
|
5
|
+
* tracking using ruvector-dag-wasm for high-performance graph algorithms.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Obligation dependency graph construction
|
|
9
|
+
* - Critical path analysis
|
|
10
|
+
* - Topological sorting
|
|
11
|
+
* - Cycle detection
|
|
12
|
+
* - Float/slack calculation
|
|
13
|
+
*
|
|
14
|
+
* Based on ADR-034: Legal Contract Analysis Plugin
|
|
15
|
+
*
|
|
16
|
+
* @module v3/plugins/legal-contracts/bridges/dag-bridge
|
|
17
|
+
*/
|
|
18
|
+
import type { IDAGBridge, Obligation, ObligationTrackingResult } from '../types.js';
|
|
19
|
+
/**
|
|
20
|
+
* DAG Bridge Implementation
|
|
21
|
+
*/
|
|
22
|
+
export declare class DAGBridge implements IDAGBridge {
|
|
23
|
+
private wasmModule;
|
|
24
|
+
private initialized;
|
|
25
|
+
/**
|
|
26
|
+
* Initialize the WASM module
|
|
27
|
+
*/
|
|
28
|
+
initialize(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Check if initialized
|
|
31
|
+
*/
|
|
32
|
+
isInitialized(): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Build obligation dependency graph
|
|
35
|
+
*/
|
|
36
|
+
buildDependencyGraph(obligations: Obligation[]): Promise<ObligationTrackingResult['graph']>;
|
|
37
|
+
/**
|
|
38
|
+
* Find critical path through obligations
|
|
39
|
+
*/
|
|
40
|
+
findCriticalPath(graph: ObligationTrackingResult['graph']): Promise<string[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Perform topological sort of obligations
|
|
43
|
+
*/
|
|
44
|
+
topologicalSort(obligations: Obligation[]): Promise<Obligation[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Detect cycles in dependency graph
|
|
47
|
+
*/
|
|
48
|
+
detectCycles(graph: ObligationTrackingResult['graph']): Promise<string[][]>;
|
|
49
|
+
/**
|
|
50
|
+
* Calculate slack/float for each obligation
|
|
51
|
+
*/
|
|
52
|
+
calculateFloat(graph: ObligationTrackingResult['graph'], projectEnd: Date): Promise<Map<string, number>>;
|
|
53
|
+
/**
|
|
54
|
+
* Load WASM module dynamically
|
|
55
|
+
*/
|
|
56
|
+
private loadWasmModule;
|
|
57
|
+
/**
|
|
58
|
+
* Find critical path internally
|
|
59
|
+
*/
|
|
60
|
+
private findCriticalPathInternal;
|
|
61
|
+
/**
|
|
62
|
+
* Calculate schedule (earliest start, latest finish, float)
|
|
63
|
+
*/
|
|
64
|
+
private calculateSchedule;
|
|
65
|
+
/**
|
|
66
|
+
* Estimate duration in days for an obligation
|
|
67
|
+
*/
|
|
68
|
+
private estimateDuration;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Create and export default bridge instance
|
|
72
|
+
*/
|
|
73
|
+
export declare function createDAGBridge(): IDAGBridge;
|
|
74
|
+
export default DAGBridge;
|
|
75
|
+
//# sourceMappingURL=dag-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag-bridge.d.ts","sourceRoot":"","sources":["../../src/bridges/dag-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,wBAAwB,EAEzB,MAAM,aAAa,CAAC;AAyCrB;;GAEG;AACH,qBAAa,SAAU,YAAW,UAAU;IAE1C,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,WAAW,CAAS;IAE5B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACG,oBAAoB,CACxB,WAAW,EAAE,UAAU,EAAE,GACxB,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAwE7C;;OAEG;IACG,gBAAgB,CACpB,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,GACvC,OAAO,CAAC,MAAM,EAAE,CAAC;IAyBpB;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAkEvE;;OAEG;IACG,YAAY,CAChB,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,GACvC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IA+DtB;;OAEG;IACG,cAAc,CAClB,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,EACxC,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAyB/B;;OAEG;YACW,cAAc;IAM5B;;OAEG;YACW,wBAAwB;IAyEtC;;OAEG;YACW,iBAAiB;IAyF/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAoBzB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,UAAU,CAE5C;AAED,eAAe,SAAS,CAAC"}
|