cursor-history 0.5.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -0
- package/README.md +385 -2
- package/dist/cli/commands/backup.d.ts +9 -0
- package/dist/cli/commands/backup.d.ts.map +1 -0
- package/dist/cli/commands/backup.js +168 -0
- package/dist/cli/commands/backup.js.map +1 -0
- package/dist/cli/commands/export.d.ts.map +1 -1
- package/dist/cli/commands/export.js +39 -7
- package/dist/cli/commands/export.js.map +1 -1
- package/dist/cli/commands/list-backups.d.ts +9 -0
- package/dist/cli/commands/list-backups.d.ts.map +1 -0
- package/dist/cli/commands/list-backups.js +166 -0
- package/dist/cli/commands/list-backups.js.map +1 -0
- package/dist/cli/commands/list.d.ts.map +1 -1
- package/dist/cli/commands/list.js +44 -9
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/migrate-session.d.ts +12 -0
- package/dist/cli/commands/migrate-session.d.ts.map +1 -0
- package/dist/cli/commands/migrate-session.js +125 -0
- package/dist/cli/commands/migrate-session.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +13 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +122 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/restore.d.ts +9 -0
- package/dist/cli/commands/restore.d.ts.map +1 -0
- package/dist/cli/commands/restore.js +192 -0
- package/dist/cli/commands/restore.js.map +1 -0
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +31 -3
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/show.d.ts.map +1 -1
- package/dist/cli/commands/show.js +32 -4
- package/dist/cli/commands/show.js.map +1 -1
- package/dist/cli/errors.d.ts +56 -0
- package/dist/cli/errors.d.ts.map +1 -0
- package/dist/cli/errors.js +90 -0
- package/dist/cli/errors.js.map +1 -0
- package/dist/cli/index.js +11 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/core/backup.d.ts +89 -0
- package/dist/core/backup.d.ts.map +1 -0
- package/dist/core/backup.js +709 -0
- package/dist/core/backup.js.map +1 -0
- package/dist/core/migrate.d.ts +40 -0
- package/dist/core/migrate.d.ts.map +1 -0
- package/dist/core/migrate.js +586 -0
- package/dist/core/migrate.js.map +1 -0
- package/dist/core/storage.d.ts +78 -6
- package/dist/core/storage.d.ts.map +1 -1
- package/dist/core/storage.js +327 -45
- package/dist/core/storage.js.map +1 -1
- package/dist/core/types.d.ts +280 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/lib/backup.d.ts +98 -0
- package/dist/lib/backup.d.ts.map +1 -0
- package/dist/lib/backup.js +108 -0
- package/dist/lib/backup.js.map +1 -0
- package/dist/lib/config.d.ts +33 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +81 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/errors.d.ts +257 -30
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +404 -54
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/index.d.ts +219 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +520 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/platform.d.ts +11 -0
- package/dist/lib/platform.d.ts.map +1 -1
- package/dist/lib/platform.js +32 -0
- package/dist/lib/platform.js.map +1 -1
- package/dist/lib/types.d.ts +374 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +9 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utils.d.ts +17 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +20 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +32 -4
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error handling utilities and exit codes
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* CLI exit codes following Unix conventions
|
|
6
|
+
*/
|
|
7
|
+
export const ExitCode = {
|
|
8
|
+
SUCCESS: 0,
|
|
9
|
+
GENERAL_ERROR: 1,
|
|
10
|
+
USAGE_ERROR: 2, // Invalid arguments
|
|
11
|
+
NOT_FOUND: 3, // Resource not found
|
|
12
|
+
IO_ERROR: 4, // File/database access error
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Custom error class for CLI errors with exit codes
|
|
16
|
+
*/
|
|
17
|
+
export class CliError extends Error {
|
|
18
|
+
exitCode;
|
|
19
|
+
constructor(message, exitCode = ExitCode.GENERAL_ERROR) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.exitCode = exitCode;
|
|
22
|
+
this.name = 'CliError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Error for when no Cursor installation is found
|
|
27
|
+
*/
|
|
28
|
+
export class CursorNotFoundError extends CliError {
|
|
29
|
+
constructor(searchPath) {
|
|
30
|
+
super(`Cursor data not found at: ${searchPath}\n` +
|
|
31
|
+
'Make sure Cursor is installed and has been used at least once.\n' +
|
|
32
|
+
'You can specify a custom path with --data-path or CURSOR_DATA_PATH env var.', ExitCode.NOT_FOUND);
|
|
33
|
+
this.name = 'CursorNotFoundError';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Error for when no chat history exists
|
|
38
|
+
*/
|
|
39
|
+
export class NoHistoryError extends CliError {
|
|
40
|
+
constructor() {
|
|
41
|
+
super('No chat history found.\n' + 'Start a conversation in Cursor to create chat history.', ExitCode.NOT_FOUND);
|
|
42
|
+
this.name = 'NoHistoryError';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Error for invalid session index
|
|
47
|
+
*/
|
|
48
|
+
export class SessionNotFoundError extends CliError {
|
|
49
|
+
constructor(index, maxIndex) {
|
|
50
|
+
const message = maxIndex > 0
|
|
51
|
+
? `Session #${index} not found. Valid range: 1-${maxIndex}`
|
|
52
|
+
: 'No sessions found.';
|
|
53
|
+
super(message, ExitCode.NOT_FOUND);
|
|
54
|
+
this.name = 'SessionNotFoundError';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Error for file already exists
|
|
59
|
+
*/
|
|
60
|
+
export class FileExistsError extends CliError {
|
|
61
|
+
constructor(path) {
|
|
62
|
+
super(`File already exists: ${path}\nUse --force to overwrite.`, ExitCode.IO_ERROR);
|
|
63
|
+
this.name = 'FileExistsError';
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Error for search with no results
|
|
68
|
+
*/
|
|
69
|
+
export class NoSearchResultsError extends CliError {
|
|
70
|
+
constructor(query) {
|
|
71
|
+
super(`No results found for: "${query}"`, ExitCode.NOT_FOUND);
|
|
72
|
+
this.name = 'NoSearchResultsError';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Handle an error and exit with appropriate code
|
|
77
|
+
*/
|
|
78
|
+
export function handleError(error) {
|
|
79
|
+
if (error instanceof CliError) {
|
|
80
|
+
console.error(error.message);
|
|
81
|
+
process.exit(error.exitCode);
|
|
82
|
+
}
|
|
83
|
+
if (error instanceof Error) {
|
|
84
|
+
console.error(`Error: ${error.message}`);
|
|
85
|
+
process.exit(ExitCode.GENERAL_ERROR);
|
|
86
|
+
}
|
|
87
|
+
console.error('An unexpected error occurred');
|
|
88
|
+
process.exit(ExitCode.GENERAL_ERROR);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/cli/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO,EAAE,CAAC;IACV,aAAa,EAAE,CAAC;IAChB,WAAW,EAAE,CAAC,EAAE,oBAAoB;IACpC,SAAS,EAAE,CAAC,EAAE,qBAAqB;IACnC,QAAQ,EAAE,CAAC,EAAE,6BAA6B;CAClC,CAAC;AAIX;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGf;IAFlB,YACE,OAAe,EACC,WAAqB,QAAQ,CAAC,aAAa;QAE3D,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,aAAQ,GAAR,QAAQ,CAAmC;QAG3D,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,UAAkB;QAC5B,KAAK,CACH,6BAA6B,UAAU,IAAI;YACzC,kEAAkE;YAClE,6EAA6E,EAC/E,QAAQ,CAAC,SAAS,CACnB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAC1C;QACE,KAAK,CACH,0BAA0B,GAAG,wDAAwD,EACrF,QAAQ,CAAC,SAAS,CACnB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,QAAQ;IAChD,YAAY,KAAa,EAAE,QAAgB;QACzC,MAAM,OAAO,GACX,QAAQ,GAAG,CAAC;YACV,CAAC,CAAC,YAAY,KAAK,8BAA8B,QAAQ,EAAE;YAC3D,CAAC,CAAC,oBAAoB,CAAC;QAC3B,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,IAAY;QACtB,KAAK,CAAC,wBAAwB,IAAI,6BAA6B,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpF,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,QAAQ;IAChD,YAAY,KAAa;QACvB,KAAK,CAAC,0BAA0B,KAAK,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AACvC,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import { Command } from 'commander';
|
|
|
6
6
|
import { readFileSync } from 'node:fs';
|
|
7
7
|
import { fileURLToPath } from 'node:url';
|
|
8
8
|
import { dirname, join } from 'node:path';
|
|
9
|
-
import { handleError, ExitCode } from '
|
|
9
|
+
import { handleError, ExitCode } from './errors.js';
|
|
10
10
|
// Read version from package.json
|
|
11
11
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
12
12
|
const packageJson = JSON.parse(readFileSync(join(__dirname, '../../package.json'), 'utf-8'));
|
|
@@ -25,10 +25,20 @@ async function loadCommands() {
|
|
|
25
25
|
const { registerShowCommand } = await import('./commands/show.js');
|
|
26
26
|
const { registerSearchCommand } = await import('./commands/search.js');
|
|
27
27
|
const { registerExportCommand } = await import('./commands/export.js');
|
|
28
|
+
const { registerMigrateSessionCommand } = await import('./commands/migrate-session.js');
|
|
29
|
+
const { registerMigrateCommand } = await import('./commands/migrate.js');
|
|
30
|
+
const { registerBackupCommand } = await import('./commands/backup.js');
|
|
31
|
+
const { registerRestoreCommand } = await import('./commands/restore.js');
|
|
32
|
+
const { registerListBackupsCommand } = await import('./commands/list-backups.js');
|
|
28
33
|
registerListCommand(program);
|
|
29
34
|
registerShowCommand(program);
|
|
30
35
|
registerSearchCommand(program);
|
|
31
36
|
registerExportCommand(program);
|
|
37
|
+
registerMigrateSessionCommand(program);
|
|
38
|
+
registerMigrateCommand(program);
|
|
39
|
+
registerBackupCommand(program);
|
|
40
|
+
registerRestoreCommand(program);
|
|
41
|
+
registerListBackupsCommand(program);
|
|
32
42
|
}
|
|
33
43
|
// Main execution
|
|
34
44
|
async function main() {
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core backup and restore functionality
|
|
3
|
+
*
|
|
4
|
+
* This module provides low-level backup operations:
|
|
5
|
+
* - SQLite database backup using better-sqlite3 backup API
|
|
6
|
+
* - Zip creation/extraction using adm-zip
|
|
7
|
+
* - Manifest generation with checksums
|
|
8
|
+
* - Integrity validation
|
|
9
|
+
*/
|
|
10
|
+
import Database from 'better-sqlite3';
|
|
11
|
+
import type { BackupManifest, BackupFileEntry, BackupStats, BackupConfig, BackupResult, RestoreConfig, RestoreResult, BackupValidation, BackupInfo } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* T005: Get the default backup directory path
|
|
14
|
+
* Returns ~/cursor-history-backups/
|
|
15
|
+
*/
|
|
16
|
+
export declare function getDefaultBackupDir(): string;
|
|
17
|
+
/**
|
|
18
|
+
* T006: Compute SHA-256 checksum of a buffer
|
|
19
|
+
*/
|
|
20
|
+
export declare function computeChecksum(buffer: Buffer): string;
|
|
21
|
+
/**
|
|
22
|
+
* T007: Generate a timestamped backup filename
|
|
23
|
+
* Format: cursor_history_backup_YYYY-MM-DD_HHMMSS.zip
|
|
24
|
+
*/
|
|
25
|
+
export declare function generateBackupFilename(): string;
|
|
26
|
+
/**
|
|
27
|
+
* Information about a discovered database file
|
|
28
|
+
*/
|
|
29
|
+
export interface DatabaseFileInfo {
|
|
30
|
+
/** Absolute path to the database file */
|
|
31
|
+
absolutePath: string;
|
|
32
|
+
/** Path relative to the Cursor data directory (for zip storage) */
|
|
33
|
+
relativePath: string;
|
|
34
|
+
/** File size in bytes */
|
|
35
|
+
size: number;
|
|
36
|
+
/** File type */
|
|
37
|
+
type: 'global-db' | 'workspace-db' | 'workspace-json';
|
|
38
|
+
/** Workspace ID (for workspace DBs) */
|
|
39
|
+
workspaceId?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* T008: Scan for all database files in the Cursor data directory
|
|
43
|
+
* Discovers globalStorage/state.vscdb and workspaceStorage/{id}/state.vscdb
|
|
44
|
+
*/
|
|
45
|
+
export declare function scanDatabaseFiles(dataPath: string): DatabaseFileInfo[];
|
|
46
|
+
/**
|
|
47
|
+
* T009: Create a manifest object from file entries and stats
|
|
48
|
+
*/
|
|
49
|
+
export declare function createManifest(files: BackupFileEntry[], stats: BackupStats): BackupManifest;
|
|
50
|
+
/**
|
|
51
|
+
* T011: Backup a single database file using SQLite backup API
|
|
52
|
+
* This ensures a consistent snapshot even if Cursor is running
|
|
53
|
+
*/
|
|
54
|
+
export declare function backupDatabase(sourcePath: string, destPath: string): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* T013: Check if there's enough disk space for the backup
|
|
57
|
+
* Returns { available, required, sufficient }
|
|
58
|
+
*/
|
|
59
|
+
export declare function checkDiskSpace(outputPath: string, requiredBytes: number): {
|
|
60
|
+
available: number;
|
|
61
|
+
required: number;
|
|
62
|
+
sufficient: boolean;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* T012-T016: Create a full backup of all Cursor chat history
|
|
66
|
+
*/
|
|
67
|
+
export declare function createBackup(config?: BackupConfig): Promise<BackupResult>;
|
|
68
|
+
/**
|
|
69
|
+
* T025: Open a database from a backup zip file
|
|
70
|
+
* Note: better-sqlite3 cannot open directly from buffer, so we extract to a temp file
|
|
71
|
+
*/
|
|
72
|
+
export declare function openBackupDatabase(backupPath: string, dbPath: string): Database.Database;
|
|
73
|
+
/**
|
|
74
|
+
* Read manifest from a backup file
|
|
75
|
+
*/
|
|
76
|
+
export declare function readBackupManifest(backupPath: string): BackupManifest | null;
|
|
77
|
+
/**
|
|
78
|
+
* T026: Validate backup integrity
|
|
79
|
+
*/
|
|
80
|
+
export declare function validateBackup(backupPath: string): BackupValidation;
|
|
81
|
+
/**
|
|
82
|
+
* T040-T045: Restore backup to Cursor data directory
|
|
83
|
+
*/
|
|
84
|
+
export declare function restoreBackup(config: RestoreConfig): RestoreResult;
|
|
85
|
+
/**
|
|
86
|
+
* T055-T057: List all backup files in a directory
|
|
87
|
+
*/
|
|
88
|
+
export declare function listBackups(directory?: string): BackupInfo[];
|
|
89
|
+
//# sourceMappingURL=backup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/core/backup.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,UAAU,EACX,MAAM,YAAY,CAAC;AAUpB;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAU/C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,IAAI,EAAE,WAAW,GAAG,cAAc,GAAG,gBAAgB,CAAC;IACtD,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CA6DtE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EAAE,EACxB,KAAK,EAAE,WAAW,GACjB,cAAc,CAWhB;AAmCD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAyB9D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAsM/E;AAMD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAkCxF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAW5E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAiGnE;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CA+HlE;AAMD;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAiD5D"}
|