@monolythium/core-sdk 0.4.24 → 0.5.1

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.
@@ -1,7 +1,7 @@
1
1
  import { ml_dsa65 } from '@noble/post-quantum/ml-dsa.js';
2
2
  import { blake3 } from '@noble/hashes/blake3.js';
3
3
  import { keccak_256, shake256 } from '@noble/hashes/sha3.js';
4
- import { entropyToMnemonic, mnemonicToEntropy } from '@scure/bip39';
4
+ import { entropyToMnemonic, validateMnemonic as validateMnemonic$1, mnemonicToSeedSync } from '@scure/bip39';
5
5
  import { wordlist } from '@scure/bip39/wordlists/english.js';
6
6
 
7
7
  // src/crypto/bincode.ts
@@ -350,98 +350,66 @@ function encodeMlDsa65Opaque(raw) {
350
350
  out.set(bytes, 14);
351
351
  return out;
352
352
  }
353
- var PQM1_ALGO_TAG_MLDSA65 = 1;
354
- var PQM1_ALGO_TAG_MLDSA87_RESERVED = 2;
355
- var PQM1_ALGO_TAG_SLHDSA128S_RESERVED = 3;
356
- var PQM1_ALGO_TAG_FALCON512_RESERVED = 4;
357
- var PQM1_VERSION_V1 = 1;
358
- var PQM1_PAYLOAD_LEN = 32;
359
- var PQM1_ENTROPY_LEN = 30;
360
- var PQM1_V1_MNEMONIC_WORDS = 24;
361
- var PQM1_V1_MLDSA65_DOMAIN_TAG = "monolythium.pqm1.v1.mldsa65";
362
- var Pqm1Error = class extends Error {
353
+ var MLDSA65_MNEMONIC_WORDS = 24;
354
+ var MLDSA65_SEED_DOMAIN = "monolythium.mldsa65.v1";
355
+ var MLDSA65_ENTROPY_LEN = 32;
356
+ var DOMAIN_BYTES = new TextEncoder().encode(MLDSA65_SEED_DOMAIN);
357
+ var MnemonicError = class extends Error {
363
358
  constructor(kind, message) {
364
359
  super(message);
365
360
  this.kind = kind;
366
- this.name = "Pqm1Error";
361
+ this.name = "MnemonicError";
367
362
  }
368
363
  kind;
369
364
  };
370
- var DOMAIN_BYTES = new TextEncoder().encode(PQM1_V1_MLDSA65_DOMAIN_TAG);
371
365
  function normalizeMnemonic(mnemonic) {
372
366
  return mnemonic.trim().toLowerCase().replace(/\s+/g, " ");
373
367
  }
374
- function ensureSupportedPayload(bytes) {
375
- if (bytes.length !== PQM1_PAYLOAD_LEN) {
376
- throw new Pqm1Error("badPayloadLength", `PQM-1 payload must be ${PQM1_PAYLOAD_LEN} bytes, got ${bytes.length}`);
377
- }
378
- if (bytes[0] !== PQM1_ALGO_TAG_MLDSA65) {
379
- throw new Pqm1Error("unsupportedAlgorithm", `unsupported PQM-1 algorithm tag 0x${bytes[0].toString(16).padStart(2, "0")}`);
380
- }
381
- if (bytes[1] !== PQM1_VERSION_V1) {
382
- throw new Pqm1Error("unsupportedVersion", `unsupported PQM-1 version 0x${bytes[1].toString(16).padStart(2, "0")}`);
383
- }
368
+ function wordCount(normalized) {
369
+ return normalized.length === 0 ? 0 : normalized.split(" ").length;
384
370
  }
385
371
  function defaultRandomFill(bytes) {
386
372
  const cryptoObj = globalThis.crypto;
387
373
  if (!cryptoObj?.getRandomValues) {
388
- throw new Pqm1Error("missingRandom", "globalThis.crypto.getRandomValues is unavailable");
374
+ throw new MnemonicError("missingRandom", "globalThis.crypto.getRandomValues is unavailable");
389
375
  }
390
376
  cryptoObj.getRandomValues(bytes);
391
377
  }
392
- function assemblePqm1Payload(entropy) {
393
- const ent = expectBytes(entropy, PQM1_ENTROPY_LEN, "PQM-1 entropy");
394
- const payload = new Uint8Array(PQM1_PAYLOAD_LEN);
395
- payload[0] = PQM1_ALGO_TAG_MLDSA65;
396
- payload[1] = PQM1_VERSION_V1;
397
- payload.set(ent, 2);
398
- return payload;
399
- }
400
- function parsePqm1Payload(payload) {
401
- const bytes = expectBytes(payload, PQM1_PAYLOAD_LEN, "PQM-1 payload").slice();
402
- ensureSupportedPayload(bytes);
403
- return {
404
- algoTag: PQM1_ALGO_TAG_MLDSA65,
405
- version: PQM1_VERSION_V1,
406
- entropy: bytes.slice(2),
407
- bytes
408
- };
378
+ function generateMnemonic(rng = defaultRandomFill) {
379
+ const entropy = new Uint8Array(MLDSA65_ENTROPY_LEN);
380
+ rng(entropy);
381
+ return entropyToMnemonic(entropy, wordlist);
409
382
  }
410
- function pqm1PayloadToMnemonic(payload) {
411
- const parsed = parsePqm1Payload(payload);
412
- return entropyToMnemonic(parsed.bytes, wordlist);
383
+ function validateMnemonic(mnemonic) {
384
+ const normalized = normalizeMnemonic(mnemonic);
385
+ if (wordCount(normalized) !== MLDSA65_MNEMONIC_WORDS) {
386
+ return false;
387
+ }
388
+ return validateMnemonic$1(normalized, wordlist);
413
389
  }
414
- function pqm1MnemonicToPayload(mnemonic) {
390
+ function mnemonicToMlDsa65Seed(mnemonic) {
415
391
  const normalized = normalizeMnemonic(mnemonic);
416
- const words = normalized.length === 0 ? [] : normalized.split(" ");
417
- if (words.length !== PQM1_V1_MNEMONIC_WORDS) {
418
- throw new Pqm1Error("badWordCount", `PQM-1 mnemonic must be ${PQM1_V1_MNEMONIC_WORDS} words, got ${words.length}`);
392
+ const words = wordCount(normalized);
393
+ if (words !== MLDSA65_MNEMONIC_WORDS) {
394
+ throw new MnemonicError(
395
+ "badWordCount",
396
+ `mnemonic must be ${MLDSA65_MNEMONIC_WORDS} words, got ${words}`
397
+ );
419
398
  }
420
- let payload;
421
- try {
422
- payload = mnemonicToEntropy(normalized, wordlist);
423
- } catch (e) {
424
- throw new Pqm1Error("bip39Decode", `invalid PQM-1 mnemonic: ${e.message}`);
399
+ if (!validateMnemonic$1(normalized, wordlist)) {
400
+ throw new MnemonicError(
401
+ "bip39Decode",
402
+ "invalid BIP-39 mnemonic (unknown word or bad checksum)"
403
+ );
425
404
  }
426
- return parsePqm1Payload(payload);
405
+ const seed64 = mnemonicToSeedSync(normalized, "");
406
+ return shake256(concatBytes(DOMAIN_BYTES, seed64), { dkLen: ML_DSA_65_SEED_LEN });
427
407
  }
428
- function derivePqm1MlDsa65SeedFromPayload(payload) {
429
- const parsed = parsePqm1Payload(payload);
430
- return shake256(concatBytes(DOMAIN_BYTES, parsed.bytes), { dkLen: ML_DSA_65_SEED_LEN });
408
+ function mnemonicToMlDsa65Backend(mnemonic) {
409
+ return MlDsa65Backend.fromSeed(mnemonicToMlDsa65Seed(mnemonic));
431
410
  }
432
- function pqm1MnemonicToMlDsa65Seed(mnemonic) {
433
- return derivePqm1MlDsa65SeedFromPayload(pqm1MnemonicToPayload(mnemonic).bytes);
434
- }
435
- function pqm1MnemonicToMlDsa65Backend(mnemonic) {
436
- return MlDsa65Backend.fromSeed(pqm1MnemonicToMlDsa65Seed(mnemonic));
437
- }
438
- function pqm1MnemonicToAddress(mnemonic) {
439
- return pqm1MnemonicToMlDsa65Backend(mnemonic).getAddress();
440
- }
441
- function generatePqm1Mnemonic(rng = defaultRandomFill) {
442
- const entropy = new Uint8Array(PQM1_ENTROPY_LEN);
443
- rng(entropy);
444
- return pqm1PayloadToMnemonic(assemblePqm1Payload(entropy));
411
+ function mnemonicToAddress(mnemonic) {
412
+ return mnemonicToMlDsa65Backend(mnemonic).getAddress();
445
413
  }
446
414
 
447
415
  // src/crypto/envelope.ts
@@ -499,6 +467,6 @@ function bytesEqual(a, b) {
499
467
  return true;
500
468
  }
501
469
 
502
- export { ADDRESS_DERIVATION_DOMAIN, BincodeWriter, ENUM_VARIANT_INDEX_ML_DSA_65, ML_DSA_65_PUBLIC_KEY_LEN, ML_DSA_65_SEED_LEN, ML_DSA_65_SIGNATURE_LEN, ML_DSA_65_SIGNING_KEY_LEN, MempoolClass, MlDsa65Backend, PQM1_ALGO_TAG_FALCON512_RESERVED, PQM1_ALGO_TAG_MLDSA65, PQM1_ALGO_TAG_MLDSA87_RESERVED, PQM1_ALGO_TAG_SLHDSA128S_RESERVED, PQM1_ENTROPY_LEN, PQM1_PAYLOAD_LEN, PQM1_V1_MLDSA65_DOMAIN_TAG, PQM1_V1_MNEMONIC_WORDS, PQM1_VERSION_V1, Pqm1Error, STANDARD_ALGO_NUMBER_ML_DSA_65, assemblePqm1Payload, bincodeSignedTransaction, buildPlaintextSubmission, bytesToHex, concatBytes, derivePqm1MlDsa65SeedFromPayload, encodeMlDsa65Opaque, encodeTransactionForHash, expectBytes, generatePqm1Mnemonic, hexToBytes, mlDsa65AddressBytes, mlDsa65AddressFromPublicKey, parsePqm1Payload, pqm1MnemonicToAddress, pqm1MnemonicToMlDsa65Backend, pqm1MnemonicToMlDsa65Seed, pqm1MnemonicToPayload, pqm1PayloadToMnemonic, submitPlaintextTransaction, submitTransaction };
470
+ export { ADDRESS_DERIVATION_DOMAIN, BincodeWriter, ENUM_VARIANT_INDEX_ML_DSA_65, MLDSA65_MNEMONIC_WORDS, MLDSA65_SEED_DOMAIN, ML_DSA_65_PUBLIC_KEY_LEN, ML_DSA_65_SEED_LEN, ML_DSA_65_SIGNATURE_LEN, ML_DSA_65_SIGNING_KEY_LEN, MempoolClass, MlDsa65Backend, MnemonicError, STANDARD_ALGO_NUMBER_ML_DSA_65, bincodeSignedTransaction, buildPlaintextSubmission, bytesToHex, concatBytes, encodeMlDsa65Opaque, encodeTransactionForHash, expectBytes, generateMnemonic, hexToBytes, mlDsa65AddressBytes, mlDsa65AddressFromPublicKey, mnemonicToAddress, mnemonicToMlDsa65Backend, mnemonicToMlDsa65Seed, submitPlaintextTransaction, submitTransaction, validateMnemonic };
503
471
  //# sourceMappingURL=index.js.map
504
472
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/crypto/bincode.ts","../../src/crypto/bytes.ts","../../src/crypto/tx.ts","../../src/crypto/ml-dsa.ts","../../src/crypto/pqm1.ts","../../src/crypto/envelope.ts","../../src/crypto/submission.ts"],"names":[],"mappings":";;;;;;;AAAO,IAAM,gBAAN,MAAoB;AAAA,EACzB,UAAoB,EAAC;AAAA,EAErB,GAAG,KAAA,EAAqB;AACtB,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,EACpB;AAAA,EAEA,IAAI,KAAA,EAAqB;AACvB,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,EACpB;AAAA,EAEA,IAAI,KAAA,EAAqB;AACvB,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,EACpB;AAAA,EAEA,IAAI,KAAA,EAA8B;AAChC,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,EACpB;AAAA,EAEA,KAAK,KAAA,EAA8B;AACjC,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,EACrB;AAAA,EAEA,YAAY,KAAA,EAAqB;AAC/B,IAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,EAChB;AAAA,EAEA,SAAS,KAAA,EAAyB;AAChC,IAAA,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAC5C;AAAA,EAEA,MAAM,KAAA,EAAyB;AAC7B,IAAA,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,MAAM,CAAC,CAAA;AAC7B,IAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,EACrB;AAAA,EAEA,YAAY,KAAA,EAAgC;AAC1C,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,IAAA,CAAK,GAAG,CAAC,CAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,GAAG,CAAC,CAAA;AACT,IAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,EACrB;AAAA,EAEA,OAAA,GAAsB;AACpB,IAAA,OAAO,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA;AAAA,EACrC;AAAA,EAEA,IAAA,CAAK,OAAe,KAAA,EAAqB;AACvC,IAAA,IAAI,CAAC,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,IAAK,QAAQ,CAAA,IAAK,KAAA,IAAS,CAAA,KAAM,KAAA,GAAQ,CAAA,CAAA,EAAI;AAC1E,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,KAAA,GAAQ,CAAC,CAAA,MAAA,CAAQ,CAAA;AAAA,IACtD;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,MAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAM,KAAA,IAAU,CAAA,GAAI,IAAM,GAAI,CAAA;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,IAAA,CAAK,OAAwB,KAAA,EAAqB;AAChD,IAAA,IAAI,IAAI,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,OAAO,KAAK,CAAA;AACxD,IAAA,IAAI,IAAI,EAAA,IAAM,CAAA,IAAM,MAAM,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,EAAI;AAC5C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,KAAA,GAAQ,CAAC,CAAA,MAAA,CAAQ,CAAA;AAAA,IACtD;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,MAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,CAAA,GAAI,KAAK,CAAC,CAAA;AACnC,MAAA,CAAA,KAAM,EAAA;AAAA,IACR;AAAA,EACF;AACF;;;ACpEO,SAAS,eAAe,MAAA,EAAkC;AAC/D,EAAA,MAAM,GAAA,GAAM,OAAO,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AACnD,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,GAAG,CAAA;AAC9B,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,GAAA,CAAI,GAAA,CAAI,OAAO,GAAG,CAAA;AAClB,IAAA,GAAA,IAAO,KAAA,CAAM,MAAA;AAAA,EACf;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,WAAW,KAAA,EAA2B;AACpD,EAAA,IAAI,GAAA,GAAM,IAAA;AACV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,GAAA,IAAO,KAAA,CAAM,CAAC,CAAA,CAAG,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,UAAA,CAAW,GAAA,EAAa,KAAA,GAAQ,KAAA,EAAmB;AACjE,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,IAAK,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,GAAI,GAAA;AAC/E,EAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,KAAM,CAAA,EAAG;AAC7B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,sBAAA,CAAwB,CAAA;AAAA,EAClD;AACA,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,QAAA,CAAS,SAAS,CAAC,CAAA;AAC9C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,KAAA,CAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,EAAG,EAAE,CAAA;AAC9D,IAAA,IAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,qBAAA,CAAuB,CAAA;AAAA,IACjD;AACA,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAAA,EACX;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,WAAA,CAAY,KAAA,EAAuC,GAAA,EAAa,KAAA,EAA2B;AACzG,EAAA,IAAI,KAAA,CAAM,WAAW,GAAA,EAAK;AACxB,IAAA,MAAM,IAAI,MAAM,CAAA,EAAG,KAAK,YAAY,GAAG,CAAA,YAAA,EAAe,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA;AAAA,EACtE;AACA,EAAA,OAAO,KAAA,YAAiB,UAAA,GAAa,KAAA,GAAQ,UAAA,CAAW,KAAK,KAAK,CAAA;AACpE;AAEO,SAAS,eAAA,CAAgB,KAAA,EAAe,KAAA,EAAe,KAAA,EAA2B;AACvF,EAAA,IAAI,QAAQ,EAAA,IAAM,KAAA,IAAU,MAAM,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,EAAI;AACpD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,QAAA,EAAW,KAAA,GAAQ,CAAC,CAAA,UAAA,CAAY,CAAA;AAAA,EAC1D;AACA,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,KAAK,CAAA;AAChC,EAAA,IAAI,CAAA,GAAI,KAAA;AACR,EAAA,KAAA,IAAS,CAAA,GAAI,KAAA,GAAQ,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACnC,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA,CAAO,CAAA,GAAI,KAAK,CAAA;AACzB,IAAA,CAAA,KAAM,EAAA;AAAA,EACR;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,WAAA,CAAY,OAA6C,KAAA,EAAuB;AAC9F,EAAA,IAAI,UAAU,MAAA,EAAW,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,QAAA,CAAU,CAAA;AAC3D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,CAAC,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,IAAK,KAAA,GAAQ,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,oCAAA,CAAsC,CAAA;AAC7G,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACA,EAAA,IAAI,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA,IAAK,KAAA,CAAM,WAAW,IAAI,CAAA,EAAG,OAAO,MAAA,CAAO,KAAK,CAAA;AACzE,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;;;AC/BO,SAAS,wBAAA,CAAyB,QAA2B,GAAA,EAA8B;AAChG,EAAA,MAAM,CAAA,GAAI,kBAAkB,MAAM,CAAA;AAClC,EAAA,OAAO,WAAA;AAAA,IACL,UAAA,CAAW,GAAG,GAAG,CAAA;AAAA,IACjB,eAAA,CAAgB,CAAA,CAAE,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA;AAAA,IACvC,eAAA,CAAgB,CAAA,CAAE,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA;AAAA,IACnC,eAAA,CAAgB,CAAA,CAAE,oBAAA,EAAsB,EAAA,EAAI,sBAAsB,CAAA;AAAA,IAClE,eAAA,CAAgB,CAAA,CAAE,YAAA,EAAc,EAAA,EAAI,cAAc,CAAA;AAAA,IAClD,eAAA,CAAgB,CAAA,CAAE,QAAA,EAAU,CAAA,EAAG,UAAU,CAAA;AAAA,IACzC,CAAA,CAAE,EAAA,KAAO,IAAA,GAAO,UAAA,CAAW,EAAA,CAAG,CAAC,CAAA,GAAI,WAAA,CAAY,UAAA,CAAW,EAAA,CAAG,CAAC,CAAA,EAAG,EAAE,EAAE,CAAA;AAAA,IACrE,eAAA,CAAgB,CAAA,CAAE,KAAA,EAAO,EAAA,EAAI,OAAO,CAAA;AAAA,IACpC,gBAAgB,MAAA,CAAO,CAAA,CAAE,MAAM,MAAM,CAAA,EAAG,GAAG,cAAc,CAAA;AAAA,IACzD,CAAA,CAAE,KAAA;AAAA,IACF,IAAI,WAAW,CAAC,CAAA;AAAA;AAAA,IAChB,uBAAA,CAAwB,EAAE,UAAU;AAAA,GACtC;AACF;AAEO,SAAS,wBAAA,CACd,MAAA,EACA,SAAA,EACA,SAAA,EACY;AACZ,EAAA,MAAM,CAAA,GAAI,kBAAkB,MAAM,CAAA;AAClC,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,SAAA,EAAW,uBAAA,EAAyB,qBAAqB,CAAA;AACjF,EAAA,MAAM,EAAA,GAAK,WAAA,CAAY,SAAA,EAAW,wBAAA,EAA0B,sBAAsB,CAAA;AAClF,EAAA,MAAM,CAAA,GAAI,IAAI,aAAA,EAAc;AAC5B,EAAA,CAAA,CAAE,GAAA,CAAI,EAAE,OAAO,CAAA;AACf,EAAA,CAAA,CAAE,GAAA,CAAI,EAAE,KAAK,CAAA;AAOb,EAAA,CAAA,CAAE,KAAA,CAAM,SAAA,CAAU,CAAA,CAAE,oBAAA,EAAsB,sBAAsB,CAAC,CAAA;AACjE,EAAA,CAAA,CAAE,KAAA,CAAM,SAAA,CAAU,CAAA,CAAE,YAAA,EAAc,cAAc,CAAC,CAAA;AACjD,EAAA,CAAA,CAAE,GAAA,CAAI,EAAE,QAAQ,CAAA;AAChB,EAAA,IAAI,CAAA,CAAE,OAAO,IAAA,EAAM;AACjB,IAAA,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA,EACR,CAAA,MAAO;AACL,IAAA,CAAA,CAAE,GAAG,CAAC,CAAA;AACN,IAAA,CAAA,CAAE,KAAA,CAAM,EAAE,EAAE,CAAA;AAAA,EACd;AACA,EAAA,CAAA,CAAE,KAAA,CAAM,SAAA,CAAU,CAAA,CAAE,KAAA,EAAO,OAAO,CAAC,CAAA;AACnC,EAAA,CAAA,CAAE,KAAA,CAAM,EAAE,KAAK,CAAA;AACf,EAAA,CAAA,CAAE,IAAI,EAAE,CAAA;AACR,EAAA,CAAA,CAAE,GAAA,CAAI,MAAA,CAAO,CAAA,CAAE,UAAA,CAAW,MAAM,CAAC,CAAA;AACjC,EAAA,KAAA,MAAW,GAAA,IAAO,CAAA,CAAE,UAAA,EAAY,yBAAA,CAA0B,GAAG,GAAG,CAAA;AAChE,EAAA,wBAAA,CAAyB,GAAG,GAAG,CAAA;AAC/B,EAAA,wBAAA,CAAyB,GAAG,EAAE,CAAA;AAC9B,EAAA,OAAO,EAAE,OAAA,EAAQ;AACnB;AAmBA,SAAS,kBAAkB,MAAA,EAAwD;AACjF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,WAAA,CAAY,MAAA,CAAO,OAAA,EAAS,SAAS,CAAA;AAAA,IAC9C,KAAA,EAAO,WAAA,CAAY,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,IACxC,oBAAA,EAAsB,WAAA,CAAY,MAAA,CAAO,oBAAA,EAAsB,sBAAsB,CAAA;AAAA,IACrF,YAAA,EAAc,WAAA,CAAY,MAAA,CAAO,YAAA,EAAc,cAAc,CAAA;AAAA,IAC7D,QAAA,EAAU,WAAA,CAAY,MAAA,CAAO,QAAA,EAAU,UAAU,CAAA;AAAA,IACjD,EAAA,EAAI,WAAA,CAAY,MAAA,CAAO,EAAE,CAAA;AAAA,IACzB,KAAA,EAAO,WAAA,CAAY,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,IACxC,KAAA,EAAO,eAAe,MAAA,CAAO,KAAA,IAAS,IAAI,UAAA,CAAW,CAAC,GAAG,OAAO,CAAA;AAAA,IAChE,UAAA,EAAY,mBAAA,CAAoB,MAAA,CAAO,UAAU;AAAA,GACnD;AACF;AAEA,SAAS,YAAY,KAAA,EAAmD;AACtE,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,KAAA,EAAO,IAAI,CAAA;AACxC,EAAA,OAAO,WAAA,CAAY,KAAA,EAAO,EAAA,EAAI,IAAI,CAAA;AACpC;AAEA,SAAS,cAAA,CAAe,OAAgD,KAAA,EAA2B;AACjG,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,UAAA,CAAW,OAAO,KAAK,CAAA;AAC7D,EAAA,OAAO,KAAA,YAAiB,UAAA,GAAa,KAAA,GAAQ,UAAA,CAAW,KAAK,KAAK,CAAA;AACpE;AAEA,SAAS,oBAAoB,KAAA,EAAuE;AAClG,EAAA,IAAI,KAAA,KAAU,MAAA,EAAW,OAAO,EAAC;AACjC,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,KAAU;AAC/B,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,IAAK,GAAA,CAAI,IAAA,GAAO,CAAA,IAAK,GAAA,CAAI,IAAA,GAAO,GAAA,EAAM;AAClE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,WAAA,EAAc,KAAK,CAAA,sBAAA,CAAwB,CAAA;AAAA,IAC7D;AACA,IAAA,MAAM,IAAA,GAAO,cAAA,CAAe,SAAA,IAAa,GAAA,GAAM,GAAA,CAAI,UAAU,GAAA,CAAI,IAAA,EAAM,CAAA,WAAA,EAAc,KAAK,CAAA,MAAA,CAAQ,CAAA;AAClG,IAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAa;AAC7B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,WAAA,EAAc,KAAK,CAAA,yBAAA,CAA2B,CAAA;AAAA,IAChE;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,IAAA,EAAK;AAAA,EAChC,CAAC,CAAA;AACH;AAEA,SAAS,wBAAwB,UAAA,EAAgE;AAC/F,EAAA,MAAM,MAAA,GAAuB,CAAC,eAAA,CAAgB,MAAA,CAAO,WAAW,MAAM,CAAA,EAAG,CAAA,EAAG,mBAAmB,CAAC,CAAA;AAChG,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,UAAA,CAAW,EAAA,CAAG,GAAA,CAAI,IAAI,CAAA;AAAA,MACtB,gBAAgB,MAAA,CAAO,GAAA,CAAI,KAAK,MAAM,CAAA,EAAG,GAAG,uBAAuB,CAAA;AAAA,MACnE,GAAA,CAAI;AAAA,KACN;AAAA,EACF;AACA,EAAA,OAAO,WAAA,CAAY,GAAG,MAAM,CAAA;AAC9B;AAEA,SAAS,SAAA,CAAU,OAAe,KAAA,EAA2B;AAC3D,EAAA,IAAI,KAAA,GAAQ,EAAA,IAAM,KAAA,IAAS,EAAA,IAAM,IAAA,QAAY,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,kBAAA,CAAoB,CAAA;AACnF,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,EAAE,CAAA;AAC7B,EAAA,IAAI,CAAA,GAAI,KAAA;AACR,EAAA,KAAA,IAAS,CAAA,GAAI,EAAA,EAAI,CAAA,IAAK,CAAA,EAAG,CAAA,EAAA,EAAK;AAC5B,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA,CAAO,CAAA,GAAI,KAAK,CAAA;AACzB,IAAA,CAAA,KAAM,EAAA;AAAA,EACR;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,wBAAA,CAAyB,GAAkB,GAAA,EAAuB;AACzE,EAAA,CAAA,CAAE,YAAY,4BAA4B,CAAA;AAC1C,EAAA,CAAA,CAAE,IAAI,8BAA8B,CAAA;AACpC,EAAA,CAAA,CAAE,MAAM,GAAG,CAAA;AACb;AAEA,SAAS,yBAAA,CAA0B,GAAkB,GAAA,EAAwC;AAC3F,EAAA,CAAA,CAAE,EAAA,CAAG,IAAI,IAAI,CAAA;AACb,EAAA,CAAA,CAAE,KAAA,CAAM,IAAI,IAAI,CAAA;AAClB;;;ACzKO,IAAM,kBAAA,GAAqB;AAC3B,IAAM,yBAAA,GAA4B;AAClC,IAAM,wBAAA,GAA2B;AACjC,IAAM,uBAAA,GAA0B;AAChC,IAAM,8BAAA,GAAiC;AACvC,IAAM,4BAAA,GAA+B;AACrC,IAAM,yBAAA,GAA4B;AAEzC,IAAM,+BAAA,GAAkC,IAAI,WAAA,EAAY,CAAE,OAAO,yBAAyB,CAAA;AAEnF,IAAM,cAAA,GAAN,MAAM,eAAA,CAAe;AAAA,EACjB,UAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACT,SAAA,GAAY,KAAA;AAAA,EAEJ,WAAA,CAAY,WAAuB,SAAA,EAAuB;AAChE,IAAA,IAAA,CAAK,aAAa,WAAA,CAAY,SAAA,EAAW,yBAAA,EAA2B,sBAAsB,EAAE,KAAA,EAAM;AAClG,IAAA,IAAA,CAAK,aAAa,WAAA,CAAY,SAAA,EAAW,wBAAA,EAA0B,sBAAsB,EAAE,KAAA,EAAM;AACjG,IAAA,IAAA,CAAK,aAAA,GAAgB,mBAAA,CAAoB,IAAA,CAAK,UAAU,CAAA;AAAA,EAC1D;AAAA,EAEA,OAAO,SAAS,IAAA,EAAsD;AACpE,IAAA,MAAM,KAAK,QAAA,CAAS,MAAA,CAAO,YAAY,IAAA,EAAM,kBAAA,EAAoB,gBAAgB,CAAC,CAAA;AAClF,IAAA,OAAO,IAAI,eAAA,CAAe,EAAA,CAAG,SAAA,EAAW,GAAG,SAAS,CAAA;AAAA,EACtD;AAAA,EAEA,SAAA,GAAwB;AACtB,IAAA,OAAO,IAAA,CAAK,WAAW,KAAA,EAAM;AAAA,EAC/B;AAAA,EAEA,YAAA,GAA2B;AACzB,IAAA,OAAO,IAAA,CAAK,cAAc,KAAA,EAAM;AAAA,EAClC;AAAA,EAEA,UAAA,GAAqB;AACnB,IAAA,OAAO,UAAA,CAAW,KAAK,aAAa,CAAA;AAAA,EACtC;AAAA,EAEA,KAAK,OAAA,EAAiC;AACpC,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,IAC3C;AACA,IAAA,OAAO,QAAA,CAAS,KAAK,OAAA,EAAS,IAAA,CAAK,YAAY,EAAE,YAAA,EAAc,OAAO,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,UAAA,CAAW,KAAK,CAAC,CAAA;AACtB,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAAA,EACnB;AAAA;AAAA,EAGA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACf;AAAA;AAAA,EAGA,IAAI,QAAA,GAAoB;AACtB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,YAAY,MAAA,EAAgC;AAC1C,IAAA,OAAO,KAAK,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,EAAA,EAAI,SAAS,CAAC,CAAA;AAAA,EACrD;AAAA,EAEA,MAAA,CAAO,SAAqB,SAAA,EAAgC;AAC1D,IAAA,OAAO,QAAA,CAAS,MAAA;AAAA,MACd,WAAA,CAAY,SAAA,EAAW,uBAAA,EAAyB,qBAAqB,CAAA;AAAA,MACrE,OAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA,EAEA,UAAU,MAAA,EAKR;AACA,IAAA,MAAM,cAAA,GAAiB,wBAAA,CAAyB,MAAA,EAAQ,CAAI,CAAA;AAC5D,IAAA,MAAM,OAAA,GAAU,WAAW,cAAc,CAAA;AACzC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA;AACnC,IAAA,MAAM,SAAA,GAAY,wBAAA,CAAyB,MAAA,EAAQ,SAAA,EAAW,KAAK,UAAU,CAAA;AAC7E,IAAA,MAAM,MAAA,GAAS,UAAA;AAAA,MACb,WAAA;AAAA,QACE,wBAAA,CAAyB,QAAQ,CAAI,CAAA;AAAA,QACrC,SAAA;AAAA,QACA,IAAA,CAAK;AAAA;AACP,KACF;AACA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,UAAA,CAAW,SAAS,CAAA,CAAE,MAAM,CAAC,CAAA;AAAA,MACtC,SAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF;AAEO,SAAS,4BAA4B,SAAA,EAAmD;AAC7F,EAAA,OAAO,UAAA,CAAW,mBAAA,CAAoB,SAAS,CAAC,CAAA;AAClD;AAEO,SAAS,oBAAoB,SAAA,EAAuD;AACzF,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,SAAA,EAAW,wBAAA,EAA0B,sBAAsB,CAAA;AACrF,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,+BAAA;AAAA,IACA,eAAA,CAAgB,MAAA,CAAO,8BAA8B,CAAA,EAAG,GAAG,mBAAmB,CAAA;AAAA,IAC9E;AAAA,GACD,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAChB;AAEO,SAAS,oBAAoB,GAAA,EAAiD;AACnF,EAAA,MAAM,QAAQ,GAAA,YAAe,UAAA,GAAa,GAAA,GAAM,UAAA,CAAW,KAAK,GAAG,CAAA;AACnE,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,MAAA,KAAW,wBAAA,GAA2B,wBAAA,GAA2B,uBAAA;AACnF,EAAA,WAAA,CAAY,KAAA,EAAO,KAAK,wBAAwB,CAAA;AAChD,EAAA,MAAM,MAAM,IAAI,UAAA,CAAW,IAAI,CAAA,GAAI,CAAA,GAAI,MAAM,MAAM,CAAA;AACnD,EAAA,MAAM,EAAA,GAAK,IAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA;AAClC,EAAA,EAAA,CAAG,SAAA,CAAU,CAAA,EAAG,4BAAA,EAA8B,IAAI,CAAA;AAClD,EAAA,EAAA,CAAG,SAAA,CAAU,CAAA,EAAG,8BAAA,EAAgC,IAAI,CAAA;AACpD,EAAA,EAAA,CAAG,aAAa,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,MAAM,GAAG,IAAI,CAAA;AAC7C,EAAA,GAAA,CAAI,GAAA,CAAI,OAAO,EAAE,CAAA;AACjB,EAAA,OAAO,GAAA;AACT;ACvIO,IAAM,qBAAA,GAAwB;AAC9B,IAAM,8BAAA,GAAiC;AACvC,IAAM,iCAAA,GAAoC;AAC1C,IAAM,gCAAA,GAAmC;AACzC,IAAM,eAAA,GAAkB;AACxB,IAAM,gBAAA,GAAmB;AACzB,IAAM,gBAAA,GAAmB;AACzB,IAAM,sBAAA,GAAyB;AAC/B,IAAM,0BAAA,GAA6B;AAUnC,IAAM,SAAA,GAAN,cAAwB,KAAA,CAAM;AAAA,EACnC,WAAA,CACW,MACT,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHJ,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAIT,IAAA,IAAA,CAAK,IAAA,GAAO,WAAA;AAAA,EACd;AAAA,EALW,IAAA;AAMb;AAWA,IAAM,YAAA,GAAe,IAAI,WAAA,EAAY,CAAE,OAAO,0BAA0B,CAAA;AAExE,SAAS,kBAAkB,QAAA,EAA0B;AACnD,EAAA,OAAO,SAAS,IAAA,EAAK,CAAE,aAAY,CAAE,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC1D;AAEA,SAAS,uBAAuB,KAAA,EAAyB;AACvD,EAAA,IAAI,KAAA,CAAM,WAAW,gBAAA,EAAkB;AACrC,IAAA,MAAM,IAAI,UAAU,kBAAA,EAAoB,CAAA,sBAAA,EAAyB,gBAAgB,CAAA,YAAA,EAAe,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA;AAAA,EAChH;AACA,EAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,qBAAA,EAAuB;AACtC,IAAA,MAAM,IAAI,SAAA,CAAU,sBAAA,EAAwB,CAAA,kCAAA,EAAqC,MAAM,CAAC,CAAA,CAAG,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EAC5H;AACA,EAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,eAAA,EAAiB;AAChC,IAAA,MAAM,IAAI,SAAA,CAAU,oBAAA,EAAsB,CAAA,4BAAA,EAA+B,MAAM,CAAC,CAAA,CAAG,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EACpH;AACF;AAEA,SAAS,kBAAkB,KAAA,EAAyB;AAClD,EAAA,MAAM,YAAY,UAAA,CAAW,MAAA;AAC7B,EAAA,IAAI,CAAC,WAAW,eAAA,EAAiB;AAC/B,IAAA,MAAM,IAAI,SAAA,CAAU,eAAA,EAAiB,kDAAkD,CAAA;AAAA,EACzF;AACA,EAAA,SAAA,CAAU,gBAAgB,KAAK,CAAA;AACjC;AAEO,SAAS,oBAAoB,OAAA,EAAqD;AACvF,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,OAAA,EAAS,gBAAA,EAAkB,eAAe,CAAA;AAClE,EAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,gBAAgB,CAAA;AAC/C,EAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,qBAAA;AACb,EAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,eAAA;AACb,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAC,CAAA;AAClB,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,iBAAiB,OAAA,EAAsD;AACrF,EAAA,MAAM,QAAQ,WAAA,CAAY,OAAA,EAAS,gBAAA,EAAkB,eAAe,EAAE,KAAA,EAAM;AAC5E,EAAA,sBAAA,CAAuB,KAAK,CAAA;AAC5B,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,qBAAA;AAAA,IACT,OAAA,EAAS,eAAA;AAAA,IACT,OAAA,EAAS,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAAA,IACtB;AAAA,GACF;AACF;AAEO,SAAS,sBAAsB,OAAA,EAAiD;AACrF,EAAA,MAAM,MAAA,GAAS,iBAAiB,OAAO,CAAA;AACvC,EAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,KAAA,EAAO,QAAQ,CAAA;AACjD;AAEO,SAAS,sBAAsB,QAAA,EAA+B;AACnE,EAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,WAAW,MAAA,KAAW,CAAA,GAAI,EAAC,GAAI,UAAA,CAAW,MAAM,GAAG,CAAA;AACjE,EAAA,IAAI,KAAA,CAAM,WAAW,sBAAA,EAAwB;AAC3C,IAAA,MAAM,IAAI,UAAU,cAAA,EAAgB,CAAA,uBAAA,EAA0B,sBAAsB,CAAA,YAAA,EAAe,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA;AAAA,EACnH;AACA,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,iBAAA,CAAkB,YAAY,QAAQ,CAAA;AAAA,EAClD,SAAS,CAAA,EAAG;AACV,IAAA,MAAM,IAAI,SAAA,CAAU,aAAA,EAAe,CAAA,wBAAA,EAA4B,CAAA,CAAY,OAAO,CAAA,CAAE,CAAA;AAAA,EACtF;AACA,EAAA,OAAO,iBAAiB,OAAO,CAAA;AACjC;AAEO,SAAS,iCAAiC,OAAA,EAAqD;AACpG,EAAA,MAAM,MAAA,GAAS,iBAAiB,OAAO,CAAA;AACvC,EAAA,OAAO,QAAA,CAAS,YAAY,YAAA,EAAc,MAAA,CAAO,KAAK,CAAA,EAAG,EAAE,KAAA,EAAO,kBAAA,EAAoB,CAAA;AACxF;AAEO,SAAS,0BAA0B,QAAA,EAA8B;AACtE,EAAA,OAAO,gCAAA,CAAiC,qBAAA,CAAsB,QAAQ,CAAA,CAAE,KAAK,CAAA;AAC/E;AAEO,SAAS,6BAA6B,QAAA,EAAkC;AAC7E,EAAA,OAAO,cAAA,CAAe,QAAA,CAAS,yBAAA,CAA0B,QAAQ,CAAC,CAAA;AACpE;AAEO,SAAS,sBAAsB,QAAA,EAA0B;AAC9D,EAAA,OAAO,4BAAA,CAA6B,QAAQ,CAAA,CAAE,UAAA,EAAW;AAC3D;AAEO,SAAS,oBAAA,CAAqB,MAAe,iBAAA,EAA2B;AAC7E,EAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,gBAAgB,CAAA;AAC/C,EAAA,GAAA,CAAI,OAAO,CAAA;AACX,EAAA,OAAO,qBAAA,CAAsB,mBAAA,CAAoB,OAAO,CAAC,CAAA;AAC3D;;;ACzHO,IAAM,YAAA,GAAe;AAAA,EAC1B,QAAA,EAAU,CAAA;AAAA,EACV,YAAA,EAAc,CAAA;AAAA,EACd,SAAA,EAAW,CAAA;AAAA,EACX,MAAA,EAAQ,CAAA;AAAA,EACR,OAAA,EAAS,CAAA;AAAA,EACT,YAAA,EAAc,CAAA;AAAA;AAAA,EAEd,YAAA,EAAc,CAAA;AAAA,EACd,KAAA,EAAO;AACT;;;ACyBO,SAAS,yBAAyB,IAAA,EAGjB;AACtB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,KAAK,EAAE,CAAA;AAC7C,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,CAAA,EAAA,EAAK,MAAA,CAAO,OAAO,CAAA,CAAA;AAAA,IACpC,cAAA,EAAgB,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA;AAAA,IACxC,eAAA,EAAiB,UAAA,CAAW,MAAA,CAAO,OAAO,CAAA;AAAA,IAC1C,cAAA,EAAgB,OAAO,SAAA,CAAU;AAAA,GACnC;AACF;AAcA,eAAsB,0BAAA,CACpB,MAAA,EACA,eAAA,EACA,iBAAA,EACiB;AACjB,EAAA,MAAM,WAAW,MAAM,MAAA,CAAO,KAAa,eAAA,EAAiB,CAAC,eAAe,CAAC,CAAA;AAC7E,EAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,QAAA,EAAU,uBAAuB,CAAA;AAClE,EAAA,IAAI,aAAA,CAAc,WAAW,EAAA,EAAI;AAC/B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,4CAAA,EAA+C,cAAc,MAAM,CAAA;AAAA,KACrE;AAAA,EACF;AACA,EAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,iBAAA,EAAmB,kBAAkB,CAAA;AACtE,EAAA,IAAI,CAAC,UAAA,CAAW,aAAA,EAAe,aAAa,CAAA,EAAG;AAC7C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,kCAAkC,UAAA,CAAW,aAAa,CAAC,CAAA,4CAAA,EAA+C,UAAA,CAAW,aAAa,CAAC,CAAA;AAAA,KACrI;AAAA,EACF;AACA,EAAA,OAAO,WAAW,aAAa,CAAA;AACjC;AAaA,eAAsB,kBAAkB,IAAA,EAIpB;AAClB,EAAA,MAAM,SAAA,GAAY,yBAAyB,EAAE,OAAA,EAAS,KAAK,OAAA,EAAS,EAAA,EAAI,IAAA,CAAK,EAAA,EAAI,CAAA;AACjF,EAAA,OAAO,0BAAA;AAAA,IACL,IAAA,CAAK,MAAA;AAAA,IACL,SAAA,CAAU,eAAA;AAAA,IACV,SAAA,CAAU;AAAA,GACZ;AACF;AAEA,SAAS,UAAA,CAAW,GAAe,CAAA,EAAwB;AACzD,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,IAAI,EAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,GAAG,OAAO,KAAA;AAAA,EAC5B;AACA,EAAA,OAAO,IAAA;AACT","file":"index.js","sourcesContent":["export class BincodeWriter {\n #chunks: number[] = [];\n\n u8(value: number): void {\n this.#int(value, 1);\n }\n\n u16(value: number): void {\n this.#int(value, 2);\n }\n\n u32(value: number): void {\n this.#int(value, 4);\n }\n\n u64(value: bigint | number): void {\n this.#big(value, 8);\n }\n\n u128(value: bigint | number): void {\n this.#big(value, 16);\n }\n\n enumVariant(value: number): void {\n this.u32(value);\n }\n\n rawBytes(bytes: Uint8Array): void {\n for (const b of bytes) this.#chunks.push(b);\n }\n\n bytes(bytes: Uint8Array): void {\n this.u64(BigInt(bytes.length));\n this.rawBytes(bytes);\n }\n\n optionBytes(bytes: Uint8Array | null): void {\n if (bytes === null) {\n this.u8(0);\n return;\n }\n this.u8(1);\n this.rawBytes(bytes);\n }\n\n toBytes(): Uint8Array {\n return Uint8Array.from(this.#chunks);\n }\n\n #int(value: number, bytes: number): void {\n if (!Number.isSafeInteger(value) || value < 0 || value >= 2 ** (bytes * 8)) {\n throw new Error(`integer out of u${bytes * 8} range`);\n }\n for (let i = 0; i < bytes; i++) {\n this.#chunks.push((value >> (8 * i)) & 0xff);\n }\n }\n\n #big(value: bigint | number, bytes: number): void {\n let v = typeof value === \"bigint\" ? value : BigInt(value);\n if (v < 0n || v >= (1n << BigInt(bytes * 8))) {\n throw new Error(`integer out of u${bytes * 8} range`);\n }\n for (let i = 0; i < bytes; i++) {\n this.#chunks.push(Number(v & 0xffn));\n v >>= 8n;\n }\n }\n}\n","export function concatBytes(...chunks: Uint8Array[]): Uint8Array {\n const len = chunks.reduce((n, c) => n + c.length, 0);\n const out = new Uint8Array(len);\n let off = 0;\n for (const chunk of chunks) {\n out.set(chunk, off);\n off += chunk.length;\n }\n return out;\n}\n\nexport function bytesToHex(bytes: Uint8Array): string {\n let out = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n out += bytes[i]!.toString(16).padStart(2, \"0\");\n }\n return out;\n}\n\nexport function hexToBytes(hex: string, label = \"hex\"): Uint8Array {\n const stripped = hex.startsWith(\"0x\") || hex.startsWith(\"0X\") ? hex.slice(2) : hex;\n if (stripped.length % 2 !== 0) {\n throw new Error(`${label} must have even length`);\n }\n const out = new Uint8Array(stripped.length / 2);\n for (let i = 0; i < out.length; i++) {\n const b = Number.parseInt(stripped.slice(i * 2, i * 2 + 2), 16);\n if (Number.isNaN(b)) {\n throw new Error(`${label} contains invalid hex`);\n }\n out[i] = b;\n }\n return out;\n}\n\nexport function expectBytes(value: Uint8Array | readonly number[], len: number, label: string): Uint8Array {\n if (value.length !== len) {\n throw new Error(`${label} must be ${len} bytes, got ${value.length}`);\n }\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n\nexport function bigintToBeBytes(value: bigint, bytes: number, label: string): Uint8Array {\n if (value < 0n || value >= (1n << BigInt(bytes * 8))) {\n throw new Error(`${label} out of ${bytes * 8}-bit range`);\n }\n const out = new Uint8Array(bytes);\n let v = value;\n for (let i = bytes - 1; i >= 0; i--) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n return out;\n}\n\nexport function parseBigint(value: bigint | number | string | undefined, label: string): bigint {\n if (value === undefined) throw new Error(`${label} missing`);\n if (typeof value === \"bigint\") return value;\n if (typeof value === \"number\") {\n if (!Number.isSafeInteger(value) || value < 0) throw new Error(`${label} must be a non-negative safe integer`);\n return BigInt(value);\n }\n if (value.startsWith(\"0x\") || value.startsWith(\"0X\")) return BigInt(value);\n return BigInt(value);\n}\n","import { BincodeWriter } from \"./bincode.js\";\nimport { bigintToBeBytes, concatBytes, expectBytes, hexToBytes, parseBigint } from \"./bytes.js\";\nimport {\n ENUM_VARIANT_INDEX_ML_DSA_65,\n ML_DSA_65_PUBLIC_KEY_LEN,\n ML_DSA_65_SIGNATURE_LEN,\n STANDARD_ALGO_NUMBER_ML_DSA_65,\n} from \"./ml-dsa.js\";\n\nexport interface NativeEvmTxFields {\n chainId: bigint | number | string;\n nonce: bigint | number | string;\n maxPriorityFeePerGas: bigint | number | string;\n maxFeePerGas: bigint | number | string;\n gasLimit: bigint | number | string;\n to: Uint8Array | readonly number[] | string | null;\n value: bigint | number | string;\n input?: Uint8Array | readonly number[] | string;\n extensions?: readonly NativeTxExtensionLike[];\n}\n\nexport interface NativeTxExtension {\n kind: number;\n body: Uint8Array | readonly number[] | string;\n}\n\nexport interface NativeTxExtensionDescriptor {\n kind: number;\n bodyHex: string;\n}\n\nexport type NativeTxExtensionLike = NativeTxExtension | NativeTxExtensionDescriptor;\n\nexport function encodeTransactionForHash(fields: NativeEvmTxFields, tag: 0x01 | 0x02): Uint8Array {\n const n = normalizeTxFields(fields);\n return concatBytes(\n Uint8Array.of(tag),\n bigintToBeBytes(n.chainId, 8, \"chainId\"),\n bigintToBeBytes(n.nonce, 8, \"nonce\"),\n bigintToBeBytes(n.maxPriorityFeePerGas, 32, \"maxPriorityFeePerGas\"),\n bigintToBeBytes(n.maxFeePerGas, 32, \"maxFeePerGas\"),\n bigintToBeBytes(n.gasLimit, 8, \"gasLimit\"),\n n.to === null ? Uint8Array.of(0) : concatBytes(Uint8Array.of(1), n.to),\n bigintToBeBytes(n.value, 32, \"value\"),\n bigintToBeBytes(BigInt(n.input.length), 4, \"input.length\"),\n n.input,\n new Uint8Array(4), // access_list length\n encodeExtensionsForHash(n.extensions),\n );\n}\n\nexport function bincodeSignedTransaction(\n fields: NativeEvmTxFields,\n signature: Uint8Array | readonly number[],\n publicKey: Uint8Array | readonly number[],\n): Uint8Array {\n const n = normalizeTxFields(fields);\n const sig = expectBytes(signature, ML_DSA_65_SIGNATURE_LEN, \"ML-DSA-65 signature\");\n const pk = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\");\n const w = new BincodeWriter();\n w.u64(n.chainId);\n w.u64(n.nonce);\n // Amount(U256) goes through alloy's ruint serde, which emits\n // `serialize_bytes(&to_be_bytes_vec())` for non-human-readable\n // serializers. bincode 1.x renders that as `u64(len) || 32 bytes BE`.\n // Address inside Option<Address> takes the same `serialize_bytes`\n // path via alloy's FixedBytes impl, so admin-tag(1) is followed by a\n // length-prefixed 20-byte payload, not a raw 20-byte run.\n w.bytes(uint256Be(n.maxPriorityFeePerGas, \"maxPriorityFeePerGas\"));\n w.bytes(uint256Be(n.maxFeePerGas, \"maxFeePerGas\"));\n w.u64(n.gasLimit);\n if (n.to === null) {\n w.u8(0);\n } else {\n w.u8(1);\n w.bytes(n.to);\n }\n w.bytes(uint256Be(n.value, \"value\"));\n w.bytes(n.input);\n w.u64(0n); // access_list length\n w.u64(BigInt(n.extensions.length));\n for (const ext of n.extensions) bincodeTypedExtensionInto(w, ext);\n bincodeMlDsa65OpaqueInto(w, sig);\n bincodeMlDsa65OpaqueInto(w, pk);\n return w.toBytes();\n}\n\ninterface NormalizedNativeTxExtension {\n kind: number;\n body: Uint8Array;\n}\n\ninterface NormalizedNativeEvmTxFields {\n chainId: bigint;\n nonce: bigint;\n maxPriorityFeePerGas: bigint;\n maxFeePerGas: bigint;\n gasLimit: bigint;\n to: Uint8Array | null;\n value: bigint;\n input: Uint8Array;\n extensions: NormalizedNativeTxExtension[];\n}\n\nfunction normalizeTxFields(fields: NativeEvmTxFields): NormalizedNativeEvmTxFields {\n return {\n chainId: parseBigint(fields.chainId, \"chainId\"),\n nonce: parseBigint(fields.nonce, \"nonce\"),\n maxPriorityFeePerGas: parseBigint(fields.maxPriorityFeePerGas, \"maxPriorityFeePerGas\"),\n maxFeePerGas: parseBigint(fields.maxFeePerGas, \"maxFeePerGas\"),\n gasLimit: parseBigint(fields.gasLimit, \"gasLimit\"),\n to: normalizeTo(fields.to),\n value: parseBigint(fields.value, \"value\"),\n input: normalizeBytes(fields.input ?? new Uint8Array(0), \"input\"),\n extensions: normalizeExtensions(fields.extensions),\n };\n}\n\nfunction normalizeTo(value: NativeEvmTxFields[\"to\"]): Uint8Array | null {\n if (value === null) return null;\n const bytes = normalizeBytes(value, \"to\");\n return expectBytes(bytes, 20, \"to\");\n}\n\nfunction normalizeBytes(value: Uint8Array | readonly number[] | string, label: string): Uint8Array {\n if (typeof value === \"string\") return hexToBytes(value, label);\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n\nfunction normalizeExtensions(value: NativeEvmTxFields[\"extensions\"]): NormalizedNativeTxExtension[] {\n if (value === undefined) return [];\n return value.map((ext, index) => {\n if (!Number.isInteger(ext.kind) || ext.kind < 0 || ext.kind > 0xff) {\n throw new Error(`extensions[${index}].kind out of u8 range`);\n }\n const body = normalizeBytes(\"bodyHex\" in ext ? ext.bodyHex : ext.body, `extensions[${index}].body`);\n if (body.length > 0xffff_ffff) {\n throw new Error(`extensions[${index}].body exceeds u32 length`);\n }\n return { kind: ext.kind, body };\n });\n}\n\nfunction encodeExtensionsForHash(extensions: readonly NormalizedNativeTxExtension[]): Uint8Array {\n const chunks: Uint8Array[] = [bigintToBeBytes(BigInt(extensions.length), 4, \"extensions.length\")];\n for (const ext of extensions) {\n chunks.push(\n Uint8Array.of(ext.kind),\n bigintToBeBytes(BigInt(ext.body.length), 4, \"extension.body.length\"),\n ext.body,\n );\n }\n return concatBytes(...chunks);\n}\n\nfunction uint256Be(value: bigint, label: string): Uint8Array {\n if (value < 0n || value >= 1n << 256n) throw new Error(`${label} out of u256 range`);\n const out = new Uint8Array(32);\n let v = value;\n for (let i = 31; i >= 0; i--) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n return out;\n}\n\nfunction bincodeMlDsa65OpaqueInto(w: BincodeWriter, raw: Uint8Array): void {\n w.enumVariant(ENUM_VARIANT_INDEX_ML_DSA_65);\n w.u16(STANDARD_ALGO_NUMBER_ML_DSA_65);\n w.bytes(raw);\n}\n\nfunction bincodeTypedExtensionInto(w: BincodeWriter, ext: NormalizedNativeTxExtension): void {\n w.u8(ext.kind);\n w.bytes(ext.body);\n}\n","import { ml_dsa65 } from \"@noble/post-quantum/ml-dsa.js\";\nimport { blake3 } from \"@noble/hashes/blake3.js\";\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { bigintToBeBytes, bytesToHex, concatBytes, expectBytes } from \"./bytes.js\";\nimport { bincodeSignedTransaction, encodeTransactionForHash, type NativeEvmTxFields } from \"./tx.js\";\n\nexport const ML_DSA_65_SEED_LEN = 32;\nexport const ML_DSA_65_SIGNING_KEY_LEN = 4032;\nexport const ML_DSA_65_PUBLIC_KEY_LEN = 1952;\nexport const ML_DSA_65_SIGNATURE_LEN = 3309;\nexport const STANDARD_ALGO_NUMBER_ML_DSA_65 = 1001;\nexport const ENUM_VARIANT_INDEX_ML_DSA_65 = 3;\nexport const ADDRESS_DERIVATION_DOMAIN = \"MONO_ADDRESS_BLAKE3_20_V1\";\n\nconst ADDRESS_DERIVATION_DOMAIN_BYTES = new TextEncoder().encode(ADDRESS_DERIVATION_DOMAIN);\n\nexport class MlDsa65Backend {\n readonly #secretKey: Uint8Array;\n readonly #publicKey: Uint8Array;\n readonly #addressBytes: Uint8Array;\n #disposed = false;\n\n private constructor(secretKey: Uint8Array, publicKey: Uint8Array) {\n this.#secretKey = expectBytes(secretKey, ML_DSA_65_SIGNING_KEY_LEN, \"ML-DSA-65 secret key\").slice();\n this.#publicKey = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\").slice();\n this.#addressBytes = mlDsa65AddressBytes(this.#publicKey);\n }\n\n static fromSeed(seed: Uint8Array | readonly number[]): MlDsa65Backend {\n const kp = ml_dsa65.keygen(expectBytes(seed, ML_DSA_65_SEED_LEN, \"ML-DSA-65 seed\"));\n return new MlDsa65Backend(kp.secretKey, kp.publicKey);\n }\n\n publicKey(): Uint8Array {\n return this.#publicKey.slice();\n }\n\n addressBytes(): Uint8Array {\n return this.#addressBytes.slice();\n }\n\n getAddress(): string {\n return bytesToHex(this.#addressBytes);\n }\n\n sign(message: Uint8Array): Uint8Array {\n if (this.#disposed) {\n throw new Error(\"MlDsa65Backend disposed\");\n }\n return ml_dsa65.sign(message, this.#secretKey, { extraEntropy: false });\n }\n\n /**\n * Best-effort deterministic wipe of the in-memory secret key. Zeroes the\n * SDK-held `#secretKey` copy and makes any subsequent `sign()` /\n * `signPrehash()` / `signEvmTx()` throw `\"MlDsa65Backend disposed\"` rather\n * than signing with a zeroed key. Idempotent. Public material\n * (`publicKey()` / `getAddress()` / `verify()`) stays usable.\n *\n * Defense-in-depth (S1-01): narrows the post-lock residency window of the\n * ML-DSA-65 secret in the JS heap. `@noble/post-quantum`'s internal\n * transient keygen/sign buffers are out of scope; the SDK-held copy is the\n * meaningful residency win.\n */\n dispose(): void {\n this.#secretKey.fill(0);\n this.#disposed = true;\n }\n\n /** Alias for {@link dispose}. */\n zeroize(): void {\n this.dispose();\n }\n\n /** Whether {@link dispose} has been called (the secret key is wiped). */\n get disposed(): boolean {\n return this.#disposed;\n }\n\n signPrehash(digest: Uint8Array): Uint8Array {\n return this.sign(expectBytes(digest, 32, \"prehash\"));\n }\n\n verify(message: Uint8Array, signature: Uint8Array): boolean {\n return ml_dsa65.verify(\n expectBytes(signature, ML_DSA_65_SIGNATURE_LEN, \"ML-DSA-65 signature\"),\n message,\n this.#publicKey,\n );\n }\n\n signEvmTx(fields: NativeEvmTxFields): {\n wireHex: string;\n wireBytes: Uint8Array;\n sighash: Uint8Array;\n txHash: Uint8Array;\n } {\n const txHashPreimage = encodeTransactionForHash(fields, 0x01);\n const sighash = keccak_256(txHashPreimage);\n const signature = this.sign(sighash);\n const wireBytes = bincodeSignedTransaction(fields, signature, this.#publicKey);\n const txHash = keccak_256(\n concatBytes(\n encodeTransactionForHash(fields, 0x02),\n signature,\n this.#publicKey,\n ),\n );\n return {\n wireHex: bytesToHex(wireBytes).slice(2),\n wireBytes,\n sighash,\n txHash,\n };\n }\n}\n\nexport function mlDsa65AddressFromPublicKey(publicKey: Uint8Array | readonly number[]): string {\n return bytesToHex(mlDsa65AddressBytes(publicKey));\n}\n\nexport function mlDsa65AddressBytes(publicKey: Uint8Array | readonly number[]): Uint8Array {\n const bytes = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\");\n return blake3(concatBytes(\n ADDRESS_DERIVATION_DOMAIN_BYTES,\n bigintToBeBytes(BigInt(STANDARD_ALGO_NUMBER_ML_DSA_65), 2, \"ML-DSA-65 algo id\"),\n bytes,\n )).slice(0, 20);\n}\n\nexport function encodeMlDsa65Opaque(raw: Uint8Array | readonly number[]): Uint8Array {\n const bytes = raw instanceof Uint8Array ? raw : Uint8Array.from(raw);\n const len = bytes.length === ML_DSA_65_PUBLIC_KEY_LEN ? ML_DSA_65_PUBLIC_KEY_LEN : ML_DSA_65_SIGNATURE_LEN;\n expectBytes(bytes, len, \"ML-DSA-65 opaque bytes\");\n const out = new Uint8Array(4 + 2 + 8 + bytes.length);\n const dv = new DataView(out.buffer);\n dv.setUint32(0, ENUM_VARIANT_INDEX_ML_DSA_65, true);\n dv.setUint16(4, STANDARD_ALGO_NUMBER_ML_DSA_65, true);\n dv.setBigUint64(6, BigInt(bytes.length), true);\n out.set(bytes, 14);\n return out;\n}\n\nexport function uint256Bytes(value: bigint | number | string, label: string): Uint8Array {\n const v = typeof value === \"bigint\" ? value : typeof value === \"number\" ? BigInt(value) : BigInt(value);\n return bigintToBeBytes(v, 32, label);\n}\n","import { shake256 } from \"@noble/hashes/sha3.js\";\nimport { entropyToMnemonic, mnemonicToEntropy } from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english.js\";\nimport { concatBytes, expectBytes } from \"./bytes.js\";\nimport { ML_DSA_65_SEED_LEN, MlDsa65Backend } from \"./ml-dsa.js\";\n\nexport const PQM1_ALGO_TAG_MLDSA65 = 0x01;\nexport const PQM1_ALGO_TAG_MLDSA87_RESERVED = 0x02;\nexport const PQM1_ALGO_TAG_SLHDSA128S_RESERVED = 0x03;\nexport const PQM1_ALGO_TAG_FALCON512_RESERVED = 0x04;\nexport const PQM1_VERSION_V1 = 0x01;\nexport const PQM1_PAYLOAD_LEN = 32;\nexport const PQM1_ENTROPY_LEN = 30;\nexport const PQM1_V1_MNEMONIC_WORDS = 24;\nexport const PQM1_V1_MLDSA65_DOMAIN_TAG = \"monolythium.pqm1.v1.mldsa65\";\n\nexport type Pqm1ErrorKind =\n | \"badWordCount\"\n | \"bip39Decode\"\n | \"badPayloadLength\"\n | \"unsupportedAlgorithm\"\n | \"unsupportedVersion\"\n | \"missingRandom\";\n\nexport class Pqm1Error extends Error {\n constructor(\n readonly kind: Pqm1ErrorKind,\n message: string,\n ) {\n super(message);\n this.name = \"Pqm1Error\";\n }\n}\n\nexport interface Pqm1Payload {\n algoTag: typeof PQM1_ALGO_TAG_MLDSA65;\n version: typeof PQM1_VERSION_V1;\n entropy: Uint8Array;\n bytes: Uint8Array;\n}\n\nexport type Pqm1Rng = (bytes: Uint8Array) => void;\n\nconst DOMAIN_BYTES = new TextEncoder().encode(PQM1_V1_MLDSA65_DOMAIN_TAG);\n\nfunction normalizeMnemonic(mnemonic: string): string {\n return mnemonic.trim().toLowerCase().replace(/\\s+/g, \" \");\n}\n\nfunction ensureSupportedPayload(bytes: Uint8Array): void {\n if (bytes.length !== PQM1_PAYLOAD_LEN) {\n throw new Pqm1Error(\"badPayloadLength\", `PQM-1 payload must be ${PQM1_PAYLOAD_LEN} bytes, got ${bytes.length}`);\n }\n if (bytes[0] !== PQM1_ALGO_TAG_MLDSA65) {\n throw new Pqm1Error(\"unsupportedAlgorithm\", `unsupported PQM-1 algorithm tag 0x${bytes[0]!.toString(16).padStart(2, \"0\")}`);\n }\n if (bytes[1] !== PQM1_VERSION_V1) {\n throw new Pqm1Error(\"unsupportedVersion\", `unsupported PQM-1 version 0x${bytes[1]!.toString(16).padStart(2, \"0\")}`);\n }\n}\n\nfunction defaultRandomFill(bytes: Uint8Array): void {\n const cryptoObj = globalThis.crypto;\n if (!cryptoObj?.getRandomValues) {\n throw new Pqm1Error(\"missingRandom\", \"globalThis.crypto.getRandomValues is unavailable\");\n }\n cryptoObj.getRandomValues(bytes);\n}\n\nexport function assemblePqm1Payload(entropy: Uint8Array | readonly number[]): Uint8Array {\n const ent = expectBytes(entropy, PQM1_ENTROPY_LEN, \"PQM-1 entropy\");\n const payload = new Uint8Array(PQM1_PAYLOAD_LEN);\n payload[0] = PQM1_ALGO_TAG_MLDSA65;\n payload[1] = PQM1_VERSION_V1;\n payload.set(ent, 2);\n return payload;\n}\n\nexport function parsePqm1Payload(payload: Uint8Array | readonly number[]): Pqm1Payload {\n const bytes = expectBytes(payload, PQM1_PAYLOAD_LEN, \"PQM-1 payload\").slice();\n ensureSupportedPayload(bytes);\n return {\n algoTag: PQM1_ALGO_TAG_MLDSA65,\n version: PQM1_VERSION_V1,\n entropy: bytes.slice(2),\n bytes,\n };\n}\n\nexport function pqm1PayloadToMnemonic(payload: Uint8Array | readonly number[]): string {\n const parsed = parsePqm1Payload(payload);\n return entropyToMnemonic(parsed.bytes, wordlist);\n}\n\nexport function pqm1MnemonicToPayload(mnemonic: string): Pqm1Payload {\n const normalized = normalizeMnemonic(mnemonic);\n const words = normalized.length === 0 ? [] : normalized.split(\" \");\n if (words.length !== PQM1_V1_MNEMONIC_WORDS) {\n throw new Pqm1Error(\"badWordCount\", `PQM-1 mnemonic must be ${PQM1_V1_MNEMONIC_WORDS} words, got ${words.length}`);\n }\n let payload: Uint8Array;\n try {\n payload = mnemonicToEntropy(normalized, wordlist);\n } catch (e) {\n throw new Pqm1Error(\"bip39Decode\", `invalid PQM-1 mnemonic: ${(e as Error).message}`);\n }\n return parsePqm1Payload(payload);\n}\n\nexport function derivePqm1MlDsa65SeedFromPayload(payload: Uint8Array | readonly number[]): Uint8Array {\n const parsed = parsePqm1Payload(payload);\n return shake256(concatBytes(DOMAIN_BYTES, parsed.bytes), { dkLen: ML_DSA_65_SEED_LEN });\n}\n\nexport function pqm1MnemonicToMlDsa65Seed(mnemonic: string): Uint8Array {\n return derivePqm1MlDsa65SeedFromPayload(pqm1MnemonicToPayload(mnemonic).bytes);\n}\n\nexport function pqm1MnemonicToMlDsa65Backend(mnemonic: string): MlDsa65Backend {\n return MlDsa65Backend.fromSeed(pqm1MnemonicToMlDsa65Seed(mnemonic));\n}\n\nexport function pqm1MnemonicToAddress(mnemonic: string): string {\n return pqm1MnemonicToMlDsa65Backend(mnemonic).getAddress();\n}\n\nexport function generatePqm1Mnemonic(rng: Pqm1Rng = defaultRandomFill): string {\n const entropy = new Uint8Array(PQM1_ENTROPY_LEN);\n rng(entropy);\n return pqm1PayloadToMnemonic(assemblePqm1Payload(entropy));\n}\n","/**\n * Mempool transaction-class tags.\n *\n * The encrypted-mempool (LythiumSeal) envelope was removed at the v2\n * re-genesis; plaintext submission is the sole submit path. This module now\n * carries only the {@link MempoolClass} tag the node uses to classify a\n * transaction for ordering/admission.\n */\n\nexport const MempoolClass = {\n Transfer: 0,\n ContractCall: 1,\n PrivacyOp: 2,\n CLOBOp: 3,\n AgentOp: 4,\n FoundationOp: 5,\n /** @deprecated Use FoundationOp. */\n GovernanceOp: 5,\n RWAOp: 6,\n} as const;\nexport type MempoolClass = (typeof MempoolClass)[keyof typeof MempoolClass];\n","import { bytesToHex, hexToBytes } from \"./bytes.js\";\nimport type { MlDsa65Backend } from \"./ml-dsa.js\";\nimport type { NativeEvmTxFields } from \"./tx.js\";\n\nexport interface JsonRpcCallClient {\n call<T>(method: string, params?: unknown): Promise<T>;\n}\n\n/**\n * A built plaintext submission — the bincode-encoded chain-side\n * `SignedTransaction` (`0x`-prefixed hex) ready to hand to\n * `mesh_submitTx`, plus the canonical hashes the wallet validates the\n * node echo against.\n *\n * Mirrors the chain-side artefacts produced by the Rust SDK's\n * `build_chain_signed_tx` (`mono-core/crates/core/sdk/src/tx.rs`): the\n * ML-DSA-65 signature is taken over the canonical chain-side `sighash`\n * (keccak-256 of the 0x01-tagged preimage) and the canonical native tx\n * hash is the keccak-256 of the 0x02-tagged preimage with the signature\n * and public key appended.\n */\nexport interface PlaintextSubmission {\n /** Bincode `SignedTransaction` wire bytes, `0x`-prefixed. */\n signedTxWireHex: string;\n /** Canonical native tx hash the node echoes on admission. */\n innerTxHashHex: string;\n /** Canonical chain-side sighash that was signed. */\n innerSighashHex: string;\n /** Length in bytes of the bincode `SignedTransaction`. */\n innerWireBytes: number;\n}\n\n/**\n * Build a PLAINTEXT submission — the sole submit path since the v2\n * re-genesis dropped the encrypted (LythiumSeal) mempool.\n *\n * It re-shapes the native tx into the chain-side `SignedTransaction`,\n * signs over the canonical `sighash` with the ML-DSA-65 backend,\n * bincode-serializes the result, and `0x`-hex-encodes it. The bytes are\n * forwarded verbatim through `mesh_submitTx` (the node routes them to\n * `MempoolTx::plaintext` via `submit_raw`).\n *\n * Mirrors `TxClient::submit_plaintext` in the Rust SDK.\n */\nexport function buildPlaintextSubmission(args: {\n backend: MlDsa65Backend;\n tx: NativeEvmTxFields;\n}): PlaintextSubmission {\n const signed = args.backend.signEvmTx(args.tx);\n return {\n signedTxWireHex: `0x${signed.wireHex}`,\n innerTxHashHex: bytesToHex(signed.txHash),\n innerSighashHex: bytesToHex(signed.sighash),\n innerWireBytes: signed.wireBytes.length,\n };\n}\n\n/**\n * Submit a bincode-encoded chain-side `SignedTransaction` (`0x`-hex)\n * through the plaintext `mesh_submitTx` path and validate the node's\n * echoed canonical tx hash against the locally computed one.\n *\n * Mirrors the validation in `TxClient::submit_plaintext`: the node\n * echoes the 32-byte canonical native tx hash on admission, and any\n * mismatch (or non-32-byte response) is rejected loud so a wallet never\n * trusts a hash it did not derive itself.\n *\n * @returns the validated canonical native tx hash (`0x`-prefixed).\n */\nexport async function submitPlaintextTransaction(\n client: JsonRpcCallClient,\n signedTxWireHex: string,\n expectedTxHashHex: string,\n): Promise<string> {\n const returned = await client.call<string>(\"mesh_submitTx\", [signedTxWireHex]);\n const returnedBytes = hexToBytes(returned, \"mesh_submitTx tx hash\");\n if (returnedBytes.length !== 32) {\n throw new Error(\n `mesh_submitTx tx hash must be 32 bytes, got ${returnedBytes.length}`,\n );\n }\n const expectedBytes = hexToBytes(expectedTxHashHex, \"expected tx hash\");\n if (!bytesEqual(returnedBytes, expectedBytes)) {\n throw new Error(\n `mesh_submitTx returned tx hash ${bytesToHex(returnedBytes)} but the locally computed canonical hash is ${bytesToHex(expectedBytes)}`,\n );\n }\n return bytesToHex(returnedBytes);\n}\n\n/**\n * Build, sign, and submit a native transaction through the plaintext\n * `mesh_submitTx` path.\n *\n * Mirrors `TxClient::build_sign_submit` in the Rust SDK. The encrypted\n * (LythiumSeal) submit path was removed at the v2 re-genesis, so this is\n * the single build-sign-submit entry point.\n *\n * @returns the node-echoed-and-validated canonical native tx hash\n * (`0x`-prefixed).\n */\nexport async function submitTransaction(args: {\n client: JsonRpcCallClient;\n backend: MlDsa65Backend;\n tx: NativeEvmTxFields;\n}): Promise<string> {\n const plaintext = buildPlaintextSubmission({ backend: args.backend, tx: args.tx });\n return submitPlaintextTransaction(\n args.client,\n plaintext.signedTxWireHex,\n plaintext.innerTxHashHex,\n );\n}\n\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n"]}
1
+ {"version":3,"sources":["../../src/crypto/bincode.ts","../../src/crypto/bytes.ts","../../src/crypto/tx.ts","../../src/crypto/ml-dsa.ts","../../src/crypto/mnemonic.ts","../../src/crypto/envelope.ts","../../src/crypto/submission.ts"],"names":["bip39ValidateMnemonic"],"mappings":";;;;;;;AAAO,IAAM,gBAAN,MAAoB;AAAA,EACzB,UAAoB,EAAC;AAAA,EAErB,GAAG,KAAA,EAAqB;AACtB,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,EACpB;AAAA,EAEA,IAAI,KAAA,EAAqB;AACvB,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,EACpB;AAAA,EAEA,IAAI,KAAA,EAAqB;AACvB,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,EACpB;AAAA,EAEA,IAAI,KAAA,EAA8B;AAChC,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,EACpB;AAAA,EAEA,KAAK,KAAA,EAA8B;AACjC,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,EACrB;AAAA,EAEA,YAAY,KAAA,EAAqB;AAC/B,IAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,EAChB;AAAA,EAEA,SAAS,KAAA,EAAyB;AAChC,IAAA,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAC5C;AAAA,EAEA,MAAM,KAAA,EAAyB;AAC7B,IAAA,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,MAAM,CAAC,CAAA;AAC7B,IAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,EACrB;AAAA,EAEA,YAAY,KAAA,EAAgC;AAC1C,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,IAAA,CAAK,GAAG,CAAC,CAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,GAAG,CAAC,CAAA;AACT,IAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,EACrB;AAAA,EAEA,OAAA,GAAsB;AACpB,IAAA,OAAO,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA;AAAA,EACrC;AAAA,EAEA,IAAA,CAAK,OAAe,KAAA,EAAqB;AACvC,IAAA,IAAI,CAAC,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,IAAK,QAAQ,CAAA,IAAK,KAAA,IAAS,CAAA,KAAM,KAAA,GAAQ,CAAA,CAAA,EAAI;AAC1E,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,KAAA,GAAQ,CAAC,CAAA,MAAA,CAAQ,CAAA;AAAA,IACtD;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,MAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAM,KAAA,IAAU,CAAA,GAAI,IAAM,GAAI,CAAA;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,IAAA,CAAK,OAAwB,KAAA,EAAqB;AAChD,IAAA,IAAI,IAAI,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,OAAO,KAAK,CAAA;AACxD,IAAA,IAAI,IAAI,EAAA,IAAM,CAAA,IAAM,MAAM,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,EAAI;AAC5C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,KAAA,GAAQ,CAAC,CAAA,MAAA,CAAQ,CAAA;AAAA,IACtD;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,MAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,CAAA,GAAI,KAAK,CAAC,CAAA;AACnC,MAAA,CAAA,KAAM,EAAA;AAAA,IACR;AAAA,EACF;AACF;;;ACpEO,SAAS,eAAe,MAAA,EAAkC;AAC/D,EAAA,MAAM,GAAA,GAAM,OAAO,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AACnD,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,GAAG,CAAA;AAC9B,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,GAAA,CAAI,GAAA,CAAI,OAAO,GAAG,CAAA;AAClB,IAAA,GAAA,IAAO,KAAA,CAAM,MAAA;AAAA,EACf;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,WAAW,KAAA,EAA2B;AACpD,EAAA,IAAI,GAAA,GAAM,IAAA;AACV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,GAAA,IAAO,KAAA,CAAM,CAAC,CAAA,CAAG,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,UAAA,CAAW,GAAA,EAAa,KAAA,GAAQ,KAAA,EAAmB;AACjE,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,IAAK,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,GAAI,GAAA;AAC/E,EAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,KAAM,CAAA,EAAG;AAC7B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,sBAAA,CAAwB,CAAA;AAAA,EAClD;AACA,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,QAAA,CAAS,SAAS,CAAC,CAAA;AAC9C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,KAAA,CAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,EAAG,EAAE,CAAA;AAC9D,IAAA,IAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,qBAAA,CAAuB,CAAA;AAAA,IACjD;AACA,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAAA,EACX;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,WAAA,CAAY,KAAA,EAAuC,GAAA,EAAa,KAAA,EAA2B;AACzG,EAAA,IAAI,KAAA,CAAM,WAAW,GAAA,EAAK;AACxB,IAAA,MAAM,IAAI,MAAM,CAAA,EAAG,KAAK,YAAY,GAAG,CAAA,YAAA,EAAe,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA;AAAA,EACtE;AACA,EAAA,OAAO,KAAA,YAAiB,UAAA,GAAa,KAAA,GAAQ,UAAA,CAAW,KAAK,KAAK,CAAA;AACpE;AAEO,SAAS,eAAA,CAAgB,KAAA,EAAe,KAAA,EAAe,KAAA,EAA2B;AACvF,EAAA,IAAI,QAAQ,EAAA,IAAM,KAAA,IAAU,MAAM,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,EAAI;AACpD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,QAAA,EAAW,KAAA,GAAQ,CAAC,CAAA,UAAA,CAAY,CAAA;AAAA,EAC1D;AACA,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,KAAK,CAAA;AAChC,EAAA,IAAI,CAAA,GAAI,KAAA;AACR,EAAA,KAAA,IAAS,CAAA,GAAI,KAAA,GAAQ,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACnC,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA,CAAO,CAAA,GAAI,KAAK,CAAA;AACzB,IAAA,CAAA,KAAM,EAAA;AAAA,EACR;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,WAAA,CAAY,OAA6C,KAAA,EAAuB;AAC9F,EAAA,IAAI,UAAU,MAAA,EAAW,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,QAAA,CAAU,CAAA;AAC3D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,CAAC,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,IAAK,KAAA,GAAQ,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,oCAAA,CAAsC,CAAA;AAC7G,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACA,EAAA,IAAI,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA,IAAK,KAAA,CAAM,WAAW,IAAI,CAAA,EAAG,OAAO,MAAA,CAAO,KAAK,CAAA;AACzE,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;;;AC/BO,SAAS,wBAAA,CAAyB,QAA2B,GAAA,EAA8B;AAChG,EAAA,MAAM,CAAA,GAAI,kBAAkB,MAAM,CAAA;AAClC,EAAA,OAAO,WAAA;AAAA,IACL,UAAA,CAAW,GAAG,GAAG,CAAA;AAAA,IACjB,eAAA,CAAgB,CAAA,CAAE,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA;AAAA,IACvC,eAAA,CAAgB,CAAA,CAAE,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA;AAAA,IACnC,eAAA,CAAgB,CAAA,CAAE,oBAAA,EAAsB,EAAA,EAAI,sBAAsB,CAAA;AAAA,IAClE,eAAA,CAAgB,CAAA,CAAE,YAAA,EAAc,EAAA,EAAI,cAAc,CAAA;AAAA,IAClD,eAAA,CAAgB,CAAA,CAAE,QAAA,EAAU,CAAA,EAAG,UAAU,CAAA;AAAA,IACzC,CAAA,CAAE,EAAA,KAAO,IAAA,GAAO,UAAA,CAAW,EAAA,CAAG,CAAC,CAAA,GAAI,WAAA,CAAY,UAAA,CAAW,EAAA,CAAG,CAAC,CAAA,EAAG,EAAE,EAAE,CAAA;AAAA,IACrE,eAAA,CAAgB,CAAA,CAAE,KAAA,EAAO,EAAA,EAAI,OAAO,CAAA;AAAA,IACpC,gBAAgB,MAAA,CAAO,CAAA,CAAE,MAAM,MAAM,CAAA,EAAG,GAAG,cAAc,CAAA;AAAA,IACzD,CAAA,CAAE,KAAA;AAAA,IACF,IAAI,WAAW,CAAC,CAAA;AAAA;AAAA,IAChB,uBAAA,CAAwB,EAAE,UAAU;AAAA,GACtC;AACF;AAEO,SAAS,wBAAA,CACd,MAAA,EACA,SAAA,EACA,SAAA,EACY;AACZ,EAAA,MAAM,CAAA,GAAI,kBAAkB,MAAM,CAAA;AAClC,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,SAAA,EAAW,uBAAA,EAAyB,qBAAqB,CAAA;AACjF,EAAA,MAAM,EAAA,GAAK,WAAA,CAAY,SAAA,EAAW,wBAAA,EAA0B,sBAAsB,CAAA;AAClF,EAAA,MAAM,CAAA,GAAI,IAAI,aAAA,EAAc;AAC5B,EAAA,CAAA,CAAE,GAAA,CAAI,EAAE,OAAO,CAAA;AACf,EAAA,CAAA,CAAE,GAAA,CAAI,EAAE,KAAK,CAAA;AAOb,EAAA,CAAA,CAAE,KAAA,CAAM,SAAA,CAAU,CAAA,CAAE,oBAAA,EAAsB,sBAAsB,CAAC,CAAA;AACjE,EAAA,CAAA,CAAE,KAAA,CAAM,SAAA,CAAU,CAAA,CAAE,YAAA,EAAc,cAAc,CAAC,CAAA;AACjD,EAAA,CAAA,CAAE,GAAA,CAAI,EAAE,QAAQ,CAAA;AAChB,EAAA,IAAI,CAAA,CAAE,OAAO,IAAA,EAAM;AACjB,IAAA,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA,EACR,CAAA,MAAO;AACL,IAAA,CAAA,CAAE,GAAG,CAAC,CAAA;AACN,IAAA,CAAA,CAAE,KAAA,CAAM,EAAE,EAAE,CAAA;AAAA,EACd;AACA,EAAA,CAAA,CAAE,KAAA,CAAM,SAAA,CAAU,CAAA,CAAE,KAAA,EAAO,OAAO,CAAC,CAAA;AACnC,EAAA,CAAA,CAAE,KAAA,CAAM,EAAE,KAAK,CAAA;AACf,EAAA,CAAA,CAAE,IAAI,EAAE,CAAA;AACR,EAAA,CAAA,CAAE,GAAA,CAAI,MAAA,CAAO,CAAA,CAAE,UAAA,CAAW,MAAM,CAAC,CAAA;AACjC,EAAA,KAAA,MAAW,GAAA,IAAO,CAAA,CAAE,UAAA,EAAY,yBAAA,CAA0B,GAAG,GAAG,CAAA;AAChE,EAAA,wBAAA,CAAyB,GAAG,GAAG,CAAA;AAC/B,EAAA,wBAAA,CAAyB,GAAG,EAAE,CAAA;AAC9B,EAAA,OAAO,EAAE,OAAA,EAAQ;AACnB;AAmBA,SAAS,kBAAkB,MAAA,EAAwD;AACjF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,WAAA,CAAY,MAAA,CAAO,OAAA,EAAS,SAAS,CAAA;AAAA,IAC9C,KAAA,EAAO,WAAA,CAAY,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,IACxC,oBAAA,EAAsB,WAAA,CAAY,MAAA,CAAO,oBAAA,EAAsB,sBAAsB,CAAA;AAAA,IACrF,YAAA,EAAc,WAAA,CAAY,MAAA,CAAO,YAAA,EAAc,cAAc,CAAA;AAAA,IAC7D,QAAA,EAAU,WAAA,CAAY,MAAA,CAAO,QAAA,EAAU,UAAU,CAAA;AAAA,IACjD,EAAA,EAAI,WAAA,CAAY,MAAA,CAAO,EAAE,CAAA;AAAA,IACzB,KAAA,EAAO,WAAA,CAAY,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,IACxC,KAAA,EAAO,eAAe,MAAA,CAAO,KAAA,IAAS,IAAI,UAAA,CAAW,CAAC,GAAG,OAAO,CAAA;AAAA,IAChE,UAAA,EAAY,mBAAA,CAAoB,MAAA,CAAO,UAAU;AAAA,GACnD;AACF;AAEA,SAAS,YAAY,KAAA,EAAmD;AACtE,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,KAAA,EAAO,IAAI,CAAA;AACxC,EAAA,OAAO,WAAA,CAAY,KAAA,EAAO,EAAA,EAAI,IAAI,CAAA;AACpC;AAEA,SAAS,cAAA,CAAe,OAAgD,KAAA,EAA2B;AACjG,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,UAAA,CAAW,OAAO,KAAK,CAAA;AAC7D,EAAA,OAAO,KAAA,YAAiB,UAAA,GAAa,KAAA,GAAQ,UAAA,CAAW,KAAK,KAAK,CAAA;AACpE;AAEA,SAAS,oBAAoB,KAAA,EAAuE;AAClG,EAAA,IAAI,KAAA,KAAU,MAAA,EAAW,OAAO,EAAC;AACjC,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,KAAU;AAC/B,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,IAAK,GAAA,CAAI,IAAA,GAAO,CAAA,IAAK,GAAA,CAAI,IAAA,GAAO,GAAA,EAAM;AAClE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,WAAA,EAAc,KAAK,CAAA,sBAAA,CAAwB,CAAA;AAAA,IAC7D;AACA,IAAA,MAAM,IAAA,GAAO,cAAA,CAAe,SAAA,IAAa,GAAA,GAAM,GAAA,CAAI,UAAU,GAAA,CAAI,IAAA,EAAM,CAAA,WAAA,EAAc,KAAK,CAAA,MAAA,CAAQ,CAAA;AAClG,IAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAa;AAC7B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,WAAA,EAAc,KAAK,CAAA,yBAAA,CAA2B,CAAA;AAAA,IAChE;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,IAAA,EAAK;AAAA,EAChC,CAAC,CAAA;AACH;AAEA,SAAS,wBAAwB,UAAA,EAAgE;AAC/F,EAAA,MAAM,MAAA,GAAuB,CAAC,eAAA,CAAgB,MAAA,CAAO,WAAW,MAAM,CAAA,EAAG,CAAA,EAAG,mBAAmB,CAAC,CAAA;AAChG,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,UAAA,CAAW,EAAA,CAAG,GAAA,CAAI,IAAI,CAAA;AAAA,MACtB,gBAAgB,MAAA,CAAO,GAAA,CAAI,KAAK,MAAM,CAAA,EAAG,GAAG,uBAAuB,CAAA;AAAA,MACnE,GAAA,CAAI;AAAA,KACN;AAAA,EACF;AACA,EAAA,OAAO,WAAA,CAAY,GAAG,MAAM,CAAA;AAC9B;AAEA,SAAS,SAAA,CAAU,OAAe,KAAA,EAA2B;AAC3D,EAAA,IAAI,KAAA,GAAQ,EAAA,IAAM,KAAA,IAAS,EAAA,IAAM,IAAA,QAAY,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,kBAAA,CAAoB,CAAA;AACnF,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,EAAE,CAAA;AAC7B,EAAA,IAAI,CAAA,GAAI,KAAA;AACR,EAAA,KAAA,IAAS,CAAA,GAAI,EAAA,EAAI,CAAA,IAAK,CAAA,EAAG,CAAA,EAAA,EAAK;AAC5B,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA,CAAO,CAAA,GAAI,KAAK,CAAA;AACzB,IAAA,CAAA,KAAM,EAAA;AAAA,EACR;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,wBAAA,CAAyB,GAAkB,GAAA,EAAuB;AACzE,EAAA,CAAA,CAAE,YAAY,4BAA4B,CAAA;AAC1C,EAAA,CAAA,CAAE,IAAI,8BAA8B,CAAA;AACpC,EAAA,CAAA,CAAE,MAAM,GAAG,CAAA;AACb;AAEA,SAAS,yBAAA,CAA0B,GAAkB,GAAA,EAAwC;AAC3F,EAAA,CAAA,CAAE,EAAA,CAAG,IAAI,IAAI,CAAA;AACb,EAAA,CAAA,CAAE,KAAA,CAAM,IAAI,IAAI,CAAA;AAClB;;;ACzKO,IAAM,kBAAA,GAAqB;AAC3B,IAAM,yBAAA,GAA4B;AAClC,IAAM,wBAAA,GAA2B;AACjC,IAAM,uBAAA,GAA0B;AAChC,IAAM,8BAAA,GAAiC;AACvC,IAAM,4BAAA,GAA+B;AACrC,IAAM,yBAAA,GAA4B;AAEzC,IAAM,+BAAA,GAAkC,IAAI,WAAA,EAAY,CAAE,OAAO,yBAAyB,CAAA;AAEnF,IAAM,cAAA,GAAN,MAAM,eAAA,CAAe;AAAA,EACjB,UAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACT,SAAA,GAAY,KAAA;AAAA,EAEJ,WAAA,CAAY,WAAuB,SAAA,EAAuB;AAChE,IAAA,IAAA,CAAK,aAAa,WAAA,CAAY,SAAA,EAAW,yBAAA,EAA2B,sBAAsB,EAAE,KAAA,EAAM;AAClG,IAAA,IAAA,CAAK,aAAa,WAAA,CAAY,SAAA,EAAW,wBAAA,EAA0B,sBAAsB,EAAE,KAAA,EAAM;AACjG,IAAA,IAAA,CAAK,aAAA,GAAgB,mBAAA,CAAoB,IAAA,CAAK,UAAU,CAAA;AAAA,EAC1D;AAAA,EAEA,OAAO,SAAS,IAAA,EAAsD;AACpE,IAAA,MAAM,KAAK,QAAA,CAAS,MAAA,CAAO,YAAY,IAAA,EAAM,kBAAA,EAAoB,gBAAgB,CAAC,CAAA;AAClF,IAAA,OAAO,IAAI,eAAA,CAAe,EAAA,CAAG,SAAA,EAAW,GAAG,SAAS,CAAA;AAAA,EACtD;AAAA,EAEA,SAAA,GAAwB;AACtB,IAAA,OAAO,IAAA,CAAK,WAAW,KAAA,EAAM;AAAA,EAC/B;AAAA,EAEA,YAAA,GAA2B;AACzB,IAAA,OAAO,IAAA,CAAK,cAAc,KAAA,EAAM;AAAA,EAClC;AAAA,EAEA,UAAA,GAAqB;AACnB,IAAA,OAAO,UAAA,CAAW,KAAK,aAAa,CAAA;AAAA,EACtC;AAAA,EAEA,KAAK,OAAA,EAAiC;AACpC,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,IAC3C;AACA,IAAA,OAAO,QAAA,CAAS,KAAK,OAAA,EAAS,IAAA,CAAK,YAAY,EAAE,YAAA,EAAc,OAAO,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,UAAA,CAAW,KAAK,CAAC,CAAA;AACtB,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAAA,EACnB;AAAA;AAAA,EAGA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACf;AAAA;AAAA,EAGA,IAAI,QAAA,GAAoB;AACtB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,YAAY,MAAA,EAAgC;AAC1C,IAAA,OAAO,KAAK,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,EAAA,EAAI,SAAS,CAAC,CAAA;AAAA,EACrD;AAAA,EAEA,MAAA,CAAO,SAAqB,SAAA,EAAgC;AAC1D,IAAA,OAAO,QAAA,CAAS,MAAA;AAAA,MACd,WAAA,CAAY,SAAA,EAAW,uBAAA,EAAyB,qBAAqB,CAAA;AAAA,MACrE,OAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA,EAEA,UAAU,MAAA,EAKR;AACA,IAAA,MAAM,cAAA,GAAiB,wBAAA,CAAyB,MAAA,EAAQ,CAAI,CAAA;AAC5D,IAAA,MAAM,OAAA,GAAU,WAAW,cAAc,CAAA;AACzC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA;AACnC,IAAA,MAAM,SAAA,GAAY,wBAAA,CAAyB,MAAA,EAAQ,SAAA,EAAW,KAAK,UAAU,CAAA;AAC7E,IAAA,MAAM,MAAA,GAAS,UAAA;AAAA,MACb,WAAA;AAAA,QACE,wBAAA,CAAyB,QAAQ,CAAI,CAAA;AAAA,QACrC,SAAA;AAAA,QACA,IAAA,CAAK;AAAA;AACP,KACF;AACA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,UAAA,CAAW,SAAS,CAAA,CAAE,MAAM,CAAC,CAAA;AAAA,MACtC,SAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF;AAEO,SAAS,4BAA4B,SAAA,EAAmD;AAC7F,EAAA,OAAO,UAAA,CAAW,mBAAA,CAAoB,SAAS,CAAC,CAAA;AAClD;AAEO,SAAS,oBAAoB,SAAA,EAAuD;AACzF,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,SAAA,EAAW,wBAAA,EAA0B,sBAAsB,CAAA;AACrF,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,+BAAA;AAAA,IACA,eAAA,CAAgB,MAAA,CAAO,8BAA8B,CAAA,EAAG,GAAG,mBAAmB,CAAA;AAAA,IAC9E;AAAA,GACD,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAChB;AAEO,SAAS,oBAAoB,GAAA,EAAiD;AACnF,EAAA,MAAM,QAAQ,GAAA,YAAe,UAAA,GAAa,GAAA,GAAM,UAAA,CAAW,KAAK,GAAG,CAAA;AACnE,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,MAAA,KAAW,wBAAA,GAA2B,wBAAA,GAA2B,uBAAA;AACnF,EAAA,WAAA,CAAY,KAAA,EAAO,KAAK,wBAAwB,CAAA;AAChD,EAAA,MAAM,MAAM,IAAI,UAAA,CAAW,IAAI,CAAA,GAAI,CAAA,GAAI,MAAM,MAAM,CAAA;AACnD,EAAA,MAAM,EAAA,GAAK,IAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA;AAClC,EAAA,EAAA,CAAG,SAAA,CAAU,CAAA,EAAG,4BAAA,EAA8B,IAAI,CAAA;AAClD,EAAA,EAAA,CAAG,SAAA,CAAU,CAAA,EAAG,8BAAA,EAAgC,IAAI,CAAA;AACpD,EAAA,EAAA,CAAG,aAAa,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,MAAM,GAAG,IAAI,CAAA;AAC7C,EAAA,GAAA,CAAI,GAAA,CAAI,OAAO,EAAE,CAAA;AACjB,EAAA,OAAO,GAAA;AACT;ACjHO,IAAM,sBAAA,GAAyB;AAE/B,IAAM,mBAAA,GAAsB;AAGnC,IAAM,mBAAA,GAAsB,EAAA;AAE5B,IAAM,YAAA,GAAe,IAAI,WAAA,EAAY,CAAE,OAAO,mBAAmB,CAAA;AAI1D,IAAM,aAAA,GAAN,cAA4B,KAAA,CAAM;AAAA,EACvC,WAAA,CACW,MACT,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHJ,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAIT,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AAAA,EALW,IAAA;AAMb;AAQA,SAAS,kBAAkB,QAAA,EAA0B;AACnD,EAAA,OAAO,SAAS,IAAA,EAAK,CAAE,aAAY,CAAE,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC1D;AAEA,SAAS,UAAU,UAAA,EAA4B;AAC7C,EAAA,OAAO,WAAW,MAAA,KAAW,CAAA,GAAI,IAAI,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA;AAC7D;AAEA,SAAS,kBAAkB,KAAA,EAAyB;AAClD,EAAA,MAAM,YAAY,UAAA,CAAW,MAAA;AAC7B,EAAA,IAAI,CAAC,WAAW,eAAA,EAAiB;AAC/B,IAAA,MAAM,IAAI,aAAA,CAAc,eAAA,EAAiB,kDAAkD,CAAA;AAAA,EAC7F;AACA,EAAA,SAAA,CAAU,gBAAgB,KAAK,CAAA;AACjC;AAGO,SAAS,gBAAA,CAAiB,MAAmB,iBAAA,EAA2B;AAC7E,EAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,mBAAmB,CAAA;AAClD,EAAA,GAAA,CAAI,OAAO,CAAA;AACX,EAAA,OAAO,iBAAA,CAAkB,SAAS,QAAQ,CAAA;AAC5C;AAMO,SAAS,iBAAiB,QAAA,EAA2B;AAC1D,EAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAC7C,EAAA,IAAI,SAAA,CAAU,UAAU,CAAA,KAAM,sBAAA,EAAwB;AACpD,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAOA,kBAAA,CAAsB,YAAY,QAAQ,CAAA;AACnD;AAOO,SAAS,sBAAsB,QAAA,EAA8B;AAClE,EAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,UAAU,UAAU,CAAA;AAClC,EAAA,IAAI,UAAU,sBAAA,EAAwB;AACpC,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,cAAA;AAAA,MACA,CAAA,iBAAA,EAAoB,sBAAsB,CAAA,YAAA,EAAe,KAAK,CAAA;AAAA,KAChE;AAAA,EACF;AACA,EAAA,IAAI,CAACA,kBAAA,CAAsB,UAAA,EAAY,QAAQ,CAAA,EAAG;AAChD,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,aAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,UAAA,EAAY,EAAE,CAAA;AAChD,EAAA,OAAO,QAAA,CAAS,YAAY,YAAA,EAAc,MAAM,GAAG,EAAE,KAAA,EAAO,oBAAoB,CAAA;AAClF;AAGO,SAAS,yBAAyB,QAAA,EAAkC;AACzE,EAAA,OAAO,cAAA,CAAe,QAAA,CAAS,qBAAA,CAAsB,QAAQ,CAAC,CAAA;AAChE;AAGO,SAAS,kBAAkB,QAAA,EAA0B;AAC1D,EAAA,OAAO,wBAAA,CAAyB,QAAQ,CAAA,CAAE,UAAA,EAAW;AACvD;;;ACjHO,IAAM,YAAA,GAAe;AAAA,EAC1B,QAAA,EAAU,CAAA;AAAA,EACV,YAAA,EAAc,CAAA;AAAA,EACd,SAAA,EAAW,CAAA;AAAA,EACX,MAAA,EAAQ,CAAA;AAAA,EACR,OAAA,EAAS,CAAA;AAAA,EACT,YAAA,EAAc,CAAA;AAAA;AAAA,EAEd,YAAA,EAAc,CAAA;AAAA,EACd,KAAA,EAAO;AACT;;;ACyBO,SAAS,yBAAyB,IAAA,EAGjB;AACtB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,KAAK,EAAE,CAAA;AAC7C,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,CAAA,EAAA,EAAK,MAAA,CAAO,OAAO,CAAA,CAAA;AAAA,IACpC,cAAA,EAAgB,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA;AAAA,IACxC,eAAA,EAAiB,UAAA,CAAW,MAAA,CAAO,OAAO,CAAA;AAAA,IAC1C,cAAA,EAAgB,OAAO,SAAA,CAAU;AAAA,GACnC;AACF;AAcA,eAAsB,0BAAA,CACpB,MAAA,EACA,eAAA,EACA,iBAAA,EACiB;AACjB,EAAA,MAAM,WAAW,MAAM,MAAA,CAAO,KAAa,eAAA,EAAiB,CAAC,eAAe,CAAC,CAAA;AAC7E,EAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,QAAA,EAAU,uBAAuB,CAAA;AAClE,EAAA,IAAI,aAAA,CAAc,WAAW,EAAA,EAAI;AAC/B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,4CAAA,EAA+C,cAAc,MAAM,CAAA;AAAA,KACrE;AAAA,EACF;AACA,EAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,iBAAA,EAAmB,kBAAkB,CAAA;AACtE,EAAA,IAAI,CAAC,UAAA,CAAW,aAAA,EAAe,aAAa,CAAA,EAAG;AAC7C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,kCAAkC,UAAA,CAAW,aAAa,CAAC,CAAA,4CAAA,EAA+C,UAAA,CAAW,aAAa,CAAC,CAAA;AAAA,KACrI;AAAA,EACF;AACA,EAAA,OAAO,WAAW,aAAa,CAAA;AACjC;AAaA,eAAsB,kBAAkB,IAAA,EAIpB;AAClB,EAAA,MAAM,SAAA,GAAY,yBAAyB,EAAE,OAAA,EAAS,KAAK,OAAA,EAAS,EAAA,EAAI,IAAA,CAAK,EAAA,EAAI,CAAA;AACjF,EAAA,OAAO,0BAAA;AAAA,IACL,IAAA,CAAK,MAAA;AAAA,IACL,SAAA,CAAU,eAAA;AAAA,IACV,SAAA,CAAU;AAAA,GACZ;AACF;AAEA,SAAS,UAAA,CAAW,GAAe,CAAA,EAAwB;AACzD,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,IAAI,EAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,GAAG,OAAO,KAAA;AAAA,EAC5B;AACA,EAAA,OAAO,IAAA;AACT","file":"index.js","sourcesContent":["export class BincodeWriter {\n #chunks: number[] = [];\n\n u8(value: number): void {\n this.#int(value, 1);\n }\n\n u16(value: number): void {\n this.#int(value, 2);\n }\n\n u32(value: number): void {\n this.#int(value, 4);\n }\n\n u64(value: bigint | number): void {\n this.#big(value, 8);\n }\n\n u128(value: bigint | number): void {\n this.#big(value, 16);\n }\n\n enumVariant(value: number): void {\n this.u32(value);\n }\n\n rawBytes(bytes: Uint8Array): void {\n for (const b of bytes) this.#chunks.push(b);\n }\n\n bytes(bytes: Uint8Array): void {\n this.u64(BigInt(bytes.length));\n this.rawBytes(bytes);\n }\n\n optionBytes(bytes: Uint8Array | null): void {\n if (bytes === null) {\n this.u8(0);\n return;\n }\n this.u8(1);\n this.rawBytes(bytes);\n }\n\n toBytes(): Uint8Array {\n return Uint8Array.from(this.#chunks);\n }\n\n #int(value: number, bytes: number): void {\n if (!Number.isSafeInteger(value) || value < 0 || value >= 2 ** (bytes * 8)) {\n throw new Error(`integer out of u${bytes * 8} range`);\n }\n for (let i = 0; i < bytes; i++) {\n this.#chunks.push((value >> (8 * i)) & 0xff);\n }\n }\n\n #big(value: bigint | number, bytes: number): void {\n let v = typeof value === \"bigint\" ? value : BigInt(value);\n if (v < 0n || v >= (1n << BigInt(bytes * 8))) {\n throw new Error(`integer out of u${bytes * 8} range`);\n }\n for (let i = 0; i < bytes; i++) {\n this.#chunks.push(Number(v & 0xffn));\n v >>= 8n;\n }\n }\n}\n","export function concatBytes(...chunks: Uint8Array[]): Uint8Array {\n const len = chunks.reduce((n, c) => n + c.length, 0);\n const out = new Uint8Array(len);\n let off = 0;\n for (const chunk of chunks) {\n out.set(chunk, off);\n off += chunk.length;\n }\n return out;\n}\n\nexport function bytesToHex(bytes: Uint8Array): string {\n let out = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n out += bytes[i]!.toString(16).padStart(2, \"0\");\n }\n return out;\n}\n\nexport function hexToBytes(hex: string, label = \"hex\"): Uint8Array {\n const stripped = hex.startsWith(\"0x\") || hex.startsWith(\"0X\") ? hex.slice(2) : hex;\n if (stripped.length % 2 !== 0) {\n throw new Error(`${label} must have even length`);\n }\n const out = new Uint8Array(stripped.length / 2);\n for (let i = 0; i < out.length; i++) {\n const b = Number.parseInt(stripped.slice(i * 2, i * 2 + 2), 16);\n if (Number.isNaN(b)) {\n throw new Error(`${label} contains invalid hex`);\n }\n out[i] = b;\n }\n return out;\n}\n\nexport function expectBytes(value: Uint8Array | readonly number[], len: number, label: string): Uint8Array {\n if (value.length !== len) {\n throw new Error(`${label} must be ${len} bytes, got ${value.length}`);\n }\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n\nexport function bigintToBeBytes(value: bigint, bytes: number, label: string): Uint8Array {\n if (value < 0n || value >= (1n << BigInt(bytes * 8))) {\n throw new Error(`${label} out of ${bytes * 8}-bit range`);\n }\n const out = new Uint8Array(bytes);\n let v = value;\n for (let i = bytes - 1; i >= 0; i--) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n return out;\n}\n\nexport function parseBigint(value: bigint | number | string | undefined, label: string): bigint {\n if (value === undefined) throw new Error(`${label} missing`);\n if (typeof value === \"bigint\") return value;\n if (typeof value === \"number\") {\n if (!Number.isSafeInteger(value) || value < 0) throw new Error(`${label} must be a non-negative safe integer`);\n return BigInt(value);\n }\n if (value.startsWith(\"0x\") || value.startsWith(\"0X\")) return BigInt(value);\n return BigInt(value);\n}\n","import { BincodeWriter } from \"./bincode.js\";\nimport { bigintToBeBytes, concatBytes, expectBytes, hexToBytes, parseBigint } from \"./bytes.js\";\nimport {\n ENUM_VARIANT_INDEX_ML_DSA_65,\n ML_DSA_65_PUBLIC_KEY_LEN,\n ML_DSA_65_SIGNATURE_LEN,\n STANDARD_ALGO_NUMBER_ML_DSA_65,\n} from \"./ml-dsa.js\";\n\nexport interface NativeEvmTxFields {\n chainId: bigint | number | string;\n nonce: bigint | number | string;\n maxPriorityFeePerGas: bigint | number | string;\n maxFeePerGas: bigint | number | string;\n gasLimit: bigint | number | string;\n to: Uint8Array | readonly number[] | string | null;\n value: bigint | number | string;\n input?: Uint8Array | readonly number[] | string;\n extensions?: readonly NativeTxExtensionLike[];\n}\n\nexport interface NativeTxExtension {\n kind: number;\n body: Uint8Array | readonly number[] | string;\n}\n\nexport interface NativeTxExtensionDescriptor {\n kind: number;\n bodyHex: string;\n}\n\nexport type NativeTxExtensionLike = NativeTxExtension | NativeTxExtensionDescriptor;\n\nexport function encodeTransactionForHash(fields: NativeEvmTxFields, tag: 0x01 | 0x02): Uint8Array {\n const n = normalizeTxFields(fields);\n return concatBytes(\n Uint8Array.of(tag),\n bigintToBeBytes(n.chainId, 8, \"chainId\"),\n bigintToBeBytes(n.nonce, 8, \"nonce\"),\n bigintToBeBytes(n.maxPriorityFeePerGas, 32, \"maxPriorityFeePerGas\"),\n bigintToBeBytes(n.maxFeePerGas, 32, \"maxFeePerGas\"),\n bigintToBeBytes(n.gasLimit, 8, \"gasLimit\"),\n n.to === null ? Uint8Array.of(0) : concatBytes(Uint8Array.of(1), n.to),\n bigintToBeBytes(n.value, 32, \"value\"),\n bigintToBeBytes(BigInt(n.input.length), 4, \"input.length\"),\n n.input,\n new Uint8Array(4), // access_list length\n encodeExtensionsForHash(n.extensions),\n );\n}\n\nexport function bincodeSignedTransaction(\n fields: NativeEvmTxFields,\n signature: Uint8Array | readonly number[],\n publicKey: Uint8Array | readonly number[],\n): Uint8Array {\n const n = normalizeTxFields(fields);\n const sig = expectBytes(signature, ML_DSA_65_SIGNATURE_LEN, \"ML-DSA-65 signature\");\n const pk = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\");\n const w = new BincodeWriter();\n w.u64(n.chainId);\n w.u64(n.nonce);\n // Amount(U256) goes through alloy's ruint serde, which emits\n // `serialize_bytes(&to_be_bytes_vec())` for non-human-readable\n // serializers. bincode 1.x renders that as `u64(len) || 32 bytes BE`.\n // Address inside Option<Address> takes the same `serialize_bytes`\n // path via alloy's FixedBytes impl, so admin-tag(1) is followed by a\n // length-prefixed 20-byte payload, not a raw 20-byte run.\n w.bytes(uint256Be(n.maxPriorityFeePerGas, \"maxPriorityFeePerGas\"));\n w.bytes(uint256Be(n.maxFeePerGas, \"maxFeePerGas\"));\n w.u64(n.gasLimit);\n if (n.to === null) {\n w.u8(0);\n } else {\n w.u8(1);\n w.bytes(n.to);\n }\n w.bytes(uint256Be(n.value, \"value\"));\n w.bytes(n.input);\n w.u64(0n); // access_list length\n w.u64(BigInt(n.extensions.length));\n for (const ext of n.extensions) bincodeTypedExtensionInto(w, ext);\n bincodeMlDsa65OpaqueInto(w, sig);\n bincodeMlDsa65OpaqueInto(w, pk);\n return w.toBytes();\n}\n\ninterface NormalizedNativeTxExtension {\n kind: number;\n body: Uint8Array;\n}\n\ninterface NormalizedNativeEvmTxFields {\n chainId: bigint;\n nonce: bigint;\n maxPriorityFeePerGas: bigint;\n maxFeePerGas: bigint;\n gasLimit: bigint;\n to: Uint8Array | null;\n value: bigint;\n input: Uint8Array;\n extensions: NormalizedNativeTxExtension[];\n}\n\nfunction normalizeTxFields(fields: NativeEvmTxFields): NormalizedNativeEvmTxFields {\n return {\n chainId: parseBigint(fields.chainId, \"chainId\"),\n nonce: parseBigint(fields.nonce, \"nonce\"),\n maxPriorityFeePerGas: parseBigint(fields.maxPriorityFeePerGas, \"maxPriorityFeePerGas\"),\n maxFeePerGas: parseBigint(fields.maxFeePerGas, \"maxFeePerGas\"),\n gasLimit: parseBigint(fields.gasLimit, \"gasLimit\"),\n to: normalizeTo(fields.to),\n value: parseBigint(fields.value, \"value\"),\n input: normalizeBytes(fields.input ?? new Uint8Array(0), \"input\"),\n extensions: normalizeExtensions(fields.extensions),\n };\n}\n\nfunction normalizeTo(value: NativeEvmTxFields[\"to\"]): Uint8Array | null {\n if (value === null) return null;\n const bytes = normalizeBytes(value, \"to\");\n return expectBytes(bytes, 20, \"to\");\n}\n\nfunction normalizeBytes(value: Uint8Array | readonly number[] | string, label: string): Uint8Array {\n if (typeof value === \"string\") return hexToBytes(value, label);\n return value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n\nfunction normalizeExtensions(value: NativeEvmTxFields[\"extensions\"]): NormalizedNativeTxExtension[] {\n if (value === undefined) return [];\n return value.map((ext, index) => {\n if (!Number.isInteger(ext.kind) || ext.kind < 0 || ext.kind > 0xff) {\n throw new Error(`extensions[${index}].kind out of u8 range`);\n }\n const body = normalizeBytes(\"bodyHex\" in ext ? ext.bodyHex : ext.body, `extensions[${index}].body`);\n if (body.length > 0xffff_ffff) {\n throw new Error(`extensions[${index}].body exceeds u32 length`);\n }\n return { kind: ext.kind, body };\n });\n}\n\nfunction encodeExtensionsForHash(extensions: readonly NormalizedNativeTxExtension[]): Uint8Array {\n const chunks: Uint8Array[] = [bigintToBeBytes(BigInt(extensions.length), 4, \"extensions.length\")];\n for (const ext of extensions) {\n chunks.push(\n Uint8Array.of(ext.kind),\n bigintToBeBytes(BigInt(ext.body.length), 4, \"extension.body.length\"),\n ext.body,\n );\n }\n return concatBytes(...chunks);\n}\n\nfunction uint256Be(value: bigint, label: string): Uint8Array {\n if (value < 0n || value >= 1n << 256n) throw new Error(`${label} out of u256 range`);\n const out = new Uint8Array(32);\n let v = value;\n for (let i = 31; i >= 0; i--) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n return out;\n}\n\nfunction bincodeMlDsa65OpaqueInto(w: BincodeWriter, raw: Uint8Array): void {\n w.enumVariant(ENUM_VARIANT_INDEX_ML_DSA_65);\n w.u16(STANDARD_ALGO_NUMBER_ML_DSA_65);\n w.bytes(raw);\n}\n\nfunction bincodeTypedExtensionInto(w: BincodeWriter, ext: NormalizedNativeTxExtension): void {\n w.u8(ext.kind);\n w.bytes(ext.body);\n}\n","import { ml_dsa65 } from \"@noble/post-quantum/ml-dsa.js\";\nimport { blake3 } from \"@noble/hashes/blake3.js\";\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { bigintToBeBytes, bytesToHex, concatBytes, expectBytes } from \"./bytes.js\";\nimport { bincodeSignedTransaction, encodeTransactionForHash, type NativeEvmTxFields } from \"./tx.js\";\n\nexport const ML_DSA_65_SEED_LEN = 32;\nexport const ML_DSA_65_SIGNING_KEY_LEN = 4032;\nexport const ML_DSA_65_PUBLIC_KEY_LEN = 1952;\nexport const ML_DSA_65_SIGNATURE_LEN = 3309;\nexport const STANDARD_ALGO_NUMBER_ML_DSA_65 = 1001;\nexport const ENUM_VARIANT_INDEX_ML_DSA_65 = 3;\nexport const ADDRESS_DERIVATION_DOMAIN = \"MONO_ADDRESS_BLAKE3_20_V1\";\n\nconst ADDRESS_DERIVATION_DOMAIN_BYTES = new TextEncoder().encode(ADDRESS_DERIVATION_DOMAIN);\n\nexport class MlDsa65Backend {\n readonly #secretKey: Uint8Array;\n readonly #publicKey: Uint8Array;\n readonly #addressBytes: Uint8Array;\n #disposed = false;\n\n private constructor(secretKey: Uint8Array, publicKey: Uint8Array) {\n this.#secretKey = expectBytes(secretKey, ML_DSA_65_SIGNING_KEY_LEN, \"ML-DSA-65 secret key\").slice();\n this.#publicKey = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\").slice();\n this.#addressBytes = mlDsa65AddressBytes(this.#publicKey);\n }\n\n static fromSeed(seed: Uint8Array | readonly number[]): MlDsa65Backend {\n const kp = ml_dsa65.keygen(expectBytes(seed, ML_DSA_65_SEED_LEN, \"ML-DSA-65 seed\"));\n return new MlDsa65Backend(kp.secretKey, kp.publicKey);\n }\n\n publicKey(): Uint8Array {\n return this.#publicKey.slice();\n }\n\n addressBytes(): Uint8Array {\n return this.#addressBytes.slice();\n }\n\n getAddress(): string {\n return bytesToHex(this.#addressBytes);\n }\n\n sign(message: Uint8Array): Uint8Array {\n if (this.#disposed) {\n throw new Error(\"MlDsa65Backend disposed\");\n }\n return ml_dsa65.sign(message, this.#secretKey, { extraEntropy: false });\n }\n\n /**\n * Best-effort deterministic wipe of the in-memory secret key. Zeroes the\n * SDK-held `#secretKey` copy and makes any subsequent `sign()` /\n * `signPrehash()` / `signEvmTx()` throw `\"MlDsa65Backend disposed\"` rather\n * than signing with a zeroed key. Idempotent. Public material\n * (`publicKey()` / `getAddress()` / `verify()`) stays usable.\n *\n * Defense-in-depth (S1-01): narrows the post-lock residency window of the\n * ML-DSA-65 secret in the JS heap. `@noble/post-quantum`'s internal\n * transient keygen/sign buffers are out of scope; the SDK-held copy is the\n * meaningful residency win.\n */\n dispose(): void {\n this.#secretKey.fill(0);\n this.#disposed = true;\n }\n\n /** Alias for {@link dispose}. */\n zeroize(): void {\n this.dispose();\n }\n\n /** Whether {@link dispose} has been called (the secret key is wiped). */\n get disposed(): boolean {\n return this.#disposed;\n }\n\n signPrehash(digest: Uint8Array): Uint8Array {\n return this.sign(expectBytes(digest, 32, \"prehash\"));\n }\n\n verify(message: Uint8Array, signature: Uint8Array): boolean {\n return ml_dsa65.verify(\n expectBytes(signature, ML_DSA_65_SIGNATURE_LEN, \"ML-DSA-65 signature\"),\n message,\n this.#publicKey,\n );\n }\n\n signEvmTx(fields: NativeEvmTxFields): {\n wireHex: string;\n wireBytes: Uint8Array;\n sighash: Uint8Array;\n txHash: Uint8Array;\n } {\n const txHashPreimage = encodeTransactionForHash(fields, 0x01);\n const sighash = keccak_256(txHashPreimage);\n const signature = this.sign(sighash);\n const wireBytes = bincodeSignedTransaction(fields, signature, this.#publicKey);\n const txHash = keccak_256(\n concatBytes(\n encodeTransactionForHash(fields, 0x02),\n signature,\n this.#publicKey,\n ),\n );\n return {\n wireHex: bytesToHex(wireBytes).slice(2),\n wireBytes,\n sighash,\n txHash,\n };\n }\n}\n\nexport function mlDsa65AddressFromPublicKey(publicKey: Uint8Array | readonly number[]): string {\n return bytesToHex(mlDsa65AddressBytes(publicKey));\n}\n\nexport function mlDsa65AddressBytes(publicKey: Uint8Array | readonly number[]): Uint8Array {\n const bytes = expectBytes(publicKey, ML_DSA_65_PUBLIC_KEY_LEN, \"ML-DSA-65 public key\");\n return blake3(concatBytes(\n ADDRESS_DERIVATION_DOMAIN_BYTES,\n bigintToBeBytes(BigInt(STANDARD_ALGO_NUMBER_ML_DSA_65), 2, \"ML-DSA-65 algo id\"),\n bytes,\n )).slice(0, 20);\n}\n\nexport function encodeMlDsa65Opaque(raw: Uint8Array | readonly number[]): Uint8Array {\n const bytes = raw instanceof Uint8Array ? raw : Uint8Array.from(raw);\n const len = bytes.length === ML_DSA_65_PUBLIC_KEY_LEN ? ML_DSA_65_PUBLIC_KEY_LEN : ML_DSA_65_SIGNATURE_LEN;\n expectBytes(bytes, len, \"ML-DSA-65 opaque bytes\");\n const out = new Uint8Array(4 + 2 + 8 + bytes.length);\n const dv = new DataView(out.buffer);\n dv.setUint32(0, ENUM_VARIANT_INDEX_ML_DSA_65, true);\n dv.setUint16(4, STANDARD_ALGO_NUMBER_ML_DSA_65, true);\n dv.setBigUint64(6, BigInt(bytes.length), true);\n out.set(bytes, 14);\n return out;\n}\n\nexport function uint256Bytes(value: bigint | number | string, label: string): Uint8Array {\n const v = typeof value === \"bigint\" ? value : typeof value === \"number\" ? BigInt(value) : BigInt(value);\n return bigintToBeBytes(v, 32, label);\n}\n","import { shake256 } from \"@noble/hashes/sha3.js\";\nimport {\n entropyToMnemonic,\n mnemonicToSeedSync,\n validateMnemonic as bip39ValidateMnemonic,\n} from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english.js\";\nimport { concatBytes } from \"./bytes.js\";\nimport { ML_DSA_65_SEED_LEN, MlDsa65Backend } from \"./ml-dsa.js\";\n\n/**\n * Standard BIP-39 -> ML-DSA-65 wallet key derivation.\n *\n * A wallet mnemonic is a plain 24-word English BIP-39 phrase (256-bit /\n * 32-byte entropy) with NO custom header bytes. The signing seed is derived\n * from the standard BIP-39 PBKDF2 seed via a domain-separated SHAKE256:\n *\n * seed64 = BIP-39 PBKDF2 seed = mnemonicToSeedSync(mnemonic, \"\")\n * (HMAC-SHA512, 2048 rounds, 64 bytes)\n * mldsa65Seed = shake256( utf8(\"monolythium.mldsa65.v1\") || seed64,\n * { dkLen: 32 } )\n *\n * `MlDsa65Backend.fromSeed(mldsa65Seed)` then yields the deterministic\n * ML-DSA-65 keypair / address. This is the SDK foundation imported by every\n * wallet + monarch-desktop through `@monolythium/core-sdk/crypto`.\n */\n\n/** Number of words in a Monolythium wallet mnemonic (256-bit BIP-39). */\nexport const MLDSA65_MNEMONIC_WORDS = 24;\n/** Domain-separation tag mixed into the ML-DSA-65 seed derivation. */\nexport const MLDSA65_SEED_DOMAIN = \"monolythium.mldsa65.v1\";\n\n/** BIP-39 entropy length backing a 24-word mnemonic (32 bytes => 256 bits). */\nconst MLDSA65_ENTROPY_LEN = 32;\n\nconst DOMAIN_BYTES = new TextEncoder().encode(MLDSA65_SEED_DOMAIN);\n\nexport type MnemonicErrorKind = \"badWordCount\" | \"bip39Decode\" | \"missingRandom\";\n\nexport class MnemonicError extends Error {\n constructor(\n readonly kind: MnemonicErrorKind,\n message: string,\n ) {\n super(message);\n this.name = \"MnemonicError\";\n }\n}\n\nexport type MnemonicRng = (bytes: Uint8Array) => void;\n\n/**\n * Normalize a mnemonic for validation/derivation: trim, lowercase, and\n * collapse any internal whitespace run to a single ASCII space.\n */\nfunction normalizeMnemonic(mnemonic: string): string {\n return mnemonic.trim().toLowerCase().replace(/\\s+/g, \" \");\n}\n\nfunction wordCount(normalized: string): number {\n return normalized.length === 0 ? 0 : normalized.split(\" \").length;\n}\n\nfunction defaultRandomFill(bytes: Uint8Array): void {\n const cryptoObj = globalThis.crypto;\n if (!cryptoObj?.getRandomValues) {\n throw new MnemonicError(\"missingRandom\", \"globalThis.crypto.getRandomValues is unavailable\");\n }\n cryptoObj.getRandomValues(bytes);\n}\n\n/** Generate a fresh 24-word BIP-39 mnemonic from 32 bytes of entropy. */\nexport function generateMnemonic(rng: MnemonicRng = defaultRandomFill): string {\n const entropy = new Uint8Array(MLDSA65_ENTROPY_LEN);\n rng(entropy);\n return entropyToMnemonic(entropy, wordlist);\n}\n\n/**\n * Returns `true` only when `mnemonic` is exactly 24 words AND passes the\n * BIP-39 wordlist + checksum validation.\n */\nexport function validateMnemonic(mnemonic: string): boolean {\n const normalized = normalizeMnemonic(mnemonic);\n if (wordCount(normalized) !== MLDSA65_MNEMONIC_WORDS) {\n return false;\n }\n return bip39ValidateMnemonic(normalized, wordlist);\n}\n\n/**\n * Derive the 32-byte ML-DSA-65 seed from a 24-word BIP-39 mnemonic.\n * Throws a typed {@link MnemonicError} when the input is not a valid 24-word\n * mnemonic.\n */\nexport function mnemonicToMlDsa65Seed(mnemonic: string): Uint8Array {\n const normalized = normalizeMnemonic(mnemonic);\n const words = wordCount(normalized);\n if (words !== MLDSA65_MNEMONIC_WORDS) {\n throw new MnemonicError(\n \"badWordCount\",\n `mnemonic must be ${MLDSA65_MNEMONIC_WORDS} words, got ${words}`,\n );\n }\n if (!bip39ValidateMnemonic(normalized, wordlist)) {\n throw new MnemonicError(\n \"bip39Decode\",\n \"invalid BIP-39 mnemonic (unknown word or bad checksum)\",\n );\n }\n const seed64 = mnemonicToSeedSync(normalized, \"\");\n return shake256(concatBytes(DOMAIN_BYTES, seed64), { dkLen: ML_DSA_65_SEED_LEN });\n}\n\n/** Derive the ML-DSA-65 signing backend from a 24-word BIP-39 mnemonic. */\nexport function mnemonicToMlDsa65Backend(mnemonic: string): MlDsa65Backend {\n return MlDsa65Backend.fromSeed(mnemonicToMlDsa65Seed(mnemonic));\n}\n\n/** Derive the wallet address (0x-hex) from a 24-word BIP-39 mnemonic. */\nexport function mnemonicToAddress(mnemonic: string): string {\n return mnemonicToMlDsa65Backend(mnemonic).getAddress();\n}\n","/**\n * Mempool transaction-class tags.\n *\n * The encrypted-mempool (LythiumSeal) envelope was removed at the v2\n * re-genesis; plaintext submission is the sole submit path. This module now\n * carries only the {@link MempoolClass} tag the node uses to classify a\n * transaction for ordering/admission.\n */\n\nexport const MempoolClass = {\n Transfer: 0,\n ContractCall: 1,\n PrivacyOp: 2,\n CLOBOp: 3,\n AgentOp: 4,\n FoundationOp: 5,\n /** @deprecated Use FoundationOp. */\n GovernanceOp: 5,\n RWAOp: 6,\n} as const;\nexport type MempoolClass = (typeof MempoolClass)[keyof typeof MempoolClass];\n","import { bytesToHex, hexToBytes } from \"./bytes.js\";\nimport type { MlDsa65Backend } from \"./ml-dsa.js\";\nimport type { NativeEvmTxFields } from \"./tx.js\";\n\nexport interface JsonRpcCallClient {\n call<T>(method: string, params?: unknown): Promise<T>;\n}\n\n/**\n * A built plaintext submission — the bincode-encoded chain-side\n * `SignedTransaction` (`0x`-prefixed hex) ready to hand to\n * `mesh_submitTx`, plus the canonical hashes the wallet validates the\n * node echo against.\n *\n * Mirrors the chain-side artefacts produced by the Rust SDK's\n * `build_chain_signed_tx` (`mono-core/crates/core/sdk/src/tx.rs`): the\n * ML-DSA-65 signature is taken over the canonical chain-side `sighash`\n * (keccak-256 of the 0x01-tagged preimage) and the canonical native tx\n * hash is the keccak-256 of the 0x02-tagged preimage with the signature\n * and public key appended.\n */\nexport interface PlaintextSubmission {\n /** Bincode `SignedTransaction` wire bytes, `0x`-prefixed. */\n signedTxWireHex: string;\n /** Canonical native tx hash the node echoes on admission. */\n innerTxHashHex: string;\n /** Canonical chain-side sighash that was signed. */\n innerSighashHex: string;\n /** Length in bytes of the bincode `SignedTransaction`. */\n innerWireBytes: number;\n}\n\n/**\n * Build a PLAINTEXT submission — the sole submit path since the v2\n * re-genesis dropped the encrypted (LythiumSeal) mempool.\n *\n * It re-shapes the native tx into the chain-side `SignedTransaction`,\n * signs over the canonical `sighash` with the ML-DSA-65 backend,\n * bincode-serializes the result, and `0x`-hex-encodes it. The bytes are\n * forwarded verbatim through `mesh_submitTx` (the node routes them to\n * `MempoolTx::plaintext` via `submit_raw`).\n *\n * Mirrors `TxClient::submit_plaintext` in the Rust SDK.\n */\nexport function buildPlaintextSubmission(args: {\n backend: MlDsa65Backend;\n tx: NativeEvmTxFields;\n}): PlaintextSubmission {\n const signed = args.backend.signEvmTx(args.tx);\n return {\n signedTxWireHex: `0x${signed.wireHex}`,\n innerTxHashHex: bytesToHex(signed.txHash),\n innerSighashHex: bytesToHex(signed.sighash),\n innerWireBytes: signed.wireBytes.length,\n };\n}\n\n/**\n * Submit a bincode-encoded chain-side `SignedTransaction` (`0x`-hex)\n * through the plaintext `mesh_submitTx` path and validate the node's\n * echoed canonical tx hash against the locally computed one.\n *\n * Mirrors the validation in `TxClient::submit_plaintext`: the node\n * echoes the 32-byte canonical native tx hash on admission, and any\n * mismatch (or non-32-byte response) is rejected loud so a wallet never\n * trusts a hash it did not derive itself.\n *\n * @returns the validated canonical native tx hash (`0x`-prefixed).\n */\nexport async function submitPlaintextTransaction(\n client: JsonRpcCallClient,\n signedTxWireHex: string,\n expectedTxHashHex: string,\n): Promise<string> {\n const returned = await client.call<string>(\"mesh_submitTx\", [signedTxWireHex]);\n const returnedBytes = hexToBytes(returned, \"mesh_submitTx tx hash\");\n if (returnedBytes.length !== 32) {\n throw new Error(\n `mesh_submitTx tx hash must be 32 bytes, got ${returnedBytes.length}`,\n );\n }\n const expectedBytes = hexToBytes(expectedTxHashHex, \"expected tx hash\");\n if (!bytesEqual(returnedBytes, expectedBytes)) {\n throw new Error(\n `mesh_submitTx returned tx hash ${bytesToHex(returnedBytes)} but the locally computed canonical hash is ${bytesToHex(expectedBytes)}`,\n );\n }\n return bytesToHex(returnedBytes);\n}\n\n/**\n * Build, sign, and submit a native transaction through the plaintext\n * `mesh_submitTx` path.\n *\n * Mirrors `TxClient::build_sign_submit` in the Rust SDK. The encrypted\n * (LythiumSeal) submit path was removed at the v2 re-genesis, so this is\n * the single build-sign-submit entry point.\n *\n * @returns the node-echoed-and-validated canonical native tx hash\n * (`0x`-prefixed).\n */\nexport async function submitTransaction(args: {\n client: JsonRpcCallClient;\n backend: MlDsa65Backend;\n tx: NativeEvmTxFields;\n}): Promise<string> {\n const plaintext = buildPlaintextSubmission({ backend: args.backend, tx: args.tx });\n return submitPlaintextTransaction(\n args.client,\n plaintext.signedTxWireHex,\n plaintext.innerTxHashHex,\n );\n}\n\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n"]}