@zincapp/zn-vault-agent 1.3.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 (88) hide show
  1. package/README.md +701 -0
  2. package/deploy/logrotate.d/zn-vault-agent +14 -0
  3. package/deploy/systemd/zn-vault-agent.service +75 -0
  4. package/dist/commands/certs.d.ts +3 -0
  5. package/dist/commands/certs.d.ts.map +1 -0
  6. package/dist/commands/certs.js +369 -0
  7. package/dist/commands/certs.js.map +1 -0
  8. package/dist/commands/exec.d.ts +3 -0
  9. package/dist/commands/exec.d.ts.map +1 -0
  10. package/dist/commands/exec.js +193 -0
  11. package/dist/commands/exec.js.map +1 -0
  12. package/dist/commands/login.d.ts +3 -0
  13. package/dist/commands/login.d.ts.map +1 -0
  14. package/dist/commands/login.js +234 -0
  15. package/dist/commands/login.js.map +1 -0
  16. package/dist/commands/secrets.d.ts +3 -0
  17. package/dist/commands/secrets.d.ts.map +1 -0
  18. package/dist/commands/secrets.js +445 -0
  19. package/dist/commands/secrets.js.map +1 -0
  20. package/dist/commands/setup.d.ts +9 -0
  21. package/dist/commands/setup.d.ts.map +1 -0
  22. package/dist/commands/setup.js +346 -0
  23. package/dist/commands/setup.js.map +1 -0
  24. package/dist/commands/start.d.ts +3 -0
  25. package/dist/commands/start.d.ts.map +1 -0
  26. package/dist/commands/start.js +113 -0
  27. package/dist/commands/start.js.map +1 -0
  28. package/dist/commands/status.d.ts +3 -0
  29. package/dist/commands/status.d.ts.map +1 -0
  30. package/dist/commands/status.js +85 -0
  31. package/dist/commands/status.js.map +1 -0
  32. package/dist/commands/sync.d.ts +3 -0
  33. package/dist/commands/sync.d.ts.map +1 -0
  34. package/dist/commands/sync.js +126 -0
  35. package/dist/commands/sync.js.map +1 -0
  36. package/dist/index.d.ts +3 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +28 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/lib/api.d.ts +104 -0
  41. package/dist/lib/api.d.ts.map +1 -0
  42. package/dist/lib/api.js +338 -0
  43. package/dist/lib/api.js.map +1 -0
  44. package/dist/lib/config.d.ts +164 -0
  45. package/dist/lib/config.d.ts.map +1 -0
  46. package/dist/lib/config.js +299 -0
  47. package/dist/lib/config.js.map +1 -0
  48. package/dist/lib/deployer.d.ts +22 -0
  49. package/dist/lib/deployer.d.ts.map +1 -0
  50. package/dist/lib/deployer.js +407 -0
  51. package/dist/lib/deployer.js.map +1 -0
  52. package/dist/lib/health.d.ts +68 -0
  53. package/dist/lib/health.d.ts.map +1 -0
  54. package/dist/lib/health.js +216 -0
  55. package/dist/lib/health.js.map +1 -0
  56. package/dist/lib/logger.d.ts +38 -0
  57. package/dist/lib/logger.d.ts.map +1 -0
  58. package/dist/lib/logger.js +161 -0
  59. package/dist/lib/logger.js.map +1 -0
  60. package/dist/lib/metrics.d.ts +50 -0
  61. package/dist/lib/metrics.d.ts.map +1 -0
  62. package/dist/lib/metrics.js +273 -0
  63. package/dist/lib/metrics.js.map +1 -0
  64. package/dist/lib/secret-deployer.d.ts +22 -0
  65. package/dist/lib/secret-deployer.d.ts.map +1 -0
  66. package/dist/lib/secret-deployer.js +201 -0
  67. package/dist/lib/secret-deployer.js.map +1 -0
  68. package/dist/lib/validation.d.ts +25 -0
  69. package/dist/lib/validation.d.ts.map +1 -0
  70. package/dist/lib/validation.js +257 -0
  71. package/dist/lib/validation.js.map +1 -0
  72. package/dist/lib/websocket.d.ts +74 -0
  73. package/dist/lib/websocket.d.ts.map +1 -0
  74. package/dist/lib/websocket.js +441 -0
  75. package/dist/lib/websocket.js.map +1 -0
  76. package/dist/services/api-key-renewal.d.ts +13 -0
  77. package/dist/services/api-key-renewal.d.ts.map +1 -0
  78. package/dist/services/api-key-renewal.js +204 -0
  79. package/dist/services/api-key-renewal.js.map +1 -0
  80. package/dist/services/npm-auto-update.d.ts +60 -0
  81. package/dist/services/npm-auto-update.d.ts.map +1 -0
  82. package/dist/services/npm-auto-update.js +245 -0
  83. package/dist/services/npm-auto-update.js.map +1 -0
  84. package/dist/types/update.d.ts +19 -0
  85. package/dist/types/update.d.ts.map +1 -0
  86. package/dist/types/update.js +7 -0
  87. package/dist/types/update.js.map +1 -0
  88. package/package.json +74 -0
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Certificate target configuration
3
+ */
4
+ export interface CertTarget {
5
+ /** Certificate ID in vault */
6
+ certId: string;
7
+ /** Human-readable name */
8
+ name: string;
9
+ /** Output paths for certificate components */
10
+ outputs: {
11
+ /** Combined cert+key (for HAProxy) */
12
+ combined?: string;
13
+ /** Certificate only */
14
+ cert?: string;
15
+ /** Private key only */
16
+ key?: string;
17
+ /** CA chain */
18
+ chain?: string;
19
+ /** Full chain (cert + chain) */
20
+ fullchain?: string;
21
+ };
22
+ /** File ownership (user:group) */
23
+ owner?: string;
24
+ /** File permissions (e.g., "0640") */
25
+ mode?: string;
26
+ /** Command to run after cert update */
27
+ reloadCmd?: string;
28
+ /** Health check command (must return 0 for success) */
29
+ healthCheckCmd?: string;
30
+ /** Last known fingerprint */
31
+ lastFingerprint?: string;
32
+ /** Last sync timestamp */
33
+ lastSync?: string;
34
+ }
35
+ /**
36
+ * Secret target configuration
37
+ */
38
+ export interface SecretTarget {
39
+ /** Secret ID or alias in vault (e.g., "alias:db/credentials") */
40
+ secretId: string;
41
+ /** Human-readable name */
42
+ name: string;
43
+ /** Output format */
44
+ format: 'env' | 'json' | 'yaml' | 'raw' | 'template';
45
+ /** Output file path */
46
+ output: string;
47
+ /** For 'raw' format: which key from the secret data to extract */
48
+ key?: string;
49
+ /** For 'template' format: path to template file */
50
+ templatePath?: string;
51
+ /** For 'env' format: prefix for variable names */
52
+ envPrefix?: string;
53
+ /** File ownership (user:group) */
54
+ owner?: string;
55
+ /** File permissions (e.g., "0600") */
56
+ mode?: string;
57
+ /** Command to run after secret update */
58
+ reloadCmd?: string;
59
+ /** Last known version */
60
+ lastVersion?: number;
61
+ /** Last sync timestamp */
62
+ lastSync?: string;
63
+ }
64
+ /**
65
+ * Agent configuration
66
+ */
67
+ export interface AgentConfig {
68
+ /** Vault server URL */
69
+ vaultUrl: string;
70
+ /** Tenant ID */
71
+ tenantId: string;
72
+ /** Authentication */
73
+ auth: {
74
+ /** API key (preferred) */
75
+ apiKey?: string;
76
+ /** Or username/password */
77
+ username?: string;
78
+ password?: string;
79
+ };
80
+ /** Skip TLS verification */
81
+ insecure?: boolean;
82
+ /** Certificate targets */
83
+ targets: CertTarget[];
84
+ /** Secret targets */
85
+ secretTargets?: SecretTarget[];
86
+ /** Global reload command (if not set per-target) */
87
+ globalReloadCmd?: string;
88
+ /** Polling interval in seconds (fallback if WebSocket disconnects) */
89
+ pollInterval?: number;
90
+ /** Enable verbose logging */
91
+ verbose?: boolean;
92
+ }
93
+ /**
94
+ * Load configuration from file or user config, with environment variable overrides
95
+ *
96
+ * Environment variables:
97
+ * - ZNVAULT_URL: Override vault URL
98
+ * - ZNVAULT_TENANT_ID: Override tenant ID
99
+ * - ZNVAULT_API_KEY: Override API key (preferred over config file)
100
+ * - ZNVAULT_USERNAME: Override username
101
+ * - ZNVAULT_PASSWORD: Override password (preferred over config file)
102
+ * - ZNVAULT_INSECURE: Set to "true" to skip TLS verification
103
+ */
104
+ export declare function loadConfig(): AgentConfig;
105
+ /**
106
+ * Save configuration
107
+ */
108
+ export declare function saveConfig(config: AgentConfig): void;
109
+ /**
110
+ * Get a specific config value
111
+ */
112
+ export declare function getConfig<K extends keyof AgentConfig>(key: K): AgentConfig[K];
113
+ /**
114
+ * Set a specific config value
115
+ */
116
+ export declare function setConfig<K extends keyof AgentConfig>(key: K, value: AgentConfig[K]): void;
117
+ /**
118
+ * Check if agent is configured
119
+ * Considers both config file and environment variables
120
+ */
121
+ export declare function isConfigured(): boolean;
122
+ /**
123
+ * Get config file path for display
124
+ */
125
+ export declare function getConfigPath(): string;
126
+ /**
127
+ * Add a certificate target
128
+ */
129
+ export declare function addTarget(target: CertTarget): void;
130
+ /**
131
+ * Remove a certificate target
132
+ */
133
+ export declare function removeTarget(certIdOrName: string): boolean;
134
+ /**
135
+ * Get all targets
136
+ */
137
+ export declare function getTargets(): CertTarget[];
138
+ /**
139
+ * Update target fingerprint after successful sync
140
+ */
141
+ export declare function updateTargetFingerprint(certId: string, fingerprint: string): void;
142
+ /**
143
+ * Add a secret target
144
+ */
145
+ export declare function addSecretTarget(target: SecretTarget): void;
146
+ /**
147
+ * Remove a secret target
148
+ */
149
+ export declare function removeSecretTarget(secretIdOrName: string): boolean;
150
+ /**
151
+ * Get all secret targets
152
+ */
153
+ export declare function getSecretTargets(): SecretTarget[];
154
+ /**
155
+ * Update secret target version after successful sync
156
+ */
157
+ export declare function updateSecretTargetVersion(secretId: string, version: number): void;
158
+ /**
159
+ * Update API key in config file after rotation
160
+ * This directly modifies the config file without going through loadConfig
161
+ * to avoid environment variable overrides being persisted.
162
+ */
163
+ export declare function updateApiKey(newKey: string): void;
164
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,299 @@
1
+ import Conf from 'conf';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { configLogger as log } from './logger.js';
5
+ // Default config location - computed dynamically to support test isolation
6
+ function getConfigDir() {
7
+ return process.env.ZNVAULT_AGENT_CONFIG_DIR || '/etc/zn-vault-agent';
8
+ }
9
+ function getConfigFile() {
10
+ return path.join(getConfigDir(), 'config.json');
11
+ }
12
+ // Use Conf for user-level config (development), file for system-level (production)
13
+ const userConfig = new Conf({
14
+ projectName: 'zn-vault-agent',
15
+ defaults: {
16
+ vaultUrl: '',
17
+ tenantId: '',
18
+ auth: {},
19
+ targets: [],
20
+ secretTargets: [],
21
+ pollInterval: 3600,
22
+ verbose: false,
23
+ },
24
+ });
25
+ /**
26
+ * Load configuration from file or user config, with environment variable overrides
27
+ *
28
+ * Environment variables:
29
+ * - ZNVAULT_URL: Override vault URL
30
+ * - ZNVAULT_TENANT_ID: Override tenant ID
31
+ * - ZNVAULT_API_KEY: Override API key (preferred over config file)
32
+ * - ZNVAULT_USERNAME: Override username
33
+ * - ZNVAULT_PASSWORD: Override password (preferred over config file)
34
+ * - ZNVAULT_INSECURE: Set to "true" to skip TLS verification
35
+ */
36
+ export function loadConfig() {
37
+ let config;
38
+ // Default empty config (used when custom config dir is set but file doesn't exist)
39
+ const emptyConfig = {
40
+ vaultUrl: '',
41
+ tenantId: '',
42
+ auth: {},
43
+ targets: [],
44
+ secretTargets: [],
45
+ pollInterval: 3600,
46
+ verbose: false,
47
+ };
48
+ // Try system config first
49
+ const configFile = getConfigFile();
50
+ if (fs.existsSync(configFile)) {
51
+ try {
52
+ const content = fs.readFileSync(configFile, 'utf-8');
53
+ config = JSON.parse(content);
54
+ log.debug({ path: configFile }, 'Loaded system config');
55
+ }
56
+ catch (err) {
57
+ log.error({ err, path: configFile }, 'Failed to load system config');
58
+ // If custom config dir is set, use empty config instead of userConfig
59
+ // This ensures test isolation and custom deployments work correctly
60
+ config = process.env.ZNVAULT_AGENT_CONFIG_DIR ? emptyConfig : userConfig.store;
61
+ }
62
+ }
63
+ else if (process.env.ZNVAULT_AGENT_CONFIG_DIR) {
64
+ // Custom config dir is set but file doesn't exist yet - use empty config
65
+ // Don't fall back to userConfig to ensure isolation
66
+ config = emptyConfig;
67
+ log.debug({ path: configFile }, 'Using empty config for custom config dir');
68
+ }
69
+ else {
70
+ // Fall back to user config
71
+ config = userConfig.store;
72
+ log.debug({ path: userConfig.path }, 'Loaded user config');
73
+ }
74
+ // Apply environment variable overrides
75
+ if (process.env.ZNVAULT_URL) {
76
+ config.vaultUrl = process.env.ZNVAULT_URL;
77
+ }
78
+ if (process.env.ZNVAULT_TENANT_ID) {
79
+ config.tenantId = process.env.ZNVAULT_TENANT_ID;
80
+ }
81
+ if (process.env.ZNVAULT_API_KEY) {
82
+ config.auth = config.auth || {};
83
+ config.auth.apiKey = process.env.ZNVAULT_API_KEY;
84
+ }
85
+ if (process.env.ZNVAULT_USERNAME) {
86
+ config.auth = config.auth || {};
87
+ config.auth.username = process.env.ZNVAULT_USERNAME;
88
+ }
89
+ if (process.env.ZNVAULT_PASSWORD) {
90
+ config.auth = config.auth || {};
91
+ config.auth.password = process.env.ZNVAULT_PASSWORD;
92
+ }
93
+ if (process.env.ZNVAULT_INSECURE === 'true') {
94
+ config.insecure = true;
95
+ }
96
+ return config;
97
+ }
98
+ /**
99
+ * Save configuration
100
+ */
101
+ export function saveConfig(config) {
102
+ const configDir = getConfigDir();
103
+ const configFile = getConfigFile();
104
+ // If ZNVAULT_AGENT_CONFIG_DIR is set, always use that directory
105
+ // This allows tests and custom deployments to override the default behavior
106
+ if (process.env.ZNVAULT_AGENT_CONFIG_DIR) {
107
+ if (!fs.existsSync(configDir)) {
108
+ fs.mkdirSync(configDir, { recursive: true, mode: 0o700 });
109
+ }
110
+ fs.writeFileSync(configFile, JSON.stringify(config, null, 2), { mode: 0o600 });
111
+ return;
112
+ }
113
+ // If running as root, save to system config
114
+ if (process.getuid?.() === 0) {
115
+ if (!fs.existsSync(configDir)) {
116
+ fs.mkdirSync(configDir, { recursive: true, mode: 0o700 });
117
+ }
118
+ fs.writeFileSync(configFile, JSON.stringify(config, null, 2), { mode: 0o600 });
119
+ }
120
+ else {
121
+ // Save to user config
122
+ userConfig.store = config;
123
+ }
124
+ }
125
+ /**
126
+ * Get a specific config value
127
+ */
128
+ export function getConfig(key) {
129
+ const config = loadConfig();
130
+ return config[key];
131
+ }
132
+ /**
133
+ * Set a specific config value
134
+ */
135
+ export function setConfig(key, value) {
136
+ const config = loadConfig();
137
+ config[key] = value;
138
+ saveConfig(config);
139
+ }
140
+ /**
141
+ * Check if agent is configured
142
+ * Considers both config file and environment variables
143
+ */
144
+ export function isConfigured() {
145
+ const config = loadConfig();
146
+ const hasAuth = !!(config.auth.apiKey ||
147
+ process.env.ZNVAULT_API_KEY ||
148
+ config.auth.username ||
149
+ process.env.ZNVAULT_USERNAME);
150
+ return !!(config.vaultUrl && config.tenantId && hasAuth);
151
+ }
152
+ /**
153
+ * Get config file path for display
154
+ */
155
+ export function getConfigPath() {
156
+ const configFile = getConfigFile();
157
+ if (process.getuid?.() === 0 && fs.existsSync(configFile)) {
158
+ return configFile;
159
+ }
160
+ return userConfig.path;
161
+ }
162
+ /**
163
+ * Add a certificate target
164
+ */
165
+ export function addTarget(target) {
166
+ const config = loadConfig();
167
+ // Check if target with same certId exists
168
+ const existingIndex = config.targets.findIndex(t => t.certId === target.certId);
169
+ if (existingIndex >= 0) {
170
+ config.targets[existingIndex] = target;
171
+ }
172
+ else {
173
+ config.targets.push(target);
174
+ }
175
+ saveConfig(config);
176
+ }
177
+ /**
178
+ * Remove a certificate target
179
+ */
180
+ export function removeTarget(certIdOrName) {
181
+ const config = loadConfig();
182
+ const initialLength = config.targets.length;
183
+ config.targets = config.targets.filter(t => t.certId !== certIdOrName && t.name !== certIdOrName);
184
+ if (config.targets.length < initialLength) {
185
+ saveConfig(config);
186
+ return true;
187
+ }
188
+ return false;
189
+ }
190
+ /**
191
+ * Get all targets
192
+ */
193
+ export function getTargets() {
194
+ return loadConfig().targets;
195
+ }
196
+ /**
197
+ * Update target fingerprint after successful sync
198
+ */
199
+ export function updateTargetFingerprint(certId, fingerprint) {
200
+ const config = loadConfig();
201
+ const target = config.targets.find(t => t.certId === certId);
202
+ if (target) {
203
+ target.lastFingerprint = fingerprint;
204
+ target.lastSync = new Date().toISOString();
205
+ saveConfig(config);
206
+ }
207
+ }
208
+ /**
209
+ * Add a secret target
210
+ */
211
+ export function addSecretTarget(target) {
212
+ const config = loadConfig();
213
+ config.secretTargets = config.secretTargets || [];
214
+ // Check if target with same name exists (allows same secret with different output configs)
215
+ const existingIndex = config.secretTargets.findIndex(t => t.name === target.name);
216
+ if (existingIndex >= 0) {
217
+ config.secretTargets[existingIndex] = target;
218
+ }
219
+ else {
220
+ config.secretTargets.push(target);
221
+ }
222
+ saveConfig(config);
223
+ }
224
+ /**
225
+ * Remove a secret target
226
+ */
227
+ export function removeSecretTarget(secretIdOrName) {
228
+ const config = loadConfig();
229
+ if (!config.secretTargets)
230
+ return false;
231
+ const initialLength = config.secretTargets.length;
232
+ config.secretTargets = config.secretTargets.filter(t => t.secretId !== secretIdOrName && t.name !== secretIdOrName);
233
+ if (config.secretTargets.length < initialLength) {
234
+ saveConfig(config);
235
+ return true;
236
+ }
237
+ return false;
238
+ }
239
+ /**
240
+ * Get all secret targets
241
+ */
242
+ export function getSecretTargets() {
243
+ return loadConfig().secretTargets || [];
244
+ }
245
+ /**
246
+ * Update secret target version after successful sync
247
+ */
248
+ export function updateSecretTargetVersion(secretId, version) {
249
+ const config = loadConfig();
250
+ const target = config.secretTargets?.find(t => t.secretId === secretId);
251
+ if (target) {
252
+ target.lastVersion = version;
253
+ target.lastSync = new Date().toISOString();
254
+ saveConfig(config);
255
+ }
256
+ }
257
+ /**
258
+ * Update API key in config file after rotation
259
+ * This directly modifies the config file without going through loadConfig
260
+ * to avoid environment variable overrides being persisted.
261
+ */
262
+ export function updateApiKey(newKey) {
263
+ let configPath;
264
+ let config;
265
+ const configFile = getConfigFile();
266
+ // Determine which config file to update
267
+ if (process.getuid?.() === 0 && fs.existsSync(configFile)) {
268
+ configPath = configFile;
269
+ }
270
+ else if (fs.existsSync(configFile)) {
271
+ configPath = configFile;
272
+ }
273
+ else {
274
+ // User config via Conf
275
+ const currentConfig = userConfig.store;
276
+ currentConfig.auth = currentConfig.auth || {};
277
+ currentConfig.auth.apiKey = newKey;
278
+ userConfig.store = currentConfig;
279
+ log.info({ path: userConfig.path }, 'API key updated in user config');
280
+ return;
281
+ }
282
+ // Load and update system config file
283
+ try {
284
+ const content = fs.readFileSync(configPath, 'utf-8');
285
+ config = JSON.parse(content);
286
+ config.auth = config.auth || {};
287
+ config.auth.apiKey = newKey;
288
+ // Write back with atomic rename
289
+ const tempPath = `${configPath}.tmp`;
290
+ fs.writeFileSync(tempPath, JSON.stringify(config, null, 2), { mode: 0o600 });
291
+ fs.renameSync(tempPath, configPath);
292
+ log.info({ path: configPath }, 'API key updated in config file');
293
+ }
294
+ catch (err) {
295
+ log.error({ err, path: configPath }, 'Failed to update API key in config');
296
+ throw err;
297
+ }
298
+ }
299
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { CertTarget } from './config.js';
2
+ export interface DeployResult {
3
+ success: boolean;
4
+ certId: string;
5
+ name: string;
6
+ message: string;
7
+ fingerprint?: string;
8
+ filesWritten?: string[];
9
+ reloadOutput?: string;
10
+ healthCheckPassed?: boolean;
11
+ rolledBack?: boolean;
12
+ durationMs?: number;
13
+ }
14
+ /**
15
+ * Deploy a certificate to its target locations
16
+ */
17
+ export declare function deployCertificate(target: CertTarget, force?: boolean): Promise<DeployResult>;
18
+ /**
19
+ * Deploy all configured certificate targets
20
+ */
21
+ export declare function deployAllCertificates(force?: boolean): Promise<DeployResult[]>;
22
+ //# sourceMappingURL=deployer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployer.d.ts","sourceRoot":"","sources":["../../src/lib/deployer.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO9C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAsMD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,UAAU,EAClB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,YAAY,CAAC,CAoNvB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAyB3F"}