@hasna/contacts 0.6.5 → 0.6.7

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.
Files changed (61) hide show
  1. package/dist/cli/index.js +15048 -3917
  2. package/dist/db/companies.d.ts.map +1 -1
  3. package/dist/db/contacts.d.ts +4 -0
  4. package/dist/db/contacts.d.ts.map +1 -1
  5. package/dist/db/coordination.d.ts +30 -0
  6. package/dist/db/coordination.d.ts.map +1 -0
  7. package/dist/db/database.d.ts +2 -1
  8. package/dist/db/database.d.ts.map +1 -1
  9. package/dist/db/documents.d.ts +38 -0
  10. package/dist/db/documents.d.ts.map +1 -0
  11. package/dist/db/field-history.d.ts +17 -0
  12. package/dist/db/field-history.d.ts.map +1 -0
  13. package/dist/db/freshness.d.ts +24 -0
  14. package/dist/db/freshness.d.ts.map +1 -0
  15. package/dist/db/graph.d.ts +21 -0
  16. package/dist/db/graph.d.ts.map +1 -0
  17. package/dist/db/health.d.ts +40 -0
  18. package/dist/db/health.d.ts.map +1 -0
  19. package/dist/db/identity.d.ts +32 -0
  20. package/dist/db/identity.d.ts.map +1 -0
  21. package/dist/db/job-history.d.ts +29 -0
  22. package/dist/db/job-history.d.ts.map +1 -0
  23. package/dist/db/learnings.d.ts +43 -0
  24. package/dist/db/learnings.d.ts.map +1 -0
  25. package/dist/db/org-chart.d.ts +37 -0
  26. package/dist/db/org-chart.d.ts.map +1 -0
  27. package/dist/db/pg-migrations.d.ts +8 -0
  28. package/dist/db/pg-migrations.d.ts.map +1 -0
  29. package/dist/db/signals.d.ts +18 -0
  30. package/dist/db/signals.d.ts.map +1 -0
  31. package/dist/db/tags.d.ts.map +1 -1
  32. package/dist/index.d.ts +33 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +11749 -1422
  35. package/dist/lib/config.d.ts.map +1 -1
  36. package/dist/lib/context.d.ts +5 -0
  37. package/dist/lib/context.d.ts.map +1 -0
  38. package/dist/lib/document-scanner.d.ts +8 -0
  39. package/dist/lib/document-scanner.d.ts.map +1 -0
  40. package/dist/lib/embeddings.d.ts +9 -0
  41. package/dist/lib/embeddings.d.ts.map +1 -0
  42. package/dist/lib/freshness.d.ts +19 -0
  43. package/dist/lib/freshness.d.ts.map +1 -0
  44. package/dist/lib/images.d.ts +30 -0
  45. package/dist/lib/images.d.ts.map +1 -0
  46. package/dist/lib/learning-maintenance.d.ts +8 -0
  47. package/dist/lib/learning-maintenance.d.ts.map +1 -0
  48. package/dist/lib/meeting-capture.d.ts +15 -0
  49. package/dist/lib/meeting-capture.d.ts.map +1 -0
  50. package/dist/lib/signals.d.ts +9 -0
  51. package/dist/lib/signals.d.ts.map +1 -0
  52. package/dist/lib/signature-parser.d.ts +36 -0
  53. package/dist/lib/signature-parser.d.ts.map +1 -0
  54. package/dist/lib/vault.d.ts +24 -0
  55. package/dist/lib/vault.d.ts.map +1 -0
  56. package/dist/mcp/index.js +11419 -668
  57. package/dist/server/index.js +9254 -17
  58. package/dist/server/serve.d.ts.map +1 -1
  59. package/dist/types/index.d.ts +6 -0
  60. package/dist/types/index.d.ts.map +1 -1
  61. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAMA,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,UAAU,IAAI,cAAc,CAG3C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAGxD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAOA,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,UAAU,IAAI,cAAc,CAG3C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAGxD"}
@@ -0,0 +1,5 @@
1
+ import type { Database } from "bun:sqlite";
2
+ export declare function getContactCard(contactId: string, db?: Database): object;
3
+ export declare function getContactBrief(contactId: string, taskContext?: string, db?: Database): object;
4
+ export declare function assembleContext(contactIds: string[], format?: 'meeting_prep' | 'deal_review' | 'outreach' | 'research', db?: Database): Promise<object>;
5
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/lib/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAK3C,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAcvE;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAkC9F;AAED,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,GAAE,cAAc,GAAG,aAAa,GAAG,UAAU,GAAG,UAA2B,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAO7K"}
@@ -0,0 +1,8 @@
1
+ export interface DocumentScanResult {
2
+ fields: Record<string, string>;
3
+ raw_text: string;
4
+ document_type: string;
5
+ confidence: number;
6
+ }
7
+ export declare function scanDocument(imageSource: string, docType?: string): Promise<DocumentScanResult>;
8
+ //# sourceMappingURL=document-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-scanner.d.ts","sourceRoot":"","sources":["../../src/lib/document-scanner.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAoGrG"}
@@ -0,0 +1,9 @@
1
+ import type { Database } from "bun:sqlite";
2
+ export declare function buildContactEmbeddingText(contact: Record<string, unknown>): string;
3
+ export declare function embedContact(contactId: string, db?: Database): Promise<void>;
4
+ export declare function embedAllContacts(db?: Database): Promise<number>;
5
+ export declare function semanticSearch(query: string, limit?: number, db?: Database): Array<{
6
+ contact_id: string;
7
+ score: number;
8
+ }>;
9
+ //# sourceMappingURL=embeddings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/lib/embeddings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAuB3C,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAclF;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAWlF;AAED,wBAAsB,gBAAgB,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAOrE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBrH"}
@@ -0,0 +1,19 @@
1
+ import { Database } from "bun:sqlite";
2
+ export interface FreshnessResult {
3
+ contact_id: string;
4
+ score: number;
5
+ breakdown: Record<string, {
6
+ confidence: string;
7
+ last_verified?: string;
8
+ days_ago?: number;
9
+ }>;
10
+ needs_enrichment: boolean;
11
+ }
12
+ export declare function getFreshnessScore(contactId: string, db?: Database): FreshnessResult;
13
+ export declare function getStaleContacts(_threshold?: number, db?: Database): Array<{
14
+ id: string;
15
+ display_name: string;
16
+ score: number;
17
+ }>;
18
+ export declare function markFieldVerified(contactId: string, fieldName: string, source: string, db?: Database): void;
19
+ //# sourceMappingURL=freshness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freshness.d.ts","sourceRoot":"","sources":["../../src/lib/freshness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7F,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,eAAe,CAoDnF;AAED,wBAAgB,gBAAgB,CAC9B,UAAU,SAAK,EACf,EAAE,CAAC,EAAE,QAAQ,GACZ,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAW5D;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,EAAE,CAAC,EAAE,QAAQ,GACZ,IAAI,CAON"}
@@ -0,0 +1,30 @@
1
+ export declare function getImagesDir(): string;
2
+ /**
3
+ * Save an image for a contact or company.
4
+ * Accepts a file path (copies it) or base64 data (writes it).
5
+ * Returns the stored filename (e.g. "abc123.jpg")
6
+ */
7
+ export declare function saveImage(entityId: string, source: string, options?: {
8
+ format?: string;
9
+ }): string;
10
+ /**
11
+ * Get the image path for an entity. Returns null if no image exists.
12
+ */
13
+ export declare function getImagePath(entityId: string): string | null;
14
+ /**
15
+ * Get image as base64 data URI for embedding in responses.
16
+ */
17
+ export declare function getImageAsBase64(entityId: string): string | null;
18
+ /**
19
+ * Delete an entity's image.
20
+ */
21
+ export declare function deleteImage(entityId: string): boolean;
22
+ /**
23
+ * List all stored images.
24
+ */
25
+ export declare function listImages(): Array<{
26
+ entity_id: string;
27
+ filename: string;
28
+ path: string;
29
+ }>;
30
+ //# sourceMappingURL=images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../src/lib/images.ts"],"names":[],"mappings":"AAcA,wBAAgB,YAAY,IAAI,MAAM,CAGrC;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,MAAM,CAuCR;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOhE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAWrD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAQzF"}
@@ -0,0 +1,8 @@
1
+ import { Database } from "bun:sqlite";
2
+ import { type ContactLearning } from "../db/learnings.js";
3
+ export declare function runMaintenance(db?: Database): {
4
+ decayed: number;
5
+ stale_learnings: number;
6
+ };
7
+ export declare function getStaleLearnings(daysOld?: number, minConfidence?: number, db?: Database): ContactLearning[];
8
+ //# sourceMappingURL=learning-maintenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-maintenance.d.ts","sourceRoot":"","sources":["../../src/lib/learning-maintenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAmC,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG3F,wBAAgB,cAAc,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAK1F;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,SAAK,EACZ,aAAa,SAAK,EAClB,EAAE,CAAC,EAAE,QAAQ,GACZ,eAAe,EAAE,CAUnB"}
@@ -0,0 +1,15 @@
1
+ import type { Database } from "bun:sqlite";
2
+ export declare function ingestMeetingParticipants(event: {
3
+ title: string;
4
+ event_date: string;
5
+ attendees: Array<{
6
+ name: string;
7
+ email: string;
8
+ }>;
9
+ context?: string;
10
+ }, db?: Database): Promise<{
11
+ created: number;
12
+ updated: number;
13
+ contact_ids: string[];
14
+ }>;
15
+ //# sourceMappingURL=meeting-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meeting-capture.d.ts","sourceRoot":"","sources":["../../src/lib/meeting-capture.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE;IACL,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,EACD,EAAE,CAAC,EAAE,QAAQ,GACZ,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAwCtE"}
@@ -0,0 +1,9 @@
1
+ import { Database } from "bun:sqlite";
2
+ export declare function computeRelationshipSignals(contactId: string, db?: Database): {
3
+ health: number;
4
+ engagement_status: string;
5
+ interaction_count_30d: number;
6
+ interaction_count_90d: number;
7
+ };
8
+ export declare function recomputeAllSignals(db?: Database): number;
9
+ //# sourceMappingURL=signals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../src/lib/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,EAAE,CAAC,EAAE,QAAQ,GACZ;IACD,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CA+DA;AAED,wBAAgB,mBAAmB,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAmBzD"}
@@ -0,0 +1,36 @@
1
+ export interface ParsedSignature {
2
+ name?: string;
3
+ title?: string;
4
+ company?: string;
5
+ phone?: string;
6
+ email?: string;
7
+ linkedin?: string;
8
+ website?: string;
9
+ }
10
+ export declare function parseEmailSignature(text: string): ParsedSignature;
11
+ export declare function extractContactsFromEmailThread(participants: Array<{
12
+ name?: string;
13
+ email: string;
14
+ signature?: string;
15
+ }>): Array<{
16
+ display_name: string;
17
+ emails: Array<{
18
+ address: string;
19
+ type: string;
20
+ is_primary: boolean;
21
+ }>;
22
+ job_title?: string;
23
+ social_profiles?: Array<{
24
+ platform: string;
25
+ url: string;
26
+ is_primary: boolean;
27
+ }>;
28
+ phones?: Array<{
29
+ number: string;
30
+ type: string;
31
+ is_primary: boolean;
32
+ }>;
33
+ website?: string;
34
+ source: string;
35
+ }>;
36
+ //# sourceMappingURL=signature-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature-parser.d.ts","sourceRoot":"","sources":["../../src/lib/signature-parser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAqBjE;AAED,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,KAAK,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACxE,KAAK,CAAC;IACP,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAChF,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAuBD"}
@@ -0,0 +1,24 @@
1
+ export declare function initVault(passphrase: string): void;
2
+ export declare function isVaultInitialized(): boolean;
3
+ export declare function unlockVault(passphrase: string): boolean;
4
+ export declare function lockVault(): void;
5
+ export declare function isVaultUnlocked(): boolean;
6
+ export declare function requireVault(): Buffer;
7
+ export declare function encrypt(plaintext: string): {
8
+ ciphertext: string;
9
+ iv: string;
10
+ };
11
+ export declare function decrypt(ciphertext: string, iv: string): string;
12
+ /**
13
+ * Store a file attachment (PLAIN, not encrypted) so agents can access it directly.
14
+ * Text values in the DB are encrypted; file attachments are plain for agent access.
15
+ * Returns the destination path.
16
+ */
17
+ export declare function storeFile(sourcePath: string, entityId: string): string;
18
+ /**
19
+ * Get the file path for a document attachment. Returns null if no file exists.
20
+ */
21
+ export declare function getDocumentFilePath(entityId: string): string | null;
22
+ export declare function decryptFile(encPath: string): Buffer;
23
+ export declare function getDocumentsDir(): string;
24
+ //# sourceMappingURL=vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../src/lib/vault.ts"],"names":[],"mappings":"AAiDA,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAUlD;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAUvD;AAED,wBAAgB,SAAS,IAAI,IAAI,CAGhC;AAED,wBAAgB,eAAe,IAAI,OAAO,CASzC;AAED,wBAAgB,YAAY,IAAI,MAAM,CASrC;AAED,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAQ7E;AAED,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAS9D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOtE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMnE;AAGD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASnD;AAED,wBAAgB,eAAe,IAAI,MAAM,CAGxC"}