@dynamic-labs-wallet/sui 0.0.94 → 0.0.97

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/index.cjs.js CHANGED
@@ -57,6 +57,13 @@ class DynamicSuiWalletClient extends browser.DynamicWalletClient {
57
57
  thresholdSignatureScheme,
58
58
  clientKeySharesBackupInfo: browser.getClientKeyShareBackupInfo()
59
59
  });
60
+ this.logger.debug('walletMap updated for wallet', {
61
+ context: {
62
+ accountAddress,
63
+ walletId,
64
+ walletMap: this.walletMap
65
+ }
66
+ });
60
67
  ceremonyCeremonyCompleteResolver(undefined);
61
68
  }
62
69
  });
@@ -75,7 +82,6 @@ class DynamicSuiWalletClient extends browser.DynamicWalletClient {
75
82
  clientKeyShares,
76
83
  overwriteOrMerge: 'overwrite'
77
84
  });
78
- // Backup the new wallet without waiting for the promise to resolve
79
85
  await this.storeEncryptedBackupByWalletWithRetry({
80
86
  accountAddress,
81
87
  clientKeyShares,
@@ -218,11 +224,15 @@ class DynamicSuiWalletClient extends browser.DynamicWalletClient {
218
224
  * The output is compatible with RFC8032 Ed25519 private key format.
219
225
  *
220
226
  * @param suiPrivateKey - The Sui private key in Bech32 format starting with "suiprivkey1"
221
- * @returns A 64-character hex string representing the Ed25519 private key
227
+ * @returns An object containing the private key and the private key bytes
222
228
  * @throws Error if the input is not a valid Sui private key format
223
- */ convertSuiPrivateKeyToHex(suiPrivateKey) {
229
+ */ convertSuiPrivateKey(suiPrivateKey) {
224
230
  if (!suiPrivateKey.startsWith('suiprivkey1')) {
225
- throw new Error('Invalid input: Sui private key must start with "suiprivkey1"');
231
+ this.logger.debug('Sui private key not in Bech32 format');
232
+ return {
233
+ privateKey: suiPrivateKey,
234
+ privateKeyBytes: Buffer.from(suiPrivateKey, 'hex')
235
+ };
226
236
  }
227
237
  try {
228
238
  const suiConverter = converter('suiprivkey');
@@ -234,7 +244,10 @@ class DynamicSuiWalletClient extends browser.DynamicWalletClient {
234
244
  if (cleanHex.length !== 64) {
235
245
  throw new Error(`Invalid output: Expected 64 characters, got ${cleanHex.length}`);
236
246
  }
237
- return cleanHex.toLowerCase();
247
+ return {
248
+ privateKey: cleanHex.toLowerCase(),
249
+ privateKeyBytes: Buffer.from(cleanHex, 'hex')
250
+ };
238
251
  } catch (error) {
239
252
  if (error instanceof Error) {
240
253
  throw new Error(`Failed to convert Sui private key: ${error.message}`);
@@ -244,19 +257,23 @@ class DynamicSuiWalletClient extends browser.DynamicWalletClient {
244
257
  }
245
258
  /**
246
259
  * Gets the public key for a given private key
247
- *
248
- * @param privateKey The private key to get the public key for
249
- * @returns The public key for the given private key
250
- */ getPublicKeyFromPrivateKey(privateKey) {
251
- const keypair = ed25519.Ed25519Keypair.fromSecretKey(privateKey);
252
- const publicKey = keypair.getPublicKey();
253
- const publicKeyBase58 = publicKey.toSuiAddress();
254
- return publicKeyBase58;
260
+ * @param privateKeyBytes A Buffer containing the Ed25519 private key bytes
261
+ * @returns The public key (Sui address) derived from the private key
262
+ */ getPublicKeyFromPrivateKey(privateKeyBytes) {
263
+ try {
264
+ const keypair = ed25519.Ed25519Keypair.fromSecretKey(privateKeyBytes);
265
+ const publicKey = keypair.getPublicKey();
266
+ const publicKeyBase58 = publicKey.toSuiAddress();
267
+ return publicKeyBase58;
268
+ } catch (error) {
269
+ this.logger.error('Unable to derive public key from private key. Check private key format', error instanceof Error ? error.message : 'Unknown error');
270
+ throw error;
271
+ }
255
272
  }
256
273
  /**
257
274
  * Imports the private key for a given account address
258
275
  *
259
- * @param privateKey The private key to import
276
+ * @param privateKey The private key to import, accepts both Bech32 and hex formats
260
277
  * @param chainName The chain name to import the private key for
261
278
  * @param thresholdSignatureScheme The threshold signature scheme to use
262
279
  * @param password The password for encrypted backup shares
@@ -267,8 +284,8 @@ class DynamicSuiWalletClient extends browser.DynamicWalletClient {
267
284
  const ceremonyCompletePromise = new Promise((resolve)=>{
268
285
  ceremonyCeremonyCompleteResolver = resolve;
269
286
  });
270
- const publicKey = this.getPublicKeyFromPrivateKey(privateKey);
271
- const formattedPrivateKey = await this.convertSuiPrivateKeyToHex(privateKey);
287
+ const { privateKey: formattedPrivateKey, privateKeyBytes } = await this.convertSuiPrivateKey(privateKey);
288
+ const publicKey = this.getPublicKeyFromPrivateKey(privateKeyBytes);
272
289
  const { rawPublicKey, clientKeyShares } = await this.importRawPrivateKey({
273
290
  chainName,
274
291
  privateKey: formattedPrivateKey,
@@ -286,6 +303,13 @@ class DynamicSuiWalletClient extends browser.DynamicWalletClient {
286
303
  thresholdSignatureScheme,
287
304
  clientKeySharesBackupInfo: browser.getClientKeyShareBackupInfo()
288
305
  });
306
+ this.logger.debug('walletMap updated for wallet', {
307
+ context: {
308
+ accountAddress,
309
+ walletId,
310
+ walletMap: this.walletMap
311
+ }
312
+ });
289
313
  ceremonyCeremonyCompleteResolver(undefined);
290
314
  }
291
315
  });
@@ -307,7 +331,6 @@ class DynamicSuiWalletClient extends browser.DynamicWalletClient {
307
331
  clientKeyShares,
308
332
  overwriteOrMerge: 'overwrite'
309
333
  });
310
- // Backup the new wallet without waiting for the promise to resolve
311
334
  await this.storeEncryptedBackupByWalletWithRetry({
312
335
  accountAddress,
313
336
  clientKeyShares,
@@ -329,7 +352,7 @@ class DynamicSuiWalletClient extends browser.DynamicWalletClient {
329
352
  *
330
353
  * @param accountAddress The account address to export the private key for
331
354
  * @param password The password for encrypted backup shares
332
- * @returns The private key
355
+ * @returns The private key in hex format
333
356
  */ async exportPrivateKey({ accountAddress, password = undefined, signedSessionId }) {
334
357
  try {
335
358
  const { derivedPrivateKey } = await this.exportKey({
@@ -341,7 +364,8 @@ class DynamicSuiWalletClient extends browser.DynamicWalletClient {
341
364
  if (!derivedPrivateKey) {
342
365
  throw new Error('Derived private key is undefined');
343
366
  }
344
- return derivedPrivateKey;
367
+ const privateScalarHex = derivedPrivateKey.slice(0, 64);
368
+ return privateScalarHex;
345
369
  } catch (error) {
346
370
  this.logger.error(browser.ERROR_EXPORT_PRIVATE_KEY, error);
347
371
  throw new Error(browser.ERROR_EXPORT_PRIVATE_KEY);
package/index.esm.js CHANGED
@@ -55,6 +55,13 @@ class DynamicSuiWalletClient extends DynamicWalletClient {
55
55
  thresholdSignatureScheme,
56
56
  clientKeySharesBackupInfo: getClientKeyShareBackupInfo()
57
57
  });
58
+ this.logger.debug('walletMap updated for wallet', {
59
+ context: {
60
+ accountAddress,
61
+ walletId,
62
+ walletMap: this.walletMap
63
+ }
64
+ });
58
65
  ceremonyCeremonyCompleteResolver(undefined);
59
66
  }
60
67
  });
@@ -73,7 +80,6 @@ class DynamicSuiWalletClient extends DynamicWalletClient {
73
80
  clientKeyShares,
74
81
  overwriteOrMerge: 'overwrite'
75
82
  });
76
- // Backup the new wallet without waiting for the promise to resolve
77
83
  await this.storeEncryptedBackupByWalletWithRetry({
78
84
  accountAddress,
79
85
  clientKeyShares,
@@ -216,11 +222,15 @@ class DynamicSuiWalletClient extends DynamicWalletClient {
216
222
  * The output is compatible with RFC8032 Ed25519 private key format.
217
223
  *
218
224
  * @param suiPrivateKey - The Sui private key in Bech32 format starting with "suiprivkey1"
219
- * @returns A 64-character hex string representing the Ed25519 private key
225
+ * @returns An object containing the private key and the private key bytes
220
226
  * @throws Error if the input is not a valid Sui private key format
221
- */ convertSuiPrivateKeyToHex(suiPrivateKey) {
227
+ */ convertSuiPrivateKey(suiPrivateKey) {
222
228
  if (!suiPrivateKey.startsWith('suiprivkey1')) {
223
- throw new Error('Invalid input: Sui private key must start with "suiprivkey1"');
229
+ this.logger.debug('Sui private key not in Bech32 format');
230
+ return {
231
+ privateKey: suiPrivateKey,
232
+ privateKeyBytes: Buffer.from(suiPrivateKey, 'hex')
233
+ };
224
234
  }
225
235
  try {
226
236
  const suiConverter = converter('suiprivkey');
@@ -232,7 +242,10 @@ class DynamicSuiWalletClient extends DynamicWalletClient {
232
242
  if (cleanHex.length !== 64) {
233
243
  throw new Error(`Invalid output: Expected 64 characters, got ${cleanHex.length}`);
234
244
  }
235
- return cleanHex.toLowerCase();
245
+ return {
246
+ privateKey: cleanHex.toLowerCase(),
247
+ privateKeyBytes: Buffer.from(cleanHex, 'hex')
248
+ };
236
249
  } catch (error) {
237
250
  if (error instanceof Error) {
238
251
  throw new Error(`Failed to convert Sui private key: ${error.message}`);
@@ -242,19 +255,23 @@ class DynamicSuiWalletClient extends DynamicWalletClient {
242
255
  }
243
256
  /**
244
257
  * Gets the public key for a given private key
245
- *
246
- * @param privateKey The private key to get the public key for
247
- * @returns The public key for the given private key
248
- */ getPublicKeyFromPrivateKey(privateKey) {
249
- const keypair = Ed25519Keypair.fromSecretKey(privateKey);
250
- const publicKey = keypair.getPublicKey();
251
- const publicKeyBase58 = publicKey.toSuiAddress();
252
- return publicKeyBase58;
258
+ * @param privateKeyBytes A Buffer containing the Ed25519 private key bytes
259
+ * @returns The public key (Sui address) derived from the private key
260
+ */ getPublicKeyFromPrivateKey(privateKeyBytes) {
261
+ try {
262
+ const keypair = Ed25519Keypair.fromSecretKey(privateKeyBytes);
263
+ const publicKey = keypair.getPublicKey();
264
+ const publicKeyBase58 = publicKey.toSuiAddress();
265
+ return publicKeyBase58;
266
+ } catch (error) {
267
+ this.logger.error('Unable to derive public key from private key. Check private key format', error instanceof Error ? error.message : 'Unknown error');
268
+ throw error;
269
+ }
253
270
  }
254
271
  /**
255
272
  * Imports the private key for a given account address
256
273
  *
257
- * @param privateKey The private key to import
274
+ * @param privateKey The private key to import, accepts both Bech32 and hex formats
258
275
  * @param chainName The chain name to import the private key for
259
276
  * @param thresholdSignatureScheme The threshold signature scheme to use
260
277
  * @param password The password for encrypted backup shares
@@ -265,8 +282,8 @@ class DynamicSuiWalletClient extends DynamicWalletClient {
265
282
  const ceremonyCompletePromise = new Promise((resolve)=>{
266
283
  ceremonyCeremonyCompleteResolver = resolve;
267
284
  });
268
- const publicKey = this.getPublicKeyFromPrivateKey(privateKey);
269
- const formattedPrivateKey = await this.convertSuiPrivateKeyToHex(privateKey);
285
+ const { privateKey: formattedPrivateKey, privateKeyBytes } = await this.convertSuiPrivateKey(privateKey);
286
+ const publicKey = this.getPublicKeyFromPrivateKey(privateKeyBytes);
270
287
  const { rawPublicKey, clientKeyShares } = await this.importRawPrivateKey({
271
288
  chainName,
272
289
  privateKey: formattedPrivateKey,
@@ -284,6 +301,13 @@ class DynamicSuiWalletClient extends DynamicWalletClient {
284
301
  thresholdSignatureScheme,
285
302
  clientKeySharesBackupInfo: getClientKeyShareBackupInfo()
286
303
  });
304
+ this.logger.debug('walletMap updated for wallet', {
305
+ context: {
306
+ accountAddress,
307
+ walletId,
308
+ walletMap: this.walletMap
309
+ }
310
+ });
287
311
  ceremonyCeremonyCompleteResolver(undefined);
288
312
  }
289
313
  });
@@ -305,7 +329,6 @@ class DynamicSuiWalletClient extends DynamicWalletClient {
305
329
  clientKeyShares,
306
330
  overwriteOrMerge: 'overwrite'
307
331
  });
308
- // Backup the new wallet without waiting for the promise to resolve
309
332
  await this.storeEncryptedBackupByWalletWithRetry({
310
333
  accountAddress,
311
334
  clientKeyShares,
@@ -327,7 +350,7 @@ class DynamicSuiWalletClient extends DynamicWalletClient {
327
350
  *
328
351
  * @param accountAddress The account address to export the private key for
329
352
  * @param password The password for encrypted backup shares
330
- * @returns The private key
353
+ * @returns The private key in hex format
331
354
  */ async exportPrivateKey({ accountAddress, password = undefined, signedSessionId }) {
332
355
  try {
333
356
  const { derivedPrivateKey } = await this.exportKey({
@@ -339,7 +362,8 @@ class DynamicSuiWalletClient extends DynamicWalletClient {
339
362
  if (!derivedPrivateKey) {
340
363
  throw new Error('Derived private key is undefined');
341
364
  }
342
- return derivedPrivateKey;
365
+ const privateScalarHex = derivedPrivateKey.slice(0, 64);
366
+ return privateScalarHex;
343
367
  } catch (error) {
344
368
  this.logger.error(ERROR_EXPORT_PRIVATE_KEY, error);
345
369
  throw new Error(ERROR_EXPORT_PRIVATE_KEY);
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@dynamic-labs-wallet/sui",
3
- "version": "0.0.94",
3
+ "version": "0.0.97",
4
4
  "license": "MIT",
5
5
  "dependencies": {
6
- "@dynamic-labs-wallet/browser": "0.0.94",
6
+ "@dynamic-labs-wallet/browser": "0.0.97",
7
7
  "@mysten/sui": "1.26.0",
8
8
  "@noble/hashes": "1.7.1",
9
9
  "bech32-converting": "^1.0.9"
@@ -45,21 +45,23 @@ export declare class DynamicSuiWalletClient extends DynamicWalletClient {
45
45
  * The output is compatible with RFC8032 Ed25519 private key format.
46
46
  *
47
47
  * @param suiPrivateKey - The Sui private key in Bech32 format starting with "suiprivkey1"
48
- * @returns A 64-character hex string representing the Ed25519 private key
48
+ * @returns An object containing the private key and the private key bytes
49
49
  * @throws Error if the input is not a valid Sui private key format
50
50
  */
51
- convertSuiPrivateKeyToHex(suiPrivateKey: string): string;
51
+ convertSuiPrivateKey(suiPrivateKey: string): {
52
+ privateKey: string;
53
+ privateKeyBytes: Buffer;
54
+ };
52
55
  /**
53
56
  * Gets the public key for a given private key
54
- *
55
- * @param privateKey The private key to get the public key for
56
- * @returns The public key for the given private key
57
+ * @param privateKeyBytes A Buffer containing the Ed25519 private key bytes
58
+ * @returns The public key (Sui address) derived from the private key
57
59
  */
58
- getPublicKeyFromPrivateKey(privateKey: string): string;
60
+ getPublicKeyFromPrivateKey(privateKeyBytes: Buffer): string;
59
61
  /**
60
62
  * Imports the private key for a given account address
61
63
  *
62
- * @param privateKey The private key to import
64
+ * @param privateKey The private key to import, accepts both Bech32 and hex formats
63
65
  * @param chainName The chain name to import the private key for
64
66
  * @param thresholdSignatureScheme The threshold signature scheme to use
65
67
  * @param password The password for encrypted backup shares
@@ -82,7 +84,7 @@ export declare class DynamicSuiWalletClient extends DynamicWalletClient {
82
84
  *
83
85
  * @param accountAddress The account address to export the private key for
84
86
  * @param password The password for encrypted backup shares
85
- * @returns The private key
87
+ * @returns The private key in hex format
86
88
  */
87
89
  exportPrivateKey({ accountAddress, password, signedSessionId, }: {
88
90
  accountAddress: string;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EAWzB,MAAM,8BAA8B,CAAC;AAWtC,qBAAa,sBAAuB,SAAQ,mBAAmB;IAC7D,QAAQ,CAAC,SAAS,SAAS;gBAEf,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,KAAK,GACN,EAAE,wBAAwB;IAWrB,mBAAmB,CAAC,EACxB,wBAAwB,EACxB,QAAoB,EACpB,OAAO,EACP,eAAe,GAChB,EAAE;QACD,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;QACjC,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;KAClC,CAAC;IAgEI,kCAAkC,CAAC,EACvC,SAAS,EACT,cAAc,GACf,EAAE;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,cAAc,CAAC;KAChC;IAYD;;OAEG;YACW,eAAe;YAoCf,sBAAsB;YA6BtB,0BAA0B;IA6BlC,WAAW,CAAC,EAChB,OAAO,EACP,cAAc,EACd,QAAoB,EACpB,eAAe,GAChB,EAAE;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,MAAM,CAAC;IAkCb,eAAe,CAAC,EACpB,WAAW,EACX,aAAa,EACb,QAAoB,EACpB,eAAe,GAChB,EAAE;QACD,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,MAAM,CAAC;IAiCnB,oBAAoB,CAAC,EAAE,YAAY,EAAE,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE;;;;IAW/D;;;;;;;OAOG;IACH,yBAAyB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAgCxD;;;;;OAKG;IACH,0BAA0B,CAAC,UAAU,EAAE,MAAM;IAO7C;;;;;;;;OAQG;IACG,gBAAgB,CAAC,EACrB,UAAU,EACV,SAAS,EACT,wBAAwB,EACxB,QAAoB,EACpB,OAAO,EACP,eAAe,GAChB,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;QACjC,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;QACjC,eAAe,EAAE,cAAc,EAAE,CAAC;KACnC,CAAC;IA6EF;;;;;;OAMG;IACG,gBAAgB,CAAC,EACrB,cAAc,EACd,QAAoB,EACpB,eAAe,GAChB,EAAE;QACD,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B;IAkBK,aAAa;CAOpB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EAWzB,MAAM,8BAA8B,CAAC;AAWtC,qBAAa,sBAAuB,SAAQ,mBAAmB;IAC7D,QAAQ,CAAC,SAAS,SAAS;gBAEf,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,KAAK,GACN,EAAE,wBAAwB;IAWrB,mBAAmB,CAAC,EACxB,wBAAwB,EACxB,QAAoB,EACpB,OAAO,EACP,eAAe,GAChB,EAAE;QACD,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;QACjC,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;KAClC,CAAC;IAsEI,kCAAkC,CAAC,EACvC,SAAS,EACT,cAAc,GACf,EAAE;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,cAAc,CAAC;KAChC;IAYD;;OAEG;YACW,eAAe;YAoCf,sBAAsB;YA6BtB,0BAA0B;IA6BlC,WAAW,CAAC,EAChB,OAAO,EACP,cAAc,EACd,QAAoB,EACpB,eAAe,GAChB,EAAE;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,MAAM,CAAC;IAkCb,eAAe,CAAC,EACpB,WAAW,EACX,aAAa,EACb,QAAoB,EACpB,eAAe,GAChB,EAAE;QACD,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,MAAM,CAAC;IAiCnB,oBAAoB,CAAC,EAAE,YAAY,EAAE,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE;;;;IAW/D;;;;;;;OAOG;IACH,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG;QAC3C,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;KACzB;IAqCD;;;;OAIG;IACH,0BAA0B,CAAC,eAAe,EAAE,MAAM;IAelD;;;;;;;;OAQG;IACG,gBAAgB,CAAC,EACrB,UAAU,EACV,SAAS,EACT,wBAAwB,EACxB,QAAoB,EACpB,OAAO,EACP,eAAe,GAChB,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;QACjC,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;QACjC,eAAe,EAAE,cAAc,EAAE,CAAC;KACnC,CAAC;IAmFF;;;;;;OAMG;IACG,gBAAgB,CAAC,EACrB,cAAc,EACd,QAAoB,EACpB,eAAe,GAChB,EAAE;QACD,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B;IAmBK,aAAa;CAOpB"}