diff --git a/package.json b/package.json index 805c3bf..a72bc12 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "tui": "node dist/cli.js tui", "web": "node dist/cli.js web", "clean": "rm -rf dist", + "deploy": "npm run build && npm run build:web", "typecheck": "tsc --noEmit", "test": "vitest run", "test:watch": "vitest", diff --git a/src/parser.real-logs.integration.test.ts b/src/parser.real-logs.integration.test.ts new file mode 100644 index 0000000..4779fac --- /dev/null +++ b/src/parser.real-logs.integration.test.ts @@ -0,0 +1,442 @@ +/** + * Real NEEDLE Log Integration Test (bd-129) + * + * Reads actual NEEDLE log files from ~/.needle/logs/ and verifies + * the parser correctly extracts worker, bead, timestamp and event + * information from production logs. + */ + +import { describe, it, expect, beforeAll } from 'vitest'; +import { readFileSync, readdirSync, existsSync } from 'node:fs'; +import { join } from 'node:path'; +import { parseLogLine, parseLogLines } from './parser.js'; + +const NEEDLE_LOGS_DIR = join( + process.env.HOME || '/home/coding', + '.needle', + 'logs', +); + +/** Read first N lines from a file (avoids loading multi-MB files entirely). */ +function headLines(filePath: string, maxLines: number): string { + const content = readFileSync(filePath, 'utf-8'); + const lines = content.split('\n').slice(0, maxLines); + return lines.join('\n'); +} + +/** Read lines matching a grep pattern from a file. */ +function grepLines(filePath: string, pattern: RegExp, maxLines = 50): string { + const content = readFileSync(filePath, 'utf-8'); + const matching = content + .split('\n') + .filter((line) => pattern.test(line)) + .slice(0, maxLines); + return matching.join('\n'); +} + +/** Pick a small-ish log file with a variety of events for targeted tests. */ +function pickFixtureFile(dir: string): string { + const files = readdirSync(dir) + .filter((f) => f.startsWith('needle-') && f.endsWith('.log')) + .sort(); + // Prefer foxtrot — small file with worker lifecycle, claim, exhaust, idle, and bead work events + const preferred = files.find((f) => f.includes('foxtrot')); + return preferred ? join(dir, preferred) : join(dir, files[0]); +} + +describe('Real NEEDLE Log Integration', () => { + let logsDir: string; + let fixturePath: string; + + beforeAll(() => { + if (!existsSync(NEEDLE_LOGS_DIR)) { + throw new Error( + `NEEDLE logs directory not found: ${NEEDLE_LOGS_DIR}. ` + + `This test requires production NEEDLE log files.`, + ); + } + logsDir = NEEDLE_LOGS_DIR; + fixturePath = pickFixtureFile(logsDir); + }); + + // ----------------------------------------------------------------------- + // Directory-level sanity checks + // ----------------------------------------------------------------------- + describe('log directory', () => { + it('should contain needle-*.log files', () => { + const files = readdirSync(logsDir).filter( + (f) => f.startsWith('needle-') && f.endsWith('.log'), + ); + expect(files.length).toBeGreaterThanOrEqual(10); + }); + + it('should have files that are valid JSONL', () => { + const files = readdirSync(logsDir) + .filter((f) => f.startsWith('needle-') && f.endsWith('.log')) + .slice(0, 5); + + for (const file of files) { + const content = headLines(join(logsDir, file), 5); + const events = parseLogLines(content); + expect(events.length).toBeGreaterThanOrEqual(1); + } + }); + }); + + // ----------------------------------------------------------------------- + // Fixture file: targeted assertions on a single small log + // ----------------------------------------------------------------------- + describe('fixture file parsing', () => { + it('should parse every line in the fixture file', () => { + const content = readFileSync(fixturePath, 'utf-8'); + const lines = content.split('\n').filter(Boolean); + const events = parseLogLines(content); + + // Every non-empty line should produce an event (no silent drops) + expect(events).toHaveLength(lines.length); + }); + + it('should extract worker identifier on every event', () => { + const content = readFileSync(fixturePath, 'utf-8'); + const events = parseLogLines(content); + + expect(events.length).toBeGreaterThan(0); + for (const event of events) { + expect(event.worker).toBeTruthy(); + expect(typeof event.worker).toBe('string'); + } + }); + + it('should extract ISO timestamps and convert to Unix ms', () => { + const content = headLines(fixturePath, 10); + const events = parseLogLines(content); + + for (const event of events) { + expect(event.ts).toBeGreaterThan(1700000000000); // after 2023 + expect(event.ts).toBeLessThan(2000000000000); // before 2033 + expect(Number.isFinite(event.ts)).toBe(true); + } + }); + + it('should extract session identifier matching log filename', () => { + const content = headLines(fixturePath, 20); + const events = parseLogLines(content); + const expectedSession = fixturePath + .replace(/\.log$/, '') + .split('/') + .pop()!; + + for (const event of events) { + expect(event.session).toBe(expectedSession); + } + }); + + it('should produce monotonically increasing timestamps', () => { + const content = readFileSync(fixturePath, 'utf-8'); + const events = parseLogLines(content); + + for (let i = 1; i < events.length; i++) { + expect(events[i].ts).toBeGreaterThanOrEqual(events[i - 1].ts); + } + }); + }); + + // ----------------------------------------------------------------------- + // Worker lifecycle events from real logs + // ----------------------------------------------------------------------- + describe('worker lifecycle events', () => { + it('should parse worker.started with pid and workspace from real logs', () => { + const content = grepLines( + join(logsDir, 'needle-claude-anthropic-sonnet-alpha.log'), + /"event":"worker.started"/, + 5, + ); + const events = parseLogLines(content); + + const startedEvents = events.filter((e) => e.msg === 'worker.started'); + expect(startedEvents.length).toBeGreaterThanOrEqual(1); + + // First worker.started should have PID + const first = startedEvents[0]; + expect(first.pid).toBeDefined(); + expect(typeof first.pid).toBe('number'); + expect(first.workspace).toBeDefined(); + expect(typeof first.workspace).toBe('string'); + expect(first.level).toBe('info'); + }); + + it('should parse worker.idle with consecutive_empty from real logs', () => { + const content = grepLines( + fixturePath, + /"event":"worker.idle"/, + 5, + ); + const events = parseLogLines(content); + + expect(events.length).toBeGreaterThanOrEqual(1); + const idle = events[0]; + expect(idle.msg).toBe('worker.idle'); + expect(idle.level).toBe('info'); + expect(typeof idle.consecutive_empty).toBe('number'); + expect(typeof idle.idle_seconds).toBe('number'); + }); + + it('should parse worker.draining from real logs', () => { + const content = grepLines( + join(logsDir, 'needle-claude-anthropic-sonnet-alpha.log'), + /"event":"worker.draining"/, + 3, + ); + const events = parseLogLines(content); + + expect(events.length).toBeGreaterThanOrEqual(1); + expect(events[0].msg).toBe('worker.draining'); + expect(events[0].level).toBe('info'); + }); + }); + + // ----------------------------------------------------------------------- + // Bead lifecycle events from real logs + // ----------------------------------------------------------------------- + describe('bead lifecycle events', () => { + it('should parse bead.claimed with bead_id and workspace from real logs', () => { + const content = grepLines( + fixturePath, + /"event":"bead.claimed"/, + 10, + ); + const events = parseLogLines(content).filter( + (e) => e.msg === 'bead.claimed', + ); + + expect(events.length).toBeGreaterThanOrEqual(1); + const claimed = events[0]; + expect(claimed.bead).toBeTruthy(); + expect(typeof claimed.bead).toBe('string'); + expect(claimed.workspace).toBeTruthy(); + expect(typeof claimed.workspace).toBe('string'); + expect(claimed.level).toBe('info'); + }); + + it('should parse bead.claim_retry with warn level from real logs', () => { + const content = grepLines( + fixturePath, + /"event":"bead.claim_retry"/, + 5, + ); + const events = parseLogLines(content); + + expect(events.length).toBeGreaterThanOrEqual(1); + const retry = events[0]; + expect(retry.msg).toBe('bead.claim_retry'); + expect(retry.level).toBe('warn'); + expect(typeof retry.bead).toBe('string'); + expect(typeof retry.attempt).toBe('number'); + }); + + it('should parse bead.claim_exhausted with error level from real logs', () => { + const content = grepLines( + fixturePath, + /"event":"bead.claim_exhausted"/, + 5, + ); + const events = parseLogLines(content); + + expect(events.length).toBeGreaterThanOrEqual(1); + const exhausted = events[0]; + expect(exhausted.msg).toBe('bead.claim_exhausted'); + expect(exhausted.level).toBe('error'); + }); + + it('should parse bead.completed with duration_ms from real logs', () => { + const content = grepLines( + join(logsDir, 'needle-claude-code-glm-4.7-bravo.log'), + /"event":"bead.completed"/, + 5, + ); + const events = parseLogLines(content); + + expect(events.length).toBeGreaterThanOrEqual(1); + const completed = events[0]; + expect(completed.msg).toBe('bead.completed'); + expect(completed.level).toBe('info'); + expect(typeof completed.bead).toBe('string'); + expect(typeof completed.duration_ms).toBe('number'); + expect(completed.duration_ms).toBeGreaterThan(0); + expect(typeof completed.output_file).toBe('string'); + }); + + it('should parse bead.prompt_built with prompt_length from real logs', () => { + const content = grepLines( + fixturePath, + /"event":"bead.prompt_built"/, + 5, + ); + const events = parseLogLines(content); + + expect(events.length).toBeGreaterThanOrEqual(1); + const prompt = events[0]; + expect(prompt.msg).toBe('bead.prompt_built'); + expect(typeof prompt.bead).toBe('string'); + expect(typeof prompt.prompt_length).toBe('number'); + expect(prompt.prompt_length).toBeGreaterThan(0); + }); + + it('should parse bead.agent_started from real logs', () => { + const content = grepLines( + fixturePath, + /"event":"bead.agent_started"/, + 5, + ); + const events = parseLogLines(content); + + expect(events.length).toBeGreaterThanOrEqual(1); + const started = events[0]; + expect(started.msg).toBe('bead.agent_started'); + expect(typeof started.bead).toBe('string'); + expect(typeof started.agent).toBe('string'); + }); + + it('should parse bead.mitosis.check from real logs', () => { + const content = grepLines( + fixturePath, + /"event":"bead.mitosis.check"/, + 5, + ); + const events = parseLogLines(content); + + expect(events.length).toBeGreaterThanOrEqual(1); + expect(events[0].msg).toBe('bead.mitosis.check'); + }); + }); + + // ----------------------------------------------------------------------- + // Error events from real logs + // ----------------------------------------------------------------------- + describe('error events', () => { + it('should parse error.release_failed with error level from real logs', () => { + const content = grepLines( + join(logsDir, 'needle-claude-anthropic-sonnet-alpha.log'), + /"event":"error.release_failed"/, + 5, + ); + const events = parseLogLines(content); + + if (events.length > 0) { + expect(events[0].level).toBe('error'); + expect(events[0].msg).toBe('error.release_failed'); + } + // If no events found, test passes — file may not have this event type + }); + + it('should parse error.agent_crash with error level from real logs', () => { + const content = grepLines( + join(logsDir, 'needle-claude-anthropic-sonnet-alpha.log'), + /"event":"error.agent_crash"/, + 5, + ); + const events = parseLogLines(content); + + if (events.length > 0) { + expect(events[0].level).toBe('error'); + expect(events[0].msg).toBe('error.agent_crash'); + } + }); + + it('should parse bead.failed with error level from real logs', () => { + const content = grepLines( + join(logsDir, 'needle-claude-anthropic-sonnet-alpha.log'), + /"event":"bead.failed"/, + 5, + ); + const events = parseLogLines(content); + + if (events.length > 0) { + expect(events[0].level).toBe('error'); + expect(events[0].msg).toBe('bead.failed'); + } + }); + }); + + // ----------------------------------------------------------------------- + // Cross-file consistency: parse multiple real log files + // ----------------------------------------------------------------------- + describe('cross-file consistency', () => { + it('should successfully parse a sample of 10 different log files', () => { + const files = readdirSync(logsDir) + .filter((f) => f.startsWith('needle-') && f.endsWith('.log')) + .slice(0, 10); + + for (const file of files) { + const content = headLines(join(logsDir, file), 100); + const events = parseLogLines(content); + expect(events.length).toBeGreaterThan(0); + } + }); + + it('should extract consistent worker names within each session', () => { + const files = readdirSync(logsDir) + .filter((f) => f.startsWith('needle-') && f.endsWith('.log')) + .slice(0, 5); + + for (const file of files) { + const content = headLines(join(logsDir, file), 200); + const events = parseLogLines(content); + if (events.length === 0) continue; + + const workers = new Set(events.map((e) => e.worker)); + // All events in a single session file should have the same worker + expect(workers.size).toBe(1); + } + }); + + it('should extract valid event types across all log files', () => { + const files = readdirSync(logsDir) + .filter((f) => f.startsWith('needle-') && f.endsWith('.log')) + .slice(0, 10); + + const knownPrefixes = [ + 'worker.', + 'bead.', + 'effort.', + 'error.', + 'explore.', + 'engine.', + 'pulse.', + 'config.', + 'hook.', + 'intent.', + 'file.', + 'test.', + ]; + + for (const file of files) { + const content = headLines(join(logsDir, file), 100); + const events = parseLogLines(content); + + for (const event of events) { + const hasKnownPrefix = knownPrefixes.some((p) => + event.msg.startsWith(p), + ); + expect(hasKnownPrefix).toBe(true); + } + } + }); + + it('should preserve all data payload fields on parsed events', () => { + const content = grepLines( + join(logsDir, 'needle-claude-code-glm-4.7-bravo.log'), + /"event":"bead.completed"/, + 1, + ); + const events = parseLogLines(content); + + expect(events.length).toBe(1); + const completed = events[0]; + // These fields come from data payload and should be spread onto the event + expect(completed.bead).toBeDefined(); + expect(completed.duration_ms).toBeDefined(); + expect(completed.output_file).toBeDefined(); + }); + }); +}); diff --git a/src/store.ts b/src/store.ts index fa2e634..38aed58 100644 --- a/src/store.ts +++ b/src/store.ts @@ -44,6 +44,7 @@ import { ErrorGroupManager, getErrorGroupManager } from './errorGrouping.js'; import { RecoveryManager, getRecoveryManager } from './tui/utils/recoveryPlaybook.js'; import { CrossReferenceManager, getCrossReferenceManager } from './crossReferenceManager.js'; import { WorkerAnalytics, getWorkerAnalytics } from './workerAnalytics.js'; +import { CostTracker } from './tui/utils/costTracking.js'; import { SemanticNarrativeGenerator, getSemanticNarrativeManager } from './semanticNarrative.js'; import { HistoricalStore, getHistoricalStore } from './historicalStore.js'; @@ -1276,6 +1277,13 @@ export class InMemoryEventStore implements EventStore { return this.workerAnalytics; } + /** + * Get cost tracker instance for budget/cost data + */ + getCostTracker(): CostTracker { + return this.workerAnalytics.getCostTracker(); + } + /** * Get analytics metrics for a specific worker */ diff --git a/src/tui/app.ts b/src/tui/app.ts index 5229f62..8e8056d 100644 --- a/src/tui/app.ts +++ b/src/tui/app.ts @@ -80,6 +80,7 @@ export class FabricTuiApp { private fileContextPanel!: FileContextPanel; private conversationTranscript!: ConversationTranscript; private crossReferencePanel!: CrossReferencePanel; + private budgetAlertPanel!: BudgetAlertPanel; private footerBox!: blessed.Widgets.BoxElement; private helpOverlay?: blessed.Widgets.BoxElement; @@ -383,6 +384,21 @@ export class FabricTuiApp { }); this.crossReferencePanel.hide(); + // Budget Alert panel (hidden by default, 'B' key) + this.budgetAlertPanel = new BudgetAlertPanel({ + parent: this.screen, + top: 1, + left: 0, + width: '100%', + bottom: 1, + onAcknowledge: (alertId) => { + const tracker = getCostTracker(); + tracker.acknowledgeAlert(alertId); + this.updateBudgetPanel(); + }, + }); + this.budgetAlertPanel.hide(); + // Footer with key hints this.footerBox = blessed.box({ parent: this.screen, @@ -403,7 +419,7 @@ export class FabricTuiApp { */ private getFooterContent(): string { if (this.viewMode === 'default') { - let content = ' [Tab] Switch [j/k] Scroll [/] Search [H] Heatmap [D] DAG [E] Errors [I] Git [C] Collisions [N] Narrative [A] Analytics [T] Transcript [X] XRef'; + let content = ' [Tab] Switch [j/k] Scroll [/] Search [H] Heatmap [D] DAG [E] Errors [I] Git [C] Collisions [N] Narrative [A] Analytics [B] Budget [T] Transcript [X] XRef'; // Show focus mode status if (this.focusModeEnabled) { @@ -433,7 +449,7 @@ export class FabricTuiApp { } // Return default content for other views - return ' [Tab] Switch [j/k] Scroll [/] Search [H] Heatmap [D] DAG [E] Errors [C] Collisions [N] Narrative [A] Analytics [T] Transcript [X] XRef [?] Help [q] Quit'; + return ' [Tab] Switch [j/k] Scroll [/] Search [H] Heatmap [D] DAG [E] Errors [C] Collisions [N] Narrative [A] Analytics [B] Budget [T] Transcript [X] XRef [?] Help [q] Quit'; } /** @@ -524,6 +540,11 @@ export class FabricTuiApp { this.toggleAnalyticsView(); }); + // Toggle budget dashboard view + this.screen.key(['B'], () => { + this.toggleBudgetView(); + }); + // Toggle conversation transcript view this.screen.key(['T'], () => { this.toggleTranscriptView(); @@ -621,6 +642,8 @@ export class FabricTuiApp { this.toggleNarrativeView(); } else if (cmd === 'analytics') { this.toggleAnalyticsView(); + } else if (cmd === 'budget') { + this.toggleBudgetView(); } else if (cmd.startsWith('filter:worker:')) { const workerId = cmd.replace('filter:worker:', ''); this.activityStream.setFilter({ workerId }); @@ -787,6 +810,17 @@ export class FabricTuiApp { } } + /** + * Toggle budget dashboard view + */ + private toggleBudgetView(): void { + if (this.viewMode === 'budget') { + this.setViewMode('default'); + } else { + this.setViewMode('budget'); + } + } + /** * Toggle theme between dark and light */ @@ -813,10 +847,20 @@ export class FabricTuiApp { this.collisionAlert.updateAlerts(alerts); } + /** + * Update budget panel with current cost data + */ + private updateBudgetPanel(): void { + const tracker = getCostTracker(); + const summary = tracker.getSummary(); + this.budgetAlertPanel.setCostSummary(summary); + this.budgetAlertPanel.setAlerts(tracker.getAlerts()); + } + /** * Set view mode */ - private setViewMode(mode: 'default' | 'heatmap' | 'dag' | 'replay' | 'errors' | 'digest' | 'collisions' | 'git' | 'narrative' | 'analytics'): void { + private setViewMode(mode: 'default' | 'heatmap' | 'dag' | 'replay' | 'errors' | 'digest' | 'collisions' | 'git' | 'narrative' | 'analytics' | 'transcript' | 'xref' | 'budget'): void { this.viewMode = mode; // Hide file context panel when switching views (except default) @@ -1055,6 +1099,8 @@ export class FabricTuiApp { this.gitIntegration.hide(); this.semanticNarrativePanel.hide(); this.workerAnalyticsPanel.hide(); + this.crossReferencePanel.hide(); + this.budgetAlertPanel.hide(); // Show conversation transcript panel this.conversationTranscript.show(); @@ -1077,6 +1123,7 @@ export class FabricTuiApp { this.semanticNarrativePanel.hide(); this.workerAnalyticsPanel.hide(); this.conversationTranscript.hide(); + this.budgetAlertPanel.hide(); // Show cross-reference panel this.crossReferencePanel.show(); @@ -1085,6 +1132,30 @@ export class FabricTuiApp { // Update header this.headerBox.setContent(' FABRIC - Cross References'); this.footerBox.setContent(' [↑/↓] or [j/k] Navigate [Enter] Follow [s] Stats [r] Refresh [Esc] Back [?] Help [q] Quit'); + } else if (mode === 'budget') { + // Hide other panels + this.workerGrid.getElement().hide(); + this.activityStream.getElement().hide(); + this.fileHeatmap.getElement().hide(); + this.dependencyDag.getElement().hide(); + this.sessionReplay.hide(); + this.errorGroupPanel.hide(); + this.sessionDigest.hide(); + this.collisionAlert.hide(); + this.gitIntegration.hide(); + this.semanticNarrativePanel.hide(); + this.workerAnalyticsPanel.hide(); + this.conversationTranscript.hide(); + this.crossReferencePanel.hide(); + + // Show budget dashboard panel + this.updateBudgetPanel(); + this.budgetAlertPanel.show(); + this.budgetAlertPanel.focus(); + + // Update header + this.headerBox.setContent(' FABRIC - Budget Dashboard'); + this.footerBox.setContent(' [a] Acknowledge [r] Refresh [s] Settings [Esc] Back [?] Help [q] Quit'); } else { // Hide special views this.fileHeatmap.getElement().hide(); @@ -1099,6 +1170,7 @@ export class FabricTuiApp { this.fileContextPanel.hide(); this.conversationTranscript.hide(); this.crossReferencePanel.hide(); + this.budgetAlertPanel.hide(); // Show default panels this.workerGrid.getElement().show(); @@ -1549,6 +1621,13 @@ Worker Analytics: r - Refresh metrics Esc - Return to default view +Budget Dashboard: + B - Toggle budget dashboard view + a - Acknowledge alert + r - Refresh cost data + s - Open budget settings + Esc - Return to default view + Theme: Ctrl+T - Toggle dark/light theme diff --git a/src/tui/utils/costTracking.ts b/src/tui/utils/costTracking.ts index ef0dcbf..83442e7 100644 --- a/src/tui/utils/costTracking.ts +++ b/src/tui/utils/costTracking.ts @@ -145,6 +145,48 @@ export interface TopConsumer { insight?: string; } +export interface BeadCost { + /** Bead ID */ + beadId: string; + /** Total cost in USD */ + costUsd: number; + /** Token usage */ + input: number; + output: number; + /** Number of API calls attributed to this bead */ + apiCalls: number; + /** Worker IDs that worked on this bead */ + workers: Set; + /** First activity timestamp */ + firstTs: number; + /** Last activity timestamp */ + lastTs: number; + /** Duration in minutes */ + durationMinutes: number; +} + +export interface CostTimeSeriesPoint { + /** Timestamp (start of bucket) */ + ts: number; + /** Total cost in bucket */ + cost: number; + /** Number of API calls in bucket */ + apiCalls: number; + /** Active workers in bucket */ + activeWorkers: number; +} + +export interface BurnRateHistory { + /** Timestamp of measurement */ + ts: number; + /** Raw cost per minute */ + rawRate: number; + /** Smoothed cost per minute (EMA) */ + smoothedRate: number; + /** Number of data points in window */ + sampleCount: number; +} + export interface CostTrackingOptions { /** Budget limit in USD (0 = no limit) */ budgetLimit?: number; @@ -166,6 +208,15 @@ export interface CostTrackingOptions { /** High burn rate threshold in USD/min (default: 0.50) */ highBurnRateThreshold?: number; + + /** EMA smoothing factor for burn rate (default: 0.3, higher = more responsive) */ + burnRateSmoothingFactor?: number; + + /** Time-series bucket size in minutes (default: 1) */ + timeSeriesBucketMinutes?: number; + + /** How long to keep time-series data in minutes (default: 1440 = 24h) */ + timeSeriesRetentionMinutes?: number; } const DEFAULT_OPTIONS: Required = { @@ -176,6 +227,9 @@ const DEFAULT_OPTIONS: Required = { outputCostPerMillion: 15.00, // Claude Sonnet output burnRateWindowMinutes: 5, // Calculate burn rate over last 5 minutes highBurnRateThreshold: 0.50, // High burn rate if > $0.50/min + burnRateSmoothingFactor: 0.3, // EMA smoothing factor + timeSeriesBucketMinutes: 1, // 1-minute buckets for time-series + timeSeriesRetentionMinutes: 1440, // Keep 24h of time-series data }; // Model pricing (per 1M tokens) @@ -202,7 +256,18 @@ export class CostTracker { private lastEventTs: number | null = null; // Burn rate tracking - private costHistory: Array<{ ts: number; cost: number; worker: string }> = []; + private costHistory: Array<{ ts: number; cost: number; worker: string; bead?: string }> = []; + + // Per-bead cost tracking + private beadCosts: Map = new Map(); + private workerCurrentBead: Map = new Map(); + + // EMA-smoothed burn rate + private smoothedBurnRate: number | null = null; + + // Time-series storage + private timeSeries: CostTimeSeriesPoint[] = []; + private burnRateHistory: BurnRateHistory[] = []; // Alert tracking private alerts: BudgetAlert[] = []; @@ -268,16 +333,92 @@ export class CostTracker { ts: event.ts, cost: incrementalCost, worker: event.worker, + bead: event.bead || undefined, }); // Trim old history (keep last 30 minutes) const cutoffTs = event.ts - (30 * 60 * 1000); this.costHistory = this.costHistory.filter(h => h.ts > cutoffTs); + // Track per-bead costs + if (event.bead) { + this.trackBeadCost(event.bead, event.worker, tokens, incrementalCost, event.ts); + } + + // Update time-series bucket + this.updateTimeSeries(event.ts, incrementalCost); + // Check for budget alerts this.checkBudgetAlerts(); } + /** + * Track cost for a specific bead + */ + private trackBeadCost( + beadId: string, + workerId: string, + tokens: { input: number; output: number }, + cost: number, + ts: number, + ): void { + let beadCost = this.beadCosts.get(beadId); + if (!beadCost) { + beadCost = { + beadId, + costUsd: 0, + input: 0, + output: 0, + apiCalls: 0, + workers: new Set(), + firstTs: ts, + lastTs: ts, + durationMinutes: 0, + }; + this.beadCosts.set(beadId, beadCost); + } + + beadCost.costUsd += cost; + beadCost.input += tokens.input; + beadCost.output += tokens.output; + beadCost.apiCalls += 1; + beadCost.workers.add(workerId); + beadCost.lastTs = ts; + beadCost.durationMinutes = (ts - beadCost.firstTs) / 60000; + } + + /** + * Update time-series bucket + */ + private updateTimeSeries(ts: number, incrementalCost: number): void { + const bucketMs = this.options.timeSeriesBucketMinutes * 60 * 1000; + const bucketTs = Math.floor(ts / bucketMs) * bucketMs; + + // Find or create the bucket + let bucket = this.timeSeries.find(b => b.ts === bucketTs); + if (!bucket) { + bucket = { ts: bucketTs, cost: 0, apiCalls: 0, activeWorkers: 0 }; + this.timeSeries.push(bucket); + } + + bucket.cost += incrementalCost; + bucket.apiCalls += 1; + + // Count active workers in this bucket from recent cost history + const bucketEnd = bucketTs + bucketMs; + const activeWorkerSet = new Set( + this.costHistory + .filter(h => h.ts >= bucketTs && h.ts < bucketEnd) + .map(h => h.worker) + ); + bucket.activeWorkers = activeWorkerSet.size; + + // Trim old time-series data + const retentionMs = this.options.timeSeriesRetentionMinutes * 60 * 1000; + const cutoffTs = ts - retentionMs; + this.timeSeries = this.timeSeries.filter(b => b.ts > cutoffTs); + } + /** * Extract token counts from event */ @@ -320,17 +461,14 @@ export class CostTracker { getSummary(): CostSummary { let totalInput = 0; let totalOutput = 0; + let totalCostUsd = 0; for (const worker of this.workerCosts.values()) { totalInput += worker.input; totalOutput += worker.output; + totalCostUsd += worker.costUsd; } - const totalPrice = MODEL_PRICING['claude-sonnet-4-6']; // Default pricing - const totalCostUsd = - (totalInput * totalPrice.input / 1_000_000) + - (totalOutput * totalPrice.output / 1_000_000); - const budget = this.calculateBudgetStatus(totalCostUsd); const burnRate = this.calculateBurnRate(); @@ -352,7 +490,51 @@ export class CostTracker { } /** - * Calculate burn rate (cost per minute) + * Get per-bead cost breakdown, sorted by cost descending + */ + getBeadCosts(): BeadCost[] { + return Array.from(this.beadCosts.values()) + .sort((a, b) => b.costUsd - a.costUsd); + } + + /** + * Get cost for a specific bead + */ + getBeadCost(beadId: string): BeadCost | undefined { + return this.beadCosts.get(beadId); + } + + /** + * Get per-worker cost breakdown with bead attribution + */ + getWorkerCostBreakdown(workerId: string): { + worker: WorkerCost; + beadCosts: Array<{ beadId: string; costUsd: number; percentOfWorker: number }>; + } | undefined { + const worker = this.workerCosts.get(workerId); + if (!worker) return undefined; + + // Calculate per-bead costs for this worker from cost history + const beadCostMap = new Map(); + for (const entry of this.costHistory) { + if (entry.worker === workerId && entry.bead) { + beadCostMap.set(entry.bead, (beadCostMap.get(entry.bead) || 0) + entry.cost); + } + } + + const beadCosts = Array.from(beadCostMap.entries()) + .map(([beadId, costUsd]) => ({ + beadId, + costUsd, + percentOfWorker: worker.costUsd > 0 ? (costUsd / worker.costUsd) * 100 : 0, + })) + .sort((a, b) => b.costUsd - a.costUsd); + + return { worker, beadCosts }; + } + + /** + * Calculate burn rate (cost per minute) with EMA smoothing */ private calculateBurnRate(): BurnRate { const now = this.lastEventTs || Date.now(); @@ -370,29 +552,43 @@ export class CostTracker { const actualWindowMs = now - oldestInWindow; const actualWindowMinutes = actualWindowMs / 60000; - // Cost per minute - const costPerMinute = actualWindowMinutes > 0 + // Raw cost per minute + const rawCostPerMinute = actualWindowMinutes > 0 ? totalCostInWindow / actualWindowMinutes : 0; - // Calculate total cost directly (avoid recursion with getSummary) - let totalInput = 0; - let totalOutput = 0; - for (const worker of this.workerCosts.values()) { - totalInput += worker.input; - totalOutput += worker.output; + // Apply EMA smoothing + const alpha = this.options.burnRateSmoothingFactor; + if (this.smoothedBurnRate === null) { + this.smoothedBurnRate = rawCostPerMinute; + } else { + this.smoothedBurnRate = alpha * rawCostPerMinute + (1 - alpha) * this.smoothedBurnRate; } - const totalPrice = MODEL_PRICING['claude-sonnet-4-6']; - const currentTotalCost = - (totalInput * totalPrice.input / 1_000_000) + - (totalOutput * totalPrice.output / 1_000_000); - // Calculate time to exhaustion + const costPerMinute = this.smoothedBurnRate; + + // Record burn rate history (keep last hour) + this.burnRateHistory.push({ + ts: now, + rawRate: rawCostPerMinute, + smoothedRate: costPerMinute, + sampleCount: recentCosts.length, + }); + const burnRateRetentionMs = 60 * 60 * 1000; // 1 hour + this.burnRateHistory = this.burnRateHistory.filter(h => h.ts > now - burnRateRetentionMs); + + // Calculate total cost directly from worker totals (avoid recursion) + let totalCostUsd = 0; + for (const worker of this.workerCosts.values()) { + totalCostUsd += worker.costUsd; + } + + // Calculate time to exhaustion using smoothed rate let minutesToExhaustion: number | null = null; let timeToExhaustion: string | null = null; if (this.options.budgetLimit > 0 && costPerMinute > 0) { - const remaining = this.options.budgetLimit - currentTotalCost; + const remaining = this.options.budgetLimit - totalCostUsd; if (remaining > 0) { minutesToExhaustion = remaining / costPerMinute; timeToExhaustion = formatTimeToExhaustion(minutesToExhaustion); @@ -403,11 +599,10 @@ export class CostTracker { } // Projected total cost at current burn rate for remainder of session - // Assume 60-minute session by default if we don't have enough data const sessionDurationMs = (this.lastEventTs || now) - (this.firstEventTs || now); const sessionMinutes = sessionDurationMs / 60000; const projectedTotalCost = sessionMinutes > 0 - ? currentTotalCost + (costPerMinute * Math.max(0, 60 - sessionMinutes)) + ? totalCostUsd + (costPerMinute * Math.max(0, 60 - sessionMinutes)) : costPerMinute * 60; return { @@ -420,6 +615,50 @@ export class CostTracker { }; } + /** + * Get the smoothed burn rate history for trend visualization + */ + getBurnRateHistory(sinceMinutes: number = 60): BurnRateHistory[] { + const cutoffTs = (this.lastEventTs || Date.now()) - (sinceMinutes * 60 * 1000); + return this.burnRateHistory.filter(h => h.ts > cutoffTs); + } + + /** + * Get time-series cost data for trend charts + */ + getTimeSeries(sinceMinutes: number = 60): CostTimeSeriesPoint[] { + const cutoffTs = (this.lastEventTs || Date.now()) - (sinceMinutes * 60 * 1000); + return this.timeSeries.filter(b => b.ts > cutoffTs); + } + + /** + * Get aggregated time-series for a coarser view (e.g., 5-minute or 15-minute buckets) + */ + getAggregatedTimeSeries( + sinceMinutes: number = 60, + bucketMinutes: number = 5, + ): CostTimeSeriesPoint[] { + const rawPoints = this.getTimeSeries(sinceMinutes); + if (rawPoints.length === 0) return []; + + const bucketMs = bucketMinutes * 60 * 1000; + const buckets = new Map(); + + for (const point of rawPoints) { + const bucketTs = Math.floor(point.ts / bucketMs) * bucketMs; + let existing = buckets.get(bucketTs); + if (!existing) { + existing = { ts: bucketTs, cost: 0, apiCalls: 0, activeWorkers: 0 }; + buckets.set(bucketTs, existing); + } + existing.cost += point.cost; + existing.apiCalls += point.apiCalls; + existing.activeWorkers = Math.max(existing.activeWorkers, point.activeWorkers); + } + + return Array.from(buckets.values()).sort((a, b) => a.ts - b.ts); + } + /** * Get top consumers by cost */ @@ -616,6 +855,11 @@ export class CostTracker { reset(): void { this.workerCosts.clear(); this.costHistory = []; + this.beadCosts.clear(); + this.workerCurrentBead.clear(); + this.timeSeries = []; + this.burnRateHistory = []; + this.smoothedBurnRate = null; this.alerts = []; this.firstEventTs = null; this.lastEventTs = null; diff --git a/src/web/frontend/src/components/CostDashboard.tsx b/src/web/frontend/src/components/CostDashboard.tsx new file mode 100644 index 0000000..0040f10 --- /dev/null +++ b/src/web/frontend/src/components/CostDashboard.tsx @@ -0,0 +1,461 @@ +import React, { useState, useEffect, useCallback } from 'react'; + +// ============================================ +// Cost Dashboard Types +// ============================================ + +interface BudgetStatus { + limit: number; + spent: number; + percentUsed: number; + isOverBudget: boolean; + warningLevel: 'none' | 'warning' | 'critical'; + remaining: number; +} + +interface BurnRate { + costPerMinute: number; + minutesToExhaustion: number | null; + timeToExhaustion: string | null; + projectedTotalCost: number; + windowMinutes: number; + isHighBurnRate: boolean; +} + +interface CostSummary { + totalCostUsd: number; + totalTokens: number; + inputTokens: number; + outputTokens: number; + budget: BudgetStatus; + burnRate: BurnRate; + timeRange: { start: number; end: number }; + workerCount: number; +} + +interface WorkerCostEntry { + workerId: string; + costUsd: number; + inputTokens: number; + outputTokens: number; + totalTokens: number; + apiCalls: number; + currentBead?: string; + lastActivityTs?: number; +} + +interface BeadCostEntry { + beadId: string; + costUsd: number; + inputTokens: number; + outputTokens: number; + apiCalls: number; + workerCount: number; + workers: string[]; + durationMinutes: number; +} + +interface TimeSeriesPoint { + ts: number; + cost: number; + apiCalls: number; + activeWorkers: number; +} + +interface BudgetAlert { + id: string; + type: 'warning' | 'critical' | 'exhausted'; + message: string; + timestamp: number; + spent: number; + limit: number; + burnRate: number; + acknowledged: boolean; +} + +// ============================================ +// Utility Functions +// ============================================ + +function formatCost(usd: number): string { + if (usd < 0.01) return `$${(usd * 100).toFixed(2)}c`; + if (usd < 1) return `$${usd.toFixed(3)}`; + if (usd < 100) return `$${usd.toFixed(2)}`; + return `$${usd.toFixed(0)}`; +} + +function formatTokens(count: number): string { + if (count < 1000) return count.toString(); + if (count < 1_000_000) return `${(count / 1000).toFixed(1)}K`; + return `${(count / 1_000_000).toFixed(2)}M`; +} + +function formatBurnRate(rate: number): string { + if (rate < 0.01) return `$${(rate * 100).toFixed(2)}c/min`; + return `$${rate.toFixed(2)}/min`; +} + +function formatTime(ts: number): string { + return new Date(ts).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); +} + +// ============================================ +// Components +// ============================================ + +interface BudgetProgressBarProps { + spent: number; + limit: number; + percentUsed: number; + warningLevel: string; +} + +const BudgetProgressBar: React.FC = ({ spent, limit, percentUsed, warningLevel }) => { + const getColor = () => { + if (warningLevel === 'critical') return 'var(--error)'; + if (warningLevel === 'warning') return 'var(--warning)'; + return 'var(--success)'; + }; + + return ( +
+
+ {formatCost(spent)} / {formatCost(limit)} + {Math.round(percentUsed)}% +
+
+
+
+
+ ); +}; + +interface MiniChartProps { + data: TimeSeriesPoint[]; + height?: number; + color?: string; +} + +const MiniChart: React.FC = ({ data, height = 60, color = 'var(--accent)' }) => { + if (data.length < 2) { + return
No data yet
; + } + + const maxCost = Math.max(...data.map(d => d.cost), 0.001); + const width = 100; + const step = width / (data.length - 1); + + const points = data.map((d, i) => { + const x = i * step; + const y = height - (d.cost / maxCost) * (height - 4) - 2; + return `${x},${y}`; + }); + + return ( + + + + ); +}; + +interface CostDashboardProps { + visible: boolean; + onClose: () => void; +} + +const CostDashboard: React.FC = ({ visible, onClose }) => { + const [summary, setSummary] = useState(null); + const [workers, setWorkers] = useState([]); + const [beads, setBeads] = useState([]); + const [timeSeries, setTimeSeries] = useState([]); + const [alerts, setAlerts] = useState([]); + const [activeTab, setActiveTab] = useState<'overview' | 'workers' | 'beads' | 'trends'>('overview'); + const [loading, setLoading] = useState(false); + + const fetchCostData = useCallback(async () => { + setLoading(true); + try { + const [summaryRes, workersRes, beadsRes, historyRes, alertsRes] = await Promise.all([ + fetch('/api/cost/summary'), + fetch('/api/cost/workers'), + fetch('/api/cost/beads'), + fetch('/api/cost/history?since=60&bucket=5'), + fetch('/api/cost/alerts'), + ]); + + if (summaryRes.ok) setSummary(await summaryRes.json()); + if (workersRes.ok) { + const data = await workersRes.json(); + setWorkers(data.workers || []); + } + if (beadsRes.ok) { + const data = await beadsRes.json(); + setBeads(data.beads || []); + } + if (historyRes.ok) { + const data = await historyRes.json(); + setTimeSeries(data.timeSeries || []); + } + if (alertsRes.ok) { + const data = await alertsRes.json(); + setAlerts(data.active || []); + } + } catch (err) { + console.error('Failed to fetch cost data:', err); + } finally { + setLoading(false); + } + }, []); + + useEffect(() => { + if (visible) { + fetchCostData(); + const interval = setInterval(fetchCostData, 10000); + return () => clearInterval(interval); + } + }, [visible, fetchCostData]); + + const handleAcknowledge = useCallback(async (alertId: string) => { + try { + await fetch(`/api/cost/alerts/${alertId}/acknowledge`, { method: 'POST' }); + setAlerts(prev => prev.map(a => a.id === alertId ? { ...a, acknowledged: true } : a)); + } catch (err) { + console.error('Failed to acknowledge alert:', err); + } + }, []); + + if (!visible) return null; + + const tabs = [ + { id: 'overview' as const, label: 'Overview' }, + { id: 'workers' as const, label: 'Workers' }, + { id: 'beads' as const, label: 'Tasks' }, + { id: 'trends' as const, label: 'Trends' }, + ]; + + return ( +
+
+
+

Budget Dashboard

+
+ {alerts.filter(a => !a.acknowledged).length > 0 && ( + + {alerts.filter(a => !a.acknowledged).length} alert{alerts.filter(a => !a.acknowledged).length > 1 ? 's' : ''} + + )} + +
+
+ +
+ {tabs.map(tab => ( + + ))} +
+ +
+ {loading && !summary && ( +
Loading cost data...
+ )} + + {activeTab === 'overview' && summary && ( +
+ {/* Session Cost */} +
+
Session Cost
+
{formatCost(summary.totalCostUsd)}
+
+ {formatTokens(summary.totalTokens)} tokens ({formatTokens(summary.inputTokens)} in / {formatTokens(summary.outputTokens)} out) +
+ {summary.budget.limit > 0 && ( + + )} +
+ + {/* Burn Rate */} +
+
Burn Rate
+
+ {formatBurnRate(summary.burnRate.costPerMinute)} +
+
+ Window: {summary.burnRate.windowMinutes} min avg +
+ {summary.burnRate.timeToExhaustion && ( +
+ Time to exhaustion: {summary.burnRate.timeToExhaustion} +
+ )} +
+ Projected session total: {formatCost(summary.burnRate.projectedTotalCost)} +
+
+ + {/* Alerts */} + {alerts.filter(a => !a.acknowledged).length > 0 && ( +
+
Active Alerts
+ {alerts.filter(a => !a.acknowledged).map(alert => ( +
+
+ {alert.type.toUpperCase()} + {new Date(alert.timestamp).toLocaleTimeString()} +
+
+ {formatCost(alert.spent)} / {formatCost(alert.limit)} at {formatBurnRate(alert.burnRate)} +
+ +
+ ))} +
+ )} + + {/* Quick Workers Summary */} +
+
Top Workers ({summary.workerCount} total)
+ {workers.slice(0, 5).map(w => ( +
+ {w.workerId} + {formatCost(w.costUsd)} + {formatTokens(w.totalTokens)} tok +
+ ))} + {workers.length === 0 &&
No cost data yet
} +
+
+ )} + + {activeTab === 'workers' && ( +
+ + + + + + + + + + + + + {workers.map(w => ( + + + + + + + + + ))} + +
WorkerCostInput TokensOutput TokensCallsCurrent Task
{w.workerId}{formatCost(w.costUsd)}{formatTokens(w.inputTokens)}{formatTokens(w.outputTokens)}{w.apiCalls}{w.currentBead || '-'}
+ {workers.length === 0 &&
No worker cost data yet
} +
+ )} + + {activeTab === 'beads' && ( +
+ + + + + + + + + + + + + {beads.map(b => ( + + + + + + + + + ))} + +
TaskCostTokensCallsWorkersDuration
{b.beadId}{formatCost(b.costUsd)}{formatTokens(b.inputTokens + b.outputTokens)}{b.apiCalls}{b.workerCount}{b.durationMinutes < 1 ? '<1m' : `~${Math.round(b.durationMinutes)}m`}
+ {beads.length === 0 &&
No task cost data yet
} +
+ )} + + {activeTab === 'trends' && ( +
+
+
Cost Trend (last 60 min, 5-min buckets)
+ +
+ {timeSeries.length > 0 ? ( + <> + Latest: {formatCost(timeSeries[timeSeries.length - 1].cost)}/bucket + Peak: {formatCost(Math.max(...timeSeries.map(d => d.cost)))}/bucket + Buckets: {timeSeries.length} + + ) : ( + No trend data yet + )} +
+
+ +
+
Cost History
+
+ {timeSeries.slice(-12).reverse().map((point, i) => ( +
+ {formatTime(point.ts)} +
+
d.cost)) || 1)) * 100)}%`, + }} + /> +
+ {formatCost(point.cost)} + {point.activeWorkers}w +
+ ))} + {timeSeries.length === 0 &&
No trend data yet
} +
+
+
+ )} +
+
+
+ ); +}; + +export default CostDashboard; diff --git a/src/web/frontend/src/types.ts b/src/web/frontend/src/types.ts index 0805413..09f3018 100644 --- a/src/web/frontend/src/types.ts +++ b/src/web/frontend/src/types.ts @@ -307,3 +307,91 @@ export interface RecoveryStats { avgConfidence: number; topActionTypes: Array<{ type: RecoveryActionType; count: number }>; } + +// ============================================ +// Fleet Analytics Types +// ============================================ + +export interface DurationBucket { + label: string; + range: string; + count: number; +} + +export interface ModelMetrics { + model: string; + beadsCompleted: number; + avgDurationMs: number; + medianDurationMs: number; + minDurationMs: number; + maxDurationMs: number; + durationBuckets: DurationBucket[]; + shallowCount: number; + shallowPercent: number; +} + +export interface StrandMetrics { + strand: string; + invocations: number; + successCount: number; + failCount: number; + successRate: number; + totalDurationMs: number; + avgDurationMs: number; +} + +export interface ShallowCompletion { + beadId: string; + worker: string; + model: string; + durationMs: number; + timestamp: number; + session: string; +} + +export interface BeadCompletion { + beadId: string; + worker: string; + model: string; + durationMs: number; + timestamp: number; + session: string; + isShallow: boolean; +} + +export interface FleetTimePoint { + hour: string; + activeWorkers: number; + beadsCompleted: number; + timestamp: number; +} + +export interface WorkspaceEntry { + workspace: string; + workerCount: number; + beadCount: number; +} + +export interface ClaimRace { + beadId: string; + workers: string[]; + claimCount: number; +} + +export interface FleetAnalytics { + periodStart: number; + periodEnd: number; + totalEvents: number; + logFiles: string[]; + modelMetrics: ModelMetrics[]; + strandMetrics: StrandMetrics[]; + shallowCompletions: ShallowCompletion[]; + totalCompletions: number; + shallowPercent: number; + claimRaces: ClaimRace[]; + fleetTimeSeries: FleetTimePoint[]; + workerRelaunchCount: number; + workspaceCoverage: WorkspaceEntry[]; + beadsPerHour: number; + beadCompletions: BeadCompletion[]; +} diff --git a/src/workerAnalytics.ts b/src/workerAnalytics.ts index 90050c7..9ef1ac8 100644 --- a/src/workerAnalytics.ts +++ b/src/workerAnalytics.ts @@ -339,6 +339,13 @@ export class WorkerAnalytics implements WorkerAnalyticsStore { this.lastSnapshotTime = 0; } + /** + * Get the underlying CostTracker instance + */ + getCostTracker(): CostTracker { + return this.costTracker; + } + /** * Get analytics summary as formatted string */ diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo index f898f09..53db56d 100644 --- a/tsconfig.tsbuildinfo +++ b/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/commander/typings/index.d.ts","./node_modules/commander/typings/esm.d.mts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/buffer/index.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/blessed/index.d.ts","./src/types.ts","./src/tui/utils/costTracking.ts","./src/errorGrouping.ts","./src/sessionDigest.ts","./node_modules/@types/better-sqlite3/index.d.ts","./src/historicalStore.ts","./src/workerAnalytics.ts","./src/semanticNarrative.ts","./src/index.ts","./src/parser.ts","./src/tailer.ts","./src/tui/utils/fileAnomalyDetection.ts","./src/tui/utils/recoveryPlaybook.ts","./src/crossReferenceManager.ts","./src/store.ts","./src/tui/utils/theme.ts","./src/tui/utils/colors.ts","./src/tui/components/WorkerGrid.ts","./src/tui/components/ActivityStream.ts","./src/tui/components/WorkerDetail.ts","./src/tui/utils/fuzzyMatch.ts","./src/tui/components/CommandPalette.ts","./src/tui/components/FileHeatmap.ts","./src/tui/dagUtils.ts","./src/tui/components/DependencyDag.ts","./src/tui/components/SessionReplay.ts","./src/tui/components/ErrorGroupPanel.ts","./src/tui/components/SessionDigest.ts","./src/tui/components/CollisionAlert.ts","./src/tui/utils/prPreview.ts","./src/tui/components/GitIntegration.ts","./src/tui/components/SemanticNarrativePanel.ts","./src/tui/components/WorkerAnalyticsPanel.ts","./src/tui/components/FileContextPanel.ts","./src/gitParser.ts","./src/focusPresets.ts","./src/tui/app.ts","./src/tui/utils/keyboard.ts","./src/tui/utils/stuckDetection.ts","./src/tui/components/FilterPanel.ts","./src/tui/components/DiffView.ts","./src/tui/components/RecoveryPanel.ts","./src/tui/components/ConversationTranscript.ts","./src/tui/components/BudgetAlertPanel.ts","./src/tui/components/index.ts","./src/tui/index.ts","./node_modules/@types/send/index.d.ts","./node_modules/@types/qs/index.d.ts","./node_modules/@types/range-parser/index.d.ts","./node_modules/@types/express-serve-static-core/index.d.ts","./node_modules/@types/http-errors/index.d.ts","./node_modules/@types/serve-static/index.d.ts","./node_modules/@types/connect/index.d.ts","./node_modules/@types/body-parser/index.d.ts","./node_modules/@types/express/index.d.ts","./node_modules/@types/ws/index.d.mts","./src/web/server.ts","./src/web/index.ts","./src/cli.ts","./src/dagUtils.ts","./node_modules/@vitest/pretty-format/dist/index.d.ts","./node_modules/@vitest/utils/dist/display.d.ts","./node_modules/@vitest/utils/dist/types.d.ts","./node_modules/@vitest/utils/dist/helpers.d.ts","./node_modules/@vitest/utils/dist/timers.d.ts","./node_modules/@vitest/utils/dist/index.d.ts","./node_modules/@vitest/runner/dist/tasks.d-C7UxawJ9.d.ts","./node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","./node_modules/@vitest/utils/dist/diff.d.ts","./node_modules/@vitest/runner/dist/types.d.ts","./node_modules/@vitest/runner/dist/index.d.ts","./node_modules/vitest/dist/chunks/traces.d.402V_yFI.d.ts","./node_modules/vite/types/hmrPayload.d.ts","./node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","./node_modules/vite/types/customEvent.d.ts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/@vitest/snapshot/dist/environment.d-DHdQ1Csl.d.ts","./node_modules/@vitest/snapshot/dist/rawSnapshot.d-lFsMJFUd.d.ts","./node_modules/@vitest/snapshot/dist/index.d.ts","./node_modules/vitest/dist/chunks/config.d.Cy95HiCx.d.ts","./node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","./node_modules/vitest/dist/chunks/rpc.d.RH3apGEf.d.ts","./node_modules/vitest/dist/chunks/worker.d.Dyxm8DEL.d.ts","./node_modules/vitest/dist/chunks/browser.d.ChKACdzH.d.ts","./node_modules/@vitest/spy/dist/index.d.ts","./node_modules/tinyrainbow/dist/index.d.ts","./node_modules/@standard-schema/spec/dist/index.d.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@vitest/expect/dist/index.d.ts","./node_modules/@vitest/runner/dist/utils.d.ts","./node_modules/tinybench/dist/index.d.ts","./node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","./node_modules/vitest/dist/chunks/global.d.B15mdLcR.d.ts","./node_modules/vitest/dist/chunks/suite.d.BJWk38HB.d.ts","./node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","./node_modules/expect-type/dist/utils.d.ts","./node_modules/expect-type/dist/overloads.d.ts","./node_modules/expect-type/dist/branding.d.ts","./node_modules/expect-type/dist/messages.d.ts","./node_modules/expect-type/dist/index.d.ts","./node_modules/vitest/dist/index.d.ts","./src/errorGrouping.test.ts","./src/fileHeatmap.test.ts","./src/focusPresets.test.ts","./src/gitParser.test.ts","./src/historicalStore.test.ts","./src/needleFabric.integration.test.ts","./src/parser.test.ts","./src/semanticNarrative.test.ts","./src/sessionDigest.test.ts","./src/store.test.ts","./src/tailer.test.ts","./src/workerAnalytics.test.ts","./src/tui/app.test.ts","./src/tui/dagUtils.test.ts","./src/tui/keyboardNavigation.e2e.test.ts","./src/tui/logTailing.e2e.test.ts","./src/tui/regression.test.ts","./src/tui/components/ActivityStream.e2e.test.ts","./src/tui/components/ActivityStream.test.ts","./src/tui/components/CollisionAlert.test.ts","./src/tui/components/CommandPalette.test.ts","./src/tui/components/ConversationTranscript.test.ts","./src/tui/components/CrossReferencePanel.ts","./src/tui/components/DependencyDag.test.ts","./src/tui/components/ErrorGroupPanel.test.ts","./src/tui/components/FileHeatmap.test.ts","./src/tui/components/GitIntegration.test.ts","./src/tui/components/SessionReplay.test.ts","./src/tui/components/WorkerGrid.test.ts","./src/tui/utils/fileAnomalyDetection.test.ts","./src/utils/replayExport.ts","./src/web/server.test.ts","./node_modules/vitest/globals.d.ts"],"fileIdsList":[[65,112],[65,112,160],[65,112,113,123,142,160],[65,112,126,160,214],[65,112,250,251],[65,112,126,160],[65,112,123,126,160,208,209,210],[65,112,211,213,215],[65,109,112],[65,111,112],[112],[65,112,117,145],[65,112,113,118,123,131,142,153],[65,112,113,114,123,131],[60,61,62,65,112],[65,112,115,154],[65,112,116,117,124,132],[65,112,117,142,150],[65,112,118,120,123,131],[65,111,112,119],[65,112,120,121],[65,112,122,123],[65,111,112,123],[65,112,123,124,125,142,153],[65,112,123,124,125,138,142,145],[65,112,120,123,126,131,142,153],[65,112,123,124,126,127,131,142,150,153],[65,112,126,128,142,150,153],[63,64,65,66,67,68,69,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159],[65,112,123,129],[65,112,130,153,158],[65,112,120,123,131,142],[65,112,132],[65,112,133],[65,111,112,134],[65,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159],[65,112,136],[65,112,137],[65,112,123,138,139],[65,112,138,140,154,156],[65,112,123,142,143,145],[65,112,144,145],[65,112,142,143],[65,112,145],[65,112,146],[65,109,112,142,147],[65,112,123,148,149],[65,112,148,149],[65,112,117,131,142,150],[65,112,151],[65,112,131,152],[65,112,126,137,153],[65,112,117,154],[65,112,142,155],[65,112,130,156],[65,112,157],[65,107,112],[65,107,112,123,125,134,142,145,153,156,158],[65,112,142,159],[65,112,124,142,160],[65,112,126,160,212],[65,112,123,126,128,131,142,150,153,159,160],[65,112,223,227,230,232,247,248,249,252,257],[65,112,227,228,230,231],[65,112,227],[65,112,227,228,230],[65,112,227,228],[65,112,222,239,240],[65,112,222,239],[65,112,222,229],[65,112,222],[65,112,224],[65,112,222,223,224,225,226],[58,65,112],[65,112,260,261],[65,112,260,261,262,263],[65,112,260,262],[65,112,260],[65,79,83,112,153],[65,79,112,142,153],[65,74,112],[65,76,79,112,150,153],[65,112,131,150],[65,74,112,160],[65,76,79,112,131,153],[65,71,72,75,78,112,123,142,153],[65,79,86,112],[65,71,77,112],[65,79,100,101,112],[65,75,79,112,145,153,160],[65,100,112,160],[65,73,74,112,160],[65,79,112],[65,73,74,75,76,77,78,79,80,81,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101,102,103,104,105,106,112],[65,79,94,112],[65,79,86,87,112],[65,77,79,87,88,112],[65,78,112],[65,71,74,79,112],[65,79,83,87,88,112],[65,83,112],[65,77,79,82,112,153],[65,71,76,79,86,112],[65,112,142],[65,74,79,100,112,158,160],[65,112,234],[65,112,234,235,236,237],[65,112,236],[65,112,232,254,255,257],[65,112,232,233,245,257],[65,112,222,230,232,241,257],[65,112,238],[65,112,222,232,241,244,253,256,257],[65,112,232,233,238,241,257],[65,112,232,254,255,256,257],[65,112,232,238,242,243,244,257],[65,112,222,227,230,232,233,238,241,242,243,244,245,246,247,253,254,255,256,257,258,259,264],[65,112,265],[59,65,112,124,161,162,163,165,170,171,172,176,187,207,219],[65,112,162],[65,112,113,162],[65,112,162,164,265],[65,112,162,176,265],[65,112,197,265],[65,112,124,132,133],[65,112,162,196,265],[65,112,124,132,133,167,265],[65,112,124,132,133,162,166],[65,112,162,165,167,168,169],[65,112,162,171,265],[65,112,162,169,265],[65,112,162,163,165,176,265],[65,112,162,163,164],[65,112,162,164,167,168,169,173,174,175],[65,112,124,132,133,172,265],[65,112,123,124,133,162,171],[65,112,161,162,176,198,265],[65,112,161,162,164,176,178,179,180,181,183,184,186,187,188,189,190,192,193,194,195,196,197],[65,112,161,162,180,265],[65,112,161,162,178],[65,112,161,163,178],[65,112,161,162,190,265],[65,112,124,161,183,265],[65,112,124,132,133,161,178,182],[65,112,161,162,204,265],[65,112,161,162,175,178],[65,112,161,162,185,186,265],[65,112,161,162,178,185],[65,112,161,178],[65,112,161,162,188,265],[65,112,161,162,184,265],[65,112,161,162,173,178],[65,112,124,132,133,161,178,180],[65,112,162,192,265],[65,112,161,162,178,191],[65,112,162,174,178],[65,112,161,162,169,178],[65,112,124,133,161,162,178],[65,112,124,161,162,187,265],[65,112,123,124,161,162,171,178],[65,112,161,162,168,178],[65,112,161,162,179,265],[65,112,179,180,181,183,184,186,187,188,189,192,193,194,195,201,202,203,204,205],[65,112,113,124,133,162,185,265],[65,112,113,124,133,162],[65,112,163,178,198,199,200,206],[65,112,124,132,133,161,162,172,180,265],[65,112,177],[65,112,162,173,265],[65,112,162,167],[65,112,218],[65,112,162,175,176,217,218,265],[65,112,123,126,133,153,162,171,176,185,216,217],[65,112,162,163,168,265],[65,112,162,163,167]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a722a71d8f3cb0028857b12579c7eca55acc76bf34e5db7eaf6fe817b985f9c3","impliedFormat":1},{"version":"b124c0624b15412ace7d54644ade38d7a69db7e25488a1a4d2a8df6e11696538","impliedFormat":99},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"4b34bdb6f29a4347b7db9c0f8622686035fe25adb1c9e927acd8d22a2cbb6ccb","impliedFormat":1},{"version":"714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"27fdb0da0daf3b337c5530c5f266efe046a6ceb606e395b346974e4360c36419","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"47ab634529c5955b6ad793474ae188fce3e6163e3a3fb5edd7e0e48f14435333","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"fad4e3c207fe23922d0b2d06b01acbfb9714c4f2685cf80fd384c8a100c82fd0","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"05db535df8bdc30d9116fe754a3473d1b6479afbc14ae8eb18b605c62677d518","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"a4cb76c6f4b8356d14d6cf5c05e1e3fbc74007b160a00f6511a8c39295f08c42","impliedFormat":1},{"version":"7232fd65adfefe68d0fd2b6cd42ed2aa69da51dbcc0fab814f0d18e94459eae4","signature":"579ca7c3d5e8cee2a7f3f5470de3a198062d9e2619560807d16a7ba762440d46","impliedFormat":99},{"version":"c6ce484b45f62712c6b5d60a9108512d032c45480285ce4e1d6b98b7db361739","signature":"965be969e2a11bb4f276d729cfdf816f219ad6865a6af31ccdd544697aaba11e","impliedFormat":99},{"version":"34ce5e8cd31f62444bafa60f4b37979b6b9f4069e304b29d2f1f720d76159b0e","signature":"c230c2f34cb2f5e054057e07ec47c5be3f262fbcc0794050b72dfafe03c6e9d4","impliedFormat":99},{"version":"8a4d0a6932f6297bae8ff9fb23723dd3600352ab3fe204b5dd63ee93bfc03fa4","signature":"ccd567b3afe420a8faeda107890100102f3a2422b818d28acfde1820d6973d33","impliedFormat":99},{"version":"c2a6a737189ced24ffe0634e9239b087e4c26378d0490f95141b9b9b042b746c","impliedFormat":1},{"version":"ca56013e6c3fc831680a2715e051fa40d4e0e86050be21167533f57aa87b8018","signature":"d02ab6693dd6f4ad2a8bcc8a419d255624647b0ec277301baa902faa0b2b3008","impliedFormat":99},{"version":"c3f40a5ac78048cd67dddf121c62c9fa58d255e163cedb1faa6b749036e1ff75","signature":"ee5e7963a6e500317f33f9fd3249f083995b9e6f559f07bc897438fe5fad30a3","impliedFormat":99},{"version":"6740695ccdb7e3c05a364fa9063b627bb461663947d01b9e992c983ed2909049","signature":"3428ca790804a8a7b77cf08f30e1a811943cf9f769a1e1e7fafd0b36ba5732bf","impliedFormat":99},{"version":"0829fb787d6b6bf344aeff62e00688d4b61b652b9b60acff17e5bea77f2d74aa","signature":"f335d9f42c6a2b8263601169d0bb13e4e6515d200b38c11f55ee364d9c8c13c1","impliedFormat":99},{"version":"be8c51b5650dda1137d0d8facac57d4ef8fac85cbbfb3772ed4f256b1d7d46c1","signature":"c2dd4f0df1c1754b39de85739ed6c331ed58f1c6273a1430e7d4e77a097616c2","impliedFormat":99},{"version":"3fda678f063a88d5c3405f323340647b3828b4b41861c3023d1c24badb96d17b","signature":"15553593ae2e339efdd43ea71967213bef1e96f6c9ecdf53e627e82026762931","impliedFormat":99},{"version":"8f4e569846e00a1b529bd0e7820e49ef85b1115855023701ee3dcdd6ebf87124","signature":"693eaabd297b6f4da3581dec9e2b50338dc0fa248097eea5b07812e5ae010271","impliedFormat":99},{"version":"74868e76a8f63b1e57dd69bacaf2a78b4b733a423c352e415e9cf731a9eeee35","signature":"b9a4565ab4585426ea7462ab5e9fa70be27045d05b312ae3b9ce4ba0859c2f6c","impliedFormat":99},{"version":"b1ca6200de8ddaa59a8934ea1f0f97979e072fcb5d8dfbb000b7f57552be024a","signature":"3a229106c608767d05b0757e1f3a28220417d1ae0b2157b7adb770acfa745506","impliedFormat":99},{"version":"8e47da6add82ece828f83759b2517a3a6e705960f19ef7c5b0763e6a1ff700bd","signature":"2b27fc62477378060520e4aa2f702bba2122fff217e27c5b44c05e1f938d8f10","impliedFormat":99},{"version":"a38f5f914c05a86d7d92258179191d9045870e6de931de8922ad085ca8c585e3","signature":"6ea8143a5603044d11a2bc6bf8b0c251bd3ccab709ed7183b2c0c6852051303e","impliedFormat":99},{"version":"7c46d1a86bd5b49d827fd0c12576c6971a4f93402adf0ddffb26db370a00a228","signature":"a32172f7a95825f7a3375bf2c497ab6e360076f50979592e06b9843342ade559","impliedFormat":99},{"version":"ddb2dc5cf4905306565d1040dd69b264dda4be733ca394b70fd011b7a39543a3","signature":"f378ed7136389c510081737f1d04525568c9551b0c7d9345ce241fd925585f14","impliedFormat":99},{"version":"25736572910910852d9de560eee192682af499e1d5904a7cd436d9fa58458bd3","signature":"269cc8523832256f45c2be25fbb406140a8e3a9e2f2f438ef534435119b68b69","impliedFormat":99},{"version":"f0fbecfab11d5fb02140df887940e2ed5dd8586227c000384821e5483d2d0f5b","signature":"1d0bb4b55c05a571953a86010fa34250a30b9ee9cd3ebd65bf0a1259bddbab4d","impliedFormat":99},{"version":"9ccf200e3b8976f6d2b178d1ed0e17f5379702f0f54f45d9f8464606d1aff0ef","signature":"873ad50d2cb9b0adb8d677c444cf1e139c2f9bc43354feb3a98f2aa1a652039c","impliedFormat":99},{"version":"487cbba4e661b4943da494c54571911a7493dd3a2bc6670f7353d4817d9ae79d","signature":"70998ddbb95ad5ee1f128521e5d8e0afe9d748b0860bd0792e8595c4ba9f68ef","impliedFormat":99},{"version":"77005025f251cc99d4d609e2531437a1a525bb76c568907dd07d72b3eabf4c18","signature":"440ca3519b39098d6f4e1198297318772681ab96eb1162f881885c11eb5890ad","impliedFormat":99},{"version":"91b5b4f160d41e15949fde61c313effbf0409c5d24e8e03977964e525453570c","signature":"99effefec71fb6f7148e2884568a74ad9e20f4ebd45c4c227a66e8e854ae8ab5","impliedFormat":99},{"version":"6db8174f711e17de6795e49d2725b6e8e1085a0b2d5140aa6fa71d47e744f978","signature":"7be7303457d003425dd9235f6d9b6d619a7b3f3b950d33a0a2b84b3a93b04ebe","impliedFormat":99},{"version":"2167173f1b9e418fb75f7ea1c22859a5fda9368af6f89b629e313b2f5b11f3f9","signature":"dcd663a2d7530c45aab939e6a897c6211000d4244779d003230daf67a08eb324","impliedFormat":99},{"version":"7ceec53049aac5f3eab7336d89ad0cc8747f4bf66a9a0bb115369685df92f937","signature":"61b92494c9376151d74de2381b60d8cab20b8aa1eb1826635af547ffb686ae34","impliedFormat":99},{"version":"05eddfaac029d1d031129ed5c32a1e1c78dde0c37d55fe9c9cbcb5ba94a46815","signature":"046657816dba1196af8da6152c8502b82e93dc2ce492aecf18c9bccf45b70965","impliedFormat":99},{"version":"13ba4d815f0f31ec6fa41dc16b0d869acd64b5295e69a1d298226ac39883a32d","signature":"9cb4a0cb4b4da94a99fea62c6aa827e29b901accc4ac034cb31f624294217d09","impliedFormat":99},{"version":"6a2a27b33f7fda3b61f557b71acceddd7f650857304025053a932ccad5797924","signature":"73a05ca11359eabf208a3d46828e2e5208810fed5c9b5cbdc3215675730cfdd8","impliedFormat":99},{"version":"05f9c4e86a0c443747a5153d874e6701693382a12f83db542f1d30f6234cfbd1","signature":"0ed720c7b2322339aa6a114805c18efe73ae57479ae53cba7caf7026538d6681","impliedFormat":99},{"version":"1d828a05fd126377de994edcdd277edd18353f55f7c5d8b91b9ff3c5db3665c0","signature":"58fe09f7b921f82839219d8d7bf5bef04f154da06ed92c426cedfbd9db826969","impliedFormat":99},{"version":"436134fa76d181810c6010a0006a40659e29ee556bac25b8ad8fc58e714b27db","signature":"a6d8487782a888bbefb0b84fb2cc6730d2eef1bb9d0b059fd92fa522fbde1d1e","impliedFormat":99},{"version":"a85e3f3509f27cc1589c1fc7ce674db2a2948c049e9eed8d3a151bee7ada1c21","signature":"489195abfec5de3da8d406e1dbaa536bb516737214511ff49825408c794dcdfd","impliedFormat":99},{"version":"c3731e08ab91b00b22f9a6b6461784ef8527bbc54c9343fe104c3dd159514e75","signature":"9dbd5d0543de0f687885c8895330527f3851c1c972f047592faf91e6301c0387","impliedFormat":99},{"version":"169cc2cc9a98e3b0bccec95b34119280d92095a81291986d27f66d4a31581de6","signature":"89e867bcaabce5c2fdbc61d15938086848c646152e53255aaddb5fc2ca780b30","impliedFormat":99},{"version":"94f284a97b17835ccffce38ff02d30ad8e001c69c600e0915d11e7188c530475","signature":"bfb2397f5107a20cb861029ed65e08ba7d84c40ea2ca58e5d447127ad211d570","impliedFormat":99},{"version":"ce661536c5083f113a4ed963d47acac3ad48cfac5f61da373c2c2a7c1b3234c3","signature":"960a48457fec96e2d1a31970d7898e39141266e8c8dc6ef83ec6d736af574824","impliedFormat":99},{"version":"0437152e468c22840ee9e184a4bcbcd494a9042694def1e0d0e8128fa3c9c76a","signature":"eecf7038a027a976dd44857aaf8441507a25269c5474bcc76c86cba55a9aad24","impliedFormat":99},{"version":"9b414c03bc3eb1d600ecdb99e00a1108fae58b464cc439b1bdb1850bc9c3c28f","signature":"58c892b9d265053b132e2d023e7bdf33912d1eae8e70c10c7ee90ad541dad80b","impliedFormat":99},{"version":"c1a018d6f30047192e24c5a648b9072997942aa0c8632656a392040519d86f99","signature":"fcc39a70c0ddceaa57a26c0f9944411ec8e79d99ead5f0b4646709dbfd24475b","impliedFormat":99},{"version":"f94289d9134aa4fee476b7cb863440837116447e616ead1dedd7ea9a3a28b58d","signature":"84303401bd1e1ea82faf257ba3d84f35d80ef8f6c7f378fcf453524aa7303567","impliedFormat":99},{"version":"9285b9b7cbf461542bb8fc53eac8cc5c56e4c463d89249c2aaa0a21ea8bc14ac","signature":"31b9aa801fd52f77c6e5c2f2c1e470e1be222d903e952b270c375cb8ccfd1b7f","impliedFormat":99},{"version":"64084333de107cb15374906ed6ec0c3dd108c734b4fcc8e7e6cd64d778480e6e","signature":"dd7177ba2b89c2162a1910ff418091be04341522d48896322ca5e8a9d7d527e5","impliedFormat":99},{"version":"286bc6269a96acd2842759208eda8753de4a5fe6a1666772bfb53fa19ce0d670","signature":"997b0058bb3e15a944b084d3d3322c455e8685adc414820d9fcd4e0fea29dca3","impliedFormat":99},{"version":"d9ffeccec061cdf206608d148a8ca581ce3d56d224a4e50cadefdbb17db418ba","signature":"cbfbed4895ed6832b3b2e39beefa7513668501b4d40c85150f9d3da583f73909","impliedFormat":99},{"version":"d34aa8df2d0b18fb56b1d772ff9b3c7aea7256cf0d692f969be6e1d27b74d660","impliedFormat":1},{"version":"baac9896d29bcc55391d769e408ff400d61273d832dd500f21de766205255acb","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"6823ccc7b5b77bbf898d878dbcad18aa45e0fa96bdd0abd0de98d514845d9ed9","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"168d88e14e0d81fe170e0dadd38ae9d217476c11435ea640ddb9b7382bdb6c1f","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"8e04cf0688e0d921111659c2b55851957017148fa7b977b02727477d155b3c47","impliedFormat":1},{"version":"316f1486e15cbf7896425f0a16dfe12d447dd57cfb3244b8b119c77df870858f","impliedFormat":99},{"version":"42fe4ab14ca5f249c6c36d2327352daf9f75a3be9829913fbbd3b79e524263bd","signature":"481db2f63d57f4245087aa692c76c8069e3509c841cfd79f95ba25093613aa0c","impliedFormat":99},{"version":"fe0c119587fec41cc1c40c5727cf34b4d42ccece7c5a6d85fb3f117dbd25f3f2","signature":"de0562e1297ae9acf747b4614b60820dd94f4b685802471163840e00e020147f","impliedFormat":99},{"version":"d26cf38ffbeea74c785e529e4cc69a20a0ca0291f808eae77a9adf6028de5759","signature":"3fa7a0a99986764a4aa6831ae9c24cd300b43be50b1bf7fd57f1ba70f0f2654d","impliedFormat":99},{"version":"5f2c6d9965c9db5af2716972c71d5ffe41ba8cfee54c7996114dad1ab40722dd","signature":"932119d01c9fc460f1f7167625df270341ce783feea49ec619e27da072da5503","impliedFormat":99},{"version":"acfb723d81eda39156251aed414c553294870bf53062429ebfcfba8a68cb4753","impliedFormat":99},{"version":"fa69a90381c2f85889722a911a732a5ee3596dc3acecda8a9aa2fa89b9615d8d","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"57e9e1b0911874c62d743af24b5d56032759846533641d550b12a45ff404bf07","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"854cd3a3375ffc4e7a92b2168dd065d7ff2614b43341038a65cca865a44c00c5","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"3b0a56d056d81a011e484b9c05d5e430711aaecd561a788bad1d0498aad782c7","impliedFormat":99},{"version":"2f863ee9b873a65d9c3338ea7aaddbdb41a9673f062f06983d712bd01c25dc6b","impliedFormat":99},{"version":"67aa128c2bc170b93794f191feffc65a4b33e878db211cfcb7658c4b72f7a1f5","impliedFormat":99},{"version":"ac3d263474022e9a14c43f588f485d549641d839b159ecc971978b90f34bdf6b","impliedFormat":99},{"version":"a7ca8df4f2931bef2aa4118078584d84a0b16539598eaadf7dce9104dfaa381c","impliedFormat":1},{"version":"10073cdcf56982064c5337787cc59b79586131e1b28c106ede5bff362f912b70","impliedFormat":99},{"version":"72950913f4900b680f44d8cab6dd1ea0311698fc1eefb014eb9cdfc37ac4a734","impliedFormat":1},{"version":"36977c14a7f7bfc8c0426ae4343875689949fb699f3f84ecbe5b300ebf9a2c55","impliedFormat":1},{"version":"ff0a83c9a0489a627e264ffcb63f2264b935b20a502afa3a018848139e3d8575","impliedFormat":99},{"version":"324ac98294dab54fbd580c7d0e707d94506d7b2c3d5efe981a8495f02cf9ad96","impliedFormat":99},{"version":"9ec72eb493ff209b470467e24264116b6a8616484bca438091433a545dfba17e","impliedFormat":99},{"version":"c35b8117804c639c53c87f2c23e0c786df61d552e513bd5179f5b88e29964838","impliedFormat":99},{"version":"c609331c6ed4ad4af54e101088c6a4dcb48f8db7b0b97e44a6efeb130f4331bd","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"67acaedb46832d66c15f1b09fb7b6a0b7f41bdbf8eaa586ec70459b3e8896eb9","impliedFormat":99},{"version":"4535ab977ee871e956eb7bebe2db5de79f5d5ec7dfbbf1d35e08f4a2d6630dac","impliedFormat":99},{"version":"b79b5ed99f26ffb2f8ae4bdcc4b34a9542197dc3fa96cfb425c2a81e618cff28","impliedFormat":99},{"version":"31fd7c12f6e27154efb52a916b872509a771880f3b20f2dfd045785c13aa813f","impliedFormat":99},{"version":"b481de4ab5379bd481ca12fc0b255cdc47341629a22c240a89cdb4e209522be2","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"4e258d11c899cb9ff36b4b5c53df59cf4a5ccae9a9931529686e77431e0a3518","affectsGlobalScope":true,"impliedFormat":99},{"version":"a5ae67a67f786ffe92d34b55467a40fb50fb0093e92388cadce6168fa42690fd","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"a534e61c2f06a147d97aebad720db97dffd8066b7142212e46bcbcdcb640b81a","impliedFormat":99},{"version":"ddf569d04470a4d629090d43a16735185001f3fcf0ae036ead99f2ceab62be48","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"53c448183c7177c83d3eb0b40824cf8952721a6584cf22052adc24f778986732","impliedFormat":99},{"version":"4f3ee012c4a6b3e2320c02472147cd459cc5e6e97ed9512b20fc06dae09e4e3e","signature":"403ad65a4002e9aee37f04cdcfec35d962d121426201ecd1d78195d37342deb7","impliedFormat":99},{"version":"a507debe506ee1e4c3afa28da1c1a8b351a40ee3a3bb7cae7d6178d7afbc18c8","signature":"40cf9a45178e5d8d3f75bfd29278e8e1fd72f2b45f6c2546d0f240c0d9eda6ac","impliedFormat":99},{"version":"7eca742a4514b40148f42deecd614378ebade8a821b8a4ea9355a215585b8a06","signature":"22d436dd60601e5384362216214982a030d4404f00dc3953b53847e3bfff32c4","impliedFormat":99},{"version":"429170598dfb6ba02375c124fe166ba84c76510ea12d3a7ee5c3329d457c0520","signature":"f8142723e21e5815eba73ddd3caefbfa70e8cd573206e29afeff0e0509eabff7","impliedFormat":99},{"version":"6a4baf38655cbdb95d149d7daa9dc314f50bc76a92ca8673a5b88923549bf5bb","signature":"9e85a9d6a16ef664fe3598e6fe7d802a01267b01fd64722647bc70aaf1e91fab","impliedFormat":99},{"version":"7b9ec0bf9f4425319cfb4b66b4293ca8247eba08025315a230170cf59ddaa831","signature":"adb6950e01e308e34977fafa97f885d4283dfc87da5b8d4a18094c88a2949e73","impliedFormat":99},{"version":"5a97a99631f3ee5318480a1860a1ce1b64c4fb2584a56cc34edfbd03eb9750d1","signature":"b6831e080e60b84a24614a97a346adc8797198cd60394a0366e72c75e4374913","impliedFormat":99},{"version":"1718e448f0c2d6be92bf152f1949ac538762cd8b552687b86e7b456ef1d5bbe8","signature":"639915bab3e96ee6eb91d79cc9ad9dc02b35db416cebc1146c7405b12a4b5d3f","impliedFormat":99},{"version":"cd2f31b32a5dc243c2eded998011e16965207b5e26550c84c94e54d110806e90","signature":"d4d2a14b28e68da295c4151718dc9d8052f106fd74c5aaa6b5b9473ce0998a06","impliedFormat":99},{"version":"1323ca7f355c03d567dab508d953f8dde379d60a87cf6a0c2a0f78fdb83a778d","signature":"dd4c9eee30bd732383a408edbacb0e351cde7529dca13c898338e7d20fcaa8f3","impliedFormat":99},{"version":"ebd89e7eff37f9eec8bd34caf300ce002342ed3ff788b534080edfe7b1f7dd67","signature":"a2036e9d5d7d56c883b0503f25a9985b2d98c117bcccf10190d7a24ec672632e","impliedFormat":99},{"version":"e8b085149df86872ad19325c110eb78ed69fc97ff416c2c260d95d864c567702","signature":"93a139a2afcfa16a9964ce8f40a094754f1604da7c2cd1eefc5d68d5724b29a2","impliedFormat":99},{"version":"3eb15e191d1df2eb40f9c05c62e02368272d5d88707cd4cf1d7eda105a01b3e5","signature":"88ae7ef7a53a6a730e45a0513b210b028daf2e553081b6fb7bc9e50f8b1f211f","impliedFormat":99},{"version":"d8684e98ba0418afd1b782329460eb65ec95cb9a60fd8fbf5510480af44b64b7","signature":"ea1d92864d9387abe5deb369bcf3f89f01331f8f739b887b3983c1324ae8d541","impliedFormat":99},{"version":"a463abf1aa3aaded7f16dccc940320d15791b51400c5634bebfa1cf57900f6fc","signature":"3e1b4f4957a6ef923ed7d8a72f127ba1c873657f358657e7c08a03401025a8e0","impliedFormat":99},{"version":"85230cee9df28ef0bbf13cee58be8fe0c6c9d9fccb0130e229bdb6204293dded","signature":"0bc42f0fca4e29be4e7274ce70054e3d3db04efdbcd6a89a5b39d811f50a605e","impliedFormat":99},{"version":"94d2fa5c238a1399322e90725d977d956b97def749afd7db40142bbd8574d61f","signature":"b04f4af31727a328bd73b5b89ccd00abf07656e3818ca659e538910acfdaa2e9","impliedFormat":99},{"version":"02fb7a2b24d621449ca1804b74278f193b2e31fcd437d60e9b7fca7340bc4cd0","signature":"ef5e6aadfddbddb3498f7d55e21f7955510f2c8a933a8ebfb5368ebf8523cd5d","impliedFormat":99},{"version":"b30c60ef248e0cb0ebc076b5bee1902ffcbdc7a45c2facb65ae7aebe6d78b068","signature":"b99e02996cd8dae72509a546c254754222a9ab9dec11debc586faea5a8b1ecd7","impliedFormat":99},{"version":"dd53b9f4c63902e452b229359fc19f7edbd69568f763873e805dcf13e1566b5c","signature":"b5429a388e7161c732cace640188ca218c4f69579de1ab75bda6e9912d9db870","impliedFormat":99},{"version":"4f85ee672c268d8d0e5e18e9ce1d681e8fa05c68c4b2c6058633648cad877ca3","signature":"7cddd7fb2fac7f443b737ab2b6257a0793568cdb8182861e7df185c1e346b55c","impliedFormat":99},{"version":"c447b7ef6046f6a24c97b33bde97d0042ba076348e92aeae3af75d74d869b672","signature":"e288bd0b76522f850673599769bcc3cbc639148ed58f3b5e66d91de4a6b1afaa","impliedFormat":99},{"version":"c6db3d8f682f91847da8a4634290ddbc2789ffcb248574271296b747fce07075","signature":"85de8627176a919f87e013b43d7933f3b4fb537633ecf6c3b554ab34134f49b8","impliedFormat":99},{"version":"6f85223ae6526bd3e2fdaa06b618b31b338f8e319ec618be4fa762bdf80cd12a","signature":"b3e6f6a5d876e5d42754a296fc3e88a9f3ea2ab95f24ea6032880ef50d7d91d1","impliedFormat":99},{"version":"412b8623940d78241be26f57dcc3ea67749929c72b68dddc322b9c10e6b652f4","signature":"d012da967f3f54aced37bdeecf907360b65321873aceceb1e032617c47bd22c5","impliedFormat":99},{"version":"f5333a4c1425c1f198ca25ba2bceb4d803c6a6e3c12e71ed6df4c01e37999dc8","signature":"b1b256a2e6f150bedcde3e364224a6bc452425e03c0ffba147350a840897f6b3","impliedFormat":99},{"version":"43db1f371aa5f088f3318120061cea08b2a781d322f85c68f9b459af701dcab4","signature":"5f1786d6d5a796a6cab1f8d67e576a65a40723a2fa1b06ef2da1b5b37d9cd949","impliedFormat":99},{"version":"48ea49cf486ffd35940c2aec50fded9cd7abeda902f8d1cd0659fb2fd9f8c7cb","signature":"06e188141a37ade0a0061de5ef68a46933ed746a71f84fbe6ac0b18f3811931d","impliedFormat":99},{"version":"7991077cacdc2843a4c2c33d21a6a179b2aede095e44601006ca126731126024","signature":"52f1cbb220696bc78ef8a678e4fa2dc261ba02098e488b1d67be5aa4d14ecb07","impliedFormat":99},{"version":"4a0cdd0ca6c3ca3de92dd758e27782154653b4b80907f6917b26b4c3dcf96020","signature":"657f4957a93354dd787ba02196638f3324ce030f09e73727bb8dc354e2fdf8ca","impliedFormat":99},{"version":"71a90423368831e2f810acf42c19d6b72ea60de420957ecdb1b5ccf55c78fce0","signature":"73b7815efade6ddc95c283a8f8c6776332bbe44979b09c3a31d4b700112f501a","impliedFormat":99},{"version":"6aeb3ce7c2b71eca018c704114a389d7828a6137e2dede4b03c8125c64eab7bb","signature":"e718cfab8443ea4d7eb4fee977f0b484db406ec12c74155f45aa1adaea2c68f6","impliedFormat":99},{"version":"0a5bc32362b0559b9bcf0a6a83136c4442dbbd0edecd671538a5e03454b6dff0","affectsGlobalScope":true,"impliedFormat":99}],"root":[[162,165],[167,207],[218,221],[266,297]],"options":{"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":199,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"referencedMap":[[249,1],[166,2],[161,3],[215,4],[252,5],[214,6],[250,1],[211,7],[216,8],[212,1],[109,9],[110,9],[111,10],[65,11],[112,12],[113,13],[114,14],[60,1],[63,15],[61,1],[62,1],[115,16],[116,17],[117,18],[118,19],[119,20],[120,21],[121,21],[122,22],[123,23],[124,24],[125,25],[66,1],[64,1],[126,26],[127,27],[128,28],[160,29],[129,30],[130,31],[131,32],[132,33],[133,34],[134,35],[135,36],[136,37],[137,38],[138,39],[139,39],[140,40],[141,1],[142,41],[144,42],[143,43],[145,44],[146,45],[147,46],[148,47],[149,48],[150,49],[151,50],[152,51],[153,52],[154,53],[155,54],[156,55],[157,56],[67,1],[68,1],[69,1],[108,57],[158,58],[159,59],[209,1],[210,1],[208,60],[213,61],[217,62],[253,63],[222,1],[232,64],[228,65],[231,66],[254,67],[239,1],[241,68],[240,69],[247,1],[230,70],[223,71],[225,72],[227,73],[226,1],[229,71],[224,1],[251,1],[70,1],[59,74],[58,1],[262,75],[264,76],[263,77],[261,78],[260,1],[255,1],[248,1],[56,1],[57,1],[11,1],[10,1],[2,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[3,1],[20,1],[21,1],[4,1],[22,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[8,1],[49,1],[46,1],[47,1],[48,1],[50,1],[9,1],[51,1],[52,1],[53,1],[55,1],[54,1],[1,1],[86,79],[96,80],[85,79],[106,81],[77,82],[76,83],[105,2],[99,84],[104,85],[79,86],[93,87],[78,88],[102,89],[74,90],[73,2],[103,91],[75,92],[80,93],[81,1],[84,93],[71,1],[107,94],[97,95],[88,96],[89,97],[91,98],[87,99],[90,100],[100,2],[82,101],[83,102],[92,103],[72,104],[95,95],[94,93],[98,1],[101,105],[235,106],[238,107],[236,106],[234,1],[237,108],[256,109],[246,110],[242,111],[243,65],[259,112],[257,113],[244,114],[258,115],[233,1],[245,116],[265,117],[298,118],[220,119],[175,120],[221,121],[266,122],[164,120],[267,123],[268,124],[197,125],[269,126],[196,120],[270,127],[167,128],[170,129],[271,130],[272,130],[171,120],[273,131],[169,120],[274,132],[165,133],[275,123],[176,134],[276,135],[172,136],[278,137],[198,138],[283,139],[284,139],[180,140],[205,141],[285,142],[190,140],[286,143],[183,144],[287,145],[204,140],[288,146],[289,147],[186,148],[202,149],[290,150],[188,140],[195,140],[291,151],[184,152],[201,153],[292,154],[192,155],[203,156],[193,157],[189,158],[293,159],[187,160],[194,161],[181,140],[294,162],[179,140],[206,163],[279,164],[185,165],[207,166],[280,137],[281,167],[282,137],[178,168],[163,120],[295,169],[173,120],[182,1],[199,1],[191,120],[174,170],[200,120],[177,125],[162,1],[296,120],[219,171],[297,172],[218,173],[277,174],[168,175]],"affectedFilesPendingEmit":[[218,51]],"version":"5.9.3"} \ No newline at end of file +{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/analytics.ts","./node_modules/commander/typings/index.d.ts","./node_modules/commander/typings/esm.d.mts","./src/types.ts","./src/tui/utils/costTracking.ts","./src/errorGrouping.ts","./src/sessionDigest.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/buffer/index.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/better-sqlite3/index.d.ts","./src/historicalStore.ts","./src/workerAnalytics.ts","./src/semanticNarrative.ts","./src/index.ts","./src/parser.ts","./src/tailer.ts","./src/tui/utils/fileAnomalyDetection.ts","./src/tui/utils/recoveryPlaybook.ts","./src/crossReferenceManager.ts","./src/store.ts","./node_modules/@types/send/index.d.ts","./node_modules/@types/qs/index.d.ts","./node_modules/@types/range-parser/index.d.ts","./node_modules/@types/express-serve-static-core/index.d.ts","./node_modules/@types/http-errors/index.d.ts","./node_modules/@types/serve-static/index.d.ts","./node_modules/@types/connect/index.d.ts","./node_modules/@types/body-parser/index.d.ts","./node_modules/@types/express/index.d.ts","./node_modules/@types/ws/index.d.mts","./src/tui/dagUtils.ts","./src/web/server.ts","./src/web/index.ts","./node_modules/@types/blessed/index.d.ts","./src/tui/utils/theme.ts","./src/tui/utils/colors.ts","./src/tui/components/WorkerGrid.ts","./src/tui/components/ActivityStream.ts","./src/tui/components/WorkerDetail.ts","./src/tui/utils/fuzzyMatch.ts","./src/tui/components/CommandPalette.ts","./src/tui/components/FileHeatmap.ts","./src/tui/components/DependencyDag.ts","./src/tui/components/SessionReplay.ts","./src/tui/components/ErrorGroupPanel.ts","./src/tui/components/SessionDigest.ts","./src/tui/components/CollisionAlert.ts","./src/tui/utils/prPreview.ts","./src/tui/components/GitIntegration.ts","./src/tui/components/SemanticNarrativePanel.ts","./src/tui/components/WorkerAnalyticsPanel.ts","./src/tui/components/FileContextPanel.ts","./src/tui/components/ConversationTranscript.ts","./src/tui/components/CrossReferencePanel.ts","./src/tui/components/BudgetAlertPanel.ts","./src/gitParser.ts","./src/focusPresets.ts","./src/tui/app.ts","./src/tui/utils/keyboard.ts","./src/tui/utils/stuckDetection.ts","./src/tui/components/FilterPanel.ts","./src/tui/components/DiffView.ts","./src/tui/components/RecoveryPanel.ts","./src/tui/components/index.ts","./src/tui/index.ts","./src/cli.ts","./src/dagUtils.ts","./node_modules/@vitest/pretty-format/dist/index.d.ts","./node_modules/@vitest/utils/dist/display.d.ts","./node_modules/@vitest/utils/dist/types.d.ts","./node_modules/@vitest/utils/dist/helpers.d.ts","./node_modules/@vitest/utils/dist/timers.d.ts","./node_modules/@vitest/utils/dist/index.d.ts","./node_modules/@vitest/runner/dist/tasks.d-C7UxawJ9.d.ts","./node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","./node_modules/@vitest/utils/dist/diff.d.ts","./node_modules/@vitest/runner/dist/types.d.ts","./node_modules/@vitest/runner/dist/index.d.ts","./node_modules/vitest/dist/chunks/traces.d.402V_yFI.d.ts","./node_modules/vite/types/hmrPayload.d.ts","./node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","./node_modules/vite/types/customEvent.d.ts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/@vitest/snapshot/dist/environment.d-DHdQ1Csl.d.ts","./node_modules/@vitest/snapshot/dist/rawSnapshot.d-lFsMJFUd.d.ts","./node_modules/@vitest/snapshot/dist/index.d.ts","./node_modules/vitest/dist/chunks/config.d.Cy95HiCx.d.ts","./node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","./node_modules/vitest/dist/chunks/rpc.d.RH3apGEf.d.ts","./node_modules/vitest/dist/chunks/worker.d.Dyxm8DEL.d.ts","./node_modules/vitest/dist/chunks/browser.d.ChKACdzH.d.ts","./node_modules/@vitest/spy/dist/index.d.ts","./node_modules/tinyrainbow/dist/index.d.ts","./node_modules/@standard-schema/spec/dist/index.d.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@vitest/expect/dist/index.d.ts","./node_modules/@vitest/runner/dist/utils.d.ts","./node_modules/tinybench/dist/index.d.ts","./node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","./node_modules/vitest/dist/chunks/global.d.B15mdLcR.d.ts","./node_modules/vitest/dist/chunks/suite.d.BJWk38HB.d.ts","./node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","./node_modules/expect-type/dist/utils.d.ts","./node_modules/expect-type/dist/overloads.d.ts","./node_modules/expect-type/dist/branding.d.ts","./node_modules/expect-type/dist/messages.d.ts","./node_modules/expect-type/dist/index.d.ts","./node_modules/vitest/dist/index.d.ts","./src/errorGrouping.test.ts","./src/fileHeatmap.test.ts","./src/focusPresets.test.ts","./src/gitParser.test.ts","./src/historicalStore.test.ts","./src/needleFabric.integration.test.ts","./src/parser.real-logs.integration.test.ts","./src/parser.test.ts","./src/semanticNarrative.test.ts","./src/sessionDigest.test.ts","./src/store.test.ts","./src/tailer.test.ts","./src/workerAnalytics.test.ts","./src/tui/app.test.ts","./src/tui/dagUtils.test.ts","./src/tui/keyboardNavigation.e2e.test.ts","./src/tui/logTailing.e2e.test.ts","./src/tui/regression.test.ts","./src/tui/components/ActivityStream.e2e.test.ts","./src/tui/components/ActivityStream.test.ts","./src/tui/components/BudgetAlertPanel.test.ts","./src/tui/components/CollisionAlert.test.ts","./src/tui/components/CommandPalette.test.ts","./src/tui/components/ConversationTranscript.test.ts","./src/tui/components/DependencyDag.test.ts","./src/tui/components/ErrorGroupPanel.test.ts","./src/tui/components/FileHeatmap.test.ts","./src/tui/components/FilterPanel.test.ts","./src/tui/components/GitIntegration.test.ts","./src/tui/components/RecoveryPanel.test.ts","./src/tui/components/SessionDigest.test.ts","./src/tui/components/SessionReplay.test.ts","./src/tui/components/WorkerDetail.e2e.test.ts","./src/tui/components/WorkerDetail.test.ts","./src/tui/components/WorkerGrid.e2e.test.ts","./src/tui/components/WorkerGrid.test.ts","./src/tui/utils/fileAnomalyDetection.test.ts","./src/utils/replayExport.ts","./src/web/server.test.ts","./node_modules/vitest/globals.d.ts"],"fileIdsList":[[70,117],[70,117,165],[70,117,118,128,147,165],[70,117,131,165,183],[70,117,252,253],[70,117,131,165],[70,117,128,131,165,177,178,179],[70,117,180,182,184],[70,114,117],[70,116,117],[117],[70,117,122,150],[70,117,118,123,128,136,147,158],[70,117,118,119,128,136],[65,66,67,70,117],[70,117,120,159],[70,117,121,122,129,137],[70,117,122,147,155],[70,117,123,125,128,136],[70,116,117,124],[70,117,125,126],[70,117,127,128],[70,116,117,128],[70,117,128,129,130,147,158],[70,117,128,129,130,143,147,150],[70,117,125,128,131,136,147,158],[70,117,128,129,131,132,136,147,155,158],[70,117,131,133,147,155,158],[68,69,70,71,72,73,74,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164],[70,117,128,134],[70,117,135,158,163],[70,117,125,128,136,147],[70,117,137],[70,117,138],[70,116,117,139],[70,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164],[70,117,141],[70,117,142],[70,117,128,143,144],[70,117,143,145,159,161],[70,117,128,147,148,150],[70,117,149,150],[70,117,147,148],[70,117,150],[70,117,151],[70,114,117,147,152],[70,117,128,153,154],[70,117,153,154],[70,117,122,136,147,155],[70,117,156],[70,117,136,157],[70,117,131,142,158],[70,117,122,159],[70,117,147,160],[70,117,135,161],[70,117,162],[70,112,117],[70,112,117,128,130,139,147,150,158,161,163],[70,117,147,164],[70,117,129,147,165],[70,117,131,165,181],[70,117,128,131,133,136,147,155,158,164,165],[70,117,225,229,232,234,249,250,251,254,259],[70,117,229,230,232,233],[70,117,229],[70,117,229,230,232],[70,117,229,230],[70,117,224,241,242],[70,117,224,241],[70,117,224,231],[70,117,224],[70,117,226],[70,117,224,225,226,227,228],[59,70,117],[70,117,262,263],[70,117,262,263,264,265],[70,117,262,264],[70,117,262],[70,84,88,117,158],[70,84,117,147,158],[70,79,117],[70,81,84,117,155,158],[70,117,136,155],[70,79,117,165],[70,81,84,117,136,158],[70,76,77,80,83,117,128,147,158],[70,84,91,117],[70,76,82,117],[70,84,105,106,117],[70,80,84,117,150,158,165],[70,105,117,165],[70,78,79,117,165],[70,84,117],[70,78,79,80,81,82,83,84,85,86,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,106,107,108,109,110,111,117],[70,84,99,117],[70,84,91,92,117],[70,82,84,92,93,117],[70,83,117],[70,76,79,84,117],[70,84,88,92,93,117],[70,88,117],[70,82,84,87,117,158],[70,76,81,84,91,117],[70,117,147],[70,79,84,105,117,163,165],[70,117,236],[70,117,236,237,238,239],[70,117,238],[70,117,234,256,257,259],[70,117,234,235,247,259],[70,117,224,232,234,243,259],[70,117,240],[70,117,224,234,243,246,255,258,259],[70,117,234,235,240,243,259],[70,117,234,256,257,258,259],[70,117,234,240,244,245,246,259],[70,117,224,229,232,234,235,240,243,244,245,246,247,248,249,255,256,257,258,259,260,261,266],[70,117,267],[70,117,129,137,138],[60,61,62,64,70,117,129,170,171,172,176,189,190,200,221],[61,70,117],[61,70,117,118],[61,63,70,117,267],[61,70,117,176,267],[70,117,213,267],[61,70,117,212,267],[70,117,129,137,138,167,267],[61,70,117,129,137,138,166],[61,64,70,117,167,168,169],[61,70,117,171,267],[70,117,129,138,171,267],[61,70,117,169,267],[61,62,64,70,117,176,267],[61,62,63,70,117],[61,62,63,70,117,167,168,169,173,174,175],[70,117,129,137,138,172,267],[61,70,117,128,129,138,171],[61,70,117,176,190,214,267],[61,62,63,70,117,176,190,192,193,194,195,197,198,199,200,201,202,203,205,206,207,208,209,210,211,212,213],[61,70,117,190,194,267],[61,70,117,190,192],[62,70,117,190,211,267],[62,70,117,190,192],[61,70,117,190,203,267],[70,117,129,190,197,267],[70,117,129,137,138,190,192,196],[61,70,117,190,209,267],[61,70,117,175,190,192],[61,70,117,187,190,199,267],[61,70,117,187,190,192],[70,117,190,192],[61,70,117,190,201,267],[61,70,117,190,198,267],[61,70,117,173,190,192],[70,117,129,194,267],[70,117,129,137,138,190,192,194],[61,70,117,205,267],[61,70,117,190,192,204],[61,70,117,219,267],[61,70,117,174,192],[61,70,117,169,190,192],[61,70,117,129,138,202,267],[61,70,117,129,138,190,192],[61,70,117,129,190,200,267],[61,70,117,128,129,171,190,192],[61,70,117,168,190,192],[61,70,117,190,195,267],[61,70,117,190,193,267],[70,117,193,194,195,197,198,199,200,201,202,205,206,207,208,209,211,217,218,219],[61,70,117,118,129,138,187,267],[61,70,117,118,129,138],[62,70,117,192,214,215,216,220],[61,70,117,129,137,138,172,190,194,267],[70,117,191],[61,70,117,173,267],[61,70,117,167],[70,117,188],[61,70,117,175,176,186,188,267],[58,61,70,117,128,131,138,158,171,176,185,186,187],[61,62,70,117,168,267],[61,62,70,117,167]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"2dafa84745d1967260638963d8aa02bab6352738e502622fc22feb93e61115fd","signature":"881623670e354ff3e114be6ebb2350cb491f6bccdc741d4691fc68587160067c","impliedFormat":99},{"version":"a722a71d8f3cb0028857b12579c7eca55acc76bf34e5db7eaf6fe817b985f9c3","impliedFormat":1},{"version":"b124c0624b15412ace7d54644ade38d7a69db7e25488a1a4d2a8df6e11696538","impliedFormat":99},{"version":"6ca1e23c161f36435b44345368f642922f57cb5ef9f9b66cbce952320f313948","signature":"c9df343aa7039f0359c966678e73a758033960e251a23651439df76327dfece0","impliedFormat":99},{"version":"38b376344eb78c8bca1827b3e490baf6f3ef5034e089002fe119a3d2006e287e","signature":"311b0dd08fc151a586a16b5e7928bef28f4e5f7dc3cb4de0dc67772bce01ed48","impliedFormat":99},{"version":"34ce5e8cd31f62444bafa60f4b37979b6b9f4069e304b29d2f1f720d76159b0e","signature":"c230c2f34cb2f5e054057e07ec47c5be3f262fbcc0794050b72dfafe03c6e9d4","impliedFormat":99},{"version":"8a4d0a6932f6297bae8ff9fb23723dd3600352ab3fe204b5dd63ee93bfc03fa4","signature":"ccd567b3afe420a8faeda107890100102f3a2422b818d28acfde1820d6973d33","impliedFormat":99},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"4b34bdb6f29a4347b7db9c0f8622686035fe25adb1c9e927acd8d22a2cbb6ccb","impliedFormat":1},{"version":"714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"27fdb0da0daf3b337c5530c5f266efe046a6ceb606e395b346974e4360c36419","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"47ab634529c5955b6ad793474ae188fce3e6163e3a3fb5edd7e0e48f14435333","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"fad4e3c207fe23922d0b2d06b01acbfb9714c4f2685cf80fd384c8a100c82fd0","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"05db535df8bdc30d9116fe754a3473d1b6479afbc14ae8eb18b605c62677d518","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"c2a6a737189ced24ffe0634e9239b087e4c26378d0490f95141b9b9b042b746c","impliedFormat":1},{"version":"ca56013e6c3fc831680a2715e051fa40d4e0e86050be21167533f57aa87b8018","signature":"d02ab6693dd6f4ad2a8bcc8a419d255624647b0ec277301baa902faa0b2b3008","impliedFormat":99},{"version":"99dfd328b11a9f81881c6b19ae342bdbdb5a2656d7acdda99c4b575833a437b0","signature":"57d5868a92890850990c9e1a4dbf86e48a82c70c3ef0bb0dee58ecc9f40d0ed7","impliedFormat":99},{"version":"6740695ccdb7e3c05a364fa9063b627bb461663947d01b9e992c983ed2909049","signature":"3428ca790804a8a7b77cf08f30e1a811943cf9f769a1e1e7fafd0b36ba5732bf","impliedFormat":99},{"version":"0829fb787d6b6bf344aeff62e00688d4b61b652b9b60acff17e5bea77f2d74aa","signature":"f335d9f42c6a2b8263601169d0bb13e4e6515d200b38c11f55ee364d9c8c13c1","impliedFormat":99},{"version":"41a062b321d6316b958edfb4ee24e9fd6880e30aeab41c87b74503b22880fdb2","signature":"c2dd4f0df1c1754b39de85739ed6c331ed58f1c6273a1430e7d4e77a097616c2","impliedFormat":99},{"version":"3fda678f063a88d5c3405f323340647b3828b4b41861c3023d1c24badb96d17b","signature":"15553593ae2e339efdd43ea71967213bef1e96f6c9ecdf53e627e82026762931","impliedFormat":99},{"version":"8f4e569846e00a1b529bd0e7820e49ef85b1115855023701ee3dcdd6ebf87124","signature":"693eaabd297b6f4da3581dec9e2b50338dc0fa248097eea5b07812e5ae010271","impliedFormat":99},{"version":"74868e76a8f63b1e57dd69bacaf2a78b4b733a423c352e415e9cf731a9eeee35","signature":"b9a4565ab4585426ea7462ab5e9fa70be27045d05b312ae3b9ce4ba0859c2f6c","impliedFormat":99},{"version":"b1ca6200de8ddaa59a8934ea1f0f97979e072fcb5d8dfbb000b7f57552be024a","signature":"3a229106c608767d05b0757e1f3a28220417d1ae0b2157b7adb770acfa745506","impliedFormat":99},{"version":"505bfc26210ac87da75d08e42e3e31fb8d5d61730cfa0a03c717a9c85b4ab7d4","signature":"eed128a5efac5258d686b1653f2597d5b9d025166b9ded33655ad4a869a15f05","impliedFormat":99},{"version":"d34aa8df2d0b18fb56b1d772ff9b3c7aea7256cf0d692f969be6e1d27b74d660","impliedFormat":1},{"version":"baac9896d29bcc55391d769e408ff400d61273d832dd500f21de766205255acb","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"6823ccc7b5b77bbf898d878dbcad18aa45e0fa96bdd0abd0de98d514845d9ed9","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"168d88e14e0d81fe170e0dadd38ae9d217476c11435ea640ddb9b7382bdb6c1f","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"8e04cf0688e0d921111659c2b55851957017148fa7b977b02727477d155b3c47","impliedFormat":1},{"version":"316f1486e15cbf7896425f0a16dfe12d447dd57cfb3244b8b119c77df870858f","impliedFormat":99},{"version":"91b5b4f160d41e15949fde61c313effbf0409c5d24e8e03977964e525453570c","signature":"99effefec71fb6f7148e2884568a74ad9e20f4ebd45c4c227a66e8e854ae8ab5","impliedFormat":99},{"version":"e4e8a2baaceadc57090949fe84cd3547ff32f8cca4329dc3bb375a54e054dc98","signature":"dfa96c3a51ae504d1ae3f05becdf38ce74842dcf94ba3b4016b8fb0deabb6345","impliedFormat":99},{"version":"fe0c119587fec41cc1c40c5727cf34b4d42ccece7c5a6d85fb3f117dbd25f3f2","signature":"de0562e1297ae9acf747b4614b60820dd94f4b685802471163840e00e020147f","impliedFormat":99},{"version":"a4cb76c6f4b8356d14d6cf5c05e1e3fbc74007b160a00f6511a8c39295f08c42","impliedFormat":1},{"version":"4155e4eca75914590614080c8bc4ea8ad41ea8eea2431162305723a9f76dfe7b","signature":"6ea8143a5603044d11a2bc6bf8b0c251bd3ccab709ed7183b2c0c6852051303e","impliedFormat":99},{"version":"7c46d1a86bd5b49d827fd0c12576c6971a4f93402adf0ddffb26db370a00a228","signature":"a32172f7a95825f7a3375bf2c497ab6e360076f50979592e06b9843342ade559","impliedFormat":99},{"version":"ddb2dc5cf4905306565d1040dd69b264dda4be733ca394b70fd011b7a39543a3","signature":"f378ed7136389c510081737f1d04525568c9551b0c7d9345ce241fd925585f14","impliedFormat":99},{"version":"25736572910910852d9de560eee192682af499e1d5904a7cd436d9fa58458bd3","signature":"269cc8523832256f45c2be25fbb406140a8e3a9e2f2f438ef534435119b68b69","impliedFormat":99},{"version":"f0fbecfab11d5fb02140df887940e2ed5dd8586227c000384821e5483d2d0f5b","signature":"1d0bb4b55c05a571953a86010fa34250a30b9ee9cd3ebd65bf0a1259bddbab4d","impliedFormat":99},{"version":"9ccf200e3b8976f6d2b178d1ed0e17f5379702f0f54f45d9f8464606d1aff0ef","signature":"873ad50d2cb9b0adb8d677c444cf1e139c2f9bc43354feb3a98f2aa1a652039c","impliedFormat":99},{"version":"487cbba4e661b4943da494c54571911a7493dd3a2bc6670f7353d4817d9ae79d","signature":"70998ddbb95ad5ee1f128521e5d8e0afe9d748b0860bd0792e8595c4ba9f68ef","impliedFormat":99},{"version":"77005025f251cc99d4d609e2531437a1a525bb76c568907dd07d72b3eabf4c18","signature":"440ca3519b39098d6f4e1198297318772681ab96eb1162f881885c11eb5890ad","impliedFormat":99},{"version":"6db8174f711e17de6795e49d2725b6e8e1085a0b2d5140aa6fa71d47e744f978","signature":"7be7303457d003425dd9235f6d9b6d619a7b3f3b950d33a0a2b84b3a93b04ebe","impliedFormat":99},{"version":"2167173f1b9e418fb75f7ea1c22859a5fda9368af6f89b629e313b2f5b11f3f9","signature":"dcd663a2d7530c45aab939e6a897c6211000d4244779d003230daf67a08eb324","impliedFormat":99},{"version":"7ceec53049aac5f3eab7336d89ad0cc8747f4bf66a9a0bb115369685df92f937","signature":"61b92494c9376151d74de2381b60d8cab20b8aa1eb1826635af547ffb686ae34","impliedFormat":99},{"version":"05eddfaac029d1d031129ed5c32a1e1c78dde0c37d55fe9c9cbcb5ba94a46815","signature":"046657816dba1196af8da6152c8502b82e93dc2ce492aecf18c9bccf45b70965","impliedFormat":99},{"version":"13ba4d815f0f31ec6fa41dc16b0d869acd64b5295e69a1d298226ac39883a32d","signature":"9cb4a0cb4b4da94a99fea62c6aa827e29b901accc4ac034cb31f624294217d09","impliedFormat":99},{"version":"6a2a27b33f7fda3b61f557b71acceddd7f650857304025053a932ccad5797924","signature":"73a05ca11359eabf208a3d46828e2e5208810fed5c9b5cbdc3215675730cfdd8","impliedFormat":99},{"version":"05f9c4e86a0c443747a5153d874e6701693382a12f83db542f1d30f6234cfbd1","signature":"0ed720c7b2322339aa6a114805c18efe73ae57479ae53cba7caf7026538d6681","impliedFormat":99},{"version":"1d828a05fd126377de994edcdd277edd18353f55f7c5d8b91b9ff3c5db3665c0","signature":"58fe09f7b921f82839219d8d7bf5bef04f154da06ed92c426cedfbd9db826969","impliedFormat":99},{"version":"436134fa76d181810c6010a0006a40659e29ee556bac25b8ad8fc58e714b27db","signature":"a6d8487782a888bbefb0b84fb2cc6730d2eef1bb9d0b059fd92fa522fbde1d1e","impliedFormat":99},{"version":"a85e3f3509f27cc1589c1fc7ce674db2a2948c049e9eed8d3a151bee7ada1c21","signature":"489195abfec5de3da8d406e1dbaa536bb516737214511ff49825408c794dcdfd","impliedFormat":99},{"version":"9285b9b7cbf461542bb8fc53eac8cc5c56e4c463d89249c2aaa0a21ea8bc14ac","signature":"31b9aa801fd52f77c6e5c2f2c1e470e1be222d903e952b270c375cb8ccfd1b7f","impliedFormat":99},{"version":"c6db3d8f682f91847da8a4634290ddbc2789ffcb248574271296b747fce07075","signature":"85de8627176a919f87e013b43d7933f3b4fb537633ecf6c3b554ab34134f49b8","impliedFormat":99},{"version":"64084333de107cb15374906ed6ec0c3dd108c734b4fcc8e7e6cd64d778480e6e","signature":"dd7177ba2b89c2162a1910ff418091be04341522d48896322ca5e8a9d7d527e5","impliedFormat":99},{"version":"c3731e08ab91b00b22f9a6b6461784ef8527bbc54c9343fe104c3dd159514e75","signature":"9dbd5d0543de0f687885c8895330527f3851c1c972f047592faf91e6301c0387","impliedFormat":99},{"version":"169cc2cc9a98e3b0bccec95b34119280d92095a81291986d27f66d4a31581de6","signature":"89e867bcaabce5c2fdbc61d15938086848c646152e53255aaddb5fc2ca780b30","impliedFormat":99},{"version":"9a6834c2180acde2c941b805dc85c5e16a5963e7e3d6a4dbdcbb0a030d319fa7","signature":"dc6f8105e623ddb3fb8f358fc8dd05f4b4b474f167aae740ee88124f2b25be0f","impliedFormat":99},{"version":"ce661536c5083f113a4ed963d47acac3ad48cfac5f61da373c2c2a7c1b3234c3","signature":"960a48457fec96e2d1a31970d7898e39141266e8c8dc6ef83ec6d736af574824","impliedFormat":99},{"version":"0437152e468c22840ee9e184a4bcbcd494a9042694def1e0d0e8128fa3c9c76a","signature":"eecf7038a027a976dd44857aaf8441507a25269c5474bcc76c86cba55a9aad24","impliedFormat":99},{"version":"9b414c03bc3eb1d600ecdb99e00a1108fae58b464cc439b1bdb1850bc9c3c28f","signature":"58c892b9d265053b132e2d023e7bdf33912d1eae8e70c10c7ee90ad541dad80b","impliedFormat":99},{"version":"c1a018d6f30047192e24c5a648b9072997942aa0c8632656a392040519d86f99","signature":"fcc39a70c0ddceaa57a26c0f9944411ec8e79d99ead5f0b4646709dbfd24475b","impliedFormat":99},{"version":"f94289d9134aa4fee476b7cb863440837116447e616ead1dedd7ea9a3a28b58d","signature":"84303401bd1e1ea82faf257ba3d84f35d80ef8f6c7f378fcf453524aa7303567","impliedFormat":99},{"version":"286bc6269a96acd2842759208eda8753de4a5fe6a1666772bfb53fa19ce0d670","signature":"997b0058bb3e15a944b084d3d3322c455e8685adc414820d9fcd4e0fea29dca3","impliedFormat":99},{"version":"d9ffeccec061cdf206608d148a8ca581ce3d56d224a4e50cadefdbb17db418ba","signature":"cbfbed4895ed6832b3b2e39beefa7513668501b4d40c85150f9d3da583f73909","impliedFormat":99},{"version":"b60fc28c88a6e7c1453c3e2740392ecfc6b5283d62ae974939bd91076c05e0c0","signature":"3fa7a0a99986764a4aa6831ae9c24cd300b43be50b1bf7fd57f1ba70f0f2654d","impliedFormat":99},{"version":"5f2c6d9965c9db5af2716972c71d5ffe41ba8cfee54c7996114dad1ab40722dd","signature":"932119d01c9fc460f1f7167625df270341ce783feea49ec619e27da072da5503","impliedFormat":99},{"version":"acfb723d81eda39156251aed414c553294870bf53062429ebfcfba8a68cb4753","impliedFormat":99},{"version":"fa69a90381c2f85889722a911a732a5ee3596dc3acecda8a9aa2fa89b9615d8d","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"57e9e1b0911874c62d743af24b5d56032759846533641d550b12a45ff404bf07","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"854cd3a3375ffc4e7a92b2168dd065d7ff2614b43341038a65cca865a44c00c5","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"3b0a56d056d81a011e484b9c05d5e430711aaecd561a788bad1d0498aad782c7","impliedFormat":99},{"version":"2f863ee9b873a65d9c3338ea7aaddbdb41a9673f062f06983d712bd01c25dc6b","impliedFormat":99},{"version":"67aa128c2bc170b93794f191feffc65a4b33e878db211cfcb7658c4b72f7a1f5","impliedFormat":99},{"version":"ac3d263474022e9a14c43f588f485d549641d839b159ecc971978b90f34bdf6b","impliedFormat":99},{"version":"a7ca8df4f2931bef2aa4118078584d84a0b16539598eaadf7dce9104dfaa381c","impliedFormat":1},{"version":"10073cdcf56982064c5337787cc59b79586131e1b28c106ede5bff362f912b70","impliedFormat":99},{"version":"72950913f4900b680f44d8cab6dd1ea0311698fc1eefb014eb9cdfc37ac4a734","impliedFormat":1},{"version":"36977c14a7f7bfc8c0426ae4343875689949fb699f3f84ecbe5b300ebf9a2c55","impliedFormat":1},{"version":"ff0a83c9a0489a627e264ffcb63f2264b935b20a502afa3a018848139e3d8575","impliedFormat":99},{"version":"324ac98294dab54fbd580c7d0e707d94506d7b2c3d5efe981a8495f02cf9ad96","impliedFormat":99},{"version":"9ec72eb493ff209b470467e24264116b6a8616484bca438091433a545dfba17e","impliedFormat":99},{"version":"c35b8117804c639c53c87f2c23e0c786df61d552e513bd5179f5b88e29964838","impliedFormat":99},{"version":"c609331c6ed4ad4af54e101088c6a4dcb48f8db7b0b97e44a6efeb130f4331bd","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"67acaedb46832d66c15f1b09fb7b6a0b7f41bdbf8eaa586ec70459b3e8896eb9","impliedFormat":99},{"version":"4535ab977ee871e956eb7bebe2db5de79f5d5ec7dfbbf1d35e08f4a2d6630dac","impliedFormat":99},{"version":"b79b5ed99f26ffb2f8ae4bdcc4b34a9542197dc3fa96cfb425c2a81e618cff28","impliedFormat":99},{"version":"31fd7c12f6e27154efb52a916b872509a771880f3b20f2dfd045785c13aa813f","impliedFormat":99},{"version":"b481de4ab5379bd481ca12fc0b255cdc47341629a22c240a89cdb4e209522be2","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"4e258d11c899cb9ff36b4b5c53df59cf4a5ccae9a9931529686e77431e0a3518","affectsGlobalScope":true,"impliedFormat":99},{"version":"a5ae67a67f786ffe92d34b55467a40fb50fb0093e92388cadce6168fa42690fd","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"a534e61c2f06a147d97aebad720db97dffd8066b7142212e46bcbcdcb640b81a","impliedFormat":99},{"version":"ddf569d04470a4d629090d43a16735185001f3fcf0ae036ead99f2ceab62be48","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"53c448183c7177c83d3eb0b40824cf8952721a6584cf22052adc24f778986732","impliedFormat":99},{"version":"4f3ee012c4a6b3e2320c02472147cd459cc5e6e97ed9512b20fc06dae09e4e3e","signature":"403ad65a4002e9aee37f04cdcfec35d962d121426201ecd1d78195d37342deb7","impliedFormat":99},{"version":"a507debe506ee1e4c3afa28da1c1a8b351a40ee3a3bb7cae7d6178d7afbc18c8","signature":"40cf9a45178e5d8d3f75bfd29278e8e1fd72f2b45f6c2546d0f240c0d9eda6ac","impliedFormat":99},{"version":"7eca742a4514b40148f42deecd614378ebade8a821b8a4ea9355a215585b8a06","signature":"22d436dd60601e5384362216214982a030d4404f00dc3953b53847e3bfff32c4","impliedFormat":99},{"version":"429170598dfb6ba02375c124fe166ba84c76510ea12d3a7ee5c3329d457c0520","signature":"f8142723e21e5815eba73ddd3caefbfa70e8cd573206e29afeff0e0509eabff7","impliedFormat":99},{"version":"6a4baf38655cbdb95d149d7daa9dc314f50bc76a92ca8673a5b88923549bf5bb","signature":"9e85a9d6a16ef664fe3598e6fe7d802a01267b01fd64722647bc70aaf1e91fab","impliedFormat":99},{"version":"332ff1a11fceed904055119757ab1ab6fdcb46820a51e674f9846ad7c7517575","signature":"adb6950e01e308e34977fafa97f885d4283dfc87da5b8d4a18094c88a2949e73","impliedFormat":99},{"version":"423018aefc82a5efcd392e45f50a474accb8833db23ea1a92a8b37c819802701","signature":"b1da522ec7c98ef59788642e6343332e3d45c805f5866c92e5035fcba8838b05","impliedFormat":99},{"version":"80bf75236457a57b04d7cbb458c0f482701c19eff5dfad6aeafab3b2ef7e32e0","signature":"b6831e080e60b84a24614a97a346adc8797198cd60394a0366e72c75e4374913","impliedFormat":99},{"version":"1718e448f0c2d6be92bf152f1949ac538762cd8b552687b86e7b456ef1d5bbe8","signature":"639915bab3e96ee6eb91d79cc9ad9dc02b35db416cebc1146c7405b12a4b5d3f","impliedFormat":99},{"version":"cd2f31b32a5dc243c2eded998011e16965207b5e26550c84c94e54d110806e90","signature":"d4d2a14b28e68da295c4151718dc9d8052f106fd74c5aaa6b5b9473ce0998a06","impliedFormat":99},{"version":"b6b55c38e031a4e714152c8c669cfbda9747abe559c25ef24b0287fcc52aec79","signature":"dd4c9eee30bd732383a408edbacb0e351cde7529dca13c898338e7d20fcaa8f3","impliedFormat":99},{"version":"ebd89e7eff37f9eec8bd34caf300ce002342ed3ff788b534080edfe7b1f7dd67","signature":"a2036e9d5d7d56c883b0503f25a9985b2d98c117bcccf10190d7a24ec672632e","impliedFormat":99},{"version":"e8b085149df86872ad19325c110eb78ed69fc97ff416c2c260d95d864c567702","signature":"93a139a2afcfa16a9964ce8f40a094754f1604da7c2cd1eefc5d68d5724b29a2","impliedFormat":99},{"version":"3eb15e191d1df2eb40f9c05c62e02368272d5d88707cd4cf1d7eda105a01b3e5","signature":"88ae7ef7a53a6a730e45a0513b210b028daf2e553081b6fb7bc9e50f8b1f211f","impliedFormat":99},{"version":"d8684e98ba0418afd1b782329460eb65ec95cb9a60fd8fbf5510480af44b64b7","signature":"ea1d92864d9387abe5deb369bcf3f89f01331f8f739b887b3983c1324ae8d541","impliedFormat":99},{"version":"a463abf1aa3aaded7f16dccc940320d15791b51400c5634bebfa1cf57900f6fc","signature":"3e1b4f4957a6ef923ed7d8a72f127ba1c873657f358657e7c08a03401025a8e0","impliedFormat":99},{"version":"85230cee9df28ef0bbf13cee58be8fe0c6c9d9fccb0130e229bdb6204293dded","signature":"0bc42f0fca4e29be4e7274ce70054e3d3db04efdbcd6a89a5b39d811f50a605e","impliedFormat":99},{"version":"cfb498dc3274bba0782e97b9c326146c5098588902df6ca264a7978f89b49a59","signature":"b04f4af31727a328bd73b5b89ccd00abf07656e3818ca659e538910acfdaa2e9","impliedFormat":99},{"version":"02fb7a2b24d621449ca1804b74278f193b2e31fcd437d60e9b7fca7340bc4cd0","signature":"ef5e6aadfddbddb3498f7d55e21f7955510f2c8a933a8ebfb5368ebf8523cd5d","impliedFormat":99},{"version":"b30c60ef248e0cb0ebc076b5bee1902ffcbdc7a45c2facb65ae7aebe6d78b068","signature":"b99e02996cd8dae72509a546c254754222a9ab9dec11debc586faea5a8b1ecd7","impliedFormat":99},{"version":"df770fca0120852f226eda2c16512f1f63eb115713c0347e9f93a8fa92cb30f7","signature":"54ddb307964f00eb2fbff934bf3498be4d5354706be924301dbc5114e03906ae","impliedFormat":99},{"version":"dd53b9f4c63902e452b229359fc19f7edbd69568f763873e805dcf13e1566b5c","signature":"b5429a388e7161c732cace640188ca218c4f69579de1ab75bda6e9912d9db870","impliedFormat":99},{"version":"4f85ee672c268d8d0e5e18e9ce1d681e8fa05c68c4b2c6058633648cad877ca3","signature":"7cddd7fb2fac7f443b737ab2b6257a0793568cdb8182861e7df185c1e346b55c","impliedFormat":99},{"version":"c447b7ef6046f6a24c97b33bde97d0042ba076348e92aeae3af75d74d869b672","signature":"e288bd0b76522f850673599769bcc3cbc639148ed58f3b5e66d91de4a6b1afaa","impliedFormat":99},{"version":"6f85223ae6526bd3e2fdaa06b618b31b338f8e319ec618be4fa762bdf80cd12a","signature":"b3e6f6a5d876e5d42754a296fc3e88a9f3ea2ab95f24ea6032880ef50d7d91d1","impliedFormat":99},{"version":"412b8623940d78241be26f57dcc3ea67749929c72b68dddc322b9c10e6b652f4","signature":"d012da967f3f54aced37bdeecf907360b65321873aceceb1e032617c47bd22c5","impliedFormat":99},{"version":"f5333a4c1425c1f198ca25ba2bceb4d803c6a6e3c12e71ed6df4c01e37999dc8","signature":"b1b256a2e6f150bedcde3e364224a6bc452425e03c0ffba147350a840897f6b3","impliedFormat":99},{"version":"1ca2ec3138c55734c924559b6ebb2b7aa301f5021fcfdc9a06fd5767c27394b0","signature":"c575cf91a41a6d382281fd2dee200f2753971a44cd0b41cd9d9748dfb529ffc8","impliedFormat":99},{"version":"43db1f371aa5f088f3318120061cea08b2a781d322f85c68f9b459af701dcab4","signature":"5f1786d6d5a796a6cab1f8d67e576a65a40723a2fa1b06ef2da1b5b37d9cd949","impliedFormat":99},{"version":"2a3de87b68459e42a0ea0a7ec18512c64e032a5b77703f62c85ab78ea768390f","signature":"13b337f6e6f0a2ce6e675c5e07705a7f78ca927f10e9df7a936eafc775fb35a1","impliedFormat":99},{"version":"b105f013fd54c08bfbe8f692d28cb770f91a4dfe12d652f3a5b19d7b871d1dfa","signature":"7ddbb1e96e425ccf015450ade529d34e55c736ec52ca2ff6921dfcf5bd6838ce","impliedFormat":99},{"version":"48ea49cf486ffd35940c2aec50fded9cd7abeda902f8d1cd0659fb2fd9f8c7cb","signature":"06e188141a37ade0a0061de5ef68a46933ed746a71f84fbe6ac0b18f3811931d","impliedFormat":99},{"version":"8828a1337bd59a8b39fd854e9844657ba7d559d5cb9158f41d7ef28d8c48634a","signature":"a1a47321183a57234e089b34837badd7e38369dba469a149e01dcb9575d24b1f","impliedFormat":99},{"version":"36065950edcd2664413700097f72797b036fd02c2d43175c4f22782c1dffbbc6","signature":"2cd1373324101183dfb54889386fd8074be3d50e7c75d1594628539cf9c737e2","impliedFormat":99},{"version":"eaf6f157e1ab91288a79dd48d053e2377c054012c7843d665f3618e41bb2434b","signature":"7384c307044f6f7a17025e7c12682c168fd0b778a67320a4411e6ce5a83f9bdd","impliedFormat":99},{"version":"7991077cacdc2843a4c2c33d21a6a179b2aede095e44601006ca126731126024","signature":"52f1cbb220696bc78ef8a678e4fa2dc261ba02098e488b1d67be5aa4d14ecb07","impliedFormat":99},{"version":"4a0cdd0ca6c3ca3de92dd758e27782154653b4b80907f6917b26b4c3dcf96020","signature":"657f4957a93354dd787ba02196638f3324ce030f09e73727bb8dc354e2fdf8ca","impliedFormat":99},{"version":"71a90423368831e2f810acf42c19d6b72ea60de420957ecdb1b5ccf55c78fce0","signature":"73b7815efade6ddc95c283a8f8c6776332bbe44979b09c3a31d4b700112f501a","impliedFormat":99},{"version":"0c9ce4e53f21ef2369d83a4f1184860da9faac8e2dc7050634ed67713bc9cb48","signature":"e718cfab8443ea4d7eb4fee977f0b484db406ec12c74155f45aa1adaea2c68f6","impliedFormat":99},{"version":"0a5bc32362b0559b9bcf0a6a83136c4442dbbd0edecd671538a5e03454b6dff0","affectsGlobalScope":true,"impliedFormat":99}],"root":[58,[61,64],[167,176],[187,189],[191,223],[268,306]],"options":{"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":199,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"referencedMap":[[251,1],[166,2],[190,3],[184,4],[254,5],[183,6],[252,1],[180,7],[185,8],[181,1],[114,9],[115,9],[116,10],[70,11],[117,12],[118,13],[119,14],[65,1],[68,15],[66,1],[67,1],[120,16],[121,17],[122,18],[123,19],[124,20],[125,21],[126,21],[127,22],[128,23],[129,24],[130,25],[71,1],[69,1],[131,26],[132,27],[133,28],[165,29],[134,30],[135,31],[136,32],[137,33],[138,34],[139,35],[140,36],[141,37],[142,38],[143,39],[144,39],[145,40],[146,1],[147,41],[149,42],[148,43],[150,44],[151,45],[152,46],[153,47],[154,48],[155,49],[156,50],[157,51],[158,52],[159,53],[160,54],[161,55],[162,56],[72,1],[73,1],[74,1],[113,57],[163,58],[164,59],[178,1],[179,1],[177,60],[182,61],[186,62],[255,63],[224,1],[234,64],[230,65],[233,66],[256,67],[241,1],[243,68],[242,69],[249,1],[232,70],[225,71],[227,72],[229,73],[228,1],[231,71],[226,1],[253,1],[75,1],[60,74],[59,1],[264,75],[266,76],[265,77],[263,78],[262,1],[257,1],[250,1],[56,1],[57,1],[11,1],[10,1],[2,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[3,1],[20,1],[21,1],[4,1],[22,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[8,1],[49,1],[46,1],[47,1],[48,1],[50,1],[9,1],[51,1],[52,1],[53,1],[55,1],[54,1],[1,1],[91,79],[101,80],[90,79],[111,81],[82,82],[81,83],[110,2],[104,84],[109,85],[84,86],[98,87],[83,88],[107,89],[79,90],[78,2],[108,91],[80,92],[85,93],[86,1],[89,93],[76,1],[112,94],[102,95],[93,96],[94,97],[96,98],[92,99],[95,100],[105,2],[87,101],[88,102],[97,103],[77,104],[100,95],[99,93],[103,1],[106,105],[237,106],[240,107],[238,106],[236,1],[239,108],[258,109],[248,110],[244,111],[245,65],[261,112],[259,113],[246,114],[260,115],[235,1],[247,116],[267,117],[307,118],[58,119],[222,120],[175,121],[223,122],[268,123],[63,121],[269,124],[270,125],[213,119],[271,126],[212,121],[272,127],[167,128],[170,129],[273,130],[274,131],[275,130],[171,121],[276,132],[169,121],[277,133],[64,134],[278,124],[176,135],[279,136],[172,137],[281,138],[214,139],[286,140],[287,140],[194,141],[288,142],[211,143],[289,144],[203,141],[290,145],[197,146],[291,147],[209,141],[210,148],[292,149],[199,150],[218,151],[293,152],[201,141],[208,141],[294,153],[198,154],[295,155],[217,156],[296,157],[205,158],[297,159],[219,160],[206,161],[298,162],[202,163],[299,164],[200,165],[207,166],[300,167],[301,167],[195,141],[302,168],[303,168],[193,141],[220,169],[282,170],[187,171],[221,172],[283,138],[284,173],[285,138],[192,174],[62,121],[304,175],[173,121],[196,1],[215,1],[204,121],[174,176],[216,121],[191,119],[61,1],[305,121],[189,177],[306,178],[188,179],[280,180],[168,181]],"semanticDiagnosticsPerFile":[[214,[{"start":11335,"length":6,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'bottom' does not exist in type 'CrossReferencePanelOptions'."},{"start":11581,"length":6,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'bottom' does not exist in type 'BudgetAlertPanelOptions'."}]],[285,[{"start":30071,"length":7,"code":2339,"category":1,"messageText":"Property 'content' does not exist on type '{}'."},{"start":30590,"length":6,"code":2339,"category":1,"messageText":"Property 'bottom' does not exist on type '{}'."}]],[288,[{"start":1750,"length":8,"code":2322,"category":1,"messageText":{"messageText":"Type 'Map' is not assignable to type 'Map'.","category":1,"code":2322,"next":[{"messageText":"Type '{ workerId: string; costUsd: number; total: number; apiCalls: number; currentBead: string; }' is missing the following properties from type 'WorkerCost': input, output","category":1,"code":2739,"canonicalHead":{"code":2322,"messageText":"Type '{ workerId: string; costUsd: number; total: number; apiCalls: number; currentBead: string; }' is not assignable to type 'WorkerCost'."}}]},"relatedInformation":[{"file":"./src/tui/utils/costTracking.ts","start":955,"length":8,"messageText":"The expected type comes from property 'byWorker' which is declared here on type 'CostSummary'","category":3,"code":6500}]},{"start":2015,"length":4,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'used' does not exist in type 'BudgetStatus'.","relatedInformation":[{"file":"./src/tui/utils/costTracking.ts","start":1016,"length":6,"messageText":"The expected type comes from property 'budget' which is declared here on type 'CostSummary'","category":3,"code":6500}]},{"start":2112,"length":8,"code":2739,"category":1,"messageText":"Type '{ costPerMinute: number; windowMinutes: number; isHighBurnRate: false; projectedTotalCost: number; }' is missing the following properties from type 'BurnRate': minutesToExhaustion, timeToExhaustion","relatedInformation":[{"file":"./src/tui/utils/costTracking.ts","start":1072,"length":8,"messageText":"The expected type comes from property 'burnRate' which is declared here on type 'CostSummary'","category":3,"code":6500}],"canonicalHead":{"code":2322,"messageText":"Type '{ costPerMinute: number; windowMinutes: number; isHighBurnRate: false; projectedTotalCost: number; }' is not assignable to type 'BurnRate'."}},{"start":2543,"length":82,"code":2741,"category":1,"messageText":"Property 'percentOfTotal' is missing in type '{ workerId: string; costUsd: number; currentBead: string; insight: string; }' but required in type 'TopConsumer'.","relatedInformation":[{"file":"./src/tui/utils/costTracking.ts","start":2877,"length":14,"messageText":"'percentOfTotal' is declared here.","category":3,"code":2728}],"canonicalHead":{"code":2322,"messageText":"Type '{ workerId: string; costUsd: number; currentBead: string; insight: string; }' is not assignable to type 'TopConsumer'."}},{"start":3559,"length":13,"code":2322,"category":1,"messageText":{"messageText":"Type 'Mock' is not assignable to type '((alertId: string) => void) | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type 'MockInstance & (new (...args: any[]) => any) & {}' is not assignable to type '((alertId: string) => void) | undefined'.","category":1,"code":2322}]},"relatedInformation":[{"file":"./src/tui/components/BudgetAlertPanel.ts","start":720,"length":13,"messageText":"The expected type comes from property 'onAcknowledge' which is declared here on type 'BudgetAlertPanelOptions'","category":3,"code":6500}]},{"start":3599,"length":14,"code":2322,"category":1,"messageText":{"messageText":"Type 'Mock' is not assignable to type '(() => void) | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type 'MockInstance & (new (...args: any[]) => any) & {}' is not assignable to type '(() => void) | undefined'.","category":1,"code":2322}]},"relatedInformation":[{"file":"./src/tui/components/BudgetAlertPanel.ts","start":816,"length":14,"messageText":"The expected type comes from property 'onOpenSettings' which is declared here on type 'BudgetAlertPanelOptions'","category":3,"code":6500}]},{"start":4705,"length":8,"code":2739,"category":1,"messageText":"Type '{ costPerMinute: number; windowMinutes: number; isHighBurnRate: true; projectedTotalCost: number; }' is missing the following properties from type 'BurnRate': minutesToExhaustion, timeToExhaustion","canonicalHead":{"code":2322,"messageText":"Type '{ costPerMinute: number; windowMinutes: number; isHighBurnRate: true; projectedTotalCost: number; }' is not assignable to type 'BurnRate'."}},{"start":5117,"length":4,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'used' does not exist in type 'BudgetStatus'."},{"start":5496,"length":4,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'used' does not exist in type 'BudgetStatus'."},{"start":5867,"length":4,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'used' does not exist in type 'BudgetStatus'."},{"start":7184,"length":78,"code":2741,"category":1,"messageText":"Property 'percentOfTotal' is missing in type '{ workerId: string; costUsd: number; currentBead: string; insight: string; }' but required in type 'TopConsumer'.","relatedInformation":[{"file":"./src/tui/utils/costTracking.ts","start":2877,"length":14,"messageText":"'percentOfTotal' is declared here.","category":3,"code":2728}],"canonicalHead":{"code":2322,"messageText":"Type '{ workerId: string; costUsd: number; currentBead: string; insight: string; }' is not assignable to type 'TopConsumer'."}},{"start":7276,"length":78,"code":2741,"category":1,"messageText":"Property 'percentOfTotal' is missing in type '{ workerId: string; costUsd: number; currentBead: undefined; insight: undefined; }' but required in type 'TopConsumer'.","relatedInformation":[{"file":"./src/tui/utils/costTracking.ts","start":2877,"length":14,"messageText":"'percentOfTotal' is declared here.","category":3,"code":2728}],"canonicalHead":{"code":2322,"messageText":"Type '{ workerId: string; costUsd: number; currentBead: undefined; insight: undefined; }' is not assignable to type 'TopConsumer'."}},{"start":9578,"length":8,"code":2741,"category":1,"messageText":"Property 'minutesToExhaustion' is missing in type '{ costPerMinute: number; windowMinutes: number; isHighBurnRate: true; projectedTotalCost: number; timeToExhaustion: string; }' but required in type 'BurnRate'.","relatedInformation":[{"file":"./src/tui/utils/costTracking.ts","start":1767,"length":19,"messageText":"'minutesToExhaustion' is declared here.","category":3,"code":2728}],"canonicalHead":{"code":2322,"messageText":"Type '{ costPerMinute: number; windowMinutes: number; isHighBurnRate: true; projectedTotalCost: number; timeToExhaustion: string; }' is not assignable to type 'BurnRate'."}},{"start":11164,"length":8,"code":2322,"category":1,"messageText":{"messageText":"Type 'Map' is not assignable to type 'Map'.","category":1,"code":2322,"next":[{"messageText":"Type '{ workerId: string; costUsd: number; total: number; apiCalls: number; currentBead: undefined; }' is missing the following properties from type 'WorkerCost': input, output","category":1,"code":2739,"canonicalHead":{"code":2322,"messageText":"Type '{ workerId: string; costUsd: number; total: number; apiCalls: number; currentBead: undefined; }' is not assignable to type 'WorkerCost'."}}]}},{"start":11543,"length":8,"code":2739,"category":1,"messageText":"Type '{ costPerMinute: number; windowMinutes: number; isHighBurnRate: false; projectedTotalCost: number; }' is missing the following properties from type 'BurnRate': minutesToExhaustion, timeToExhaustion","canonicalHead":{"code":2322,"messageText":"Type '{ costPerMinute: number; windowMinutes: number; isHighBurnRate: false; projectedTotalCost: number; }' is not assignable to type 'BurnRate'."}},{"start":11982,"length":4,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'used' does not exist in type 'BudgetStatus'."}]],[297,[{"start":894,"length":6,"code":2322,"category":1,"messageText":{"messageText":"Type '{ id?: string | undefined; type: RecoveryActionType; title: string; description: string; priority: RecoveryPriority; automated: boolean; command?: string | undefined; expectedOutcome?: string | undefined; prerequisites?: string[] | undefined; riskLevel?: \"safe\" | \"moderate\" | \"risky\" | undefined; estimatedTime?: num...' is not assignable to type 'RecoveryAction'.","category":1,"code":2322,"next":[{"messageText":"Types of property 'id' are incompatible.","category":1,"code":2326,"next":[{"messageText":"Type 'string | undefined' is not assignable to type 'string'.","category":1,"code":2322,"next":[{"messageText":"Type 'undefined' is not assignable to type 'string'.","category":1,"code":2322}],"canonicalHead":{"code":2322,"messageText":"Type '{ id?: string | undefined; type: RecoveryActionType; title: string; description: string; priority: RecoveryPriority; automated: boolean; command?: string | undefined; expectedOutcome?: string | undefined; prerequisites?: string[] | undefined; riskLevel?: \"safe\" | \"moderate\" | \"risky\" | undefined; estimatedTime?: num...' is not assignable to type 'RecoveryAction'."}}]}]}},{"start":1255,"length":6,"code":2322,"category":1,"messageText":{"messageText":"Type '{ id: string; errorGroupId?: string | undefined; playbookId?: string | undefined; category: ErrorCategory; title: string; errorSummary: string; actions: RecoveryAction[]; generatedAt?: number | undefined; confidence: number; affectedWorkers: string[]; relatedErrors?: string[] | undefined; isActive: boolean; }' is not assignable to type 'RecoverySuggestion'.","category":1,"code":2322,"next":[{"messageText":"Types of property 'errorGroupId' are incompatible.","category":1,"code":2326,"next":[{"messageText":"Type 'string | undefined' is not assignable to type 'string'.","category":1,"code":2322,"next":[{"messageText":"Type 'undefined' is not assignable to type 'string'.","category":1,"code":2322}],"canonicalHead":{"code":2322,"messageText":"Type '{ id: string; errorGroupId?: string | undefined; playbookId?: string | undefined; category: ErrorCategory; title: string; errorSummary: string; actions: RecoveryAction[]; generatedAt?: number | undefined; confidence: number; affectedWorkers: string[]; relatedErrors?: string[] | undefined; isActive: boolean; }' is not assignable to type 'RecoverySuggestion'."}}]}]}}]],[301,[{"start":10349,"length":11,"code":2322,"category":1,"messageText":"Type '\"directory\"' is not assignable to type '\"bead\" | \"file\" | \"task\"'."}]]],"version":"5.9.3"} \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index 30fb3ef..51cf964 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -5,7 +5,7 @@ export default defineConfig({ plugins: [react()], root: 'src/web/frontend', build: { - outDir: '../../../dist/web', + outDir: '../../../dist/web/public', emptyOutDir: true, }, server: {