llm-trust-guard 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +318 -0
  3. package/dist/guards/agent-communication-guard.d.ts +169 -0
  4. package/dist/guards/agent-communication-guard.d.ts.map +1 -0
  5. package/dist/guards/agent-communication-guard.js +468 -0
  6. package/dist/guards/agent-communication-guard.js.map +1 -0
  7. package/dist/guards/autonomy-escalation-guard.d.ts +137 -0
  8. package/dist/guards/autonomy-escalation-guard.d.ts.map +1 -0
  9. package/dist/guards/autonomy-escalation-guard.js +470 -0
  10. package/dist/guards/autonomy-escalation-guard.js.map +1 -0
  11. package/dist/guards/circuit-breaker.d.ts +142 -0
  12. package/dist/guards/circuit-breaker.d.ts.map +1 -0
  13. package/dist/guards/circuit-breaker.js +347 -0
  14. package/dist/guards/circuit-breaker.js.map +1 -0
  15. package/dist/guards/code-execution-guard.d.ts +114 -0
  16. package/dist/guards/code-execution-guard.d.ts.map +1 -0
  17. package/dist/guards/code-execution-guard.js +467 -0
  18. package/dist/guards/code-execution-guard.js.map +1 -0
  19. package/dist/guards/conversation-guard.d.ts +73 -0
  20. package/dist/guards/conversation-guard.d.ts.map +1 -0
  21. package/dist/guards/conversation-guard.js +281 -0
  22. package/dist/guards/conversation-guard.js.map +1 -0
  23. package/dist/guards/drift-detector.d.ts +182 -0
  24. package/dist/guards/drift-detector.d.ts.map +1 -0
  25. package/dist/guards/drift-detector.js +480 -0
  26. package/dist/guards/drift-detector.js.map +1 -0
  27. package/dist/guards/encoding-detector.d.ts +76 -0
  28. package/dist/guards/encoding-detector.d.ts.map +1 -0
  29. package/dist/guards/encoding-detector.js +698 -0
  30. package/dist/guards/encoding-detector.js.map +1 -0
  31. package/dist/guards/execution-monitor.d.ts +73 -0
  32. package/dist/guards/execution-monitor.d.ts.map +1 -0
  33. package/dist/guards/execution-monitor.js +205 -0
  34. package/dist/guards/execution-monitor.js.map +1 -0
  35. package/dist/guards/input-sanitizer.d.ts +87 -0
  36. package/dist/guards/input-sanitizer.d.ts.map +1 -0
  37. package/dist/guards/input-sanitizer.js +301 -0
  38. package/dist/guards/input-sanitizer.js.map +1 -0
  39. package/dist/guards/mcp-security-guard.d.ts +204 -0
  40. package/dist/guards/mcp-security-guard.d.ts.map +1 -0
  41. package/dist/guards/mcp-security-guard.js +618 -0
  42. package/dist/guards/mcp-security-guard.js.map +1 -0
  43. package/dist/guards/memory-guard.d.ts +124 -0
  44. package/dist/guards/memory-guard.d.ts.map +1 -0
  45. package/dist/guards/memory-guard.js +476 -0
  46. package/dist/guards/memory-guard.js.map +1 -0
  47. package/dist/guards/multimodal-guard.d.ts +93 -0
  48. package/dist/guards/multimodal-guard.d.ts.map +1 -0
  49. package/dist/guards/multimodal-guard.js +507 -0
  50. package/dist/guards/multimodal-guard.js.map +1 -0
  51. package/dist/guards/output-filter.d.ts +76 -0
  52. package/dist/guards/output-filter.d.ts.map +1 -0
  53. package/dist/guards/output-filter.js +289 -0
  54. package/dist/guards/output-filter.js.map +1 -0
  55. package/dist/guards/policy-gate.d.ts +57 -0
  56. package/dist/guards/policy-gate.d.ts.map +1 -0
  57. package/dist/guards/policy-gate.js +182 -0
  58. package/dist/guards/policy-gate.js.map +1 -0
  59. package/dist/guards/prompt-leakage-guard.d.ts +110 -0
  60. package/dist/guards/prompt-leakage-guard.d.ts.map +1 -0
  61. package/dist/guards/prompt-leakage-guard.js +529 -0
  62. package/dist/guards/prompt-leakage-guard.js.map +1 -0
  63. package/dist/guards/rag-guard.d.ts +188 -0
  64. package/dist/guards/rag-guard.d.ts.map +1 -0
  65. package/dist/guards/rag-guard.js +769 -0
  66. package/dist/guards/rag-guard.js.map +1 -0
  67. package/dist/guards/schema-validator.d.ts +35 -0
  68. package/dist/guards/schema-validator.d.ts.map +1 -0
  69. package/dist/guards/schema-validator.js +316 -0
  70. package/dist/guards/schema-validator.js.map +1 -0
  71. package/dist/guards/state-persistence-guard.d.ts +153 -0
  72. package/dist/guards/state-persistence-guard.d.ts.map +1 -0
  73. package/dist/guards/state-persistence-guard.js +484 -0
  74. package/dist/guards/state-persistence-guard.js.map +1 -0
  75. package/dist/guards/tenant-boundary.d.ts +67 -0
  76. package/dist/guards/tenant-boundary.d.ts.map +1 -0
  77. package/dist/guards/tenant-boundary.js +187 -0
  78. package/dist/guards/tenant-boundary.js.map +1 -0
  79. package/dist/guards/tool-chain-validator.d.ts +102 -0
  80. package/dist/guards/tool-chain-validator.d.ts.map +1 -0
  81. package/dist/guards/tool-chain-validator.js +480 -0
  82. package/dist/guards/tool-chain-validator.js.map +1 -0
  83. package/dist/guards/tool-registry.d.ts +45 -0
  84. package/dist/guards/tool-registry.d.ts.map +1 -0
  85. package/dist/guards/tool-registry.js +155 -0
  86. package/dist/guards/tool-registry.js.map +1 -0
  87. package/dist/guards/trust-exploitation-guard.d.ts +134 -0
  88. package/dist/guards/trust-exploitation-guard.d.ts.map +1 -0
  89. package/dist/guards/trust-exploitation-guard.js +354 -0
  90. package/dist/guards/trust-exploitation-guard.js.map +1 -0
  91. package/dist/index.d.ts +133 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +430 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/integrations/express.d.ts +119 -0
  96. package/dist/integrations/express.d.ts.map +1 -0
  97. package/dist/integrations/express.js +244 -0
  98. package/dist/integrations/express.js.map +1 -0
  99. package/dist/integrations/index.d.ts +9 -0
  100. package/dist/integrations/index.d.ts.map +1 -0
  101. package/dist/integrations/index.js +26 -0
  102. package/dist/integrations/index.js.map +1 -0
  103. package/dist/integrations/langchain.d.ts +165 -0
  104. package/dist/integrations/langchain.d.ts.map +1 -0
  105. package/dist/integrations/langchain.js +308 -0
  106. package/dist/integrations/langchain.js.map +1 -0
  107. package/dist/integrations/openai.d.ts +205 -0
  108. package/dist/integrations/openai.d.ts.map +1 -0
  109. package/dist/integrations/openai.js +380 -0
  110. package/dist/integrations/openai.js.map +1 -0
  111. package/dist/types/index.d.ts +245 -0
  112. package/dist/types/index.d.ts.map +1 -0
  113. package/dist/types/index.js +6 -0
  114. package/dist/types/index.js.map +1 -0
  115. package/package.json +64 -0
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ /**
3
+ * L4 Tenant Boundary Guard
4
+ *
5
+ * Enforces strict multi-tenant isolation.
6
+ * Prevents cross-tenant data access.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.TenantBoundary = void 0;
10
+ class TenantBoundary {
11
+ constructor(config = {}) {
12
+ this.validTenants = config.validTenants || new Set();
13
+ this.resourceOwnership = config.resourceOwnership || new Map();
14
+ this.resourceIdFields = config.resourceIdFields || [
15
+ "order_id",
16
+ "customer_id",
17
+ "invoice_id",
18
+ "document_id",
19
+ "resource_id",
20
+ "id",
21
+ ];
22
+ this.listOperations = config.listOperations || [
23
+ "list",
24
+ "search",
25
+ "query",
26
+ "find",
27
+ "get_all",
28
+ ];
29
+ }
30
+ /**
31
+ * Validate session has valid tenant
32
+ */
33
+ validateSession(session, requestId = "") {
34
+ if (!session) {
35
+ return { valid: false, error: "Missing session context" };
36
+ }
37
+ if (!session.authenticated) {
38
+ return { valid: false, error: "Session not authenticated" };
39
+ }
40
+ if (!session.tenant_id) {
41
+ return { valid: false, error: "Missing tenant_id in session" };
42
+ }
43
+ // Validate tenant if we have a whitelist
44
+ if (this.validTenants.size > 0 && !this.validTenants.has(session.tenant_id)) {
45
+ if (requestId) {
46
+ console.log(`[L4:${requestId}] BLOCKED: Invalid tenant '${session.tenant_id}'`);
47
+ }
48
+ return { valid: false, error: `Invalid tenant: ${session.tenant_id}` };
49
+ }
50
+ return { valid: true };
51
+ }
52
+ /**
53
+ * Check resource ownership
54
+ */
55
+ checkResourceOwnership(resourceId, session, requestId = "") {
56
+ const ownership = this.resourceOwnership.get(resourceId);
57
+ if (!ownership) {
58
+ // Resource not in registry - allow (tool will return not found)
59
+ return { allowed: true };
60
+ }
61
+ if (ownership.tenant_id !== session.tenant_id) {
62
+ if (requestId) {
63
+ console.log(`[L4:${requestId}] BLOCKED: Cross-tenant access`);
64
+ console.log(`[L4:${requestId}] Session: ${session.tenant_id}, Resource: ${ownership.tenant_id}`);
65
+ }
66
+ return { allowed: false, resource_tenant: ownership.tenant_id };
67
+ }
68
+ return { allowed: true, resource_tenant: ownership.tenant_id };
69
+ }
70
+ /**
71
+ * Check if tenant_id parameter matches session
72
+ */
73
+ checkTenantParameter(params, session, requestId = "") {
74
+ if (params.tenant_id && params.tenant_id !== session.tenant_id) {
75
+ if (requestId) {
76
+ console.log(`[L4:${requestId}] BLOCKED: Tenant parameter manipulation`);
77
+ }
78
+ return {
79
+ allowed: false,
80
+ reason: `Cannot access tenant ${params.tenant_id} - bound to ${session.tenant_id}`,
81
+ };
82
+ }
83
+ return { allowed: true };
84
+ }
85
+ /**
86
+ * Enforce tenant filtering for list operations
87
+ */
88
+ enforceTenantFilter(toolName, params, session, requestId = "") {
89
+ // Check if this is a list operation
90
+ const isListOp = this.listOperations.some((op) => toolName.toLowerCase().includes(op));
91
+ if (isListOp) {
92
+ // Block if trying to access different tenant
93
+ if (params.tenant_id && params.tenant_id !== session.tenant_id) {
94
+ return {
95
+ allowed: false,
96
+ enforced_params: params,
97
+ reason: `Cannot filter by tenant ${params.tenant_id}`,
98
+ };
99
+ }
100
+ // Enforce session tenant
101
+ const enforced_params = { ...params, tenant_id: session.tenant_id };
102
+ if (requestId) {
103
+ console.log(`[L4:${requestId}] Enforcing tenant filter: ${session.tenant_id}`);
104
+ }
105
+ return { allowed: true, enforced_params };
106
+ }
107
+ return { allowed: true, enforced_params: params };
108
+ }
109
+ /**
110
+ * Complete tenant boundary check
111
+ */
112
+ check(toolName, params, session, requestId = "") {
113
+ // Validate session
114
+ const sessionCheck = this.validateSession(session, requestId);
115
+ if (!sessionCheck.valid) {
116
+ return {
117
+ allowed: false,
118
+ reason: sessionCheck.error,
119
+ violations: ["INVALID_SESSION"],
120
+ session_tenant: "",
121
+ };
122
+ }
123
+ const validSession = session;
124
+ // Check tenant parameter manipulation
125
+ const paramCheck = this.checkTenantParameter(params, validSession, requestId);
126
+ if (!paramCheck.allowed) {
127
+ return {
128
+ allowed: false,
129
+ reason: paramCheck.reason,
130
+ violations: ["TENANT_MANIPULATION"],
131
+ session_tenant: validSession.tenant_id,
132
+ };
133
+ }
134
+ // Check resource ownership
135
+ for (const field of this.resourceIdFields) {
136
+ if (params[field]) {
137
+ const ownershipCheck = this.checkResourceOwnership(params[field], validSession, requestId);
138
+ if (!ownershipCheck.allowed) {
139
+ return {
140
+ allowed: false,
141
+ reason: `Resource ${params[field]} belongs to different tenant`,
142
+ violations: ["CROSS_TENANT_ACCESS"],
143
+ session_tenant: validSession.tenant_id,
144
+ resource_tenant: ownershipCheck.resource_tenant,
145
+ };
146
+ }
147
+ }
148
+ }
149
+ // Enforce tenant filtering
150
+ const filterCheck = this.enforceTenantFilter(toolName, params, validSession, requestId);
151
+ if (!filterCheck.allowed) {
152
+ return {
153
+ allowed: false,
154
+ reason: filterCheck.reason,
155
+ violations: ["TENANT_FILTER_BYPASS"],
156
+ session_tenant: validSession.tenant_id,
157
+ };
158
+ }
159
+ if (requestId) {
160
+ console.log(`[L4:${requestId}] Tenant boundary check PASSED`);
161
+ }
162
+ return {
163
+ allowed: true,
164
+ violations: [],
165
+ session_tenant: validSession.tenant_id,
166
+ enforced_params: filterCheck.enforced_params,
167
+ };
168
+ }
169
+ /**
170
+ * Register resource ownership
171
+ */
172
+ registerResource(resourceId, tenantId, resourceType) {
173
+ this.resourceOwnership.set(resourceId, {
174
+ resource_id: resourceId,
175
+ tenant_id: tenantId,
176
+ resource_type: resourceType,
177
+ });
178
+ }
179
+ /**
180
+ * Add valid tenant
181
+ */
182
+ addValidTenant(tenantId) {
183
+ this.validTenants.add(tenantId);
184
+ }
185
+ }
186
+ exports.TenantBoundary = TenantBoundary;
187
+ //# sourceMappingURL=tenant-boundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-boundary.js","sourceRoot":"","sources":["../../src/guards/tenant-boundary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * ToolChainValidator v2
3
+ *
4
+ * Detects and prevents dangerous tool chaining attacks by:
5
+ * - Validating tool call sequences
6
+ * - Blocking dangerous tool combinations
7
+ * - Enforcing cooldown periods between sensitive operations
8
+ * - Tracking tool usage patterns for anomaly detection
9
+ *
10
+ * v2 Enhancements (2026):
11
+ * - ASI07: Agent State Corruption detection
12
+ * - ASI04: Agent Autonomy Escalation detection
13
+ * - Loop/repetition attack detection
14
+ * - Resource accumulation monitoring
15
+ * - Time-based anomaly detection
16
+ * - Cumulative impact scoring
17
+ * - Cross-tool data flow tracking
18
+ */
19
+ export interface ToolChainValidatorConfig {
20
+ forbiddenSequences?: ForbiddenSequence[];
21
+ requiredPreconditions?: ToolPrecondition[];
22
+ toolCooldowns?: Record<string, number>;
23
+ maxToolsPerRequest?: number;
24
+ maxSensitiveToolsPerSession?: number;
25
+ sensitiveTools?: string[];
26
+ sessionTTLMinutes?: number;
27
+ enableStateTracking?: boolean;
28
+ stateModifyingTools?: string[];
29
+ enableAutonomyDetection?: boolean;
30
+ autonomyExpandingTools?: string[];
31
+ enableLoopDetection?: boolean;
32
+ maxRepetitionsPerMinute?: number;
33
+ enableResourceTracking?: boolean;
34
+ resourceAcquiringTools?: string[];
35
+ maxResourcesPerSession?: number;
36
+ enableTimeAnomalyDetection?: boolean;
37
+ minTimeBetweenToolsMs?: number;
38
+ enableImpactScoring?: boolean;
39
+ maxCumulativeImpact?: number;
40
+ toolImpactScores?: Record<string, number>;
41
+ }
42
+ export interface ForbiddenSequence {
43
+ name: string;
44
+ sequence: string[];
45
+ reason: string;
46
+ severity: "warning" | "block";
47
+ }
48
+ export interface ToolPrecondition {
49
+ tool: string;
50
+ requires: string[];
51
+ within_turns?: number;
52
+ }
53
+ export interface ToolChainValidatorResult {
54
+ allowed: boolean;
55
+ reason?: string;
56
+ violations: string[];
57
+ chain_analysis: {
58
+ current_tool: string;
59
+ previous_tools: string[];
60
+ forbidden_sequences_detected: string[];
61
+ precondition_violations: string[];
62
+ cooldown_violations: string[];
63
+ state_corruption_detected?: boolean;
64
+ autonomy_escalation_detected?: boolean;
65
+ loop_detected?: boolean;
66
+ resource_accumulation?: number;
67
+ time_anomaly_detected?: boolean;
68
+ cumulative_impact?: number;
69
+ };
70
+ warnings: string[];
71
+ }
72
+ export declare class ToolChainValidator {
73
+ private config;
74
+ private sessions;
75
+ private defaultForbiddenSequences;
76
+ private defaultSensitiveTools;
77
+ private defaultStateModifyingTools;
78
+ private defaultAutonomyExpandingTools;
79
+ private defaultResourceAcquiringTools;
80
+ private defaultToolImpactScores;
81
+ constructor(config?: ToolChainValidatorConfig);
82
+ /**
83
+ * Validate a tool call in context of the session
84
+ */
85
+ validate(sessionId: string, toolName: string, allToolsInRequest?: string[], requestId?: string): ToolChainValidatorResult;
86
+ /**
87
+ * Validate multiple tools at once (for parallel tool calls)
88
+ */
89
+ validateBatch(sessionId: string, tools: string[], requestId?: string): ToolChainValidatorResult;
90
+ /**
91
+ * Get session tool history
92
+ */
93
+ getToolHistory(sessionId: string): string[];
94
+ /**
95
+ * Reset session
96
+ */
97
+ resetSession(sessionId: string): void;
98
+ private getOrCreateSession;
99
+ private matchesSequence;
100
+ private cleanupSessions;
101
+ }
102
+ //# sourceMappingURL=tool-chain-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-chain-validator.d.ts","sourceRoot":"","sources":["../../src/guards/tool-chain-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,wBAAwB;IAEvC,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,qBAAqB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAE3C,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAErC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE/B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAElC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,4BAA4B,EAAE,MAAM,EAAE,CAAC;QACvC,uBAAuB,EAAE,MAAM,EAAE,CAAC;QAClC,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAE9B,yBAAyB,CAAC,EAAE,OAAO,CAAC;QACpC,4BAA4B,CAAC,EAAE,OAAO,CAAC;QACvC,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;QAC/B,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA0BD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,QAAQ,CAAuC;IAEvD,OAAO,CAAC,yBAAyB,CAqC/B;IAEF,OAAO,CAAC,qBAAqB,CAgB3B;IAGF,OAAO,CAAC,0BAA0B,CAchC;IAGF,OAAO,CAAC,6BAA6B,CAgBnC;IAGF,OAAO,CAAC,6BAA6B,CAanC;IAGF,OAAO,CAAC,uBAAuB,CAgB7B;gBAEU,MAAM,GAAE,wBAA6B;IA8BjD;;OAEG;IACH,QAAQ,CACN,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAC5B,SAAS,GAAE,MAAW,GACrB,wBAAwB;IAiP3B;;OAEG;IACH,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,GAAE,MAAW,GACrB,wBAAwB;IAwD3B;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAK3C;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIrC,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,eAAe;CAUxB"}