linux-crypto.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v9 0/9] lib/crypto: Add ML-DSA signing
@ 2025-11-17 14:55 David Howells
  2025-11-17 14:55 ` [PATCH v9 1/9] crypto: Add support for shake256 through crypto_shash David Howells
                   ` (10 more replies)
  0 siblings, 11 replies; 32+ messages in thread
From: David Howells @ 2025-11-17 14:55 UTC (permalink / raw)
  To: Herbert Xu
  Cc: David Howells, Eric Biggers, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

Hi Herbert, Eric, et al.,

Building on the SHA-3 lib-crypto patches now in Eric's tree, here's a set of
patches does the following:

 (1) Add SHAKE-256 crypto_sig support, generating 32-byte fixed output.  The
     XOF features aren't available through this.  SHAKE-128 crypto_sig support
     isn't required for ML-DSA, so I haven't implemented that at this time.

 (2) Add ML-DSA signature verification code, extracted from Stephan
     Mueller's Leancrypto project.  The primary interface is intended to be
     through crypto_sig.

 (3) Add a simplified ML-DSA API for direct lib-crypto access.  Possibly
     this should be conditional as the main access (from PKCS#7/X.509) is
     going to be through crypto_sig.

 (4) Add a kunit test in three instalments (due to size) to add some
     testing for the three different levels of ML-DSA (44, 65 and 87).

 (5) Modify PKCS#7 support to allow kernel module signatures to carry
     authenticatedAttributes as OpenSSL refuses to let them be opted out of
     for ML-DSA (CMS_NOATTR).  This adds an extra digest calculation to the
     process.

 (6) Modify PKCS#7 to pass the authenticatedAttributes directly to the
     ML-DSA algorithm rather than passing over a digest as is done with RSA
     as ML-DSA wants to do its own hashing and will add other stuff into
     the hash.  We could use hashML-DSA or an external mu instead, but they
     aren't standardised for CMS yet.

 (7) Add support to the PKCS#7 and X.509 parsers for ML-DSA.

 (8) Modify sign-file to handle OpenSSL not permitting CMS_NOATTR with
     ML-DSA.

 (9) Allow SHA-3 algorithms, including SHAKE256, to be used for the message
     digest and add ML-DSA to the choice of algorithm with which to sign.

With that, ML-DSA signing appears to work.

This is based on Eric's libcrypto-next branch.

The patches can also be found here:

	https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/log/?h=keys-pqc

David

Changes
=======
ver #9)
 - ML-DSA changes:
   - Separate output into four modules (1 common, 3 strength-specific).
     - Solves Kconfig issue with needing to select at least one strength.
   - Separate the strength-specific crypto-lib APIs.
     - This is now generated by preprocessor-templating.
   - Remove the multiplexor code.
   - Multiplex the crypto-lib APIs by C type.
 - Fix the PKCS#7/X.509 code to have the correct algo names.

ver #8)
 - Moved the ML-DSA code to lib/crypto/mldsa/.
 - Renamed some bits from ml-dsa to mldsa.
 - Created a simplified API and placed that in include/crypto/mldsa.h.
 - Made the testing code use the simplified API.
 - Fixed a warning about implicitly casting between uint16_t and __le16.

ver #7)
 - Rebased on Eric's tree as that now contains all the necessary SHA-3
   infrastructure and drop the SHA-3 patches from here.
 - Added a minimal patch to provide shake256 support for crypto_sig.
 - Got rid of the memory allocation wrappers.
 - Removed the ML-DSA keypair generation code and the signing code, leaving
   only the signature verification code.
 - Removed the secret key handling code.
 - Removed the secret keys from the kunit tests and the signing testing.
 - Removed some unused bits from the ML-DSA code.
 - Downgraded the kdoc comments to ordinary comments, but keep the markup
   for easier comparison to Leancrypto.

ver #6)
 - Added a patch to make the jitterentropy RNG use lib/sha3.
 - Added back the crypto/sha3_generic changes.
 - Added ML-DSA implementation (still needs more cleanup).
 - Added kunit test for ML-DSA.
 - Modified PKCS#7 to accommodate ML-DSA.
 - Modified PKCS#7 and X.509 to allow ML-DSA to be specified and used.
 - Modified sign-file to not use CMS_NOATTR with ML-DSA.
 - Allowed SHA3 and SHAKE* algorithms for module signing default.
 - Allowed ML-DSA-{44,65,87} to be selected as the module signing default.

ver #5)
 - Fix gen-hash-testvecs.py to correctly handle algo names that contain a
   dash.
 - Fix gen-hash-testvecs.py to not generate HMAC for SHA3-* or SHAKE* as
   these don't currently have HMAC variants implemented.
 - Fix algo names to be correct.
 - Fix kunit module description as it now tests all SHA3 variants.

ver #4)
 - Fix a couple of arm64 build problems.
 - Doc fixes:
   - Fix the description of the algorithm to be closer to the NIST spec's
     terminology.
   - Don't talk of finialising the context for XOFs.
   - Don't say "Return: None".
   - Declare the "Context" to be "Any context" and make no mention of the
     fact that it might use the FPU.
   - Change "initialise" to "initialize".
   - Don't warn that the context is relatively large for stack use.
 - Use size_t for size parameters/variables.
 - Make the module_exit unconditional.
 - Dropped the crypto/ dir-affecting patches for the moment.

ver #3)
 - Renamed conflicting arm64 functions.
 - Made a separate wrapper API for each algorithm in the family.
 - Removed sha3_init(), sha3_reinit() and sha3_final().
 - Removed sha3_ctx::digest_size.
 - Renamed sha3_ctx::partial to sha3_ctx::absorb_offset.
 - Refer to the output of SHAKE* as "output" not "digest".
 - Moved the Iota transform into the one-round function.
 - Made sha3_update() warn if called after sha3_squeeze().
 - Simplified the module-load test to not do update after squeeze.
 - Added Return: and Context: kdoc statements and expanded the kdoc
   headers.
 - Added an API description document.
 - Overhauled the kunit tests.
   - Only have one kunit test.
   - Only call the general hash tester on one algo.
   - Add separate simple cursory checks for the other algos.
   - Add resqueezing tests.
   - Add some NIST example tests.
 - Changed crypto/sha3_generic to use this
 - Added SHAKE128/256 to crypto/sha3_generic and crypto/testmgr
 - Folded struct sha3_state into struct sha3_ctx.

ver #2)
  - Simplify the endianness handling.
  - Rename sha3_final() to sha3_squeeze() and don't clear the context at the
    end as it's permitted to continue calling sha3_final() to extract
    continuations of the digest (needed by ML-DSA).
  - Don't reapply the end marker to the hash state in continuation
    sha3_squeeze() unless sha3_update() gets called again (needed by
    ML-DSA).
  - Give sha3_squeeze() the amount of digest to produce as a parameter
    rather than using ctx->digest_size and don't return the amount digested.
  - Reimplement sha3_final() as a wrapper around sha3_squeeze() that
    extracts ctx->digest_size amount of digest and then zeroes out the
    context.  The latter is necessary to avoid upsetting
    hash-test-template.h.
  - Provide a sha3_reinit() function to clear the state, but to leave the
    parameters that indicate the hash properties unaffected, allowing for
    reuse.
  - Provide a sha3_set_digestsize() function to change the size of the
    digest to be extracted by sha3_final().  sha3_squeeze() takes a
    parameter for this instead.
  - Don't pass the digest size as a parameter to shake128/256_init() but
    rather default to 128/256 bits as per the function name.
  - Provide a sha3_clear() function to zero out the context.

David Howells (9):
  crypto: Add support for shake256 through crypto_shash
  crypto: Add ML-DSA/Dilithium verify support
  mldsa: Add a simpler API
  crypto: Add ML-DSA-44 pure rejection test vectors as a kunit test
  crypto: Add ML-DSA-65 pure rejection test vectors as a kunit test
  crypto: Add ML-DSA-87 pure rejection test vectors as a kunit test
  pkcs7: Allow the signing algo to calculate the digest itself
  pkcs7, x509: Add ML-DSA support
  modsign: Enable ML-DSA module signing

 Documentation/admin-guide/module-signing.rst  |   15 +-
 Documentation/crypto/index.rst                |    1 +
 Documentation/crypto/mldsa.rst                |  143 +
 certs/Kconfig                                 |   27 +
 certs/Makefile                                |    3 +
 crypto/asymmetric_keys/pkcs7_parser.c         |   19 +-
 crypto/asymmetric_keys/pkcs7_verify.c         |   52 +-
 crypto/asymmetric_keys/public_key.c           |    7 +
 crypto/asymmetric_keys/x509_cert_parser.c     |   24 +
 crypto/sha3.c                                 |   42 +
 include/crypto/mldsa.h                        |   50 +
 include/crypto/public_key.h                   |    1 +
 include/linux/oid_registry.h                  |    5 +
 kernel/module/Kconfig                         |    5 +
 lib/crypto/Kconfig                            |    1 +
 lib/crypto/Makefile                           |    2 +
 lib/crypto/mldsa/Kconfig                      |   29 +
 lib/crypto/mldsa/Makefile                     |   20 +
 lib/crypto/mldsa/crypto_mldsa_44.c            |  166 +
 lib/crypto/mldsa/crypto_mldsa_65.c            |  166 +
 lib/crypto/mldsa/crypto_mldsa_87.c            |  166 +
 lib/crypto/mldsa/dilithium.h                  |  304 +
 lib/crypto/mldsa/dilithium_44.c               |   34 +
 lib/crypto/mldsa/dilithium_44.h               |  291 +
 lib/crypto/mldsa/dilithium_65.c               |   34 +
 lib/crypto/mldsa/dilithium_65.h               |  291 +
 lib/crypto/mldsa/dilithium_87.c               |   34 +
 lib/crypto/mldsa/dilithium_87.h               |  291 +
 lib/crypto/mldsa/dilithium_common.c           |  117 +
 lib/crypto/mldsa/dilithium_debug.h            |   49 +
 lib/crypto/mldsa/dilithium_ntt.c              |   89 +
 lib/crypto/mldsa/dilithium_ntt.h              |   35 +
 lib/crypto/mldsa/dilithium_pack.h             |  119 +
 lib/crypto/mldsa/dilithium_poly.c             |  377 +
 lib/crypto/mldsa/dilithium_poly.h             |  181 +
 lib/crypto/mldsa/dilithium_poly_c.h           |  141 +
 lib/crypto/mldsa/dilithium_poly_common.h      |   35 +
 lib/crypto/mldsa/dilithium_polyvec.h          |  343 +
 lib/crypto/mldsa/dilithium_polyvec_c.h        |   81 +
 lib/crypto/mldsa/dilithium_reduce.h           |   85 +
 lib/crypto/mldsa/dilithium_rounding.c         |  128 +
 lib/crypto/mldsa/dilithium_service_helpers.h  |   99 +
 lib/crypto/mldsa/dilithium_signature_c.c      |  279 +
 lib/crypto/mldsa/dilithium_signature_c.h      |   37 +
 lib/crypto/mldsa/dilithium_signature_impl.h   |  370 +
 lib/crypto/mldsa/dilithium_type.h             |  121 +
 lib/crypto/mldsa/dilithium_zetas.c            |   68 +
 lib/crypto/mldsa/mldsa_api.c                  |  168 +
 .../mldsa/signature_domain_separation.c       |  204 +
 .../mldsa/signature_domain_separation.h       |   30 +
 lib/crypto/tests/Kconfig                      |   10 +
 lib/crypto/tests/Makefile                     |    1 +
 lib/crypto/tests/mldsa_kunit.c                |  105 +
 .../tests/mldsa_pure_rejection_vectors_44.h   |  489 ++
 .../tests/mldsa_pure_rejection_vectors_65.h   | 4741 ++++++++++++
 .../tests/mldsa_pure_rejection_vectors_87.h   | 6456 +++++++++++++++++
 scripts/sign-file.c                           |   26 +-
 57 files changed, 17171 insertions(+), 36 deletions(-)
 create mode 100644 Documentation/crypto/mldsa.rst
 create mode 100644 include/crypto/mldsa.h
 create mode 100644 lib/crypto/mldsa/Kconfig
 create mode 100644 lib/crypto/mldsa/Makefile
 create mode 100644 lib/crypto/mldsa/crypto_mldsa_44.c
 create mode 100644 lib/crypto/mldsa/crypto_mldsa_65.c
 create mode 100644 lib/crypto/mldsa/crypto_mldsa_87.c
 create mode 100644 lib/crypto/mldsa/dilithium.h
 create mode 100644 lib/crypto/mldsa/dilithium_44.c
 create mode 100644 lib/crypto/mldsa/dilithium_44.h
 create mode 100644 lib/crypto/mldsa/dilithium_65.c
 create mode 100644 lib/crypto/mldsa/dilithium_65.h
 create mode 100644 lib/crypto/mldsa/dilithium_87.c
 create mode 100644 lib/crypto/mldsa/dilithium_87.h
 create mode 100644 lib/crypto/mldsa/dilithium_common.c
 create mode 100644 lib/crypto/mldsa/dilithium_debug.h
 create mode 100644 lib/crypto/mldsa/dilithium_ntt.c
 create mode 100644 lib/crypto/mldsa/dilithium_ntt.h
 create mode 100644 lib/crypto/mldsa/dilithium_pack.h
 create mode 100644 lib/crypto/mldsa/dilithium_poly.c
 create mode 100644 lib/crypto/mldsa/dilithium_poly.h
 create mode 100644 lib/crypto/mldsa/dilithium_poly_c.h
 create mode 100644 lib/crypto/mldsa/dilithium_poly_common.h
 create mode 100644 lib/crypto/mldsa/dilithium_polyvec.h
 create mode 100644 lib/crypto/mldsa/dilithium_polyvec_c.h
 create mode 100644 lib/crypto/mldsa/dilithium_reduce.h
 create mode 100644 lib/crypto/mldsa/dilithium_rounding.c
 create mode 100644 lib/crypto/mldsa/dilithium_service_helpers.h
 create mode 100644 lib/crypto/mldsa/dilithium_signature_c.c
 create mode 100644 lib/crypto/mldsa/dilithium_signature_c.h
 create mode 100644 lib/crypto/mldsa/dilithium_signature_impl.h
 create mode 100644 lib/crypto/mldsa/dilithium_type.h
 create mode 100644 lib/crypto/mldsa/dilithium_zetas.c
 create mode 100644 lib/crypto/mldsa/mldsa_api.c
 create mode 100644 lib/crypto/mldsa/signature_domain_separation.c
 create mode 100644 lib/crypto/mldsa/signature_domain_separation.h
 create mode 100644 lib/crypto/tests/mldsa_kunit.c
 create mode 100644 lib/crypto/tests/mldsa_pure_rejection_vectors_44.h
 create mode 100644 lib/crypto/tests/mldsa_pure_rejection_vectors_65.h
 create mode 100644 lib/crypto/tests/mldsa_pure_rejection_vectors_87.h


^ permalink raw reply	[flat|nested] 32+ messages in thread

* [PATCH v9 1/9] crypto: Add support for shake256 through crypto_shash
  2025-11-17 14:55 [PATCH v9 0/9] lib/crypto: Add ML-DSA signing David Howells
@ 2025-11-17 14:55 ` David Howells
  2025-11-17 16:50   ` Eric Biggers
  2025-11-17 14:55 ` [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support David Howells
                   ` (9 subsequent siblings)
  10 siblings, 1 reply; 32+ messages in thread
From: David Howells @ 2025-11-17 14:55 UTC (permalink / raw)
  To: Herbert Xu
  Cc: David Howells, Eric Biggers, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

Add shake256 support to the SHA-3 crypto_sig module so that ML-DSA can use
it.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Stephan Mueller <smueller@chronox.de>
cc: Eric Biggers <ebiggers@kernel.org>
cc: Jason A. Donenfeld <Jason@zx2c4.com>
cc: Ard Biesheuvel <ardb@kernel.org>
cc: Herbert Xu <herbert@gondor.apana.org.au>
cc: linux-crypto@vger.kernel.org
---
 crypto/sha3.c | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/crypto/sha3.c b/crypto/sha3.c
index 8f364979ec89..be1d18baee8d 100644
--- a/crypto/sha3.c
+++ b/crypto/sha3.c
@@ -9,6 +9,7 @@
 #include <linux/module.h>
 
 #define SHA3_CTX(desc) ((struct sha3_ctx *)shash_desc_ctx(desc))
+#define SHAKE_CTX(desc) ((struct shake_ctx *)shash_desc_ctx(desc))
 
 static int crypto_sha3_224_init(struct shash_desc *desc)
 {
@@ -87,6 +88,36 @@ static int crypto_sha3_import_core(struct shash_desc *desc, const void *in)
 	return 0;
 }
 
+static int crypto_shake256_init(struct shash_desc *desc)
+{
+	shake256_init(SHAKE_CTX(desc));
+	return 0;
+}
+
+static int crypto_shake_update(struct shash_desc *desc, const u8 *data,
+			      unsigned int len)
+{
+	shake_update(SHAKE_CTX(desc), data, len);
+	return 0;
+}
+
+static int crypto_shake_final(struct shash_desc *desc, u8 *out)
+{
+	const struct shash_alg *alg = crypto_shash_alg(desc->tfm);
+
+	shake_squeeze(SHAKE_CTX(desc), out, alg->digestsize);
+	return 0;
+}
+
+static int crypto_shake256_digest(struct shash_desc *desc,
+				  const u8 *data, unsigned int len, u8 *out)
+{
+	const struct shash_alg *alg = crypto_shash_alg(desc->tfm);
+
+	shake256(data, len, out, alg->digestsize);
+	return 0;
+}
+
 static struct shash_alg algs[] = { {
 	.digestsize		= SHA3_224_DIGEST_SIZE,
 	.init			= crypto_sha3_224_init,
@@ -139,6 +170,17 @@ static struct shash_alg algs[] = { {
 	.base.cra_driver_name	= "sha3-512-lib",
 	.base.cra_blocksize	= SHA3_512_BLOCK_SIZE,
 	.base.cra_module	= THIS_MODULE,
+}, {
+	.digestsize		= SHAKE256_DEFAULT_SIZE,
+	.init			= crypto_shake256_init,
+	.update			= crypto_shake_update,
+	.final			= crypto_shake_final,
+	.digest			= crypto_shake256_digest,
+	.descsize		= sizeof(struct shake_ctx),
+	.base.cra_name		= "shake256",
+	.base.cra_driver_name	= "shake256-lib",
+	.base.cra_blocksize	= SHAKE256_BLOCK_SIZE,
+	.base.cra_module	= THIS_MODULE,
 } };
 
 static int __init crypto_sha3_mod_init(void)


^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-17 14:55 [PATCH v9 0/9] lib/crypto: Add ML-DSA signing David Howells
  2025-11-17 14:55 ` [PATCH v9 1/9] crypto: Add support for shake256 through crypto_shash David Howells
@ 2025-11-17 14:55 ` David Howells
  2025-11-17 17:10   ` Eric Biggers
                     ` (3 more replies)
  2025-11-17 14:55 ` [PATCH v9 3/9] mldsa: Add a simpler API David Howells
                   ` (8 subsequent siblings)
  10 siblings, 4 replies; 32+ messages in thread
From: David Howells @ 2025-11-17 14:55 UTC (permalink / raw)
  To: Herbert Xu
  Cc: David Howells, Eric Biggers, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

Port the signature verification code from Stephan Mueller's Leancrypto
implementation of ML-DSA/Dilithium to the kernel.  The keypair generation
and signature generation is not included and nor is composite signature
support to reduce code footprint size.

Apologies to Stephan, but I've stripped out a bunch of macros to do return
checking and suchlike and removed a bunch of "lc_" prefixes from the code.

Composite signature support is mostly removed and none of the arch-specific
code from Leancrypto has been included for the moment, so this is pure C.

The interface to this code is through the crypto_sig API as the PKCS#7 code
wants to use that rather than calling it directly.  As such, I've placed it
in crypto/ rather than lib/crypto/.  Only the verification hooks are
implemented; the signing hooks return an error.

The output is built into four parts that can be built as separate modules:
one common module and one module for each strength option.  This allows one
of the strengths to be built into the base kernel and the other two to be
loaded on demand if such is desired.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Stephan Mueller <smueller@chronox.de>
cc: Eric Biggers <ebiggers@kernel.org>
cc: Jason A. Donenfeld <Jason@zx2c4.com>
cc: Ard Biesheuvel <ardb@kernel.org>
cc: Herbert Xu <herbert@gondor.apana.org.au>
cc: linux-crypto@vger.kernel.org
---
 lib/crypto/Kconfig                            |   1 +
 lib/crypto/Makefile                           |   2 +
 lib/crypto/mldsa/Kconfig                      |  29 ++
 lib/crypto/mldsa/Makefile                     |  20 +
 lib/crypto/mldsa/crypto_mldsa_44.c            | 166 ++++++++
 lib/crypto/mldsa/crypto_mldsa_65.c            | 166 ++++++++
 lib/crypto/mldsa/crypto_mldsa_87.c            | 166 ++++++++
 lib/crypto/mldsa/dilithium.h                  | 304 ++++++++++++++
 lib/crypto/mldsa/dilithium_44.c               |  33 ++
 lib/crypto/mldsa/dilithium_44.h               | 291 ++++++++++++++
 lib/crypto/mldsa/dilithium_65.c               |  33 ++
 lib/crypto/mldsa/dilithium_65.h               | 291 ++++++++++++++
 lib/crypto/mldsa/dilithium_87.c               |  33 ++
 lib/crypto/mldsa/dilithium_87.h               | 291 ++++++++++++++
 lib/crypto/mldsa/dilithium_common.c           | 117 ++++++
 lib/crypto/mldsa/dilithium_debug.h            |  49 +++
 lib/crypto/mldsa/dilithium_ntt.c              |  89 +++++
 lib/crypto/mldsa/dilithium_ntt.h              |  35 ++
 lib/crypto/mldsa/dilithium_pack.h             | 119 ++++++
 lib/crypto/mldsa/dilithium_poly.c             | 377 ++++++++++++++++++
 lib/crypto/mldsa/dilithium_poly.h             | 181 +++++++++
 lib/crypto/mldsa/dilithium_poly_c.h           | 141 +++++++
 lib/crypto/mldsa/dilithium_poly_common.h      |  35 ++
 lib/crypto/mldsa/dilithium_polyvec.h          | 343 ++++++++++++++++
 lib/crypto/mldsa/dilithium_polyvec_c.h        |  81 ++++
 lib/crypto/mldsa/dilithium_reduce.h           |  85 ++++
 lib/crypto/mldsa/dilithium_rounding.c         | 128 ++++++
 lib/crypto/mldsa/dilithium_service_helpers.h  |  99 +++++
 lib/crypto/mldsa/dilithium_signature_c.c      | 279 +++++++++++++
 lib/crypto/mldsa/dilithium_signature_c.h      |  37 ++
 lib/crypto/mldsa/dilithium_signature_impl.h   | 370 +++++++++++++++++
 lib/crypto/mldsa/dilithium_type.h             | 108 +++++
 lib/crypto/mldsa/dilithium_zetas.c            |  68 ++++
 .../mldsa/signature_domain_separation.c       | 204 ++++++++++
 .../mldsa/signature_domain_separation.h       |  30 ++
 35 files changed, 4801 insertions(+)
 create mode 100644 lib/crypto/mldsa/Kconfig
 create mode 100644 lib/crypto/mldsa/Makefile
 create mode 100644 lib/crypto/mldsa/crypto_mldsa_44.c
 create mode 100644 lib/crypto/mldsa/crypto_mldsa_65.c
 create mode 100644 lib/crypto/mldsa/crypto_mldsa_87.c
 create mode 100644 lib/crypto/mldsa/dilithium.h
 create mode 100644 lib/crypto/mldsa/dilithium_44.c
 create mode 100644 lib/crypto/mldsa/dilithium_44.h
 create mode 100644 lib/crypto/mldsa/dilithium_65.c
 create mode 100644 lib/crypto/mldsa/dilithium_65.h
 create mode 100644 lib/crypto/mldsa/dilithium_87.c
 create mode 100644 lib/crypto/mldsa/dilithium_87.h
 create mode 100644 lib/crypto/mldsa/dilithium_common.c
 create mode 100644 lib/crypto/mldsa/dilithium_debug.h
 create mode 100644 lib/crypto/mldsa/dilithium_ntt.c
 create mode 100644 lib/crypto/mldsa/dilithium_ntt.h
 create mode 100644 lib/crypto/mldsa/dilithium_pack.h
 create mode 100644 lib/crypto/mldsa/dilithium_poly.c
 create mode 100644 lib/crypto/mldsa/dilithium_poly.h
 create mode 100644 lib/crypto/mldsa/dilithium_poly_c.h
 create mode 100644 lib/crypto/mldsa/dilithium_poly_common.h
 create mode 100644 lib/crypto/mldsa/dilithium_polyvec.h
 create mode 100644 lib/crypto/mldsa/dilithium_polyvec_c.h
 create mode 100644 lib/crypto/mldsa/dilithium_reduce.h
 create mode 100644 lib/crypto/mldsa/dilithium_rounding.c
 create mode 100644 lib/crypto/mldsa/dilithium_service_helpers.h
 create mode 100644 lib/crypto/mldsa/dilithium_signature_c.c
 create mode 100644 lib/crypto/mldsa/dilithium_signature_c.h
 create mode 100644 lib/crypto/mldsa/dilithium_signature_impl.h
 create mode 100644 lib/crypto/mldsa/dilithium_type.h
 create mode 100644 lib/crypto/mldsa/dilithium_zetas.c
 create mode 100644 lib/crypto/mldsa/signature_domain_separation.c
 create mode 100644 lib/crypto/mldsa/signature_domain_separation.h

diff --git a/lib/crypto/Kconfig b/lib/crypto/Kconfig
index 9d04b3771ce2..8189ff8997be 100644
--- a/lib/crypto/Kconfig
+++ b/lib/crypto/Kconfig
@@ -223,6 +223,7 @@ config CRYPTO_LIB_SHA3_ARCH
 config CRYPTO_LIB_SM3
 	tristate
 
+source "lib/crypto/mldsa/Kconfig"
 source "lib/crypto/tests/Kconfig"
 
 endmenu
diff --git a/lib/crypto/Makefile b/lib/crypto/Makefile
index 6580991f8e12..37918c7fd2f6 100644
--- a/lib/crypto/Makefile
+++ b/lib/crypto/Makefile
@@ -305,6 +305,8 @@ obj-$(CONFIG_CRYPTO_SELFTESTS_FULL)		+= simd.o
 obj-$(CONFIG_CRYPTO_LIB_SM3)			+= libsm3.o
 libsm3-y					:= sm3.o
 
+obj-$(CONFIG_CRYPTO_LIB_MLDSA) += mldsa/
+
 # clean-files must be defined unconditionally
 clean-files += arm/sha256-core.S arm/sha512-core.S
 clean-files += arm64/sha256-core.S arm64/sha512-core.S
diff --git a/lib/crypto/mldsa/Kconfig b/lib/crypto/mldsa/Kconfig
new file mode 100644
index 000000000000..ae13ca5674b9
--- /dev/null
+++ b/lib/crypto/mldsa/Kconfig
@@ -0,0 +1,29 @@
+# SPDX-License-Identifier: GPL-2.0
+menuconfig CRYPTO_LIB_MLDSA
+	tristate "ML-DSA algorithm"
+	select CRYPTO_LIB_SHA3
+	help
+	  Enable this to provide the ML-DSA (Dilithium) post-quantum crypto
+	  (PQC) algorithm.  It acts as an asymmetric cipher, but it wants to do
+	  the digestion step that usually precedes such itself, and so has
+	  digest functions in its API.  In theory, an external digestor can be
+	  used, but that is not fully supported here.
+
+	  Note that composite signature support is not currently implemented.
+
+	  Three different strengths of key are supported and each has its own
+	  separate API and is built into a separate module as most of the code
+	  gets duplicated for each strength.
+
+if CRYPTO_LIB_MLDSA
+
+config CRYPTO_LIB_MLDSA_44
+	tristate "Enable ML-DSA-44 support"
+
+config CRYPTO_LIB_MLDSA_65
+	tristate "Enable ML-DSA-65 support"
+
+config CRYPTO_LIB_MLDSA_87
+	tristate "Enable ML-DSA-87 support"
+
+endif
diff --git a/lib/crypto/mldsa/Makefile b/lib/crypto/mldsa/Makefile
new file mode 100644
index 000000000000..d4872b701903
--- /dev/null
+++ b/lib/crypto/mldsa/Makefile
@@ -0,0 +1,20 @@
+# SPDX-License-Identifier: GPL-2.0
+
+mldsa_common-y += \
+	dilithium_common.o \
+	dilithium_zetas.o \
+	signature_domain_separation.o
+
+mldsa_44-y += dilithium_44.o
+mldsa_44-$(CONFIG_CRYPTO) += crypto_mldsa_44.o
+
+mldsa_65-y += dilithium_65.o
+mldsa_65-$(CONFIG_CRYPTO) += crypto_mldsa_65.o
+
+mldsa_87-y += dilithium_87.o
+mldsa_87-$(CONFIG_CRYPTO) += crypto_mldsa_87.o
+
+obj-$(CONFIG_CRYPTO_LIB_MLDSA) += mldsa_common.o
+obj-$(CONFIG_CRYPTO_LIB_MLDSA_44) += mldsa_44.o
+obj-$(CONFIG_CRYPTO_LIB_MLDSA_65) += mldsa_65.o
+obj-$(CONFIG_CRYPTO_LIB_MLDSA_87) += mldsa_87.o
diff --git a/lib/crypto/mldsa/crypto_mldsa_44.c b/lib/crypto/mldsa/crypto_mldsa_44.c
new file mode 100644
index 000000000000..2c2887ecb49b
--- /dev/null
+++ b/lib/crypto/mldsa/crypto_mldsa_44.c
@@ -0,0 +1,166 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
+/*
+ * Copyright (C) 2024 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <crypto/internal/sig.h>
+#include "dilithium.h"
+
+enum dilithium_44_kernel_key_type {
+	dilithium_44_kernel_key_unset = 0,
+	/* dilithium_44_kernel_key_sk = 1, */
+	dilithium_44_kernel_key_pk = 2,
+};
+
+struct dilithium_44_kernel_ctx {
+	union {
+		struct dilithium_44_pk pk;
+		/* Secret key goes here. */
+	};
+	enum dilithium_44_kernel_key_type key_type;
+};
+
+/* src -> message */
+/* dst -> signature */
+static int dilithium_44_kernel_sign(struct crypto_sig *tfm, const void *src,
+				 unsigned int slen, void *dst,
+				 unsigned int dlen)
+{
+	return -EOPNOTSUPP;
+}
+
+/* src -> signature */
+/* msg -> message */
+static int dilithium_44_kernel_verify(struct crypto_sig *tfm, const void *src,
+				   unsigned int slen, const void *msg,
+				   unsigned int msg_len)
+{
+	struct dilithium_44_kernel_ctx *ctx = crypto_sig_ctx(tfm);
+	struct dilithium_44_sig *sig;
+	int ret;
+
+	sig = kmalloc(sizeof(struct dilithium_44_sig), GFP_KERNEL);
+	if (!sig)
+		return -ENOMEM;
+
+	ret = dilithium_44_sig_load(sig, src, slen);
+	if (ret)
+		goto out;
+
+	ret = dilithium_44_verify(sig, msg, msg_len, &ctx->pk);
+
+out:
+	kfree_sensitive(sig);
+	return ret;
+}
+static unsigned int dilithium_44_kernel_key_size(struct crypto_sig *tfm)
+{
+	struct dilithium_44_kernel_ctx *ctx = crypto_sig_ctx(tfm);
+
+	switch (ctx->key_type) {
+	case dilithium_44_kernel_key_unset:
+	case dilithium_44_kernel_key_pk:
+	default:
+		return sizeof(struct dilithium_44_pk);
+	}
+}
+
+static int dilithium_44_kernel_set_pub_key(struct crypto_sig *tfm,
+					   const void *key,
+					   unsigned int keylen)
+{
+	struct dilithium_44_kernel_ctx *ctx = crypto_sig_ctx(tfm);
+	int ret;
+
+	ctx->key_type = dilithium_44_kernel_key_unset;
+
+	ret = dilithium_44_pk_load(&ctx->pk, key, keylen);
+	if (!ret)
+		ctx->key_type = dilithium_44_kernel_key_pk;
+	return ret;
+}
+
+static int dilithium_44_kernel_set_priv_key(struct crypto_sig *tfm,
+					    const void *key,
+					    unsigned int keylen)
+{
+	return -EOPNOTSUPP;
+}
+
+static unsigned int dilithium_44_kernel_max_size(struct crypto_sig *tfm)
+{
+	struct dilithium_44_kernel_ctx *ctx = crypto_sig_ctx(tfm);
+
+	switch (ctx->key_type) {
+	case dilithium_44_kernel_key_pk:
+		/* When PK is set, this is a safety valve, result is boolean */
+		return sizeof(struct dilithium_44_sig);
+	default:
+		return 0;
+	}
+}
+
+static int dilithium_44_kernel_alg_init(struct crypto_sig *tfm)
+{
+	return 0;
+}
+
+static void dilithium_44_kernel_alg_exit(struct crypto_sig *tfm)
+{
+	struct dilithium_44_kernel_ctx *ctx = crypto_sig_ctx(tfm);
+
+	ctx->key_type = dilithium_44_kernel_key_unset;
+}
+
+static struct sig_alg dilithium_44_kernel = {
+	.sign			= dilithium_44_kernel_sign,
+	.verify			= dilithium_44_kernel_verify,
+	.set_pub_key		= dilithium_44_kernel_set_pub_key,
+	.set_priv_key		= dilithium_44_kernel_set_priv_key,
+	.key_size		= dilithium_44_kernel_key_size,
+	.max_size		= dilithium_44_kernel_max_size,
+	.init			= dilithium_44_kernel_alg_init,
+	.exit			= dilithium_44_kernel_alg_exit,
+	.base.cra_name		= "mldsa44",
+	.base.cra_driver_name	= "mldsa44-leancrypto",
+	.base.cra_ctxsize	= sizeof(struct dilithium_44_kernel_ctx),
+	.base.cra_module	= THIS_MODULE,
+	.base.cra_priority	= 5000,
+};
+
+static int __init dilithium_init(void)
+{
+	int ret;
+
+	ret = crypto_register_sig(&dilithium_44_kernel);
+	if (ret < 0)
+		pr_err("Failed to register (%d)\n", ret);
+	return ret;
+}
+module_init(dilithium_init);
+
+static void dilithium_exit(void)
+{
+	crypto_unregister_sig(&dilithium_44_kernel);
+}
+module_exit(dilithium_exit);
+
+MODULE_LICENSE("Dual BSD/GPL");
+MODULE_DESCRIPTION("Leancrypto ML-DSA/Dilithium 44");
+MODULE_AUTHOR("Stephan Mueller <smueller@chronox.de>");
+MODULE_ALIAS_CRYPTO("mldsa44");
diff --git a/lib/crypto/mldsa/crypto_mldsa_65.c b/lib/crypto/mldsa/crypto_mldsa_65.c
new file mode 100644
index 000000000000..b62c57b5080f
--- /dev/null
+++ b/lib/crypto/mldsa/crypto_mldsa_65.c
@@ -0,0 +1,166 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
+/*
+ * Copyright (C) 2024 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <crypto/internal/sig.h>
+#include "dilithium.h"
+
+enum dilithium_65_kernel_key_type {
+	dilithium_65_kernel_key_unset = 0,
+	/* dilithium_65_kernel_key_sk = 1, */
+	dilithium_65_kernel_key_pk = 2,
+};
+
+struct dilithium_65_kernel_ctx {
+	union {
+		struct dilithium_65_pk pk;
+		/* Secret key goes here. */
+	};
+	enum dilithium_65_kernel_key_type key_type;
+};
+
+/* src -> message */
+/* dst -> signature */
+static int dilithium_65_kernel_sign(struct crypto_sig *tfm, const void *src,
+				 unsigned int slen, void *dst,
+				 unsigned int dlen)
+{
+	return -EOPNOTSUPP;
+}
+
+/* src -> signature */
+/* msg -> message */
+static int dilithium_65_kernel_verify(struct crypto_sig *tfm, const void *src,
+				   unsigned int slen, const void *msg,
+				   unsigned int msg_len)
+{
+	struct dilithium_65_kernel_ctx *ctx = crypto_sig_ctx(tfm);
+	struct dilithium_65_sig *sig;
+	int ret;
+
+	sig = kmalloc(sizeof(struct dilithium_65_sig), GFP_KERNEL);
+	if (!sig)
+		return -ENOMEM;
+
+	ret = dilithium_65_sig_load(sig, src, slen);
+	if (ret)
+		goto out;
+
+	ret = dilithium_65_verify(sig, msg, msg_len, &ctx->pk);
+
+out:
+	kfree_sensitive(sig);
+	return ret;
+}
+static unsigned int dilithium_65_kernel_key_size(struct crypto_sig *tfm)
+{
+	struct dilithium_65_kernel_ctx *ctx = crypto_sig_ctx(tfm);
+
+	switch (ctx->key_type) {
+	case dilithium_65_kernel_key_unset:
+	case dilithium_65_kernel_key_pk:
+	default:
+		return sizeof(struct dilithium_65_pk);
+	}
+}
+
+static int dilithium_65_kernel_set_pub_key(struct crypto_sig *tfm,
+					   const void *key,
+					   unsigned int keylen)
+{
+	struct dilithium_65_kernel_ctx *ctx = crypto_sig_ctx(tfm);
+	int ret;
+
+	ctx->key_type = dilithium_65_kernel_key_unset;
+
+	ret = dilithium_65_pk_load(&ctx->pk, key, keylen);
+	if (!ret)
+		ctx->key_type = dilithium_65_kernel_key_pk;
+	return ret;
+}
+
+static int dilithium_65_kernel_set_priv_key(struct crypto_sig *tfm,
+					    const void *key,
+					    unsigned int keylen)
+{
+	return -EOPNOTSUPP;
+}
+
+static unsigned int dilithium_65_kernel_max_size(struct crypto_sig *tfm)
+{
+	struct dilithium_65_kernel_ctx *ctx = crypto_sig_ctx(tfm);
+
+	switch (ctx->key_type) {
+	case dilithium_65_kernel_key_pk:
+		/* When PK is set, this is a safety valve, result is boolean */
+		return sizeof(struct dilithium_65_sig);
+	default:
+		return 0;
+	}
+}
+
+static int dilithium_65_kernel_alg_init(struct crypto_sig *tfm)
+{
+	return 0;
+}
+
+static void dilithium_65_kernel_alg_exit(struct crypto_sig *tfm)
+{
+	struct dilithium_65_kernel_ctx *ctx = crypto_sig_ctx(tfm);
+
+	ctx->key_type = dilithium_65_kernel_key_unset;
+}
+
+static struct sig_alg dilithium_65_kernel = {
+	.sign			= dilithium_65_kernel_sign,
+	.verify			= dilithium_65_kernel_verify,
+	.set_pub_key		= dilithium_65_kernel_set_pub_key,
+	.set_priv_key		= dilithium_65_kernel_set_priv_key,
+	.key_size		= dilithium_65_kernel_key_size,
+	.max_size		= dilithium_65_kernel_max_size,
+	.init			= dilithium_65_kernel_alg_init,
+	.exit			= dilithium_65_kernel_alg_exit,
+	.base.cra_name		= "mldsa65",
+	.base.cra_driver_name	= "mldsa65-leancrypto",
+	.base.cra_ctxsize	= sizeof(struct dilithium_65_kernel_ctx),
+	.base.cra_module	= THIS_MODULE,
+	.base.cra_priority	= 5000,
+};
+
+static int __init dilithium_init(void)
+{
+	int ret;
+
+	ret = crypto_register_sig(&dilithium_65_kernel);
+	if (ret < 0)
+		pr_err("Failed to register (%d)\n", ret);
+	return ret;
+}
+module_init(dilithium_init);
+
+static void dilithium_exit(void)
+{
+	crypto_unregister_sig(&dilithium_65_kernel);
+}
+module_exit(dilithium_exit);
+
+MODULE_LICENSE("Dual BSD/GPL");
+MODULE_DESCRIPTION("Leancrypto ML-DSA/Dilithium 65");
+MODULE_AUTHOR("Stephan Mueller <smueller@chronox.de>");
+MODULE_ALIAS_CRYPTO("mldsa65");
diff --git a/lib/crypto/mldsa/crypto_mldsa_87.c b/lib/crypto/mldsa/crypto_mldsa_87.c
new file mode 100644
index 000000000000..15acaa521032
--- /dev/null
+++ b/lib/crypto/mldsa/crypto_mldsa_87.c
@@ -0,0 +1,166 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
+/*
+ * Copyright (C) 2024 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <crypto/internal/sig.h>
+#include "dilithium.h"
+
+enum dilithium_87_kernel_key_type {
+	dilithium_87_kernel_key_unset = 0,
+	/* dilithium_87_kernel_key_sk = 1, */
+	dilithium_87_kernel_key_pk = 2,
+};
+
+struct dilithium_87_kernel_ctx {
+	union {
+		struct dilithium_87_pk pk;
+		/* Secret key goes here. */
+	};
+	enum dilithium_87_kernel_key_type key_type;
+};
+
+/* src -> message */
+/* dst -> signature */
+static int dilithium_87_kernel_sign(struct crypto_sig *tfm, const void *src,
+				 unsigned int slen, void *dst,
+				 unsigned int dlen)
+{
+	return -EOPNOTSUPP;
+}
+
+/* src -> signature */
+/* msg -> message */
+static int dilithium_87_kernel_verify(struct crypto_sig *tfm, const void *src,
+				   unsigned int slen, const void *msg,
+				   unsigned int msg_len)
+{
+	struct dilithium_87_kernel_ctx *ctx = crypto_sig_ctx(tfm);
+	struct dilithium_87_sig *sig;
+	int ret;
+
+	sig = kmalloc(sizeof(struct dilithium_87_sig), GFP_KERNEL);
+	if (!sig)
+		return -ENOMEM;
+
+	ret = dilithium_87_sig_load(sig, src, slen);
+	if (ret)
+		goto out;
+
+	ret = dilithium_87_verify(sig, msg, msg_len, &ctx->pk);
+
+out:
+	kfree_sensitive(sig);
+	return ret;
+}
+static unsigned int dilithium_87_kernel_key_size(struct crypto_sig *tfm)
+{
+	struct dilithium_87_kernel_ctx *ctx = crypto_sig_ctx(tfm);
+
+	switch (ctx->key_type) {
+	case dilithium_87_kernel_key_unset:
+	case dilithium_87_kernel_key_pk:
+	default:
+		return sizeof(struct dilithium_87_pk);
+	}
+}
+
+static int dilithium_87_kernel_set_pub_key(struct crypto_sig *tfm,
+					   const void *key,
+					   unsigned int keylen)
+{
+	struct dilithium_87_kernel_ctx *ctx = crypto_sig_ctx(tfm);
+	int ret;
+
+	ctx->key_type = dilithium_87_kernel_key_unset;
+
+	ret = dilithium_87_pk_load(&ctx->pk, key, keylen);
+	if (!ret)
+		ctx->key_type = dilithium_87_kernel_key_pk;
+	return ret;
+}
+
+static int dilithium_87_kernel_set_priv_key(struct crypto_sig *tfm,
+					    const void *key,
+					    unsigned int keylen)
+{
+	return -EOPNOTSUPP;
+}
+
+static unsigned int dilithium_87_kernel_max_size(struct crypto_sig *tfm)
+{
+	struct dilithium_87_kernel_ctx *ctx = crypto_sig_ctx(tfm);
+
+	switch (ctx->key_type) {
+	case dilithium_87_kernel_key_pk:
+		/* When PK is set, this is a safety valve, result is boolean */
+		return sizeof(struct dilithium_87_sig);
+	default:
+		return 0;
+	}
+}
+
+static int dilithium_87_kernel_alg_init(struct crypto_sig *tfm)
+{
+	return 0;
+}
+
+static void dilithium_87_kernel_alg_exit(struct crypto_sig *tfm)
+{
+	struct dilithium_87_kernel_ctx *ctx = crypto_sig_ctx(tfm);
+
+	ctx->key_type = dilithium_87_kernel_key_unset;
+}
+
+static struct sig_alg dilithium_87_kernel = {
+	.sign			= dilithium_87_kernel_sign,
+	.verify			= dilithium_87_kernel_verify,
+	.set_pub_key		= dilithium_87_kernel_set_pub_key,
+	.set_priv_key		= dilithium_87_kernel_set_priv_key,
+	.key_size		= dilithium_87_kernel_key_size,
+	.max_size		= dilithium_87_kernel_max_size,
+	.init			= dilithium_87_kernel_alg_init,
+	.exit			= dilithium_87_kernel_alg_exit,
+	.base.cra_name		= "mldsa87",
+	.base.cra_driver_name	= "mldsa87-leancrypto",
+	.base.cra_ctxsize	= sizeof(struct dilithium_87_kernel_ctx),
+	.base.cra_module	= THIS_MODULE,
+	.base.cra_priority	= 5000,
+};
+
+static int __init dilithium_init(void)
+{
+	int ret;
+
+	ret = crypto_register_sig(&dilithium_87_kernel);
+	if (ret < 0)
+		pr_err("Failed to register (%d)\n", ret);
+	return ret;
+}
+module_init(dilithium_init);
+
+static void dilithium_exit(void)
+{
+	crypto_unregister_sig(&dilithium_87_kernel);
+}
+module_exit(dilithium_exit);
+
+MODULE_LICENSE("Dual BSD/GPL");
+MODULE_DESCRIPTION("Leancrypto ML-DSA/Dilithium 87");
+MODULE_AUTHOR("Stephan Mueller <smueller@chronox.de>");
+MODULE_ALIAS_CRYPTO("mldsa87");
diff --git a/lib/crypto/mldsa/dilithium.h b/lib/crypto/mldsa/dilithium.h
new file mode 100644
index 000000000000..f3eecb5ce289
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium.h
@@ -0,0 +1,304 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/* ML-DSA (Dilithium) internal API.
+ *
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#ifndef DILITHIUM_H
+#define DILITHIUM_H
+
+#undef pr_fmt
+#define pr_fmt(fmt) "ML-DSA: " fmt
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/string.h>
+#include <crypto/sha2.h>
+#include <crypto/sha3.h>
+#include <crypto/hash.h>
+
+#define DILITHIUM_SEEDBYTES 32
+#define DILITHIUM_CRHBYTES 64
+#define DILITHIUM_TRBYTES 64
+#define DILITHIUM_RNDBYTES 32
+#define DILITHIUM_N 256
+#define DILITHIUM_Q 8380417
+#define DILITHIUM_D 13
+#define DILITHIUM_ROOT_OF_UNITY 1753
+
+extern const int32_t dilithium_zetas[DILITHIUM_N];
+
+struct dilithium_ctx {
+	/*
+	 * @brief Hash context used internally to the library - it should not
+	 * be touched by the user
+	 */
+	struct shake_ctx dilithium_hash_ctx;
+
+	/*
+	 * @brief length of the user context (allowed range between 0 and 255
+	 * bytes)
+	 *
+	 * \note Use \p dilithium_ctx_userctx or
+	 * \p dilithium_ed25519_ctx_userctx to set this value.
+	 */
+	size_t userctxlen;
+
+	/*
+	 * @brief buffer with a caller-specified context string
+	 *
+	 * \note Use \p dilithium_ctx_userctx or
+	 * \p dilithium_ed25519_ctx_userctx to set this value.
+	 */
+	const uint8_t *userctx;
+
+	/*
+	 * @brief Pointer to the AHat buffer. This can be provided by the caller
+	 * or it must be NULL otherwise.
+	 *
+	 * \note Use \p DILITHIUM_CTX_ON_STACK_AHAT to provide memory for
+	 * storing AHat in the caller context and thus make the signature
+	 * operation much faster starting with the 2nd use of the key (pair).
+	 */
+	void *ahat;
+	unsigned short ahat_size;
+
+	/*
+	 * @brief Pointer to the external mu.
+	 *
+	 * If set, the signature operation will use the provided mu instead of
+	 * the message. In this case, the message pointer to the signature
+	 * generation or verification can be NULL.
+	 */
+	const uint8_t *external_mu;
+	size_t external_mu_len;
+
+	/*
+	 * @brief NIST category required for composite signatures
+	 *
+	 * The domain separation logic depends on the selection of the right
+	 * OID for the "Domain" data.
+	 */
+	unsigned int nist_category;
+
+	/*
+	 * @brief When set to true, only the ML-DSA.Sign_internal or
+	 * ML-DSA.Verify_internal are performed (see FIPS 204 chapter 6).
+	 * Otherwise the ML-DSA.Sign / ML-DSA.Verify (see FIPS chapter 5) is
+	 * applied.
+	 *
+	 * \note Use \p dilithium_ctx_internal or
+	 * \p dilithium_ed25519_ctx_internal to set this value.
+	 *
+	 * \warning Only set this value to true if you exactly know what you are
+	 * doing!.
+	 */
+	bool ml_dsa_internal:1;
+
+	/*
+	 * @brief Was aHat already filled? This is used and set internally.
+	 */
+	bool ahat_expanded:1;
+} __aligned(CRYPTO_MINALIGN);
+
+static inline void dilithium_hash_init(struct dilithium_ctx *ctx)
+{
+	shake256_init(&ctx->dilithium_hash_ctx);
+}
+
+static inline bool dilithium_hash_check_blocksize(const struct dilithium_ctx *ctx, size_t bsize)
+{
+	return bsize == SHAKE256_BLOCK_SIZE;
+}
+
+static inline bool dilithium_hash_check_digestsize(const struct dilithium_ctx *ctx, size_t dsize)
+{
+	return true;
+}
+
+static inline void dilithium_hash_clear(struct dilithium_ctx *ctx)
+{
+	shake_zeroize_ctx(&ctx->dilithium_hash_ctx);
+}
+
+static inline void dilithium_hash_update(struct dilithium_ctx *ctx,
+					 const u8 *in, size_t in_size)
+{
+	shake_update(&ctx->dilithium_hash_ctx, in, in_size);
+}
+
+static inline void dilithium_hash_finup(struct dilithium_ctx *ctx,
+					const u8 *in, size_t in_size,
+					u8 *out, size_t out_size)
+{
+	shake_update(&ctx->dilithium_hash_ctx, in, in_size);
+	shake_squeeze(&ctx->dilithium_hash_ctx, out, out_size);
+	shake_zeroize_ctx(&ctx->dilithium_hash_ctx);
+}
+
+static inline void dilithium_hash_final(struct dilithium_ctx *ctx, u8 *out, size_t out_size)
+{
+	shake_squeeze(&ctx->dilithium_hash_ctx, out, out_size);
+	shake_zeroize_ctx(&ctx->dilithium_hash_ctx);
+}
+
+#include "dilithium_87.h"
+#include "dilithium_65.h"
+#include "dilithium_44.h"
+
+enum dilithium_type {
+	DILITHIUM_UNKNOWN,	/* Unknown key type */
+	DILITHIUM_87,		/* Dilithium 87 */
+	DILITHIUM_65,		/* Dilithium 65 */
+	DILITHIUM_44,		/* Dilithium 44 */
+};
+
+/* Dilithium ML-DSA / CRYSTALS-Dilithium Signature Mechanism
+ *
+ * Note that although the API uses the term "dilithium", the implementation
+ * complies with FIPS 204.  Thus the terms Dilithium and ML-DSA are used
+ * interchangeably.
+ *
+ * Dilithium API concept
+ *
+ * The Dilithium API is accessible via the following header files with the
+ * mentioned purpose.
+ *
+ * * dilithium.h: This API is the generic API allowing the caller to select
+ *   which Dilithium type (Dilithium 87, 65 or 44) are to be used. The selection
+ *   is made either with the flag specified during key generation or by matching
+ *   the size of the imported data with the different dilithium_*_load API
+ *   calls. All remaining APIs take the information about the Dilithium type
+ *   from the provided input data.
+ *
+ *   This header file only provides inline functions which selectively call
+ *   the API provided with the header files below.
+ *
+ * * dilithium_87.h: Direct access to Dilithium 87.
+ *
+ * * dilithium_65.h: Direct access to Dilithium 65.
+ *
+ * * dilithium_44.h: Direct access to Dilithium 44.
+ *
+ * To support the stream mode of the Dilithium signature operation, a context
+ * structure is required.  This context structure is allocated with
+ * dilithium_ctx_alloc().  The context can be zeroed with dilithium_ctx_zero()
+ * or zeroed and freed with dilithium_ctx_zero_free().
+ */
+
+struct dilithium_ctx *dilithium_ctx_alloc(void);
+
+struct dilithium_ctx *dilithium_ctx_alloc_ahat(enum dilithium_type type);
+
+void dilithium_ctx_zero_free(struct dilithium_ctx *ctx);
+
+void dilithium_ctx_zero(struct dilithium_ctx *ctx);
+
+
+
+/*
+ * dilithium_ctx_internal - Mark ML-DSA context internal
+ * @ctx: Dilithium context pointer
+ *
+ * Mark the Dilithium context to execute ML-DSA.Sign_internal or
+ * ML-DSA.Verify_internal.
+ *
+ * Context: Any context.
+ */
+static inline
+void dilithium_ctx_internal(struct dilithium_ctx *ctx)
+{
+	if (ctx)
+		ctx->ml_dsa_internal = true;
+}
+
+/*
+ * dilithium_ctx_userctx - Specify user context
+ * @ctx: Dilithium context
+ * @userctx: User context string
+ * @userctxlen: Length of the user context string
+ *
+ * Specify the optional user context string to be applied with the
+ * ML-DSA/Dilithium signature operation.  The pointer given in @userctx is
+ * retained without copying the string, so the caller must not free it until
+ * the context is cleared or verification is complete.
+ *
+ * Context: Any context.
+ */
+static inline
+void dilithium_ctx_userctx(struct dilithium_ctx *ctx, const uint8_t *userctx,
+			   size_t userctxlen)
+{
+	if (ctx) {
+		ctx->userctx = userctx;
+		ctx->userctxlen = userctxlen;
+	}
+}
+
+/*
+ * dilithium_ctx_external_mu - Specify the optional external mu
+ * @ctx: Dilithium context
+ * @external_mu: User context string
+ * @external_mu_len: Length of the user context string
+ *
+ * If the external mu is specified, the signature generation and verification
+ * APIs do not require a message.  In this case, the message buffer can be set
+ * to NULL.  The pointer given in @external_mu is retained without copying the
+ * mu data, so the caller must not free it until the context is cleared or
+ * verification is complete.
+ *
+ * If both a message and an external mu are provided, the external mu takes
+ * precedence.
+ *
+ * Context: Any context.
+ */
+static inline
+void dilithium_ctx_external_mu(struct dilithium_ctx *ctx, const uint8_t *external_mu,
+			       size_t external_mu_len)
+{
+	if (ctx) {
+		ctx->external_mu = external_mu;
+		ctx->external_mu_len = external_mu_len;
+	}
+}
+
+/*
+ * dilithium_ctx_drop_ahat - Invalidate expanded key
+ * @ctx: Dilithium context
+ *
+ * Invalidate the expanded key that potentially is stored in the context.
+ *
+ * This call can be executed on a context irrespective it was allocated with
+ * space for the expanded representation or not.  Thus, the caller does not
+ * need to track whether the context supports the expanded key.
+ *
+ * Context: Any context.
+ */
+static inline
+void dilithium_ctx_drop_ahat(struct dilithium_ctx *ctx)
+{
+	if (ctx)
+		ctx->ahat_expanded = 0;
+}
+
+#endif /* DILITHIUM_H */
diff --git a/lib/crypto/mldsa/dilithium_44.c b/lib/crypto/mldsa/dilithium_44.c
new file mode 100644
index 000000000000..1aea716016f0
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_44.c
@@ -0,0 +1,33 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+#define DILITHIUM_TYPE_44
+#include "dilithium.h"
+
+#define DILITHIUM_TYPE			"44"
+#define DILITHIUM_MODE			2
+#define DILITHIUM_NIST_CATEGORY		DILITHIUM44_NIST_CATEGORY
+#define DILITHIUM_LAMBDA		DILITHIUM44_LAMBDA
+#define DILITHIUM_K			DILITHIUM44_K
+#define DILITHIUM_L			DILITHIUM44_L
+#define DILITHIUM_ETA			DILITHIUM44_ETA
+#define DILITHIUM_TAU			DILITHIUM44_TAU
+#define DILITHIUM_BETA			DILITHIUM44_BETA
+#define DILITHIUM_GAMMA1		DILITHIUM44_GAMMA1
+#define DILITHIUM_GAMMA2		DILITHIUM44_GAMMA2
+#define DILITHIUM_OMEGA			DILITHIUM44_OMEGA
+
+#define DILITHIUM_CTILDE_BYTES		DILITHIUM44_CTILDE_BYTES
+#define DILITHIUM_POLYT1_PACKEDBYTES	DILITHIUM44_POLYT1_PACKEDBYTES
+#define DILITHIUM_POLYT0_PACKEDBYTES	DILITHIUM44_POLYT0_PACKEDBYTES
+#define DILITHIUM_POLYVECH_PACKEDBYTES	DILITHIUM44_POLYVECH_PACKEDBYTES
+#define DILITHIUM_POLYZ_PACKEDBYTES	DILITHIUM44_POLYZ_PACKEDBYTES
+#define DILITHIUM_POLYW1_PACKEDBYTES	DILITHIUM44_POLYW1_PACKEDBYTES
+#define DILITHIUM_POLYETA_PACKEDBYTES	DILITHIUM44_POLYETA_PACKEDBYTES
+
+#define DILITHIUM_PUBLICKEYBYTES	DILITHIUM44_PUBLICKEYBYTES
+#define DILITHIUM_SECRETKEYBYTES	DILITHIUM44_SECRETKEYBYTES
+#define DILITHIUM_CRYPTO_BYTES		DILITHIUM44_CRYPTO_BYTES
+
+#include "dilithium_ntt.c"
+#include "dilithium_poly.c"
+#include "dilithium_rounding.c"
+#include "dilithium_signature_c.c"
diff --git a/lib/crypto/mldsa/dilithium_44.h b/lib/crypto/mldsa/dilithium_44.h
new file mode 100644
index 000000000000..dc45fd352d0b
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_44.h
@@ -0,0 +1,291 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#ifndef DILITHIUM_44_H
+#define DILITHIUM_44_H
+
+/*
+ * Dilithium Security Levels
+ * 2 -> 192 bits of security strength
+ * 3 -> 225 bits of security strength
+ * 5 -> 257 bits of security strength
+ */
+
+/* DILITHIUM_MODE 2 */
+#define DILITHIUM44_NIST_CATEGORY 1
+#define DILITHIUM44_LAMBDA 128
+#define DILITHIUM44_K 4
+#define DILITHIUM44_L 4
+#define DILITHIUM44_ETA 2
+#define DILITHIUM44_TAU 39
+#define DILITHIUM44_BETA 78
+#define DILITHIUM44_GAMMA1 (1 << 17)
+#define DILITHIUM44_GAMMA2 ((DILITHIUM_Q - 1) / 88)
+#define DILITHIUM44_OMEGA 80
+
+#define DILITHIUM44_CTILDE_BYTES (DILITHIUM44_LAMBDA * 2 / 8)
+#define DILITHIUM44_POLYT1_PACKEDBYTES 320
+#define DILITHIUM44_POLYT0_PACKEDBYTES 416
+#define DILITHIUM44_POLYVECH_PACKEDBYTES (DILITHIUM44_OMEGA + DILITHIUM44_K)
+
+#if DILITHIUM44_GAMMA1 == (1 << 17)
+#define DILITHIUM44_POLYZ_PACKEDBYTES 576
+#elif DILITHIUM44_GAMMA1 == (1 << 19)
+#define DILITHIUM44_POLYZ_PACKEDBYTES 640
+#endif
+
+#if DILITHIUM44_GAMMA2 == (DILITHIUM_Q - 1) / 88
+#define DILITHIUM44_POLYW1_PACKEDBYTES 192
+#elif DILITHIUM44_GAMMA2 == (DILITHIUM_Q - 1) / 32
+#define DILITHIUM44_POLYW1_PACKEDBYTES 128
+#endif
+
+#if DILITHIUM44_ETA == 2
+#define DILITHIUM44_POLYETA_PACKEDBYTES 96
+#elif DILITHIUM44_ETA == 4
+#define DILITHIUM44_POLYETA_PACKEDBYTES 128
+#endif
+
+/*
+ * Sizes of the different Dilithium buffer types.
+ *
+ * WARNING: Do not use these defines in your code. If you need the sizes of
+ * the different variable sizes, use sizeof of the different variable structs or
+ * use the different *_size functions documented below to retrieve the data size
+ * of a particular Dilithium component.
+ */
+#define DILITHIUM44_PUBLICKEYBYTES					\
+	(DILITHIUM_SEEDBYTES +						\
+	 DILITHIUM44_K * DILITHIUM44_POLYT1_PACKEDBYTES)
+#define DILITHIUM44_SECRETKEYBYTES					\
+	(2 * DILITHIUM_SEEDBYTES + DILITHIUM_TRBYTES +			\
+	 DILITHIUM44_L * DILITHIUM44_POLYETA_PACKEDBYTES +		\
+	 DILITHIUM44_K * DILITHIUM44_POLYETA_PACKEDBYTES +		\
+	 DILITHIUM44_K * DILITHIUM44_POLYT0_PACKEDBYTES)
+
+#define DILITHIUM44_CRYPTO_BYTES					\
+	(DILITHIUM44_CTILDE_BYTES +					\
+	 DILITHIUM44_L * DILITHIUM44_POLYZ_PACKEDBYTES +		\
+	 DILITHIUM44_POLYVECH_PACKEDBYTES)
+
+#ifndef __ASSEMBLER__
+/*
+ * @brief Dilithium secret key
+ */
+struct dilithium_44_sk {
+	uint8_t sk[DILITHIUM44_SECRETKEYBYTES];
+};
+
+/*
+ * @brief Dilithium public key
+ */
+struct dilithium_44_pk {
+	uint8_t pk[DILITHIUM44_PUBLICKEYBYTES];
+};
+
+/*
+ * @brief Dilithium signature
+ */
+struct dilithium_44_sig {
+	uint8_t sig[DILITHIUM44_CRYPTO_BYTES];
+};
+
+/*
+ * The alignment is based on largest alignment of a polyvecl typedef - this is
+ * the AVX2 definition.
+ */
+#define DILITHIUM_AHAT_ALIGNMENT (32)
+
+/* Size of the AHat matrix for ML-DSA 87 */
+#define DILITHIUM_44_AHAT_SIZE                                              \
+	(256 * sizeof(int32_t) * DILITHIUM44_K * DILITHIUM44_L)
+
+/*
+ * @brief Zeroize Dilithium context allocated with
+ *	  DILITHIUM_CTX_ON_STACK dilithium_ed25519_alloc
+ *
+ * @param [in] ctx Dilithium context to be zeroized
+ */
+static inline void dilithium_44_ctx_zero(struct dilithium_ctx *ctx)
+{
+	if (!ctx)
+		return;
+	dilithium_hash_clear(ctx);
+	if (ctx->ahat) {
+		memzero_explicit(ctx->ahat, ctx->ahat_size);
+		ctx->ahat_expanded = 0;
+	}
+}
+
+/*
+ * @brief Allocate Dilithium stream context on heap
+ *
+ * @param [out] ctx Allocated Dilithium stream context
+ *
+ * @return: 0 on success, < 0 on error
+ */
+struct dilithium_ctx *dilithium_44_ctx_alloc(void);
+
+/*
+ * @brief Allocate Dilithium stream context on heap including additional
+ * parameter relevant for the signature operation.
+ *
+ * \note See \p DILITHIUM_44_CTX_ON_STACK_AHAT for details.
+ *
+ * @param [out] ctx Allocated Dilithium stream context
+ *
+ * @return: 0 on success, < 0 on error
+ */
+struct dilithium_ctx *dilithium_44_ctx_alloc_ahat(void);
+
+/*
+ * @brief Zeroize and free Dilithium stream context
+ *
+ * @param [in] ctx Dilithium stream context to be zeroized and freed
+ */
+void dilithium_44_ctx_zero_free(struct dilithium_ctx *ctx);
+
+/*
+ * @brief Return the size of the Dilithium secret key.
+ */
+static inline unsigned int dilithium_44_sk_size(void)
+{
+	return sizeof_field(struct dilithium_44_sk, sk);
+}
+
+/*
+ * @brief Return the size of the Dilithium public key.
+ */
+static inline unsigned int dilithium_44_pk_size(void)
+{
+	return sizeof_field(struct dilithium_44_pk, pk);
+}
+
+/*
+ * @brief Return the size of the Dilithium signature.
+ */
+static inline unsigned int dilithium_44_sig_size(void)
+{
+	return sizeof_field(struct dilithium_44_sig, sig);
+}
+
+int dilithium_44_pk_load(struct dilithium_44_pk *pk,
+			 const uint8_t *src_key, size_t src_key_len);
+int dilithium_44_sig_load(struct dilithium_44_sig *sig,
+			  const uint8_t *src_sig, size_t src_sig_len);
+int dilithium_44_pk_ptr(uint8_t **dilithium_key, size_t *dilithium_key_len,
+			struct dilithium_44_pk *pk);
+int dilithium_44_sig_ptr(uint8_t **dilithium_sig, size_t *dilithium_sig_len,
+			 struct dilithium_44_sig *sig);
+
+/*
+ * @brief Verifies ML-DSA signature in one shot
+ *
+ * @param [in] sig pointer to input signature
+ * @param [in] m pointer to message
+ * @param [in] mlen length of message
+ * @param [in] pk pointer to bit-packed public key
+ *
+ * @return 0 if signature could be verified correctly and -EBADMSG when
+ * signature cannot be verified, < 0 on other errors
+ */
+int dilithium_44_verify(const struct dilithium_44_sig *sig, const uint8_t *m,
+			size_t mlen, const struct dilithium_44_pk *pk);
+
+/*
+ * @brief Verifies signature with Dilithium context in one shot
+ *
+ * This API allows the caller to provide an arbitrary context buffer which
+ * is hashed together with the message to form the message digest to be signed.
+ *
+ * @param [in] sig pointer to input signature
+ * @param [in] ctx reference to the allocated Dilithium context handle
+ * @param [in] m pointer to message
+ * @param [in] mlen length of message
+ * @param [in] pk pointer to bit-packed public key
+ *
+ * @return 0 if signature could be verified correctly and -EBADMSG when
+ * signature cannot be verified, < 0 on other errors
+ */
+int dilithium_44_verify_ctx(const struct dilithium_44_sig *sig,
+				struct dilithium_ctx *ctx,
+				const uint8_t *m, size_t mlen,
+				const struct dilithium_44_pk *pk);
+
+/*
+ * @brief Initializes a signature verification operation
+ *
+ * This call is intended to support messages that are located in non-contiguous
+ * places and even becomes available at different times. This call is to be
+ * used together with the dilithium_verify_update and
+ * dilithium_verify_final.
+ *
+ * @param [in,out] ctx pointer to an allocated Dilithium context
+ * @param [in] pk pointer to bit-packed public key
+ *
+ * @return 0 (success) or < 0 on error; -EOPNOTSUPP is returned if a different
+ *	   hash than lc_shake256 is used.
+ */
+int dilithium_44_verify_init(struct dilithium_ctx *ctx,
+			     const struct dilithium_44_pk *pk);
+
+/*
+ * @brief Add more data to an already initialized signature state
+ *
+ * This call is intended to support messages that are located in non-contiguous
+ * places and even becomes available at different times. This call is to be
+ * used together with the dilithium_verify_init and
+ * dilithium_verify_final.
+ *
+ * @param [in,out] ctx pointer to Dilithium context that was initialized with
+ *			    dilithium_sign_init
+ * @param [in] m pointer to message to be signed
+ * @param [in] mlen length of message
+ *
+ * @return 0 (success) or < 0 on error
+ */
+int dilithium_44_verify_update(struct dilithium_ctx *ctx, const uint8_t *m,
+			       size_t mlen);
+
+/*
+ * @brief Verifies signature
+ *
+ * @param [in] sig pointer to output signature
+ * @param [in] ctx pointer to Dilithium context that was initialized with
+ *			dilithium_sign_init and filled with
+ *			dilithium_sign_update
+ * @param [in] pk pointer to bit-packed public key
+ *
+ * @return 0 if signature could be verified correctly and -EBADMSG when
+ * signature cannot be verified, < 0 on other errors
+ */
+int dilithium_44_verify_final(const struct dilithium_44_sig *sig,
+			      struct dilithium_ctx *ctx,
+			      const struct dilithium_44_pk *pk);
+
+#endif /* __ASSEMBLER__ */
+
+#endif /* DILITHIUM_44_H */
diff --git a/lib/crypto/mldsa/dilithium_65.c b/lib/crypto/mldsa/dilithium_65.c
new file mode 100644
index 000000000000..08f3a8e71228
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_65.c
@@ -0,0 +1,33 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+#define DILITHIUM_TYPE_65
+#include "dilithium.h"
+
+#define DILITHIUM_TYPE			"65"
+#define DILITHIUM_MODE			3
+#define DILITHIUM_NIST_CATEGORY		DILITHIUM65_NIST_CATEGORY
+#define DILITHIUM_LAMBDA		DILITHIUM65_LAMBDA
+#define DILITHIUM_K			DILITHIUM65_K
+#define DILITHIUM_L			DILITHIUM65_L
+#define DILITHIUM_ETA			DILITHIUM65_ETA
+#define DILITHIUM_TAU			DILITHIUM65_TAU
+#define DILITHIUM_BETA			DILITHIUM65_BETA
+#define DILITHIUM_GAMMA1		DILITHIUM65_GAMMA1
+#define DILITHIUM_GAMMA2		DILITHIUM65_GAMMA2
+#define DILITHIUM_OMEGA			DILITHIUM65_OMEGA
+
+#define DILITHIUM_CTILDE_BYTES		DILITHIUM65_CTILDE_BYTES
+#define DILITHIUM_POLYT1_PACKEDBYTES	DILITHIUM65_POLYT1_PACKEDBYTES
+#define DILITHIUM_POLYT0_PACKEDBYTES	DILITHIUM65_POLYT0_PACKEDBYTES
+#define DILITHIUM_POLYVECH_PACKEDBYTES	DILITHIUM65_POLYVECH_PACKEDBYTES
+#define DILITHIUM_POLYZ_PACKEDBYTES	DILITHIUM65_POLYZ_PACKEDBYTES
+#define DILITHIUM_POLYW1_PACKEDBYTES	DILITHIUM65_POLYW1_PACKEDBYTES
+#define DILITHIUM_POLYETA_PACKEDBYTES	DILITHIUM65_POLYETA_PACKEDBYTES
+
+#define DILITHIUM_PUBLICKEYBYTES	DILITHIUM65_PUBLICKEYBYTES
+#define DILITHIUM_SECRETKEYBYTES	DILITHIUM65_SECRETKEYBYTES
+#define DILITHIUM_CRYPTO_BYTES		DILITHIUM65_CRYPTO_BYTES
+
+#include "dilithium_ntt.c"
+#include "dilithium_poly.c"
+#include "dilithium_rounding.c"
+#include "dilithium_signature_c.c"
diff --git a/lib/crypto/mldsa/dilithium_65.h b/lib/crypto/mldsa/dilithium_65.h
new file mode 100644
index 000000000000..269c58016d14
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_65.h
@@ -0,0 +1,291 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#ifndef DILITHIUM_65_H
+#define DILITHIUM_65_H
+
+/*
+ * Dilithium Security Levels
+ * 2 -> 192 bits of security strength
+ * 3 -> 225 bits of security strength
+ * 5 -> 257 bits of security strength
+ */
+
+/* DILITHIUM_MODE 3 */
+#define DILITHIUM65_NIST_CATEGORY 3
+#define DILITHIUM65_LAMBDA 192
+#define DILITHIUM65_K 6
+#define DILITHIUM65_L 5
+#define DILITHIUM65_ETA 4
+#define DILITHIUM65_TAU 49
+#define DILITHIUM65_BETA 196
+#define DILITHIUM65_GAMMA1 (1 << 19)
+#define DILITHIUM65_GAMMA2 ((DILITHIUM_Q - 1) / 32)
+#define DILITHIUM65_OMEGA 55
+
+#define DILITHIUM65_CTILDE_BYTES (DILITHIUM65_LAMBDA * 2 / 8)
+#define DILITHIUM65_POLYT1_PACKEDBYTES 320
+#define DILITHIUM65_POLYT0_PACKEDBYTES 416
+#define DILITHIUM65_POLYVECH_PACKEDBYTES (DILITHIUM65_OMEGA + DILITHIUM65_K)
+
+#if DILITHIUM65_GAMMA1 == (1 << 17)
+#define DILITHIUM65_POLYZ_PACKEDBYTES 576
+#elif DILITHIUM65_GAMMA1 == (1 << 19)
+#define DILITHIUM65_POLYZ_PACKEDBYTES 640
+#endif
+
+#if DILITHIUM65_GAMMA2 == (DILITHIUM_Q - 1) / 88
+#define DILITHIUM65_POLYW1_PACKEDBYTES 192
+#elif DILITHIUM65_GAMMA2 == (DILITHIUM_Q - 1) / 32
+#define DILITHIUM65_POLYW1_PACKEDBYTES 128
+#endif
+
+#if DILITHIUM65_ETA == 2
+#define DILITHIUM65_POLYETA_PACKEDBYTES 96
+#elif DILITHIUM65_ETA == 4
+#define DILITHIUM65_POLYETA_PACKEDBYTES 128
+#endif
+
+/*
+ * Sizes of the different Dilithium buffer types.
+ *
+ * WARNING: Do not use these defines in your code. If you need the sizes of
+ * the different variable sizes, use sizeof of the different variable structs or
+ * use the different *_size functions documented below to retrieve the data size
+ * of a particular Dilithium component.
+ */
+#define DILITHIUM65_PUBLICKEYBYTES			\
+	(DILITHIUM_SEEDBYTES +				\
+	 DILITHIUM65_K * DILITHIUM65_POLYT1_PACKEDBYTES)
+#define DILITHIUM65_SECRETKEYBYTES			\
+	(2 * DILITHIUM_SEEDBYTES + DILITHIUM_TRBYTES +	\
+	 DILITHIUM65_L * DILITHIUM65_POLYETA_PACKEDBYTES +	\
+	 DILITHIUM65_K * DILITHIUM65_POLYETA_PACKEDBYTES +	\
+	 DILITHIUM65_K * DILITHIUM65_POLYT0_PACKEDBYTES)
+
+#define DILITHIUM65_CRYPTO_BYTES				\
+	(DILITHIUM65_CTILDE_BYTES +			\
+	 DILITHIUM65_L * DILITHIUM65_POLYZ_PACKEDBYTES +	\
+	 DILITHIUM65_POLYVECH_PACKEDBYTES)
+
+#ifndef __ASSEMBLER__
+/*
+ * @brief Dilithium secret key
+ */
+struct dilithium_65_sk {
+	uint8_t sk[DILITHIUM65_SECRETKEYBYTES];
+};
+
+/*
+ * @brief Dilithium public key
+ */
+struct dilithium_65_pk {
+	uint8_t pk[DILITHIUM65_PUBLICKEYBYTES];
+};
+
+/*
+ * @brief Dilithium signature
+ */
+struct dilithium_65_sig {
+	uint8_t sig[DILITHIUM65_CRYPTO_BYTES];
+};
+
+/*
+ * The alignment is based on largest alignment of a polyvecl typedef - this is
+ * the AVX2 definition.
+ */
+#define DILITHIUM_AHAT_ALIGNMENT (32)
+
+/* Size of the AHat matrix for ML-DSA 87 */
+#define DILITHIUM_65_AHAT_SIZE					\
+	(256 * sizeof(int32_t) * DILITHIUM65_K * DILITHIUM65_L)
+
+/*
+ * @brief Zeroize Dilithium context allocated with
+ *	  DILITHIUM_CTX_ON_STACK dilithium_ed25519_alloc
+ *
+ * @param [in] ctx Dilithium context to be zeroized
+ */
+static inline void dilithium_65_ctx_zero(struct dilithium_ctx *ctx)
+{
+	if (!ctx)
+		return;
+	dilithium_hash_clear(ctx);
+	if (ctx->ahat) {
+		memzero_explicit(ctx->ahat, ctx->ahat_size);
+		ctx->ahat_expanded = 0;
+	}
+}
+
+/*
+ * @brief Allocate Dilithium stream context on heap
+ *
+ * @param [out] ctx Allocated Dilithium stream context
+ *
+ * @return: 0 on success, < 0 on error
+ */
+struct dilithium_ctx *dilithium_65_ctx_alloc(void);
+
+/*
+ * @brief Allocate Dilithium stream context on heap including additional
+ * parameter relevant for the signature operation.
+ *
+ * \note See \p DILITHIUM_65_CTX_ON_STACK_AHAT for details.
+ *
+ * @param [out] ctx Allocated Dilithium stream context
+ *
+ * @return: 0 on success, < 0 on error
+ */
+struct dilithium_ctx *dilithium_65_ctx_alloc_ahat(void);
+
+/*
+ * @brief Zeroize and free Dilithium stream context
+ *
+ * @param [in] ctx Dilithium stream context to be zeroized and freed
+ */
+void dilithium_65_ctx_zero_free(struct dilithium_ctx *ctx);
+
+/*
+ * @brief Return the size of the Dilithium secret key.
+ */
+static inline unsigned int dilithium_65_sk_size(void)
+{
+	return sizeof_field(struct dilithium_65_sk, sk);
+}
+
+/*
+ * @brief Return the size of the Dilithium public key.
+ */
+static inline unsigned int dilithium_65_pk_size(void)
+{
+	return sizeof_field(struct dilithium_65_pk, pk);
+}
+
+/*
+ * @brief Return the size of the Dilithium signature.
+ */
+static inline unsigned int dilithium_65_sig_size(void)
+{
+	return sizeof_field(struct dilithium_65_sig, sig);
+}
+
+int dilithium_65_pk_load(struct dilithium_65_pk *pk,
+			 const uint8_t *src_key, size_t src_key_len);
+int dilithium_65_sig_load(struct dilithium_65_sig *sig,
+			  const uint8_t *src_sig, size_t src_sig_len);
+int dilithium_65_pk_ptr(uint8_t **dilithium_key, size_t *dilithium_key_len,
+			struct dilithium_65_pk *pk);
+int dilithium_65_sig_ptr(uint8_t **dilithium_sig, size_t *dilithium_sig_len,
+			 struct dilithium_65_sig *sig);
+
+/*
+ * @brief Verifies ML-DSA signature in one shot
+ *
+ * @param [in] sig pointer to input signature
+ * @param [in] m pointer to message
+ * @param [in] mlen length of message
+ * @param [in] pk pointer to bit-packed public key
+ *
+ * @return 0 if signature could be verified correctly and -EBADMSG when
+ * signature cannot be verified, < 0 on other errors
+ */
+int dilithium_65_verify(const struct dilithium_65_sig *sig, const uint8_t *m,
+			size_t mlen, const struct dilithium_65_pk *pk);
+
+/*
+ * @brief Verifies signature with Dilithium context in one shot
+ *
+ * This API allows the caller to provide an arbitrary context buffer which
+ * is hashed together with the message to form the message digest to be signed.
+ *
+ * @param [in] sig pointer to input signature
+ * @param [in] ctx reference to the allocated Dilithium context handle
+ * @param [in] m pointer to message
+ * @param [in] mlen length of message
+ * @param [in] pk pointer to bit-packed public key
+ *
+ * @return 0 if signature could be verified correctly and -EBADMSG when
+ * signature cannot be verified, < 0 on other errors
+ */
+int dilithium_65_verify_ctx(const struct dilithium_65_sig *sig,
+			    struct dilithium_ctx *ctx,
+			    const uint8_t *m, size_t mlen,
+			    const struct dilithium_65_pk *pk);
+
+/*
+ * @brief Initializes a signature verification operation
+ *
+ * This call is intended to support messages that are located in non-contiguous
+ * places and even becomes available at different times. This call is to be
+ * used together with the dilithium_verify_update and
+ * dilithium_verify_final.
+ *
+ * @param [in,out] ctx pointer to an allocated Dilithium context
+ * @param [in] pk pointer to bit-packed public key
+ *
+ * @return 0 (success) or < 0 on error; -EOPNOTSUPP is returned if a different
+ *	   hash than lc_shake256 is used.
+ */
+int dilithium_65_verify_init(struct dilithium_ctx *ctx,
+			     const struct dilithium_65_pk *pk);
+
+/*
+ * @brief Add more data to an already initialized signature state
+ *
+ * This call is intended to support messages that are located in non-contiguous
+ * places and even becomes available at different times. This call is to be
+ * used together with the dilithium_verify_init and
+ * dilithium_verify_final.
+ *
+ * @param [in,out] ctx pointer to Dilithium context that was initialized with
+ *			    dilithium_sign_init
+ * @param [in] m pointer to message to be signed
+ * @param [in] mlen length of message
+ *
+ * @return 0 (success) or < 0 on error
+ */
+int dilithium_65_verify_update(struct dilithium_ctx *ctx, const uint8_t *m,
+			       size_t mlen);
+
+/*
+ * @brief Verifies signature
+ *
+ * @param [in] sig pointer to output signature
+ * @param [in] ctx pointer to Dilithium context that was initialized with
+ *			dilithium_sign_init and filled with
+ *			dilithium_sign_update
+ * @param [in] pk pointer to bit-packed public key
+ *
+ * @return 0 if signature could be verified correctly and -EBADMSG when
+ * signature cannot be verified, < 0 on other errors
+ */
+int dilithium_65_verify_final(const struct dilithium_65_sig *sig,
+			      struct dilithium_ctx *ctx,
+			      const struct dilithium_65_pk *pk);
+
+#endif /* __ASSEMBLER__ */
+
+#endif /* DILITHIUM_65_H */
diff --git a/lib/crypto/mldsa/dilithium_87.c b/lib/crypto/mldsa/dilithium_87.c
new file mode 100644
index 000000000000..fcc3e0229ed9
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_87.c
@@ -0,0 +1,33 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+#define DILITHIUM_TYPE_87
+#include "dilithium.h"
+
+#define DILITHIUM_TYPE			"87"
+#define DILITHIUM_MODE			5
+#define DILITHIUM_NIST_CATEGORY		DILITHIUM87_NIST_CATEGORY
+#define DILITHIUM_LAMBDA		DILITHIUM87_LAMBDA
+#define DILITHIUM_K			DILITHIUM87_K
+#define DILITHIUM_L			DILITHIUM87_L
+#define DILITHIUM_ETA			DILITHIUM87_ETA
+#define DILITHIUM_TAU			DILITHIUM87_TAU
+#define DILITHIUM_BETA			DILITHIUM87_BETA
+#define DILITHIUM_GAMMA1		DILITHIUM87_GAMMA1
+#define DILITHIUM_GAMMA2		DILITHIUM87_GAMMA2
+#define DILITHIUM_OMEGA			DILITHIUM87_OMEGA
+
+#define DILITHIUM_CTILDE_BYTES		DILITHIUM87_CTILDE_BYTES
+#define DILITHIUM_POLYT1_PACKEDBYTES	DILITHIUM87_POLYT1_PACKEDBYTES
+#define DILITHIUM_POLYT0_PACKEDBYTES	DILITHIUM87_POLYT0_PACKEDBYTES
+#define DILITHIUM_POLYVECH_PACKEDBYTES	DILITHIUM87_POLYVECH_PACKEDBYTES
+#define DILITHIUM_POLYZ_PACKEDBYTES	DILITHIUM87_POLYZ_PACKEDBYTES
+#define DILITHIUM_POLYW1_PACKEDBYTES	DILITHIUM87_POLYW1_PACKEDBYTES
+#define DILITHIUM_POLYETA_PACKEDBYTES	DILITHIUM87_POLYETA_PACKEDBYTES
+
+#define DILITHIUM_PUBLICKEYBYTES	DILITHIUM87_PUBLICKEYBYTES
+#define DILITHIUM_SECRETKEYBYTES	DILITHIUM87_SECRETKEYBYTES
+#define DILITHIUM_CRYPTO_BYTES		DILITHIUM87_CRYPTO_BYTES
+
+#include "dilithium_ntt.c"
+#include "dilithium_poly.c"
+#include "dilithium_rounding.c"
+#include "dilithium_signature_c.c"
diff --git a/lib/crypto/mldsa/dilithium_87.h b/lib/crypto/mldsa/dilithium_87.h
new file mode 100644
index 000000000000..1589c36bd611
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_87.h
@@ -0,0 +1,291 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#ifndef DILITHIUM_87_H
+#define DILITHIUM_87_H
+
+/*
+ * Dilithium Security Levels
+ * 2 -> 192 bits of security strength
+ * 3 -> 225 bits of security strength
+ * 5 -> 257 bits of security strength
+ */
+
+/* DILITHIUM_MODE 5 */
+#define DILITHIUM87_NIST_CATEGORY 5
+#define DILITHIUM87_LAMBDA 256
+#define DILITHIUM87_K 8
+#define DILITHIUM87_L 7
+#define DILITHIUM87_ETA 2
+#define DILITHIUM87_TAU 60
+#define DILITHIUM87_BETA 120
+#define DILITHIUM87_GAMMA1 (1 << 19)
+#define DILITHIUM87_GAMMA2 ((DILITHIUM_Q - 1) / 32)
+#define DILITHIUM87_OMEGA 75
+
+#define DILITHIUM87_CTILDE_BYTES (DILITHIUM87_LAMBDA * 2 / 8)
+#define DILITHIUM87_POLYT1_PACKEDBYTES 320
+#define DILITHIUM87_POLYT0_PACKEDBYTES 416
+#define DILITHIUM87_POLYVECH_PACKEDBYTES (DILITHIUM87_OMEGA + DILITHIUM87_K)
+
+#if DILITHIUM87_GAMMA1 == (1 << 17)
+#define DILITHIUM87_POLYZ_PACKEDBYTES 576
+#elif DILITHIUM87_GAMMA1 == (1 << 19)
+#define DILITHIUM87_POLYZ_PACKEDBYTES 640
+#endif
+
+#if DILITHIUM87_GAMMA2 == (DILITHIUM_Q - 1) / 88
+#define DILITHIUM87_POLYW1_PACKEDBYTES 192
+#elif DILITHIUM87_GAMMA2 == (DILITHIUM_Q - 1) / 32
+#define DILITHIUM87_POLYW1_PACKEDBYTES 128
+#endif
+
+#if DILITHIUM87_ETA == 2
+#define DILITHIUM87_POLYETA_PACKEDBYTES 96
+#elif DILITHIUM87_ETA == 4
+#define DILITHIUM87_POLYETA_PACKEDBYTES 128
+#endif
+
+/*
+ * Sizes of the different Dilithium buffer types.
+ *
+ * WARNING: Do not use these defines in your code. If you need the sizes of
+ * the different variable sizes, use sizeof of the different variable structs or
+ * use the different *_size functions documented below to retrieve the data size
+ * of a particular Dilithium component.
+ */
+#define DILITHIUM87_PUBLICKEYBYTES			\
+	(DILITHIUM_SEEDBYTES +				\
+	 DILITHIUM87_K * DILITHIUM87_POLYT1_PACKEDBYTES)
+#define DILITHIUM87_SECRETKEYBYTES			\
+	(2 * DILITHIUM_SEEDBYTES + DILITHIUM_TRBYTES +	\
+	 DILITHIUM87_L * DILITHIUM87_POLYETA_PACKEDBYTES +	\
+	 DILITHIUM87_K * DILITHIUM87_POLYETA_PACKEDBYTES +	\
+	 DILITHIUM87_K * DILITHIUM87_POLYT0_PACKEDBYTES)
+
+#define DILITHIUM87_CRYPTO_BYTES				\
+	(DILITHIUM87_CTILDE_BYTES +			\
+	 DILITHIUM87_L * DILITHIUM87_POLYZ_PACKEDBYTES +	\
+	 DILITHIUM87_POLYVECH_PACKEDBYTES)
+
+#ifndef __ASSEMBLER__
+/*
+ * @brief Dilithium secret key
+ */
+struct dilithium_87_sk {
+	uint8_t sk[DILITHIUM87_SECRETKEYBYTES];
+};
+
+/*
+ * @brief Dilithium public key
+ */
+struct dilithium_87_pk {
+	uint8_t pk[DILITHIUM87_PUBLICKEYBYTES];
+};
+
+/*
+ * @brief Dilithium signature
+ */
+struct dilithium_87_sig {
+	uint8_t sig[DILITHIUM87_CRYPTO_BYTES];
+};
+
+/*
+ * The alignment is based on largest alignment of a polyvecl typedef - this is
+ * the AVX2 definition.
+ */
+#define DILITHIUM_AHAT_ALIGNMENT (32)
+
+/* Size of the AHat matrix for ML-DSA 87 */
+#define DILITHIUM_87_AHAT_SIZE					\
+	(256 * sizeof(int32_t) * DILITHIUM87_K * DILITHIUM87_L)
+
+/*
+ * @brief Zeroize Dilithium context allocated with
+ *	  DILITHIUM87_CTX_ON_STACK dilithium_ed25519_alloc
+ *
+ * @param [in] ctx Dilithium context to be zeroized
+ */
+static inline void dilithium_87_ctx_zero(struct dilithium_ctx *ctx)
+{
+	if (!ctx)
+		return;
+	dilithium_hash_clear(ctx);
+	if (ctx->ahat) {
+		memzero_explicit(ctx->ahat, ctx->ahat_size);
+		ctx->ahat_expanded = 0;
+	}
+}
+
+/*
+ * @brief Allocate Dilithium stream context on heap
+ *
+ * @param [out] ctx Allocated Dilithium stream context
+ *
+ * @return: 0 on success, < 0 on error
+ */
+struct dilithium_ctx *dilithium_87_ctx_alloc(void);
+
+/*
+ * @brief Allocate Dilithium stream context on heap including additional
+ * parameter relevant for the signature operation.
+ *
+ * \note See \p DILITHIUM_87_CTX_ON_STACK_AHAT for details.
+ *
+ * @param [out] ctx Allocated Dilithium stream context
+ *
+ * @return: 0 on success, < 0 on error
+ */
+struct dilithium_ctx *dilithium_87_ctx_alloc_ahat(void);
+
+/*
+ * @brief Zeroize and free Dilithium stream context
+ *
+ * @param [in] ctx Dilithium stream context to be zeroized and freed
+ */
+void dilithium_87_ctx_zero_free(struct dilithium_ctx *ctx);
+
+/*
+ * @brief Return the size of the Dilithium secret key.
+ */
+static inline unsigned int dilithium_87_sk_size(void)
+{
+	return sizeof_field(struct dilithium_87_sk, sk);
+}
+
+/*
+ * @brief Return the size of the Dilithium public key.
+ */
+static inline unsigned int dilithium_87_pk_size(void)
+{
+	return sizeof_field(struct dilithium_87_pk, pk);
+}
+
+/*
+ * @brief Return the size of the Dilithium signature.
+ */
+static inline unsigned int dilithium_87_sig_size(void)
+{
+	return sizeof_field(struct dilithium_87_sig, sig);
+}
+
+int dilithium_87_pk_load(struct dilithium_87_pk *pk,
+			 const uint8_t *src_key, size_t src_key_len);
+int dilithium_87_sig_load(struct dilithium_87_sig *sig,
+			  const uint8_t *src_sig, size_t src_sig_len);
+int dilithium_87_pk_ptr(uint8_t **dilithium_key, size_t *dilithium_key_len,
+			struct dilithium_87_pk *pk);
+int dilithium_87_sig_ptr(uint8_t **dilithium_sig, size_t *dilithium_sig_len,
+			 struct dilithium_87_sig *sig);
+
+/*
+ * @brief Verifies ML-DSA signature in one shot
+ *
+ * @param [in] sig pointer to input signature
+ * @param [in] m pointer to message
+ * @param [in] mlen length of message
+ * @param [in] pk pointer to bit-packed public key
+ *
+ * @return 0 if signature could be verified correctly and -EBADMSG when
+ * signature cannot be verified, < 0 on other errors
+ */
+int dilithium_87_verify(const struct dilithium_87_sig *sig, const uint8_t *m,
+			size_t mlen, const struct dilithium_87_pk *pk);
+
+/*
+ * @brief Verifies signature with Dilithium context in one shot
+ *
+ * This API allows the caller to provide an arbitrary context buffer which
+ * is hashed together with the message to form the message digest to be signed.
+ *
+ * @param [in] sig pointer to input signature
+ * @param [in] ctx reference to the allocated Dilithium context handle
+ * @param [in] m pointer to message
+ * @param [in] mlen length of message
+ * @param [in] pk pointer to bit-packed public key
+ *
+ * @return 0 if signature could be verified correctly and -EBADMSG when
+ * signature cannot be verified, < 0 on other errors
+ */
+int dilithium_87_verify_ctx(const struct dilithium_87_sig *sig,
+			    struct dilithium_ctx *ctx,
+			    const uint8_t *m, size_t mlen,
+			    const struct dilithium_87_pk *pk);
+
+/*
+ * @brief Initializes a signature verification operation
+ *
+ * This call is intended to support messages that are located in non-contiguous
+ * places and even becomes available at different times. This call is to be
+ * used together with the dilithium_verify_update and
+ * dilithium_verify_final.
+ *
+ * @param [in,out] ctx pointer to an allocated Dilithium context
+ * @param [in] pk pointer to bit-packed public key
+ *
+ * @return 0 (success) or < 0 on error; -EOPNOTSUPP is returned if a different
+ *	   hash than lc_shake256 is used.
+ */
+int dilithium_87_verify_init(struct dilithium_ctx *ctx,
+			     const struct dilithium_87_pk *pk);
+
+/*
+ * @brief Add more data to an already initialized signature state
+ *
+ * This call is intended to support messages that are located in non-contiguous
+ * places and even becomes available at different times. This call is to be
+ * used together with the dilithium_verify_init and
+ * dilithium_verify_final.
+ *
+ * @param [in,out] ctx pointer to Dilithium context that was initialized with
+ *			    dilithium_sign_init
+ * @param [in] m pointer to message to be signed
+ * @param [in] mlen length of message
+ *
+ * @return 0 (success) or < 0 on error
+ */
+int dilithium_87_verify_update(struct dilithium_ctx *ctx, const uint8_t *m,
+			       size_t mlen);
+
+/*
+ * @brief Verifies signature
+ *
+ * @param [in] sig pointer to output signature
+ * @param [in] ctx pointer to Dilithium context that was initialized with
+ *			dilithium_sign_init and filled with
+ *			dilithium_sign_update
+ * @param [in] pk pointer to bit-packed public key
+ *
+ * @return 0 if signature could be verified correctly and -EBADMSG when
+ * signature cannot be verified, < 0 on other errors
+ */
+int dilithium_87_verify_final(const struct dilithium_87_sig *sig,
+			      struct dilithium_ctx *ctx,
+			      const struct dilithium_87_pk *pk);
+
+#endif /* __ASSEMBLER__ */
+
+#endif /* DILITHIUM_87_H */
diff --git a/lib/crypto/mldsa/dilithium_common.c b/lib/crypto/mldsa/dilithium_common.c
new file mode 100644
index 000000000000..7124d7387a6d
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_common.c
@@ -0,0 +1,117 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#include <linux/module.h>
+#include "dilithium.h"
+
+MODULE_LICENSE("Dual BSD/GPL");
+MODULE_DESCRIPTION("Leancrypto ML-DSA/Dilithium common bits");
+MODULE_AUTHOR("Stephan Mueller <smueller@chronox.de>");
+
+#define cround(x) round_up((x), umax(DILITHIUM_AHAT_ALIGNMENT, CRYPTO_MINALIGN))
+
+/*
+ * dilithium_ctx_alloc - Allocate ML-DSA context
+ * @ctx: Dilithium context pointer
+ *
+ * Return: Pointer to the allocated context or error code on failure.
+ *
+ * Context: Process context.  May sleep to allocate memory.
+ */
+struct dilithium_ctx *dilithium_ctx_alloc(void)
+{
+	struct dilithium_ctx *ctx;
+
+	ctx = kzalloc(cround(sizeof(struct dilithium_ctx)),
+		      GFP_KERNEL);
+	if (!ctx)
+		return ERR_PTR(-ENOMEM);
+
+	return ctx;
+}
+EXPORT_SYMBOL(dilithium_ctx_alloc);
+
+/*
+ * dilithium_ctx_alloc_ahat - Allocate ML-DSA context with key representation
+ * @ctx: Dilithium context pointer
+ *
+ * Return: Pointer to the allocated context or error code on failure.
+ *
+ * Context: Process context.  May sleep to allocate memory.
+ */
+struct dilithium_ctx *dilithium_ctx_alloc_ahat(enum dilithium_type type)
+{
+	struct dilithium_ctx *ctx;
+	size_t ahat_size;
+	void *p;
+
+	switch (type) {
+#ifdef CONFIG_CRYPTO_LIB_MLDSA_44
+	case DILITHIUM_44:
+		ahat_size = DILITHIUM_44_AHAT_SIZE;
+		break;
+#endif
+#ifdef CONFIG_CRYPTO_LIB_MLDSA_65
+	case DILITHIUM_65:
+		ahat_size = DILITHIUM_65_AHAT_SIZE;
+		break;
+#endif
+#ifdef CONFIG_CRYPTO_LIB_MLDSA_87
+	case DILITHIUM_87:
+		ahat_size = DILITHIUM_87_AHAT_SIZE;
+		break;
+#endif
+	default:
+		WARN_ON(1);
+		return ERR_PTR(-EINVAL);
+	}
+
+	p = kzalloc(cround(sizeof(struct dilithium_ctx)) +
+		    cround(ahat_size),
+		    GFP_KERNEL);
+	if (!p)
+		return ERR_PTR(-ENOMEM);
+
+	ctx = p;
+	p += cround(sizeof(struct dilithium_ctx));
+	ctx->ahat = p;
+	ctx->ahat_size = ahat_size;
+	p += cround(ahat_size);
+	return ctx;
+}
+EXPORT_SYMBOL(dilithium_ctx_alloc_ahat);
+
+/*
+ * dilithium_ctx_zero_free - Zeroizes and frees Dilithium
+ * @ctx: Dilithium context pointer
+ *
+ * Context: Any context.
+ */
+void dilithium_ctx_zero_free(struct dilithium_ctx *ctx)
+{
+	kfree_sensitive(ctx);
+}
+EXPORT_SYMBOL(dilithium_ctx_zero_free);
diff --git a/lib/crypto/mldsa/dilithium_debug.h b/lib/crypto/mldsa/dilithium_debug.h
new file mode 100644
index 000000000000..599a435633ae
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_debug.h
@@ -0,0 +1,49 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2023 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef DILITHIUM_DEBUG_H
+#define DILITHIUM_DEBUG_H
+
+#include "dilithium_type.h"
+
+static inline void dilithium_print_buffer(const uint8_t *buffer,
+					  const size_t bufferlen,
+					  const char *explanation)
+{
+}
+
+static inline void dilithium_print_polyvecl_k(polyvecl mat[DILITHIUM_K],
+					      const char *explanation)
+{
+}
+
+static inline void dilithium_print_polyvecl(polyvecl *polyvec,
+					    const char *explanation)
+{
+}
+
+static inline void dilithium_print_polyveck(polyveck *polyvec,
+					    const char *explanation)
+{
+}
+
+static inline void dilithium_print_poly(poly *vec, const char *explanation)
+{
+}
+
+#endif /* DILITHIUM_DEBUG_H */
diff --git a/lib/crypto/mldsa/dilithium_ntt.c b/lib/crypto/mldsa/dilithium_ntt.c
new file mode 100644
index 000000000000..b2834a2dd501
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_ntt.c
@@ -0,0 +1,89 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#include "dilithium_ntt.h"
+#include "dilithium_reduce.h"
+
+/*
+ * @brief ntt - Forward NTT, in-place. No modular reduction is performed after
+ *		additions or subtractions. Output vector is in bitreversed
+ *		order.
+ *
+ * @param [in,out] p input/output coefficient array
+ */
+void ntt(int32_t a[DILITHIUM_N])
+{
+	unsigned int len, start, j, k;
+	int32_t zeta, t;
+
+	k = 0;
+
+	for (len = 128; len > 0; len >>= 1) {
+		for (start = 0; start < DILITHIUM_N; start = j + len) {
+			zeta = dilithium_zetas[++k];
+			for (j = start; j < start + len; ++j) {
+				t = montgomery_reduce((int64_t)zeta *
+						      a[j + len]);
+				a[j + len] = a[j] - t;
+				a[j] = a[j] + t;
+			}
+		}
+	}
+}
+
+/*
+ * @brief invntt_tomont - Inverse NTT and multiplication by Montgomery factor
+ *			  2^32. In-place. No modular reductions after additions
+ *			  or subtractions; input coefficients need to be smaller
+ *			  than Q in absolute value. Output coefficient are
+ *			  smaller than Q in absolute value.
+ *
+ * @param [in,out] p input/output coefficient array
+ */
+void invntt_tomont(int32_t a[DILITHIUM_N])
+{
+	unsigned int start, len, j, k;
+	int32_t t, zeta;
+	const int32_t f = 41978; // mont^2/256
+
+	k = 256;
+
+	for (len = 1; len < DILITHIUM_N; len <<= 1) {
+		for (start = 0; start < DILITHIUM_N; start = j + len) {
+			zeta = -dilithium_zetas[--k];
+			for (j = start; j < start + len; ++j) {
+				t = a[j];
+				a[j] = t + a[j + len];
+				a[j + len] = t - a[j + len];
+				a[j + len] = montgomery_reduce((int64_t)zeta *
+							       a[j + len]);
+			}
+		}
+	}
+
+	for (j = 0; j < DILITHIUM_N; ++j)
+		a[j] = montgomery_reduce((int64_t)f * a[j]);
+}
diff --git a/lib/crypto/mldsa/dilithium_ntt.h b/lib/crypto/mldsa/dilithium_ntt.h
new file mode 100644
index 000000000000..5dfea3a936cd
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_ntt.h
@@ -0,0 +1,35 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#ifndef DILITHIUM_NTT_H
+#define DILITHIUM_NTT_H
+
+#include "dilithium_type.h"
+
+void ntt(int32_t a[DILITHIUM_N]);
+void invntt_tomont(int32_t a[DILITHIUM_N]);
+
+#endif /* DILITHIUM_NTT_H */
diff --git a/lib/crypto/mldsa/dilithium_pack.h b/lib/crypto/mldsa/dilithium_pack.h
new file mode 100644
index 000000000000..5db65014b405
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_pack.h
@@ -0,0 +1,119 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#ifndef DILITHIUM_PACK_H
+#define DILITHIUM_PACK_H
+
+/*******************************************************************************
+ * Pack / Unpack public key
+ ******************************************************************************/
+
+static inline void unpack_pk_rho(uint8_t rho[DILITHIUM_SEEDBYTES],
+				 const struct dilithium_pk *pk)
+{
+	memcpy(rho, pk->pk, DILITHIUM_SEEDBYTES);
+}
+
+static inline void unpack_pk_t1(polyveck *t1, const struct dilithium_pk *pk)
+{
+	unsigned int i;
+	const uint8_t *pubkey = pk->pk + DILITHIUM_SEEDBYTES;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		polyt1_unpack(&t1->vec[i],
+			      pubkey + i * DILITHIUM_POLYT1_PACKEDBYTES);
+}
+
+/*
+ * @brief unpack_sig_z - Unpack z part of signature sig = (c, z, h).
+ *
+ * NOTE: The c value is not unpacked as it can be used right from the signature.
+ *	 To access it, a caller simply needs to use the first
+ *	 DILITHIUM_CTILDE_BYTES of the signature.
+ *
+ * @param [out] z pointer to output vector z
+ * @param [in] sig signature
+ */
+static inline void unpack_sig_z(polyvecl *z, const struct dilithium_sig *sig)
+{
+	unsigned int i;
+	/* Skip c */
+	const uint8_t *signature = sig->sig + DILITHIUM_CTILDE_BYTES;
+
+	for (i = 0; i < DILITHIUM_L; ++i)
+		polyz_unpack(&z->vec[i],
+			     signature + i * DILITHIUM_POLYZ_PACKEDBYTES);
+}
+
+/*
+ * @brief unpack_sig - Unpack h value of signature sig = (c, z, h).
+ *
+ * NOTE: The c value is not unpacked as it can be used right from the signature.
+ *	 To access it, a caller simply needs to use the first
+ *	 DILITHIUM_CTILDE_BYTES of the signature.
+ *
+ * @param [out] h pointer to output hint vector h
+ * @param [in] sig signature
+ *
+ * @return 1 in case of malformed signature; otherwise 0.
+ */
+static inline int unpack_sig_h(polyveck *h, const struct dilithium_sig *sig)
+{
+	unsigned int i, j, k;
+	/* Skip c */
+	const uint8_t *signature =
+		sig->sig + DILITHIUM_CTILDE_BYTES +
+		DILITHIUM_L * DILITHIUM_POLYZ_PACKEDBYTES;
+
+	/* Decode h */
+	k = 0;
+	for (i = 0; i < DILITHIUM_K; ++i) {
+		for (j = 0; j < DILITHIUM_N; ++j)
+			h->vec[i].coeffs[j] = 0;
+
+		if (signature[DILITHIUM_OMEGA + i] < k ||
+		    signature[DILITHIUM_OMEGA + i] > DILITHIUM_OMEGA)
+			return 1;
+
+		for (j = k; j < signature[DILITHIUM_OMEGA + i]; ++j) {
+			/* Coefficients are ordered for strong unforgeability */
+			if (j > k && signature[j] <= signature[j - 1])
+				return 1;
+			h->vec[i].coeffs[signature[j]] = 1;
+		}
+
+		k = signature[DILITHIUM_OMEGA + i];
+	}
+
+	/* Extra indices are zero for strong unforgeability */
+	for (j = k; j < DILITHIUM_OMEGA; ++j)
+		if (signature[j])
+			return 1;
+
+	return 0;
+}
+
+#endif /* DILITHIUM_PACK_H */
diff --git a/lib/crypto/mldsa/dilithium_poly.c b/lib/crypto/mldsa/dilithium_poly.c
new file mode 100644
index 000000000000..c5c3394ab08c
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_poly.c
@@ -0,0 +1,377 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#include "dilithium_poly.h"
+#include "dilithium_poly_common.h"
+#include "dilithium_service_helpers.h"
+
+/*
+ * @brief poly_chknorm - Check infinity norm of polynomial against given bound.
+ *			 Assumes input coefficients were reduced by reduce32().
+ *
+ * @param [in] a pointer to polynomial
+ * @param [in] B norm bound
+ *
+ * @return 0 if norm is strictly smaller than B <= (Q-1)/8 and 1 otherwise.
+ */
+int poly_chknorm(const poly *a, int32_t B)
+{
+	unsigned int i;
+	int32_t t;
+
+	if (B > (DILITHIUM_Q - 1) / 8)
+		return 1;
+
+	/*
+	 * It is ok to leak which coefficient violates the bound since
+	 * the probability for each coefficient *is independent of secret
+	 * data but we must not leak the sign of the centralized representative.
+	 */
+	for (i = 0; i < DILITHIUM_N; ++i) {
+		/* Absolute value */
+		t = a->coeffs[i] >> 31;
+		t = a->coeffs[i] - (t & 2 * a->coeffs[i]);
+
+		if (t >= B)
+			return 1;
+	}
+
+	return 0;
+}
+
+/*
+ * @brief poly_uniform - Sample polynomial with uniformly random coefficients
+ *			 in [0,Q-1] by performing rejection sampling on the
+ *			 output stream of SHAKE128(seed|nonce).
+ *
+ * @param [out] a pointer to output polynomial
+ * @param [in] seed byte array with seed of length DILITHIUM_SEEDBYTES
+ * @param [in] nonce 2-byte nonce
+ */
+void poly_uniform(poly *a, const uint8_t seed[DILITHIUM_SEEDBYTES],
+		  __le16 nonce, void *ws_buf)
+{
+	struct shake_ctx hash_ctx;
+	unsigned int i, ctr, off;
+	unsigned int buflen = POLY_UNIFORM_NBLOCKS * SHAKE128_BLOCK_SIZE;
+	uint8_t *buf = ws_buf;
+
+	shake128_init(&hash_ctx);
+	shake_update(&hash_ctx, seed, DILITHIUM_SEEDBYTES);
+	shake_update(&hash_ctx, (uint8_t *)&nonce, sizeof(nonce));
+	shake_squeeze(&hash_ctx, buf, buflen);
+
+	ctr = rej_uniform(a->coeffs, DILITHIUM_N, buf, buflen);
+
+	while (ctr < DILITHIUM_N) {
+		off = buflen % 3;
+		for (i = 0; i < off; ++i)
+			buf[i] = buf[buflen - off + i];
+
+		shake_squeeze(&hash_ctx, buf + off, SHAKE128_BLOCK_SIZE);
+		buflen = DILITHIUM_SEEDBYTES + off;
+		ctr += rej_uniform(a->coeffs + ctr, DILITHIUM_N - ctr, buf,
+				   buflen);
+	}
+
+	shake_zeroize_ctx(&hash_ctx);
+}
+
+/*
+ * @brief poly_uniform_gamma1 - Sample polynomial with uniformly random
+ *				coefficients in [-(GAMMA1 - 1), GAMMA1] by
+ *				unpacking output stream of
+ *				SHAKE256(seed|nonce).
+ *
+ * @param [out] a pointer to output polynomial
+ * @param [in] seed: byte array with seed of length DILITHIUM_CRHBYTES
+ * @param nonce 16-bit nonce
+ */
+void poly_uniform_gamma1(poly *a, const uint8_t seed[DILITHIUM_CRHBYTES],
+			 uint16_t nonce, void *ws_buf)
+{
+	struct shake_ctx hash_ctx;
+
+	shake256_init(&hash_ctx);
+	shake_update(&hash_ctx, seed, DILITHIUM_CRHBYTES);
+	shake_update(&hash_ctx, (uint8_t *)&nonce, sizeof(nonce));
+	shake_squeeze(&hash_ctx, ws_buf, POLY_UNIFORM_GAMMA1_BYTES);
+	shake_zeroize_ctx(&hash_ctx);
+
+	polyz_unpack(a, ws_buf);
+}
+
+/*
+ * @brief poly_challenge - Implementation of H. Samples polynomial with TAU
+ *			   nonzero coefficients in {-1,1} using the output
+ *			   stream of SHAKE256(seed).
+ *
+ * @param [out] c pointer to output polynomial
+ * @param [in] mu byte array containing seed of length DILITHIUM_CTILDE_BYTES
+ */
+void poly_challenge(poly *c, const uint8_t seed[DILITHIUM_CTILDE_BYTES],
+		    void *ws_buf)
+{
+	struct shake_ctx hash_ctx;
+	unsigned int i, b, pos;
+	uint64_t signs;
+	uint8_t *buf = ws_buf;
+
+	shake256_init(&hash_ctx);
+	shake_update(&hash_ctx, seed, DILITHIUM_CTILDE_BYTES);
+	shake_squeeze(&hash_ctx, buf, POLY_CHALLENGE_BYTES);
+
+	signs = 0;
+	for (i = 0; i < 8; ++i)
+		signs |= (uint64_t)buf[i] << 8 * i;
+	pos = 8;
+
+	for (i = 0; i < DILITHIUM_N; ++i)
+		c->coeffs[i] = 0;
+
+	for (i = DILITHIUM_N - DILITHIUM_TAU; i < DILITHIUM_N; ++i) {
+		do {
+			if (pos >= SHAKE256_BLOCK_SIZE) {
+				shake_squeeze(&hash_ctx, buf, POLY_CHALLENGE_BYTES);
+				pos = 0;
+			}
+
+			b = buf[pos++];
+		} while (b > i);
+
+		c->coeffs[i] = c->coeffs[b];
+		c->coeffs[b] = 1 - (int32_t)(2 * (signs & 1));
+		signs >>= 1;
+	}
+
+	shake_zeroize_ctx(&hash_ctx);
+}
+
+/*
+ * @brief polyeta_unpack - Unpack polynomial with coefficients in [-ETA,ETA].
+ *
+ * @param [out] r pointer to output polynomial
+ * @param [in] a byte array with bit-packed polynomial
+ */
+void polyeta_unpack(poly *r, const uint8_t *a)
+{
+	unsigned int i;
+
+#if DILITHIUM_ETA == 2
+	for (i = 0; i < DILITHIUM_N / 8; ++i) {
+		r->coeffs[8 * i + 0] = (a[3 * i + 0] >> 0) & 7;
+		r->coeffs[8 * i + 1] = (a[3 * i + 0] >> 3) & 7;
+		r->coeffs[8 * i + 2] =
+			((a[3 * i + 0] >> 6) | (a[3 * i + 1] << 2)) & 7;
+		r->coeffs[8 * i + 3] = (a[3 * i + 1] >> 1) & 7;
+		r->coeffs[8 * i + 4] = (a[3 * i + 1] >> 4) & 7;
+		r->coeffs[8 * i + 5] =
+			((a[3 * i + 1] >> 7) | (a[3 * i + 2] << 1)) & 7;
+		r->coeffs[8 * i + 6] = (a[3 * i + 2] >> 2) & 7;
+		r->coeffs[8 * i + 7] = (a[3 * i + 2] >> 5) & 7;
+
+		r->coeffs[8 * i + 0] = DILITHIUM_ETA - r->coeffs[8 * i + 0];
+		r->coeffs[8 * i + 1] = DILITHIUM_ETA - r->coeffs[8 * i + 1];
+		r->coeffs[8 * i + 2] = DILITHIUM_ETA - r->coeffs[8 * i + 2];
+		r->coeffs[8 * i + 3] = DILITHIUM_ETA - r->coeffs[8 * i + 3];
+		r->coeffs[8 * i + 4] = DILITHIUM_ETA - r->coeffs[8 * i + 4];
+		r->coeffs[8 * i + 5] = DILITHIUM_ETA - r->coeffs[8 * i + 5];
+		r->coeffs[8 * i + 6] = DILITHIUM_ETA - r->coeffs[8 * i + 6];
+		r->coeffs[8 * i + 7] = DILITHIUM_ETA - r->coeffs[8 * i + 7];
+	}
+#elif DILITHIUM_ETA == 4
+	for (i = 0; i < DILITHIUM_N / 2; ++i) {
+		r->coeffs[2 * i + 0] = a[i] & 0x0F;
+		r->coeffs[2 * i + 1] = a[i] >> 4;
+		r->coeffs[2 * i + 0] = DILITHIUM_ETA - r->coeffs[2 * i + 0];
+		r->coeffs[2 * i + 1] = DILITHIUM_ETA - r->coeffs[2 * i + 1];
+	}
+#else
+#error "Undefined DILITHIUM_ETA"
+#endif
+}
+
+/*
+ * @brief polyt0_unpack - Unpack polynomial t0 with coefficients in
+ *			  ]-2^{D-1}, 2^{D-1}].
+ *
+ * @param [out] r pointer to output polynomial
+ * @param [in] a byte array with bit-packed polynomial
+ */
+void polyt0_unpack(poly *r, const uint8_t *a)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_N / 8; ++i) {
+		r->coeffs[8 * i + 0] = a[13 * i + 0];
+		r->coeffs[8 * i + 0] |= (int32_t)a[13 * i + 1] << 8;
+		r->coeffs[8 * i + 0] &= 0x1FFF;
+
+		r->coeffs[8 * i + 1] = a[13 * i + 1] >> 5;
+		r->coeffs[8 * i + 1] |= (int32_t)a[13 * i + 2] << 3;
+		r->coeffs[8 * i + 1] |= (int32_t)a[13 * i + 3] << 11;
+		r->coeffs[8 * i + 1] &= 0x1FFF;
+
+		r->coeffs[8 * i + 2] = a[13 * i + 3] >> 2;
+		r->coeffs[8 * i + 2] |= (int32_t)a[13 * i + 4] << 6;
+		r->coeffs[8 * i + 2] &= 0x1FFF;
+
+		r->coeffs[8 * i + 3] = a[13 * i + 4] >> 7;
+		r->coeffs[8 * i + 3] |= (int32_t)a[13 * i + 5] << 1;
+		r->coeffs[8 * i + 3] |= (int32_t)a[13 * i + 6] << 9;
+		r->coeffs[8 * i + 3] &= 0x1FFF;
+
+		r->coeffs[8 * i + 4] = a[13 * i + 6] >> 4;
+		r->coeffs[8 * i + 4] |= (int32_t)a[13 * i + 7] << 4;
+		r->coeffs[8 * i + 4] |= (int32_t)a[13 * i + 8] << 12;
+		r->coeffs[8 * i + 4] &= 0x1FFF;
+
+		r->coeffs[8 * i + 5] = a[13 * i + 8] >> 1;
+		r->coeffs[8 * i + 5] |= (int32_t)a[13 * i + 9] << 7;
+		r->coeffs[8 * i + 5] &= 0x1FFF;
+
+		r->coeffs[8 * i + 6] = a[13 * i + 9] >> 6;
+		r->coeffs[8 * i + 6] |= (int32_t)a[13 * i + 10] << 2;
+		r->coeffs[8 * i + 6] |= (int32_t)a[13 * i + 11] << 10;
+		r->coeffs[8 * i + 6] &= 0x1FFF;
+
+		r->coeffs[8 * i + 7] = a[13 * i + 11] >> 3;
+		r->coeffs[8 * i + 7] |= (int32_t)a[13 * i + 12] << 5;
+		r->coeffs[8 * i + 7] &= 0x1FFF;
+
+		r->coeffs[8 * i + 0] =
+			(1 << (DILITHIUM_D - 1)) - r->coeffs[8 * i + 0];
+		r->coeffs[8 * i + 1] =
+			(1 << (DILITHIUM_D - 1)) - r->coeffs[8 * i + 1];
+		r->coeffs[8 * i + 2] =
+			(1 << (DILITHIUM_D - 1)) - r->coeffs[8 * i + 2];
+		r->coeffs[8 * i + 3] =
+			(1 << (DILITHIUM_D - 1)) - r->coeffs[8 * i + 3];
+		r->coeffs[8 * i + 4] =
+			(1 << (DILITHIUM_D - 1)) - r->coeffs[8 * i + 4];
+		r->coeffs[8 * i + 5] =
+			(1 << (DILITHIUM_D - 1)) - r->coeffs[8 * i + 5];
+		r->coeffs[8 * i + 6] =
+			(1 << (DILITHIUM_D - 1)) - r->coeffs[8 * i + 6];
+		r->coeffs[8 * i + 7] =
+			(1 << (DILITHIUM_D - 1)) - r->coeffs[8 * i + 7];
+	}
+}
+
+/*
+ * @brief polyz_unpack - Unpack polynomial z with coefficients
+ *			 in [-(GAMMA1 - 1), GAMMA1].
+ *
+ * @param [out] r pointer to output polynomial
+ * @param [in] a byte array with bit-packed polynomial
+ */
+void polyz_unpack(poly *r, const uint8_t *a)
+{
+	unsigned int i;
+
+#if DILITHIUM_GAMMA1 == (1 << 17)
+	for (i = 0; i < DILITHIUM_N / 4; ++i) {
+		r->coeffs[4 * i + 0] = a[9 * i + 0];
+		r->coeffs[4 * i + 0] |= (int32_t)a[9 * i + 1] << 8;
+		r->coeffs[4 * i + 0] |= (int32_t)a[9 * i + 2] << 16;
+		r->coeffs[4 * i + 0] &= 0x3FFFF;
+
+		r->coeffs[4 * i + 1] = a[9 * i + 2] >> 2;
+		r->coeffs[4 * i + 1] |= (int32_t)a[9 * i + 3] << 6;
+		r->coeffs[4 * i + 1] |= (int32_t)a[9 * i + 4] << 14;
+		r->coeffs[4 * i + 1] &= 0x3FFFF;
+
+		r->coeffs[4 * i + 2] = a[9 * i + 4] >> 4;
+		r->coeffs[4 * i + 2] |= (int32_t)a[9 * i + 5] << 4;
+		r->coeffs[4 * i + 2] |= (int32_t)a[9 * i + 6] << 12;
+		r->coeffs[4 * i + 2] &= 0x3FFFF;
+
+		r->coeffs[4 * i + 3] = a[9 * i + 6] >> 6;
+		r->coeffs[4 * i + 3] |= (int32_t)a[9 * i + 7] << 2;
+		r->coeffs[4 * i + 3] |= (int32_t)a[9 * i + 8] << 10;
+		r->coeffs[4 * i + 3] &= 0x3FFFF;
+
+		r->coeffs[4 * i + 0] =
+			DILITHIUM_GAMMA1 - r->coeffs[4 * i + 0];
+		r->coeffs[4 * i + 1] =
+			DILITHIUM_GAMMA1 - r->coeffs[4 * i + 1];
+		r->coeffs[4 * i + 2] =
+			DILITHIUM_GAMMA1 - r->coeffs[4 * i + 2];
+		r->coeffs[4 * i + 3] =
+			DILITHIUM_GAMMA1 - r->coeffs[4 * i + 3];
+	}
+#elif DILITHIUM_GAMMA1 == (1 << 19)
+	for (i = 0; i < DILITHIUM_N / 2; ++i) {
+		r->coeffs[2 * i + 0] = a[5 * i + 0];
+		r->coeffs[2 * i + 0] |= (int32_t)a[5 * i + 1] << 8;
+		r->coeffs[2 * i + 0] |= (int32_t)a[5 * i + 2] << 16;
+		r->coeffs[2 * i + 0] &= 0xFFFFF;
+
+		r->coeffs[2 * i + 1] = a[5 * i + 2] >> 4;
+		r->coeffs[2 * i + 1] |= (int32_t)a[5 * i + 3] << 4;
+		r->coeffs[2 * i + 1] |= (int32_t)a[5 * i + 4] << 12;
+		r->coeffs[2 * i + 1] &= 0xFFFFF;
+
+		r->coeffs[2 * i + 0] =
+			DILITHIUM_GAMMA1 - r->coeffs[2 * i + 0];
+		r->coeffs[2 * i + 1] =
+			DILITHIUM_GAMMA1 - r->coeffs[2 * i + 1];
+	}
+#else
+#error "Undefined Gamma"
+#endif
+}
+
+/*
+ * @brief polyw1_pack - Bit-pack polynomial w1 with coefficients in [0,15] or
+ *			[0,43]. Input coefficients are assumed to be standard
+ *			representatives.
+ *
+ * @param [out] r pointer to output byte array with at least
+ *		  DILITHIUM_POLYW1_PACKEDBYTES bytes
+ * @param [in] a pointer to input polynomial
+ */
+void polyw1_pack(uint8_t *r, const poly *a)
+{
+	unsigned int i;
+
+#if DILITHIUM_GAMMA2 == (DILITHIUM_Q - 1) / 88
+	for (i = 0; i < DILITHIUM_N / 4; ++i) {
+		r[3 * i + 0] = (uint8_t)(a->coeffs[4 * i + 0]);
+		r[3 * i + 0] |= (uint8_t)(a->coeffs[4 * i + 1] << 6);
+		r[3 * i + 1] = (uint8_t)(a->coeffs[4 * i + 1] >> 2);
+		r[3 * i + 1] |= (uint8_t)(a->coeffs[4 * i + 2] << 4);
+		r[3 * i + 2] = (uint8_t)(a->coeffs[4 * i + 2] >> 4);
+		r[3 * i + 2] |= (uint8_t)(a->coeffs[4 * i + 3] << 2);
+	}
+#elif DILITHIUM_GAMMA2 == (DILITHIUM_Q - 1) / 32
+	for (i = 0; i < DILITHIUM_N / 2; ++i)
+		r[i] = (uint8_t)(a->coeffs[2 * i + 0] |
+				 (a->coeffs[2 * i + 1] << 4));
+#else
+#error "Undefined Gamma"
+#endif
+}
diff --git a/lib/crypto/mldsa/dilithium_poly.h b/lib/crypto/mldsa/dilithium_poly.h
new file mode 100644
index 000000000000..4f2b0d89cf62
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_poly.h
@@ -0,0 +1,181 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#ifndef DILITHIUM_POLY_H
+#define DILITHIUM_POLY_H
+
+#include "dilithium_type.h"
+#include "dilithium_reduce.h"
+
+typedef struct {
+	int32_t coeffs[DILITHIUM_N];
+} poly;
+
+/*
+ * @brief poly_add - Add polynomials. No modular reduction is performed.
+ *
+ * @param [out] c pointer to output polynomial
+ * @param [in] a pointer to first summand
+ * @param [in] b pointer to second summand
+ */
+static inline void poly_add(poly *c, const poly *a, const poly *b)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_N; ++i)
+		c->coeffs[i] = a->coeffs[i] + b->coeffs[i];
+}
+
+/*
+ * @brief poly_sub - Subtract polynomials. No modular reduction is
+ *		     performed.
+ *
+ * @param [out] c pointer to output polynomial
+ * @param [in] a pointer to first input polynomial
+ * @param [in] b pointer to second input polynomial to be subtraced from first
+ *		 input polynomial
+ */
+static inline void poly_sub(poly *c, const poly *a, const poly *b)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_N; ++i)
+		c->coeffs[i] = a->coeffs[i] - b->coeffs[i];
+}
+
+/*
+ * @brief poly_shiftl - Multiply polynomial by 2^D without modular reduction.
+ *			Assumes input coefficients to be less than 2^{31-D} in
+ *			absolute value.
+ *
+ * @param [in,out] a pointer to input/output polynomial
+ */
+static inline void poly_shiftl(poly *a)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_N; ++i)
+		a->coeffs[i] <<= DILITHIUM_D;
+}
+
+/*
+ * @brief poly_decompose - For all coefficients c of the input polynomial,
+ *			   compute high and low bits c0, c1 such
+ *			   c mod Q = c1*ALPHA + c0 with
+ *			   -ALPHA/2 < c0 <= ALPHA/2 except c1 = (Q-1)/ALPHA
+ *			   where we set c1 = 0 and
+ *			   -ALPHA/2 <= c0 = c mod Q - Q < 0.
+ *			   Assumes coefficients to be standard representatives.
+ *
+ * @param [out] a1 pointer to output polynomial with coefficients c1
+ * @param [out] a0 pointer to output polynomial with coefficients c0
+ * @param [in] a pointer to input polynomial
+ */
+static inline void poly_decompose(poly *a1, poly *a0, const poly *a)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_N; ++i)
+		a1->coeffs[i] = decompose(&a0->coeffs[i], a->coeffs[i]);
+}
+
+/*
+ * @brief poly_make_hint - Compute hint polynomial. The coefficients of which
+ *			   indicate whether the low bits of the corresponding
+ *			   coefficient of the input polynomial overflow into the
+ *			   high bits.
+ *
+ * @param [out] h pointer to output hint polynomial
+ * @param [in] a0 pointer to low part of input polynomial
+ * @param [in] a1 pointer to high part of input polynomial
+ *
+ * @return number of 1 bits.
+ */
+static inline unsigned int poly_make_hint(poly *h, const poly *a0,
+					  const poly *a1)
+{
+	unsigned int i, s = 0;
+
+	for (i = 0; i < DILITHIUM_N; ++i) {
+		h->coeffs[i] = make_hint(a0->coeffs[i], a1->coeffs[i]);
+		s += (unsigned int)h->coeffs[i];
+	}
+
+	return s;
+}
+
+/*
+ * @brief poly_use_hint - Use hint polynomial to correct the high bits of a
+ *			  polynomial.
+ *
+ * @param [out] b pointer to output polynomial with corrected high bits
+ * @param [in] a pointer to input polynomial
+ * @param [in] h pointer to input hint polynomial
+ */
+static inline void poly_use_hint(poly *b, const poly *a, const poly *h)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_N; ++i)
+		b->coeffs[i] = use_hint(a->coeffs[i], h->coeffs[i]);
+}
+
+int poly_chknorm(const poly *a, int32_t B);
+
+#define POLY_UNIFORM_NBLOCKS                                                   \
+	((768 + SHAKE128_BLOCK_SIZE - 1) / SHAKE128_BLOCK_SIZE)
+void poly_uniform(poly *a, const uint8_t seed[DILITHIUM_SEEDBYTES],
+		  __le16 nonce, void *ws_buf);
+
+#if DILITHIUM_ETA == 2
+#define POLY_UNIFORM_ETA_NBLOCKS                                               \
+	((136 + SHAKE256_BLOCK_SIZE - 1) / SHAKE256_BLOCK_SIZE)
+#elif DILITHIUM_ETA == 4
+#define POLY_UNIFORM_ETA_NBLOCKS                                               \
+	((227 + SHAKE256_BLOCK_SIZE - 1) / SHAKE256_BLOCK_SIZE)
+#else
+#error "Undefined DILITHIUM_ETA"
+#endif
+#define POLY_UNIFORM_ETA_BYTES POLY_UNIFORM_ETA_NBLOCKS *SHAKE256_BLOCK_SIZE
+#define POLY_UNIFORM_GAMMA1_NBLOCKS                                            \
+	((DILITHIUM_POLYZ_PACKEDBYTES + SHAKE256_BLOCK_SIZE - 1) /      \
+	 SHAKE256_BLOCK_SIZE)
+#define POLY_UNIFORM_GAMMA1_BYTES                                              \
+	POLY_UNIFORM_GAMMA1_NBLOCKS *SHAKE256_BLOCK_SIZE
+
+#define POLY_CHALLENGE_BYTES SHAKE256_BLOCK_SIZE
+void poly_challenge(poly *c, const uint8_t seed[DILITHIUM_CTILDE_BYTES],
+		    void *ws_buf);
+
+void polyeta_unpack(poly *r, const uint8_t *a);
+
+void polyt0_unpack(poly *r, const uint8_t *a);
+
+void polyz_unpack(poly *r, const uint8_t *a);
+
+void polyw1_pack(uint8_t *r, const poly *a);
+
+#endif /* DILITHIUM_POLY_H */
diff --git a/lib/crypto/mldsa/dilithium_poly_c.h b/lib/crypto/mldsa/dilithium_poly_c.h
new file mode 100644
index 000000000000..5e9bb27a854a
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_poly_c.h
@@ -0,0 +1,141 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2023 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef DILITHIUM_POLY_C_H
+#define DILITHIUM_POLY_C_H
+
+#include "dilithium_ntt.h"
+
+/*
+ * @brief poly_reduce - Inplace reduction of all coefficients of polynomial to
+ *			representative in [-6283009,6283007].
+ *
+ * @param [in,out] a pointer to input/output polynomial
+ */
+static inline void poly_reduce(poly *a)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_N; ++i)
+		a->coeffs[i] = reduce32(a->coeffs[i]);
+}
+
+/*
+ * @brief poly_caddq - For all coefficients of in/out polynomial add Q if
+ *		       coefficient is negative.
+ *
+ * @param [in,out] a pointer to input/output polynomial
+ */
+static inline void poly_caddq(poly *a)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_N; ++i)
+		a->coeffs[i] = caddq(a->coeffs[i]);
+}
+
+/*
+ * @brief poly_pointwise_montgomery - Pointwise multiplication of polynomials in
+ *				      NTT domain representation and
+ *				      multiplication of resulting polynomial
+ *				      by 2^{-32}.
+ *
+ * @param [out] c pointer to output polynomial
+ * @param [in] a pointer to first input polynomial
+ * @param [in] b pointer to second input polynomial
+ */
+static inline void poly_pointwise_montgomery(poly *c, const poly *a,
+					     const poly *b)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_N; ++i)
+		c->coeffs[i] =
+			montgomery_reduce((int64_t)a->coeffs[i] * b->coeffs[i]);
+}
+
+/*
+ * @brief poly_power2round - For all coefficients c of the input polynomial,
+ *			     compute c0, c1 such that c mod Q = c1*2^D + c0
+ *			     with -2^{D-1} < c0 <= 2^{D-1}. Assumes coefficients
+ *			     to be standard representatives.
+ *
+ * @param [out] a1 pointer to output polynomial with coefficients c1
+ * @param [out] a0 pointer to output polynomial with coefficients c0
+ * @param [in] a pointer to input polynomial
+ */
+static inline void poly_power2round(poly *a1, poly *a0, const poly *a)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_N; ++i)
+		a1->coeffs[i] = power2round(&a0->coeffs[i], a->coeffs[i]);
+}
+
+/*
+ * @brief polyt1_unpack - Unpack polynomial t1 with 10-bit coefficients.
+ *			  Output coefficients are standard representatives.
+ *
+ * @param [out] r pointer to output polynomial
+ * @param [in] a byte array with bit-packed polynomial
+ */
+static inline void polyt1_unpack(poly *r, const uint8_t *a)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_N / 4; ++i) {
+		r->coeffs[4 * i + 0] =
+			((a[5 * i + 0] >> 0) | ((uint32_t)a[5 * i + 1] << 8)) &
+			0x3FF;
+		r->coeffs[4 * i + 1] =
+			((a[5 * i + 1] >> 2) | ((uint32_t)a[5 * i + 2] << 6)) &
+			0x3FF;
+		r->coeffs[4 * i + 2] =
+			((a[5 * i + 2] >> 4) | ((uint32_t)a[5 * i + 3] << 4)) &
+			0x3FF;
+		r->coeffs[4 * i + 3] =
+			((a[5 * i + 3] >> 6) | ((uint32_t)a[5 * i + 4] << 2)) &
+			0x3FF;
+	}
+}
+
+/*
+ * @brief poly_ntt - Inplace forward NTT. Coefficients can grow by
+ *		     8*Q in absolute value.
+ *
+ * @param [in,out] a pointer to input/output polynomial
+ */
+static inline void poly_ntt(poly *a)
+{
+	ntt(a->coeffs);
+}
+
+/*
+ * @brief poly_invntt_tomont - Inplace inverse NTT and multiplication by 2^{32}.
+ *			       Input coefficients need to be less than Q in
+ *			       absolute value and output coefficients are again
+ *			       bounded by Q.
+ *
+ * @param [in,out] a pointer to input/output polynomial
+ */
+static inline void poly_invntt_tomont(poly *a)
+{
+	invntt_tomont(a->coeffs);
+}
+
+#endif /* DILITHIUM_POLY_C_H */
diff --git a/lib/crypto/mldsa/dilithium_poly_common.h b/lib/crypto/mldsa/dilithium_poly_common.h
new file mode 100644
index 000000000000..7c7cef28b545
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_poly_common.h
@@ -0,0 +1,35 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#ifndef DILITHIUM_POLY_COMMON_H
+#define DILITHIUM_POLY_COMMON_H
+
+#include "dilithium_type.h"
+
+void poly_uniform_gamma1(poly *a, const uint8_t seed[DILITHIUM_CRHBYTES],
+			 uint16_t nonce, void *ws_buf);
+
+#endif /* DILITHIUM_POLY_COMMON_H */
diff --git a/lib/crypto/mldsa/dilithium_polyvec.h b/lib/crypto/mldsa/dilithium_polyvec.h
new file mode 100644
index 000000000000..47eb60758850
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_polyvec.h
@@ -0,0 +1,343 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#ifndef DILITHIUM_POLYVEC_H
+#define DILITHIUM_POLYVEC_H
+
+#include "dilithium_type.h"
+#include "dilithium_poly.h"
+
+typedef struct {
+	poly vec[DILITHIUM_L];
+} polyvecl;
+
+/* Vectors of polynomials of length K */
+typedef struct {
+	poly vec[DILITHIUM_K];
+} polyveck;
+
+/**************************************************************/
+/************ Vectors of polynomials of length L **************/
+/**************************************************************/
+
+static inline void polyvecl_reduce(polyvecl *v)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_L; ++i)
+		poly_reduce(&v->vec[i]);
+}
+
+/*
+ * @brief polyvecl_add - Add vectors of polynomials of length L.
+ *			 No modular reduction is performed.
+ *
+ * @param [out] w pointer to output vector
+ * @param [in] u pointer to first summand
+ * @param [in] v pointer to second summand
+ */
+static inline void polyvecl_add(polyvecl *w, const polyvecl *u,
+				const polyvecl *v)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_L; ++i)
+		poly_add(&w->vec[i], &u->vec[i], &v->vec[i]);
+}
+
+/*
+ * @brief polyvecl_ntt - Forward NTT of all polynomials in vector of length L.
+ *			 Output coefficients can be up to 16*Q larger than input
+ *			 coefficients.
+ *
+ * @param [in,out] v pointer to input/output vector
+ */
+static inline void polyvecl_ntt(polyvecl *v)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_L; ++i)
+		poly_ntt(&v->vec[i]);
+}
+
+static inline void polyvecl_invntt_tomont(polyvecl *v)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_L; ++i)
+		poly_invntt_tomont(&v->vec[i]);
+}
+
+static inline void polyvecl_pointwise_poly_montgomery(polyvecl *r,
+						      const poly *a,
+						      const polyvecl *v)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_L; ++i)
+		poly_pointwise_montgomery(&r->vec[i], a, &v->vec[i]);
+}
+
+/*
+ * @brief polyvecl_chknorm - Check infinity norm of polynomials in vector of
+ *			     length L. Assumes input polyvecl to be reduced by
+ *			     polyvecl_reduce().
+ *
+ * @param [in] v pointer to vector
+ * @param [in] bound norm bound
+ *
+ * @return 0 if norm of all polynomials is strictly smaller than B <= (Q-1)/8
+ * and 1 otherwise.
+ */
+static inline int polyvecl_chknorm(const polyvecl *v, int32_t bound)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_L; ++i)
+		if (poly_chknorm(&v->vec[i], bound))
+			return 1;
+
+	return 0;
+}
+
+/**************************************************************/
+/************ Vectors of polynomials of length K **************/
+/**************************************************************/
+
+/*
+ * @brief polyveck_reduce - Reduce coefficients of polynomials in vector of
+ *			    length DILITHIUM_K to representatives in
+ *			    [-6283009,6283007].
+ *
+ * @param [in,out] v pointer to input/output vector
+ */
+static inline void polyveck_reduce(polyveck *v)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		poly_reduce(&v->vec[i]);
+}
+
+/*
+ * @brief polyveck_caddq - For all coefficients of polynomials in vector of
+ * 			   length DILITHIUM_K add DILITHIUM_Q if
+ *			   coefficient is negative.
+ *
+ * @param [in,out] v pointer to input/output vector
+ */
+static inline void polyveck_caddq(polyveck *v)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		poly_caddq(&v->vec[i]);
+}
+
+/*
+ * @brief polyveck_add - Add vectors of polynomials of length DILITHIUM_K.
+ *			 No modular reduction is performed.
+ *
+ * @param [out] w pointer to output vector
+ * @param [in] u pointer to first summand
+ * @param [in] v pointer to second summand
+ */
+static inline void polyveck_add(polyveck *w, const polyveck *u,
+				const polyveck *v)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		poly_add(&w->vec[i], &u->vec[i], &v->vec[i]);
+}
+
+/*
+ * @brief olyveck_sub - Subtract vectors of polynomials of length
+ *			DILITHIUM_K. No modular reduction is performed.
+ *
+ * @param [out] w pointer to output vector
+ * @param [in] u pointer to first input vector
+ * @param [in] v pointer to second input vector to be subtracted from first
+ *		 input vector
+ */
+static inline void polyveck_sub(polyveck *w, const polyveck *u,
+				const polyveck *v)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		poly_sub(&w->vec[i], &u->vec[i], &v->vec[i]);
+}
+
+/*
+ * @brief polyveck_shiftl - Multiply vector of polynomials of Length K by
+ *			    2^D without modular reduction. Assumes input
+ *			    coefficients to be less than 2^{31-D}.
+ *
+ * @param [in,out] v pointer to input/output vector
+ */
+static inline void polyveck_shiftl(polyveck *v)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		poly_shiftl(&v->vec[i]);
+}
+
+/*
+ * @brief polyveck_ntt - Forward NTT of all polynomials in vector of length K.
+ *			 Output coefficients can be up to 16*Q larger than input
+ *			 coefficients.
+ *
+ * @param [in,out] v pointer to input/output vector
+ */
+static inline void polyveck_ntt(polyveck *v)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		poly_ntt(&v->vec[i]);
+}
+
+/*
+ * @brief polyveck_invntt_tomont - Inverse NTT and multiplication by 2^{32} of
+ *				   polynomials in vector of length K. Input
+ *				   coefficients need to be less than 2*Q.
+ *
+ * @param [in,out] v pointer to input/output vector
+ */
+static inline void polyveck_invntt_tomont(polyveck *v)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		poly_invntt_tomont(&v->vec[i]);
+}
+
+static inline void polyveck_pointwise_poly_montgomery(polyveck *r,
+						      const poly *a,
+						      const polyveck *v)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		poly_pointwise_montgomery(&r->vec[i], a, &v->vec[i]);
+}
+
+/*
+ * @brief polyveck_chknorm - Check infinity norm of polynomials in vector of
+ *			     length K. Assumes input polyveck to be reduced by
+ *			     polyveck_reduce().
+ *
+ * @param [in] v pointer to vector
+ * @param [in] bound norm bound
+ *
+ * @return 0 if norm of all polynomials are strictly smaller than B <= (Q-1)/8
+ * and 1 otherwise.
+ */
+static inline int polyveck_chknorm(const polyveck *v, int32_t bound)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		if (poly_chknorm(&v->vec[i], bound))
+			return 1;
+
+	return 0;
+}
+
+/*
+ * @brief polyveck_decompose - For all coefficients a of polynomials in vector
+ *			       of length K, compute high and low bits a0, a1
+ *			       such a mod^+ Q = a1*ALPHA + a0 with
+ *			       -ALPHA/2 < a0 <= ALPHA/2 except a1 = (Q-1)/ALPHA
+ *			       where we set a1 = 0 and
+ *			       -ALPHA/2 <= a0 = a mod Q - Q < 0. Assumes
+ *			       coefficients to be standard representatives.
+ *
+ * @param [out] v1 pointer to output vector of polynomials with coefficients a1
+ * @param [in] v0 pointer to output vector of polynomials with coefficients a0
+ * @param [in] v pointer to input vector
+ */
+static inline void polyveck_decompose(polyveck *v1, polyveck *v0,
+				      const polyveck *v)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		poly_decompose(&v1->vec[i], &v0->vec[i], &v->vec[i]);
+}
+
+/*
+ * @brief polyveck_make_hint - Compute hint vector.
+ *
+ * @param [out] h pointer to output vector
+ * @param [in] v0 pointer to low part of input vector
+ * @param [in] v1 pointer to high part of input vector
+ *
+ * @return number of 1 bits.
+ */
+static inline unsigned int polyveck_make_hint(polyveck *h, const polyveck *v0,
+					      const polyveck *v1)
+{
+	unsigned int i, s = 0;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		s += poly_make_hint(&h->vec[i], &v0->vec[i], &v1->vec[i]);
+
+	return s;
+}
+
+/*
+ * @brief polyveck_use_hint - Use hint vector to correct the high bits of input
+ *			      vector.
+ *
+ * @param [out] w pointer to output vector of polynomials with corrected high
+ *		  bits
+ * @param [in] u pointer to input vector
+ * @param [in] h pointer to input hint vector
+ */
+static inline void polyveck_use_hint(polyveck *w, const polyveck *u,
+				     const polyveck *h)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		poly_use_hint(&w->vec[i], &u->vec[i], &h->vec[i]);
+}
+
+static inline void
+polyveck_pack_w1(uint8_t r[DILITHIUM_K * DILITHIUM_POLYW1_PACKEDBYTES],
+		 const polyveck *w1)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		polyw1_pack(&r[i * DILITHIUM_POLYW1_PACKEDBYTES],
+			    &w1->vec[i]);
+}
+
+#endif /* DILITHIUM_POLYVEC_H */
diff --git a/lib/crypto/mldsa/dilithium_polyvec_c.h b/lib/crypto/mldsa/dilithium_polyvec_c.h
new file mode 100644
index 000000000000..29e6dc3880dc
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_polyvec_c.h
@@ -0,0 +1,81 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2023 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef DILITHIUM_POLYVEC_C_H
+#define DILITHIUM_POLYVEC_C_H
+
+/*
+ * @brief expand_mat - Implementation of ExpandA. Generates matrix A with
+ *		       uniformly random coefficients a_{i,j} by performing
+ *		       rejection sampling on the output stream of
+ *		       SHAKE128(rho|j|i).
+ *
+ * @param [out] mat output matrix
+ * @param [in] rho byte array containing seed rho
+ */
+static inline void
+polyvec_matrix_expand(polyvecl mat[DILITHIUM_K],
+		      const uint8_t rho[DILITHIUM_SEEDBYTES], void *ws_buf)
+{
+	unsigned int i, j;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		for (j = 0; j < DILITHIUM_L; ++j)
+			poly_uniform(
+				&mat[i].vec[j], rho,
+				cpu_to_le16((uint16_t)(i << 8) + (uint16_t)j),
+				ws_buf);
+}
+
+/*
+ * @brief polyvecl_pointwise_acc_montgomery -
+ *	  Pointwise multiply vectors of polynomials of length L, multiply
+ *	  resulting vector by 2^{-32} and add (accumulate) polynomials
+ *	  in it. Input/output vectors are in NTT domain representation.
+ *
+ * @param [out] w output polynomial
+ * @param [in] u pointer to first input vector
+ * @param [in] v pointer to second input vector
+ */
+static inline void polyvecl_pointwise_acc_montgomery(poly *w, const polyvecl *u,
+						     const polyvecl *v,
+						     void *ws_buf)
+{
+	unsigned int i;
+	poly *t = ws_buf;
+
+	poly_pointwise_montgomery(w, &u->vec[0], &v->vec[0]);
+	for (i = 1; i < DILITHIUM_L; ++i) {
+		poly_pointwise_montgomery(t, &u->vec[i], &v->vec[i]);
+		poly_add(w, w, t);
+	}
+}
+
+static inline void
+polyvec_matrix_pointwise_montgomery(polyveck *t,
+				    const polyvecl mat[DILITHIUM_K],
+				    const polyvecl *v, void *ws_buf)
+{
+	unsigned int i;
+
+	for (i = 0; i < DILITHIUM_K; ++i)
+		polyvecl_pointwise_acc_montgomery(&t->vec[i], &mat[i], v,
+						  ws_buf);
+}
+
+#endif /* DILITHIUM_POLYVEC_C_H */
diff --git a/lib/crypto/mldsa/dilithium_reduce.h b/lib/crypto/mldsa/dilithium_reduce.h
new file mode 100644
index 000000000000..96f637c5d6cb
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_reduce.h
@@ -0,0 +1,85 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#ifndef DILITHIUM_REDUCE_H
+#define DILITHIUM_REDUCE_H
+
+#include "dilithium_type.h"
+
+#define MONT -4186625 // 2^32 % Q
+#define QINV 58728449 // q^(-1) mod 2^32
+
+/*
+ * @brief montgomery_reduce - For finite field element a with
+ *			     -2^{31}Q <= a <= Q*2^31,
+ *			     compute r \equiv a*2^{-32} (mod Q) such that
+ *			     -Q < r < Q.
+ *
+ * @param [in] a finite field element
+ *
+ * @return r
+ */
+static inline int32_t montgomery_reduce(int64_t a)
+{
+	int32_t t;
+
+	t = (int32_t)a * QINV;
+	t = (int32_t)((a - (int64_t)t * DILITHIUM_Q) >> 32);
+	return t;
+}
+
+/*
+ * @brief reduce32 - For finite field element a with a <= 2^{31} - 2^{22} - 1,
+ *		     compute r \equiv a (mod Q) such that
+ *		     -6283009 <= r <= 6283007.
+ *
+ * @param [in] a finite field element
+ *
+ * @return r
+ */
+static inline int32_t reduce32(int32_t a)
+{
+	int32_t t;
+
+	t = (a + (1 << 22)) >> 23;
+	t = a - t * DILITHIUM_Q;
+	return t;
+}
+
+/*
+ * @brief caddq - Add Q if input coefficient is negative.
+ *
+ * @param [in] a finite field element
+ *
+ * @return r
+ */
+static inline int32_t caddq(int32_t a)
+{
+	a += (a >> 31) & DILITHIUM_Q;
+	return a;
+}
+
+#endif /* DILITHIUM_REDUCE_H */
diff --git a/lib/crypto/mldsa/dilithium_rounding.c b/lib/crypto/mldsa/dilithium_rounding.c
new file mode 100644
index 000000000000..bead365e4ea8
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_rounding.c
@@ -0,0 +1,128 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#include "dilithium.h"
+
+/*
+ * @brief power2round - For finite field element a, compute a0, a1 such that
+ *			a mod^+ Q = a1*2^D + a0 with -2^{D-1} < a0 <= 2^{D-1}.
+ *			Assumes a to be standard representative.
+ *
+ * @param [in] a input element
+ * @param [out] a0 pointer to output element a0
+ *
+ * @return a1.
+ */
+int32_t power2round(int32_t *a0, int32_t a)
+{
+	int32_t a1;
+
+	a1 = (a + (1 << (DILITHIUM_D - 1)) - 1) >> DILITHIUM_D;
+	*a0 = a - (a1 << DILITHIUM_D);
+	return a1;
+}
+
+/*
+ * @brief decompose - For finite field element a, compute high and low bits a0,
+ *		      a1 such that a mod^+ Q = a1*ALPHA + a0 with
+ *		      -ALPHA/2 < a0 <= ALPHA/2 except if a1 = (Q-1)/ALPHA where
+ *		      we set a1 = 0 and -ALPHA/2 <= a0 = a mod^+ Q - Q < 0.
+ *		      Assumes a to be standard representative.
+ *
+ * @param [in] a input element
+ * @param [out] a0 pointer to output element a0
+ *
+ * @return a1.
+ */
+int32_t decompose(int32_t *a0, int32_t a)
+{
+	int32_t a1;
+
+	a1 = (a + 127) >> 7;
+#if DILITHIUM_GAMMA2 == (DILITHIUM_Q - 1) / 32
+	a1 = (a1 * 1025 + (1 << 21)) >> 22;
+	a1 &= 15;
+#elif DILITHIUM_GAMMA2 == (DILITHIUM_Q - 1) / 88
+	a1 = (a1 * 11275 + (1 << 23)) >> 24;
+	a1 ^= ((43 - a1) >> 31) & a1;
+#else
+#error "Uknown GAMMA2"
+#endif
+
+	*a0 = a - a1 * 2 * DILITHIUM_GAMMA2;
+	*a0 -= (((DILITHIUM_Q - 1) / 2 - *a0) >> 31) & DILITHIUM_Q;
+
+	return a1;
+}
+
+/*
+ * @brief make_hint - Compute hint bit indicating whether the low bits of the
+ *		      input element overflow into the high bits.
+ *
+ * @param  a0 [in] low bits of input element
+ * @param  a1 [in] high bits of input element
+ *
+ * @return 1 if overflow.
+ */
+int32_t make_hint(int32_t a0, int32_t a1)
+{
+	if (a0 > DILITHIUM_GAMMA2 || a0 < -DILITHIUM_GAMMA2 ||
+	    (a0 == -DILITHIUM_GAMMA2 && a1 != 0))
+		return 1;
+
+	return 0;
+}
+
+/*
+ * @brief use_hint - Correct high bits according to hint.
+ *
+ * @param [in] a input element
+ * @param [in] hint hint bit
+ *
+ * @return corrected high bits.
+ */
+int32_t use_hint(int32_t a, int32_t hint)
+{
+	int32_t a0, a1;
+
+	a1 = decompose(&a0, a);
+	if (hint == 0)
+		return a1;
+
+#if DILITHIUM_GAMMA2 == (DILITHIUM_Q - 1) / 32
+	if (a0 > 0)
+		return (a1 + 1) & 15;
+	else
+		return (a1 - 1) & 15;
+#elif DILITHIUM_GAMMA2 == (DILITHIUM_Q - 1) / 88
+	if (a0 > 0)
+		return (a1 == 43) ? 0 : a1 + 1;
+	else
+		return (a1 == 0) ? 43 : a1 - 1;
+#else
+#error "Uknown GAMMA2"
+#endif
+}
diff --git a/lib/crypto/mldsa/dilithium_service_helpers.h b/lib/crypto/mldsa/dilithium_service_helpers.h
new file mode 100644
index 000000000000..1bc33498c59d
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_service_helpers.h
@@ -0,0 +1,99 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef DILITHIUM_SERVICE_HELPERS_H
+#define DILITHIUM_SERVICE_HELPERS_H
+
+/*
+ * @brief rej_uniform - Sample uniformly random coefficients in [0, Q-1] by
+ *			performing rejection sampling on array of random bytes.
+ *
+ * @param [out] a pointer to output array (allocated)
+ * @param [in] len number of coefficients to be sampled
+ * @param [in] buf array of random bytes
+ * @param [in] buflen length of array of random bytes
+ *
+ * @return number of sampled coefficients. Can be smaller than len if not enough
+ * random bytes were given.
+ */
+static inline unsigned int rej_uniform(int32_t *a, unsigned int len,
+				       const uint8_t *buf, unsigned int buflen)
+{
+	unsigned int ctr, pos;
+	uint32_t t;
+
+	ctr = pos = 0;
+	while (ctr < len && pos + 3 <= buflen) {
+		t = buf[pos++];
+		t |= (uint32_t)buf[pos++] << 8;
+		t |= (uint32_t)buf[pos++] << 16;
+		t &= 0x7FFFFF;
+
+		if (t < DILITHIUM_Q)
+			a[ctr++] = (int32_t)t;
+	}
+
+	return ctr;
+}
+
+/*
+ * @brief rej_eta - Sample uniformly random coefficients in [-ETA, ETA] by
+ *		    performing rejection sampling on array of random bytes.
+ *
+ * @param [out] a pointer to output array (allocated)
+ * @param [in] len number of coefficients to be sampled
+ * @param [in] buf array of random bytes
+ * @param [in] buflen length of array of random bytes
+ *
+ * @return number of sampled coefficients. Can be smaller than len if not enough
+ * random bytes were given.
+ */
+static inline unsigned int rej_eta(int32_t *a, unsigned int len,
+				   const uint8_t *buf, unsigned int buflen)
+{
+	unsigned int ctr, pos;
+	int32_t t0, t1;
+
+	ctr = pos = 0;
+	while (ctr < len && pos < buflen) {
+		t0 = buf[pos] & 0x0F;
+		t1 = buf[pos++] >> 4;
+
+#if DILITHIUM_ETA == 2
+		if (t0 < 15) {
+			t0 = t0 - (205 * t0 >> 10) * 5;
+			a[ctr++] = 2 - t0;
+		}
+		if (t1 < 15 && ctr < len) {
+			t1 = t1 - (205 * t1 >> 10) * 5;
+			a[ctr++] = 2 - t1;
+		}
+#elif DILITHIUM_ETA == 4
+		if (t0 < 9)
+			a[ctr++] = 4 - t0;
+		if (t1 < 9 && ctr < len)
+			a[ctr++] = 4 - t1;
+#else
+#error "Undefined DILITHIUM_ETA"
+#endif
+	}
+
+	return ctr;
+}
+
+#endif /* DILITHIUM_SERVICE_HELPERS_H */
diff --git a/lib/crypto/mldsa/dilithium_signature_c.c b/lib/crypto/mldsa/dilithium_signature_c.c
new file mode 100644
index 000000000000..b88fc4c06356
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_signature_c.c
@@ -0,0 +1,279 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#include "dilithium_signature_c.h"
+
+/* We need once the buffer size to handle the hashing */
+#define LC_POLY_UNIFOR_BUF_SIZE_MULTIPLIER 1
+
+#include "dilithium_poly.h"
+#include "dilithium_poly_common.h"
+#include "dilithium_poly_c.h"
+#include "dilithium_polyvec.h"
+#include "dilithium_polyvec_c.h"
+#include "dilithium_pack.h"
+#include "dilithium_signature_impl.h"
+
+int dilithium_verify_c(const struct dilithium_sig *sig, const uint8_t *m,
+		       size_t mlen, const struct dilithium_pk *pk)
+{
+	return dilithium_verify_impl(sig, m, mlen, pk);
+}
+
+int dilithium_verify_ctx_c(const struct dilithium_sig *sig,
+			   struct dilithium_ctx *ctx, const uint8_t *m,
+			   size_t mlen, const struct dilithium_pk *pk)
+{
+	return dilithium_verify_ctx_impl(sig, ctx, m, mlen, pk);
+}
+
+int dilithium_verify_init_c(struct dilithium_ctx *ctx,
+			    const struct dilithium_pk *pk)
+{
+	return dilithium_verify_init_impl(ctx, pk);
+}
+
+int dilithium_verify_update_c(struct dilithium_ctx *ctx, const uint8_t *m,
+			      size_t mlen)
+{
+	return dilithium_verify_update_impl(ctx, m, mlen);
+}
+
+int dilithium_verify_final_c(const struct dilithium_sig *sig,
+			     struct dilithium_ctx *ctx,
+			     const struct dilithium_pk *pk)
+{
+	return dilithium_verify_final_impl(sig, ctx, pk);
+}
+
+/*
+ * dilithium_pk_load - Load Dilithium public key
+ * @pk: Secret key to be filled (the caller must have allocated it)
+ * @src_key: Buffer that holds the key to be imported
+ * @src_key_len: Length of key in buffer
+ *
+ * Load a Dilithium public key provided with a buffer into the Leancrypto data
+ * structure.
+ *
+ * Return: 0 on success or < 0 on error
+ *
+ * Context: Any context.
+ */
+int dilithium_pk_load(struct dilithium_pk *pk,
+		      const uint8_t *src_key, size_t src_key_len)
+{
+	if (!pk || !src_key ||
+	    src_key_len != DILITHIUM_PUBLICKEYBYTES)
+		return -EINVAL;
+
+	memcpy(pk->pk, src_key, src_key_len);
+	return 0;
+}
+
+/*
+ * dilithium_sig_load - Load Dilithium signature
+ * @sig: Signature to be filled (the caller must have it allocated)
+ * @src_sig: Buffer that holds the signature to be imported
+ * @src_sig_len: Length of signature in buffer
+ *
+ * Load a Dilithium signature provided with a buffer into the Leancrypto data
+ * structure.
+ *
+ * Return: 0 on success or < 0 on error
+ *
+ * Context: Any context.
+ */
+int dilithium_sig_load(struct dilithium_sig *sig, const uint8_t *src_sig,
+		       size_t src_sig_len)
+{
+	if (!sig || !src_sig || src_sig_len != DILITHIUM_CRYPTO_BYTES)
+		return -EINVAL;
+
+	memcpy(sig->sig, src_sig, src_sig_len);
+	return 0;
+}
+
+/*
+ * dilithium_pk_ptr - Query Dilithium key
+ * @dilithium_key: Where to return Dilithium key pointer
+ * @dilithium_key_len: Where to return length of the key
+ * @pk: Dilithium public key from which the references are obtained
+ *
+ * Obtain a reference to the Dilithium key and its length from the key buffer.
+ *
+ * Only pointer references into the Leancrypto data structure are returned.
+ * Any modification of that buffer will modify the Leancrypto key too.
+ *
+ * Return: 0 on success, in which case @dilithium_key and @dilithium_key_len
+ * will have been updated, or != 0 on error
+ *
+ * Context: Any context.
+ */
+int dilithium_pk_ptr(uint8_t **dilithium_key,
+		     size_t *dilithium_key_len, struct dilithium_pk *pk)
+{
+	if (!pk || !dilithium_key || !dilithium_key_len)
+		return -EINVAL;
+
+	*dilithium_key = pk->pk;
+	*dilithium_key_len = DILITHIUM_PUBLICKEYBYTES;
+	return 0;
+}
+
+/*
+ * dilithium_sig_ptr - Query Dilithium signature
+ * @dilithium_sig: Where to return Dilithium signature pointer
+ * @dilithium_sig_len: Where to return length of the signature
+ * @sig: Dilithium signature from which the references are obtained
+ *
+ * @Obtain the reference to the Dilithium signature and its length
+ *
+ * Only pointer references into the Leancrypto data structure are returned.
+ * Any modification of that buffer will modify the Leancrypto signature too.
+ *
+ * Return: 0 on success, in which case @dilithium_sig and @dilithium_sig_len
+ * will have been updated, or != 0 on error
+ *
+ * Context: Any context.
+ */
+int dilithium_sig_ptr(uint8_t **dilithium_sig, size_t *dilithium_sig_len,
+		      struct dilithium_sig *sig)
+{
+	if (!sig || !dilithium_sig || !dilithium_sig_len)
+		return -EINVAL;
+	*dilithium_sig = sig->sig;
+	*dilithium_sig_len = DILITHIUM_CRYPTO_BYTES;
+	return 0;
+}
+
+/*
+ * dilithium_verify - All-in-one ML-DSA signature verification
+ * @sig: Pointer to input signature
+ * @m: Pointer to message
+ * @mlen: Length of message
+ * @pk: Pointer to bit-packed public key
+ *
+ * Perform all the steps needed to verify an ML-DSA signature in one go.  Only
+ * one message buffer may be provided.  For multifragment messages, the
+ * init/update/final interface must be used instead.
+ *
+ * Return: 0 if signature could be verified correctly and -EBADMSG when
+ * signature cannot be verified, < 0 on other errors
+ */
+int dilithium_verify(const struct dilithium_sig *sig, const uint8_t *m,
+		     size_t mlen, const struct dilithium_pk *pk)
+{
+	if (!pk || !sig)
+		return -EINVAL;
+	return dilithium_verify_c(sig, m, mlen, pk);
+}
+
+/*
+ * dilithium_verify_ctx - ML-DSA signature verification in context
+ * @sig: Pointer to input signature
+ * @ctx: Pointer to an allocated Dilithium context
+ * @m: Pointer to message
+ * @mlen: Length of message
+ * @pk: Pointer to bit-packed public key
+ *
+ * Take an arbitrary context buffer provided by the caller and hash it together
+ * with the message to form the message digest to be verified.
+ *
+ * Return: 0 if signature could be verified correctly and -EBADMSG when
+ * signature cannot be verified, < 0 on other errors
+ */
+int dilithium_verify_ctx(const struct dilithium_sig *sig,
+			 struct dilithium_ctx *ctx, const uint8_t *m,
+			 size_t mlen, const struct dilithium_pk *pk)
+{
+	if (!pk || !sig)
+		return -EINVAL;
+	return dilithium_verify_ctx_c(sig, ctx, m, mlen, pk);
+}
+
+/*
+ * dilithium_verify_init - Initialize a signature verification operation
+ * @ctx: Pointer to an allocated Dilithium context
+ * @pk: Pointer to bit-packed public key
+ *
+ * Initialise a signature verification context so that a multi-fragment message
+ * can be verified.
+ *
+ * Return: 0 (success) or < 0 on error; -EOPNOTSUPP is returned if an
+ * unsupported strength or digest algorithm is required..
+ *
+ * Context: Process context.  May sleep to allocate memory.
+ */
+int dilithium_verify_init(struct dilithium_ctx *ctx,
+			  const struct dilithium_pk *pk)
+{
+	if (!pk)
+		return -EINVAL;
+	return dilithium_verify_init_c(ctx, pk);
+}
+
+/*
+ * dilithium_verify_update - Add more data to an already initialized context
+ * @ctx: Pointer to an allocated Dilithium context
+ * @m: Pointer to message fragment to be signed
+ * @mlen: Length of message fragment
+ *
+ * Add more data to the state in a context that has already been initialized.
+ * This can be use to provide a message that is in multiple fragments to the
+ * algorithm.
+ *
+ * Return: 0 (success) or < 0 on error
+ *
+ * Context: Process context.  May sleep to allocate memory.
+ */
+int dilithium_verify_update(struct dilithium_ctx *ctx, const uint8_t *m,
+			    size_t mlen)
+{
+	return dilithium_verify_update_c(ctx, m, mlen);
+}
+
+/*
+ * dilithium_verify_final - Perform signature verification
+ * @sig: Pointer to signature to be verified
+ * @ctx: Pointer to an allocated and updated Dilithium context
+ * @pk: Pointer to bit-packed public key
+ *
+ * Finalise the state in the Dilithium context and verify the signature.  The
+ * caller must have initialised it and updated it with all the pieces of data.
+ *
+ * Return: 0 if signature could be verified correctly and -EBADMSG when
+ * signature cannot be verified, < 0 on other errors
+ *
+ * Context: Process context.  May sleep to allocate memory.
+ */
+int dilithium_verify_final(const struct dilithium_sig *sig,
+			   struct dilithium_ctx *ctx,
+			   const struct dilithium_pk *pk)
+{
+	if (!pk || !sig)
+		return -EINVAL;
+	return dilithium_verify_final_c(sig, ctx, pk);
+}
diff --git a/lib/crypto/mldsa/dilithium_signature_c.h b/lib/crypto/mldsa/dilithium_signature_c.h
new file mode 100644
index 000000000000..d1e694e4c8d3
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_signature_c.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef DILITHIUM_SIGNATURE_C_H
+#define DILITHIUM_SIGNATURE_C_H
+
+#include "dilithium_type.h"
+
+int dilithium_verify_c(const struct dilithium_sig *sig, const uint8_t *m,
+		       size_t mlen, const struct dilithium_pk *pk);
+int dilithium_verify_ctx_c(const struct dilithium_sig *sig,
+			   struct dilithium_ctx *ctx, const uint8_t *m,
+			   size_t mlen, const struct dilithium_pk *pk);
+int dilithium_verify_init_c(struct dilithium_ctx *ctx,
+			    const struct dilithium_pk *pk);
+int dilithium_verify_update_c(struct dilithium_ctx *ctx, const uint8_t *m,
+			      size_t mlen);
+int dilithium_verify_final_c(const struct dilithium_sig *sig,
+			     struct dilithium_ctx *ctx,
+			     const struct dilithium_pk *pk);
+
+#endif /* DILITHIUM_SIGNATURE_C_H */
diff --git a/lib/crypto/mldsa/dilithium_signature_impl.h b/lib/crypto/mldsa/dilithium_signature_impl.h
new file mode 100644
index 000000000000..36c8541effd2
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_signature_impl.h
@@ -0,0 +1,370 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#ifndef DILITHIUM_SIGNATURE_IMPL_H
+#define DILITHIUM_SIGNATURE_IMPL_H
+
+#include "dilithium.h"
+#include "dilithium_type.h"
+#include "dilithium_debug.h"
+#include "dilithium_pack.h"
+#include "signature_domain_separation.h"
+
+#define _WS_POLY_UNIFORM_BUF_SIZE                                              \
+	(POLY_UNIFORM_NBLOCKS * SHAKE128_BLOCK_SIZE + 2)
+
+#ifndef LC_POLY_UNIFOR_BUF_SIZE_MULTIPLIER
+#error "LC_POLY_UNIFOR_BUF_SIZE_MULTIPLIER is not defined"
+#endif
+
+#define WS_POLY_UNIFORM_BUF_SIZE                                               \
+	(_WS_POLY_UNIFORM_BUF_SIZE * LC_POLY_UNIFOR_BUF_SIZE_MULTIPLIER)
+
+static int dilithium_verify_internal_ahat(const struct dilithium_sig *sig,
+					  const struct dilithium_pk *pk,
+					  struct dilithium_ctx *ctx)
+{
+	struct workspace_verify {
+		union {
+			poly cp;
+		} matrix;
+		polyveck w1;
+		union {
+			polyveck t1, h;
+			polyvecl z;
+			uint8_t mu[DILITHIUM_CRHBYTES];
+			union {
+				uint8_t coeffs[round_up(DILITHIUM_CTILDE_BYTES, 8)];
+			} __aligned(8) c2;
+		} buf;
+
+		union {
+			poly polyvecl_pointwise_acc_montgomery_buf;
+			uint8_t buf[DILITHIUM_K *
+				    DILITHIUM_POLYW1_PACKEDBYTES];
+			uint8_t poly_challenge_buf[POLY_CHALLENGE_BYTES];
+		} tmp;
+	};
+	struct workspace_verify *ws __free(kfree_sensitive) = NULL;
+	/* The first bytes of the signature is c~ and thus contains c1. */
+	const uint8_t *c1 = sig->sig;
+	const polyvecl *mat = ctx->ahat;
+	int ret = 0;
+
+	ws = kzalloc(sizeof(*ws), GFP_KERNEL);
+	if (!ws)
+		return -ENOMEM;
+
+	/* AHat must be present at this time */
+	if (!mat) {
+		ret = -EINVAL;
+		goto out;
+	}
+
+	unpack_sig_z(&ws->buf.z, sig);
+	if (polyvecl_chknorm(&ws->buf.z,
+			     DILITHIUM_GAMMA1 - DILITHIUM_BETA)) {
+		ret = -EINVAL;
+		goto out;
+	}
+
+	polyvecl_ntt(&ws->buf.z);
+	polyvec_matrix_pointwise_montgomery(
+		&ws->w1, mat, &ws->buf.z,
+		&ws->tmp.polyvecl_pointwise_acc_montgomery_buf);
+
+	/* Matrix-vector multiplication; compute Az - c2^dt1 */
+	poly_challenge(&ws->matrix.cp, c1, ws->tmp.poly_challenge_buf);
+	poly_ntt(&ws->matrix.cp);
+
+	unpack_pk_t1(&ws->buf.t1, pk);
+	polyveck_shiftl(&ws->buf.t1);
+	polyveck_ntt(&ws->buf.t1);
+	polyveck_pointwise_poly_montgomery(&ws->buf.t1, &ws->matrix.cp,
+					   &ws->buf.t1);
+
+	polyveck_sub(&ws->w1, &ws->w1, &ws->buf.t1);
+	polyveck_reduce(&ws->w1);
+	polyveck_invntt_tomont(&ws->w1);
+
+	/* Reconstruct w1 */
+	polyveck_caddq(&ws->w1);
+	dilithium_print_polyveck(&ws->w1,
+				 "Sigver - W K x N matrix before hint:");
+
+	if (unpack_sig_h(&ws->buf.h, sig))
+		return -EINVAL;
+	dilithium_print_polyveck(&ws->buf.h, "Siggen - H K x N matrix:");
+
+	polyveck_use_hint(&ws->w1, &ws->w1, &ws->buf.h);
+	dilithium_print_polyveck(&ws->w1,
+				 "Sigver - W K x N matrix after hint:");
+	polyveck_pack_w1(ws->tmp.buf, &ws->w1);
+	dilithium_print_buffer(ws->tmp.buf,
+			       DILITHIUM_K * DILITHIUM_POLYW1_PACKEDBYTES,
+			       "Sigver - W after w1Encode");
+
+	if (ctx->external_mu) {
+		if (ctx->external_mu_len != DILITHIUM_CRHBYTES)
+			return -EINVAL;
+
+		/* Call random oracle and verify challenge */
+		dilithium_hash_init(ctx);
+		dilithium_hash_update(ctx, ctx->external_mu, DILITHIUM_CRHBYTES);
+	} else {
+		dilithium_hash_final(ctx, ws->buf.mu, DILITHIUM_CRHBYTES);
+
+		/* Call random oracle and verify challenge */
+		dilithium_hash_init(ctx);
+		dilithium_hash_update(ctx, ws->buf.mu, DILITHIUM_CRHBYTES);
+	}
+
+	dilithium_hash_finup(ctx,
+			     ws->tmp.buf, DILITHIUM_K * DILITHIUM_POLYW1_PACKEDBYTES,
+			     ws->buf.c2.coeffs, DILITHIUM_CTILDE_BYTES);
+
+	/* Signature verification operation */
+	if (memcmp(c1, ws->buf.c2.coeffs, DILITHIUM_CTILDE_BYTES) != 0)
+		ret = -EBADMSG;
+
+out:
+	return ret;
+}
+
+static int
+dilithium_verify_internal_noahat(const struct dilithium_sig *sig,
+				 const struct dilithium_pk *pk,
+				 struct dilithium_ctx *ctx)
+{
+	struct workspace_verify {
+		polyvecl mat[DILITHIUM_K];
+		uint8_t poly_uniform_buf[WS_POLY_UNIFORM_BUF_SIZE];
+	};
+	struct workspace_verify *ws __free(kfree_sensitive) = NULL;
+	/* The first bytes of the key is rho. */
+	const uint8_t *rho = pk->pk;
+	int ret = 0;
+
+	ws = kzalloc(sizeof(*ws), GFP_KERNEL);
+	if (!ws)
+		return -ENOMEM;
+
+	polyvec_matrix_expand(ws->mat, rho, ws->poly_uniform_buf);
+
+	/* Temporarily set the pointer */
+	ctx->ahat = ws->mat;
+
+	ret = dilithium_verify_internal_ahat(sig, pk, ctx);
+
+	ctx->ahat = NULL;
+	return ret;
+}
+
+static int dilithium_pk_expand_impl(const struct dilithium_pk *pk,
+				    struct dilithium_ctx *ctx)
+{
+	struct workspace_verify {
+		uint8_t poly_uniform_buf[WS_POLY_UNIFORM_BUF_SIZE];
+	};
+	struct workspace_verify *ws __free(kfree_sensitive) = NULL;
+	/* The first bytes of the key is rho. */
+	const uint8_t *rho = pk->pk;
+	polyvecl *mat = ctx->ahat;
+	int ret = 0;
+
+	ws = kzalloc(sizeof(*ws), GFP_KERNEL);
+	if (!ws)
+		return -ENOMEM;
+
+	/*
+	 * Runtime sanity check ensures that the allocated context has
+	 * sufficient size (e.g. not that caller used, say,
+	 * DILITHIUM_44_CTX_ON_STACK_AHAT with a ML-DSA 65 or 87 key)
+	 */
+#if DILITHIUM_MODE == 2
+	if (ctx->ahat_size < DILITHIUM_44_AHAT_SIZE) {
+		ret = -EOVERFLOW;
+		goto out;
+	}
+#elif DILITHIUM_MODE == 3
+	if (ctx->ahat_size < DILITHIUM_65_AHAT_SIZE) {
+		ret = -EOVERFLOW;
+		goto out;
+	}
+#elif DILITHIUM_MODE == 5
+	if (ctx->ahat_size < DILITHIUM_87_AHAT_SIZE) {
+		ret = -EOVERFLOW;
+		goto out;
+	}
+#else
+#error "Undefined DILITHIUM_MODE"
+#endif
+
+	polyvec_matrix_expand(mat, rho, ws->poly_uniform_buf);
+	ctx->ahat_expanded = 1;
+
+out:
+	return ret;
+}
+
+static int dilithium_verify_internal(const struct dilithium_sig *sig,
+				     const struct dilithium_pk *pk,
+				     struct dilithium_ctx *ctx)
+{
+	int ret;
+
+	if (!ctx->ahat)
+		return dilithium_verify_internal_noahat(sig, pk, ctx);
+
+	if (!ctx->ahat_expanded) {
+		ret = dilithium_pk_expand_impl(pk, ctx);
+		if (ret < 0)
+			goto out;
+	}
+
+	ret = dilithium_verify_internal_ahat(sig, pk, ctx);
+
+out:
+	return ret;
+}
+
+static int dilithium_verify_ctx_impl(const struct dilithium_sig *sig,
+				     struct dilithium_ctx *ctx,
+				     const uint8_t *m, size_t mlen,
+				     const struct dilithium_pk *pk)
+{
+	uint8_t tr[DILITHIUM_TRBYTES];
+	int ret = 0;
+
+	if (!sig || !pk || !ctx)
+		return -EINVAL;
+
+	/* Either the message or the external mu must be provided */
+	if (!m && !ctx->external_mu)
+		return -EINVAL;
+
+	/* Make sure that ->mu is large enough for ->tr */
+	BUILD_BUG_ON(DILITHIUM_TRBYTES > DILITHIUM_CRHBYTES);
+
+	/* Compute CRH(H(rho, t1), msg) */
+	shake256(pk->pk, DILITHIUM_PUBLICKEYBYTES, tr,
+		 DILITHIUM_TRBYTES);
+
+	if (m) {
+		dilithium_hash_init(ctx);
+		dilithium_hash_update(ctx, tr, DILITHIUM_TRBYTES);
+		ret = signature_domain_separation(
+			&ctx->dilithium_hash_ctx, ctx->ml_dsa_internal,
+			ctx->userctx, ctx->userctxlen,
+			m, mlen,
+			DILITHIUM_NIST_CATEGORY);
+		if (ret < 0)
+			goto out;
+	}
+
+	ret = dilithium_verify_internal(sig, pk, ctx);
+
+out:
+	memzero_explicit(tr, sizeof(tr));
+	return ret;
+}
+
+static int dilithium_verify_impl(const struct dilithium_sig *sig,
+				 const uint8_t *m, size_t mlen,
+				 const struct dilithium_pk *pk)
+{
+	struct dilithium_ctx *ctx;
+	int ret;
+
+	ctx = dilithium_ctx_alloc();
+	if (IS_ERR(ctx))
+		return PTR_ERR(ctx);
+
+	ret = dilithium_verify_ctx_impl(sig, ctx, m, mlen, pk);
+
+	dilithium_ctx_zero_free(ctx);
+	return ret;
+}
+
+static int dilithium_verify_init_impl(struct dilithium_ctx *ctx,
+				      const struct dilithium_pk *pk)
+{
+	uint8_t mu[DILITHIUM_TRBYTES];
+
+	/* rng_ctx is allowed to be NULL as handled below */
+	if (!ctx || !pk)
+		return -EINVAL;
+
+	/* Require the use of SHAKE256 */
+	if (!dilithium_hash_check_blocksize(ctx, SHAKE256_BLOCK_SIZE))
+		return -EOPNOTSUPP;
+
+	/* Compute CRH(H(rho, t1), msg) */
+	shake256(pk->pk, DILITHIUM_PUBLICKEYBYTES, mu,
+		 DILITHIUM_TRBYTES);
+
+	dilithium_hash_init(ctx);
+	dilithium_hash_update(ctx, mu, DILITHIUM_TRBYTES);
+	memzero_explicit(mu, sizeof(mu));
+
+	return signature_domain_separation(
+		&ctx->dilithium_hash_ctx, ctx->ml_dsa_internal,
+		ctx->userctx, ctx->userctxlen,
+		NULL, 0,
+		DILITHIUM_NIST_CATEGORY);
+}
+
+static int dilithium_verify_update_impl(struct dilithium_ctx *ctx,
+					const uint8_t *m, size_t mlen)
+{
+	if (!ctx || !m)
+		return -EINVAL;
+
+	/* Compute CRH(H(rho, t1), msg) */
+	dilithium_hash_update(ctx, m, mlen);
+
+	return 0;
+}
+
+static int dilithium_verify_final_impl(const struct dilithium_sig *sig,
+				       struct dilithium_ctx *ctx,
+				       const struct dilithium_pk *pk)
+{
+	int ret = 0;
+
+	if (!sig || !ctx || !pk) {
+		ret = -EINVAL;
+		goto out;
+	}
+
+	ret = dilithium_verify_internal(sig, pk, ctx);
+
+out:
+	dilithium_ctx_zero(ctx);
+	return ret;
+}
+
+#endif /* DILITHIUM_SIGNATURE_IMPL_H */
diff --git a/lib/crypto/mldsa/dilithium_type.h b/lib/crypto/mldsa/dilithium_type.h
new file mode 100644
index 000000000000..84da7b97dd19
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_type.h
@@ -0,0 +1,108 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2024 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef DILITHIUM_TYPE_H
+#define DILITHIUM_TYPE_H
+
+#include "dilithium.h"
+
+/*
+ * This define replaces all symbol names accordingly to allow double compilation
+ * of the same code base.
+ *
+ * Due to the replacement operation, this header file must be included as the
+ * first header file in the entire stack.
+ *
+ * This file can easily be replaced with dilithium.h to achieve the common
+ * functionality without symbol duplication. But in this case, only the
+ * Dilithium security strength is compiled defined in dilithium.h. Duplicate
+ * compilation different sizes would not be possible.
+ */
+#ifdef DILITHIUM_TYPE_65
+#define DILITHIUM_F(name) dilithium_65_##name
+#define dilithium_pk dilithium_65_pk
+#define dilithium_sig dilithium_65_sig
+
+#include "dilithium_65.h"
+
+#elif defined DILITHIUM_TYPE_44
+#define DILITHIUM_F(name) dilithium_44_##name
+#define dilithium_pk dilithium_44_pk
+#define dilithium_sig dilithium_44_sig
+
+#include "dilithium_44.h"
+
+#else
+#define DILITHIUM_F(name) dilithium_87_##name
+#define dilithium_pk dilithium_87_pk
+#define dilithium_sig dilithium_87_sig
+
+#include "dilithium_87.h"
+
+#endif
+
+/*
+ * The following defines simply allow duplicate compilation of the
+ * respective functions.
+ */
+#define dilithium_pk_load	DILITHIUM_F(pk_load)
+#define dilithium_sig_load	DILITHIUM_F(sig_load)
+#define dilithium_pk_ptr	DILITHIUM_F(pk_ptr)
+#define dilithium_sig_ptr	DILITHIUM_F(sig_ptr)
+#define dilithium_ctx_zero	DILITHIUM_F(ctx_zero)
+
+#define dilithium_verify DILITHIUM_F(verify)
+#define dilithium_verify_ctx DILITHIUM_F(verify_ctx)
+#define dilithium_verify_init DILITHIUM_F(verify_init)
+#define dilithium_verify_update DILITHIUM_F(verify_update)
+#define dilithium_verify_final DILITHIUM_F(verify_final)
+
+#define dilithium_verify_c DILITHIUM_F(verify_c)
+#define dilithium_verify_ctx_c DILITHIUM_F(verify_ctx_c)
+#define dilithium_verify_init_c DILITHIUM_F(verify_init_c)
+#define dilithium_verify_update_c DILITHIUM_F(verify_update_c)
+#define dilithium_verify_final_c DILITHIUM_F(verify_final_c)
+
+#define ntt DILITHIUM_F(ntt)
+#define invntt_tomont DILITHIUM_F(invntt_tomont)
+#define poly_chknorm DILITHIUM_F(poly_chknorm)
+#define poly_uniform DILITHIUM_F(poly_uniform)
+#define poly_uniform_gamma1 DILITHIUM_F(poly_uniform_gamma1)
+#define polyz_unpack DILITHIUM_F(polyz_unpack)
+#define poly_challenge DILITHIUM_F(poly_challenge)
+#define polyeta_unpack DILITHIUM_F(polyeta_unpack)
+#define polyt0_unpack DILITHIUM_F(polyt0_unpack)
+#define polyw1_pack DILITHIUM_F(polyw1_pack)
+#define power2round DILITHIUM_F(power2round)
+#define decompose DILITHIUM_F(decompose)
+#define make_hint DILITHIUM_F(make_hint)
+#define use_hint DILITHIUM_F(use_hint)
+
+#define dilithium_print_buffer DILITHIUM_F(print_buffer)
+#define dilithium_print_polyvecl_k DILITHIUM_F(print_polyvecl_k)
+#define dilithium_print_polyvecl DILITHIUM_F(print_polyvecl)
+#define dilithium_print_polyveck DILITHIUM_F(print_polyveck)
+#define dilithium_print_poly DILITHIUM_F(print_poly)
+
+/* Rounding */
+int32_t power2round(int32_t *a0, int32_t a);
+int32_t decompose(int32_t *a0, int32_t a);
+int32_t make_hint(int32_t a0, int32_t a1);
+int32_t use_hint(int32_t a, int32_t hint);
+
+#endif /* DILITHIUM_TYPE_H */
diff --git a/lib/crypto/mldsa/dilithium_zetas.c b/lib/crypto/mldsa/dilithium_zetas.c
new file mode 100644
index 000000000000..f064fe5c0521
--- /dev/null
+++ b/lib/crypto/mldsa/dilithium_zetas.c
@@ -0,0 +1,68 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+/*
+ * Copyright (C) 2022 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+/*
+ * This code is derived in parts from the code distribution provided with
+ * https://github.com/pq-crystals/dilithium
+ *
+ * That code is released under Public Domain
+ * (https://creativecommons.org/share-your-work/public-domain/cc0/);
+ * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
+ */
+
+#include "dilithium.h"
+
+const int32_t dilithium_zetas[DILITHIUM_N] = {
+	0,	  25847,    -2608894, -518909,	237124,	  -777960,  -876248,
+	466468,	  1826347,  2353451,  -359251,	-2091905, 3119733,  -2884855,
+	3111497,  2680103,  2725464,  1024112,	-1079900, 3585928,  -549488,
+	-1119584, 2619752,  -2108549, -2118186, -3859737, -1399561, -3277672,
+	1757237,  -19422,   4010497,  280005,	2706023,  95776,    3077325,
+	3530437,  -1661693, -3592148, -2537516, 3915439,  -3861115, -3043716,
+	3574422,  -2867647, 3539968,  -300467,	2348700,  -539299,  -1699267,
+	-1643818, 3505694,  -3821735, 3507263,	-2140649, -1600420, 3699596,
+	811944,	  531354,   954230,   3881043,	3900724,  -2556880, 2071892,
+	-2797779, -3930395, -1528703, -3677745, -3041255, -1452451, 3475950,
+	2176455,  -1585221, -1257611, 1939314,	-4083598, -1000202, -3190144,
+	-3157330, -3632928, 126922,   3412210,	-983419,  2147896,  2715295,
+	-2967645, -3693493, -411027,  -2477047, -671102,  -1228525, -22981,
+	-1308169, -381987,  1349076,  1852771,	-1430430, -3343383, 264944,
+	508951,	  3097992,  44288,    -1100098, 904516,	  3958618,  -3724342,
+	-8578,	  1653064,  -3249728, 2389356,	-210977,  759969,   -1316856,
+	189548,	  -3553272, 3159746,  -1851402, -2409325, -177440,  1315589,
+	1341330,  1285669,  -1584928, -812732,	-1439742, -3019102, -3881060,
+	-3628969, 3839961,  2091667,  3407706,	2316500,  3817976,  -3342478,
+	2244091,  -2446433, -3562462, 266997,	2434439,  -1235728, 3513181,
+	-3520352, -3759364, -1197226, -3193378, 900702,	  1859098,  909542,
+	819034,	  495491,   -1613174, -43260,	-522500,  -655327,  -3122442,
+	2031748,  3207046,  -3556995, -525098,	-768622,  -3595838, 342297,
+	286988,	  -2437823, 4108315,  3437287,	-3342277, 1735879,  203044,
+	2842341,  2691481,  -2590150, 1265009,	4055324,  1247620,  2486353,
+	1595974,  -3767016, 1250494,  2635921,	-3548272, -2994039, 1869119,
+	1903435,  -1050970, -1333058, 1237275,	-3318210, -1430225, -451100,
+	1312455,  3306115,  -1962642, -1279661, 1917081,  -2546312, -1374803,
+	1500165,  777191,   2235880,  3406031,	-542412,  -2831860, -1671176,
+	-1846953, -2584293, -3724270, 594136,	-3776993, -2013608, 2432395,
+	2454455,  -164721,  1957272,  3369112,	185531,	  -1207385, -3183426,
+	162844,	  1616392,  3014001,  810149,	1652634,  -3694233, -1799107,
+	-3038916, 3523897,  3866901,  269760,	2213111,  -975884,  1717735,
+	472078,	  -426683,  1723600,  -1803090, 1910376,  -1667432, -1104333,
+	-260646,  -3833893, -2939036, -2235985, -420899,  -2286327, 183443,
+	-976891,  1612842,  -3545687, -554416,	3919660,  -48306,   -1362209,
+	3937738,  1400424,  -846154,  1976782
+};
+EXPORT_SYMBOL(dilithium_zetas);
diff --git a/lib/crypto/mldsa/signature_domain_separation.c b/lib/crypto/mldsa/signature_domain_separation.c
new file mode 100644
index 000000000000..4d27c4f382a2
--- /dev/null
+++ b/lib/crypto/mldsa/signature_domain_separation.c
@@ -0,0 +1,204 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+/*
+ * Copyright (C) 2024 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#include "signature_domain_separation.h"
+
+static const char *signature_prehash_type;
+
+/* RFC4055 2.16.840.1.101.3.4.2.1 */
+static const uint8_t sha256_oid_der[] __maybe_unused = { 0x06, 0x09, 0x60, 0x86,
+							 0x48, 0x01, 0x65, 0x03,
+							 0x04, 0x02, 0x01 };
+/* RFC4055 2.16.840.1.101.3.4.2.2 */
+static const uint8_t sha384_oid_der[] __maybe_unused = { 0x06, 0x09, 0x60, 0x86,
+							 0x48, 0x01, 0x65, 0x03,
+							 0x04, 0x02, 0x02 };
+/* RFC4055 2.16.840.1.101.3.4.2.3 */
+static const uint8_t sha512_oid_der[] __maybe_unused = { 0x06, 0x09, 0x60, 0x86,
+							 0x48, 0x01, 0x65, 0x03,
+							 0x04, 0x02, 0x03 };
+
+/*
+ * https://lamps-wg.github.io/draft-composite-sigs/draft-ietf-lamps-pq-composite-sigs.html
+ */
+static const uint8_t sha3_256_oid_der[] __maybe_unused = {
+	0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x08
+};
+static const uint8_t sha3_384_oid_der[] __maybe_unused = {
+	0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x09
+};
+static const uint8_t sha3_512_oid_der[] __maybe_unused = {
+	0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x0a
+};
+
+/* RFC8692 2.16.840.1.101.3.4.2.11 */
+static const uint8_t shake128_oid_der[] __maybe_unused = {
+	0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x0B
+};
+
+/* RFC8692 2.16.840.1.101.3.4.2.11 */
+static const uint8_t shake256_oid_der[] __maybe_unused = {
+	0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x0C
+};
+
+static int signature_ph_oids(struct shake_ctx *hash_ctx, size_t mlen,
+			     unsigned int nist_category)
+{
+	/* If no hash is supplied, we have no HashML-DSA */
+	if (!signature_prehash_type)
+		return 0;
+
+	/*
+	 * The signature init/update/final operation will not work with the
+	 * check of mlen, as only when _final is invoked, the message length
+	 * is known.
+	 *
+	 * As defined in FIPS 204, section 5.4 requires
+	 * "... the digest that is signed needs to be generated using an
+	 * approved hash function or XOF (e.g., from FIPS 180 or FIPS 202) that
+	 * provides at least λ bits of classical security strength against both
+	 * collision and second preimage attacks ... Obtaining at least λ bits
+	 * of classical security strength against collision attacks requires
+	 * that the digest to be signed be at least 2λ bits in length."
+	 * This requirement implies in the following definitions.
+	 */
+	switch (nist_category) {
+	case 1:
+		if (strcmp(signature_prehash_type, "sha256") == 0) {
+			// if (mlen != LC_SHA256_SIZE_DIGEST)
+			// 	return -EOPNOTSUPP;
+			shake_update(hash_ctx, sha256_oid_der,
+				     sizeof(sha256_oid_der));
+			return 0;
+		}
+		if (strcmp(signature_prehash_type, "sha3-256") == 0) {
+			// if (mlen != LC_SHA3_256_SIZE_DIGEST)
+			// 	return -EOPNOTSUPP;
+			shake_update(hash_ctx, sha3_256_oid_der,
+				     sizeof(sha3_256_oid_der));
+			return 0;
+		}
+		if (strcmp(signature_prehash_type, "shake128") == 0) {
+			/* FIPS 204 section 5.4.1 */
+			// if (mlen != 32)
+			// 	return -EOPNOTSUPP;
+			shake_update(hash_ctx, shake128_oid_der,
+				     sizeof(shake128_oid_der));
+			return 0;
+		}
+		/* FALLTHROUGH - Dilithium44 allows the following, too */
+		fallthrough;
+	case 3:
+		if (strcmp(signature_prehash_type, "sha3-384") == 0) {
+			// if (mlen != LC_SHA3_384_SIZE_DIGEST)
+			// 	return -EOPNOTSUPP;
+			shake_update(hash_ctx, sha3_384_oid_der,
+				     sizeof(sha3_384_oid_der));
+			return 0;
+		}
+		if (strcmp(signature_prehash_type, "sha384") == 0) {
+			// if (mlen != LC_SHA384_SIZE_DIGEST)
+			// 	return -EOPNOTSUPP;
+			shake_update(hash_ctx, sha384_oid_der,
+				     sizeof(sha384_oid_der));
+			return 0;
+		}
+		/* FALLTHROUGH - Dilithium[44|65] allows the following, too  */
+		fallthrough;
+	case 5:
+		if (strcmp(signature_prehash_type, "sha512") == 0) {
+			// if (mlen != LC_SHA512_SIZE_DIGEST)
+			// 	return -EOPNOTSUPP;
+			shake_update(hash_ctx, sha512_oid_der,
+				     sizeof(sha512_oid_der));
+			return 0;
+		}
+		if (strcmp(signature_prehash_type, "sha3-512") == 0) {
+			// if (mlen != LC_SHA3_512_SIZE_DIGEST)
+			// 	return -EOPNOTSUPP;
+			shake_update(hash_ctx, sha3_512_oid_der,
+				     sizeof(sha3_512_oid_der));
+			return 0;
+		} else if (strcmp(signature_prehash_type, "shake256") == 0) {
+			/* FIPS 204 section 5.4.1 */
+			/*
+			 * TODO: mlen must be >= 64 to comply with the
+			 * aforementioned requirement - unfortunately we can
+			 * only check mlen at the end of the signature
+			 * operation - shall this be implemented?
+			 */
+			// if (mlen != 64)
+			// 	return -EOPNOTSUPP;
+			shake_update(hash_ctx, shake256_oid_der,
+				     sizeof(shake256_oid_der));
+			return 0;
+		}
+		break;
+	default:
+		break;
+	}
+
+	return -EOPNOTSUPP;
+}
+
+/* FIPS 204 pre-hash ML-DSA domain separation, but without original message */
+static int standalone_signature_domain_separation(
+	struct shake_ctx *hash_ctx, const uint8_t *userctx,
+	size_t userctxlen, size_t mlen, unsigned int nist_category)
+{
+	uint8_t domainseparation[2];
+
+	domainseparation[0] = signature_prehash_type ? 1 : 0;
+	domainseparation[1] = (uint8_t)userctxlen;
+
+	shake_update(hash_ctx, domainseparation, sizeof(domainseparation));
+	shake_update(hash_ctx, userctx, userctxlen);
+
+	return signature_ph_oids(hash_ctx, mlen, nist_category);
+}
+
+/*
+ * Domain separation as required by:
+ *
+ * FIPS 204 pre-hash ML-DSA: no randomiser
+ * Composite ML-DSA draft 5: with randomizer
+ */
+int signature_domain_separation(struct shake_ctx *hash_ctx,
+				unsigned int ml_dsa_internal,
+				const uint8_t *userctx, size_t userctxlen,
+				const uint8_t *m, size_t mlen,
+				unsigned int nist_category)
+{
+	int ret = 0;
+
+	/* The internal operation skips the domain separation code */
+	if (ml_dsa_internal)
+		goto out;
+
+	if (userctxlen > 255)
+		return -EINVAL;
+
+	ret = standalone_signature_domain_separation(hash_ctx,
+						     userctx, userctxlen,
+						     mlen, nist_category);
+
+out:
+	shake_update(hash_ctx, m, mlen);
+	return ret;
+}
+EXPORT_SYMBOL(signature_domain_separation);
diff --git a/lib/crypto/mldsa/signature_domain_separation.h b/lib/crypto/mldsa/signature_domain_separation.h
new file mode 100644
index 000000000000..070c8b4ec371
--- /dev/null
+++ b/lib/crypto/mldsa/signature_domain_separation.h
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/*
+ * Copyright (C) 2024 - 2025, Stephan Mueller <smueller@chronox.de>
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef SIGNATURE_DOMAIN_SEPARATION_H
+#define SIGNATURE_DOMAIN_SEPARATION_H
+
+#include "dilithium.h"
+
+int signature_domain_separation(struct shake_ctx *hash_ctx,
+				unsigned int ml_dsa_internal,
+				const uint8_t *userctx, size_t userctxlen,
+				const uint8_t *m, size_t mlen,
+				unsigned int nist_category);
+
+#endif /* SIGNATURE_DOMAIN_SEPARATION_H */


^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v9 3/9] mldsa: Add a simpler API
  2025-11-17 14:55 [PATCH v9 0/9] lib/crypto: Add ML-DSA signing David Howells
  2025-11-17 14:55 ` [PATCH v9 1/9] crypto: Add support for shake256 through crypto_shash David Howells
  2025-11-17 14:55 ` [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support David Howells
@ 2025-11-17 14:55 ` David Howells
  2025-11-17 14:55 ` [PATCH v9 4/9] crypto: Add ML-DSA-44 pure rejection test vectors as a kunit test David Howells
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 32+ messages in thread
From: David Howells @ 2025-11-17 14:55 UTC (permalink / raw)
  To: Herbert Xu
  Cc: David Howells, Eric Biggers, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

Add a simpler ML-DSA API to hide all the details of packing/unpacking keys
and signatures.

Signed-off-by: David Howells <dhowells@redhat.com>
---
 Documentation/crypto/index.rst    |   1 +
 Documentation/crypto/mldsa.rst    | 143 +++++++++++++++++++++++++
 include/crypto/mldsa.h            |  50 +++++++++
 lib/crypto/mldsa/dilithium_44.c   |   1 +
 lib/crypto/mldsa/dilithium_65.c   |   1 +
 lib/crypto/mldsa/dilithium_87.c   |   1 +
 lib/crypto/mldsa/dilithium_type.h |  13 +++
 lib/crypto/mldsa/mldsa_api.c      | 168 ++++++++++++++++++++++++++++++
 8 files changed, 378 insertions(+)
 create mode 100644 Documentation/crypto/mldsa.rst
 create mode 100644 include/crypto/mldsa.h
 create mode 100644 lib/crypto/mldsa/mldsa_api.c

diff --git a/Documentation/crypto/index.rst b/Documentation/crypto/index.rst
index 4ee667c446f9..4498fc92bfc5 100644
--- a/Documentation/crypto/index.rst
+++ b/Documentation/crypto/index.rst
@@ -28,3 +28,4 @@ for cryptographic use cases, as well as programming examples.
    device_drivers/index
    krb5
    sha3
+   mldsa
diff --git a/Documentation/crypto/mldsa.rst b/Documentation/crypto/mldsa.rst
new file mode 100644
index 000000000000..dda5d42bfae9
--- /dev/null
+++ b/Documentation/crypto/mldsa.rst
@@ -0,0 +1,143 @@
+.. SPDX-License-Identifier: GPL-2.0-or-later
+
+===========================
+ML-DSA Algorithm Collection
+===========================
+
+.. contents::
+
+   - Overview
+   - Library API
+   - References
+   - API Function Reference
+
+
+Overview
+========
+
+The ML-DSA algorithm, as specified in NIST FIPS-204 [1]_, is a "Post Quantum"
+asymmetric cipher/public key algorithm.  It has digestion of the message to be
+signed built in to the algorithm, though options exist to do that separately
+(those aren't supported in the API presented here, however).  The algorithm
+used to digest the message in this implementation is SHAKE256, though in theory
+other algorithms can be used too.
+
+This implementation only supports signature verification and does not support
+keypair generation or signing.
+
+Three strengths are provided:
+
+ - ML-DSA 44
+ - ML-DSA 65
+ - ML-DSA 87
+
+This document describes the ML-DSA library API.  Each strength has its own API
+and would be built as a separate module if not built in.  There is also a
+common module for shared pieces.
+
+The algorithms are also available through the crypto_sig API, though
+`-EOPNOTSUPP` will be returned if any of the API functions involved in signing
+a message are invoked.
+
+
+Library API
+===========
+
+To use this::
+
+	#include <crypto/mldsa.h>
+
+must be included.
+
+[Note for anyone looking for the following functions in the code!  These
+functions are created by preprocessor templating and should be looked for
+without the strength in the name.]
+
+To perform single-step verification of a signature, one of the following
+functions can be used::
+
+	int mldsa_44_verify(const void *pk, size_t pk_len,
+			    const uint8_t *data, size_t data_len,
+			    const void *sig, size_t sig_len);
+
+	int mldsa_65_verify(const void *pk, size_t pk_len,
+			    const uint8_t *data, size_t data_len,
+			    const void *sig, size_t sig_len);
+
+	int mldsa_87_verify(const void *pk, size_t pk_len,
+			    const uint8_t *data, size_t data_len,
+			    const void *sig, size_t sig_len);
+
+They take the public key, signature and the complete message as a single
+buffer.  They return `-EINVAL` the public key type and/or signature size are
+incorrect.  They return `-EBADMSG` if the computed signature doesn't match the
+supplied one.
+
+If, however, the message to be verified is split into multiple fragments, then
+the multi-step API must be used.  Firstly, a context must be allocated::
+
+	struct mldsa_44_ctx *mldsa_ctx_alloc(void);
+
+	struct mldsa_65_ctx *mldsa_ctx_alloc(void);
+
+	struct mldsa_87_ctx *mldsa_ctx_alloc(void);
+
+This is type-specific as the size of the allocated state may vary by strength.
+Then data can be added to the internal hash::
+
+	int mldsa_44_verify_update(struct mldsa_44_ctx *ctx,
+				   const void *data, size_t data_len);
+
+	int mldsa_65_verify_update(struct mldsa_65_ctx *ctx,
+				   const void *data, size_t data_len);
+
+	int mldsa_87_verify_update(struct mldsa_87_ctx *ctx,
+				   const void *data, size_t data_len);
+
+And finally the signature verification can be performed::
+
+	int mldsa_44_verify_final(struct mldsa_44_ctx *ctx,
+				  const void *pk, size_t pk_len,
+				  const void *sig, size_t sig_len);
+
+	int mldsa_65_verify_final(struct mldsa_65_ctx *ctx,
+				  const void *pk, size_t pk_len,
+				  const void *sig, size_t sig_len);
+
+	int mldsa_87_verify_final(struct mldsa_87_ctx *ctx,
+				  const void *pk, size_t pk_len,
+				  const void *sig, size_t sig_len);
+
+These return `-EINVAL` if the specified type (if known), the public key type
+and signature type don't all match.  It return `-EBADMSG` if the computed
+signature doesn't match the supplied one.
+
+The context can be reset and used again (provided it's for a key of the same
+type)::
+
+	void mldsa_44_ctx_zeroize(struct mldsa_44_ctx *ctx);
+
+	void mldsa_65_ctx_zeroize(struct mldsa_65_ctx *ctx);
+
+	void mldsa_87_ctx_zeroize(struct mldsa_87_ctx *ctx);
+
+And finally, it can be freed::
+
+	void mldsa_44_ctx_free(struct mldsa_44_ctx *ctx);
+
+	void mldsa_65_ctx_free(struct mldsa_65_ctx *ctx);
+
+	void mldsa_87_ctx_free(struct mldsa_87_ctx *ctx);
+
+
+References
+==========
+
+.. [1] https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.204.pdf
+
+
+API Function Reference
+======================
+
+.. kernel-doc:: include/crypto/mldsa.h
+.. kernel-doc:: lib/crypto/mldsa/mldsa_api.c
diff --git a/include/crypto/mldsa.h b/include/crypto/mldsa.h
new file mode 100644
index 000000000000..f105f23b66b0
--- /dev/null
+++ b/include/crypto/mldsa.h
@@ -0,0 +1,50 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+/* Simple API for ML-DSA.
+ *
+ * Copyright (C) 2025 Red Hat, Inc. All Rights Reserved.
+ * Written by David Howells (dhowells@redhat.com)
+ *
+ * See also Documentation/crypto/mldsa.rst
+ */
+
+#ifndef _CRYPTO_MLDSA_H
+#define _CRYPTO_MLDSA_H
+
+struct mldsa_44_ctx;
+struct mldsa_65_ctx;
+struct mldsa_87_ctx;
+
+int mldsa_44_verify(const void *pk, size_t pk_len,
+		    const uint8_t *data, size_t data_len,
+		    const void *sig, size_t sig_len);
+struct mldsa_44_ctx *mldsa_44_ctx_alloc(void);
+int mldsa_44_verify_update(struct mldsa_44_ctx *ctx, const void *data, size_t data_len);
+int mldsa_44_verify_final(struct mldsa_44_ctx *ctx,
+			  const void *pk, size_t pk_len,
+			  const void *sig, size_t sig_len);
+void mldsa_44_ctx_zeroize(struct mldsa_44_ctx *ctx);
+void mldsa_44_ctx_free(struct mldsa_44_ctx *ctx);
+
+int mldsa_65_verify(const void *pk, size_t pk_len,
+		    const uint8_t *data, size_t data_len,
+		    const void *sig, size_t sig_len);
+struct mldsa_65_ctx *mldsa_65_ctx_alloc(void);
+int mldsa_65_verify_update(struct mldsa_65_ctx *ctx, const void *data, size_t data_len);
+int mldsa_65_verify_final(struct mldsa_65_ctx *ctx,
+			  const void *pk, size_t pk_len,
+			  const void *sig, size_t sig_len);
+void mldsa_65_ctx_zeroize(struct mldsa_65_ctx *ctx);
+void mldsa_65_ctx_free(struct mldsa_65_ctx *ctx);
+
+int mldsa_87_verify(const void *pk, size_t pk_len,
+		    const uint8_t *data, size_t data_len,
+		    const void *sig, size_t sig_len);
+struct mldsa_87_ctx *mldsa_87_ctx_alloc(void);
+int mldsa_87_verify_update(struct mldsa_87_ctx *ctx, const void *data, size_t data_len);
+int mldsa_87_verify_final(struct mldsa_87_ctx *ctx,
+			  const void *pk, size_t pk_len,
+			  const void *sig, size_t sig_len);
+void mldsa_87_ctx_zeroize(struct mldsa_87_ctx *ctx);
+void mldsa_87_ctx_free(struct mldsa_87_ctx *ctx);
+
+#endif /* _CRYPTO_MLDSA_H */
diff --git a/lib/crypto/mldsa/dilithium_44.c b/lib/crypto/mldsa/dilithium_44.c
index 1aea716016f0..4c70465a5601 100644
--- a/lib/crypto/mldsa/dilithium_44.c
+++ b/lib/crypto/mldsa/dilithium_44.c
@@ -31,3 +31,4 @@
 #include "dilithium_poly.c"
 #include "dilithium_rounding.c"
 #include "dilithium_signature_c.c"
+#include "mldsa_api.c"
diff --git a/lib/crypto/mldsa/dilithium_65.c b/lib/crypto/mldsa/dilithium_65.c
index 08f3a8e71228..7a2ab3f5a179 100644
--- a/lib/crypto/mldsa/dilithium_65.c
+++ b/lib/crypto/mldsa/dilithium_65.c
@@ -31,3 +31,4 @@
 #include "dilithium_poly.c"
 #include "dilithium_rounding.c"
 #include "dilithium_signature_c.c"
+#include "mldsa_api.c"
diff --git a/lib/crypto/mldsa/dilithium_87.c b/lib/crypto/mldsa/dilithium_87.c
index fcc3e0229ed9..548a7d1d365c 100644
--- a/lib/crypto/mldsa/dilithium_87.c
+++ b/lib/crypto/mldsa/dilithium_87.c
@@ -31,3 +31,4 @@
 #include "dilithium_poly.c"
 #include "dilithium_rounding.c"
 #include "dilithium_signature_c.c"
+#include "mldsa_api.c"
diff --git a/lib/crypto/mldsa/dilithium_type.h b/lib/crypto/mldsa/dilithium_type.h
index 84da7b97dd19..27b21b298001 100644
--- a/lib/crypto/mldsa/dilithium_type.h
+++ b/lib/crypto/mldsa/dilithium_type.h
@@ -34,23 +34,29 @@
  * compilation different sizes would not be possible.
  */
 #ifdef DILITHIUM_TYPE_65
+#define MLDSA_F(name) mldsa_65_##name
 #define DILITHIUM_F(name) dilithium_65_##name
 #define dilithium_pk dilithium_65_pk
 #define dilithium_sig dilithium_65_sig
+#define mldsa_ctx mldsa_65_ctx
 
 #include "dilithium_65.h"
 
 #elif defined DILITHIUM_TYPE_44
+#define MLDSA_F(name) mldsa_44_##name
 #define DILITHIUM_F(name) dilithium_44_##name
 #define dilithium_pk dilithium_44_pk
 #define dilithium_sig dilithium_44_sig
+#define mldsa_ctx mldsa_44_ctx
 
 #include "dilithium_44.h"
 
 #else
+#define MLDSA_F(name) mldsa_87_##name
 #define DILITHIUM_F(name) dilithium_87_##name
 #define dilithium_pk dilithium_87_pk
 #define dilithium_sig dilithium_87_sig
+#define mldsa_ctx mldsa_87_ctx
 
 #include "dilithium_87.h"
 
@@ -60,6 +66,13 @@
  * The following defines simply allow duplicate compilation of the
  * respective functions.
  */
+#define mldsa_verify		MLDSA_F(verify)
+#define mldsa_verify_update	MLDSA_F(verify_update)
+#define mldsa_verify_final	MLDSA_F(verify_final)
+#define mldsa_ctx_alloc		MLDSA_F(ctx_alloc)
+#define mldsa_ctx_zeroize	MLDSA_F(ctx_zeroize)
+#define mldsa_ctx_free		MLDSA_F(ctx_free)
+
 #define dilithium_pk_load	DILITHIUM_F(pk_load)
 #define dilithium_sig_load	DILITHIUM_F(sig_load)
 #define dilithium_pk_ptr	DILITHIUM_F(pk_ptr)
diff --git a/lib/crypto/mldsa/mldsa_api.c b/lib/crypto/mldsa/mldsa_api.c
new file mode 100644
index 000000000000..23895df30357
--- /dev/null
+++ b/lib/crypto/mldsa/mldsa_api.c
@@ -0,0 +1,168 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+/* Simple API for ML-DSA.
+ *
+ * Copyright (C) 2025 Red Hat, Inc. All Rights Reserved.
+ * Written by David Howells (dhowells@redhat.com)
+ *
+ * See also Documentation/crypto/mldsa.rst
+ */
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <crypto/mldsa.h>
+#include "dilithium.h"
+
+struct mldsa_ctx {
+	struct dilithium_pk pk;
+	struct dilithium_sig sig;
+	struct dilithium_ctx *dilithium;
+	enum dilithium_type type;
+};
+
+/**
+ * mldsa_verify - All-in-one ML-DSA signature verification
+ * @pk: Pointer to public key
+ * @pk_len: Length of public key
+ * @data: Pointer to signed data
+ * @data_len: Length of signed data
+ * @sig: Pointer to signature
+ * @sig_len: Length of signature
+ *
+ * Perform all the steps needed to verify an ML-DSA signature in one go.  Only
+ * one data buffer may be provided.  For multifragment messages, the
+ * alloc/update/final interface must be used instead.
+ *
+ * Return: 0 if signature could be verified correctly, -EBADMSG when signature
+ * cannot be verified and < 0 on other errors.
+ */
+int mldsa_verify(const void *pk, size_t pk_len,
+		 const uint8_t *data, size_t data_len,
+		 const void *sig, size_t sig_len)
+{
+	struct mldsa_ctx *ctx;
+	int ret;
+
+	ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
+	if (!ctx)
+		return -ENOMEM;
+
+	ret = dilithium_pk_load(&ctx->pk, pk, pk_len);
+	if (ret < 0)
+		goto out;
+	ret = dilithium_sig_load(&ctx->sig, sig, sig_len);
+	if (ret < 0)
+		goto out;
+
+	ret = dilithium_verify(&ctx->sig, data, data_len, &ctx->pk);
+out:
+	kfree_sensitive(ctx);
+	return ret;
+}
+EXPORT_SYMBOL(mldsa_verify);
+
+/**
+ * mldsa_ctx_alloc - Allocate ML-DSA context
+ *
+ * Return: Pointer to the allocated context or error code on failure.
+ *
+ * Context: Process context.  May sleep to allocate memory.
+ */
+struct mldsa_ctx *mldsa_ctx_alloc(void)
+{
+	struct mldsa_ctx *ctx;
+
+	ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
+	if (!ctx)
+		return ERR_PTR(-ENOMEM);
+
+	ctx->dilithium = dilithium_ctx_alloc_ahat(ctx->type);
+	if (!ctx->dilithium) {
+		kfree(ctx);
+		return ERR_PTR(-ENOMEM);
+	}
+
+	return ctx;
+}
+EXPORT_SYMBOL(mldsa_ctx_alloc);
+
+/**
+ * mldsa_verify_update - Add more data to an already initialized context
+ * @ctx: Pointer to an allocated ML-DSA context
+ * @data: Pointer to signed data
+ * @data_len: Length of signed data
+ *
+ * Add more signed data to the state in an allocated context.  This can be use
+ * to provide data that is split into multiple fragments.
+ *
+ * Return: 0 (success) or < 0 on error
+ *
+ * Context: Process context.  May sleep to allocate memory.
+ */
+int mldsa_verify_update(struct mldsa_ctx *ctx, const void *data, size_t data_len)
+{
+	return dilithium_verify_update(ctx->dilithium, data, data_len);
+}
+EXPORT_SYMBOL(mldsa_verify_update);
+
+/**
+ * mldsa_verify_final - Perform signature verification
+ * @ctx: Pointer to an allocated and updated ML-DSA context
+ * @pk: Pointer to public key
+ * @pk_len: Length of public key
+ * @sig: Pointer to signature
+ * @sig_len: Length of signature
+ *
+ * Finalise the state in the ML-DSA context and verify the signature.  The
+ * caller must have allocated it and updated it with all the pieces of data.
+ * Note that this does not free the context, but does reset it.
+ *
+ * Return: 0 if signature could be verified correctly, -EBADMSG when the
+ * signature cannot be verified and < 0 on other errors.
+ *
+ * Context: Process context.  May sleep to allocate memory.
+ */
+int mldsa_verify_final(struct mldsa_ctx *ctx,
+		       const void *pk, size_t pk_len,
+		       const void *sig, size_t sig_len)
+{
+	int ret;
+
+	ret = dilithium_pk_load(&ctx->pk, pk, pk_len);
+	if (ret < 0)
+		return ret;
+	ret = dilithium_sig_load(&ctx->sig, sig, sig_len);
+	if (ret < 0)
+		return ret;
+
+	ret = dilithium_verify_final(&ctx->sig, ctx->dilithium, &ctx->pk);
+	dilithium_ctx_zero(ctx->dilithium);
+	return ret;
+}
+EXPORT_SYMBOL(mldsa_verify_final);
+
+/**
+ * mldsa_ctx_zeroize - Resets an ML-DSA context
+ * @ctx: Context pointer
+ *
+ * Context: Any context.
+ */
+void mldsa_ctx_zeroize(struct mldsa_ctx *ctx)
+{
+	dilithium_ctx_zero(ctx->dilithium);
+	memset(&ctx->pk, 0, sizeof(ctx->pk));
+	memset(&ctx->sig, 0, sizeof(ctx->sig));
+}
+EXPORT_SYMBOL(mldsa_ctx_zeroize);
+
+/**
+ * mldsa_ctx_free - Clears and frees an ML-DSA context.
+ * @ctx: Context pointer
+ *
+ * Context: Any context.
+ */
+void mldsa_ctx_free(struct mldsa_ctx *ctx)
+{
+	dilithium_ctx_zero_free(ctx->dilithium);
+	kfree(ctx);
+}
+EXPORT_SYMBOL(mldsa_ctx_free);


^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v9 4/9] crypto: Add ML-DSA-44 pure rejection test vectors as a kunit test
  2025-11-17 14:55 [PATCH v9 0/9] lib/crypto: Add ML-DSA signing David Howells
                   ` (2 preceding siblings ...)
  2025-11-17 14:55 ` [PATCH v9 3/9] mldsa: Add a simpler API David Howells
@ 2025-11-17 14:55 ` David Howells
  2025-11-17 14:55 ` [PATCH v9 5/9] crypto: Add ML-DSA-65 " David Howells
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 32+ messages in thread
From: David Howells @ 2025-11-17 14:55 UTC (permalink / raw)
  To: Herbert Xu
  Cc: David Howells, Eric Biggers, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

Add the "Pure rejection tests" from Stephan Mueller's Leancrypto
implementation of ML-DSA/Dilithium 44 to the kernel as a kunit test.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Stephan Mueller <smueller@chronox.de>
cc: Eric Biggers <ebiggers@kernel.org>
cc: Jason A. Donenfeld <Jason@zx2c4.com>
cc: Ard Biesheuvel <ardb@kernel.org>
cc: Herbert Xu <herbert@gondor.apana.org.au>
cc: linux-crypto@vger.kernel.org
---
 lib/crypto/tests/Kconfig                      |  10 +
 lib/crypto/tests/Makefile                     |   1 +
 lib/crypto/tests/mldsa_kunit.c                |  65 +++
 .../tests/mldsa_pure_rejection_vectors_44.h   | 489 ++++++++++++++++++
 4 files changed, 565 insertions(+)
 create mode 100644 lib/crypto/tests/mldsa_kunit.c
 create mode 100644 lib/crypto/tests/mldsa_pure_rejection_vectors_44.h

diff --git a/lib/crypto/tests/Kconfig b/lib/crypto/tests/Kconfig
index 61d435c450bb..17b66dd6037d 100644
--- a/lib/crypto/tests/Kconfig
+++ b/lib/crypto/tests/Kconfig
@@ -101,6 +101,16 @@ config CRYPTO_LIB_SHA3_KUNIT_TEST
 	  including SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128 and
 	  SHAKE256.
 
+config CRYPTO_LIB_MLDSA_KUNIT_TEST
+	tristate "KUnit tests for ML-DSA"
+	depends on KUNIT
+	select CRYPTO_LIB_MLDSA
+	select CRYPTO
+	default KUNIT_ALL_TESTS
+	help
+	  This options enables the KUnit tests for ML-DSA (Dilithium)
+	  asymmetric key algorithm.
+
 config CRYPTO_LIB_BENCHMARK_VISIBLE
 	bool
 
diff --git a/lib/crypto/tests/Makefile b/lib/crypto/tests/Makefile
index 5109a0651925..2d9f6bc6ba88 100644
--- a/lib/crypto/tests/Makefile
+++ b/lib/crypto/tests/Makefile
@@ -10,3 +10,4 @@ obj-$(CONFIG_CRYPTO_LIB_SHA1_KUNIT_TEST) += sha1_kunit.o
 obj-$(CONFIG_CRYPTO_LIB_SHA256_KUNIT_TEST) += sha224_kunit.o sha256_kunit.o
 obj-$(CONFIG_CRYPTO_LIB_SHA512_KUNIT_TEST) += sha384_kunit.o sha512_kunit.o
 obj-$(CONFIG_CRYPTO_LIB_SHA3_KUNIT_TEST) += sha3_kunit.o
+obj-$(CONFIG_CRYPTO_LIB_MLDSA_KUNIT_TEST) += mldsa_kunit.o
diff --git a/lib/crypto/tests/mldsa_kunit.c b/lib/crypto/tests/mldsa_kunit.c
new file mode 100644
index 000000000000..e3af0adde0b8
--- /dev/null
+++ b/lib/crypto/tests/mldsa_kunit.c
@@ -0,0 +1,65 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+/*
+ * Copyright (C) 2025 Red Hat, Inc. All Rights Reserved.
+ * Written by David Howells (dhowells@redhat.com)
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/module.h>
+#include <crypto/mldsa.h>
+#include <kunit/test.h>
+#include "../mldsa/dilithium.h"
+
+MODULE_LICENSE("Dual BSD/GPL");
+MODULE_DESCRIPTION("Leancrypto ML-DSA (Dilithium) tests");
+MODULE_AUTHOR("David Howells <dhowells@redhat.com>");
+
+struct dilithium_testvector {
+	u16		pk_len;
+	u16		msg_len;
+	u16		sig_len;
+	const char	*what;
+	const char	*algo;
+	const u8	*pk;
+	const u8	*sig;
+	const u8	*msg;
+};
+
+/*
+ * Use rejection test vector which will cover all rejection code paths
+ * as generated with the dilithium_edge_case_tester.
+ *
+ * For FIPS 140: The test vectors cover the requirements of IG 10.3.A.
+ */
+static const struct dilithium_testvector dilithium_44_testvectors[] = {
+#include "mldsa_pure_rejection_vectors_44.h"
+};
+
+static void dilithium_44_kunit_test(struct kunit *test)
+{
+	const struct dilithium_testvector *tc = dilithium_44_testvectors;
+	int count = ARRAY_SIZE(dilithium_44_testvectors);
+	int ret;
+
+	for (int index = 0; index < count; index++) {
+		ret = mldsa_44_verify(tc->pk, tc->pk_len,
+				      tc->msg, tc->msg_len,
+				      tc->sig, tc->sig_len);
+		KUNIT_ASSERT_EQ_MSG(test, ret, 0, "Verify failed");
+	}
+
+	KUNIT_SUCCEED(test);
+}
+
+static struct kunit_case __refdata mldsa_kunit_cases[] = {
+	KUNIT_CASE(dilithium_44_kunit_test),
+	{}
+};
+
+static struct kunit_suite mldsa_kunit_suite = {
+	.name		= "mldsa",
+	.test_cases	= mldsa_kunit_cases,
+};
+
+kunit_test_suites(&mldsa_kunit_suite);
diff --git a/lib/crypto/tests/mldsa_pure_rejection_vectors_44.h b/lib/crypto/tests/mldsa_pure_rejection_vectors_44.h
new file mode 100644
index 000000000000..e452cad32194
--- /dev/null
+++ b/lib/crypto/tests/mldsa_pure_rejection_vectors_44.h
@@ -0,0 +1,489 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+	{
+		.what = "pure rejection vector",
+		.algo = "ml-dsa44",
+		.pk_len = DILITHIUM44_PUBLICKEYBYTES,
+		.pk = (const u8[DILITHIUM44_PUBLICKEYBYTES]){
+			0x8f, 0x61, 0x67, 0xa9, 0x7c, 0x61, 0xc2, 0xf2,
+			0x87, 0xe2, 0x28, 0xf8, 0x44, 0x80, 0x6f, 0xb0,
+			0x10, 0xc1, 0x14, 0xf6, 0x88, 0x42, 0x76, 0xbe,
+			0x05, 0xd2, 0x56, 0xa0, 0xb7, 0x46, 0xcf, 0xc5,
+			0x76, 0x0a, 0x52, 0xfe, 0xa3, 0x3c, 0x05, 0x6e,
+			0xd5, 0xd3, 0xbd, 0x80, 0x03, 0x29, 0x25, 0x96,
+			0xdf, 0xa9, 0x5b, 0x12, 0x42, 0x89, 0x6e, 0x03,
+			0x2c, 0x42, 0x64, 0xee, 0xc7, 0xf7, 0x55, 0xfe,
+			0xfd, 0x15, 0x74, 0xee, 0x2d, 0xb3, 0xbf, 0xf2,
+			0x24, 0xe7, 0x35, 0x45, 0x77, 0x67, 0x44, 0xd2,
+			0x0c, 0x43, 0xfc, 0x7b, 0x47, 0x56, 0xad, 0xc5,
+			0xe7, 0x37, 0x49, 0x21, 0x12, 0x57, 0x7f, 0xca,
+			0x7f, 0x5d, 0xac, 0x62, 0x5b, 0x8d, 0xbf, 0xdb,
+			0x64, 0xac, 0x12, 0x1d, 0x7f, 0x7a, 0x2f, 0xa0,
+			0x2c, 0xfe, 0x95, 0x4b, 0x78, 0xdb, 0xf0, 0x98,
+			0x97, 0x70, 0x62, 0xfc, 0x64, 0x4a, 0x1b, 0xbc,
+			0x30, 0x1b, 0x51, 0x13, 0x47, 0x6e, 0x83, 0xd2,
+			0xa2, 0xcf, 0x39, 0xba, 0xd3, 0x00, 0x62, 0x7c,
+			0x5b, 0xe6, 0x14, 0x55, 0xd5, 0xfc, 0xbf, 0x15,
+			0x65, 0xd7, 0x1f, 0xbb, 0xf6, 0x2b, 0x46, 0x38,
+			0x1e, 0xf3, 0x8f, 0x0d, 0x57, 0x8a, 0x41, 0xfb,
+			0x47, 0x19, 0xe1, 0x79, 0xca, 0x98, 0x1a, 0x73,
+			0x4d, 0x8a, 0xc0, 0xa1, 0xa7, 0x4a, 0x28, 0x4a,
+			0x92, 0x6c, 0x77, 0x4f, 0x18, 0xe1, 0xce, 0x11,
+			0x14, 0xd5, 0xf6, 0xc0, 0xa8, 0x1e, 0x26, 0x25,
+			0xe4, 0x30, 0xb2, 0x6f, 0x89, 0x6e, 0xc6, 0x44,
+			0x1a, 0xd3, 0xca, 0xe1, 0x05, 0x0d, 0x61, 0x80,
+			0xd7, 0xbc, 0x56, 0x0a, 0x57, 0x9f, 0x16, 0x40,
+			0x84, 0x1e, 0xc0, 0x5e, 0xcd, 0xb6, 0xc8, 0x5d,
+			0x87, 0xd6, 0xee, 0xcb, 0x21, 0x2f, 0x22, 0x9a,
+			0x7e, 0xea, 0x2e, 0xf5, 0x87, 0xf0, 0x44, 0x10,
+			0x3d, 0x42, 0x6d, 0x3f, 0x4f, 0xa0, 0x21, 0x8e,
+			0x40, 0x75, 0x3b, 0xaa, 0xd4, 0xd9, 0x37, 0x0a,
+			0x35, 0x5b, 0xba, 0xbd, 0x11, 0x17, 0x7b, 0x7e,
+			0xfc, 0xb1, 0x1c, 0x5c, 0x71, 0xce, 0xde, 0xa5,
+			0xec, 0xd6, 0x8b, 0x50, 0x64, 0x02, 0xca, 0x84,
+			0x26, 0xfe, 0x03, 0x9e, 0xaf, 0x13, 0x05, 0x1c,
+			0x85, 0x32, 0x92, 0x85, 0x84, 0x83, 0xb6, 0x76,
+			0x27, 0xa7, 0xd8, 0x0c, 0xa4, 0xb5, 0x65, 0x7a,
+			0xbf, 0x2e, 0x64, 0xce, 0x82, 0x0d, 0x27, 0xd3,
+			0x2c, 0x9d, 0xb5, 0xa5, 0x51, 0xe3, 0xab, 0xbd,
+			0xe2, 0xe0, 0x64, 0x71, 0x0f, 0x99, 0x09, 0x6a,
+			0x40, 0x9d, 0x8c, 0x6d, 0x63, 0x70, 0x42, 0xe2,
+			0xa8, 0x5c, 0x71, 0xd2, 0x88, 0x10, 0xbc, 0x3b,
+			0x9d, 0xc8, 0x3a, 0x8a, 0xf3, 0x81, 0x0a, 0x0e,
+			0xd8, 0xf6, 0x13, 0x90, 0xc2, 0xda, 0x4c, 0x4f,
+			0x6f, 0x1f, 0x61, 0x0d, 0x46, 0xac, 0x5c, 0x4a,
+			0xcc, 0x23, 0xfb, 0xf2, 0xf8, 0x9f, 0x48, 0x1f,
+			0xaf, 0x24, 0xb4, 0xc7, 0xcb, 0x6f, 0x80, 0x74,
+			0xa3, 0xdb, 0xa8, 0x61, 0x12, 0x60, 0x08, 0x56,
+			0x85, 0x47, 0x05, 0x32, 0x93, 0x43, 0x9b, 0xa6,
+			0xf6, 0x56, 0x3b, 0xab, 0x93, 0x28, 0x19, 0xda,
+			0xad, 0xb5, 0xaa, 0x2e, 0x83, 0x3d, 0x37, 0x0e,
+			0x83, 0xf2, 0xfe, 0xdd, 0xe8, 0xd9, 0x53, 0x36,
+			0x3b, 0x5d, 0x8e, 0x24, 0xa9, 0x3a, 0x8f, 0x85,
+			0x4b, 0x50, 0xf7, 0x61, 0x0f, 0x20, 0x92, 0x09,
+			0x1f, 0xe4, 0x24, 0x98, 0x9f, 0xa4, 0x52, 0x12,
+			0x2a, 0xae, 0x6f, 0xd6, 0x0d, 0xb5, 0x22, 0x72,
+			0x83, 0xfb, 0x4f, 0xef, 0xa6, 0x55, 0x9a, 0x14,
+			0xab, 0x82, 0x89, 0x1f, 0xf2, 0x0b, 0x14, 0x76,
+			0xb7, 0xf7, 0x14, 0xdd, 0xd6, 0xc1, 0xe8, 0xb2,
+			0x99, 0x23, 0x28, 0xe8, 0xa4, 0x69, 0x18, 0xf6,
+			0x3e, 0xb1, 0xff, 0xde, 0xf2, 0x2c, 0x7c, 0x73,
+			0x93, 0x32, 0x52, 0x06, 0xeb, 0x59, 0xb2, 0x8f,
+			0x2f, 0x1d, 0x6a, 0x85, 0x74, 0xd3, 0xe5, 0xa1,
+			0x95, 0xe4, 0x96, 0x1e, 0x75, 0x16, 0xe4, 0x5c,
+			0x40, 0xf0, 0x20, 0xb1, 0x10, 0xe7, 0x2a, 0x70,
+			0x41, 0xac, 0x49, 0x40, 0x55, 0xef, 0xd1, 0x58,
+			0x24, 0x6a, 0xa6, 0x20, 0xdc, 0x23, 0xdc, 0x66,
+			0x45, 0x4f, 0x6a, 0x52, 0x3c, 0x61, 0xc8, 0xfb,
+			0x28, 0x1e, 0x8c, 0x3f, 0xfc, 0xc7, 0x73, 0x2f,
+			0xf1, 0xe2, 0x31, 0xee, 0xa0, 0x5f, 0x12, 0x3f,
+			0x94, 0xe5, 0x26, 0xc0, 0x62, 0xcc, 0x67, 0x8f,
+			0x5d, 0xfd, 0x3d, 0x8f, 0x16, 0xae, 0x4e, 0x04,
+			0x54, 0x5b, 0x02, 0x66, 0x00, 0x70, 0xe5, 0xcc,
+			0xb9, 0x51, 0x8c, 0x1a, 0x5d, 0xf0, 0xfe, 0x7d,
+			0x1b, 0x2f, 0x0a, 0x48, 0x94, 0xda, 0x4b, 0xb3,
+			0x05, 0x75, 0x3b, 0x25, 0xda, 0xf2, 0x12, 0x47,
+			0xe2, 0xd7, 0xbb, 0xe7, 0x05, 0xa2, 0x4e, 0xaf,
+			0x2f, 0x29, 0x6c, 0xbd, 0x80, 0x82, 0xdf, 0xbb,
+			0x4b, 0x9d, 0x29, 0x9b, 0xef, 0xff, 0x17, 0x2a,
+			0xa7, 0x2f, 0x4a, 0x2e, 0xbf, 0x29, 0x38, 0xcb,
+			0x94, 0x9c, 0x10, 0x87, 0x69, 0x57, 0x7d, 0xd7,
+			0xcf, 0xc1, 0x57, 0x0f, 0xc2, 0x9c, 0x3b, 0x1e,
+			0xbc, 0x55, 0x08, 0xb1, 0x50, 0xb0, 0x28, 0x79,
+			0x1d, 0xd9, 0x2f, 0xa5, 0x12, 0xcc, 0xa7, 0x5b,
+			0xcb, 0x67, 0x57, 0x13, 0x4a, 0xb3, 0xd5, 0x34,
+			0xea, 0xd9, 0x6b, 0x15, 0x17, 0x1f, 0xe7, 0x52,
+			0x2a, 0x11, 0xdf, 0xab, 0x3a, 0x8d, 0x1b, 0xaa,
+			0xfa, 0x54, 0xf0, 0x20, 0x94, 0x40, 0x2d, 0x3e,
+			0xf2, 0xa2, 0x8b, 0xbb, 0x86, 0xce, 0x29, 0x87,
+			0xb1, 0xfa, 0x27, 0xf2, 0x5a, 0x79, 0xc2, 0xf8,
+			0xe9, 0xf2, 0x7c, 0x5a, 0xcd, 0x45, 0x8e, 0x8b,
+			0xba, 0xad, 0x13, 0x52, 0x79, 0xd5, 0x0f, 0x59,
+			0xfb, 0x07, 0x15, 0x1f, 0xb3, 0xe6, 0xc8, 0x66,
+			0xf7, 0x37, 0x19, 0xd8, 0x33, 0xdd, 0xc1, 0xb3,
+			0x96, 0x4b, 0x28, 0x43, 0xf8, 0x5e, 0xc7, 0xe8,
+			0x81, 0x6e, 0xd0, 0xb2, 0x5a, 0x3d, 0xf1, 0x68,
+			0x8f, 0xf0, 0xf5, 0x1a, 0x6d, 0xc3, 0xaa, 0x5b,
+			0x72, 0x27, 0xbd, 0xd6, 0x7c, 0x9b, 0xbf, 0x89,
+			0x6a, 0x09, 0xf0, 0x48, 0xf0, 0x8c, 0x27, 0x69,
+			0x28, 0xf3, 0x5f, 0x53, 0xe3, 0x4d, 0x60, 0x4a,
+			0xb8, 0xc5, 0xf9, 0x85, 0x07, 0x3e, 0xfb, 0xd7,
+			0x21, 0x69, 0xd5, 0xec, 0x18, 0x68, 0xb6, 0x55,
+			0x15, 0xac, 0x2e, 0x0f, 0x5c, 0x2e, 0x9e, 0x12,
+			0x10, 0x5e, 0xc6, 0xb3, 0xcd, 0xe6, 0x3a, 0x2f,
+			0x43, 0xf6, 0x75, 0x31, 0x3c, 0x90, 0x34, 0x1c,
+			0x3d, 0x45, 0xaa, 0x8e, 0x08, 0xcf, 0x58, 0x67,
+			0x34, 0xd4, 0x24, 0xb8, 0x20, 0x69, 0xfe, 0xf0,
+			0x33, 0xe9, 0x3e, 0xbd, 0xe5, 0x18, 0x9f, 0x66,
+			0xc9, 0x0d, 0x6f, 0x47, 0x99, 0xf7, 0x0c, 0xdd,
+			0xad, 0x8c, 0x6b, 0x80, 0xed, 0x19, 0x61, 0x8a,
+			0xba, 0x62, 0x2f, 0xcc, 0x0e, 0x47, 0xe0, 0xc6,
+			0x1f, 0x2f, 0x44, 0x40, 0x17, 0xb6, 0x89, 0xc6,
+			0xf5, 0xc2, 0x97, 0x89, 0x38, 0x6c, 0x8e, 0x2c,
+			0x46, 0x0b, 0x6e, 0x01, 0x47, 0xd3, 0x2f, 0x58,
+			0xf8, 0xc7, 0x3b, 0x49, 0xb2, 0x35, 0x9f, 0x67,
+			0xc9, 0x6c, 0xde, 0x30, 0x3b, 0x50, 0x19, 0x65,
+			0xbb, 0x73, 0xa1, 0x47, 0x01, 0x6a, 0x3d, 0xe3,
+			0x85, 0x4d, 0xd0, 0x72, 0x0d, 0xbc, 0x81, 0x52,
+			0xe8, 0x1a, 0x8b, 0x85, 0x4c, 0x6f, 0x0e, 0xfc,
+			0x59, 0x84, 0x7a, 0xf2, 0x28, 0x3e, 0x02, 0xcb,
+			0xe2, 0x4a, 0xbf, 0xac, 0x22, 0x34, 0x86, 0xe4,
+			0x7d, 0x6b, 0xa3, 0x52, 0xac, 0xff, 0xe5, 0xbe,
+			0x0c, 0x8d, 0xf5, 0xd8, 0xfd, 0x5a, 0x3d, 0xad,
+			0x0d, 0xc0, 0x02, 0xd0, 0x58, 0x8e, 0x7c, 0x50,
+			0x7c, 0x09, 0xc0, 0xdb, 0xd7, 0xdf, 0xe0, 0xb2,
+			0x6f, 0xb2, 0x79, 0x0d, 0xc1, 0xa0, 0xb1, 0x7e,
+			0xe3, 0x0d, 0xfc, 0x93, 0x43, 0x8c, 0x86, 0x68,
+			0xa6, 0x51, 0x93, 0x42, 0xb7, 0xcd, 0x13, 0x56,
+			0x6e, 0xdc, 0x63, 0x51, 0x23, 0xcf, 0x29, 0xc5,
+			0x5a, 0x66, 0x43, 0x80, 0xfe, 0x28, 0x15, 0x71,
+			0x52, 0x87, 0xe2, 0x18, 0x10, 0xad, 0x94, 0x47,
+			0x2f, 0xe3, 0x5d, 0x7a, 0x02, 0x6d, 0x31, 0x58,
+			0xae, 0x2f, 0x96, 0x53, 0x1b, 0x6c, 0x0e, 0x25,
+			0xea, 0x41, 0xd3, 0x29, 0x27, 0x22, 0x24, 0x8d,
+			0x1d, 0x8e, 0xd1, 0x33, 0x76, 0x67, 0x7d, 0x9d,
+			0xd9, 0xa7, 0x3e, 0x61, 0xd0, 0xad, 0x93, 0xb9,
+			0xdf, 0x87, 0x3a, 0x7b, 0x89, 0xc7, 0x1d, 0x91,
+			0xec, 0x43, 0xa4, 0xdc, 0x02, 0x88, 0x2e, 0xaa,
+			0xb2, 0x58, 0xa5, 0xd3, 0x68, 0x9c, 0x9f, 0x60,
+			0x12, 0xc8, 0x7e, 0x7d, 0x40, 0x80, 0xfd, 0xb4,
+			0xbf, 0x56, 0xf4, 0x01, 0x39, 0x3d, 0xa0, 0x34,
+			0x48, 0x79, 0x75, 0xe2, 0x0f, 0x60, 0x09, 0x42,
+			0x11, 0x6f, 0xa5, 0x31, 0x46, 0xb7, 0x03, 0xc8,
+			0x61, 0x53, 0x39, 0x1e, 0xf4, 0x99, 0x36, 0x7d,
+			0xc0, 0x87, 0xda, 0x63, 0x71, 0x9b, 0x29, 0x7b,
+			0x4e, 0x6f, 0x09, 0xa2, 0x2c, 0xa5, 0xc2, 0xb9,
+			0xe7, 0xe0, 0x56, 0x8b, 0x1d, 0xbb, 0xcc, 0x34,
+			0x8c, 0xbc, 0xb6, 0x0a, 0xc9, 0xfa, 0x4a, 0x31,
+			0x63, 0x0d, 0x30, 0xff, 0x59, 0x3d, 0x8c, 0x4d,
+			0x74, 0x28, 0xf4, 0xe9, 0x97, 0x43, 0x05, 0x3a,
+			0x33, 0x51, 0x51, 0xe4, 0x0e, 0x33, 0xae, 0x2c,
+			0xda, 0x28, 0x83, 0x93, 0x4e, 0xfe, 0x37, 0x1d,
+			0x6c, 0x25, 0x1e, 0x24, 0xbc, 0x3a, 0x5c, 0x68,
+			0xac, 0x54, 0x3a, 0x47, 0x74, 0x35, 0xff, 0x37,
+			0x80, 0x12, 0x30, 0xd7, 0x31, 0x2a, 0x49, 0x51,
+			0x2d, 0x4f, 0xd2, 0x9c, 0xca, 0x55, 0x87, 0xd0,
+			0x41, 0x86, 0xc7, 0xf2, 0xda, 0xf8, 0x4b, 0x08,
+			0x23, 0xb3, 0x00, 0xb7, 0xb6, 0x4f, 0x2e, 0xaf,
+			0xb8, 0x8e, 0xb1, 0x44, 0xe1, 0xed, 0x67, 0xf8,
+			0x80, 0xa7, 0x04, 0xa0, 0x66, 0xe6, 0xb5, 0x69,
+			0xca, 0x95, 0x71, 0xc8, 0x0d, 0x3d, 0xf6, 0x77,
+			0xfd, 0x2c, 0x95, 0xed, 0xe5, 0x22, 0x43, 0xd9,
+		},
+		.msg_len = 64,
+		.msg = (const u8[64]){
+			0x6d, 0xb3, 0x8e, 0x80, 0xaf, 0x5f, 0x19, 0xd9,
+			0xb0, 0xcf, 0xad, 0x58, 0xc7, 0x27, 0xae, 0x12,
+			0x4e, 0x7d, 0xa3, 0x1a, 0xe3, 0x85, 0xc6, 0xaa,
+			0xf6, 0xa1, 0x9a, 0xb1, 0xe9, 0xe0, 0xfe, 0x89,
+			0x1e, 0xc5, 0x6f, 0x10, 0x18, 0x24, 0xab, 0xa8,
+			0x6d, 0x03, 0xd0, 0x3d, 0xc3, 0xff, 0x67, 0xe7,
+			0x3a, 0x95, 0x94, 0xc8, 0x49, 0x51, 0x8f, 0xa0,
+			0x65, 0xcb, 0x20, 0x29, 0x2a, 0x6d, 0xf7, 0xf2,
+		},
+		.sig_len = DILITHIUM44_CRYPTO_BYTES,
+		.sig = (const u8[DILITHIUM44_CRYPTO_BYTES]){
+			0x5e, 0x05, 0x37, 0xe2, 0xc1, 0x20, 0xce, 0x7b,
+			0x8a, 0xdf, 0xf2, 0x22, 0x61, 0x17, 0x58, 0xaa,
+			0x3c, 0xe4, 0x82, 0x9c, 0x0e, 0xb6, 0x1f, 0xb4,
+			0x98, 0x0f, 0xba, 0x8e, 0x51, 0x15, 0x67, 0x76,
+			0x0b, 0x98, 0x63, 0xda, 0x17, 0xd3, 0xbb, 0xbe,
+			0x16, 0x29, 0x71, 0xab, 0xba, 0x99, 0xed, 0x3f,
+			0xd4, 0xc2, 0x16, 0x71, 0xb6, 0x21, 0x87, 0x48,
+			0xaa, 0xb5, 0x39, 0x5e, 0xfb, 0x5d, 0x68, 0x3b,
+			0xd3, 0x60, 0xf4, 0x5b, 0x85, 0x2a, 0x5b, 0xb5,
+			0xce, 0x6e, 0xf3, 0x39, 0xc3, 0xbe, 0x96, 0xa7,
+			0x61, 0xc9, 0xbf, 0xdf, 0x33, 0x1d, 0xec, 0xb9,
+			0x2b, 0x7a, 0x05, 0xce, 0x1e, 0xd9, 0x46, 0x70,
+			0xca, 0x54, 0xbf, 0xdc, 0x46, 0x9e, 0x2f, 0x29,
+			0x18, 0x57, 0x96, 0x84, 0xac, 0xe9, 0xd7, 0x74,
+			0xeb, 0x8e, 0x6b, 0xec, 0x46, 0x9a, 0x2a, 0xfa,
+			0xde, 0x80, 0x09, 0x53, 0xd9, 0xeb, 0x9d, 0xf7,
+			0xaa, 0xe2, 0xe5, 0xdc, 0xc3, 0xd9, 0x70, 0xe5,
+			0x8b, 0xa8, 0xba, 0x2b, 0x41, 0x72, 0x92, 0x25,
+			0xaf, 0xd9, 0xb4, 0x5a, 0x53, 0xb7, 0xcc, 0x1d,
+			0x69, 0xf1, 0x53, 0x5b, 0x52, 0x38, 0xbc, 0x47,
+			0x24, 0x8c, 0x1d, 0x28, 0x5d, 0x5c, 0x1c, 0xc9,
+			0x9d, 0xea, 0x1c, 0xb1, 0xb3, 0x49, 0x68, 0xd5,
+			0xad, 0xdc, 0x47, 0x58, 0x6d, 0x38, 0x33, 0xe7,
+			0x9b, 0xaa, 0x89, 0xb1, 0x96, 0x0b, 0xcb, 0xc4,
+			0x24, 0x73, 0xf2, 0xe7, 0xb6, 0xca, 0x74, 0x55,
+			0x1b, 0xb5, 0xb7, 0x9e, 0x2e, 0xe3, 0x3a, 0x32,
+			0x5d, 0x1d, 0x6e, 0x15, 0xe6, 0xb8, 0xfb, 0xce,
+			0x57, 0x81, 0x15, 0xb5, 0xcf, 0x67, 0x2b, 0x55,
+			0x4c, 0x85, 0x6f, 0x28, 0xa6, 0xbb, 0xb4, 0x28,
+			0x76, 0x91, 0xa4, 0x29, 0xa1, 0x50, 0x7c, 0xed,
+			0x9a, 0xfc, 0xe4, 0xbc, 0xd7, 0x28, 0x62, 0x28,
+			0x61, 0x4d, 0x8d, 0x8c, 0x5a, 0x5e, 0x4d, 0x1d,
+			0x5e, 0x73, 0xcc, 0x0b, 0x9d, 0x56, 0x73, 0xc7,
+			0xf2, 0x26, 0xf7, 0x7e, 0x61, 0xa4, 0x86, 0xf5,
+			0x1c, 0xd1, 0x00, 0xd0, 0x31, 0xc5, 0x03, 0x17,
+			0x1c, 0xec, 0x04, 0xe5, 0xc7, 0x13, 0xb6, 0x81,
+			0x78, 0x3d, 0x27, 0x87, 0x36, 0xf3, 0x2a, 0x59,
+			0x96, 0xeb, 0x44, 0xfd, 0xb9, 0x95, 0xb7, 0x76,
+			0xb1, 0x08, 0xc4, 0x98, 0xb1, 0x08, 0x36, 0x2a,
+			0x63, 0x72, 0x4f, 0xef, 0x47, 0xfc, 0x84, 0x09,
+			0x18, 0x60, 0xb7, 0x8a, 0xff, 0xae, 0x32, 0x3c,
+			0x79, 0xdf, 0xd6, 0x24, 0xbe, 0x9c, 0x38, 0x68,
+			0x92, 0xde, 0x81, 0x80, 0x22, 0x06, 0xf2, 0xe4,
+			0xde, 0x75, 0x4e, 0xd6, 0x36, 0x93, 0x44, 0xd1,
+			0xa4, 0x2e, 0x2e, 0x05, 0x87, 0xbd, 0xf7, 0xc5,
+			0xc8, 0x1c, 0x7b, 0x00, 0xe8, 0x11, 0x7f, 0xc2,
+			0x39, 0x4b, 0x7b, 0x97, 0x11, 0x92, 0x6c, 0xff,
+			0x89, 0x7f, 0x26, 0x89, 0x4f, 0x38, 0xfd, 0xdd,
+			0x08, 0xa7, 0xce, 0x6f, 0xe8, 0x57, 0x9b, 0x46,
+			0xe5, 0xdb, 0x72, 0x03, 0x1e, 0x7d, 0xb0, 0x77,
+			0xb9, 0xcc, 0xdb, 0x6c, 0xa7, 0xd8, 0x30, 0x34,
+			0xad, 0xa7, 0xe4, 0x63, 0xf0, 0x19, 0x0e, 0x5d,
+			0x3b, 0xe0, 0xff, 0x40, 0x1c, 0xa5, 0xb3, 0xb9,
+			0x87, 0x6e, 0x2c, 0xf3, 0x5f, 0xcd, 0x54, 0x2a,
+			0xc0, 0x6e, 0x2b, 0xd9, 0x2d, 0xcc, 0xd5, 0x68,
+			0x95, 0x4a, 0x4a, 0x84, 0x60, 0x54, 0xee, 0xa0,
+			0x21, 0x9e, 0x8d, 0x20, 0xcb, 0xe8, 0xc5, 0x5a,
+			0xba, 0xe2, 0xaa, 0x6e, 0x1c, 0xb1, 0xdf, 0x18,
+			0x9f, 0x94, 0xc7, 0x77, 0x5a, 0x2c, 0x0e, 0x05,
+			0xaa, 0x2a, 0x54, 0x58, 0x6c, 0xb3, 0x2e, 0x2f,
+			0xa4, 0x6e, 0x98, 0xbb, 0x6f, 0x41, 0x6d, 0xbd,
+			0x71, 0x95, 0xe4, 0xbc, 0x13, 0x37, 0x99, 0x0d,
+			0xac, 0x27, 0x69, 0xb9, 0x0b, 0x14, 0x5f, 0x6e,
+			0xd2, 0x2b, 0xe2, 0x0c, 0xc6, 0xbc, 0x10, 0x11,
+			0x47, 0xb7, 0x37, 0x2c, 0x0e, 0x88, 0xcd, 0xbb,
+			0xf7, 0x28, 0xd6, 0x4a, 0x9d, 0xff, 0x3c, 0x2f,
+			0x7d, 0x2b, 0xe8, 0xe8, 0x9e, 0xae, 0x7b, 0xe6,
+			0x2a, 0xb3, 0x4e, 0x20, 0xcc, 0xf1, 0x81, 0x8e,
+			0xed, 0x6d, 0xe2, 0x99, 0xf5, 0xb5, 0x1a, 0x30,
+			0x95, 0x52, 0x34, 0xf5, 0x3f, 0xc3, 0x31, 0xd6,
+			0xbe, 0xa2, 0xc8, 0xdc, 0xe4, 0x1c, 0xf6, 0x0f,
+			0x4d, 0x0b, 0x89, 0x8e, 0x66, 0x93, 0x88, 0xb8,
+			0xad, 0xbc, 0xdc, 0x96, 0x01, 0x9f, 0x16, 0x70,
+			0xf5, 0x4f, 0xa4, 0x0e, 0x0f, 0xc3, 0xf6, 0x9c,
+			0xe1, 0xa1, 0xe3, 0xec, 0x9d, 0x09, 0xcd, 0x90,
+			0x52, 0x26, 0x09, 0xd9, 0x9c, 0xde, 0xbd, 0xdf,
+			0xbb, 0xf4, 0x50, 0xd1, 0x89, 0x68, 0xf6, 0x86,
+			0x53, 0x33, 0x5a, 0xf6, 0x54, 0xb5, 0x7c, 0xe1,
+			0xd7, 0x8d, 0xb8, 0x58, 0xf5, 0xda, 0x14, 0xc8,
+			0x35, 0x1c, 0xcf, 0x44, 0x62, 0xbc, 0xd7, 0xe3,
+			0xd8, 0x32, 0xcf, 0x16, 0xf5, 0x2f, 0x55, 0x23,
+			0xc0, 0x1b, 0xc4, 0xe3, 0x28, 0xc8, 0xc8, 0x97,
+			0x70, 0x8b, 0x06, 0x98, 0xfb, 0xf6, 0x33, 0x6b,
+			0x86, 0x1c, 0xdb, 0x2a, 0x3c, 0x08, 0x08, 0x57,
+			0xd3, 0x4a, 0xf8, 0x22, 0x26, 0x78, 0x65, 0x5f,
+			0xa6, 0xf8, 0x9f, 0x22, 0x76, 0x62, 0xb0, 0x08,
+			0x68, 0x70, 0xea, 0x72, 0x57, 0x6b, 0xe7, 0xf7,
+			0xc6, 0x12, 0x9a, 0x49, 0x50, 0xa9, 0xa5, 0x6c,
+			0xe7, 0xda, 0xb4, 0xbf, 0xb6, 0xbf, 0x4f, 0xdf,
+			0x9e, 0x9b, 0xb4, 0xb3, 0x8d, 0x1a, 0x12, 0x16,
+			0x68, 0xd2, 0x63, 0xae, 0x92, 0x77, 0x1f, 0x03,
+			0xa5, 0xed, 0x58, 0x3b, 0xe9, 0x0b, 0xfe, 0xfc,
+			0xae, 0x53, 0x0b, 0x5f, 0x13, 0xf2, 0xd2, 0xe2,
+			0x0b, 0xec, 0x75, 0x85, 0x68, 0x0c, 0x57, 0xde,
+			0x1b, 0x6d, 0x78, 0x0b, 0x19, 0x66, 0xa8, 0xf5,
+			0x45, 0x72, 0x2b, 0x01, 0x06, 0xf6, 0xd1, 0x47,
+			0x21, 0x24, 0x07, 0xf7, 0x71, 0x03, 0xbc, 0xb0,
+			0x7c, 0x5b, 0x5c, 0x24, 0xff, 0x74, 0x47, 0x62,
+			0x81, 0xc3, 0x0b, 0x31, 0x76, 0x90, 0x5b, 0xef,
+			0x95, 0xa8, 0xa7, 0x02, 0xa1, 0xbf, 0xe1, 0xf4,
+			0x16, 0x06, 0x8a, 0x97, 0x39, 0x35, 0xcf, 0xf3,
+			0xa7, 0x4a, 0x43, 0xba, 0x05, 0x95, 0x7d, 0x73,
+			0x76, 0x7a, 0x53, 0xef, 0xf8, 0x4e, 0xcb, 0x04,
+			0x70, 0x4c, 0xee, 0xff, 0x82, 0xbd, 0xcd, 0xc1,
+			0xbe, 0x3d, 0x83, 0x71, 0x03, 0xf0, 0xc0, 0x2b,
+			0x98, 0xf9, 0x60, 0x54, 0x02, 0x7d, 0xa6, 0x41,
+			0xcc, 0xa3, 0xd7, 0x8d, 0xfd, 0xce, 0x28, 0xae,
+			0x0f, 0x48, 0x17, 0x2a, 0xaf, 0xe9, 0xb9, 0x4a,
+			0x8a, 0x22, 0xd2, 0x4d, 0xd3, 0x1b, 0xa3, 0x39,
+			0x88, 0x8a, 0x8f, 0x5b, 0x44, 0x97, 0xb9, 0x04,
+			0x1b, 0x58, 0x67, 0x74, 0x2f, 0x07, 0x7a, 0x52,
+			0xa9, 0x9d, 0xa4, 0x41, 0x28, 0xf2, 0x35, 0xca,
+			0x68, 0x4e, 0x4a, 0x3a, 0x66, 0xb9, 0x88, 0x2e,
+			0x65, 0x1d, 0x47, 0x04, 0xed, 0xdb, 0xe1, 0x40,
+			0x12, 0x06, 0x13, 0x62, 0x28, 0x3d, 0x0b, 0x35,
+			0x06, 0xc6, 0x2b, 0xb3, 0x71, 0x3c, 0xfa, 0x77,
+			0xec, 0x47, 0x93, 0x78, 0x36, 0x25, 0x19, 0xd7,
+			0x70, 0x30, 0x8a, 0x4c, 0x94, 0xdc, 0x3e, 0xeb,
+			0x61, 0x25, 0xbc, 0xa0, 0x27, 0xd9, 0x17, 0xa5,
+			0x19, 0x4f, 0xf4, 0x93, 0x32, 0x56, 0x9a, 0x0b,
+			0x77, 0xb4, 0x55, 0x1b, 0x8f, 0x9e, 0x69, 0x5b,
+			0xe2, 0x6d, 0x70, 0x15, 0x79, 0x5c, 0xf6, 0xb6,
+			0x04, 0xa2, 0x01, 0x37, 0x74, 0x20, 0xb8, 0x62,
+			0xf6, 0x37, 0x3c, 0xab, 0xca, 0x71, 0xa5, 0x8a,
+			0x56, 0x5d, 0x6a, 0x4a, 0x61, 0x2e, 0xb8, 0x62,
+			0x7d, 0x47, 0x34, 0x7d, 0xcd, 0x4d, 0x70, 0x23,
+			0xf5, 0xaa, 0xd1, 0xa5, 0xf0, 0x4c, 0x38, 0xc3,
+			0x98, 0x79, 0x4c, 0x0b, 0x6b, 0xcc, 0xe7, 0xd7,
+			0x09, 0xae, 0x23, 0x9b, 0x2f, 0xde, 0x70, 0xc6,
+			0xad, 0x0f, 0x66, 0xb5, 0x78, 0x6b, 0x0b, 0xb0,
+			0x2e, 0x94, 0xf2, 0xa8, 0x8b, 0x74, 0xf0, 0x03,
+			0x47, 0xd8, 0xec, 0xe8, 0x1f, 0xa3, 0x7b, 0x38,
+			0x9e, 0x0e, 0xc0, 0x47, 0xd2, 0x0f, 0x8e, 0x7f,
+			0xb1, 0x83, 0xd3, 0x86, 0x79, 0x3c, 0xa1, 0xae,
+			0xc4, 0xaf, 0xae, 0x9d, 0x83, 0xc0, 0xd1, 0x2b,
+			0x2b, 0xda, 0x50, 0x8c, 0xea, 0x41, 0x97, 0x9b,
+			0x0f, 0x15, 0xc2, 0xe2, 0x8f, 0x39, 0x0b, 0x92,
+			0xdd, 0xde, 0x52, 0x62, 0x74, 0xdc, 0xda, 0x11,
+			0x87, 0x4d, 0xa9, 0x4a, 0xc5, 0x2f, 0xae, 0xaf,
+			0xc1, 0xc3, 0x05, 0xfa, 0x38, 0xcc, 0x5c, 0xb1,
+			0x9f, 0xe0, 0x82, 0x90, 0xb3, 0xd5, 0xdc, 0xf4,
+			0x55, 0xdb, 0xea, 0x94, 0x06, 0x7c, 0x2c, 0x82,
+			0x78, 0xeb, 0xa5, 0x01, 0xf0, 0x3d, 0x4b, 0x87,
+			0xdd, 0xd5, 0x91, 0x4f, 0xf3, 0xa7, 0xdf, 0xa1,
+			0xd8, 0x31, 0xde, 0x05, 0x99, 0x67, 0x3d, 0xa4,
+			0x6b, 0x19, 0xa3, 0xe8, 0x55, 0xb7, 0xf5, 0xc3,
+			0x63, 0x5e, 0xd4, 0x38, 0xf9, 0x24, 0x64, 0x7d,
+			0x17, 0xc1, 0x07, 0xbe, 0x39, 0x54, 0x1b, 0x44,
+			0xe5, 0xc6, 0x3c, 0x02, 0xb1, 0x6f, 0xff, 0x8c,
+			0xcb, 0x79, 0xe2, 0xec, 0x4d, 0x01, 0xfa, 0x7f,
+			0x88, 0x1d, 0xc3, 0x4c, 0x6a, 0xfb, 0x0b, 0xc6,
+			0x57, 0xc3, 0xd8, 0x24, 0x47, 0x41, 0xbd, 0x27,
+			0xc4, 0xd4, 0x49, 0xfb, 0x52, 0xe6, 0x77, 0x5f,
+			0x0a, 0xdf, 0xea, 0xd5, 0xd3, 0x22, 0xc3, 0x53,
+			0x16, 0xf3, 0x1b, 0x7b, 0x09, 0xd7, 0x10, 0x0e,
+			0x23, 0xae, 0x16, 0x8a, 0x93, 0xcb, 0xc9, 0xb7,
+			0xb8, 0xff, 0xd2, 0x50, 0x1f, 0x25, 0xa7, 0x71,
+			0x8f, 0x3f, 0xc0, 0xe1, 0x37, 0x10, 0x0b, 0x43,
+			0x6e, 0x2b, 0x16, 0x59, 0x8f, 0x77, 0x77, 0x6b,
+			0x77, 0xce, 0x76, 0x6b, 0x37, 0x81, 0xaf, 0x83,
+			0x42, 0x92, 0x93, 0xe5, 0x39, 0xca, 0xd2, 0x20,
+			0x2e, 0xcf, 0x24, 0x26, 0x4c, 0x51, 0x1c, 0x58,
+			0xc5, 0x8d, 0x05, 0x11, 0xdf, 0xae, 0x51, 0x38,
+			0xde, 0xab, 0x4e, 0x04, 0xc8, 0x24, 0x24, 0x0d,
+			0xd5, 0x9c, 0x5b, 0x2b, 0xe6, 0x0d, 0x83, 0x95,
+			0xcd, 0x1c, 0x89, 0xa1, 0xaf, 0x67, 0x47, 0xfb,
+			0x08, 0x02, 0xf8, 0x8b, 0x63, 0x05, 0x73, 0x20,
+			0x64, 0xd7, 0x52, 0x15, 0xa4, 0x5d, 0x63, 0x73,
+			0x73, 0x12, 0x0b, 0xdd, 0xfe, 0x9f, 0xb7, 0xe8,
+			0xa8, 0x94, 0x3a, 0x86, 0xff, 0xcf, 0x7d, 0x24,
+			0xbd, 0xb9, 0xea, 0x68, 0x23, 0xf4, 0x07, 0xc3,
+			0xfe, 0x63, 0xd0, 0xab, 0x65, 0x8a, 0xf0, 0x6d,
+			0x81, 0x8c, 0xc8, 0x0e, 0xc6, 0x6b, 0xdd, 0x2e,
+			0x65, 0x9b, 0x17, 0xcf, 0x82, 0x69, 0x46, 0xba,
+			0x62, 0x5d, 0x31, 0x33, 0x60, 0x18, 0x94, 0xa5,
+			0x77, 0x24, 0xc6, 0x45, 0xe5, 0xb3, 0xd5, 0x12,
+			0x10, 0xc9, 0x22, 0x98, 0xf9, 0xca, 0x20, 0x89,
+			0x79, 0x04, 0x08, 0xf5, 0x1c, 0xf8, 0x50, 0x8c,
+			0x25, 0xaa, 0x90, 0x90, 0x44, 0xbc, 0xfb, 0x5d,
+			0x3f, 0xf8, 0x38, 0x64, 0xca, 0x8d, 0xff, 0x17,
+			0xce, 0x70, 0x51, 0x90, 0x75, 0x6b, 0x7d, 0x64,
+			0x43, 0x56, 0xcd, 0xf8, 0x85, 0x93, 0x65, 0x09,
+			0x81, 0x30, 0x76, 0x79, 0xcc, 0xdf, 0x9c, 0x6d,
+			0xff, 0x89, 0x38, 0x60, 0xbf, 0x07, 0xcb, 0x2f,
+			0xc9, 0x87, 0xd7, 0xac, 0x74, 0x19, 0x57, 0x90,
+			0x5e, 0x69, 0x61, 0xf6, 0xca, 0xea, 0x45, 0x6b,
+			0xe2, 0xfe, 0x2c, 0xff, 0x1b, 0x23, 0x15, 0x52,
+			0xdd, 0x57, 0xfe, 0x1d, 0x10, 0xea, 0x0f, 0xce,
+			0x98, 0xe7, 0x47, 0x27, 0xec, 0x36, 0xe5, 0x68,
+			0x17, 0xcf, 0xdc, 0xb9, 0xef, 0x6a, 0xbc, 0xec,
+			0x78, 0x08, 0x64, 0x06, 0xe1, 0x1c, 0xc6, 0x87,
+			0xd6, 0x0a, 0xb1, 0x81, 0xc6, 0xb6, 0xf8, 0x8b,
+			0xe3, 0x19, 0x8c, 0xce, 0x46, 0x40, 0xc5, 0xc2,
+			0xae, 0x50, 0x26, 0x4a, 0x90, 0x91, 0x8d, 0xfe,
+			0x6b, 0x7d, 0x0a, 0x54, 0x4a, 0x4b, 0x48, 0x74,
+			0x4a, 0x37, 0x21, 0x7f, 0xdd, 0x87, 0xa3, 0x1e,
+			0xac, 0xcd, 0xf5, 0x9e, 0x75, 0xa2, 0x52, 0x63,
+			0x76, 0xca, 0x9e, 0x02, 0xeb, 0xe6, 0xa6, 0x73,
+			0xad, 0xea, 0xe8, 0x3e, 0x6f, 0x44, 0xed, 0xe8,
+			0x01, 0x29, 0x19, 0x6a, 0x20, 0x35, 0xa7, 0xf0,
+			0xf1, 0xaf, 0xc0, 0x3b, 0xb1, 0xd5, 0xe4, 0xfb,
+			0xf7, 0xd7, 0x2f, 0x33, 0x6c, 0x73, 0xfd, 0xe5,
+			0x5c, 0x63, 0xf6, 0x1c, 0x06, 0x13, 0xaf, 0xc1,
+			0x80, 0x55, 0x07, 0xae, 0x8c, 0x13, 0x74, 0xf6,
+			0xe0, 0x54, 0x15, 0xd8, 0xe0, 0xa5, 0x03, 0xcf,
+			0x22, 0xbe, 0x18, 0xef, 0x26, 0xad, 0x9c, 0x9d,
+			0x51, 0xb1, 0x3b, 0x37, 0x03, 0xbf, 0xf0, 0xc5,
+			0xcb, 0x6c, 0x5d, 0x30, 0xa9, 0x5a, 0x10, 0x90,
+			0xfa, 0xb4, 0xd4, 0x0e, 0x6b, 0x4a, 0x0a, 0x6c,
+			0x9d, 0x2e, 0x69, 0xe8, 0xec, 0x69, 0xe2, 0x50,
+			0xab, 0x2f, 0xdc, 0xff, 0xaf, 0xac, 0x65, 0xe7,
+			0xf0, 0xc1, 0x6f, 0x7c, 0x2d, 0xa1, 0xeb, 0x97,
+			0x90, 0x7c, 0x1e, 0xa8, 0x53, 0x1b, 0x87, 0xc5,
+			0xa9, 0xa1, 0xcf, 0x86, 0x7e, 0x11, 0xf8, 0xd6,
+			0x14, 0xda, 0x19, 0x81, 0x19, 0xb4, 0x45, 0x1c,
+			0x7c, 0xb9, 0x96, 0xa2, 0xac, 0x79, 0x24, 0x94,
+			0x7c, 0xb2, 0x1e, 0x83, 0xea, 0xc4, 0xb9, 0xd2,
+			0x0d, 0x4c, 0x55, 0x3d, 0x15, 0x7b, 0x65, 0xd8,
+			0xff, 0x03, 0x5d, 0xed, 0x3c, 0x94, 0x76, 0x19,
+			0x40, 0x3b, 0xcc, 0x45, 0xbe, 0x91, 0x19, 0x8c,
+			0x75, 0xe5, 0xd2, 0xbe, 0x67, 0x40, 0xb1, 0x67,
+			0x8e, 0x2a, 0x34, 0xd5, 0x99, 0xee, 0xd9, 0x4f,
+			0x89, 0x7c, 0xf0, 0xd6, 0x93, 0x59, 0x4b, 0x3a,
+			0x8d, 0xe6, 0xbd, 0xde, 0xce, 0xef, 0x8b, 0x3c,
+			0xe3, 0xf7, 0x06, 0x33, 0x27, 0x8d, 0xd9, 0x22,
+			0x1a, 0x65, 0x40, 0xfc, 0x69, 0x1b, 0x7d, 0xf0,
+			0xed, 0xe4, 0xe0, 0x7f, 0x6d, 0x23, 0xed, 0x11,
+			0xd1, 0x07, 0xb0, 0x2f, 0x8a, 0xbf, 0x51, 0x37,
+			0x22, 0x04, 0xed, 0x93, 0xea, 0x1d, 0x0b, 0x30,
+			0x15, 0x89, 0x22, 0x7a, 0x45, 0x56, 0x99, 0xc6,
+			0xac, 0xd6, 0xce, 0x61, 0xea, 0xb2, 0x59, 0xe8,
+			0xb5, 0xfc, 0x87, 0xa7, 0xfe, 0x09, 0xa2, 0x0d,
+			0x5e, 0xbe, 0xb9, 0xd4, 0x9a, 0x1b, 0x60, 0xda,
+			0xb9, 0x32, 0xf1, 0x30, 0x3e, 0xb2, 0x45, 0x6d,
+			0x55, 0x0c, 0x2c, 0x4b, 0x9a, 0xc0, 0xbb, 0x8e,
+			0xac, 0x9c, 0x95, 0x5f, 0x08, 0x88, 0xa0, 0x53,
+			0x05, 0x75, 0x8d, 0x9e, 0x9d, 0x3f, 0x0f, 0xdd,
+			0x50, 0x0d, 0xf8, 0x11, 0xbd, 0xf9, 0xfb, 0x22,
+			0x5c, 0x7b, 0x9e, 0x7c, 0x8e, 0x2f, 0x0e, 0xdb,
+			0xb8, 0x1d, 0x0c, 0x5e, 0x82, 0xf3, 0x8e, 0xec,
+			0x32, 0x1c, 0x59, 0x73, 0xa5, 0xf3, 0x5b, 0x47,
+			0x00, 0x64, 0x89, 0x68, 0x3b, 0xaf, 0xe8, 0xe2,
+			0x9b, 0xa6, 0xac, 0x2c, 0xf9, 0x2b, 0x92, 0xf3,
+			0xf0, 0x5b, 0xcc, 0x75, 0x22, 0xd5, 0xf4, 0x2b,
+			0x06, 0x96, 0xc8, 0x50, 0xee, 0xac, 0x62, 0x16,
+			0x45, 0x9e, 0xbc, 0xcc, 0x8f, 0x5a, 0x66, 0xc6,
+			0x30, 0x7c, 0xe0, 0x22, 0xcc, 0xb9, 0xda, 0x0b,
+			0x0a, 0xbd, 0x2a, 0x2e, 0x46, 0x7d, 0xb6, 0x86,
+			0x70, 0xa3, 0x16, 0x49, 0x85, 0x28, 0x7b, 0xe9,
+			0x00, 0x6b, 0xfa, 0x06, 0xb0, 0xeb, 0xbd, 0x67,
+			0x28, 0x6f, 0x27, 0xd7, 0x9c, 0x7f, 0xda, 0xec,
+			0xf4, 0x7e, 0x55, 0xe1, 0x0c, 0x29, 0x61, 0x7a,
+			0xf5, 0xb6, 0xb8, 0xa5, 0xef, 0x36, 0x6a, 0xad,
+			0x59, 0x22, 0xbd, 0x3d, 0xad, 0x86, 0xe7, 0x4c,
+			0x69, 0x26, 0x0f, 0xbf, 0x67, 0xad, 0x65, 0x32,
+			0xbd, 0x21, 0xd6, 0x59, 0x6b, 0xe3, 0xda, 0xc1,
+			0x6f, 0x82, 0x41, 0x2c, 0xaa, 0xe4, 0x8c, 0xfc,
+			0x7c, 0x61, 0x28, 0x51, 0x52, 0x3d, 0xf1, 0x84,
+			0xb5, 0x0b, 0xfd, 0x1f, 0x2a, 0x06, 0x2e, 0x30,
+			0xed, 0x63, 0x43, 0xc9, 0x83, 0x97, 0xb1, 0xd4,
+			0x80, 0x6f, 0x2c, 0x50, 0xec, 0x20, 0x95, 0x42,
+			0xa0, 0x34, 0x94, 0x1a, 0xa9, 0x5e, 0x5b, 0x59,
+			0xe3, 0x39, 0xac, 0xbd, 0x2f, 0x77, 0x36, 0x59,
+			0x9c, 0xc3, 0x3c, 0x66, 0x87, 0xf5, 0x81, 0x4b,
+			0xb0, 0x10, 0x4a, 0xe6, 0x46, 0xe7, 0xce, 0x93,
+			0x7b, 0x24, 0x6b, 0x2e, 0xc1, 0xe5, 0xaf, 0x4b,
+			0x71, 0x22, 0xad, 0x88, 0xda, 0x55, 0xcb, 0xe0,
+			0x73, 0xd1, 0x65, 0x7d, 0xa5, 0x7f, 0x36, 0xbc,
+			0x42, 0xc2, 0x78, 0x9f, 0x88, 0xe8, 0xdb, 0xff,
+			0x8a, 0x5a, 0x80, 0x34, 0x3a, 0x23, 0x4c, 0x8a,
+			0x81, 0xff, 0xbd, 0xb7, 0x88, 0xd0, 0x73, 0x07,
+			0x8a, 0x4e, 0xa7, 0x4a, 0x61, 0x0f, 0x1f, 0x1c,
+			0xe7, 0x34, 0x37, 0x1c, 0x53, 0x90, 0x3b, 0xa4,
+			0x32, 0x6c, 0x6d, 0xe8, 0x00, 0xde, 0xe0, 0x0c,
+			0x5e, 0x06, 0xef, 0xb8, 0x48, 0x2e, 0xb3, 0xda,
+			0xac, 0x92, 0x4d, 0x0d, 0x95, 0x75, 0x44, 0x01,
+			0x6f, 0x97, 0xc3, 0x29, 0x76, 0x33, 0x36, 0x9a,
+			0xae, 0xfb, 0x1b, 0x43, 0xe5, 0xb1, 0x54, 0x3a,
+			0x9c, 0x76, 0x7f, 0x76, 0x83, 0xc9, 0x9c, 0xd6,
+			0x56, 0x59, 0x83, 0xa9, 0xde, 0xd7, 0xb0, 0xf3,
+			0x34, 0x11, 0x31, 0x06, 0x8e, 0xe9, 0xd4, 0x79,
+			0xd5, 0x3d, 0x31, 0x6b, 0x59, 0xe9, 0x54, 0x69,
+			0x12, 0xfd, 0x44, 0x59, 0x4e, 0x1b, 0x3b, 0xb4,
+			0x12, 0xe9, 0xfb, 0xb0, 0xb4, 0x84, 0xb9, 0x7d,
+			0xea, 0x4f, 0xd1, 0x5f, 0xd0, 0x3e, 0xce, 0xef,
+			0x5c, 0xf7, 0xea, 0x55, 0xa0, 0x8f, 0xa8, 0xa7,
+			0x98, 0xe7, 0xa1, 0x6b, 0x3f, 0xba, 0x5a, 0x32,
+			0x4b, 0xfa, 0x31, 0xb6, 0x63, 0x86, 0x19, 0x00,
+			0xa2, 0x6d, 0x7d, 0x15, 0x56, 0x05, 0x68, 0xa3,
+			0xe0, 0xf3, 0xd4, 0x82, 0xcf, 0xeb, 0xd4, 0x1c,
+			0xd0, 0xb6, 0x14, 0x5e, 0x9e, 0x6b, 0xed, 0x7a,
+			0x02, 0x1a, 0xcd, 0x09, 0xdc, 0x26, 0x98, 0x50,
+			0x11, 0x34, 0x39, 0x50, 0x5a, 0x70, 0x79, 0x85,
+			0xca, 0xd2, 0xf2, 0x0c, 0x0d, 0x12, 0x1f, 0x2e,
+			0x41, 0x46, 0x51, 0x72, 0x75, 0x78, 0x8c, 0xa4,
+			0xaf, 0xba, 0xca, 0xd3, 0xdf, 0xea, 0xf8, 0x09,
+			0x0b, 0x36, 0x45, 0x4f, 0x77, 0x83, 0xae, 0xbc,
+			0xc5, 0xce, 0xe1, 0xf6, 0x1d, 0x1e, 0x38, 0x56,
+			0x9c, 0x9f, 0xb1, 0xbd, 0xda, 0xe7, 0xf0, 0xf4,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x0b, 0x1f, 0x2c, 0x38,
+		},
+	},


^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v9 5/9] crypto: Add ML-DSA-65 pure rejection test vectors as a kunit test
  2025-11-17 14:55 [PATCH v9 0/9] lib/crypto: Add ML-DSA signing David Howells
                   ` (3 preceding siblings ...)
  2025-11-17 14:55 ` [PATCH v9 4/9] crypto: Add ML-DSA-44 pure rejection test vectors as a kunit test David Howells
@ 2025-11-17 14:55 ` David Howells
  2025-11-17 14:55 ` [PATCH v9 6/9] crypto: Add ML-DSA-87 " David Howells
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 32+ messages in thread
From: David Howells @ 2025-11-17 14:55 UTC (permalink / raw)
  To: Herbert Xu
  Cc: David Howells, Eric Biggers, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

Add the "Pure rejection tests" from Stephan Mueller's Leancrypto
implementation of ML-DSA/Dilithium 65 to the kernel as a kunit test.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Stephan Mueller <smueller@chronox.de>
cc: Eric Biggers <ebiggers@kernel.org>
cc: Jason A. Donenfeld <Jason@zx2c4.com>
cc: Ard Biesheuvel <ardb@kernel.org>
cc: Herbert Xu <herbert@gondor.apana.org.au>
cc: linux-crypto@vger.kernel.org
---
 lib/crypto/tests/mldsa_kunit.c                |   20 +
 .../tests/mldsa_pure_rejection_vectors_65.h   | 4741 +++++++++++++++++
 2 files changed, 4761 insertions(+)
 create mode 100644 lib/crypto/tests/mldsa_pure_rejection_vectors_65.h

diff --git a/lib/crypto/tests/mldsa_kunit.c b/lib/crypto/tests/mldsa_kunit.c
index e3af0adde0b8..1999e6d7b252 100644
--- a/lib/crypto/tests/mldsa_kunit.c
+++ b/lib/crypto/tests/mldsa_kunit.c
@@ -35,6 +35,9 @@ struct dilithium_testvector {
 static const struct dilithium_testvector dilithium_44_testvectors[] = {
 #include "mldsa_pure_rejection_vectors_44.h"
 };
+static const struct dilithium_testvector dilithium_65_testvectors[] = {
+#include "mldsa_pure_rejection_vectors_65.h"
+};
 
 static void dilithium_44_kunit_test(struct kunit *test)
 {
@@ -52,8 +55,25 @@ static void dilithium_44_kunit_test(struct kunit *test)
 	KUNIT_SUCCEED(test);
 }
 
+static void dilithium_65_kunit_test(struct kunit *test)
+{
+	const struct dilithium_testvector *tc = dilithium_65_testvectors;
+	int count = ARRAY_SIZE(dilithium_65_testvectors);
+	int ret;
+
+	for (int index = 0; index < count; index++) {
+		ret = mldsa_65_verify(tc->pk, tc->pk_len,
+				      tc->msg, tc->msg_len,
+				      tc->sig, tc->sig_len);
+		KUNIT_ASSERT_EQ_MSG(test, ret, 0, "Verify failed");
+	}
+
+	KUNIT_SUCCEED(test);
+}
+
 static struct kunit_case __refdata mldsa_kunit_cases[] = {
 	KUNIT_CASE(dilithium_44_kunit_test),
+	KUNIT_CASE(dilithium_65_kunit_test),
 	{}
 };
 
diff --git a/lib/crypto/tests/mldsa_pure_rejection_vectors_65.h b/lib/crypto/tests/mldsa_pure_rejection_vectors_65.h
new file mode 100644
index 000000000000..ed552ed6868f
--- /dev/null
+++ b/lib/crypto/tests/mldsa_pure_rejection_vectors_65.h
@@ -0,0 +1,4741 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+	{
+		.what = "pure rejection vector",
+		.algo = "ml-dsa65",
+		.pk_len = DILITHIUM65_PUBLICKEYBYTES,
+		.pk = (const u8[DILITHIUM65_PUBLICKEYBYTES]){
+			0x9f, 0x55, 0x1e, 0x7f, 0x9c, 0x08, 0xb2, 0x83,
+			0xfd, 0x5b, 0xa2, 0xac, 0x4f, 0x26, 0xc2, 0xf5,
+			0x06, 0x05, 0x96, 0x08, 0x24, 0xad, 0xec, 0xe4,
+			0x99, 0xcc, 0x6c, 0xbd, 0x55, 0x37, 0x15, 0x94,
+			0xab, 0x31, 0x9e, 0x56, 0xe5, 0xe4, 0x55, 0xec,
+			0x4d, 0x49, 0x5b, 0x5a, 0x7a, 0xe8, 0xc3, 0x4a,
+			0x08, 0x44, 0x4a, 0xc2, 0x2d, 0xe4, 0x61, 0x33,
+			0x90, 0x20, 0x71, 0x45, 0xa5, 0x45, 0xd0, 0x83,
+			0x2b, 0x32, 0x6c, 0xa7, 0x9e, 0x76, 0xcd, 0xfb,
+			0x58, 0x15, 0x9e, 0x74, 0x0d, 0x67, 0x57, 0xb1,
+			0x06, 0x5b, 0x5d, 0xd5, 0x1c, 0xbb, 0x95, 0x40,
+			0x1c, 0x71, 0x31, 0x03, 0xef, 0xff, 0x04, 0x6b,
+			0xdd, 0xa2, 0xf0, 0x32, 0x00, 0x72, 0xbc, 0x87,
+			0xb6, 0x2c, 0x1f, 0x90, 0x7f, 0x92, 0xa0, 0xb2,
+			0x04, 0xdd, 0xa9, 0xaf, 0x7f, 0x01, 0x28, 0x4c,
+			0xb2, 0x57, 0x2d, 0x56, 0x93, 0xd0, 0xc7, 0x54,
+			0x02, 0x90, 0x57, 0x70, 0x23, 0x57, 0xe8, 0xe7,
+			0x33, 0x32, 0x98, 0xfc, 0x9b, 0x8e, 0x6e, 0x7b,
+			0xaa, 0x5d, 0xb5, 0x4e, 0xe0, 0x5d, 0x97, 0xa3,
+			0xea, 0x43, 0x7e, 0xb3, 0xa4, 0x8c, 0xcf, 0xdc,
+			0xc0, 0x51, 0xa7, 0x99, 0x45, 0x3d, 0x3c, 0xa0,
+			0xba, 0xc5, 0xff, 0xe1, 0x89, 0xb3, 0x7d, 0xc3,
+			0xdc, 0xe2, 0x23, 0x81, 0xff, 0xa9, 0xc7, 0x93,
+			0xc6, 0x67, 0xad, 0x94, 0xcf, 0xeb, 0x91, 0x78,
+			0x15, 0x25, 0xf7, 0xf5, 0x06, 0x08, 0x2f, 0x0c,
+			0xee, 0x0b, 0x6a, 0x06, 0x59, 0xe0, 0x1f, 0x2e,
+			0x5a, 0x12, 0x06, 0xf5, 0xf4, 0x8e, 0x75, 0x57,
+			0xa9, 0x33, 0x23, 0x0f, 0xc2, 0x6f, 0x02, 0xf8,
+			0x68, 0x0f, 0x62, 0x02, 0x81, 0xfe, 0x03, 0x7c,
+			0xaf, 0xd7, 0x42, 0x5b, 0xcc, 0xe7, 0x2b, 0xea,
+			0x49, 0xab, 0x03, 0x6d, 0x0a, 0x02, 0xae, 0x47,
+			0x79, 0xce, 0xfd, 0x18, 0x76, 0x07, 0x9e, 0xa6,
+			0xbf, 0x7e, 0x8d, 0x73, 0xf9, 0x44, 0xeb, 0x8c,
+			0xc5, 0x59, 0xb7, 0x19, 0xf6, 0x73, 0x53, 0x42,
+			0x2a, 0x55, 0x7b, 0xb4, 0x56, 0x49, 0x08, 0x9e,
+			0x9a, 0x65, 0x60, 0x70, 0x1d, 0xbd, 0xc6, 0x85,
+			0x29, 0xde, 0xfe, 0x44, 0xae, 0xdf, 0x25, 0xfd,
+			0x5b, 0x74, 0x6c, 0x96, 0xe6, 0x81, 0x37, 0x80,
+			0xe0, 0x9e, 0xf3, 0x75, 0x63, 0xb4, 0xc9, 0x2f,
+			0x71, 0xe6, 0xeb, 0xdf, 0xaf, 0x7e, 0xff, 0x9e,
+			0xe0, 0xbf, 0xca, 0xca, 0x11, 0xed, 0xc6, 0x04,
+			0xd8, 0x49, 0x13, 0x2c, 0x63, 0xf1, 0xb3, 0x17,
+			0x74, 0xd9, 0x50, 0x3f, 0xb9, 0x29, 0x0e, 0x48,
+			0xa7, 0xf0, 0xdc, 0x78, 0x18, 0x0e, 0x9f, 0xb7,
+			0xde, 0x36, 0x79, 0x67, 0xa4, 0x23, 0x08, 0xe7,
+			0x62, 0xe8, 0xa4, 0xe5, 0xcf, 0xff, 0x35, 0x55,
+			0x36, 0x2e, 0x3a, 0xe4, 0x45, 0x6a, 0x80, 0xf2,
+			0xca, 0xe7, 0x40, 0x79, 0x14, 0xc4, 0x62, 0x38,
+			0xbb, 0xd0, 0x4e, 0x6c, 0xb5, 0x85, 0x42, 0x3f,
+			0x35, 0xf7, 0xd7, 0x54, 0xb8, 0x2b, 0x8b, 0xd5,
+			0x6f, 0x16, 0x61, 0x27, 0x23, 0xac, 0xdb, 0xea,
+			0x9b, 0x3b, 0x99, 0xcd, 0x79, 0xe6, 0x12, 0x09,
+			0x99, 0x09, 0xa4, 0xe1, 0x88, 0x25, 0x00, 0x9e,
+			0x60, 0x16, 0x63, 0xd7, 0x42, 0x9b, 0xcc, 0x36,
+			0x9a, 0x8d, 0xa3, 0x75, 0x36, 0xa1, 0xa8, 0xfc,
+			0xa2, 0xfe, 0x29, 0x26, 0x4c, 0x93, 0x21, 0x44,
+			0x6b, 0x1c, 0xba, 0xbd, 0xef, 0xff, 0x6d, 0x1f,
+			0x2b, 0x6c, 0x66, 0x81, 0x9a, 0x3a, 0x1d, 0x0b,
+			0xd7, 0x24, 0xd4, 0xb8, 0x93, 0xb5, 0x22, 0xf9,
+			0xd2, 0xf4, 0xa5, 0x05, 0x78, 0x38, 0xae, 0x58,
+			0xf6, 0x50, 0x8f, 0x47, 0x1d, 0xf3, 0xfb, 0x0d,
+			0x04, 0x14, 0xd1, 0xd6, 0xd8, 0x2e, 0xf2, 0xbd,
+			0xf5, 0x71, 0x86, 0x4c, 0xdd, 0x61, 0x24, 0x18,
+			0x5b, 0x54, 0xf5, 0xcd, 0x99, 0x89, 0x01, 0x8e,
+			0xd1, 0x19, 0x52, 0xbc, 0x45, 0xed, 0x0e, 0xec,
+			0x72, 0x2f, 0x5a, 0xe7, 0xdf, 0x36, 0x1c, 0x57,
+			0x9f, 0xb2, 0x8b, 0xf2, 0x78, 0x1b, 0x3e, 0xc5,
+			0x48, 0x1f, 0x27, 0x04, 0x76, 0x10, 0x44, 0xee,
+			0x5c, 0x68, 0x8f, 0xca, 0xd7, 0x31, 0xfc, 0x5c,
+			0x40, 0x03, 0x2e, 0xbd, 0x1d, 0x59, 0x13, 0x57,
+			0xbc, 0x33, 0xc6, 0xa1, 0xa3, 0xe5, 0x55, 0x79,
+			0x9b, 0x7e, 0x49, 0xbb, 0x23, 0x96, 0xc3, 0x1c,
+			0xfe, 0x66, 0xeb, 0x5b, 0x5f, 0xe5, 0x03, 0xc9,
+			0xa4, 0xac, 0x4d, 0xc4, 0x50, 0xbb, 0xd3, 0xc1,
+			0x91, 0x48, 0xe0, 0x93, 0x92, 0x2a, 0xdb, 0x41,
+			0x37, 0x98, 0xbc, 0xa2, 0x7a, 0x09, 0x92, 0x0b,
+			0x1c, 0xe6, 0x4b, 0x1e, 0x8e, 0x78, 0x81, 0x74,
+			0x7d, 0x6b, 0x71, 0xd5, 0xe7, 0x0e, 0x7b, 0xc2,
+			0x74, 0x5d, 0x89, 0xf1, 0xfa, 0x59, 0xaa, 0xf7,
+			0x86, 0x66, 0x7e, 0xc2, 0x9c, 0xf4, 0xd5, 0x8d,
+			0xc0, 0xb7, 0xb7, 0xa2, 0xd5, 0xcd, 0x51, 0xc3,
+			0x7d, 0xa9, 0x5e, 0x46, 0xba, 0x06, 0xa3, 0x4d,
+			0x60, 0xd6, 0x68, 0xc6, 0xf9, 0x63, 0x88, 0x17,
+			0x5c, 0x20, 0xe1, 0xc4, 0x0f, 0x3f, 0xc1, 0xa9,
+			0xa7, 0x3e, 0x39, 0xef, 0x2f, 0xaf, 0xc4, 0x69,
+			0x29, 0xe3, 0xd4, 0x8d, 0xe0, 0x0e, 0x88, 0xc2,
+			0x93, 0x43, 0xfb, 0x28, 0xcf, 0x5d, 0x85, 0x50,
+			0xf7, 0xeb, 0x42, 0xf5, 0x87, 0xde, 0xa5, 0x65,
+			0xef, 0x43, 0x0c, 0x57, 0x76, 0x09, 0xf4, 0x5f,
+			0xde, 0x81, 0x0a, 0xd9, 0x59, 0x41, 0xa4, 0x6a,
+			0xb7, 0x05, 0xc7, 0xa5, 0xfe, 0x49, 0xd5, 0x9b,
+			0x57, 0x13, 0x14, 0x66, 0xe2, 0xb9, 0xcc, 0x09,
+			0x35, 0xd4, 0xb0, 0xe0, 0xd1, 0x0d, 0x7e, 0x50,
+			0x48, 0x45, 0x21, 0x00, 0x67, 0xb2, 0xad, 0xa7,
+			0x46, 0xe2, 0x6f, 0x70, 0xe5, 0x3c, 0x88, 0x04,
+			0xaa, 0x21, 0xde, 0x03, 0xb6, 0x6f, 0xfe, 0x43,
+			0x51, 0xdc, 0x2e, 0x5c, 0x6c, 0x77, 0x8f, 0x8e,
+			0x9d, 0x1a, 0x5b, 0x35, 0xc5, 0xe4, 0x48, 0x82,
+			0x17, 0x4b, 0xf0, 0xea, 0xc9, 0x0e, 0xd2, 0x8f,
+			0xcd, 0xd5, 0x01, 0xbd, 0x7f, 0x0f, 0xf5, 0xae,
+			0x92, 0x28, 0x1e, 0x2c, 0xf4, 0xe9, 0x03, 0xf7,
+			0x0a, 0xeb, 0x84, 0x18, 0xa1, 0x37, 0x38, 0x8a,
+			0x11, 0xa2, 0x5d, 0x8c, 0xf6, 0xe4, 0x3f, 0x5b,
+			0x87, 0x07, 0x6b, 0xb4, 0x07, 0xe0, 0x8f, 0x30,
+			0xc4, 0xfa, 0x27, 0xae, 0xfc, 0x02, 0xd1, 0x21,
+			0x5c, 0xbc, 0x0b, 0x93, 0x6e, 0x7e, 0xf9, 0x6b,
+			0x80, 0x7a, 0x25, 0x84, 0x20, 0xf1, 0x6a, 0xfa,
+			0x75, 0xed, 0x57, 0x61, 0x62, 0xa7, 0xf6, 0x5b,
+			0xe1, 0xb0, 0x38, 0xc8, 0xe9, 0x6d, 0x3f, 0xef,
+			0x1e, 0x99, 0x0b, 0xb7, 0xc8, 0x9f, 0x76, 0x5c,
+			0x04, 0x1f, 0x02, 0x92, 0x00, 0xa7, 0x38, 0x3d,
+			0x00, 0x3b, 0xa7, 0xbc, 0x39, 0x6e, 0xab, 0xf5,
+			0x10, 0xa8, 0xba, 0xd6, 0x28, 0x6b, 0x0e, 0x00,
+			0x48, 0xf9, 0x3b, 0x5c, 0xde, 0x59, 0x93, 0x46,
+			0xd6, 0x61, 0x52, 0x81, 0x71, 0x0f, 0x0e, 0x61,
+			0xac, 0xc6, 0x7f, 0x15, 0x93, 0xa7, 0xc1, 0x16,
+			0xb5, 0xef, 0x85, 0xd1, 0xa7, 0x61, 0xc2, 0x85,
+			0x1d, 0x61, 0xc6, 0xae, 0xb3, 0x9e, 0x8d, 0x23,
+			0xa3, 0xc8, 0xd5, 0xf2, 0xc7, 0x1b, 0x7e, 0xef,
+			0xd2, 0xdf, 0x25, 0xaf, 0x4e, 0x81, 0x15, 0x59,
+			0xe5, 0x36, 0xb1, 0xf1, 0xd5, 0xda, 0x58, 0xd8,
+			0xd9, 0x0d, 0x6d, 0xc9, 0x25, 0xb5, 0xe8, 0x1d,
+			0x3b, 0xca, 0x2d, 0xab, 0xf2, 0xe2, 0xe9, 0x55,
+			0xd7, 0xf4, 0xc7, 0xd0, 0x57, 0x7a, 0x86, 0x15,
+			0x0a, 0x5a, 0x8b, 0xd7, 0x3f, 0x66, 0x0f, 0x80,
+			0xb4, 0xe0, 0x5c, 0x33, 0xed, 0xaf, 0x1b, 0x3b,
+			0x6d, 0x1c, 0xd9, 0x8c, 0xb5, 0x96, 0xa3, 0xfb,
+			0xcf, 0xcc, 0x97, 0x1c, 0xae, 0x06, 0x19, 0x41,
+			0x61, 0xf8, 0x97, 0x6b, 0x82, 0x5e, 0x1c, 0xbf,
+			0x6f, 0x43, 0x3d, 0xe5, 0x00, 0xf5, 0xfe, 0x66,
+			0x48, 0x26, 0x31, 0xa1, 0x72, 0x67, 0x6e, 0xd4,
+			0x5b, 0x6f, 0x66, 0xde, 0x70, 0x8b, 0x2b, 0xc3,
+			0xa2, 0x30, 0xe9, 0x55, 0xc8, 0xff, 0xf8, 0xd0,
+			0xdd, 0xa9, 0x21, 0x85, 0x6e, 0x6c, 0x82, 0x66,
+			0xcc, 0x52, 0xf0, 0x9e, 0x1e, 0xb5, 0x3a, 0xff,
+			0x4c, 0xf3, 0xae, 0x02, 0xc3, 0x4b, 0x76, 0x25,
+			0xbd, 0xb0, 0x21, 0x54, 0x61, 0xda, 0x16, 0xd3,
+			0x23, 0x86, 0x41, 0xa1, 0x4c, 0x59, 0x15, 0x95,
+			0x65, 0x85, 0xb6, 0x8e, 0xa6, 0x37, 0xc0, 0xa2,
+			0x71, 0x1d, 0x67, 0x44, 0x7b, 0xe5, 0x4c, 0x4f,
+			0xb6, 0x2c, 0x46, 0xf7, 0x29, 0xa5, 0xf2, 0xd3,
+			0x51, 0x19, 0x91, 0x4d, 0xa7, 0xb5, 0x05, 0xb9,
+			0x6e, 0x61, 0x6e, 0xf8, 0xc0, 0x01, 0xe5, 0x41,
+			0x0a, 0x89, 0x64, 0x77, 0xf2, 0xc8, 0x63, 0x2d,
+			0x9d, 0x27, 0x7f, 0x47, 0x30, 0x39, 0xdf, 0xb6,
+			0x6e, 0x4f, 0x00, 0x3f, 0x15, 0xc6, 0xaf, 0x62,
+			0xdf, 0x3f, 0x47, 0xe8, 0x42, 0x90, 0x77, 0x23,
+			0x7a, 0xaa, 0x99, 0x53, 0x03, 0x63, 0x60, 0x59,
+			0x07, 0x52, 0x3c, 0xb5, 0x67, 0x59, 0xfe, 0x08,
+			0xe6, 0x43, 0x0f, 0x3b, 0x08, 0x7c, 0xc7, 0x07,
+			0x3c, 0xfa, 0x65, 0xea, 0x69, 0x51, 0x41, 0x31,
+			0xb3, 0x05, 0x69, 0xba, 0x2c, 0xbf, 0x89, 0x25,
+			0x9e, 0xfe, 0x07, 0x13, 0x78, 0x0e, 0x16, 0x54,
+			0xdf, 0x23, 0xdf, 0x10, 0x69, 0x79, 0xd0, 0x33,
+			0xd7, 0x21, 0x8b, 0xc8, 0x2a, 0xd0, 0x74, 0x0a,
+			0xfa, 0xb1, 0x6f, 0xa3, 0xcb, 0x1d, 0xca, 0x4f,
+			0x00, 0x46, 0x6c, 0x42, 0x09, 0xe0, 0x30, 0x89,
+			0x08, 0x33, 0x9b, 0x7b, 0x7b, 0x0f, 0x69, 0x5c,
+			0x0d, 0x34, 0x91, 0xfc, 0xfe, 0x22, 0x82, 0x02,
+			0xcd, 0xfa, 0x97, 0xe8, 0x28, 0x1d, 0xbc, 0x13,
+			0x0b, 0xfd, 0x47, 0xa1, 0x7e, 0xa2, 0x86, 0x4d,
+			0x6f, 0x12, 0x51, 0x35, 0x7d, 0x76, 0x8a, 0x58,
+			0x05, 0xb6, 0x39, 0xa1, 0x2f, 0xd7, 0xda, 0xaf,
+			0x00, 0xa0, 0x1a, 0x94, 0xd8, 0x23, 0x34, 0x99,
+			0x5c, 0xaf, 0xcc, 0x15, 0x4b, 0x56, 0xb2, 0xd2,
+			0x81, 0x07, 0xd3, 0xf3, 0x47, 0xa2, 0x45, 0x93,
+			0xcb, 0xae, 0xa7, 0x6b, 0x3f, 0xf9, 0xea, 0xfc,
+			0x0e, 0x64, 0xf2, 0x93, 0x7f, 0x24, 0x22, 0x73,
+			0x86, 0xc7, 0x2d, 0x75, 0x9b, 0x41, 0x8b, 0xfb,
+			0x3b, 0x26, 0x2a, 0xe5, 0x0b, 0xd4, 0x00, 0xe3,
+			0x2c, 0x69, 0x49, 0x62, 0x6c, 0x13, 0x58, 0x6e,
+			0xac, 0x43, 0xe5, 0x2b, 0x3b, 0x88, 0xdc, 0xd4,
+			0x41, 0xe8, 0xee, 0x4e, 0xc3, 0x28, 0x91, 0x17,
+			0x9a, 0x5a, 0xdb, 0x80, 0x8b, 0x4d, 0x64, 0xcc,
+			0xbe, 0x66, 0xa4, 0x62, 0xfb, 0x13, 0x44, 0x10,
+			0xd9, 0xe4, 0xd5, 0xa5, 0xae, 0x9e, 0x42, 0x50,
+			0xfc, 0x78, 0xad, 0xfa, 0xc4, 0xd0, 0x5a, 0x60,
+			0x9b, 0x45, 0x2b, 0x61, 0x5c, 0x57, 0xb5, 0x92,
+			0x28, 0xe9, 0xf5, 0x35, 0x67, 0xc1, 0x5e, 0xa8,
+			0x1c, 0x99, 0x36, 0x38, 0xb8, 0x5c, 0xff, 0x3d,
+			0xa0, 0xfc, 0xb0, 0xbc, 0x3d, 0x2c, 0xb4, 0x36,
+			0x17, 0xb4, 0x6d, 0xb5, 0x39, 0x45, 0xa9, 0x2a,
+			0x6b, 0xa2, 0x24, 0x44, 0x30, 0xab, 0x2c, 0x82,
+			0x36, 0xdc, 0xd6, 0x36, 0x5d, 0x0a, 0xdc, 0xee,
+			0x0f, 0x2b, 0x28, 0x99, 0xdc, 0x67, 0x0d, 0xea,
+			0x6e, 0x42, 0xb9, 0x45, 0x7f, 0xd2, 0x96, 0x1e,
+			0x60, 0x42, 0xeb, 0x1e, 0x5f, 0x8e, 0xa9, 0xdc,
+			0xd3, 0x8a, 0xd6, 0xbd, 0x4e, 0x1f, 0x42, 0x75,
+			0x1d, 0xe2, 0xc6, 0x11, 0xc9, 0x80, 0x1f, 0xfe,
+			0x99, 0x52, 0x4d, 0x7b, 0x35, 0xf7, 0xb7, 0xc3,
+			0xee, 0xd6, 0x94, 0xf5, 0x74, 0xa0, 0x69, 0xcd,
+			0x1f, 0x2b, 0xd0, 0x87, 0xf7, 0x8c, 0x69, 0xc5,
+			0x96, 0x70, 0x91, 0xe8, 0x3d, 0xd2, 0xcc, 0xf1,
+			0x4c, 0xcd, 0xe2, 0x14, 0x00, 0x10, 0x4a, 0xd9,
+			0x6a, 0x5d, 0x65, 0x2c, 0x4b, 0x79, 0x0c, 0xc4,
+			0x78, 0x5e, 0xc8, 0xc5, 0x37, 0x74, 0x6d, 0x50,
+			0x5c, 0x34, 0x1f, 0xe0, 0xf4, 0xe3, 0xe1, 0x86,
+			0x68, 0xb1, 0xea, 0x70, 0xf0, 0xae, 0xe4, 0x59,
+			0xa1, 0x08, 0x7e, 0x35, 0xa3, 0x16, 0xd2, 0xb0,
+			0xa3, 0xd4, 0xb0, 0x74, 0x8c, 0x05, 0x79, 0x73,
+			0xfb, 0xe6, 0x65, 0x96, 0x15, 0x07, 0xd5, 0xaf,
+			0x88, 0x9e, 0x6b, 0xf0, 0xbb, 0x3f, 0xe6, 0xd1,
+			0x6a, 0xe7, 0xc9, 0xae, 0xd9, 0xb0, 0x16, 0x1c,
+			0x40, 0xeb, 0xdb, 0xc1, 0xbf, 0x83, 0xdb, 0x8a,
+			0x4f, 0x96, 0xca, 0xd7, 0x22, 0x06, 0x87, 0x08,
+			0x9d, 0x65, 0x2f, 0xd9, 0x8e, 0x95, 0x6c, 0xcc,
+			0xbf, 0x76, 0x2a, 0xea, 0x5c, 0x8e, 0x5b, 0x17,
+			0x0f, 0x75, 0x7b, 0xfa, 0xf9, 0xfb, 0xaa, 0x92,
+			0xc7, 0x7e, 0x63, 0x63, 0x54, 0xa4, 0xff, 0xf6,
+			0xc0, 0xc0, 0xf5, 0x70, 0xd8, 0xe3, 0xa4, 0x79,
+			0x16, 0xf0, 0x6f, 0x90, 0x5e, 0xb7, 0xab, 0x6f,
+			0xab, 0x75, 0x3b, 0xe1, 0x4c, 0xa8, 0x0b, 0x72,
+			0x5f, 0x5f, 0x11, 0x22, 0x36, 0x71, 0x20, 0xd3,
+			0x5b, 0x5e, 0x07, 0x06, 0x76, 0x1a, 0xcc, 0x5e,
+			0x7c, 0x97, 0x7d, 0xb2, 0x6b, 0xf8, 0x39, 0x89,
+			0x37, 0xb6, 0x6d, 0xea, 0x74, 0x57, 0x28, 0xd7,
+			0x0e, 0x9b, 0xeb, 0x28, 0x88, 0x90, 0xfd, 0x2d,
+			0x16, 0x21, 0x74, 0x26, 0xc5, 0xb8, 0x44, 0xad,
+			0x9f, 0x97, 0xf9, 0x65, 0x36, 0xd8, 0x00, 0x59,
+			0x17, 0x49, 0xf9, 0xc7, 0xb3, 0x84, 0xb9, 0xe2,
+			0x95, 0xe0, 0xd1, 0x7f, 0x5f, 0xaa, 0xd7, 0xfd,
+			0x6a, 0x6a, 0x83, 0x14, 0x46, 0x1d, 0x12, 0x8d,
+			0x09, 0xc3, 0xa5, 0xca, 0x72, 0xa3, 0x25, 0x65,
+			0xb6, 0x40, 0x25, 0x04, 0x51, 0xab, 0x22, 0xeb,
+			0xd7, 0x69, 0xc9, 0x22, 0x9c, 0xa0, 0x19, 0x5c,
+			0x1a, 0xfd, 0x41, 0x8f, 0x98, 0xc5, 0x71, 0xb8,
+			0x6f, 0x76, 0xae, 0xfa, 0x9b, 0x03, 0xab, 0x43,
+			0x81, 0x3b, 0x66, 0xae, 0xf0, 0xd2, 0xb7, 0xee,
+			0x9a, 0xe3, 0xae, 0x45, 0xc1, 0x86, 0xb0, 0xce,
+			0x9e, 0x2b, 0xec, 0xb8, 0xcf, 0xca, 0x0e, 0x8c,
+			0x33, 0xfa, 0xa7, 0xef, 0xf7, 0xfc, 0xa1, 0x41,
+			0x49, 0xd3, 0x6d, 0xb5, 0x58, 0xe4, 0x0e, 0x24,
+			0xd2, 0x8a, 0x74, 0xc9, 0x56, 0x2e, 0x53, 0xc7,
+			0x7a, 0x38, 0x0f, 0x4b, 0xd9, 0xf9, 0x2f, 0xfa,
+			0x7d, 0xee, 0x14, 0x18, 0xce, 0x75, 0x42, 0x6c,
+			0x03, 0x34, 0xce, 0x80, 0xec, 0xf2, 0x05, 0xf0,
+			0xdf, 0xcd, 0xf8, 0xdb, 0x26, 0x7d, 0xb6, 0x3d,
+			0x28, 0x24, 0x7e, 0x7e, 0x39, 0x9f, 0xa6, 0xc6,
+			0xeb, 0x2a, 0xc8, 0x17, 0x94, 0xa9, 0x89, 0xf5,
+			0xdf, 0xcb, 0x77, 0xfd, 0xc9, 0x9e, 0x68, 0x98,
+			0x7d, 0x04, 0x50, 0x3c, 0x64, 0x1d, 0x66, 0xb0,
+			0x97, 0x06, 0xb6, 0x08, 0x5b, 0xe4, 0x17, 0x44,
+			0xd6, 0x94, 0x39, 0x6b, 0x03, 0x2c, 0xcb, 0x5a,
+			0x8d, 0x86, 0x08, 0x23, 0x4f, 0x95, 0xa8, 0x1a,
+			},
+		.msg_len = 64,
+		.msg = (const u8[64]){
+			0x1a, 0x84, 0x21, 0x0d, 0x35, 0x7a, 0x88, 0xc8,
+			0x6a, 0x11, 0xe3, 0x15, 0x24, 0xec, 0x0d, 0x2e,
+			0x76, 0xb9, 0xcf, 0x2b, 0x04, 0x25, 0x16, 0xae,
+			0x62, 0x42, 0xa0, 0x20, 0x68, 0x25, 0x3e, 0xb4,
+			0x75, 0xa7, 0x1d, 0x64, 0xc3, 0xd1, 0x08, 0x07,
+			0x67, 0xb6, 0xf7, 0x76, 0x76, 0xf6, 0xd6, 0x62,
+			0x66, 0x04, 0x89, 0x0c, 0x8f, 0x07, 0xac, 0xc8,
+			0x51, 0x77, 0xd9, 0x47, 0x5e, 0xb5, 0x22, 0x20,
+			},
+		.sig_len = DILITHIUM65_CRYPTO_BYTES,
+		.sig = (const u8[DILITHIUM65_CRYPTO_BYTES]){
+			0xda, 0xcf, 0x8d, 0x67, 0x59, 0x60, 0x6c, 0x39,
+			0x2d, 0x89, 0xb6, 0xa1, 0xf3, 0x8c, 0x70, 0xcf,
+			0x25, 0x86, 0x21, 0xa1, 0x9f, 0x20, 0x9e, 0xf5,
+			0xd2, 0xdd, 0xbd, 0x99, 0xfa, 0xe4, 0xab, 0x77,
+			0x31, 0x65, 0x18, 0xa1, 0xd1, 0x3f, 0x21, 0x70,
+			0x36, 0xe1, 0xf9, 0x5c, 0x28, 0xb6, 0x7d, 0x34,
+			0xae, 0x66, 0xc9, 0x1c, 0x8e, 0xc6, 0xf9, 0x45,
+			0x8c, 0xa9, 0xb2, 0xfb, 0x0f, 0x5b, 0xb8, 0xf9,
+			0xf5, 0xe2, 0x37, 0x79, 0x12, 0xda, 0xa7, 0x72,
+			0x9e, 0x0d, 0xf8, 0x88, 0x5b, 0x34, 0x49, 0x6c,
+			0xed, 0xa3, 0x7f, 0x86, 0xd3, 0xd9, 0x2f, 0x44,
+			0x08, 0x0d, 0xb7, 0xdb, 0x4a, 0xce, 0x02, 0x14,
+			0x02, 0xd6, 0x40, 0x75, 0xe3, 0xc0, 0x97, 0xfc,
+			0x6c, 0x6a, 0x88, 0x29, 0x0c, 0xe2, 0x3a, 0x2b,
+			0x28, 0x82, 0x8f, 0x27, 0x09, 0x69, 0x91, 0xc6,
+			0xc3, 0xb7, 0x07, 0x61, 0x86, 0x8d, 0x89, 0x8a,
+			0xd5, 0x00, 0x3b, 0x4b, 0xfc, 0x6f, 0xb3, 0x3f,
+			0x4c, 0x93, 0x31, 0xfc, 0x88, 0x53, 0x26, 0xea,
+			0xe5, 0x3a, 0xfc, 0xc1, 0x59, 0x16, 0xf0, 0xb7,
+			0xac, 0xde, 0x1e, 0xd8, 0x74, 0x85, 0x72, 0xd9,
+			0xbb, 0xbe, 0x76, 0x32, 0x25, 0x9d, 0x21, 0xbc,
+			0xfd, 0x8d, 0x32, 0xfe, 0xae, 0x24, 0xe5, 0x4a,
+			0xcc, 0x5d, 0x15, 0x23, 0xd3, 0x57, 0xe7, 0xa9,
+			0x2c, 0x31, 0xd7, 0xc5, 0x6b, 0x70, 0x6c, 0x22,
+			0x5a, 0x13, 0x1f, 0x76, 0x13, 0x78, 0x6f, 0xac,
+			0x42, 0x4c, 0x46, 0x81, 0xa2, 0x20, 0x91, 0x30,
+			0xed, 0xcb, 0x90, 0xfe, 0x3c, 0xa3, 0xc7, 0xb4,
+			0x1f, 0x21, 0x1d, 0x98, 0x74, 0x6a, 0x3e, 0xc8,
+			0xcc, 0xd2, 0x68, 0x87, 0x69, 0xa9, 0xdf, 0x50,
+			0xd5, 0x0a, 0x8e, 0x10, 0x54, 0xab, 0xea, 0x65,
+			0x2a, 0x52, 0xd7, 0x22, 0xae, 0x2f, 0x1e, 0xc3,
+			0x16, 0x58, 0x20, 0x18, 0x6d, 0x35, 0x46, 0x31,
+			0x43, 0x5d, 0x62, 0xfb, 0xb1, 0x47, 0x32, 0xfa,
+			0x14, 0xcc, 0x51, 0xa3, 0xcd, 0x99, 0x4f, 0x97,
+			0x0f, 0xca, 0x24, 0x93, 0x17, 0xea, 0xa3, 0xf3,
+			0x1f, 0xbe, 0xb5, 0xa3, 0xac, 0x80, 0xcc, 0x20,
+			0x3b, 0xa6, 0xd3, 0x32, 0x72, 0x4e, 0xd9, 0x25,
+			0xf9, 0xc2, 0x24, 0x15, 0xbd, 0x1e, 0x1e, 0x41,
+			0x8c, 0x18, 0x8c, 0x58, 0xe8, 0x75, 0x20, 0xff,
+			0xa3, 0xf4, 0xd4, 0xab, 0x75, 0x78, 0x4e, 0xbb,
+			0x7c, 0x94, 0x93, 0x28, 0x5b, 0x07, 0x3a, 0x3c,
+			0xc9, 0xf1, 0x55, 0x3e, 0x33, 0xed, 0xf8, 0x72,
+			0x55, 0xab, 0x5a, 0xea, 0xbe, 0x65, 0xfa, 0x81,
+			0x50, 0xc0, 0x9d, 0x2d, 0xfb, 0x04, 0x25, 0x7c,
+			0xb9, 0xee, 0xe2, 0xa3, 0x00, 0x44, 0xd3, 0x9d,
+			0xee, 0x4f, 0x80, 0x77, 0xfb, 0x26, 0x6b, 0x07,
+			0xd0, 0xff, 0x82, 0x39, 0x0e, 0x2b, 0x47, 0xa3,
+			0xe7, 0x3e, 0xc5, 0x4e, 0x15, 0x8a, 0x48, 0x28,
+			0xfb, 0xf7, 0xa4, 0x86, 0xfb, 0x77, 0x60, 0xcd,
+			0xc5, 0x68, 0x96, 0xd7, 0x4c, 0x3c, 0xf2, 0x51,
+			0x71, 0x79, 0x2e, 0x2e, 0x57, 0x10, 0xa7, 0xfc,
+			0xd1, 0xd4, 0x61, 0x71, 0x81, 0x85, 0x74, 0x09,
+			0x7d, 0x80, 0xd0, 0xc2, 0xe9, 0xff, 0xb7, 0x88,
+			0x53, 0x74, 0x1e, 0xb0, 0xca, 0x65, 0x48, 0x8e,
+			0xdb, 0x59, 0x3a, 0xcb, 0x80, 0xeb, 0xfd, 0xd2,
+			0xc9, 0x38, 0x43, 0xae, 0x76, 0xf2, 0xbb, 0x51,
+			0xb2, 0xcb, 0xe6, 0x85, 0x31, 0xb5, 0x62, 0xd4,
+			0x5e, 0x48, 0x08, 0xf1, 0x40, 0x5b, 0x16, 0x83,
+			0x5e, 0xa5, 0x9c, 0x6b, 0x91, 0x49, 0x44, 0xff,
+			0x3b, 0xa9, 0x2b, 0xf3, 0x06, 0x33, 0x9e, 0x6e,
+			0x3c, 0x66, 0x7e, 0x27, 0xa2, 0x59, 0x7b, 0xe3,
+			0xb6, 0xb4, 0x28, 0xeb, 0x93, 0x35, 0x87, 0xac,
+			0x0e, 0x0b, 0x7e, 0xbc, 0x35, 0x28, 0x72, 0x1f,
+			0x26, 0x59, 0xd0, 0x1f, 0x63, 0xe4, 0x86, 0x5d,
+			0x70, 0xf3, 0xa8, 0xa4, 0xb8, 0xcd, 0xb3, 0xf8,
+			0x8d, 0xaa, 0x41, 0xd2, 0xcc, 0x0b, 0x15, 0x66,
+			0x22, 0x83, 0x92, 0xe3, 0x0b, 0xf9, 0xea, 0xa0,
+			0x33, 0xa1, 0x4e, 0x92, 0xae, 0x81, 0x95, 0xa4,
+			0x58, 0x3f, 0xa9, 0x15, 0x52, 0xf9, 0xda, 0xb7,
+			0x10, 0x8d, 0xc6, 0xab, 0x77, 0xe9, 0xbe, 0xad,
+			0xc9, 0x3a, 0x6a, 0x8d, 0x92, 0x6c, 0x69, 0xff,
+			0x31, 0x49, 0x25, 0x04, 0xc8, 0x93, 0x6f, 0xc8,
+			0xe7, 0x60, 0x7a, 0x76, 0xb5, 0xc1, 0x07, 0xef,
+			0xa3, 0x39, 0xa6, 0xf2, 0x36, 0x04, 0xde, 0x3c,
+			0x4a, 0x4e, 0x96, 0xbd, 0x64, 0x26, 0x80, 0x01,
+			0x88, 0x47, 0xd2, 0xa4, 0x46, 0xcd, 0xe1, 0x30,
+			0x7f, 0xa3, 0x00, 0x11, 0x38, 0x55, 0xfa, 0xeb,
+			0x10, 0xeb, 0xa0, 0x65, 0x04, 0x09, 0xc8, 0xde,
+			0x9c, 0x73, 0xba, 0x0c, 0xbd, 0xd3, 0xa5, 0x84,
+			0x5e, 0xb9, 0x3b, 0xd4, 0x94, 0xbd, 0xa6, 0x53,
+			0xbe, 0x93, 0x69, 0x3e, 0xaa, 0x32, 0x31, 0x06,
+			0xc8, 0x1b, 0x4a, 0x48, 0xb5, 0x17, 0x85, 0xbf,
+			0x72, 0xec, 0xf5, 0x29, 0x8a, 0xd8, 0xeb, 0x99,
+			0x8b, 0x74, 0x84, 0x57, 0x8c, 0xe1, 0x85, 0x94,
+			0xa0, 0xbc, 0x7a, 0x14, 0xf0, 0xf4, 0x8b, 0x25,
+			0x37, 0x43, 0xa1, 0x34, 0x09, 0x71, 0xca, 0x5c,
+			0x9f, 0x08, 0x38, 0xd9, 0x9c, 0x0c, 0x0e, 0xcb,
+			0xe4, 0xad, 0x4b, 0x2a, 0x89, 0x67, 0xf8, 0x29,
+			0x6c, 0x69, 0x0e, 0x5d, 0xca, 0xfa, 0xa6, 0x6b,
+			0x0e, 0xb5, 0x94, 0x17, 0x71, 0xf0, 0xc9, 0xcd,
+			0x02, 0x1d, 0xa5, 0xd5, 0xc6, 0xa7, 0xbc, 0x5f,
+			0x6e, 0x67, 0x43, 0x68, 0xce, 0xac, 0x54, 0x81,
+			0x2a, 0x25, 0x22, 0x52, 0x35, 0xad, 0x7b, 0xd5,
+			0x06, 0x8c, 0x00, 0xfb, 0xca, 0xc4, 0x0a, 0x49,
+			0x1e, 0xc8, 0xeb, 0x77, 0xc1, 0x63, 0x23, 0x96,
+			0xbd, 0x35, 0xfa, 0x13, 0xae, 0xbf, 0x1d, 0x1e,
+			0x69, 0x8d, 0xb3, 0xe3, 0x07, 0xde, 0x4e, 0xd0,
+			0x12, 0xa9, 0xc3, 0x36, 0x30, 0x46, 0xef, 0x92,
+			0x76, 0x17, 0x8f, 0x10, 0xe7, 0xba, 0x99, 0x4b,
+			0xdf, 0xad, 0xb8, 0x11, 0x80, 0xdf, 0xe7, 0xfd,
+			0x80, 0x64, 0xf7, 0x2a, 0xac, 0x60, 0x2a, 0x54,
+			0x8f, 0x4f, 0xaf, 0xaf, 0x60, 0xf9, 0x67, 0x20,
+			0x80, 0x53, 0x5c, 0xb6, 0x81, 0xa6, 0x2a, 0x74,
+			0x2d, 0xc5, 0x74, 0x2a, 0x95, 0x26, 0x13, 0x17,
+			0x01, 0xdd, 0x31, 0xac, 0x5a, 0x05, 0xda, 0xde,
+			0xba, 0xf6, 0x37, 0x13, 0x8d, 0xe4, 0xa8, 0x93,
+			0x46, 0x9e, 0xa9, 0x82, 0x24, 0x7e, 0xc8, 0xda,
+			0x63, 0x89, 0xcd, 0x33, 0xc9, 0xf7, 0xf9, 0x71,
+			0x35, 0xe6, 0xa5, 0x5f, 0x6b, 0x3b, 0xbb, 0x0c,
+			0xe0, 0xa4, 0x0b, 0xe3, 0x29, 0xc0, 0xae, 0x8e,
+			0xce, 0x03, 0x09, 0x73, 0x0e, 0x1e, 0x9c, 0xe9,
+			0x59, 0xb6, 0x8b, 0x78, 0x67, 0x32, 0x8b, 0xf1,
+			0x93, 0xcc, 0x72, 0x1b, 0x6f, 0xa2, 0xf1, 0x04,
+			0x9c, 0xfa, 0x98, 0x02, 0xca, 0xdf, 0x35, 0x3c,
+			0x38, 0xac, 0xa8, 0xdb, 0x90, 0xae, 0xaa, 0xf9,
+			0x70, 0xfb, 0xed, 0xbd, 0xa6, 0x25, 0x14, 0x58,
+			0x09, 0x8a, 0x36, 0xaf, 0x41, 0x09, 0x19, 0xcb,
+			0xd3, 0x25, 0x5d, 0x0e, 0xe6, 0x20, 0x14, 0x71,
+			0x24, 0x79, 0x19, 0x55, 0xaf, 0x51, 0x5b, 0xa4,
+			0xc0, 0x93, 0x9e, 0xdd, 0x88, 0x31, 0x13, 0x96,
+			0xbf, 0xca, 0x0a, 0xd7, 0xbc, 0xc4, 0x00, 0xa1,
+			0x10, 0x2d, 0x92, 0x79, 0xf9, 0x14, 0xdb, 0xd2,
+			0xba, 0x74, 0xfa, 0xa8, 0xe5, 0x40, 0x14, 0xc2,
+			0x56, 0x3c, 0x7f, 0x50, 0x07, 0x60, 0x86, 0x93,
+			0x51, 0x2e, 0xf9, 0x70, 0x61, 0x70, 0x0e, 0xa4,
+			0x87, 0x75, 0xcc, 0x6c, 0x72, 0xb7, 0x68, 0x23,
+			0xb7, 0x3d, 0x76, 0xaf, 0x96, 0x9b, 0x4a, 0xe5,
+			0x12, 0x28, 0x4a, 0x8f, 0x79, 0x34, 0xff, 0xec,
+			0x92, 0xeb, 0x6b, 0xaf, 0xc9, 0xbd, 0xc1, 0x77,
+			0x07, 0xd0, 0xfa, 0x55, 0x57, 0x10, 0x0c, 0xad,
+			0x29, 0x2a, 0x79, 0xd6, 0x09, 0x9e, 0x7d, 0x18,
+			0xd4, 0xd6, 0xdd, 0x72, 0x1a, 0x8f, 0x24, 0x11,
+			0x70, 0xd2, 0x52, 0x36, 0x0f, 0x38, 0x79, 0x38,
+			0x4a, 0x02, 0x4f, 0x73, 0x2a, 0xaa, 0x6a, 0xb5,
+			0x0c, 0x72, 0x32, 0x85, 0x21, 0x76, 0x1a, 0x8a,
+			0x7d, 0x51, 0x0e, 0xf1, 0xf9, 0x19, 0xfa, 0x6b,
+			0x9b, 0x22, 0x71, 0x8c, 0x13, 0xcc, 0xba, 0x7d,
+			0xee, 0xd8, 0x34, 0xf6, 0x85, 0x60, 0xe1, 0xe4,
+			0x59, 0x6e, 0x32, 0x60, 0xd9, 0xfa, 0xb7, 0x56,
+			0x54, 0x25, 0xd1, 0x73, 0x6a, 0xf2, 0xa0, 0xc7,
+			0xa0, 0x67, 0x10, 0x89, 0x9c, 0x27, 0x5f, 0x7f,
+			0x2e, 0x5a, 0x29, 0x70, 0x7a, 0x7b, 0xaf, 0x21,
+			0xd0, 0xf4, 0x06, 0xb9, 0x2d, 0xf1, 0xb8, 0x32,
+			0xed, 0xc5, 0xc9, 0xac, 0x2f, 0x54, 0x0a, 0xf9,
+			0x08, 0x39, 0x39, 0x7d, 0x1d, 0xaf, 0xb4, 0x5f,
+			0x4d, 0x75, 0xc3, 0xe8, 0x52, 0x3a, 0x47, 0x72,
+			0x2c, 0xa9, 0x2d, 0xcb, 0x74, 0x06, 0xfe, 0x69,
+			0xd3, 0xf3, 0x1a, 0xb2, 0xd3, 0x01, 0xed, 0x6c,
+			0xc1, 0xca, 0x4f, 0xaf, 0x11, 0x9b, 0xa2, 0x27,
+			0x2a, 0x59, 0x56, 0x58, 0xdf, 0x79, 0x8b, 0xc9,
+			0x87, 0xe9, 0x58, 0x81, 0x48, 0xc6, 0xb6, 0x7d,
+			0x60, 0x54, 0x87, 0x9c, 0x61, 0xbb, 0x4b, 0xbb,
+			0x61, 0xac, 0x0a, 0x5a, 0x66, 0x7e, 0x70, 0x8b,
+			0xfd, 0x92, 0x76, 0x4a, 0xa9, 0xa5, 0xc3, 0xf4,
+			0xf2, 0x93, 0x48, 0xc4, 0xf3, 0x91, 0x2b, 0x60,
+			0x04, 0x0e, 0xb0, 0x6b, 0x60, 0x5e, 0xf0, 0xf1,
+			0x54, 0x41, 0x56, 0xdc, 0x25, 0x57, 0xc3, 0xb6,
+			0x0b, 0x5e, 0x15, 0xb5, 0x2a, 0x36, 0x4f, 0xe7,
+			0x1d, 0x70, 0xa8, 0xa7, 0xec, 0xd6, 0x74, 0xba,
+			0xa4, 0x79, 0x83, 0x7c, 0x9e, 0x1a, 0x5d, 0x32,
+			0xc8, 0xcb, 0x41, 0xca, 0x04, 0xec, 0x0b, 0x18,
+			0x54, 0xe1, 0x67, 0xbf, 0xa8, 0x7a, 0xc3, 0x0f,
+			0x27, 0x2a, 0xaf, 0x2a, 0x41, 0x19, 0x1f, 0xe8,
+			0xa2, 0xe8, 0xfa, 0xfc, 0x88, 0x41, 0x46, 0xc3,
+			0x1c, 0x44, 0xe5, 0xee, 0x47, 0xec, 0xfe, 0xbf,
+			0xb8, 0x29, 0x2e, 0xae, 0x47, 0x0a, 0x42, 0x69,
+			0x8a, 0x9a, 0x94, 0x97, 0x9e, 0xf5, 0xb6, 0x37,
+			0x1c, 0x10, 0xc2, 0x99, 0xa8, 0xe9, 0x9e, 0x0e,
+			0x6e, 0xb5, 0xbe, 0xba, 0x1f, 0x77, 0xa6, 0x35,
+			0x02, 0x1e, 0x8c, 0xe6, 0x02, 0x53, 0xe2, 0x9a,
+			0xdd, 0x09, 0x6e, 0x9b, 0x7a, 0x36, 0x4f, 0x38,
+			0x8d, 0x4c, 0xa4, 0xb4, 0xff, 0x90, 0x76, 0x0d,
+			0x11, 0x7d, 0xe1, 0xe9, 0x7f, 0x2a, 0x4a, 0x80,
+			0xe0, 0xd8, 0x3c, 0x23, 0xd2, 0xa5, 0xe5, 0x39,
+			0x77, 0xbf, 0x3d, 0x71, 0x0d, 0x45, 0xbb, 0x39,
+			0x66, 0x1a, 0x4d, 0x59, 0xb7, 0xd0, 0x0a, 0xee,
+			0x87, 0xee, 0x1f, 0xcf, 0x6f, 0xc2, 0x50, 0xb1,
+			0xa5, 0x4c, 0xee, 0x40, 0x69, 0xd7, 0x36, 0x38,
+			0x14, 0xcd, 0x6a, 0x9a, 0x90, 0x40, 0xad, 0x76,
+			0xf1, 0xa6, 0xd4, 0x3c, 0x75, 0x10, 0xba, 0xcb,
+			0xab, 0x22, 0x28, 0x5f, 0x0c, 0xe0, 0xee, 0xf4,
+			0xfd, 0x61, 0x52, 0x0a, 0x59, 0xfe, 0x61, 0xc5,
+			0x40, 0xf9, 0x91, 0x8e, 0x36, 0x29, 0x63, 0x6c,
+			0x6e, 0x45, 0xa5, 0x42, 0xe3, 0x36, 0x90, 0xe7,
+			0x90, 0x9f, 0x58, 0xbb, 0xf9, 0x1b, 0xee, 0x2c,
+			0xbb, 0x3a, 0xfd, 0x3d, 0xbe, 0x3d, 0x45, 0xf0,
+			0xc2, 0x18, 0xaa, 0x46, 0x10, 0x23, 0xe9, 0x63,
+			0xba, 0x7f, 0xc2, 0xe1, 0xf4, 0x05, 0xdd, 0x4a,
+			0x7c, 0xa8, 0xab, 0xa9, 0xbd, 0x6f, 0xdf, 0x48,
+			0x59, 0x11, 0xd4, 0xba, 0x75, 0xb6, 0x22, 0xd4,
+			0xd7, 0x35, 0x6f, 0x27, 0x70, 0xc7, 0x3d, 0x90,
+			0x06, 0x39, 0x2a, 0x16, 0xd0, 0x8b, 0xd7, 0xfb,
+			0x5e, 0x85, 0x2e, 0xb0, 0xd8, 0xc7, 0xdb, 0xe5,
+			0x24, 0x3a, 0x6e, 0xc4, 0x5e, 0xd4, 0x22, 0x25,
+			0x14, 0xee, 0xa5, 0x30, 0x8b, 0xd6, 0x27, 0x61,
+			0x33, 0x13, 0x46, 0x0b, 0x26, 0x45, 0xa6, 0xb4,
+			0xfa, 0x8d, 0xa3, 0xf2, 0x27, 0xd2, 0xc5, 0x04,
+			0xaa, 0x96, 0xa4, 0x55, 0xfa, 0x40, 0xf1, 0xfc,
+			0x66, 0x33, 0x9e, 0x4b, 0x39, 0x75, 0xae, 0x7f,
+			0x52, 0x87, 0x7b, 0x8a, 0xf9, 0x7d, 0x5f, 0x8a,
+			0x7e, 0xf7, 0xfe, 0xc4, 0x7f, 0xf4, 0xf6, 0x9a,
+			0x86, 0x78, 0x21, 0x02, 0x94, 0x9e, 0x50, 0x2d,
+			0xdc, 0xd6, 0xa5, 0x53, 0xf1, 0xef, 0x06, 0xe8,
+			0xb5, 0x46, 0x81, 0xcc, 0x91, 0x4f, 0x37, 0xee,
+			0x27, 0xcb, 0x91, 0xad, 0xff, 0x1d, 0xd1, 0x00,
+			0xa8, 0x96, 0x22, 0xaa, 0x63, 0x23, 0x2a, 0x7a,
+			0x75, 0x6f, 0xe9, 0x2d, 0x26, 0xde, 0x11, 0x97,
+			0x4b, 0x17, 0x3f, 0xde, 0x51, 0x1a, 0x22, 0xed,
+			0x38, 0x6f, 0x3e, 0x7a, 0xd0, 0xd6, 0x60, 0x06,
+			0x7e, 0x3f, 0xa4, 0x29, 0xfa, 0x18, 0x91, 0xda,
+			0x73, 0x38, 0xe3, 0xe3, 0xb5, 0xc0, 0x5b, 0x4e,
+			0xe8, 0x94, 0xea, 0x45, 0x6e, 0x5b, 0x50, 0xaa,
+			0x38, 0xb6, 0x6f, 0xdb, 0x90, 0x1b, 0x3b, 0x82,
+			0xbb, 0x0d, 0x38, 0xe3, 0xca, 0xd9, 0xf1, 0x2e,
+			0x27, 0x4c, 0x2c, 0x5a, 0x42, 0xdf, 0x44, 0xc8,
+			0x07, 0xe4, 0x95, 0xb5, 0xec, 0x91, 0x34, 0x1c,
+			0x9a, 0x0c, 0x50, 0x1a, 0xce, 0x67, 0xe4, 0x4b,
+			0x87, 0x61, 0x43, 0x95, 0x95, 0xb8, 0x8a, 0xf4,
+			0xc9, 0x92, 0x33, 0x33, 0xe3, 0xfe, 0x98, 0x2a,
+			0xae, 0x8e, 0xf2, 0x6b, 0x13, 0x7c, 0xe4, 0x44,
+			0x40, 0x66, 0xea, 0x0c, 0xe4, 0xdb, 0x16, 0x65,
+			0xa8, 0x8b, 0x37, 0x08, 0xec, 0x1e, 0xfc, 0xa6,
+			0xd0, 0x9b, 0x9e, 0x0a, 0xd2, 0xe3, 0xcf, 0x5d,
+			0xb2, 0xaf, 0x8e, 0x05, 0x7d, 0x8d, 0x84, 0xbc,
+			0x9f, 0xb1, 0xe6, 0x6a, 0x2e, 0x4b, 0x6d, 0x64,
+			0x91, 0x17, 0x9d, 0xb5, 0x35, 0x15, 0x02, 0xe9,
+			0x1b, 0x85, 0xc1, 0x89, 0xc2, 0x5a, 0x32, 0x3a,
+			0x80, 0x78, 0x5e, 0xcc, 0x50, 0x26, 0xf5, 0x11,
+			0x01, 0x79, 0xf3, 0xaf, 0xb6, 0x40, 0x00, 0x73,
+			0x8f, 0xeb, 0x5a, 0xd1, 0x26, 0x00, 0xe2, 0xa3,
+			0xcd, 0xfd, 0xaa, 0x15, 0x5b, 0x98, 0x2a, 0x76,
+			0x41, 0x07, 0xc2, 0xde, 0xb6, 0x71, 0xe7, 0xc3,
+			0xe9, 0x92, 0xb3, 0xd8, 0xfe, 0xaf, 0x12, 0x61,
+			0x86, 0x5b, 0x6e, 0x74, 0x45, 0x7b, 0x9b, 0x6f,
+			0x1a, 0x13, 0x84, 0xf6, 0x31, 0x5f, 0x5b, 0x6c,
+			0xde, 0x47, 0xb8, 0x73, 0x32, 0xc7, 0x94, 0x92,
+			0xa5, 0xc3, 0x65, 0xdf, 0x96, 0x6c, 0xfd, 0xb7,
+			0x80, 0xfb, 0x47, 0xba, 0x6e, 0x43, 0xb3, 0x7e,
+			0x86, 0xc9, 0x97, 0x45, 0xde, 0x3f, 0x3a, 0xf6,
+			0xb0, 0x9e, 0x9a, 0xcb, 0xfd, 0xf2, 0x5c, 0xba,
+			0x6e, 0x3f, 0xed, 0xfa, 0x74, 0x84, 0xe2, 0xb1,
+			0xae, 0x66, 0x57, 0x0b, 0x96, 0x6c, 0x77, 0xe4,
+			0x8a, 0x67, 0x97, 0xc7, 0xe0, 0x44, 0xb2, 0x83,
+			0x2d, 0x3c, 0x2e, 0x01, 0x19, 0x2e, 0x4c, 0x74,
+			0xe1, 0x35, 0x73, 0xeb, 0x85, 0x63, 0x8c, 0x3a,
+			0xb8, 0xbc, 0x25, 0x6a, 0x8d, 0xaf, 0xd2, 0xfb,
+			0xef, 0xd3, 0x12, 0x93, 0x0b, 0x39, 0xfa, 0x66,
+			0xbe, 0x3b, 0xfd, 0x6c, 0x0b, 0xbb, 0xb2, 0x5a,
+			0x78, 0xa1, 0xcf, 0x8c, 0x7d, 0x60, 0x55, 0xeb,
+			0x33, 0x4e, 0x8e, 0xf9, 0x19, 0x4d, 0x42, 0xd4,
+			0xf8, 0xd8, 0xba, 0xad, 0x0a, 0x6e, 0x62, 0xd4,
+			0xe1, 0x6a, 0xcc, 0xea, 0x09, 0x91, 0x8e, 0x62,
+			0xc9, 0x1e, 0x9e, 0x48, 0xaa, 0xde, 0xf7, 0xa2,
+			0x5a, 0xcb, 0x83, 0x20, 0xe8, 0xf5, 0xd1, 0xfe,
+			0x9d, 0x18, 0x2f, 0xd6, 0xf8, 0x97, 0x17, 0xce,
+			0xc2, 0x05, 0x08, 0xef, 0x61, 0x70, 0x9d, 0x95,
+			0x79, 0x59, 0x4c, 0x06, 0x24, 0x3d, 0x24, 0x69,
+			0xff, 0x46, 0xda, 0xbc, 0x71, 0x7a, 0x74, 0x93,
+			0x58, 0xf5, 0xc8, 0x91, 0xfb, 0x66, 0xed, 0x78,
+			0x8f, 0xf8, 0x28, 0xa8, 0x1d, 0xa5, 0x3a, 0x13,
+			0x76, 0xc2, 0xcc, 0xba, 0xb9, 0x56, 0x29, 0x74,
+			0xd6, 0x14, 0x75, 0x58, 0xe6, 0x2e, 0x79, 0x6e,
+			0x9d, 0x41, 0x94, 0x8a, 0xcf, 0xf1, 0xb1, 0xe0,
+			0x36, 0xe5, 0x89, 0x9a, 0x95, 0xa1, 0x11, 0xd1,
+			0xbe, 0x45, 0xe4, 0xb3, 0xb0, 0x62, 0x32, 0x1d,
+			0xba, 0xe0, 0xde, 0x57, 0x81, 0x0e, 0x01, 0x9b,
+			0x52, 0x3d, 0xd5, 0xde, 0x3b, 0x3a, 0xdd, 0x8f,
+			0xe3, 0x2e, 0xce, 0x1e, 0x89, 0x4d, 0x81, 0xf0,
+			0xf6, 0x20, 0x63, 0x7a, 0x4c, 0xbb, 0x66, 0xe0,
+			0xbe, 0x2b, 0xee, 0xd0, 0x3b, 0x60, 0x1e, 0x65,
+			0xd1, 0x2c, 0x7c, 0x5c, 0x6c, 0x16, 0x5b, 0x90,
+			0xc8, 0x05, 0x10, 0xf2, 0xde, 0x33, 0x90, 0x35,
+			0x69, 0x24, 0x3f, 0xc1, 0x8f, 0x1e, 0x4a, 0x60,
+			0xf1, 0x03, 0x65, 0x46, 0x40, 0x76, 0xe9, 0x83,
+			0x97, 0xda, 0x0b, 0xb8, 0x22, 0xfa, 0x55, 0x99,
+			0xfd, 0x18, 0x24, 0xd2, 0x66, 0xb0, 0x7b, 0x70,
+			0x56, 0x93, 0xad, 0x09, 0x95, 0x8e, 0x1f, 0x2f,
+			0xe8, 0x12, 0x55, 0xd4, 0x1f, 0xde, 0x09, 0x85,
+			0x05, 0xd1, 0xd5, 0x10, 0x2c, 0x8c, 0x6b, 0x53,
+			0x28, 0xce, 0x06, 0xc5, 0x52, 0x0f, 0xfa, 0x09,
+			0x09, 0x23, 0x1b, 0xe3, 0xbf, 0xb1, 0x89, 0x72,
+			0x26, 0x0d, 0xa6, 0xbb, 0x7d, 0x9e, 0xdc, 0xf8,
+			0xf5, 0x0b, 0x8c, 0xe0, 0xbc, 0x97, 0x3b, 0x72,
+			0xdd, 0xf5, 0x9d, 0xc5, 0xb6, 0x37, 0x2c, 0x76,
+			0x5b, 0x58, 0x67, 0xdb, 0xed, 0x3b, 0x6e, 0xe5,
+			0xe5, 0x6d, 0x6f, 0x0d, 0x7e, 0xff, 0xa9, 0x57,
+			0x4a, 0x84, 0x85, 0x82, 0xac, 0x00, 0x50, 0xa3,
+			0x4f, 0x87, 0xfe, 0x2a, 0x40, 0x52, 0x54, 0x81,
+			0x69, 0x42, 0x0b, 0x0c, 0xd7, 0x18, 0x98, 0x01,
+			0x8c, 0x5a, 0xa2, 0xf4, 0xe8, 0x61, 0xd1, 0x38,
+			0xfd, 0x0f, 0x63, 0x75, 0xd3, 0x4b, 0x1d, 0xdc,
+			0xdf, 0xb2, 0xeb, 0x94, 0x97, 0x5c, 0x2a, 0xb4,
+			0x12, 0x5c, 0x49, 0x2b, 0xfc, 0xd0, 0x8d, 0xfb,
+			0xe7, 0xb3, 0xcb, 0x0f, 0x3c, 0x2e, 0x04, 0x36,
+			0xa8, 0x03, 0xc9, 0xd7, 0x11, 0x2d, 0x2a, 0x93,
+			0xff, 0xda, 0x26, 0xb0, 0x54, 0x7e, 0xaf, 0x30,
+			0x7d, 0xce, 0x46, 0x8a, 0x3d, 0x7c, 0xa4, 0x7a,
+			0x2c, 0xfa, 0xba, 0xa1, 0xc9, 0x41, 0xd3, 0xb8,
+			0x84, 0x03, 0x78, 0xdd, 0xe9, 0x57, 0x19, 0x62,
+			0x62, 0xff, 0x5b, 0x3b, 0x48, 0x62, 0x0e, 0xee,
+			0x19, 0xb0, 0x32, 0x6e, 0x6a, 0x07, 0xd8, 0x4e,
+			0x25, 0x76, 0xa7, 0xe3, 0x98, 0xa1, 0x6f, 0xb6,
+			0x99, 0x32, 0x67, 0x7d, 0x46, 0x42, 0x4a, 0x82,
+			0xd1, 0x29, 0x1b, 0x87, 0xeb, 0x4b, 0x9e, 0xdf,
+			0x69, 0x75, 0xbd, 0x4f, 0xd3, 0xde, 0xc9, 0x83,
+			0xe6, 0xd6, 0xea, 0x03, 0x81, 0x12, 0xf3, 0x5d,
+			0x99, 0xf1, 0xb1, 0xd9, 0x3e, 0xbe, 0xf3, 0xa8,
+			0xdc, 0xb6, 0xf8, 0x4b, 0x9e, 0x26, 0x3f, 0xf0,
+			0x7c, 0xb3, 0xf4, 0xca, 0x00, 0x6c, 0x6c, 0xe5,
+			0x43, 0xa1, 0xfd, 0x3a, 0xf8, 0x8e, 0xe3, 0x9f,
+			0x88, 0xc5, 0x44, 0xfd, 0x24, 0x69, 0x76, 0xd5,
+			0xcb, 0xdc, 0x9d, 0x12, 0xf3, 0x13, 0x7e, 0xe7,
+			0xc3, 0xa8, 0x6a, 0xb2, 0xe0, 0xb3, 0x1d, 0xab,
+			0x3b, 0xc9, 0x77, 0x3d, 0x0f, 0xc3, 0xbe, 0x4b,
+			0x8b, 0x28, 0xbd, 0x7c, 0xe6, 0xb2, 0x06, 0x1f,
+			0xf9, 0x8f, 0x16, 0x62, 0xbf, 0xc7, 0x55, 0x73,
+			0xd4, 0xf1, 0x5a, 0x95, 0x80, 0xa3, 0x4e, 0xaa,
+			0x60, 0x17, 0x3c, 0xc9, 0x5e, 0xd4, 0x0c, 0x56,
+			0x7a, 0x77, 0x8e, 0x7f, 0x67, 0x08, 0x2f, 0xd9,
+			0x21, 0x19, 0xfd, 0x86, 0x8c, 0x23, 0x8d, 0xf6,
+			0x92, 0x1f, 0x36, 0x2c, 0x7c, 0x83, 0xbd, 0x2f,
+			0x6c, 0x63, 0x7c, 0xb7, 0x93, 0x74, 0x1b, 0xc2,
+			0x95, 0x34, 0x26, 0x1e, 0x07, 0x87, 0x3a, 0xb6,
+			0xe2, 0x39, 0x71, 0x9b, 0x20, 0xcd, 0x63, 0xf0,
+			0xbf, 0x48, 0xb5, 0x0e, 0x49, 0x86, 0x50, 0x80,
+			0xbd, 0xd6, 0x0e, 0xab, 0xd5, 0x69, 0x1b, 0xa4,
+			0xb3, 0x63, 0x3c, 0x8f, 0xcb, 0x42, 0xdb, 0xd7,
+			0x1a, 0xf4, 0xdf, 0x9e, 0x25, 0xfc, 0xd4, 0x00,
+			0xcb, 0xec, 0x57, 0x69, 0x30, 0x15, 0x4d, 0x7a,
+			0x69, 0x28, 0x2f, 0x2b, 0x34, 0x26, 0xd1, 0xe7,
+			0x01, 0x42, 0x5e, 0x02, 0xe2, 0x75, 0xe8, 0x52,
+			0x8a, 0xb4, 0x71, 0xfa, 0xc3, 0x3d, 0xe6, 0xac,
+			0xeb, 0xf3, 0x93, 0xe0, 0x37, 0xcd, 0x66, 0x92,
+			0x66, 0x2c, 0xfe, 0x4b, 0xd6, 0x3c, 0xf1, 0x57,
+			0xe5, 0xcf, 0xf5, 0xd0, 0xdb, 0x0e, 0x1f, 0x82,
+			0x65, 0x3b, 0xab, 0x69, 0x42, 0x53, 0x7d, 0xa4,
+			0x7c, 0xb7, 0x86, 0xeb, 0x23, 0x45, 0xa8, 0x4a,
+			0x73, 0xfc, 0x38, 0xc6, 0xe5, 0x2c, 0xab, 0x80,
+			0xfb, 0x23, 0xb2, 0x0c, 0x53, 0x28, 0x21, 0x37,
+			0x54, 0x9c, 0x72, 0x51, 0x0f, 0x44, 0x50, 0xd3,
+			0xe1, 0xd5, 0xb2, 0x27, 0x83, 0xb6, 0xe9, 0x4d,
+			0x64, 0x5c, 0x17, 0x0f, 0xe0, 0x13, 0xe4, 0x26,
+			0x6b, 0xd0, 0xd8, 0x25, 0xe3, 0x69, 0x6a, 0x95,
+			0x3f, 0x4a, 0x4e, 0xa0, 0x58, 0xbc, 0x28, 0x47,
+			0x8b, 0x68, 0xe4, 0x41, 0x90, 0x46, 0x1b, 0x84,
+			0xa0, 0x7b, 0x46, 0x46, 0x03, 0xee, 0x21, 0x0d,
+			0x34, 0xed, 0xff, 0x15, 0x57, 0x06, 0xdf, 0x71,
+			0x09, 0xb2, 0x66, 0x0d, 0x6e, 0xcc, 0xa5, 0x0c,
+			0xaf, 0x3f, 0x24, 0x8f, 0xd1, 0xc8, 0x44, 0x86,
+			0xaf, 0xbf, 0xeb, 0x2f, 0xb9, 0xee, 0xa7, 0xcf,
+			0xe4, 0xe8, 0xec, 0x47, 0x09, 0xd8, 0x95, 0x9e,
+			0x3c, 0xda, 0x92, 0x41, 0x61, 0xf5, 0xc3, 0xec,
+			0x00, 0xe4, 0xa3, 0x0d, 0x4a, 0xb3, 0xf6, 0x82,
+			0x05, 0x38, 0x70, 0x6a, 0xd1, 0x28, 0x2c, 0xb3,
+			0xc6, 0xbb, 0x38, 0xb3, 0x06, 0x7f, 0xd6, 0x4c,
+			0xe7, 0xfb, 0xef, 0x0d, 0x52, 0x66, 0xbe, 0xd8,
+			0xa6, 0x6f, 0xe8, 0xd9, 0x42, 0x4f, 0xad, 0xe8,
+			0xe8, 0x6c, 0xf9, 0xe9, 0x42, 0xd9, 0x66, 0x6e,
+			0xec, 0xfe, 0xf5, 0x91, 0xbf, 0x0a, 0x98, 0xd8,
+			0x7b, 0x23, 0x12, 0xa6, 0x04, 0xa8, 0xb3, 0x61,
+			0x13, 0x65, 0xc0, 0xe2, 0x82, 0xb9, 0xb2, 0x38,
+			0x07, 0x06, 0xca, 0x64, 0x6c, 0x23, 0x93, 0x60,
+			0x1d, 0x4d, 0x38, 0x5e, 0x8e, 0x90, 0x16, 0x4a,
+			0xfd, 0xb3, 0xcd, 0x84, 0x9c, 0xa5, 0xfa, 0x73,
+			0x2d, 0xcb, 0x87, 0x31, 0x3d, 0xf8, 0xfc, 0xeb,
+			0xa7, 0x56, 0x2f, 0x5b, 0x95, 0x9a, 0xc6, 0x82,
+			0x29, 0x86, 0x47, 0xe2, 0xc2, 0x84, 0x01, 0xaf,
+			0xc8, 0x0b, 0x2d, 0xfb, 0x34, 0xba, 0x5d, 0x9d,
+			0xd1, 0x85, 0xd5, 0x1e, 0x63, 0xcb, 0x3c, 0xa8,
+			0xfa, 0x79, 0xef, 0x12, 0xa6, 0xb5, 0xdb, 0xc5,
+			0x1d, 0x6a, 0xa7, 0x54, 0x58, 0x0c, 0xbe, 0x61,
+			0xe5, 0x96, 0x7f, 0x4a, 0x3b, 0x59, 0x32, 0x2d,
+			0x06, 0x44, 0x83, 0x5c, 0xad, 0xe9, 0xfe, 0x7c,
+			0xd7, 0x5b, 0x34, 0xa1, 0xa3, 0xad, 0x9a, 0xbf,
+			0xd5, 0x30, 0xf0, 0x22, 0xfc, 0x94, 0x7f, 0xd4,
+			0xa4, 0xca, 0x88, 0x31, 0xe7, 0xf2, 0x89, 0x2d,
+			0xda, 0xe6, 0x91, 0xa6, 0x27, 0x22, 0x74, 0x9f,
+			0xc6, 0x72, 0x4f, 0xf6, 0xa9, 0xfe, 0x7a, 0xf0,
+			0xa8, 0x6b, 0x6c, 0x9f, 0xe9, 0x2a, 0x9b, 0x23,
+			0x9e, 0xb8, 0x2b, 0x29, 0x65, 0xa7, 0x5d, 0xbd,
+			0x10, 0xe4, 0x56, 0x02, 0x94, 0xdd, 0xd1, 0xab,
+			0x9b, 0x82, 0x2d, 0x8d, 0xf6, 0xd3, 0x65, 0x63,
+			0x4a, 0xc4, 0x86, 0x61, 0x37, 0x9f, 0xdb, 0x4b,
+			0x34, 0x20, 0x0a, 0xca, 0x45, 0x6c, 0x06, 0xc4,
+			0x9c, 0x74, 0x4d, 0x83, 0x6a, 0x8d, 0xad, 0xc6,
+			0x61, 0x3a, 0x8d, 0xde, 0x6c, 0xf9, 0x8e, 0x33,
+			0xa2, 0xee, 0x99, 0xc7, 0xe4, 0x52, 0xb2, 0x44,
+			0x6f, 0x2f, 0x0f, 0x41, 0xa9, 0x1a, 0xd3, 0x96,
+			0x42, 0xc6, 0x49, 0x12, 0x6a, 0xf0, 0x29, 0xa9,
+			0x0c, 0x9c, 0x50, 0x5d, 0x1d, 0xd1, 0x42, 0x7e,
+			0x6f, 0x36, 0x48, 0x0f, 0x58, 0x14, 0x94, 0xc0,
+			0x10, 0x1e, 0xe0, 0xb2, 0xdd, 0xba, 0x57, 0x91,
+			0x4d, 0xd5, 0xdc, 0xa6, 0x4c, 0x68, 0x00, 0x6c,
+			0xb3, 0x5d, 0x32, 0x13, 0xbe, 0xa8, 0xc3, 0xfb,
+			0xd4, 0x19, 0x40, 0xf5, 0x6f, 0x63, 0xa1, 0x07,
+			0xbf, 0xa2, 0x8b, 0xfc, 0xfe, 0xf8, 0xa1, 0x33,
+			0x70, 0x07, 0x6d, 0xc5, 0x72, 0xa0, 0x39, 0xd6,
+			0xd7, 0x76, 0x6c, 0xfa, 0x1f, 0x04, 0xd6, 0x23,
+			0xbf, 0x66, 0x78, 0x92, 0x00, 0x11, 0x8a, 0x75,
+			0x67, 0x44, 0xa6, 0x7c, 0xd0, 0x14, 0xe6, 0xd0,
+			0x31, 0x6d, 0xdb, 0xc5, 0xb1, 0xa7, 0x99, 0xc3,
+			0xaf, 0x18, 0x7a, 0x26, 0x46, 0xad, 0x6d, 0x0c,
+			0xb6, 0xb5, 0xad, 0xc1, 0xcf, 0x60, 0x99, 0xf5,
+			0x9f, 0x88, 0xaf, 0x0e, 0x37, 0x15, 0xf9, 0x2b,
+			0x1a, 0x5f, 0xfb, 0xc9, 0xf8, 0xd4, 0xf0, 0x97,
+			0xd2, 0x91, 0xf4, 0x94, 0xa2, 0xd3, 0x3b, 0x8b,
+			0x0c, 0x22, 0xa0, 0xac, 0xb3, 0xb5, 0xdf, 0xf2,
+			0x27, 0x38, 0x47, 0x53, 0x5b, 0x6e, 0x8f, 0x98,
+			0x9e, 0xad, 0xb6, 0xf5, 0x0e, 0x17, 0x20, 0x35,
+			0x54, 0x6b, 0x73, 0xa6, 0x64, 0x65, 0xac, 0xb8,
+			0xc1, 0xd3, 0xf7, 0x07, 0x82, 0x93, 0x9d, 0xcb,
+			0xcc, 0xe9, 0x0c, 0x51, 0x52, 0x85, 0x8b, 0x95,
+			0xa6, 0xb1, 0xce, 0xdc, 0xfa, 0x00, 0x00, 0x08,
+			0x14, 0x1c, 0x23, 0x2a, 0x35, },
+	}, {
+		.what = "pure rejection vector",
+		.algo = "ml-dsa65",
+		.pk_len = DILITHIUM65_PUBLICKEYBYTES,
+		.pk = (const u8[DILITHIUM65_PUBLICKEYBYTES]){
+			0x51, 0xbc, 0x81, 0x7c, 0x36, 0x6a, 0x18, 0xc5,
+			0x5e, 0xb6, 0x89, 0xf9, 0xf2, 0xaf, 0xba, 0x61,
+			0x34, 0x2b, 0x1e, 0xe1, 0xae, 0xb1, 0xa2, 0x6f,
+			0x5a, 0x6b, 0x6e, 0xc6, 0x01, 0x23, 0x2a, 0x47,
+			0xd8, 0x3a, 0xec, 0x87, 0x93, 0x62, 0x3b, 0x4b,
+			0xcf, 0x37, 0x7c, 0x9a, 0x95, 0xff, 0xf1, 0xc1,
+			0x2b, 0xfc, 0x2f, 0x53, 0xbd, 0x90, 0x93, 0x3d,
+			0xc4, 0xb8, 0x43, 0xeb, 0xd9, 0x0d, 0x74, 0x4c,
+			0xca, 0x65, 0x02, 0x8c, 0x2c, 0x60, 0xc6, 0x11,
+			0xe5, 0xbe, 0xcd, 0xea, 0x0e, 0xc0, 0x4f, 0x82,
+			0x1f, 0xad, 0xa5, 0x65, 0xd9, 0xc9, 0x69, 0xa3,
+			0x23, 0xb7, 0x12, 0xb5, 0xc3, 0x9e, 0x78, 0x68,
+			0x5b, 0x6b, 0x21, 0x59, 0x5b, 0x49, 0x02, 0xfb,
+			0xda, 0x35, 0x8c, 0x8c, 0x74, 0x41, 0x8b, 0x46,
+			0xdc, 0x7b, 0xd8, 0x1e, 0x03, 0x47, 0x96, 0xc2,
+			0x96, 0xdc, 0x56, 0x0f, 0x86, 0xed, 0x95, 0xee,
+			0xf0, 0x27, 0xed, 0x82, 0x9d, 0x32, 0x72, 0x13,
+			0x49, 0x76, 0xf4, 0xc3, 0x04, 0xca, 0x4c, 0x16,
+			0x22, 0xf1, 0xab, 0x00, 0x8f, 0x15, 0x5a, 0xf7,
+			0x72, 0xf0, 0x79, 0x5a, 0x46, 0x57, 0xc8, 0x2f,
+			0xa2, 0x1f, 0x34, 0x6d, 0x20, 0x28, 0x14, 0x1d,
+			0x2e, 0x14, 0x31, 0x9b, 0x58, 0xac, 0x25, 0x0f,
+			0x91, 0x6f, 0xd6, 0xd7, 0xca, 0x34, 0x06, 0x32,
+			0x24, 0x5d, 0x65, 0x65, 0x50, 0x90, 0x4f, 0x11,
+			0x5a, 0xee, 0x36, 0xc7, 0x72, 0x34, 0xbb, 0x9d,
+			0xe9, 0xd5, 0xf2, 0x84, 0xa9, 0xa7, 0x04, 0xd5,
+			0x2d, 0xb0, 0x8b, 0x78, 0x0b, 0x87, 0x86, 0xa0,
+			0xff, 0x07, 0x1f, 0x61, 0x08, 0xdb, 0x41, 0x22,
+			0x3e, 0xe3, 0x97, 0x4b, 0x13, 0x70, 0x8e, 0x8a,
+			0x96, 0x04, 0xae, 0x73, 0x3d, 0x43, 0x5b, 0x86,
+			0x9f, 0xa7, 0xba, 0xa6, 0xaf, 0x5c, 0x94, 0xfd,
+			0xcb, 0xc3, 0x77, 0xc8, 0x5f, 0xe3, 0x33, 0x1f,
+			0x8b, 0x5a, 0xb1, 0x20, 0xc7, 0x96, 0xd5, 0xb3,
+			0xc2, 0xb7, 0xa6, 0x59, 0x0b, 0x13, 0x2f, 0xca,
+			0xe5, 0xb6, 0x17, 0x40, 0xa7, 0xba, 0xa3, 0xe0,
+			0x80, 0xdc, 0xf4, 0xe7, 0x9b, 0xd3, 0x53, 0xc5,
+			0xe4, 0x08, 0xa3, 0x72, 0xd3, 0x65, 0xf3, 0xd3,
+			0xdd, 0x72, 0xe8, 0x5c, 0xdd, 0xed, 0x11, 0x20,
+			0x84, 0xf9, 0x54, 0x9e, 0xce, 0xcb, 0x30, 0x81,
+			0xa1, 0xf1, 0x05, 0x16, 0xb0, 0x69, 0x57, 0x4d,
+			0xd5, 0x24, 0xd2, 0x8d, 0xd6, 0x46, 0x8e, 0x96,
+			0xb5, 0x4b, 0xcc, 0x80, 0x2f, 0x37, 0x2a, 0x7a,
+			0x2e, 0x4a, 0x94, 0x5d, 0x6a, 0x40, 0x95, 0x48,
+			0xc3, 0x34, 0x9c, 0xac, 0xe5, 0xcd, 0x91, 0xd9,
+			0x34, 0x51, 0x01, 0x67, 0x56, 0xfe, 0x9b, 0x16,
+			0x64, 0x1e, 0xed, 0x42, 0xc9, 0xc6, 0xa3, 0xf9,
+			0xd6, 0x7b, 0xf8, 0x36, 0xad, 0x1c, 0xd0, 0x10,
+			0x9c, 0x07, 0xe8, 0xb2, 0x2f, 0x86, 0xcd, 0xe7,
+			0x1d, 0xa3, 0xb8, 0x45, 0xca, 0x3b, 0x53, 0x79,
+			0xc9, 0x25, 0x73, 0x8f, 0x83, 0x75, 0x62, 0x90,
+			0x6a, 0x70, 0x8c, 0xf3, 0xed, 0x0b, 0x95, 0x37,
+			0xe4, 0xb2, 0xae, 0x5f, 0xa1, 0xd7, 0x0b, 0x10,
+			0xfe, 0xda, 0x49, 0xe2, 0x2e, 0x03, 0x08, 0x55,
+			0xed, 0x7c, 0x42, 0x3e, 0xd7, 0xc2, 0x96, 0x87,
+			0x65, 0x67, 0x7e, 0x46, 0x48, 0x74, 0x89, 0xdc,
+			0x3c, 0x91, 0x72, 0x14, 0x7a, 0x4f, 0xac, 0x47,
+			0xe5, 0x9f, 0x7d, 0x9f, 0xe6, 0xf7, 0xf8, 0x5d,
+			0xd7, 0x36, 0xe9, 0xe1, 0x2d, 0x64, 0x77, 0xd3,
+			0x53, 0x99, 0x45, 0xdd, 0xbf, 0x2e, 0xb5, 0x61,
+			0xe1, 0x56, 0xce, 0x51, 0x2e, 0x10, 0x1f, 0xef,
+			0xd8, 0x76, 0xc3, 0x1a, 0x2f, 0x06, 0x85, 0xb7,
+			0x89, 0x31, 0xbd, 0x31, 0x75, 0x90, 0x22, 0xba,
+			0x52, 0x5e, 0x10, 0xb0, 0x22, 0x39, 0x64, 0xa3,
+			0x22, 0x2e, 0x88, 0x0b, 0xc1, 0x33, 0xd3, 0xa3,
+			0xef, 0x7f, 0xca, 0x7e, 0x07, 0xc8, 0xe6, 0x64,
+			0xd8, 0x53, 0x83, 0x28, 0x2a, 0x10, 0x3a, 0x77,
+			0x85, 0x22, 0xdb, 0x61, 0xd8, 0x49, 0x20, 0x76,
+			0x97, 0x0d, 0xf7, 0x07, 0x2c, 0x9a, 0xbf, 0x66,
+			0x04, 0x49, 0x50, 0xb6, 0x70, 0xb5, 0x17, 0x95,
+			0xef, 0xe6, 0x9d, 0x7a, 0xdd, 0xed, 0x6b, 0x22,
+			0x5e, 0x89, 0x65, 0x72, 0xf1, 0xf6, 0x86, 0xcb,
+			0x76, 0x84, 0x7d, 0x22, 0x3b, 0x5c, 0x84, 0x48,
+			0x48, 0x7a, 0x00, 0x83, 0x03, 0x97, 0x01, 0x47,
+			0x46, 0x8f, 0x2a, 0x40, 0x61, 0xd6, 0x32, 0xd8,
+			0x3d, 0x59, 0x10, 0x78, 0xaf, 0x22, 0x33, 0xe5,
+			0x44, 0x63, 0x78, 0x5d, 0x56, 0x01, 0x24, 0x59,
+			0x19, 0x8d, 0x52, 0xb4, 0xc3, 0x7b, 0x97, 0x5f,
+			0x61, 0xcb, 0x48, 0x78, 0xa6, 0x7c, 0x1d, 0x06,
+			0xb2, 0x4b, 0xdf, 0x7a, 0x31, 0xa9, 0xb2, 0x53,
+			0xe5, 0x3e, 0x3e, 0xfe, 0xbf, 0x71, 0x18, 0x69,
+			0x86, 0x4c, 0xf5, 0x30, 0x89, 0xaa, 0xa8, 0x6c,
+			0x78, 0x64, 0xc8, 0x33, 0x3b, 0x2d, 0x63, 0xbd,
+			0x24, 0x30, 0xfa, 0x8a, 0x3c, 0xd7, 0x82, 0xa5,
+			0x31, 0x84, 0x96, 0x1b, 0xb3, 0x3b, 0x7b, 0x9e,
+			0x80, 0xef, 0xbb, 0xaf, 0x1e, 0x88, 0xa3, 0x75,
+			0x0d, 0x73, 0xbf, 0xf4, 0x36, 0x42, 0x2a, 0x98,
+			0xda, 0x7d, 0x9b, 0xab, 0x15, 0x26, 0xe4, 0x0b,
+			0x0c, 0x95, 0xaf, 0x8b, 0x8d, 0x8d, 0x67, 0x5b,
+			0x1f, 0x42, 0xce, 0xb0, 0x47, 0x94, 0x94, 0x57,
+			0x15, 0xba, 0xa4, 0x82, 0x5d, 0xc4, 0x71, 0x6b,
+			0xeb, 0xc6, 0xdf, 0x22, 0xef, 0xd8, 0x89, 0xd8,
+			0xfb, 0xc5, 0xce, 0xf2, 0xf3, 0x94, 0x64, 0xe1,
+			0xc1, 0x17, 0x2d, 0x3e, 0xa5, 0xb6, 0xf5, 0x65,
+			0xf6, 0xb3, 0xeb, 0xa9, 0x5d, 0xfa, 0x3e, 0xff,
+			0x1c, 0xbb, 0x52, 0xd8, 0x80, 0x09, 0x1c, 0x18,
+			0x25, 0x57, 0x4b, 0x4b, 0x30, 0xfe, 0xb2, 0xe5,
+			0x03, 0x87, 0x6f, 0x6c, 0x2b, 0x83, 0x5a, 0xf3,
+			0x37, 0x72, 0x11, 0xe4, 0xfd, 0x76, 0x1e, 0x28,
+			0xe6, 0x65, 0x12, 0x4e, 0xb8, 0xcd, 0x90, 0xba,
+			0xdf, 0x6e, 0x4e, 0xc9, 0x4b, 0xf5, 0x7c, 0x9f,
+			0xb3, 0xe6, 0xab, 0xd5, 0xcd, 0x26, 0xe4, 0x74,
+			0x65, 0xe7, 0x84, 0x9c, 0x28, 0x7a, 0x6f, 0x1f,
+			0x6c, 0xbe, 0xcc, 0xa7, 0xf3, 0x2e, 0x56, 0x92,
+			0x88, 0xfb, 0x99, 0x1f, 0xed, 0xed, 0xf0, 0xc1,
+			0x1a, 0x75, 0x13, 0x47, 0x0c, 0x88, 0x3c, 0x99,
+			0x72, 0x02, 0x36, 0x40, 0x48, 0x26, 0x31, 0xc4,
+			0xa0, 0x80, 0x79, 0x40, 0x1f, 0xfb, 0xff, 0xab,
+			0x7f, 0xe6, 0x45, 0x71, 0xed, 0x8e, 0x12, 0x1b,
+			0x4c, 0x4f, 0xa1, 0xd1, 0xc8, 0x94, 0xa4, 0xe8,
+			0x2a, 0x76, 0xe3, 0x19, 0x52, 0xad, 0x4e, 0x4c,
+			0x97, 0xf7, 0xc8, 0x67, 0x90, 0x49, 0x36, 0x0b,
+			0x54, 0xf5, 0xe0, 0xce, 0x25, 0x27, 0x9c, 0xa6,
+			0x9c, 0x2d, 0xd5, 0xaa, 0x58, 0x19, 0x14, 0x62,
+			0x19, 0x9d, 0xe6, 0x54, 0xda, 0x47, 0x0b, 0x24,
+			0xf1, 0xb5, 0xe0, 0x55, 0xaf, 0x5d, 0x30, 0x93,
+			0x1c, 0x95, 0xda, 0xa5, 0x94, 0xf9, 0x3d, 0xa7,
+			0x40, 0x92, 0xcd, 0x18, 0xa7, 0x3f, 0x3f, 0xa5,
+			0x9e, 0xe2, 0x01, 0xe0, 0xae, 0xd1, 0xe8, 0xdb,
+			0xc2, 0x79, 0x7a, 0x6e, 0x5b, 0xd4, 0x1d, 0x68,
+			0x39, 0xd8, 0xea, 0xa1, 0x4b, 0x95, 0xb4, 0xed,
+			0x94, 0x96, 0x37, 0x5f, 0xb4, 0x3d, 0x97, 0x4a,
+			0x77, 0x51, 0xf8, 0x57, 0x74, 0xc8, 0xe2, 0x62,
+			0x17, 0x53, 0x23, 0x0e, 0x47, 0x6c, 0xd5, 0x4a,
+			0x87, 0x7d, 0xe8, 0x97, 0x0b, 0x23, 0x24, 0x80,
+			0x6b, 0x56, 0x04, 0x5e, 0xbf, 0x0d, 0x22, 0x18,
+			0xac, 0xc8, 0xbc, 0xe0, 0xfa, 0x57, 0x80, 0xa7,
+			0x99, 0xca, 0xdc, 0xe9, 0xe6, 0x8a, 0x11, 0x7c,
+			0x99, 0x41, 0xb8, 0x76, 0xe7, 0x91, 0x72, 0x85,
+			0x97, 0xe7, 0xd3, 0x8e, 0xee, 0x16, 0x3c, 0x47,
+			0x9c, 0xef, 0x02, 0x61, 0x18, 0x71, 0x9b, 0xf8,
+			0xae, 0x55, 0x89, 0x5d, 0x4a, 0xcd, 0x5b, 0x9c,
+			0x0b, 0x97, 0xef, 0x5c, 0xbc, 0xad, 0x72, 0xf9,
+			0x4f, 0xfe, 0xa3, 0x13, 0xd6, 0x0f, 0x5d, 0x3a,
+			0x87, 0x46, 0xf3, 0x40, 0x37, 0xd0, 0x99, 0xfe,
+			0xa5, 0xc7, 0x1d, 0xb4, 0x95, 0xb0, 0x55, 0x3a,
+			0x47, 0x66, 0x0a, 0xc8, 0x4e, 0xe0, 0xcb, 0xc5,
+			0x80, 0x6d, 0x34, 0x91, 0x39, 0xc1, 0x71, 0xb9,
+			0x54, 0x5e, 0xb4, 0xfd, 0x6c, 0x54, 0xc3, 0x9c,
+			0xde, 0x83, 0xb4, 0x5d, 0x4b, 0xa9, 0x1c, 0x25,
+			0x0e, 0x8e, 0x51, 0x3e, 0xa5, 0x59, 0x5f, 0x20,
+			0x5b, 0x43, 0xf8, 0xa4, 0x7d, 0x7f, 0x0c, 0xb2,
+			0x87, 0x2b, 0xf1, 0xdc, 0xf2, 0xd5, 0x2b, 0x19,
+			0x4d, 0x60, 0x18, 0x25, 0x4b, 0x31, 0xa5, 0x08,
+			0x6b, 0x4d, 0x0e, 0xec, 0x0a, 0x65, 0x31, 0xc5,
+			0x1a, 0xf3, 0x4d, 0x16, 0xed, 0x24, 0x89, 0xeb,
+			0xfe, 0xe2, 0x7c, 0xb1, 0x64, 0xc7, 0x10, 0x2e,
+			0x27, 0x44, 0x7e, 0xb3, 0x60, 0x88, 0x5d, 0x0a,
+			0xb0, 0x1c, 0x62, 0xda, 0x94, 0x63, 0xfe, 0xf3,
+			0x82, 0x32, 0xc3, 0x44, 0x56, 0x46, 0x8f, 0xc4,
+			0x81, 0x86, 0xf2, 0x89, 0x19, 0x6f, 0xfc, 0x09,
+			0x57, 0x56, 0xba, 0xcb, 0xbf, 0x0d, 0xf0, 0x4b,
+			0x2f, 0x63, 0x6f, 0x18, 0x22, 0x5f, 0xa7, 0x86,
+			0x5b, 0x0d, 0x1e, 0x05, 0xf5, 0x33, 0x0b, 0xbe,
+			0x62, 0xc7, 0xe0, 0xdf, 0xb0, 0x17, 0xec, 0x68,
+			0x0f, 0x2c, 0x77, 0x68, 0x6c, 0xad, 0xdb, 0xdd,
+			0x36, 0xab, 0x8c, 0xd7, 0xd0, 0xa9, 0xff, 0x4c,
+			0x7c, 0x53, 0x18, 0x25, 0x8c, 0x6d, 0xec, 0x4d,
+			0x81, 0xce, 0x00, 0x56, 0xda, 0x23, 0x8d, 0xea,
+			0xbf, 0x68, 0x04, 0x16, 0xff, 0x6b, 0xc1, 0x61,
+			0xfb, 0x80, 0x79, 0x81, 0x65, 0xec, 0x99, 0xfd,
+			0xb2, 0xba, 0x41, 0x11, 0xf5, 0xbd, 0x79, 0xcc,
+			0x37, 0x5f, 0xa6, 0xde, 0x29, 0x16, 0x3f, 0x2e,
+			0x93, 0xd0, 0x5d, 0xad, 0xff, 0x67, 0x05, 0x70,
+			0x65, 0xa1, 0x3d, 0xb1, 0xe0, 0x46, 0x87, 0x62,
+			0x4f, 0xf7, 0xec, 0x51, 0x60, 0x5f, 0x83, 0x68,
+			0x3a, 0xd8, 0x89, 0x90, 0x1e, 0x12, 0x8b, 0xfa,
+			0x3d, 0xb9, 0x8b, 0xff, 0x91, 0xe9, 0xa7, 0x6f,
+			0x2e, 0x04, 0xfd, 0xd8, 0xeb, 0x58, 0x90, 0x68,
+			0x6d, 0xdb, 0x2f, 0xeb, 0x34, 0x9b, 0x3a, 0xb9,
+			0x07, 0xba, 0xa0, 0x71, 0xcc, 0xc4, 0xe2, 0xc3,
+			0xf1, 0x8d, 0xd0, 0x6e, 0x79, 0xf5, 0x8d, 0xda,
+			0x51, 0x57, 0xe8, 0x9d, 0x2c, 0xe1, 0x81, 0xf7,
+			0x1e, 0x30, 0x28, 0x5d, 0x09, 0x85, 0x25, 0x2d,
+			0x44, 0x18, 0xef, 0x1c, 0x3a, 0x5d, 0x84, 0x2b,
+			0xbe, 0x5c, 0x78, 0x90, 0x4c, 0xfe, 0x9a, 0x3d,
+			0x1d, 0x3c, 0xac, 0x05, 0x9a, 0xca, 0x8a, 0x17,
+			0x53, 0x61, 0xd7, 0x97, 0x6b, 0xab, 0xec, 0xff,
+			0xe5, 0x2c, 0x0f, 0xe7, 0x34, 0x57, 0x17, 0x40,
+			0xeb, 0xed, 0x8f, 0xe4, 0x72, 0xd0, 0xbe, 0xb1,
+			0xbe, 0xd3, 0x09, 0x3d, 0x4d, 0xf4, 0xdd, 0x5f,
+			0x95, 0x98, 0x54, 0x85, 0x72, 0x50, 0x99, 0xec,
+			0x63, 0xba, 0x18, 0xa0, 0x1e, 0x81, 0x45, 0x4c,
+			0x8e, 0xd3, 0x67, 0x90, 0xa2, 0xd6, 0x45, 0x5e,
+			0x30, 0x68, 0xa0, 0x16, 0x0f, 0x90, 0xbb, 0x04,
+			0x85, 0x5e, 0x90, 0xf7, 0x1b, 0x52, 0xaf, 0x55,
+			0x47, 0xcf, 0x75, 0x11, 0x73, 0xc4, 0xec, 0x4f,
+			0x0f, 0x44, 0x4d, 0xd3, 0x92, 0xdf, 0x5d, 0x9d,
+			0x12, 0x38, 0x72, 0x38, 0xaa, 0x06, 0xf2, 0x45,
+			0xf5, 0xa8, 0xdd, 0x8f, 0xd2, 0x7a, 0x96, 0x0f,
+			0x3f, 0xca, 0xa3, 0x79, 0xe2, 0xed, 0x12, 0x62,
+			0x62, 0x7a, 0x01, 0x7a, 0xa0, 0xc5, 0x31, 0x1f,
+			0x49, 0x2b, 0x87, 0x49, 0xd6, 0x90, 0xfd, 0xfc,
+			0xdc, 0xac, 0x4c, 0x15, 0x1a, 0xe1, 0x66, 0xf2,
+			0xfa, 0xe9, 0x58, 0x6d, 0x57, 0x24, 0x90, 0x78,
+			0x7a, 0x05, 0x73, 0x9f, 0x96, 0x30, 0x5b, 0xa8,
+			0x69, 0x18, 0xa2, 0x24, 0x5c, 0xf2, 0xc3, 0xb0,
+			0x8d, 0xa6, 0x71, 0x28, 0x46, 0x94, 0x33, 0x0a,
+			0x95, 0xd9, 0x32, 0xc9, 0x93, 0x7f, 0xa4, 0xee,
+			0x8e, 0x3f, 0x21, 0x1b, 0xa2, 0xfe, 0x09, 0x03,
+			0xe0, 0x63, 0xb0, 0xbe, 0xa8, 0x19, 0x16, 0xd1,
+			0x38, 0x81, 0xdf, 0x9b, 0x89, 0x47, 0x00, 0x7f,
+			0xaa, 0xe9, 0xb7, 0x51, 0xab, 0x27, 0x4c, 0xdd,
+			0x50, 0xf0, 0x45, 0xaf, 0x26, 0x4c, 0xe3, 0x33,
+			0x79, 0x43, 0x87, 0x59, 0xbf, 0x6e, 0x38, 0xdb,
+			0x28, 0x3b, 0x99, 0x12, 0xc2, 0x3a, 0xca, 0x6f,
+			0x9d, 0x99, 0x10, 0x4d, 0x0c, 0xdf, 0xc3, 0xc3,
+			0x4f, 0xb0, 0xe5, 0x62, 0xd1, 0xca, 0x27, 0x14,
+			0xc7, 0xf5, 0x65, 0x86, 0x69, 0x92, 0x59, 0xf3,
+			0xd9, 0x51, 0x67, 0x45, 0x5f, 0x33, 0xc8, 0xd9,
+			0x41, 0xe5, 0x45, 0x5d, 0x80, 0x58, 0x6d, 0x9a,
+			0xf7, 0xa9, 0xc9, 0xb1, 0x36, 0x3b, 0xd2, 0xb0,
+			0x25, 0xdb, 0x58, 0x5c, 0x77, 0x7a, 0xb0, 0x51,
+			0x2f, 0xb5, 0xa3, 0xdc, 0x1a, 0xfd, 0x48, 0x76,
+			0x89, 0x5f, 0x25, 0x00, 0xe6, 0x89, 0x6a, 0xf7,
+			0x95, 0xfd, 0x13, 0x6b, 0xe9, 0xdf, 0x28, 0x8c,
+			0x73, 0x2c, 0x08, 0x67, 0x8f, 0x3f, 0x0f, 0x92,
+			0xb0, 0xb6, 0x73, 0xb9, 0xca, 0xa6, 0x55, 0xe8,
+			0x5e, 0xc5, 0xb0, 0x68, 0xbd, 0x96, 0x6b, 0xab,
+			0x43, 0x29, 0xcb, 0x28, 0xc4, 0x03, 0xf5, 0x6f,
+			0xef, 0x74, 0x7b, 0x50, 0xb8, 0x2f, 0xac, 0x61,
+			0xad, 0xe9, 0x90, 0x7f, 0x78, 0xcd, 0xa1, 0xed,
+			0x9e, 0x64, 0xf2, 0x95, 0x5f, 0x05, 0xae, 0xe5,
+			0x57, 0x77, 0x31, 0x05, 0x75, 0xdc, 0xaa, 0x30,
+			0x43, 0x12, 0x5f, 0x5b, 0xcb, 0x78, 0x31, 0x6e,
+			0xd0, 0x92, 0x60, 0x61, 0xdb, 0x60, 0xe4, 0xe5,
+			0xce, 0x35, 0x8f, 0x0c, 0xb3, 0xc1, 0xb9, 0x4f,
+			0xe5, 0xc6, 0xf2, 0x5e, 0xcc, 0xf4, 0xf8, 0x9b,
+			0x49, 0xa9, 0xed, 0xc8, 0xcb, 0x73, 0x4d, 0xc6,
+			0x63, 0xad, 0xb1, 0xdb, 0x65, 0xa9, 0x8e, 0x81,
+			0x26, 0x16, 0x7e, 0x7b, 0x46, 0xcc, 0xb2, 0x21,
+			0x45, 0x1e, 0xce, 0x77, 0x01, 0x7c, 0x88, 0x10,
+			0xfe, 0x9d, 0x7e, 0x63, 0xe0, 0x36, 0x0b, 0xcf,
+			0x24, 0x06, 0x21, 0x34, 0x4f, 0x98, 0x38, 0x90,
+			0xdc, 0xe1, 0x03, 0x25, 0x32, 0xcf, 0x72, 0xb8,
+			0xd0, 0x48, 0xf8, 0x9b, 0xaa, 0xde, 0xc5, 0xfc,
+			0x9d, 0xa6, 0x1c, 0xcb, 0x8e, 0xaa, 0x1b, 0x87,
+			0xd4, 0x22, 0x3d, 0x47, 0x5e, 0x60, 0xc3, 0xa4,
+			0xc5, 0xf6, 0x5e, 0x88, 0xf1, 0x15, 0xcf, 0x42,
+			0x3d, 0xd3, 0x47, 0x24, 0x11, 0x32, 0x74, 0x98,
+			0xda, 0x9b, 0x23, 0x79, 0x20, 0xf1, 0xd8, 0x0c,
+			0x59, 0x8f, 0x61, 0x22, 0xda, 0x16, 0x60, 0xa0,
+			0x4d, 0x46, 0x30, 0x09, 0x59, 0xf5, 0xe1, 0xee,
+			0xe6, 0x72, 0x3a, 0xc2, 0x86, 0xa1, 0x17, 0x36,
+			0x21, 0x91, 0xff, 0x55, 0x9c, 0x73, 0xdf, 0xd8,
+			},
+		.msg_len = 64,
+		.msg = (const u8[64]){
+			0x67, 0x9b, 0x88, 0xb9, 0xc3, 0x30, 0x50, 0x56,
+			0x3f, 0x8c, 0x56, 0xfc, 0x3a, 0x65, 0x9e, 0x59,
+			0xc8, 0xcc, 0xb2, 0xe7, 0xa9, 0x1b, 0x5b, 0xf6,
+			0xbc, 0xef, 0xee, 0xac, 0x24, 0xca, 0x97, 0xa4,
+			0xb4, 0xfe, 0xcd, 0x0a, 0x7e, 0x90, 0x3d, 0x73,
+			0xc8, 0xfa, 0xd6, 0xc7, 0xaa, 0x94, 0x97, 0x2b,
+			0x0c, 0x7f, 0x38, 0xd3, 0x28, 0xea, 0x7c, 0xf6,
+			0x30, 0x55, 0x8a, 0x37, 0xc3, 0x3d, 0x38, 0x2e,
+			},
+		.sig_len = DILITHIUM65_CRYPTO_BYTES,
+		.sig = (const u8[DILITHIUM65_CRYPTO_BYTES]){
+			0xbe, 0xa1, 0x82, 0x06, 0xcd, 0x1f, 0xc3, 0x9c,
+			0x02, 0x01, 0x40, 0x4a, 0xfe, 0x12, 0xc2, 0xe4,
+			0x5a, 0x4b, 0xa0, 0x7b, 0xdb, 0x88, 0x6b, 0x60,
+			0x78, 0x82, 0xa6, 0x91, 0x2b, 0x11, 0x55, 0xd2,
+			0x44, 0x54, 0x7d, 0x5f, 0x18, 0xc5, 0xf6, 0xe7,
+			0x68, 0xf2, 0x2b, 0x6c, 0x97, 0xe5, 0x09, 0x54,
+			0xa3, 0x81, 0x41, 0x0c, 0xd4, 0x9a, 0x74, 0xa1,
+			0x97, 0xb2, 0xc3, 0xde, 0x26, 0xa6, 0xda, 0x03,
+			0xdc, 0xa6, 0x60, 0x96, 0xc4, 0x01, 0xf4, 0x0a,
+			0xe8, 0x22, 0xfb, 0x67, 0xdb, 0xa3, 0x2e, 0x0f,
+			0x79, 0xf7, 0x81, 0xb9, 0x1d, 0xbe, 0xb0, 0x80,
+			0x84, 0x6e, 0x2d, 0xa4, 0xba, 0x8b, 0xc2, 0xb1,
+			0x60, 0x78, 0xe1, 0xd9, 0xf4, 0x19, 0xd5, 0x25,
+			0x34, 0x22, 0xc9, 0x18, 0x08, 0xdf, 0x59, 0x66,
+			0x38, 0x87, 0xed, 0x5d, 0xe1, 0x0d, 0xba, 0x76,
+			0xbe, 0x02, 0x5c, 0x70, 0xcb, 0xfa, 0xa1, 0x72,
+			0x65, 0x91, 0xce, 0x4b, 0x72, 0x1b, 0x66, 0x83,
+			0x06, 0x0f, 0x14, 0x71, 0x95, 0xdc, 0x19, 0xde,
+			0x73, 0x84, 0xa2, 0x07, 0xa6, 0xc4, 0x1d, 0x32,
+			0xb0, 0x6e, 0xae, 0x3f, 0xf1, 0xce, 0x08, 0x30,
+			0xc6, 0xaa, 0xef, 0x6f, 0xee, 0xfc, 0x31, 0xf9,
+			0xd5, 0xc3, 0x03, 0xbe, 0xec, 0x37, 0xa9, 0x7e,
+			0x9f, 0x99, 0xcb, 0xe5, 0xd0, 0xea, 0x11, 0x33,
+			0x7f, 0xae, 0xe8, 0x3e, 0x70, 0x2f, 0x41, 0x50,
+			0xe5, 0xd4, 0xb5, 0xe6, 0x2b, 0xc0, 0x17, 0xf6,
+			0x79, 0x7c, 0xdc, 0x59, 0xf6, 0x34, 0xef, 0xcb,
+			0x90, 0x7e, 0x80, 0xb6, 0xf9, 0x90, 0xa9, 0x3f,
+			0xd4, 0xde, 0x9d, 0x87, 0x7f, 0xbe, 0x22, 0xe1,
+			0x80, 0x97, 0xfa, 0x4c, 0x09, 0x6e, 0x0a, 0xe5,
+			0x55, 0xf5, 0xe2, 0xe0, 0x71, 0x17, 0xb9, 0x3d,
+			0x0b, 0x8d, 0x4a, 0x79, 0xaf, 0xe9, 0xf8, 0x31,
+			0xb6, 0x79, 0x34, 0x15, 0x7b, 0x22, 0xe0, 0x6a,
+			0xeb, 0xc7, 0xc2, 0x98, 0x11, 0x6a, 0x6e, 0xf7,
+			0xef, 0x14, 0x72, 0x20, 0xf9, 0x5c, 0x0c, 0x04,
+			0x40, 0x45, 0x54, 0x20, 0x52, 0xe5, 0xed, 0x25,
+			0x57, 0x3b, 0x9e, 0x65, 0x82, 0xd4, 0x1a, 0x16,
+			0x7a, 0x7d, 0x9e, 0x7e, 0xcc, 0xa9, 0xb0, 0xf9,
+			0xc1, 0x23, 0x9e, 0x3b, 0xde, 0x85, 0x20, 0x54,
+			0x31, 0x3e, 0x70, 0xe7, 0x56, 0x7b, 0xc2, 0x83,
+			0x0e, 0xfd, 0x25, 0x48, 0x1d, 0x95, 0x38, 0x92,
+			0x48, 0xf2, 0xbe, 0x60, 0xa2, 0x5d, 0x7b, 0x9a,
+			0x23, 0x0a, 0xf7, 0xf8, 0xc4, 0xd4, 0x88, 0x96,
+			0x9b, 0x53, 0xb2, 0x96, 0x8a, 0x23, 0xfb, 0xe0,
+			0x9a, 0x25, 0x1c, 0x18, 0x4b, 0xb2, 0xa1, 0x82,
+			0x14, 0x41, 0xdd, 0xd2, 0x86, 0xbf, 0x3e, 0xbb,
+			0x83, 0xf9, 0x62, 0xba, 0xe2, 0x07, 0xcd, 0x55,
+			0xfc, 0xd3, 0x2a, 0xec, 0x6f, 0x87, 0x86, 0xfe,
+			0xc4, 0x6d, 0x61, 0xd9, 0x7c, 0xe3, 0x02, 0x0c,
+			0x1f, 0x85, 0xa3, 0xd7, 0x19, 0xda, 0xf7, 0xeb,
+			0xda, 0x6a, 0x27, 0x82, 0xb9, 0xf6, 0xd5, 0xe8,
+			0x5a, 0x2e, 0x49, 0x59, 0x91, 0xda, 0x6c, 0x05,
+			0x65, 0x5e, 0xfd, 0x85, 0xdb, 0x6d, 0x58, 0x9c,
+			0xdd, 0x25, 0xa8, 0x63, 0x3a, 0xe7, 0x62, 0xa1,
+			0x46, 0x69, 0x44, 0x61, 0x4e, 0x1a, 0x8b, 0x30,
+			0x08, 0xa9, 0xcc, 0x0f, 0x34, 0x34, 0x9a, 0xb4,
+			0x63, 0x09, 0x0d, 0x30, 0x60, 0x11, 0x62, 0xff,
+			0x49, 0x56, 0xe3, 0xca, 0x0a, 0x57, 0xb4, 0x2b,
+			0x37, 0xbb, 0x5b, 0x5f, 0x7f, 0x07, 0xf6, 0x1b,
+			0x32, 0xf8, 0xfb, 0x5b, 0xda, 0x4a, 0x29, 0xdf,
+			0x5e, 0x4e, 0xe9, 0xe0, 0x35, 0x92, 0x44, 0xa6,
+			0x39, 0x53, 0x13, 0x39, 0xb5, 0x34, 0x58, 0x3b,
+			0xec, 0x7c, 0x64, 0xcb, 0x0c, 0x11, 0x79, 0x2d,
+			0xef, 0xd6, 0x76, 0x3c, 0x76, 0x01, 0x5f, 0xa2,
+			0x95, 0xce, 0xb8, 0x11, 0x9a, 0xc8, 0x68, 0x36,
+			0x0f, 0x1d, 0xe4, 0xf4, 0x95, 0x97, 0x36, 0x82,
+			0x89, 0x46, 0x55, 0xfc, 0xa6, 0x9d, 0xcc, 0x0a,
+			0x66, 0xcc, 0x6f, 0xd6, 0xa3, 0xcd, 0x1d, 0xd2,
+			0xaa, 0xa0, 0x87, 0xe6, 0xbf, 0xde, 0xa3, 0x6f,
+			0x09, 0xfd, 0xa2, 0x5f, 0xb0, 0x63, 0xe5, 0xb2,
+			0x20, 0x51, 0x44, 0xfe, 0x22, 0xc4, 0x9c, 0xac,
+			0xc7, 0x50, 0x2c, 0x72, 0x18, 0xf9, 0x5d, 0xef,
+			0x14, 0x90, 0xb1, 0x72, 0xc9, 0xb2, 0x5b, 0x4d,
+			0xa0, 0x8c, 0x72, 0x83, 0xa3, 0x92, 0x68, 0x7d,
+			0xad, 0x16, 0x79, 0x49, 0x4a, 0xae, 0xbb, 0xbb,
+			0xb4, 0x67, 0x18, 0xb9, 0x50, 0x35, 0x75, 0x60,
+			0x9f, 0x98, 0xde, 0xe6, 0x67, 0x41, 0xcf, 0x6a,
+			0xc8, 0x3c, 0x3c, 0x62, 0xef, 0x0a, 0x3a, 0xd3,
+			0x01, 0xf1, 0x74, 0xfa, 0x7a, 0x5c, 0x83, 0x2f,
+			0x6e, 0x54, 0xf3, 0xd2, 0xe5, 0xc8, 0xe5, 0x79,
+			0xef, 0xcb, 0x39, 0xc3, 0x54, 0xbc, 0x38, 0x34,
+			0xc3, 0x91, 0x6b, 0xb5, 0xc2, 0xdc, 0x52, 0xc1,
+			0x4e, 0xd4, 0xf5, 0x31, 0x04, 0xbc, 0xbb, 0x3c,
+			0x9c, 0x88, 0x15, 0x8e, 0x97, 0x8e, 0x6c, 0xaa,
+			0xe1, 0x57, 0xf5, 0xaa, 0xb6, 0xc3, 0xd8, 0xf7,
+			0xe5, 0x80, 0xe3, 0x6b, 0x35, 0x9e, 0x21, 0x49,
+			0xb2, 0x0a, 0x0e, 0x2b, 0x7f, 0xc8, 0x3c, 0x92,
+			0xab, 0xe0, 0x56, 0x88, 0x64, 0xdc, 0x00, 0x6c,
+			0xb8, 0x9b, 0x6b, 0xec, 0x5a, 0x59, 0x05, 0xd9,
+			0x7e, 0xe7, 0x91, 0xf6, 0xe5, 0xa2, 0xe3, 0x0b,
+			0x7b, 0x3b, 0x22, 0x43, 0x33, 0xc1, 0x9a, 0x3e,
+			0xdc, 0x41, 0xb2, 0x62, 0x75, 0x24, 0xce, 0xba,
+			0xf6, 0x5a, 0xda, 0x52, 0xf3, 0x66, 0x5a, 0x89,
+			0x8b, 0xea, 0x0a, 0xdd, 0xb4, 0xc3, 0xfe, 0xbc,
+			0x52, 0x01, 0xb6, 0x72, 0xdc, 0xf7, 0xb1, 0x50,
+			0xfc, 0xce, 0xdd, 0xba, 0xd4, 0xe9, 0xd0, 0x3f,
+			0x9e, 0xca, 0xc2, 0x33, 0xa6, 0xe3, 0xc1, 0x4d,
+			0x03, 0xba, 0xb8, 0xc7, 0x0b, 0xf2, 0xd0, 0x5a,
+			0x3e, 0x28, 0x2b, 0x3d, 0xde, 0x26, 0x33, 0x86,
+			0xce, 0x0e, 0x9c, 0x7d, 0xcc, 0x18, 0x09, 0x47,
+			0x37, 0xd6, 0x7b, 0x52, 0xe0, 0x2b, 0x6e, 0x8e,
+			0xd0, 0x52, 0x07, 0x63, 0x62, 0xec, 0x92, 0x9f,
+			0xe4, 0xd0, 0xda, 0xea, 0x4e, 0x31, 0xc8, 0xfa,
+			0x5e, 0xec, 0xcd, 0x13, 0x9f, 0x09, 0xd8, 0xb8,
+			0x1e, 0x46, 0x25, 0x8c, 0x47, 0x0f, 0xdf, 0x19,
+			0x58, 0x57, 0x1c, 0xe3, 0x06, 0xf9, 0x87, 0x9c,
+			0x91, 0x7c, 0xb1, 0x9c, 0xc8, 0xad, 0xd6, 0x0d,
+			0xa3, 0x2e, 0x20, 0x04, 0xf3, 0xb2, 0xd0, 0x48,
+			0x0d, 0x13, 0xc4, 0xeb, 0x87, 0xec, 0x29, 0x17,
+			0x7f, 0xa6, 0x5a, 0x56, 0xae, 0x4c, 0xcd, 0xb5,
+			0xb0, 0x19, 0x93, 0xdb, 0xb2, 0x55, 0x4a, 0x3c,
+			0xd7, 0x1f, 0x86, 0x19, 0x8d, 0x7c, 0x9b, 0xb5,
+			0x24, 0x89, 0xda, 0xf7, 0xc4, 0x67, 0x1b, 0x80,
+			0x16, 0x1e, 0x30, 0x4f, 0x9e, 0xb7, 0x12, 0x58,
+			0x54, 0xda, 0xaf, 0x78, 0xe9, 0x6e, 0x7c, 0x98,
+			0x0d, 0x3a, 0x41, 0xcf, 0xcc, 0xbc, 0x4c, 0x9f,
+			0x1a, 0xf6, 0xd8, 0x6f, 0x61, 0x55, 0xdd, 0x00,
+			0x64, 0xf3, 0x71, 0x2b, 0x55, 0x8f, 0xd4, 0xed,
+			0xb1, 0x57, 0x8b, 0x39, 0x3e, 0x0d, 0xf5, 0x56,
+			0x5f, 0x47, 0x5d, 0x8d, 0x6c, 0x8b, 0x33, 0x44,
+			0xaf, 0x3e, 0x7c, 0x95, 0x4c, 0x45, 0x31, 0x12,
+			0x4f, 0x94, 0x47, 0xc9, 0x57, 0x4b, 0x6d, 0x05,
+			0xb9, 0x8d, 0x30, 0x54, 0x2a, 0xfd, 0x44, 0x40,
+			0xd6, 0x59, 0xab, 0x5c, 0x5d, 0x6f, 0xbb, 0xab,
+			0x4a, 0xff, 0x28, 0x60, 0xef, 0x49, 0x4b, 0x4d,
+			0x3c, 0x21, 0x5a, 0xb1, 0x56, 0x48, 0x3d, 0x60,
+			0x50, 0x83, 0x57, 0x98, 0xe8, 0x3a, 0x7f, 0xd4,
+			0xe2, 0x17, 0x82, 0xcb, 0xd6, 0x34, 0xf4, 0x57,
+			0x31, 0x1c, 0xc6, 0xc8, 0x00, 0x8d, 0x7f, 0xb0,
+			0x78, 0x47, 0x61, 0xf1, 0xd5, 0xec, 0x3b, 0x5b,
+			0x83, 0x91, 0x30, 0x58, 0x8f, 0x94, 0xc2, 0xf0,
+			0xa8, 0x61, 0xd1, 0xfa, 0x95, 0x89, 0x6c, 0x21,
+			0x76, 0xd8, 0x52, 0xf1, 0xdf, 0x85, 0xc3, 0xe6,
+			0x4f, 0x6f, 0x9f, 0xee, 0x48, 0x11, 0xbd, 0x4f,
+			0xff, 0xa9, 0xec, 0x8b, 0xf0, 0x4f, 0x67, 0x05,
+			0xb0, 0x13, 0x11, 0x39, 0x7e, 0x7c, 0xc5, 0x99,
+			0xa6, 0x73, 0x20, 0xff, 0x4b, 0x01, 0xc7, 0xc1,
+			0xf6, 0x7c, 0x0a, 0x02, 0x57, 0x0b, 0xe3, 0x75,
+			0xcc, 0x1b, 0x7a, 0xca, 0x33, 0x92, 0xdc, 0x5b,
+			0xa1, 0x9e, 0xdd, 0x9e, 0xfd, 0x38, 0xc7, 0xa1,
+			0x27, 0x81, 0xf5, 0xb4, 0x80, 0xf8, 0x0d, 0xfc,
+			0xbd, 0x2d, 0x43, 0xe0, 0x28, 0xec, 0xc4, 0x04,
+			0x00, 0x58, 0x76, 0x28, 0xb7, 0x78, 0x6c, 0xc7,
+			0x01, 0x16, 0x53, 0x47, 0xe0, 0x15, 0xe0, 0xc3,
+			0xe3, 0x34, 0x75, 0xec, 0xfb, 0x32, 0x10, 0x8f,
+			0xd5, 0x0e, 0xf7, 0xfa, 0x02, 0x1e, 0xc9, 0x14,
+			0x3b, 0x4f, 0x1d, 0xc5, 0x96, 0xac, 0x75, 0x78,
+			0x69, 0x94, 0x82, 0xd8, 0x7f, 0x10, 0xe6, 0x50,
+			0x5d, 0xef, 0x07, 0xcb, 0x64, 0x73, 0xf6, 0x34,
+			0x35, 0x22, 0x94, 0x78, 0xf0, 0x5d, 0xd7, 0x37,
+			0x74, 0xbf, 0x54, 0x3f, 0x3a, 0x6d, 0xd6, 0x6b,
+			0x1a, 0x77, 0x29, 0xee, 0x1b, 0x63, 0x54, 0xc3,
+			0x2d, 0x72, 0xf1, 0xbc, 0xc1, 0x0a, 0xe5, 0xbd,
+			0xf8, 0x1f, 0x15, 0x05, 0x8b, 0x06, 0x1e, 0x6c,
+			0xc7, 0x59, 0x48, 0xf5, 0x02, 0x39, 0x38, 0x3e,
+			0x98, 0x75, 0x65, 0xc1, 0x88, 0x32, 0xa4, 0x29,
+			0xfb, 0x2a, 0xbb, 0xfd, 0x51, 0x7e, 0x11, 0x52,
+			0x08, 0xc4, 0x0b, 0xb2, 0xba, 0xe8, 0x57, 0x6a,
+			0x2a, 0xf7, 0x41, 0x62, 0xf2, 0x40, 0xbf, 0xdc,
+			0x7d, 0x6e, 0x1c, 0xd4, 0x49, 0x20, 0x84, 0x98,
+			0x23, 0xb0, 0x3c, 0x79, 0xe8, 0x7d, 0xee, 0xc5,
+			0xb5, 0x72, 0xb1, 0xbd, 0x9b, 0x77, 0x9a, 0x40,
+			0xc2, 0xd8, 0x16, 0x56, 0x89, 0x80, 0x21, 0x43,
+			0x01, 0xbc, 0x70, 0x5b, 0x32, 0x4b, 0x3f, 0xaf,
+			0x5e, 0x49, 0x24, 0x63, 0x59, 0xa5, 0x18, 0x66,
+			0x47, 0x9c, 0x14, 0x94, 0x44, 0xab, 0x5d, 0x62,
+			0xb8, 0x86, 0x61, 0x13, 0xd3, 0x41, 0x69, 0xee,
+			0x16, 0x60, 0x48, 0xec, 0xd8, 0xaf, 0x6e, 0x83,
+			0x4b, 0x59, 0x73, 0x5c, 0xa5, 0xe5, 0xf3, 0x98,
+			0xbf, 0x7b, 0xdc, 0x51, 0xfa, 0x64, 0xab, 0x8d,
+			0x99, 0x5b, 0x29, 0x63, 0x5b, 0x3f, 0x8a, 0xaa,
+			0xca, 0xd3, 0x24, 0x76, 0x2a, 0xe8, 0xbb, 0xfc,
+			0x46, 0xc2, 0x93, 0xc5, 0xa7, 0xf0, 0x9d, 0x7d,
+			0x4c, 0x77, 0x4e, 0xfd, 0xe0, 0xad, 0x25, 0xff,
+			0x70, 0x94, 0xcb, 0x64, 0xe4, 0x4e, 0x57, 0x59,
+			0xd8, 0xc4, 0x2a, 0x8f, 0xb3, 0x95, 0xc2, 0xc4,
+			0x74, 0x0b, 0x35, 0x3c, 0x0f, 0xd3, 0x65, 0x77,
+			0x6d, 0x51, 0x4d, 0x83, 0xa8, 0x9c, 0x7a, 0xde,
+			0x8b, 0x3e, 0xda, 0x50, 0xf8, 0x3d, 0x96, 0xc9,
+			0xa8, 0x1c, 0xc1, 0xd2, 0xa7, 0x03, 0x66, 0xb9,
+			0x50, 0x20, 0xfc, 0xfc, 0xe2, 0x61, 0xff, 0x53,
+			0x3c, 0xc0, 0xae, 0xa5, 0xdd, 0x51, 0xed, 0x55,
+			0x89, 0x14, 0xb6, 0x9f, 0x86, 0xd3, 0xd4, 0xb1,
+			0x67, 0xc6, 0xd7, 0xeb, 0x59, 0xf3, 0x6a, 0x2c,
+			0x6c, 0x9a, 0x39, 0x0b, 0x92, 0x2a, 0x40, 0x14,
+			0xa2, 0xd1, 0x05, 0x2d, 0x58, 0x86, 0x6d, 0x74,
+			0xd9, 0x5c, 0x09, 0xcf, 0xb5, 0x3c, 0x91, 0x73,
+			0x56, 0x05, 0xbb, 0x6d, 0x23, 0x8b, 0xf2, 0xa4,
+			0x7b, 0x83, 0xc8, 0x7c, 0x92, 0x14, 0x32, 0xb9,
+			0x1b, 0xfe, 0x28, 0xb9, 0x1f, 0xcf, 0x4b, 0x58,
+			0x98, 0x0e, 0x30, 0xd1, 0xe5, 0x51, 0xb1, 0x51,
+			0x75, 0xdf, 0x3f, 0x3f, 0x39, 0xd0, 0xc5, 0xc8,
+			0x58, 0x6e, 0x5b, 0xf8, 0x10, 0x04, 0xa4, 0x58,
+			0xd4, 0xbf, 0x4e, 0x36, 0x3e, 0xb5, 0x11, 0xb1,
+			0x62, 0x57, 0xd2, 0xbb, 0xf7, 0x1e, 0xf1, 0xdc,
+			0x23, 0x8d, 0xb4, 0x5c, 0xef, 0xba, 0x3b, 0x83,
+			0xe3, 0xbf, 0xa4, 0xbc, 0x71, 0x15, 0xe8, 0xde,
+			0x05, 0x13, 0x10, 0xde, 0xec, 0xf7, 0x37, 0xfa,
+			0xec, 0x1b, 0x89, 0x6f, 0x3d, 0x10, 0xfa, 0x2a,
+			0xe2, 0x1c, 0x4a, 0x4a, 0xe8, 0x12, 0x36, 0x11,
+			0x99, 0x56, 0xd2, 0xd1, 0xf2, 0xc7, 0x98, 0xcd,
+			0xb1, 0xfd, 0xbb, 0xc0, 0x2e, 0xa0, 0x05, 0x2c,
+			0xe5, 0x6d, 0x1c, 0x25, 0x7d, 0x97, 0xa9, 0x29,
+			0x19, 0x92, 0xaf, 0x52, 0x5b, 0xd9, 0x05, 0x68,
+			0xae, 0x30, 0xb7, 0x38, 0x07, 0xcd, 0xc6, 0xd5,
+			0x24, 0x61, 0xc8, 0x6e, 0x26, 0x92, 0xcc, 0x34,
+			0x68, 0x52, 0x91, 0x5e, 0x5f, 0xc8, 0x67, 0x7f,
+			0xe5, 0x02, 0x35, 0x1e, 0xf3, 0x1f, 0xcc, 0x1e,
+			0x2b, 0x07, 0xbe, 0x20, 0x00, 0x5f, 0x06, 0x3e,
+			0xc4, 0x5e, 0x75, 0xc0, 0xd1, 0x04, 0x03, 0xa1,
+			0x52, 0x87, 0x77, 0x0d, 0x4a, 0xf0, 0x9a, 0xd1,
+			0x3e, 0x67, 0x59, 0x8e, 0x9e, 0x86, 0xc2, 0x89,
+			0xb8, 0xdb, 0x07, 0xca, 0xd8, 0xcb, 0x23, 0x57,
+			0x38, 0xc5, 0x22, 0x1d, 0xea, 0x44, 0xfe, 0xb1,
+			0xe2, 0xe5, 0x69, 0xd5, 0x59, 0x3b, 0x82, 0x6c,
+			0xcb, 0x02, 0x5b, 0x28, 0xe0, 0xa4, 0x02, 0x61,
+			0x8c, 0x4a, 0x23, 0x45, 0x4a, 0x61, 0xe1, 0x45,
+			0x44, 0xcd, 0x9f, 0xad, 0x5f, 0xc8, 0x1b, 0x7b,
+			0x8e, 0x39, 0x20, 0xbb, 0xc6, 0x3b, 0x76, 0x85,
+			0x56, 0xb6, 0xd2, 0xa0, 0x8f, 0x1e, 0xfa, 0xe3,
+			0xcf, 0x32, 0x42, 0x32, 0x19, 0x05, 0xdc, 0x56,
+			0x8f, 0xe3, 0x4e, 0xd9, 0x0c, 0x07, 0x54, 0x8d,
+			0x65, 0xdc, 0x08, 0x59, 0xfd, 0x9a, 0x1b, 0x1e,
+			0xf3, 0xdc, 0x32, 0x64, 0xaf, 0x17, 0xc4, 0x2c,
+			0x7e, 0x72, 0x5f, 0x3e, 0x46, 0xb7, 0xdd, 0x40,
+			0x49, 0x5b, 0x9c, 0x32, 0x92, 0x1c, 0x6c, 0x9d,
+			0x58, 0x79, 0xc2, 0xb8, 0x20, 0xbb, 0x39, 0xd9,
+			0x86, 0x7c, 0x06, 0xf3, 0x5b, 0xcb, 0x0f, 0xd0,
+			0x2d, 0x7c, 0x2e, 0x05, 0x34, 0xfc, 0xa1, 0x1f,
+			0x66, 0xba, 0x17, 0xdb, 0x3d, 0x3d, 0x2f, 0x7e,
+			0x25, 0x20, 0xa7, 0xb9, 0xd1, 0x2f, 0xea, 0x06,
+			0x33, 0x5d, 0x69, 0xe8, 0xb9, 0x05, 0x72, 0x85,
+			0x7a, 0x09, 0x99, 0x5a, 0x17, 0x57, 0x1d, 0xd7,
+			0xb1, 0xe4, 0x7e, 0x8e, 0x7a, 0x9c, 0xdf, 0xcf,
+			0x4d, 0x09, 0x53, 0x4c, 0x84, 0x57, 0xc9, 0x7b,
+			0x7f, 0x66, 0x77, 0xa6, 0xc0, 0xc9, 0x3a, 0xb1,
+			0x1f, 0xe4, 0xfc, 0x8e, 0xdd, 0x7c, 0x50, 0xe4,
+			0xdb, 0xf9, 0x35, 0x8e, 0x43, 0x3e, 0x38, 0xb1,
+			0x1b, 0x6f, 0xde, 0xab, 0xcc, 0xb4, 0x5b, 0xec,
+			0x42, 0x10, 0xc6, 0x3a, 0xd4, 0xa6, 0xc4, 0x98,
+			0xe8, 0x81, 0x30, 0x58, 0x03, 0xc6, 0xea, 0xc9,
+			0xee, 0x45, 0x1b, 0x84, 0x3d, 0x80, 0x06, 0x7f,
+			0xdf, 0x8a, 0x8c, 0xac, 0xc1, 0x33, 0x98, 0xd4,
+			0x2a, 0xdc, 0xa9, 0xe0, 0xd7, 0xd8, 0x3a, 0x4f,
+			0xd7, 0xb6, 0x5c, 0x1c, 0x4b, 0x06, 0x3e, 0x01,
+			0x62, 0xfc, 0x50, 0x64, 0xe7, 0x04, 0x59, 0x1c,
+			0x9c, 0x92, 0x81, 0xb8, 0x1f, 0x4b, 0x7e, 0xba,
+			0xfc, 0x7b, 0x2d, 0x67, 0x56, 0xfc, 0xbd, 0x41,
+			0xa9, 0xbd, 0x90, 0x25, 0xc0, 0x60, 0x0f, 0xe6,
+			0x3b, 0xcf, 0x42, 0xf2, 0xdd, 0xab, 0xd5, 0xe1,
+			0xf0, 0xbb, 0x88, 0x50, 0xf0, 0xde, 0x26, 0x91,
+			0xa7, 0x93, 0xfb, 0xe7, 0xea, 0x75, 0xf0, 0x2a,
+			0x5b, 0x97, 0xd3, 0xe2, 0x61, 0x0e, 0x4b, 0xba,
+			0x99, 0x97, 0xba, 0xbe, 0x0c, 0x86, 0x89, 0x27,
+			0x7e, 0xd4, 0xc7, 0x2d, 0xdf, 0x4b, 0x0d, 0x5c,
+			0xa9, 0x64, 0x77, 0xaf, 0xfe, 0x63, 0xc8, 0x9b,
+			0x1f, 0xfb, 0xf0, 0x86, 0xd7, 0x58, 0x7f, 0xbb,
+			0x4b, 0x07, 0x16, 0x85, 0x09, 0x3c, 0x93, 0x9a,
+			0x2d, 0x3b, 0xfe, 0xd6, 0xb0, 0x30, 0xd1, 0x0b,
+			0x87, 0xb2, 0xc6, 0xf4, 0x23, 0x36, 0x08, 0x04,
+			0xf3, 0x2d, 0x44, 0x6b, 0xbd, 0x65, 0x64, 0x14,
+			0xd2, 0x08, 0x41, 0xa9, 0xf4, 0x53, 0xd3, 0xe8,
+			0x01, 0xaa, 0xcc, 0xf6, 0xa4, 0x74, 0x53, 0x87,
+			0x84, 0x84, 0xe4, 0x49, 0xc6, 0xf8, 0xed, 0xa9,
+			0x0d, 0xdf, 0x06, 0x03, 0xbf, 0x55, 0x46, 0xa5,
+			0xb7, 0x1b, 0x24, 0xaa, 0xf2, 0x01, 0x8e, 0x25,
+			0x66, 0xe4, 0xad, 0x19, 0x89, 0x86, 0x0f, 0xf9,
+			0x5f, 0x5b, 0x78, 0x7b, 0xf2, 0xdb, 0xfd, 0x1e,
+			0xbf, 0xcb, 0x9a, 0xa4, 0x38, 0x38, 0x14, 0x91,
+			0x68, 0xda, 0x17, 0x93, 0x24, 0x42, 0xdf, 0x94,
+			0x77, 0x75, 0xb5, 0xe3, 0x05, 0x29, 0xc9, 0xfa,
+			0x31, 0x63, 0x87, 0x2d, 0x9d, 0x8d, 0xe5, 0x81,
+			0xaf, 0x0c, 0xc5, 0x25, 0xdc, 0xf4, 0xcf, 0x69,
+			0x7a, 0xe1, 0x6d, 0x26, 0x7a, 0xc6, 0xdd, 0x54,
+			0x01, 0xb3, 0x21, 0x57, 0x5b, 0xaf, 0x83, 0xa1,
+			0x15, 0x38, 0xbf, 0x02, 0x78, 0xc2, 0x8d, 0xc6,
+			0xed, 0xb1, 0xd3, 0x97, 0x97, 0xae, 0xf3, 0x90,
+			0x6a, 0xed, 0x1f, 0xb5, 0x52, 0x06, 0x58, 0xf4,
+			0x16, 0xe7, 0xde, 0x6e, 0xfc, 0x12, 0x1a, 0x8f,
+			0x72, 0xbd, 0xed, 0x13, 0x81, 0x57, 0x66, 0xf2,
+			0x1e, 0x29, 0xa0, 0x37, 0xfd, 0xa9, 0x3b, 0xec,
+			0xde, 0xb1, 0x8d, 0xb7, 0x16, 0xf6, 0xc4, 0x8b,
+			0x09, 0x32, 0xdd, 0x49, 0x0e, 0x8b, 0xbc, 0xc3,
+			0xa6, 0xd3, 0x9b, 0x8c, 0xe7, 0x1b, 0xb0, 0x71,
+			0xb9, 0x5d, 0x83, 0x59, 0xca, 0x28, 0x50, 0x70,
+			0xa1, 0x95, 0x12, 0xe9, 0xf5, 0x5d, 0x74, 0x5b,
+			0xd7, 0x55, 0xb9, 0xc4, 0xf6, 0x89, 0x19, 0x2c,
+			0x8e, 0x4a, 0x86, 0x8a, 0x4d, 0x05, 0x05, 0x85,
+			0x57, 0xc8, 0x9b, 0xf1, 0x35, 0xe0, 0xd3, 0x00,
+			0x46, 0xe6, 0x02, 0xed, 0x1e, 0xdb, 0x46, 0xb7,
+			0x22, 0xa4, 0x4b, 0xa4, 0xbd, 0x69, 0xd0, 0x89,
+			0xd6, 0x97, 0x37, 0x6c, 0xd8, 0x5e, 0x60, 0xe1,
+			0xfe, 0x4e, 0x79, 0xa9, 0x27, 0x8f, 0xf1, 0x79,
+			0xc6, 0x2b, 0x64, 0x84, 0xc0, 0x1b, 0x08, 0xe7,
+			0x83, 0xdb, 0xc0, 0x76, 0x18, 0xf3, 0x5f, 0x68,
+			0xa5, 0x67, 0x56, 0x9f, 0x38, 0x13, 0x52, 0xf0,
+			0xe3, 0x80, 0xbd, 0x85, 0x0d, 0x89, 0x1c, 0x4a,
+			0x5b, 0x29, 0x51, 0x44, 0x9c, 0xbe, 0x7d, 0x74,
+			0xb3, 0x14, 0xae, 0x1b, 0x1c, 0x33, 0x47, 0x2c,
+			0xaa, 0xdd, 0xff, 0x6f, 0xf1, 0x69, 0xf5, 0xb1,
+			0x44, 0x56, 0x4d, 0xc3, 0xb7, 0x6f, 0x29, 0xa7,
+			0x99, 0x49, 0xce, 0xa4, 0x52, 0x36, 0xa7, 0x4e,
+			0xb3, 0xad, 0x46, 0x8a, 0xa8, 0xf2, 0x8f, 0x0b,
+			0xbd, 0xd7, 0x1d, 0x79, 0x76, 0x8e, 0x0a, 0x63,
+			0xf2, 0x71, 0x90, 0xc9, 0xa2, 0x32, 0x1a, 0x05,
+			0xa5, 0x5d, 0x57, 0xb2, 0xba, 0x20, 0x10, 0x66,
+			0xac, 0x1c, 0xde, 0x4d, 0x12, 0xfc, 0xb3, 0x85,
+			0xe3, 0x12, 0xb4, 0x27, 0x8f, 0xa4, 0xc9, 0x59,
+			0x44, 0x4f, 0xdc, 0x3a, 0x74, 0x95, 0x44, 0xa5,
+			0xb1, 0x74, 0x6b, 0xbb, 0x42, 0xd8, 0x2e, 0x27,
+			0x2e, 0xc1, 0x23, 0xa3, 0x5c, 0x09, 0x1d, 0xbf,
+			0x81, 0x57, 0xa2, 0x86, 0x9d, 0xcc, 0xd9, 0x39,
+			0x76, 0x29, 0xdd, 0xde, 0x19, 0xff, 0xe8, 0x65,
+			0x70, 0xa2, 0x00, 0xd8, 0x0e, 0x50, 0xc9, 0xf7,
+			0x36, 0x19, 0x66, 0x54, 0x61, 0x9b, 0x60, 0x4d,
+			0xe0, 0xac, 0xf4, 0x8f, 0x67, 0x96, 0x27, 0x62,
+			0x4c, 0xa1, 0xfa, 0x80, 0xb5, 0x43, 0x6c, 0x61,
+			0x77, 0x07, 0x47, 0xc4, 0x6b, 0xcc, 0x23, 0x13,
+			0x9f, 0x98, 0xf7, 0x34, 0x84, 0x06, 0x3c, 0x31,
+			0xfb, 0xb5, 0x9c, 0x44, 0x51, 0xa0, 0xe7, 0x78,
+			0x7c, 0x86, 0x11, 0x55, 0xd7, 0xd8, 0x30, 0x43,
+			0x58, 0xaf, 0x9e, 0x26, 0x8c, 0x12, 0x5f, 0xce,
+			0xa7, 0xe7, 0x53, 0x3d, 0xaa, 0xf7, 0x0d, 0xf5,
+			0x9b, 0x91, 0xba, 0xac, 0xec, 0x4a, 0xb9, 0xaf,
+			0x94, 0x34, 0xb3, 0x8c, 0xf0, 0xf2, 0xce, 0x14,
+			0x2b, 0xc5, 0x35, 0x25, 0x2b, 0xcb, 0xbf, 0x5e,
+			0x91, 0x48, 0xf7, 0x01, 0x42, 0x5d, 0x17, 0x89,
+			0xeb, 0xea, 0x75, 0x5b, 0x44, 0x73, 0xa6, 0xeb,
+			0x1b, 0x8d, 0xb5, 0x95, 0xed, 0xca, 0xf3, 0x5f,
+			0xf8, 0x80, 0xc4, 0xc7, 0x2d, 0xf3, 0xf0, 0x86,
+			0x8f, 0x88, 0x6c, 0x67, 0xea, 0xd0, 0x38, 0x7a,
+			0x1b, 0x7e, 0x9e, 0xf6, 0x5f, 0x56, 0x4f, 0x94,
+			0xf2, 0xf8, 0xbb, 0x96, 0xb1, 0x9e, 0x0f, 0x90,
+			0x92, 0xe5, 0x5d, 0x16, 0xea, 0x2e, 0xab, 0x0b,
+			0x4c, 0x9b, 0x40, 0xa0, 0x35, 0x12, 0x7b, 0x88,
+			0xa6, 0xbe, 0x1d, 0x05, 0x51, 0x79, 0xe1, 0xae,
+			0x06, 0x42, 0xe7, 0xe8, 0xed, 0x36, 0xcb, 0x5f,
+			0xff, 0x05, 0x3a, 0xc3, 0x80, 0x51, 0x51, 0x14,
+			0xe0, 0x6f, 0x0d, 0x8f, 0x3a, 0xa3, 0xd0, 0x99,
+			0xb0, 0xc9, 0x02, 0x42, 0xd8, 0x26, 0xbe, 0x51,
+			0xee, 0x42, 0x7d, 0x73, 0xc2, 0xc5, 0x0b, 0xb9,
+			0x03, 0x26, 0x8e, 0xac, 0x65, 0x41, 0xbf, 0xaa,
+			0xf4, 0x34, 0xfe, 0xe1, 0xf3, 0xdb, 0x3c, 0x0b,
+			0x5c, 0x72, 0x2c, 0x0b, 0x6c, 0x83, 0x9c, 0xa4,
+			0x8f, 0xac, 0x15, 0x76, 0x23, 0xf3, 0x5b, 0xa9,
+			0x25, 0x71, 0xe1, 0x7d, 0x85, 0x41, 0xd0, 0xc8,
+			0x48, 0x93, 0x7b, 0xa0, 0x59, 0x02, 0xb9, 0xe9,
+			0x6f, 0x8c, 0xda, 0xa9, 0x0d, 0x0c, 0x95, 0x33,
+			0xfe, 0x13, 0xc0, 0xdc, 0xad, 0x36, 0xe1, 0xd0,
+			0x91, 0x4c, 0xe4, 0xa8, 0x2f, 0xf5, 0xd1, 0x66,
+			0x8a, 0x2c, 0x5d, 0xcc, 0xfb, 0xb2, 0xa9, 0x1a,
+			0x2b, 0x04, 0x9b, 0x83, 0x72, 0xb2, 0xd6, 0x43,
+			0x53, 0xcd, 0x28, 0x7f, 0x8a, 0x95, 0xb5, 0x93,
+			0x54, 0xf7, 0xcc, 0x95, 0xca, 0x8a, 0xec, 0xb2,
+			0x49, 0x46, 0x11, 0xc6, 0x4e, 0x60, 0xe5, 0xcd,
+			0x42, 0x29, 0xdf, 0x14, 0x47, 0x42, 0x6d, 0xd9,
+			0x46, 0xcb, 0x07, 0xd9, 0xf9, 0x3d, 0xa6, 0x60,
+			0x71, 0x80, 0xbb, 0xe8, 0xfd, 0x73, 0x22, 0x1a,
+			0x67, 0x5f, 0x16, 0x95, 0x81, 0x74, 0x03, 0xbe,
+			0xd7, 0x20, 0x27, 0xaf, 0xd3, 0x48, 0x62, 0x20,
+			0xca, 0x0b, 0xff, 0xd5, 0x41, 0xa5, 0xd4, 0xa9,
+			0x22, 0x51, 0x68, 0x67, 0xe3, 0x5d, 0xc1, 0x70,
+			0xc2, 0x5f, 0x79, 0xf9, 0x27, 0x4d, 0x96, 0x92,
+			0xd4, 0xd9, 0x03, 0xef, 0x50, 0xd0, 0x99, 0x69,
+			0x78, 0xe2, 0xec, 0x7d, 0x09, 0x6b, 0x96, 0xfd,
+			0x62, 0x61, 0xf4, 0xb8, 0x86, 0x09, 0xa5, 0xcf,
+			0x41, 0x67, 0x6e, 0xbe, 0x3c, 0x3f, 0xb6, 0x58,
+			0xe2, 0xe7, 0x97, 0xda, 0xde, 0x2c, 0x82, 0x12,
+			0xee, 0x44, 0xd2, 0x87, 0x91, 0x11, 0x46, 0xaf,
+			0x16, 0xf7, 0xc0, 0x8e, 0x7d, 0x71, 0x03, 0xd6,
+			0x76, 0x5c, 0x0d, 0x28, 0x16, 0x03, 0xbd, 0xc0,
+			0x7a, 0xc0, 0x44, 0x3a, 0xf0, 0xc7, 0x75, 0xc8,
+			0xad, 0x28, 0x5c, 0xd7, 0x18, 0x53, 0x5f, 0xcf,
+			0xe2, 0x72, 0x7d, 0xa6, 0xb6, 0x09, 0xf6, 0x2d,
+			0xc0, 0xaa, 0x25, 0x35, 0x2f, 0xa3, 0xbe, 0x9e,
+			0x91, 0x68, 0x57, 0xa8, 0x69, 0xa5, 0x45, 0x43,
+			0xdb, 0x58, 0xc8, 0xee, 0x05, 0x62, 0x1d, 0x7b,
+			0x0d, 0x66, 0x83, 0x44, 0x26, 0x0c, 0xdf, 0x8b,
+			0x6e, 0x72, 0x60, 0x2f, 0xd6, 0x77, 0x5d, 0x62,
+			0xc0, 0x56, 0xe3, 0x18, 0x0a, 0x85, 0x79, 0x43,
+			0x9f, 0x5c, 0x2d, 0x42, 0xd2, 0x47, 0xb2, 0xa7,
+			0x48, 0x5e, 0x29, 0x95, 0x1a, 0xd7, 0x0c, 0x65,
+			0xcd, 0x8d, 0xd9, 0xfb, 0x7d, 0xad, 0x3e, 0x93,
+			0x1c, 0x18, 0x5c, 0xaf, 0x9b, 0x24, 0x63, 0xe3,
+			0xc9, 0x90, 0x5e, 0x45, 0x51, 0x35, 0x59, 0x44,
+			0x35, 0x6b, 0xe4, 0xb1, 0x89, 0xcc, 0xc7, 0xd3,
+			0x54, 0x62, 0xa2, 0x1a, 0xc0, 0x60, 0x57, 0x9e,
+			0x70, 0x85, 0x42, 0xbe, 0x2b, 0x44, 0xe9, 0xfe,
+			0x0c, 0xa2, 0xd7, 0x49, 0xc3, 0x50, 0xd3, 0x3f,
+			0x0a, 0xa4, 0xbd, 0xf6, 0x01, 0x9b, 0x5a, 0x1f,
+			0xdf, 0xe6, 0x3f, 0x56, 0xa0, 0xc8, 0x14, 0xff,
+			0xd1, 0xd5, 0x8d, 0xab, 0x7d, 0x20, 0x82, 0x12,
+			0xe6, 0x75, 0x4e, 0xc4, 0x21, 0xd7, 0x14, 0x74,
+			0xa0, 0xb4, 0x46, 0x07, 0xd4, 0xb8, 0xc2, 0x40,
+			0xf2, 0x99, 0x33, 0xfe, 0x60, 0xe1, 0x6a, 0x69,
+			0xf2, 0x35, 0xda, 0x95, 0x57, 0x7b, 0x30, 0xe3,
+			0x34, 0x09, 0xe2, 0xf5, 0x57, 0xd7, 0x3e, 0x19,
+			0x23, 0x1c, 0x86, 0xf9, 0x9e, 0xe6, 0xb3, 0x0d,
+			0x04, 0x37, 0x1e, 0x26, 0x9f, 0xd9, 0xf6, 0xd0,
+			0x8d, 0x85, 0xa6, 0xa3, 0x27, 0x94, 0x82, 0x2b,
+			0x1f, 0x4a, 0x5f, 0xe7, 0xfb, 0x16, 0xa6, 0xab,
+			0xf9, 0x62, 0x96, 0xb9, 0x48, 0x70, 0x9a, 0xd8,
+			0x10, 0xac, 0xae, 0xc4, 0x39, 0x48, 0xfb, 0x79,
+			0x91, 0x56, 0x4c, 0x26, 0x48, 0x73, 0x90, 0x00,
+			0xf9, 0x15, 0x1b, 0x59, 0x14, 0x0b, 0x11, 0x62,
+			0xf7, 0x42, 0xc6, 0x08, 0xd6, 0xb3, 0xc2, 0x68,
+			0xd0, 0x39, 0x17, 0x6c, 0x27, 0x21, 0x53, 0xb5,
+			0x21, 0x4d, 0x85, 0x87, 0xda, 0x1b, 0x2e, 0x67,
+			0x77, 0xb7, 0xbb, 0xfc, 0x1d, 0x50, 0x8c, 0x9f,
+			0x2e, 0xae, 0xda, 0x35, 0x42, 0x56, 0x59, 0x9c,
+			0xc0, 0x04, 0x12, 0x36, 0x7e, 0x8f, 0x99, 0xb1,
+			0xe6, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+			0x0c, 0x10, 0x13, 0x19, 0x22, },
+	}, {
+		.what = "pure rejection vector",
+		.algo = "ml-dsa65",
+		.pk_len = DILITHIUM65_PUBLICKEYBYTES,
+		.pk = (const u8[DILITHIUM65_PUBLICKEYBYTES]){
+			0xef, 0x23, 0x61, 0xd2, 0x13, 0x8e, 0xaf, 0x16,
+			0xdf, 0x67, 0x8a, 0x3e, 0xe8, 0x05, 0x1d, 0x36,
+			0xda, 0x1b, 0xb5, 0x12, 0xfd, 0xe1, 0x0d, 0x87,
+			0x63, 0x31, 0xf1, 0xff, 0xb5, 0x66, 0x63, 0x9e,
+			0x14, 0x7a, 0x48, 0x84, 0xd9, 0x35, 0x40, 0x0a,
+			0x4c, 0x15, 0x07, 0xce, 0x20, 0x68, 0x6b, 0xfb,
+			0x23, 0x2e, 0xf6, 0x40, 0xcd, 0xb6, 0x2c, 0xb3,
+			0xa0, 0x3b, 0x95, 0x13, 0xb3, 0x21, 0x4d, 0xca,
+			0xee, 0x8a, 0x3e, 0x6b, 0xb1, 0x65, 0x44, 0x7e,
+			0xac, 0x91, 0x7d, 0xcd, 0xda, 0x9f, 0xa8, 0xce,
+			0x91, 0x99, 0x2a, 0x13, 0xb9, 0xf0, 0xed, 0xd9,
+			0x00, 0x52, 0x54, 0x09, 0xde, 0xeb, 0x79, 0x41,
+			0xc3, 0x15, 0x66, 0x8b, 0x0b, 0xf3, 0x89, 0x56,
+			0x7c, 0xaa, 0xf2, 0x36, 0x16, 0x6e, 0xc5, 0x1d,
+			0x61, 0x78, 0xbb, 0x4e, 0x8d, 0x49, 0xf5, 0x6c,
+			0x7c, 0x7b, 0xe9, 0x5a, 0x58, 0xe5, 0x5d, 0x37,
+			0x23, 0x1c, 0x68, 0xb2, 0x18, 0x09, 0x1c, 0xd0,
+			0xbf, 0x7f, 0x0b, 0x39, 0xb9, 0x83, 0x15, 0xc7,
+			0x80, 0xd0, 0xed, 0xdb, 0xec, 0xed, 0x36, 0x7d,
+			0x8f, 0x5b, 0xdf, 0xa2, 0x02, 0xf7, 0x4f, 0x61,
+			0x42, 0xc2, 0xb7, 0xce, 0xe4, 0x36, 0xbb, 0x5a,
+			0x37, 0x97, 0x57, 0x4e, 0xa1, 0x03, 0x71, 0x8a,
+			0x4c, 0x69, 0x26, 0x3c, 0x4c, 0xc9, 0xfc, 0xaf,
+			0x8d, 0x0e, 0x65, 0x89, 0xef, 0xab, 0x73, 0x5c,
+			0x50, 0xed, 0x1e, 0xd6, 0x7f, 0x65, 0x85, 0xe1,
+			0xac, 0x01, 0xed, 0x59, 0xad, 0x4a, 0x80, 0xb4,
+			0x71, 0xd0, 0xea, 0x80, 0xdd, 0x37, 0xfe, 0xa8,
+			0x96, 0x0d, 0xab, 0x02, 0x42, 0x56, 0xdc, 0x3f,
+			0x9b, 0x00, 0x4e, 0x6c, 0xbb, 0x7a, 0xd1, 0x17,
+			0x40, 0x11, 0xed, 0x92, 0xc0, 0x6c, 0xfa, 0xdb,
+			0x01, 0x5b, 0x74, 0x72, 0x9d, 0xa3, 0x5b, 0x23,
+			0x86, 0x20, 0x20, 0xc5, 0x04, 0x5e, 0xbd, 0x69,
+			0xba, 0x19, 0x67, 0x41, 0x07, 0x50, 0xd0, 0x3f,
+			0x32, 0xcf, 0xce, 0x51, 0xc1, 0x9a, 0x1e, 0xa6,
+			0x99, 0x23, 0x5a, 0xf6, 0x24, 0x6d, 0xb7, 0xd8,
+			0xd9, 0x12, 0x84, 0x5e, 0x3e, 0x05, 0xc4, 0xe4,
+			0x0b, 0x52, 0x7a, 0x0f, 0xd0, 0x38, 0x69, 0x31,
+			0x02, 0xc2, 0xfb, 0x06, 0x8f, 0xbb, 0x1b, 0xb7,
+			0x96, 0x21, 0xdf, 0x45, 0xdc, 0x8c, 0x1a, 0x16,
+			0xb5, 0xa2, 0x07, 0x68, 0xdb, 0x09, 0xf3, 0xe8,
+			0x78, 0x89, 0x0f, 0x6c, 0x1a, 0x0b, 0x5e, 0xb5,
+			0xb8, 0x07, 0xb0, 0x14, 0x2a, 0x50, 0xae, 0x4c,
+			0xe4, 0x8b, 0xbc, 0x5f, 0x52, 0x4d, 0x1f, 0xe8,
+			0x77, 0xc4, 0x8c, 0x46, 0xe8, 0x81, 0x3b, 0x6a,
+			0x60, 0xcc, 0x82, 0xcd, 0x04, 0x22, 0x38, 0x77,
+			0x3f, 0x95, 0x95, 0x55, 0x55, 0xa9, 0x4a, 0x65,
+			0x8d, 0x92, 0x8b, 0x61, 0xbc, 0xae, 0xe0, 0x16,
+			0x49, 0x8c, 0x08, 0x4f, 0xb0, 0x70, 0x76, 0xcc,
+			0xec, 0xee, 0x4a, 0x5e, 0x4b, 0x2b, 0x53, 0x03,
+			0xc3, 0x67, 0xf6, 0x4f, 0x2f, 0xd3, 0x8c, 0x18,
+			0xf0, 0x74, 0x26, 0xd7, 0x57, 0xef, 0x39, 0x6f,
+			0x13, 0x07, 0x1c, 0xfd, 0x98, 0x97, 0x61, 0x08,
+			0xbc, 0x24, 0xd3, 0xd6, 0x43, 0x2e, 0x6b, 0x06,
+			0x7a, 0x27, 0x2a, 0x94, 0xfc, 0x21, 0x83, 0xc6,
+			0xd6, 0xe6, 0x52, 0xd1, 0x62, 0x48, 0x0e, 0x93,
+			0x06, 0x08, 0xb6, 0x41, 0x4c, 0x76, 0x78, 0x98,
+			0x2b, 0xb8, 0x68, 0x81, 0x36, 0xb6, 0x12, 0x3c,
+			0x47, 0xae, 0x54, 0xb9, 0xa1, 0xca, 0x9e, 0x6e,
+			0x54, 0x64, 0x91, 0x4a, 0x4f, 0xd8, 0xee, 0xb4,
+			0xdb, 0x80, 0xc4, 0xa7, 0x49, 0x62, 0xdf, 0xb3,
+			0xc4, 0xd7, 0xf4, 0xbf, 0xab, 0xe8, 0xcb, 0xb9,
+			0xc4, 0x70, 0xf2, 0xbf, 0x77, 0xac, 0xe7, 0xdb,
+			0x09, 0xd7, 0x9e, 0x1f, 0x00, 0x5a, 0x2b, 0xb1,
+			0xfb, 0x89, 0x2e, 0x14, 0xe1, 0x2a, 0xf2, 0xae,
+			0x11, 0x44, 0xa6, 0xa2, 0x31, 0x2e, 0x60, 0xb2,
+			0x3e, 0xb0, 0x10, 0x2f, 0x18, 0x17, 0xff, 0x32,
+			0xf1, 0xc9, 0x21, 0xb8, 0xf3, 0x50, 0xf3, 0x3d,
+			0xb0, 0xf3, 0xeb, 0xd1, 0x10, 0x21, 0x53, 0x9a,
+			0xbd, 0xf2, 0x18, 0x4d, 0xfb, 0x1e, 0xab, 0x2e,
+			0xb6, 0x9b, 0xf6, 0x7c, 0xd4, 0xfc, 0x1e, 0xbe,
+			0xee, 0xae, 0x57, 0xee, 0xde, 0xd2, 0xb1, 0x06,
+			0x3c, 0xcc, 0x36, 0x10, 0xc1, 0xc9, 0xc1, 0x47,
+			0x15, 0x4f, 0x1b, 0x10, 0x0f, 0xaf, 0xc3, 0x7b,
+			0x25, 0x2d, 0xe5, 0x9a, 0x6e, 0xef, 0xf1, 0xa9,
+			0x25, 0xe6, 0xf3, 0x28, 0x82, 0x73, 0x4b, 0x44,
+			0x56, 0x30, 0x9b, 0xe0, 0xfb, 0xfc, 0x5c, 0x84,
+			0xd8, 0xe7, 0xf3, 0x0d, 0x43, 0x8b, 0xdc, 0xae,
+			0x97, 0xeb, 0x45, 0x9f, 0x0e, 0xb7, 0x58, 0x65,
+			0x86, 0x9e, 0x24, 0x2f, 0xd7, 0x4f, 0x21, 0x9c,
+			0x67, 0x76, 0x91, 0x27, 0xed, 0x9f, 0xa3, 0xa6,
+			0x15, 0x5e, 0xa8, 0x13, 0x58, 0x53, 0x1c, 0x7c,
+			0x24, 0x85, 0xbf, 0xea, 0xba, 0x01, 0xd5, 0xf3,
+			0x29, 0xa4, 0xd0, 0x34, 0x04, 0x67, 0xf8, 0xb2,
+			0xd0, 0x2c, 0x08, 0xd3, 0xb4, 0x6b, 0x42, 0xec,
+			0xd0, 0x1e, 0x2e, 0x02, 0xcc, 0xeb, 0xa6, 0x9f,
+			0x2b, 0x3a, 0x1b, 0x45, 0x83, 0x53, 0xeb, 0xb1,
+			0x8f, 0x51, 0x3d, 0xee, 0xf3, 0x5f, 0x05, 0x10,
+			0xfa, 0x15, 0x15, 0x3f, 0x0a, 0x7b, 0xfe, 0xf4,
+			0x11, 0x72, 0xc1, 0xe9, 0x99, 0x15, 0x25, 0x74,
+			0xf9, 0xe0, 0x14, 0xc6, 0x2b, 0x49, 0x4b, 0x1b,
+			0xa2, 0x42, 0x75, 0xd6, 0x0f, 0x3e, 0xc6, 0x74,
+			0xbb, 0x44, 0x1f, 0xc4, 0x09, 0x8b, 0x91, 0x9e,
+			0x55, 0x5d, 0x4b, 0xaa, 0xe8, 0x16, 0x33, 0x6d,
+			0x3d, 0xe5, 0x5d, 0x94, 0xb7, 0x66, 0x5a, 0xf6,
+			0x4e, 0x5b, 0x04, 0x16, 0x7b, 0xd3, 0x31, 0x3d,
+			0x7a, 0x98, 0xb6, 0x93, 0x69, 0x40, 0x42, 0x1c,
+			0xcd, 0x07, 0xc9, 0x80, 0xb0, 0xd4, 0xce, 0x70,
+			0x98, 0x19, 0xad, 0x3d, 0xd1, 0x7b, 0xad, 0x8d,
+			0x01, 0x4b, 0x26, 0x12, 0x5b, 0xbc, 0x83, 0xbf,
+			0xc5, 0x4d, 0xf1, 0xf7, 0xaf, 0xaf, 0xdf, 0xc7,
+			0x3c, 0x8a, 0x6c, 0x65, 0xd0, 0x0c, 0x2e, 0x6b,
+			0x77, 0xd2, 0xb7, 0x2e, 0xd4, 0xe5, 0xf6, 0x90,
+			0xd3, 0x3b, 0xd4, 0xee, 0xe0, 0x10, 0x65, 0x81,
+			0x28, 0x24, 0x77, 0xd6, 0x87, 0x94, 0x87, 0x80,
+			0xe0, 0xf1, 0x43, 0x7b, 0xc0, 0x9e, 0xa9, 0x74,
+			0xfe, 0xa2, 0xf2, 0x85, 0x47, 0x64, 0xe1, 0x31,
+			0xe0, 0x5a, 0x99, 0x67, 0x77, 0x82, 0x4e, 0x01,
+			0x56, 0xac, 0x28, 0x6d, 0xb8, 0x92, 0x57, 0x7b,
+			0x86, 0xb2, 0x78, 0x2d, 0x98, 0x9b, 0x8f, 0x59,
+			0xfa, 0xe2, 0x46, 0x91, 0xfe, 0x64, 0xa3, 0x2e,
+			0xa4, 0x4c, 0xca, 0xdc, 0x29, 0xb2, 0xb7, 0x4a,
+			0x91, 0x95, 0x08, 0x7b, 0x7e, 0x45, 0x7a, 0x37,
+			0xc7, 0x67, 0xcf, 0x59, 0x63, 0x78, 0xa1, 0x85,
+			0x35, 0xa6, 0x35, 0x15, 0x91, 0x9b, 0x31, 0x3f,
+			0x66, 0x23, 0x01, 0x29, 0x9b, 0x04, 0x54, 0x01,
+			0x5c, 0x1f, 0x47, 0x51, 0x90, 0x6c, 0x16, 0x56,
+			0xe9, 0x76, 0x4e, 0x89, 0x91, 0x13, 0xa0, 0x2b,
+			0xcf, 0x33, 0x95, 0xac, 0x83, 0x42, 0x16, 0x1c,
+			0xc5, 0xda, 0x1b, 0xe2, 0x60, 0xc6, 0x31, 0x97,
+			0x28, 0x2a, 0x40, 0x92, 0x02, 0x65, 0x06, 0x3c,
+			0xe9, 0x06, 0x3a, 0xa6, 0xc2, 0x3e, 0x6b, 0x22,
+			0x4b, 0x99, 0x04, 0x9d, 0x01, 0x5a, 0x88, 0x25,
+			0x6f, 0xa5, 0x9a, 0xc4, 0x86, 0x5e, 0x37, 0xcd,
+			0x86, 0x0e, 0x19, 0xb6, 0xcb, 0xa8, 0xf1, 0x46,
+			0xf9, 0x0d, 0x8c, 0x76, 0x74, 0xf6, 0x71, 0x93,
+			0x5b, 0x2a, 0xec, 0xe2, 0xc5, 0x05, 0x42, 0x2b,
+			0x67, 0xb7, 0x8d, 0xb6, 0x9e, 0x14, 0x09, 0xd7,
+			0x1d, 0x91, 0xa6, 0x03, 0x90, 0x0e, 0x68, 0xcc,
+			0xf2, 0x35, 0x31, 0xed, 0x0b, 0xc1, 0xaf, 0x41,
+			0x7a, 0x6e, 0xc9, 0x9b, 0xa0, 0x24, 0x6d, 0xe7,
+			0xbe, 0x89, 0x0f, 0x52, 0xbc, 0xe6, 0x4d, 0xa6,
+			0x73, 0xc5, 0x54, 0x60, 0xd1, 0xbe, 0xf1, 0x61,
+			0x03, 0x73, 0x46, 0x71, 0x3e, 0x18, 0x16, 0x07,
+			0xd0, 0x01, 0xed, 0x53, 0xd8, 0x95, 0x4e, 0xf9,
+			0x23, 0xae, 0xfc, 0xd7, 0xd3, 0x7d, 0x7e, 0xf2,
+			0x99, 0x31, 0x99, 0xda, 0xe8, 0xb8, 0x19, 0x12,
+			0xf4, 0x48, 0x5f, 0xfd, 0x90, 0x29, 0x82, 0x1d,
+			0x48, 0xab, 0xe6, 0x05, 0xfa, 0x94, 0x45, 0x04,
+			0x4c, 0x4d, 0x44, 0xde, 0x51, 0xc4, 0xf7, 0x79,
+			0x4b, 0xe1, 0xd5, 0xd1, 0x86, 0x1a, 0xc3, 0x53,
+			0xfa, 0xe7, 0x1b, 0x0f, 0x3e, 0x4a, 0x26, 0x09,
+			0xa2, 0xa0, 0x8d, 0xc7, 0x2b, 0x20, 0xa1, 0x16,
+			0x7b, 0xd3, 0xa5, 0xb9, 0xd9, 0x7a, 0x21, 0x12,
+			0x36, 0xf3, 0xc6, 0xa4, 0x7f, 0x4a, 0x92, 0xf0,
+			0xdb, 0xdc, 0x4c, 0x81, 0xf1, 0x2f, 0x41, 0xb3,
+			0xed, 0x0c, 0x08, 0xf8, 0x5d, 0x23, 0x8c, 0x41,
+			0x7a, 0xf1, 0x51, 0xb7, 0x72, 0x81, 0xa3, 0x0b,
+			0xf8, 0xab, 0x05, 0x44, 0xb2, 0xb1, 0x01, 0x64,
+			0xdd, 0x9f, 0x6b, 0x27, 0x55, 0xd2, 0xa6, 0x56,
+			0xcd, 0x76, 0xf0, 0x77, 0x05, 0x4d, 0x08, 0xc4,
+			0x46, 0xc4, 0x83, 0xa3, 0x27, 0x24, 0x79, 0x8d,
+			0xd9, 0x3f, 0x5b, 0xd3, 0xaa, 0x7a, 0x6e, 0x04,
+			0xb2, 0x8c, 0xe7, 0xe6, 0xce, 0xa8, 0x55, 0xc9,
+			0x12, 0x7e, 0xd1, 0x78, 0x2e, 0xed, 0xbf, 0x04,
+			0x1b, 0x73, 0x21, 0x66, 0xa7, 0xf4, 0x07, 0xe1,
+			0x74, 0x2e, 0x22, 0x00, 0xd5, 0x8e, 0x84, 0x89,
+			0x60, 0x60, 0x4f, 0xda, 0xfb, 0x9a, 0xda, 0xd8,
+			0x45, 0x41, 0x95, 0x77, 0x22, 0x89, 0x10, 0x9b,
+			0xb0, 0x64, 0xc3, 0x0a, 0x1c, 0x61, 0x4a, 0xdb,
+			0x84, 0xca, 0x19, 0x47, 0x9e, 0x82, 0xbe, 0x56,
+			0x22, 0xe3, 0xf5, 0xc7, 0x91, 0x6e, 0x67, 0x26,
+			0x04, 0xa4, 0x31, 0x5b, 0xf7, 0x2f, 0x6a, 0x01,
+			0xad, 0xd4, 0x7c, 0x4e, 0x74, 0xa6, 0x87, 0x23,
+			0x31, 0x37, 0x08, 0xd2, 0x2c, 0x0d, 0x94, 0x1c,
+			0x96, 0x52, 0xe0, 0x56, 0x23, 0x23, 0x31, 0x59,
+			0x8c, 0xaf, 0x48, 0xe6, 0x07, 0x8e, 0x0d, 0x6c,
+			0x09, 0x0b, 0xf2, 0xad, 0x33, 0x14, 0xcd, 0x91,
+			0xe7, 0x48, 0xc9, 0x45, 0xcf, 0xad, 0xac, 0xe1,
+			0x0a, 0x5b, 0x81, 0x7a, 0xc9, 0x9a, 0xb5, 0x98,
+			0x3d, 0xad, 0xb2, 0x1c, 0x79, 0xa9, 0x5f, 0xbb,
+			0x2b, 0x4e, 0x53, 0x2f, 0xff, 0x8f, 0x9e, 0xb1,
+			0x46, 0x07, 0x1c, 0x48, 0x16, 0xb6, 0xdd, 0x7b,
+			0x6a, 0x32, 0xb5, 0x46, 0xfe, 0xb8, 0x51, 0x3f,
+			0xfc, 0xfc, 0x24, 0x1a, 0xe8, 0x29, 0x05, 0x81,
+			0x31, 0xc2, 0x2a, 0x09, 0x1d, 0xfb, 0xc9, 0x7c,
+			0x6c, 0x23, 0x18, 0xa5, 0x2f, 0x69, 0xca, 0xfb,
+			0xd6, 0xb0, 0x29, 0xd3, 0xe6, 0x18, 0xb6, 0x2b,
+			0x38, 0x23, 0x15, 0x75, 0xc6, 0x37, 0x2a, 0xa4,
+			0x24, 0x38, 0x84, 0x54, 0xbc, 0xa4, 0x29, 0x4d,
+			0x2a, 0x04, 0x45, 0x05, 0xc2, 0x10, 0x03, 0x69,
+			0xc7, 0x27, 0x5c, 0x49, 0xcf, 0xc0, 0x7d, 0xbb,
+			0x09, 0xa9, 0x0b, 0x6e, 0xea, 0x80, 0xb2, 0x0e,
+			0x60, 0x98, 0x1f, 0xf3, 0x27, 0x8c, 0x17, 0x23,
+			0x50, 0x98, 0xae, 0x1a, 0x7c, 0xbf, 0x48, 0xdd,
+			0x8b, 0x77, 0x62, 0x23, 0xcd, 0x34, 0x17, 0x39,
+			0x96, 0x23, 0x47, 0x08, 0x12, 0xb7, 0x8e, 0x74,
+			0xce, 0x4f, 0xf9, 0x26, 0x25, 0x57, 0xa4, 0x28,
+			0x36, 0x8e, 0xac, 0x98, 0x13, 0x0f, 0xe3, 0x5f,
+			0x24, 0x15, 0x9f, 0xee, 0xb5, 0xfa, 0x8e, 0x39,
+			0xcc, 0xaf, 0x14, 0x04, 0x51, 0xd0, 0x1f, 0xea,
+			0x2f, 0xd3, 0xc8, 0xe4, 0xd4, 0xe9, 0xfe, 0x68,
+			0xe6, 0xe5, 0x96, 0x78, 0x95, 0xaa, 0x9a, 0x62,
+			0x11, 0x76, 0x06, 0x1f, 0x07, 0xec, 0xdb, 0xe2,
+			0x89, 0x73, 0x3c, 0xe7, 0xc6, 0xda, 0x7d, 0x79,
+			0x22, 0x58, 0x65, 0x8a, 0xaf, 0xbf, 0xd7, 0xb2,
+			0x3e, 0x8b, 0x08, 0x34, 0x8b, 0x0e, 0x85, 0x58,
+			0x0b, 0xb1, 0x05, 0x7a, 0x11, 0x41, 0x55, 0x75,
+			0x6c, 0x1c, 0xb7, 0x59, 0x7c, 0x80, 0x02, 0xae,
+			0xa8, 0xea, 0xda, 0xe2, 0xfd, 0x60, 0xc5, 0x98,
+			0xc5, 0x53, 0xb4, 0xf6, 0x9f, 0x21, 0x7a, 0x29,
+			0xe0, 0x48, 0x59, 0xed, 0xc9, 0x96, 0x1e, 0xbe,
+			0x59, 0xeb, 0x7e, 0x1f, 0x11, 0x23, 0x2a, 0x05,
+			0x09, 0x9d, 0x9d, 0x6f, 0xef, 0xa1, 0xf1, 0xd1,
+			0xce, 0x3b, 0x86, 0xd3, 0xa7, 0x46, 0xae, 0x35,
+			0x1d, 0x88, 0x7d, 0x69, 0x1a, 0x75, 0xc3, 0x13,
+			0x4c, 0x39, 0xed, 0x89, 0x56, 0x74, 0xc8, 0x0a,
+			0xd6, 0x5d, 0x9d, 0x7b, 0x65, 0x85, 0x95, 0xa2,
+			0x4a, 0xdc, 0x6b, 0xb1, 0x44, 0xda, 0x05, 0x1b,
+			0x7e, 0x61, 0x28, 0x36, 0x4f, 0xcd, 0xc4, 0x00,
+			0x30, 0x8c, 0x0c, 0xb6, 0x36, 0xfb, 0x5d, 0xf2,
+			0x1b, 0x3e, 0x88, 0x2c, 0x10, 0xaf, 0xd0, 0x07,
+			0x85, 0xd1, 0xd7, 0x81, 0xd0, 0xb7, 0xb4, 0xf1,
+			0xe4, 0x3c, 0xb1, 0xcf, 0x13, 0x58, 0xc6, 0x94,
+			0x10, 0xc2, 0x66, 0xd9, 0xda, 0x4c, 0x88, 0x56,
+			0xf5, 0xe6, 0x1b, 0x6a, 0xb7, 0x0a, 0xb6, 0xec,
+			0x09, 0x2e, 0x12, 0x7d, 0x96, 0x7c, 0x75, 0x3b,
+			0x7c, 0x71, 0x92, 0xa2, 0xa1, 0xab, 0x10, 0xc7,
+			0x2d, 0x18, 0xfb, 0x52, 0x8a, 0x87, 0x7e, 0x76,
+			0xc2, 0xe0, 0x4f, 0x24, 0x5a, 0xd8, 0x04, 0xf5,
+			0xcb, 0xf1, 0x42, 0x4b, 0xd8, 0xb0, 0x98, 0x18,
+			0x48, 0xe7, 0x44, 0xba, 0xb7, 0x0d, 0xf6, 0xb7,
+			0xd0, 0x1a, 0x67, 0x82, 0xfc, 0xa0, 0x70, 0x5e,
+			0x13, 0xce, 0xf5, 0x13, 0xf9, 0x66, 0x59, 0xd8,
+			0xa9, 0xfa, 0x40, 0x16, 0xb1, 0xef, 0x09, 0x18,
+			0xa6, 0xa6, 0xee, 0xda, 0x2d, 0xfa, 0x57, 0x3b,
+			0xda, 0x92, 0x1c, 0xd7, 0x01, 0xa2, 0xca, 0x3d,
+			0xe9, 0x06, 0xa6, 0x0b, 0xd3, 0x52, 0xd3, 0x8c,
+			0xc8, 0xff, 0x0a, 0x92, 0x56, 0x41, 0x98, 0xd1,
+			0xaa, 0xc9, 0x6f, 0x96, 0xe8, 0xec, 0x68, 0xc0,
+			0x91, 0x7c, 0x0b, 0xd5, 0xc1, 0x25, 0x45, 0x2b,
+			0x84, 0x28, 0xa4, 0x46, 0x78, 0x58, 0xa1, 0xbf,
+			0x52, 0xd0, 0x48, 0xc4, 0xfc, 0x37, 0xf2, 0x41,
+			0x23, 0x14, 0x37, 0x32, 0x01, 0x2e, 0xbc, 0xe1,
+			0xa1, 0x30, 0x13, 0x26, 0x40, 0x23, 0x80, 0x7c,
+			0x92, 0x80, 0x06, 0x83, 0x6e, 0xb7, 0x25, 0x67,
+			0x41, 0x01, 0x34, 0x4a, 0x8e, 0x8a, 0xb0, 0x81,
+			0x47, 0xbb, 0x52, 0x61, 0x04, 0x6a, 0x8f, 0x1b,
+			0xac, 0x84, 0xfd, 0x59, 0x48, 0xfe, 0xdf, 0x49,
+			0x96, 0xfb, 0x21, 0x4b, 0x5d, 0xf4, 0x5e, 0x40,
+			0x85, 0x1f, 0x23, 0x05, 0x90, 0x69, 0xdc, 0x57,
+			0x78, 0x65, 0x7f, 0x1d, 0x3c, 0xfa, 0x8e, 0x59,
+			0xde, 0xa4, 0xf9, 0x38, 0xc5, 0x5f, 0xa1, 0x8e,
+			0xff, 0x58, 0x2e, 0x29, 0x59, 0x4a, 0x47, 0x52,
+			0xa7, 0xaa, 0xda, 0xeb, 0xdd, 0x76, 0x0a, 0x0e,
+			},
+		.msg_len = 64,
+		.msg = (const u8[64]){
+			0x67, 0x6f, 0x8e, 0xb2, 0xcd, 0xfd, 0x17, 0xfb,
+			0xdb, 0xbc, 0x03, 0xa0, 0xe9, 0xfd, 0x3e, 0x7a,
+			0x94, 0xea, 0x50, 0xd5, 0x1c, 0xfb, 0xec, 0x7a,
+			0x3e, 0xe0, 0xde, 0x78, 0x58, 0xe8, 0x31, 0x8a,
+			0x8a, 0x07, 0x6f, 0xd6, 0xb0, 0xad, 0x10, 0xaa,
+			0xac, 0x1d, 0x6d, 0xcc, 0xea, 0x45, 0xba, 0x40,
+			0xb4, 0x2c, 0x4d, 0x31, 0x85, 0x86, 0xb7, 0x4d,
+			0x64, 0xa1, 0xa6, 0xef, 0x18, 0x77, 0xd0, 0xf0,
+			},
+		.sig_len = DILITHIUM65_CRYPTO_BYTES,
+		.sig = (const u8[DILITHIUM65_CRYPTO_BYTES]){
+			0x0c, 0x79, 0x06, 0x52, 0x49, 0x9c, 0x28, 0x59,
+			0xcd, 0x66, 0x15, 0x4e, 0xe9, 0x6d, 0x6d, 0x25,
+			0x57, 0x32, 0x31, 0x59, 0xa7, 0xf8, 0xe1, 0x6c,
+			0xbb, 0xa0, 0xdf, 0x01, 0x3f, 0xfa, 0xe0, 0x9a,
+			0xa9, 0x28, 0x0e, 0x83, 0x13, 0x91, 0x5f, 0x30,
+			0xa9, 0x71, 0xd5, 0x7e, 0x77, 0xf1, 0x7e, 0xe4,
+			0xb1, 0x30, 0x14, 0x8d, 0x5b, 0x0b, 0x59, 0xe0,
+			0x17, 0xe3, 0x97, 0xa6, 0x60, 0x9c, 0x66, 0xf4,
+			0xdb, 0x20, 0xf1, 0xc7, 0x1b, 0x64, 0x02, 0x6f,
+			0x4e, 0x6b, 0xcc, 0xa6, 0xf7, 0x99, 0x61, 0xd2,
+			0x2f, 0x70, 0x4b, 0x24, 0x3e, 0x35, 0x04, 0xe6,
+			0xf1, 0xf3, 0x97, 0x86, 0xb3, 0xe8, 0x2c, 0x00,
+			0xaf, 0xb6, 0x11, 0xb0, 0x6c, 0x2e, 0x56, 0x10,
+			0xf0, 0x30, 0x94, 0x1d, 0x1a, 0x4f, 0xd3, 0xed,
+			0x94, 0x0e, 0x9c, 0xd8, 0xeb, 0xd3, 0x26, 0x5c,
+			0x77, 0x51, 0x2e, 0x47, 0xc3, 0xcf, 0x7e, 0x94,
+			0xcd, 0x47, 0x48, 0x90, 0xee, 0x51, 0x4d, 0xf1,
+			0xce, 0xc5, 0xe2, 0x41, 0x61, 0xbf, 0x8a, 0xb8,
+			0x47, 0x2d, 0x0f, 0xff, 0x9b, 0x1b, 0x1b, 0xaf,
+			0xc0, 0x54, 0x1e, 0x41, 0xce, 0x28, 0xc7, 0x0a,
+			0xe6, 0x0a, 0xa2, 0x1a, 0x86, 0xe8, 0x6c, 0x6d,
+			0xec, 0xb6, 0xf8, 0x5f, 0x52, 0x5a, 0x14, 0xc6,
+			0x96, 0xe3, 0xc0, 0xe7, 0x41, 0x37, 0x02, 0x3d,
+			0x38, 0xe8, 0x16, 0x09, 0x88, 0xe2, 0xa9, 0x28,
+			0x28, 0x68, 0x14, 0x07, 0xd9, 0xb6, 0x36, 0xce,
+			0x2a, 0xc1, 0xf1, 0xc4, 0x08, 0x54, 0x38, 0xc0,
+			0x77, 0x9f, 0x7c, 0x63, 0xde, 0x3f, 0x0c, 0xbc,
+			0xd2, 0xef, 0xeb, 0xf4, 0x9e, 0x8e, 0xb0, 0x9c,
+			0x5a, 0xa1, 0xcb, 0x62, 0x4c, 0x0e, 0x1c, 0xe5,
+			0xdb, 0x23, 0x85, 0xde, 0xf8, 0x21, 0x1e, 0x2d,
+			0xcc, 0x9f, 0x1f, 0xb3, 0xe7, 0x27, 0x8a, 0x5a,
+			0xfc, 0x02, 0xe2, 0x72, 0x71, 0x30, 0x01, 0x71,
+			0xd0, 0x3e, 0x90, 0xaf, 0x5d, 0x9d, 0x38, 0xa8,
+			0xc4, 0xfc, 0xa1, 0x3a, 0xfb, 0xf7, 0x69, 0x26,
+			0x5c, 0x13, 0xb4, 0x2c, 0x5b, 0x31, 0xcd, 0x8c,
+			0x26, 0x99, 0xed, 0x62, 0x5b, 0x39, 0x8e, 0x59,
+			0xb1, 0xe5, 0xf5, 0xdc, 0x36, 0xe8, 0x87, 0x0a,
+			0xe4, 0x82, 0x60, 0x48, 0x70, 0xb1, 0x08, 0x68,
+			0xf4, 0xeb, 0x86, 0x28, 0x45, 0xfc, 0x5a, 0x60,
+			0x3f, 0x5e, 0x82, 0xc0, 0x3b, 0x18, 0xd2, 0x0e,
+			0xa8, 0xf2, 0xb0, 0x07, 0xf4, 0xbd, 0xab, 0x23,
+			0x0c, 0x4e, 0xe0, 0xae, 0x38, 0xe6, 0x93, 0x4f,
+			0x58, 0xcd, 0x0b, 0x67, 0xe5, 0xb3, 0xdd, 0x81,
+			0x33, 0x9e, 0xdc, 0xd5, 0xc0, 0x1a, 0xde, 0x22,
+			0x02, 0xf9, 0x3e, 0xd6, 0x53, 0x39, 0x79, 0xc8,
+			0x9f, 0x8a, 0xc5, 0xc9, 0xb0, 0x2a, 0xcb, 0x73,
+			0x86, 0xd1, 0xc1, 0xa7, 0x90, 0xe9, 0xc2, 0x37,
+			0x3f, 0x9f, 0x5a, 0x09, 0xd5, 0x99, 0x4b, 0xd6,
+			0x37, 0x3b, 0xa5, 0x78, 0x97, 0xaf, 0xa9, 0x37,
+			0xe4, 0x3a, 0x64, 0x46, 0x6b, 0x6b, 0xd4, 0x11,
+			0x2e, 0x24, 0x98, 0xd6, 0x15, 0x36, 0x77, 0x64,
+			0x27, 0x84, 0x67, 0x84, 0x12, 0xa6, 0x93, 0x0d,
+			0x53, 0x05, 0xff, 0x52, 0x54, 0x4b, 0x22, 0xab,
+			0x28, 0xcd, 0x37, 0x05, 0x0b, 0x65, 0x97, 0xd0,
+			0x74, 0xaa, 0xa6, 0x16, 0x5c, 0x89, 0x55, 0x08,
+			0xbd, 0xf4, 0x77, 0x68, 0xab, 0x5c, 0x7d, 0xc4,
+			0x58, 0x46, 0x15, 0x6e, 0x7f, 0x94, 0xf2, 0xd9,
+			0x4f, 0xe9, 0x75, 0x83, 0x01, 0xca, 0xc2, 0x8d,
+			0x30, 0x63, 0x3a, 0xda, 0x27, 0x16, 0x3b, 0x9d,
+			0x45, 0x04, 0x64, 0xe0, 0x76, 0xec, 0x6e, 0x4f,
+			0x76, 0x88, 0x21, 0xe3, 0x73, 0xa8, 0x0a, 0xe3,
+			0x72, 0xd0, 0x73, 0x41, 0xba, 0x06, 0x79, 0x90,
+			0xf5, 0x5c, 0xb6, 0x23, 0x57, 0xca, 0x62, 0xca,
+			0x0a, 0xe9, 0xd4, 0x20, 0x16, 0xe7, 0xc3, 0x2c,
+			0x92, 0x4c, 0x3a, 0x14, 0xe3, 0x9a, 0x67, 0x80,
+			0x14, 0x41, 0x80, 0x1b, 0xe2, 0x8b, 0x00, 0xa0,
+			0xb6, 0xc3, 0x78, 0x58, 0xf0, 0x29, 0xa9, 0x0f,
+			0x2e, 0x1b, 0x17, 0x3b, 0x07, 0x70, 0xc0, 0x41,
+			0x39, 0x06, 0x67, 0x91, 0x60, 0x3a, 0x43, 0xc9,
+			0x1e, 0x1d, 0x39, 0xe8, 0xde, 0xc1, 0x62, 0x58,
+			0xf6, 0x63, 0xf5, 0xed, 0x83, 0x5e, 0x15, 0xf1,
+			0x41, 0xcf, 0x8c, 0x71, 0x64, 0xf6, 0x76, 0xbb,
+			0xb6, 0xb4, 0x8e, 0x2a, 0x95, 0x5c, 0x0b, 0xe4,
+			0x92, 0x79, 0x56, 0x69, 0xd9, 0x2b, 0x71, 0x61,
+			0xa7, 0x1b, 0x48, 0x07, 0x2d, 0xb6, 0x3a, 0x0b,
+			0xf9, 0xc2, 0xc1, 0x6f, 0x69, 0x5c, 0x47, 0xa8,
+			0x99, 0x20, 0x05, 0xd5, 0x54, 0x32, 0xdb, 0xbc,
+			0x88, 0xb1, 0xa3, 0x10, 0x85, 0xf7, 0x98, 0xbd,
+			0x89, 0xa9, 0xf0, 0x6c, 0x7e, 0xe7, 0xda, 0x56,
+			0xc1, 0x61, 0x50, 0x79, 0x79, 0x71, 0xb5, 0x83,
+			0xd5, 0x2a, 0xd2, 0xd6, 0x41, 0x31, 0x1e, 0x8a,
+			0x1f, 0x3d, 0xad, 0xf9, 0xb8, 0x5e, 0x7a, 0x80,
+			0xc7, 0x9d, 0x07, 0x14, 0xe5, 0xde, 0x28, 0x39,
+			0x17, 0x2c, 0xed, 0x2b, 0x5f, 0xe5, 0x3d, 0x3e,
+			0x54, 0x4f, 0x0d, 0x9c, 0xa1, 0x83, 0xd7, 0xaf,
+			0x7a, 0x39, 0xf1, 0xaa, 0xa7, 0x5d, 0xd9, 0x2a,
+			0x7c, 0xbe, 0x4f, 0xb4, 0xb8, 0x85, 0xcf, 0xbf,
+			0x0e, 0x42, 0x90, 0x90, 0x48, 0xc5, 0x96, 0x26,
+			0xbb, 0x7e, 0x94, 0x90, 0x25, 0x3b, 0x25, 0xb9,
+			0xa9, 0xa1, 0xed, 0x18, 0xfa, 0x9a, 0x46, 0xe4,
+			0xca, 0x3d, 0x27, 0xc4, 0x7e, 0x9f, 0x3e, 0xdc,
+			0x6f, 0x5f, 0x71, 0x6e, 0xc0, 0x41, 0x55, 0x38,
+			0x9c, 0x9c, 0x28, 0x85, 0xe3, 0xf0, 0xc4, 0xea,
+			0xc7, 0x7f, 0x7c, 0x66, 0x22, 0x89, 0xea, 0xc3,
+			0xfa, 0x5a, 0x09, 0x70, 0x1b, 0xc5, 0x30, 0xd5,
+			0x71, 0x08, 0x5b, 0x3f, 0x60, 0xa2, 0x75, 0x80,
+			0x84, 0x70, 0x14, 0xde, 0x9b, 0x46, 0xbd, 0x53,
+			0x98, 0x67, 0xcc, 0x55, 0x4b, 0xed, 0x18, 0x5f,
+			0xd6, 0x07, 0x17, 0xcb, 0xcf, 0xde, 0x2a, 0x37,
+			0x37, 0x07, 0x5b, 0xa9, 0x88, 0x0c, 0xa2, 0xb9,
+			0xf3, 0xe5, 0x3a, 0x7c, 0xa3, 0x09, 0xeb, 0xf6,
+			0xab, 0x42, 0x57, 0xf9, 0xc4, 0xab, 0x0a, 0x97,
+			0xea, 0x96, 0x4c, 0x58, 0xe9, 0xe4, 0x8f, 0xcc,
+			0x35, 0x7f, 0x01, 0x0f, 0x5c, 0x7e, 0xaa, 0x0a,
+			0x0c, 0xf2, 0x3c, 0x3e, 0x5c, 0x4f, 0xb6, 0x1f,
+			0x08, 0xd7, 0x0a, 0x68, 0xef, 0xf4, 0x95, 0xa5,
+			0x59, 0xd6, 0x41, 0xee, 0x31, 0xab, 0x28, 0xd1,
+			0x3a, 0xc7, 0xc4, 0xb1, 0x5f, 0xf6, 0x10, 0xef,
+			0x59, 0xda, 0x48, 0x7b, 0x9d, 0x50, 0x4b, 0xb9,
+			0xe0, 0x90, 0x9d, 0xf9, 0x2f, 0x4e, 0x55, 0xe8,
+			0x49, 0xfc, 0x40, 0xa5, 0x33, 0x86, 0xf8, 0x32,
+			0x16, 0x60, 0x83, 0x1c, 0x6b, 0x7f, 0xe4, 0xf1,
+			0xa1, 0x84, 0x1d, 0x21, 0xbb, 0xca, 0x2d, 0x1a,
+			0x3f, 0x7a, 0xd4, 0x8a, 0xcb, 0x7e, 0x3c, 0x3c,
+			0xe6, 0x86, 0x8d, 0x08, 0x2f, 0x71, 0x45, 0x46,
+			0xeb, 0xd6, 0x4e, 0xf5, 0xf8, 0x46, 0xf3, 0x25,
+			0x8e, 0x6b, 0x29, 0x92, 0xa4, 0x47, 0x46, 0xe2,
+			0x72, 0xf2, 0x22, 0x64, 0x9a, 0xd1, 0xd7, 0x83,
+			0x99, 0x44, 0x1f, 0xe6, 0x48, 0xd5, 0xfc, 0xc7,
+			0x7c, 0xb4, 0x3d, 0x3c, 0x21, 0x5d, 0x0a, 0xea,
+			0xec, 0x16, 0xf7, 0xb3, 0xef, 0x0f, 0x4a, 0xa6,
+			0x91, 0x4d, 0x7e, 0xb1, 0x01, 0x3b, 0xff, 0x94,
+			0xb8, 0xd5, 0x91, 0x39, 0x4b, 0x2b, 0x8b, 0x0b,
+			0x19, 0x94, 0x64, 0xd7, 0x27, 0x11, 0x71, 0xfc,
+			0xc3, 0x80, 0x97, 0x0e, 0x7a, 0x36, 0x31, 0xad,
+			0x43, 0x3a, 0x9f, 0xdb, 0x5b, 0x70, 0x29, 0x10,
+			0xf3, 0x1a, 0x7a, 0x6e, 0x13, 0x7d, 0x64, 0x36,
+			0x95, 0x15, 0x80, 0x15, 0xf5, 0x94, 0xbb, 0xc3,
+			0xfa, 0x72, 0x7e, 0x93, 0x68, 0xb2, 0x55, 0xaf,
+			0xff, 0x27, 0xeb, 0xa3, 0x0c, 0x27, 0x3a, 0xd1,
+			0x00, 0xff, 0x97, 0xe6, 0xff, 0x96, 0x29, 0xce,
+			0xd9, 0xba, 0x4d, 0xe4, 0xc2, 0x69, 0x81, 0x04,
+			0x6a, 0x0c, 0x89, 0xbf, 0x0e, 0x22, 0xb9, 0x0c,
+			0x77, 0x7e, 0xf5, 0x46, 0xc5, 0x53, 0xe3, 0x16,
+			0xc4, 0x0c, 0x72, 0xfa, 0x56, 0x9f, 0x2e, 0xf5,
+			0xab, 0xa0, 0xeb, 0xa1, 0x8f, 0xce, 0xf0, 0x6b,
+			0x10, 0xbd, 0x59, 0x7e, 0x54, 0x1c, 0x6e, 0xd3,
+			0x2f, 0x80, 0x4e, 0x9d, 0xf3, 0x47, 0xb2, 0xac,
+			0x42, 0x70, 0xac, 0xa8, 0x8d, 0x4c, 0xba, 0x8f,
+			0x1a, 0x07, 0x68, 0xbe, 0x3c, 0xd9, 0x74, 0x61,
+			0x74, 0x34, 0xcc, 0x7a, 0x63, 0x74, 0xd0, 0x09,
+			0x21, 0xed, 0x2a, 0x93, 0x0a, 0x74, 0xab, 0xac,
+			0xeb, 0xa9, 0xd9, 0xe6, 0x22, 0xa9, 0x1c, 0x24,
+			0x23, 0xd4, 0x87, 0x88, 0x78, 0x86, 0x35, 0xb2,
+			0xc6, 0x98, 0x2e, 0x0b, 0xa2, 0x07, 0xac, 0x87,
+			0x01, 0xfa, 0xa3, 0x54, 0xa6, 0x09, 0xb0, 0x2f,
+			0xe1, 0x57, 0x3d, 0x61, 0x6b, 0x2d, 0x82, 0x07,
+			0x2e, 0x6e, 0x14, 0x0d, 0x23, 0xa6, 0x14, 0x56,
+			0xc9, 0x3f, 0x65, 0x0d, 0x4f, 0x07, 0xac, 0x22,
+			0xd7, 0xc9, 0x29, 0xc6, 0x9b, 0x85, 0x55, 0x2f,
+			0xa4, 0x02, 0xfa, 0x2c, 0x3a, 0xea, 0xde, 0xb4,
+			0x89, 0x93, 0xc6, 0xa2, 0x4a, 0x13, 0x07, 0x57,
+			0x07, 0xb1, 0x6d, 0x7d, 0x80, 0x6c, 0x51, 0x9d,
+			0xec, 0x91, 0xdf, 0xbc, 0xcb, 0x3b, 0x17, 0xad,
+			0xcf, 0x64, 0x46, 0x6b, 0xf8, 0x79, 0x73, 0x05,
+			0x1e, 0x9e, 0x75, 0x6c, 0xa0, 0x3c, 0x64, 0x12,
+			0x1f, 0x3e, 0x09, 0x36, 0x2e, 0xe9, 0x4c, 0xc2,
+			0x29, 0x3c, 0xf2, 0x21, 0x24, 0x89, 0x98, 0x79,
+			0xa2, 0x12, 0x33, 0x22, 0x8f, 0x7f, 0x3a, 0x34,
+			0x1b, 0x3a, 0x69, 0x70, 0x40, 0x50, 0x02, 0x56,
+			0xb0, 0x68, 0xed, 0x4d, 0x36, 0x40, 0x87, 0xd5,
+			0x2d, 0xe9, 0x74, 0x41, 0x35, 0xd0, 0x56, 0x45,
+			0xb7, 0x59, 0xe1, 0x0c, 0x0b, 0x73, 0x9e, 0xb7,
+			0x59, 0x1a, 0xd0, 0xbe, 0x7e, 0xca, 0x24, 0x12,
+			0x94, 0x67, 0x5a, 0x28, 0xe0, 0x29, 0x50, 0x0e,
+			0xca, 0x1b, 0x8a, 0xcd, 0x56, 0xe8, 0xa1, 0xb9,
+			0x5c, 0xb0, 0x9a, 0x36, 0x0e, 0xf9, 0x5e, 0x4f,
+			0x6b, 0xde, 0x03, 0x18, 0x77, 0x41, 0x98, 0x0f,
+			0x6e, 0x03, 0x74, 0x8f, 0xd6, 0x38, 0x3c, 0xdc,
+			0xe9, 0xc0, 0x5c, 0x92, 0x48, 0xa8, 0x46, 0x29,
+			0x1c, 0xab, 0x76, 0x55, 0x21, 0x56, 0x10, 0x16,
+			0x14, 0x8b, 0x80, 0x3b, 0xc8, 0x15, 0xf0, 0xb5,
+			0x3b, 0xfe, 0xb5, 0x56, 0x8b, 0x45, 0x73, 0xf4,
+			0x23, 0xf0, 0x68, 0xdd, 0x4e, 0x27, 0xfc, 0xac,
+			0xf5, 0x81, 0x05, 0xd8, 0x89, 0x24, 0xba, 0xb9,
+			0xcf, 0xd6, 0x06, 0xb4, 0xfd, 0x12, 0x00, 0xca,
+			0x18, 0x44, 0xb4, 0x90, 0xcf, 0xc8, 0xb0, 0x6d,
+			0xcb, 0x72, 0xa3, 0xcd, 0x2e, 0x54, 0x56, 0x86,
+			0x4b, 0xd3, 0x3a, 0x96, 0x23, 0x4c, 0xd1, 0xf9,
+			0x1c, 0xa9, 0x9c, 0x37, 0xe4, 0x04, 0x04, 0x72,
+			0x7f, 0x71, 0xdf, 0xfd, 0x47, 0x86, 0x9b, 0x37,
+			0x69, 0x1c, 0xc9, 0xa9, 0x51, 0x13, 0xd7, 0xcf,
+			0xc5, 0xc3, 0x08, 0x9b, 0x3b, 0x94, 0xed, 0xfd,
+			0x06, 0x75, 0xb7, 0x39, 0x86, 0x98, 0x6d, 0x84,
+			0x38, 0x45, 0x39, 0xd1, 0x97, 0xef, 0x1f, 0x2e,
+			0x50, 0xb5, 0xf2, 0xe0, 0x72, 0xfd, 0x72, 0xd8,
+			0xf9, 0x83, 0xa6, 0x16, 0x83, 0xbf, 0x87, 0x12,
+			0x2c, 0x47, 0x82, 0xac, 0x59, 0x68, 0x61, 0xe6,
+			0xa1, 0x00, 0xc2, 0x5a, 0x4b, 0xf0, 0xac, 0x79,
+			0x33, 0x42, 0x8b, 0x9b, 0x81, 0x9e, 0x44, 0xd5,
+			0x21, 0x94, 0xf8, 0xbd, 0xb6, 0xe0, 0xe8, 0x80,
+			0x87, 0x4d, 0x76, 0xad, 0x08, 0x40, 0xb4, 0x4c,
+			0x8a, 0x32, 0x58, 0xed, 0x7c, 0x46, 0xb5, 0x54,
+			0xa8, 0x30, 0xf5, 0xe8, 0x98, 0xed, 0xf9, 0x36,
+			0x8c, 0x21, 0x9f, 0x1f, 0xc4, 0x50, 0x4c, 0xe8,
+			0x99, 0xfb, 0x15, 0xb5, 0x60, 0xaa, 0xde, 0xec,
+			0xfa, 0x1b, 0x40, 0xd5, 0x7f, 0xda, 0xed, 0xef,
+			0xc6, 0xe0, 0x1b, 0xf1, 0x80, 0x38, 0x00, 0xe7,
+			0x44, 0x2d, 0x89, 0xa0, 0x12, 0x9d, 0x26, 0xbb,
+			0x33, 0x6e, 0xdd, 0xd1, 0xb3, 0xb5, 0x8f, 0x39,
+			0x8e, 0xc3, 0x1f, 0x68, 0x37, 0xb6, 0x09, 0x55,
+			0x35, 0x3d, 0x60, 0xfa, 0x71, 0x1a, 0x3f, 0x77,
+			0xe5, 0xcc, 0xd0, 0x56, 0x9c, 0x73, 0x06, 0xcd,
+			0xf9, 0xab, 0x4e, 0xb8, 0x99, 0x2a, 0xdc, 0x5e,
+			0xe7, 0x83, 0xe5, 0x35, 0x34, 0x9f, 0xc8, 0x30,
+			0x37, 0xb4, 0x01, 0xc2, 0xb3, 0xc4, 0x1a, 0x7f,
+			0x01, 0x1f, 0x3a, 0xbf, 0x39, 0x83, 0xad, 0xc2,
+			0x9e, 0x4d, 0xae, 0x0f, 0x46, 0x0e, 0x2e, 0x89,
+			0xe8, 0xdb, 0x4d, 0x3f, 0x2c, 0xb0, 0x62, 0x1e,
+			0x8b, 0xda, 0x21, 0x2d, 0xff, 0x7d, 0x26, 0xa4,
+			0x83, 0x8b, 0xa0, 0x46, 0xdb, 0x56, 0x91, 0xbe,
+			0x00, 0x4c, 0xc5, 0x31, 0x46, 0xf5, 0x68, 0x42,
+			0x91, 0x69, 0xe6, 0xf3, 0x84, 0xce, 0x20, 0xb1,
+			0xfd, 0xbf, 0x58, 0x9e, 0xf9, 0x30, 0x5c, 0xf5,
+			0xc7, 0xdf, 0xe1, 0x20, 0x9f, 0x3c, 0xdd, 0x25,
+			0xd8, 0xf8, 0xb2, 0x59, 0x54, 0x25, 0x20, 0x9d,
+			0x38, 0xf1, 0xbe, 0x0e, 0x5a, 0x30, 0xd4, 0x44,
+			0x3d, 0xb5, 0x75, 0xae, 0xb0, 0xbb, 0x1a, 0x8b,
+			0x4c, 0xe6, 0x05, 0x1c, 0xa7, 0x47, 0x01, 0xb2,
+			0x45, 0x5c, 0x39, 0x77, 0xc7, 0x80, 0x3b, 0xc6,
+			0xe7, 0x3e, 0xe7, 0xd0, 0x10, 0x96, 0x81, 0x1b,
+			0x67, 0xda, 0xf7, 0x87, 0xf4, 0x49, 0xd0, 0xe2,
+			0x21, 0x33, 0x9f, 0xdf, 0x56, 0x68, 0x03, 0x69,
+			0xa7, 0x35, 0x30, 0x0f, 0xfb, 0x68, 0x91, 0xe2,
+			0x20, 0x85, 0x90, 0x56, 0x73, 0x3c, 0x1a, 0xa6,
+			0xae, 0x71, 0x84, 0xe5, 0x73, 0x8a, 0x3a, 0x30,
+			0x1d, 0xee, 0x96, 0x25, 0xa4, 0xa6, 0xde, 0x69,
+			0x7b, 0xfb, 0xf4, 0x7f, 0xc6, 0xea, 0x65, 0x29,
+			0x4a, 0xce, 0xf9, 0xb5, 0x23, 0x85, 0x16, 0x29,
+			0xcd, 0x7c, 0xf1, 0x95, 0xaf, 0x5e, 0xb9, 0xbf,
+			0xb0, 0x22, 0x92, 0xfe, 0x9e, 0xca, 0x16, 0x52,
+			0x04, 0x77, 0x37, 0x78, 0x3d, 0xed, 0x9c, 0x28,
+			0x0b, 0xaa, 0x04, 0x9f, 0xe2, 0x2c, 0x5d, 0xfc,
+			0x5c, 0xde, 0x39, 0x57, 0x75, 0x1c, 0x0e, 0x10,
+			0x26, 0x9a, 0xf2, 0x40, 0x92, 0xcd, 0x10, 0x96,
+			0xcc, 0x5d, 0x84, 0x11, 0xae, 0x05, 0x21, 0x5b,
+			0x36, 0xd0, 0x51, 0x40, 0x06, 0x8d, 0x47, 0xb1,
+			0xcc, 0x82, 0xde, 0xf6, 0x14, 0x24, 0x9b, 0xc4,
+			0xbf, 0x4f, 0x8d, 0x53, 0x48, 0x0b, 0xee, 0x14,
+			0x6f, 0x8e, 0x1d, 0x09, 0x74, 0x25, 0xd9, 0x28,
+			0xe0, 0x1f, 0x5d, 0x24, 0x34, 0x06, 0x94, 0x65,
+			0xd4, 0x93, 0x1b, 0xcd, 0x36, 0xbc, 0x9e, 0xc5,
+			0x37, 0x57, 0x52, 0xda, 0xcc, 0x72, 0x58, 0x5b,
+			0x5c, 0x7a, 0x99, 0x08, 0xe5, 0x28, 0x44, 0x1a,
+			0xff, 0x8e, 0xad, 0xc9, 0x0c, 0x53, 0x64, 0xcc,
+			0xcc, 0xc5, 0x9f, 0x83, 0x1e, 0x32, 0x26, 0x53,
+			0xbb, 0x7e, 0xf1, 0xab, 0x73, 0xfb, 0x47, 0x7d,
+			0x7a, 0xb7, 0x8e, 0x10, 0xbc, 0x3b, 0x39, 0x9a,
+			0x7f, 0x9a, 0x2c, 0x01, 0xa4, 0x9e, 0x70, 0xac,
+			0x4d, 0x15, 0x00, 0x78, 0x67, 0xfc, 0xca, 0x2a,
+			0xf9, 0x40, 0xbc, 0xbb, 0x12, 0x55, 0x35, 0xa3,
+			0xce, 0x17, 0x72, 0xfe, 0xfd, 0x37, 0x58, 0xdb,
+			0x8c, 0x4f, 0xe9, 0x46, 0x67, 0x7d, 0xe8, 0x10,
+			0x83, 0x86, 0xd8, 0x46, 0xf6, 0x73, 0x28, 0xdd,
+			0xbd, 0x35, 0xfc, 0xbc, 0x92, 0x19, 0x51, 0x24,
+			0xbe, 0x0c, 0x82, 0xb3, 0xaa, 0x91, 0xa3, 0x2b,
+			0xd6, 0x62, 0xa6, 0x6e, 0xe5, 0xdc, 0x37, 0xfb,
+			0x29, 0x93, 0x60, 0xbc, 0x4f, 0x7e, 0x4c, 0x89,
+			0xa1, 0x58, 0xed, 0x77, 0xef, 0x1e, 0x0f, 0x54,
+			0x4a, 0x8b, 0x36, 0x22, 0x29, 0x8a, 0x30, 0xe3,
+			0x26, 0x2c, 0x9e, 0x13, 0x01, 0x5e, 0x53, 0x44,
+			0xe4, 0xe3, 0x95, 0xa4, 0xc1, 0x9b, 0xe5, 0x26,
+			0x9b, 0x97, 0x4a, 0x5e, 0xbf, 0x07, 0x3e, 0x49,
+			0x2e, 0x6d, 0xf2, 0x13, 0xde, 0xf3, 0xbf, 0x44,
+			0x1e, 0xfc, 0x6b, 0x92, 0x25, 0xe2, 0x84, 0xd4,
+			0x55, 0x0d, 0x36, 0x6c, 0x03, 0x8b, 0x24, 0x6b,
+			0x75, 0x8d, 0x15, 0x33, 0xeb, 0xcd, 0x09, 0xaa,
+			0x27, 0x2c, 0x37, 0x37, 0xd9, 0xea, 0x8b, 0x4b,
+			0x0b, 0x8b, 0xa2, 0x3b, 0xbe, 0xb5, 0xad, 0xaa,
+			0x13, 0xda, 0x70, 0x81, 0x8a, 0x1c, 0xe6, 0x38,
+			0xaf, 0x2a, 0xce, 0x38, 0xc8, 0x14, 0xf0, 0xc7,
+			0x4a, 0x09, 0x4d, 0xbb, 0x12, 0xca, 0x78, 0xc1,
+			0x87, 0x8c, 0x76, 0x36, 0xb8, 0x13, 0xd9, 0xe6,
+			0xe2, 0x8b, 0x95, 0x81, 0x08, 0xf7, 0xa4, 0x7d,
+			0xae, 0x8d, 0xa9, 0x77, 0x0f, 0x56, 0x96, 0x57,
+			0x61, 0x76, 0x1a, 0xb3, 0x5a, 0x8f, 0x59, 0xd4,
+			0xa6, 0xa7, 0xb4, 0x33, 0xc4, 0x4b, 0x46, 0x68,
+			0xe6, 0xed, 0x0d, 0x5c, 0xe6, 0x96, 0xb2, 0x72,
+			0x48, 0x3c, 0x89, 0x15, 0xe8, 0x0f, 0xeb, 0x6b,
+			0x72, 0xdd, 0xcc, 0x01, 0x75, 0xea, 0x0c, 0xf0,
+			0xe4, 0x82, 0xda, 0x53, 0xb3, 0x0c, 0x41, 0xe4,
+			0x87, 0x82, 0x7d, 0x88, 0xee, 0x98, 0x03, 0xad,
+			0xf5, 0x5e, 0xbb, 0x5e, 0x70, 0x98, 0x59, 0x2f,
+			0xec, 0x79, 0xfe, 0x03, 0xd5, 0x29, 0x85, 0x48,
+			0x86, 0x1b, 0x4e, 0xe2, 0x02, 0xdb, 0xba, 0xa6,
+			0x15, 0x87, 0x69, 0x70, 0xbb, 0x69, 0x9f, 0x92,
+			0xfc, 0x56, 0xc0, 0x35, 0xfa, 0xbf, 0xee, 0xa3,
+			0x34, 0x7e, 0xa6, 0xa0, 0x89, 0xf1, 0x38, 0x99,
+			0x59, 0xb0, 0x5d, 0x1c, 0x1e, 0x7c, 0x2b, 0x35,
+			0x14, 0xfa, 0xd0, 0x91, 0xe8, 0xd4, 0xed, 0x4c,
+			0x4c, 0x84, 0x8b, 0xe1, 0x34, 0xa7, 0xdd, 0x0c,
+			0x34, 0xde, 0xc2, 0xae, 0x1c, 0x05, 0xf4, 0x80,
+			0xe0, 0xf8, 0x80, 0x95, 0x21, 0x0c, 0x17, 0x22,
+			0xc6, 0xd7, 0xee, 0x00, 0x83, 0x5e, 0xf9, 0x0a,
+			0x1c, 0x5c, 0x91, 0xdc, 0x21, 0x67, 0x68, 0x9e,
+			0x70, 0xac, 0x37, 0x13, 0xd2, 0x49, 0x1a, 0x71,
+			0x63, 0xc3, 0x0f, 0x38, 0x7d, 0x5f, 0x1d, 0xe1,
+			0xb0, 0x9a, 0x77, 0x14, 0x0f, 0x14, 0x2e, 0xd5,
+			0x65, 0x55, 0x36, 0xae, 0xf6, 0x96, 0xa4, 0x85,
+			0x30, 0x0b, 0x24, 0x87, 0x40, 0x4d, 0x74, 0xb7,
+			0xcb, 0x04, 0xa5, 0x14, 0xfa, 0x9c, 0xb6, 0x9a,
+			0x11, 0xe0, 0xac, 0xb0, 0x13, 0x32, 0x32, 0x33,
+			0x3e, 0xb0, 0x95, 0xac, 0x64, 0xac, 0x59, 0xab,
+			0x96, 0xea, 0x1e, 0x2f, 0x3c, 0xcc, 0xed, 0x54,
+			0x1f, 0x40, 0xb9, 0xa4, 0xd7, 0xe3, 0x0b, 0xef,
+			0x04, 0xcb, 0xaa, 0x03, 0x2b, 0x02, 0x20, 0x8e,
+			0x7e, 0x3e, 0xbf, 0x66, 0x09, 0x31, 0x18, 0x9f,
+			0x4b, 0x77, 0x27, 0x51, 0xb2, 0xc9, 0xf1, 0xe4,
+			0xf1, 0xaf, 0xaf, 0xd4, 0x87, 0x05, 0xed, 0x8d,
+			0x60, 0x72, 0x36, 0x9e, 0x05, 0xc3, 0x3e, 0xcf,
+			0xa5, 0x23, 0x8b, 0xb7, 0x7e, 0xcd, 0xdb, 0x2c,
+			0xde, 0xbc, 0xeb, 0x67, 0x6e, 0x2c, 0x59, 0x4d,
+			0x7f, 0x4a, 0xd8, 0x4e, 0x69, 0xff, 0xea, 0xb4,
+			0x00, 0xc6, 0x2b, 0x31, 0x26, 0x9e, 0x35, 0x7a,
+			0xc5, 0x86, 0x02, 0x98, 0xdb, 0xf7, 0xc5, 0x96,
+			0xd2, 0x2e, 0x2a, 0xc5, 0x04, 0xc0, 0x9c, 0xb3,
+			0x07, 0x86, 0x77, 0x7c, 0x7f, 0x82, 0x97, 0x87,
+			0x64, 0xf9, 0xb5, 0x70, 0x39, 0x3c, 0x39, 0x2b,
+			0xfe, 0xa7, 0x24, 0xdd, 0x5f, 0xf0, 0x25, 0xe0,
+			0x74, 0x69, 0x35, 0x22, 0x9a, 0xaf, 0xa4, 0x80,
+			0x77, 0x75, 0x7f, 0x5e, 0xbd, 0xbf, 0xb9, 0x06,
+			0x0a, 0x68, 0xd1, 0x2e, 0x8b, 0xc8, 0xa2, 0x76,
+			0x68, 0xa5, 0x94, 0xb7, 0xda, 0x41, 0xd1, 0xa4,
+			0xfe, 0x86, 0xe4, 0x86, 0xb6, 0xfc, 0x70, 0x81,
+			0x37, 0x10, 0x7b, 0x9b, 0xf2, 0x07, 0x33, 0x60,
+			0x56, 0x74, 0xbf, 0xc4, 0x66, 0x16, 0xe5, 0xe3,
+			0xed, 0x13, 0x72, 0x2b, 0x01, 0x04, 0x13, 0x74,
+			0x22, 0xe9, 0xd3, 0x14, 0xd5, 0xd9, 0xa1, 0x66,
+			0xb9, 0xb7, 0x0d, 0x30, 0x09, 0xa8, 0xf6, 0xf7,
+			0xe8, 0xa8, 0xe8, 0x8b, 0x1e, 0x61, 0xa9, 0xdd,
+			0x11, 0x55, 0xb2, 0x48, 0xd1, 0xb3, 0xa4, 0x97,
+			0xab, 0xe9, 0x43, 0x0b, 0x46, 0x10, 0xd0, 0xac,
+			0x88, 0xe4, 0xcd, 0xa3, 0x67, 0x45, 0xbb, 0xc8,
+			0x5e, 0x23, 0x2a, 0x09, 0xf5, 0x6f, 0x55, 0x22,
+			0xc2, 0x7a, 0x23, 0xc3, 0x36, 0x28, 0x52, 0xa9,
+			0xe9, 0x59, 0xca, 0x04, 0x9c, 0xf7, 0x36, 0x49,
+			0x6b, 0xef, 0x07, 0xd0, 0x0c, 0xf3, 0xba, 0x28,
+			0x24, 0x3f, 0x19, 0xdc, 0xd3, 0x84, 0xba, 0xbf,
+			0x6b, 0x73, 0xef, 0x0b, 0x4d, 0xfe, 0x80, 0x43,
+			0xbe, 0x5b, 0x6c, 0xf6, 0x8e, 0x94, 0x04, 0x7d,
+			0x49, 0x72, 0xa1, 0x83, 0x27, 0x7e, 0x20, 0x20,
+			0xcf, 0xb1, 0x04, 0x87, 0xd2, 0x6d, 0x01, 0x14,
+			0xa5, 0x17, 0x31, 0x61, 0x4e, 0xf7, 0xf3, 0xde,
+			0x42, 0x98, 0xa4, 0x9a, 0x3b, 0xa6, 0xd1, 0xfe,
+			0x47, 0x84, 0xf9, 0xbf, 0x44, 0x95, 0xcf, 0xa1,
+			0x3c, 0xa4, 0x1a, 0x42, 0x96, 0x0b, 0x6d, 0x94,
+			0x70, 0xb4, 0xbc, 0xc8, 0x4b, 0x4b, 0x23, 0xd4,
+			0x95, 0xe2, 0x1e, 0x70, 0x1c, 0xe7, 0x15, 0xf2,
+			0xc8, 0x17, 0x01, 0xa0, 0x10, 0x03, 0xfe, 0x03,
+			0x80, 0xb3, 0xda, 0x43, 0x6b, 0x13, 0xab, 0x3a,
+			0xb6, 0x27, 0x94, 0x52, 0xfc, 0x51, 0xe1, 0x04,
+			0x18, 0xff, 0xd4, 0x62, 0xd4, 0x62, 0x8f, 0x04,
+			0xa0, 0x41, 0x10, 0xa3, 0x3e, 0x1f, 0xb1, 0x5c,
+			0x9d, 0xb2, 0x6f, 0x1e, 0x8f, 0x76, 0x8d, 0xbd,
+			0xff, 0x7d, 0xc5, 0x48, 0xee, 0xef, 0x6d, 0x82,
+			0xc1, 0x6a, 0xcc, 0xa8, 0xbd, 0x05, 0x7e, 0x7c,
+			0x1f, 0x95, 0x39, 0xde, 0xa8, 0x19, 0x47, 0x45,
+			0xd7, 0x4a, 0x43, 0x52, 0x3e, 0x1b, 0x86, 0xee,
+			0x2f, 0x1e, 0x7e, 0x3c, 0xf1, 0x27, 0xe9, 0x35,
+			0x00, 0x6b, 0xf8, 0x56, 0x1f, 0xae, 0x18, 0xe3,
+			0x40, 0x1f, 0x7c, 0x95, 0x83, 0x55, 0xe7, 0x78,
+			0x98, 0x86, 0x8a, 0x96, 0xb8, 0x87, 0x88, 0x04,
+			0x9f, 0x4d, 0x62, 0x40, 0xc7, 0xcf, 0xfa, 0x90,
+			0xdf, 0xeb, 0x60, 0xbe, 0xdc, 0x99, 0xdf, 0xae,
+			0x4b, 0x96, 0xfc, 0xd6, 0xaf, 0x8c, 0xcb, 0x1b,
+			0x38, 0xbc, 0xa3, 0x48, 0xce, 0xd3, 0xa9, 0xd7,
+			0xec, 0x1d, 0xbc, 0x22, 0xd9, 0x34, 0xdf, 0xcb,
+			0x62, 0x95, 0xe2, 0x32, 0x7d, 0xd3, 0x01, 0x61,
+			0x46, 0x9f, 0x2e, 0x26, 0x4b, 0x79, 0xf1, 0x39,
+			0xf6, 0x22, 0xad, 0xcf, 0xb1, 0x5a, 0x57, 0xf1,
+			0xca, 0x95, 0xc7, 0x20, 0xab, 0x1a, 0xad, 0xf4,
+			0xdd, 0x96, 0x0b, 0xb1, 0xae, 0xb6, 0x45, 0xad,
+			0x26, 0x2a, 0xbd, 0x17, 0x5e, 0x27, 0x12, 0x6f,
+			0x43, 0x43, 0x0a, 0x84, 0x68, 0xb0, 0x11, 0x74,
+			0xe3, 0xbe, 0xb2, 0x2c, 0xb2, 0xa2, 0xf4, 0xcf,
+			0xd4, 0x0d, 0xd0, 0x21, 0x84, 0x56, 0xc5, 0xbf,
+			0xf0, 0x76, 0xb4, 0x44, 0x29, 0xf4, 0x25, 0x5e,
+			0x9b, 0x31, 0x56, 0x7a, 0xb9, 0xe2, 0x6b, 0x6c,
+			0x7c, 0x7e, 0x03, 0xb6, 0x23, 0xe2, 0xc9, 0xb6,
+			0xca, 0xbc, 0xbb, 0x0c, 0x07, 0x4c, 0x2a, 0xea,
+			0x0d, 0xb9, 0x55, 0x4f, 0x68, 0xc0, 0x58, 0x2a,
+			0xcd, 0xe6, 0xb8, 0x17, 0x6d, 0x1f, 0xb3, 0x31,
+			0x28, 0xd3, 0x20, 0x47, 0x54, 0x85, 0x64, 0x13,
+			0xfc, 0x99, 0x61, 0x36, 0xc1, 0xb2, 0x9c, 0x68,
+			0x4e, 0x5d, 0xdc, 0x0f, 0xdb, 0x68, 0xa9, 0xa9,
+			0xc3, 0xbf, 0xd3, 0xbc, 0x03, 0x7a, 0x6e, 0x6c,
+			0x3b, 0xa6, 0xf7, 0xc0, 0xb1, 0x64, 0xe3, 0x12,
+			0x6d, 0x0c, 0x1f, 0x9e, 0x74, 0x1c, 0xab, 0x15,
+			0x0f, 0x4c, 0xbd, 0xfa, 0x0b, 0x39, 0x9c, 0x9c,
+			0xb0, 0x50, 0x78, 0x03, 0x8b, 0x25, 0xfb, 0x66,
+			0xdd, 0x50, 0xe7, 0x0a, 0xba, 0x2f, 0x2d, 0x93,
+			0x1e, 0xa5, 0xaf, 0xd8, 0xcc, 0x9c, 0x13, 0x64,
+			0xef, 0xae, 0x23, 0xdc, 0x44, 0xc8, 0x7e, 0x17,
+			0x93, 0x37, 0x8d, 0xcb, 0xc7, 0x8c, 0x30, 0x0a,
+			0x3a, 0x08, 0x35, 0x5b, 0xb3, 0xc9, 0x45, 0x17,
+			0xfb, 0x80, 0x27, 0x7c, 0xc7, 0xc2, 0x57, 0x7c,
+			0xac, 0x73, 0xc8, 0x5f, 0xd0, 0xcc, 0xe9, 0x5c,
+			0x55, 0xe2, 0x63, 0x25, 0xaf, 0x89, 0x96, 0x81,
+			0x5b, 0x4d, 0x0d, 0xa6, 0x65, 0x2f, 0xd4, 0x3a,
+			0x9b, 0xb7, 0x09, 0xad, 0x47, 0xe3, 0xf7, 0x15,
+			0x41, 0xc0, 0xcf, 0xec, 0x9d, 0xd4, 0xac, 0x57,
+			0xfd, 0xd6, 0x91, 0xbe, 0x30, 0x52, 0x2b, 0x86,
+			0xdf, 0x54, 0x4b, 0x95, 0x45, 0x76, 0x87, 0x3d,
+			0x56, 0x47, 0x2b, 0xfe, 0x6b, 0x6d, 0x9a, 0x3e,
+			0x72, 0xfb, 0x22, 0x8b, 0x3d, 0x92, 0x1d, 0x62,
+			0x77, 0x6e, 0x91, 0xd4, 0x37, 0x5c, 0x97, 0x0e,
+			0x07, 0x4c, 0x5c, 0x74, 0xdb, 0x05, 0x5e, 0x9f,
+			0xe1, 0xf0, 0x1a, 0x24, 0x67, 0x8f, 0x0f, 0x20,
+			0xe9, 0x3e, 0x45, 0x5a, 0x6a, 0xb5, 0xb9, 0xee,
+			0xf4, 0x1d, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+			0x0a, 0x0e, 0x11, 0x19, 0x1b, },
+	}, {
+		.what = "pure rejection vector",
+		.algo = "ml-dsa65",
+		.pk_len = DILITHIUM65_PUBLICKEYBYTES,
+		.pk = (const u8[DILITHIUM65_PUBLICKEYBYTES]){
+			0x54, 0xa5, 0x5c, 0x8e, 0x72, 0x11, 0xf9, 0x67,
+			0x89, 0x19, 0x57, 0x17, 0xa9, 0x03, 0x7b, 0xc6,
+			0xd9, 0xaf, 0x99, 0x14, 0xe8, 0x8f, 0xd4, 0xa7,
+			0xcd, 0x17, 0x8c, 0x67, 0x5f, 0x45, 0x62, 0xc1,
+			0xdd, 0xd0, 0x6d, 0x7d, 0xd0, 0xfd, 0x74, 0x98,
+			0x35, 0x93, 0x95, 0x9c, 0xfb, 0x2f, 0x0c, 0xb9,
+			0xcf, 0x05, 0x28, 0x47, 0x22, 0xe8, 0x2b, 0x17,
+			0xfa, 0x42, 0x60, 0x67, 0x13, 0x2f, 0x9b, 0x03,
+			0xce, 0xce, 0x62, 0x41, 0x12, 0xbe, 0x8d, 0xbb,
+			0xf9, 0x53, 0x25, 0xca, 0x10, 0xf8, 0x73, 0xa6,
+			0x52, 0x32, 0x7a, 0x06, 0xb2, 0x4d, 0x58, 0x0c,
+			0x68, 0xfc, 0x02, 0xf1, 0x93, 0xb4, 0xca, 0x45,
+			0xab, 0xf5, 0xc4, 0xab, 0x93, 0x6c, 0x1b, 0x24,
+			0xd0, 0xeb, 0xe6, 0xb3, 0x90, 0x5e, 0xf4, 0xe7,
+			0x60, 0xdd, 0x90, 0x1e, 0xdf, 0x77, 0xf5, 0x8a,
+			0x4a, 0xf5, 0xc8, 0x7a, 0xc0, 0x04, 0xc4, 0x07,
+			0x76, 0xae, 0x14, 0x47, 0xe1, 0xec, 0x4f, 0x76,
+			0xa5, 0xae, 0x9a, 0xac, 0x73, 0x83, 0x4a, 0xbb,
+			0xa8, 0x58, 0x1a, 0x54, 0xd1, 0xdf, 0xaf, 0x5b,
+			0xd1, 0x21, 0x81, 0x4d, 0xa1, 0x40, 0xd1, 0xe3,
+			0xd2, 0x35, 0x5d, 0x9b, 0x1f, 0x37, 0x77, 0xd6,
+			0xa4, 0xb6, 0x1a, 0x9a, 0xd4, 0xdc, 0xe9, 0x00,
+			0x47, 0xf5, 0x69, 0x27, 0xd4, 0x0b, 0x22, 0x4d,
+			0x8e, 0x2f, 0xfb, 0x7f, 0xdd, 0xe9, 0xe9, 0xb3,
+			0xde, 0xae, 0x7d, 0x8a, 0x8b, 0xe1, 0xc8, 0x1f,
+			0x50, 0x21, 0xb7, 0x32, 0x7a, 0x5a, 0x08, 0x02,
+			0xaf, 0x07, 0x98, 0xb3, 0xd9, 0xc5, 0x96, 0xab,
+			0xfe, 0xff, 0xa9, 0xb8, 0x54, 0x02, 0x42, 0x68,
+			0x68, 0xba, 0x89, 0x3a, 0x12, 0x31, 0xd3, 0x95,
+			0xf6, 0x7a, 0xae, 0xda, 0x0d, 0x08, 0x0d, 0xb3,
+			0x4e, 0xde, 0x9c, 0x3b, 0x6d, 0x1e, 0x94, 0x2a,
+			0x7a, 0x46, 0x8e, 0x26, 0xe4, 0xde, 0xd1, 0x81,
+			0xc6, 0x81, 0x4e, 0x38, 0x77, 0x36, 0xf7, 0x38,
+			0xed, 0xf6, 0xd0, 0x44, 0x1c, 0x6d, 0x1a, 0xa0,
+			0xc4, 0xf5, 0x21, 0x71, 0xbd, 0xf3, 0xa2, 0x9b,
+			0xa9, 0x13, 0x8c, 0x8f, 0x60, 0x99, 0x2d, 0x86,
+			0xc1, 0xe0, 0xf4, 0x4d, 0x75, 0x6e, 0x14, 0xe1,
+			0x5f, 0x12, 0xb9, 0xe6, 0xd2, 0xda, 0xa9, 0x4e,
+			0xc7, 0x97, 0x86, 0xd2, 0x77, 0x32, 0x67, 0xe1,
+			0x8f, 0x23, 0xb8, 0xd3, 0x70, 0x8f, 0x87, 0x2b,
+			0xa2, 0xf1, 0x31, 0x1d, 0x50, 0x09, 0xf3, 0xa3,
+			0x0f, 0x19, 0x9f, 0xde, 0xe7, 0xfb, 0x2e, 0x4a,
+			0x9c, 0x63, 0x4c, 0x56, 0x98, 0x87, 0x0a, 0x05,
+			0x00, 0xfb, 0xe7, 0x22, 0x75, 0x42, 0xca, 0xd6,
+			0x45, 0x35, 0x77, 0x80, 0x22, 0xf2, 0x75, 0x18,
+			0xee, 0xb1, 0x36, 0xdc, 0xbe, 0x0a, 0x11, 0x11,
+			0xae, 0x94, 0xaa, 0xec, 0x56, 0xbb, 0x72, 0x47,
+			0xcb, 0xc5, 0xa2, 0x8e, 0x3d, 0x3f, 0x34, 0x83,
+			0x55, 0xc1, 0x39, 0x40, 0xb7, 0xb0, 0x37, 0x21,
+			0xe1, 0xc4, 0x0c, 0x80, 0x98, 0xeb, 0x3d, 0x9b,
+			0xc3, 0x74, 0x8d, 0x9f, 0x58, 0x9d, 0x03, 0xab,
+			0x3d, 0x6c, 0xe0, 0xf6, 0x13, 0x31, 0x6c, 0x00,
+			0x65, 0xda, 0x8e, 0x84, 0x14, 0x4f, 0x44, 0x75,
+			0xa8, 0x1d, 0xb9, 0xdd, 0xe6, 0x39, 0xc9, 0x36,
+			0x89, 0x19, 0x5a, 0xfd, 0x87, 0x00, 0xad, 0xa7,
+			0x0b, 0xb9, 0x22, 0x6f, 0x35, 0x88, 0xf5, 0x7a,
+			0x9b, 0x69, 0x6e, 0xf4, 0x5b, 0xc8, 0x6f, 0xdc,
+			0x13, 0xa1, 0x28, 0xf8, 0x1d, 0x7c, 0x8a, 0x7a,
+			0xe6, 0x04, 0xe8, 0x0b, 0xf5, 0x10, 0x90, 0x48,
+			0xc7, 0xe6, 0x20, 0xc1, 0x2c, 0xab, 0x46, 0x9d,
+			0x1d, 0x54, 0x6e, 0x37, 0x89, 0xd2, 0x25, 0x18,
+			0x3f, 0x82, 0x5c, 0x68, 0x31, 0x0b, 0x39, 0xe1,
+			0xfc, 0xfb, 0x72, 0x50, 0x4c, 0xc5, 0xca, 0x45,
+			0x7b, 0x7c, 0x87, 0x2f, 0x42, 0xdc, 0xd6, 0xdc,
+			0x00, 0x45, 0x06, 0x44, 0xec, 0xda, 0x55, 0x32,
+			0x03, 0xf9, 0x1d, 0x9c, 0x51, 0x28, 0x49, 0x42,
+			0xc7, 0x98, 0x74, 0xe2, 0x33, 0x14, 0xcc, 0x32,
+			0x4d, 0xfa, 0x0a, 0x99, 0xa8, 0x9a, 0x74, 0xfb,
+			0xee, 0x3e, 0x22, 0xda, 0x5f, 0x0e, 0x85, 0x63,
+			0x46, 0xd4, 0x44, 0x31, 0x3d, 0x66, 0x99, 0x89,
+			0xb0, 0xed, 0xd7, 0x9d, 0x9f, 0x23, 0x96, 0xc4,
+			0x9a, 0xed, 0x5b, 0x13, 0x6a, 0x3b, 0xea, 0x23,
+			0xbc, 0x8c, 0x1b, 0x31, 0xd2, 0x64, 0xcc, 0x99,
+			0x2e, 0x36, 0x1b, 0x1a, 0xed, 0xbe, 0xc0, 0x1d,
+			0xa4, 0x77, 0xfc, 0x9b, 0x19, 0x24, 0x62, 0x29,
+			0xbd, 0xaa, 0xb2, 0x7f, 0xd0, 0x47, 0xb8, 0x00,
+			0x77, 0xe5, 0xda, 0x50, 0x7c, 0x89, 0x1d, 0xf9,
+			0x65, 0xec, 0xa5, 0x94, 0xe9, 0x3e, 0x00, 0x2a,
+			0x3b, 0x1e, 0x91, 0x8b, 0x54, 0x0f, 0x67, 0xad,
+			0x30, 0xdf, 0x67, 0xc8, 0x86, 0xb1, 0x80, 0x52,
+			0xbd, 0x14, 0x0c, 0x36, 0x73, 0xf7, 0xe0, 0x25,
+			0x97, 0x62, 0xbc, 0x28, 0xa1, 0x62, 0xbe, 0xb1,
+			0xde, 0x65, 0x14, 0xb7, 0x16, 0xc6, 0x5b, 0xad,
+			0xb2, 0xae, 0x90, 0x93, 0x4f, 0xd1, 0x3f, 0x5d,
+			0xae, 0x7b, 0x6c, 0x1e, 0x0e, 0x77, 0x20, 0x0f,
+			0xfb, 0xd3, 0x2b, 0x98, 0x14, 0x22, 0x7f, 0x25,
+			0x51, 0x07, 0x97, 0xc4, 0x7e, 0x9a, 0x14, 0x8f,
+			0x99, 0x51, 0xb8, 0x9d, 0xf4, 0xbe, 0xb0, 0x3e,
+			0x86, 0x6f, 0x38, 0x19, 0x50, 0xc6, 0xe6, 0xa8,
+			0xa4, 0xd8, 0x67, 0xc7, 0x1f, 0x19, 0xca, 0xc8,
+			0x3c, 0xe9, 0xa2, 0x5e, 0xde, 0x0c, 0x0c, 0xa1,
+			0x97, 0xc0, 0xa6, 0xc5, 0x35, 0x5a, 0xf7, 0x9b,
+			0xb7, 0x1b, 0xec, 0x0c, 0x22, 0x74, 0xbb, 0xf1,
+			0x78, 0xa9, 0x1c, 0xbf, 0xf4, 0xa2, 0xed, 0xe9,
+			0x56, 0x74, 0x12, 0x77, 0xe6, 0x13, 0xbd, 0xa6,
+			0x28, 0xd3, 0x94, 0x83, 0x4f, 0x2f, 0x09, 0xec,
+			0x21, 0xee, 0xd2, 0x43, 0xb8, 0x27, 0x21, 0xd7,
+			0x9d, 0x26, 0xc6, 0xca, 0xf0, 0x21, 0x33, 0xb1,
+			0x66, 0x80, 0x62, 0xaf, 0x29, 0x97, 0x0b, 0xb9,
+			0x09, 0xdf, 0x53, 0x72, 0x48, 0x57, 0x3f, 0xe4,
+			0xbf, 0x85, 0xef, 0x17, 0xc8, 0x21, 0x15, 0x0a,
+			0x6e, 0x29, 0xae, 0xbe, 0x43, 0x6a, 0xd1, 0x1f,
+			0xff, 0xca, 0xbf, 0x24, 0x34, 0x03, 0x14, 0xdf,
+			0x6f, 0xc0, 0x00, 0xd4, 0x33, 0x41, 0x2f, 0xf5,
+			0x38, 0x2a, 0x07, 0x64, 0x47, 0x59, 0xe0, 0x45,
+			0x79, 0xbb, 0x25, 0x3f, 0xff, 0x21, 0x21, 0xa1,
+			0xe1, 0x06, 0xa9, 0x1d, 0x7e, 0xf9, 0xde, 0x17,
+			0x29, 0x82, 0x7b, 0x13, 0x71, 0xa7, 0xaa, 0xb9,
+			0x58, 0x3e, 0x5a, 0x1b, 0xcd, 0x80, 0xc0, 0x02,
+			0xd2, 0x8a, 0x3b, 0xd7, 0xe0, 0x8b, 0x44, 0x19,
+			0x01, 0x41, 0xf7, 0x11, 0xd4, 0x66, 0xfc, 0x01,
+			0x10, 0x0c, 0x74, 0x20, 0x38, 0xe8, 0x00, 0x37,
+			0xf5, 0xd4, 0xa1, 0xa3, 0x4e, 0xd4, 0xbd, 0x0d,
+			0xaa, 0x7f, 0x54, 0x1c, 0xfa, 0x33, 0x66, 0xd6,
+			0xc2, 0x8d, 0x2e, 0xeb, 0x52, 0x6b, 0x65, 0x10,
+			0x8a, 0xab, 0x15, 0xa5, 0xf2, 0x4c, 0x73, 0xf3,
+			0x00, 0x99, 0x49, 0xee, 0x5a, 0xe7, 0xab, 0x52,
+			0x0f, 0x0a, 0xed, 0xfb, 0x93, 0x45, 0xc9, 0xf9,
+			0x36, 0x5c, 0x5b, 0x6a, 0x1f, 0x1c, 0x46, 0xde,
+			0x0b, 0x6f, 0x40, 0xd6, 0x1c, 0xec, 0x11, 0x47,
+			0x63, 0xe5, 0xbd, 0x47, 0xda, 0xe8, 0x3d, 0xff,
+			0x8b, 0x8d, 0x3d, 0x0c, 0x0f, 0x3a, 0x9c, 0xef,
+			0xec, 0x49, 0xed, 0x90, 0x1a, 0x21, 0x3f, 0xc6,
+			0xab, 0x13, 0x87, 0x96, 0x24, 0x8c, 0x57, 0x60,
+			0x81, 0x02, 0x56, 0xc8, 0xae, 0x95, 0x9b, 0x5d,
+			0x6f, 0x96, 0xf0, 0x26, 0x0d, 0x32, 0x97, 0x9f,
+			0xdb, 0xf8, 0x20, 0x8f, 0x32, 0xfc, 0x31, 0x90,
+			0x2d, 0x0a, 0x38, 0xfc, 0x4f, 0x46, 0xfa, 0xf3,
+			0x6e, 0x60, 0x9f, 0xb1, 0x68, 0x78, 0xac, 0xc8,
+			0x53, 0x07, 0x1e, 0xc6, 0xe7, 0x31, 0xa3, 0x92,
+			0xb1, 0x29, 0x7b, 0x7a, 0x33, 0x07, 0x78, 0xec,
+			0x51, 0x2b, 0xf5, 0xf3, 0x4d, 0x09, 0x18, 0x21,
+			0x91, 0x3c, 0x85, 0x03, 0xe0, 0x0f, 0x76, 0xb8,
+			0x6f, 0xe4, 0x81, 0x94, 0xc6, 0x32, 0x55, 0xb8,
+			0xbf, 0x5c, 0xfe, 0x57, 0x4e, 0xf1, 0x5c, 0x2d,
+			0x6e, 0x6d, 0x22, 0xa8, 0xa9, 0x55, 0x49, 0x7d,
+			0xda, 0x89, 0x7b, 0xc5, 0xfc, 0xf4, 0xae, 0xec,
+			0x91, 0x69, 0x92, 0xaf, 0x26, 0x1c, 0x64, 0x88,
+			0x23, 0xeb, 0x2f, 0x2a, 0x5f, 0x0b, 0xd1, 0x51,
+			0x5f, 0x4a, 0x8f, 0x2f, 0x22, 0x3b, 0x79, 0x2a,
+			0xf6, 0x00, 0xd5, 0xf5, 0x4c, 0xbf, 0x3f, 0xd3,
+			0x94, 0xeb, 0x1e, 0x86, 0xed, 0x45, 0x93, 0x51,
+			0xf7, 0x42, 0x2d, 0x89, 0x40, 0x4a, 0x30, 0xf7,
+			0x32, 0x3f, 0xa6, 0x6f, 0x7a, 0xa8, 0xd2, 0xdf,
+			0x79, 0x3b, 0x76, 0x19, 0x36, 0x1a, 0xf3, 0x3f,
+			0x39, 0x14, 0x4a, 0xc3, 0x64, 0xfb, 0x51, 0x3f,
+			0x8c, 0xc6, 0x15, 0xee, 0x41, 0x3b, 0xd4, 0xc1,
+			0x3d, 0x0f, 0x0c, 0x74, 0xd6, 0x3f, 0xac, 0x12,
+			0x9c, 0xf6, 0x44, 0x2e, 0x5f, 0x54, 0xd2, 0xdb,
+			0xc8, 0xb1, 0x24, 0xbf, 0xe3, 0x9b, 0x00, 0x64,
+			0x4e, 0x34, 0x37, 0xde, 0x7d, 0x43, 0xbf, 0xb4,
+			0x85, 0x5d, 0x50, 0x55, 0xcc, 0x8f, 0xf8, 0x9a,
+			0xf2, 0x97, 0xd7, 0xb8, 0xc1, 0xd4, 0x8f, 0xd8,
+			0xf6, 0xe0, 0x79, 0x5f, 0xc1, 0xc1, 0xf4, 0x5e,
+			0xd7, 0x74, 0xe9, 0x13, 0xd8, 0x4d, 0x44, 0x9e,
+			0x4a, 0xe1, 0x29, 0x67, 0xe2, 0x38, 0x27, 0xbf,
+			0xf1, 0x4c, 0x34, 0x7b, 0xf7, 0xcd, 0xe3, 0x6c,
+			0xd2, 0x49, 0x18, 0x09, 0x4a, 0x9b, 0x56, 0xd6,
+			0xd0, 0xb8, 0x0a, 0x35, 0xa0, 0x6b, 0xee, 0x71,
+			0x92, 0xd6, 0x87, 0x4b, 0x54, 0x0b, 0x35, 0x8b,
+			0x86, 0x82, 0x17, 0x11, 0xa8, 0x3d, 0x58, 0x04,
+			0x48, 0xc4, 0xf7, 0x4b, 0x96, 0x97, 0x0e, 0x68,
+			0xdb, 0x54, 0x30, 0xea, 0x39, 0x58, 0x3f, 0x64,
+			0xfd, 0x35, 0x7a, 0x07, 0x48, 0xbf, 0xdd, 0xad,
+			0x99, 0x72, 0xef, 0x90, 0x93, 0x58, 0xb4, 0xe8,
+			0x6a, 0x72, 0xcf, 0x7a, 0x03, 0xf0, 0xfa, 0x74,
+			0xc5, 0xc3, 0xc8, 0xe4, 0x08, 0xba, 0xed, 0x1f,
+			0xb4, 0xd4, 0x00, 0x12, 0x18, 0xaf, 0x37, 0x78,
+			0x45, 0x8c, 0x8e, 0xae, 0x1c, 0x6e, 0x90, 0xf5,
+			0x13, 0x8c, 0xcc, 0x3d, 0x40, 0x63, 0xa3, 0xc1,
+			0x8f, 0xe1, 0xc7, 0x47, 0xd7, 0x9c, 0xde, 0x14,
+			0x1b, 0x8f, 0xca, 0x0b, 0xd7, 0xd3, 0x9a, 0x05,
+			0x81, 0x37, 0x61, 0xaa, 0x37, 0xee, 0x67, 0xbf,
+			0xef, 0x17, 0x01, 0x99, 0x6f, 0xc4, 0xd8, 0x9b,
+			0x92, 0x76, 0x9b, 0x23, 0xe9, 0xba, 0x6d, 0xa2,
+			0xfc, 0x4b, 0xe4, 0x3b, 0xa8, 0x64, 0xb7, 0x45,
+			0x49, 0xe5, 0x3b, 0x20, 0x77, 0x80, 0x08, 0x94,
+			0x9e, 0x70, 0xc8, 0x1b, 0x7a, 0x21, 0x59, 0x11,
+			0x20, 0x43, 0x80, 0xf5, 0xcf, 0x0d, 0x70, 0x63,
+			0x92, 0x4e, 0x4e, 0xd5, 0x58, 0xb1, 0x97, 0xaa,
+			0x2e, 0x26, 0xbb, 0xb3, 0x15, 0x02, 0x87, 0x53,
+			0xd1, 0xd9, 0x3d, 0x95, 0xa1, 0xed, 0x3a, 0x67,
+			0xe4, 0xa0, 0x53, 0xeb, 0x6b, 0x7d, 0x8d, 0x80,
+			0x77, 0xb7, 0x38, 0xd3, 0x96, 0xd5, 0x97, 0x7c,
+			0xd6, 0x33, 0x15, 0x78, 0xc5, 0x38, 0x27, 0x8b,
+			0xbd, 0x4a, 0x5d, 0xdc, 0x31, 0xbb, 0x2d, 0xe6,
+			0x24, 0x6a, 0xcb, 0x33, 0x4c, 0x58, 0xb2, 0x52,
+			0xe9, 0xc1, 0xb6, 0x21, 0xca, 0xc1, 0x07, 0xcf,
+			0x62, 0xdd, 0xc4, 0x5d, 0x7c, 0x6d, 0xce, 0xbb,
+			0xd6, 0xcc, 0x89, 0x6a, 0x4e, 0x2c, 0xe0, 0xcb,
+			0x9e, 0xc9, 0x9c, 0xd5, 0x14, 0xd3, 0xc5, 0xb4,
+			0xbc, 0x48, 0x33, 0x6e, 0x10, 0x00, 0xeb, 0x1a,
+			0x91, 0xea, 0x9e, 0xe0, 0x37, 0xf9, 0xc3, 0x9a,
+			0x4d, 0x1a, 0x5c, 0x99, 0xd1, 0x6c, 0x3e, 0x38,
+			0x40, 0x61, 0x8e, 0x66, 0x04, 0x09, 0xc3, 0x66,
+			0x13, 0xb7, 0x1b, 0xa4, 0x4a, 0x73, 0xb9, 0x11,
+			0x53, 0x2e, 0x19, 0xaa, 0x41, 0xa4, 0xf4, 0x89,
+			0x22, 0xc0, 0x0c, 0xec, 0x8f, 0xfd, 0x6a, 0xe3,
+			0x6c, 0x03, 0xe6, 0x01, 0xb5, 0xcd, 0x92, 0x89,
+			0x8a, 0x6f, 0xca, 0xf2, 0x28, 0x03, 0xac, 0xd1,
+			0x00, 0xe4, 0x98, 0x56, 0x4a, 0xd5, 0x60, 0x78,
+			0x6d, 0x00, 0xaa, 0x87, 0xbc, 0x42, 0x49, 0xd7,
+			0xfe, 0x0c, 0xa4, 0xa6, 0xaa, 0x96, 0x7e, 0xe3,
+			0xd5, 0x71, 0xb9, 0x2b, 0xb7, 0x10, 0x7d, 0xf7,
+			0x34, 0xd4, 0x2f, 0x2b, 0xb3, 0x6d, 0xe2, 0x2a,
+			0xaa, 0xb6, 0xba, 0x42, 0x94, 0xf4, 0xfa, 0xc3,
+			0xa7, 0x55, 0x2c, 0xcd, 0xba, 0xc7, 0xfe, 0x12,
+			0x6e, 0x16, 0x29, 0xa7, 0x04, 0x8f, 0xca, 0x84,
+			0xee, 0xce, 0xa4, 0xaa, 0x62, 0x10, 0xb5, 0x6d,
+			0x23, 0x61, 0x78, 0xc9, 0xca, 0x8e, 0x23, 0xbb,
+			0x7d, 0xd8, 0x57, 0x32, 0xe6, 0xd8, 0x4b, 0x87,
+			0xa6, 0x70, 0xac, 0x53, 0x6f, 0x82, 0xad, 0x7d,
+			0x89, 0xc6, 0x51, 0xc9, 0x6f, 0xf2, 0x70, 0x07,
+			0x4d, 0xa8, 0x16, 0xfd, 0x31, 0x7f, 0x0e, 0x3d,
+			0x62, 0x03, 0x13, 0xaf, 0x1e, 0x61, 0x2a, 0xdf,
+			0xc0, 0x8b, 0x68, 0xe1, 0x74, 0xd3, 0xeb, 0x3b,
+			0x51, 0x36, 0x27, 0x90, 0x9e, 0x64, 0x29, 0x66,
+			0x01, 0xae, 0x4d, 0x07, 0xca, 0xcd, 0xa1, 0x54,
+			0x31, 0x0b, 0x32, 0x68, 0x67, 0x4e, 0xac, 0xd1,
+			0x05, 0x35, 0x4e, 0x1b, 0x9c, 0xd9, 0xd0, 0xb1,
+			0x45, 0x15, 0x3f, 0xde, 0xa9, 0xa3, 0xd1, 0xa3,
+			0x81, 0x64, 0xab, 0x2b, 0x15, 0x6a, 0xb8, 0x5b,
+			0x77, 0xd2, 0x96, 0xe8, 0x1c, 0x1a, 0x8b, 0xda,
+			0x94, 0x29, 0x4c, 0x73, 0x30, 0x7a, 0x12, 0xdc,
+			0xfd, 0xd4, 0xb4, 0x4c, 0x0b, 0xcb, 0x9f, 0x21,
+			0x28, 0x86, 0xb7, 0x7c, 0xa0, 0xf6, 0x81, 0xe3,
+			0x4d, 0x70, 0x9e, 0xb0, 0xbf, 0xa7, 0x55, 0x23,
+			0x99, 0xc2, 0x29, 0x74, 0x9e, 0x4f, 0x9f, 0x12,
+			0xeb, 0x0c, 0xa6, 0xd7, 0x60, 0x04, 0x99, 0xa3,
+			0x82, 0x9a, 0xcc, 0x0d, 0xe5, 0x9a, 0xd3, 0xec,
+			0x84, 0x1d, 0x7a, 0x6c, 0x76, 0xf8, 0x05, 0x3d,
+			0x94, 0x70, 0xbb, 0xae, 0x87, 0x2d, 0x25, 0xba,
+			0xe5, 0x38, 0x60, 0x85, 0x2c, 0x83, 0x22, 0xa0,
+			0xf7, 0xec, 0x56, 0xa9, 0x39, 0x48, 0x77, 0x42,
+			0x65, 0xba, 0x57, 0xf6, 0xa9, 0x99, 0x7b, 0xb8,
+			0xa0, 0x03, 0xca, 0x5c, 0x06, 0x6c, 0xae, 0x8a,
+			0xa1, 0xbc, 0x9a, 0xb4, 0x15, 0x35, 0xf1, 0x8f,
+			0x6a, 0x76, 0x1d, 0xe7, 0x09, 0xfa, 0xa7, 0x42,
+			0x94, 0x5e, 0x4e, 0xc6, 0xd2, 0x24, 0xd2, 0xa9,
+			0xe3, 0x16, 0x7f, 0xd6, 0xbf, 0x06, 0x98, 0x0f,
+			0x8b, 0x61, 0xd8, 0xd1, 0x6d, 0xa9, 0xc3, 0xb7,
+			0x54, 0x34, 0x26, 0x7a, 0x6d, 0xa2, 0x04, 0x7e,
+			0xe8, 0x98, 0x47, 0x4a, 0x4b, 0x15, 0xc0, 0xaa,
+			0x24, 0x8c, 0xbd, 0xfd, 0x6a, 0x53, 0x06, 0x2a,
+			},
+		.msg_len = 64,
+		.msg = (const u8[64]){
+			0x7e, 0x0b, 0xd4, 0x8d, 0x8a, 0x62, 0x74, 0xc7,
+			0xe6, 0x2f, 0x31, 0xd8, 0x09, 0x11, 0xba, 0x1d,
+			0x6e, 0xc8, 0xe5, 0xac, 0x5f, 0x11, 0xd2, 0xf1,
+			0x75, 0x22, 0xd3, 0x45, 0x14, 0x0b, 0x6b, 0x25,
+			0xf4, 0xbf, 0x8d, 0x0d, 0x94, 0xf2, 0xa6, 0x0d,
+			0x2c, 0x24, 0x5a, 0xb5, 0x83, 0x2d, 0x12, 0xd4,
+			0xe1, 0xf5, 0xa4, 0x01, 0xb2, 0x8a, 0x18, 0xfd,
+			0x49, 0x29, 0x9f, 0x3c, 0x37, 0xb6, 0xbf, 0x0a,
+			},
+		.sig_len = DILITHIUM65_CRYPTO_BYTES,
+		.sig = (const u8[DILITHIUM65_CRYPTO_BYTES]){
+			0xff, 0x81, 0xe9, 0xbe, 0xa3, 0x89, 0x9d, 0x73,
+			0xdf, 0x13, 0xd3, 0xcf, 0xba, 0x36, 0xe8, 0xa1,
+			0xf9, 0x52, 0x5f, 0x33, 0xd8, 0xfd, 0xc5, 0xb0,
+			0x7a, 0x5a, 0xff, 0x65, 0x1d, 0x84, 0x31, 0x3c,
+			0x53, 0xe2, 0xc8, 0x9c, 0xf4, 0xef, 0x15, 0x3b,
+			0xd0, 0x4d, 0x90, 0x2f, 0x5c, 0x8d, 0x0e, 0x03,
+			0xd6, 0x50, 0xb3, 0xb5, 0x20, 0xa2, 0x57, 0xcc,
+			0x48, 0x6f, 0xc9, 0x49, 0x29, 0x2d, 0xc9, 0x53,
+			0x05, 0x91, 0x08, 0x56, 0x9a, 0x25, 0xb2, 0x43,
+			0x3e, 0x9c, 0x38, 0x75, 0x84, 0xc1, 0x04, 0xdf,
+			0xd5, 0x36, 0x5d, 0x7b, 0x9c, 0x85, 0x3f, 0xd3,
+			0x52, 0xef, 0xb2, 0x3a, 0xa6, 0x3c, 0xa0, 0x64,
+			0xb9, 0xe0, 0x69, 0x89, 0xf4, 0xc7, 0x56, 0x6e,
+			0x21, 0xfd, 0x99, 0x39, 0x1b, 0x08, 0xd4, 0xb4,
+			0xed, 0x5d, 0x8c, 0xf1, 0x27, 0x3f, 0x0c, 0x60,
+			0x74, 0x63, 0x6d, 0xb8, 0xbf, 0xb4, 0xaa, 0xfd,
+			0x92, 0xe5, 0x9a, 0xfa, 0xed, 0xf0, 0x9f, 0x1c,
+			0x8b, 0x73, 0xfe, 0x6d, 0xff, 0xb9, 0xc0, 0xb7,
+			0xba, 0x3d, 0x0e, 0xbc, 0x4e, 0x4b, 0xd4, 0xdb,
+			0x1e, 0x9c, 0xe7, 0xb1, 0xc6, 0xe7, 0x78, 0x22,
+			0xe1, 0x0a, 0x01, 0xcb, 0x34, 0x93, 0xf2, 0x42,
+			0xa8, 0x50, 0xaf, 0x46, 0xa2, 0x7c, 0xc6, 0xe2,
+			0xea, 0xfd, 0x6d, 0x71, 0x8d, 0xaf, 0x28, 0x56,
+			0x37, 0xf8, 0x1a, 0x4e, 0xd7, 0xf0, 0xff, 0xf5,
+			0xd9, 0xec, 0xe4, 0x7d, 0xa0, 0xed, 0x36, 0x1d,
+			0x6f, 0xde, 0x94, 0x6d, 0x6d, 0xee, 0xa4, 0xfd,
+			0xb6, 0xc3, 0x89, 0xa3, 0x82, 0xd5, 0x12, 0x5c,
+			0xcd, 0x54, 0x1d, 0x68, 0x95, 0xe5, 0x38, 0x35,
+			0x81, 0xfb, 0xa7, 0x20, 0xe6, 0x26, 0x2f, 0xfd,
+			0x36, 0xc6, 0x23, 0xf5, 0xe0, 0x36, 0xbd, 0xdd,
+			0xc7, 0xf2, 0x9b, 0x94, 0x00, 0x87, 0xca, 0xf0,
+			0x64, 0x03, 0x6c, 0xc8, 0xa3, 0xc0, 0x3e, 0x0c,
+			0x71, 0x21, 0x70, 0x9a, 0x4e, 0xe6, 0x18, 0x27,
+			0x24, 0x5a, 0xbc, 0x18, 0xe6, 0x15, 0xe8, 0x5b,
+			0x44, 0xac, 0x31, 0x38, 0xe4, 0xfa, 0xe3, 0x8e,
+			0xc8, 0x7b, 0x2c, 0x56, 0x8b, 0x10, 0xad, 0xad,
+			0x6d, 0xf3, 0xad, 0x12, 0x01, 0xbe, 0x6b, 0x5b,
+			0x95, 0x5f, 0xfe, 0xdc, 0xc8, 0x0d, 0x8b, 0x97,
+			0x0e, 0x3c, 0xda, 0x8f, 0xbf, 0x5d, 0x9a, 0x33,
+			0x46, 0x83, 0x89, 0xed, 0xb2, 0x87, 0xb7, 0x11,
+			0xb9, 0x07, 0xd3, 0x69, 0xc9, 0x1e, 0x92, 0x92,
+			0x6a, 0x4d, 0x2b, 0xfe, 0xd8, 0x2c, 0x2b, 0xf9,
+			0x59, 0x81, 0x7a, 0xff, 0xf7, 0x3f, 0x27, 0x39,
+			0x43, 0x03, 0xcf, 0x68, 0xc2, 0x37, 0x65, 0x83,
+			0x87, 0x06, 0xc7, 0xb1, 0x42, 0x7c, 0x7c, 0xe1,
+			0x78, 0x1c, 0xdb, 0xaf, 0x33, 0xb1, 0x35, 0xc6,
+			0xff, 0x94, 0xc2, 0x93, 0x29, 0x1a, 0x3c, 0xc5,
+			0xf1, 0xd1, 0xda, 0x0f, 0x1b, 0xae, 0x1f, 0xf6,
+			0x2b, 0xa0, 0x68, 0x4f, 0x02, 0xeb, 0x2a, 0xe8,
+			0xa4, 0xfa, 0x30, 0x92, 0x0c, 0x36, 0x0c, 0xaa,
+			0xef, 0x0c, 0x78, 0x40, 0x96, 0xcc, 0xbb, 0x65,
+			0xba, 0x84, 0x42, 0x7e, 0x97, 0xf4, 0x07, 0x67,
+			0x00, 0x80, 0x9a, 0x27, 0xfd, 0x8f, 0x18, 0x83,
+			0xad, 0x0d, 0x40, 0x30, 0xd7, 0x62, 0x9d, 0xf3,
+			0xc6, 0x43, 0xd5, 0x92, 0x9e, 0x26, 0xf5, 0xfb,
+			0xda, 0xed, 0x8e, 0x2c, 0x71, 0xea, 0x78, 0xbf,
+			0xd7, 0xe3, 0x86, 0xc3, 0x9a, 0xda, 0x89, 0x86,
+			0x98, 0x41, 0xb7, 0x9e, 0x4a, 0x2e, 0xb0, 0x80,
+			0x00, 0xff, 0x68, 0xbf, 0x86, 0x3f, 0x8b, 0x1c,
+			0x11, 0xe4, 0x5f, 0xf6, 0xb0, 0x70, 0xf9, 0xb9,
+			0x2e, 0xe9, 0x21, 0xe0, 0x40, 0xef, 0xf8, 0xe3,
+			0x65, 0x45, 0x18, 0xf7, 0x92, 0x21, 0x3b, 0xc7,
+			0xe9, 0x6d, 0xb4, 0x2d, 0x01, 0xf9, 0xec, 0x33,
+			0x0d, 0xa7, 0x19, 0x8f, 0xf5, 0x0d, 0x49, 0xa5,
+			0x45, 0xb6, 0x92, 0x90, 0x4b, 0xe5, 0x12, 0x6c,
+			0x1a, 0xf3, 0x51, 0x06, 0x29, 0x2e, 0xd1, 0xfe,
+			0xbf, 0xe1, 0x67, 0x2c, 0x98, 0x45, 0x8a, 0x38,
+			0xd0, 0x50, 0x6f, 0xa8, 0x81, 0xf2, 0x27, 0xb4,
+			0x9f, 0x15, 0x14, 0x12, 0x98, 0x1c, 0x93, 0x64,
+			0xf8, 0x01, 0x91, 0x37, 0x31, 0xb3, 0x04, 0x0a,
+			0xc4, 0x7b, 0x84, 0x03, 0x2c, 0xbf, 0x90, 0xd7,
+			0x7c, 0xa3, 0xcf, 0x1d, 0x6a, 0x7c, 0x9c, 0x35,
+			0x9b, 0xf1, 0x95, 0x2c, 0x02, 0x55, 0x24, 0xb7,
+			0x23, 0x87, 0x3b, 0xf6, 0x9f, 0xfd, 0x04, 0xfe,
+			0xad, 0x40, 0xe0, 0x95, 0xf7, 0xcc, 0x8b, 0xae,
+			0x53, 0x7b, 0x16, 0x9f, 0x47, 0xad, 0x29, 0x66,
+			0xd2, 0x37, 0x0f, 0x54, 0x4f, 0x7d, 0xb0, 0x04,
+			0x45, 0xed, 0x52, 0xe5, 0xdb, 0x1a, 0xb4, 0x26,
+			0x40, 0x62, 0x62, 0x4f, 0xf4, 0x92, 0x55, 0xf9,
+			0x78, 0xd9, 0xdd, 0xdb, 0x42, 0x40, 0x5a, 0x5e,
+			0xe5, 0xe0, 0x71, 0x7b, 0xd1, 0x96, 0x57, 0x47,
+			0x7e, 0x79, 0x80, 0xee, 0xe4, 0xdc, 0xac, 0xcd,
+			0xb1, 0xbf, 0x28, 0xd8, 0x13, 0xec, 0xdf, 0x71,
+			0x13, 0x88, 0xf1, 0xb7, 0x9f, 0x6b, 0xb2, 0xd0,
+			0xf2, 0x0d, 0xfa, 0x75, 0xa3, 0xa9, 0xa2, 0x6f,
+			0x1d, 0x4b, 0xe4, 0xd8, 0x8b, 0x08, 0x7a, 0x84,
+			0xa8, 0x82, 0xf6, 0x09, 0xf0, 0x30, 0xa1, 0xb9,
+			0xe4, 0x03, 0xe4, 0xf8, 0xeb, 0xcf, 0x6c, 0xb5,
+			0xe4, 0xc0, 0x4b, 0xb4, 0xf4, 0x30, 0x3b, 0xa6,
+			0xc8, 0x5b, 0x29, 0x84, 0xde, 0xc7, 0xa8, 0x32,
+			0xe8, 0xee, 0x2e, 0x8b, 0x85, 0x2b, 0x9f, 0xfd,
+			0x65, 0x5e, 0x6d, 0xf1, 0x89, 0x7a, 0x45, 0x08,
+			0xc1, 0x1d, 0xfe, 0xa4, 0x88, 0x7f, 0x77, 0xae,
+			0xa6, 0x28, 0x70, 0x3d, 0x6b, 0xb8, 0x8d, 0x7a,
+			0xee, 0x40, 0x9f, 0x05, 0xb0, 0xf1, 0x2c, 0x59,
+			0x79, 0x7c, 0xa9, 0x3f, 0x6e, 0xca, 0x96, 0x9e,
+			0xdf, 0x6d, 0xd8, 0x8c, 0xa3, 0x33, 0x16, 0xea,
+			0x0e, 0xae, 0x06, 0x51, 0x13, 0xf9, 0x08, 0x44,
+			0x32, 0xcc, 0xef, 0x5a, 0x2b, 0x09, 0x87, 0x85,
+			0xa2, 0xfb, 0xb3, 0xb4, 0xcb, 0xf2, 0xdb, 0x51,
+			0x59, 0x02, 0x87, 0x5f, 0x8e, 0xe6, 0x65, 0xe3,
+			0x37, 0x4f, 0x53, 0x16, 0xc3, 0x78, 0x4e, 0xba,
+			0x23, 0xef, 0x58, 0xfd, 0x90, 0x3c, 0xe6, 0xfb,
+			0xe0, 0x79, 0xbb, 0xc6, 0x48, 0x18, 0x79, 0xce,
+			0xf8, 0x0e, 0x10, 0xbc, 0x63, 0x1d, 0x77, 0xcd,
+			0x18, 0xd9, 0xe9, 0x8c, 0x15, 0x8a, 0x8f, 0x86,
+			0x1d, 0x86, 0x48, 0xd0, 0x53, 0x05, 0x69, 0x5a,
+			0x29, 0xb3, 0x11, 0xc8, 0x1e, 0x0c, 0x4c, 0xfa,
+			0x7d, 0x13, 0x12, 0x93, 0x01, 0xcf, 0x9f, 0xb2,
+			0x5d, 0xc0, 0xe6, 0x73, 0x8b, 0xf8, 0x39, 0xbd,
+			0xfe, 0xf4, 0x57, 0xd8, 0x38, 0xbe, 0x9e, 0x0b,
+			0x1d, 0xea, 0x1e, 0x18, 0x64, 0xb3, 0x74, 0x5c,
+			0x0f, 0x02, 0x51, 0x89, 0x7e, 0x7f, 0x4a, 0xcc,
+			0xff, 0xb1, 0xf6, 0x1b, 0x69, 0xb0, 0xdd, 0x1c,
+			0x31, 0x9e, 0xc4, 0x6e, 0x70, 0xd2, 0xad, 0x22,
+			0x7b, 0x80, 0xc5, 0xe0, 0xc2, 0x07, 0xd5, 0x02,
+			0x04, 0xb7, 0x15, 0x63, 0xb5, 0x55, 0x6e, 0x35,
+			0x3c, 0x48, 0xab, 0x29, 0xef, 0x1c, 0xe5, 0x64,
+			0x93, 0xab, 0x62, 0xb2, 0xd6, 0x7b, 0x1e, 0xe1,
+			0x6d, 0xd5, 0xe2, 0x6e, 0xaf, 0x9f, 0x59, 0x7d,
+			0xab, 0xef, 0xd4, 0xbd, 0x17, 0x13, 0xea, 0xb7,
+			0x43, 0xde, 0x90, 0x0f, 0x85, 0x31, 0x1b, 0x9f,
+			0xf5, 0x09, 0x96, 0x88, 0x99, 0xbc, 0x96, 0xc9,
+			0x58, 0x0d, 0x77, 0x33, 0xd2, 0x99, 0x55, 0xe6,
+			0xac, 0xe5, 0xa4, 0x53, 0x26, 0x23, 0xd0, 0xab,
+			0x0c, 0x05, 0xfc, 0xb4, 0xc0, 0x68, 0x7e, 0x99,
+			0x42, 0x76, 0x1d, 0x68, 0xf1, 0xb4, 0x70, 0xc3,
+			0xd5, 0xb4, 0x0f, 0xee, 0x4b, 0xb4, 0x95, 0x2f,
+			0x62, 0x64, 0x08, 0x20, 0x4e, 0xa5, 0xd1, 0xcb,
+			0x92, 0x61, 0x5c, 0xc7, 0x39, 0xfb, 0x21, 0x25,
+			0x01, 0x53, 0x11, 0xa2, 0x4a, 0x02, 0xcb, 0xae,
+			0x91, 0x90, 0xdb, 0xcb, 0x0b, 0x7b, 0x04, 0xcb,
+			0x41, 0x23, 0x4c, 0x89, 0x10, 0xb1, 0xa6, 0x5d,
+			0xd6, 0xba, 0x9f, 0xc6, 0x87, 0x08, 0xb9, 0x85,
+			0xb2, 0x97, 0x66, 0xe6, 0x97, 0xb2, 0xcc, 0xbd,
+			0x99, 0x7d, 0x48, 0xfe, 0xc3, 0x65, 0xa2, 0x13,
+			0x61, 0xce, 0x6a, 0xd4, 0x6b, 0x75, 0x38, 0x5a,
+			0xd2, 0xab, 0xff, 0xe6, 0xcb, 0x0f, 0xa6, 0x35,
+			0xc8, 0xfe, 0x08, 0x3f, 0x56, 0xac, 0xbd, 0x37,
+			0x20, 0xde, 0x1e, 0xc7, 0x44, 0xd3, 0xc3, 0x26,
+			0xeb, 0x2a, 0xb8, 0x3a, 0xb4, 0x24, 0x00, 0x77,
+			0x72, 0x00, 0xc7, 0x26, 0xfc, 0x2c, 0xd3, 0x35,
+			0xb0, 0x7c, 0x75, 0xe8, 0x4d, 0xec, 0xdc, 0xaf,
+			0xf1, 0x99, 0x81, 0x40, 0x05, 0x59, 0x23, 0x19,
+			0xa2, 0x4c, 0x1a, 0xf0, 0x59, 0x8e, 0xd6, 0x16,
+			0x61, 0x88, 0x09, 0x2b, 0x7e, 0x51, 0x0b, 0xcf,
+			0x5a, 0x6c, 0xca, 0x13, 0x87, 0x18, 0x16, 0x64,
+			0x51, 0xe4, 0x2a, 0x0f, 0xc0, 0x94, 0x1b, 0x74,
+			0xe9, 0x20, 0xbb, 0x4b, 0x13, 0xb1, 0xd3, 0xea,
+			0xf9, 0xcf, 0x56, 0x66, 0x5f, 0x2c, 0x98, 0x6e,
+			0x5d, 0x4b, 0x9c, 0x06, 0x0f, 0xd5, 0xdb, 0x84,
+			0xeb, 0x63, 0xb0, 0xa7, 0x15, 0xb3, 0x88, 0xf3,
+			0x2b, 0xf2, 0x5b, 0x09, 0x4a, 0xde, 0x17, 0xcc,
+			0x6b, 0x60, 0xe6, 0xfd, 0xc6, 0xaa, 0xa3, 0xb3,
+			0x6d, 0x1b, 0xdf, 0x2d, 0x03, 0xe5, 0xb3, 0x62,
+			0xae, 0x1f, 0x89, 0x8a, 0xc0, 0x21, 0x99, 0xb1,
+			0xce, 0x35, 0x6e, 0xdd, 0x15, 0x6a, 0x1e, 0xe6,
+			0x9a, 0x9f, 0x81, 0x68, 0xc2, 0xb3, 0x43, 0x33,
+			0x5d, 0xb3, 0x2f, 0x53, 0xfe, 0x26, 0x31, 0x7a,
+			0xf7, 0xda, 0xf5, 0x41, 0xd5, 0x13, 0x21, 0x9e,
+			0xb5, 0x0a, 0x61, 0xcf, 0xbe, 0xbf, 0x4c, 0x0a,
+			0xc5, 0xaa, 0xf1, 0x25, 0x6f, 0xd3, 0xee, 0xeb,
+			0x15, 0x92, 0xfb, 0x47, 0x8b, 0xe4, 0xc2, 0x3d,
+			0xf6, 0xfb, 0xa3, 0xdf, 0x6a, 0xcc, 0x87, 0x87,
+			0xfa, 0x0f, 0x32, 0xcb, 0xfe, 0x99, 0xe4, 0xc9,
+			0xf2, 0x93, 0x12, 0x11, 0xcd, 0xe7, 0x8c, 0x07,
+			0x1d, 0xc7, 0x31, 0x40, 0x04, 0x12, 0xf4, 0xb3,
+			0x05, 0x9d, 0x0e, 0x2e, 0x5a, 0x4c, 0xc8, 0x31,
+			0x35, 0xe4, 0xc5, 0x93, 0xc0, 0xe9, 0x26, 0x95,
+			0x7f, 0x9b, 0xe9, 0x9b, 0x50, 0x88, 0x7b, 0x75,
+			0x3b, 0x5c, 0x11, 0x53, 0xcd, 0x6d, 0x8d, 0x0d,
+			0x31, 0x18, 0x10, 0xcd, 0x9d, 0x06, 0xe3, 0x8f,
+			0xd3, 0x04, 0xa1, 0x8e, 0x7f, 0x4c, 0x31, 0xc9,
+			0xd0, 0x56, 0xb7, 0xf4, 0xdf, 0xef, 0x45, 0xd2,
+			0xba, 0xa8, 0x8a, 0x6d, 0xf5, 0xa0, 0x48, 0x58,
+			0xb5, 0xeb, 0x80, 0x41, 0xfb, 0x8b, 0xc1, 0xf5,
+			0x9e, 0x99, 0x7a, 0x02, 0x32, 0x90, 0x7b, 0xc6,
+			0xb7, 0x4d, 0xaf, 0xc1, 0x30, 0xfc, 0xb5, 0x79,
+			0xf0, 0xea, 0xd0, 0x9f, 0xc8, 0xb4, 0xb2, 0xb6,
+			0x8a, 0x69, 0x29, 0xcc, 0x81, 0x46, 0x47, 0xca,
+			0x92, 0x9b, 0xfb, 0x26, 0xa6, 0xae, 0x07, 0xdc,
+			0x24, 0x2d, 0xba, 0x63, 0x8f, 0x43, 0x31, 0x45,
+			0xcc, 0x91, 0x07, 0x15, 0x9f, 0x4a, 0x85, 0x76,
+			0x37, 0xc0, 0xc4, 0x04, 0x54, 0xc6, 0xce, 0x4f,
+			0x8d, 0xce, 0xa8, 0xe6, 0x67, 0x3f, 0xaa, 0xe4,
+			0x12, 0x48, 0x92, 0xec, 0x83, 0xf4, 0xe4, 0x6a,
+			0x94, 0x85, 0x23, 0xfb, 0x0b, 0xc9, 0x40, 0x57,
+			0xb3, 0x5c, 0x92, 0x17, 0xe5, 0x30, 0x35, 0xe1,
+			0x5f, 0x98, 0xb5, 0x28, 0x12, 0xce, 0x03, 0xfc,
+			0x9e, 0xe6, 0xef, 0x07, 0xf7, 0x72, 0x52, 0xc5,
+			0x56, 0xed, 0x80, 0xbd, 0x48, 0xba, 0xec, 0x9d,
+			0x12, 0xff, 0x6b, 0x56, 0x32, 0x26, 0x3e, 0xa8,
+			0x11, 0x58, 0xd9, 0x84, 0x7b, 0x26, 0x37, 0xff,
+			0xfe, 0xb5, 0x38, 0x3a, 0x99, 0xe1, 0xc1, 0x65,
+			0x8e, 0xe6, 0x03, 0xdf, 0x68, 0x3b, 0xf8, 0x5c,
+			0x8c, 0x41, 0xe4, 0x0f, 0x46, 0x12, 0xaa, 0xa3,
+			0xfd, 0xe5, 0x0e, 0x48, 0x70, 0x7d, 0x97, 0x37,
+			0xa4, 0x5a, 0x56, 0x76, 0x35, 0xff, 0xca, 0xb7,
+			0xf4, 0xbf, 0xb4, 0x53, 0x8f, 0x3e, 0xa8, 0xd6,
+			0xb5, 0x0f, 0xe8, 0x1a, 0x07, 0x8e, 0xeb, 0x79,
+			0x30, 0x68, 0xbf, 0xd3, 0x20, 0x2f, 0x43, 0x9d,
+			0x8f, 0x0f, 0xd3, 0x77, 0x83, 0x18, 0x00, 0x2b,
+			0xa2, 0xc8, 0xe7, 0xdf, 0x53, 0x3b, 0xf3, 0x73,
+			0x09, 0x83, 0x14, 0x35, 0xda, 0xe9, 0x53, 0x5e,
+			0x6e, 0x0d, 0xf4, 0xd3, 0xc1, 0xd5, 0x11, 0x2f,
+			0x68, 0xb3, 0x52, 0x61, 0xd3, 0x0b, 0x17, 0xf5,
+			0x0a, 0x89, 0xa0, 0x16, 0x17, 0x0c, 0xfe, 0x0f,
+			0x01, 0x0c, 0x1f, 0x94, 0xe2, 0xb0, 0x20, 0x72,
+			0xe2, 0xc3, 0x1d, 0x22, 0xa7, 0x69, 0x6d, 0x6e,
+			0x12, 0xe9, 0xc3, 0x8e, 0xea, 0x84, 0x37, 0xa4,
+			0xd2, 0xdf, 0x9e, 0xc0, 0xeb, 0xc2, 0xd2, 0x78,
+			0xeb, 0xfa, 0x8e, 0x71, 0x7a, 0xb9, 0xdf, 0x98,
+			0x33, 0xf0, 0x6d, 0xd8, 0xcf, 0xb9, 0x55, 0xd9,
+			0x37, 0xa7, 0x97, 0x97, 0xb7, 0x7f, 0xcf, 0x88,
+			0x33, 0xda, 0xf3, 0xb8, 0xd9, 0x7f, 0x2f, 0xe1,
+			0x19, 0xe7, 0xf1, 0xb8, 0xb1, 0xaa, 0x96, 0x34,
+			0xde, 0x3b, 0x1e, 0x7c, 0xfb, 0xfc, 0xc2, 0x36,
+			0xe7, 0xca, 0xf4, 0xa3, 0x10, 0x18, 0x74, 0xdb,
+			0x85, 0xe9, 0xe0, 0xfd, 0x0e, 0x13, 0x9c, 0x54,
+			0x93, 0x2d, 0x08, 0x34, 0x76, 0xf2, 0x4f, 0xb8,
+			0x7b, 0xb5, 0xc6, 0xee, 0xf3, 0x03, 0xb9, 0xd1,
+			0x9f, 0xf8, 0xd0, 0x36, 0x58, 0xee, 0xf1, 0x12,
+			0x40, 0x85, 0x01, 0x02, 0x84, 0x95, 0xdc, 0x62,
+			0xe4, 0xe2, 0xd3, 0x5c, 0x2b, 0xab, 0x93, 0xcd,
+			0x82, 0x93, 0x2d, 0xe8, 0x7b, 0x89, 0x61, 0xbf,
+			0xf9, 0xc9, 0x5a, 0xb1, 0x28, 0x99, 0xa6, 0x15,
+			0x77, 0x61, 0x64, 0xab, 0xd5, 0xc4, 0x91, 0xb4,
+			0x37, 0x91, 0xbc, 0xfa, 0xd9, 0xe7, 0xed, 0x7d,
+			0x6d, 0x1a, 0xdf, 0x9a, 0xb0, 0xe1, 0x6f, 0xf3,
+			0x4c, 0x2a, 0x3c, 0x42, 0xd0, 0xde, 0x1c, 0x32,
+			0x83, 0xbb, 0xa7, 0xdc, 0x09, 0x4c, 0x76, 0xad,
+			0xe3, 0x13, 0x1f, 0xab, 0x2e, 0x3b, 0x04, 0x17,
+			0x72, 0xcd, 0xd8, 0xc4, 0x73, 0x61, 0x65, 0xec,
+			0x38, 0x72, 0xd5, 0x30, 0x74, 0x91, 0xba, 0x2b,
+			0x9c, 0xe0, 0xeb, 0x63, 0x2a, 0x59, 0xab, 0x0b,
+			0x74, 0x96, 0xc1, 0x0b, 0x73, 0xed, 0x73, 0x27,
+			0x7d, 0x6f, 0x0d, 0x82, 0x11, 0xda, 0x6d, 0x7a,
+			0xce, 0xea, 0xf7, 0xbf, 0xad, 0x16, 0x07, 0x2c,
+			0xb1, 0x07, 0x73, 0x82, 0xc6, 0x88, 0x77, 0xcf,
+			0x7c, 0x64, 0x64, 0xc5, 0xba, 0xca, 0x94, 0xe6,
+			0x79, 0x39, 0x84, 0xf2, 0x3f, 0xc8, 0x7a, 0x7b,
+			0x0e, 0x25, 0xf7, 0xe9, 0xaf, 0xdb, 0x95, 0x76,
+			0xc8, 0x97, 0x85, 0xe7, 0xb6, 0xf7, 0x03, 0x19,
+			0x0c, 0x10, 0xf7, 0xca, 0x2c, 0xc2, 0xcb, 0x4d,
+			0x98, 0x2b, 0x88, 0x89, 0x23, 0x3b, 0x21, 0x55,
+			0xc9, 0xf3, 0xfe, 0x98, 0x9b, 0xf4, 0x88, 0x5e,
+			0xbb, 0x03, 0xf8, 0x44, 0x3a, 0xd7, 0x58, 0xa7,
+			0xde, 0xec, 0x97, 0x0d, 0xc2, 0xe0, 0x11, 0xf1,
+			0x86, 0x2b, 0x1d, 0xe2, 0x59, 0x2a, 0x86, 0xe5,
+			0x8f, 0x58, 0xd2, 0x37, 0x87, 0x43, 0x1d, 0xeb,
+			0xe5, 0x3a, 0xbe, 0xeb, 0x54, 0x81, 0xf3, 0x24,
+			0xc9, 0xb6, 0x6e, 0xd5, 0xb8, 0x50, 0x22, 0xc8,
+			0x0f, 0x02, 0x1a, 0x6e, 0x77, 0x4d, 0x21, 0x6d,
+			0x4c, 0x43, 0x75, 0x62, 0x32, 0xe6, 0x2a, 0x23,
+			0xe9, 0x07, 0x87, 0xca, 0x85, 0x52, 0x02, 0xd9,
+			0x41, 0x01, 0x39, 0x44, 0x2e, 0x87, 0xbc, 0xfa,
+			0x02, 0x29, 0xb6, 0x46, 0xb5, 0x00, 0xb5, 0x0c,
+			0x08, 0x61, 0x66, 0xd9, 0xf0, 0x45, 0x19, 0xc2,
+			0xac, 0x84, 0x81, 0x5a, 0x17, 0x5c, 0x4e, 0x0c,
+			0x7e, 0xa2, 0xd3, 0x1d, 0xd7, 0xc4, 0xa3, 0x7b,
+			0x51, 0x2b, 0x61, 0x15, 0x14, 0xa9, 0x6c, 0x33,
+			0x30, 0x1b, 0x27, 0xc4, 0xd0, 0x57, 0xda, 0x3d,
+			0x85, 0x87, 0xa0, 0xb4, 0x0d, 0x80, 0xc1, 0x8e,
+			0x95, 0x23, 0x35, 0xa9, 0xde, 0xa7, 0x6c, 0x8b,
+			0x7c, 0xb5, 0xd3, 0xd5, 0x08, 0x05, 0x80, 0x98,
+			0xfa, 0x65, 0xef, 0x98, 0xb5, 0x22, 0x7c, 0x30,
+			0xf6, 0xf0, 0x5e, 0x1c, 0x53, 0x5e, 0x30, 0x4c,
+			0x4c, 0xf8, 0x3a, 0xd4, 0x46, 0x61, 0x88, 0xb0,
+			0x22, 0x65, 0xa8, 0xc4, 0x10, 0xbd, 0xf9, 0x27,
+			0x39, 0xec, 0x36, 0xe5, 0xe4, 0x19, 0x68, 0x1b,
+			0x4b, 0xb5, 0xd3, 0x47, 0x9b, 0x72, 0x6c, 0xa0,
+			0x6c, 0x2e, 0xf4, 0xe3, 0xef, 0x99, 0xb9, 0x86,
+			0x71, 0x7a, 0x87, 0xa9, 0x36, 0xb3, 0x2e, 0xa3,
+			0xad, 0xe3, 0xb6, 0x8d, 0xc8, 0x1b, 0xc0, 0x3e,
+			0x82, 0xec, 0xeb, 0xe8, 0x8f, 0xf8, 0x61, 0xed,
+			0x7a, 0xe2, 0xd9, 0x6e, 0x87, 0x0e, 0xcf, 0x83,
+			0x08, 0x2c, 0xf7, 0x0c, 0x51, 0x5e, 0x06, 0xca,
+			0x22, 0xa2, 0x04, 0x5d, 0x31, 0xb5, 0x6d, 0xb5,
+			0x2a, 0xed, 0xf9, 0xb7, 0x24, 0xb6, 0x9e, 0xa1,
+			0xe2, 0xed, 0x56, 0x29, 0x1f, 0x5e, 0x56, 0xb1,
+			0xf6, 0xe2, 0x61, 0x95, 0xdf, 0xdd, 0xe7, 0x6e,
+			0x33, 0x1b, 0x38, 0xdd, 0xbb, 0x5c, 0x6c, 0x42,
+			0x52, 0x9e, 0x21, 0x20, 0x9e, 0x5b, 0xd5, 0x2b,
+			0x22, 0x4a, 0x85, 0xd0, 0x09, 0x7c, 0x47, 0x4b,
+			0xdd, 0xe5, 0xd7, 0x26, 0x55, 0x86, 0x98, 0x76,
+			0x37, 0xdf, 0x43, 0x7f, 0x3a, 0x54, 0xbc, 0x61,
+			0xef, 0x26, 0xfe, 0xc0, 0xe6, 0xc3, 0xc9, 0xca,
+			0xd1, 0x46, 0xdf, 0x53, 0xd3, 0xb6, 0xbf, 0x37,
+			0x58, 0x8e, 0x2e, 0x02, 0xa4, 0xfc, 0x82, 0xef,
+			0x96, 0xfc, 0x07, 0x7a, 0x0f, 0x91, 0xe3, 0xbf,
+			0x32, 0x8a, 0xc8, 0xee, 0xf1, 0x6d, 0xac, 0xd4,
+			0x3e, 0x58, 0xa9, 0x26, 0x29, 0x8a, 0xdd, 0x5a,
+			0x7c, 0xdd, 0xc1, 0x6a, 0x04, 0x52, 0x04, 0x69,
+			0x09, 0x53, 0xe1, 0xb2, 0x48, 0x6e, 0xd7, 0x96,
+			0xa4, 0x1b, 0xcf, 0xf0, 0x75, 0x11, 0xe0, 0xa3,
+			0xca, 0x5d, 0xd9, 0x9a, 0xa7, 0xee, 0xc5, 0x13,
+			0x41, 0x2b, 0x3b, 0xed, 0xca, 0xec, 0xc6, 0x7b,
+			0x0a, 0x72, 0x56, 0x1a, 0x47, 0x19, 0xc1, 0xf5,
+			0x36, 0x37, 0xab, 0x23, 0x8e, 0xed, 0xdc, 0x3d,
+			0xf6, 0xc9, 0xb1, 0x17, 0x36, 0xd6, 0xba, 0x63,
+			0x62, 0x7e, 0xbd, 0x83, 0xfa, 0xbe, 0x36, 0x26,
+			0x3e, 0xb3, 0xec, 0x59, 0xbd, 0xaf, 0xd3, 0x9e,
+			0x38, 0xca, 0x62, 0x04, 0x95, 0x77, 0x5c, 0xf4,
+			0xb4, 0x2a, 0x4c, 0xcb, 0x91, 0x83, 0xe8, 0xcf,
+			0x04, 0x6c, 0x0a, 0x02, 0x41, 0x18, 0x5d, 0x75,
+			0xf1, 0xa5, 0x11, 0x38, 0x0e, 0x65, 0x83, 0x76,
+			0x83, 0xa5, 0xf3, 0xd7, 0xd1, 0x81, 0xf6, 0xf8,
+			0x51, 0xb0, 0xd7, 0x5d, 0x88, 0x3e, 0xe9, 0xcf,
+			0xcd, 0xe0, 0x8a, 0x1c, 0x00, 0xb7, 0x40, 0x3d,
+			0x55, 0x67, 0xbd, 0x3a, 0x93, 0x16, 0x58, 0xb5,
+			0xe0, 0xaa, 0xe3, 0x66, 0x33, 0xe2, 0x25, 0x78,
+			0x5c, 0xec, 0x02, 0xd1, 0x7b, 0x2e, 0xea, 0xd0,
+			0x4e, 0xe7, 0x5a, 0xc5, 0xc6, 0x15, 0xe5, 0xfe,
+			0xad, 0x46, 0x72, 0xd0, 0x57, 0x68, 0x8d, 0x63,
+			0xcb, 0x8a, 0x0a, 0x76, 0xa0, 0xd0, 0x71, 0xa1,
+			0x49, 0xc6, 0xb8, 0x20, 0x4c, 0x65, 0xee, 0x60,
+			0x1c, 0xeb, 0x2a, 0x94, 0xe9, 0x51, 0x13, 0x17,
+			0xcc, 0x37, 0xaf, 0x05, 0x4e, 0x0c, 0x97, 0xb9,
+			0x6e, 0xae, 0x84, 0x05, 0x44, 0x1f, 0x02, 0xc3,
+			0x94, 0x2b, 0xfa, 0x8e, 0xe5, 0xb0, 0x5e, 0x4d,
+			0xf8, 0xc0, 0x6b, 0xa5, 0x88, 0x08, 0xc3, 0x39,
+			0x7a, 0x06, 0xc0, 0x70, 0xe4, 0xa5, 0x75, 0xa6,
+			0xaf, 0x6f, 0x72, 0xc6, 0x01, 0x64, 0xee, 0xf0,
+			0xa0, 0xd5, 0x29, 0x2c, 0x98, 0x1e, 0xf9, 0x9a,
+			0xfe, 0x26, 0x14, 0xb9, 0xe0, 0x20, 0x07, 0xf9,
+			0x79, 0x5a, 0x24, 0xce, 0xe9, 0xe0, 0x24, 0xd6,
+			0xc4, 0x66, 0x79, 0x0f, 0x33, 0x83, 0x5f, 0x65,
+			0x3e, 0xf8, 0xb3, 0x9c, 0x25, 0x6e, 0xe9, 0x58,
+			0x1e, 0x6c, 0xae, 0x97, 0x2d, 0xb0, 0x20, 0x5f,
+			0x5b, 0x00, 0x68, 0x2e, 0x5c, 0x02, 0x3d, 0x97,
+			0x03, 0x83, 0xb7, 0xae, 0xc5, 0x50, 0x70, 0x7b,
+			0xc9, 0x57, 0xa8, 0x8e, 0xc7, 0x89, 0x46, 0xa8,
+			0xf4, 0x69, 0x12, 0x82, 0x62, 0x0d, 0x11, 0xe6,
+			0x00, 0xc8, 0xd0, 0xdc, 0xe6, 0x0d, 0xb2, 0xa8,
+			0x4c, 0xbd, 0xe2, 0x51, 0x07, 0x79, 0x61, 0x50,
+			0xa7, 0xb0, 0x08, 0x3c, 0xd3, 0x77, 0xdb, 0x20,
+			0xf8, 0x26, 0x81, 0x60, 0xfa, 0xd8, 0xeb, 0x66,
+			0x36, 0xce, 0x6c, 0x18, 0x2e, 0xaf, 0x97, 0xa4,
+			0xa6, 0x10, 0x06, 0x30, 0x71, 0xee, 0x59, 0x6e,
+			0x0c, 0x70, 0x0f, 0x0e, 0x64, 0xf9, 0x8a, 0x54,
+			0x66, 0xa8, 0x53, 0xaa, 0x0c, 0x7c, 0xf8, 0xda,
+			0x63, 0xd8, 0x0d, 0x04, 0xff, 0xfd, 0xbb, 0x61,
+			0x88, 0x65, 0x14, 0xd7, 0x7a, 0x9a, 0x90, 0xdd,
+			0x04, 0xe6, 0xf6, 0x15, 0xf8, 0xef, 0xf4, 0x26,
+			0x5c, 0xdb, 0x20, 0x5a, 0x65, 0x25, 0x4b, 0x55,
+			0xb6, 0x7a, 0x91, 0x9c, 0xb0, 0x24, 0x28, 0x35,
+			0xaa, 0xea, 0x02, 0xcc, 0x87, 0x4a, 0x06, 0xd3,
+			0xc6, 0x59, 0xd3, 0xfe, 0x35, 0xe6, 0x49, 0xf6,
+			0x99, 0x14, 0x99, 0x50, 0xd9, 0x25, 0xc3, 0x01,
+			0x47, 0xcd, 0xbc, 0x06, 0x9a, 0xb8, 0x8e, 0x79,
+			0xe9, 0xeb, 0xa6, 0x3c, 0x12, 0xf7, 0xca, 0xda,
+			0x28, 0x22, 0x85, 0x13, 0xe9, 0x3f, 0x37, 0xc5,
+			0x9c, 0x04, 0x54, 0xab, 0x49, 0x73, 0xe7, 0xb4,
+			0xd1, 0xf4, 0x22, 0x85, 0x88, 0xb2, 0xdd, 0xb0,
+			0x2d, 0xfa, 0xcb, 0xa8, 0xd2, 0xc4, 0x22, 0xda,
+			0xb7, 0x9f, 0xf4, 0x8c, 0xf4, 0xac, 0xd6, 0xef,
+			0x81, 0x46, 0x68, 0x61, 0x2b, 0xef, 0xab, 0xc3,
+			0x9b, 0x99, 0xb0, 0x05, 0x4e, 0xce, 0x92, 0x76,
+			0x0c, 0xb3, 0x6f, 0xe6, 0x6b, 0xd8, 0xb0, 0x8f,
+			0x0a, 0x23, 0xff, 0x82, 0x91, 0xa0, 0x5f, 0x15,
+			0xc6, 0xf9, 0x6e, 0x6a, 0x82, 0x58, 0xbf, 0xbd,
+			0xb0, 0x37, 0x18, 0xd8, 0xe5, 0x1a, 0x7d, 0x60,
+			0x1a, 0xc3, 0x91, 0xa5, 0xa5, 0x2b, 0x21, 0x71,
+			0x7b, 0xa7, 0x4f, 0xb0, 0xfd, 0x7f, 0x6b, 0xaa,
+			0x4d, 0xc1, 0x47, 0xf9, 0x9f, 0x41, 0xbe, 0x94,
+			0x7c, 0x45, 0x02, 0xb1, 0xb5, 0x01, 0xb2, 0xd3,
+			0xaf, 0xcd, 0x98, 0x80, 0x26, 0x9b, 0x6d, 0x87,
+			0xd4, 0xe7, 0x6f, 0x34, 0x49, 0x33, 0x4f, 0x62,
+			0x06, 0x99, 0x02, 0x82, 0x66, 0x45, 0xaa, 0x9a,
+			0x8c, 0x1c, 0x37, 0x1d, 0xfe, 0x32, 0x0f, 0x74,
+			0x0f, 0x51, 0x3a, 0x55, 0x9b, 0xcb, 0x9d, 0xb7,
+			0x64, 0x49, 0xe9, 0xe9, 0x74, 0xaf, 0x40, 0xde,
+			0x0b, 0x8b, 0xb4, 0x8f, 0x6e, 0x3d, 0x4e, 0x04,
+			0xd7, 0x1e, 0xb9, 0xee, 0xd1, 0x7e, 0xa9, 0x65,
+			0x80, 0x2a, 0xb1, 0x85, 0xec, 0xaa, 0x67, 0x3b,
+			0x07, 0x5c, 0xdb, 0x49, 0xd1, 0xbb, 0x4b, 0x56,
+			0x3b, 0x3e, 0x48, 0xbf, 0x82, 0xd0, 0x1a, 0xd6,
+			0x43, 0xe2, 0xf1, 0x56, 0x32, 0xc1, 0xad, 0x02,
+			0xf3, 0xac, 0x5d, 0x5b, 0x30, 0x18, 0xcf, 0x17,
+			0x47, 0x72, 0x36, 0x2c, 0x23, 0xed, 0x0f, 0x23,
+			0xa4, 0xb5, 0x6f, 0x95, 0x6a, 0xde, 0x62, 0xd8,
+			0xeb, 0x33, 0xb0, 0x50, 0x2b, 0x50, 0xcf, 0xab,
+			0x5d, 0x0b, 0x43, 0x09, 0x55, 0xb8, 0xe7, 0xba,
+			0xb4, 0xa1, 0xae, 0x74, 0x0a, 0x96, 0x15, 0xf8,
+			0xe5, 0x67, 0xd0, 0x90, 0xeb, 0x31, 0x65, 0xe9,
+			0x5c, 0x9f, 0x84, 0x96, 0xb4, 0x09, 0xad, 0xc1,
+			0x61, 0x85, 0x32, 0xe5, 0xcd, 0xfc, 0x3e, 0xf5,
+			0xde, 0xe4, 0x37, 0xa4, 0x58, 0xc6, 0xfa, 0xea,
+			0xba, 0x4c, 0x93, 0x73, 0xfd, 0x3a, 0x33, 0x9e,
+			0x13, 0x36, 0xfd, 0x36, 0x0c, 0x17, 0xc8, 0x78,
+			0xee, 0x18, 0xc3, 0x1c, 0xb5, 0x43, 0x04, 0xb5,
+			0xa2, 0x45, 0xbd, 0xf6, 0x7e, 0x26, 0xce, 0xa5,
+			0x46, 0xc7, 0x3f, 0x9d, 0x80, 0x24, 0x41, 0x45,
+			0xd2, 0xa3, 0xec, 0x2d, 0x92, 0xbc, 0x77, 0xd2,
+			0x45, 0xc9, 0x7e, 0x89, 0xc7, 0x40, 0xfd, 0xe9,
+			0x59, 0x02, 0x28, 0x8c, 0x73, 0x6f, 0xeb, 0x1a,
+			0x6a, 0x4e, 0x79, 0x23, 0x92, 0xed, 0xc9, 0x56,
+			0x25, 0xb3, 0x13, 0x76, 0x3c, 0xee, 0x7f, 0x14,
+			0x2f, 0xa1, 0x8f, 0x28, 0x3d, 0xbe, 0x7f, 0xbe,
+			0x1a, 0x10, 0xa7, 0x68, 0xf9, 0x5d, 0x48, 0x71,
+			0xaa, 0x1e, 0x42, 0x91, 0x3c, 0x47, 0xb6, 0xf5,
+			0x48, 0x1d, 0x8f, 0xa8, 0x8a, 0x9e, 0xa4, 0xea,
+			0x4b, 0xcb, 0xea, 0x96, 0xe6, 0x67, 0xa4, 0xf9,
+			0x3c, 0xba, 0x7a, 0x5a, 0x9e, 0x5e, 0xee, 0x11,
+			0xdd, 0xaa, 0xda, 0xa2, 0xf2, 0xf9, 0xa6, 0x5b,
+			0xbd, 0x62, 0x23, 0x2b, 0x7c, 0x7f, 0x23, 0xec,
+			0x1a, 0x2c, 0x49, 0x52, 0xa0, 0xd6, 0x08, 0x12,
+			0x22, 0x2d, 0x3e, 0x3f, 0x90, 0x99, 0xbf, 0xf2,
+			0x40, 0x54, 0x73, 0x7c, 0xe5, 0xf7, 0x1f, 0x43,
+			0x92, 0xaf, 0xb3, 0xd7, 0x3d, 0x53, 0x62, 0x68,
+			0x79, 0xea, 0x50, 0x7e, 0x82, 0x83, 0xa8, 0xae,
+			0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
+			0x10, 0x16, 0x1c, 0x22, 0x29, },
+	}, {
+		.what = "pure rejection vector",
+		.algo = "ml-dsa65",
+		.pk_len = DILITHIUM65_PUBLICKEYBYTES,
+		.pk = (const u8[DILITHIUM65_PUBLICKEYBYTES]){
+			0xe8, 0xd0, 0x2e, 0x36, 0x7d, 0x73, 0x4e, 0xc4,
+			0x1c, 0xf6, 0xda, 0x86, 0x13, 0xcf, 0xfd, 0x49,
+			0xcd, 0x53, 0xd2, 0x13, 0x5f, 0xfa, 0x28, 0xf0,
+			0x49, 0x2d, 0x0c, 0x20, 0x21, 0x02, 0xdc, 0x87,
+			0x87, 0x9c, 0x19, 0xe8, 0x97, 0x51, 0x5a, 0x02,
+			0x30, 0x57, 0x9c, 0x68, 0xc0, 0x56, 0x0d, 0x2c,
+			0x75, 0x36, 0xa4, 0x4d, 0x76, 0x6e, 0x60, 0xb8,
+			0x6a, 0x0a, 0x2a, 0xb7, 0x8d, 0x6f, 0x44, 0x0e,
+			0xd1, 0xdb, 0xd5, 0x63, 0x87, 0xa4, 0xc2, 0xcb,
+			0x7b, 0x46, 0x28, 0x4e, 0xd9, 0xf7, 0x9d, 0x8e,
+			0xc4, 0xc0, 0x61, 0x93, 0x2d, 0xa1, 0xf8, 0x56,
+			0x10, 0xdf, 0xbb, 0x7a, 0xac, 0x79, 0x9a, 0x2f,
+			0xd3, 0xe7, 0x2f, 0xd1, 0x1c, 0xee, 0xa9, 0xe2,
+			0x82, 0x45, 0x9e, 0x8a, 0x6b, 0x91, 0xcd, 0x91,
+			0x3c, 0xcd, 0x73, 0x85, 0x83, 0x60, 0x57, 0x4e,
+			0x86, 0x59, 0x5f, 0x5b, 0xa7, 0xf9, 0x00, 0x2b,
+			0xba, 0x4e, 0x4c, 0xc6, 0x0e, 0x7d, 0x1b, 0xef,
+			0x11, 0x23, 0x1b, 0x48, 0x4f, 0xba, 0x5a, 0x40,
+			0xb2, 0xea, 0x86, 0xcf, 0xc0, 0xb2, 0x69, 0x19,
+			0x43, 0x75, 0x95, 0x5b, 0x7f, 0xd7, 0x12, 0x39,
+			0xcd, 0xf5, 0x92, 0xad, 0xda, 0xc9, 0xc1, 0x4b,
+			0xde, 0xcb, 0x99, 0xbf, 0xa8, 0x19, 0x5b, 0x68,
+			0x0d, 0xd1, 0x11, 0xa9, 0x39, 0x0f, 0xb4, 0x00,
+			0xa0, 0xf3, 0xd8, 0x51, 0xd0, 0x4d, 0xfe, 0x07,
+			0xe4, 0x10, 0x76, 0x24, 0xf5, 0xec, 0x1a, 0xd5,
+			0xad, 0x52, 0x13, 0xe7, 0x39, 0xfb, 0x53, 0x0f,
+			0x62, 0xff, 0xfd, 0xa0, 0xd4, 0x9b, 0xb2, 0x53,
+			0xce, 0xfa, 0xcd, 0x7a, 0xce, 0x8e, 0x65, 0xf1,
+			0xcf, 0x9c, 0x97, 0x64, 0xd8, 0x37, 0xfe, 0xa5,
+			0xa8, 0x46, 0xdf, 0xba, 0xc6, 0xdb, 0x35, 0xc0,
+			0xf4, 0x0b, 0x3b, 0xa7, 0xdd, 0x75, 0x7a, 0x06,
+			0x78, 0x53, 0x95, 0xd3, 0x96, 0x89, 0x53, 0x4d,
+			0x2c, 0xc6, 0xcf, 0xfa, 0xab, 0x1d, 0xb9, 0x2e,
+			0x79, 0x25, 0xe4, 0x30, 0x1d, 0x75, 0x8f, 0x5a,
+			0x93, 0x86, 0xd0, 0x2b, 0xb3, 0x0a, 0x7d, 0xec,
+			0x46, 0xde, 0x32, 0x3b, 0x61, 0xea, 0xae, 0x93,
+			0x94, 0xa3, 0xd2, 0x38, 0xc9, 0x0f, 0x34, 0x5a,
+			0xed, 0x84, 0x31, 0xcf, 0x78, 0x9a, 0xcd, 0xf8,
+			0xf3, 0x98, 0xf2, 0x4e, 0x89, 0xa2, 0xbb, 0x7b,
+			0xdb, 0x1c, 0xa5, 0xcc, 0x37, 0x4a, 0x28, 0xaf,
+			0xdc, 0xe7, 0x1c, 0x3c, 0x65, 0x7d, 0xad, 0xb2,
+			0xa1, 0x1e, 0x07, 0x22, 0x66, 0x48, 0x89, 0x14,
+			0x0c, 0x0e, 0xba, 0xef, 0x54, 0xbc, 0xb5, 0xcb,
+			0xa5, 0x2b, 0x3b, 0x59, 0x9e, 0x7c, 0xc9, 0x01,
+			0xa8, 0xcb, 0xf4, 0x34, 0x01, 0x33, 0x7d, 0x61,
+			0x12, 0x49, 0x63, 0x8b, 0xba, 0x81, 0xf2, 0xd9,
+			0x2b, 0x94, 0xdf, 0xbb, 0xe2, 0x7c, 0x22, 0x92,
+			0xd3, 0x49, 0xd6, 0x84, 0x28, 0x50, 0x8e, 0xf0,
+			0x1d, 0x5a, 0x69, 0xd9, 0x7a, 0xc1, 0x29, 0x83,
+			0x89, 0x0e, 0xfc, 0xd0, 0xb0, 0xf1, 0x1d, 0xb6,
+			0x92, 0xa4, 0xbb, 0x38, 0x2e, 0x57, 0x44, 0x11,
+			0xba, 0x5c, 0x9e, 0xba, 0x56, 0x27, 0xa2, 0xf4,
+			0xb5, 0xe6, 0x29, 0x19, 0x05, 0x3b, 0xb1, 0x4e,
+			0x42, 0x37, 0x7c, 0x3c, 0xde, 0x7d, 0x57, 0x27,
+			0x15, 0x63, 0xf6, 0x9f, 0xa6, 0xdd, 0x6c, 0xfb,
+			0xde, 0x86, 0xa3, 0x40, 0xbf, 0xf0, 0x37, 0xcf,
+			0x8a, 0x65, 0x5c, 0x95, 0xdb, 0x0c, 0x9d, 0xf7,
+			0x8d, 0x8f, 0xe1, 0x21, 0x9b, 0x5e, 0x99, 0xba,
+			0xb0, 0x95, 0x71, 0x4c, 0x83, 0x0b, 0x53, 0x21,
+			0xee, 0x17, 0x3f, 0x9e, 0xf7, 0x88, 0x29, 0x68,
+			0x22, 0x8f, 0xd2, 0x68, 0x47, 0x8c, 0x4d, 0x6e,
+			0xf8, 0x4d, 0xc2, 0x6d, 0xcd, 0x46, 0x99, 0x4c,
+			0x97, 0xe7, 0x57, 0x39, 0xfb, 0x80, 0x49, 0x4a,
+			0x44, 0x8d, 0x54, 0x2e, 0x8e, 0x22, 0x24, 0x3f,
+			0x98, 0x64, 0x34, 0x1d, 0x49, 0xa9, 0xe1, 0x2a,
+			0x64, 0x40, 0xde, 0x06, 0x9b, 0xf6, 0x3f, 0x9d,
+			0x34, 0x5b, 0x39, 0x54, 0x45, 0x08, 0x78, 0x88,
+			0xd7, 0x1c, 0x72, 0xe0, 0xe3, 0x0d, 0x12, 0x4e,
+			0x11, 0x2c, 0xe2, 0xe4, 0xa8, 0x53, 0xd1, 0x6a,
+			0x81, 0x71, 0x80, 0x8a, 0xde, 0x47, 0x62, 0x22,
+			0x54, 0x8a, 0x87, 0xf8, 0x31, 0xb9, 0x3e, 0x38,
+			0x9e, 0xfc, 0xc0, 0xc7, 0x67, 0x5c, 0x1f, 0xa0,
+			0xff, 0xc1, 0x43, 0xa2, 0xc6, 0x8e, 0xfd, 0xde,
+			0x0b, 0xde, 0xb3, 0xd8, 0xb4, 0xd2, 0xfd, 0xc6,
+			0x9c, 0x81, 0xe9, 0x00, 0xc0, 0x46, 0x98, 0x09,
+			0xdb, 0x73, 0xfe, 0x97, 0xd1, 0x4d, 0xff, 0x3a,
+			0xbf, 0xd4, 0xd7, 0x2b, 0x4f, 0x90, 0xf6, 0xd5,
+			0x12, 0x49, 0xbc, 0xb9, 0xab, 0x8f, 0x44, 0xf1,
+			0xaa, 0xef, 0x6b, 0x6f, 0x68, 0x05, 0x96, 0x1c,
+			0x09, 0x83, 0x3c, 0x76, 0xa9, 0xe4, 0x22, 0x00,
+			0x9c, 0x76, 0xa6, 0x9d, 0xe5, 0xdb, 0xb5, 0x91,
+			0xa2, 0x67, 0x8c, 0xb6, 0xda, 0xb0, 0xe2, 0xb5,
+			0x80, 0x42, 0x23, 0x3a, 0x8d, 0xca, 0x8f, 0x77,
+			0xf3, 0x13, 0x18, 0x4f, 0xc7, 0x68, 0xaf, 0x5e,
+			0x68, 0x04, 0xc7, 0x6b, 0xa9, 0x88, 0x03, 0x3d,
+			0xb4, 0x0f, 0x2d, 0x60, 0x0d, 0x5b, 0xa4, 0x03,
+			0xd8, 0x97, 0x1a, 0x38, 0x24, 0x05, 0x1b, 0x6a,
+			0xd8, 0x25, 0x34, 0xe4, 0x53, 0xab, 0x80, 0xcc,
+			0x71, 0x17, 0x82, 0x3f, 0xa8, 0x67, 0xb8, 0x84,
+			0xde, 0xab, 0x2f, 0xf7, 0x5d, 0x63, 0xba, 0xd6,
+			0x1b, 0x94, 0xae, 0x06, 0x93, 0xea, 0x7e, 0xc6,
+			0x7c, 0x22, 0x6d, 0xaa, 0xc6, 0xf2, 0xee, 0x38,
+			0x1b, 0x24, 0x7e, 0x6e, 0x7d, 0xcf, 0x68, 0xcd,
+			0x30, 0xb1, 0x8e, 0x42, 0x8b, 0xd8, 0x97, 0xb2,
+			0xfb, 0x03, 0x99, 0x07, 0xf6, 0x13, 0x0e, 0xda,
+			0x3f, 0x50, 0x4b, 0x94, 0x7f, 0x41, 0x63, 0x1d,
+			0xa6, 0xcc, 0x8e, 0xff, 0xf7, 0x7d, 0x05, 0x1f,
+			0x73, 0x7e, 0xaf, 0xbc, 0x14, 0xdd, 0x3c, 0x61,
+			0xbd, 0x96, 0xa1, 0x12, 0xd5, 0xb0, 0xc2, 0xeb,
+			0x27, 0x3b, 0x97, 0x0d, 0xc6, 0x78, 0xfa, 0x97,
+			0x63, 0xee, 0xce, 0xfe, 0xe2, 0x33, 0x66, 0x36,
+			0xd6, 0x41, 0x52, 0xfa, 0xd1, 0x6a, 0xb3, 0x62,
+			0x01, 0x07, 0xd8, 0x12, 0xc3, 0xc0, 0xe3, 0xd7,
+			0x40, 0x86, 0xe3, 0x13, 0xa1, 0x11, 0xc6, 0x05,
+			0xe3, 0x84, 0xa3, 0x76, 0xa2, 0x0c, 0x60, 0xca,
+			0x42, 0xbe, 0x0c, 0x3d, 0x04, 0x91, 0xe3, 0xc2,
+			0xd3, 0xbd, 0x0c, 0xd3, 0x0d, 0x24, 0x7b, 0x5f,
+			0x19, 0xe4, 0x79, 0x59, 0xf1, 0x47, 0x1a, 0xd4,
+			0x4c, 0xc6, 0x23, 0x5e, 0x4f, 0x3e, 0x54, 0x0d,
+			0x06, 0x70, 0xb4, 0x50, 0x7e, 0xe8, 0xfb, 0x78,
+			0x5c, 0x09, 0x26, 0x1a, 0x3f, 0xf7, 0x24, 0x70,
+			0x9c, 0x54, 0xc7, 0xdd, 0x27, 0x5f, 0x11, 0x75,
+			0x96, 0x5c, 0xad, 0xfe, 0x5f, 0x7c, 0x42, 0x4f,
+			0x3d, 0xa7, 0x1e, 0x6f, 0x7e, 0x6f, 0xdc, 0xd7,
+			0xad, 0x0f, 0xf9, 0x6f, 0xb1, 0xfd, 0xca, 0xdf,
+			0xcf, 0x59, 0xe4, 0x86, 0x69, 0x37, 0x34, 0xaa,
+			0xc8, 0xe2, 0xca, 0x3b, 0xcc, 0x48, 0x86, 0xe3,
+			0xee, 0xea, 0x25, 0x54, 0x94, 0x1b, 0x30, 0xbd,
+			0x39, 0xb0, 0xe3, 0x41, 0xa5, 0xab, 0x03, 0x7b,
+			0x12, 0xfb, 0x1f, 0x6e, 0x4e, 0xaa, 0xf5, 0x41,
+			0xa0, 0x5c, 0xa2, 0xaa, 0xc4, 0x6b, 0xc9, 0xa6,
+			0xca, 0x61, 0x78, 0xcb, 0xcd, 0x2a, 0x47, 0x31,
+			0xf8, 0x8a, 0x90, 0x4f, 0x88, 0xb3, 0x3e, 0x4d,
+			0x6b, 0x75, 0x74, 0x4d, 0x00, 0x7c, 0xc8, 0x29,
+			0x9b, 0xe9, 0xf7, 0x6f, 0xec, 0xa3, 0xf0, 0x43,
+			0x10, 0x05, 0x88, 0xee, 0x3a, 0x5f, 0x96, 0x31,
+			0xfa, 0xe3, 0xca, 0x31, 0x38, 0x48, 0x9b, 0x9d,
+			0xe9, 0x4e, 0x5f, 0x45, 0xc1, 0xc0, 0x70, 0x70,
+			0xec, 0x1b, 0x95, 0x77, 0x14, 0xda, 0xe2, 0xf1,
+			0x0c, 0xba, 0xf5, 0x38, 0xc5, 0x0e, 0x07, 0xbe,
+			0x54, 0x1f, 0x70, 0x22, 0x79, 0x88, 0xc8, 0x4b,
+			0xd7, 0xae, 0x5b, 0x5a, 0x15, 0xbc, 0xa5, 0x1c,
+			0x5d, 0xee, 0xcf, 0x9a, 0xa2, 0xde, 0x79, 0x77,
+			0x40, 0xb3, 0x32, 0xd5, 0x31, 0x50, 0x91, 0x30,
+			0x56, 0xbc, 0x26, 0xa2, 0x50, 0x44, 0x1d, 0xdc,
+			0xa8, 0x5c, 0xbf, 0x7b, 0x19, 0xfb, 0x0f, 0xc3,
+			0x78, 0x12, 0x29, 0xbe, 0xc0, 0x74, 0xd5, 0xc2,
+			0xac, 0xce, 0xf9, 0x34, 0xb3, 0x6d, 0x9b, 0xfd,
+			0x55, 0x10, 0x3d, 0xa5, 0x05, 0xee, 0x03, 0x52,
+			0xc8, 0x05, 0xd0, 0x22, 0xc0, 0xee, 0x7a, 0x19,
+			0x17, 0x19, 0x28, 0x01, 0xfc, 0x08, 0x04, 0x27,
+			0x62, 0x61, 0xf8, 0xc3, 0x91, 0x68, 0xd9, 0xb6,
+			0x9d, 0x9f, 0xa4, 0x40, 0xd2, 0x5d, 0xfe, 0xb5,
+			0xae, 0x94, 0xee, 0x07, 0x52, 0x59, 0xf6, 0x63,
+			0x23, 0xb9, 0xf0, 0xc9, 0xd3, 0x55, 0xca, 0xbc,
+			0xfa, 0x80, 0x5f, 0x96, 0x5b, 0x5e, 0x64, 0x0e,
+			0x1c, 0x47, 0x56, 0xc6, 0xee, 0x75, 0x7c, 0x90,
+			0xd4, 0x2f, 0x97, 0xce, 0x85, 0x9a, 0x84, 0x37,
+			0xb6, 0x0d, 0x79, 0x65, 0x3f, 0xb5, 0xa3, 0xe8,
+			0xff, 0xac, 0xeb, 0x2b, 0x11, 0x40, 0xb3, 0xb3,
+			0x9c, 0xf6, 0x0e, 0xde, 0xb1, 0x76, 0x63, 0x84,
+			0xd3, 0x29, 0x52, 0x69, 0x6a, 0x3a, 0xc0, 0x7f,
+			0x81, 0xf0, 0x87, 0xc6, 0x92, 0xd3, 0x5f, 0xb1,
+			0x48, 0x92, 0x98, 0x25, 0xc0, 0x43, 0x19, 0x1c,
+			0x68, 0xf1, 0x2a, 0x5b, 0xfb, 0x3c, 0xd3, 0xc6,
+			0x19, 0x7b, 0x9e, 0x66, 0xe0, 0xbe, 0x74, 0x57,
+			0x35, 0x6e, 0x6e, 0xf9, 0x03, 0x76, 0x7c, 0x1c,
+			0xce, 0x44, 0x5f, 0x6d, 0xd5, 0xea, 0x8f, 0x4a,
+			0x0c, 0x85, 0x3b, 0xa2, 0xf7, 0x51, 0x27, 0x41,
+			0x95, 0x5d, 0x00, 0x06, 0x44, 0x9f, 0x98, 0x61,
+			0x7b, 0x48, 0x36, 0xa5, 0xb4, 0xb6, 0x0f, 0x27,
+			0x1a, 0xac, 0x63, 0x24, 0xf6, 0x46, 0x51, 0xc5,
+			0x44, 0xba, 0x39, 0x71, 0x69, 0x33, 0x20, 0x1f,
+			0xc3, 0x50, 0xbe, 0xc3, 0xd3, 0x55, 0x59, 0x43,
+			0xc9, 0x4e, 0x68, 0xdf, 0x1d, 0xca, 0x0b, 0xe2,
+			0x11, 0x61, 0x01, 0xe2, 0x5a, 0xd5, 0xed, 0x6b,
+			0xbf, 0x76, 0x02, 0x88, 0x9e, 0xf0, 0x1c, 0x57,
+			0x1c, 0xb0, 0x99, 0x89, 0x4d, 0xd9, 0xcf, 0x10,
+			0x49, 0x9b, 0x26, 0x0f, 0xfb, 0xf8, 0x10, 0x6c,
+			0x3f, 0x41, 0x78, 0x0d, 0xa3, 0xdc, 0x5d, 0x18,
+			0xe7, 0x3c, 0xa8, 0x4f, 0x70, 0xf7, 0x82, 0xef,
+			0x15, 0xcf, 0x5c, 0x00, 0x15, 0x41, 0x38, 0x56,
+			0x3c, 0x4c, 0x2e, 0xbc, 0xb1, 0x34, 0x35, 0xce,
+			0x18, 0xc4, 0xa2, 0xb4, 0xea, 0xc2, 0xac, 0x0e,
+			0x63, 0x23, 0x20, 0xa1, 0x72, 0x19, 0x6a, 0x21,
+			0x75, 0xcd, 0xab, 0xcc, 0xdb, 0x92, 0xc9, 0x55,
+			0x1c, 0x60, 0xcc, 0xcd, 0xa1, 0x33, 0x28, 0x4a,
+			0x83, 0x79, 0x14, 0x0a, 0x79, 0x40, 0x15, 0x4b,
+			0x13, 0x1b, 0x50, 0x95, 0x4b, 0x78, 0x0f, 0x9d,
+			0x56, 0x18, 0xa1, 0x4e, 0x5f, 0x82, 0x85, 0x2f,
+			0xa0, 0x54, 0x11, 0xad, 0x58, 0xe0, 0x2d, 0x37,
+			0x87, 0x2c, 0xec, 0x35, 0xe2, 0xa4, 0xf1, 0x53,
+			0x31, 0xbb, 0xa9, 0xd4, 0x86, 0x2f, 0x80, 0xe9,
+			0x03, 0x1e, 0xe4, 0x72, 0x98, 0x1a, 0x98, 0x83,
+			0xf4, 0x27, 0x64, 0xf5, 0xc7, 0x8c, 0x9e, 0xec,
+			0x22, 0xe4, 0x37, 0x6a, 0xef, 0x3e, 0x7f, 0x11,
+			0x0e, 0xdd, 0x32, 0xf9, 0xf5, 0x43, 0x21, 0x27,
+			0x7d, 0x6d, 0xa3, 0xe8, 0x75, 0xf4, 0x06, 0x9e,
+			0xda, 0x53, 0x49, 0x07, 0x87, 0x91, 0xbe, 0xe9,
+			0xf2, 0xae, 0xa3, 0x26, 0x1a, 0xc2, 0x35, 0x07,
+			0x21, 0x9b, 0x60, 0x56, 0xfb, 0xce, 0xf8, 0x9f,
+			0x8b, 0x46, 0xef, 0x2d, 0x24, 0x70, 0x12, 0xb2,
+			0x9d, 0x3c, 0x6b, 0xed, 0xa4, 0xe4, 0x74, 0x98,
+			0xc0, 0xd2, 0x49, 0xea, 0x52, 0x91, 0x47, 0x5d,
+			0x60, 0xf5, 0x5c, 0x81, 0x86, 0xe6, 0x70, 0xcb,
+			0x6c, 0xe4, 0xa3, 0x0d, 0x1f, 0xe7, 0xd0, 0x90,
+			0xb0, 0xe7, 0x8a, 0xa6, 0x87, 0x96, 0xaa, 0xd2,
+			0xf4, 0x3b, 0xaa, 0x3b, 0xfc, 0xf3, 0x29, 0xdd,
+			0xd3, 0xce, 0x4c, 0xfa, 0x52, 0x7a, 0xef, 0xf0,
+			0x27, 0x16, 0x15, 0x23, 0x9b, 0x40, 0x01, 0x4c,
+			0x66, 0x80, 0xc1, 0xdd, 0x00, 0x31, 0xfa, 0x23,
+			0xa2, 0x24, 0x72, 0xa7, 0xd2, 0x50, 0xf4, 0x26,
+			0x83, 0x31, 0xd1, 0x7d, 0xeb, 0xef, 0x4f, 0x1d,
+			0xa5, 0xf4, 0xde, 0x8e, 0x45, 0x48, 0x3c, 0x62,
+			0xde, 0x86, 0x40, 0x1b, 0xbe, 0xd1, 0xa4, 0xb7,
+			0xa7, 0x5b, 0x6d, 0xe9, 0x26, 0x68, 0x0d, 0xc8,
+			0x22, 0xa8, 0x62, 0x90, 0x33, 0xce, 0x9d, 0xaf,
+			0x58, 0x6b, 0x4d, 0x14, 0x5b, 0x09, 0xfb, 0xfc,
+			0x14, 0xc8, 0xa8, 0xbf, 0xb9, 0x4c, 0xc3, 0x7d,
+			0x0c, 0x89, 0x2d, 0x37, 0xca, 0x65, 0x12, 0x83,
+			0xb4, 0x6c, 0x08, 0x46, 0x28, 0x86, 0x07, 0x2c,
+			0x37, 0x1a, 0xaf, 0xf4, 0xfc, 0x6d, 0x71, 0x4c,
+			0xbd, 0x1f, 0xec, 0xe0, 0x2a, 0xbd, 0x11, 0xdd,
+			0x41, 0xff, 0x85, 0xe0, 0x18, 0xf0, 0x5c, 0x54,
+			0x29, 0x98, 0x24, 0xb0, 0x3d, 0x93, 0xc0, 0xe9,
+			0x7f, 0x42, 0x22, 0x08, 0x5c, 0x61, 0xc8, 0x00,
+			0x66, 0xa9, 0x1f, 0x20, 0xf1, 0xa7, 0xf4, 0x4d,
+			0x91, 0xb9, 0xbe, 0xdb, 0x98, 0x42, 0xfc, 0xfb,
+			0xe8, 0x23, 0xdc, 0x2a, 0x93, 0x4c, 0xdf, 0xd2,
+			0x12, 0x14, 0x56, 0xe7, 0x13, 0x23, 0xf3, 0x5f,
+			0x3c, 0x3f, 0xa4, 0x09, 0x0a, 0x3f, 0xe1, 0x86,
+			0x87, 0x7f, 0x7a, 0xbd, 0xda, 0x97, 0x1b, 0x71,
+			0x1d, 0xd6, 0x9e, 0xe0, 0x13, 0x72, 0x8b, 0x5a,
+			0x62, 0x1c, 0xb1, 0x6e, 0xbb, 0x58, 0xac, 0x6e,
+			0x0c, 0x0f, 0xe7, 0x56, 0xb0, 0xeb, 0x38, 0x23,
+			0x9c, 0xd9, 0x3b, 0x09, 0xf1, 0xd4, 0xb0, 0xef,
+			0x79, 0xb1, 0x2d, 0xf1, 0x53, 0xc7, 0xe1, 0xc5,
+			0xb0, 0x6e, 0x82, 0x70, 0x56, 0xd2, 0x99, 0x0c,
+			0x5d, 0x65, 0x7f, 0x6d, 0xb1, 0x41, 0x8b, 0xb1,
+			0xa5, 0x8d, 0x02, 0xf4, 0x5a, 0x9d, 0x48, 0x10,
+			0x11, 0xa4, 0xc8, 0x11, 0x5a, 0xfb, 0x68, 0x58,
+			0x9d, 0xef, 0x13, 0xdd, 0x61, 0x63, 0x14, 0xba,
+			0x4d, 0xd8, 0x05, 0x0e, 0x13, 0xe8, 0x60, 0xf3,
+			0x2b, 0x44, 0xea, 0x3f, 0x37, 0x6b, 0x10, 0x32,
+			0x16, 0x3c, 0xbf, 0xf1, 0x4a, 0xf3, 0x4d, 0xe1,
+			0x6c, 0xcf, 0xb0, 0xbe, 0xc1, 0x67, 0xf8, 0x6d,
+			0xcd, 0xda, 0x1e, 0x32, 0x0b, 0xc0, 0x92, 0x7b,
+			0x65, 0xf3, 0x22, 0x1a, 0xb7, 0xbe, 0xaf, 0xeb,
+			0xf1, 0x83, 0x84, 0x9c, 0x6e, 0xc6, 0xd8, 0x22,
+			0xb0, 0xbb, 0x74, 0x9f, 0xe8, 0x53, 0x50, 0x75,
+			0xf4, 0x0a, 0xfc, 0x89, 0x70, 0x0b, 0xc4, 0x4e,
+			0x2b, 0x0b, 0xce, 0xbc, 0x31, 0xe7, 0xb6, 0x41,
+			0x8c, 0xcb, 0x7d, 0x92, 0x13, 0x01, 0xf0, 0x1f,
+			0x2f, 0x54, 0xb3, 0xa8, 0x78, 0xb5, 0x49, 0xb1,
+			},
+		.msg_len = 64,
+		.msg = (const u8[64]){
+			0x54, 0x5e, 0x06, 0xb5, 0x8a, 0xf2, 0x75, 0x69,
+			0x99, 0x4a, 0x48, 0x31, 0x65, 0x6e, 0xd1, 0x74,
+			0x71, 0x15, 0x24, 0x9f, 0x88, 0x74, 0xec, 0x97,
+			0x99, 0x29, 0x41, 0x37, 0xea, 0xff, 0x40, 0xf5,
+			0xe8, 0x1e, 0x4c, 0x13, 0x4f, 0x30, 0x6c, 0x5a,
+			0x3d, 0x45, 0x06, 0x9f, 0xf1, 0x45, 0x7e, 0xd9,
+			0xac, 0x30, 0x4b, 0x05, 0x41, 0xf1, 0x40, 0xd4,
+			0x32, 0xcb, 0x1d, 0x0b, 0x9a, 0x1d, 0x83, 0xb2,
+			},
+		.sig_len = DILITHIUM65_CRYPTO_BYTES,
+		.sig = (const u8[DILITHIUM65_CRYPTO_BYTES]){
+			0x70, 0x83, 0xff, 0x2b, 0xe7, 0x9f, 0x04, 0x25,
+			0xa4, 0xd2, 0xeb, 0x78, 0x1f, 0x60, 0x16, 0xc2,
+			0xa5, 0x65, 0x3c, 0x2f, 0x6f, 0x0f, 0xbb, 0x07,
+			0x9b, 0xe5, 0x13, 0xe2, 0xaa, 0x3f, 0x7a, 0xa9,
+			0xfc, 0xc7, 0x5a, 0x5d, 0xb6, 0x86, 0xd7, 0xdd,
+			0xb6, 0x26, 0xac, 0xb3, 0x43, 0x54, 0x35, 0x5d,
+			0x8f, 0x3f, 0xd3, 0xc5, 0xf3, 0x2b, 0x7b, 0xc1,
+			0xf8, 0x47, 0x67, 0x33, 0x25, 0x59, 0x8d, 0x19,
+			0x5e, 0xd8, 0xb1, 0x9f, 0x07, 0x47, 0xc8, 0x48,
+			0x88, 0x68, 0x75, 0x2c, 0x58, 0xd2, 0xc0, 0xc9,
+			0x4a, 0x5c, 0xc1, 0x4e, 0xa2, 0xa1, 0x2d, 0x1f,
+			0x1f, 0xa4, 0x7f, 0x64, 0x73, 0x11, 0xe2, 0xac,
+			0xb4, 0xf1, 0x90, 0xcb, 0xbf, 0xac, 0x3c, 0x76,
+			0x4d, 0x7f, 0x4c, 0x3a, 0x75, 0x3c, 0xa9, 0x41,
+			0xf2, 0xee, 0x5c, 0x38, 0x5c, 0xaa, 0x54, 0x83,
+			0x46, 0xb1, 0x42, 0xf5, 0xc0, 0x85, 0xea, 0xcd,
+			0x49, 0x81, 0xc1, 0x51, 0x3e, 0x01, 0x03, 0xe3,
+			0x33, 0x3f, 0x93, 0xc3, 0x8b, 0xb6, 0x62, 0xe6,
+			0x8b, 0x54, 0xc5, 0xee, 0x49, 0x4d, 0x63, 0x52,
+			0xa5, 0xd7, 0x51, 0x7a, 0x41, 0x87, 0x71, 0xdc,
+			0x87, 0xce, 0xbe, 0x6e, 0xc1, 0xf4, 0xf2, 0x48,
+			0x3e, 0x16, 0xab, 0x7c, 0xd8, 0xd6, 0x26, 0x8f,
+			0x2a, 0x90, 0x6b, 0x9f, 0x01, 0x0f, 0x2d, 0xdb,
+			0x5f, 0x41, 0x18, 0x6d, 0x59, 0x27, 0xa1, 0x3d,
+			0xe8, 0x7e, 0x56, 0x82, 0x32, 0x1c, 0x44, 0x2f,
+			0x6d, 0x6a, 0x62, 0x5e, 0xbf, 0x4c, 0x72, 0x2d,
+			0xaa, 0x03, 0x49, 0xd9, 0xda, 0xcb, 0x21, 0xc0,
+			0xa0, 0x95, 0x6f, 0xc9, 0x6c, 0x4f, 0x86, 0x1c,
+			0x77, 0x41, 0x0d, 0xd6, 0xd7, 0xac, 0x6e, 0x05,
+			0xbc, 0x94, 0x24, 0x6c, 0xd0, 0x91, 0x68, 0xfd,
+			0xfc, 0x61, 0x83, 0x46, 0x9c, 0xb0, 0xbb, 0x6a,
+			0x6e, 0xc6, 0xf1, 0x71, 0x44, 0xc5, 0x05, 0x87,
+			0x99, 0x16, 0x0c, 0xc3, 0xf9, 0x69, 0xc5, 0xb5,
+			0x53, 0x60, 0x5c, 0x0c, 0x7e, 0xff, 0x84, 0x1f,
+			0xc5, 0xea, 0x15, 0x1d, 0xea, 0xa0, 0xe3, 0x64,
+			0x58, 0x81, 0x67, 0xa2, 0x7c, 0x37, 0x17, 0x7d,
+			0xaf, 0x75, 0xbb, 0x22, 0x9b, 0x55, 0x7b, 0x34,
+			0x83, 0x8d, 0x52, 0xf6, 0xf7, 0x7d, 0x29, 0xc6,
+			0x68, 0x71, 0xf3, 0x5c, 0x23, 0x6e, 0x6c, 0x13,
+			0xf3, 0x07, 0x52, 0x49, 0x54, 0xde, 0x89, 0x5a,
+			0x58, 0x9e, 0xa4, 0x87, 0xd4, 0x9b, 0xb1, 0x5b,
+			0x44, 0xc0, 0xc9, 0x7c, 0x33, 0x90, 0x9c, 0x11,
+			0x52, 0x67, 0x51, 0xe8, 0x31, 0x99, 0x6d, 0x49,
+			0x93, 0xf4, 0xc7, 0x93, 0xca, 0x5b, 0x39, 0x2a,
+			0xae, 0x47, 0x94, 0x8a, 0xf5, 0x07, 0xe2, 0x21,
+			0x1e, 0xcc, 0xdd, 0x7a, 0x0d, 0xa1, 0x30, 0xda,
+			0x9c, 0xb6, 0x2b, 0x8c, 0x2f, 0xe6, 0xa6, 0xea,
+			0xe9, 0x11, 0x03, 0x05, 0x1c, 0x17, 0x71, 0xaa,
+			0x26, 0x3c, 0x26, 0x7c, 0xce, 0xe1, 0x4c, 0x96,
+			0xf7, 0xba, 0xa5, 0x56, 0x17, 0x07, 0x30, 0xca,
+			0x8a, 0x24, 0xdd, 0x2c, 0xeb, 0xbf, 0x3f, 0x41,
+			0xe5, 0xdf, 0xd5, 0xfe, 0x57, 0x6e, 0xd6, 0x2b,
+			0xc5, 0x4a, 0x4e, 0xb3, 0xe2, 0x71, 0xce, 0x76,
+			0x8a, 0x6f, 0xdb, 0xe6, 0x04, 0xf6, 0xe1, 0xe1,
+			0xaa, 0x5b, 0x22, 0x76, 0xde, 0x77, 0xae, 0x0c,
+			0x5d, 0xe0, 0xd1, 0x98, 0xd3, 0xf5, 0xd0, 0x03,
+			0x29, 0x53, 0xd3, 0xe6, 0x9a, 0xcd, 0x3e, 0xd3,
+			0x4a, 0x7e, 0x82, 0x1b, 0x4f, 0xdf, 0x0c, 0x73,
+			0x54, 0xee, 0x4d, 0x1f, 0xb2, 0xef, 0x89, 0xb5,
+			0xd8, 0x60, 0xa8, 0x60, 0x23, 0x6d, 0x5c, 0xbe,
+			0xf6, 0xa5, 0x39, 0xbb, 0x38, 0xff, 0x29, 0xfe,
+			0x6b, 0xed, 0xca, 0xbe, 0xf9, 0x48, 0xef, 0xf0,
+			0xb1, 0xb6, 0x3a, 0x38, 0xa3, 0x09, 0x48, 0x6a,
+			0xb4, 0x66, 0x25, 0xcc, 0xeb, 0xbd, 0x5e, 0x22,
+			0xf5, 0xc8, 0xe5, 0x81, 0xc2, 0xfd, 0x45, 0x2a,
+			0x2d, 0x62, 0x0d, 0x6f, 0xcd, 0x18, 0x86, 0x45,
+			0xb4, 0x94, 0x96, 0x48, 0xa8, 0x42, 0x14, 0xb7,
+			0xc2, 0x3d, 0x21, 0x02, 0xc2, 0xec, 0x53, 0xcb,
+			0x76, 0xab, 0x3c, 0x56, 0x55, 0x8c, 0xa6, 0x1f,
+			0x6a, 0xf5, 0x61, 0xbf, 0xc2, 0x72, 0x28, 0xb6,
+			0xce, 0x38, 0x7c, 0xb4, 0xbe, 0x71, 0x0b, 0x4d,
+			0x0a, 0x0e, 0x13, 0x33, 0x2e, 0x97, 0x3a, 0x2b,
+			0x9f, 0x7e, 0x92, 0xf6, 0x11, 0x93, 0xf6, 0x30,
+			0x1a, 0x9d, 0x2b, 0x89, 0x7c, 0x61, 0x24, 0x7b,
+			0x0f, 0xa6, 0xd7, 0x78, 0x59, 0xd3, 0x12, 0xe8,
+			0x73, 0x1d, 0xb5, 0x54, 0x89, 0xcf, 0x4b, 0x2c,
+			0xe6, 0xa8, 0x10, 0x08, 0xe2, 0x28, 0x93, 0xa0,
+			0xa8, 0x7a, 0x16, 0xdc, 0x41, 0x54, 0x49, 0x83,
+			0xd9, 0x3e, 0x42, 0xf9, 0x34, 0x00, 0xcd, 0x22,
+			0xdb, 0xec, 0x96, 0xa7, 0xbb, 0xd0, 0x6e, 0x17,
+			0xa2, 0x1c, 0x00, 0xf5, 0xd8, 0x0d, 0x04, 0xf8,
+			0x71, 0x9c, 0x66, 0x26, 0xe9, 0xbc, 0x33, 0xdb,
+			0x3f, 0x99, 0xd4, 0x37, 0x9c, 0xfa, 0x98, 0x2b,
+			0xc9, 0x34, 0x14, 0xd2, 0x4d, 0x36, 0x27, 0x4a,
+			0xf8, 0x05, 0xfb, 0x86, 0xfb, 0xd8, 0x48, 0xf2,
+			0x00, 0x55, 0x4c, 0xe0, 0x8c, 0x17, 0xb8, 0xfc,
+			0x26, 0x37, 0x82, 0x89, 0x32, 0xcc, 0x5b, 0xf9,
+			0xdb, 0x8c, 0xe8, 0x56, 0x64, 0x53, 0x9b, 0xeb,
+			0xb2, 0xdd, 0xc0, 0x3f, 0x82, 0x63, 0xaf, 0x75,
+			0x51, 0xfc, 0xa2, 0xd8, 0x73, 0x5f, 0xf9, 0x3e,
+			0xc3, 0x4a, 0x62, 0x1d, 0x72, 0x45, 0x87, 0xc2,
+			0x56, 0x2f, 0x84, 0x80, 0x91, 0x26, 0xcc, 0x3d,
+			0xb6, 0x2a, 0x23, 0xd0, 0x44, 0x54, 0xaa, 0x57,
+			0x70, 0x2c, 0xe6, 0xa0, 0x52, 0x72, 0x22, 0xad,
+			0x72, 0xa1, 0x8c, 0x76, 0x25, 0x94, 0x9e, 0xad,
+			0x04, 0x3c, 0x2b, 0x91, 0x04, 0xd7, 0xd7, 0xd2,
+			0x52, 0xcb, 0x2b, 0x47, 0x0c, 0x72, 0xa6, 0x76,
+			0x60, 0xf2, 0xdf, 0x3a, 0xa5, 0xb5, 0x26, 0x70,
+			0xd8, 0x5c, 0xd4, 0xce, 0x8a, 0xd5, 0x20, 0x9d,
+			0x88, 0x92, 0xac, 0x88, 0x70, 0x03, 0x3c, 0x75,
+			0x65, 0x1c, 0xd6, 0xba, 0x4f, 0x60, 0xa5, 0x43,
+			0xa6, 0x56, 0x02, 0x46, 0xe0, 0x62, 0xfe, 0xde,
+			0x2d, 0xe1, 0x2c, 0x9a, 0xfc, 0x17, 0xa1, 0x6d,
+			0x17, 0xa1, 0x1e, 0xd5, 0x0a, 0x9c, 0xa1, 0x6e,
+			0x7d, 0x6d, 0x30, 0x2f, 0x31, 0xcf, 0xe5, 0xd0,
+			0x9a, 0xae, 0xc0, 0x8e, 0x95, 0xea, 0xe8, 0xef,
+			0xd1, 0x56, 0x1d, 0xe4, 0x7f, 0x93, 0x89, 0xab,
+			0x05, 0x29, 0x08, 0xd5, 0x05, 0x67, 0x6a, 0xf3,
+			0x7a, 0x81, 0x01, 0x2e, 0xca, 0xe7, 0xc1, 0xd2,
+			0xf9, 0x20, 0xcf, 0xcd, 0xb7, 0xc1, 0x83, 0x7d,
+			0xdb, 0x12, 0x2b, 0x4a, 0x76, 0xef, 0xd3, 0x40,
+			0xa5, 0xb4, 0xca, 0x18, 0xde, 0xbd, 0xb8, 0x4d,
+			0xb8, 0x77, 0xb4, 0xb6, 0x06, 0x50, 0xc4, 0x15,
+			0x5f, 0x08, 0x5a, 0x19, 0x21, 0xdf, 0x3b, 0xa9,
+			0x07, 0xe9, 0x2c, 0xa3, 0x86, 0xfd, 0x94, 0xba,
+			0x77, 0x54, 0x65, 0xc1, 0x19, 0x27, 0xcc, 0x51,
+			0xa6, 0x27, 0x1b, 0x24, 0x10, 0x44, 0x07, 0x64,
+			0xc3, 0xd5, 0xfe, 0x97, 0xcd, 0xa6, 0x78, 0x89,
+			0xa4, 0x49, 0xde, 0xa7, 0xaa, 0x2a, 0x9e, 0x38,
+			0x3e, 0xfe, 0x15, 0x20, 0x0f, 0x0a, 0x4f, 0x2e,
+			0xcb, 0xab, 0xfd, 0xe6, 0x54, 0x6c, 0x77, 0x0a,
+			0xad, 0x7a, 0x45, 0x86, 0xf9, 0xb7, 0xfe, 0x7c,
+			0xe9, 0x51, 0x9e, 0x9e, 0x2b, 0x05, 0xff, 0x38,
+			0xf1, 0x44, 0x3a, 0x20, 0x41, 0xdd, 0xad, 0x9c,
+			0x5b, 0x06, 0xfe, 0x33, 0xfe, 0x19, 0x0a, 0x0d,
+			0x6a, 0x9c, 0x6f, 0x69, 0xbb, 0x36, 0x82, 0xa7,
+			0x8f, 0xe9, 0x57, 0x6b, 0xe6, 0x8a, 0xad, 0xe7,
+			0xbb, 0x12, 0xed, 0xd0, 0xc5, 0x29, 0xad, 0xc8,
+			0x32, 0xa5, 0x90, 0x21, 0xce, 0x37, 0x26, 0x84,
+			0x14, 0xd8, 0xa2, 0x4d, 0x0a, 0xba, 0x16, 0xae,
+			0x20, 0x1d, 0xa6, 0x5c, 0x07, 0xcd, 0x05, 0x7b,
+			0x83, 0xe8, 0x42, 0xf6, 0xf6, 0x9c, 0x80, 0xa7,
+			0xa1, 0x45, 0xd1, 0x09, 0x4c, 0x0b, 0x9e, 0x1e,
+			0xf8, 0x3a, 0xe8, 0x62, 0x95, 0x7b, 0xfa, 0x71,
+			0x3d, 0x07, 0x95, 0xdc, 0x13, 0x8e, 0xb1, 0x55,
+			0xf1, 0xc5, 0x31, 0x2f, 0xf9, 0x60, 0x35, 0x7d,
+			0x49, 0xef, 0x24, 0xc1, 0x6c, 0x4b, 0x97, 0xd8,
+			0xaf, 0x83, 0x43, 0x99, 0x77, 0x37, 0xf5, 0x01,
+			0x22, 0x47, 0xa0, 0x9b, 0xa1, 0x66, 0xc0, 0x92,
+			0xc9, 0x83, 0xb2, 0x97, 0xc1, 0xc5, 0xc2, 0x64,
+			0x8a, 0x3a, 0xdb, 0x3d, 0x85, 0xdf, 0x79, 0xf4,
+			0x29, 0xd0, 0x31, 0x51, 0xc1, 0x3b, 0xde, 0xa8,
+			0xad, 0xb7, 0x52, 0x14, 0xbd, 0x1a, 0xe6, 0xae,
+			0x2d, 0x1a, 0x60, 0x99, 0x37, 0xd3, 0x02, 0x81,
+			0x29, 0x39, 0xd8, 0xf8, 0xf0, 0xab, 0x53, 0x45,
+			0x87, 0x41, 0x83, 0x85, 0x29, 0xc1, 0xea, 0xc6,
+			0x73, 0x06, 0xe9, 0x67, 0x08, 0xcf, 0x10, 0x2a,
+			0xd0, 0xe8, 0x18, 0xd1, 0x13, 0x0e, 0xa7, 0xd2,
+			0xcb, 0xd7, 0x15, 0x86, 0x4c, 0x8c, 0x3f, 0x5b,
+			0x55, 0x46, 0x02, 0xbc, 0x42, 0xd4, 0x15, 0x01,
+			0xdf, 0xbd, 0x62, 0x79, 0xc6, 0x1d, 0x0c, 0xbf,
+			0x76, 0x58, 0x86, 0x41, 0x03, 0xb9, 0x5a, 0xf7,
+			0xde, 0xa5, 0xcb, 0x46, 0x04, 0x1a, 0x00, 0x52,
+			0xc8, 0x6c, 0x7f, 0xbd, 0xb7, 0x2b, 0xfd, 0xda,
+			0x9e, 0x98, 0xe0, 0x92, 0x99, 0xbb, 0x4f, 0xf1,
+			0x05, 0x49, 0x6c, 0xc4, 0x7d, 0xe6, 0x4b, 0x28,
+			0x8c, 0x44, 0x11, 0x31, 0x42, 0x0f, 0xba, 0x13,
+			0x1e, 0x5f, 0x12, 0xeb, 0xbf, 0x03, 0x0d, 0x9f,
+			0xfe, 0x2e, 0x35, 0x50, 0x54, 0xe5, 0xb9, 0xfb,
+			0x1f, 0xa9, 0xf0, 0xd1, 0xc5, 0x16, 0x5c, 0x89,
+			0x59, 0x62, 0x34, 0xe1, 0x8c, 0x7b, 0x7c, 0x77,
+			0x11, 0x6a, 0x4d, 0x77, 0xf1, 0xcc, 0x61, 0xde,
+			0x6b, 0xa0, 0x4b, 0x50, 0x01, 0xcc, 0xba, 0x8a,
+			0x6f, 0xc7, 0x6d, 0xdb, 0x04, 0x74, 0x52, 0xe9,
+			0xbb, 0x1f, 0xe0, 0xcb, 0x18, 0x62, 0x42, 0xfb,
+			0xa5, 0xaf, 0x6f, 0x65, 0x14, 0x01, 0xea, 0x01,
+			0x1d, 0xd4, 0xa1, 0x98, 0x44, 0x91, 0x19, 0x9e,
+			0xe3, 0x45, 0x1d, 0x95, 0x5b, 0xb1, 0x88, 0xf7,
+			0x12, 0xf1, 0xf7, 0xc5, 0x1f, 0x50, 0x19, 0x0b,
+			0x29, 0x9b, 0x9e, 0xce, 0x18, 0xd5, 0xdf, 0xa1,
+			0x5d, 0xe0, 0x70, 0x8e, 0x82, 0x75, 0xfa, 0x8d,
+			0x7d, 0x5f, 0x60, 0x7d, 0xb5, 0xf3, 0xa0, 0xe4,
+			0x0c, 0x69, 0xc3, 0x83, 0x5f, 0x49, 0xe4, 0x9f,
+			0xde, 0xdb, 0x93, 0x44, 0x43, 0xf7, 0xaa, 0x11,
+			0x8c, 0x46, 0xa8, 0x32, 0x1a, 0x93, 0xc9, 0xe6,
+			0xb8, 0x4e, 0xe9, 0x5c, 0x93, 0x99, 0xb7, 0x40,
+			0xf6, 0x8f, 0x56, 0xbd, 0x3f, 0x33, 0x63, 0x3d,
+			0x21, 0x61, 0xec, 0x83, 0xf5, 0xb4, 0x97, 0x74,
+			0x63, 0x13, 0x9a, 0x4e, 0x5b, 0xf8, 0x67, 0xd3,
+			0x04, 0xca, 0xff, 0x69, 0xfa, 0x9d, 0x43, 0xa8,
+			0xb9, 0x3a, 0xda, 0xe1, 0x40, 0x8f, 0x05, 0x57,
+			0xc6, 0xc5, 0x78, 0x73, 0xfe, 0xae, 0x93, 0xa9,
+			0x65, 0xc0, 0xf3, 0x2b, 0x1e, 0x66, 0x0c, 0x19,
+			0x35, 0x78, 0xfa, 0xbc, 0x91, 0xa9, 0xa6, 0xf2,
+			0xaf, 0x6b, 0x93, 0xd0, 0x6c, 0xd2, 0xd8, 0x0d,
+			0xe6, 0x61, 0x5d, 0x44, 0x9e, 0x94, 0xac, 0x9e,
+			0x19, 0xad, 0xfa, 0xe2, 0xc3, 0xa3, 0x46, 0x30,
+			0xf2, 0xb8, 0x90, 0xe7, 0x1b, 0xc6, 0x4b, 0xbb,
+			0xe6, 0xf3, 0x47, 0x54, 0x4d, 0x4c, 0xe4, 0xbc,
+			0xf8, 0x69, 0x90, 0x39, 0xab, 0x03, 0x43, 0xf4,
+			0x64, 0x55, 0x9b, 0xec, 0x95, 0x8b, 0x13, 0x03,
+			0xdf, 0x58, 0x5e, 0x2c, 0xf8, 0x53, 0xe5, 0x42,
+			0x9c, 0x5f, 0x9d, 0x36, 0x4b, 0xad, 0x5f, 0x2c,
+			0xc4, 0x2b, 0x07, 0x43, 0xc4, 0xa3, 0x91, 0xf1,
+			0xf4, 0xf6, 0x3a, 0xef, 0xe7, 0x0b, 0x43, 0xc5,
+			0xc5, 0xef, 0x3f, 0xf7, 0x29, 0xf2, 0x74, 0xae,
+			0x47, 0x0c, 0x7f, 0x6a, 0x75, 0x56, 0x48, 0x06,
+			0x56, 0x4e, 0x73, 0x14, 0x91, 0xd7, 0x27, 0x2b,
+			0x64, 0xe1, 0xd3, 0x68, 0x84, 0x9d, 0x56, 0xc6,
+			0xac, 0xa9, 0xf7, 0x8f, 0x2e, 0xa2, 0x12, 0x48,
+			0xad, 0x28, 0xa7, 0x1a, 0x58, 0x44, 0xcc, 0x69,
+			0xa8, 0x42, 0x32, 0x79, 0xd7, 0x77, 0xee, 0xeb,
+			0x97, 0x13, 0x82, 0x4d, 0xac, 0xb0, 0x08, 0x64,
+			0x34, 0x59, 0xfa, 0xe8, 0x48, 0x12, 0x11, 0x93,
+			0x8d, 0x7d, 0x94, 0x9f, 0x14, 0xd0, 0x06, 0x62,
+			0x4b, 0x51, 0x74, 0x5d, 0x7b, 0x1c, 0x70, 0x68,
+			0x82, 0xab, 0xf2, 0x41, 0xdc, 0xc9, 0x19, 0x64,
+			0x71, 0xa0, 0xcf, 0xd0, 0x16, 0x46, 0x9a, 0x93,
+			0x40, 0x87, 0xa3, 0x7e, 0x1a, 0x19, 0x25, 0x6b,
+			0xe1, 0x72, 0xd4, 0x4a, 0xf2, 0x8a, 0xdf, 0x96,
+			0x9d, 0xfc, 0xb2, 0xe1, 0x53, 0xd1, 0x31, 0x3e,
+			0xeb, 0xd0, 0xdf, 0xde, 0x3f, 0xb1, 0xc3, 0x92,
+			0xdb, 0xd1, 0x7e, 0x0f, 0x4b, 0xac, 0x09, 0x28,
+			0xa4, 0xaf, 0x3c, 0x74, 0x67, 0x19, 0xf0, 0xe5,
+			0xe6, 0x44, 0x3e, 0x47, 0x44, 0x51, 0x31, 0x9e,
+			0xda, 0x3e, 0x4b, 0xd8, 0xd1, 0xba, 0x93, 0x6f,
+			0x62, 0x59, 0xdc, 0x25, 0x35, 0x2c, 0x0c, 0xa6,
+			0xca, 0x28, 0x0a, 0xd5, 0x4c, 0x96, 0x72, 0xd9,
+			0x89, 0xbd, 0xd1, 0x49, 0x70, 0xe1, 0xc6, 0xe7,
+			0x7f, 0xf8, 0x45, 0x39, 0xe3, 0xa5, 0x9d, 0xd2,
+			0xae, 0xf7, 0xd6, 0x19, 0x57, 0x17, 0x57, 0x76,
+			0x31, 0x29, 0xdf, 0x3b, 0xa9, 0x89, 0x72, 0xb0,
+			0x45, 0xea, 0xc9, 0xcf, 0x6d, 0x8e, 0xf7, 0xf1,
+			0x94, 0x98, 0x6a, 0x8b, 0xf7, 0x83, 0xe9, 0xa9,
+			0xda, 0x34, 0xf1, 0x58, 0x90, 0xe5, 0xaf, 0x98,
+			0x42, 0x72, 0xe4, 0x87, 0xff, 0x5d, 0xb6, 0x26,
+			0x35, 0x40, 0x3b, 0xe6, 0x8f, 0xc8, 0x43, 0xe2,
+			0xe7, 0xf9, 0x35, 0x03, 0x27, 0xdb, 0xfc, 0xc1,
+			0x2b, 0x8b, 0xed, 0x3c, 0xaa, 0x1a, 0xb5, 0xc9,
+			0x98, 0xea, 0x58, 0x5c, 0x12, 0x27, 0xc8, 0x6d,
+			0xc8, 0xea, 0x40, 0x01, 0x5c, 0x28, 0x3e, 0x2d,
+			0x4a, 0x98, 0x03, 0x0b, 0xfb, 0xc1, 0x04, 0x0e,
+			0x15, 0x55, 0x5d, 0x9c, 0x19, 0x2d, 0x7d, 0x85,
+			0x0b, 0x33, 0x22, 0x93, 0x11, 0x07, 0x22, 0x66,
+			0x76, 0x3e, 0x49, 0x5d, 0xdf, 0xb7, 0x3e, 0x49,
+			0x3a, 0x27, 0x4b, 0xdd, 0x4d, 0x71, 0xe7, 0x75,
+			0x69, 0xc4, 0xfc, 0x59, 0x26, 0xdf, 0xa8, 0x59,
+			0x9f, 0xff, 0x86, 0xed, 0x25, 0x89, 0x51, 0xae,
+			0x42, 0x62, 0x41, 0x08, 0x42, 0x1f, 0x20, 0x0a,
+			0x0e, 0x50, 0x56, 0xb5, 0x54, 0xb8, 0xd7, 0x59,
+			0xe1, 0x3a, 0x57, 0x63, 0x45, 0x2d, 0xcd, 0x3f,
+			0x10, 0xb8, 0xfd, 0xd8, 0xb0, 0xd4, 0xe4, 0x90,
+			0x96, 0x9a, 0x5b, 0x8d, 0x1e, 0x6c, 0x6f, 0x7d,
+			0x78, 0x2b, 0x13, 0x51, 0xfd, 0xbc, 0x9e, 0xc2,
+			0x05, 0x2a, 0x08, 0xa2, 0x4d, 0x5c, 0x81, 0xec,
+			0xdd, 0x15, 0xba, 0xa1, 0x27, 0x60, 0xa0, 0x92,
+			0x34, 0x6a, 0x33, 0x7c, 0xf2, 0x6f, 0xdc, 0xce,
+			0x5d, 0x20, 0x27, 0x32, 0xcd, 0xa2, 0x71, 0x46,
+			0xc5, 0x1c, 0x90, 0xd1, 0x56, 0x4b, 0xe7, 0xe8,
+			0x3f, 0x08, 0x91, 0x2f, 0x3c, 0x01, 0x9d, 0x15,
+			0x50, 0x2c, 0x9b, 0x6e, 0xfb, 0xc5, 0x75, 0x3b,
+			0xdc, 0x90, 0x9e, 0xf0, 0x8e, 0x15, 0x3c, 0x33,
+			0x0f, 0x52, 0x53, 0x4f, 0x0f, 0xdc, 0x63, 0xc6,
+			0xa7, 0x0d, 0x99, 0x76, 0xef, 0x8c, 0x34, 0x13,
+			0x3d, 0xdf, 0xc3, 0x5b, 0xea, 0x70, 0x7b, 0x67,
+			0x90, 0xed, 0xfb, 0x3c, 0x3d, 0xf9, 0x71, 0x62,
+			0xae, 0x45, 0x00, 0xb1, 0x22, 0x45, 0x23, 0xd7,
+			0x5e, 0xdf, 0xfb, 0xb3, 0x55, 0x37, 0x5c, 0x40,
+			0xda, 0x83, 0xc1, 0x0f, 0x75, 0x39, 0xc3, 0xd0,
+			0x9e, 0x49, 0xa7, 0x2b, 0xf5, 0xc1, 0x56, 0xc1,
+			0x9a, 0x90, 0x94, 0x81, 0x9b, 0xd6, 0x97, 0x43,
+			0x96, 0x5b, 0x37, 0xf5, 0x70, 0x75, 0x82, 0xbc,
+			0x55, 0xe6, 0x90, 0xc7, 0x98, 0x93, 0x0f, 0xfb,
+			0xde, 0x8c, 0xc8, 0x72, 0x93, 0xb5, 0xdb, 0xc6,
+			0xef, 0x34, 0xf9, 0xcd, 0x17, 0x73, 0xc8, 0xb5,
+			0xba, 0x75, 0x70, 0xd5, 0x41, 0xb3, 0xac, 0x60,
+			0x3f, 0xa5, 0x27, 0xcf, 0x0a, 0x17, 0x6d, 0x8f,
+			0xcd, 0xf7, 0x33, 0x29, 0xf6, 0x37, 0xdd, 0x81,
+			0x71, 0x75, 0xb2, 0x71, 0x95, 0x28, 0x36, 0x76,
+			0x7d, 0xb0, 0xaa, 0x19, 0xa9, 0xfb, 0xb6, 0xd2,
+			0xec, 0xf6, 0x13, 0xaf, 0x40, 0x8a, 0x23, 0x89,
+			0x2f, 0x8f, 0xe0, 0x83, 0xcd, 0xa7, 0x3d, 0x0a,
+			0xeb, 0x64, 0x07, 0xcc, 0x2a, 0x2d, 0xe7, 0x1f,
+			0x77, 0x65, 0x3b, 0xf1, 0xb7, 0xfb, 0x31, 0x32,
+			0xa3, 0x2b, 0xf5, 0xb2, 0x5c, 0x6b, 0xf7, 0x64,
+			0xaa, 0xd5, 0xe7, 0x14, 0x32, 0xbf, 0x3c, 0xec,
+			0xe0, 0x63, 0xb4, 0x9c, 0x44, 0xed, 0x4b, 0x96,
+			0x03, 0xc0, 0x8c, 0x99, 0x62, 0xcb, 0xe1, 0xd5,
+			0xa3, 0x16, 0x5f, 0x95, 0x78, 0x4a, 0x98, 0x19,
+			0x4b, 0x4e, 0x74, 0x92, 0x12, 0x41, 0x4f, 0xd0,
+			0xf3, 0x4b, 0x24, 0x68, 0xd3, 0xcb, 0xda, 0x35,
+			0x61, 0xda, 0x6f, 0xa6, 0x80, 0x93, 0x82, 0xd0,
+			0xd3, 0x11, 0x9a, 0xb4, 0xbf, 0xb8, 0x8f, 0x68,
+			0x84, 0x7b, 0x27, 0x96, 0xce, 0x7c, 0x11, 0x06,
+			0x44, 0x2b, 0x6e, 0x39, 0x37, 0x36, 0x55, 0xe6,
+			0x21, 0x44, 0x63, 0xce, 0x80, 0x0f, 0xdc, 0xad,
+			0xef, 0xc9, 0x30, 0x05, 0x3a, 0x40, 0x1f, 0x8e,
+			0x5b, 0x79, 0x41, 0xcd, 0x6a, 0x57, 0xd0, 0xf2,
+			0xee, 0x65, 0xdf, 0xb0, 0xac, 0x89, 0xd9, 0x4b,
+			0xe5, 0xf2, 0xce, 0x85, 0xdf, 0x80, 0x7f, 0x9b,
+			0x86, 0xd4, 0x00, 0x7a, 0x3e, 0xfa, 0xcd, 0xbd,
+			0xe2, 0xcb, 0xa2, 0x5f, 0x1d, 0x04, 0xa2, 0x1e,
+			0xf5, 0xc7, 0x07, 0x5b, 0x17, 0xd3, 0xfb, 0xd1,
+			0x95, 0x8e, 0xe3, 0x6e, 0xbc, 0xff, 0xd4, 0xe0,
+			0x97, 0xd6, 0x8c, 0xab, 0x11, 0x1e, 0x53, 0x16,
+			0x40, 0x0a, 0x06, 0x23, 0x50, 0x15, 0x82, 0x87,
+			0x19, 0xcf, 0xee, 0x44, 0x5b, 0x3c, 0x60, 0x78,
+			0xe7, 0xcd, 0x13, 0xf6, 0x03, 0x9f, 0x23, 0xa0,
+			0x74, 0x0b, 0x4c, 0xfe, 0x7f, 0x21, 0xa4, 0x11,
+			0xf9, 0x62, 0xeb, 0xe3, 0xe3, 0x5d, 0x5a, 0x7b,
+			0x54, 0xc5, 0x10, 0x5c, 0x42, 0x2a, 0x10, 0x7e,
+			0x82, 0x3c, 0x9a, 0x8f, 0xa1, 0x75, 0xac, 0x4c,
+			0xe7, 0x2b, 0xfc, 0xd7, 0xd0, 0x7b, 0x05, 0x42,
+			0xc6, 0xa3, 0x8e, 0x9b, 0x68, 0xfd, 0x45, 0x4e,
+			0xec, 0x25, 0x01, 0x0e, 0x45, 0x26, 0x31, 0x5a,
+			0x7b, 0x8b, 0xe1, 0x69, 0xd0, 0x80, 0xc9, 0xb8,
+			0xd0, 0xc2, 0x6c, 0xb6, 0x76, 0xff, 0x1f, 0xa8,
+			0x26, 0xed, 0x51, 0xa6, 0xde, 0x93, 0x18, 0x8c,
+			0x21, 0xf1, 0x58, 0x9d, 0x58, 0xfd, 0xaa, 0x95,
+			0x98, 0xbd, 0x4c, 0xe6, 0xe8, 0xa6, 0x0a, 0x2d,
+			0x9e, 0x0e, 0x1b, 0x58, 0x72, 0xe6, 0xe4, 0xdd,
+			0x38, 0x69, 0x8e, 0x87, 0x05, 0x41, 0x40, 0xd6,
+			0x63, 0xab, 0xef, 0x52, 0x39, 0x5e, 0x13, 0xc2,
+			0x5a, 0x70, 0x27, 0x17, 0xb7, 0x3f, 0x93, 0x85,
+			0x0d, 0x7c, 0x20, 0x7c, 0xc3, 0xdb, 0xfe, 0x8e,
+			0x33, 0x11, 0x2c, 0x6e, 0x73, 0xb0, 0x6b, 0xfb,
+			0xa8, 0x87, 0xaa, 0x1b, 0x07, 0xfd, 0x43, 0x7e,
+			0x87, 0xe8, 0xb9, 0xca, 0x44, 0x8c, 0xc2, 0x01,
+			0xfa, 0xa6, 0x9a, 0x48, 0x44, 0xd7, 0x60, 0x1c,
+			0x62, 0x5b, 0xa0, 0xe9, 0xaf, 0xf5, 0x1f, 0xad,
+			0xa7, 0x2d, 0x68, 0xbc, 0xcb, 0x24, 0xa2, 0x5d,
+			0x5d, 0x87, 0x0a, 0x9b, 0xae, 0x77, 0x73, 0xf8,
+			0x7b, 0x91, 0x31, 0x23, 0x29, 0xd4, 0x1f, 0xb7,
+			0xf1, 0xfb, 0x75, 0x84, 0x09, 0xd6, 0xc2, 0x7d,
+			0x11, 0x8b, 0x69, 0xae, 0xdc, 0x83, 0xb7, 0xb4,
+			0xbd, 0xc3, 0x97, 0x59, 0xac, 0xf5, 0x25, 0x6d,
+			0xd1, 0x00, 0x6a, 0xb8, 0xf3, 0xf6, 0x7e, 0x62,
+			0x29, 0x56, 0xe3, 0x5b, 0xa2, 0x5b, 0xb1, 0x66,
+			0xb6, 0x6f, 0x2f, 0x6c, 0xdc, 0xf2, 0x7d, 0x6a,
+			0x96, 0x45, 0x8a, 0x88, 0x0d, 0x47, 0x65, 0xe3,
+			0x53, 0xb0, 0x54, 0x3b, 0xa2, 0xd9, 0xe5, 0x4b,
+			0x1d, 0xde, 0xf4, 0xac, 0xbf, 0xb5, 0x2f, 0xcc,
+			0x68, 0x06, 0x77, 0x14, 0xfb, 0x95, 0x69, 0x65,
+			0x77, 0xf4, 0xa6, 0xa0, 0x5c, 0x45, 0x18, 0xc3,
+			0x10, 0x74, 0x22, 0x4a, 0xe3, 0x78, 0xce, 0x75,
+			0x82, 0xf6, 0x89, 0x85, 0x11, 0x60, 0x8e, 0xa8,
+			0x80, 0x39, 0x7b, 0xd2, 0xde, 0xe6, 0x4d, 0x92,
+			0xdc, 0xbf, 0x1e, 0x78, 0x58, 0xde, 0xfc, 0xe7,
+			0x0f, 0x16, 0x6d, 0xbd, 0xa6, 0x61, 0x98, 0x8b,
+			0x2b, 0xd3, 0xeb, 0xa7, 0x5a, 0xb6, 0x94, 0x8b,
+			0xdf, 0xf8, 0x65, 0x4f, 0x4d, 0xd2, 0x43, 0xdb,
+			0x16, 0x44, 0x08, 0xc7, 0x58, 0xca, 0x50, 0xdd,
+			0x0d, 0xe3, 0xc6, 0x96, 0x8c, 0x02, 0xb5, 0xcc,
+			0x0c, 0x5b, 0x28, 0x95, 0x03, 0x00, 0x13, 0xa7,
+			0x9a, 0x65, 0xad, 0xdd, 0x11, 0x18, 0x99, 0x2f,
+			0xd4, 0x45, 0x38, 0x4e, 0x37, 0x82, 0x29, 0x70,
+			0x6a, 0x3b, 0xaf, 0x9a, 0x89, 0x66, 0x79, 0x57,
+			0xfe, 0x73, 0x71, 0x56, 0x92, 0xc9, 0x76, 0x02,
+			0x63, 0x1e, 0xa8, 0x24, 0x1a, 0xeb, 0x9e, 0xac,
+			0x0a, 0xd8, 0x86, 0x5c, 0x75, 0xb1, 0x05, 0x9c,
+			0xd3, 0x4f, 0x4b, 0x90, 0x76, 0xb3, 0xf1, 0x91,
+			0x76, 0xb4, 0x77, 0xee, 0x4c, 0x10, 0x49, 0x20,
+			0xc8, 0x9f, 0x80, 0xd0, 0xbd, 0x78, 0xa8, 0xc9,
+			0x92, 0x6c, 0x66, 0x77, 0x1a, 0xe2, 0x62, 0x0c,
+			0x71, 0x32, 0xd9, 0xf9, 0x83, 0x8b, 0x3c, 0xbd,
+			0x22, 0xb6, 0xf9, 0xe8, 0x72, 0xf4, 0xab, 0x17,
+			0x50, 0x92, 0xf2, 0xf6, 0x8c, 0x6c, 0x09, 0x03,
+			0x68, 0xfc, 0x6a, 0x31, 0x9f, 0x62, 0xeb, 0x4b,
+			0xb5, 0x4a, 0xfa, 0xd9, 0xe3, 0x9e, 0xfb, 0x90,
+			0xa4, 0x52, 0xe4, 0x43, 0xb3, 0x2d, 0x82, 0x66,
+			0x85, 0x45, 0x00, 0x51, 0x3f, 0x36, 0x08, 0x37,
+			0x1e, 0x72, 0xa1, 0xf3, 0x1c, 0x86, 0xdf, 0xd9,
+			0x49, 0x64, 0xa3, 0xf4, 0x46, 0x86, 0xae, 0x62,
+			0x3a, 0x26, 0x7b, 0x22, 0xfb, 0xef, 0x06, 0xb5,
+			0x2d, 0x86, 0xc6, 0xd4, 0x71, 0x76, 0x8c, 0xfd,
+			0xf8, 0x9f, 0x2d, 0xe2, 0xf5, 0x1c, 0x01, 0x98,
+			0xd9, 0xfb, 0xbd, 0xd1, 0xd6, 0x28, 0xc9, 0xe8,
+			0x7c, 0x2c, 0x19, 0xfa, 0x7e, 0x68, 0x0d, 0x92,
+			0x84, 0x0f, 0xb2, 0xca, 0xbb, 0x44, 0x9c, 0xf2,
+			0xd6, 0x6f, 0xa8, 0x00, 0xe9, 0xac, 0x54, 0x93,
+			0x59, 0x17, 0x48, 0x35, 0xba, 0xfb, 0x13, 0x1b,
+			0x78, 0x47, 0x08, 0x9b, 0x22, 0x66, 0xbf, 0x6a,
+			0xef, 0xfb, 0xd5, 0xe9, 0x59, 0xe6, 0x41, 0xd9,
+			0x62, 0x3b, 0xfa, 0x48, 0x1a, 0x18, 0xf7, 0x20,
+			0x64, 0x34, 0xbc, 0xa6, 0x60, 0x2b, 0xbf, 0xad,
+			0x84, 0x8c, 0x9c, 0x79, 0xb7, 0x99, 0xc4, 0xd0,
+			0xf7, 0xe7, 0x30, 0x86, 0xe7, 0xc7, 0x41, 0xcb,
+			0x25, 0x47, 0x47, 0x5a, 0x94, 0x3d, 0x6d, 0x18,
+			0x72, 0xdb, 0xdd, 0x0f, 0x07, 0xd3, 0x4c, 0x3e,
+			0x30, 0x36, 0xa8, 0x81, 0x02, 0xe0, 0x55, 0xc2,
+			0xbc, 0x06, 0xc9, 0x78, 0x82, 0xd4, 0xc8, 0x99,
+			0x77, 0x0b, 0x5d, 0xd4, 0x6c, 0x56, 0x08, 0x1c,
+			0x80, 0x5d, 0x80, 0x30, 0x7b, 0x82, 0xa1, 0x38,
+			0xf8, 0x96, 0xdf, 0xc2, 0xd9, 0xe8, 0x76, 0xc6,
+			0xa9, 0x62, 0xa8, 0x7e, 0xc2, 0x5a, 0x03, 0x66,
+			0xc0, 0x22, 0x20, 0x81, 0xd9, 0xec, 0x62, 0x1d,
+			0x06, 0x58, 0x88, 0x23, 0xfb, 0x84, 0x32, 0x99,
+			0x1e, 0x2d, 0xd2, 0xe2, 0xed, 0x4f, 0x85, 0xbb,
+			0x36, 0xfc, 0x98, 0x34, 0xa7, 0x44, 0x30, 0x29,
+			0x53, 0xbe, 0x24, 0x40, 0x87, 0xc9, 0xd5, 0xbf,
+			0x1a, 0xe4, 0x35, 0x19, 0x66, 0x70, 0x3b, 0xc6,
+			0x3c, 0x2a, 0x12, 0x11, 0xbf, 0xa3, 0x59, 0x58,
+			0x07, 0x1a, 0xdc, 0x94, 0x04, 0xf2, 0xbc, 0xd7,
+			0xf4, 0xeb, 0x07, 0xbb, 0x1a, 0x64, 0x76, 0xd4,
+			0xa1, 0x4a, 0xbe, 0xca, 0xbf, 0x7d, 0xba, 0xa4,
+			0x16, 0x24, 0xf3, 0xc2, 0x66, 0xa2, 0x03, 0xc9,
+			0x59, 0xaa, 0xd1, 0x5b, 0xa7, 0xd5, 0x52, 0x7b,
+			0x50, 0x72, 0x97, 0xa7, 0x74, 0x0c, 0xc6, 0xde,
+			0xe5, 0x7c, 0xc6, 0x48, 0x2d, 0x68, 0x26, 0x38,
+			0x2d, 0x08, 0x3c, 0xf5, 0x1d, 0xcb, 0x45, 0x06,
+			0x5b, 0xaa, 0xe0, 0x87, 0x0c, 0x45, 0xd3, 0x5a,
+			0xe4, 0xab, 0x22, 0xa4, 0xe5, 0x38, 0xda, 0xbf,
+			0x89, 0x4b, 0x39, 0xa0, 0x65, 0xe1, 0x7f, 0xcb,
+			0x82, 0xd1, 0xb8, 0xe4, 0x66, 0xdf, 0xeb, 0x8c,
+			0xbb, 0xa5, 0x2a, 0x4d, 0x85, 0x3a, 0xef, 0xab,
+			0x66, 0x13, 0x55, 0xa9, 0x9b, 0x2f, 0xb6, 0x7e,
+			0x03, 0x3e, 0x45, 0x63, 0xda, 0x25, 0x39, 0x3f,
+			0x8a, 0x8d, 0x9a, 0xd6, 0x01, 0x64, 0x7f, 0x93,
+			0x9c, 0xa3, 0xb6, 0x06, 0x18, 0x3b, 0x43, 0x5b,
+			0x76, 0x7b, 0xb8, 0xb9, 0xf4, 0x38, 0x3d, 0x3e,
+			0x4e, 0x51, 0x66, 0x9a, 0xb3, 0xc3, 0x05, 0xa2,
+			0xbc, 0xca, 0xce, 0xff, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+			0x0c, 0x13, 0x1d, 0x26, 0x2c, },
+	}, {
+		.what = "pure rejection vector",
+		.algo = "ml-dsa65",
+		.pk_len = DILITHIUM65_PUBLICKEYBYTES,
+		.pk = (const u8[DILITHIUM65_PUBLICKEYBYTES]){
+			0xba, 0x4a, 0xf9, 0x35, 0xb4, 0x45, 0x33, 0x86,
+			0xd2, 0xb6, 0xc1, 0x3a, 0x55, 0x85, 0xc1, 0xff,
+			0xca, 0xe0, 0x0e, 0x26, 0x01, 0x6b, 0x1d, 0x88,
+			0x7d, 0x67, 0x6c, 0xa8, 0xac, 0x6d, 0x90, 0xdb,
+			0x60, 0xf2, 0x21, 0xe8, 0x24, 0x95, 0x8c, 0x0d,
+			0x16, 0x41, 0x46, 0x59, 0x08, 0x24, 0xbe, 0x15,
+			0x50, 0x63, 0xf6, 0xe2, 0x2a, 0x36, 0xf4, 0x55,
+			0x2e, 0xb0, 0xab, 0x5b, 0xe0, 0xc0, 0x82, 0x98,
+			0xe3, 0x2f, 0x40, 0x99, 0x4e, 0x8f, 0x1c, 0x08,
+			0x0c, 0xfc, 0x6b, 0x32, 0xbb, 0x5a, 0x28, 0xd1,
+			0xdd, 0xab, 0xc4, 0xf5, 0x04, 0x01, 0x68, 0x26,
+			0x02, 0xb9, 0x76, 0x87, 0x32, 0xed, 0xfc, 0x4c,
+			0x5e, 0x4c, 0xa0, 0x87, 0x87, 0xdb, 0x58, 0x95,
+			0x11, 0x5c, 0x38, 0x42, 0x17, 0xed, 0x16, 0xe2,
+			0xaf, 0x4e, 0x91, 0x4c, 0x3e, 0xe0, 0x57, 0x24,
+			0x60, 0x19, 0x67, 0x39, 0xb9, 0x45, 0x2e, 0x9e,
+			0x20, 0xeb, 0x66, 0x0b, 0xd9, 0xd3, 0x70, 0x82,
+			0x1f, 0xf9, 0xff, 0xe1, 0x5e, 0x1b, 0x83, 0x4d,
+			0x12, 0x3e, 0xe8, 0xdc, 0x33, 0xec, 0x11, 0x3e,
+			0x2b, 0x37, 0x4f, 0xaf, 0x2a, 0x3d, 0x18, 0x63,
+			0x14, 0x8a, 0x8e, 0xfd, 0xd4, 0x75, 0x0a, 0x12,
+			0xb3, 0x02, 0x3f, 0x64, 0x36, 0xfa, 0x4e, 0x9a,
+			0xed, 0x95, 0x37, 0x3c, 0x0d, 0x21, 0x7c, 0xd3,
+			0x90, 0x44, 0xc9, 0xfb, 0x19, 0x19, 0x98, 0xd8,
+			0x5a, 0xe0, 0x74, 0xad, 0x0e, 0xa6, 0xda, 0x2f,
+			0x09, 0xba, 0xe2, 0x77, 0x54, 0xa8, 0xbc, 0xe8,
+			0x13, 0xb2, 0xc3, 0x46, 0x45, 0x9b, 0xc3, 0x08,
+			0x73, 0xf1, 0x53, 0x82, 0xfd, 0x81, 0xca, 0x3e,
+			0xe2, 0x09, 0xa1, 0x73, 0x27, 0x94, 0xd5, 0x76,
+			0xf2, 0xe8, 0x09, 0x0d, 0xaf, 0xe5, 0x4c, 0xa9,
+			0xa3, 0x13, 0x9a, 0xe6, 0xd2, 0x04, 0x87, 0x3d,
+			0x5e, 0x34, 0x65, 0xbf, 0xdc, 0x4b, 0x4b, 0xf5,
+			0xab, 0x28, 0x44, 0x28, 0x76, 0x4a, 0xe4, 0xd2,
+			0x71, 0x03, 0xd3, 0xc2, 0x97, 0x29, 0x19, 0xcf,
+			0xfd, 0x16, 0xad, 0x52, 0x07, 0x50, 0x65, 0x07,
+			0xc6, 0x7e, 0x69, 0x0d, 0xec, 0x26, 0x81, 0x13,
+			0xbf, 0x7c, 0x5e, 0x8a, 0xf0, 0xee, 0xbd, 0x97,
+			0xe5, 0xce, 0x3d, 0x17, 0x9f, 0x38, 0xcf, 0x30,
+			0xe2, 0xf9, 0xd9, 0xc5, 0x1f, 0xf5, 0x20, 0x81,
+			0x79, 0x10, 0x9b, 0xee, 0x8f, 0xed, 0x0c, 0x9b,
+			0x96, 0x87, 0x89, 0x4d, 0xc5, 0x01, 0x19, 0x38,
+			0x11, 0x11, 0x36, 0x71, 0x0f, 0x9f, 0x0f, 0xfb,
+			0x9b, 0x1e, 0xf1, 0x26, 0x3b, 0x10, 0x43, 0xe9,
+			0x4f, 0x14, 0xef, 0xef, 0x34, 0xfc, 0x59, 0xfe,
+			0x82, 0x9e, 0xaa, 0x31, 0x6d, 0x0b, 0xae, 0xb6,
+			0x9e, 0xef, 0xe2, 0xcc, 0x19, 0x27, 0xf0, 0xe9,
+			0xf5, 0xab, 0x03, 0xeb, 0x1f, 0xef, 0x42, 0x75,
+			0x5d, 0xf2, 0x9f, 0x7f, 0xdd, 0xf8, 0x07, 0x45,
+			0x27, 0x8b, 0x6e, 0xb8, 0x25, 0x86, 0xc7, 0xe8,
+			0x4e, 0x1e, 0x60, 0x08, 0xf9, 0x90, 0x9e, 0xf2,
+			0xad, 0xca, 0xdf, 0x56, 0x4f, 0xf6, 0x0a, 0xc3,
+			0x53, 0x2c, 0xf9, 0x2c, 0xdd, 0xd6, 0xf2, 0x9d,
+			0x6d, 0x33, 0x61, 0x2e, 0xb0, 0x3f, 0x16, 0xa0,
+			0x18, 0x8e, 0xcb, 0x33, 0x32, 0x0f, 0x51, 0x6d,
+			0xfe, 0x8a, 0x07, 0x0d, 0x06, 0x42, 0x66, 0x6d,
+			0x67, 0x36, 0xb7, 0x8c, 0x26, 0x27, 0x90, 0xd8,
+			0xe8, 0xd9, 0xc1, 0x97, 0x0f, 0xe3, 0x73, 0x0d,
+			0xa8, 0x47, 0xa8, 0xea, 0x46, 0x8e, 0x52, 0x12,
+			0x2a, 0x67, 0xeb, 0x90, 0xb7, 0x78, 0x47, 0x0c,
+			0x78, 0x22, 0xed, 0xe0, 0xac, 0xdd, 0x9b, 0x2b,
+			0xf1, 0x4c, 0x7d, 0xfb, 0x7f, 0x33, 0xc9, 0xcd,
+			0x73, 0x6d, 0x65, 0x7a, 0xe9, 0xf8, 0xdc, 0xd0,
+			0x09, 0x49, 0x1d, 0x03, 0xed, 0x24, 0xa4, 0xdd,
+			0x0f, 0x68, 0xff, 0x08, 0xe8, 0x01, 0x43, 0xf9,
+			0x42, 0x59, 0x21, 0xf0, 0x21, 0xc5, 0x1b, 0xc4,
+			0x84, 0x8b, 0x5f, 0x6c, 0x31, 0xe7, 0x44, 0x92,
+			0x42, 0xe0, 0xc5, 0x4c, 0x01, 0x05, 0x87, 0xb8,
+			0xda, 0xad, 0x57, 0xb8, 0xb8, 0x55, 0xf5, 0x44,
+			0xac, 0xea, 0xd3, 0xd1, 0x46, 0xe2, 0x89, 0xe2,
+			0x7c, 0x16, 0x25, 0x9a, 0xca, 0x9a, 0xdb, 0x10,
+			0xf1, 0x73, 0x6e, 0xef, 0xca, 0x71, 0x86, 0xeb,
+			0xe3, 0xd6, 0x95, 0xc0, 0xc0, 0x9b, 0xb5, 0x47,
+			0x12, 0x75, 0x27, 0x7c, 0x65, 0xfe, 0x5d, 0x62,
+			0xaa, 0x55, 0x47, 0x8a, 0x9b, 0xbf, 0x18, 0xcb,
+			0x52, 0x57, 0x5e, 0x2c, 0xda, 0xd1, 0x49, 0x1f,
+			0x8f, 0x75, 0x6a, 0x38, 0x75, 0x7a, 0x82, 0x41,
+			0x46, 0x1c, 0xd4, 0xf3, 0xdb, 0xf8, 0x4a, 0x0c,
+			0x55, 0x21, 0x87, 0xfc, 0xf4, 0x71, 0x0a, 0x3d,
+			0x07, 0xea, 0x79, 0x18, 0x89, 0xdd, 0x97, 0x9f,
+			0x52, 0x30, 0x78, 0xb0, 0x54, 0x7f, 0xfc, 0x6c,
+			0x8c, 0x4f, 0xc9, 0xbd, 0x22, 0x00, 0xef, 0xd8,
+			0x27, 0x26, 0xb3, 0x5f, 0x60, 0x14, 0xad, 0x69,
+			0x46, 0x84, 0xdc, 0x38, 0xbd, 0xfb, 0x4e, 0x46,
+			0xec, 0xa6, 0x90, 0x25, 0xe5, 0x31, 0xff, 0xd5,
+			0xce, 0x74, 0x1f, 0xca, 0xae, 0x4b, 0x5a, 0x2f,
+			0x53, 0x13, 0xd7, 0x6f, 0x32, 0x25, 0x57, 0xb1,
+			0x88, 0x0b, 0x9c, 0xad, 0x54, 0x00, 0xcd, 0x2c,
+			0xec, 0x5d, 0x46, 0x4c, 0xbc, 0x93, 0x5b, 0xb1,
+			0xde, 0xf3, 0x05, 0x96, 0x60, 0x4a, 0xd1, 0xa9,
+			0x52, 0xd5, 0xfd, 0x0a, 0xd0, 0x84, 0x06, 0x91,
+			0x00, 0xf9, 0xf4, 0x47, 0x1c, 0xc8, 0x46, 0x99,
+			0xcb, 0x25, 0x23, 0x64, 0x9c, 0xa2, 0x79, 0xe3,
+			0x04, 0xe9, 0x90, 0x83, 0xb6, 0xe6, 0x3f, 0xac,
+			0x1a, 0x46, 0xa3, 0x9b, 0x07, 0xeb, 0xbd, 0xf8,
+			0x3d, 0xc0, 0xd1, 0x2c, 0x35, 0x29, 0x58, 0xf9,
+			0x24, 0x49, 0xef, 0xff, 0x33, 0x84, 0x21, 0xb0,
+			0x71, 0x67, 0x4a, 0xb8, 0xa6, 0x81, 0x9f, 0xe8,
+			0x1a, 0x27, 0xf6, 0x8e, 0xfa, 0xda, 0xda, 0x0a,
+			0xdf, 0xd8, 0x96, 0x9e, 0xd2, 0x09, 0x82, 0x09,
+			0x5b, 0x39, 0xcd, 0x92, 0x24, 0xf8, 0xea, 0x60,
+			0x7c, 0x84, 0x51, 0x62, 0x00, 0xc1, 0xc9, 0x29,
+			0x75, 0xa5, 0x53, 0x5c, 0x19, 0xe1, 0xdd, 0x21,
+			0xd8, 0x9a, 0xa5, 0x42, 0x85, 0xd6, 0x03, 0x92,
+			0x13, 0x68, 0x09, 0x11, 0xae, 0x60, 0xb4, 0x61,
+			0xf5, 0xf0, 0x72, 0xc6, 0xb8, 0x02, 0x1e, 0xb6,
+			0xa1, 0xd5, 0x52, 0xfa, 0xde, 0xf9, 0x41, 0xc3,
+			0x45, 0xb9, 0xe1, 0x1b, 0xa8, 0xb9, 0xff, 0xff,
+			0x05, 0x38, 0xef, 0x61, 0x97, 0x87, 0x18, 0x4f,
+			0x65, 0x77, 0xef, 0x70, 0xfe, 0x14, 0x21, 0xd6,
+			0x1a, 0x39, 0x92, 0xbf, 0x66, 0xfa, 0xb8, 0xf4,
+			0x3d, 0xba, 0x86, 0x92, 0x13, 0xfe, 0x43, 0x4f,
+			0x92, 0xc0, 0x3d, 0x17, 0x47, 0x19, 0xe6, 0xfc,
+			0xa0, 0x6e, 0x6b, 0x6a, 0xb3, 0x44, 0x03, 0x3b,
+			0x43, 0xe3, 0x4c, 0x9a, 0x0f, 0xb9, 0xbe, 0x71,
+			0xc4, 0x87, 0x0c, 0xdb, 0xa3, 0x87, 0xf6, 0x33,
+			0x35, 0x12, 0xa1, 0x78, 0xda, 0x9b, 0x46, 0x9f,
+			0x1b, 0x3a, 0x61, 0x49, 0x60, 0xab, 0x72, 0x88,
+			0x43, 0x82, 0xe5, 0x2d, 0xc9, 0xa9, 0x13, 0xb2,
+			0xd6, 0x01, 0xf1, 0xa9, 0xd3, 0x33, 0xca, 0xcd,
+			0x03, 0x1b, 0x2c, 0x8b, 0x42, 0xb7, 0x4d, 0xba,
+			0x6c, 0x03, 0xc9, 0x64, 0x8f, 0xe0, 0xd0, 0x4f,
+			0xa4, 0x0c, 0xad, 0x8a, 0x49, 0x45, 0x95, 0x9d,
+			0xcb, 0x50, 0x30, 0x82, 0x01, 0x9c, 0xf2, 0x71,
+			0xfd, 0xf3, 0x71, 0xfb, 0xe6, 0xa2, 0x2e, 0xd2,
+			0xe4, 0x69, 0x2e, 0x66, 0x48, 0x86, 0xd1, 0x49,
+			0xf7, 0xa8, 0x31, 0x61, 0xa7, 0xe0, 0xfd, 0x09,
+			0xa8, 0x04, 0x6c, 0x2f, 0xdf, 0xdd, 0x15, 0x21,
+			0xd9, 0x4f, 0xaa, 0x7e, 0x29, 0xd8, 0x54, 0x6b,
+			0xf1, 0x12, 0x96, 0x52, 0x73, 0x23, 0xbd, 0x63,
+			0xaa, 0xb0, 0xb5, 0x6c, 0x6b, 0x21, 0x00, 0xa0,
+			0xc8, 0x13, 0xd4, 0xe1, 0xab, 0x0b, 0xf9, 0x79,
+			0xe8, 0x53, 0x2b, 0x1f, 0x57, 0xc4, 0x4d, 0x7d,
+			0x85, 0x30, 0xb4, 0x6a, 0x04, 0x2b, 0x56, 0x21,
+			0xd5, 0xd1, 0x3d, 0x86, 0xf0, 0x53, 0xbe, 0x89,
+			0x00, 0xdc, 0x84, 0x3e, 0x4b, 0x65, 0xb2, 0x30,
+			0x24, 0xa3, 0x57, 0x42, 0x77, 0x33, 0x5d, 0xc7,
+			0x8c, 0xa7, 0x89, 0xf2, 0xa8, 0x2c, 0x0c, 0xf5,
+			0x15, 0xd4, 0xe6, 0x89, 0x69, 0x9b, 0xb0, 0x9b,
+			0x72, 0xd7, 0x1c, 0xc0, 0xaf, 0x35, 0x31, 0x0d,
+			0xee, 0x92, 0x7b, 0x90, 0x32, 0x3a, 0x93, 0x0a,
+			0xd1, 0x73, 0x39, 0x37, 0x4f, 0xd0, 0x7d, 0x9f,
+			0x40, 0x2e, 0x86, 0xff, 0xb5, 0xf6, 0x02, 0x32,
+			0x39, 0x0a, 0x1f, 0x1a, 0x4e, 0xcc, 0xf2, 0xae,
+			0x74, 0x46, 0x76, 0xc7, 0xef, 0xff, 0xf2, 0xf7,
+			0x05, 0x30, 0xc4, 0xa6, 0x84, 0x0f, 0x8d, 0x4b,
+			0xfd, 0x63, 0x84, 0x82, 0x3f, 0xdb, 0x2f, 0x9c,
+			0x58, 0x81, 0xc5, 0x5c, 0x92, 0x5a, 0x3d, 0x6b,
+			0xf1, 0x26, 0xc6, 0xc4, 0xaa, 0x10, 0x99, 0x63,
+			0xe5, 0x66, 0xf7, 0x14, 0xfc, 0xed, 0x51, 0xce,
+			0x0e, 0x59, 0x83, 0xd6, 0xc7, 0x9a, 0xe4, 0xeb,
+			0x8a, 0x5e, 0x84, 0xd1, 0x51, 0xd9, 0xc4, 0x34,
+			0xe7, 0x21, 0x68, 0x34, 0x04, 0xb4, 0x9b, 0x4f,
+			0x8b, 0xa6, 0xd6, 0x19, 0x83, 0x68, 0xd4, 0x12,
+			0xac, 0xf9, 0xad, 0xb2, 0x4f, 0x42, 0x7d, 0xe2,
+			0x57, 0x00, 0x94, 0xf8, 0xdb, 0xeb, 0xe9, 0xcb,
+			0xb2, 0x24, 0x61, 0x28, 0x99, 0x80, 0x06, 0x50,
+			0x20, 0x87, 0xd9, 0x71, 0xc6, 0xcb, 0x11, 0x8c,
+			0x3f, 0x41, 0xdb, 0x17, 0xa6, 0xd0, 0x3c, 0x42,
+			0xbe, 0x31, 0x83, 0xe8, 0x3e, 0x09, 0x1d, 0xb3,
+			0x42, 0x51, 0xcf, 0x8e, 0x13, 0xc0, 0xed, 0x0f,
+			0x73, 0x13, 0x3c, 0x19, 0x99, 0xd7, 0xe4, 0x61,
+			0x13, 0x23, 0x8f, 0x77, 0x20, 0xcc, 0x4b, 0xf1,
+			0x0c, 0xc2, 0xc6, 0xef, 0xad, 0x1f, 0x29, 0xa6,
+			0x34, 0x73, 0xc5, 0x12, 0x5a, 0x7c, 0x6b, 0x2f,
+			0x69, 0x4d, 0xb5, 0x75, 0xf6, 0x67, 0xb5, 0x06,
+			0x2c, 0xed, 0x32, 0xd1, 0x78, 0xd4, 0x9a, 0xdb,
+			0x47, 0x40, 0xe7, 0xa9, 0x8b, 0xd6, 0x8a, 0xd2,
+			0xf1, 0x70, 0xe3, 0xa8, 0xe1, 0x66, 0xa0, 0xe7,
+			0x18, 0x65, 0x5f, 0xe7, 0x0c, 0xf9, 0xd7, 0x90,
+			0x28, 0xf0, 0x5e, 0x9c, 0x80, 0x69, 0xac, 0x2b,
+			0x65, 0x09, 0xe6, 0xde, 0x32, 0xf1, 0x5e, 0xa3,
+			0x6d, 0xb0, 0x49, 0xe0, 0x45, 0xcf, 0xaa, 0xd2,
+			0x06, 0x6b, 0x97, 0x5c, 0xb7, 0xb3, 0x40, 0x3c,
+			0xb8, 0x86, 0x5f, 0x21, 0x82, 0xf4, 0x01, 0x24,
+			0x11, 0xa9, 0x35, 0x37, 0x09, 0x66, 0xa6, 0x1f,
+			0x85, 0xc5, 0x7a, 0xb9, 0xf9, 0xfe, 0x1c, 0x47,
+			0x47, 0xfe, 0xa2, 0x9b, 0x65, 0xd4, 0x68, 0xe3,
+			0x32, 0x23, 0x84, 0x2c, 0x17, 0x8e, 0x24, 0x2e,
+			0x1e, 0xd3, 0xbb, 0xd1, 0x3a, 0x8b, 0xe8, 0x08,
+			0xf0, 0x0c, 0x78, 0xdc, 0x51, 0xf0, 0x6a, 0xdd,
+			0xa4, 0xf9, 0x89, 0x07, 0x06, 0xf5, 0x10, 0xd2,
+			0x6b, 0x4a, 0xfd, 0x38, 0xb0, 0x72, 0xe4, 0xb1,
+			0xd2, 0x92, 0x96, 0xe6, 0xc9, 0xae, 0xab, 0xee,
+			0x5d, 0x64, 0xa0, 0x60, 0xf5, 0x48, 0x0a, 0xab,
+			0x59, 0x68, 0xc7, 0x3c, 0x0c, 0x56, 0xad, 0x6d,
+			0xc3, 0x2c, 0xed, 0xcf, 0x5d, 0xbd, 0xd7, 0xf3,
+			0x7d, 0x8d, 0x6a, 0x8d, 0x28, 0xbc, 0x4f, 0x0c,
+			0xab, 0x06, 0xc6, 0x32, 0xe6, 0x8a, 0xba, 0xa8,
+			0xba, 0x2a, 0x5d, 0xc7, 0xbf, 0xc8, 0xf5, 0x69,
+			0x7b, 0x37, 0x38, 0xe8, 0x4d, 0xf6, 0xb8, 0xe3,
+			0x94, 0x84, 0xba, 0x76, 0x3a, 0x2c, 0xa4, 0x06,
+			0xdd, 0xbd, 0xbc, 0x2b, 0x26, 0x8f, 0x92, 0x7a,
+			0x7e, 0xa4, 0x3a, 0xb1, 0xf6, 0x5f, 0x38, 0x85,
+			0xd3, 0xf6, 0x95, 0x6d, 0xb9, 0x1d, 0xe8, 0x5f,
+			0xda, 0x22, 0x22, 0xcc, 0x1f, 0x5e, 0x79, 0xd9,
+			0xab, 0x03, 0x5c, 0xb9, 0x16, 0xcd, 0x3c, 0x16,
+			0xcd, 0x2e, 0x49, 0xe3, 0x94, 0x58, 0x05, 0x2c,
+			0xd7, 0x6c, 0x10, 0xd6, 0x40, 0x4f, 0xa4, 0x7c,
+			0xec, 0xac, 0x2b, 0xb2, 0xef, 0x39, 0x2e, 0x6b,
+			0x01, 0x6d, 0x13, 0x07, 0x46, 0x31, 0xe6, 0xf7,
+			0x33, 0xdd, 0x5b, 0x58, 0x62, 0x84, 0xc2, 0xdf,
+			0xf0, 0x83, 0xcb, 0xa3, 0x87, 0xdb, 0x31, 0x70,
+			0x48, 0x8c, 0xd0, 0xcf, 0xa8, 0x94, 0x21, 0x6a,
+			0xe6, 0xb9, 0x18, 0xdb, 0x3a, 0x44, 0x79, 0x92,
+			0x6d, 0xec, 0x25, 0xa9, 0xde, 0x32, 0xa2, 0x70,
+			0x0a, 0x65, 0x96, 0x35, 0x7f, 0xde, 0xe5, 0xc4,
+			0x80, 0xb8, 0x78, 0x4b, 0x95, 0xff, 0xf6, 0xe7,
+			0x2f, 0x44, 0x52, 0x49, 0x98, 0x1c, 0x8a, 0xe2,
+			0x76, 0x62, 0x28, 0x96, 0x87, 0xde, 0xce, 0xef,
+			0x43, 0xf8, 0x04, 0x2f, 0xdf, 0x4a, 0x04, 0xfd,
+			0xb3, 0x83, 0xcd, 0xd4, 0x60, 0xa8, 0xcc, 0x94,
+			0x0d, 0x30, 0xe7, 0x79, 0xfd, 0x93, 0xe0, 0x1e,
+			0xc9, 0xd6, 0x34, 0x3a, 0x1f, 0x52, 0x50, 0x14,
+			0xc9, 0x97, 0xc0, 0xad, 0x78, 0xa2, 0x47, 0xcc,
+			0x7c, 0xb2, 0xb6, 0x17, 0xee, 0x37, 0xcc, 0x9a,
+			0x14, 0xc2, 0x27, 0xf8, 0xf9, 0x28, 0x5e, 0xfb,
+			0x44, 0xf7, 0xe0, 0x75, 0x19, 0xb7, 0x0f, 0x96,
+			0xb2, 0xef, 0x51, 0xac, 0x2e, 0x50, 0xbb, 0x93,
+			0x44, 0x69, 0xcc, 0x1c, 0xa5, 0xc5, 0xa2, 0x39,
+			0xa3, 0x00, 0x5e, 0x72, 0x20, 0x77, 0x1d, 0x6c,
+			0x46, 0x41, 0xe6, 0x89, 0x70, 0x2d, 0xfd, 0x4c,
+			0xe5, 0xc4, 0xce, 0xbf, 0x94, 0x01, 0xbd, 0x34,
+			0xd2, 0x9d, 0xea, 0xe7, 0x75, 0xcf, 0x3b, 0x0a,
+			0xf2, 0x58, 0x7b, 0x6a, 0x16, 0xef, 0x98, 0xae,
+			0x52, 0x57, 0xd5, 0x4a, 0x4d, 0xc1, 0xb3, 0xb9,
+			0x17, 0x96, 0x1d, 0xa8, 0xe0, 0x91, 0x07, 0xea,
+			0x50, 0xc1, 0x00, 0x0a, 0xa0, 0xa5, 0x5e, 0x45,
+			0x5a, 0xe4, 0xa8, 0x96, 0xc7, 0x8a, 0x70, 0xea,
+			0x88, 0x8d, 0x25, 0xef, 0xec, 0xd8, 0x88, 0x81,
+			0xa7, 0xa3, 0xbc, 0x5a, 0x4f, 0xc1, 0x7a, 0x91,
+			0x41, 0x8c, 0x01, 0xdf, 0x30, 0xda, 0x29, 0x5d,
+			0xdb, 0x46, 0xe3, 0x23, 0x61, 0x61, 0x91, 0x76,
+			0x42, 0xce, 0xb7, 0xdb, 0xe1, 0xb3, 0x9b, 0xbc,
+			0x74, 0x05, 0x03, 0x07, 0x97, 0xaf, 0x27, 0x3a,
+			0x82, 0x2a, 0xcc, 0x8d, 0x01, 0xae, 0x79, 0x0b,
+			0x8c, 0xdc, 0x24, 0x81, 0x3c, 0xe1, 0xbf, 0xc3,
+			0x89, 0xad, 0x6d, 0x8f, 0x22, 0xd6, 0x11, 0x77,
+			0xc4, 0xf7, 0x2f, 0x51, 0xe0, 0x00, 0x5c, 0x80,
+			0x76, 0x97, 0x0c, 0xd9, 0xd4, 0x98, 0xd6, 0x34,
+			0x42, 0x9c, 0xd6, 0x48, 0x62, 0x05, 0x81, 0x10,
+			0x86, 0x6e, 0xd5, 0x84, 0x29, 0x87, 0xf0, 0x43,
+			0x09, 0x13, 0x0f, 0x81, 0x1b, 0x60, 0xfc, 0xac,
+			0x99, 0x90, 0xea, 0xa1, 0x54, 0x84, 0x3b, 0x4e,
+			0xa6, 0xe4, 0xf6, 0xf9, 0xa6, 0x7d, 0x7c, 0xfe,
+			},
+		.msg_len = 64,
+		.msg = (const u8[64]){
+			0x16, 0x02, 0xe1, 0xd5, 0xb2, 0x06, 0x9b, 0x7c,
+			0x7c, 0x48, 0xd3, 0x12, 0x2a, 0xc3, 0xa0, 0x1f,
+			0x88, 0xef, 0xfa, 0x08, 0x15, 0x37, 0xcd, 0x04,
+			0x1d, 0x13, 0x67, 0x03, 0x94, 0xa5, 0x78, 0x2c,
+			0xfb, 0xb6, 0xd6, 0x62, 0x59, 0x47, 0x1c, 0x7a,
+			0xba, 0xf2, 0x88, 0x3c, 0x45, 0x93, 0xa8, 0x8d,
+			0x3d, 0x8d, 0x4b, 0x09, 0x6d, 0x66, 0x9a, 0x6a,
+			0xee, 0xec, 0x6e, 0x31, 0x42, 0xff, 0xcf, 0x38,
+			},
+		.sig_len = DILITHIUM65_CRYPTO_BYTES,
+		.sig = (const u8[DILITHIUM65_CRYPTO_BYTES]){
+			0x3d, 0x5e, 0x39, 0x2c, 0xd1, 0x70, 0x40, 0x56,
+			0x81, 0x94, 0x18, 0xae, 0x2d, 0xc8, 0x5e, 0x56,
+			0x69, 0x3b, 0x55, 0xcd, 0x09, 0xf2, 0x8f, 0xf6,
+			0xdc, 0xff, 0x95, 0xd2, 0x9c, 0xff, 0x3a, 0xd8,
+			0xcc, 0x3e, 0x2f, 0x77, 0x25, 0xb8, 0xd1, 0x50,
+			0xc3, 0x96, 0x5b, 0x78, 0xb3, 0x25, 0x7c, 0x53,
+			0x58, 0xb9, 0x3a, 0x56, 0x4b, 0xeb, 0x31, 0x7c,
+			0x8f, 0xd4, 0xc8, 0xd2, 0x9e, 0xe7, 0xe5, 0x0d,
+			0x33, 0xff, 0xf2, 0xb8, 0x78, 0xf0, 0x6c, 0xa4,
+			0xb4, 0xec, 0xe9, 0xc8, 0x93, 0xcd, 0xc0, 0xde,
+			0x85, 0xcf, 0x2d, 0x07, 0xdd, 0xee, 0xd7, 0xff,
+			0x23, 0xb7, 0x13, 0x96, 0x63, 0xbf, 0x18, 0xce,
+			0x84, 0x4f, 0x68, 0x88, 0xc0, 0x65, 0x97, 0x1e,
+			0x6e, 0x95, 0xff, 0xbe, 0xed, 0xaa, 0x93, 0xa3,
+			0x8e, 0xd0, 0x14, 0xbc, 0x6f, 0x11, 0x66, 0x69,
+			0x75, 0x90, 0x4f, 0x81, 0xbf, 0xa2, 0x64, 0x39,
+			0x78, 0x56, 0x9a, 0xa9, 0x92, 0xe6, 0x56, 0x2a,
+			0xa1, 0x15, 0xf9, 0xdc, 0xc9, 0x0d, 0xf5, 0x7a,
+			0x70, 0x82, 0x2c, 0x9d, 0xde, 0x73, 0x2e, 0x0c,
+			0xc9, 0x2a, 0x41, 0x64, 0xee, 0x4c, 0xe7, 0xb8,
+			0xc6, 0x76, 0xab, 0xb0, 0xab, 0xec, 0x11, 0x7f,
+			0x19, 0xdf, 0x49, 0x6e, 0x7e, 0x35, 0x47, 0x3f,
+			0x16, 0x08, 0x75, 0x30, 0x18, 0x1f, 0x55, 0x96,
+			0x46, 0xb7, 0x31, 0x54, 0xa8, 0x8f, 0xa8, 0x61,
+			0xc4, 0x45, 0xec, 0x54, 0x09, 0xe1, 0x52, 0xf7,
+			0x71, 0x29, 0x11, 0xb8, 0xea, 0x81, 0xd9, 0x55,
+			0x03, 0xea, 0x73, 0x4a, 0x3b, 0x55, 0x23, 0x0e,
+			0x65, 0x85, 0xed, 0x8f, 0x76, 0xda, 0x73, 0x50,
+			0x69, 0x44, 0xa4, 0xae, 0x0c, 0x6c, 0x4e, 0x3a,
+			0x70, 0x7b, 0x8c, 0xee, 0xef, 0x6c, 0x9a, 0x6b,
+			0xca, 0x96, 0x4e, 0x77, 0x8a, 0x02, 0xa0, 0x28,
+			0x6c, 0xab, 0x4b, 0xe1, 0x5e, 0x88, 0x4b, 0x47,
+			0x9a, 0x9b, 0x8c, 0x93, 0xa9, 0x78, 0x38, 0xff,
+			0x42, 0x36, 0xe8, 0xd9, 0xcc, 0x9f, 0xf4, 0x34,
+			0xa7, 0xb4, 0x2d, 0xe0, 0x2c, 0xd6, 0x2a, 0xf8,
+			0x48, 0xe8, 0xbb, 0x0b, 0x82, 0xa7, 0xb8, 0xc2,
+			0x51, 0xdc, 0x29, 0x3c, 0x76, 0x16, 0x81, 0xdd,
+			0xfa, 0x15, 0x7c, 0xc3, 0xd5, 0xd2, 0x8f, 0xde,
+			0xcd, 0x40, 0x14, 0x65, 0x21, 0x79, 0x9c, 0x71,
+			0x81, 0xf6, 0x37, 0x2b, 0x75, 0xf7, 0x33, 0xb4,
+			0x98, 0xe9, 0x02, 0xa7, 0xb5, 0xd7, 0xa4, 0xbe,
+			0xeb, 0x98, 0xbb, 0x5a, 0x37, 0x69, 0x5e, 0xb6,
+			0x11, 0x5c, 0xef, 0xef, 0xf8, 0x2e, 0xb0, 0x1d,
+			0x3f, 0xc6, 0x4a, 0xe6, 0x1a, 0x9a, 0xcd, 0xe9,
+			0x89, 0x93, 0x3f, 0xbd, 0x89, 0xeb, 0x7f, 0xbb,
+			0x9a, 0x8d, 0x8e, 0xd6, 0x5a, 0xe9, 0x45, 0xfd,
+			0xf1, 0x20, 0x56, 0x5c, 0x60, 0x89, 0x60, 0x79,
+			0xaa, 0x96, 0x70, 0xa6, 0xf8, 0xf3, 0xd5, 0x79,
+			0xf4, 0x3d, 0xfb, 0xe0, 0xa3, 0x3b, 0x17, 0x14,
+			0xf7, 0xe8, 0x21, 0x20, 0x02, 0xf3, 0x9d, 0x09,
+			0x5b, 0xc3, 0xb4, 0xe8, 0x47, 0x6e, 0xab, 0xc9,
+			0xd1, 0x8c, 0xba, 0x58, 0x45, 0x2a, 0x38, 0x9b,
+			0xdb, 0xb9, 0xf7, 0x67, 0x9d, 0x44, 0x5b, 0x95,
+			0xdd, 0x13, 0x1a, 0x27, 0x1b, 0xf7, 0xfb, 0x6b,
+			0xb7, 0x53, 0x44, 0x23, 0x06, 0x69, 0x55, 0x05,
+			0x82, 0xd2, 0xcf, 0x04, 0xe2, 0x85, 0x3d, 0x5c,
+			0xdf, 0xfd, 0xcb, 0xa3, 0x74, 0x51, 0x1a, 0x93,
+			0xc2, 0x64, 0x22, 0xae, 0x7c, 0x85, 0x09, 0xca,
+			0xb2, 0xe2, 0x9f, 0xaf, 0xde, 0x69, 0xc8, 0x44,
+			0xdf, 0x78, 0x49, 0x01, 0x3d, 0xbf, 0x99, 0x29,
+			0x81, 0x31, 0x54, 0x03, 0x99, 0x2f, 0x14, 0x75,
+			0x02, 0x8a, 0x77, 0x71, 0x3d, 0xb7, 0x6c, 0x12,
+			0x26, 0x08, 0x9a, 0x59, 0x59, 0xc0, 0x77, 0xd0,
+			0xc1, 0x63, 0xb9, 0x41, 0xf8, 0x90, 0x02, 0xdb,
+			0x0e, 0x00, 0xa9, 0xa7, 0xfd, 0xa7, 0x31, 0x2e,
+			0x14, 0xee, 0xd8, 0x69, 0x0a, 0x60, 0x01, 0xca,
+			0x11, 0x91, 0x1a, 0xd1, 0x40, 0x03, 0x2f, 0x43,
+			0xaf, 0x09, 0xe7, 0x65, 0x47, 0x6e, 0x14, 0xff,
+			0x36, 0xdc, 0x1d, 0xd8, 0xaf, 0x5e, 0xff, 0x47,
+			0x4f, 0x2c, 0x81, 0x7c, 0xa5, 0x1e, 0x3a, 0x31,
+			0xce, 0xea, 0x2b, 0x5a, 0x42, 0x06, 0x0b, 0x3c,
+			0xc1, 0x12, 0x0e, 0x14, 0xcc, 0xc7, 0x45, 0xe5,
+			0x44, 0x96, 0x41, 0x23, 0x1e, 0x31, 0xa1, 0xd3,
+			0xfc, 0x54, 0x47, 0x3a, 0xa6, 0xbe, 0x7b, 0x00,
+			0x23, 0x28, 0x32, 0x7d, 0x76, 0xfb, 0x98, 0xad,
+			0xbc, 0x96, 0x57, 0xdf, 0xfe, 0x28, 0xdd, 0x16,
+			0x95, 0xd2, 0x8f, 0x1f, 0x74, 0x02, 0x05, 0xd2,
+			0x9f, 0x83, 0xf0, 0xf4, 0xc1, 0xd6, 0x31, 0x3d,
+			0x03, 0xe6, 0xec, 0xc7, 0x53, 0xba, 0x21, 0x18,
+			0x88, 0x61, 0x00, 0x98, 0x74, 0x25, 0xde, 0x75,
+			0xc1, 0xd9, 0xf7, 0x36, 0xa2, 0xbd, 0x1d, 0xe3,
+			0xe2, 0x0b, 0xb1, 0xf6, 0xeb, 0xea, 0x03, 0x5c,
+			0xfd, 0x98, 0x97, 0xdd, 0x7e, 0x9f, 0xcf, 0x8f,
+			0x76, 0x37, 0xc1, 0x1f, 0xbd, 0x69, 0x77, 0x9c,
+			0xd9, 0xa9, 0xc6, 0xf1, 0x25, 0xbe, 0x85, 0xde,
+			0x3c, 0x08, 0xda, 0x88, 0xeb, 0xcd, 0xcb, 0x91,
+			0xb1, 0x83, 0x79, 0xa8, 0x9b, 0x1f, 0xd8, 0x5d,
+			0x06, 0xee, 0x16, 0x63, 0xc4, 0x4c, 0xdb, 0xc3,
+			0x9c, 0x49, 0x9e, 0xb8, 0x90, 0x4f, 0x0c, 0x59,
+			0x34, 0xe0, 0x6d, 0x8d, 0x91, 0x24, 0x9b, 0x7d,
+			0xa3, 0xa4, 0xb9, 0xa5, 0xc9, 0x77, 0x0b, 0x9c,
+			0x6e, 0xfa, 0x76, 0x43, 0x8b, 0x41, 0x88, 0x6d,
+			0x5e, 0x74, 0x64, 0x6c, 0xd8, 0x4e, 0xe0, 0x78,
+			0x9d, 0x52, 0x85, 0xd7, 0x8a, 0x90, 0xec, 0xe8,
+			0x55, 0x54, 0x8e, 0x99, 0xc0, 0xa3, 0xad, 0x31,
+			0x26, 0x9a, 0x29, 0x2a, 0xef, 0xf2, 0xac, 0x9e,
+			0x84, 0xd8, 0x9d, 0xcf, 0x9e, 0x36, 0xd0, 0x3d,
+			0xcd, 0x69, 0x1f, 0x49, 0x91, 0xc3, 0xea, 0xd5,
+			0xd4, 0xde, 0x70, 0x67, 0xe9, 0x92, 0x90, 0xd3,
+			0x41, 0x76, 0xc2, 0xf6, 0x78, 0xcf, 0x3d, 0x9c,
+			0xac, 0xdf, 0x47, 0xd3, 0x80, 0x4f, 0x03, 0xa4,
+			0x04, 0x70, 0x9a, 0xd8, 0x96, 0xc2, 0x28, 0xd9,
+			0x4b, 0xe4, 0xc6, 0x2b, 0x91, 0x1b, 0x96, 0xe8,
+			0x29, 0x87, 0xcc, 0x82, 0x2e, 0xbb, 0xb0, 0xd6,
+			0x3a, 0xc0, 0xa8, 0xbc, 0xf8, 0x28, 0x75, 0x1f,
+			0xf8, 0x99, 0x12, 0xb5, 0x85, 0xa0, 0x15, 0x6c,
+			0x89, 0x24, 0x97, 0xec, 0x8d, 0x4f, 0xcc, 0x95,
+			0x8a, 0x81, 0x9c, 0xb8, 0x3d, 0x15, 0x16, 0x7b,
+			0x3c, 0x30, 0x9a, 0xba, 0x00, 0xfa, 0x37, 0x8c,
+			0x6c, 0x89, 0x07, 0x6c, 0x68, 0x67, 0xea, 0x7e,
+			0xa3, 0x66, 0x82, 0x96, 0x92, 0x63, 0x92, 0x3a,
+			0x50, 0xc7, 0xe2, 0xb0, 0xd5, 0x76, 0xda, 0xa3,
+			0xa0, 0xa3, 0x28, 0x35, 0x68, 0x11, 0xe9, 0xcb,
+			0xdd, 0xa2, 0xbe, 0x56, 0x83, 0xa1, 0x90, 0x17,
+			0x6d, 0x16, 0x0f, 0x67, 0xfa, 0xd8, 0xef, 0x69,
+			0x97, 0xdc, 0xbd, 0xaa, 0x66, 0xcd, 0x8e, 0x4b,
+			0x8d, 0x5e, 0x7c, 0xb2, 0x13, 0x22, 0x09, 0xce,
+			0x93, 0x7e, 0x01, 0xa1, 0x2b, 0x0c, 0x94, 0x68,
+			0x1e, 0xa4, 0x64, 0x8f, 0x8f, 0x75, 0x9b, 0xa6,
+			0x0f, 0x6e, 0x52, 0x09, 0x3b, 0x56, 0x97, 0x25,
+			0x2c, 0x94, 0x0c, 0xc2, 0xdb, 0x37, 0x0e, 0x9b,
+			0xac, 0x57, 0x49, 0x36, 0xd5, 0x13, 0x18, 0xd9,
+			0xf4, 0x76, 0xf6, 0x2b, 0xaf, 0x07, 0xd0, 0x0d,
+			0x94, 0xc9, 0xf9, 0x0c, 0xd5, 0x7f, 0x76, 0xe1,
+			0x88, 0xc6, 0xce, 0xdb, 0x98, 0x2b, 0x18, 0xa8,
+			0x42, 0x8f, 0x74, 0x9e, 0x51, 0x00, 0xf8, 0x06,
+			0x06, 0x2d, 0xcc, 0x89, 0xb4, 0xec, 0x53, 0xba,
+			0xee, 0x4b, 0x42, 0x8d, 0x6f, 0x7c, 0xca, 0x35,
+			0xb9, 0x53, 0xc0, 0x65, 0xb0, 0x86, 0x97, 0xbd,
+			0xf6, 0x33, 0x54, 0x16, 0xfb, 0x92, 0x61, 0x60,
+			0xf0, 0xfd, 0x90, 0x13, 0xa6, 0xb8, 0x94, 0x35,
+			0x6a, 0xd7, 0x0b, 0xe4, 0x37, 0x1e, 0x12, 0x44,
+			0x1b, 0xb3, 0xda, 0x65, 0x08, 0x1c, 0x22, 0x3a,
+			0x0e, 0x72, 0x7e, 0xec, 0x57, 0x4d, 0x8d, 0x1f,
+			0x7d, 0xb8, 0xf8, 0x37, 0x67, 0x93, 0xc2, 0x9a,
+			0xac, 0x17, 0xd3, 0xfe, 0x10, 0x7c, 0xe9, 0xcb,
+			0x3e, 0x79, 0xba, 0x0e, 0x61, 0xe7, 0x6b, 0xb2,
+			0x97, 0x6f, 0xe1, 0x37, 0x8c, 0x45, 0x50, 0xd7,
+			0x0f, 0x26, 0x5c, 0xee, 0xa4, 0xf3, 0x90, 0xe2,
+			0x72, 0xf6, 0x4b, 0x5e, 0x6c, 0x44, 0x90, 0x2b,
+			0xbd, 0x7e, 0x25, 0xaf, 0xfc, 0xc4, 0xe7, 0xb4,
+			0x25, 0xac, 0x68, 0x01, 0x72, 0x38, 0x31, 0xfe,
+			0x02, 0x29, 0xaf, 0x90, 0x68, 0x2f, 0xbf, 0xe8,
+			0xc4, 0x81, 0x77, 0xc2, 0xe0, 0xd3, 0xe9, 0x5b,
+			0xb8, 0x21, 0xbf, 0xb2, 0xe5, 0x4f, 0x14, 0xcd,
+			0x93, 0xee, 0x0e, 0x8a, 0x24, 0x9e, 0x95, 0x01,
+			0x5b, 0x76, 0xc7, 0x9f, 0x04, 0xdb, 0x6e, 0x00,
+			0xbe, 0x5a, 0xe0, 0x77, 0xde, 0xa5, 0xe4, 0x16,
+			0xec, 0xbb, 0xc7, 0xd7, 0xd2, 0xd4, 0x65, 0xc2,
+			0xc1, 0xa3, 0x36, 0x7e, 0x8a, 0x40, 0xb8, 0x7f,
+			0xb3, 0x5c, 0x17, 0x2e, 0xcd, 0xeb, 0xf8, 0x8b,
+			0x0c, 0x01, 0xf8, 0x3d, 0x33, 0x6b, 0x81, 0x9e,
+			0x19, 0x89, 0x22, 0x41, 0x88, 0x32, 0x1a, 0xa7,
+			0x14, 0xbc, 0x4a, 0x45, 0xca, 0x06, 0x9c, 0xe4,
+			0x72, 0x64, 0x74, 0xcc, 0x29, 0xeb, 0x06, 0x1e,
+			0xe2, 0x74, 0x82, 0xd5, 0xc6, 0x3c, 0x11, 0xe1,
+			0xa6, 0x91, 0x78, 0xe4, 0xef, 0xd1, 0xd3, 0xc0,
+			0xbf, 0xdc, 0x08, 0xa8, 0xdb, 0x45, 0xb6, 0x8e,
+			0x32, 0x69, 0x37, 0xbc, 0x26, 0xdf, 0xb0, 0x57,
+			0xa5, 0x11, 0xa7, 0x06, 0x5b, 0x4c, 0xe0, 0xda,
+			0x62, 0x8b, 0xe0, 0x29, 0x16, 0x4e, 0x69, 0x80,
+			0xe5, 0x40, 0x15, 0xb6, 0xda, 0xcd, 0xf4, 0xcc,
+			0x40, 0xd5, 0x8d, 0x4d, 0x18, 0x33, 0x67, 0xd9,
+			0xf8, 0xc5, 0x5d, 0x7a, 0xae, 0xb1, 0xe3, 0xa4,
+			0x3d, 0x46, 0x7d, 0x53, 0xf1, 0xb9, 0x3b, 0x0e,
+			0xa2, 0xa8, 0x89, 0x14, 0x82, 0x3f, 0x3a, 0x8d,
+			0xda, 0x95, 0xfd, 0x96, 0x5b, 0x4a, 0xa5, 0xab,
+			0x48, 0xa9, 0x27, 0x19, 0xb6, 0x67, 0xdd, 0xcd,
+			0x04, 0xb1, 0x88, 0xb6, 0x41, 0xba, 0x85, 0xa2,
+			0x8e, 0x30, 0x4c, 0x71, 0x07, 0xf6, 0x72, 0x58,
+			0x4c, 0x7f, 0x98, 0xfa, 0xd7, 0x02, 0xb8, 0xe8,
+			0x10, 0xaf, 0xca, 0xc4, 0xc7, 0x77, 0x50, 0x70,
+			0xf3, 0xc6, 0x76, 0xae, 0xc3, 0xc1, 0xa4, 0x67,
+			0xd2, 0xef, 0xd4, 0x99, 0xc5, 0xf5, 0x0a, 0x99,
+			0x1b, 0x01, 0xd6, 0xa2, 0xb9, 0xb4, 0x82, 0x33,
+			0x97, 0x00, 0x68, 0xf9, 0x66, 0xa5, 0x83, 0xd9,
+			0x57, 0x1f, 0x1a, 0xdd, 0xc3, 0x00, 0x32, 0xd4,
+			0x2c, 0xbe, 0x85, 0x5d, 0xbf, 0x37, 0xef, 0x7b,
+			0xe1, 0x44, 0x27, 0xa3, 0xa2, 0x67, 0x86, 0xed,
+			0x17, 0x2a, 0xc1, 0x06, 0x9a, 0x99, 0x97, 0xfb,
+			0x12, 0x6f, 0xe0, 0x62, 0x70, 0xe5, 0x7c, 0x8c,
+			0xc8, 0x1d, 0x30, 0x94, 0xbc, 0x94, 0xef, 0x19,
+			0x6b, 0x07, 0xb4, 0x6a, 0xe3, 0x24, 0x56, 0x0b,
+			0x6f, 0xbb, 0x4f, 0x8f, 0xb8, 0x22, 0x9e, 0xaf,
+			0xef, 0x0d, 0x3c, 0x40, 0x31, 0xfa, 0xc2, 0x60,
+			0xfa, 0x9e, 0xea, 0xef, 0x61, 0x88, 0x4c, 0x0c,
+			0xba, 0xcb, 0xa8, 0x90, 0x6d, 0xd5, 0xef, 0x95,
+			0xaa, 0x4d, 0x85, 0x64, 0x1a, 0x64, 0xac, 0x91,
+			0x58, 0x08, 0xee, 0x37, 0xce, 0x3c, 0x4a, 0xe7,
+			0x25, 0x54, 0x57, 0xa5, 0x59, 0xab, 0xdf, 0x24,
+			0x9f, 0x89, 0x15, 0x1d, 0x9c, 0xce, 0x7b, 0xe7,
+			0xb6, 0xc9, 0xc7, 0x4b, 0xfc, 0x5c, 0x25, 0xa2,
+			0xba, 0x2e, 0x3e, 0x19, 0x82, 0x20, 0x57, 0x52,
+			0xa0, 0x3f, 0x93, 0xce, 0x20, 0x85, 0xf0, 0x4e,
+			0x0d, 0x4b, 0x53, 0xb7, 0x6b, 0x66, 0x1a, 0xae,
+			0x45, 0x47, 0xdf, 0xbc, 0x39, 0x83, 0x8a, 0xe4,
+			0xdb, 0x97, 0x72, 0xcb, 0x83, 0xbf, 0x8e, 0x47,
+			0x55, 0xbf, 0x1a, 0x5b, 0x66, 0xe4, 0x76, 0xc7,
+			0xb4, 0xf1, 0xc6, 0x3e, 0x84, 0x5d, 0x74, 0x6d,
+			0x7b, 0xab, 0x80, 0x89, 0xda, 0x8d, 0x4a, 0x1e,
+			0x5c, 0x31, 0xc2, 0x26, 0xce, 0x69, 0x29, 0xc3,
+			0x87, 0xe1, 0x3b, 0x1c, 0x42, 0xff, 0xef, 0x8c,
+			0x4d, 0x5c, 0x52, 0xac, 0x6e, 0x60, 0x49, 0xb6,
+			0xe1, 0x09, 0x12, 0xa7, 0xd0, 0x19, 0x0c, 0x5d,
+			0x8b, 0xf2, 0xfe, 0x3b, 0x40, 0xf2, 0xaa, 0x4b,
+			0x71, 0xc0, 0xf4, 0xe3, 0x7e, 0x83, 0xf9, 0xfb,
+			0x00, 0x23, 0x33, 0x84, 0x0c, 0x88, 0x52, 0x30,
+			0x3b, 0x29, 0x6d, 0x95, 0x86, 0xf5, 0x67, 0xfe,
+			0x84, 0x26, 0x56, 0x57, 0x50, 0x7f, 0x1a, 0x8b,
+			0x53, 0xfa, 0xf6, 0x64, 0xa2, 0x57, 0xc2, 0x69,
+			0xa2, 0x18, 0xd1, 0xc1, 0xab, 0xfc, 0xb9, 0x8e,
+			0x21, 0x20, 0x0b, 0x4d, 0xff, 0xf7, 0x28, 0x0b,
+			0xf8, 0xd5, 0x7d, 0xe7, 0xbf, 0x15, 0x0e, 0x58,
+			0x2b, 0xdd, 0xe0, 0xec, 0x9f, 0x25, 0x02, 0xf7,
+			0x43, 0x69, 0x66, 0x79, 0x0b, 0x89, 0xcb, 0x72,
+			0x03, 0x48, 0xdf, 0xe2, 0xcc, 0x93, 0x47, 0x5f,
+			0x61, 0x34, 0x41, 0xcb, 0x23, 0x88, 0xca, 0xcb,
+			0xc3, 0x72, 0xe3, 0x28, 0xdf, 0x73, 0x63, 0x06,
+			0x1c, 0x82, 0x7d, 0x5b, 0x8b, 0x63, 0x09, 0x11,
+			0x03, 0x59, 0xc6, 0xac, 0x18, 0x8a, 0xa1, 0x66,
+			0x2d, 0x26, 0xd9, 0x95, 0x3f, 0x7d, 0x82, 0x59,
+			0xdf, 0x36, 0xb5, 0x8d, 0x5e, 0x59, 0xec, 0x9a,
+			0xee, 0x25, 0x8d, 0x3e, 0x3c, 0x62, 0x6f, 0xc8,
+			0x0a, 0x19, 0x4c, 0xa7, 0x1b, 0xf8, 0xcd, 0x08,
+			0x7e, 0xf1, 0xf2, 0xf1, 0x76, 0x15, 0x4c, 0xf8,
+			0x1e, 0xb6, 0x58, 0xac, 0xe7, 0x86, 0xd2, 0xac,
+			0x36, 0x38, 0xb0, 0x60, 0x08, 0x8a, 0x4a, 0x42,
+			0xcc, 0xf8, 0x03, 0x0a, 0xf6, 0xa9, 0xa9, 0x38,
+			0x63, 0xb9, 0x68, 0x69, 0xd3, 0x21, 0x6c, 0x19,
+			0x00, 0x93, 0x46, 0xd5, 0x6e, 0x4b, 0x5c, 0x69,
+			0xa9, 0x74, 0xf3, 0xb8, 0xec, 0x14, 0x29, 0x8c,
+			0x25, 0x2d, 0xf2, 0x2f, 0x2a, 0x1c, 0xcc, 0x57,
+			0x76, 0x74, 0x8e, 0x6a, 0xcf, 0x93, 0x62, 0x93,
+			0x24, 0x03, 0x24, 0x09, 0xa3, 0xa5, 0x1a, 0x95,
+			0x99, 0xe5, 0x52, 0x82, 0x1d, 0x22, 0x65, 0x30,
+			0x47, 0x27, 0x0e, 0xf9, 0xe4, 0xce, 0xb8, 0xad,
+			0x34, 0x61, 0x21, 0x77, 0xf5, 0x17, 0xcb, 0x70,
+			0xa9, 0x72, 0x22, 0x49, 0x16, 0x4c, 0xb4, 0x35,
+			0x76, 0x97, 0x99, 0x66, 0xff, 0x2e, 0x81, 0x46,
+			0xbe, 0x56, 0xad, 0x70, 0xf2, 0x9a, 0x44, 0xe8,
+			0x3a, 0x2d, 0x6c, 0xbb, 0x89, 0x28, 0x76, 0x49,
+			0x25, 0xf6, 0x49, 0x8b, 0x67, 0xe7, 0xb4, 0xed,
+			0x28, 0x21, 0x0c, 0xb0, 0xe9, 0x23, 0xc6, 0xd1,
+			0x29, 0x5c, 0xe4, 0xc4, 0x97, 0xc6, 0x04, 0xc3,
+			0xd8, 0x6c, 0xb6, 0x73, 0x13, 0x20, 0x0c, 0x98,
+			0xde, 0x28, 0xe0, 0x74, 0x75, 0x58, 0xff, 0x67,
+			0xe8, 0x6d, 0x03, 0x41, 0xb4, 0xe3, 0xda, 0xe4,
+			0xc7, 0x54, 0x66, 0x8c, 0x02, 0x8c, 0x10, 0xbe,
+			0x6c, 0xac, 0x92, 0xe9, 0x73, 0x57, 0x89, 0xc6,
+			0x8d, 0xa0, 0x61, 0xe3, 0x5c, 0x30, 0x92, 0xa8,
+			0xc3, 0xf7, 0xb3, 0xf2, 0x86, 0xd3, 0xae, 0x5d,
+			0x91, 0xba, 0x06, 0x51, 0x54, 0xd9, 0x83, 0xf5,
+			0xd9, 0x9b, 0xd9, 0x8b, 0x73, 0xbf, 0x9a, 0x94,
+			0x45, 0x39, 0xc4, 0x3a, 0x35, 0xea, 0xf9, 0x25,
+			0x7d, 0x6a, 0xee, 0x78, 0xa7, 0x50, 0x50, 0x1d,
+			0x7e, 0xaf, 0x09, 0xf1, 0x86, 0xae, 0x93, 0x69,
+			0xd5, 0x41, 0x1e, 0x87, 0xc3, 0x41, 0xb8, 0xc5,
+			0x4f, 0x2d, 0x90, 0x4f, 0xa8, 0xe6, 0xbc, 0xc6,
+			0xbf, 0x59, 0x32, 0x97, 0xc7, 0x30, 0x2d, 0xea,
+			0xdd, 0x25, 0x5a, 0x1e, 0x38, 0x93, 0x58, 0x12,
+			0x2f, 0x98, 0x31, 0x30, 0xa8, 0xfa, 0x35, 0x61,
+			0x11, 0x63, 0x4c, 0xf8, 0x72, 0x3f, 0xaf, 0xd5,
+			0xa7, 0xf3, 0x92, 0x35, 0xb5, 0x17, 0x15, 0x3d,
+			0x78, 0x4a, 0x47, 0xf7, 0xfa, 0xa2, 0xff, 0x36,
+			0x61, 0x5b, 0x18, 0x77, 0xf0, 0xd5, 0x76, 0xee,
+			0x2b, 0x8a, 0x18, 0xe3, 0x54, 0xb3, 0x1f, 0x29,
+			0x0e, 0xa7, 0x3d, 0x75, 0x5b, 0x2b, 0x68, 0x13,
+			0x89, 0xb3, 0xc7, 0x42, 0x13, 0x3d, 0x72, 0x6c,
+			0xb5, 0xc9, 0x0b, 0xea, 0xbe, 0xc2, 0x0e, 0x44,
+			0xcd, 0x22, 0x63, 0x01, 0xd0, 0x1c, 0x93, 0x82,
+			0x3f, 0x7b, 0xa9, 0x72, 0xd5, 0x90, 0xe6, 0xac,
+			0x9c, 0x3d, 0x56, 0x3a, 0x8d, 0x0e, 0xd6, 0x8e,
+			0x8e, 0x52, 0xd0, 0x81, 0x15, 0xca, 0xf2, 0x09,
+			0xc0, 0xfe, 0x94, 0x1d, 0x22, 0x55, 0x11, 0xb5,
+			0x2c, 0x48, 0x22, 0xa2, 0x60, 0xf2, 0xc2, 0xa2,
+			0x0b, 0x0c, 0x4b, 0xac, 0xbf, 0x40, 0x6e, 0xfd,
+			0x97, 0x10, 0xcb, 0x04, 0x3b, 0xc4, 0x5f, 0x7c,
+			0x6c, 0xf2, 0xb5, 0x48, 0xb8, 0xfa, 0x5f, 0x32,
+			0xe4, 0xef, 0xc9, 0xad, 0x2d, 0xb5, 0xac, 0xc5,
+			0xee, 0xf7, 0xb2, 0x81, 0xa7, 0xe9, 0x9c, 0xf9,
+			0xc9, 0xd1, 0x14, 0xc0, 0xa9, 0x1e, 0xd8, 0x50,
+			0x44, 0x8a, 0x02, 0xf2, 0xad, 0x6d, 0xe4, 0xa1,
+			0x7e, 0x88, 0xd3, 0x2d, 0xad, 0x75, 0x17, 0x35,
+			0xe6, 0x8a, 0xf5, 0xd7, 0x35, 0x1a, 0xb4, 0x13,
+			0x36, 0x8a, 0x0f, 0xa3, 0x99, 0x57, 0x7f, 0x85,
+			0x99, 0x6c, 0xae, 0xc5, 0xe7, 0x85, 0xff, 0xb5,
+			0xb0, 0xad, 0x87, 0x03, 0x41, 0x11, 0xc5, 0x16,
+			0x2d, 0x95, 0x1d, 0x26, 0xaf, 0x43, 0xa6, 0x76,
+			0xae, 0x17, 0xca, 0x10, 0x65, 0x64, 0xc6, 0x43,
+			0x4a, 0x2c, 0x7b, 0x55, 0xde, 0x3d, 0x93, 0xc5,
+			0x46, 0x17, 0xc1, 0xc2, 0xd7, 0xcb, 0xec, 0xc7,
+			0x8e, 0xce, 0x0c, 0x65, 0x27, 0x0d, 0x0e, 0xaf,
+			0x76, 0x65, 0xea, 0xcd, 0xe9, 0x39, 0xe3, 0xd4,
+			0xbc, 0x6f, 0xc3, 0x87, 0xca, 0x9c, 0x4c, 0xc9,
+			0xbb, 0x38, 0xa8, 0xc7, 0xea, 0xc0, 0xcf, 0x9b,
+			0x33, 0xfd, 0xfe, 0x50, 0x1b, 0x86, 0xeb, 0x1f,
+			0x75, 0xb0, 0x61, 0xd9, 0xb4, 0xfc, 0xb2, 0x5a,
+			0x2f, 0xcb, 0x11, 0xd0, 0x2a, 0xa2, 0x7b, 0x4b,
+			0x65, 0x0c, 0x2f, 0x43, 0xea, 0xe2, 0x4d, 0xd4,
+			0x11, 0xf9, 0x94, 0x24, 0xbd, 0x89, 0x1a, 0xb9,
+			0x86, 0x81, 0xca, 0x39, 0x66, 0xc3, 0xdb, 0x7a,
+			0x72, 0xd8, 0xe2, 0x5e, 0x80, 0xf9, 0x19, 0x0b,
+			0x7c, 0xb3, 0xfe, 0xeb, 0x81, 0x93, 0x7e, 0x54,
+			0xd1, 0xdd, 0x0d, 0x74, 0x43, 0x8b, 0x0d, 0x11,
+			0xd4, 0xe8, 0x32, 0xf1, 0xf4, 0x02, 0xcc, 0xac,
+			0x2f, 0x1e, 0xd7, 0x68, 0xf1, 0x30, 0xbd, 0xe2,
+			0x58, 0xf4, 0x97, 0xe5, 0x0f, 0xb6, 0x38, 0xd1,
+			0xa3, 0x49, 0x4b, 0x0e, 0x4e, 0x88, 0x3f, 0x2b,
+			0x0e, 0xb6, 0x96, 0xc9, 0x14, 0xb5, 0x8d, 0xd3,
+			0xc8, 0xaa, 0xe0, 0x2c, 0x11, 0x83, 0x09, 0x9b,
+			0xfe, 0x91, 0x5f, 0xfc, 0xc5, 0x01, 0x36, 0x20,
+			0x44, 0x89, 0x5d, 0x2a, 0x40, 0x62, 0xd3, 0x0d,
+			0x2a, 0x2d, 0x05, 0xca, 0xce, 0xf1, 0x25, 0x79,
+			0x5d, 0x8b, 0xe8, 0x54, 0x97, 0x9a, 0x2a, 0x7d,
+			0x0d, 0x38, 0x2e, 0x37, 0xf1, 0xf8, 0xe9, 0xf3,
+			0x11, 0xe9, 0x94, 0x31, 0x2a, 0x7b, 0x9f, 0xa7,
+			0xfe, 0x9b, 0x3f, 0x04, 0xf0, 0x22, 0xec, 0xc7,
+			0x6c, 0x6e, 0x6f, 0x1f, 0x8b, 0xb7, 0xd0, 0xdc,
+			0xec, 0xe5, 0xbd, 0xe0, 0x3e, 0x18, 0x20, 0x2a,
+			0x55, 0xe7, 0xf4, 0xcb, 0xaf, 0x48, 0x39, 0x36,
+			0x4d, 0xa2, 0xac, 0x41, 0x32, 0x12, 0x7b, 0x29,
+			0xdc, 0x28, 0x3d, 0x05, 0xa7, 0x32, 0xbe, 0x67,
+			0x03, 0x26, 0x4f, 0x5a, 0x3f, 0x4b, 0xf4, 0xf4,
+			0x17, 0x67, 0xb9, 0x21, 0x18, 0x36, 0xf7, 0x63,
+			0xa7, 0x7e, 0x4f, 0x5f, 0x43, 0x83, 0x6f, 0x70,
+			0x01, 0xec, 0x0c, 0x15, 0x28, 0x14, 0x49, 0xc3,
+			0xf8, 0xa1, 0xa0, 0xed, 0x04, 0x59, 0x22, 0xbd,
+			0xdc, 0x8b, 0xe2, 0x7e, 0x43, 0xf3, 0x46, 0x7b,
+			0x5c, 0xa7, 0x91, 0xf7, 0xb0, 0xd4, 0x6d, 0x81,
+			0x23, 0x46, 0xdc, 0x3a, 0x23, 0x99, 0x3f, 0x02,
+			0xce, 0x4f, 0x9a, 0xfc, 0x50, 0x6d, 0x2c, 0x80,
+			0xf0, 0xc6, 0x5e, 0x60, 0x48, 0x7b, 0x40, 0x0b,
+			0xca, 0x1e, 0xef, 0x36, 0xf0, 0xfa, 0x5d, 0xcd,
+			0x83, 0x8d, 0x53, 0xb8, 0xa8, 0x6c, 0x5f, 0x68,
+			0xcc, 0xb7, 0x77, 0x05, 0xaa, 0x02, 0xec, 0x32,
+			0x8b, 0xe9, 0xb5, 0xdf, 0xd1, 0xab, 0x03, 0x90,
+			0xec, 0x5d, 0x0c, 0xea, 0xf5, 0xa4, 0xc7, 0x48,
+			0xbf, 0x54, 0xc0, 0xb6, 0xaf, 0x3a, 0x3c, 0xe9,
+			0xcb, 0x87, 0xde, 0x75, 0xf2, 0xbb, 0x12, 0x6c,
+			0xdf, 0x62, 0x36, 0xca, 0x27, 0x6c, 0x6e, 0xfd,
+			0x8e, 0xad, 0xf0, 0x38, 0x22, 0x61, 0xbf, 0xbd,
+			0x14, 0x4d, 0x17, 0xf1, 0xb6, 0x16, 0x12, 0xce,
+			0x43, 0x3b, 0xc8, 0x35, 0x7b, 0x09, 0x7d, 0x3f,
+			0x8e, 0xdd, 0xdd, 0x89, 0x0d, 0x55, 0xec, 0xad,
+			0x79, 0x50, 0xfb, 0x08, 0x53, 0x9d, 0x08, 0x2d,
+			0xb3, 0x4b, 0xd7, 0x2a, 0xbf, 0xb5, 0xa2, 0xa4,
+			0x6f, 0x9c, 0x04, 0x41, 0xe3, 0xe4, 0xaf, 0xc3,
+			0xec, 0xcf, 0xa0, 0xc0, 0x06, 0xc2, 0x3e, 0x24,
+			0x95, 0x37, 0x11, 0xaf, 0x98, 0xa7, 0x98, 0x22,
+			0x68, 0x00, 0xe7, 0x66, 0xf4, 0xf2, 0x56, 0x6b,
+			0x6b, 0x6b, 0x6c, 0x7c, 0x58, 0x00, 0xa4, 0x69,
+			0xe3, 0xd5, 0x65, 0x88, 0x04, 0xc6, 0xd6, 0x10,
+			0xb3, 0x6e, 0xdf, 0x16, 0xb3, 0x5f, 0x40, 0x38,
+			0xf3, 0x68, 0x61, 0xd8, 0x97, 0x4b, 0x0f, 0x6a,
+			0xc0, 0x47, 0x4f, 0xeb, 0xd3, 0xda, 0x16, 0xdf,
+			0xf5, 0x4e, 0xc1, 0x0e, 0xcf, 0x27, 0xf2, 0x3d,
+			0x35, 0xfc, 0x70, 0xfd, 0x52, 0xb8, 0x56, 0xcf,
+			0x8b, 0x14, 0x30, 0x17, 0x2e, 0x1e, 0x65, 0x0e,
+			0xc9, 0x3d, 0x52, 0xcf, 0xef, 0x4b, 0x94, 0xa0,
+			0x80, 0x3e, 0x7e, 0x55, 0xaf, 0x06, 0x8a, 0x13,
+			0xef, 0x34, 0x11, 0x95, 0xf8, 0x6f, 0x6b, 0xde,
+			0xc6, 0x75, 0x17, 0x10, 0x5e, 0x73, 0x14, 0x14,
+			0x7b, 0xad, 0xa0, 0xe6, 0x52, 0xce, 0xfd, 0xf1,
+			0x20, 0x42, 0x22, 0x98, 0x00, 0x5c, 0x5a, 0xa1,
+			0x47, 0x5e, 0xa3, 0x59, 0x16, 0x43, 0x45, 0x8d,
+			0xa5, 0x3b, 0x25, 0x65, 0xdc, 0xeb, 0xb7, 0xbf,
+			0x03, 0x77, 0xf7, 0xca, 0x7f, 0x6e, 0xd0, 0x8c,
+			0xf5, 0xf9, 0x8e, 0x87, 0x71, 0x9d, 0x82, 0xc5,
+			0x5e, 0x97, 0x12, 0x3d, 0x6e, 0x95, 0xca, 0xe2,
+			0xdf, 0x87, 0xa3, 0x05, 0x7f, 0x72, 0x88, 0xc2,
+			0xbd, 0xfa, 0x44, 0xde, 0x86, 0x67, 0xed, 0xbf,
+			0x53, 0x98, 0xd5, 0xb6, 0x01, 0xc1, 0x75, 0x58,
+			0x6f, 0x16, 0x0d, 0x78, 0x8f, 0x8d, 0x95, 0x95,
+			0x44, 0x46, 0x6d, 0x93, 0xfb, 0xfa, 0x59, 0xd6,
+			0x9d, 0x9b, 0x02, 0x1e, 0xf7, 0xdb, 0xfd, 0x0f,
+			0x48, 0xa5, 0xaa, 0x76, 0xc3, 0xfd, 0xd3, 0x4d,
+			0x0f, 0x70, 0x2e, 0x01, 0x1a, 0x55, 0xe8, 0x25,
+			0xed, 0x73, 0xe8, 0x44, 0xee, 0x32, 0x1f, 0xfc,
+			0x7e, 0xd5, 0xc4, 0x17, 0x42, 0x59, 0x34, 0xac,
+			0x44, 0x68, 0x4b, 0x64, 0x6e, 0xc2, 0xec, 0x5a,
+			0x16, 0x11, 0xe8, 0xc0, 0x06, 0x03, 0xcf, 0xc9,
+			0x90, 0xe9, 0x6e, 0xae, 0xe7, 0x62, 0x5c, 0x08,
+			0x39, 0x59, 0xf8, 0xc3, 0x83, 0xa1, 0xde, 0xcd,
+			0xc9, 0x65, 0x83, 0x1c, 0x80, 0x3e, 0x98, 0x05,
+			0xe1, 0x0f, 0x4e, 0x0f, 0xf8, 0x62, 0x51, 0x42,
+			0x01, 0xd0, 0x86, 0x17, 0xc2, 0x44, 0xef, 0x01,
+			0xfd, 0xe5, 0x6c, 0x6a, 0x04, 0xd1, 0x2d, 0x38,
+			0x49, 0xf0, 0xe3, 0xd6, 0x2e, 0x0b, 0xe0, 0xe4,
+			0xd9, 0x1b, 0xb3, 0xc6, 0x6a, 0x3e, 0x2d, 0x7c,
+			0xc2, 0x86, 0x20, 0x46, 0x1d, 0xef, 0x14, 0xe9,
+			0xea, 0x8e, 0x9c, 0x45, 0xd0, 0x3f, 0x80, 0x0b,
+			0x24, 0x5f, 0x1c, 0xa4, 0x3b, 0xdb, 0xbf, 0xa2,
+			0x6c, 0xeb, 0x7f, 0x3c, 0x5d, 0x23, 0x08, 0x6c,
+			0x21, 0xc5, 0xba, 0xc0, 0x98, 0xd2, 0x46, 0x5a,
+			0x32, 0x52, 0x58, 0x3f, 0x23, 0xfd, 0xeb, 0x89,
+			0x3e, 0x12, 0x9a, 0xa6, 0x8e, 0x17, 0x01, 0xa1,
+			0x0f, 0x26, 0x1a, 0x4a, 0x16, 0x0e, 0x29, 0x55,
+			0xb3, 0xb6, 0x85, 0xd9, 0x38, 0x42, 0x70, 0x8d,
+			0x0a, 0xd5, 0x9e, 0x3c, 0xf7, 0x1d, 0x40, 0x45,
+			0x39, 0x6c, 0x4c, 0x78, 0xc4, 0xe7, 0x7c, 0x1c,
+			0x35, 0x0a, 0x1f, 0xc7, 0x2a, 0x5a, 0x7b, 0x37,
+			0xf6, 0xa2, 0x97, 0x1f, 0x93, 0xa2, 0x9f, 0x8e,
+			0xf4, 0xd2, 0xd3, 0x94, 0x9e, 0x33, 0xa4, 0xf8,
+			0x79, 0x79, 0xab, 0xd0, 0x03, 0x16, 0x6b, 0xd8,
+			0x06, 0xac, 0x0c, 0x20, 0x28, 0xff, 0x98, 0xa1,
+			0xa1, 0x9b, 0x0f, 0x73, 0x31, 0xdd, 0x32, 0xee,
+			0x0d, 0x4a, 0x73, 0x4e, 0xf9, 0x35, 0x3d, 0x5b,
+			0x9e, 0xbe, 0xde, 0xe3, 0xed, 0x20, 0x2d, 0x53,
+			0x83, 0x86, 0xd6, 0xde, 0x17, 0x60, 0x62, 0x65,
+			0x76, 0x8e, 0xa9, 0xaa, 0xb6, 0xcf, 0xde, 0xe3,
+			0xec, 0xfd, 0x43, 0x5a, 0x97, 0xa2, 0xcc, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+			0x05, 0x0d, 0x14, 0x22, 0x27, },
+	}, {
+		.what = "pure rejection vector",
+		.algo = "ml-dsa65",
+		.pk_len = DILITHIUM65_PUBLICKEYBYTES,
+		.pk = (const u8[DILITHIUM65_PUBLICKEYBYTES]){
+			0x25, 0x5b, 0x8f, 0x59, 0xb9, 0x03, 0xe7, 0x6d,
+			0x1b, 0x3d, 0xa3, 0x94, 0xea, 0x35, 0x79, 0x55,
+			0x3f, 0xed, 0x5c, 0xfc, 0x93, 0x5d, 0x95, 0x30,
+			0x2c, 0x68, 0xee, 0xc5, 0x24, 0x7e, 0xec, 0xb9,
+			0x70, 0xf5, 0xd9, 0x76, 0xbb, 0x65, 0x90, 0xef,
+			0xcf, 0xf1, 0xb4, 0x69, 0xae, 0xf0, 0xcd, 0xbd,
+			0xf0, 0x2f, 0x69, 0xda, 0xec, 0xf7, 0x6a, 0x36,
+			0xba, 0x86, 0xf6, 0x22, 0xa5, 0x9d, 0x49, 0x02,
+			0xc2, 0x34, 0xd5, 0xdc, 0x0f, 0xa2, 0x44, 0x0d,
+			0x37, 0x21, 0x29, 0xa5, 0x88, 0xd9, 0x19, 0xdd,
+			0x2f, 0x6e, 0x39, 0x37, 0xe5, 0x53, 0x03, 0x22,
+			0xc4, 0xde, 0xd6, 0xe9, 0xa8, 0x36, 0x28, 0xa2,
+			0x13, 0x9f, 0x76, 0x8f, 0x2d, 0xc2, 0xe7, 0x3f,
+			0x3a, 0x48, 0x07, 0x17, 0x4d, 0x39, 0xfd, 0x7b,
+			0xa4, 0x85, 0x55, 0x6a, 0x0c, 0xfd, 0xcb, 0x3e,
+			0xab, 0x95, 0x1a, 0x7d, 0xda, 0xf9, 0x75, 0xc9,
+			0x43, 0x86, 0xba, 0xf8, 0xae, 0xae, 0xee, 0x27,
+			0x1e, 0x08, 0x0e, 0x8d, 0x55, 0xaa, 0xc6, 0x96,
+			0xe3, 0xa2, 0x40, 0x7b, 0x8f, 0xe3, 0x59, 0x46,
+			0xa9, 0x3a, 0x38, 0xa6, 0x01, 0x8f, 0xae, 0xdb,
+			0xa3, 0x3b, 0x09, 0xb2, 0x6b, 0x05, 0x18, 0x13,
+			0xf5, 0xd8, 0xca, 0x51, 0x2b, 0xb5, 0x28, 0x36,
+			0xe2, 0xa6, 0x53, 0x52, 0x41, 0x47, 0xd7, 0x4a,
+			0xa1, 0x1a, 0x1d, 0x91, 0x8b, 0x61, 0x86, 0x7e,
+			0x22, 0x76, 0xcb, 0x30, 0x6c, 0x67, 0xb3, 0x8e,
+			0x2e, 0xaf, 0x93, 0xe2, 0x3b, 0x0a, 0xd4, 0x22,
+			0xc7, 0xa5, 0xbc, 0x4c, 0xec, 0xd3, 0x38, 0x86,
+			0x22, 0x78, 0xdf, 0xa1, 0xa7, 0x2b, 0x80, 0xfa,
+			0x43, 0xd5, 0x47, 0xb9, 0x6a, 0xaf, 0xc6, 0x7e,
+			0x9a, 0x2d, 0xb8, 0x17, 0x58, 0x2f, 0xfd, 0x77,
+			0x37, 0x18, 0xf3, 0x9f, 0x84, 0xca, 0x6e, 0x00,
+			0x4b, 0xba, 0xa5, 0xe7, 0x0f, 0x87, 0x86, 0x31,
+			0xe9, 0xd1, 0x41, 0x53, 0x28, 0x8f, 0x2f, 0x46,
+			0x96, 0x0b, 0x6d, 0x3e, 0x6d, 0x20, 0x4c, 0xb0,
+			0x43, 0x74, 0x44, 0xdd, 0xe9, 0x33, 0x94, 0x1c,
+			0x3b, 0x69, 0x49, 0x15, 0x36, 0xbd, 0x6c, 0xb7,
+			0x0d, 0xb5, 0xf5, 0xfb, 0x23, 0x19, 0x0e, 0x6a,
+			0x45, 0x65, 0x1c, 0xa7, 0x66, 0x48, 0xb5, 0xa2,
+			0x52, 0x91, 0x43, 0x7b, 0x20, 0x21, 0x5e, 0x16,
+			0xc2, 0xba, 0x78, 0xfa, 0xd3, 0x88, 0xb8, 0x64,
+			0x08, 0x17, 0x89, 0x9c, 0x4f, 0xfa, 0xb9, 0xfe,
+			0x3e, 0x39, 0x6a, 0x28, 0xd2, 0x28, 0x95, 0xab,
+			0x54, 0xde, 0xfb, 0x76, 0x32, 0x96, 0xb3, 0xbb,
+			0x9f, 0xef, 0x0b, 0x6b, 0xe8, 0xd7, 0x17, 0x4d,
+			0x5e, 0x9b, 0x25, 0x3f, 0x3e, 0x6a, 0x93, 0xa1,
+			0xe9, 0x09, 0xc2, 0x34, 0x8e, 0x2f, 0xe9, 0x19,
+			0x69, 0xc2, 0xcb, 0x5c, 0x29, 0x8d, 0x4d, 0x81,
+			0x01, 0xff, 0xde, 0x02, 0x7d, 0xeb, 0xc2, 0x6e,
+			0x15, 0x78, 0xe8, 0x10, 0x0a, 0x1a, 0x91, 0x96,
+			0x56, 0x24, 0x35, 0x74, 0x3d, 0x02, 0x50, 0x13,
+			0xd8, 0x1b, 0x94, 0xcd, 0xc8, 0x60, 0xc8, 0x6f,
+			0x28, 0x77, 0x3b, 0x76, 0x86, 0xa0, 0x39, 0xaa,
+			0x3a, 0x3e, 0x15, 0x47, 0xa0, 0x3b, 0xc3, 0xec,
+			0xe2, 0x15, 0x84, 0xba, 0xdf, 0x1d, 0x42, 0x5b,
+			0xcd, 0x97, 0x51, 0x92, 0x15, 0x64, 0xd7, 0x5c,
+			0xe2, 0xe2, 0x60, 0xe9, 0xbe, 0xdc, 0x1c, 0x12,
+			0x62, 0x15, 0x6b, 0xe6, 0xf1, 0x23, 0xb8, 0x81,
+			0x87, 0x15, 0xf4, 0x9a, 0x35, 0xd7, 0x18, 0x64,
+			0x92, 0xc4, 0xec, 0xcf, 0x5c, 0xd4, 0xf7, 0x6a,
+			0xf9, 0xe6, 0x7e, 0x71, 0x3d, 0x3e, 0xd0, 0x17,
+			0x72, 0x28, 0xd3, 0x22, 0x97, 0x14, 0x5d, 0x90,
+			0xca, 0x0b, 0x4f, 0x2c, 0x18, 0xc0, 0x45, 0x39,
+			0x87, 0x4f, 0xd9, 0x74, 0xef, 0x9f, 0xc7, 0xc7,
+			0x59, 0x04, 0x62, 0x31, 0xcc, 0x37, 0x78, 0x76,
+			0xdd, 0xc6, 0x9b, 0xff, 0xf7, 0x77, 0x87, 0x6a,
+			0xfb, 0x7b, 0xb0, 0xdf, 0x64, 0x75, 0xdb, 0xee,
+			0x2b, 0x45, 0x45, 0x45, 0x5b, 0xed, 0x89, 0xd9,
+			0xfe, 0x71, 0xc6, 0xd5, 0xc7, 0x75, 0xe7, 0x2f,
+			0x4e, 0x5b, 0xa2, 0xcf, 0x07, 0xbe, 0x4b, 0x5e,
+			0x3a, 0x76, 0x9b, 0x59, 0x8f, 0x1e, 0xac, 0x21,
+			0xf8, 0x90, 0x57, 0x3e, 0x25, 0x4b, 0x8c, 0x9d,
+			0x4f, 0xe8, 0x14, 0xfd, 0xcb, 0xaa, 0x86, 0x6a,
+			0x0c, 0x5c, 0x20, 0xa1, 0x03, 0xe4, 0x69, 0x84,
+			0xb1, 0x38, 0x16, 0x92, 0xd8, 0xd3, 0x68, 0x7e,
+			0x8e, 0x85, 0x25, 0x83, 0x38, 0x3a, 0xe2, 0x3d,
+			0x76, 0x31, 0xbf, 0x4d, 0x74, 0xc0, 0xa6, 0xa2,
+			0xeb, 0xaa, 0x8e, 0x70, 0xa6, 0x6f, 0x67, 0xd4,
+			0xb4, 0x81, 0xd6, 0xbc, 0xe6, 0xda, 0xa2, 0xd1,
+			0x93, 0xc6, 0xf6, 0x54, 0x05, 0x4c, 0x51, 0x1e,
+			0x97, 0xc9, 0x82, 0x9f, 0x45, 0x6d, 0x67, 0x17,
+			0xc0, 0x6c, 0xb0, 0x7a, 0x83, 0xeb, 0xdc, 0xb0,
+			0xf0, 0x09, 0x4f, 0xed, 0xbc, 0xe0, 0xf8, 0x26,
+			0xf4, 0xe3, 0x2a, 0xdb, 0xef, 0xcc, 0xf1, 0x3f,
+			0x71, 0xc1, 0x07, 0x3f, 0x19, 0x8a, 0xe5, 0xb3,
+			0x33, 0x7c, 0x7a, 0xa4, 0x89, 0x57, 0x46, 0x17,
+			0x5d, 0x2c, 0x91, 0xc3, 0xac, 0x34, 0x49, 0x14,
+			0x73, 0x7c, 0x01, 0x32, 0xf2, 0x20, 0x11, 0x18,
+			0x95, 0xc2, 0x36, 0x63, 0x61, 0xd6, 0xba, 0x65,
+			0x62, 0x9a, 0xcc, 0xed, 0x03, 0x8a, 0xd0, 0x88,
+			0xb2, 0x3e, 0xdc, 0x82, 0xd0, 0x29, 0xd2, 0xd3,
+			0xcb, 0x5b, 0x96, 0xa1, 0x34, 0xde, 0xd2, 0x64,
+			0xc7, 0x40, 0xcb, 0x1f, 0xd6, 0x63, 0xe8, 0x52,
+			0xd7, 0xbd, 0x42, 0xdc, 0x0d, 0x1c, 0x98, 0xa5,
+			0x03, 0x73, 0x96, 0xae, 0x1c, 0xa4, 0x7c, 0x45,
+			0x4b, 0x03, 0x7f, 0xe3, 0x10, 0xe0, 0xa4, 0x10,
+			0x9f, 0x2d, 0x3b, 0x1f, 0x75, 0x00, 0x90, 0xf0,
+			0x4a, 0x49, 0x68, 0xbf, 0xa5, 0xf2, 0x79, 0xa4,
+			0xaf, 0x08, 0xb0, 0xbf, 0xed, 0x0c, 0x5e, 0xf2,
+			0x6c, 0xfb, 0xcf, 0x7d, 0xcd, 0xbf, 0xf2, 0x8d,
+			0x51, 0x32, 0xd2, 0x18, 0xfb, 0xfb, 0x8c, 0xf4,
+			0x6e, 0x99, 0x43, 0x46, 0x51, 0x0f, 0x0b, 0x99,
+			0xd4, 0x9f, 0x01, 0xf3, 0x14, 0xb5, 0xdc, 0xad,
+			0x41, 0x6f, 0x23, 0x90, 0x44, 0xab, 0x30, 0x97,
+			0xf7, 0x43, 0xd2, 0x7c, 0x60, 0xbc, 0x5b, 0x9b,
+			0x8a, 0x28, 0x59, 0x34, 0xd3, 0x3e, 0xb9, 0x68,
+			0x7e, 0x9a, 0x2e, 0xe0, 0x5f, 0x5b, 0x3c, 0xe5,
+			0x91, 0x02, 0xe1, 0xdd, 0x29, 0x62, 0x1e, 0x14,
+			0x2c, 0x01, 0xe5, 0x4f, 0x18, 0x04, 0x9e, 0x0f,
+			0xb0, 0x60, 0x7a, 0x70, 0x1c, 0x8c, 0x45, 0xa1,
+			0x1b, 0xb7, 0x42, 0x6b, 0xb6, 0x79, 0xb6, 0x1a,
+			0x26, 0x6f, 0xdb, 0x7e, 0xd6, 0xfa, 0xbe, 0x18,
+			0xf1, 0xd1, 0x81, 0xab, 0x8d, 0x92, 0x3d, 0x65,
+			0x30, 0x48, 0x7a, 0x5b, 0x95, 0x2f, 0x98, 0xe3,
+			0x75, 0x29, 0x26, 0xd0, 0x9d, 0x6f, 0x45, 0x28,
+			0x93, 0x1c, 0xbd, 0x8c, 0x5c, 0x8d, 0x52, 0xac,
+			0xc3, 0xaa, 0x48, 0x85, 0xfc, 0x08, 0x15, 0x7e,
+			0x98, 0xfb, 0xce, 0x40, 0x33, 0x16, 0xfa, 0xca,
+			0x63, 0xfb, 0x21, 0xcf, 0x6c, 0xab, 0x7f, 0xf8,
+			0xb3, 0x57, 0xab, 0x84, 0x23, 0x0b, 0x4c, 0x90,
+			0x2b, 0x29, 0xe3, 0xa3, 0x9b, 0x04, 0x54, 0xda,
+			0xd2, 0x34, 0x11, 0xdd, 0xf3, 0x31, 0x68, 0x17,
+			0xd0, 0x5a, 0xc5, 0xe4, 0xf6, 0x70, 0xeb, 0xfa,
+			0xc9, 0xd3, 0xa6, 0x6e, 0x26, 0x41, 0x2c, 0x9b,
+			0x21, 0xbd, 0x83, 0xd6, 0x71, 0xf1, 0x1b, 0x6d,
+			0x3b, 0xe9, 0x39, 0xac, 0x8b, 0xbd, 0x2f, 0xb4,
+			0xe3, 0xc9, 0xfb, 0xe1, 0x71, 0xd2, 0xee, 0x7b,
+			0x4e, 0x40, 0xde, 0xde, 0xaf, 0x9f, 0xff, 0xfe,
+			0x37, 0xd8, 0x5f, 0xbc, 0x6c, 0xc6, 0xc5, 0x21,
+			0xd6, 0x05, 0xc9, 0x23, 0x55, 0xb3, 0x33, 0xe1,
+			0x06, 0xf6, 0xff, 0xa9, 0x8d, 0x04, 0xec, 0x6f,
+			0xb2, 0x64, 0x01, 0x09, 0x40, 0xaf, 0x83, 0xc4,
+			0xd5, 0x73, 0xbd, 0xb8, 0xe1, 0xe7, 0xb9, 0x5e,
+			0x3c, 0x57, 0x1f, 0xa2, 0xe6, 0xb0, 0x79, 0x49,
+			0x14, 0x49, 0x69, 0xcf, 0x6e, 0x77, 0x05, 0xeb,
+			0xf8, 0x4c, 0x92, 0xf3, 0xda, 0x08, 0xf8, 0xdb,
+			0x44, 0x48, 0x73, 0xbf, 0xf0, 0xa9, 0x88, 0x49,
+			0x07, 0x8f, 0x3a, 0x6b, 0x13, 0x2c, 0xd2, 0x24,
+			0xc1, 0x6a, 0x1f, 0x25, 0x70, 0x7d, 0x29, 0xc5,
+			0x32, 0x84, 0x4a, 0xc4, 0xe6, 0x9c, 0x46, 0xa8,
+			0x99, 0x3b, 0x2d, 0x80, 0x5f, 0x20, 0xaa, 0x3c,
+			0x60, 0x52, 0x7f, 0x67, 0x9e, 0x87, 0xb9, 0x7b,
+			0x57, 0xa5, 0x97, 0xbb, 0x70, 0x29, 0x9f, 0x5c,
+			0xd5, 0x76, 0xd2, 0x99, 0xab, 0x9e, 0xb9, 0xbd,
+			0x67, 0x8a, 0xda, 0x91, 0x9e, 0xea, 0xdf, 0x64,
+			0x09, 0x08, 0x4d, 0xad, 0xb7, 0x8f, 0x5a, 0x15,
+			0x27, 0xaf, 0xc2, 0xf7, 0xeb, 0xf4, 0x39, 0x42,
+			0xdc, 0xe5, 0x6a, 0x5e, 0xcc, 0xe6, 0x77, 0x4e,
+			0x0b, 0x20, 0x48, 0x1d, 0x65, 0x4d, 0xd1, 0xe1,
+			0x01, 0x85, 0x52, 0x32, 0x7d, 0x51, 0x2f, 0x0e,
+			0x00, 0xe3, 0x40, 0x70, 0x26, 0x46, 0xa6, 0xbf,
+			0xc8, 0x85, 0x0d, 0xac, 0x9f, 0x8d, 0x79, 0x9c,
+			0x6f, 0x58, 0x96, 0xe9, 0xe5, 0xb2, 0xff, 0x4a,
+			0xde, 0x91, 0x0b, 0x3d, 0x85, 0x69, 0xa7, 0xa8,
+			0x1a, 0xa8, 0x21, 0x3e, 0x8d, 0xf8, 0xba, 0x5a,
+			0xc6, 0xd7, 0x3a, 0xcb, 0x04, 0x0e, 0xdf, 0x36,
+			0xeb, 0xbc, 0xca, 0x59, 0x24, 0x48, 0xe7, 0xec,
+			0x14, 0x7c, 0x7d, 0xb7, 0x26, 0x98, 0x1a, 0x85,
+			0xc1, 0x6c, 0x90, 0x9f, 0x4b, 0x90, 0x7c, 0x6d,
+			0xa6, 0xba, 0x58, 0xb9, 0xa3, 0x7f, 0x7f, 0x88,
+			0xce, 0xb4, 0x40, 0x73, 0xa7, 0x72, 0x3a, 0xbc,
+			0xea, 0x99, 0xef, 0x04, 0xbd, 0x08, 0xc5, 0x0d,
+			0x6e, 0x68, 0x2f, 0x33, 0x05, 0x5b, 0xeb, 0x6a,
+			0xeb, 0x80, 0x30, 0xf0, 0x7d, 0xad, 0x7b, 0x80,
+			0x7c, 0xb9, 0x13, 0x0c, 0x08, 0x74, 0x5b, 0x7c,
+			0xec, 0x8a, 0xdb, 0xe8, 0xe0, 0xea, 0x70, 0xa4,
+			0x9e, 0x88, 0x06, 0xd4, 0xde, 0x8e, 0xb8, 0x93,
+			0xa3, 0x89, 0x2c, 0xe5, 0x07, 0xbb, 0x81, 0x88,
+			0x7f, 0x9e, 0x1d, 0xb2, 0x8e, 0x8d, 0x59, 0xae,
+			0xe4, 0xcf, 0x2d, 0x2f, 0xdf, 0x52, 0xad, 0x7c,
+			0xe8, 0x73, 0x0f, 0xee, 0xcc, 0xa0, 0x67, 0x88,
+			0x61, 0xc0, 0xcc, 0x06, 0xe0, 0x48, 0xee, 0x93,
+			0xf6, 0x56, 0xbe, 0x8a, 0x23, 0x1b, 0x86, 0x7c,
+			0x9a, 0xaa, 0x57, 0x83, 0x03, 0x6c, 0x5c, 0x08,
+			0xb2, 0xea, 0x1b, 0x98, 0xa5, 0x4d, 0xb3, 0x6b,
+			0x27, 0x52, 0xff, 0xbd, 0xb7, 0x53, 0x14, 0x8d,
+			0xd1, 0x06, 0xfc, 0xdc, 0x08, 0x59, 0x7b, 0x74,
+			0xbf, 0xb4, 0x39, 0x8b, 0x4a, 0x00, 0xdf, 0xe6,
+			0x88, 0x00, 0x36, 0x4d, 0xb0, 0x1a, 0x40, 0x13,
+			0x45, 0xe8, 0x38, 0x40, 0x49, 0x0c, 0x7a, 0x57,
+			0xca, 0x35, 0x66, 0xcf, 0xc7, 0xbe, 0x43, 0x4b,
+			0xe9, 0x35, 0x49, 0xfc, 0x08, 0x04, 0xac, 0x00,
+			0x39, 0x1f, 0x45, 0xd7, 0x87, 0x1f, 0x57, 0xec,
+			0xd4, 0x0b, 0xaa, 0x70, 0x90, 0xdd, 0x90, 0xd2,
+			0x65, 0xc4, 0xc0, 0x78, 0x96, 0xed, 0x81, 0xb1,
+			0x33, 0xea, 0xe5, 0x28, 0xa4, 0x96, 0x14, 0xe3,
+			0x55, 0x41, 0xc5, 0xbe, 0xef, 0xb3, 0x15, 0xcb,
+			0xec, 0xf5, 0xd5, 0x9c, 0x30, 0x96, 0x90, 0x51,
+			0x47, 0x71, 0x34, 0xce, 0x0b, 0xb1, 0x3f, 0xdd,
+			0x0f, 0x8f, 0xa8, 0xe1, 0xea, 0x64, 0x03, 0xdf,
+			0x04, 0xed, 0x32, 0xd6, 0xdd, 0x0b, 0xf1, 0xeb,
+			0x92, 0x7e, 0x12, 0xba, 0x15, 0x6f, 0x66, 0xe3,
+			0x5f, 0xa8, 0xb7, 0x29, 0x0b, 0x23, 0x1b, 0x8f,
+			0x44, 0x75, 0x92, 0xd6, 0xb3, 0x02, 0x1f, 0xe0,
+			0xb9, 0x98, 0xf9, 0xfa, 0xe5, 0x98, 0xb4, 0xae,
+			0xa8, 0x17, 0xbd, 0xbe, 0xb1, 0x52, 0x87, 0x5c,
+			0x3a, 0x20, 0x39, 0x1b, 0x8d, 0xc4, 0x9d, 0x7e,
+			0x05, 0x18, 0xf5, 0x3d, 0xda, 0x47, 0x0d, 0xd2,
+			0xfd, 0xcd, 0x00, 0x83, 0x6e, 0xdc, 0x00, 0x81,
+			0x9b, 0x8e, 0x85, 0x3f, 0x95, 0xb3, 0x6b, 0x5a,
+			0x2b, 0x21, 0xbf, 0xb5, 0xcf, 0xc7, 0x4d, 0xa4,
+			0x74, 0x84, 0xab, 0xc2, 0xbb, 0xa3, 0x61, 0x7f,
+			0xe4, 0x70, 0x68, 0x83, 0x2a, 0x9f, 0x67, 0x33,
+			0xe8, 0x2e, 0x5c, 0xef, 0xc3, 0x28, 0x5d, 0xd1,
+			0xf3, 0x15, 0x1d, 0x2d, 0x85, 0xd7, 0xeb, 0x47,
+			0xf3, 0x25, 0x76, 0x7a, 0xd5, 0xb7, 0x6c, 0xab,
+			0x09, 0xd1, 0xad, 0xe5, 0xe3, 0xcc, 0x78, 0xe7,
+			0x91, 0xd1, 0x60, 0x26, 0xce, 0xf4, 0x9f, 0xc9,
+			0x93, 0x30, 0x5e, 0x59, 0xef, 0x83, 0x29, 0xa3,
+			0x6e, 0x61, 0x10, 0x35, 0x18, 0x22, 0xd0, 0xec,
+			0x73, 0x71, 0xbd, 0xbd, 0x86, 0xd5, 0xbd, 0xc6,
+			0x46, 0x73, 0x19, 0x5c, 0x73, 0xa9, 0x7c, 0xde,
+			0x09, 0xe2, 0xeb, 0x23, 0x67, 0x55, 0xfa, 0xc1,
+			0x87, 0xcd, 0x77, 0xf8, 0x83, 0xdd, 0xca, 0xbc,
+			0x15, 0xa4, 0x5c, 0x0c, 0x9d, 0x71, 0x1a, 0xea,
+			0x65, 0x65, 0x9c, 0xef, 0xd8, 0x99, 0x4b, 0xe4,
+			0xea, 0x8d, 0xca, 0x70, 0x62, 0x33, 0x65, 0x13,
+			0xed, 0xbe, 0x9b, 0x3a, 0x23, 0x10, 0x58, 0x65,
+			0x6b, 0x6d, 0x0d, 0x3c, 0x7b, 0x54, 0xf5, 0x63,
+			0x2b, 0xb9, 0xd7, 0xac, 0x5f, 0x43, 0x05, 0x53,
+			0xe4, 0x6c, 0xff, 0xb0, 0x20, 0xab, 0xff, 0xf1,
+			0x24, 0x94, 0x87, 0xab, 0x8a, 0xec, 0x86, 0xfe,
+			0x2c, 0x4f, 0xd2, 0x89, 0x0e, 0xe0, 0x76, 0xe9,
+			0x73, 0x64, 0xda, 0x2d, 0xcd, 0x33, 0xe1, 0xa6,
+			0x9e, 0xd0, 0xc3, 0x90, 0xfd, 0x22, 0x55, 0x73,
+			0x3b, 0xd6, 0xd3, 0x29, 0xc5, 0x84, 0xb3, 0x84,
+			0xfb, 0x60, 0x98, 0x1d, 0x65, 0x2a, 0x9d, 0x1e,
+			0xf7, 0x5a, 0x67, 0x25, 0x5d, 0xe6, 0x02, 0x17,
+			0x8c, 0x7e, 0x64, 0x17, 0x44, 0xef, 0x19, 0xbe,
+			0xda, 0xd9, 0x83, 0x94, 0x2b, 0x4c, 0xa3, 0x3c,
+			0xfa, 0x00, 0x6f, 0xef, 0x98, 0xdf, 0x0d, 0x13,
+			0x08, 0x7a, 0xeb, 0x2d, 0xa7, 0x6d, 0x0d, 0x4f,
+			0x17, 0x2e, 0x08, 0x59, 0xa2, 0x96, 0x13, 0xa2,
+			0x5d, 0x97, 0xc3, 0x62, 0xc6, 0xd0, 0x31, 0x28,
+			0x86, 0x75, 0x08, 0x0f, 0x77, 0x36, 0xba, 0xea,
+			0x8c, 0x34, 0x83, 0xa2, 0x35, 0x7b, 0xda, 0x1b,
+			0x70, 0xe7, 0xc0, 0xdb, 0x03, 0x07, 0x97, 0x91,
+			0xa9, 0x68, 0x93, 0x89, 0x8d, 0x54, 0x6f, 0x19,
+			0xf9, 0xe0, 0xe7, 0x19, 0xef, 0x4a, 0xda, 0x80,
+			0x5a, 0x64, 0x11, 0x33, 0xdd, 0x59, 0x37, 0x7d,
+			0x81, 0xf6, 0x76, 0xbe, 0x9e, 0x3a, 0x49, 0x4e,
+			0xc4, 0xb6, 0xc5, 0x25, 0x74, 0x5e, 0x1e, 0x8c,
+			0x9b, 0xf8, 0x8f, 0x58, 0xfc, 0xb3, 0x6b, 0x4e,
+			0xea, 0xc4, 0x26, 0xea, 0xd9, 0xbf, 0xe1, 0x4a,
+			0xaf, 0x50, 0x91, 0x4f, 0xae, 0xd9, 0x29, 0x67,
+			},
+		.msg_len = 64,
+		.msg = (const u8[64]){
+			0x86, 0x8d, 0xae, 0x88, 0x78, 0x21, 0xba, 0x42,
+			0xe2, 0xb1, 0x14, 0xf5, 0x44, 0xea, 0x64, 0x75,
+			0xe7, 0xca, 0xdd, 0xf1, 0x57, 0xd3, 0x8a, 0x45,
+			0xed, 0x97, 0x20, 0x55, 0xd3, 0xd3, 0xfa, 0x9c,
+			0x5b, 0x79, 0x0b, 0xb4, 0x50, 0x53, 0x77, 0xd1,
+			0xb4, 0xaa, 0x20, 0xf3, 0xd1, 0xf0, 0x4e, 0x20,
+			0xb4, 0x4b, 0x5f, 0xa8, 0xd6, 0xbc, 0xdc, 0x06,
+			0xb6, 0xcc, 0xfe, 0x00, 0x7f, 0xa0, 0x76, 0x7b,
+			},
+		.sig_len = DILITHIUM65_CRYPTO_BYTES,
+		.sig = (const u8[DILITHIUM65_CRYPTO_BYTES]){
+			0x9a, 0x88, 0x40, 0x11, 0x8c, 0xf3, 0x42, 0xf0,
+			0xa5, 0xd6, 0xcb, 0x40, 0xf7, 0x2a, 0xab, 0xac,
+			0x0c, 0x61, 0x19, 0x89, 0x07, 0x56, 0x10, 0x75,
+			0xed, 0xed, 0x7b, 0xef, 0xf1, 0xeb, 0x5c, 0x9c,
+			0x51, 0x5b, 0x2d, 0x03, 0x6a, 0xc7, 0x90, 0xaa,
+			0x71, 0x70, 0x16, 0xfd, 0x63, 0xbc, 0x37, 0x05,
+			0x83, 0x30, 0x63, 0xf2, 0xf8, 0x70, 0x53, 0x1c,
+			0x27, 0xc6, 0x8f, 0x49, 0x47, 0x31, 0xa1, 0xc9,
+			0x3b, 0x7e, 0x84, 0x96, 0xb7, 0x96, 0x13, 0x80,
+			0xab, 0xd1, 0x35, 0x27, 0x27, 0x1c, 0xbf, 0x9b,
+			0xef, 0x0c, 0x90, 0xb6, 0x49, 0xb6, 0x7c, 0x84,
+			0xe1, 0xf3, 0xad, 0x7c, 0xab, 0x16, 0xe9, 0x8a,
+			0xea, 0xed, 0xbc, 0x0d, 0x59, 0x72, 0x5a, 0xf6,
+			0x77, 0xdc, 0x75, 0x24, 0xf8, 0x3d, 0xb0, 0x74,
+			0xad, 0x58, 0x3b, 0xaf, 0xd3, 0xa5, 0x09, 0xa5,
+			0x9e, 0xc8, 0xf1, 0xef, 0x6d, 0x52, 0x02, 0xb1,
+			0x1f, 0x5d, 0xb2, 0x42, 0xfc, 0x92, 0xe6, 0xdb,
+			0x24, 0x4d, 0xc8, 0xa5, 0x05, 0x3d, 0xb5, 0x3a,
+			0x4f, 0xab, 0xed, 0xc7, 0xd9, 0x0c, 0x48, 0x3f,
+			0x36, 0xcd, 0x2a, 0x71, 0xbd, 0x28, 0x86, 0xbc,
+			0x1c, 0x42, 0x13, 0xab, 0xf9, 0xa3, 0xfb, 0x36,
+			0xd7, 0xd7, 0xf4, 0x11, 0xaa, 0xb4, 0x7e, 0xe6,
+			0x5d, 0x62, 0x16, 0x91, 0x79, 0x3b, 0x92, 0xde,
+			0x87, 0x41, 0x54, 0x94, 0xb2, 0x4b, 0x0e, 0x72,
+			0xdf, 0x35, 0xd1, 0x05, 0x4e, 0xad, 0xcd, 0xaa,
+			0x9f, 0x90, 0x42, 0x55, 0xf0, 0x33, 0x1e, 0x89,
+			0x36, 0x96, 0x6a, 0x3c, 0x37, 0xed, 0x35, 0x1f,
+			0x8e, 0x30, 0xbb, 0xdb, 0xae, 0xf5, 0x04, 0x5d,
+			0x0f, 0x9b, 0x93, 0xc1, 0x40, 0x58, 0x86, 0x3b,
+			0xe9, 0xe7, 0x14, 0x29, 0x67, 0xdc, 0x3f, 0x86,
+			0xec, 0x9c, 0x23, 0x38, 0x2c, 0x62, 0xd3, 0x69,
+			0xf1, 0xec, 0xac, 0x8b, 0x32, 0xa5, 0x33, 0x77,
+			0x9b, 0x2e, 0xc7, 0xcc, 0x55, 0x48, 0x20, 0x25,
+			0x39, 0x6c, 0x80, 0x2e, 0x87, 0x5f, 0xc5, 0x17,
+			0x28, 0x78, 0x4e, 0xb0, 0xd5, 0x9c, 0x5f, 0x1a,
+			0x82, 0xe0, 0x6f, 0xa3, 0x8a, 0x87, 0x78, 0x57,
+			0x4b, 0x35, 0xc0, 0x4f, 0x15, 0x24, 0x2a, 0x57,
+			0xaa, 0x1c, 0xd0, 0xe6, 0xe7, 0xed, 0x8f, 0x9e,
+			0xca, 0xe2, 0x8c, 0x11, 0x8c, 0x07, 0xf5, 0x6c,
+			0x83, 0xd0, 0x17, 0x3c, 0xb4, 0x0e, 0xe9, 0xae,
+			0xdb, 0xa2, 0xc8, 0x8a, 0xce, 0x76, 0x81, 0x94,
+			0x2f, 0x40, 0x29, 0xdf, 0x7c, 0x6d, 0xac, 0x8a,
+			0x52, 0xc1, 0xd1, 0xde, 0x30, 0x9b, 0x47, 0xff,
+			0x50, 0xa1, 0x1e, 0x44, 0x5b, 0xc3, 0xce, 0xc4,
+			0x96, 0xbd, 0xe7, 0x15, 0xac, 0xd3, 0x06, 0x8e,
+			0xcd, 0x51, 0x0e, 0x9a, 0xc0, 0xc6, 0xc6, 0xcb,
+			0xc3, 0x35, 0xd0, 0xb1, 0x06, 0xaf, 0x6a, 0x75,
+			0xab, 0xc0, 0xa1, 0x0f, 0xb9, 0xb6, 0xbd, 0x47,
+			0x85, 0x33, 0x80, 0x9f, 0xa2, 0xf4, 0xff, 0x25,
+			0xd1, 0x8e, 0x2f, 0x68, 0x87, 0x50, 0x98, 0xea,
+			0x0d, 0x9f, 0x81, 0x7d, 0xd1, 0xa8, 0xd6, 0x7b,
+			0x4f, 0x18, 0x34, 0xd0, 0xe0, 0xe8, 0x18, 0x39,
+			0x01, 0xbe, 0xaa, 0x94, 0xeb, 0xe3, 0x6d, 0xa4,
+			0x22, 0xc4, 0x92, 0x97, 0x51, 0xb5, 0x65, 0xe2,
+			0x3a, 0x39, 0x1c, 0x80, 0x3c, 0x3f, 0x18, 0x4c,
+			0x4f, 0xda, 0xd8, 0xa5, 0x77, 0xda, 0xc2, 0xe6,
+			0xe8, 0x5f, 0xa5, 0x1c, 0xb4, 0x9c, 0x8c, 0x96,
+			0x78, 0xdf, 0xed, 0xb5, 0xb0, 0x06, 0x69, 0x7a,
+			0x23, 0xd5, 0x1a, 0xdd, 0xce, 0x2e, 0x61, 0x15,
+			0x28, 0x09, 0xd2, 0x5c, 0xb0, 0xef, 0x2b, 0x41,
+			0x89, 0x6b, 0x83, 0x69, 0xdb, 0x23, 0xcd, 0x18,
+			0xa2, 0x77, 0x40, 0x67, 0xa4, 0x7d, 0xf2, 0x55,
+			0xcf, 0x1d, 0xaa, 0x89, 0x08, 0x38, 0xfa, 0x42,
+			0x69, 0x28, 0x3f, 0x05, 0xe2, 0x5e, 0xaa, 0x2f,
+			0x46, 0x83, 0x4a, 0x12, 0x89, 0x8e, 0x0d, 0x33,
+			0x40, 0x88, 0x5a, 0x4f, 0x2d, 0x5d, 0xdf, 0xbc,
+			0x23, 0xc3, 0x82, 0xff, 0x2b, 0xa4, 0xa4, 0xe4,
+			0x16, 0x8a, 0xb2, 0xf0, 0x68, 0x9b, 0x34, 0x95,
+			0x2b, 0x5b, 0xb1, 0x42, 0x06, 0xb8, 0x33, 0x93,
+			0x36, 0x5b, 0xf7, 0x7c, 0x30, 0xab, 0xb1, 0x8b,
+			0x52, 0xe8, 0x8d, 0x9b, 0xcf, 0x4a, 0x1e, 0x95,
+			0x9d, 0x8c, 0x40, 0x54, 0x5b, 0x57, 0x1b, 0xcc,
+			0xca, 0xcf, 0xfb, 0x44, 0x6e, 0xfa, 0x45, 0x13,
+			0xc8, 0xd0, 0x0f, 0xe3, 0x89, 0xd8, 0x43, 0x30,
+			0xd2, 0x2a, 0x79, 0x33, 0x34, 0xbc, 0xd2, 0xd1,
+			0x6a, 0xc3, 0x66, 0xb1, 0x4c, 0xdc, 0xc7, 0x64,
+			0x84, 0xf9, 0x05, 0x61, 0x43, 0x64, 0xf5, 0xd0,
+			0x8a, 0x32, 0x30, 0xec, 0x90, 0xb2, 0xf9, 0xd7,
+			0x53, 0x62, 0x8b, 0x71, 0xbf, 0xd6, 0xa2, 0xf6,
+			0x59, 0x60, 0xc6, 0x67, 0x82, 0xef, 0x1d, 0x59,
+			0x0d, 0xa1, 0xa4, 0x7e, 0x9d, 0x6b, 0x95, 0x74,
+			0xf0, 0x3d, 0x3a, 0xe8, 0xc8, 0xf4, 0x83, 0xb0,
+			0xef, 0x3a, 0xb3, 0x56, 0x61, 0x7f, 0xa3, 0xe9,
+			0x2b, 0x17, 0x74, 0x4e, 0xeb, 0xbe, 0xb2, 0x7a,
+			0xca, 0xd3, 0xe4, 0x67, 0xa8, 0x62, 0x11, 0xf0,
+			0x31, 0x72, 0x87, 0x52, 0xeb, 0xfd, 0x32, 0xb5,
+			0xe1, 0xff, 0x84, 0xfb, 0x81, 0xf7, 0x78, 0xef,
+			0x0d, 0xbd, 0x03, 0xcf, 0xd6, 0xa0, 0x80, 0xb4,
+			0x04, 0x2b, 0x8a, 0xd7, 0x4f, 0x86, 0x60, 0x16,
+			0x9b, 0x41, 0xa0, 0x85, 0xce, 0xd5, 0xc9, 0x26,
+			0xd5, 0xf8, 0xa2, 0x67, 0x6b, 0xa5, 0xb5, 0x8d,
+			0x14, 0x61, 0xae, 0x42, 0xbc, 0x6a, 0xb0, 0x66,
+			0x07, 0x8a, 0xbb, 0xa9, 0xd2, 0xce, 0x48, 0x12,
+			0x5c, 0xe2, 0x60, 0x3d, 0x2f, 0xd0, 0x48, 0x3b,
+			0xe8, 0xf1, 0xc1, 0xd6, 0x11, 0x84, 0xef, 0x6b,
+			0xbe, 0x8a, 0x28, 0x56, 0xb5, 0xae, 0x7a, 0x41,
+			0xeb, 0x70, 0x2c, 0x46, 0x2f, 0x37, 0xe1, 0x9d,
+			0xe9, 0x3c, 0xa4, 0x9c, 0xd2, 0x71, 0xb4, 0x1a,
+			0xcf, 0xf0, 0xbe, 0x58, 0xe1, 0xf4, 0x14, 0xcd,
+			0xb1, 0x25, 0xfd, 0x54, 0x60, 0x40, 0xfe, 0xa2,
+			0xf8, 0xab, 0x09, 0xd0, 0xca, 0x45, 0x98, 0xe6,
+			0xff, 0x73, 0x9a, 0x6c, 0x3a, 0x5f, 0x3d, 0xef,
+			0xc6, 0x19, 0x0f, 0x2e, 0x7e, 0x7e, 0xa8, 0x44,
+			0xe4, 0x57, 0xd9, 0x7f, 0x3e, 0x44, 0x1d, 0x1b,
+			0x8f, 0xeb, 0x99, 0xb9, 0x1b, 0x00, 0xde, 0xcb,
+			0x98, 0xc9, 0x5c, 0xc5, 0x87, 0x0e, 0xdc, 0xaa,
+			0xb5, 0x67, 0x63, 0x08, 0x05, 0x7a, 0xab, 0xf2,
+			0x7a, 0x81, 0x8b, 0xb0, 0xd6, 0x3c, 0xa0, 0xd5,
+			0x6d, 0xc9, 0xa0, 0xf7, 0xa7, 0xdf, 0xa6, 0x6c,
+			0x83, 0x8f, 0xea, 0xb5, 0x1f, 0x21, 0x46, 0xb8,
+			0xf4, 0xd0, 0x8b, 0x79, 0x56, 0x2f, 0x3a, 0x45,
+			0x0d, 0x2f, 0xfb, 0xbd, 0x96, 0x23, 0xbd, 0xc7,
+			0x51, 0xf6, 0x4a, 0xb9, 0xe6, 0x40, 0x23, 0x66,
+			0x48, 0x0c, 0x61, 0x95, 0x07, 0x7b, 0x4b, 0x95,
+			0x12, 0x72, 0x82, 0x00, 0xb6, 0x52, 0xb9, 0x63,
+			0xf6, 0xf5, 0xb4, 0xdb, 0x06, 0xdd, 0x9a, 0x1a,
+			0xac, 0x96, 0xb9, 0x0c, 0xcc, 0x40, 0x3a, 0xc0,
+			0x94, 0x3d, 0x4c, 0xab, 0xcd, 0x83, 0xc7, 0x9f,
+			0x1c, 0x3d, 0x9a, 0x4e, 0x9e, 0xd5, 0x63, 0x79,
+			0xed, 0xd3, 0xe4, 0x02, 0xa6, 0x0d, 0xdb, 0x6a,
+			0x8b, 0xf5, 0x34, 0x71, 0x08, 0xb3, 0xc4, 0x4e,
+			0xa0, 0xaf, 0xd1, 0xcf, 0xb1, 0x57, 0x72, 0x8a,
+			0xf7, 0x1f, 0x76, 0x98, 0xe5, 0xfc, 0x44, 0x53,
+			0xd5, 0xa1, 0xb0, 0x79, 0x35, 0x69, 0x8a, 0x5e,
+			0x33, 0xd7, 0x04, 0x45, 0xc5, 0xe0, 0x16, 0x99,
+			0x6a, 0x85, 0x69, 0xec, 0xff, 0xb0, 0x7b, 0x32,
+			0x98, 0x26, 0xbb, 0xae, 0xae, 0xb6, 0xd4, 0xc6,
+			0x48, 0x10, 0x77, 0x42, 0x95, 0x4d, 0x08, 0x70,
+			0xdf, 0x78, 0x0c, 0x40, 0x3a, 0xd6, 0xc3, 0xf9,
+			0x4a, 0x17, 0xf5, 0xdd, 0x39, 0xec, 0xf3, 0x0c,
+			0x8c, 0x30, 0x6c, 0xd7, 0x4c, 0x54, 0x81, 0x22,
+			0x99, 0xb7, 0xf3, 0xc9, 0xae, 0x45, 0x99, 0x92,
+			0x87, 0xf5, 0x50, 0x04, 0xa5, 0x48, 0x76, 0xbb,
+			0xca, 0xf3, 0xe1, 0x5a, 0x93, 0xf4, 0x49, 0x54,
+			0xf1, 0x95, 0x06, 0xe6, 0xb0, 0x19, 0xf6, 0x08,
+			0x4d, 0x7b, 0x7d, 0x6f, 0xdc, 0x8f, 0x3a, 0x7d,
+			0xc0, 0x0e, 0xa4, 0xef, 0x36, 0x66, 0x9a, 0x9d,
+			0x75, 0xe8, 0x48, 0x08, 0xfa, 0x8a, 0x58, 0x51,
+			0xc0, 0x6f, 0x85, 0x23, 0x45, 0x7f, 0x75, 0xd6,
+			0xca, 0xc6, 0x18, 0x20, 0x46, 0x5e, 0x3f, 0x1a,
+			0x44, 0x0e, 0xf1, 0x77, 0x5f, 0xdd, 0xff, 0xa9,
+			0x90, 0x3f, 0x64, 0x14, 0xee, 0x5e, 0x6c, 0xf9,
+			0x04, 0x2b, 0xbc, 0xd5, 0xad, 0x80, 0x44, 0xc5,
+			0x64, 0x81, 0x9c, 0xbf, 0x4b, 0x84, 0x6b, 0xff,
+			0x42, 0x2a, 0xca, 0xdb, 0x77, 0x0c, 0xcb, 0x96,
+			0x1a, 0xa7, 0xfb, 0xa1, 0x25, 0x34, 0x25, 0x43,
+			0x9b, 0x0f, 0x08, 0x48, 0xc0, 0x9f, 0xe8, 0xb3,
+			0x1d, 0x49, 0x12, 0x12, 0xdd, 0xa1, 0xea, 0x67,
+			0xbf, 0x4b, 0x13, 0x6a, 0x48, 0xc2, 0x72, 0x3d,
+			0x25, 0xc9, 0x1e, 0x29, 0x0d, 0xf9, 0x9f, 0x1a,
+			0xfa, 0x2f, 0x17, 0x2e, 0x99, 0xc7, 0x2c, 0x88,
+			0xf1, 0x42, 0x80, 0x97, 0xfb, 0x9f, 0xd3, 0x50,
+			0xf9, 0xe9, 0x3f, 0xb4, 0x5a, 0xcb, 0xc8, 0x4d,
+			0xf8, 0x16, 0xd0, 0x50, 0x71, 0xbc, 0xc0, 0x00,
+			0xeb, 0xbf, 0x27, 0x20, 0x45, 0x40, 0x33, 0xb0,
+			0xdf, 0x8a, 0x56, 0xb0, 0x5a, 0xb8, 0x7c, 0xbe,
+			0x2c, 0xb2, 0xd4, 0xd6, 0x03, 0x98, 0x74, 0x7e,
+			0xac, 0xba, 0x46, 0x4b, 0x7b, 0x5a, 0x31, 0x2f,
+			0xfc, 0x34, 0xdc, 0x1a, 0x9f, 0x99, 0x81, 0xee,
+			0x6f, 0x19, 0xb1, 0x88, 0xfd, 0x4c, 0x88, 0x3b,
+			0x8d, 0xfd, 0xb8, 0x3f, 0xbd, 0xb4, 0xba, 0x52,
+			0x34, 0x75, 0x29, 0x2b, 0x79, 0x7d, 0x62, 0x80,
+			0xaf, 0x61, 0x67, 0x72, 0x06, 0x0a, 0x50, 0xfd,
+			0xd7, 0xd5, 0xed, 0x97, 0x6f, 0x0d, 0x94, 0x8a,
+			0x91, 0xac, 0xaa, 0xd2, 0x2a, 0x2f, 0xe9, 0x79,
+			0x47, 0xc3, 0x1f, 0xcf, 0xcb, 0x6b, 0xc4, 0xd3,
+			0x9c, 0x9d, 0xf2, 0x9b, 0xac, 0x8a, 0xbe, 0xd3,
+			0x28, 0x56, 0xb6, 0xaa, 0xd0, 0x83, 0x62, 0x8f,
+			0xea, 0xbd, 0x8f, 0x52, 0x4d, 0xd4, 0x88, 0x2c,
+			0x2c, 0x8d, 0x09, 0x8c, 0xb4, 0xeb, 0xe8, 0x3c,
+			0x0c, 0xc1, 0x9c, 0xa8, 0x70, 0x63, 0xe4, 0xaa,
+			0x21, 0x80, 0xf9, 0x2b, 0xaf, 0x2a, 0xdd, 0xf0,
+			0xe1, 0x04, 0x05, 0xe2, 0x8c, 0x12, 0x78, 0xed,
+			0x57, 0x46, 0x16, 0xcc, 0xb8, 0xbb, 0x36, 0x54,
+			0x66, 0xb6, 0x22, 0x81, 0x88, 0xfc, 0x42, 0x92,
+			0xca, 0xd5, 0xeb, 0x66, 0x13, 0x7a, 0xd1, 0x33,
+			0xc4, 0xcd, 0xfb, 0xe0, 0x8b, 0xc4, 0x90, 0x9f,
+			0xc5, 0xb9, 0xff, 0xb9, 0xbb, 0x41, 0x72, 0x2e,
+			0x7d, 0xcc, 0x91, 0x76, 0x1b, 0xdd, 0x40, 0xf3,
+			0xd3, 0xef, 0x80, 0xfb, 0xee, 0x60, 0x33, 0xad,
+			0x89, 0x64, 0xae, 0x30, 0x41, 0xe0, 0x93, 0x6c,
+			0x52, 0xe1, 0x13, 0x8d, 0xb9, 0x22, 0x25, 0x0d,
+			0xbb, 0x6a, 0x9a, 0x91, 0xf3, 0xe8, 0x2c, 0x96,
+			0xd5, 0xf7, 0xa9, 0x54, 0x86, 0xbf, 0xb0, 0x8b,
+			0xf3, 0x6d, 0x9a, 0x9c, 0x5d, 0xbd, 0x82, 0x1f,
+			0xdc, 0x73, 0xb6, 0xa0, 0xe5, 0x9e, 0x4d, 0x7d,
+			0xb4, 0x4d, 0xbf, 0xe6, 0xed, 0xc5, 0xd4, 0x58,
+			0x48, 0x93, 0xe9, 0x9a, 0x8d, 0x09, 0xd4, 0xfa,
+			0x6a, 0xfe, 0x5c, 0x2a, 0x11, 0x46, 0x71, 0x61,
+			0xbc, 0x4f, 0x48, 0x23, 0x8c, 0x12, 0x67, 0xf2,
+			0x29, 0x25, 0x93, 0x1f, 0xb5, 0x7b, 0x15, 0x39,
+			0xad, 0x58, 0xb5, 0x10, 0xbe, 0xc6, 0xe3, 0x2d,
+			0x71, 0xaf, 0xcd, 0xa0, 0x68, 0xd7, 0x8b, 0x71,
+			0x48, 0x9f, 0x3d, 0x8a, 0x0a, 0x8e, 0xb7, 0xc7,
+			0x1a, 0xbd, 0x5e, 0x66, 0x1d, 0x03, 0x61, 0xf4,
+			0xd1, 0xc2, 0xf1, 0xaf, 0x50, 0x93, 0x44, 0x74,
+			0x4c, 0x6e, 0x83, 0x9b, 0xa6, 0x19, 0x1a, 0x2e,
+			0xa3, 0xa5, 0xef, 0x0c, 0xc6, 0x71, 0x49, 0x0d,
+			0x56, 0xe6, 0xd4, 0x7b, 0x16, 0x8f, 0xe4, 0x5b,
+			0x78, 0x75, 0x7a, 0xe0, 0x4f, 0xe8, 0x40, 0x97,
+			0x9a, 0xc5, 0x95, 0x74, 0x29, 0xda, 0xfa, 0x32,
+			0xfb, 0x9e, 0xfa, 0x78, 0x90, 0x76, 0xb0, 0x1c,
+			0xcd, 0xa9, 0x67, 0x92, 0x58, 0xf2, 0xcf, 0xc6,
+			0x9b, 0xaf, 0x2e, 0xfd, 0x6f, 0x1f, 0x13, 0xbc,
+			0x18, 0xd4, 0xdb, 0x1b, 0x8d, 0xcf, 0x38, 0xd7,
+			0xc9, 0x52, 0xd2, 0x33, 0xe2, 0xf1, 0xe2, 0x7c,
+			0x98, 0x7f, 0xfe, 0x44, 0xe7, 0x1d, 0xe3, 0x23,
+			0x95, 0xf1, 0x6d, 0xe9, 0xf9, 0x72, 0x3f, 0x8c,
+			0xb7, 0xdb, 0x2e, 0xb7, 0x4e, 0x33, 0xd0, 0x87,
+			0x78, 0x30, 0xb9, 0x41, 0xcf, 0x92, 0x8d, 0xbc,
+			0xe6, 0x4e, 0x7f, 0x52, 0x5f, 0x45, 0x4c, 0x44,
+			0x2b, 0xd2, 0xa4, 0x3c, 0xb0, 0x20, 0x88, 0xf2,
+			0x59, 0xfc, 0xfb, 0x1f, 0xaf, 0x3e, 0x80, 0xa7,
+			0xb7, 0x12, 0x0a, 0x5b, 0xc8, 0x0d, 0x17, 0x98,
+			0x25, 0x36, 0x01, 0x4b, 0xd8, 0x03, 0x7b, 0x84,
+			0xc5, 0x75, 0xa9, 0x16, 0x90, 0xc8, 0x5a, 0x25,
+			0xed, 0xf8, 0x5b, 0x89, 0x54, 0x2d, 0xbd, 0x46,
+			0xf6, 0xc2, 0xf1, 0x39, 0xdc, 0x29, 0x11, 0x37,
+			0x84, 0xc5, 0x91, 0xd2, 0x4c, 0xf6, 0x27, 0x94,
+			0x4a, 0xdc, 0x82, 0xc5, 0x95, 0xd5, 0xc3, 0x41,
+			0xad, 0x1c, 0xcd, 0xeb, 0xfe, 0x6f, 0x16, 0xef,
+			0x5e, 0x65, 0x1d, 0x7a, 0xa0, 0xc9, 0xed, 0xa9,
+			0xcd, 0x31, 0xec, 0x64, 0x74, 0xb3, 0x25, 0x6d,
+			0xb3, 0xea, 0x0f, 0xa7, 0xf5, 0x7d, 0x88, 0xe9,
+			0xc3, 0x37, 0x29, 0x88, 0xcf, 0x05, 0x7d, 0xee,
+			0xc0, 0x2a, 0x30, 0x5f, 0x9f, 0xf9, 0xa6, 0x6b,
+			0xa7, 0x6a, 0x3d, 0xe8, 0xfa, 0x3c, 0xe1, 0x45,
+			0x57, 0x4f, 0x27, 0xb6, 0x28, 0x60, 0xc0, 0xad,
+			0x3d, 0x54, 0x07, 0x53, 0x81, 0x10, 0x64, 0xad,
+			0x22, 0x61, 0x4b, 0xbf, 0xe6, 0xe7, 0x10, 0xe4,
+			0xe7, 0x46, 0x58, 0x0e, 0x40, 0x53, 0x5d, 0x96,
+			0x51, 0xf8, 0x9f, 0xa6, 0xfa, 0xa0, 0xe3, 0xc2,
+			0xa5, 0x36, 0x4c, 0x7a, 0x71, 0x53, 0xa9, 0x36,
+			0xf6, 0xf2, 0xa3, 0xba, 0x60, 0x7b, 0x5b, 0x11,
+			0xd2, 0x39, 0x20, 0xeb, 0x09, 0x68, 0x4a, 0x1b,
+			0xe4, 0x31, 0xa5, 0xc9, 0xc9, 0xe5, 0xf4, 0x47,
+			0x5e, 0x26, 0x30, 0xf1, 0x83, 0x39, 0xa5, 0x4c,
+			0xa0, 0x72, 0x68, 0x8f, 0x4b, 0xd6, 0x64, 0x4c,
+			0xf5, 0x34, 0x74, 0x3d, 0x0c, 0x76, 0x10, 0xf4,
+			0x84, 0x5c, 0x9c, 0xbe, 0xe8, 0xe6, 0x24, 0x19,
+			0x4e, 0x34, 0x0a, 0x7a, 0x5d, 0x37, 0xae, 0xec,
+			0x2e, 0xf6, 0x05, 0x4a, 0x13, 0xf0, 0xc3, 0xb1,
+			0xd0, 0x41, 0xde, 0x5b, 0xcf, 0x86, 0xcc, 0xfc,
+			0xda, 0xa9, 0x31, 0x26, 0x09, 0xc3, 0x85, 0xe8,
+			0xd1, 0xa1, 0x39, 0x29, 0x73, 0xa9, 0xa7, 0x26,
+			0xda, 0x93, 0x4b, 0x1c, 0x41, 0xaf, 0x82, 0x9c,
+			0xa6, 0x05, 0x85, 0x93, 0x13, 0x60, 0x78, 0x54,
+			0x26, 0x11, 0x22, 0xc3, 0x4a, 0xde, 0x20, 0x54,
+			0xf4, 0x56, 0xc8, 0xc1, 0x09, 0x47, 0xfb, 0x47,
+			0x3e, 0x5c, 0x4c, 0x6e, 0xab, 0x9e, 0x22, 0x67,
+			0x4a, 0x80, 0xd7, 0x54, 0x8d, 0xdd, 0x57, 0x89,
+			0x77, 0xba, 0x96, 0x84, 0x73, 0x6d, 0x29, 0xa5,
+			0x73, 0x24, 0x3a, 0x54, 0x61, 0x5e, 0x80, 0xf7,
+			0x65, 0x41, 0x56, 0x32, 0x57, 0xb4, 0xb8, 0x22,
+			0x91, 0xef, 0xfd, 0x66, 0x12, 0x61, 0x84, 0xd9,
+			0x7d, 0x14, 0xa9, 0xd0, 0xf3, 0x82, 0xec, 0xf0,
+			0x91, 0x79, 0x70, 0xaa, 0xe3, 0x08, 0x5f, 0xc8,
+			0x3e, 0xc3, 0x4f, 0x51, 0xb3, 0x1c, 0x55, 0x34,
+			0xea, 0x8c, 0x9b, 0x70, 0xd5, 0xae, 0x95, 0xd8,
+			0xf5, 0x73, 0x47, 0x9d, 0xbf, 0x7f, 0xab, 0xe1,
+			0x2a, 0x26, 0x4c, 0x0c, 0x1b, 0xab, 0x09, 0xae,
+			0x14, 0x14, 0x96, 0x7c, 0x61, 0xc0, 0xd1, 0x3f,
+			0xe0, 0x6c, 0x29, 0x7a, 0x13, 0x82, 0x3a, 0x10,
+			0xca, 0x79, 0xa1, 0x69, 0xb5, 0xe4, 0x12, 0x8f,
+			0x88, 0x91, 0x89, 0x4c, 0x49, 0xbb, 0x21, 0xba,
+			0xca, 0xd0, 0x38, 0xf2, 0x91, 0xed, 0x49, 0x6a,
+			0x59, 0xa7, 0x74, 0x87, 0xa1, 0x6e, 0x47, 0x18,
+			0x2d, 0xbe, 0xcf, 0x41, 0x3a, 0x07, 0x9e, 0xb8,
+			0x2b, 0xf9, 0x93, 0xd6, 0xd1, 0x06, 0xa6, 0xa4,
+			0x3f, 0xef, 0x1e, 0xba, 0x3f, 0xf7, 0x3d, 0xe2,
+			0x3d, 0xf9, 0xa9, 0x20, 0xa5, 0x81, 0x2a, 0x3f,
+			0xb3, 0xbd, 0xdd, 0xae, 0x3f, 0xb5, 0xf7, 0xdd,
+			0x47, 0x9c, 0x57, 0x2d, 0xa9, 0xd1, 0x5d, 0x61,
+			0xaa, 0xd6, 0xca, 0x32, 0x35, 0x68, 0x69, 0xdb,
+			0xed, 0xb4, 0xd8, 0x2e, 0xc8, 0x41, 0x7e, 0x79,
+			0xad, 0xd0, 0xca, 0x2b, 0xa3, 0x2c, 0x9d, 0x16,
+			0x13, 0x79, 0x8c, 0x30, 0x01, 0xf4, 0x33, 0x48,
+			0x4a, 0x09, 0xa3, 0xaa, 0xd1, 0x75, 0xfc, 0xc7,
+			0xac, 0x43, 0xc1, 0xd7, 0xcf, 0x90, 0x91, 0x90,
+			0x24, 0x5a, 0x8b, 0xfd, 0xff, 0x1a, 0x8e, 0xa0,
+			0x25, 0xb7, 0x28, 0x8c, 0x21, 0x96, 0x25, 0x12,
+			0xe3, 0x9a, 0x19, 0xe4, 0x1a, 0x50, 0x2c, 0x9b,
+			0x48, 0x3b, 0xc9, 0x82, 0xc9, 0x29, 0xdc, 0x4d,
+			0x0c, 0xb6, 0x5d, 0x2e, 0xc1, 0xc8, 0x5a, 0xdd,
+			0x39, 0x97, 0x4c, 0xce, 0xea, 0x33, 0x95, 0xa5,
+			0x86, 0x5e, 0x1b, 0x21, 0xf1, 0x73, 0x58, 0xe7,
+			0x28, 0x13, 0xca, 0x9d, 0xd9, 0x7a, 0xe8, 0x94,
+			0x56, 0xd3, 0x35, 0xfe, 0x18, 0x4a, 0x91, 0x6e,
+			0x99, 0x83, 0xac, 0x9f, 0x99, 0x0b, 0xbd, 0xf3,
+			0xbf, 0x0e, 0x3d, 0xf6, 0xcd, 0x9f, 0xfc, 0x80,
+			0x9d, 0x72, 0x7f, 0x60, 0xd2, 0xf6, 0x1e, 0xa6,
+			0x0f, 0xeb, 0xa7, 0xee, 0xe3, 0x8d, 0x56, 0xf8,
+			0x20, 0x76, 0xcf, 0x7e, 0xf9, 0x5d, 0x06, 0x08,
+			0xe0, 0xcb, 0xf0, 0x89, 0xfc, 0x39, 0x54, 0x60,
+			0x4f, 0x92, 0xfd, 0x04, 0xab, 0xa6, 0x6e, 0x63,
+			0x44, 0xab, 0xc3, 0x70, 0x1b, 0x57, 0x01, 0x79,
+			0x88, 0x5e, 0xc0, 0x25, 0xc8, 0xe1, 0x03, 0xdd,
+			0x0f, 0x61, 0x2b, 0x50, 0x13, 0x84, 0x02, 0x79,
+			0x3a, 0x89, 0x16, 0x08, 0x34, 0x3e, 0x76, 0xf7,
+			0x4f, 0xbc, 0x9e, 0xfb, 0xb5, 0x81, 0xc4, 0xda,
+			0x95, 0x8b, 0x33, 0x92, 0x49, 0x86, 0x02, 0x44,
+			0x8d, 0x60, 0x74, 0x77, 0x5c, 0x6d, 0xcc, 0x0d,
+			0x67, 0xbe, 0x6e, 0x4a, 0xd9, 0x8c, 0xdd, 0x09,
+			0x7d, 0x90, 0x15, 0x2b, 0x6f, 0x7a, 0xca, 0x2d,
+			0x91, 0x74, 0x08, 0xd5, 0x38, 0xb4, 0xcb, 0xd3,
+			0xd5, 0x66, 0x2b, 0x2c, 0x98, 0xd1, 0x1f, 0x40,
+			0x06, 0x94, 0x83, 0x3c, 0xe4, 0x95, 0x59, 0x8c,
+			0xcb, 0x5d, 0x1f, 0x2f, 0xd1, 0x28, 0x26, 0xd5,
+			0x41, 0x42, 0x89, 0x60, 0xdc, 0xfb, 0xba, 0x40,
+			0x99, 0xe8, 0xa1, 0x99, 0xd4, 0x97, 0x05, 0xf1,
+			0xf4, 0x68, 0xa7, 0x95, 0x9b, 0x46, 0xbe, 0x3a,
+			0xa2, 0x38, 0x81, 0x1d, 0x3f, 0xa3, 0x39, 0x20,
+			0xa1, 0x1a, 0x3c, 0x59, 0x1d, 0x34, 0x77, 0xd0,
+			0x8b, 0xb9, 0x49, 0x7d, 0xba, 0x8f, 0x97, 0x27,
+			0x1c, 0xbe, 0xf5, 0x9b, 0x4b, 0x88, 0x87, 0x1b,
+			0xd8, 0xbe, 0x6e, 0x41, 0xd3, 0x54, 0x9a, 0xe3,
+			0x52, 0x05, 0xe2, 0x01, 0x18, 0x31, 0xd2, 0xe2,
+			0x2e, 0xdd, 0x85, 0xd3, 0x2c, 0xe0, 0x07, 0xed,
+			0xa8, 0x0e, 0xc3, 0x0d, 0x83, 0x01, 0xa6, 0xcd,
+			0x0d, 0x50, 0xde, 0xb6, 0x6b, 0xf7, 0x59, 0x3f,
+			0xb7, 0x26, 0x4f, 0x55, 0x4d, 0xd8, 0x34, 0x39,
+			0xef, 0x47, 0x7d, 0x6c, 0x8c, 0x2e, 0xfb, 0x67,
+			0x49, 0x61, 0x5b, 0x33, 0x9d, 0xe2, 0x94, 0xb7,
+			0x76, 0x80, 0x1f, 0xed, 0x73, 0xc7, 0xf6, 0xab,
+			0xc0, 0x77, 0x59, 0x10, 0x49, 0xe6, 0x59, 0x09,
+			0xf6, 0xb0, 0x07, 0x09, 0x87, 0x54, 0xe5, 0x0b,
+			0x0e, 0x73, 0x2b, 0xed, 0xba, 0xcf, 0xb1, 0xc5,
+			0xa0, 0xf3, 0x24, 0x9a, 0xc2, 0x56, 0x70, 0xf3,
+			0xb6, 0x92, 0xab, 0x91, 0x3a, 0x54, 0x8a, 0x5b,
+			0x9e, 0x93, 0x3f, 0x12, 0x22, 0xa5, 0xa5, 0x52,
+			0xb3, 0xbf, 0x83, 0x58, 0x96, 0x90, 0x93, 0xd1,
+			0x9f, 0xaf, 0x0a, 0x22, 0x04, 0x6f, 0x23, 0xa3,
+			0x3d, 0x65, 0x98, 0xd4, 0xbd, 0x61, 0xe3, 0xd8,
+			0x44, 0x6b, 0xc7, 0xe9, 0xcc, 0x8f, 0xbb, 0x55,
+			0x8f, 0x33, 0xce, 0xfe, 0x76, 0xff, 0x42, 0x6d,
+			0xe4, 0xfa, 0xca, 0x87, 0x99, 0x5b, 0x68, 0x93,
+			0xff, 0x0f, 0xba, 0xd7, 0x6d, 0x1d, 0x17, 0xd8,
+			0x9e, 0xd2, 0x69, 0x70, 0x25, 0x4f, 0x3a, 0xa8,
+			0xd0, 0x0d, 0xea, 0xdd, 0x0f, 0xc5, 0xa3, 0x13,
+			0x72, 0xb8, 0x5a, 0x91, 0xb6, 0x47, 0xf3, 0xd4,
+			0x4a, 0xf8, 0xa1, 0xe9, 0xa7, 0x11, 0xc0, 0xba,
+			0xc5, 0x1d, 0xbb, 0xcf, 0x98, 0x19, 0x56, 0x7c,
+			0xde, 0xe4, 0x01, 0xbc, 0x0b, 0xe0, 0x3b, 0x43,
+			0xb2, 0x7d, 0x8c, 0x67, 0x1c, 0x2d, 0xdf, 0xb2,
+			0xf8, 0xcc, 0x7b, 0xdd, 0x45, 0x6c, 0x6f, 0xfb,
+			0x6d, 0xaf, 0xc6, 0x20, 0xaa, 0x25, 0xb7, 0xf9,
+			0x94, 0x48, 0xaf, 0x45, 0x96, 0x2a, 0x78, 0x78,
+			0x62, 0x8a, 0x23, 0xb5, 0x7d, 0x37, 0x98, 0xfd,
+			0x5d, 0x96, 0x50, 0x2f, 0x2c, 0x4b, 0x45, 0xa3,
+			0xf1, 0xaa, 0x2d, 0x92, 0x6d, 0xa8, 0xd1, 0x6b,
+			0x41, 0x53, 0x37, 0xff, 0x06, 0xfd, 0x8f, 0x57,
+			0xe9, 0x30, 0x05, 0x52, 0x64, 0xa9, 0x91, 0x8a,
+			0x33, 0xec, 0x62, 0xcd, 0x61, 0xae, 0x3c, 0x32,
+			0x57, 0x3e, 0xe4, 0x86, 0xdf, 0xb8, 0x0e, 0x7b,
+			0x07, 0x2c, 0xaf, 0x9f, 0xcc, 0x15, 0xe0, 0x67,
+			0x65, 0xab, 0x85, 0x86, 0x7e, 0x00, 0x6a, 0x2f,
+			0x62, 0x52, 0xfa, 0x2f, 0x37, 0x8d, 0x38, 0x55,
+			0x40, 0x9d, 0x6c, 0x01, 0x7c, 0x0b, 0x93, 0x20,
+			0x60, 0x69, 0x9d, 0x6e, 0xc9, 0x4d, 0xe5, 0x62,
+			0x4b, 0x94, 0xe4, 0x05, 0x26, 0x46, 0x37, 0xd8,
+			0x3f, 0xd7, 0x16, 0x35, 0x45, 0x88, 0x4c, 0xad,
+			0x6a, 0xa6, 0xb2, 0x1b, 0x63, 0x9a, 0x3e, 0xfc,
+			0x69, 0xdd, 0xbb, 0x5b, 0xf4, 0xf3, 0xa1, 0x8c,
+			0xba, 0xd5, 0xef, 0x6a, 0xf0, 0x97, 0x2f, 0x20,
+			0x79, 0xdf, 0x11, 0x2c, 0x75, 0xab, 0x0d, 0x22,
+			0xaa, 0x6e, 0x8a, 0x59, 0x5e, 0x0c, 0x88, 0xe5,
+			0x1c, 0x4b, 0x6e, 0x1a, 0x5c, 0xa8, 0xe7, 0x36,
+			0xc9, 0x6a, 0x49, 0x85, 0xe0, 0x06, 0xa8, 0xaa,
+			0xed, 0x87, 0x29, 0x28, 0x0a, 0x40, 0xce, 0xdb,
+			0x78, 0xc6, 0x65, 0x26, 0x4d, 0x13, 0xdb, 0x89,
+			0xf9, 0x04, 0xdd, 0x58, 0x92, 0x8c, 0x5f, 0xad,
+			0x02, 0xee, 0xe9, 0xaa, 0x97, 0x6b, 0xf8, 0x77,
+			0x15, 0x7c, 0xb4, 0xa8, 0x30, 0x12, 0x8e, 0xbb,
+			0x4e, 0xc2, 0x19, 0x14, 0x0e, 0x0c, 0xc9, 0x5d,
+			0xc4, 0x47, 0x30, 0xe4, 0x85, 0x71, 0x98, 0x52,
+			0x53, 0x55, 0x6c, 0x11, 0x8b, 0xbd, 0x12, 0x77,
+			0xe9, 0x84, 0xd2, 0x5b, 0x17, 0x90, 0x24, 0xae,
+			0x7c, 0xc8, 0xf9, 0xdf, 0xd0, 0x98, 0xe6, 0x6c,
+			0xe8, 0xac, 0xeb, 0x53, 0x1b, 0x58, 0x97, 0xa0,
+			0xc4, 0x4c, 0xfb, 0x47, 0xb6, 0x1d, 0x7a, 0x59,
+			0x42, 0x28, 0xb4, 0xdb, 0x87, 0x84, 0x93, 0xde,
+			0x18, 0xd8, 0xe3, 0x4e, 0xe6, 0xcf, 0xe0, 0x7e,
+			0x09, 0xe1, 0x82, 0x40, 0x5d, 0x51, 0x80, 0x75,
+			0x50, 0x88, 0xef, 0x99, 0xbd, 0x41, 0xd3, 0x8e,
+			0xe9, 0x96, 0xdd, 0x97, 0x55, 0xe0, 0xbc, 0x5d,
+			0xba, 0xda, 0x0b, 0x15, 0xb3, 0x98, 0x86, 0x99,
+			0xd7, 0xba, 0xaf, 0x5d, 0xb7, 0x84, 0xe3, 0xde,
+			0x47, 0xca, 0xff, 0xc8, 0x14, 0xbe, 0x1a, 0xc5,
+			0xd9, 0x8a, 0xcb, 0xd6, 0x0b, 0xe5, 0x9d, 0xe8,
+			0xf9, 0x5e, 0x78, 0xec, 0xa6, 0xbd, 0x72, 0xd7,
+			0xc0, 0x33, 0xf7, 0xfa, 0xc1, 0x33, 0x3a, 0x9b,
+			0x11, 0xd8, 0x02, 0x8c, 0xd0, 0xe8, 0x37, 0xb8,
+			0x25, 0xe3, 0x97, 0x24, 0x2e, 0x29, 0x41, 0x83,
+			0xee, 0x4a, 0x22, 0x00, 0x7c, 0xc1, 0x4c, 0xf5,
+			0xe5, 0xac, 0xf7, 0x6b, 0xa9, 0x93, 0x76, 0x37,
+			0x52, 0x9b, 0xfe, 0xb9, 0x2f, 0xe9, 0xc9, 0xe2,
+			0xaa, 0xcc, 0x72, 0x7a, 0xab, 0xd4, 0x23, 0x0b,
+			0x0c, 0xc9, 0x63, 0x4c, 0x02, 0x3e, 0x38, 0x58,
+			0x4e, 0xea, 0xdc, 0xeb, 0xbd, 0x7c, 0xb7, 0xfd,
+			0xf8, 0x99, 0x2b, 0x0b, 0x72, 0x8b, 0x44, 0x6d,
+			0x3b, 0xe8, 0x97, 0xf2, 0xa1, 0xbf, 0x4e, 0x93,
+			0xf0, 0x64, 0x16, 0x4d, 0x39, 0xf8, 0x72, 0xe7,
+			0x73, 0x2e, 0xbc, 0x08, 0x0f, 0x42, 0x7e, 0x30,
+			0xb8, 0xbf, 0x75, 0xed, 0x00, 0x50, 0x9f, 0x81,
+			0x13, 0x3b, 0xc9, 0x33, 0x4d, 0xf9, 0x7e, 0x8b,
+			0x5c, 0xd8, 0x7c, 0xe4, 0x0d, 0x95, 0x63, 0x28,
+			0x59, 0x68, 0x97, 0x02, 0x0c, 0x1e, 0x57, 0xa6,
+			0x0b, 0x24, 0x3e, 0x70, 0x8e, 0x94, 0x9a, 0xd4,
+			0x43, 0xb1, 0xb6, 0xcd, 0xf8, 0xff, 0x35, 0x46,
+			0x6c, 0x77, 0xb6, 0xbe, 0xc8, 0x7b, 0xb0, 0xc1,
+			0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+			0x08, 0x10, 0x16, 0x1d, 0x21, },
+	},


^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v9 6/9] crypto: Add ML-DSA-87 pure rejection test vectors as a kunit test
  2025-11-17 14:55 [PATCH v9 0/9] lib/crypto: Add ML-DSA signing David Howells
                   ` (4 preceding siblings ...)
  2025-11-17 14:55 ` [PATCH v9 5/9] crypto: Add ML-DSA-65 " David Howells
@ 2025-11-17 14:55 ` David Howells
  2025-11-17 14:55 ` [PATCH v9 7/9] pkcs7: Allow the signing algo to calculate the digest itself David Howells
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 32+ messages in thread
From: David Howells @ 2025-11-17 14:55 UTC (permalink / raw)
  To: Herbert Xu
  Cc: David Howells, Eric Biggers, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

Add the "Pure rejection tests" from Stephan Mueller's Leancrypto
implementation of ML-DSA/Dilithium 87 to the kernel as a kunit test.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Stephan Mueller <smueller@chronox.de>
cc: Eric Biggers <ebiggers@kernel.org>
cc: Jason A. Donenfeld <Jason@zx2c4.com>
cc: Ard Biesheuvel <ardb@kernel.org>
cc: Herbert Xu <herbert@gondor.apana.org.au>
cc: linux-crypto@vger.kernel.org
---
 lib/crypto/tests/mldsa_kunit.c                |   20 +
 .../tests/mldsa_pure_rejection_vectors_87.h   | 6456 +++++++++++++++++
 2 files changed, 6476 insertions(+)
 create mode 100644 lib/crypto/tests/mldsa_pure_rejection_vectors_87.h

diff --git a/lib/crypto/tests/mldsa_kunit.c b/lib/crypto/tests/mldsa_kunit.c
index 1999e6d7b252..e14f81beccb6 100644
--- a/lib/crypto/tests/mldsa_kunit.c
+++ b/lib/crypto/tests/mldsa_kunit.c
@@ -38,6 +38,9 @@ static const struct dilithium_testvector dilithium_44_testvectors[] = {
 static const struct dilithium_testvector dilithium_65_testvectors[] = {
 #include "mldsa_pure_rejection_vectors_65.h"
 };
+static const struct dilithium_testvector dilithium_87_testvectors[] = {
+#include "mldsa_pure_rejection_vectors_87.h"
+};
 
 static void dilithium_44_kunit_test(struct kunit *test)
 {
@@ -71,9 +74,26 @@ static void dilithium_65_kunit_test(struct kunit *test)
 	KUNIT_SUCCEED(test);
 }
 
+static void dilithium_87_kunit_test(struct kunit *test)
+{
+	const struct dilithium_testvector *tc = dilithium_87_testvectors;
+	int count = ARRAY_SIZE(dilithium_87_testvectors);
+	int ret;
+
+	for (int index = 0; index < count; index++) {
+		ret = mldsa_87_verify(tc->pk, tc->pk_len,
+				      tc->msg, tc->msg_len,
+				      tc->sig, tc->sig_len);
+		KUNIT_ASSERT_EQ_MSG(test, ret, 0, "Verify failed");
+	}
+
+	KUNIT_SUCCEED(test);
+}
+
 static struct kunit_case __refdata mldsa_kunit_cases[] = {
 	KUNIT_CASE(dilithium_44_kunit_test),
 	KUNIT_CASE(dilithium_65_kunit_test),
+	KUNIT_CASE(dilithium_87_kunit_test),
 	{}
 };
 
diff --git a/lib/crypto/tests/mldsa_pure_rejection_vectors_87.h b/lib/crypto/tests/mldsa_pure_rejection_vectors_87.h
new file mode 100644
index 000000000000..69f2bf321293
--- /dev/null
+++ b/lib/crypto/tests/mldsa_pure_rejection_vectors_87.h
@@ -0,0 +1,6456 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
+	{
+		.what = "pure rejection vector",
+		.algo = "ml-dsa87",
+		.pk_len = DILITHIUM87_PUBLICKEYBYTES,
+		.pk = (const u8[DILITHIUM87_PUBLICKEYBYTES]){
+			0xd4, 0x9d, 0xdc, 0x3d, 0xa4, 0xa5, 0x87, 0xa5,
+			0x54, 0x61, 0xf3, 0xf4, 0xe0, 0x11, 0xc9, 0x1c,
+			0x78, 0x0a, 0xf1, 0x8a, 0xa8, 0xb2, 0xff, 0xb2,
+			0x9a, 0x2c, 0xe0, 0x86, 0x5c, 0xaa, 0x86, 0xe0,
+			0xd9, 0x42, 0x54, 0x18, 0x3e, 0x4c, 0x96, 0x1a,
+			0xb4, 0xc7, 0x18, 0xcf, 0x7d, 0xca, 0xe2, 0x74,
+			0x6c, 0x81, 0x3e, 0xcb, 0xf8, 0x7b, 0xc4, 0x90,
+			0x50, 0xd5, 0xe8, 0xd3, 0xbc, 0x8b, 0xa8, 0x3e,
+			0xb0, 0x96, 0x65, 0xd7, 0xbb, 0xa9, 0xab, 0x9c,
+			0x82, 0x5e, 0x6e, 0x8d, 0xf8, 0xc3, 0x6d, 0xe9,
+			0xbf, 0xbd, 0x30, 0xc9, 0xca, 0x47, 0x85, 0xae,
+			0x6f, 0x5d, 0x09, 0x4d, 0xd7, 0xdd, 0x05, 0x51,
+			0xe0, 0x9e, 0x94, 0x3b, 0x1d, 0xfa, 0x30, 0x57,
+			0xdc, 0x58, 0x48, 0xe5, 0x45, 0xf3, 0x34, 0x8a,
+			0x73, 0x66, 0x8a, 0xe0, 0x62, 0x3d, 0x0d, 0xfb,
+			0x13, 0x52, 0x25, 0xf5, 0xd3, 0x94, 0x15, 0x9d,
+			0xac, 0x6a, 0x74, 0x8a, 0x64, 0x91, 0x5b, 0xa3,
+			0xe2, 0xd0, 0x5c, 0xd2, 0xee, 0x52, 0xc0, 0x0c,
+			0x6c, 0x81, 0x34, 0x94, 0xfb, 0x87, 0xf6, 0x6b,
+			0x0f, 0x7e, 0x99, 0xa7, 0xaf, 0xb3, 0x74, 0xa7,
+			0xb6, 0x64, 0xd7, 0x36, 0x39, 0x3f, 0x7d, 0x0e,
+			0xc3, 0x76, 0xb3, 0x3a, 0xc9, 0x94, 0x6f, 0xc0,
+			0xaa, 0x92, 0x2a, 0xf1, 0x38, 0x8c, 0x62, 0xa1,
+			0x9a, 0xbe, 0x8d, 0x32, 0xec, 0x05, 0xb9, 0x8d,
+			0xb0, 0xdb, 0x37, 0x8d, 0x61, 0xfa, 0x79, 0x55,
+			0x1d, 0xf2, 0xc3, 0x19, 0x15, 0x3b, 0x26, 0xef,
+			0xe5, 0xf3, 0x29, 0xa1, 0x13, 0x60, 0x68, 0xd3,
+			0x22, 0x57, 0xcd, 0x99, 0xe6, 0x22, 0x54, 0xdf,
+			0x02, 0xe4, 0xd5, 0xd2, 0x66, 0xce, 0x5a, 0x90,
+			0x13, 0x7e, 0x7c, 0xad, 0x4c, 0x4c, 0xb6, 0x93,
+			0x65, 0xda, 0x4b, 0xb6, 0x13, 0x0e, 0x1b, 0x36,
+			0xaa, 0x2c, 0xbd, 0x60, 0x57, 0x98, 0x35, 0xa9,
+			0xe9, 0xad, 0xc5, 0x8e, 0x33, 0x47, 0x00, 0xe9,
+			0xf2, 0x1b, 0xe7, 0x5a, 0xd0, 0x55, 0x3b, 0x0e,
+			0x77, 0x09, 0x7e, 0x1f, 0x11, 0x0b, 0xf0, 0xe4,
+			0x07, 0x27, 0xe7, 0x72, 0xe9, 0x50, 0x9c, 0x9c,
+			0x84, 0xb0, 0x5c, 0xe0, 0x13, 0x79, 0xfa, 0x3f,
+			0x80, 0x96, 0xe2, 0x04, 0xde, 0x35, 0x5f, 0xa4,
+			0x4e, 0x8a, 0x12, 0x7a, 0xba, 0x53, 0x20, 0x36,
+			0x3d, 0xf0, 0x63, 0xb6, 0x14, 0xab, 0xce, 0x6b,
+			0x24, 0xfd, 0xc9, 0xd2, 0x52, 0xd9, 0xc0, 0x40,
+			0xdf, 0xdd, 0xd5, 0xc2, 0xa0, 0xf5, 0x74, 0x46,
+			0x17, 0xdc, 0xf5, 0x81, 0x68, 0xbd, 0x1a, 0x01,
+			0x33, 0xd0, 0x2f, 0xdc, 0x3a, 0x43, 0x4a, 0x08,
+			0x07, 0x98, 0x9f, 0x75, 0x5d, 0x70, 0x15, 0x1d,
+			0x58, 0x7f, 0x26, 0x30, 0x28, 0xe1, 0x17, 0x6d,
+			0x14, 0x0f, 0x01, 0x4a, 0x88, 0x3b, 0xf5, 0x70,
+			0x1d, 0x97, 0xd5, 0xda, 0x18, 0xa8, 0xb3, 0xa4,
+			0x0e, 0x04, 0x3f, 0xe8, 0x50, 0xf4, 0x87, 0x65,
+			0x75, 0x5a, 0x5d, 0x2f, 0x94, 0x63, 0x7a, 0xd0,
+			0x06, 0xce, 0xfb, 0xeb, 0x41, 0x65, 0xc9, 0x55,
+			0x38, 0x54, 0xd3, 0xc4, 0xac, 0x24, 0x46, 0x06,
+			0x2a, 0x87, 0xb1, 0x0f, 0x06, 0xd8, 0x1e, 0xa7,
+			0x35, 0xc4, 0xa3, 0xdc, 0x60, 0x80, 0x83, 0xe7,
+			0xf0, 0x74, 0xf6, 0xd6, 0xa7, 0x1d, 0x50, 0xff,
+			0xba, 0x82, 0xc0, 0xca, 0x72, 0x6b, 0xda, 0x4a,
+			0xcb, 0x3b, 0xe8, 0xa3, 0xaa, 0x32, 0x86, 0xc0,
+			0x94, 0x75, 0x2b, 0x2f, 0x44, 0xad, 0x5b, 0x8d,
+			0xab, 0xc2, 0x03, 0x55, 0xb1, 0x7e, 0x67, 0x07,
+			0x39, 0x33, 0x83, 0x67, 0xec, 0xbf, 0x52, 0xad,
+			0x55, 0x37, 0x3e, 0xa1, 0x41, 0xed, 0xa0, 0x91,
+			0xbf, 0x28, 0x1b, 0x04, 0x32, 0xbf, 0xf1, 0xb0,
+			0x0a, 0x11, 0x99, 0x98, 0x77, 0xee, 0x14, 0x13,
+			0x15, 0x13, 0xad, 0x1f, 0xb6, 0x6b, 0xcd, 0x3b,
+			0xb8, 0x75, 0x9a, 0x55, 0x9b, 0x0c, 0x6c, 0xf7,
+			0x7c, 0x21, 0x06, 0xb7, 0xf0, 0x43, 0x41, 0x96,
+			0xc1, 0x73, 0x44, 0x53, 0xd8, 0x18, 0x3e, 0x09,
+			0x4e, 0xc2, 0x5f, 0xa0, 0xd5, 0x18, 0xdb, 0x9f,
+			0xf4, 0xa0, 0xf8, 0x4d, 0xa7, 0x72, 0x7e, 0x85,
+			0xbb, 0xb7, 0xcc, 0x7b, 0x51, 0xb0, 0xf1, 0x5e,
+			0x03, 0xcd, 0xe8, 0x5b, 0x83, 0x3f, 0x95, 0xe2,
+			0x0b, 0xa1, 0xc7, 0x6f, 0x74, 0x98, 0xcd, 0x95,
+			0xf4, 0xd4, 0xb8, 0x40, 0xff, 0x75, 0x54, 0x83,
+			0x3a, 0x2c, 0x64, 0x38, 0x10, 0xcb, 0x6d, 0xad,
+			0xf9, 0x91, 0xcb, 0xcf, 0xbe, 0xf6, 0xf7, 0x94,
+			0x15, 0xea, 0xaf, 0x37, 0x65, 0x7c, 0xd2, 0xff,
+			0x99, 0x79, 0xf8, 0x95, 0x27, 0x75, 0x09, 0x60,
+			0xa4, 0x6f, 0x06, 0x0f, 0x6c, 0x13, 0xdd, 0x32,
+			0x79, 0xa7, 0x40, 0xa5, 0xdd, 0x2c, 0x22, 0xc1,
+			0xee, 0xc3, 0x31, 0x59, 0xb1, 0x3d, 0xa1, 0x77,
+			0x69, 0xb5, 0xd6, 0xae, 0xd7, 0x86, 0xab, 0xa4,
+			0xdf, 0x9f, 0x36, 0xb4, 0xb2, 0xe6, 0x88, 0xd6,
+			0x45, 0x9b, 0x8b, 0x87, 0xbd, 0x27, 0xe9, 0x55,
+			0xd5, 0xac, 0xe9, 0x33, 0x80, 0x00, 0x1d, 0x00,
+			0x21, 0x74, 0xe2, 0x0a, 0x5b, 0xd2, 0x37, 0xab,
+			0x6f, 0x48, 0x5e, 0x14, 0x76, 0x3a, 0x84, 0xf9,
+			0x34, 0x03, 0x74, 0x8d, 0x6c, 0xd8, 0xd4, 0x0f,
+			0xc7, 0xc8, 0x0c, 0xb5, 0x18, 0x12, 0xa5, 0x5a,
+			0x76, 0x4b, 0x5d, 0x1e, 0x75, 0x89, 0x3a, 0x01,
+			0x60, 0xf1, 0x1e, 0x5b, 0x98, 0x71, 0x7a, 0x15,
+			0x79, 0xff, 0x3d, 0x37, 0x5e, 0xc9, 0x56, 0xa5,
+			0x43, 0xe7, 0xd0, 0x2b, 0x63, 0xfb, 0x2f, 0x1a,
+			0x55, 0x37, 0x15, 0x02, 0x7f, 0x9a, 0x84, 0xf0,
+			0x07, 0x45, 0x2b, 0xa0, 0x9a, 0xb4, 0x60, 0x4d,
+			0x48, 0xd5, 0xee, 0x64, 0xf9, 0xe7, 0x4b, 0x1c,
+			0xb9, 0x05, 0xd1, 0xd1, 0x47, 0x4f, 0xca, 0x26,
+			0x32, 0xad, 0x7b, 0x2e, 0x7e, 0x54, 0x05, 0x96,
+			0x12, 0x29, 0xbc, 0xd3, 0x45, 0x4e, 0x05, 0x83,
+			0x6d, 0x30, 0x38, 0xd0, 0x3c, 0x46, 0xcd, 0xb6,
+			0x21, 0xb6, 0x5c, 0x2a, 0x40, 0x7a, 0x2e, 0x97,
+			0xd7, 0xbf, 0xa6, 0x55, 0x2a, 0xa6, 0x28, 0x54,
+			0xc4, 0x66, 0xbe, 0xf6, 0xea, 0xc1, 0x19, 0xcb,
+			0xcc, 0x52, 0x07, 0xcd, 0x90, 0x3f, 0x09, 0x23,
+			0x77, 0xf7, 0xc6, 0x03, 0xcc, 0x8b, 0x18, 0xac,
+			0x63, 0x6d, 0x2a, 0x01, 0x82, 0xad, 0x20, 0x11,
+			0x82, 0xf3, 0xfe, 0x2d, 0x53, 0x3f, 0x18, 0xb5,
+			0xbc, 0xf7, 0x0c, 0xa7, 0xca, 0x63, 0xfa, 0x77,
+			0x8a, 0x3c, 0xc1, 0xc4, 0xb0, 0x15, 0x4b, 0x08,
+			0xdd, 0xb3, 0xd2, 0x33, 0xc8, 0xc2, 0xaa, 0x1a,
+			0xe4, 0x9b, 0x1b, 0x18, 0x78, 0x07, 0x6c, 0x08,
+			0x28, 0x3f, 0xc6, 0xb7, 0x46, 0x8f, 0x8e, 0xc6,
+			0xff, 0xb1, 0x2d, 0x63, 0x12, 0x7c, 0xe5, 0xd8,
+			0xa5, 0xf8, 0x64, 0x76, 0xf7, 0x1b, 0xbc, 0x41,
+			0xad, 0xee, 0xe8, 0x6f, 0xd4, 0x13, 0xea, 0x59,
+			0x72, 0xfa, 0x04, 0xb4, 0x6e, 0x52, 0x3a, 0xff,
+			0x60, 0xa0, 0xd8, 0xdf, 0x41, 0x1a, 0x4e, 0xc8,
+			0x80, 0x2d, 0x29, 0x13, 0xd3, 0xd0, 0x55, 0x20,
+			0xb5, 0x33, 0x4f, 0x02, 0xd2, 0xea, 0xca, 0x94,
+			0x99, 0xdf, 0x3c, 0xfd, 0xe5, 0x2b, 0x45, 0x04,
+			0x85, 0xfe, 0x87, 0x42, 0x53, 0x11, 0x62, 0x2f,
+			0xcf, 0x05, 0x35, 0x29, 0x6a, 0xa5, 0x37, 0x80,
+			0x9b, 0x4a, 0x44, 0x3c, 0x6d, 0xe1, 0xd3, 0x88,
+			0x6a, 0xe7, 0x6f, 0x45, 0xfc, 0x99, 0x33, 0xe4,
+			0x18, 0x62, 0x19, 0x36, 0x37, 0x6f, 0xe9, 0x37,
+			0xbb, 0x86, 0xa2, 0x07, 0xec, 0xbc, 0x33, 0x0d,
+			0x0a, 0x18, 0x30, 0x13, 0xcf, 0x36, 0x31, 0x2f,
+			0xd2, 0xf6, 0x7e, 0xa8, 0xa4, 0x95, 0x71, 0xc8,
+			0x40, 0x1f, 0x34, 0xf1, 0x95, 0xde, 0x3e, 0xe1,
+			0xb7, 0xef, 0x26, 0x1e, 0x20, 0x78, 0xf8, 0x9a,
+			0x24, 0xbc, 0x7f, 0x64, 0x30, 0x42, 0x63, 0x77,
+			0x89, 0x96, 0xf8, 0x9b, 0x60, 0x51, 0xb3, 0x02,
+			0x7a, 0x64, 0x19, 0xd3, 0x13, 0x98, 0xcd, 0xb6,
+			0x1e, 0x68, 0x82, 0x9b, 0x23, 0x44, 0x3e, 0xa8,
+			0x57, 0xf5, 0x4d, 0xd8, 0xea, 0x93, 0x84, 0x4e,
+			0x56, 0x18, 0xb7, 0x94, 0x02, 0xfa, 0x6e, 0x8e,
+			0xa0, 0x75, 0xd2, 0xb4, 0xbb, 0x50, 0x6f, 0x3f,
+			0x58, 0xe2, 0x28, 0xb6, 0x87, 0xd6, 0xc5, 0xe0,
+			0x76, 0xa6, 0xc6, 0x5b, 0xed, 0x6b, 0x48, 0xd4,
+			0x25, 0xd3, 0x5f, 0x64, 0xab, 0xe3, 0x5a, 0xae,
+			0x69, 0xe8, 0x06, 0xff, 0xef, 0x67, 0x0b, 0x49,
+			0xe4, 0xe8, 0x31, 0xee, 0x1a, 0x35, 0x86, 0x0c,
+			0x81, 0x8a, 0x1f, 0x7f, 0x06, 0x20, 0x66, 0x81,
+			0x8b, 0xfb, 0xdc, 0x99, 0x78, 0x7b, 0x43, 0x84,
+			0x35, 0xa7, 0x4f, 0x27, 0xb5, 0xc9, 0x44, 0xbf,
+			0x05, 0x59, 0xce, 0x4c, 0xe5, 0xaa, 0x18, 0x37,
+			0x32, 0x5b, 0x41, 0x62, 0x89, 0x0a, 0xec, 0x0a,
+			0xae, 0x67, 0xcf, 0x0b, 0xef, 0xf6, 0x3a, 0x3b,
+			0x13, 0x1d, 0xf8, 0x8b, 0x20, 0x5f, 0x2c, 0x55,
+			0x75, 0xec, 0xf4, 0x9d, 0x2d, 0x0d, 0x0d, 0xb7,
+			0x88, 0x71, 0xf7, 0xc6, 0xf8, 0x65, 0x1a, 0xba,
+			0xdb, 0xdc, 0x53, 0xd2, 0x80, 0x92, 0x72, 0x14,
+			0xce, 0x68, 0xb8, 0xf4, 0x78, 0x4b, 0x92, 0xee,
+			0x15, 0xfc, 0xd4, 0xe0, 0x89, 0x49, 0x82, 0xf8,
+			0x7f, 0xce, 0xf6, 0xce, 0x86, 0xfa, 0xa5, 0xd9,
+			0x3a, 0xfb, 0xef, 0xa8, 0xd9, 0x3b, 0x6e, 0xb5,
+			0xe2, 0x29, 0x31, 0x6f, 0x5f, 0xa7, 0x34, 0x58,
+			0x49, 0x07, 0x9c, 0x4d, 0x74, 0x46, 0xb6, 0xd5,
+			0x0c, 0x3c, 0x26, 0x4b, 0xee, 0x37, 0x9c, 0x92,
+			0xa2, 0x37, 0x95, 0x35, 0x71, 0xee, 0x46, 0xdd,
+			0xef, 0xd0, 0xf2, 0xd4, 0xef, 0xe0, 0xdb, 0x28,
+			0xf4, 0x5d, 0x12, 0xe0, 0x85, 0x4a, 0x3c, 0x5b,
+			0x2f, 0xd8, 0x9c, 0x9a, 0xcf, 0x6f, 0x01, 0xe7,
+			0x1b, 0x2e, 0x41, 0x5d, 0x5d, 0xdd, 0xdd, 0xb6,
+			0x6d, 0xb3, 0x7d, 0xbc, 0x33, 0x50, 0xc5, 0xaf,
+			0x1b, 0xee, 0x33, 0xc4, 0x42, 0x46, 0xca, 0xe2,
+			0x00, 0xe9, 0xc9, 0xec, 0x9e, 0x9b, 0x67, 0xba,
+			0x39, 0x3c, 0xc5, 0xa1, 0x7d, 0xac, 0x9e, 0xbe,
+			0x67, 0x92, 0x20, 0x5b, 0x36, 0x85, 0xde, 0xdd,
+			0xd3, 0xec, 0x4e, 0x82, 0x03, 0x4a, 0x44, 0x6e,
+			0xee, 0x9c, 0xd0, 0x13, 0x9e, 0x98, 0x6f, 0x77,
+			0xd8, 0xfe, 0xb7, 0x54, 0x01, 0x15, 0xcd, 0xd3,
+			0x31, 0xf5, 0xd7, 0x74, 0x2d, 0x4d, 0x4f, 0x18,
+			0xd2, 0x8f, 0x80, 0xb6, 0x46, 0x80, 0xa7, 0xa8,
+			0x8c, 0xf2, 0x64, 0x4f, 0x40, 0x8a, 0x64, 0x96,
+			0x2c, 0x1e, 0xd2, 0x3c, 0xe9, 0x50, 0xc4, 0x86,
+			0xd9, 0x19, 0x93, 0x7a, 0xba, 0x95, 0x35, 0x35,
+			0xe3, 0x4d, 0x83, 0xda, 0x15, 0x09, 0x87, 0xb8,
+			0x1a, 0x54, 0x6f, 0x61, 0xdd, 0x55, 0x01, 0xe1,
+			0x39, 0x1c, 0xb2, 0xac, 0x8c, 0x15, 0x82, 0x7c,
+			0xa6, 0x69, 0x54, 0x64, 0x2f, 0x5c, 0x0c, 0x79,
+			0xaf, 0x85, 0x71, 0x2d, 0xff, 0xc0, 0xf2, 0x40,
+			0xbb, 0x05, 0x31, 0x31, 0x00, 0x8d, 0x0c, 0x40,
+			0x11, 0x88, 0xf2, 0x91, 0x9f, 0x7a, 0x8e, 0x99,
+			0x82, 0x72, 0xd8, 0x45, 0x08, 0x83, 0x5c, 0x2b,
+			0x73, 0x46, 0xd6, 0x54, 0x9a, 0x3d, 0x42, 0x48,
+			0x67, 0x19, 0x2b, 0x19, 0xae, 0x0c, 0x16, 0x08,
+			0xa4, 0xec, 0x7e, 0x15, 0xad, 0x4f, 0xa9, 0xbd,
+			0x4f, 0x09, 0xf0, 0xc2, 0x9f, 0xb5, 0xb7, 0xff,
+			0x96, 0xf9, 0xf9, 0xc6, 0x5d, 0x57, 0x07, 0xe8,
+			0xf2, 0x7c, 0x95, 0xa0, 0x8a, 0x15, 0x8b, 0x34,
+			0x84, 0xb5, 0x28, 0x7a, 0xf5, 0x04, 0xb8, 0xcb,
+			0x5e, 0x77, 0x4d, 0xdd, 0x14, 0x8d, 0xa6, 0xe2,
+			0x45, 0x44, 0xfd, 0xd0, 0x9c, 0x41, 0x10, 0xfc,
+			0xe5, 0xdd, 0x2c, 0xda, 0x6b, 0xfe, 0xf9, 0xff,
+			0x65, 0xe7, 0x66, 0x40, 0x69, 0x0c, 0x09, 0x99,
+			0xaf, 0x02, 0xd0, 0x85, 0x55, 0xcc, 0x0d, 0x59,
+			0xaa, 0xb6, 0x37, 0x9b, 0x58, 0xfa, 0xb5, 0xc5,
+			0xcd, 0xd5, 0x1c, 0xf9, 0x9f, 0x31, 0x4c, 0x8a,
+			0x78, 0xca, 0x1e, 0x22, 0xdc, 0x33, 0x64, 0xce,
+			0x56, 0x6d, 0x57, 0xe9, 0xbd, 0xe0, 0xdd, 0x23,
+			0x22, 0x9c, 0x70, 0x5a, 0xe7, 0x46, 0x08, 0xc5,
+			0xa6, 0x85, 0x34, 0x5f, 0x9c, 0x96, 0xbb, 0xbe,
+			0xb4, 0x2f, 0xbb, 0x47, 0xdc, 0x38, 0xad, 0xb7,
+			0x92, 0x08, 0x0d, 0x93, 0xf4, 0x7f, 0xe6, 0x64,
+			0xa5, 0xb3, 0x9e, 0xdd, 0xdb, 0x99, 0x8e, 0xca,
+			0x82, 0x4f, 0x77, 0xf7, 0xff, 0x92, 0xd3, 0x48,
+			0xe0, 0x80, 0x71, 0x14, 0x61, 0x6b, 0x77, 0x1b,
+			0x58, 0xbd, 0xb6, 0xb6, 0xe5, 0xb0, 0xa8, 0x16,
+			0xe7, 0x4c, 0xc2, 0x5e, 0x40, 0xbc, 0x9f, 0x77,
+			0x76, 0x98, 0xf7, 0x00, 0xd1, 0xdf, 0x3c, 0x2e,
+			0x16, 0x4f, 0xe7, 0x91, 0xec, 0xeb, 0xfb, 0xa1,
+			0x9f, 0x66, 0x6d, 0xef, 0xaf, 0x36, 0xd8, 0xb6,
+			0x40, 0x7e, 0x2f, 0x51, 0x3b, 0x75, 0x56, 0x1d,
+			0x33, 0xee, 0x4b, 0xcf, 0x98, 0xb3, 0x9f, 0x4f,
+			0xff, 0xfd, 0x2a, 0xb9, 0x4e, 0x4b, 0xe0, 0x39,
+			0x60, 0xd5, 0x7c, 0xaa, 0x28, 0x7e, 0x7e, 0x27,
+			0xd8, 0x09, 0x85, 0x6d, 0xfa, 0x57, 0x8a, 0xee,
+			0x84, 0xbe, 0x48, 0xf9, 0x62, 0x78, 0x8a, 0x4d,
+			0x2a, 0x80, 0x2f, 0x6f, 0xc9, 0xa7, 0xb5, 0x56,
+			0xbb, 0x58, 0xc2, 0xb9, 0xd0, 0xfe, 0x8d, 0x68,
+			0x86, 0x2b, 0x7b, 0xf0, 0x01, 0x57, 0xff, 0xaf,
+			0x88, 0xad, 0x53, 0xf9, 0x63, 0xfe, 0xf4, 0x5a,
+			0x97, 0xb7, 0x8f, 0x92, 0x0f, 0x90, 0x63, 0xcf,
+			0xfe, 0x08, 0xbc, 0x8c, 0x5a, 0x9c, 0xac, 0x8b,
+			0x0a, 0x94, 0x17, 0x25, 0xae, 0x87, 0xa7, 0x1d,
+			0x3f, 0x28, 0xfe, 0x45, 0x3e, 0x48, 0xef, 0x19,
+			0x4a, 0xbe, 0xc6, 0xd5, 0x64, 0xe1, 0xf2, 0xf5,
+			0xd2, 0x3a, 0x03, 0xe0, 0x50, 0x31, 0x7e, 0xdf,
+			0xd5, 0x15, 0xc6, 0xb6, 0xb2, 0x1e, 0x44, 0x6a,
+			0x0f, 0x67, 0xf2, 0x34, 0x69, 0xb9, 0xd2, 0x51,
+			0xeb, 0x86, 0xab, 0x7e, 0x60, 0x68, 0xe4, 0xc2,
+			0x4b, 0x8b, 0xa2, 0xc6, 0x78, 0xb2, 0x61, 0xa1,
+			0xe5, 0xb6, 0x33, 0x47, 0x3f, 0xfa, 0xde, 0x5b,
+			0x6b, 0x95, 0x89, 0x51, 0xbb, 0xd3, 0x8a, 0x00,
+			0x1d, 0xad, 0xfc, 0x7a, 0x47, 0xc8, 0xa0, 0x69,
+			0xa6, 0xa3, 0x3f, 0xa9, 0xdb, 0xd8, 0xe4, 0x0d,
+			0x2c, 0xba, 0x26, 0x2c, 0xa6, 0x82, 0x62, 0x5a,
+			0x1e, 0x9f, 0xa8, 0x24, 0x9d, 0xe5, 0xc7, 0xcf,
+			0x6d, 0x2f, 0x68, 0xe1, 0xc0, 0x04, 0xad, 0xde,
+			0x00, 0x5b, 0x57, 0x35, 0x2b, 0x9a, 0x9b, 0xe5,
+			0x90, 0x31, 0x8a, 0x5b, 0xea, 0xe5, 0xf6, 0x73,
+			0x02, 0xc1, 0x33, 0xaf, 0xe7, 0x61, 0x6c, 0x04,
+			0x8c, 0x08, 0xb2, 0xfb, 0xa2, 0x18, 0x51, 0x39,
+			0x1a, 0x61, 0x2c, 0x8c, 0x7d, 0x11, 0xb8, 0x2e,
+			0x38, 0xb7, 0xe0, 0xde, 0x5e, 0x6f, 0xc5, 0xf4,
+			0x31, 0x72, 0xcb, 0xd6, 0xec, 0xbc, 0xe9, 0x36,
+			0x2e, 0x2b, 0x63, 0xea, 0xa1, 0xab, 0xf8, 0x11,
+			0xe7, 0x31, 0xad, 0xe4, 0xcb, 0x23, 0xe4, 0x64,
+			0x54, 0x50, 0x4f, 0x15, 0x8b, 0x58, 0xa4, 0xa1,
+			0x35, 0xea, 0x73, 0x3e, 0xc3, 0x3e, 0x31, 0x81,
+			0x80, 0x53, 0x6a, 0x2c, 0xfe, 0xd7, 0xd8, 0x8f,
+			0xe7, 0x50, 0x2d, 0x99, 0x69, 0x32, 0xfa, 0x4e,
+			0xb4, 0xf9, 0x89, 0x18, 0xbe, 0x5a, 0x95, 0x7a,
+			0x0f, 0x34, 0xc5, 0xd9, 0x28, 0xff, 0x93, 0x3a,
+			0x13, 0x22, 0xe6, 0xdb, 0x5c, 0xfe, 0x51, 0x05,
+			0xaf, 0xa3, 0xcd, 0x17, 0x01, 0xd1, 0x84, 0x76,
+			0x23, 0xff, 0x91, 0xc4, 0x6b, 0xc7, 0xa8, 0x77,
+			0xe0, 0xda, 0x45, 0xef, 0xd7, 0x13, 0xe3, 0x02,
+			0x7c, 0x74, 0x7e, 0x66, 0xbb, 0x9f, 0x48, 0x35,
+			0x56, 0xa8, 0x08, 0x41, 0xf7, 0xa7, 0xe3, 0x60,
+			0xa6, 0xce, 0x73, 0xdf, 0x73, 0x99, 0xc6, 0xbd,
+			0x7b, 0xb4, 0xde, 0x31, 0xe6, 0x35, 0xaf, 0x3e,
+			0x93, 0xd2, 0x69, 0xb5, 0xb9, 0xbe, 0x9f, 0xf4,
+			0x0d, 0xd8, 0x82, 0xc1, 0x4f, 0xf6, 0xf3, 0x23,
+			0x1c, 0xe7, 0xff, 0xac, 0xb2, 0x79, 0xe3, 0x62,
+			0x6a, 0xb7, 0x85, 0x08, 0xda, 0x4a, 0x3f, 0x22,
+			0x62, 0x2b, 0xcd, 0xb7, 0x59, 0xf5, 0x82, 0xef,
+			0x08, 0x7f, 0xb5, 0xa0, 0x6c, 0xba, 0x61, 0x45,
+			0x8f, 0xf4, 0xa2, 0x66, 0x83, 0x72, 0x65, 0x34,
+			0x34, 0x68, 0x99, 0xf5, 0x99, 0xc9, 0x52, 0x6a,
+			0xc2, 0x7f, 0xde, 0x25, 0xa3, 0x7b, 0xce, 0xa3,
+			0xde, 0x6d, 0x62, 0x98, 0x84, 0xe4, 0x2a, 0xe1,
+			0x1c, 0xa9, 0x0b, 0x7e, 0x45, 0xd3, 0x78, 0x40,
+			0x85, 0x61, 0x9d, 0xce, 0xcd, 0xfd, 0x7b, 0x66,
+			0x92, 0x5f, 0xb9, 0x37, 0x04, 0xea, 0xec, 0x37,
+			0x32, 0xbe, 0xcd, 0x3e, 0x5e, 0x37, 0xcd, 0xe3,
+			0x81, 0x92, 0x69, 0xdf, 0xa1, 0xb9, 0x8c, 0x44,
+			0x43, 0xae, 0xcd, 0xe5, 0xd5, 0x4e, 0xb9, 0x2f,
+			0x1e, 0xbc, 0xf2, 0xd1, 0x88, 0x93, 0xde, 0x6a,
+			0x8a, 0x43, 0xa1, 0x6b, 0xdc, 0x5b, 0xd2, 0xdd,
+			0xe8, 0xca, 0x0a, 0x95, 0x45, 0x9f, 0xd8, 0x8c,
+			0xfd, 0xe0, 0xc3, 0xbd, 0x0e, 0xa0, 0xbd, 0x72,
+			0xa7, 0x77, 0x9a, 0x79, 0xd9, 0x15, 0xad, 0x50,
+			0x13, 0xa7, 0x41, 0xc7, 0xd1, 0xec, 0x2f, 0x45,
+			0x14, 0x02, 0xb7, 0x8e, 0x51, 0x76, 0xd4, 0x2f,
+			0x1c, 0xea, 0x9c, 0x6d, 0x35, 0x1c, 0xa7, 0xeb,
+			0xd7, 0x79, 0xe4, 0x35, 0xbc, 0x02, 0xa6, 0xd0,
+			0x58, 0xcb, 0xdf, 0xea, 0x90, 0x16, 0x53, 0x3c,
+			0xc5, 0xda, 0x36, 0x4f, 0x61, 0x4a, 0x1b, 0xfa,
+			0x15, 0x52, 0x0d, 0x3d, 0x73, 0xc5, 0xfe, 0x2a,
+			0xa2, 0x4a, 0x6e, 0x95, 0x99, 0xfc, 0xbf, 0xb2,
+			0xfc, 0x22, 0xbe, 0x45, 0x10, 0x5a, 0xc5, 0x38,
+			0xa0, 0xc1, 0xba, 0x46, 0x6d, 0x8e, 0xbe, 0x0b,
+			0x5f, 0xf6, 0x6f, 0xbb, 0x4d, 0x22, 0xf5, 0x95,
+			0x4d, 0x12, 0xc2, 0x6f, 0x8d, 0xde, 0x86, 0xaf,
+			0x3f, 0x08, 0x24, 0x56, 0xa3, 0xcd, 0xfc, 0xeb,
+			0xa1, 0x3c, 0x22, 0x66, 0x45, 0x03, 0x8b, 0x04,
+			0x12, 0x80, 0x34, 0xf9, 0xf4, 0x64, 0xbf, 0xb9,
+			0x3d, 0xd7, 0x34, 0xe4, 0xc8, 0x8e, 0x86, 0xc9,
+			0x73, 0x21, 0x7f, 0x30, 0x01, 0xc8, 0xd2, 0x91,
+			0x8d, 0xc4, 0xca, 0xd5, 0x59, 0xac, 0xd7, 0xb4,
+			0xfb, 0x98, 0xfb, 0xc4, 0x48, 0x82, 0x93, 0xc6,
+			0x58, 0x8b, 0x0c, 0xdf, 0x3f, 0x07, 0x5a, 0x94,
+			0x89, 0xc6, 0xbe, 0x1a, 0x19, 0x63, 0x8b, 0xa8,
+			0x0c, 0x20, 0xae, 0x9a, 0x1b, 0xd3, 0x45, 0xa0,
+			0xd9, 0x8c, 0xbb, 0x67, 0xa0, 0x54, 0x86, 0x9b,
+			0x7b, 0xa8, 0x16, 0x6f, 0xa4, 0x59, 0x45, 0x1e,
+			0x34, 0xb5, 0xa7, 0x1b, 0x3f, 0xda, 0xc6, 0x80,
+			0x19, 0xdc, 0xc2, 0xee, 0xeb, 0xd9, 0x96, 0xdc,
+			0x4f, 0xec, 0x02, 0xde, 0x34, 0x43, 0x5a, 0x37,
+			0xc8, 0xdf, 0x3b, 0x53, 0x82, 0xfa, 0xf8, 0x8a,
+			0x32, 0x97, 0x1e, 0xf6, 0x0e, 0x7d, 0x39, 0xe0,
+			0xdb, 0x0b, 0x22, 0xa4, 0xd0, 0x56, 0x13, 0xbc,
+			0xe9, 0x38, 0x92, 0x76, 0xff, 0x2b, 0xc2, 0xa0,
+			0x98, 0x7d, 0x8c, 0x58, 0x8e, 0x7f, 0x6d, 0x80,
+			0x06, 0xff, 0xc7, 0xb3, 0xb7, 0x1b, 0xac, 0xc4,
+			0x68, 0x61, 0x11, 0x15, 0xb7, 0xee, 0x8d, 0x66,
+			0x34, 0x9f, 0x18, 0x03, 0x88, 0xd1, 0x04, 0xd0,
+			0x86, 0xc0, 0xca, 0x2a, 0xe1, 0x1b, 0x47, 0x18,
+			0xc9, 0x97, 0xed, 0x1f, 0x99, 0xc6, 0xa9, 0x20,
+			0x3f, 0xf6, 0x43, 0x96, 0x30, 0x8b, 0xa5, 0xcb,
+			0x2e, 0xc5, 0xdb, 0x26, 0xc0, 0xf6, 0x48, 0x07,
+			0x3a, 0x28, 0x3e, 0x35, 0x38, 0x50, 0x80, 0xdf,
+			0x80, 0xfa, 0x12, 0x92, 0x83, 0x55, 0xde, 0x31,
+			},
+		.msg_len = 64,
+		.msg = (const u8[64]){
+			0x48, 0x11, 0x92, 0xb3, 0xaa, 0x7e, 0xb3, 0x14,
+			0xdc, 0x46, 0xd6, 0xbf, 0x26, 0xb2, 0x66, 0xc5,
+			0xd8, 0xc4, 0x69, 0x9f, 0x67, 0x50, 0x67, 0xc0,
+			0x3b, 0x8d, 0xc5, 0xb5, 0x68, 0x59, 0x6f, 0x9c,
+			0xd4, 0xf2, 0x49, 0xfb, 0xa4, 0xd0, 0xbf, 0xc5,
+			0x3c, 0xee, 0x3b, 0x03, 0x25, 0x6c, 0x51, 0x94,
+			0xb3, 0xd4, 0xdb, 0x2a, 0xbd, 0x26, 0xef, 0x58,
+			0xb3, 0x91, 0x62, 0x81, 0x1b, 0x29, 0x9c, 0x12,
+			},
+		.sig_len = DILITHIUM87_CRYPTO_BYTES,
+		.sig = (const u8[DILITHIUM87_CRYPTO_BYTES]){
+			0xba, 0x08, 0xf3, 0x0c, 0xa1, 0x48, 0xad, 0x67,
+			0x12, 0x68, 0x51, 0x9b, 0xa4, 0x21, 0x66, 0x8d,
+			0xea, 0x0a, 0x71, 0x4f, 0x4c, 0xab, 0x1b, 0x42,
+			0x84, 0xb7, 0x9c, 0x78, 0xa9, 0x18, 0xd9, 0xe8,
+			0x08, 0x8f, 0xee, 0xf7, 0x4b, 0xcf, 0x0e, 0xcd,
+			0xf6, 0x36, 0xcf, 0xd5, 0xa1, 0x5e, 0x59, 0xc6,
+			0x8c, 0x6c, 0x4d, 0xfe, 0xfa, 0xfa, 0xbc, 0x52,
+			0x3a, 0x35, 0xba, 0xd9, 0xe1, 0xf2, 0x26, 0x73,
+			0xbd, 0x64, 0x93, 0xe7, 0x83, 0x76, 0xc4, 0xf8,
+			0x4b, 0xa9, 0x91, 0x8c, 0xd2, 0xf5, 0x08, 0xe6,
+			0x58, 0xcd, 0xfb, 0x90, 0xc1, 0x84, 0x72, 0x77,
+			0x72, 0x47, 0x5f, 0xcb, 0x7f, 0x74, 0x85, 0x56,
+			0xba, 0x73, 0x86, 0xc1, 0x32, 0x1c, 0xaf, 0xc5,
+			0x60, 0x2c, 0x91, 0x99, 0x09, 0x03, 0xcb, 0xe6,
+			0xa4, 0xae, 0x0b, 0xdc, 0x15, 0x70, 0x4c, 0x91,
+			0xa9, 0x9e, 0x5e, 0x63, 0x5c, 0x24, 0xc9, 0x26,
+			0x39, 0x56, 0xe4, 0x6c, 0x2c, 0x65, 0xf8, 0x0b,
+			0x4f, 0x56, 0x8f, 0x1e, 0x74, 0xda, 0x31, 0xad,
+			0x8f, 0x1b, 0xa7, 0xb1, 0xb3, 0x9b, 0x48, 0x09,
+			0x08, 0xdd, 0xe1, 0x25, 0x20, 0xa4, 0xc7, 0x12,
+			0xd4, 0xb0, 0xa0, 0xcb, 0x90, 0xf5, 0x9f, 0xc1,
+			0x8b, 0xbc, 0x9d, 0xcf, 0x78, 0xfc, 0xa1, 0x04,
+			0x4b, 0x0b, 0x7e, 0x82, 0x94, 0x80, 0x0e, 0x70,
+			0x77, 0xce, 0x63, 0x1c, 0x43, 0x41, 0x3f, 0x5d,
+			0x61, 0x1a, 0x44, 0xaa, 0xd0, 0xb7, 0x18, 0xd8,
+			0x91, 0x83, 0xa4, 0xa7, 0xa1, 0x86, 0x13, 0x54,
+			0xaf, 0xa8, 0xdb, 0x1a, 0xd7, 0xa9, 0x54, 0xca,
+			0x67, 0xb5, 0xb6, 0xb4, 0x22, 0x1a, 0x24, 0x8e,
+			0x65, 0x01, 0xa8, 0xd2, 0x15, 0x9d, 0x98, 0x59,
+			0x70, 0x94, 0xb4, 0x96, 0xeb, 0xf2, 0x95, 0x41,
+			0x9a, 0x89, 0x02, 0xb7, 0x6a, 0x20, 0x2a, 0x64,
+			0xf1, 0x1c, 0x1e, 0x3d, 0xd8, 0xdb, 0x6d, 0xef,
+			0xf2, 0x1a, 0x24, 0xa4, 0xd0, 0xb9, 0x98, 0xd3,
+			0xe5, 0xbd, 0x7a, 0xa3, 0xc3, 0x19, 0x97, 0x54,
+			0x77, 0x97, 0xb5, 0x57, 0x93, 0x71, 0x24, 0x91,
+			0x81, 0xcf, 0x5f, 0x38, 0xb9, 0xd5, 0x7e, 0x8b,
+			0x0f, 0xea, 0x56, 0x49, 0xac, 0x25, 0xc4, 0x6c,
+			0x5e, 0x4e, 0x08, 0x31, 0xc8, 0xdf, 0x0b, 0x19,
+			0xb9, 0xbc, 0xec, 0x3b, 0x89, 0xf8, 0x98, 0xe3,
+			0x6c, 0xf6, 0x0f, 0x5b, 0x7e, 0x03, 0x10, 0x68,
+			0x78, 0x2c, 0xfa, 0x39, 0x5c, 0x64, 0x5b, 0xa1,
+			0xfc, 0x8d, 0x14, 0x87, 0x62, 0x04, 0x57, 0xc0,
+			0x5b, 0x6f, 0x6e, 0x3c, 0xea, 0xe6, 0x23, 0xde,
+			0x9b, 0x1d, 0x89, 0x69, 0x38, 0xfb, 0x10, 0xab,
+			0xb9, 0xda, 0xee, 0xa8, 0x8d, 0x96, 0xc0, 0xa5,
+			0x40, 0xce, 0x16, 0x1e, 0xf5, 0xf4, 0x74, 0x6f,
+			0x0e, 0x38, 0xe5, 0x1d, 0xe6, 0x6c, 0x19, 0xa5,
+			0x71, 0x48, 0xda, 0x3e, 0xe9, 0x10, 0x57, 0x16,
+			0x89, 0xd3, 0x5b, 0x4a, 0x5b, 0xa9, 0xb1, 0x13,
+			0xad, 0x77, 0xaf, 0x1f, 0x8b, 0x71, 0x3f, 0xff,
+			0x7c, 0xc4, 0x31, 0xb2, 0xa7, 0x18, 0x2f, 0x4b,
+			0x99, 0xe2, 0x14, 0xbf, 0x1e, 0x69, 0x8f, 0x56,
+			0xe2, 0x2c, 0x84, 0x34, 0xd6, 0x76, 0x27, 0x06,
+			0x7f, 0x2e, 0x9d, 0xbe, 0x90, 0x95, 0xda, 0x5a,
+			0xfb, 0xaa, 0x8a, 0x51, 0x3d, 0x97, 0xb8, 0x75,
+			0xe9, 0xba, 0x2a, 0x03, 0x7e, 0xb0, 0xe3, 0xdc,
+			0xe3, 0x3b, 0x2a, 0xd8, 0x77, 0xa5, 0xf3, 0x76,
+			0x69, 0xf1, 0xd2, 0xd5, 0xb3, 0xba, 0xfa, 0x97,
+			0x55, 0x5f, 0xd1, 0xc3, 0x10, 0x55, 0x9a, 0xb6,
+			0xce, 0x32, 0x80, 0x7f, 0x48, 0xb7, 0x15, 0x85,
+			0x3f, 0x22, 0x58, 0x00, 0x51, 0x12, 0x5c, 0xcc,
+			0xd0, 0x77, 0x26, 0x57, 0x4b, 0xbb, 0x67, 0x21,
+			0x0d, 0x92, 0x80, 0xe0, 0xec, 0x2f, 0x58, 0x44,
+			0x8b, 0x98, 0x70, 0x16, 0x13, 0x91, 0x38, 0xee,
+			0x9e, 0x4f, 0xf2, 0x6f, 0x95, 0x49, 0xe8, 0xcc,
+			0xc5, 0x6d, 0x20, 0x20, 0x4d, 0x1b, 0x08, 0xf4,
+			0xa5, 0x8b, 0xf3, 0xf6, 0x89, 0x2c, 0x17, 0xa6,
+			0xa8, 0xa8, 0xfb, 0xab, 0x6f, 0xa0, 0xe3, 0xcd,
+			0xc5, 0xfb, 0xac, 0x91, 0x42, 0x8c, 0xf2, 0x28,
+			0xd1, 0x13, 0xdb, 0x63, 0x59, 0x69, 0xab, 0x16,
+			0x5a, 0xaf, 0x0a, 0xfa, 0x43, 0x6d, 0x53, 0x7f,
+			0x14, 0x88, 0xc8, 0xa1, 0x71, 0x45, 0x54, 0x30,
+			0xa7, 0x91, 0x55, 0x44, 0x07, 0x03, 0x78, 0xf3,
+			0xf6, 0x23, 0xc0, 0x21, 0x4b, 0x39, 0xc4, 0x9a,
+			0x5a, 0xe8, 0xad, 0x28, 0x6b, 0xd2, 0xd7, 0xc9,
+			0xed, 0xf4, 0x30, 0xff, 0xf8, 0xc4, 0x7a, 0xfe,
+			0x49, 0x1c, 0x28, 0xbb, 0x89, 0xfa, 0x9d, 0x64,
+			0xcc, 0x37, 0x76, 0x6a, 0xf3, 0x8b, 0x94, 0x60,
+			0xe0, 0xb2, 0x29, 0xf8, 0x5a, 0xc6, 0x3e, 0xcc,
+			0x6f, 0x13, 0x85, 0x7c, 0xaa, 0xc4, 0x35, 0x56,
+			0x9a, 0xb6, 0x96, 0x76, 0x41, 0xe2, 0x11, 0xbe,
+			0x07, 0xba, 0x0c, 0x21, 0x32, 0xc3, 0xb3, 0xf3,
+			0x96, 0x49, 0xa2, 0xc4, 0x49, 0x48, 0xfe, 0x17,
+			0xef, 0xdf, 0x1e, 0xf3, 0xde, 0x5f, 0xa0, 0x49,
+			0xfc, 0xa5, 0xb5, 0xf3, 0x4c, 0x99, 0x5f, 0xcb,
+			0x33, 0xc6, 0x54, 0x52, 0xa0, 0x85, 0x16, 0x75,
+			0x2c, 0x5f, 0x87, 0x61, 0x58, 0xc9, 0x23, 0x0a,
+			0x36, 0x66, 0x3b, 0x78, 0x65, 0xcc, 0xd4, 0x8e,
+			0xe1, 0x27, 0x9a, 0x74, 0x37, 0x79, 0x4c, 0x5c,
+			0x35, 0xf9, 0xa5, 0x7f, 0x79, 0x35, 0xa8, 0x7d,
+			0xcf, 0x64, 0xa3, 0x44, 0xb9, 0xee, 0x1e, 0x07,
+			0x5c, 0xda, 0xcd, 0x93, 0xfc, 0x33, 0x77, 0x68,
+			0xfc, 0xd6, 0xea, 0xf4, 0xcd, 0x0a, 0x3a, 0xe3,
+			0xb3, 0xef, 0xf9, 0xb5, 0x1a, 0x4b, 0x50, 0x2e,
+			0xcb, 0x88, 0x48, 0x60, 0xc3, 0x5c, 0x1b, 0xb7,
+			0xcc, 0x7a, 0x49, 0x2e, 0xf0, 0x9e, 0x96, 0x47,
+			0x7d, 0x82, 0x85, 0xcb, 0x37, 0x85, 0x26, 0xfd,
+			0xe1, 0x13, 0x57, 0xad, 0x51, 0xdc, 0x02, 0x8d,
+			0x3c, 0x4e, 0xdd, 0xf3, 0xdf, 0xbe, 0xab, 0x0d,
+			0x99, 0xf8, 0x13, 0x37, 0x0b, 0x1b, 0xaf, 0x08,
+			0x9b, 0x38, 0x5b, 0x3a, 0x91, 0x71, 0x9a, 0xe6,
+			0xc1, 0x7d, 0xd4, 0xd8, 0xf2, 0x66, 0x57, 0x99,
+			0x29, 0x58, 0xb5, 0x9d, 0x8f, 0x86, 0x7f, 0xe9,
+			0x17, 0xff, 0x3c, 0xfd, 0x0a, 0xfd, 0x15, 0x5c,
+			0x2f, 0x77, 0x6c, 0x2b, 0x86, 0x72, 0xcb, 0x00,
+			0x4d, 0x31, 0x98, 0xfe, 0x28, 0xc5, 0x54, 0x36,
+			0x97, 0x8c, 0xc9, 0x31, 0xae, 0xff, 0xfc, 0xa6,
+			0x15, 0xf9, 0x9d, 0x49, 0x83, 0x47, 0xb4, 0xe5,
+			0x8c, 0x55, 0x2f, 0x35, 0x6d, 0x7c, 0x47, 0xb9,
+			0xeb, 0x0a, 0x64, 0xea, 0x22, 0xae, 0xe3, 0x6b,
+			0xae, 0x0e, 0xf8, 0xc4, 0x64, 0x18, 0x56, 0xa7,
+			0x78, 0x92, 0x20, 0xe0, 0x03, 0x93, 0x42, 0x1f,
+			0x1a, 0x48, 0xa1, 0x11, 0xdd, 0x83, 0x99, 0x67,
+			0xc5, 0xf2, 0x0a, 0x9e, 0xfa, 0xab, 0x68, 0x54,
+			0x1d, 0xa7, 0xe8, 0x44, 0x5f, 0x46, 0x23, 0xea,
+			0xdd, 0xb2, 0xf5, 0x83, 0x76, 0x84, 0x13, 0xd6,
+			0xe4, 0xb2, 0x59, 0x92, 0x92, 0xf4, 0xb5, 0x56,
+			0xd7, 0x29, 0xc7, 0x05, 0x00, 0x79, 0x17, 0x59,
+			0x20, 0xc6, 0x6a, 0xdc, 0x45, 0x93, 0xe7, 0xfc,
+			0x29, 0x37, 0xa7, 0x7e, 0xbc, 0x21, 0xe7, 0xe1,
+			0xff, 0x18, 0x54, 0xf9, 0xd3, 0x0c, 0x78, 0xe1,
+			0xc9, 0x40, 0x36, 0x36, 0x68, 0x46, 0x3c, 0x9a,
+			0x4d, 0xa6, 0xbc, 0xc3, 0xc7, 0xc9, 0x8c, 0x7e,
+			0xc6, 0x07, 0x2a, 0xd0, 0x4d, 0x45, 0x3d, 0x65,
+			0xef, 0x56, 0x7f, 0xf1, 0xcd, 0x6d, 0x97, 0x0c,
+			0x11, 0x66, 0xf4, 0x27, 0xfc, 0xe3, 0xf3, 0x93,
+			0x0d, 0xa1, 0x5a, 0x95, 0x86, 0xcc, 0x0f, 0xf4,
+			0x97, 0xbc, 0x7c, 0x62, 0x78, 0xe5, 0x01, 0xe0,
+			0xc7, 0x0c, 0xe7, 0xa9, 0x84, 0xa6, 0x17, 0xaa,
+			0x36, 0x06, 0x2a, 0x0f, 0x2f, 0x7e, 0x3d, 0xe8,
+			0x70, 0x8d, 0x36, 0x73, 0x9a, 0x7f, 0x47, 0x95,
+			0xc5, 0x5d, 0xc5, 0xfa, 0x9c, 0x64, 0x52, 0xcb,
+			0x52, 0x74, 0xda, 0xb0, 0x1f, 0x82, 0x01, 0x43,
+			0x98, 0xa6, 0xe7, 0xf2, 0x89, 0x51, 0x92, 0xf8,
+			0x37, 0x82, 0x8e, 0x91, 0x58, 0x40, 0x2c, 0xac,
+			0xcf, 0xde, 0x92, 0x63, 0x5a, 0x64, 0xf9, 0x9c,
+			0xa4, 0x47, 0x6d, 0x13, 0x43, 0xd3, 0xa6, 0x89,
+			0xbb, 0x7b, 0x32, 0x45, 0x2d, 0x0e, 0x52, 0x25,
+			0x67, 0xda, 0x1d, 0x9e, 0x42, 0x38, 0xfc, 0x92,
+			0x84, 0x4d, 0x13, 0x53, 0xef, 0x46, 0x81, 0xdd,
+			0xf6, 0x79, 0x9f, 0xba, 0x45, 0x49, 0x4b, 0x93,
+			0x4a, 0x54, 0x1c, 0x72, 0xa0, 0xfd, 0xa1, 0x13,
+			0x1c, 0x5e, 0xa5, 0x4e, 0xd5, 0xdf, 0xd1, 0x6a,
+			0x40, 0x1d, 0x5e, 0x57, 0xf8, 0xe3, 0x3a, 0xe8,
+			0x35, 0xf4, 0x67, 0xa2, 0x37, 0xf2, 0xe0, 0xd1,
+			0xfe, 0x08, 0x5e, 0x5c, 0x41, 0x17, 0x87, 0x24,
+			0xae, 0xf3, 0xe2, 0xc8, 0xb4, 0xfc, 0x3b, 0xef,
+			0xdb, 0x5e, 0x27, 0x93, 0x0f, 0x01, 0xf9, 0x35,
+			0xcf, 0x67, 0x4f, 0x65, 0xde, 0xca, 0xb6, 0xf1,
+			0x12, 0xa0, 0xd7, 0x53, 0x09, 0xec, 0x83, 0x9a,
+			0xb6, 0x8f, 0xf6, 0x03, 0xdf, 0x92, 0xa9, 0xc4,
+			0x85, 0x55, 0x5a, 0x74, 0x66, 0x9e, 0xc0, 0x46,
+			0xc7, 0x50, 0x7b, 0xda, 0x56, 0x4a, 0xf5, 0x38,
+			0x37, 0xd5, 0x82, 0x81, 0xf3, 0x2d, 0x51, 0xa6,
+			0xa3, 0x34, 0xf9, 0x24, 0xed, 0x35, 0x80, 0x72,
+			0xae, 0x3d, 0x8b, 0xf8, 0x66, 0xb2, 0x6c, 0x3f,
+			0x4e, 0x2c, 0xdb, 0x89, 0x76, 0x95, 0x8f, 0x1a,
+			0xbe, 0xfc, 0x6c, 0x37, 0xec, 0xf9, 0x80, 0x32,
+			0xac, 0x94, 0x97, 0x85, 0xe4, 0xa5, 0x19, 0x32,
+			0x46, 0x1f, 0x98, 0x89, 0x4c, 0x85, 0xf1, 0xfc,
+			0xed, 0x01, 0x98, 0x4d, 0x4a, 0xd4, 0xd1, 0x4e,
+			0x82, 0x0b, 0x32, 0x0d, 0x48, 0x34, 0x64, 0x98,
+			0xea, 0x6c, 0xf9, 0x11, 0x25, 0xbc, 0x48, 0xc3,
+			0xf4, 0x96, 0xfc, 0x5e, 0x71, 0x5d, 0xfa, 0xf7,
+			0x9f, 0x75, 0x89, 0x1d, 0xe7, 0x3b, 0x97, 0x39,
+			0x18, 0x90, 0xca, 0xa5, 0x46, 0x01, 0x2a, 0x13,
+			0x54, 0x5c, 0x2a, 0x14, 0xed, 0x1b, 0x65, 0x0a,
+			0xb0, 0xd9, 0x95, 0x01, 0xd0, 0xb3, 0x78, 0xd6,
+			0xc4, 0x06, 0xf3, 0x7f, 0x51, 0xe0, 0x39, 0xed,
+			0x2c, 0xf3, 0xfa, 0xc3, 0xfa, 0x1d, 0x7c, 0x82,
+			0x0f, 0x45, 0xb7, 0x15, 0xcf, 0x99, 0x53, 0x59,
+			0x9d, 0x54, 0x31, 0x6a, 0xf8, 0xb8, 0x73, 0x2d,
+			0xd1, 0xab, 0x1b, 0x69, 0xc9, 0x86, 0xdc, 0x7a,
+			0xca, 0xb9, 0x6a, 0xaf, 0x1e, 0x8f, 0x83, 0xa8,
+			0xf0, 0xae, 0x44, 0x85, 0x0d, 0x1f, 0x6c, 0x3a,
+			0x90, 0x50, 0xef, 0x7c, 0x3c, 0x1c, 0xc4, 0xb8,
+			0x66, 0x1c, 0x14, 0xf7, 0xf2, 0x5f, 0x5c, 0x70,
+			0x28, 0xa7, 0x55, 0x93, 0xdb, 0xa0, 0x95, 0x9c,
+			0x1b, 0xb7, 0xb6, 0x44, 0x5e, 0x98, 0x88, 0x89,
+			0xb8, 0x5a, 0xee, 0xba, 0xfc, 0xc6, 0x87, 0x2a,
+			0xdb, 0xb7, 0xcf, 0xb2, 0x4b, 0x96, 0x2c, 0x91,
+			0x54, 0x34, 0x33, 0xfb, 0x57, 0xbe, 0xf5, 0x7b,
+			0xbe, 0x6b, 0xa0, 0x3b, 0x4d, 0x09, 0x18, 0x9b,
+			0x75, 0x2c, 0xde, 0x28, 0x87, 0xd3, 0x7b, 0xf5,
+			0xbe, 0x0d, 0x33, 0x5a, 0x3b, 0x92, 0x41, 0x35,
+			0x50, 0x65, 0xc9, 0xa9, 0xfa, 0xab, 0x22, 0x4b,
+			0x8c, 0x3a, 0xb1, 0x9e, 0x31, 0x41, 0xd2, 0x2f,
+			0xca, 0x9e, 0xd0, 0x96, 0x0c, 0x03, 0x08, 0xec,
+			0x94, 0xa5, 0xb1, 0x65, 0x2b, 0xe1, 0xe4, 0x48,
+			0x11, 0xd6, 0x8c, 0x60, 0x6d, 0xf4, 0x64, 0x89,
+			0xa6, 0x69, 0x4b, 0xa0, 0xbe, 0xae, 0xf5, 0xde,
+			0xba, 0x45, 0x12, 0xc8, 0x28, 0xe0, 0x7a, 0xb5,
+			0xd4, 0x75, 0x7a, 0x24, 0x59, 0x4f, 0xbf, 0x0a,
+			0xa4, 0x53, 0x9a, 0x59, 0xca, 0x06, 0x51, 0x6d,
+			0xcb, 0x93, 0x63, 0x6e, 0x24, 0xe2, 0x41, 0xa5,
+			0xa9, 0x19, 0xc3, 0x59, 0x9a, 0x0c, 0xb6, 0x4e,
+			0x65, 0x60, 0xa0, 0x49, 0xf0, 0x7f, 0x50, 0x96,
+			0xed, 0xe9, 0xfc, 0x33, 0x5b, 0x52, 0x51, 0x7e,
+			0x77, 0xd7, 0xbb, 0xaf, 0xdd, 0x12, 0x4b, 0xbc,
+			0xc6, 0xae, 0xca, 0x92, 0x3a, 0x9f, 0xc1, 0x0c,
+			0x8f, 0x01, 0xbe, 0x4c, 0x78, 0x23, 0x7c, 0x8b,
+			0x82, 0xb7, 0x45, 0x80, 0x44, 0x34, 0x9d, 0x13,
+			0xdb, 0xc4, 0x3f, 0x1b, 0x39, 0xb0, 0xee, 0xa9,
+			0xac, 0x5e, 0x3d, 0xc3, 0x59, 0x92, 0xcc, 0x6e,
+			0x6c, 0x97, 0xcc, 0xba, 0x15, 0xa6, 0x53, 0x92,
+			0x76, 0x35, 0x01, 0x70, 0x16, 0xde, 0xde, 0x56,
+			0xc3, 0xb3, 0x48, 0x8b, 0x4d, 0xfa, 0xa7, 0xcb,
+			0x43, 0xb5, 0x76, 0x9a, 0x56, 0x03, 0xd6, 0x41,
+			0xbe, 0x73, 0x89, 0x1f, 0x6f, 0x02, 0x3f, 0xcc,
+			0xaf, 0x49, 0xe3, 0x5e, 0xb3, 0xf4, 0xbc, 0x61,
+			0xf9, 0x9e, 0x9e, 0xec, 0x10, 0x98, 0x0d, 0x5a,
+			0x6d, 0xcf, 0xbf, 0xe3, 0xe5, 0xf5, 0x1b, 0x17,
+			0x46, 0x7a, 0x32, 0xc7, 0x18, 0x40, 0x20, 0x8e,
+			0x06, 0x62, 0x2d, 0x1b, 0x90, 0x54, 0x4f, 0x7f,
+			0xe4, 0x50, 0x09, 0xdc, 0x57, 0x22, 0xe9, 0x7c,
+			0x3c, 0x77, 0x57, 0xc2, 0x8b, 0xc9, 0x6a, 0x2b,
+			0x31, 0xa1, 0x7f, 0x14, 0xdf, 0x22, 0x7d, 0xed,
+			0xc9, 0x0d, 0xbb, 0x93, 0xba, 0x72, 0x85, 0x33,
+			0x58, 0x80, 0xc0, 0xf5, 0x75, 0x5d, 0x7e, 0x5f,
+			0xfb, 0x41, 0xbc, 0x5f, 0x62, 0x13, 0xb9, 0x16,
+			0x1e, 0xfe, 0x9e, 0x53, 0x53, 0xce, 0xa0, 0xfc,
+			0x7f, 0xf6, 0x18, 0xc2, 0x0f, 0xb9, 0x7f, 0xbf,
+			0x09, 0xc3, 0x37, 0x08, 0xb0, 0x1f, 0x16, 0x80,
+			0x5e, 0xf6, 0xcb, 0xfe, 0x22, 0x7c, 0x07, 0x99,
+			0xb3, 0x12, 0x69, 0xa4, 0x05, 0xc9, 0x29, 0xc7,
+			0xd0, 0x57, 0x05, 0x33, 0x85, 0x0c, 0xd4, 0xfe,
+			0xfc, 0x54, 0xa8, 0xc9, 0x7b, 0x92, 0x67, 0xa6,
+			0xa7, 0xbf, 0x5f, 0xfc, 0xe9, 0x65, 0x31, 0x4f,
+			0x85, 0x8f, 0x89, 0xbe, 0xa1, 0xdb, 0x6d, 0x96,
+			0x52, 0x09, 0x56, 0x12, 0xc6, 0xb2, 0x28, 0x26,
+			0x07, 0x39, 0x21, 0x39, 0xce, 0x55, 0xf9, 0x82,
+			0x23, 0xc2, 0x3f, 0x3a, 0x66, 0xc4, 0xee, 0x10,
+			0x4b, 0xf1, 0x1e, 0x1d, 0x59, 0xfa, 0x28, 0x20,
+			0x34, 0x26, 0x49, 0x7c, 0xc3, 0x85, 0x2f, 0x80,
+			0xbe, 0x2c, 0xbc, 0x94, 0x81, 0x74, 0x2a, 0x21,
+			0x49, 0x1d, 0xa7, 0xff, 0xf0, 0x21, 0x56, 0x98,
+			0x68, 0x8f, 0x52, 0x2d, 0xa0, 0xf2, 0x84, 0x73,
+			0x2f, 0xe2, 0x90, 0x8c, 0x56, 0xd1, 0xbf, 0x67,
+			0xc3, 0x19, 0x47, 0x14, 0x71, 0x62, 0x25, 0xdc,
+			0x11, 0xbc, 0x24, 0xa0, 0xb2, 0x42, 0x72, 0x37,
+			0x78, 0xe6, 0xe0, 0xf6, 0x8c, 0x66, 0xe5, 0x1b,
+			0x7a, 0x79, 0x46, 0xc0, 0x76, 0xcd, 0xa9, 0x3c,
+			0xb2, 0x17, 0x8c, 0xc9, 0xb1, 0xc4, 0x2a, 0x1f,
+			0xdb, 0xf7, 0xeb, 0x8a, 0x5d, 0x29, 0xd1, 0xd1,
+			0x98, 0x43, 0x9e, 0x22, 0xf3, 0x96, 0x1e, 0x83,
+			0xeb, 0x44, 0x08, 0xc4, 0xa0, 0xd2, 0xd3, 0x36,
+			0xf8, 0x94, 0xab, 0x3c, 0x4b, 0x68, 0xf3, 0x7c,
+			0x1a, 0x16, 0x1a, 0x66, 0x77, 0x67, 0xee, 0x64,
+			0xc2, 0xdb, 0x53, 0xae, 0x1f, 0xeb, 0x44, 0x77,
+			0x3b, 0x5f, 0x74, 0x48, 0xe9, 0x05, 0xfa, 0x3a,
+			0x03, 0x1b, 0x54, 0x36, 0xb0, 0x28, 0x79, 0x70,
+			0xe6, 0x2f, 0xb4, 0xf5, 0x28, 0x60, 0x1e, 0x63,
+			0xf6, 0x03, 0x09, 0x4f, 0x0f, 0x7f, 0x01, 0xe5,
+			0x02, 0x6a, 0x76, 0x96, 0xb9, 0x58, 0x39, 0xf9,
+			0xc4, 0x05, 0xac, 0x93, 0x2f, 0x30, 0xab, 0xc5,
+			0x2b, 0xad, 0xed, 0x3c, 0xb0, 0x6c, 0x66, 0x94,
+			0x7e, 0x79, 0x01, 0x90, 0xf0, 0x10, 0xb5, 0xcd,
+			0x6b, 0x07, 0xc2, 0xe7, 0x8a, 0xac, 0xf7, 0x5b,
+			0xb5, 0x11, 0xf8, 0x1a, 0x52, 0xc7, 0x5d, 0x2c,
+			0xc1, 0xce, 0x8f, 0x0c, 0xc1, 0x6a, 0x95, 0x80,
+			0x25, 0xf9, 0x95, 0x28, 0x18, 0x65, 0xd3, 0x15,
+			0x0e, 0xbf, 0x6f, 0xa6, 0x86, 0xd9, 0xea, 0xdc,
+			0xb8, 0x89, 0x02, 0x08, 0x6b, 0xd1, 0x96, 0xb1,
+			0x6f, 0xb1, 0x28, 0x6b, 0xc4, 0xe3, 0xa8, 0x53,
+			0xd3, 0xd0, 0x67, 0x00, 0x7c, 0xa1, 0x0a, 0xd1,
+			0x9a, 0x89, 0x12, 0xc9, 0xa7, 0x3f, 0x03, 0x03,
+			0xad, 0x0f, 0x34, 0x2c, 0xd8, 0xdf, 0x70, 0xed,
+			0x38, 0xf4, 0xb1, 0xf7, 0xb1, 0x72, 0x5e, 0x2d,
+			0xa6, 0xb7, 0x8d, 0x9c, 0x7f, 0x96, 0x73, 0xc8,
+			0x47, 0x46, 0x20, 0x2f, 0x44, 0x2c, 0x2b, 0xa2,
+			0x30, 0xe4, 0x81, 0x91, 0x7e, 0xce, 0x4c, 0x8b,
+			0xcc, 0x5f, 0xfd, 0xff, 0x2f, 0x94, 0xbd, 0xe5,
+			0xaf, 0x09, 0xcd, 0xb6, 0xbc, 0x65, 0x83, 0xc3,
+			0xcd, 0x79, 0xc4, 0x68, 0xda, 0x46, 0x36, 0x97,
+			0x52, 0x35, 0x90, 0x4f, 0x1d, 0x8d, 0x66, 0x1f,
+			0xea, 0x5d, 0xef, 0xdf, 0x8c, 0xa8, 0x6b, 0xb0,
+			0xdc, 0x1a, 0x1e, 0x79, 0x43, 0xe9, 0x29, 0x71,
+			0x11, 0xbd, 0xe5, 0xd6, 0x71, 0xf4, 0xa7, 0xf8,
+			0x64, 0x40, 0x73, 0x46, 0x5b, 0x2a, 0xb5, 0x9a,
+			0xa1, 0x9a, 0x64, 0x4c, 0x5e, 0xa5, 0x8d, 0xfd,
+			0x49, 0x91, 0xba, 0xe3, 0xa7, 0x19, 0xac, 0x2b,
+			0xe9, 0xea, 0xf1, 0x1c, 0x85, 0x91, 0xea, 0xfb,
+			0xc7, 0x5c, 0x46, 0x7e, 0xa8, 0x0a, 0x92, 0xbf,
+			0x61, 0x2d, 0xc2, 0x20, 0x7e, 0xf7, 0x0d, 0xb8,
+			0x65, 0x41, 0x48, 0x39, 0xb9, 0xb0, 0xd4, 0xc1,
+			0x84, 0xee, 0x21, 0xba, 0x9c, 0x74, 0xf3, 0x6d,
+			0x0a, 0x33, 0x87, 0xab, 0x2e, 0x15, 0x1b, 0xad,
+			0xac, 0x98, 0xae, 0x7c, 0xd8, 0xae, 0x03, 0x50,
+			0xfa, 0xae, 0xfe, 0x8c, 0x6d, 0x51, 0x67, 0x76,
+			0x70, 0xa6, 0x2f, 0x1e, 0x6a, 0x4f, 0xf0, 0xbe,
+			0x51, 0xbb, 0xa6, 0x20, 0x1f, 0x56, 0x72, 0x34,
+			0xd0, 0x13, 0x6e, 0x0f, 0x1a, 0xcb, 0x34, 0xe1,
+			0xfb, 0x3c, 0xf1, 0x43, 0x1b, 0x73, 0x40, 0xa0,
+			0x1f, 0x5d, 0x40, 0x51, 0x9f, 0x97, 0x56, 0x1f,
+			0x26, 0x54, 0x03, 0xb8, 0x2e, 0xfd, 0xc7, 0x52,
+			0xea, 0x85, 0x5d, 0x45, 0x71, 0xa3, 0x5c, 0x86,
+			0x23, 0xcb, 0x08, 0xc5, 0xd8, 0x21, 0xfd, 0x10,
+			0x49, 0xac, 0xaa, 0xd5, 0x97, 0x37, 0xbb, 0xad,
+			0xd5, 0x84, 0xc2, 0x65, 0xeb, 0xdd, 0x92, 0x7c,
+			0x50, 0x64, 0x4f, 0x08, 0x32, 0x56, 0x81, 0x39,
+			0xa4, 0xfc, 0x3f, 0x04, 0xbb, 0xde, 0xe9, 0xcd,
+			0xb6, 0xbb, 0x29, 0x6b, 0x75, 0x64, 0x32, 0x5f,
+			0xca, 0xd0, 0x3a, 0x19, 0x3d, 0x01, 0x8c, 0x0b,
+			0xd5, 0x76, 0xe6, 0x97, 0x5d, 0x73, 0x7b, 0xb3,
+			0xcd, 0xdf, 0xbc, 0x29, 0xda, 0xa5, 0x22, 0xfb,
+			0x1d, 0xf6, 0xf1, 0x50, 0x71, 0x50, 0xd3, 0xf8,
+			0x0a, 0xbf, 0x37, 0x28, 0xca, 0x3b, 0xab, 0xec,
+			0xf5, 0xee, 0x2d, 0x1e, 0x21, 0x35, 0x39, 0x56,
+			0x55, 0x3c, 0x9e, 0x5a, 0x58, 0x94, 0x85, 0xa7,
+			0xba, 0x0d, 0xa4, 0x0b, 0x4c, 0x73, 0xb2, 0x56,
+			0x68, 0x5a, 0x5d, 0x6c, 0x18, 0xce, 0xc5, 0x25,
+			0x14, 0xc9, 0xb3, 0xc9, 0x94, 0x57, 0x62, 0x95,
+			0xd5, 0x1c, 0xf6, 0x93, 0x12, 0x45, 0x28, 0xa1,
+			0x7e, 0x96, 0x53, 0x68, 0xf5, 0x6a, 0xca, 0xbe,
+			0x04, 0x94, 0x97, 0xcf, 0xb5, 0xcf, 0x70, 0xe1,
+			0x7e, 0x15, 0x2d, 0x6a, 0x67, 0x0c, 0x86, 0x07,
+			0xd1, 0xe2, 0x95, 0xc3, 0xd8, 0x22, 0xdf, 0x6a,
+			0x88, 0xc1, 0xad, 0x83, 0x57, 0x30, 0xd0, 0x59,
+			0xaf, 0xf4, 0x9f, 0x8d, 0x89, 0x7d, 0x0b, 0xee,
+			0xb7, 0x1c, 0xaa, 0xd2, 0x4c, 0x7a, 0xa4, 0xfb,
+			0x99, 0xe0, 0x0a, 0xd7, 0x4d, 0xc4, 0xe9, 0x88,
+			0x18, 0x27, 0x1d, 0xb2, 0xe9, 0x43, 0x16, 0x25,
+			0x29, 0x04, 0x98, 0x81, 0xfd, 0xaf, 0xdd, 0x3f,
+			0xf1, 0x61, 0x32, 0x20, 0x51, 0x96, 0xe4, 0xd2,
+			0xab, 0xc4, 0x00, 0x33, 0xb4, 0x7b, 0x3c, 0xc2,
+			0x2d, 0x61, 0x11, 0x4d, 0x72, 0x16, 0x6d, 0xfb,
+			0x24, 0x67, 0x7c, 0xea, 0xf0, 0x79, 0xa3, 0x50,
+			0x93, 0xe3, 0x9b, 0x7f, 0x89, 0xf0, 0xa6, 0x8c,
+			0xb0, 0xaf, 0x1c, 0xe0, 0x91, 0xce, 0x3f, 0xe5,
+			0x43, 0x90, 0x41, 0x95, 0xc7, 0x1f, 0x8f, 0x0a,
+			0xb2, 0x1e, 0x84, 0x3e, 0x86, 0xf0, 0x81, 0x87,
+			0x8b, 0x04, 0x52, 0xa6, 0x46, 0xb0, 0xe4, 0xf4,
+			0x5b, 0x97, 0x7b, 0x7b, 0x32, 0xb6, 0x17, 0x96,
+			0x48, 0x12, 0xb6, 0x31, 0xf1, 0x5c, 0xd4, 0x8b,
+			0x93, 0x60, 0xc4, 0x00, 0xea, 0x12, 0xe1, 0x93,
+			0x6f, 0x53, 0x82, 0x2a, 0x48, 0x1d, 0xc1, 0x91,
+			0x79, 0x7c, 0x30, 0x43, 0xe5, 0x1e, 0x10, 0x7e,
+			0x7f, 0xbc, 0x18, 0x60, 0x03, 0x2a, 0xe5, 0xbb,
+			0x92, 0x7f, 0x24, 0x54, 0x12, 0x21, 0x77, 0x89,
+			0xc9, 0x22, 0xfb, 0x57, 0xaa, 0x69, 0xdd, 0x69,
+			0x06, 0xb0, 0xe5, 0x5b, 0x74, 0x1f, 0x02, 0x99,
+			0x62, 0x56, 0x21, 0x29, 0xd2, 0x26, 0x0f, 0x6a,
+			0x3a, 0x05, 0x96, 0x92, 0xb9, 0xff, 0xe9, 0x3b,
+			0x24, 0x70, 0xd4, 0x13, 0xa4, 0xb2, 0x6c, 0x76,
+			0xe3, 0x55, 0xe5, 0xc8, 0x18, 0x66, 0x60, 0x91,
+			0xba, 0x98, 0x5d, 0x67, 0x13, 0x97, 0xce, 0x49,
+			0xaa, 0x52, 0x7b, 0x20, 0x65, 0x65, 0x0a, 0x4f,
+			0x7b, 0x0a, 0x26, 0x62, 0xa7, 0xb5, 0xab, 0x2d,
+			0x5d, 0x37, 0xad, 0xb8, 0x97, 0xcf, 0xf5, 0x4f,
+			0xef, 0x03, 0xed, 0xce, 0x73, 0x68, 0x5d, 0x9f,
+			0x6c, 0x3d, 0x3f, 0xd5, 0xc1, 0xca, 0x5f, 0xef,
+			0xe4, 0xf8, 0xfb, 0xc7, 0xbb, 0x49, 0x30, 0x1a,
+			0xe1, 0x3c, 0xd1, 0x7f, 0x7c, 0x26, 0xa2, 0x87,
+			0x6e, 0x80, 0xa6, 0x47, 0x2c, 0x0f, 0xa6, 0x68,
+			0xf6, 0xde, 0x65, 0x1f, 0x02, 0xa7, 0x09, 0x08,
+			0x34, 0xbe, 0x2c, 0xc7, 0xed, 0x4c, 0xb0, 0xa1,
+			0x63, 0x63, 0x35, 0xe0, 0x11, 0xfd, 0xe1, 0x2d,
+			0xb4, 0xcf, 0x9e, 0x18, 0x78, 0xa8, 0x63, 0xbf,
+			0xb7, 0xe8, 0x22, 0x82, 0xc5, 0x9c, 0x0b, 0x3a,
+			0x1c, 0x2f, 0x73, 0x80, 0xf1, 0xbb, 0x9a, 0x84,
+			0x51, 0x2c, 0x1c, 0x2e, 0xda, 0xb8, 0xa3, 0x43,
+			0x4f, 0x95, 0x8c, 0x06, 0x12, 0xdc, 0x75, 0x53,
+			0x01, 0xc4, 0x50, 0x95, 0x31, 0x7e, 0x75, 0x33,
+			0x69, 0x3e, 0x82, 0xad, 0x51, 0x1a, 0x4d, 0xa4,
+			0xe7, 0xbb, 0x7c, 0x9e, 0x3c, 0xbc, 0x1a, 0xf7,
+			0x7d, 0x0f, 0xdd, 0x93, 0xb5, 0x91, 0x61, 0x28,
+			0x28, 0x3b, 0x8f, 0xdd, 0xfa, 0xe6, 0xf4, 0xcc,
+			0x21, 0x82, 0x0c, 0xe2, 0xe4, 0xc7, 0x39, 0x69,
+			0x8e, 0xd6, 0xc0, 0x45, 0x94, 0x26, 0x27, 0x1b,
+			0xca, 0x02, 0x39, 0x00, 0x12, 0xef, 0xad, 0x0f,
+			0xf2, 0xdb, 0x19, 0x39, 0x6e, 0x4e, 0xfd, 0x14,
+			0x56, 0x3c, 0xd3, 0xfb, 0x43, 0x2d, 0x14, 0xb1,
+			0x62, 0xd2, 0xc8, 0x09, 0xe3, 0xb4, 0xf3, 0x24,
+			0x4e, 0xeb, 0xe5, 0xd6, 0x42, 0x48, 0xa5, 0xf8,
+			0xd8, 0xcc, 0x0b, 0xd6, 0x23, 0x59, 0x46, 0xaf,
+			0x15, 0xb2, 0x36, 0x2d, 0x52, 0xbe, 0x4a, 0x5f,
+			0xc6, 0xb2, 0x3d, 0xc5, 0x53, 0x57, 0x35, 0x2a,
+			0xa1, 0x06, 0xc8, 0x93, 0xa8, 0x3e, 0xc6, 0xcb,
+			0xa4, 0xd9, 0xe4, 0x53, 0xa9, 0xe8, 0x6d, 0xe1,
+			0x73, 0x97, 0xb9, 0x6f, 0xb3, 0xf8, 0x1d, 0xb4,
+			0xae, 0xd8, 0x77, 0xa7, 0xef, 0xe1, 0xeb, 0x83,
+			0x3d, 0xc3, 0x35, 0xf0, 0xc6, 0xd8, 0x66, 0xb5,
+			0x29, 0x7f, 0x74, 0xdb, 0xa1, 0xf2, 0x16, 0xc9,
+			0x07, 0x0f, 0x5c, 0x3e, 0x18, 0x64, 0x82, 0xfd,
+			0xae, 0x80, 0xca, 0xcf, 0xf9, 0x7e, 0x7f, 0x36,
+			0x58, 0xd5, 0x4d, 0x2d, 0x5a, 0x27, 0x27, 0xcc,
+			0x7e, 0x45, 0x0d, 0xf8, 0xd6, 0x5f, 0xee, 0x83,
+			0x42, 0x83, 0x48, 0x0b, 0x64, 0xc6, 0x03, 0x4d,
+			0x1e, 0x24, 0x90, 0xba, 0x2a, 0x92, 0x7d, 0x43,
+			0x77, 0x17, 0xc8, 0xcc, 0x9f, 0x31, 0x80, 0x4e,
+			0x19, 0x7f, 0x8f, 0xcf, 0xd7, 0x27, 0x48, 0x10,
+			0xea, 0x3d, 0xd6, 0x0f, 0x70, 0x7a, 0xb9, 0xed,
+			0x53, 0x67, 0x1c, 0x56, 0xb1, 0x78, 0xfc, 0x0c,
+			0xcc, 0x1f, 0xf8, 0x89, 0x45, 0x57, 0x4a, 0x72,
+			0xd2, 0xa0, 0x07, 0x53, 0x73, 0x3d, 0x0e, 0x45,
+			0x5a, 0x31, 0x94, 0x8f, 0x5f, 0x11, 0xe4, 0x36,
+			0xe2, 0x19, 0xc4, 0x84, 0x94, 0xb9, 0xc0, 0xe6,
+			0x5d, 0x66, 0x7e, 0x4c, 0x05, 0xc6, 0xcd, 0x9c,
+			0x6c, 0x8f, 0x32, 0x68, 0xfb, 0x66, 0x86, 0x22,
+			0xf5, 0xfa, 0x9a, 0x46, 0x26, 0xb5, 0xd5, 0xc1,
+			0x7d, 0xeb, 0x7b, 0x82, 0x3e, 0x62, 0x8c, 0x76,
+			0x0b, 0x08, 0x1d, 0xe0, 0x75, 0x34, 0x30, 0x4b,
+			0xc2, 0x4b, 0xcb, 0x49, 0xa3, 0x65, 0x0e, 0x90,
+			0xd3, 0x57, 0xe5, 0xf5, 0x83, 0x1b, 0xa2, 0xbb,
+			0x4a, 0x23, 0x63, 0x25, 0x64, 0xd7, 0xf1, 0x85,
+			0x9b, 0xbe, 0x2e, 0xda, 0xad, 0xc8, 0x60, 0x37,
+			0x3c, 0x78, 0x33, 0xb5, 0x76, 0x7c, 0xc6, 0xe5,
+			0x97, 0x86, 0x6d, 0x70, 0xdc, 0x4f, 0x79, 0x39,
+			0xe6, 0x27, 0x78, 0x57, 0x98, 0x69, 0x79, 0xaf,
+			0x0a, 0xc0, 0x64, 0x0c, 0x1a, 0x09, 0xa0, 0x98,
+			0x06, 0x41, 0x5c, 0x29, 0x27, 0xbd, 0x2e, 0xbe,
+			0xe8, 0x08, 0x5f, 0xdf, 0xed, 0xd9, 0x31, 0x97,
+			0xdb, 0x0a, 0x1f, 0x4e, 0x1b, 0x67, 0x32, 0xef,
+			0x84, 0xa2, 0x14, 0xa7, 0x83, 0x33, 0xdc, 0x40,
+			0x55, 0x76, 0x27, 0x01, 0x9f, 0x98, 0x90, 0xa9,
+			0xfa, 0xfb, 0x73, 0x86, 0x38, 0x6b, 0xa8, 0x57,
+			0xc9, 0xaa, 0x06, 0xbf, 0x84, 0x97, 0xfa, 0xc8,
+			0xde, 0x67, 0x6b, 0xa6, 0x2c, 0xa1, 0x90, 0x6c,
+			0x6d, 0xcd, 0xb5, 0x73, 0x3c, 0x16, 0x68, 0xb4,
+			0x00, 0x55, 0xf6, 0xd8, 0x35, 0xb0, 0xf9, 0x8e,
+			0x2e, 0xfb, 0x54, 0xc1, 0x8e, 0x51, 0x90, 0x2d,
+			0x28, 0x83, 0x5d, 0x81, 0xd6, 0x00, 0x00, 0x41,
+			0xf2, 0x97, 0xdf, 0x2f, 0x8d, 0xa8, 0xc2, 0x1d,
+			0xe3, 0xbd, 0x1d, 0x2a, 0x6f, 0x4a, 0xfd, 0xd3,
+			0xcd, 0x0b, 0xac, 0x28, 0x93, 0x87, 0x3e, 0xd9,
+			0x7b, 0x17, 0xe2, 0x66, 0x0a, 0x6e, 0xcb, 0xa8,
+			0x3e, 0x3d, 0x9b, 0x3c, 0xbe, 0x78, 0xe1, 0x2a,
+			0xa5, 0x42, 0x5f, 0xdc, 0xe0, 0x0e, 0x06, 0x10,
+			0x59, 0xac, 0x4a, 0xd3, 0x63, 0x95, 0x92, 0x31,
+			0x1c, 0x7d, 0xb1, 0x5e, 0x48, 0x01, 0x23, 0x16,
+			0x61, 0xb3, 0xfc, 0xe6, 0x9a, 0x5d, 0x39, 0xf9,
+			0x2f, 0xb5, 0xc6, 0x6d, 0xeb, 0xb2, 0x6e, 0x93,
+			0x9d, 0x8b, 0x19, 0x74, 0xa9, 0xc4, 0x57, 0x96,
+			0xbc, 0x1c, 0xbb, 0x88, 0x5a, 0xd6, 0xf7, 0xc0,
+			0xe2, 0xb6, 0xf2, 0xb3, 0xf0, 0x56, 0x5b, 0x2c,
+			0x9e, 0xdf, 0x96, 0x6d, 0xcc, 0x41, 0x06, 0xce,
+			0x1e, 0x1b, 0x3a, 0x39, 0x67, 0xe1, 0x7e, 0x81,
+			0xfc, 0xff, 0x0a, 0xc0, 0xf1, 0x76, 0x82, 0x49,
+			0x76, 0x88, 0x38, 0x10, 0x5c, 0x90, 0x83, 0x4b,
+			0x3e, 0x8d, 0xb9, 0x35, 0x77, 0xf5, 0x4c, 0x7e,
+			0x3e, 0x12, 0x54, 0xf0, 0x33, 0x56, 0xbc, 0x9b,
+			0x0e, 0x10, 0x7d, 0x4a, 0xb6, 0x2d, 0x02, 0x35,
+			0x79, 0xe8, 0x0c, 0x15, 0xc1, 0xde, 0xc7, 0x2a,
+			0x7d, 0xe1, 0x27, 0xd4, 0x99, 0x50, 0x6b, 0xde,
+			0x6d, 0x02, 0x65, 0x12, 0x88, 0xe6, 0x80, 0x13,
+			0x5e, 0xad, 0xb1, 0xef, 0xe7, 0x77, 0x19, 0xc9,
+			0x63, 0xcf, 0x14, 0x41, 0x40, 0x76, 0xc8, 0xa9,
+			0xc3, 0x08, 0x88, 0xdb, 0x44, 0x6c, 0x10, 0x74,
+			0x5c, 0xf6, 0x86, 0x8c, 0x61, 0x95, 0x19, 0x76,
+			0x1f, 0x3e, 0xcb, 0xdf, 0x6e, 0x08, 0x9f, 0x43,
+			0xb9, 0x66, 0x2b, 0x88, 0x27, 0x48, 0xbe, 0x5d,
+			0x9e, 0x83, 0x72, 0x9a, 0x43, 0x06, 0x8e, 0xf3,
+			0x9e, 0xba, 0xd5, 0xd8, 0x70, 0x1b, 0xe4, 0x4e,
+			0x39, 0x0a, 0x37, 0x5b, 0x2f, 0x8c, 0xa8, 0xbd,
+			0x3c, 0xfe, 0xb2, 0x59, 0x5b, 0x5f, 0x5a, 0x05,
+			0x67, 0xc8, 0xec, 0x71, 0x5d, 0xb5, 0x77, 0xc7,
+			0xb3, 0x1c, 0xb7, 0xac, 0x90, 0xf6, 0xd3, 0xb7,
+			0x61, 0x65, 0xbe, 0x29, 0x8f, 0x27, 0x65, 0x9a,
+			0x9a, 0x1c, 0x00, 0x82, 0xee, 0x10, 0xb9, 0x60,
+			0xff, 0x9f, 0x5a, 0xbe, 0x09, 0x72, 0x63, 0x79,
+			0x60, 0x50, 0x84, 0x18, 0xc9, 0xc5, 0x0d, 0x43,
+			0xce, 0x29, 0x80, 0x72, 0x83, 0x12, 0x73, 0x13,
+			0x44, 0xec, 0x25, 0xe5, 0x15, 0x70, 0xe2, 0x7f,
+			0x6b, 0x54, 0x5b, 0x58, 0x57, 0x06, 0xdc, 0xae,
+			0x1f, 0x9c, 0x38, 0x4c, 0xbf, 0x1c, 0x42, 0xb2,
+			0x63, 0x9c, 0xfb, 0xae, 0xc0, 0xdf, 0xd3, 0xcc,
+			0xcc, 0xb9, 0x9b, 0xe9, 0x66, 0x77, 0x70, 0x47,
+			0x6c, 0x8b, 0x5b, 0xc1, 0x87, 0x7a, 0x63, 0xa3,
+			0x13, 0xfc, 0x2d, 0x16, 0xd3, 0xe2, 0x00, 0xe9,
+			0x94, 0x11, 0xf2, 0x28, 0xda, 0x0b, 0x58, 0x09,
+			0x2d, 0x59, 0x2d, 0xb5, 0x25, 0x99, 0xca, 0x63,
+			0xc9, 0x96, 0xa3, 0x17, 0x2a, 0x0e, 0x22, 0x2c,
+			0x5f, 0x8d, 0x53, 0xc4, 0xd1, 0x3d, 0x4e, 0x20,
+			0xdc, 0x44, 0x18, 0xd2, 0xd8, 0x5c, 0x9a, 0x78,
+			0x0a, 0x53, 0xa8, 0x73, 0x7d, 0x98, 0xc0, 0xba,
+			0xfb, 0xfe, 0x27, 0xd4, 0x82, 0x87, 0xd4, 0x4d,
+			0xc0, 0xe3, 0xd1, 0xd0, 0xff, 0xf0, 0xd3, 0x04,
+			0xfd, 0x11, 0xf4, 0x57, 0xc2, 0xcc, 0xcf, 0xa9,
+			0xe6, 0xc5, 0x09, 0x4d, 0xcc, 0x36, 0x69, 0x26,
+			0x35, 0x8c, 0xe8, 0xe2, 0xe2, 0xdd, 0x5a, 0x5f,
+			0xaf, 0xda, 0x38, 0x07, 0x33, 0xfb, 0xf8, 0xfb,
+			0xf9, 0x62, 0x4a, 0x75, 0xad, 0xc3, 0x95, 0xd3,
+			0x6e, 0x5b, 0xe3, 0x10, 0x2f, 0x31, 0xaf, 0xcd,
+			0x57, 0xb9, 0x84, 0x3d, 0xa4, 0x66, 0x3f, 0x10,
+			0xeb, 0xa2, 0xe2, 0xfa, 0xc7, 0xd3, 0x91, 0x83,
+			0x48, 0xbb, 0x3a, 0x6c, 0xe4, 0x12, 0x1c, 0x36,
+			0x44, 0xc5, 0x07, 0x07, 0x9b, 0x9d, 0x51, 0x3e,
+			0x74, 0xc5, 0x35, 0x8a, 0x10, 0x9c, 0x0d, 0x81,
+			0xf3, 0x10, 0x0f, 0x29, 0xaf, 0x01, 0x5d, 0x6f,
+			0x7f, 0x50, 0x9a, 0xf8, 0xbf, 0x1c, 0x57, 0xfc,
+			0x25, 0x5c, 0x02, 0x15, 0x43, 0x0b, 0x60, 0x21,
+			0xf3, 0xb1, 0x43, 0x9a, 0x41, 0xa0, 0xc1, 0x1b,
+			0x7a, 0x88, 0x97, 0xfd, 0x27, 0x56, 0xf7, 0x48,
+			0x1f, 0xb6, 0x9a, 0xa2, 0xb1, 0xc5, 0xab, 0x30,
+			0xa1, 0x14, 0x91, 0xef, 0x14, 0xe3, 0x01, 0x73,
+			0xf3, 0x8d, 0xfa, 0xd7, 0xae, 0x2f, 0x13, 0x5d,
+			0x66, 0xfb, 0x1c, 0x4b, 0x2e, 0x94, 0xdb, 0x9f,
+			0x10, 0x5b, 0x2a, 0x5e, 0x85, 0x98, 0x73, 0x9d,
+			0xcd, 0x7c, 0xa0, 0x79, 0xb6, 0xef, 0x8e, 0xf8,
+			0xdd, 0x11, 0x32, 0x0d, 0xec, 0x6a, 0x04, 0xea,
+			0x81, 0xd7, 0x63, 0xbd, 0x01, 0x77, 0x3e, 0x52,
+			0x30, 0x88, 0x3a, 0x9e, 0x04, 0xdf, 0x42, 0x8b,
+			0x40, 0x23, 0xa9, 0x5a, 0x97, 0x21, 0x55, 0xce,
+			0x72, 0x21, 0x45, 0x40, 0x01, 0x66, 0x63, 0x1d,
+			0xab, 0x37, 0x8d, 0xd5, 0x75, 0x56, 0xc2, 0x7c,
+			0xa0, 0x9e, 0xa5, 0x85, 0xc2, 0x0b, 0x51, 0x80,
+			0xae, 0x0c, 0xb3, 0xde, 0xa4, 0xb5, 0xa3, 0xa3,
+			0x00, 0xe1, 0xc9, 0x09, 0xee, 0xab, 0xbb, 0x36,
+			0x78, 0x5b, 0x3f, 0x45, 0x3d, 0xf6, 0xe8, 0x7e,
+			0xa3, 0xd7, 0x24, 0x78, 0xdf, 0xbc, 0x9f, 0xe4,
+			0x4c, 0x4d, 0x22, 0xb8, 0x76, 0xb0, 0x6a, 0xc1,
+			0x35, 0x66, 0xfe, 0xaf, 0xf1, 0xb4, 0x44, 0x5e,
+			0xe0, 0xff, 0xcf, 0x80, 0xf8, 0xa8, 0x5f, 0x59,
+			0x91, 0xa4, 0x4f, 0xc0, 0x58, 0xb1, 0x2d, 0xc9,
+			0x6a, 0xcd, 0x62, 0xcb, 0x41, 0x89, 0x9d, 0x3b,
+			0x3e, 0x48, 0x5f, 0x23, 0x46, 0x21, 0x8a, 0x49,
+			0xc0, 0x16, 0x07, 0x4d, 0xd9, 0x26, 0xbe, 0x86,
+			0xfb, 0x06, 0xbd, 0x41, 0xc5, 0xd8, 0x87, 0xf6,
+			0x94, 0xb1, 0xef, 0xed, 0xab, 0xfb, 0x93, 0x48,
+			0x5a, 0xe7, 0x22, 0xbc, 0x2b, 0x24, 0xb4, 0x86,
+			0x33, 0x9b, 0xd6, 0x09, 0x46, 0x85, 0x81, 0x89,
+			0xa9, 0x30, 0x13, 0xfa, 0x08, 0x55, 0xfc, 0xe5,
+			0xfb, 0xc8, 0xb2, 0xa8, 0x31, 0x4c, 0x9e, 0x1c,
+			0xff, 0x80, 0x10, 0x77, 0x5f, 0xf1, 0x07, 0x14,
+			0xf7, 0x88, 0xb9, 0xeb, 0x48, 0xfe, 0x18, 0x48,
+			0xf3, 0xaf, 0xfd, 0x7d, 0x0c, 0x9f, 0x30, 0x11,
+			0xcb, 0xed, 0xfc, 0x31, 0xf5, 0x6e, 0x72, 0xfa,
+			0x9a, 0x3a, 0xa5, 0x1d, 0x89, 0x89, 0x8b, 0xc6,
+			0x2c, 0xaf, 0xa6, 0xef, 0xbd, 0xb4, 0xc2, 0xa0,
+			0x97, 0x74, 0xd0, 0x4d, 0x72, 0xb7, 0xe8, 0x24,
+			0xba, 0x5e, 0x53, 0x4b, 0x91, 0xc1, 0xe4, 0x14,
+			0x22, 0x50, 0xb2, 0xc3, 0x84, 0xf4, 0xa6, 0xb3,
+			0xa4, 0x99, 0xda, 0x82, 0x55, 0x8e, 0x38, 0xb4,
+			0x0c, 0x21, 0xe5, 0x91, 0x30, 0xc7, 0x80, 0x55,
+			0xf1, 0x69, 0xde, 0xd7, 0x82, 0xf3, 0x08, 0xd3,
+			0x16, 0x69, 0xe7, 0xd4, 0xeb, 0xfc, 0x9b, 0x8f,
+			0xd6, 0xfc, 0xf9, 0x9f, 0x95, 0xb3, 0x90, 0xa6,
+			0x12, 0x21, 0x53, 0x50, 0xd5, 0x3e, 0x2b, 0x46,
+			0x14, 0x52, 0x20, 0x1c, 0x33, 0xed, 0xdd, 0x58,
+			0x81, 0x92, 0x37, 0xe5, 0x99, 0x77, 0xfa, 0x29,
+			0x28, 0x49, 0x07, 0xc8, 0xe2, 0x41, 0x8f, 0x77,
+			0x3b, 0xb4, 0x8c, 0x34, 0x3e, 0x80, 0xcb, 0xcf,
+			0x73, 0x4d, 0xfc, 0x78, 0x60, 0x9e, 0xd0, 0x86,
+			0xc3, 0x4d, 0xa7, 0x40, 0x9c, 0x03, 0x72, 0x46,
+			0xc3, 0xc3, 0x74, 0xdf, 0x5a, 0x47, 0x8d, 0xbc,
+			0xc1, 0x5b, 0x10, 0x3e, 0x7e, 0x09, 0x3d, 0xdb,
+			0x0c, 0xc4, 0x3b, 0x12, 0xbf, 0x66, 0xe2, 0xb7,
+			0x4c, 0x1a, 0x81, 0x58, 0x63, 0x39, 0x72, 0xde,
+			0xfa, 0x5d, 0xcc, 0x2c, 0x69, 0x11, 0x0a, 0x5f,
+			0xb9, 0xbc, 0xda, 0x80, 0x03, 0x8e, 0xa2, 0x02,
+			0x6c, 0xc1, 0x15, 0xcc, 0xbf, 0x01, 0x14, 0xd0,
+			0x36, 0xad, 0xdb, 0xb7, 0x77, 0xd6, 0x99, 0x94,
+			0xf5, 0xa5, 0xac, 0xce, 0x9a, 0x23, 0x9b, 0x1e,
+			0xa4, 0x97, 0x7e, 0x41, 0xc1, 0x65, 0xc7, 0x94,
+			0xfa, 0x07, 0x1d, 0x9a, 0x87, 0xba, 0xee, 0xef,
+			0x99, 0x92, 0xaa, 0x41, 0x29, 0x03, 0xe3, 0x01,
+			0x17, 0x42, 0xed, 0x11, 0x68, 0x44, 0x02, 0xca,
+			0x81, 0x4b, 0x33, 0x81, 0x64, 0x30, 0x95, 0x7f,
+			0x81, 0x17, 0xe6, 0x59, 0x0b, 0x4e, 0xf3, 0x4a,
+			0x72, 0x0c, 0x45, 0x1e, 0x1d, 0x44, 0xe2, 0x9e,
+			0x45, 0x29, 0x88, 0xb4, 0xda, 0x9b, 0x9f, 0x3e,
+			0x92, 0x9a, 0x0b, 0x21, 0x2a, 0xd4, 0xa0, 0xd8,
+			0xd8, 0xbd, 0x06, 0x6d, 0x71, 0x3c, 0xcc, 0xd8,
+			0xdc, 0x19, 0xd7, 0x8f, 0x21, 0x01, 0x25, 0xa5,
+			0x15, 0x62, 0x43, 0xfa, 0xdf, 0xb9, 0x33, 0x23,
+			0xd3, 0xa2, 0xab, 0xb1, 0x7e, 0x4e, 0x5e, 0x46,
+			0xbd, 0x76, 0x6e, 0x18, 0x88, 0x5f, 0x85, 0x03,
+			0x43, 0x57, 0xd6, 0x3a, 0xf2, 0xcc, 0x9d, 0xbc,
+			0x2c, 0x67, 0xa8, 0xcd, 0xda, 0xe8, 0x39, 0x61,
+			0x68, 0x6d, 0xcf, 0xeb, 0x07, 0x1f, 0x58, 0x61,
+			0x68, 0x6d, 0x78, 0xa6, 0xad, 0xb6, 0x16, 0x70,
+			0x89, 0x49, 0x59, 0x62, 0x76, 0xc1, 0xc3, 0xc8,
+			0xce, 0xe2, 0xfc, 0x42, 0x51, 0x8d, 0xc8, 0xf1,
+			0x03, 0x17, 0x36, 0x55, 0x8c, 0x8e, 0x98, 0xd1,
+			0x33, 0x3c, 0x4c, 0x63, 0x81, 0x97, 0xc5, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x06, 0x0c, 0x16, 0x19, 0x23,
+			0x28, 0x30, 0x37, },
+	}, {
+		.what = "pure rejection vector",
+		.algo = "ml-dsa87",
+		.pk_len = DILITHIUM87_PUBLICKEYBYTES,
+		.pk = (const u8[DILITHIUM87_PUBLICKEYBYTES]){
+			0x89, 0xf7, 0x32, 0xb6, 0xaa, 0x73, 0x16, 0x1d,
+			0x84, 0x36, 0x12, 0x7a, 0xb9, 0xfc, 0xb6, 0x66,
+			0x14, 0x43, 0x0a, 0xd4, 0x61, 0x63, 0xcc, 0x2b,
+			0x3c, 0x70, 0x9e, 0x14, 0x81, 0xe7, 0x57, 0xcd,
+			0x89, 0x3d, 0xc0, 0x21, 0x25, 0xaa, 0x4d, 0x16,
+			0x47, 0xfb, 0xc7, 0xfb, 0x94, 0xbf, 0x0d, 0x11,
+			0x54, 0xec, 0x78, 0x94, 0x52, 0xa2, 0x36, 0x7a,
+			0xf3, 0xc4, 0xcd, 0xc2, 0x91, 0x7b, 0x6c, 0x2f,
+			0x6f, 0x0f, 0xb8, 0xc7, 0x25, 0x52, 0x50, 0x32,
+			0x9b, 0x5d, 0x92, 0x92, 0x3f, 0x81, 0x51, 0xbd,
+			0x2f, 0xfc, 0x78, 0xf1, 0xa2, 0x23, 0x29, 0x56,
+			0x9f, 0x97, 0x1d, 0xf0, 0xab, 0x24, 0x3e, 0x87,
+			0x10, 0x39, 0xb9, 0x93, 0xe9, 0xe9, 0x6b, 0xbd,
+			0x6a, 0x30, 0xef, 0x9e, 0xf3, 0xe0, 0x93, 0x53,
+			0x84, 0x84, 0xe1, 0x75, 0xb8, 0xe7, 0x32, 0x40,
+			0xc9, 0x1e, 0x01, 0x9c, 0x24, 0xf1, 0x48, 0xd5,
+			0xd6, 0x46, 0x78, 0x64, 0x9a, 0x68, 0x71, 0xf9,
+			0x77, 0xbd, 0xf0, 0xdf, 0x8d, 0xd3, 0xf0, 0x3d,
+			0x53, 0x53, 0xd2, 0x16, 0xde, 0x75, 0x60, 0x25,
+			0x9a, 0xa6, 0x5d, 0x3a, 0xba, 0x9b, 0xad, 0xad,
+			0xd8, 0xcd, 0x8e, 0x84, 0x7c, 0x9f, 0x72, 0x86,
+			0xd2, 0x73, 0xca, 0x8f, 0xb8, 0x5d, 0xe5, 0xa5,
+			0x6f, 0x2d, 0x18, 0x07, 0xb4, 0x06, 0x42, 0xe8,
+			0x55, 0xe2, 0xcb, 0xc4, 0x64, 0x53, 0xe3, 0x6a,
+			0x63, 0xc3, 0x4d, 0xa2, 0x6c, 0xe5, 0xb8, 0xf0,
+			0x5f, 0xe4, 0x6d, 0xd6, 0x30, 0x53, 0x66, 0xbf,
+			0x36, 0xa3, 0x41, 0x31, 0xc7, 0x67, 0xa5, 0x7e,
+			0x67, 0xeb, 0xac, 0x47, 0xd3, 0x95, 0xa1, 0x95,
+			0x5d, 0x16, 0xdf, 0x6c, 0x69, 0x9a, 0x37, 0xba,
+			0xb1, 0x6a, 0xd1, 0x00, 0x1c, 0x49, 0x31, 0xdc,
+			0xd1, 0x62, 0xf7, 0xb1, 0x34, 0x0b, 0xb1, 0x0c,
+			0x69, 0x56, 0xbb, 0x69, 0x44, 0x87, 0xa3, 0xcc,
+			0x3a, 0xad, 0x26, 0xa2, 0x91, 0xfd, 0xab, 0x0f,
+			0x33, 0x5c, 0x62, 0x1f, 0x24, 0xf5, 0x5e, 0x65,
+			0xda, 0xa2, 0x16, 0x34, 0xd0, 0x7b, 0x51, 0x01,
+			0x22, 0xf5, 0x21, 0x07, 0x17, 0x78, 0x8d, 0x79,
+			0x5c, 0xd2, 0x45, 0x9a, 0x3c, 0xcc, 0x3a, 0xef,
+			0xdd, 0xca, 0x07, 0x19, 0x1b, 0x0e, 0xfc, 0xf2,
+			0x8f, 0xbd, 0x06, 0xca, 0x6e, 0x6b, 0x78, 0x77,
+			0xca, 0x50, 0x1a, 0x2f, 0x28, 0x43, 0x87, 0x34,
+			0x52, 0x96, 0x26, 0x86, 0xeb, 0xfc, 0xfc, 0x87,
+			0x63, 0xbc, 0xbf, 0x81, 0xc3, 0x98, 0xa1, 0x90,
+			0x97, 0x79, 0x1e, 0x5e, 0x1e, 0xc4, 0x51, 0xcd,
+			0x9d, 0x96, 0x23, 0xfc, 0xd9, 0x75, 0x4d, 0x8a,
+			0x20, 0x95, 0xad, 0xbe, 0x0f, 0xd9, 0xe8, 0x13,
+			0xa3, 0xd8, 0xba, 0x05, 0x82, 0x73, 0xeb, 0x67,
+			0x55, 0xb2, 0xf1, 0x9a, 0xf7, 0x08, 0x94, 0x8e,
+			0x52, 0xd5, 0x6e, 0xe7, 0x50, 0x7f, 0x76, 0x15,
+			0x27, 0x40, 0x85, 0xf7, 0x38, 0x02, 0x20, 0x9a,
+			0xf1, 0xc1, 0x7a, 0xee, 0xe9, 0x9e, 0x32, 0x4b,
+			0xe8, 0x08, 0x53, 0x03, 0x07, 0xf9, 0x62, 0x41,
+			0x1c, 0xb6, 0x2b, 0x82, 0x6c, 0xc2, 0xd8, 0x11,
+			0x41, 0x32, 0x97, 0x6e, 0x24, 0x26, 0x84, 0xd9,
+			0x3b, 0x6d, 0xa5, 0x0d, 0x9d, 0xcf, 0x7b, 0x4a,
+			0x02, 0x4b, 0x30, 0x7d, 0xc3, 0x47, 0xa1, 0xc0,
+			0x22, 0x85, 0x96, 0xf1, 0x38, 0xfe, 0x62, 0xa7,
+			0x1c, 0x14, 0x28, 0x42, 0x75, 0x85, 0x46, 0x18,
+			0xba, 0x7a, 0x50, 0x15, 0xde, 0xad, 0x78, 0x08,
+			0x15, 0xbb, 0x4b, 0xa7, 0x97, 0x8d, 0xb8, 0xf5,
+			0x3e, 0x82, 0xc2, 0x43, 0xf7, 0x04, 0x03, 0x58,
+			0xe0, 0x41, 0x09, 0x47, 0xb8, 0x83, 0x68, 0xbb,
+			0x2c, 0x0c, 0x63, 0x3c, 0x12, 0x26, 0xc9, 0xcb,
+			0x7f, 0x87, 0x34, 0x78, 0xe0, 0xbf, 0xdf, 0x78,
+			0xe0, 0x4a, 0x94, 0xb1, 0xea, 0xa6, 0x3f, 0x4c,
+			0xa4, 0xcc, 0xf7, 0x44, 0xf1, 0x99, 0xb6, 0xa9,
+			0x9e, 0x93, 0x18, 0x0d, 0xc8, 0xe9, 0x4a, 0xc0,
+			0xa0, 0x34, 0x5d, 0x9e, 0xce, 0x1e, 0xa5, 0x03,
+			0x9f, 0xcb, 0xf3, 0x6b, 0x5f, 0x26, 0x46, 0xe6,
+			0x04, 0x08, 0x14, 0x43, 0x06, 0xa4, 0xad, 0x7a,
+			0x83, 0x06, 0x4b, 0xd6, 0x46, 0xbc, 0x1e, 0x49,
+			0xab, 0x15, 0x51, 0x48, 0xf5, 0x2e, 0x52, 0x58,
+			0x74, 0xd4, 0x17, 0xf8, 0x61, 0xb6, 0xca, 0xdf,
+			0xf2, 0x8f, 0x1d, 0xe9, 0x13, 0x12, 0xb6, 0xb2,
+			0x70, 0x8e, 0xa3, 0x20, 0xac, 0x86, 0x8a, 0x56,
+			0x12, 0x2c, 0x14, 0x06, 0x7c, 0x4c, 0x1b, 0xae,
+			0x3a, 0xd4, 0x85, 0xe2, 0xe5, 0xc0, 0xdc, 0xd6,
+			0x7d, 0xe9, 0xa9, 0x27, 0xb4, 0x66, 0x95, 0xea,
+			0xba, 0xb6, 0x06, 0x13, 0x01, 0xc8, 0x84, 0xa5,
+			0x9e, 0xf7, 0x35, 0xf9, 0x6e, 0x68, 0x8d, 0x8e,
+			0xa8, 0xa4, 0x0c, 0x38, 0x17, 0x50, 0x09, 0xf2,
+			0x16, 0xb8, 0x54, 0xdc, 0x97, 0x9b, 0xc1, 0x52,
+			0xb9, 0xa9, 0xa5, 0x3d, 0x23, 0x9c, 0xe0, 0x26,
+			0xf3, 0xd0, 0x65, 0xe9, 0xc3, 0x2a, 0x28, 0x1c,
+			0xa1, 0x7c, 0x25, 0xd6, 0x75, 0x18, 0xbe, 0x34,
+			0x91, 0x79, 0xc3, 0x06, 0xe8, 0x1c, 0x89, 0x8e,
+			0x16, 0xd7, 0x34, 0x10, 0xb8, 0xb0, 0x5f, 0x24,
+			0x24, 0x33, 0x4c, 0x0a, 0xa9, 0x9e, 0x71, 0x79,
+			0xf1, 0xdf, 0x3c, 0x4a, 0xbd, 0x9c, 0x22, 0x06,
+			0x35, 0x3a, 0xfe, 0xe4, 0x09, 0x78, 0xab, 0xf5,
+			0x03, 0xbd, 0x55, 0x02, 0xc3, 0x7e, 0xf3, 0xc7,
+			0xb3, 0xf5, 0x18, 0xda, 0x3f, 0xc4, 0x5a, 0xc9,
+			0xea, 0x63, 0xa1, 0xcf, 0xf2, 0xda, 0x6e, 0xe7,
+			0xeb, 0xf5, 0x55, 0xe3, 0xb0, 0xe1, 0x15, 0xb2,
+			0x5c, 0xb6, 0x59, 0xa6, 0x31, 0xe5, 0x13, 0xe1,
+			0xfe, 0xb5, 0xaa, 0xb5, 0x09, 0x28, 0x05, 0x4a,
+			0x1c, 0x0b, 0xdf, 0x29, 0x91, 0xa6, 0x5d, 0x83,
+			0x33, 0x95, 0x38, 0x45, 0x56, 0xb3, 0xae, 0x3a,
+			0x1b, 0x88, 0x7d, 0x6a, 0x31, 0x3b, 0xc8, 0x15,
+			0x0c, 0x5d, 0x43, 0x34, 0x9f, 0x3b, 0xbf, 0x1f,
+			0xa2, 0x2a, 0x27, 0x4f, 0x78, 0x76, 0xf9, 0x44,
+			0x8b, 0xcc, 0x7b, 0x9f, 0x01, 0xdf, 0x62, 0x8e,
+			0xbc, 0xff, 0xb2, 0x9a, 0xf9, 0x35, 0xad, 0x55,
+			0x05, 0x80, 0x9e, 0xfe, 0x1e, 0xf8, 0x0b, 0x65,
+			0xcc, 0x13, 0xe2, 0xb9, 0x6b, 0xb7, 0x2c, 0x07,
+			0x7f, 0xc2, 0xfd, 0xa5, 0x71, 0xb2, 0x9d, 0x65,
+			0x01, 0x73, 0xf0, 0x31, 0xd3, 0x1e, 0x2a, 0xc1,
+			0x11, 0x06, 0x3f, 0xf3, 0x13, 0xc2, 0x5e, 0xc0,
+			0xf6, 0x1d, 0x49, 0x0b, 0x14, 0x7c, 0x45, 0x87,
+			0x62, 0x13, 0x08, 0xe5, 0xf6, 0xfa, 0x2f, 0x8e,
+			0x4a, 0x50, 0x3b, 0x00, 0x1a, 0xd8, 0x75, 0x74,
+			0xe9, 0x10, 0x11, 0x41, 0xc7, 0xed, 0x79, 0x91,
+			0xa2, 0x27, 0xa6, 0x1b, 0xcd, 0x13, 0xc5, 0xca,
+			0x96, 0x08, 0x95, 0x80, 0x72, 0x3e, 0x81, 0xc0,
+			0x70, 0x6a, 0x9e, 0xb7, 0x65, 0x30, 0x30, 0xc2,
+			0xaf, 0x8d, 0x1d, 0xbb, 0x85, 0xe9, 0xfb, 0x54,
+			0x46, 0x6b, 0x39, 0x05, 0x82, 0xb7, 0x1e, 0xeb,
+			0x59, 0x9b, 0x93, 0x13, 0xce, 0x97, 0x6f, 0x5b,
+			0xa7, 0x2d, 0x12, 0x4e, 0x6c, 0x67, 0x36, 0xb1,
+			0x69, 0xfe, 0x72, 0x64, 0xbe, 0xd5, 0x7c, 0x89,
+			0xc4, 0x7e, 0x99, 0xd5, 0x97, 0x99, 0x83, 0x19,
+			0x6f, 0x45, 0x30, 0x8c, 0x73, 0xd4, 0x11, 0xb7,
+			0x2e, 0xe6, 0x5d, 0xc2, 0xf0, 0x40, 0x29, 0x8d,
+			0x40, 0x91, 0x38, 0xba, 0x8d, 0x0b, 0x8a, 0xb9,
+			0xee, 0x68, 0xe3, 0x78, 0x26, 0x9a, 0xaf, 0x25,
+			0x84, 0x50, 0x5f, 0x55, 0x74, 0x27, 0xe4, 0x04,
+			0x3e, 0x8a, 0x39, 0xbe, 0x76, 0xec, 0xb1, 0xc1,
+			0x8c, 0x57, 0x5d, 0x01, 0x1e, 0x72, 0xe7, 0xb4,
+			0x38, 0x25, 0xd9, 0x57, 0xf9, 0x20, 0x87, 0x64,
+			0x0f, 0xa1, 0xe7, 0x6b, 0x0b, 0xf0, 0xf5, 0x63,
+			0x52, 0x55, 0x37, 0x9d, 0x03, 0x91, 0xf1, 0x49,
+			0xf8, 0xb1, 0x53, 0x06, 0x84, 0x8f, 0x87, 0x69,
+			0xe4, 0x8b, 0x58, 0x38, 0x05, 0x2b, 0x32, 0xdf,
+			0x79, 0xd3, 0x47, 0xe1, 0x57, 0xa0, 0xc6, 0x5c,
+			0xce, 0x25, 0xc6, 0x4c, 0xaf, 0x5d, 0x72, 0x58,
+			0x96, 0xf6, 0x38, 0xac, 0xdd, 0x56, 0x68, 0x1e,
+			0x1b, 0xf9, 0x57, 0x94, 0x21, 0x70, 0x46, 0x6b,
+			0x19, 0xec, 0xed, 0xdc, 0x09, 0x50, 0x0f, 0x81,
+			0xa0, 0xca, 0xd3, 0x30, 0xe6, 0x5a, 0x84, 0xe6,
+			0x4c, 0xb6, 0x55, 0xb7, 0x8c, 0x7a, 0xbe, 0xd6,
+			0x14, 0x16, 0x77, 0xdb, 0x09, 0xe3, 0xa7, 0x9b,
+			0x80, 0xca, 0x4b, 0x34, 0x88, 0x12, 0x74, 0xae,
+			0xa2, 0x61, 0xe5, 0x60, 0xed, 0x39, 0x30, 0xbe,
+			0x34, 0x36, 0xce, 0x55, 0xba, 0xb8, 0xbb, 0x4a,
+			0x0d, 0x5b, 0x40, 0xbf, 0xb6, 0x66, 0xd3, 0x4e,
+			0x90, 0xdb, 0x8a, 0xdf, 0xba, 0x1d, 0x32, 0x73,
+			0x7a, 0xe2, 0x02, 0xfa, 0xcb, 0x9b, 0x4d, 0x39,
+			0x95, 0x8e, 0x9f, 0x1b, 0x40, 0xf7, 0x30, 0x2b,
+			0x7c, 0xd3, 0xe1, 0x02, 0x5c, 0x49, 0x94, 0x9f,
+			0x6c, 0x9b, 0x5b, 0x55, 0xf8, 0xaf, 0x1a, 0xe5,
+			0x94, 0xda, 0x4f, 0xf8, 0x7f, 0xd1, 0x23, 0xb4,
+			0x74, 0x5e, 0xa5, 0x83, 0x08, 0xbe, 0x29, 0x67,
+			0xcb, 0xae, 0x6f, 0x4f, 0x06, 0x9f, 0x95, 0x77,
+			0x8a, 0x00, 0x19, 0xf2, 0x02, 0xba, 0x50, 0xc8,
+			0x96, 0x78, 0x42, 0xc1, 0x96, 0x88, 0xc6, 0x91,
+			0x5f, 0xdc, 0xe6, 0x43, 0x2e, 0x9b, 0xd5, 0x73,
+			0x82, 0xbb, 0x4f, 0x76, 0x22, 0x08, 0x5e, 0x49,
+			0x03, 0x45, 0xf2, 0x50, 0x42, 0xeb, 0x1f, 0x1c,
+			0x19, 0x5e, 0xd1, 0x41, 0xd2, 0x5e, 0xcb, 0x42,
+			0x41, 0x92, 0xed, 0xc2, 0x71, 0x78, 0x32, 0x1f,
+			0x5d, 0xfc, 0xc5, 0x94, 0x7d, 0xb9, 0xe8, 0x87,
+			0x71, 0xcc, 0x4d, 0xf0, 0x58, 0xdb, 0x9d, 0xb0,
+			0xee, 0xee, 0x7a, 0x3d, 0xe9, 0x61, 0x72, 0xe4,
+			0x45, 0x50, 0x41, 0xf1, 0x77, 0x29, 0xa2, 0xe4,
+			0x91, 0x8d, 0xed, 0xfc, 0xd1, 0x13, 0x78, 0xcb,
+			0x8e, 0x1b, 0xed, 0xf8, 0x0d, 0x8e, 0x49, 0x13,
+			0xb6, 0x59, 0x69, 0x27, 0x65, 0x23, 0x9f, 0x1d,
+			0xd0, 0xda, 0x54, 0xfc, 0xd2, 0x08, 0xf7, 0x34,
+			0x89, 0xc3, 0x14, 0xb9, 0x42, 0xcb, 0x02, 0xa7,
+			0x35, 0xd1, 0x00, 0x89, 0x34, 0xac, 0x90, 0xd1,
+			0x44, 0x12, 0x2a, 0x12, 0xde, 0x4a, 0x31, 0x09,
+			0x97, 0x4a, 0x0f, 0xc2, 0xe5, 0xa5, 0xef, 0x0b,
+			0x81, 0xda, 0x01, 0x39, 0xc1, 0xa9, 0xf5, 0xd7,
+			0x0e, 0xd4, 0xca, 0xa7, 0x5a, 0x70, 0xa4, 0x70,
+			0x3d, 0x17, 0xe1, 0xce, 0x3d, 0xcd, 0x28, 0x4c,
+			0xe1, 0x94, 0x23, 0xfa, 0x87, 0xe7, 0xa3, 0x19,
+			0x6d, 0x0e, 0x1e, 0x59, 0xb5, 0x2a, 0x3a, 0x3c,
+			0x2c, 0x9c, 0xc2, 0x23, 0x01, 0xb9, 0x96, 0xc6,
+			0x67, 0xd4, 0x90, 0x0b, 0x40, 0x22, 0x3a, 0x97,
+			0xb4, 0x14, 0x03, 0xb3, 0x27, 0x09, 0x07, 0x77,
+			0x1c, 0xbc, 0x68, 0x1a, 0xbc, 0xfe, 0x51, 0x90,
+			0x04, 0x0b, 0x76, 0x3e, 0x36, 0x69, 0xb0, 0xc9,
+			0x86, 0x72, 0x8b, 0x09, 0xb4, 0xf9, 0x77, 0xb0,
+			0x49, 0x4b, 0xb7, 0xf9, 0x68, 0xb0, 0x53, 0x58,
+			0xa1, 0xe6, 0xfd, 0x63, 0x93, 0xb1, 0x11, 0x48,
+			0x0c, 0x45, 0xa2, 0x6c, 0xdc, 0xd3, 0xf5, 0x3a,
+			0x38, 0xe0, 0x85, 0xf9, 0x2f, 0x6a, 0x7c, 0xfa,
+			0xe1, 0xdf, 0x24, 0x94, 0x97, 0xc4, 0x7d, 0x7d,
+			0x01, 0x7f, 0xa2, 0x1c, 0x28, 0x62, 0xde, 0xbb,
+			0xf0, 0x61, 0x94, 0x83, 0x5e, 0xc8, 0x41, 0x4d,
+			0x4e, 0xde, 0xb0, 0x7d, 0xad, 0xf0, 0x2a, 0x7b,
+			0x45, 0x18, 0xbf, 0x22, 0x72, 0xdb, 0x34, 0x77,
+			0x85, 0x8d, 0x50, 0xb6, 0x70, 0xfd, 0x32, 0x38,
+			0x0a, 0xf4, 0x5d, 0x1e, 0x2f, 0x0f, 0x9b, 0xf8,
+			0x7f, 0xd1, 0x53, 0xff, 0x3f, 0xd7, 0x2c, 0xd1,
+			0xd6, 0xcd, 0x23, 0x48, 0x01, 0xa5, 0xbf, 0x93,
+			0x77, 0xa7, 0x9c, 0xbc, 0x3b, 0x5e, 0x47, 0x57,
+			0xf2, 0x95, 0xdb, 0xa1, 0x02, 0xaa, 0xf4, 0x1a,
+			0x4a, 0x54, 0x4b, 0xd6, 0x5b, 0x76, 0x47, 0xc0,
+			0xe6, 0x3e, 0xff, 0xa9, 0x3e, 0xe3, 0x12, 0x1b,
+			0x89, 0x89, 0x5a, 0xbc, 0xda, 0x52, 0x5c, 0x70,
+			0x1d, 0x70, 0x03, 0xb7, 0x1f, 0x27, 0x53, 0x29,
+			0x4e, 0x47, 0x82, 0x27, 0xc7, 0x14, 0x00, 0x2c,
+			0x28, 0x0c, 0xde, 0xc2, 0x88, 0x2e, 0x4c, 0xe3,
+			0x4c, 0x69, 0xfc, 0xfc, 0x7d, 0xdc, 0xac, 0x9b,
+			0x21, 0xa3, 0xfb, 0x88, 0x14, 0xc9, 0xe3, 0xa6,
+			0x40, 0x11, 0x68, 0x19, 0x48, 0x93, 0x6e, 0x04,
+			0xc2, 0x35, 0x26, 0x39, 0xec, 0xfd, 0x10, 0x7b,
+			0x2a, 0xab, 0xf3, 0x09, 0x51, 0xf4, 0xd8, 0xf2,
+			0xd6, 0xc8, 0x14, 0x9e, 0xdf, 0xee, 0xfe, 0x8e,
+			0x29, 0x1b, 0x32, 0x22, 0xcf, 0x1e, 0xa5, 0x96,
+			0xe7, 0xeb, 0x38, 0x22, 0xee, 0x29, 0x18, 0x3b,
+			0xfa, 0x96, 0xa4, 0xfa, 0xbd, 0x44, 0xb5, 0xff,
+			0x3f, 0x22, 0x42, 0x2f, 0x9a, 0x6e, 0xaf, 0x58,
+			0x2d, 0x03, 0xe5, 0xe2, 0x2b, 0x0f, 0x91, 0x01,
+			0xa8, 0xe4, 0xf6, 0x8d, 0x4e, 0xb0, 0x9a, 0xc9,
+			0xa9, 0xdd, 0xdc, 0xaa, 0x7b, 0x36, 0x55, 0x57,
+			0xac, 0x7d, 0xf6, 0xbb, 0xe8, 0xa0, 0x18, 0xec,
+			0x67, 0xfd, 0x2e, 0x24, 0xe9, 0x12, 0xc7, 0x4f,
+			0x73, 0xfb, 0xea, 0x87, 0x95, 0x49, 0x90, 0xff,
+			0x50, 0xe9, 0x49, 0xdf, 0x54, 0x2d, 0xdb, 0xbf,
+			0xf1, 0x5b, 0x8b, 0x35, 0xcd, 0xf6, 0xfc, 0x72,
+			0x4a, 0x0e, 0x77, 0xd2, 0xd9, 0x95, 0x5b, 0x04,
+			0x7d, 0xb8, 0x29, 0x5f, 0x1a, 0x65, 0x6e, 0x0f,
+			0xda, 0x3f, 0x24, 0xbb, 0xa9, 0x0e, 0x47, 0xc3,
+			0xef, 0x2f, 0x12, 0x71, 0xad, 0x69, 0x46, 0x11,
+			0x7e, 0x90, 0xa4, 0x71, 0x70, 0xf0, 0xd4, 0x1b,
+			0x51, 0xe8, 0x99, 0x67, 0x1e, 0xfc, 0x49, 0xe0,
+			0xa1, 0x21, 0x88, 0xc1, 0x63, 0xce, 0x61, 0xfb,
+			0x4a, 0xec, 0x8e, 0xcc, 0x7f, 0x3c, 0xcf, 0x4e,
+			0x8a, 0xc7, 0x31, 0xbc, 0xe4, 0xb5, 0x9f, 0x02,
+			0x79, 0x54, 0xfb, 0xa4, 0x86, 0x6f, 0x9e, 0x3d,
+			0xd4, 0x14, 0x20, 0xca, 0x73, 0x53, 0x8b, 0x8f,
+			0xf2, 0xb6, 0xab, 0xd6, 0xfe, 0xe2, 0xcd, 0x82,
+			0x89, 0x93, 0x11, 0x28, 0x37, 0x58, 0x22, 0xed,
+			0x14, 0x2b, 0x09, 0xf0, 0x23, 0x99, 0xc7, 0x4f,
+			0x94, 0x26, 0x36, 0x27, 0x5f, 0x5c, 0x37, 0x7f,
+			0x8d, 0xa7, 0x57, 0x8a, 0xb4, 0xd6, 0xf5, 0xd4,
+			0xe4, 0x1a, 0xf1, 0xb3, 0xc6, 0xa0, 0xce, 0x77,
+			0x27, 0xeb, 0x2f, 0x53, 0x3a, 0xa6, 0xb7, 0xfa,
+			0x4e, 0xab, 0xd5, 0x63, 0xc5, 0x0e, 0xde, 0x45,
+			0x7a, 0x4b, 0x3f, 0x71, 0x27, 0xb4, 0x09, 0xe9,
+			0xe0, 0xb0, 0xa1, 0x64, 0xd6, 0x08, 0xa9, 0xd7,
+			0x1b, 0x57, 0xa5, 0xca, 0x09, 0xdf, 0xd2, 0x54,
+			0x5d, 0x03, 0x7e, 0x1b, 0x15, 0x5a, 0xa5, 0xc8,
+			0xb8, 0xd4, 0xa2, 0x2c, 0x88, 0x6c, 0xcf, 0xaf,
+			0x67, 0xad, 0x53, 0x3b, 0x63, 0x89, 0x6f, 0xed,
+			0xb8, 0x59, 0x44, 0x71, 0xd2, 0x48, 0x25, 0xc4,
+			0x00, 0x22, 0xd0, 0x9a, 0xec, 0xc5, 0xaf, 0x62,
+			0x6e, 0x46, 0xda, 0x35, 0x57, 0x83, 0x5e, 0x78,
+			0xc8, 0x2e, 0x09, 0x61, 0x60, 0xae, 0x99, 0x57,
+			0x2c, 0x6e, 0xbd, 0x5d, 0x91, 0x4c, 0xdd, 0x71,
+			0xa8, 0x48, 0x65, 0xdc, 0x15, 0x0e, 0xaa, 0x07,
+			0xdf, 0x33, 0x36, 0xd2, 0xf9, 0x7e, 0xaf, 0x94,
+			0xd0, 0x56, 0x92, 0xa9, 0xcb, 0x24, 0x70, 0x01,
+			0xfd, 0x37, 0x8d, 0x2b, 0xcd, 0xc3, 0x10, 0xf1,
+			0x67, 0x4e, 0xcf, 0x1b, 0x3d, 0x15, 0xe5, 0x27,
+			0x6c, 0x9e, 0x28, 0x9b, 0x94, 0x76, 0xd4, 0x10,
+			0x92, 0x7d, 0xd5, 0x0e, 0xc7, 0x4f, 0xc4, 0x8d,
+			0x7b, 0x07, 0x03, 0x11, 0xce, 0x8a, 0x3f, 0xee,
+			0x35, 0x8a, 0x6a, 0xbe, 0x5d, 0xb9, 0xf5, 0xf1,
+			0x71, 0xba, 0x42, 0xfd, 0x45, 0x2c, 0x1b, 0xfd,
+			0xa8, 0x5a, 0x89, 0x60, 0xfa, 0x40, 0xd3, 0x7b,
+			0x7e, 0xe8, 0xd8, 0xc8, 0x63, 0xa5, 0x11, 0x8b,
+			0x04, 0xec, 0x30, 0xcf, 0xdc, 0xd0, 0x65, 0x7a,
+			0x2c, 0x2e, 0xbb, 0xa9, 0x70, 0x27, 0x28, 0x0a,
+			0xba, 0x0a, 0x2f, 0x5b, 0xae, 0x81, 0x39, 0x4d,
+			0x11, 0xee, 0x4d, 0xc9, 0xb6, 0xf0, 0x27, 0x91,
+			0xc1, 0x1e, 0x00, 0x2d, 0x4e, 0xf9, 0xb9, 0x56,
+			0xc8, 0x09, 0xab, 0x8b, 0xa1, 0x1b, 0x58, 0x05,
+			0xb8, 0xf2, 0xdc, 0x13, 0x1b, 0x77, 0xeb, 0x81,
+			0xca, 0x02, 0xd1, 0x1a, 0xfc, 0xa5, 0xc7, 0x00,
+			0xce, 0xab, 0x82, 0x19, 0x88, 0x65, 0x74, 0xc8,
+			0x08, 0x48, 0x9a, 0x44, 0xc4, 0xad, 0x27, 0xf0,
+			0xf6, 0xed, 0x5d, 0xad, 0x66, 0x1c, 0x3b, 0x85,
+			0xf9, 0x54, 0xaa, 0x08, 0x50, 0xc6, 0x80, 0xd1,
+			0xed, 0x80, 0x11, 0x0d, 0x3c, 0x16, 0x03, 0xa5,
+			0xb6, 0xd3, 0x94, 0x00, 0xf8, 0x8b, 0x06, 0x2d,
+			0xae, 0x2a, 0xfa, 0x7c, 0xe1, 0x8b, 0x0f, 0x51,
+			0xc1, 0xc5, 0xa1, 0x9e, 0x71, 0x66, 0xa0, 0x8d,
+			0x24, 0x2b, 0x32, 0x2c, 0xb5, 0x8c, 0xf6, 0x65,
+			0x0c, 0xea, 0xe1, 0x94, 0x0e, 0xf6, 0x5d, 0x07,
+			0xc4, 0x6e, 0x96, 0x34, 0x41, 0x0e, 0x1e, 0xd6,
+			0xac, 0x6b, 0x63, 0x7c, 0x0f, 0x78, 0xdd, 0x0c,
+			0xeb, 0xcb, 0x29, 0x88, 0xe9, 0xa9, 0x4b, 0x3a,
+			0x60, 0x23, 0x60, 0xb6, 0xc7, 0x79, 0x50, 0x13,
+			0x60, 0x4d, 0xb1, 0x5d, 0xae, 0x60, 0xf8, 0xba,
+			0xad, 0x66, 0xd5, 0x95, 0xae, 0x2c, 0xfc, 0x80,
+			0x01, 0xb2, 0x8f, 0xcd, 0xf3, 0x26, 0x6a, 0xae,
+			0x00, 0xa8, 0x59, 0xb5, 0x36, 0x8c, 0x25, 0x0b,
+			0xb5, 0xf4, 0x24, 0x70, 0xae, 0x24, 0xde, 0x40,
+			0xe4, 0x26, 0x37, 0x80, 0x60, 0xea, 0x3d, 0x99,
+			0x59, 0xad, 0xf5, 0x0d, 0xe2, 0xe1, 0x93, 0x98,
+			0xa5, 0xbc, 0x01, 0x3a, 0x93, 0xe4, 0xb9, 0x49,
+			0xd5, 0xcc, 0x6e, 0x4d, 0x2a, 0xbc, 0xa8, 0x49,
+			0xe0, 0x66, 0x0e, 0xa0, 0x56, 0xa8, 0x74, 0x50,
+			0xd5, 0xd8, 0x41, 0xca, 0x23, 0x2e, 0xea, 0x2d,
+			0x21, 0x08, 0x3f, 0x17, 0x89, 0x9f, 0xe6, 0x3e,
+			0x55, 0xf7, 0xfb, 0x6b, 0x9e, 0xcf, 0x43, 0x35,
+			0x42, 0x5d, 0xbd, 0x74, 0x0b, 0x52, 0x92, 0x1c,
+			0x18, 0x16, 0x81, 0x74, 0x6f, 0x45, 0x81, 0xca,
+			0x7b, 0x7b, 0xde, 0xf3, 0xca, 0x1c, 0xde, 0x3f,
+			0x97, 0x9d, 0x80, 0xa9, 0xa6, 0x7d, 0x35, 0x95,
+			0xf5, 0x9c, 0xb4, 0xc0, 0x28, 0x34, 0x07, 0xf8,
+			0x3f, 0x01, 0x7e, 0xe2, 0xbc, 0x2a, 0xaf, 0x80,
+			0x1d, 0x6d, 0xcc, 0x9a, 0x45, 0x8a, 0x29, 0x83,
+			0xe8, 0x0f, 0x98, 0x4c, 0x12, 0x0e, 0x3f, 0x84,
+			0x7f, 0x54, 0x29, 0x65, 0x06, 0xa2, 0xe4, 0xdb,
+			0x10, 0x38, 0x6f, 0x42, 0x37, 0x40, 0xd2, 0x1a,
+			0x0c, 0x16, 0x7a, 0x94, 0x58, 0xeb, 0xab, 0x60,
+			0x13, 0xfb, 0xc2, 0x0b, 0x9c, 0x8d, 0xc6, 0x8a,
+			0x9b, 0xb5, 0x58, 0x2b, 0x60, 0x97, 0x24, 0x55,
+			0x8c, 0xd5, 0x90, 0x7e, 0x97, 0x84, 0x85, 0x7a,
+			0x25, 0x98, 0xe9, 0x0e, 0xd9, 0x3c, 0x19, 0x92,
+			0x5f, 0x01, 0x7a, 0x5b, 0xd6, 0xc9, 0x57, 0x87,
+			0x1e, 0xce, 0x6d, 0xfa, 0xe9, 0x67, 0x7c, 0xa5,
+			0x1a, 0x8b, 0x8c, 0x74, 0xf3, 0x2a, 0x53, 0xc2,
+			0x6b, 0x75, 0x46, 0xf6, 0x60, 0xd2, 0x1a, 0x1e,
+			0x62, 0xc0, 0x60, 0x61, 0x4e, 0x33, 0x2b, 0x59,
+			0x54, 0xd6, 0x80, 0xa6, 0xe8, 0xa7, 0x3b, 0x55,
+			0x91, 0x17, 0x0f, 0x0e, 0x60, 0x9e, 0x62, 0x45,
+			0xfc, 0xee, 0x72, 0xce, 0x0d, 0x0c, 0xcd, 0x31,
+			0x11, 0x38, 0x6e, 0x15, 0x3c, 0xb2, 0x23, 0x06,
+			0x56, 0x65, 0x45, 0x2f, 0xb1, 0xef, 0xaa, 0x85,
+			0x2b, 0x62, 0xb3, 0x9a, 0x7b, 0xca, 0x4b, 0xc3,
+			},
+		.msg_len = 64,
+		.msg = (const u8[64]){
+			0x60, 0x9c, 0x06, 0x16, 0x82, 0xf5, 0xb9, 0xd1,
+			0x32, 0xcd, 0x72, 0x64, 0x80, 0xfc, 0x86, 0xc9,
+			0xad, 0x30, 0xf7, 0x6b, 0x0f, 0x12, 0x76, 0x06,
+			0xd8, 0x98, 0x92, 0xc1, 0x2e, 0x2b, 0xd5, 0xd9,
+			0x6a, 0xe7, 0xf1, 0x75, 0x15, 0xcc, 0xf9, 0x0d,
+			0x0b, 0x12, 0x3f, 0xe3, 0x5e, 0x10, 0x27, 0x94,
+			0xb5, 0x7f, 0x71, 0x8d, 0x27, 0xc4, 0x65, 0x74,
+			0x5c, 0xbb, 0xf8, 0x0f, 0x78, 0x63, 0x26, 0xef,
+			},
+		.sig_len = DILITHIUM87_CRYPTO_BYTES,
+		.sig = (const u8[DILITHIUM87_CRYPTO_BYTES]){
+			0x75, 0x80, 0xe5, 0x00, 0x5c, 0x28, 0xd0, 0xc3,
+			0xfa, 0x12, 0xfc, 0x13, 0x7b, 0x2c, 0x89, 0x20,
+			0xf6, 0x40, 0x17, 0xbc, 0xe4, 0x3d, 0x8e, 0xda,
+			0xbf, 0xa4, 0x17, 0xa6, 0x7c, 0xcd, 0xf0, 0xdb,
+			0xe0, 0x45, 0x9f, 0x8e, 0x57, 0x97, 0x69, 0xa3,
+			0xe9, 0x6f, 0xb7, 0x62, 0x28, 0x79, 0x0b, 0x88,
+			0x02, 0x36, 0x35, 0x2f, 0x7f, 0x0e, 0xac, 0x5e,
+			0x2e, 0x85, 0xb2, 0x32, 0x8c, 0x08, 0x4f, 0x5b,
+			0x2e, 0xeb, 0xbc, 0xb3, 0x5f, 0x52, 0x5e, 0x42,
+			0x6a, 0x3c, 0x9b, 0xbf, 0xaf, 0x71, 0x1a, 0x4a,
+			0xbc, 0x9f, 0xac, 0x5e, 0x95, 0x18, 0x0f, 0xba,
+			0xc0, 0xe8, 0xea, 0x56, 0x4e, 0xc1, 0x62, 0x4a,
+			0xcb, 0x99, 0x5b, 0xa4, 0x6c, 0xca, 0xec, 0xf6,
+			0xc7, 0xd0, 0x4b, 0xb6, 0x6e, 0xca, 0x58, 0xaa,
+			0x84, 0x46, 0xb3, 0xbb, 0x2a, 0x67, 0xf6, 0xc5,
+			0xf9, 0x40, 0xdf, 0x32, 0xf5, 0x94, 0xec, 0x6a,
+			0x96, 0x1c, 0x16, 0x2e, 0x6c, 0xd5, 0xcd, 0xff,
+			0xc1, 0x2c, 0xe5, 0x38, 0x78, 0x3a, 0x34, 0xe6,
+			0x29, 0xfa, 0xeb, 0x1c, 0xad, 0xff, 0x3c, 0x07,
+			0x12, 0xa6, 0xda, 0xaa, 0x44, 0xe2, 0xac, 0x0a,
+			0x22, 0xff, 0x53, 0xc7, 0x99, 0xc0, 0x5c, 0x22,
+			0x91, 0x82, 0x38, 0xa6, 0x19, 0x47, 0x8f, 0xbc,
+			0xc5, 0x66, 0xc8, 0x76, 0x6e, 0x94, 0x09, 0x28,
+			0xf0, 0x7e, 0x05, 0x08, 0xf6, 0x14, 0xcd, 0x12,
+			0xb1, 0xf9, 0xd8, 0x39, 0x2f, 0x9d, 0x65, 0x52,
+			0x6c, 0x7a, 0xc6, 0xb9, 0x7c, 0xe1, 0xc0, 0x7e,
+			0x57, 0xe8, 0x26, 0x4b, 0x94, 0xa7, 0xe4, 0xe6,
+			0xa2, 0x6a, 0xe2, 0xde, 0x41, 0x56, 0x82, 0x55,
+			0xe3, 0x9c, 0xce, 0xf5, 0x94, 0x6e, 0x2a, 0x53,
+			0x51, 0x3e, 0x30, 0x0a, 0x51, 0xfc, 0x79, 0xb6,
+			0x02, 0x02, 0xbd, 0x12, 0xba, 0xf2, 0x68, 0xb0,
+			0xc9, 0x35, 0xcb, 0x99, 0x39, 0x99, 0x94, 0x52,
+			0x5d, 0x5e, 0x52, 0x5e, 0xc4, 0xb8, 0xb0, 0xf4,
+			0x1f, 0x4a, 0x4e, 0x3a, 0xe8, 0xe0, 0x00, 0x75,
+			0x51, 0x4a, 0x8b, 0x81, 0x09, 0x2f, 0x15, 0xd4,
+			0x3a, 0xbb, 0x9b, 0x00, 0x34, 0x03, 0xe3, 0xb6,
+			0xb9, 0xba, 0x35, 0x28, 0xd4, 0xb8, 0x07, 0x42,
+			0x95, 0xf6, 0x27, 0xe4, 0x6e, 0xde, 0xb5, 0xf5,
+			0x4f, 0xd5, 0x0b, 0x00, 0x7d, 0x67, 0x04, 0xb8,
+			0x80, 0x4f, 0x17, 0x6f, 0x5f, 0xa9, 0x8c, 0x0f,
+			0x6e, 0x3d, 0x91, 0xb9, 0xaa, 0x1a, 0x73, 0x5c,
+			0x69, 0x53, 0x20, 0x28, 0xd4, 0x2d, 0xbf, 0x2d,
+			0x38, 0xf2, 0x2b, 0xbc, 0xa1, 0xc6, 0x54, 0x7a,
+			0x9b, 0xde, 0xa6, 0x9f, 0x7c, 0x2f, 0xbd, 0x97,
+			0x7d, 0x2e, 0x40, 0x15, 0x78, 0x41, 0x8d, 0xdd,
+			0x98, 0xc4, 0x46, 0xdc, 0x26, 0xbd, 0x72, 0x93,
+			0xa5, 0xb9, 0x8f, 0xb7, 0xfa, 0x2f, 0xb3, 0x4c,
+			0x7e, 0xfd, 0x08, 0xf0, 0x8b, 0xe3, 0x50, 0x23,
+			0xcd, 0x8f, 0x74, 0x47, 0xbf, 0xde, 0x58, 0x16,
+			0xc5, 0xb3, 0x8d, 0xd4, 0xf0, 0x30, 0x09, 0xbd,
+			0xd8, 0x30, 0x04, 0x1c, 0x38, 0xa0, 0xaf, 0xa2,
+			0x2a, 0xfa, 0x7b, 0xc7, 0x13, 0xfc, 0xa3, 0xab,
+			0x53, 0x66, 0x43, 0x28, 0xcf, 0x1a, 0x86, 0x1f,
+			0x54, 0x2e, 0x81, 0x8b, 0xab, 0x44, 0x8d, 0x37,
+			0x2d, 0x70, 0x27, 0x55, 0x9a, 0x50, 0x7e, 0x1d,
+			0xac, 0xac, 0xe1, 0xea, 0x11, 0x4f, 0x52, 0x4e,
+			0xf3, 0x63, 0xd7, 0x2e, 0xdc, 0x3e, 0x5f, 0xfd,
+			0x6f, 0x85, 0x7d, 0x23, 0xcb, 0xf0, 0xb1, 0x48,
+			0x9f, 0x14, 0x41, 0x89, 0xf5, 0xfa, 0xf0, 0x87,
+			0x37, 0x5f, 0xe3, 0x34, 0xce, 0x90, 0xd1, 0x26,
+			0xa6, 0x59, 0x46, 0xbc, 0x85, 0xff, 0xdc, 0x32,
+			0x10, 0x60, 0xb0, 0x4f, 0x55, 0x5e, 0x73, 0x5c,
+			0x7a, 0x82, 0xa6, 0x33, 0xa8, 0xf8, 0xb5, 0xc7,
+			0x08, 0x22, 0x47, 0x02, 0x66, 0xa8, 0x9d, 0xfc,
+			0xd8, 0x65, 0x35, 0x57, 0xda, 0x61, 0x06, 0x35,
+			0x18, 0xf4, 0xe0, 0x92, 0x2f, 0x7a, 0x24, 0x59,
+			0x5b, 0x79, 0xcf, 0x06, 0x63, 0x14, 0x2a, 0xc7,
+			0x93, 0x36, 0x88, 0x01, 0xdc, 0x1d, 0x13, 0x52,
+			0xf5, 0x89, 0x4c, 0x60, 0xea, 0xdc, 0xdf, 0x38,
+			0x1e, 0xd3, 0x96, 0xd6, 0x6a, 0x80, 0x07, 0x3c,
+			0xd9, 0x60, 0xf7, 0x85, 0xf2, 0xe3, 0x5d, 0xec,
+			0x9d, 0xee, 0x4f, 0x9f, 0x8b, 0x21, 0x28, 0x1b,
+			0x58, 0xa0, 0xc6, 0xd2, 0xa0, 0xfd, 0xa0, 0x6c,
+			0xa6, 0x83, 0xc1, 0x10, 0x48, 0x3c, 0x0d, 0xbd,
+			0x8c, 0x70, 0x82, 0xb6, 0x6f, 0xaa, 0xe3, 0xe8,
+			0x60, 0x8b, 0xcd, 0x07, 0xb9, 0x6a, 0x9c, 0xc6,
+			0xfa, 0x8e, 0x93, 0xe7, 0x78, 0x22, 0xbf, 0x21,
+			0x08, 0x72, 0x27, 0xd7, 0xe9, 0x3e, 0x65, 0x86,
+			0xf4, 0xbb, 0x6f, 0x07, 0xf5, 0x46, 0x22, 0x28,
+			0x16, 0xca, 0x94, 0x21, 0xea, 0x37, 0x3a, 0xf8,
+			0x0c, 0xf9, 0x3a, 0x56, 0x69, 0xeb, 0x5f, 0xe2,
+			0xb1, 0xff, 0xe5, 0x55, 0x51, 0xac, 0x06, 0xe7,
+			0x3c, 0xd6, 0xce, 0x82, 0xfe, 0xe9, 0x2a, 0xe1,
+			0x18, 0x33, 0x29, 0xe3, 0xeb, 0x41, 0x2b, 0xfc,
+			0x80, 0xdb, 0xa9, 0x68, 0xe1, 0x00, 0x66, 0x6b,
+			0x37, 0xc2, 0x69, 0x93, 0xb8, 0xb1, 0x8c, 0x48,
+			0xcd, 0x07, 0x4f, 0x93, 0xbd, 0x40, 0x1c, 0x06,
+			0x6c, 0x46, 0x96, 0xa8, 0x08, 0xa8, 0x2b, 0xe4,
+			0x8e, 0xe5, 0xef, 0x50, 0xbf, 0x59, 0x6d, 0x87,
+			0xa7, 0x0a, 0x7f, 0x6a, 0x71, 0x10, 0x65, 0xe3,
+			0xe5, 0x14, 0xf6, 0x65, 0xb8, 0xc1, 0xc2, 0x8c,
+			0xd8, 0x83, 0xda, 0x8c, 0x1d, 0xd9, 0xb9, 0xdd,
+			0xfe, 0x16, 0xa9, 0x44, 0x1b, 0x00, 0x3a, 0xea,
+			0x37, 0xdc, 0xaf, 0x31, 0x4a, 0xc1, 0xd3, 0x9c,
+			0x5f, 0x50, 0x84, 0x7d, 0x5a, 0x46, 0xb9, 0x90,
+			0xd6, 0xbd, 0xe2, 0x0a, 0xed, 0xec, 0xba, 0xb2,
+			0x00, 0x98, 0x14, 0x37, 0xc5, 0x4e, 0x77, 0x09,
+			0xea, 0xb2, 0xec, 0x6d, 0x5d, 0x89, 0x58, 0xf1,
+			0x4e, 0x18, 0x1c, 0xd7, 0xe7, 0xe8, 0x0a, 0x29,
+			0xce, 0x68, 0x92, 0xa4, 0xac, 0xbe, 0x38, 0xda,
+			0xff, 0xd2, 0x76, 0x87, 0xa3, 0x5f, 0x00, 0xdf,
+			0x97, 0xd6, 0x75, 0xa8, 0xb7, 0xf7, 0xa6, 0xd7,
+			0xf3, 0xbd, 0x31, 0x7e, 0x32, 0xdc, 0x35, 0xf7,
+			0xd0, 0xe3, 0x01, 0xbd, 0x53, 0xcf, 0xd1, 0x32,
+			0x16, 0x41, 0x31, 0x0e, 0xa1, 0xa1, 0x4a, 0xe7,
+			0x93, 0xcb, 0xe1, 0xdd, 0x4b, 0xa2, 0xcf, 0xbf,
+			0x8b, 0xb7, 0x39, 0x17, 0x28, 0xe2, 0xce, 0x7e,
+			0x1b, 0x71, 0x9b, 0xf1, 0xbf, 0xf4, 0xb9, 0xe4,
+			0xf9, 0x02, 0x95, 0x40, 0x7a, 0x11, 0xf8, 0x7f,
+			0x54, 0xd4, 0x80, 0x1c, 0x8d, 0x14, 0xdb, 0xa0,
+			0xc0, 0x5f, 0xc6, 0x49, 0x79, 0x11, 0x5f, 0x8d,
+			0x6c, 0x3b, 0x13, 0x3b, 0x37, 0xdd, 0x9a, 0x4c,
+			0x2f, 0x25, 0x71, 0xdb, 0x94, 0x0f, 0x84, 0x70,
+			0xa1, 0x4e, 0xea, 0x6c, 0xac, 0x50, 0x12, 0x85,
+			0xa5, 0xe4, 0xdf, 0x13, 0x84, 0x94, 0x3d, 0x40,
+			0xbc, 0xac, 0x0f, 0x7d, 0x58, 0x79, 0x00, 0x11,
+			0x29, 0xb2, 0x9e, 0x14, 0x2f, 0x5f, 0xc0, 0x7c,
+			0xe3, 0xf1, 0x96, 0x9d, 0xea, 0xcd, 0x34, 0xf9,
+			0x69, 0x26, 0x98, 0x79, 0xb5, 0x24, 0xa3, 0x63,
+			0x2d, 0xd4, 0xc1, 0x32, 0xe8, 0xec, 0x40, 0x25,
+			0xf5, 0x74, 0xf4, 0x07, 0x48, 0x5d, 0xc7, 0x56,
+			0xc1, 0xde, 0x8d, 0xb5, 0x60, 0x32, 0x72, 0x92,
+			0xc6, 0xe1, 0xcb, 0xb1, 0x5c, 0xab, 0x17, 0xef,
+			0xb7, 0x0c, 0x20, 0x85, 0xe8, 0xdf, 0xa4, 0x69,
+			0xba, 0x9d, 0x90, 0xff, 0x48, 0x51, 0xf1, 0xde,
+			0x7a, 0xdf, 0x2a, 0xac, 0x40, 0x0b, 0xf4, 0x3b,
+			0x61, 0xe2, 0x94, 0xea, 0x75, 0x53, 0x58, 0xe0,
+			0xbd, 0x8f, 0xde, 0xf4, 0x4d, 0x3d, 0x05, 0x78,
+			0xfa, 0x80, 0x6a, 0x6a, 0xd0, 0x8d, 0x3e, 0xb8,
+			0xb4, 0x21, 0x2c, 0x81, 0x89, 0x1b, 0x18, 0x14,
+			0x89, 0xcf, 0xf8, 0x23, 0x1b, 0x8b, 0x17, 0xd1,
+			0x71, 0xea, 0xcd, 0x25, 0x15, 0x72, 0x03, 0x04,
+			0x58, 0x39, 0x9c, 0x94, 0xe1, 0x3d, 0xad, 0x91,
+			0xd9, 0x68, 0x10, 0xbb, 0xbb, 0xe6, 0x7a, 0xb3,
+			0xaf, 0x7b, 0xd9, 0xba, 0x26, 0x0d, 0xd4, 0x78,
+			0x11, 0x14, 0xf5, 0xc0, 0xfb, 0x09, 0xa9, 0xe8,
+			0x8b, 0x09, 0x99, 0x04, 0x05, 0x40, 0xa0, 0x2a,
+			0xfd, 0x2a, 0x36, 0xae, 0x33, 0x79, 0x83, 0xdb,
+			0x8f, 0xfa, 0x85, 0x5c, 0xa7, 0x44, 0xf7, 0x58,
+			0x3e, 0x3b, 0x7b, 0xfd, 0x81, 0xf3, 0xa4, 0xb4,
+			0x6f, 0x1b, 0x08, 0xa5, 0xd9, 0xc1, 0xd9, 0x95,
+			0x50, 0x8a, 0x9e, 0x0f, 0x6a, 0xc5, 0xae, 0x7d,
+			0x21, 0x74, 0x35, 0x5f, 0xfe, 0x4b, 0x8c, 0x9d,
+			0x2a, 0xa3, 0x5f, 0xfe, 0x1e, 0xfb, 0x61, 0x04,
+			0xf7, 0xc2, 0x20, 0x77, 0x4d, 0xa4, 0x30, 0x53,
+			0x17, 0xb3, 0x3d, 0x6c, 0x64, 0xda, 0x2b, 0x49,
+			0x4f, 0x75, 0x78, 0x4d, 0x3f, 0x8d, 0xec, 0x65,
+			0x53, 0x3c, 0x78, 0x93, 0x4e, 0x51, 0x97, 0x19,
+			0xc2, 0x36, 0x2f, 0x9f, 0x1d, 0xf8, 0xe7, 0x41,
+			0xfe, 0xb5, 0xe9, 0xeb, 0x56, 0x95, 0x94, 0x7d,
+			0x7d, 0xea, 0xb8, 0xdc, 0x7e, 0xf6, 0x43, 0xaf,
+			0x37, 0x9b, 0x22, 0x4b, 0x78, 0x38, 0x87, 0x52,
+			0x52, 0x1f, 0x2c, 0x8b, 0x26, 0x5a, 0x5a, 0xd2,
+			0xb3, 0xd8, 0x83, 0xba, 0x42, 0xce, 0xb2, 0x4d,
+			0xf1, 0x8f, 0x2d, 0x0e, 0x82, 0x0d, 0xee, 0xe2,
+			0x0f, 0x4d, 0x7b, 0xc9, 0x97, 0x09, 0xd4, 0x6d,
+			0x4f, 0xaf, 0xcd, 0x65, 0xfb, 0x6d, 0xf2, 0x54,
+			0x02, 0x36, 0x69, 0x92, 0xee, 0xb3, 0x6f, 0x52,
+			0xfa, 0xe7, 0x52, 0xd1, 0xbe, 0xa6, 0xb3, 0x4c,
+			0x6c, 0xbe, 0x65, 0xd2, 0x83, 0x11, 0x9e, 0xa7,
+			0xd2, 0x54, 0x2f, 0x6a, 0x5e, 0x24, 0x3a, 0x27,
+			0x37, 0x9f, 0x6c, 0x87, 0x9e, 0x15, 0x71, 0x34,
+			0x73, 0x8e, 0x68, 0xbe, 0x60, 0xcb, 0x35, 0xbf,
+			0xd1, 0x00, 0xc5, 0xa5, 0xc4, 0xe7, 0x3d, 0xbb,
+			0x1d, 0x24, 0x65, 0x0b, 0x49, 0xdf, 0x8b, 0x18,
+			0x6a, 0xeb, 0x37, 0x7a, 0xd9, 0xc4, 0x16, 0x00,
+			0xfe, 0x99, 0xdf, 0xb8, 0x5d, 0x3c, 0xac, 0x7b,
+			0xc4, 0xe3, 0x7b, 0x09, 0x14, 0x19, 0x43, 0xa8,
+			0x9f, 0x27, 0xb3, 0xd8, 0xbe, 0x11, 0xd6, 0xeb,
+			0xc3, 0x45, 0x60, 0xf7, 0x76, 0x27, 0x96, 0xbe,
+			0x2e, 0x50, 0x17, 0x9f, 0x3c, 0x31, 0x5e, 0xac,
+			0xe8, 0xf1, 0x4f, 0xf5, 0x47, 0x1a, 0xa7, 0xc8,
+			0x37, 0x02, 0xc5, 0xc8, 0x9c, 0xfe, 0xb9, 0x49,
+			0x0b, 0x97, 0x80, 0x22, 0x7a, 0x41, 0xe3, 0x28,
+			0xa8, 0x82, 0xe5, 0xa2, 0x13, 0x97, 0x4e, 0x0f,
+			0x57, 0x6b, 0x6f, 0x12, 0x02, 0x24, 0x63, 0x88,
+			0xda, 0xc7, 0x15, 0xd5, 0x0c, 0xb4, 0x44, 0x2f,
+			0x8c, 0xcb, 0x84, 0x1a, 0x5f, 0x28, 0x47, 0xe7,
+			0xd5, 0xf4, 0x04, 0x71, 0x4a, 0xd6, 0xe2, 0x2c,
+			0x75, 0x87, 0x07, 0xcf, 0x0a, 0x2d, 0x77, 0x95,
+			0x88, 0xbd, 0xeb, 0xa4, 0x10, 0x16, 0xe5, 0x75,
+			0x0c, 0x38, 0x33, 0xe7, 0xf9, 0x09, 0x2a, 0x3e,
+			0xcc, 0x0e, 0x1b, 0x6c, 0xa0, 0xd9, 0xc6, 0x7c,
+			0xb8, 0x8e, 0xfa, 0xdd, 0xe8, 0xbe, 0x2c, 0xbf,
+			0x51, 0xd3, 0x1c, 0xe1, 0x87, 0xf5, 0xbf, 0x20,
+			0x6f, 0x62, 0xc9, 0xbd, 0x55, 0x0f, 0xa1, 0xdd,
+			0xdf, 0x7a, 0x0d, 0x7d, 0x1c, 0x39, 0x59, 0x1e,
+			0x94, 0x4e, 0x43, 0x5e, 0xb8, 0x0f, 0xcb, 0x0d,
+			0x1d, 0x49, 0x05, 0x20, 0x63, 0x65, 0x5c, 0xe6,
+			0x37, 0x68, 0x0f, 0xd7, 0x0b, 0xf4, 0xaf, 0xab,
+			0xc9, 0xce, 0x54, 0xee, 0xbf, 0xb2, 0xbd, 0x36,
+			0x44, 0x40, 0x36, 0xcd, 0x8d, 0x26, 0xe5, 0xc5,
+			0x5a, 0xbb, 0xd3, 0x94, 0xa3, 0x41, 0x2f, 0x0d,
+			0xd5, 0x22, 0x8a, 0x1f, 0x61, 0xc6, 0x07, 0xd9,
+			0xae, 0x45, 0x8d, 0x24, 0x16, 0xae, 0x93, 0x9b,
+			0xc2, 0x92, 0xd4, 0x72, 0x69, 0x98, 0x22, 0xbb,
+			0x4a, 0x00, 0xdf, 0xf0, 0xbb, 0x01, 0xba, 0xbd,
+			0x27, 0x90, 0xa1, 0x7e, 0x90, 0x5e, 0xd9, 0xaf,
+			0x9b, 0x48, 0xe5, 0x42, 0x70, 0xc4, 0x5b, 0x31,
+			0x56, 0x12, 0xf5, 0xb6, 0x14, 0x1d, 0x53, 0xce,
+			0xc2, 0x57, 0x62, 0xdd, 0xe6, 0x28, 0x42, 0x97,
+			0x67, 0xbf, 0xa6, 0x56, 0x8a, 0xa4, 0xa8, 0x90,
+			0x86, 0x61, 0x88, 0x21, 0x64, 0x1d, 0x3f, 0xc7,
+			0x9c, 0x44, 0xe2, 0x96, 0xa8, 0x3a, 0x4d, 0xfc,
+			0xfc, 0x0b, 0xd8, 0x7a, 0x97, 0x81, 0x05, 0x75,
+			0x72, 0xf1, 0xee, 0xcd, 0x21, 0x67, 0x54, 0x2d,
+			0x1a, 0xc5, 0x6a, 0x51, 0x14, 0xf9, 0x12, 0x59,
+			0x33, 0x5b, 0xf7, 0x3c, 0x5b, 0xca, 0x37, 0xb6,
+			0xa9, 0xcb, 0x6f, 0x2e, 0xfa, 0x24, 0x16, 0x3c,
+			0xd9, 0xfe, 0x3b, 0x5e, 0xc2, 0x38, 0x19, 0x4f,
+			0xcb, 0x33, 0x88, 0x7d, 0x33, 0xf4, 0x1b, 0x0d,
+			0xb3, 0xf8, 0xa2, 0xca, 0x88, 0xdc, 0x58, 0x87,
+			0x11, 0x21, 0x3d, 0xb7, 0x47, 0x20, 0x56, 0x8f,
+			0x4c, 0x54, 0xec, 0xa4, 0x09, 0x65, 0x47, 0xe4,
+			0x7f, 0x4e, 0x19, 0xdc, 0x4e, 0x4a, 0x81, 0x51,
+			0xb8, 0x5c, 0x7b, 0x2f, 0x33, 0xdd, 0xb9, 0x2b,
+			0x13, 0xa4, 0xc4, 0x11, 0xb0, 0x35, 0x74, 0x9f,
+			0xea, 0x06, 0xce, 0xe9, 0xec, 0x69, 0x0d, 0x7e,
+			0xf5, 0x10, 0x82, 0x10, 0xcf, 0xbd, 0xa8, 0x7f,
+			0xe5, 0x50, 0x05, 0x61, 0x30, 0x96, 0x99, 0xee,
+			0x62, 0xcd, 0x9c, 0x15, 0x2e, 0x0f, 0xee, 0x80,
+			0x37, 0x87, 0x9b, 0xd7, 0x64, 0x04, 0xa6, 0x66,
+			0x85, 0xf8, 0xc5, 0xed, 0xe0, 0x2c, 0x7c, 0x26,
+			0x4d, 0x69, 0x91, 0xe4, 0xcd, 0x44, 0xd2, 0xda,
+			0x27, 0x91, 0x33, 0xea, 0xf8, 0xe0, 0xae, 0x46,
+			0x44, 0x47, 0x10, 0xd4, 0x83, 0x55, 0x2c, 0x37,
+			0x92, 0xce, 0x16, 0x89, 0x2f, 0x1d, 0x1a, 0xa2,
+			0xb9, 0x41, 0xe0, 0xce, 0x16, 0xce, 0x4a, 0x18,
+			0x1a, 0x5f, 0x97, 0xd7, 0x3f, 0x2f, 0x4c, 0x07,
+			0xf8, 0xcf, 0x03, 0x26, 0x2a, 0x00, 0xa3, 0xe4,
+			0x28, 0x45, 0x68, 0x8c, 0x6c, 0x98, 0xa8, 0x96,
+			0x09, 0x08, 0x99, 0x34, 0xec, 0x2e, 0x29, 0x1a,
+			0xe5, 0x97, 0x37, 0x8d, 0x43, 0x9f, 0x2f, 0xfa,
+			0x75, 0xb5, 0x6c, 0xa9, 0x88, 0x77, 0x5e, 0x57,
+			0x4d, 0x07, 0x50, 0x4d, 0xb8, 0x32, 0x9f, 0xbd,
+			0x6f, 0x59, 0xb1, 0x46, 0x83, 0xef, 0xff, 0x63,
+			0xdc, 0x03, 0x49, 0x17, 0xb8, 0x29, 0x32, 0xbf,
+			0xc8, 0x71, 0x61, 0xba, 0x8e, 0x35, 0x2d, 0xce,
+			0xf4, 0x75, 0x77, 0xe6, 0xab, 0xaf, 0x9c, 0xc5,
+			0xd7, 0x4e, 0xb9, 0xfa, 0x53, 0x1b, 0x9a, 0xe7,
+			0x52, 0xb6, 0x4f, 0x9a, 0x1d, 0xe9, 0x10, 0x0a,
+			0x79, 0xd2, 0xae, 0xb1, 0x61, 0xa3, 0x80, 0x48,
+			0x36, 0x4e, 0xc7, 0x47, 0x4a, 0x8d, 0x66, 0x8d,
+			0xf1, 0x06, 0xb9, 0x23, 0x27, 0x4b, 0xdf, 0x36,
+			0x9f, 0xb8, 0x2a, 0x62, 0xf1, 0x65, 0x65, 0x4d,
+			0xa1, 0x5b, 0xaf, 0x0c, 0x0f, 0xb3, 0x9c, 0xc5,
+			0x46, 0xff, 0xab, 0x46, 0x80, 0x88, 0xc0, 0x2e,
+			0x64, 0xcd, 0x1f, 0x60, 0x3d, 0x52, 0xdf, 0x36,
+			0x49, 0x14, 0x6c, 0x8e, 0x0a, 0x11, 0x41, 0x3c,
+			0x93, 0x01, 0xe5, 0xf5, 0x46, 0xca, 0x3e, 0x9b,
+			0xf8, 0xa3, 0x42, 0xfe, 0x2b, 0x0b, 0xf5, 0xdc,
+			0x8d, 0x64, 0x02, 0xd7, 0x27, 0xb9, 0x90, 0xec,
+			0x4d, 0xa7, 0x13, 0xc5, 0x92, 0xb8, 0x8b, 0x9b,
+			0x7e, 0xc4, 0x3f, 0x25, 0x3d, 0x56, 0xf6, 0x6e,
+			0xdc, 0xae, 0xc6, 0xb5, 0x7a, 0x6e, 0x8c, 0x45,
+			0x92, 0xbc, 0x88, 0x17, 0x45, 0xd5, 0x35, 0x96,
+			0x10, 0xec, 0xaf, 0x61, 0x45, 0xe9, 0x71, 0x26,
+			0xd2, 0xf4, 0xb4, 0xe6, 0x11, 0x25, 0xf8, 0x8b,
+			0xe1, 0x6d, 0xb0, 0x05, 0x52, 0x53, 0x96, 0xba,
+			0x61, 0x9b, 0x94, 0x49, 0xf7, 0x03, 0xa7, 0x1a,
+			0x85, 0x10, 0x8e, 0x93, 0xb9, 0xf4, 0xad, 0x0d,
+			0x15, 0x0c, 0x58, 0xa3, 0xea, 0xab, 0x17, 0xbd,
+			0xbd, 0x88, 0x38, 0x61, 0x73, 0x41, 0xa1, 0xc2,
+			0x7d, 0x15, 0x8c, 0x2d, 0x6b, 0xb5, 0x19, 0x63,
+			0x46, 0xb7, 0xc3, 0xf7, 0x62, 0x39, 0xd0, 0xbb,
+			0x1a, 0x7a, 0xc4, 0x12, 0x11, 0x0f, 0x96, 0xd0,
+			0x03, 0x96, 0x8a, 0x8f, 0x83, 0xc8, 0xad, 0xb8,
+			0x12, 0x5c, 0xdd, 0xb3, 0xed, 0xc5, 0x55, 0x92,
+			0x67, 0xef, 0xf8, 0xdc, 0xfa, 0x60, 0xe2, 0xae,
+			0x4b, 0x52, 0xce, 0xbc, 0x97, 0x0c, 0x18, 0xbe,
+			0xc3, 0x11, 0xa3, 0xaa, 0x29, 0xe7, 0xfc, 0xf4,
+			0x8a, 0x34, 0x49, 0x14, 0x04, 0x29, 0xa2, 0xb1,
+			0xe4, 0xf1, 0x38, 0x3c, 0xb0, 0x1f, 0x08, 0x97,
+			0xbd, 0xe1, 0xf4, 0x8e, 0xd8, 0x57, 0x3d, 0x95,
+			0x38, 0x45, 0x21, 0x74, 0xa2, 0xd4, 0x56, 0xdb,
+			0x0e, 0x11, 0xc9, 0x11, 0x6c, 0x67, 0x5b, 0xa4,
+			0xa6, 0x4a, 0x65, 0x78, 0xdb, 0xc3, 0x44, 0x10,
+			0x40, 0x3f, 0xc3, 0xbf, 0x5d, 0xbf, 0xb1, 0x86,
+			0xfe, 0xb5, 0xc9, 0x36, 0xcf, 0x3a, 0xc4, 0x04,
+			0xbe, 0x05, 0x11, 0xb4, 0x54, 0x03, 0x5c, 0x72,
+			0xcf, 0x1a, 0xbf, 0x3a, 0x02, 0xfd, 0x9d, 0xfa,
+			0xe8, 0xa4, 0x8e, 0x69, 0x03, 0x96, 0x3e, 0x89,
+			0xc4, 0x41, 0x13, 0x95, 0x45, 0x6e, 0xc1, 0xb6,
+			0x8a, 0xdd, 0x0c, 0x6d, 0xc9, 0x6f, 0xd3, 0x4e,
+			0xb3, 0xd0, 0x94, 0x93, 0x90, 0x08, 0x8e, 0x23,
+			0x64, 0x96, 0x59, 0x63, 0x8d, 0x82, 0x3a, 0x8c,
+			0x24, 0xc5, 0x4f, 0x6b, 0x32, 0xa3, 0x3c, 0x6c,
+			0x2c, 0x70, 0xbc, 0x9a, 0x57, 0x57, 0x1b, 0x18,
+			0x57, 0x91, 0xb3, 0xc4, 0xc9, 0x12, 0x76, 0xb0,
+			0x2c, 0x10, 0xa2, 0xe4, 0xd2, 0xdd, 0x96, 0x99,
+			0x15, 0x81, 0xa6, 0xe7, 0xe6, 0x58, 0x83, 0xcb,
+			0xc0, 0xa1, 0x71, 0xdb, 0x67, 0x41, 0xda, 0x58,
+			0x8b, 0x90, 0x5d, 0x32, 0xa7, 0x6d, 0x98, 0x9a,
+			0x72, 0x9c, 0x17, 0x07, 0x38, 0xc6, 0xad, 0x38,
+			0x28, 0x56, 0x73, 0x95, 0x70, 0x6b, 0xad, 0x66,
+			0xc5, 0x91, 0x5b, 0x0c, 0x82, 0x82, 0xaf, 0x4d,
+			0xf8, 0xba, 0x3f, 0xd1, 0x03, 0xc4, 0x0c, 0x10,
+			0xa3, 0xc0, 0x85, 0x15, 0xdd, 0x46, 0xe0, 0x12,
+			0xb0, 0xb6, 0x40, 0x9e, 0x92, 0x38, 0xfd, 0x7e,
+			0xa3, 0x87, 0xb1, 0x04, 0x08, 0x3c, 0x24, 0xc8,
+			0xac, 0xa2, 0x5a, 0xb4, 0x28, 0xd6, 0xc2, 0xad,
+			0x2e, 0xa8, 0x2d, 0xc7, 0x40, 0xb1, 0x0d, 0x1f,
+			0xfd, 0xbe, 0x7e, 0x60, 0x49, 0xf5, 0x20, 0x4d,
+			0x23, 0xfd, 0x07, 0x22, 0x04, 0xbf, 0x44, 0xfd,
+			0x98, 0x99, 0x4d, 0x58, 0xc8, 0x21, 0x7d, 0x59,
+			0x46, 0xd0, 0x9c, 0x97, 0x59, 0x4f, 0x0a, 0x84,
+			0xc7, 0x2c, 0x89, 0x84, 0x9e, 0x9a, 0x1e, 0xc7,
+			0xc1, 0x31, 0x5c, 0x68, 0xf2, 0x80, 0x7f, 0xf6,
+			0xb9, 0x4e, 0x14, 0xb8, 0xf9, 0xa3, 0xf8, 0x26,
+			0xc4, 0xf4, 0xad, 0xdd, 0xaf, 0x3b, 0xd5, 0xc6,
+			0xd2, 0x05, 0xe2, 0xdf, 0xb8, 0x2b, 0x91, 0x26,
+			0x3c, 0x10, 0xbc, 0x0c, 0x37, 0x51, 0x9b, 0x29,
+			0x1e, 0x3d, 0x99, 0x6e, 0xa5, 0x8e, 0xcc, 0xd4,
+			0x59, 0x25, 0xc4, 0xcb, 0x5c, 0xef, 0xbb, 0x25,
+			0x5b, 0x79, 0xa3, 0x32, 0x4c, 0xbd, 0x1f, 0xaa,
+			0x2b, 0x5a, 0xc7, 0x65, 0x54, 0x1d, 0x13, 0xad,
+			0x9f, 0xae, 0x13, 0x29, 0xb5, 0x8e, 0x30, 0x57,
+			0xef, 0xb6, 0x9d, 0x5b, 0x66, 0xeb, 0xaf, 0x49,
+			0x6a, 0xc0, 0x56, 0xf9, 0x76, 0x94, 0xc5, 0x91,
+			0xbf, 0x20, 0xd7, 0x8d, 0x66, 0x7f, 0xe4, 0x63,
+			0x60, 0x93, 0x47, 0x3f, 0x60, 0x06, 0xe5, 0x93,
+			0xbd, 0x2b, 0xc4, 0x8e, 0x22, 0xe8, 0xba, 0x49,
+			0x2d, 0x19, 0xad, 0x87, 0x69, 0x7b, 0x20, 0x6f,
+			0x66, 0x5c, 0x11, 0x30, 0xeb, 0xc1, 0x6e, 0x15,
+			0x5f, 0x60, 0x67, 0xb9, 0x80, 0xbb, 0x07, 0x95,
+			0xf9, 0x6d, 0x30, 0x4b, 0x7a, 0x59, 0xd1, 0x99,
+			0x11, 0x6c, 0x0d, 0x92, 0x81, 0x8e, 0xe3, 0xcb,
+			0x72, 0x3f, 0x4e, 0x37, 0x89, 0x8f, 0xff, 0x72,
+			0xc5, 0x3d, 0x27, 0x41, 0x2c, 0xc4, 0x74, 0xd2,
+			0x39, 0xe7, 0x95, 0xf4, 0xf7, 0xac, 0xcc, 0x76,
+			0x6e, 0x55, 0xe0, 0x98, 0x98, 0x64, 0xde, 0xdf,
+			0xa2, 0x70, 0x07, 0x4c, 0x69, 0x5a, 0xe4, 0xec,
+			0x88, 0x51, 0xd3, 0x2f, 0xba, 0x49, 0x2c, 0x70,
+			0x55, 0x68, 0x90, 0x6c, 0x83, 0xb3, 0xfe, 0xf0,
+			0xe8, 0x6d, 0x30, 0x60, 0x74, 0x70, 0x96, 0xa7,
+			0xce, 0x4c, 0x61, 0x36, 0xfa, 0x3e, 0x07, 0x1f,
+			0x49, 0xe9, 0x50, 0xea, 0x1f, 0xf2, 0x6c, 0x6c,
+			0x87, 0xa7, 0x4f, 0x2e, 0x1b, 0x3d, 0x26, 0xde,
+			0x3a, 0x2f, 0xda, 0x7b, 0x1c, 0x6c, 0x1f, 0x37,
+			0xd1, 0xdd, 0x58, 0xb4, 0xe1, 0x45, 0x9e, 0xbb,
+			0xe8, 0xae, 0xed, 0xa1, 0x4b, 0x83, 0x50, 0xfe,
+			0x98, 0xb7, 0xc1, 0x7e, 0x50, 0x03, 0xc4, 0xae,
+			0x4c, 0x07, 0x82, 0xc3, 0x59, 0x94, 0x58, 0x45,
+			0x6a, 0xf8, 0xd4, 0x20, 0xf2, 0x39, 0xf4, 0xb3,
+			0x34, 0xab, 0xb0, 0xc3, 0x73, 0xc6, 0xd9, 0x7f,
+			0x1c, 0x13, 0xe1, 0x18, 0x23, 0xa5, 0xff, 0x53,
+			0xe7, 0x71, 0x79, 0xe3, 0x66, 0xc3, 0x5b, 0xe4,
+			0x07, 0xf4, 0x1f, 0xe6, 0xd4, 0x9d, 0xb9, 0x42,
+			0x4e, 0xce, 0x91, 0x94, 0x69, 0xea, 0xa7, 0x79,
+			0x70, 0x84, 0x8a, 0x2d, 0xe7, 0x61, 0xca, 0x1f,
+			0xf0, 0x8d, 0x88, 0x7c, 0x15, 0xa9, 0x30, 0x38,
+			0x86, 0x0b, 0x49, 0x1c, 0xf3, 0x92, 0xfd, 0xa8,
+			0xf6, 0x91, 0x1f, 0x42, 0x95, 0x9b, 0x29, 0xdc,
+			0x35, 0x2c, 0xf8, 0xc9, 0xf1, 0x77, 0x60, 0xe3,
+			0x0a, 0x7b, 0xa5, 0x21, 0xff, 0xb2, 0x93, 0x45,
+			0x50, 0xf2, 0xb9, 0xce, 0xd4, 0xbd, 0x68, 0x82,
+			0x31, 0xea, 0xa8, 0x7b, 0x4e, 0x0b, 0x12, 0x1d,
+			0x07, 0x97, 0x91, 0xb2, 0xb7, 0x6e, 0xeb, 0x76,
+			0xf5, 0x3b, 0x1a, 0xa4, 0x79, 0x83, 0x80, 0xfc,
+			0x0f, 0x80, 0x73, 0xfd, 0x54, 0x2c, 0xa6, 0x14,
+			0xb8, 0xad, 0xdd, 0x2c, 0x84, 0xf7, 0xd9, 0xf1,
+			0x6f, 0x74, 0x2c, 0xe7, 0xe7, 0xfa, 0x16, 0x03,
+			0x3e, 0xe5, 0xa3, 0x69, 0x59, 0x3c, 0x16, 0x59,
+			0x00, 0xa2, 0x8a, 0xa4, 0x37, 0x06, 0xbe, 0x10,
+			0xef, 0x24, 0xec, 0x06, 0x84, 0xb6, 0xd2, 0x23,
+			0xa8, 0x00, 0x10, 0x06, 0x80, 0xdd, 0x6a, 0xb7,
+			0x21, 0x50, 0xae, 0xf0, 0x51, 0xba, 0x5b, 0x29,
+			0xe0, 0x8f, 0xb0, 0x11, 0x11, 0x47, 0x79, 0x47,
+			0x66, 0x42, 0x44, 0x8e, 0x00, 0x6c, 0x13, 0x7f,
+			0xcc, 0xff, 0xa1, 0xcb, 0x36, 0xf6, 0x2d, 0x09,
+			0x72, 0x45, 0x81, 0xce, 0xf6, 0x84, 0xff, 0x51,
+			0xf3, 0x7b, 0x4b, 0x44, 0xcb, 0xeb, 0xec, 0xbd,
+			0x2d, 0xee, 0xe6, 0x71, 0x6f, 0x8a, 0xa4, 0x2b,
+			0x28, 0xdf, 0x15, 0xa5, 0xfc, 0xce, 0xfe, 0x95,
+			0x2d, 0xda, 0x17, 0x40, 0x0c, 0xce, 0xad, 0x53,
+			0xb1, 0x18, 0x7b, 0x26, 0x85, 0x82, 0xce, 0x77,
+			0x44, 0x2c, 0x4f, 0x78, 0xdd, 0x1c, 0x5b, 0xd0,
+			0x0e, 0xe9, 0x9b, 0xf2, 0xa2, 0x25, 0xeb, 0x74,
+			0x90, 0x62, 0x7a, 0x43, 0xe4, 0x91, 0xf8, 0xad,
+			0x52, 0xbd, 0xbe, 0xec, 0x83, 0x06, 0x5a, 0x4b,
+			0x2b, 0x06, 0x6e, 0x3a, 0xc6, 0xec, 0x60, 0x0e,
+			0x0a, 0x86, 0xbf, 0x69, 0x21, 0x74, 0x5a, 0xd2,
+			0xbf, 0x79, 0x3b, 0xd4, 0x17, 0xc4, 0x94, 0x25,
+			0xed, 0x6c, 0xec, 0x2a, 0xeb, 0x3f, 0xf9, 0x3a,
+			0xba, 0xf4, 0x4d, 0xda, 0xfc, 0x6e, 0x46, 0x93,
+			0xd7, 0x24, 0x2f, 0xb2, 0xec, 0xbb, 0x2f, 0x16,
+			0x7a, 0xee, 0x2a, 0xcf, 0xf6, 0x2e, 0xf5, 0x5f,
+			0xb1, 0x79, 0xdf, 0xc1, 0x46, 0xb1, 0xc0, 0x60,
+			0x65, 0x88, 0x96, 0x75, 0x5e, 0xfd, 0x29, 0xe4,
+			0xf0, 0x01, 0x9d, 0xcd, 0x8f, 0xf8, 0x16, 0xb4,
+			0xfd, 0x6f, 0x27, 0x6b, 0xf9, 0x3c, 0x18, 0xb6,
+			0x94, 0x67, 0xb4, 0x4c, 0x29, 0x53, 0xa3, 0x83,
+			0xa2, 0x44, 0x4b, 0xfd, 0x1d, 0xc3, 0xe4, 0xe0,
+			0x5c, 0x3c, 0x45, 0x25, 0x02, 0x68, 0x67, 0xdc,
+			0x84, 0x92, 0x1b, 0x5b, 0x42, 0xf7, 0x19, 0x6d,
+			0xbc, 0x3e, 0x0f, 0x9d, 0xe4, 0xf2, 0x2d, 0x48,
+			0xc3, 0xc4, 0x8c, 0xa7, 0x58, 0x2f, 0x55, 0xdd,
+			0x37, 0x22, 0x2c, 0x34, 0xba, 0x5c, 0x48, 0x7a,
+			0x05, 0x5b, 0x75, 0x62, 0x74, 0x17, 0x1d, 0xec,
+			0xd3, 0x61, 0x6f, 0xbc, 0x31, 0x49, 0x9b, 0xc1,
+			0x6e, 0x53, 0x8e, 0xf3, 0xea, 0x00, 0x7f, 0xad,
+			0xe9, 0xd2, 0xb1, 0x3e, 0x92, 0x9e, 0x72, 0xe9,
+			0x09, 0xfe, 0x61, 0x82, 0x75, 0x41, 0xc4, 0x9e,
+			0xe9, 0x81, 0x7b, 0xe4, 0x60, 0x4e, 0x2d, 0xf5,
+			0xb6, 0x71, 0x43, 0x15, 0x43, 0x33, 0x34, 0x3e,
+			0x7d, 0x8f, 0xb5, 0xc9, 0xe7, 0x13, 0xdc, 0x95,
+			0xf1, 0x18, 0x43, 0x83, 0x68, 0x3b, 0x2c, 0x11,
+			0xc2, 0x75, 0x34, 0x44, 0x96, 0x70, 0x5e, 0xfc,
+			0x95, 0x10, 0x06, 0xe9, 0xff, 0xd8, 0x4f, 0x51,
+			0x39, 0x9e, 0xb8, 0x00, 0x1c, 0x07, 0x9f, 0x83,
+			0xfe, 0x3f, 0x3b, 0xcb, 0xda, 0xfe, 0xbe, 0x61,
+			0xe8, 0xa9, 0x13, 0xf5, 0x0f, 0xcf, 0x69, 0xf1,
+			0xc2, 0xcf, 0xf2, 0x2f, 0xe9, 0x06, 0x3b, 0x75,
+			0x1e, 0xd2, 0x01, 0x85, 0x1b, 0xa3, 0x44, 0x55,
+			0x4c, 0x79, 0x23, 0xeb, 0x69, 0xa2, 0x3d, 0x30,
+			0x45, 0xd8, 0xc5, 0x95, 0xfb, 0xe8, 0x86, 0x36,
+			0x67, 0xb5, 0x8c, 0x81, 0x1d, 0x39, 0xfe, 0x0e,
+			0x4d, 0x53, 0xaf, 0x06, 0x7a, 0x14, 0xcc, 0xf0,
+			0xba, 0x04, 0xf8, 0x43, 0x07, 0x19, 0xc0, 0x2e,
+			0xd6, 0x61, 0xb8, 0xf5, 0x4c, 0x2f, 0x49, 0x27,
+			0x70, 0xd1, 0x14, 0xa3, 0xbc, 0x5f, 0xdd, 0x15,
+			0x52, 0x0e, 0x6f, 0x4f, 0xbe, 0x8a, 0x6d, 0xf7,
+			0x44, 0x6a, 0x52, 0x76, 0xb7, 0xb3, 0x7e, 0x3c,
+			0xd7, 0x3a, 0x44, 0xf3, 0x0c, 0x87, 0xa4, 0x85,
+			0x19, 0x96, 0xbd, 0x84, 0x60, 0x05, 0x3b, 0x8f,
+			0x2d, 0xfa, 0x1c, 0x2e, 0xae, 0x43, 0xca, 0xca,
+			0x9a, 0x9f, 0xd5, 0x82, 0xa2, 0x15, 0x86, 0xad,
+			0xc7, 0x88, 0xc6, 0x8a, 0x1f, 0xdd, 0xac, 0x12,
+			0x82, 0x73, 0x06, 0x01, 0xf2, 0x8a, 0x81, 0xeb,
+			0x00, 0x05, 0x77, 0xbd, 0xea, 0xf5, 0x25, 0xc6,
+			0x1d, 0xce, 0xac, 0xa9, 0x5d, 0x16, 0xa0, 0x17,
+			0xbb, 0x46, 0xde, 0x15, 0x2c, 0xfa, 0x8b, 0xf7,
+			0x73, 0xa6, 0x5c, 0x93, 0x2f, 0xa4, 0x05, 0x1a,
+			0x2b, 0x44, 0xe3, 0x28, 0xab, 0xfc, 0x14, 0x31,
+			0xcd, 0xae, 0x9b, 0xed, 0xa5, 0xe6, 0x07, 0x24,
+			0x22, 0xdf, 0xdd, 0x42, 0x61, 0x46, 0x2c, 0x54,
+			0x5f, 0x35, 0x72, 0x76, 0xa7, 0xda, 0x3d, 0xff,
+			0x93, 0x1b, 0x89, 0x4d, 0xe4, 0x49, 0xa5, 0xaa,
+			0xd4, 0x59, 0x16, 0xfe, 0xd6, 0xf6, 0x12, 0xc5,
+			0x96, 0x1a, 0x3d, 0x3b, 0x12, 0xac, 0x5f, 0x40,
+			0xaa, 0x42, 0x7f, 0x8f, 0x24, 0xa3, 0x70, 0x10,
+			0x03, 0x68, 0x73, 0x2e, 0x20, 0x04, 0x63, 0xdb,
+			0x08, 0xce, 0x22, 0x17, 0x49, 0xf7, 0x43, 0xf1,
+			0x20, 0x23, 0x2b, 0x5b, 0x50, 0x09, 0x22, 0xfa,
+			0x38, 0x70, 0x32, 0x08, 0x0e, 0xda, 0xf2, 0xcc,
+			0xef, 0x9f, 0xe0, 0x4f, 0x4f, 0x6c, 0x8f, 0x76,
+			0x42, 0x6f, 0x91, 0xa1, 0xdb, 0x34, 0xcd, 0xa6,
+			0x45, 0xab, 0x85, 0x3f, 0xf6, 0x5f, 0xa8, 0x73,
+			0x21, 0x58, 0x7b, 0x5b, 0xa3, 0xcc, 0x0b, 0x1f,
+			0x69, 0x64, 0x1d, 0x5e, 0x13, 0x6d, 0x35, 0x27,
+			0x02, 0x99, 0xce, 0x64, 0x0c, 0x13, 0xaf, 0x10,
+			0x91, 0x46, 0x0e, 0x9c, 0x8e, 0xb8, 0x4f, 0x25,
+			0x50, 0x90, 0xd0, 0x16, 0x41, 0xc6, 0x02, 0xec,
+			0x82, 0x47, 0xf4, 0xa0, 0x71, 0x72, 0xcd, 0xf0,
+			0x7a, 0x3e, 0x60, 0x14, 0xe3, 0x0a, 0x8a, 0xe5,
+			0xe6, 0x1c, 0x32, 0x48, 0xb3, 0x77, 0xb5, 0x0d,
+			0x50, 0xbc, 0x98, 0xcd, 0xb9, 0xd2, 0xb0, 0xc8,
+			0x7a, 0x7b, 0xd3, 0xb6, 0x69, 0xaa, 0x6e, 0xc2,
+			0x22, 0x7d, 0x2a, 0xbd, 0x3a, 0xfc, 0x11, 0x3f,
+			0xdd, 0x3e, 0x49, 0xfe, 0xe7, 0x49, 0x6b, 0x5b,
+			0x95, 0x35, 0xf9, 0xa1, 0x39, 0x66, 0x85, 0xe0,
+			0x14, 0x91, 0x1f, 0xdc, 0x19, 0x65, 0x35, 0x3c,
+			0xdf, 0x5e, 0xf2, 0x5e, 0xad, 0x49, 0x67, 0x16,
+			0xbd, 0x3b, 0x4a, 0xdb, 0x44, 0xb8, 0xaf, 0xff,
+			0x4e, 0x88, 0x5c, 0x42, 0x40, 0xfc, 0x2c, 0xaf,
+			0xb1, 0xc4, 0x58, 0x97, 0xf6, 0xeb, 0xaf, 0x1c,
+			0xac, 0xfe, 0x91, 0xcd, 0x5d, 0xa1, 0x8f, 0x24,
+			0x8f, 0x02, 0x3c, 0xea, 0x48, 0x0b, 0xb4, 0x95,
+			0x45, 0xf7, 0xc7, 0xbc, 0x2a, 0x6a, 0x99, 0xd2,
+			0x0f, 0xed, 0x70, 0xe6, 0xbb, 0x95, 0x8d, 0x08,
+			0x65, 0x8b, 0xe0, 0x19, 0xd2, 0x61, 0x68, 0xe3,
+			0x88, 0x67, 0xd5, 0x89, 0x97, 0xd0, 0x16, 0x3d,
+			0xa5, 0x8f, 0xfc, 0x06, 0xa3, 0xd8, 0xa0, 0x88,
+			0xc0, 0x5c, 0xf9, 0x03, 0xd3, 0x64, 0x2c, 0xf0,
+			0xb7, 0x63, 0x3c, 0xfb, 0xdc, 0x9a, 0x19, 0x35,
+			0x2f, 0x8b, 0xe8, 0x3e, 0x7b, 0xd4, 0x90, 0xd7,
+			0x18, 0xbb, 0x62, 0xaa, 0x90, 0x54, 0xbe, 0x95,
+			0xbc, 0x29, 0x9f, 0xf2, 0xca, 0x62, 0x0f, 0xfa,
+			0x8d, 0xe7, 0x7c, 0xad, 0x3e, 0xe5, 0x6c, 0xa9,
+			0x7f, 0xa7, 0xd4, 0xeb, 0x87, 0x05, 0xe3, 0xd8,
+			0xa4, 0x66, 0x0a, 0xc9, 0x0e, 0x61, 0x47, 0xaf,
+			0x86, 0x50, 0x61, 0x41, 0x23, 0x35, 0x59, 0x41,
+			0x17, 0xa2, 0xe7, 0x33, 0x6e, 0x8b, 0x4d, 0x10,
+			0x83, 0x70, 0xaa, 0xbd, 0x66, 0x2f, 0x71, 0x5e,
+			0x8e, 0x15, 0x5b, 0x50, 0x8c, 0x0e, 0x77, 0xd4,
+			0x66, 0x34, 0x4a, 0x3b, 0x6d, 0x6e, 0x1a, 0x28,
+			0xcf, 0x8d, 0x4b, 0x8a, 0xba, 0x19, 0xfe, 0xb3,
+			0xbe, 0x8b, 0x11, 0x98, 0xa3, 0x8e, 0x00, 0x5a,
+			0x9b, 0x0e, 0x57, 0x42, 0x9d, 0xd8, 0x8a, 0x61,
+			0xd8, 0x2d, 0x74, 0x7e, 0xdb, 0x49, 0xe0, 0x33,
+			0xaa, 0xe5, 0xc7, 0x1a, 0x5e, 0x82, 0x8b, 0x09,
+			0x2c, 0xc1, 0xeb, 0x12, 0x20, 0xb3, 0xc4, 0x7b,
+			0x6b, 0xbb, 0xb6, 0x70, 0x29, 0x01, 0x7e, 0x36,
+			0xf6, 0x8c, 0x6a, 0xc9, 0x5d, 0x34, 0x00, 0xec,
+			0x4d, 0x5b, 0x32, 0xdb, 0xe8, 0xda, 0x87, 0x66,
+			0xe3, 0x17, 0xd2, 0x9a, 0x85, 0x87, 0xc7, 0x1d,
+			0xfd, 0x14, 0x99, 0xdc, 0xa1, 0xa1, 0xef, 0xa4,
+			0xae, 0x7e, 0x4d, 0xa4, 0xd1, 0x13, 0x03, 0x85,
+			0x21, 0xe6, 0x55, 0xef, 0xec, 0xf4, 0x88, 0xe5,
+			0x13, 0x81, 0x88, 0xcd, 0xd5, 0x68, 0xd4, 0x76,
+			0x0c, 0x64, 0x0a, 0x42, 0xc1, 0x16, 0x70, 0x00,
+			0x6b, 0xec, 0x32, 0x14, 0xab, 0xa2, 0x4b, 0x19,
+			0x9f, 0xde, 0x8a, 0xa6, 0x92, 0x95, 0x97, 0x4a,
+			0x72, 0x3d, 0x8f, 0x9d, 0x1b, 0x15, 0x2e, 0x06,
+			0x94, 0x65, 0xc3, 0x00, 0xf9, 0xe7, 0x32, 0x41,
+			0x54, 0xdd, 0x35, 0xf1, 0x0a, 0x63, 0xc9, 0xfd,
+			0x38, 0x1e, 0xa0, 0x17, 0xa2, 0xbb, 0x7b, 0xc0,
+			0x08, 0xd1, 0xdd, 0x76, 0x8d, 0xb4, 0x98, 0x28,
+			0xf2, 0x5e, 0xe4, 0x8f, 0xcd, 0xcb, 0x72, 0x5c,
+			0x8b, 0x2f, 0x73, 0x09, 0x88, 0x92, 0x91, 0xf1,
+			0xb7, 0x68, 0xb1, 0xec, 0xa8, 0xc3, 0x64, 0x2e,
+			0x15, 0x6f, 0x02, 0x37, 0x59, 0x47, 0x38, 0x62,
+			0x2c, 0x17, 0xdb, 0x1e, 0xa7, 0xb8, 0x10, 0xb2,
+			0x2b, 0x63, 0x85, 0x0b, 0x5c, 0xcb, 0x6f, 0xb4,
+			0x5c, 0x20, 0x94, 0x04, 0xf8, 0x85, 0x9b, 0x5e,
+			0x78, 0xff, 0x7a, 0xc8, 0x69, 0x14, 0x70, 0xb0,
+			0xac, 0x89, 0x3f, 0x70, 0xc6, 0x67, 0x76, 0xd3,
+			0x12, 0x22, 0x81, 0x79, 0xfc, 0x0d, 0x07, 0xce,
+			0xc1, 0xb6, 0x4a, 0x7c, 0x7d, 0x89, 0xbc, 0x94,
+			0xf8, 0x9d, 0x59, 0xa8, 0xe5, 0x58, 0xe1, 0x01,
+			0xef, 0xa8, 0x26, 0x8c, 0x78, 0x2f, 0xeb, 0xf5,
+			0xfb, 0xa3, 0x1c, 0x5a, 0xf6, 0x2a, 0x96, 0xeb,
+			0x36, 0x8c, 0xfd, 0xc4, 0x08, 0x10, 0x72, 0xaa,
+			0xd8, 0xc5, 0x8a, 0xf8, 0xe5, 0x1f, 0xb9, 0x9d,
+			0x9a, 0x65, 0x97, 0x90, 0x95, 0xf8, 0x79, 0xae,
+			0x77, 0x13, 0x87, 0xc8, 0x2b, 0x30, 0x71, 0x3d,
+			0x69, 0xd0, 0x0a, 0x7a, 0xbd, 0x9d, 0x4c, 0x31,
+			0x63, 0xfe, 0x14, 0x64, 0x8d, 0x9e, 0xda, 0xcb,
+			0x0a, 0xd2, 0x77, 0x31, 0xb7, 0x17, 0x26, 0xfc,
+			0x91, 0x4e, 0x32, 0xa9, 0x03, 0x4a, 0x53, 0xef,
+			0xb7, 0x3f, 0x79, 0x45, 0x26, 0x50, 0xbf, 0x3a,
+			0x73, 0x32, 0x07, 0x66, 0xf0, 0x7d, 0xab, 0x34,
+			0x41, 0x74, 0xba, 0x56, 0x0c, 0x43, 0xe8, 0x0a,
+			0x39, 0x01, 0xce, 0x6f, 0xd8, 0x18, 0xc3, 0xa1,
+			0x3b, 0x86, 0xf2, 0x2f, 0xf2, 0x25, 0x4f, 0x65,
+			0xf5, 0x84, 0x88, 0x99, 0x3d, 0xdc, 0x4e, 0x38,
+			0xc4, 0xc2, 0xf2, 0x57, 0x07, 0x6a, 0xe8, 0x58,
+			0xe4, 0x12, 0xbf, 0xcf, 0xe2, 0x3d, 0xd1, 0xac,
+			0x78, 0xef, 0x17, 0x38, 0x26, 0x28, 0xc0, 0x7a,
+			0x36, 0x9a, 0x8a, 0xde, 0xe0, 0xd5, 0x90, 0x58,
+			0x62, 0x26, 0xc2, 0x02, 0x3d, 0xbd, 0xbe, 0x94,
+			0xd2, 0x42, 0xa0, 0x51, 0xcc, 0x53, 0x70, 0xdb,
+			0x16, 0xe2, 0x15, 0x82, 0x76, 0xf8, 0xc9, 0x91,
+			0x86, 0xd4, 0x67, 0xf6, 0xa1, 0xfb, 0x38, 0x8a,
+			0x0f, 0x94, 0x98, 0x01, 0xbb, 0x31, 0x4c, 0x9f,
+			0xea, 0xf8, 0x7e, 0xc0, 0xbd, 0x05, 0x69, 0xeb,
+			0x25, 0x32, 0xd1, 0xd0, 0x08, 0xa3, 0x9f, 0x5c,
+			0x18, 0x40, 0x02, 0xd0, 0xea, 0xb2, 0xf9, 0x4f,
+			0x77, 0xcc, 0x18, 0xa6, 0x2a, 0x54, 0xa0, 0x1c,
+			0xc1, 0x9b, 0x1d, 0x87, 0x29, 0xcd, 0x79, 0x33,
+			0xc6, 0x33, 0x26, 0x68, 0x3a, 0x5f, 0x2b, 0xe3,
+			0xb4, 0x24, 0xa0, 0x20, 0xf9, 0x90, 0xcd, 0xad,
+			0x34, 0x66, 0x90, 0x93, 0x22, 0xfe, 0x77, 0xc9,
+			0xb3, 0x83, 0x2d, 0x3c, 0xda, 0x71, 0x81, 0x15,
+			0xb1, 0xda, 0x30, 0x8a, 0x9a, 0xf5, 0x21, 0x86,
+			0x8e, 0x40, 0x36, 0x71, 0x45, 0x05, 0x7a, 0xcc,
+			0xc7, 0x0b, 0x06, 0x4c, 0x14, 0xd7, 0x09, 0x20,
+			0x8c, 0xb3, 0xbc, 0x7b, 0xa7, 0xed, 0x71, 0x46,
+			0xc3, 0xe5, 0xd8, 0xe1, 0xca, 0x9c, 0xfb, 0x2a,
+			0xc2, 0x19, 0xb1, 0xfd, 0xbd, 0x94, 0xae, 0x58,
+			0xb6, 0x89, 0x7d, 0x95, 0x06, 0xe3, 0xd3, 0xe1,
+			0xf8, 0x7b, 0x35, 0xcb, 0x31, 0x15, 0xb6, 0xa1,
+			0x34, 0x78, 0xba, 0xbc, 0x94, 0xb0, 0xf9, 0x9f,
+			0x0c, 0xbe, 0xdc, 0x2e, 0x1c, 0xa6, 0x33, 0xe4,
+			0x75, 0x9a, 0xa8, 0xbe, 0x0d, 0xd6, 0xfd, 0x30,
+			0x1b, 0x43, 0xfa, 0x26, 0x5a, 0x05, 0xf4, 0x1a,
+			0x7c, 0x8d, 0x0a, 0x64, 0xb7, 0xe3, 0x13, 0x06,
+			0x10, 0xf5, 0xb4, 0xf0, 0xd7, 0xef, 0x35, 0xbf,
+			0x26, 0x27, 0x60, 0x65, 0x85, 0xc7, 0xd1, 0xef,
+			0xf7, 0x0c, 0x33, 0x6f, 0x84, 0x99, 0xb4, 0xc7,
+			0xd4, 0x4f, 0x59, 0x64, 0x92, 0xa3, 0xe9, 0xff,
+			0x13, 0x20, 0x29, 0x4e, 0x5c, 0x66, 0x86, 0x88,
+			0xd1, 0x09, 0x0c, 0xab, 0xc3, 0xc7, 0xd8, 0xf6,
+			0x2f, 0x5f, 0x65, 0x79, 0xbe, 0xbf, 0xdd, 0xf6,
+			0x30, 0x33, 0x5c, 0x6f, 0x85, 0x91, 0xdf, 0xe1,
+			0xe6, 0x5c, 0x78, 0x7f, 0xa4, 0xa5, 0xa6, 0xf9,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x09, 0x11, 0x18, 0x21, 0x28,
+			0x30, 0x39, 0x40, },
+	}, {
+		.what = "pure rejection vector",
+		.algo = "ml-dsa87",
+		.pk_len = DILITHIUM87_PUBLICKEYBYTES,
+		.pk = (const u8[DILITHIUM87_PUBLICKEYBYTES]){
+			0xb8, 0xdd, 0x1b, 0x8f, 0x82, 0x82, 0x8e, 0x9f,
+			0x0a, 0x02, 0x15, 0xbd, 0x8f, 0xa8, 0x63, 0x72,
+			0xd4, 0x3f, 0x9c, 0xcf, 0xea, 0x88, 0x2a, 0x53,
+			0x95, 0x67, 0xe9, 0x96, 0xd0, 0xe3, 0x7e, 0x3c,
+			0x95, 0x1c, 0xc0, 0x8f, 0x83, 0x5e, 0x86, 0x4a,
+			0xd1, 0x52, 0x41, 0x68, 0xad, 0x66, 0xa7, 0xf8,
+			0xc8, 0xe5, 0xed, 0x99, 0x55, 0xf9, 0xce, 0xd6,
+			0x85, 0x3a, 0x8c, 0xe1, 0x48, 0xca, 0x2a, 0xcc,
+			0x7b, 0x4d, 0x4e, 0xe8, 0x47, 0x75, 0x35, 0x92,
+			0x24, 0xad, 0x7f, 0x35, 0x1f, 0xa6, 0x6c, 0xa2,
+			0x6d, 0xab, 0xe3, 0xc8, 0xf7, 0xde, 0xaa, 0x2d,
+			0xb4, 0x88, 0xbb, 0x55, 0x17, 0x49, 0x2a, 0x71,
+			0x17, 0xda, 0x4d, 0xc6, 0xc5, 0xc1, 0xd6, 0xc6,
+			0xb7, 0x8b, 0xa2, 0x86, 0xbd, 0x19, 0x2d, 0xc8,
+			0x42, 0x3b, 0xa6, 0x56, 0x82, 0xc9, 0x4e, 0xfd,
+			0x96, 0x46, 0xe2, 0xb8, 0x2b, 0xb4, 0x1f, 0x42,
+			0xb6, 0x4f, 0x25, 0xa4, 0x6e, 0xe3, 0xad, 0xd3,
+			0xc1, 0xc6, 0x54, 0xca, 0x62, 0x98, 0xf5, 0x8d,
+			0xc0, 0xc2, 0x58, 0xcb, 0xf2, 0x22, 0x19, 0xa4,
+			0x4e, 0xdc, 0xea, 0x7b, 0x36, 0x9f, 0x68, 0x06,
+			0x9d, 0x24, 0x3e, 0xa3, 0xef, 0xc7, 0x00, 0xfc,
+			0xb3, 0x78, 0x41, 0x4c, 0xc8, 0x9e, 0x83, 0x93,
+			0x64, 0x1b, 0x14, 0x80, 0xdb, 0xcc, 0xfd, 0xa7,
+			0xe2, 0x56, 0x13, 0x93, 0x79, 0xfd, 0xf9, 0xd2,
+			0x02, 0x71, 0x9c, 0xec, 0x2a, 0xa6, 0x39, 0xfe,
+			0xac, 0x25, 0x3c, 0x4b, 0x8c, 0xac, 0x8b, 0x82,
+			0x3c, 0xde, 0xb0, 0x63, 0x52, 0x7f, 0xc5, 0xfe,
+			0x8f, 0x90, 0xa1, 0x18, 0x71, 0xdd, 0x10, 0xb8,
+			0xc7, 0xf6, 0x4c, 0xaa, 0x87, 0xf2, 0xec, 0x66,
+			0xd7, 0xfe, 0x8a, 0xf0, 0x0e, 0x70, 0x88, 0x9d,
+			0x21, 0x9e, 0x07, 0xe6, 0x11, 0x61, 0xcc, 0x19,
+			0xb2, 0xa4, 0x79, 0x98, 0xff, 0xdc, 0xe2, 0xf5,
+			0x4d, 0x04, 0xd9, 0x94, 0x51, 0x89, 0x28, 0x06,
+			0xb5, 0x8a, 0x7b, 0xb5, 0x6d, 0x03, 0x24, 0xe4,
+			0x37, 0x60, 0x43, 0xf4, 0x08, 0x26, 0xcc, 0xa1,
+			0x32, 0xeb, 0x28, 0x1b, 0x70, 0x5c, 0xc0, 0x2f,
+			0xcf, 0x7b, 0x05, 0x2a, 0x0f, 0x38, 0xf4, 0x15,
+			0x1a, 0xc9, 0xbd, 0x94, 0x9d, 0x4a, 0x4c, 0xd7,
+			0x63, 0x31, 0x83, 0xab, 0xc5, 0x0d, 0xb0, 0xce,
+			0xfc, 0x24, 0x1f, 0xee, 0xa6, 0xac, 0xe5, 0x85,
+			0xe3, 0xcc, 0x29, 0xf4, 0x9b, 0x21, 0x1a, 0x1a,
+			0xa9, 0x5a, 0xf6, 0x5e, 0x2e, 0xe1, 0xd8, 0xa0,
+			0x1e, 0x04, 0xdf, 0x76, 0xfe, 0xf2, 0x34, 0x7a,
+			0xa1, 0xfd, 0xda, 0x9c, 0x8e, 0x9b, 0xd3, 0x6f,
+			0xf3, 0x92, 0x19, 0xd6, 0x8d, 0xf5, 0x61, 0x1e,
+			0xd6, 0x9d, 0xb9, 0x15, 0x2d, 0xcb, 0x5c, 0xb0,
+			0x6f, 0x86, 0xb6, 0xa1, 0x5e, 0x2c, 0x88, 0x59,
+			0xc7, 0x39, 0xfb, 0x20, 0xc9, 0x07, 0x12, 0x16,
+			0x92, 0x92, 0xdb, 0x59, 0xaf, 0x63, 0xe3, 0xb4,
+			0x05, 0x5e, 0x4a, 0x62, 0xcf, 0xe7, 0x07, 0x39,
+			0x74, 0x7e, 0xc8, 0xc3, 0x1d, 0x2e, 0x07, 0xa1,
+			0x25, 0x33, 0x6e, 0xce, 0x35, 0xfd, 0x61, 0xd8,
+			0xd5, 0xb4, 0x6d, 0xe2, 0xd1, 0x0a, 0x04, 0x95,
+			0x4b, 0xc9, 0x78, 0x4e, 0xb0, 0xa9, 0xf6, 0x71,
+			0xc3, 0x8e, 0xff, 0xea, 0xcb, 0x0b, 0x7b, 0xca,
+			0x13, 0x2a, 0x23, 0x4b, 0x4d, 0x0a, 0xad, 0x6f,
+			0x9b, 0xa3, 0x58, 0x69, 0x5b, 0xdc, 0x5c, 0xaa,
+			0xfc, 0x8e, 0xbc, 0xf9, 0xcd, 0x6f, 0xf5, 0x1c,
+			0xe8, 0x66, 0x10, 0x61, 0xac, 0x5c, 0xb7, 0x78,
+			0x8a, 0x4e, 0x1f, 0xce, 0x7f, 0x35, 0xfc, 0x6c,
+			0x1a, 0xd7, 0xf3, 0x7b, 0x95, 0x2d, 0x2b, 0x8d,
+			0xf9, 0x97, 0x1d, 0x6e, 0x2d, 0x1b, 0x92, 0xd7,
+			0xcd, 0x5f, 0xac, 0x0b, 0x18, 0xdf, 0x04, 0x09,
+			0x69, 0x4e, 0x8e, 0xb7, 0xe2, 0x63, 0x30, 0xb7,
+			0x72, 0x32, 0x25, 0x5c, 0x7e, 0x30, 0xdd, 0x1a,
+			0x4f, 0x9f, 0x9f, 0x32, 0xe0, 0x63, 0x2c, 0x68,
+			0x9d, 0xc6, 0xd5, 0x63, 0x5e, 0x8c, 0x41, 0x00,
+			0xf3, 0x70, 0x2e, 0xf2, 0x7d, 0x1a, 0x59, 0x84,
+			0xc5, 0xc5, 0x3d, 0xfd, 0xf5, 0x36, 0xba, 0x00,
+			0x34, 0x7b, 0x87, 0x5c, 0xa0, 0xe2, 0xd1, 0x5c,
+			0x26, 0xd7, 0xd6, 0xc6, 0x4a, 0x0c, 0xfe, 0xde,
+			0xf0, 0xc8, 0xa4, 0x44, 0xea, 0xc3, 0x86, 0xcf,
+			0x70, 0xeb, 0x01, 0xfb, 0x3e, 0xa4, 0xb4, 0x20,
+			0x10, 0x23, 0x5e, 0xde, 0x52, 0xf2, 0x19, 0x20,
+			0x62, 0x67, 0x26, 0x76, 0x5c, 0x70, 0xd2, 0x5c,
+			0xd1, 0xbe, 0x68, 0xa0, 0xe0, 0x48, 0x12, 0xe1,
+			0xda, 0x4c, 0x25, 0x7f, 0xf2, 0xca, 0xf6, 0xd6,
+			0x4d, 0xd6, 0x10, 0x5e, 0xe5, 0xab, 0x47, 0x5b,
+			0x03, 0xb7, 0x0c, 0x1c, 0xca, 0x09, 0x2c, 0x0f,
+			0x6f, 0x50, 0x6f, 0xc4, 0x2e, 0x6c, 0x1d, 0x95,
+			0x4a, 0xee, 0x1d, 0x67, 0x37, 0x12, 0x91, 0xef,
+			0xd4, 0x3b, 0xc4, 0xb0, 0x82, 0x37, 0x7c, 0x9b,
+			0x18, 0x13, 0xa8, 0x18, 0xdf, 0xe1, 0x68, 0xbb,
+			0xfa, 0x22, 0x66, 0x58, 0xb5, 0xac, 0xa9, 0x4f,
+			0xbd, 0x19, 0x38, 0x8b, 0x70, 0x58, 0xa1, 0x48,
+			0xcc, 0xf1, 0x6b, 0xdd, 0xd4, 0xf7, 0xb4, 0x59,
+			0x6c, 0x47, 0x30, 0x7c, 0x29, 0x6f, 0xca, 0xbf,
+			0xfa, 0xd9, 0x1e, 0x46, 0x9e, 0x2a, 0x78, 0x45,
+			0x1a, 0xe9, 0x65, 0x8e, 0x8e, 0xe9, 0x4a, 0xfa,
+			0xf1, 0xca, 0x6b, 0x7f, 0xdc, 0xf4, 0x04, 0x4e,
+			0xb7, 0x6e, 0x7e, 0x9b, 0x45, 0xee, 0xfb, 0xca,
+			0x0f, 0xa6, 0xe1, 0x45, 0x48, 0xd9, 0xf0, 0xfd,
+			0xc8, 0x4b, 0xc2, 0x09, 0x7e, 0xd7, 0x97, 0xb9,
+			0x88, 0xbb, 0x0c, 0x16, 0x55, 0x4f, 0x68, 0x55,
+			0x83, 0xd2, 0xd8, 0xd6, 0x0b, 0x9d, 0x1c, 0xb6,
+			0x4f, 0xbf, 0x99, 0x4b, 0x31, 0xd4, 0x6f, 0x80,
+			0x07, 0x9f, 0x6c, 0xfe, 0x7d, 0x59, 0xf7, 0x3d,
+			0xd2, 0xb3, 0x62, 0xd3, 0xf6, 0x1e, 0x6c, 0xc1,
+			0x75, 0x45, 0x9a, 0x84, 0x7a, 0x7d, 0x31, 0x67,
+			0x06, 0x5a, 0x72, 0xbe, 0x25, 0x3a, 0x30, 0x12,
+			0xba, 0xe2, 0x0e, 0xa0, 0x6e, 0x5d, 0x72, 0xbc,
+			0x8d, 0x58, 0x7f, 0xcb, 0x20, 0x57, 0x15, 0xe1,
+			0x33, 0xdb, 0x90, 0xd4, 0xa6, 0xe1, 0xb0, 0x15,
+			0xa1, 0x2f, 0xf1, 0x6f, 0x76, 0x42, 0xfa, 0xfd,
+			0xdf, 0x66, 0x44, 0x0b, 0xf1, 0xe2, 0x47, 0xfd,
+			0x1b, 0xc6, 0x95, 0xbe, 0x89, 0xdc, 0x3a, 0x53,
+			0x6e, 0xbb, 0x70, 0xad, 0xb5, 0xa9, 0x8b, 0x7a,
+			0x7e, 0xbb, 0x1e, 0x6e, 0x4f, 0x27, 0x1c, 0x0d,
+			0xb1, 0x21, 0x4e, 0xaa, 0xb2, 0x47, 0x9e, 0x2b,
+			0x17, 0x18, 0x41, 0x04, 0x83, 0x1a, 0x35, 0xe9,
+			0xd6, 0xdc, 0x71, 0x06, 0x1e, 0x1c, 0x1b, 0x56,
+			0x08, 0x86, 0xbd, 0x68, 0x12, 0xf8, 0x38, 0xdc,
+			0xeb, 0x72, 0xc4, 0xda, 0x8a, 0x89, 0x67, 0xa6,
+			0x13, 0x13, 0x27, 0x31, 0x47, 0x70, 0x12, 0x87,
+			0x9b, 0x9f, 0xbb, 0x01, 0x76, 0x5b, 0x07, 0x9b,
+			0x03, 0x78, 0xf1, 0x19, 0xd8, 0x8b, 0x92, 0x8c,
+			0xb6, 0xcc, 0x43, 0x4d, 0x10, 0xbf, 0xac, 0x81,
+			0x3e, 0x98, 0x8f, 0xcd, 0x43, 0x93, 0x9a, 0x8e,
+			0x73, 0x47, 0x21, 0x34, 0x1d, 0x01, 0x85, 0x44,
+			0xa8, 0xc9, 0x9c, 0xda, 0x0d, 0xcd, 0x4c, 0xe7,
+			0xbd, 0xd7, 0xf5, 0x69, 0x95, 0xa0, 0x80, 0x5b,
+			0x25, 0x3a, 0xe1, 0x93, 0x03, 0xbb, 0xa1, 0xdd,
+			0xe5, 0x2c, 0xd0, 0x80, 0x5d, 0xb9, 0x4a, 0xb9,
+			0x3d, 0x98, 0x95, 0x9d, 0x86, 0x07, 0xdf, 0x62,
+			0x98, 0x19, 0x49, 0xdf, 0x8c, 0x36, 0x07, 0x2e,
+			0x33, 0x1b, 0xbf, 0x7d, 0x64, 0x99, 0x01, 0xc0,
+			0x2b, 0xcd, 0xba, 0x62, 0xf9, 0x72, 0x0d, 0x48,
+			0xec, 0xd6, 0xde, 0xb7, 0x51, 0x03, 0x12, 0x05,
+			0x09, 0x92, 0xee, 0xda, 0x0b, 0x16, 0x4b, 0xbe,
+			0x1e, 0xc2, 0x9b, 0x5c, 0xcc, 0x9e, 0x2f, 0xc5,
+			0xd5, 0x41, 0x22, 0x30, 0xb1, 0xff, 0xc4, 0x38,
+			0x41, 0x05, 0xb5, 0x47, 0x9c, 0x16, 0xd0, 0x66,
+			0x67, 0x64, 0xc6, 0x81, 0xad, 0xe7, 0x8d, 0x82,
+			0x03, 0x2e, 0x2a, 0xfa, 0x22, 0xe4, 0x9d, 0x0f,
+			0xf4, 0xfe, 0x83, 0x4f, 0x0e, 0x99, 0xcb, 0xcb,
+			0x62, 0x3e, 0x1e, 0x07, 0x65, 0x6e, 0x51, 0x72,
+			0x28, 0x00, 0xcb, 0xab, 0xb6, 0x76, 0xf0, 0x9d,
+			0x3a, 0xa4, 0x82, 0xd6, 0x4c, 0xb6, 0x72, 0xf4,
+			0x58, 0xdb, 0x5c, 0x65, 0x29, 0xf5, 0xe0, 0x00,
+			0xa0, 0x33, 0x11, 0xe3, 0xff, 0x6b, 0x39, 0x27,
+			0x36, 0x95, 0x12, 0x46, 0xe3, 0xe4, 0x1b, 0x04,
+			0x78, 0xc1, 0x09, 0xf8, 0x3e, 0x76, 0x73, 0xff,
+			0x4d, 0xc3, 0xc8, 0x4b, 0xb9, 0xec, 0xef, 0x04,
+			0x4a, 0x3e, 0x63, 0x42, 0x31, 0x51, 0x34, 0x42,
+			0xe2, 0x92, 0xe4, 0xf8, 0xe2, 0x4a, 0x35, 0x82,
+			0x6f, 0x07, 0x77, 0x86, 0xc0, 0x1d, 0xef, 0x15,
+			0xde, 0x7e, 0xc0, 0xff, 0x69, 0x04, 0x38, 0xad,
+			0x95, 0xfa, 0x0e, 0x93, 0xd8, 0x7f, 0x05, 0xe9,
+			0xd2, 0x3c, 0x94, 0xf8, 0xb7, 0x4c, 0x3f, 0x7f,
+			0xbf, 0x8b, 0x10, 0x60, 0xc0, 0x8e, 0x76, 0x64,
+			0x00, 0xdb, 0xeb, 0x9e, 0x94, 0x14, 0x99, 0x31,
+			0x3c, 0x79, 0xef, 0xa1, 0x90, 0x7e, 0x22, 0xa6,
+			0x22, 0x21, 0xb3, 0x70, 0x20, 0x7d, 0x49, 0x38,
+			0x24, 0x7b, 0x49, 0x75, 0x56, 0x97, 0x6c, 0xe1,
+			0x62, 0xd6, 0x3b, 0xed, 0xbd, 0xe8, 0x13, 0x33,
+			0x3b, 0x55, 0x9a, 0xaf, 0x4a, 0x76, 0x22, 0x73,
+			0xf6, 0xfd, 0xce, 0xeb, 0xd7, 0xc5, 0xa7, 0x79,
+			0xd5, 0x24, 0xef, 0x08, 0x3b, 0x9a, 0x06, 0x54,
+			0x5c, 0xfa, 0x87, 0x8a, 0x36, 0x2f, 0x67, 0xa5,
+			0x56, 0x39, 0x33, 0x1a, 0xe9, 0xc9, 0x75, 0xbd,
+			0xfe, 0xff, 0xd5, 0x09, 0xad, 0xfe, 0xa6, 0x83,
+			0x7b, 0x1e, 0x88, 0x1a, 0xf5, 0xca, 0x3b, 0x2e,
+			0xf4, 0xfa, 0x50, 0x62, 0x8f, 0x1f, 0xc8, 0xa6,
+			0x93, 0x18, 0x59, 0x45, 0x03, 0xa2, 0xc0, 0x76,
+			0x35, 0x0d, 0x08, 0x64, 0x88, 0x73, 0x90, 0x3f,
+			0xb9, 0x08, 0xc8, 0xe8, 0xd0, 0x50, 0x3b, 0x0a,
+			0xe6, 0xa8, 0x42, 0xab, 0x20, 0x5d, 0x2d, 0x91,
+			0xe9, 0x10, 0x03, 0x46, 0x68, 0x06, 0x10, 0xa8,
+			0x1a, 0x3c, 0x55, 0x20, 0x13, 0x14, 0x96, 0x27,
+			0xba, 0xcc, 0xc9, 0xf6, 0xf9, 0xa9, 0x14, 0x13,
+			0x9e, 0x09, 0xee, 0x2e, 0x34, 0x1f, 0xab, 0x6f,
+			0xbc, 0x5b, 0x19, 0x78, 0xd4, 0x8e, 0xc7, 0x2e,
+			0x19, 0x0b, 0x6d, 0x17, 0x14, 0xbc, 0x41, 0x2c,
+			0x83, 0x7b, 0x09, 0x8e, 0x06, 0x49, 0x4d, 0x18,
+			0x91, 0xda, 0xac, 0x7f, 0x77, 0xf9, 0x4e, 0x28,
+			0x40, 0x65, 0xc5, 0x63, 0xce, 0x9f, 0xe2, 0xd2,
+			0x97, 0x04, 0x28, 0xe5, 0x23, 0xf9, 0x88, 0xc5,
+			0x65, 0xfa, 0xe5, 0x15, 0xb4, 0x05, 0xb9, 0x7c,
+			0xd2, 0x89, 0x4e, 0x8b, 0x36, 0x5b, 0x7a, 0xfe,
+			0x41, 0xd5, 0x38, 0x86, 0x67, 0xbb, 0xed, 0xde,
+			0x09, 0xf2, 0x25, 0x9f, 0x74, 0x9e, 0xb9, 0xd1,
+			0x4c, 0x88, 0x00, 0xbb, 0xff, 0x28, 0x8e, 0x57,
+			0x27, 0x2a, 0xc6, 0xfa, 0xc3, 0x82, 0x84, 0xd6,
+			0xfc, 0x10, 0x2f, 0xcd, 0x07, 0xec, 0x7c, 0x38,
+			0xb7, 0xf1, 0x95, 0xb9, 0x39, 0x98, 0x88, 0x7d,
+			0x30, 0x9e, 0x0c, 0x14, 0x54, 0xcb, 0xe7, 0x00,
+			0xd6, 0xaf, 0x86, 0x31, 0x11, 0x81, 0x80, 0x0a,
+			0x47, 0xa8, 0xa0, 0xbc, 0x09, 0x01, 0xca, 0xb7,
+			0xfa, 0x90, 0x37, 0xd9, 0xe1, 0x8e, 0x02, 0x4f,
+			0x42, 0x26, 0x6a, 0xad, 0x90, 0x11, 0x7c, 0x9a,
+			0xf7, 0x99, 0x92, 0x72, 0xcc, 0x3b, 0x00, 0x86,
+			0x8d, 0x24, 0xc9, 0xb2, 0x05, 0xd7, 0x69, 0x3b,
+			0x07, 0x36, 0xbf, 0x9f, 0xfc, 0xb0, 0x56, 0x24,
+			0xfb, 0x9e, 0xc4, 0xe0, 0xba, 0x16, 0x87, 0xb1,
+			0xfe, 0x7d, 0x35, 0x32, 0xa3, 0xa2, 0xdb, 0x2b,
+			0x52, 0x82, 0x88, 0xdf, 0x4a, 0x25, 0x60, 0xc9,
+			0x0a, 0xc0, 0xd0, 0x06, 0xfe, 0x91, 0x78, 0x37,
+			0x38, 0xc3, 0xe8, 0x3a, 0x60, 0x89, 0x7a, 0x14,
+			0xf7, 0xad, 0x0c, 0x2f, 0x71, 0x54, 0xf4, 0xb7,
+			0x4f, 0x69, 0x20, 0x1f, 0xa2, 0x48, 0xb3, 0x66,
+			0x0d, 0xbf, 0xb9, 0x90, 0x34, 0x32, 0x64, 0x23,
+			0x53, 0x05, 0x74, 0xa0, 0x49, 0x56, 0x73, 0x6c,
+			0xbb, 0x23, 0xd1, 0x58, 0x8a, 0xd8, 0x6c, 0x7d,
+			0xf8, 0x30, 0x7c, 0x21, 0xf7, 0xaf, 0xfe, 0x49,
+			0x5a, 0x68, 0x83, 0x76, 0xaa, 0x74, 0x14, 0x6c,
+			0xa1, 0x0f, 0x61, 0xc3, 0xfe, 0x79, 0xb3, 0x3d,
+			0xd5, 0x9b, 0x31, 0x18, 0xdc, 0xc9, 0xbd, 0x4a,
+			0xd0, 0x7d, 0x8a, 0x9f, 0xdd, 0xb8, 0xa0, 0x4c,
+			0xb6, 0xf2, 0x88, 0xd7, 0xc6, 0x32, 0x36, 0x45,
+			0xe0, 0x00, 0x27, 0x02, 0x44, 0x83, 0x1d, 0x9d,
+			0xc8, 0xa5, 0x99, 0x17, 0x96, 0xbd, 0x3e, 0x8f,
+			0xa6, 0x79, 0xd7, 0xfb, 0xdf, 0xe2, 0x1b, 0xa4,
+			0xb7, 0x1c, 0x40, 0x0c, 0x55, 0xf9, 0xcd, 0x18,
+			0x78, 0x7f, 0xc4, 0x71, 0xdd, 0xd5, 0x75, 0x11,
+			0xc0, 0x67, 0x87, 0xfb, 0x87, 0x31, 0x8a, 0x6f,
+			0x54, 0x89, 0x0c, 0x0f, 0xcb, 0x26, 0x0f, 0xb2,
+			0x96, 0x41, 0x19, 0x0c, 0xc5, 0x94, 0x65, 0x98,
+			0xb9, 0x52, 0xe5, 0x7b, 0x67, 0xa2, 0xe1, 0xde,
+			0x4e, 0xe8, 0xf3, 0x10, 0x2c, 0xcc, 0x40, 0xbd,
+			0x07, 0x9e, 0x95, 0x9c, 0xae, 0x3f, 0x84, 0xeb,
+			0x0f, 0xb0, 0xfb, 0x79, 0x1a, 0x89, 0x22, 0x59,
+			0x33, 0x45, 0x86, 0x6d, 0x58, 0x75, 0x20, 0xb4,
+			0xd8, 0x37, 0xc8, 0x2a, 0x35, 0x65, 0x7c, 0x2f,
+			0x8e, 0x7d, 0xd6, 0xc0, 0x64, 0x80, 0xd8, 0x88,
+			0x4b, 0xf3, 0x1e, 0x7f, 0x94, 0x73, 0x5c, 0x88,
+			0x21, 0xf3, 0xc8, 0x18, 0x81, 0x08, 0xc1, 0x6b,
+			0xaa, 0x5b, 0x80, 0x2b, 0x67, 0x0c, 0xcf, 0x9a,
+			0x58, 0xbe, 0xbc, 0xff, 0x25, 0x7f, 0x07, 0xf2,
+			0xdd, 0x02, 0xf7, 0xd2, 0x0d, 0xec, 0xd4, 0x4a,
+			0x13, 0x37, 0x6d, 0xbf, 0xaa, 0xbc, 0x67, 0xf3,
+			0x99, 0xf9, 0x35, 0x9a, 0x7b, 0x2f, 0x2d, 0x61,
+			0x69, 0x14, 0x89, 0x3d, 0xd7, 0xcd, 0x7a, 0xac,
+			0xba, 0xda, 0xe2, 0x4f, 0xc0, 0x0b, 0xf1, 0x15,
+			0xbd, 0x4e, 0x37, 0xbc, 0xe2, 0x36, 0x93, 0xb8,
+			0xad, 0xa3, 0x0a, 0x35, 0x76, 0x88, 0x34, 0x50,
+			0x76, 0x40, 0xb3, 0xdc, 0xaf, 0xf2, 0x1f, 0xfe,
+			0xd7, 0x2e, 0xf9, 0x44, 0xff, 0xda, 0xf2, 0x89,
+			0xbf, 0x3c, 0xc7, 0xdc, 0x3b, 0x0a, 0x70, 0xc9,
+			0x0b, 0x6a, 0x6e, 0x79, 0xce, 0x27, 0xba, 0x8c,
+			0x52, 0x98, 0x71, 0x04, 0xba, 0xd7, 0x6a, 0x52,
+			0x94, 0x41, 0xa0, 0xae, 0xd4, 0xcb, 0xc7, 0xd9,
+			0x87, 0xea, 0x1d, 0x1a, 0x04, 0xa4, 0x51, 0x4a,
+			0x9b, 0xfb, 0x42, 0xe9, 0x2f, 0x60, 0x12, 0xb2,
+			0x7b, 0x76, 0x81, 0xfc, 0xc1, 0x9b, 0xc0, 0x4d,
+			0x16, 0x53, 0x44, 0x2f, 0x48, 0x86, 0x42, 0x41,
+			0x2c, 0xb3, 0x1f, 0x4d, 0xa9, 0x9d, 0xb9, 0xf9,
+			0x93, 0x78, 0x18, 0x05, 0x90, 0xb3, 0x49, 0xdb,
+			0x1b, 0xfa, 0x57, 0xbb, 0x94, 0xa8, 0xd8, 0x37,
+			0xf6, 0x92, 0xc5, 0x15, 0xa4, 0x47, 0xa3, 0x0f,
+			0x4e, 0x09, 0x0d, 0x2d, 0xdd, 0xac, 0xd2, 0xbd,
+			0xeb, 0x46, 0xe1, 0x32, 0x7a, 0x51, 0x21, 0xd8,
+			0xd3, 0x9e, 0xbf, 0xf1, 0x7a, 0xbc, 0x65, 0xd9,
+			0x31, 0xfe, 0xbb, 0xd2, 0x48, 0xf8, 0x62, 0x02,
+			0x4d, 0x59, 0x17, 0xd2, 0x78, 0x68, 0xbd, 0xc2,
+			0xb6, 0xc5, 0x7e, 0x5f, 0x12, 0x51, 0x58, 0x3a,
+			0xd3, 0x60, 0x96, 0x26, 0x30, 0xfd, 0x72, 0x81,
+			0x46, 0xaa, 0x75, 0xe7, 0xa4, 0xc4, 0x97, 0xe3,
+			0x64, 0x1a, 0xb7, 0x6e, 0x9e, 0x60, 0xe4, 0x59,
+			0x40, 0x3d, 0x2d, 0xe0, 0x2e, 0xbb, 0x90, 0xa5,
+			0xe4, 0xfb, 0xc2, 0xf0, 0xad, 0x4a, 0xa1, 0x3d,
+			0x91, 0xdf, 0x9c, 0x89, 0x69, 0x04, 0x13, 0xd0,
+			0x71, 0x9b, 0xe1, 0x37, 0x99, 0x82, 0x0e, 0xf4,
+			0x53, 0x66, 0xf5, 0x03, 0x89, 0xe1, 0x0f, 0x17,
+			0x3a, 0x87, 0xf3, 0x2d, 0xad, 0x67, 0xc4, 0xd0,
+			0x3c, 0x86, 0x28, 0x4f, 0x89, 0x68, 0x23, 0x88,
+			0x2d, 0xb3, 0xb2, 0x28, 0xd7, 0xd0, 0x8b, 0xbf,
+			0x38, 0x87, 0x02, 0x5f, 0x02, 0x51, 0xeb, 0xc6,
+			0xa0, 0x7d, 0xb0, 0x9d, 0xa2, 0x14, 0x55, 0xd1,
+			0x34, 0xda, 0x01, 0x1b, 0x02, 0x9e, 0x7a, 0x74,
+			0xa3, 0x9c, 0xa5, 0xe7, 0xb9, 0x96, 0x84, 0x31,
+			0xb1, 0x59, 0xc3, 0xe3, 0xf3, 0x41, 0xa7, 0xb7,
+			0x0e, 0x9e, 0x3f, 0x38, 0x82, 0xac, 0x3e, 0x42,
+			0x8e, 0x13, 0x45, 0xea, 0xd5, 0xde, 0x77, 0xe0,
+			0xe8, 0x14, 0x82, 0x95, 0x46, 0xac, 0x4c, 0xe0,
+			0x74, 0x54, 0x5e, 0x5d, 0x05, 0x54, 0x8d, 0x0f,
+			0x4e, 0x23, 0xe7, 0x37, 0x28, 0xd2, 0xfd, 0xc9,
+			0xb9, 0x11, 0x1b, 0xe7, 0x2f, 0x2f, 0x85, 0x3e,
+			0x18, 0xf5, 0x03, 0x56, 0x37, 0x5b, 0xae, 0x67,
+			0x5f, 0x9e, 0x0e, 0x9f, 0x39, 0xe2, 0x1a, 0x5b,
+			0x63, 0xbb, 0x6a, 0x1b, 0xeb, 0x16, 0x3a, 0x5c,
+			0x83, 0xdb, 0xb4, 0xf6, 0x42, 0xa5, 0x51, 0x40,
+			0xf3, 0x5c, 0xcf, 0x91, 0x51, 0x3d, 0x41, 0x7e,
+			0xd2, 0x18, 0xca, 0x39, 0x54, 0x13, 0x9c, 0xc4,
+			0xa9, 0xb3, 0x86, 0x79, 0xfe, 0x80, 0xf9, 0x87,
+			0x8f, 0xf5, 0x43, 0xbe, 0x4c, 0xb6, 0x78, 0xd6,
+			0x5a, 0xe4, 0x53, 0x08, 0xcc, 0xad, 0xd1, 0x02,
+			0x8f, 0xeb, 0xab, 0x49, 0x3b, 0x68, 0x3d, 0x16,
+			0x5b, 0x6f, 0x48, 0x2c, 0x83, 0x22, 0x73, 0x14,
+			0xb6, 0x8c, 0x1d, 0x60, 0x56, 0x19, 0x03, 0x49,
+			0x03, 0x62, 0x58, 0x37, 0xf7, 0xc6, 0xe0, 0x25,
+			0x39, 0x4c, 0x85, 0x8e, 0x8e, 0xbc, 0xc1, 0xcd,
+			0xce, 0x8a, 0x71, 0x9e, 0xa2, 0x22, 0x7c, 0x0a,
+			0x03, 0x92, 0xfa, 0x36, 0x49, 0x9f, 0x25, 0xc9,
+			0xc0, 0xda, 0xcf, 0x97, 0x2f, 0x50, 0x5b, 0xa6,
+			0x1e, 0x19, 0xb6, 0x13, 0xed, 0x01, 0xc2, 0x8d,
+			0xef, 0x80, 0xde, 0x6d, 0x83, 0xa8, 0x8f, 0xb5,
+			0x78, 0xeb, 0x2c, 0x3c, 0x6f, 0x8e, 0x58, 0x9f,
+			0x28, 0xcf, 0x5b, 0xc3, 0xfe, 0x0e, 0x51, 0xc1,
+			0x0c, 0x4f, 0xfa, 0xa0, 0xb9, 0x39, 0x12, 0x17,
+			0x99, 0x0c, 0xcd, 0xcb, 0x78, 0x71, 0xbd, 0x94,
+			0x05, 0xc4, 0x46, 0xd5, 0xf1, 0x94, 0xf6, 0xc3,
+			0x88, 0x15, 0xc1, 0x1c, 0x77, 0x75, 0xd1, 0x71,
+			0x0c, 0xd9, 0x99, 0x36, 0xcd, 0xb1, 0x75, 0x87,
+			0xbd, 0x31, 0xba, 0xff, 0x20, 0xdb, 0xcf, 0x58,
+			0xe8, 0x51, 0xfc, 0xd4, 0xd4, 0x89, 0x37, 0x01,
+			0x30, 0xc8, 0x6e, 0xe5, 0xa6, 0x52, 0xec, 0xd6,
+			0xaf, 0x1d, 0x96, 0x2d, 0x74, 0xd0, 0x1a, 0x98,
+			0xd9, 0x46, 0x4c, 0x6f, 0x34, 0xcf, 0x92, 0x41,
+			0x33, 0xff, 0x8f, 0xb8, 0xaa, 0x9f, 0x5d, 0x51,
+			0x11, 0x9b, 0xca, 0xf9, 0x26, 0xf3, 0xe5, 0xda,
+			0x33, 0x20, 0xe7, 0x6e, 0xe4, 0x7b, 0x92, 0xab,
+			0x39, 0x21, 0x20, 0xe6, 0x58, 0xe8, 0x36, 0x24,
+			0x53, 0x55, 0x66, 0x6b, 0x11, 0x74, 0xab, 0x17,
+			0x6c, 0xc3, 0x67, 0xd2, 0xf6, 0x70, 0x63, 0x86,
+			0x51, 0xe4, 0x53, 0xbe, 0xa4, 0xf3, 0xe0, 0x67,
+			0x41, 0x17, 0x44, 0x70, 0xc3, 0xc0, 0xbe, 0x98,
+			0x8a, 0x8b, 0x5a, 0x65, 0x4d, 0xec, 0x5a, 0xc6,
+			0xec, 0xc6, 0x66, 0xf2, 0x3a, 0x75, 0xd4, 0xab,
+			0xb4, 0x14, 0x5b, 0xc6, 0xf8, 0x6f, 0xe1, 0x99,
+			0xd0, 0x57, 0x42, 0x29, 0x35, 0x09, 0x99, 0x65,
+			0x99, 0x98, 0xd8, 0xa7, 0xc6, 0x78, 0xa1, 0xd0,
+			0x16, 0x7b, 0xb0, 0x03, 0x4d, 0x79, 0x81, 0x45,
+			0x8c, 0x07, 0x3c, 0xa0, 0x59, 0xa2, 0xdf, 0xf5,
+			0xa7, 0xb0, 0x18, 0x00, 0x8d, 0x10, 0xca, 0x4a,
+			},
+		.msg_len = 64,
+		.msg = (const u8[64]){
+			0x36, 0xf0, 0x59, 0x02, 0xad, 0xbc, 0xce, 0x83,
+			0xe2, 0xe5, 0x4d, 0x6d, 0x0c, 0x61, 0xbd, 0x20,
+			0x27, 0x5f, 0x55, 0x63, 0xc7, 0x02, 0x8f, 0xd5,
+			0x01, 0x45, 0xb9, 0x4f, 0x41, 0x27, 0xd8, 0x0d,
+			0x87, 0x63, 0xb3, 0x53, 0x67, 0xa1, 0x82, 0x5f,
+			0xf3, 0xff, 0xef, 0xd0, 0x1b, 0x34, 0x9d, 0x27,
+			0xf0, 0xbb, 0xb9, 0x66, 0x4e, 0xbd, 0x25, 0x57,
+			0xae, 0x21, 0xf9, 0x2f, 0x7f, 0x46, 0x71, 0x11,
+			},
+		.sig_len = DILITHIUM87_CRYPTO_BYTES,
+		.sig = (const u8[DILITHIUM87_CRYPTO_BYTES]){
+			0x27, 0x29, 0xe8, 0x15, 0x0d, 0x05, 0x00, 0xb6,
+			0xc3, 0xb9, 0x44, 0xfc, 0x1e, 0xbd, 0xc3, 0x83,
+			0x2b, 0x43, 0x95, 0x93, 0x14, 0x69, 0x36, 0x9d,
+			0x65, 0x8c, 0xf6, 0x3f, 0xcb, 0x1e, 0x09, 0xa9,
+			0x9b, 0x31, 0x52, 0xd8, 0x85, 0x08, 0x5c, 0xbd,
+			0xfb, 0x7e, 0x43, 0xb8, 0x7b, 0x56, 0x14, 0xfc,
+			0x08, 0x13, 0x59, 0x87, 0x4e, 0xd9, 0xc0, 0xdb,
+			0xfc, 0xd4, 0x71, 0x81, 0x56, 0x35, 0x86, 0x90,
+			0x2e, 0x74, 0x71, 0x67, 0xe3, 0x1c, 0xc6, 0x59,
+			0x97, 0x4e, 0x05, 0x0f, 0xfc, 0xf3, 0x31, 0x00,
+			0x90, 0x94, 0x93, 0x89, 0x6b, 0x8b, 0xfe, 0x2d,
+			0xb2, 0xa1, 0x27, 0x15, 0x4a, 0x92, 0xec, 0x6c,
+			0xa9, 0x29, 0x0f, 0x7f, 0x3c, 0x30, 0x7a, 0x27,
+			0xe2, 0x37, 0x06, 0x8c, 0x4a, 0x7d, 0x8b, 0x3d,
+			0x8d, 0xee, 0x89, 0x40, 0xd1, 0x64, 0x03, 0xf7,
+			0x9e, 0x6d, 0x23, 0x25, 0xfd, 0xcb, 0x16, 0x12,
+			0xcb, 0x2e, 0x7e, 0x87, 0x5c, 0x66, 0x9a, 0x9c,
+			0x0f, 0x78, 0xd3, 0x71, 0xbb, 0xc6, 0xce, 0x38,
+			0x68, 0x2c, 0xae, 0x8a, 0x28, 0xce, 0x61, 0xed,
+			0x22, 0xd1, 0x5c, 0xb2, 0x3a, 0xc7, 0xa8, 0x90,
+			0xb8, 0xfb, 0x35, 0xca, 0x85, 0x6a, 0xab, 0xbd,
+			0x48, 0xae, 0x2d, 0x4b, 0x53, 0x6f, 0xa0, 0x46,
+			0xad, 0x30, 0x82, 0xdf, 0x01, 0xb1, 0x6f, 0x65,
+			0x8c, 0x29, 0xab, 0xc7, 0x19, 0xfc, 0x97, 0x01,
+			0x13, 0x5a, 0x7c, 0xc1, 0x06, 0x29, 0x26, 0xbc,
+			0x8b, 0xa1, 0xca, 0x77, 0xca, 0x5e, 0xa4, 0x09,
+			0x14, 0xf4, 0xbb, 0xfc, 0xac, 0x46, 0x1f, 0xb0,
+			0xd9, 0xf5, 0x9a, 0x16, 0xab, 0x32, 0xd3, 0x15,
+			0xd3, 0xe6, 0x4e, 0x09, 0xa7, 0x6c, 0x50, 0x76,
+			0x47, 0xee, 0x27, 0xbe, 0x85, 0x9b, 0xc2, 0xad,
+			0xb7, 0x95, 0x30, 0x26, 0x75, 0x32, 0xdc, 0xfe,
+			0x4b, 0x6f, 0x76, 0x48, 0xa9, 0x48, 0x68, 0x3d,
+			0x44, 0x5b, 0xf0, 0xcd, 0xce, 0x24, 0x91, 0x91,
+			0x74, 0x4f, 0x9f, 0x4b, 0x32, 0xd3, 0x87, 0x9a,
+			0x4a, 0x8c, 0xe4, 0x13, 0xc0, 0x3b, 0xc0, 0x56,
+			0x57, 0xc9, 0x4e, 0x49, 0xff, 0x64, 0x0a, 0xa8,
+			0x94, 0x6a, 0xa2, 0xdb, 0x60, 0x29, 0xd3, 0x16,
+			0x09, 0x48, 0x30, 0x59, 0x85, 0x61, 0x23, 0xb8,
+			0x9c, 0x77, 0xab, 0xeb, 0xed, 0xc8, 0xe5, 0x6a,
+			0xef, 0xbc, 0x24, 0xc0, 0x80, 0x74, 0x54, 0xe3,
+			0xf4, 0xea, 0xdc, 0xc3, 0x97, 0x62, 0xc7, 0x99,
+			0xb6, 0x9b, 0x20, 0x86, 0x86, 0xd0, 0x35, 0x1a,
+			0x37, 0xee, 0xca, 0x18, 0x88, 0xd4, 0xf0, 0xb0,
+			0x18, 0xad, 0x63, 0x80, 0x89, 0x04, 0xaa, 0x78,
+			0x93, 0x6a, 0x58, 0x64, 0x84, 0x8c, 0x10, 0x95,
+			0x5b, 0x7b, 0x18, 0x62, 0x5f, 0xce, 0xf1, 0x51,
+			0xde, 0x8c, 0xd7, 0x4c, 0x98, 0x1d, 0x03, 0x7b,
+			0xa0, 0x41, 0x20, 0x9d, 0x71, 0xcd, 0xb3, 0xf4,
+			0x16, 0x36, 0x93, 0x53, 0x2e, 0x1c, 0x25, 0xfc,
+			0xaa, 0xed, 0xaf, 0x54, 0x26, 0x52, 0xa3, 0xd0,
+			0x60, 0xc5, 0xad, 0x3b, 0x52, 0x6b, 0x70, 0x19,
+			0xa3, 0x0f, 0x5f, 0x7f, 0x36, 0x9e, 0xe2, 0x32,
+			0xb2, 0xe2, 0xc1, 0xd2, 0xca, 0xbd, 0x42, 0xa8,
+			0xb9, 0x82, 0x7b, 0x12, 0xf5, 0x84, 0x49, 0x17,
+			0x7a, 0x66, 0x76, 0xf9, 0x95, 0x2c, 0x66, 0xf7,
+			0x2e, 0xa4, 0xdc, 0x5d, 0xd1, 0x15, 0xc7, 0x9e,
+			0x19, 0x3d, 0x0e, 0x91, 0xdc, 0xcd, 0x14, 0xbc,
+			0xef, 0x59, 0x10, 0xcd, 0x3b, 0x73, 0x47, 0xe5,
+			0xe1, 0x50, 0x1f, 0xbb, 0x1f, 0xf2, 0x14, 0xe3,
+			0x13, 0xd5, 0x61, 0x71, 0x1d, 0xf5, 0x0f, 0x10,
+			0x2c, 0x4b, 0xde, 0x31, 0x99, 0x6f, 0x7b, 0x23,
+			0x08, 0x29, 0x36, 0x15, 0x93, 0x61, 0xe4, 0x5a,
+			0xce, 0xe1, 0xcb, 0x2b, 0x20, 0x5d, 0x87, 0xf4,
+			0x39, 0x83, 0xf4, 0xf3, 0xfa, 0xb7, 0xc5, 0x86,
+			0x2e, 0x37, 0x62, 0x6d, 0x6b, 0xbd, 0x9d, 0xcd,
+			0x65, 0xe4, 0x9e, 0x12, 0xe0, 0xf0, 0x79, 0x16,
+			0xe6, 0x62, 0x3c, 0xb6, 0x5e, 0x9e, 0x78, 0x90,
+			0xee, 0xd7, 0x46, 0x41, 0x88, 0xdf, 0x3a, 0xe3,
+			0x28, 0xa3, 0x0b, 0x66, 0xa3, 0xb2, 0x80, 0x9d,
+			0x26, 0x68, 0x07, 0x58, 0x94, 0xbd, 0x2a, 0x90,
+			0x2d, 0x2c, 0x22, 0x7e, 0x89, 0xff, 0x8b, 0xbb,
+			0xb3, 0x1e, 0xbe, 0x43, 0xee, 0x35, 0x3c, 0x2d,
+			0x45, 0xf0, 0x14, 0x4d, 0xe2, 0xca, 0x01, 0x57,
+			0x0b, 0x12, 0xf2, 0xe1, 0x8a, 0x0e, 0x47, 0x1b,
+			0xa6, 0x7f, 0xef, 0xa4, 0x82, 0xc3, 0x88, 0x34,
+			0xd7, 0xe2, 0xec, 0x0b, 0xf4, 0x1e, 0xf5, 0x81,
+			0x14, 0x40, 0xac, 0x50, 0xf3, 0x06, 0x2b, 0xec,
+			0x12, 0x7b, 0x68, 0x24, 0x22, 0x03, 0x0f, 0xe9,
+			0x69, 0x9f, 0x4f, 0x73, 0x26, 0x79, 0x0b, 0x00,
+			0x24, 0x6a, 0x84, 0x7d, 0xa7, 0x74, 0xa0, 0xee,
+			0x95, 0x46, 0x1f, 0x8d, 0x72, 0x19, 0xd5, 0x1a,
+			0x4d, 0xe5, 0x0a, 0x69, 0x3d, 0xe0, 0x42, 0x5c,
+			0xc4, 0x6b, 0x8f, 0xb1, 0xd9, 0xe4, 0x4e, 0xf6,
+			0x34, 0xc0, 0xcc, 0x66, 0x7d, 0x23, 0xb0, 0xc4,
+			0xde, 0x41, 0x41, 0xe6, 0xf9, 0x7d, 0x9a, 0x71,
+			0x5a, 0xfd, 0x81, 0x28, 0xd6, 0x17, 0x14, 0xc8,
+			0xc9, 0x51, 0x06, 0xb6, 0xb7, 0xa2, 0xeb, 0xbe,
+			0x04, 0xc5, 0xbf, 0xa1, 0xeb, 0x8b, 0xf9, 0x69,
+			0xb6, 0x31, 0xec, 0xd8, 0xb3, 0x71, 0x6c, 0x67,
+			0x22, 0x33, 0xe6, 0x90, 0x3e, 0xe6, 0xa7, 0x7c,
+			0xd7, 0x36, 0x2e, 0x06, 0x30, 0x3c, 0x36, 0xf4,
+			0xca, 0xdc, 0xe6, 0xaa, 0xee, 0x1c, 0x84, 0x3b,
+			0x43, 0x64, 0x65, 0x0e, 0xb4, 0xc9, 0x68, 0x9e,
+			0x53, 0x21, 0x95, 0x8e, 0x49, 0xbc, 0x77, 0xfa,
+			0x30, 0x7d, 0x72, 0x81, 0x30, 0x76, 0x34, 0x75,
+			0x06, 0xa9, 0xc9, 0x1a, 0x95, 0xf1, 0xd7, 0x7b,
+			0x0e, 0xe3, 0x11, 0xdb, 0xe8, 0x3e, 0xd4, 0x8f,
+			0xb9, 0xc1, 0x85, 0x30, 0x1b, 0xb2, 0x73, 0xc7,
+			0x63, 0x8c, 0x70, 0x4a, 0x8b, 0x61, 0xc3, 0xca,
+			0x8e, 0xcd, 0x95, 0xd2, 0x51, 0x9b, 0xae, 0x58,
+			0xbc, 0x0a, 0x26, 0x31, 0x98, 0x28, 0x8e, 0xed,
+			0x96, 0x81, 0x28, 0xec, 0x0a, 0xb6, 0x75, 0xa1,
+			0xd1, 0x77, 0xc9, 0xc7, 0x9a, 0x30, 0xf3, 0xe8,
+			0xea, 0xae, 0x41, 0x61, 0x92, 0x9c, 0xd7, 0xec,
+			0x69, 0x53, 0x4f, 0xd3, 0x7d, 0xee, 0x3b, 0x98,
+			0xf9, 0x9e, 0xa0, 0xe9, 0x47, 0xd4, 0x8f, 0xdc,
+			0x19, 0x25, 0xff, 0x72, 0xeb, 0x96, 0x48, 0x16,
+			0x63, 0x44, 0xb1, 0xb1, 0xec, 0x93, 0x3f, 0x0c,
+			0xd3, 0x7c, 0x57, 0xa3, 0x75, 0xb0, 0x58, 0xcf,
+			0xbc, 0x73, 0xdf, 0xb6, 0xb9, 0xe6, 0x54, 0x6a,
+			0x84, 0x02, 0x01, 0xc9, 0xb2, 0x37, 0x52, 0x58,
+			0x72, 0xb0, 0x17, 0xe5, 0xe9, 0x05, 0xf9, 0x79,
+			0x6f, 0xf0, 0xab, 0x67, 0x33, 0xf2, 0xaf, 0xd4,
+			0x00, 0x3e, 0x51, 0xc2, 0x03, 0x3f, 0x95, 0x08,
+			0x99, 0xc4, 0x91, 0x3e, 0xff, 0x97, 0x5f, 0xf6,
+			0x0e, 0x5a, 0xcf, 0x6f, 0x24, 0xbb, 0x6c, 0x70,
+			0x26, 0x24, 0x51, 0x32, 0xd9, 0x6d, 0xa9, 0xcb,
+			0x7d, 0x8c, 0x76, 0xb4, 0x34, 0x30, 0x7d, 0xb9,
+			0x9d, 0x69, 0xe5, 0x22, 0x42, 0xf8, 0x6c, 0x77,
+			0xdc, 0x0b, 0x87, 0x00, 0xd9, 0x22, 0x72, 0x94,
+			0x82, 0x0e, 0xd5, 0xa3, 0x3b, 0x92, 0xeb, 0xee,
+			0x1e, 0xe8, 0x73, 0xb4, 0xab, 0x41, 0x55, 0x10,
+			0x53, 0x6a, 0x61, 0x54, 0x76, 0xa0, 0x94, 0x90,
+			0xd5, 0xe4, 0x74, 0x2c, 0xdb, 0xe3, 0x94, 0x5c,
+			0x09, 0x31, 0x1e, 0x16, 0x2e, 0x0a, 0xb5, 0x34,
+			0x85, 0x15, 0x43, 0x5a, 0x41, 0x83, 0xcb, 0xd1,
+			0xda, 0xbf, 0x71, 0xcc, 0x77, 0x09, 0x82, 0xc6,
+			0x08, 0x79, 0xf3, 0x78, 0x1f, 0xfd, 0xef, 0x8c,
+			0x56, 0xe5, 0x7d, 0x68, 0x06, 0x93, 0xf9, 0x4b,
+			0x91, 0x07, 0xb4, 0x09, 0x4d, 0xc6, 0xb1, 0xf5,
+			0x92, 0x62, 0x3d, 0x2f, 0x35, 0x49, 0xaf, 0x15,
+			0xb9, 0x6c, 0xab, 0x2e, 0xa7, 0x9e, 0x20, 0x59,
+			0xe7, 0x7d, 0xf6, 0x8d, 0x18, 0x5e, 0xed, 0x68,
+			0x5c, 0x94, 0xf5, 0x45, 0x44, 0xb5, 0x5d, 0x86,
+			0x4c, 0xe3, 0x69, 0x0f, 0xe3, 0x29, 0xb2, 0xf6,
+			0x2a, 0xd4, 0xee, 0x7c, 0x9b, 0xe6, 0xad, 0xcf,
+			0x90, 0x34, 0x85, 0xca, 0xc5, 0xa1, 0x36, 0xdd,
+			0x7b, 0xaf, 0x36, 0x5e, 0x7c, 0xf3, 0x55, 0xf9,
+			0xae, 0x8d, 0x23, 0xcf, 0x33, 0x98, 0xdc, 0x4e,
+			0x09, 0xcb, 0x81, 0x12, 0x2f, 0x88, 0x52, 0x5a,
+			0xd8, 0xeb, 0x56, 0x86, 0xab, 0x30, 0x57, 0xe9,
+			0x26, 0x62, 0x02, 0xfd, 0xb0, 0xf4, 0xfd, 0xff,
+			0xf7, 0xf7, 0xe5, 0x65, 0x94, 0x7e, 0x3b, 0xc5,
+			0x76, 0x4e, 0x3f, 0x4d, 0x31, 0xc8, 0x46, 0xbe,
+			0xbf, 0x98, 0x70, 0x46, 0x71, 0x61, 0xd1, 0x02,
+			0x98, 0xd9, 0xf8, 0xc0, 0xcc, 0x0c, 0x08, 0x09,
+			0x71, 0x10, 0xb1, 0x30, 0xa9, 0x7f, 0x0a, 0x21,
+			0xf9, 0xc5, 0x28, 0x35, 0x23, 0x1e, 0xfe, 0xab,
+			0x03, 0x18, 0x2a, 0x34, 0xe0, 0xcb, 0x5c, 0x19,
+			0x45, 0x2b, 0xec, 0x63, 0xfe, 0xaf, 0x60, 0x72,
+			0x61, 0x2e, 0x7a, 0xd9, 0x7d, 0x08, 0xb2, 0xd7,
+			0x90, 0x7a, 0xc8, 0xbe, 0x4d, 0xf6, 0xa1, 0xf5,
+			0xe4, 0xe5, 0xd1, 0x6d, 0x02, 0xec, 0x2a, 0x01,
+			0x9c, 0xc4, 0xee, 0x41, 0x10, 0x47, 0xee, 0x22,
+			0x30, 0x12, 0xf6, 0xd3, 0x3c, 0x0e, 0xa6, 0x78,
+			0x77, 0x2e, 0x61, 0xfd, 0xa2, 0x5f, 0x73, 0x9c,
+			0x25, 0xbc, 0xa3, 0xf2, 0x72, 0xe0, 0xc6, 0xdc,
+			0xb6, 0xc7, 0x7b, 0xb5, 0x93, 0xc2, 0x60, 0x1e,
+			0x52, 0xd3, 0x25, 0x28, 0xbd, 0xd0, 0x0d, 0xd7,
+			0x31, 0xd9, 0x2c, 0xe8, 0xb3, 0xb9, 0x5c, 0x1e,
+			0x74, 0x6b, 0x91, 0xff, 0xd2, 0x0f, 0x03, 0x32,
+			0x36, 0x75, 0x26, 0x12, 0xee, 0xa0, 0x25, 0xdb,
+			0x23, 0x5f, 0x3e, 0x6f, 0x36, 0x7f, 0x4e, 0x89,
+			0xa3, 0x4d, 0x30, 0xd6, 0xa2, 0xe4, 0x66, 0xfc,
+			0x0b, 0x4b, 0x07, 0x53, 0xa9, 0xd6, 0x61, 0x7b,
+			0x4b, 0xa4, 0xe9, 0x5a, 0xe6, 0xf6, 0xed, 0xe5,
+			0x9b, 0xb0, 0xc0, 0x6a, 0xa6, 0x7e, 0x13, 0xa4,
+			0x66, 0xb9, 0x39, 0xf5, 0x2a, 0x27, 0x26, 0x35,
+			0x58, 0x36, 0x73, 0x8c, 0x7a, 0x9d, 0x69, 0x31,
+			0x25, 0xd5, 0x14, 0xdf, 0x21, 0x68, 0xe3, 0xa3,
+			0xa4, 0x43, 0x07, 0x2d, 0x0b, 0x7f, 0x8b, 0xa5,
+			0x0b, 0x13, 0xe0, 0xe2, 0x0b, 0xcf, 0xc6, 0x9b,
+			0xe6, 0xe4, 0x39, 0x13, 0xf7, 0x2a, 0x44, 0x76,
+			0x60, 0x88, 0x96, 0xd9, 0xe4, 0xf1, 0xe0, 0xc9,
+			0xc8, 0xf4, 0x17, 0x56, 0x4c, 0x06, 0xda, 0x2d,
+			0xea, 0xf4, 0x6b, 0x51, 0xb1, 0xff, 0xbc, 0x2e,
+			0x08, 0xbd, 0x8f, 0xe2, 0x40, 0xac, 0x78, 0x7a,
+			0x16, 0xf7, 0xb8, 0xd5, 0x31, 0xd0, 0x3c, 0xab,
+			0x75, 0x0f, 0xf1, 0xd0, 0x29, 0x6c, 0x88, 0xa6,
+			0x08, 0x64, 0xb0, 0x21, 0x6a, 0x0d, 0x21, 0xfb,
+			0x36, 0xd0, 0xe4, 0x65, 0xe8, 0x82, 0x95, 0x35,
+			0xfb, 0xde, 0x07, 0x10, 0xfd, 0x84, 0xc0, 0xf8,
+			0x99, 0xe2, 0x58, 0xa3, 0x16, 0xe0, 0xb6, 0x62,
+			0xf2, 0xa1, 0xd9, 0xb0, 0xf4, 0x28, 0xa0, 0xbf,
+			0x2a, 0x40, 0x5c, 0xef, 0xa3, 0xbc, 0xb1, 0x2e,
+			0x45, 0xd8, 0xbc, 0x21, 0x5d, 0x9d, 0x91, 0x33,
+			0xc1, 0x38, 0xd5, 0x68, 0x61, 0x67, 0x8e, 0xb0,
+			0x37, 0xf8, 0x6d, 0xf6, 0xc5, 0x5d, 0x89, 0xd0,
+			0x5a, 0x4f, 0xde, 0x74, 0x9a, 0x3d, 0x70, 0x79,
+			0xfc, 0xa7, 0x18, 0x4f, 0x52, 0xd9, 0xbc, 0x5c,
+			0x60, 0xd6, 0xfb, 0x95, 0x8f, 0xa9, 0x90, 0xc0,
+			0x71, 0xe7, 0xc4, 0x51, 0xbd, 0x10, 0x13, 0xcf,
+			0xf9, 0x3a, 0x04, 0xae, 0x92, 0x1e, 0xd3, 0x6a,
+			0x54, 0x67, 0x92, 0xa7, 0x14, 0x04, 0x67, 0x53,
+			0xb9, 0x9f, 0xe1, 0xd2, 0xfc, 0x50, 0x20, 0xd5,
+			0x98, 0x02, 0xb7, 0xbc, 0x72, 0xac, 0xf6, 0x53,
+			0x1f, 0x7b, 0x8d, 0x05, 0x21, 0xdd, 0x43, 0x43,
+			0x38, 0x11, 0x8b, 0x1c, 0x11, 0xb0, 0x27, 0x87,
+			0xba, 0xf3, 0x09, 0xc2, 0x2a, 0x2b, 0x89, 0x49,
+			0x2c, 0xdc, 0xc4, 0x95, 0x92, 0x3a, 0x8e, 0xec,
+			0x7b, 0xf4, 0x18, 0xf0, 0xc2, 0x39, 0x6c, 0xaa,
+			0x24, 0xc6, 0xd3, 0x36, 0x73, 0x48, 0xe5, 0x33,
+			0x02, 0x8a, 0x5c, 0x03, 0xee, 0x9f, 0xa7, 0x04,
+			0x87, 0x85, 0x28, 0x03, 0xd5, 0x6b, 0xca, 0x0a,
+			0xac, 0xfd, 0xb6, 0xc7, 0x1e, 0x5d, 0x50, 0xf9,
+			0x7e, 0xc9, 0x61, 0x59, 0xb5, 0x31, 0xe2, 0x30,
+			0xd5, 0xa6, 0xac, 0x44, 0x3d, 0x47, 0x04, 0x18,
+			0x54, 0x67, 0xae, 0x0a, 0xea, 0x3d, 0xd0, 0x33,
+			0x24, 0xb3, 0x56, 0x55, 0xe8, 0xea, 0x07, 0xa4,
+			0x6a, 0x0e, 0xd3, 0xbd, 0x56, 0x7f, 0x8a, 0x5a,
+			0xbf, 0xd3, 0x40, 0xd4, 0xd8, 0x3e, 0xa3, 0xe6,
+			0xc0, 0x4e, 0x01, 0x4d, 0x6a, 0xe9, 0x7e, 0x91,
+			0x8b, 0x1f, 0x3d, 0x6d, 0x38, 0x4a, 0xbd, 0xdb,
+			0x8e, 0xf3, 0x0a, 0x1d, 0xb7, 0x2c, 0x95, 0xb7,
+			0xff, 0xaf, 0x6d, 0xed, 0x68, 0xd4, 0x68, 0x20,
+			0x86, 0x13, 0x45, 0x19, 0xc4, 0x50, 0x6c, 0x94,
+			0xc2, 0x71, 0xea, 0x69, 0x9d, 0x12, 0xff, 0xe1,
+			0xd0, 0xc7, 0x1b, 0x9f, 0x21, 0xce, 0x1d, 0x19,
+			0x3a, 0x3c, 0xf3, 0x5f, 0x24, 0x89, 0x95, 0x2a,
+			0x37, 0x85, 0x18, 0xd7, 0x4f, 0xf4, 0x6f, 0x53,
+			0x9c, 0x63, 0xce, 0x41, 0x0f, 0x76, 0x99, 0xa1,
+			0x23, 0xdd, 0x30, 0x52, 0xde, 0x56, 0xe1, 0xe5,
+			0xef, 0xbf, 0x9e, 0x96, 0xd5, 0x1f, 0x3b, 0x37,
+			0x3d, 0x2b, 0xd1, 0xaf, 0xf2, 0x00, 0x70, 0xa5,
+			0x03, 0xe0, 0xb2, 0xcb, 0xa1, 0xa5, 0x77, 0xb0,
+			0xc3, 0xfe, 0xb9, 0x55, 0xe2, 0x45, 0x7f, 0xf4,
+			0x10, 0xe0, 0x0d, 0x58, 0x4c, 0x80, 0x2a, 0xb1,
+			0xf0, 0x2f, 0x69, 0xc1, 0x14, 0xa1, 0xe0, 0x47,
+			0xed, 0x02, 0x1e, 0x6c, 0x70, 0x83, 0x61, 0xc9,
+			0xa5, 0x6d, 0xeb, 0xfd, 0xb7, 0x3d, 0x76, 0x39,
+			0xd8, 0x8e, 0xbc, 0xbc, 0x5a, 0xe1, 0xe0, 0x01,
+			0x8d, 0xb7, 0xd9, 0x1c, 0x97, 0x2b, 0xb6, 0x12,
+			0x6f, 0x61, 0x29, 0x08, 0xe9, 0x59, 0xb6, 0x88,
+			0x37, 0x47, 0x7d, 0x91, 0xc2, 0x6c, 0x84, 0x1f,
+			0xc0, 0xc8, 0x93, 0x98, 0xe3, 0xc3, 0xdc, 0x74,
+			0x1d, 0x3e, 0xe3, 0x8e, 0x1e, 0xd3, 0x4f, 0x57,
+			0x92, 0xd0, 0xf5, 0x12, 0x93, 0xe3, 0x27, 0x8d,
+			0x0e, 0xa1, 0xad, 0x6a, 0x04, 0x4e, 0xac, 0x79,
+			0xb1, 0xff, 0x35, 0x36, 0x57, 0x2a, 0x18, 0x1e,
+			0xcc, 0xe2, 0x8e, 0x4b, 0x58, 0x76, 0x6b, 0xc8,
+			0xe7, 0x8b, 0x0f, 0x18, 0xe0, 0x56, 0xa7, 0x87,
+			0x21, 0xd0, 0xd5, 0xd9, 0x76, 0x44, 0x6b, 0xd0,
+			0xe7, 0x0d, 0xaa, 0x4b, 0x3c, 0xb9, 0x15, 0x68,
+			0xfe, 0xad, 0x89, 0x9f, 0x11, 0x6d, 0x6d, 0x29,
+			0x51, 0xc4, 0x07, 0x95, 0x9d, 0x33, 0xa2, 0xee,
+			0x02, 0xab, 0x31, 0x65, 0xfd, 0x8c, 0x5c, 0x3a,
+			0x38, 0x46, 0xcb, 0x29, 0x33, 0x53, 0xd9, 0x81,
+			0xdd, 0xbb, 0x4a, 0x71, 0xfc, 0x7d, 0xd4, 0x38,
+			0xf2, 0x81, 0x6c, 0xbc, 0xb5, 0x4d, 0x1e, 0xd6,
+			0x6c, 0x21, 0x51, 0x4d, 0x63, 0x28, 0x57, 0x9f,
+			0x8f, 0xd4, 0x7f, 0x92, 0x70, 0x4f, 0xe7, 0x0d,
+			0x2f, 0xe0, 0x74, 0x28, 0x16, 0xf0, 0x40, 0x97,
+			0x5c, 0xd0, 0x37, 0x93, 0x23, 0x57, 0xa1, 0xb7,
+			0x2f, 0x44, 0xd8, 0xd1, 0x1b, 0xea, 0x10, 0x85,
+			0x76, 0x3b, 0xa6, 0xb3, 0x94, 0x26, 0x26, 0xa8,
+			0xd7, 0xbf, 0x69, 0x43, 0x1c, 0xdd, 0x58, 0xb7,
+			0x3b, 0x4d, 0x77, 0xae, 0x0d, 0xea, 0x35, 0x73,
+			0xa7, 0x5e, 0xe1, 0x94, 0xa8, 0xc4, 0x3f, 0x42,
+			0xef, 0x79, 0x19, 0xf3, 0xbf, 0x4f, 0xd7, 0x65,
+			0x81, 0xe0, 0xcd, 0x5d, 0x98, 0x5c, 0x30, 0x1c,
+			0x51, 0x25, 0xb8, 0xfe, 0x04, 0x93, 0x45, 0x9c,
+			0xee, 0xee, 0x4d, 0x03, 0x75, 0x35, 0x08, 0x1e,
+			0x94, 0x08, 0x50, 0xa8, 0x6b, 0x14, 0x4e, 0xbe,
+			0x92, 0x48, 0x9f, 0xd7, 0x9c, 0x34, 0x0f, 0xa2,
+			0x31, 0x49, 0xe9, 0xd7, 0x9d, 0xed, 0x08, 0xcf,
+			0xb2, 0x28, 0xd6, 0x4f, 0x78, 0xfc, 0x84, 0xca,
+			0xb4, 0xeb, 0xa8, 0x61, 0x31, 0xe5, 0xcc, 0xfd,
+			0x4d, 0x24, 0x31, 0xb0, 0x18, 0x4c, 0x68, 0x45,
+			0x0d, 0xcd, 0x3f, 0xbc, 0x1d, 0xa5, 0xec, 0xe4,
+			0xe1, 0x66, 0xaa, 0x52, 0x2c, 0xc2, 0x0b, 0xdc,
+			0xeb, 0xf4, 0xe3, 0x31, 0xc6, 0x86, 0xb2, 0x32,
+			0x24, 0x44, 0x95, 0x0a, 0x3d, 0x87, 0x97, 0xc7,
+			0xff, 0x40, 0x65, 0x75, 0x04, 0x51, 0x4d, 0x81,
+			0x2f, 0x60, 0x8e, 0x58, 0xf9, 0x66, 0x10, 0xb2,
+			0x5e, 0xdb, 0xf0, 0x64, 0x9c, 0x49, 0x8b, 0x91,
+			0xb7, 0x2e, 0x47, 0xf9, 0xaf, 0x80, 0x5c, 0x34,
+			0xf4, 0x32, 0x12, 0x76, 0x91, 0x9b, 0x46, 0x1c,
+			0xce, 0xa5, 0x94, 0xb8, 0xd3, 0x97, 0xfc, 0x35,
+			0xc0, 0x40, 0xc0, 0xd6, 0x49, 0xd9, 0x32, 0x2c,
+			0x0a, 0x1e, 0xab, 0x00, 0xab, 0xf5, 0xd6, 0xd6,
+			0x77, 0xad, 0xc4, 0xfd, 0x2a, 0x48, 0xc7, 0x73,
+			0xbc, 0xc6, 0x63, 0x53, 0x7c, 0x2b, 0x92, 0xdf,
+			0xd8, 0x33, 0xec, 0x34, 0x1e, 0xd0, 0x29, 0x8a,
+			0x52, 0xd8, 0xf7, 0xd3, 0xcb, 0xd1, 0x55, 0x3b,
+			0x0d, 0x14, 0xb6, 0x96, 0xf1, 0x62, 0xc5, 0x09,
+			0x30, 0xee, 0xef, 0x0f, 0xef, 0xf9, 0x5b, 0x96,
+			0x0a, 0xf2, 0x06, 0x82, 0x5f, 0x25, 0x59, 0xaa,
+			0xa4, 0xa3, 0x65, 0x33, 0xa1, 0x0c, 0xd5, 0xeb,
+			0xf2, 0xf3, 0xc2, 0x40, 0x06, 0x4a, 0xb3, 0x9c,
+			0xd2, 0xc7, 0x3f, 0xa1, 0xd6, 0xe9, 0xb3, 0x0a,
+			0x4e, 0x3b, 0x37, 0x40, 0x17, 0x76, 0xd7, 0x3d,
+			0x8e, 0xff, 0x40, 0x13, 0xa8, 0xe9, 0xee, 0x68,
+			0x06, 0xdd, 0x8b, 0x0d, 0x83, 0x11, 0xd3, 0x86,
+			0x6b, 0x1d, 0x19, 0x51, 0xa2, 0xd7, 0x16, 0x45,
+			0xd6, 0x98, 0x75, 0xf7, 0x6d, 0x6f, 0x61, 0x95,
+			0x5f, 0x7e, 0xe2, 0xf7, 0x42, 0x82, 0x0c, 0x72,
+			0x69, 0xa9, 0x15, 0xb3, 0x2a, 0xc0, 0xc5, 0x5d,
+			0x89, 0x41, 0x7f, 0xa7, 0x12, 0xa3, 0x03, 0x7e,
+			0x3e, 0x76, 0x38, 0xc7, 0xb6, 0x1c, 0xc0, 0xb6,
+			0x2f, 0xe7, 0x17, 0x80, 0x8a, 0xd0, 0xee, 0x38,
+			0xbc, 0x63, 0xe2, 0xa1, 0xd6, 0x34, 0x3d, 0xa9,
+			0x97, 0x6c, 0x5f, 0x39, 0xac, 0x1c, 0x25, 0x87,
+			0xc1, 0x1f, 0x2b, 0x4b, 0xda, 0x09, 0xa3, 0xb9,
+			0x91, 0x71, 0xdb, 0x48, 0x79, 0xd2, 0xa2, 0xfb,
+			0x5f, 0x36, 0xfd, 0x74, 0x1f, 0x40, 0x51, 0x5f,
+			0xc3, 0x21, 0x33, 0x7a, 0xea, 0x03, 0x94, 0x83,
+			0x89, 0x73, 0x08, 0x91, 0xf5, 0x6a, 0x1d, 0x31,
+			0x69, 0x86, 0xd1, 0xed, 0xf8, 0x0a, 0x7c, 0xe4,
+			0xb8, 0xfb, 0x4f, 0x3d, 0x14, 0x73, 0xe7, 0xdc,
+			0x7a, 0xb9, 0xd0, 0xaf, 0xad, 0x0d, 0x15, 0x08,
+			0xb4, 0xb9, 0x0a, 0x48, 0x06, 0xe8, 0xbb, 0xd4,
+			0x7e, 0xf7, 0xee, 0xdd, 0x65, 0x88, 0x6a, 0xbc,
+			0x6b, 0x40, 0x49, 0x5b, 0x53, 0x11, 0x10, 0x17,
+			0x92, 0x0a, 0xb9, 0x4a, 0xfd, 0xa2, 0x4c, 0xe4,
+			0x18, 0xd8, 0xbb, 0x6e, 0x60, 0xb1, 0xba, 0x36,
+			0xd0, 0xa6, 0xd2, 0x2f, 0x6b, 0x42, 0x9f, 0x31,
+			0xaf, 0xe0, 0x36, 0x5c, 0xc0, 0x64, 0x48, 0x07,
+			0xd6, 0x2a, 0xe3, 0xb5, 0x9e, 0xcf, 0x26, 0x9a,
+			0x8e, 0x49, 0xaf, 0xe5, 0xd7, 0x94, 0x5b, 0x20,
+			0xab, 0x59, 0x3b, 0xe2, 0xdb, 0x39, 0xab, 0x65,
+			0xda, 0xdb, 0x56, 0xfc, 0x20, 0x0e, 0xb7, 0xa5,
+			0xa4, 0x96, 0x1f, 0xd2, 0xe4, 0xce, 0x7a, 0xba,
+			0x83, 0x00, 0xac, 0x89, 0x9b, 0xcb, 0x01, 0x3d,
+			0xba, 0xf0, 0x57, 0x47, 0xba, 0xdd, 0xa1, 0xf7,
+			0xe3, 0x84, 0x28, 0xdf, 0xf7, 0x70, 0xd3, 0x08,
+			0xcf, 0xb9, 0x9b, 0x97, 0x14, 0x48, 0x80, 0x40,
+			0xd8, 0x6b, 0x1e, 0xaa, 0xa1, 0x5b, 0x42, 0x17,
+			0x05, 0xe9, 0x61, 0x8f, 0x98, 0x5f, 0x26, 0x19,
+			0x84, 0x26, 0x30, 0x94, 0x52, 0xce, 0x50, 0xaa,
+			0x9b, 0x13, 0x0c, 0xad, 0x97, 0x96, 0xcb, 0x10,
+			0xc1, 0xb0, 0x85, 0x7b, 0x7c, 0xe9, 0xc6, 0xae,
+			0x96, 0x39, 0xfc, 0x43, 0x7c, 0x77, 0x12, 0x53,
+			0x70, 0xf0, 0xec, 0x95, 0x2a, 0x7c, 0x60, 0x18,
+			0x50, 0x3f, 0x0d, 0x35, 0x88, 0x0b, 0xc1, 0x7b,
+			0xba, 0x55, 0xc6, 0xad, 0x4b, 0xc8, 0x52, 0x11,
+			0xec, 0xe3, 0x60, 0xc1, 0xe1, 0x79, 0xb4, 0x57,
+			0x3f, 0x84, 0x9a, 0xb6, 0xef, 0x6f, 0x7e, 0x57,
+			0xba, 0xcc, 0xae, 0xd4, 0xca, 0x5f, 0xe1, 0xb5,
+			0x11, 0x5a, 0x44, 0x91, 0x3a, 0x2e, 0x5c, 0xbc,
+			0xd2, 0x13, 0x4f, 0x00, 0x58, 0x69, 0xbf, 0xa4,
+			0x14, 0x89, 0xcf, 0x88, 0x9a, 0xf4, 0x6c, 0x16,
+			0x3a, 0xdb, 0x83, 0x0b, 0x4d, 0xe7, 0x69, 0x37,
+			0x17, 0xe1, 0xf0, 0xfb, 0x1c, 0xab, 0x20, 0xac,
+			0xe7, 0x54, 0x4a, 0xd6, 0x0f, 0x6e, 0x61, 0x30,
+			0xbe, 0xff, 0xbf, 0x1e, 0x3f, 0xaf, 0x25, 0x62,
+			0x17, 0x25, 0xfc, 0xca, 0x39, 0x36, 0x74, 0xed,
+			0xa9, 0xfa, 0x35, 0xd3, 0xa6, 0xf7, 0x6f, 0xa5,
+			0x4a, 0x33, 0x6b, 0x58, 0x82, 0x5d, 0x79, 0x71,
+			0x9c, 0x9f, 0x38, 0xb6, 0x98, 0xe1, 0x4f, 0xce,
+			0xa3, 0xbb, 0x6e, 0xb4, 0x6c, 0x7f, 0xd1, 0x99,
+			0x02, 0x36, 0xbd, 0xa1, 0xe9, 0xc9, 0xbc, 0x8b,
+			0xeb, 0xbf, 0xf1, 0xb8, 0xea, 0xda, 0x71, 0x39,
+			0xd4, 0x95, 0xc5, 0xb7, 0x6c, 0x2a, 0x92, 0xc9,
+			0xd7, 0x68, 0xd8, 0xd2, 0xc1, 0x5e, 0xda, 0xac,
+			0x0a, 0x44, 0x6c, 0x0a, 0x1f, 0xaf, 0x0a, 0x2f,
+			0xa1, 0x1c, 0x7e, 0x2b, 0x53, 0x47, 0x7c, 0x60,
+			0x36, 0x7a, 0xb2, 0x9a, 0x01, 0xec, 0x8a, 0x72,
+			0x08, 0xe8, 0xb9, 0xc5, 0x03, 0x86, 0x13, 0x6b,
+			0x88, 0x20, 0xf3, 0x5e, 0x53, 0x22, 0x08, 0x9b,
+			0x43, 0xce, 0x4e, 0x6d, 0x98, 0xed, 0xb5, 0x7b,
+			0x9e, 0x9b, 0xc0, 0xda, 0xff, 0x8e, 0x55, 0x40,
+			0x4d, 0xdb, 0xe5, 0xc0, 0x34, 0x18, 0x4c, 0x6f,
+			0x7a, 0x10, 0xac, 0x8d, 0xc0, 0xf1, 0xdd, 0xdc,
+			0xa7, 0xea, 0x86, 0xcf, 0x8e, 0x73, 0x31, 0x54,
+			0x0b, 0x1f, 0x1d, 0x1d, 0xa3, 0x9a, 0x92, 0x14,
+			0x72, 0xc6, 0x2b, 0x9f, 0x36, 0x25, 0xbe, 0x4a,
+			0x6f, 0xe4, 0xfd, 0xe9, 0xd4, 0x44, 0x12, 0xff,
+			0xbd, 0xfa, 0xc4, 0xac, 0xe6, 0xad, 0x15, 0x60,
+			0x75, 0x76, 0x54, 0x76, 0x05, 0xb8, 0xde, 0xed,
+			0x73, 0xd2, 0x91, 0x1a, 0x23, 0x11, 0xde, 0x4b,
+			0x49, 0x7d, 0xd4, 0xdd, 0x77, 0x45, 0xb5, 0xc6,
+			0xfc, 0xb7, 0x55, 0x29, 0x84, 0x03, 0x8a, 0xcc,
+			0x5a, 0x88, 0x88, 0xb0, 0x6c, 0x14, 0x33, 0xc7,
+			0xab, 0x79, 0x75, 0x9a, 0x46, 0xa1, 0xab, 0x5e,
+			0x93, 0x8f, 0x2c, 0x4f, 0xc7, 0x54, 0xaa, 0x27,
+			0x64, 0x91, 0xbe, 0xb6, 0xa0, 0xc3, 0x9e, 0x08,
+			0xea, 0x06, 0x8f, 0x7e, 0x0c, 0x50, 0x1f, 0xfc,
+			0x2e, 0xd3, 0xdf, 0x06, 0x23, 0x35, 0xa7, 0xbb,
+			0x0d, 0xe6, 0xd2, 0x18, 0x24, 0x7a, 0xbd, 0xa7,
+			0x0c, 0x40, 0x69, 0x92, 0x62, 0xec, 0xe3, 0x04,
+			0x9e, 0x43, 0x16, 0xb8, 0xa3, 0x5f, 0x3d, 0x00,
+			0xf3, 0xc6, 0xfc, 0x73, 0x8c, 0xa8, 0xda, 0x76,
+			0xaf, 0x20, 0x3c, 0x0c, 0xdb, 0xc4, 0x21, 0x86,
+			0xcd, 0x21, 0xac, 0x2c, 0xd4, 0x8e, 0xc3, 0x18,
+			0xdb, 0x6b, 0xa6, 0xe3, 0x84, 0xcc, 0xd2, 0xa0,
+			0x0a, 0xb0, 0x83, 0x56, 0xbf, 0x24, 0x6b, 0x25,
+			0xa1, 0xe7, 0xe4, 0x58, 0x13, 0x5d, 0xa2, 0x25,
+			0x09, 0xae, 0x97, 0x79, 0x1e, 0x2e, 0x56, 0xb7,
+			0x35, 0x55, 0xf0, 0x1a, 0xa1, 0x7b, 0x11, 0x0c,
+			0x4b, 0xad, 0x83, 0x26, 0x6e, 0x14, 0xea, 0x89,
+			0x6d, 0x39, 0x7d, 0x27, 0x67, 0x9b, 0xaf, 0x05,
+			0x58, 0x25, 0xc9, 0x99, 0xe8, 0x9a, 0x3c, 0xff,
+			0xc9, 0x1c, 0x1a, 0x3c, 0xeb, 0x87, 0xba, 0xd4,
+			0xcb, 0x7d, 0x9a, 0x36, 0x42, 0xb7, 0xa3, 0x62,
+			0xed, 0xf2, 0xd2, 0x67, 0x48, 0x63, 0x82, 0xc1,
+			0x77, 0x10, 0x04, 0x74, 0x24, 0x66, 0x28, 0x9f,
+			0xd5, 0xcb, 0x0d, 0xbb, 0x74, 0x3f, 0x1a, 0x02,
+			0xcc, 0x47, 0x8d, 0x59, 0xba, 0xcf, 0xc6, 0xe8,
+			0xcb, 0x7f, 0xbc, 0xc5, 0xdf, 0x08, 0x12, 0xd0,
+			0x88, 0x1c, 0x6f, 0xa3, 0xad, 0xdd, 0x67, 0x90,
+			0x23, 0x4e, 0xe9, 0x07, 0x77, 0x62, 0x4f, 0x1e,
+			0x4c, 0xa8, 0x3b, 0xe7, 0xcf, 0x37, 0xfb, 0xa1,
+			0x7f, 0x13, 0xe5, 0x90, 0xd7, 0xdf, 0x96, 0x10,
+			0x16, 0x9a, 0x3e, 0x40, 0x73, 0x77, 0x11, 0x72,
+			0x04, 0x7e, 0x31, 0x37, 0xdf, 0x14, 0xdf, 0xcc,
+			0x83, 0xaf, 0xa8, 0x44, 0xf3, 0x68, 0xb6, 0xe6,
+			0x6c, 0x21, 0x0c, 0x28, 0x2e, 0xdb, 0xd0, 0xd8,
+			0x11, 0x33, 0x54, 0x4c, 0x9a, 0x89, 0x95, 0x81,
+			0xbd, 0x2b, 0x73, 0x2c, 0x63, 0x80, 0x91, 0xef,
+			0x0d, 0x29, 0xdc, 0xb3, 0x31, 0xfb, 0xc7, 0x3e,
+			0x02, 0x2f, 0x37, 0x68, 0x2d, 0xa2, 0xf3, 0x39,
+			0x20, 0xb1, 0x99, 0xc6, 0x91, 0xd6, 0x7a, 0xa7,
+			0x23, 0x7e, 0x09, 0x72, 0xb8, 0x4f, 0x19, 0x43,
+			0xba, 0x5a, 0x2e, 0x9b, 0xea, 0x07, 0xcf, 0xab,
+			0x95, 0x14, 0x2a, 0xdc, 0xf7, 0x6a, 0x67, 0xe9,
+			0xf5, 0xf9, 0x08, 0x4b, 0x9d, 0x1e, 0x44, 0x9e,
+			0x25, 0x3e, 0xb6, 0x2f, 0xc9, 0xa0, 0x6a, 0x53,
+			0xdd, 0xaa, 0x6d, 0xc7, 0xba, 0x0a, 0x83, 0x82,
+			0xda, 0x28, 0x8b, 0x08, 0xd9, 0xc1, 0xcf, 0xb5,
+			0x12, 0xea, 0x57, 0xf2, 0xc7, 0x2b, 0x6e, 0xdd,
+			0xdc, 0xff, 0x2e, 0xf6, 0xa8, 0xe1, 0x52, 0xd4,
+			0x93, 0x85, 0x02, 0x4a, 0x5f, 0xc7, 0x94, 0x4b,
+			0x4c, 0x79, 0xfb, 0xd4, 0xfd, 0xc2, 0x97, 0x47,
+			0xf0, 0xce, 0xda, 0x16, 0x17, 0xf7, 0xf8, 0x2f,
+			0x70, 0x74, 0x9e, 0xe5, 0xb9, 0x30, 0x86, 0x3f,
+			0x6d, 0xed, 0x56, 0x81, 0xb7, 0x6d, 0xf6, 0x60,
+			0x6f, 0xc4, 0xd0, 0x98, 0x13, 0xa3, 0xd9, 0x43,
+			0x12, 0x4f, 0xa0, 0x62, 0xfa, 0xfe, 0xe6, 0xbb,
+			0xea, 0x5e, 0xd6, 0xdf, 0x01, 0x83, 0x21, 0x40,
+			0xc5, 0x8b, 0x3d, 0xc7, 0xaf, 0x01, 0xdd, 0xa9,
+			0x18, 0x17, 0x2a, 0x70, 0x24, 0x03, 0x78, 0xc0,
+			0xe3, 0x6a, 0x06, 0xcf, 0xd2, 0x7f, 0xa3, 0x44,
+			0x9e, 0xa0, 0xbc, 0x1a, 0x7b, 0x4e, 0x2c, 0x3f,
+			0x13, 0x31, 0xf3, 0x58, 0x1f, 0x37, 0x11, 0x3d,
+			0x16, 0x25, 0x9e, 0x31, 0x15, 0x61, 0xa2, 0x64,
+			0xc0, 0x01, 0xe3, 0x1c, 0x20, 0x59, 0x63, 0x04,
+			0x36, 0x1b, 0x10, 0x6d, 0x3a, 0x30, 0xac, 0x40,
+			0x99, 0x76, 0xdf, 0x47, 0xc0, 0x89, 0x64, 0x2b,
+			0x85, 0x07, 0x18, 0x6d, 0x40, 0x47, 0xe7, 0x03,
+			0x31, 0x29, 0x33, 0xc5, 0x46, 0x51, 0x4f, 0x0c,
+			0x79, 0xb2, 0x45, 0x0e, 0xd9, 0xa9, 0xe7, 0xed,
+			0x15, 0x60, 0xa7, 0xec, 0xbd, 0x15, 0x47, 0xba,
+			0x40, 0x7a, 0xa6, 0xb2, 0x29, 0x13, 0xcc, 0xc3,
+			0x3b, 0xbc, 0x00, 0x69, 0xc6, 0x4a, 0x16, 0xc4,
+			0x60, 0xc2, 0x9a, 0x30, 0xd2, 0x16, 0x67, 0x83,
+			0x03, 0xee, 0x01, 0x62, 0xb7, 0xa5, 0x15, 0x62,
+			0x89, 0x09, 0xd0, 0x9b, 0x71, 0x58, 0x4f, 0x8b,
+			0x1a, 0x14, 0x85, 0xfd, 0x39, 0x69, 0x06, 0x5b,
+			0xb5, 0xf2, 0xe1, 0x4b, 0xcf, 0xaa, 0x7b, 0x76,
+			0xe3, 0x17, 0x2f, 0x6e, 0x1c, 0xd0, 0xb9, 0x5b,
+			0xa7, 0x5a, 0x65, 0x6e, 0x46, 0x8d, 0x7b, 0xb2,
+			0xec, 0x39, 0x08, 0x2f, 0x6d, 0xaf, 0x0a, 0xe2,
+			0xcd, 0xa7, 0xc6, 0xea, 0x59, 0xfe, 0xc0, 0x5d,
+			0x31, 0x3e, 0x5d, 0x90, 0x67, 0x2f, 0xee, 0xd4,
+			0xad, 0xde, 0xdb, 0x08, 0x1d, 0x0d, 0x9a, 0xfa,
+			0xe4, 0xea, 0xa0, 0x02, 0xf8, 0x4f, 0x70, 0x5d,
+			0xda, 0x0b, 0xb2, 0x16, 0x7c, 0x5c, 0xbf, 0x91,
+			0x10, 0x6f, 0x6d, 0x8a, 0x57, 0x45, 0x2a, 0x20,
+			0xe0, 0xd5, 0x94, 0x69, 0x84, 0x49, 0xd6, 0x0e,
+			0x94, 0x5f, 0x40, 0x15, 0xf6, 0x6c, 0xa1, 0xbc,
+			0xef, 0x79, 0x8c, 0xdd, 0x86, 0xe3, 0x74, 0x91,
+			0x1d, 0xc6, 0x7b, 0x95, 0xc2, 0x4d, 0x26, 0xec,
+			0x26, 0x98, 0xc8, 0x13, 0xdc, 0x86, 0xfb, 0x50,
+			0x15, 0x2d, 0xce, 0x19, 0x71, 0x1c, 0x78, 0xad,
+			0x9e, 0xc5, 0x92, 0xa3, 0x68, 0xf4, 0x87, 0xf4,
+			0x6d, 0x74, 0xd2, 0x4e, 0x63, 0x0b, 0x98, 0x17,
+			0xdf, 0x47, 0xa5, 0x73, 0x1f, 0x99, 0xac, 0x16,
+			0xd8, 0x44, 0xff, 0xc4, 0xf7, 0x5c, 0xec, 0x51,
+			0xd1, 0x55, 0xb9, 0xcb, 0x2b, 0xa7, 0x5b, 0x95,
+			0xe8, 0x9c, 0x22, 0x6c, 0x2d, 0x75, 0xab, 0x74,
+			0x56, 0xd7, 0x75, 0x3b, 0x32, 0xfa, 0x63, 0x90,
+			0x03, 0x32, 0x94, 0xfa, 0x8c, 0x0b, 0x1e, 0x0b,
+			0xa9, 0x8b, 0x65, 0x15, 0x17, 0xd1, 0x2c, 0x12,
+			0x7c, 0xa5, 0xaa, 0x12, 0x56, 0x09, 0x33, 0x02,
+			0xa5, 0xd7, 0x51, 0xc0, 0xa2, 0x96, 0x9d, 0x92,
+			0x2f, 0x92, 0xfd, 0x9a, 0x7e, 0xca, 0x14, 0x54,
+			0xa6, 0xbf, 0xa8, 0x68, 0x80, 0xff, 0x0e, 0x2f,
+			0xe4, 0x8b, 0xef, 0x29, 0xa5, 0x84, 0x01, 0x5d,
+			0xa1, 0x18, 0xe8, 0x29, 0x16, 0xfa, 0x88, 0xdc,
+			0x06, 0x1a, 0x0f, 0xb2, 0xf8, 0x66, 0x9c, 0x7d,
+			0x55, 0x3e, 0x7f, 0xf8, 0x8b, 0xbc, 0x35, 0x19,
+			0x82, 0x73, 0x4e, 0xe8, 0x89, 0x40, 0x6d, 0x2f,
+			0xec, 0xa2, 0x28, 0x11, 0x3b, 0x8d, 0xa3, 0x91,
+			0xa4, 0xbd, 0x03, 0x2d, 0xbe, 0x53, 0x1f, 0x7d,
+			0x86, 0x6d, 0x0d, 0xf2, 0x1c, 0x5b, 0x2b, 0xe0,
+			0x30, 0xc8, 0xf9, 0xe9, 0x38, 0x17, 0xa5, 0x4b,
+			0x0e, 0xa5, 0xba, 0xb6, 0x4a, 0xfc, 0xf7, 0x01,
+			0xd2, 0x84, 0x13, 0x81, 0x77, 0xad, 0x0a, 0x19,
+			0x0a, 0x42, 0xc2, 0xb0, 0x62, 0x17, 0x18, 0x6f,
+			0xee, 0x85, 0x04, 0x52, 0xef, 0x60, 0x9a, 0xf2,
+			0x22, 0xfe, 0x60, 0x50, 0xbd, 0x40, 0x77, 0x22,
+			0x30, 0x80, 0x98, 0xcd, 0x3f, 0xbd, 0xc1, 0xc2,
+			0x8e, 0x0c, 0xd1, 0xae, 0xa4, 0x24, 0x1f, 0x6e,
+			0x88, 0x22, 0x49, 0x47, 0x5c, 0x18, 0xc3, 0xc2,
+			0xd6, 0xc7, 0x60, 0x63, 0x6a, 0xc0, 0x91, 0x21,
+			0x43, 0x14, 0xd8, 0x6e, 0x87, 0xa0, 0xe4, 0xf2,
+			0xd2, 0x15, 0x69, 0xdf, 0xfb, 0x2e, 0x30, 0x98,
+			0x1e, 0xba, 0xa6, 0xfd, 0x9f, 0xc2, 0x10, 0x49,
+			0x63, 0xe3, 0x1b, 0x62, 0x53, 0x7d, 0xb6, 0x5a,
+			0xd0, 0xcb, 0x96, 0x06, 0x78, 0x9d, 0x6b, 0x3b,
+			0x5e, 0xa4, 0x97, 0x68, 0xb7, 0x64, 0xd0, 0xbd,
+			0x12, 0x04, 0x04, 0xcf, 0x33, 0x86, 0x44, 0xc7,
+			0x82, 0xac, 0xb5, 0x60, 0xb2, 0x3a, 0x27, 0x1c,
+			0x61, 0xc9, 0x22, 0x61, 0x62, 0x2d, 0xd8, 0x85,
+			0xa8, 0x1e, 0x10, 0x97, 0xf8, 0x01, 0x8f, 0x0c,
+			0x89, 0xdc, 0x08, 0xdf, 0xbc, 0x56, 0xff, 0x05,
+			0xaf, 0xc4, 0x4c, 0xa8, 0x86, 0xec, 0x4a, 0xc1,
+			0xdd, 0x87, 0x49, 0x62, 0x85, 0xa3, 0x2e, 0x3a,
+			0x07, 0x65, 0xa3, 0xb4, 0x1b, 0x94, 0xc6, 0x89,
+			0x31, 0xfc, 0xca, 0x2c, 0x1b, 0xdc, 0xab, 0x07,
+			0x73, 0xed, 0xc3, 0xf8, 0xd8, 0x98, 0xd0, 0x04,
+			0x8a, 0xf2, 0x47, 0xad, 0x70, 0x31, 0x8e, 0x3e,
+			0x68, 0x25, 0x2b, 0x1d, 0x2e, 0xda, 0x01, 0x69,
+			0x76, 0xec, 0x59, 0xe0, 0x7f, 0xc0, 0x98, 0x5a,
+			0xed, 0x58, 0xa0, 0x34, 0x0b, 0x9c, 0x33, 0x26,
+			0x9a, 0x21, 0x8c, 0x9c, 0x57, 0x3b, 0x44, 0x91,
+			0xdc, 0x46, 0x7a, 0x6f, 0xed, 0xc9, 0x6b, 0xb1,
+			0x96, 0x2e, 0x98, 0x4d, 0x46, 0xe3, 0xe8, 0x6e,
+			0x07, 0xa6, 0x14, 0xec, 0xeb, 0x7d, 0xb7, 0xb1,
+			0x8f, 0x4e, 0x1b, 0x26, 0xe1, 0xda, 0xde, 0xc0,
+			0xdf, 0x91, 0xa7, 0xa6, 0xaa, 0xc5, 0x5a, 0x47,
+			0x73, 0x5f, 0xa2, 0x42, 0x8a, 0x9a, 0x5b, 0x42,
+			0x75, 0x18, 0x7f, 0x95, 0xf0, 0x2a, 0x85, 0x38,
+			0x9a, 0x79, 0xdc, 0x75, 0x1a, 0x4a, 0xb2, 0x50,
+			0x0e, 0x00, 0xaf, 0x0b, 0x22, 0xf5, 0x0e, 0xe8,
+			0x8f, 0x29, 0xca, 0x6e, 0x14, 0x30, 0x35, 0xbd,
+			0xbe, 0x3b, 0x2d, 0x61, 0xaa, 0xd3, 0x88, 0x3d,
+			0x24, 0x85, 0x06, 0xaf, 0x20, 0xec, 0x0b, 0xe3,
+			0xaf, 0x95, 0x60, 0x8c, 0x57, 0xff, 0x5c, 0x0b,
+			0x73, 0xc5, 0x8e, 0x92, 0xe0, 0xdc, 0x32, 0x0c,
+			0xf2, 0x5c, 0xb7, 0x17, 0x6f, 0x27, 0x1e, 0x85,
+			0x78, 0xb4, 0x20, 0x65, 0x72, 0xab, 0x25, 0x20,
+			0x4a, 0x2a, 0xe0, 0x1c, 0x1b, 0x80, 0xa0, 0x5f,
+			0xa5, 0x9c, 0x43, 0x5b, 0xbe, 0xa1, 0x09, 0xce,
+			0x26, 0xce, 0x04, 0x73, 0xa2, 0x1b, 0x4e, 0x03,
+			0x1a, 0xa7, 0x76, 0xc3, 0x07, 0x35, 0xec, 0x9f,
+			0x00, 0xa0, 0x3a, 0xc5, 0xed, 0x9d, 0x88, 0xc8,
+			0x56, 0xdf, 0x0a, 0xd4, 0xa9, 0x06, 0xab, 0x0f,
+			0xcf, 0x87, 0xb0, 0xd7, 0x6f, 0x10, 0xe9, 0x62,
+			0x5c, 0x0c, 0x0b, 0x2d, 0x82, 0x94, 0x18, 0x34,
+			0xda, 0xdc, 0xd8, 0x19, 0x36, 0xc5, 0xaf, 0x39,
+			0x74, 0xd4, 0xf4, 0x75, 0x63, 0x70, 0x27, 0xdd,
+			0x6f, 0xf5, 0xe6, 0xa9, 0x71, 0x5a, 0xd2, 0xdf,
+			0x2c, 0x23, 0x95, 0x0c, 0x3e, 0x35, 0x63, 0x71,
+			0xc9, 0xab, 0x90, 0x1c, 0x2a, 0x83, 0xc2, 0x2d,
+			0x6d, 0x22, 0x23, 0x9c, 0x49, 0x97, 0x07, 0x6b,
+			0xaf, 0x70, 0xdd, 0x07, 0x6a, 0x1c, 0x1e, 0x36,
+			0xee, 0x1e, 0x17, 0xf2, 0x52, 0x52, 0x3a, 0xf6,
+			0xe8, 0xc4, 0x57, 0x9b, 0x64, 0xa7, 0xf5, 0xcd,
+			0xf3, 0xdd, 0xc4, 0xd2, 0x53, 0x1b, 0x9a, 0xa0,
+			0x58, 0x22, 0x29, 0xde, 0x8b, 0xd8, 0xd5, 0x0f,
+			0xd7, 0x0a, 0x61, 0x2d, 0xee, 0x80, 0x2d, 0x5e,
+			0x16, 0x57, 0x07, 0x09, 0xce, 0x19, 0x58, 0xfd,
+			0xfd, 0x27, 0xa1, 0x15, 0xe1, 0x22, 0xf9, 0x4a,
+			0x8c, 0x46, 0x11, 0xf8, 0x67, 0x64, 0x44, 0x95,
+			0x9f, 0x13, 0x0a, 0xd7, 0x24, 0x26, 0x2a, 0x6c,
+			0x51, 0xd4, 0x19, 0xec, 0xd8, 0xd1, 0x9f, 0x81,
+			0x28, 0x77, 0xc8, 0x24, 0xf6, 0xbf, 0x48, 0xab,
+			0x85, 0xa1, 0x85, 0x69, 0x68, 0x2f, 0x53, 0x84,
+			0xd0, 0x43, 0x68, 0x86, 0x20, 0xd8, 0x71, 0x1f,
+			0xc3, 0x97, 0xaa, 0x71, 0x97, 0xe7, 0x1d, 0x4b,
+			0xf1, 0x1f, 0x8e, 0x1b, 0x66, 0x82, 0xd8, 0x4f,
+			0xcc, 0xfe, 0xee, 0x59, 0xdc, 0xb8, 0x3e, 0x36,
+			0x27, 0x05, 0x60, 0x3d, 0x72, 0x22, 0x03, 0xbb,
+			0x5b, 0xd8, 0x95, 0x6d, 0xa1, 0xd3, 0xd4, 0xef,
+			0x6e, 0xe9, 0xe9, 0x2c, 0x93, 0x72, 0xec, 0x52,
+			0xac, 0x4d, 0xf9, 0x8a, 0xb8, 0xd1, 0x7d, 0x65,
+			0xf3, 0x1f, 0x07, 0xab, 0x1f, 0x53, 0xcf, 0x3b,
+			0x21, 0x9b, 0xa9, 0xc1, 0xc4, 0xd6, 0xdb, 0x31,
+			0x75, 0xa9, 0xb0, 0xdf, 0xe4, 0xf9, 0x16, 0x30,
+			0x3f, 0x46, 0x58, 0x61, 0x9f, 0xa2, 0xce, 0xf4,
+			0x3b, 0x4c, 0x84, 0xac, 0xc4, 0xd2, 0xed, 0xf1,
+			0x1b, 0x42, 0x7d, 0x9c, 0xaf, 0xc4, 0xd2, 0xf6,
+			0xff, 0x17, 0x1c, 0x24, 0x43, 0x55, 0x5a, 0x5b,
+			0x63, 0x66, 0x6b, 0x6e, 0x97, 0xa6, 0xb1, 0xb3,
+			0xd7, 0x56, 0x57, 0x60, 0xdc, 0xe9, 0xfc, 0x08,
+			0x15, 0x24, 0x35, 0x4d, 0x55, 0x90, 0x94, 0x97,
+			0xae, 0xc2, 0x00, 0x07, 0x0e, 0x18, 0x20, 0x29,
+			0x39, 0x3f, 0x4a, },
+	}, {
+		.what = "pure rejection vector",
+		.algo = "ml-dsa87",
+		.pk_len = DILITHIUM87_PUBLICKEYBYTES,
+		.pk = (const u8[DILITHIUM87_PUBLICKEYBYTES]){
+			0xa3, 0xf7, 0x20, 0x75, 0xd5, 0x7e, 0x0a, 0xaa,
+			0xcc, 0x5c, 0xfb, 0x8c, 0xdd, 0x90, 0x74, 0xe4,
+			0xc6, 0x08, 0xdd, 0x16, 0xf7, 0xd3, 0xbd, 0xa9,
+			0x05, 0xba, 0xf9, 0xc5, 0xac, 0x63, 0x0e, 0x22,
+			0xb5, 0x97, 0x18, 0x5e, 0x6c, 0x69, 0x5b, 0x1e,
+			0x00, 0x7c, 0xb4, 0x33, 0x5c, 0xe0, 0x1e, 0x8e,
+			0x6a, 0x4a, 0xc7, 0x7c, 0xb6, 0x85, 0xa1, 0xc1,
+			0x31, 0x0d, 0x50, 0x4f, 0x6e, 0x57, 0x03, 0x4d,
+			0x3d, 0x77, 0x40, 0x5b, 0x87, 0xaf, 0xd2, 0xf9,
+			0xf4, 0xd0, 0xa5, 0x9e, 0x12, 0x86, 0x17, 0x17,
+			0xc6, 0x13, 0x78, 0x8d, 0xaa, 0x6a, 0x54, 0xb8,
+			0x62, 0x82, 0xc2, 0x78, 0x76, 0x7c, 0x4e, 0xfd,
+			0x5b, 0x8b, 0x19, 0x82, 0x25, 0x4f, 0x6c, 0xf2,
+			0xf0, 0x50, 0x5b, 0x1d, 0x2d, 0xa9, 0x32, 0xf0,
+			0x0d, 0x46, 0x34, 0xca, 0xa2, 0x7d, 0xe5, 0x32,
+			0x0b, 0x8b, 0x6c, 0x8e, 0xab, 0x92, 0xb8, 0xc1,
+			0x6a, 0x9c, 0x4a, 0x4e, 0x4b, 0x2f, 0xf2, 0x66,
+			0xcf, 0xd3, 0x3e, 0x87, 0xe1, 0x0e, 0x90, 0xdb,
+			0x7f, 0xc1, 0x6b, 0xf9, 0x70, 0xdc, 0x7a, 0xc5,
+			0x86, 0x7e, 0x49, 0x17, 0x0f, 0xdf, 0xbd, 0x72,
+			0x36, 0x24, 0x5a, 0x4f, 0x55, 0x6d, 0xe0, 0xce,
+			0x9c, 0x3b, 0x7a, 0x5c, 0xd8, 0xa3, 0xf1, 0xe8,
+			0x3c, 0x17, 0x9f, 0x88, 0x64, 0x82, 0xe0, 0xeb,
+			0x10, 0xa2, 0x94, 0xbf, 0x08, 0xe4, 0x42, 0x5d,
+			0xbe, 0xad, 0x4a, 0xd3, 0x61, 0x8c, 0x97, 0x5b,
+			0xab, 0xb1, 0xae, 0xbe, 0xe2, 0x51, 0xf4, 0x47,
+			0xc8, 0xcf, 0x3c, 0x22, 0xbb, 0xee, 0xb9, 0x66,
+			0x2e, 0x83, 0xe6, 0x0b, 0x49, 0x96, 0x23, 0xad,
+			0xa7, 0xe1, 0xad, 0x21, 0x2c, 0x86, 0xa1, 0xcc,
+			0xcd, 0xb3, 0x5e, 0x8e, 0x46, 0xa9, 0x2f, 0x59,
+			0x6c, 0x67, 0xbb, 0x4b, 0x44, 0x8b, 0xfe, 0xee,
+			0x76, 0x90, 0x95, 0x8d, 0xdc, 0x14, 0x42, 0x72,
+			0x5a, 0x0b, 0x24, 0x56, 0x77, 0x74, 0x17, 0x90,
+			0x06, 0x93, 0xe1, 0x1a, 0x4c, 0x2b, 0x8e, 0x96,
+			0xa2, 0x2d, 0xa0, 0xb0, 0x55, 0xcc, 0x9e, 0xda,
+			0x5e, 0xc3, 0x7c, 0x22, 0xd9, 0x23, 0x58, 0xf9,
+			0x02, 0x22, 0x7b, 0xb1, 0x02, 0x60, 0xfc, 0xa8,
+			0x54, 0x22, 0x07, 0x9f, 0x11, 0x51, 0x67, 0xef,
+			0xf3, 0x67, 0x40, 0x43, 0x8f, 0xa7, 0x5a, 0xcc,
+			0xb9, 0x1d, 0xd5, 0x43, 0x99, 0x67, 0x30, 0x46,
+			0x6d, 0x7c, 0x7a, 0x56, 0x7a, 0xef, 0x6c, 0x88,
+			0x87, 0xa4, 0xdd, 0xa3, 0xfd, 0x72, 0x9b, 0xc4,
+			0xfb, 0xb1, 0xb4, 0xc1, 0xf6, 0xf2, 0x5d, 0x23,
+			0xa1, 0x05, 0xe7, 0xb4, 0xeb, 0x8c, 0x35, 0xf6,
+			0x55, 0x98, 0x64, 0x23, 0xca, 0x3a, 0x14, 0xfd,
+			0x1e, 0x22, 0xe0, 0xae, 0x67, 0xfa, 0x07, 0x48,
+			0xda, 0x3f, 0xb5, 0x12, 0xec, 0xb1, 0xe8, 0x7c,
+			0xc3, 0xc7, 0x2e, 0x69, 0x23, 0xda, 0x4a, 0x62,
+			0xdd, 0x8a, 0xba, 0xca, 0xe7, 0x19, 0xb2, 0x84,
+			0x00, 0x39, 0xce, 0x1e, 0x90, 0x47, 0x2b, 0x85,
+			0x02, 0xe9, 0xfe, 0x96, 0x60, 0x2b, 0x47, 0x5d,
+			0xd5, 0x5e, 0xb5, 0x47, 0xc2, 0xec, 0x34, 0xf5,
+			0x99, 0x91, 0xc6, 0xc2, 0x83, 0x93, 0x0c, 0xee,
+			0x90, 0xda, 0x42, 0x62, 0x4b, 0xba, 0x33, 0x10,
+			0xb2, 0xb4, 0x73, 0x41, 0xe6, 0x83, 0x56, 0xe2,
+			0x4f, 0x1c, 0x3d, 0x81, 0x85, 0xfd, 0xc2, 0xa1,
+			0x7b, 0x74, 0x9c, 0x7f, 0x6b, 0x08, 0x17, 0xe7,
+			0xc3, 0xb7, 0xd4, 0xf3, 0x89, 0x88, 0x69, 0xe5,
+			0xee, 0xc5, 0x97, 0xe8, 0x08, 0x0f, 0xa4, 0x0d,
+			0xe2, 0x52, 0xaa, 0xb1, 0x15, 0xa7, 0x17, 0xd0,
+			0x54, 0x56, 0x75, 0x1d, 0xc9, 0x69, 0x95, 0x24,
+			0x82, 0x32, 0xcd, 0x93, 0x48, 0xa6, 0xfd, 0xec,
+			0xe7, 0x75, 0x0e, 0xef, 0x65, 0xa0, 0x2d, 0x69,
+			0x54, 0xba, 0x93, 0xd7, 0x9a, 0x48, 0x22, 0x8d,
+			0xb8, 0x38, 0x4a, 0x1b, 0x61, 0x38, 0x00, 0x8f,
+			0xd1, 0xb1, 0x89, 0x74, 0xba, 0x57, 0x16, 0xa5,
+			0x2f, 0x22, 0x03, 0x17, 0xa0, 0x4b, 0x61, 0xdb,
+			0x2c, 0xa8, 0xa6, 0x6c, 0x2e, 0xb4, 0x4e, 0x15,
+			0xe4, 0x41, 0x9b, 0xb1, 0x66, 0x66, 0xc5, 0x0f,
+			0xef, 0xa0, 0x71, 0xd9, 0xa5, 0xbc, 0x1b, 0x6d,
+			0x40, 0xd1, 0xe6, 0xee, 0xe9, 0x03, 0x1f, 0x81,
+			0x9d, 0x57, 0xb1, 0x16, 0xf8, 0xe4, 0x6e, 0x36,
+			0x81, 0xff, 0x09, 0x65, 0x1a, 0x6f, 0x71, 0xcd,
+			0x94, 0x91, 0x2e, 0x41, 0x0a, 0xf2, 0x4b, 0x5f,
+			0x7a, 0xf1, 0xe2, 0x97, 0x96, 0xca, 0x05, 0x38,
+			0x5b, 0xa6, 0x00, 0xec, 0x1c, 0x8a, 0xac, 0x15,
+			0x21, 0x8e, 0xe5, 0x97, 0xd1, 0xd9, 0xd8, 0x70,
+			0x98, 0xdd, 0xde, 0xd7, 0xc6, 0x91, 0x84, 0x8b,
+			0x8c, 0xf6, 0x86, 0x89, 0x72, 0x8c, 0x5f, 0xae,
+			0xe8, 0x2b, 0x32, 0xbf, 0x07, 0xa4, 0x48, 0x26,
+			0x0e, 0xad, 0xce, 0x9e, 0xeb, 0x22, 0xc7, 0xae,
+			0x5a, 0x56, 0xe4, 0x2d, 0xc2, 0x19, 0x4d, 0x64,
+			0xbd, 0xe4, 0xcd, 0xd5, 0x63, 0xd2, 0xc5, 0x5a,
+			0xf1, 0x8f, 0x55, 0xb9, 0x86, 0x1b, 0x55, 0xc6,
+			0x41, 0x60, 0x74, 0x92, 0xe3, 0x12, 0x01, 0xda,
+			0x75, 0xb9, 0x55, 0x60, 0xb6, 0xa5, 0xca, 0x50,
+			0x5b, 0x9c, 0x0c, 0x62, 0x31, 0xdc, 0x8f, 0x61,
+			0x1e, 0x43, 0xe4, 0xc3, 0x9a, 0x58, 0xc5, 0x22,
+			0x60, 0xd3, 0x0d, 0x49, 0xaf, 0x12, 0x97, 0x86,
+			0x72, 0x43, 0x9f, 0x5d, 0x05, 0x78, 0x39, 0xa9,
+			0x2e, 0x93, 0xe7, 0x91, 0x57, 0x71, 0xdb, 0x0e,
+			0xee, 0x8f, 0x05, 0xdb, 0x06, 0xf4, 0x44, 0xa5,
+			0x3b, 0xee, 0xa5, 0x16, 0x70, 0xc3, 0xfa, 0x30,
+			0x9c, 0x20, 0x86, 0x1c, 0x3c, 0x83, 0x2b, 0xed,
+			0xaf, 0x46, 0xd6, 0xe3, 0x0a, 0xb7, 0xfe, 0x15,
+			0xa1, 0x14, 0x4e, 0xf9, 0x5a, 0x40, 0x5c, 0x83,
+			0xda, 0x95, 0x89, 0x47, 0xce, 0x43, 0xc0, 0x33,
+			0x61, 0x0d, 0x79, 0xcd, 0xc1, 0x11, 0xa8, 0xe2,
+			0xb8, 0xbf, 0x4d, 0x7c, 0x61, 0x9b, 0xf3, 0x7d,
+			0x8f, 0x91, 0x8a, 0xe2, 0x85, 0x3f, 0x14, 0x98,
+			0x5b, 0xf6, 0x8d, 0x40, 0xa8, 0x7e, 0x18, 0xba,
+			0xca, 0x4c, 0xaf, 0x52, 0xdd, 0xf1, 0x62, 0x78,
+			0x48, 0x50, 0xec, 0x9b, 0x08, 0x9d, 0x5e, 0xf6,
+			0xa0, 0xa5, 0x91, 0x0d, 0x25, 0x74, 0x44, 0x4e,
+			0xdd, 0x93, 0x80, 0x82, 0xe6, 0x84, 0x3a, 0xc8,
+			0x63, 0xbb, 0x91, 0x9b, 0xf7, 0x71, 0xb4, 0xeb,
+			0xff, 0x11, 0xe6, 0x14, 0x1b, 0xba, 0x13, 0x4d,
+			0x0f, 0x0f, 0xce, 0xa8, 0x65, 0xac, 0xc6, 0x0f,
+			0x6c, 0x36, 0x93, 0x8b, 0x3a, 0x8b, 0xa5, 0xe4,
+			0xef, 0xf1, 0xe0, 0xd7, 0x5e, 0x26, 0x95, 0x73,
+			0xaa, 0xe1, 0x6b, 0x1f, 0x7a, 0xaa, 0x4b, 0xb3,
+			0x89, 0x92, 0xd9, 0x56, 0x69, 0x26, 0x05, 0xa9,
+			0xbc, 0xde, 0xc0, 0x65, 0x36, 0x87, 0xfd, 0x95,
+			0x91, 0x13, 0x2c, 0xf2, 0xbd, 0x36, 0x8b, 0x10,
+			0x8c, 0xba, 0xcf, 0xb4, 0x0d, 0x6b, 0xd9, 0x73,
+			0xb3, 0x78, 0x1e, 0x75, 0x25, 0xb0, 0x98, 0x81,
+			0xe6, 0x7f, 0xdf, 0x4f, 0x7d, 0x6e, 0x2c, 0x03,
+			0x8c, 0xd3, 0xfc, 0xb6, 0xbf, 0x61, 0x2d, 0x94,
+			0xfa, 0x0f, 0xc4, 0xf9, 0xe0, 0xc9, 0xbe, 0xe7,
+			0x28, 0xd8, 0x84, 0x95, 0x3b, 0x9d, 0xe9, 0xb9,
+			0x09, 0x0a, 0x0a, 0xcf, 0x9d, 0x63, 0xe3, 0x0b,
+			0x58, 0xcc, 0x30, 0xc1, 0xb4, 0x68, 0xd0, 0x9d,
+			0x27, 0xce, 0xe3, 0xff, 0x1c, 0x89, 0xa4, 0x78,
+			0x94, 0x04, 0xce, 0x71, 0x31, 0xbb, 0xeb, 0xeb,
+			0x19, 0x81, 0x16, 0xe4, 0xb6, 0x9e, 0xea, 0x3d,
+			0x74, 0xd0, 0xa0, 0x12, 0x9f, 0x39, 0x21, 0x56,
+			0x65, 0xef, 0x34, 0x69, 0x33, 0xc9, 0xd9, 0xf3,
+			0xea, 0xe8, 0xf1, 0x21, 0xad, 0x7d, 0x43, 0x77,
+			0xbe, 0x23, 0x13, 0x2b, 0x9b, 0xe8, 0xbc, 0x3f,
+			0x34, 0x97, 0x87, 0xf0, 0xc8, 0xd3, 0x35, 0xff,
+			0xe4, 0xcd, 0x20, 0x5d, 0x44, 0xa9, 0x17, 0xc6,
+			0x9a, 0x5e, 0x89, 0x24, 0x26, 0x45, 0x34, 0xca,
+			0x34, 0xf3, 0x99, 0xde, 0x9e, 0x96, 0x27, 0xf8,
+			0x2a, 0xd1, 0xc0, 0x04, 0x29, 0xf3, 0x14, 0x11,
+			0xca, 0xf3, 0x68, 0x31, 0x42, 0x13, 0x12, 0xce,
+			0x40, 0x48, 0xeb, 0x35, 0xb7, 0x7a, 0xbe, 0xbf,
+			0x9b, 0x28, 0x15, 0x73, 0x5e, 0xb1, 0x30, 0x9d,
+			0xad, 0xbc, 0xd9, 0x29, 0x90, 0xcf, 0xe6, 0x95,
+			0xe6, 0xd1, 0x48, 0xa1, 0x59, 0xc3, 0xce, 0xb4,
+			0xa3, 0x35, 0x7c, 0x61, 0x51, 0x3d, 0x1f, 0x00,
+			0x6e, 0xc8, 0xcc, 0x43, 0xd8, 0xa4, 0x91, 0x1a,
+			0x8e, 0x09, 0xde, 0x01, 0x67, 0x65, 0x3c, 0x48,
+			0xad, 0xfa, 0x7a, 0x57, 0xaa, 0x47, 0xed, 0x56,
+			0x44, 0x3f, 0x88, 0x12, 0x02, 0xe8, 0x9a, 0x53,
+			0xfc, 0xd7, 0xe4, 0xf5, 0x95, 0x33, 0x90, 0x90,
+			0x3e, 0x6b, 0x41, 0xb0, 0x05, 0x2e, 0x57, 0x5c,
+			0x2f, 0x55, 0xd0, 0x36, 0xd4, 0x9a, 0xfa, 0xd7,
+			0xa8, 0x1b, 0xa6, 0xba, 0x10, 0x6c, 0xf2, 0x0b,
+			0x3d, 0x06, 0x44, 0x1a, 0x2a, 0x29, 0x85, 0xe6,
+			0x01, 0xb3, 0x5f, 0x04, 0x87, 0xc3, 0xd0, 0xe1,
+			0xef, 0xc3, 0x2c, 0xc6, 0x93, 0xea, 0x9d, 0x48,
+			0x13, 0xcf, 0x07, 0xd0, 0x7a, 0x00, 0xb8, 0x9d,
+			0x80, 0xe9, 0xa1, 0x7e, 0x25, 0xb7, 0x91, 0x9f,
+			0x1c, 0x30, 0xb9, 0xf7, 0xce, 0x92, 0x14, 0x5c,
+			0x10, 0xd6, 0x4c, 0xa5, 0xb2, 0x43, 0x38, 0xad,
+			0xbd, 0xcc, 0x5f, 0x93, 0x13, 0x8f, 0x6d, 0x05,
+			0x4f, 0x16, 0x96, 0x50, 0x33, 0x5a, 0x20, 0x22,
+			0x45, 0xf9, 0xf5, 0xb4, 0xa6, 0xf3, 0xd5, 0xde,
+			0xa7, 0x99, 0x78, 0xb8, 0x81, 0xee, 0x8d, 0x3f,
+			0xa6, 0xa5, 0x8b, 0x84, 0xf3, 0x3e, 0xfc, 0x6b,
+			0x42, 0x96, 0xae, 0x4b, 0x78, 0x57, 0x19, 0x9a,
+			0x38, 0xa9, 0xbe, 0x66, 0x51, 0xe8, 0x57, 0xc1,
+			0xf6, 0xd7, 0xf6, 0xee, 0xe7, 0xd9, 0x24, 0xba,
+			0x9a, 0x02, 0x52, 0x8e, 0x6a, 0xea, 0x3d, 0x16,
+			0x02, 0x8d, 0x51, 0x15, 0xae, 0x45, 0x7f, 0x6d,
+			0x05, 0xcf, 0xa5, 0x25, 0xf0, 0xe4, 0x52, 0xcd,
+			0xae, 0x79, 0x8f, 0xf2, 0x1b, 0xaa, 0xe3, 0xe8,
+			0x7a, 0x2b, 0x93, 0xde, 0x35, 0x5e, 0xbf, 0xa6,
+			0x4f, 0x3f, 0x78, 0x40, 0x6e, 0x3a, 0x25, 0x53,
+			0x6e, 0x24, 0xad, 0xeb, 0x17, 0x61, 0x73, 0x12,
+			0xde, 0x6a, 0xb1, 0x51, 0xa6, 0xc2, 0xdb, 0xf3,
+			0xe3, 0xbf, 0x28, 0xb5, 0x8b, 0x2e, 0x71, 0xc6,
+			0x3e, 0x98, 0x92, 0x97, 0x4e, 0xc1, 0x10, 0xc4,
+			0x90, 0x97, 0x2b, 0xe0, 0x88, 0x8a, 0xf0, 0x4b,
+			0x3e, 0xbd, 0xc4, 0xb0, 0x16, 0xd2, 0x36, 0xca,
+			0x30, 0xbb, 0xf6, 0x48, 0xbb, 0xf9, 0xf1, 0x0b,
+			0x85, 0x51, 0x7c, 0xab, 0x73, 0x0a, 0x49, 0x2c,
+			0xbb, 0xdb, 0x3c, 0xbd, 0x43, 0x5f, 0x8d, 0xfe,
+			0x5d, 0xcf, 0x11, 0xe8, 0xe0, 0xba, 0x54, 0x67,
+			0x83, 0x08, 0x1a, 0x20, 0x53, 0x01, 0x5b, 0x59,
+			0x2d, 0xf7, 0x1c, 0xd1, 0x57, 0x1c, 0x43, 0x3b,
+			0x57, 0x9c, 0xa7, 0x65, 0xc7, 0x6f, 0x61, 0x58,
+			0xac, 0x25, 0xdd, 0xf2, 0x5e, 0x73, 0xff, 0x3e,
+			0x58, 0xd5, 0x96, 0x3d, 0x9e, 0x2c, 0x7b, 0x35,
+			0x19, 0x55, 0x23, 0xc7, 0xd2, 0x63, 0x66, 0xc8,
+			0x8f, 0xee, 0x40, 0x55, 0x7f, 0x97, 0x78, 0x69,
+			0x0e, 0xee, 0x2d, 0xff, 0xd0, 0x7e, 0xe7, 0x7d,
+			0x8c, 0x20, 0xa8, 0x08, 0x1e, 0x8d, 0x0e, 0x89,
+			0xf1, 0x21, 0x73, 0xe8, 0x71, 0x12, 0xbe, 0x0f,
+			0x4d, 0x2f, 0x11, 0xee, 0x5e, 0xec, 0x19, 0x91,
+			0x52, 0x6b, 0x22, 0x94, 0x7c, 0xc2, 0x64, 0x84,
+			0x66, 0x4e, 0xd4, 0x8d, 0xae, 0x14, 0xda, 0x9d,
+			0xd7, 0xb6, 0xdc, 0xc6, 0x8f, 0x76, 0x17, 0xc5,
+			0x8e, 0x19, 0x92, 0x35, 0x61, 0x8d, 0x1d, 0xeb,
+			0x30, 0x9f, 0x6c, 0xff, 0xa3, 0xa8, 0xa4, 0xfe,
+			0x96, 0x56, 0x18, 0xdc, 0xe6, 0x3b, 0x6c, 0x96,
+			0x4c, 0x14, 0x9d, 0x5b, 0x25, 0x3d, 0xff, 0x63,
+			0xc4, 0x8f, 0x54, 0x47, 0xa0, 0x57, 0xf6, 0xcc,
+			0xf1, 0x8e, 0x77, 0xcb, 0xd0, 0xb0, 0x2c, 0x11,
+			0x7e, 0xf6, 0x6f, 0xdc, 0x84, 0xba, 0xa2, 0x3c,
+			0x4d, 0x4b, 0x7b, 0xca, 0x0f, 0x27, 0x0e, 0xd4,
+			0x23, 0x90, 0xc2, 0xbf, 0xb2, 0x2e, 0x57, 0x07,
+			0x3d, 0xa1, 0x47, 0x64, 0x2b, 0x44, 0x57, 0xb8,
+			0x01, 0x31, 0x1e, 0x59, 0x44, 0xbb, 0x45, 0xe0,
+			0xd4, 0x73, 0x88, 0xa1, 0x7f, 0x51, 0x6e, 0xd5,
+			0x92, 0x36, 0x0a, 0x27, 0x3c, 0x3d, 0x82, 0x22,
+			0xc5, 0x56, 0x1b, 0x42, 0x1f, 0x47, 0xa2, 0x71,
+			0xa9, 0xf9, 0xfd, 0xa1, 0x86, 0x35, 0x77, 0x97,
+			0x03, 0x23, 0xe6, 0xfe, 0x75, 0x70, 0x20, 0x61,
+			0x89, 0x69, 0x40, 0x8b, 0x18, 0xa0, 0x9d, 0xb0,
+			0x6a, 0x14, 0xe2, 0xa1, 0x88, 0xa4, 0x01, 0xa5,
+			0xb5, 0x9c, 0xe6, 0x22, 0x06, 0x65, 0x59, 0x25,
+			0x3b, 0x46, 0x62, 0xac, 0x87, 0x83, 0x17, 0x4a,
+			0xce, 0xe0, 0x17, 0x64, 0x10, 0x6b, 0x8a, 0xb6,
+			0xa5, 0xf5, 0x69, 0x6e, 0x55, 0x78, 0x8d, 0x8e,
+			0x16, 0xe8, 0xca, 0xda, 0x3a, 0x7a, 0xc0, 0x16,
+			0x35, 0x34, 0x7c, 0xf8, 0x53, 0xb0, 0x92, 0x0c,
+			0x53, 0x7b, 0xaa, 0xe6, 0x0a, 0x01, 0xec, 0x39,
+			0x2b, 0x7d, 0x23, 0x41, 0x18, 0xc7, 0x96, 0x21,
+			0x6b, 0x3b, 0xae, 0x78, 0xd6, 0xf9, 0xae, 0x98,
+			0x84, 0x3a, 0xf1, 0x1f, 0xef, 0x5b, 0xb4, 0x0b,
+			0x4a, 0x47, 0xf1, 0xdd, 0x2d, 0xac, 0x5d, 0x70,
+			0xa7, 0x05, 0x63, 0x27, 0x49, 0x28, 0x54, 0x67,
+			0x40, 0xb2, 0xfe, 0x72, 0x2f, 0xdf, 0x27, 0x4b,
+			0x64, 0x9b, 0xa5, 0x5f, 0xe3, 0xfc, 0xc5, 0x82,
+			0x1b, 0x7b, 0xce, 0x4a, 0x53, 0xdc, 0xb7, 0xf4,
+			0xab, 0xf1, 0xac, 0xb9, 0xe4, 0xe0, 0x2d, 0xa1,
+			0xd0, 0x50, 0x6d, 0x31, 0x1e, 0x64, 0xfa, 0x6b,
+			0xee, 0xc0, 0xf6, 0xd6, 0xa2, 0x3e, 0x41, 0x22,
+			0xde, 0xac, 0x08, 0xc9, 0xbf, 0x9f, 0x3a, 0xf8,
+			0x17, 0x96, 0x46, 0x51, 0x38, 0x78, 0x66, 0x5e,
+			0x0d, 0x46, 0x55, 0x3e, 0x0b, 0x18, 0x2d, 0x0d,
+			0xc4, 0xbe, 0x4e, 0x8b, 0x57, 0xc8, 0x9f, 0x60,
+			0x17, 0xfa, 0xd7, 0xff, 0x96, 0x23, 0xeb, 0xe3,
+			0x1c, 0xf9, 0x4e, 0x07, 0x3a, 0x0e, 0x4d, 0xf8,
+			0xfb, 0x2c, 0x15, 0x41, 0xe1, 0x80, 0x26, 0xfd,
+			0xbf, 0x57, 0x10, 0xc1, 0xdc, 0xfd, 0x7f, 0x1a,
+			0xb7, 0xeb, 0x81, 0x3e, 0x4e, 0x0e, 0x59, 0x19,
+			0xff, 0x8e, 0xc9, 0xd9, 0xc9, 0x43, 0x98, 0xaa,
+			0x32, 0xe5, 0x3b, 0xfe, 0x5d, 0x53, 0xae, 0x30,
+			0x6f, 0x05, 0xfa, 0x16, 0x3e, 0xb2, 0x8a, 0x05,
+			0xb8, 0x9f, 0x81, 0x5c, 0xcc, 0x8f, 0xc5, 0xd9,
+			0xe0, 0x0d, 0x7d, 0xd1, 0x64, 0xa3, 0xfd, 0xe6,
+			0x9c, 0x1e, 0x45, 0xea, 0x63, 0xcd, 0x58, 0x0b,
+			0x91, 0xea, 0x9c, 0xb8, 0x82, 0x39, 0xca, 0x5a,
+			0xbd, 0x46, 0xce, 0xb3, 0x41, 0x5c, 0x8f, 0x60,
+			0xb2, 0xd3, 0x76, 0x7a, 0x99, 0x8a, 0x9b, 0xd3,
+			0x68, 0x54, 0x6a, 0x74, 0xb8, 0x52, 0x27, 0xaa,
+			0xe4, 0xf4, 0x3c, 0x94, 0xb1, 0x96, 0xa5, 0x5b,
+			0xa8, 0x6b, 0x8e, 0xff, 0xe1, 0xd0, 0xfa, 0x5d,
+			0x19, 0xdc, 0x62, 0xde, 0x52, 0xa1, 0xe6, 0xeb,
+			0xd3, 0x92, 0x67, 0x92, 0x6e, 0x7d, 0xe4, 0x43,
+			0x44, 0x55, 0xd5, 0xe3, 0xbc, 0xb8, 0x0e, 0x75,
+			0x64, 0x17, 0x72, 0x2f, 0xe9, 0xb0, 0x6d, 0x7f,
+			0x4b, 0x9a, 0xdd, 0x11, 0xaa, 0x74, 0xe1, 0xa3,
+			0x1e, 0x8a, 0xf0, 0xdf, 0x9b, 0x79, 0x37, 0xed,
+			0xb8, 0xc6, 0xf9, 0x11, 0x3a, 0xe8, 0x99, 0xd0,
+			0xde, 0xae, 0x68, 0x17, 0x29, 0x41, 0xed, 0xb0,
+			0xb7, 0x41, 0x2f, 0xd7, 0x5c, 0x37, 0x92, 0x7a,
+			0x34, 0x1a, 0x2b, 0xb5, 0x8a, 0xd2, 0x0b, 0x95,
+			0x69, 0xe0, 0x8b, 0xaf, 0x45, 0xa5, 0xfa, 0x30,
+			0xe8, 0xec, 0xa3, 0x23, 0x54, 0x88, 0x29, 0xc1,
+			0x7a, 0x19, 0xe9, 0x94, 0x7f, 0xd1, 0x27, 0x01,
+			0x81, 0xa3, 0x48, 0xaa, 0x88, 0x2c, 0x70, 0x2e,
+			0x35, 0x26, 0xac, 0x6d, 0x1d, 0xa6, 0x24, 0x92,
+			0xfb, 0xf1, 0xfc, 0x2f, 0xef, 0xfd, 0xc1, 0x7b,
+			0xeb, 0xe8, 0x4a, 0x39, 0x35, 0x2e, 0x9a, 0x89,
+			0x5a, 0x8a, 0x28, 0x60, 0xcb, 0x2f, 0x64, 0x54,
+			0x0a, 0xdd, 0xce, 0x33, 0xab, 0x24, 0xf6, 0x31,
+			0x26, 0xca, 0x81, 0xf1, 0x46, 0x97, 0x53, 0x4a,
+			0x39, 0x36, 0x15, 0xa0, 0x40, 0x32, 0x0f, 0x7f,
+			0xcd, 0x5f, 0xc1, 0xae, 0x9b, 0x40, 0x11, 0x2e,
+			0x2d, 0x18, 0x8c, 0x86, 0x2d, 0x0d, 0x29, 0x00,
+			0x97, 0x09, 0x55, 0xe5, 0x0d, 0x72, 0x85, 0x02,
+			0x07, 0x48, 0x62, 0xf4, 0xf6, 0x02, 0x84, 0x4b,
+			0x11, 0x18, 0xbe, 0x62, 0xfe, 0xaa, 0xf3, 0x32,
+			0xcc, 0x5c, 0xa7, 0x77, 0x4e, 0xa3, 0x87, 0x8c,
+			0xc2, 0x3a, 0x1a, 0x66, 0xdb, 0xc8, 0xf7, 0xc0,
+			0x4a, 0x9c, 0x2d, 0x4b, 0xaf, 0x25, 0x4f, 0xe6,
+			0x58, 0x56, 0xe9, 0xc5, 0x8a, 0xde, 0x6c, 0xac,
+			0xe6, 0xc0, 0x85, 0xa0, 0xf7, 0x7b, 0xb2, 0xd8,
+			0xde, 0xea, 0x9a, 0xe3, 0xcf, 0xbc, 0xba, 0xa8,
+			0xcd, 0x73, 0xbd, 0xd0, 0x7e, 0x6d, 0x98, 0xa1,
+			0xb9, 0xa1, 0x9a, 0xc6, 0x33, 0x27, 0x58, 0x0f,
+			0xba, 0x2e, 0xb2, 0x48, 0x0b, 0x0c, 0xd9, 0xb7,
+			0xaa, 0xf7, 0xe9, 0xa4, 0x4b, 0x0f, 0xc9, 0xec,
+			0x21, 0x84, 0x7a, 0xeb, 0x34, 0x35, 0xf4, 0xf4,
+			0x69, 0x1a, 0x67, 0xcc, 0x85, 0x64, 0x51, 0x30,
+			0xbc, 0xcd, 0x55, 0x99, 0xf9, 0x48, 0x47, 0x84,
+			0x7d, 0x09, 0xa2, 0x0f, 0xf6, 0x60, 0xe6, 0x23,
+			0x40, 0x6b, 0x33, 0xa8, 0x6b, 0x74, 0xc5, 0x47,
+			0xb7, 0xad, 0xf3, 0x71, 0xd7, 0x69, 0xe6, 0xb9,
+			0xfa, 0x98, 0x43, 0xb1, 0x89, 0x8a, 0x9a, 0xbf,
+			0xee, 0x59, 0x0d, 0x34, 0xf5, 0xa4, 0x47, 0x9f,
+			0xa0, 0xe2, 0x76, 0x39, 0xb4, 0xe8, 0x63, 0x9a,
+			0xdc, 0x3b, 0x34, 0x99, 0x02, 0x0a, 0xa9, 0x94,
+			0x07, 0x9f, 0x07, 0x96, 0x58, 0xf0, 0xd8, 0x71,
+			0x64, 0x7e, 0xbb, 0x5c, 0xa4, 0xb4, 0x8f, 0x41,
+			0xc8, 0x20, 0x3a, 0x7e, 0x05, 0x63, 0x9e, 0x0a,
+			0x78, 0x93, 0x34, 0xd3, 0x49, 0xd2, 0x12, 0x0a,
+			0x2b, 0xff, 0x9e, 0x4c, 0x52, 0x51, 0xa1, 0x33,
+			0x6c, 0xb6, 0x00, 0x67, 0x64, 0xed, 0x13, 0xf9,
+			0xff, 0x6c, 0x78, 0xf5, 0xb3, 0x79, 0x6d, 0xbf,
+			0xc3, 0xfc, 0xe3, 0xa3, 0x35, 0x5f, 0x58, 0xcf,
+			0xa8, 0x4f, 0x65, 0x4d, 0x64, 0x7a, 0xf2, 0x0d,
+			0x7f, 0xc7, 0xbd, 0x3a, 0xfa, 0x22, 0x44, 0x7a,
+			0x66, 0xcb, 0x42, 0xdf, 0x79, 0x94, 0xf3, 0xa7,
+			0xf7, 0x22, 0xea, 0x3c, 0x54, 0xe3, 0xac, 0x22,
+			0x7e, 0xbb, 0x6e, 0x52, 0x96, 0x89, 0x7c, 0xac,
+			0xab, 0xfc, 0x66, 0x86, 0xb2, 0x7a, 0xcd, 0xed,
+			0xd4, 0x1d, 0x08, 0xd9, 0x06, 0xb4, 0xf0, 0x1c,
+			0x58, 0x30, 0xe0, 0x2f, 0x56, 0xcb, 0xe7, 0x70,
+			0xfe, 0xb0, 0x49, 0xe8, 0xe5, 0x05, 0x66, 0x35,
+			0x38, 0x24, 0x64, 0x26, 0x7c, 0x1f, 0x08, 0xef,
+			0x4e, 0xe3, 0x11, 0x29, 0x91, 0xc0, 0xf7, 0x6d,
+			0x85, 0x59, 0xe1, 0x0c, 0xcc, 0xde, 0x7d, 0x24,
+			0x23, 0xce, 0xfa, 0xec, 0x99, 0x83, 0x16, 0x74,
+			0x22, 0x08, 0xd0, 0xd2, 0xd3, 0x9d, 0x43, 0xc1,
+			0x82, 0x2b, 0x14, 0x3d, 0x94, 0xdb, 0xc6, 0x2c,
+			0x93, 0x98, 0x3e, 0xad, 0xff, 0x9b, 0x26, 0xd5,
+			0xdd, 0x18, 0x53, 0x7e, 0xd8, 0x4d, 0x68, 0xc7,
+			0xa2, 0x75, 0xfc, 0x53, 0xa1, 0x20, 0x54, 0xad,
+			0x85, 0x42, 0x07, 0x66, 0xad, 0xc1, 0xd4, 0x02,
+			0xb3, 0x22, 0x08, 0x96, 0x44, 0x46, 0x60, 0x5f,
+			},
+		.msg_len = 64,
+		.msg = (const u8[64]){
+			0x19, 0xfd, 0x12, 0x30, 0xc8, 0x56, 0x97, 0xfe,
+			0xef, 0x73, 0x3a, 0x1c, 0xac, 0x0d, 0xf5, 0x25,
+			0x5a, 0x83, 0x4f, 0x56, 0xc5, 0x9a, 0x51, 0x17,
+			0x8e, 0x9d, 0xf5, 0x0a, 0x01, 0x7d, 0x66, 0x45,
+			0xef, 0x9d, 0xf3, 0x3d, 0xdc, 0xfd, 0x5e, 0x1a,
+			0x03, 0x2c, 0xee, 0xda, 0x2a, 0x25, 0xf8, 0x3c,
+			0xa1, 0xb6, 0x59, 0x91, 0x23, 0x1d, 0xd4, 0x59,
+			0x34, 0x86, 0xff, 0x44, 0x23, 0xe9, 0x5a, 0x2f,
+			},
+		.sig_len = DILITHIUM87_CRYPTO_BYTES,
+		.sig = (const u8[DILITHIUM87_CRYPTO_BYTES]){
+			0x50, 0x14, 0x5c, 0x77, 0x80, 0x36, 0x1f, 0x7a,
+			0x46, 0x7c, 0xc7, 0xf0, 0x5a, 0xd6, 0xff, 0xaa,
+			0x7b, 0x40, 0x9c, 0x6e, 0xb7, 0x93, 0xdf, 0x30,
+			0xad, 0x2e, 0xc5, 0x84, 0x80, 0x68, 0x0f, 0x58,
+			0xac, 0xbe, 0x9f, 0xc0, 0x7a, 0x74, 0xe9, 0x10,
+			0xae, 0x8e, 0x50, 0x39, 0xd5, 0x17, 0x94, 0x10,
+			0x74, 0xfc, 0x16, 0x3a, 0xda, 0xd0, 0xef, 0xb8,
+			0x4e, 0xeb, 0xd6, 0x6e, 0x3a, 0xb0, 0x5a, 0xc1,
+			0x2d, 0x2a, 0x7a, 0x76, 0xc6, 0x72, 0xa6, 0x12,
+			0x7a, 0xf1, 0x19, 0xae, 0x7c, 0x34, 0x8c, 0x09,
+			0x1b, 0x26, 0x0a, 0x5b, 0x5a, 0xa1, 0xc9, 0xfe,
+			0x5b, 0x5c, 0x8f, 0xf6, 0x1a, 0x75, 0x09, 0xf5,
+			0x80, 0xc1, 0xbc, 0xe0, 0xf3, 0x0e, 0x73, 0xa8,
+			0xd6, 0xe8, 0xac, 0x52, 0xe5, 0x8b, 0xe3, 0x88,
+			0x8e, 0x50, 0x22, 0x1f, 0xf5, 0x48, 0x1d, 0xa4,
+			0x64, 0x71, 0xd6, 0xba, 0x9e, 0x7d, 0x91, 0xfe,
+			0x54, 0xed, 0x88, 0x60, 0xff, 0x5e, 0x05, 0x46,
+			0x55, 0x26, 0x15, 0xf0, 0xe9, 0xec, 0x56, 0x83,
+			0xce, 0x8d, 0x95, 0x8a, 0x22, 0x14, 0x4c, 0xf9,
+			0xea, 0xd9, 0x07, 0xd6, 0xff, 0xed, 0x39, 0x92,
+			0x7c, 0xfc, 0x85, 0xec, 0x2d, 0x8a, 0x11, 0x39,
+			0x44, 0xcc, 0xa5, 0x7d, 0xd9, 0xa1, 0x83, 0xb6,
+			0xe3, 0x7f, 0x74, 0x60, 0x00, 0xc4, 0x9b, 0xb3,
+			0xeb, 0xe7, 0x77, 0xf3, 0x1a, 0x82, 0xfb, 0x5f,
+			0xb4, 0x36, 0x91, 0x20, 0x40, 0x26, 0x33, 0xa7,
+			0x9c, 0xfc, 0x34, 0xb6, 0x20, 0xa2, 0x41, 0xf2,
+			0x67, 0xc9, 0x38, 0x31, 0x47, 0xd0, 0x43, 0xd0,
+			0xb8, 0xc0, 0x67, 0x08, 0x3b, 0x22, 0xfa, 0xad,
+			0x2a, 0x2a, 0x8d, 0x6d, 0x26, 0x19, 0x8c, 0x7a,
+			0x31, 0x95, 0x7a, 0xc0, 0xe9, 0xfa, 0xa5, 0x85,
+			0xc4, 0xee, 0x3a, 0x79, 0x58, 0xb6, 0x77, 0x4f,
+			0xe9, 0x65, 0xb7, 0x4d, 0xff, 0x9c, 0x43, 0x18,
+			0xc1, 0xbc, 0xac, 0x47, 0xae, 0x43, 0xc1, 0x34,
+			0xad, 0x52, 0xbf, 0xf6, 0x6e, 0x64, 0x8e, 0xb1,
+			0x05, 0x3a, 0xc1, 0x6a, 0xc7, 0x3a, 0x50, 0x2a,
+			0x83, 0x56, 0x9c, 0x7e, 0x04, 0x28, 0xac, 0x89,
+			0x83, 0xba, 0xbc, 0x06, 0xbe, 0xef, 0x85, 0x55,
+			0x01, 0xe3, 0xd5, 0x03, 0xfe, 0x3b, 0xd2, 0xda,
+			0xfd, 0x60, 0xef, 0x9f, 0x7c, 0xa7, 0xa1, 0x8e,
+			0xe4, 0x88, 0x0d, 0xbf, 0xc4, 0xa7, 0xce, 0xc5,
+			0x9b, 0x26, 0x4a, 0x5d, 0xf1, 0xa3, 0x52, 0x4c,
+			0x47, 0xbe, 0x0e, 0x5b, 0x59, 0x7e, 0x9e, 0x86,
+			0xa0, 0xa3, 0x5d, 0xa0, 0x58, 0x2f, 0x1e, 0x2c,
+			0x2f, 0x60, 0x5e, 0x4f, 0xd1, 0x84, 0xea, 0x4b,
+			0xdb, 0x0e, 0x21, 0xa3, 0xcb, 0xb8, 0x6e, 0x19,
+			0x7c, 0x58, 0x11, 0x5b, 0xe4, 0xa9, 0x88, 0x7e,
+			0x16, 0xa2, 0x85, 0xe7, 0x7a, 0xdb, 0xe8, 0x11,
+			0x66, 0x4e, 0x67, 0x77, 0x4f, 0xdf, 0x09, 0xca,
+			0x07, 0xec, 0x93, 0x6b, 0xe5, 0x4e, 0xe2, 0xf7,
+			0xeb, 0xe2, 0x57, 0xd6, 0xb0, 0x56, 0x4e, 0x82,
+			0x14, 0x86, 0x81, 0x06, 0x7c, 0x11, 0xad, 0x65,
+			0x0b, 0x3c, 0x05, 0x76, 0x14, 0x0d, 0xd7, 0x0e,
+			0xb3, 0xcb, 0x0f, 0x97, 0x03, 0x2b, 0x6b, 0x5b,
+			0x22, 0x57, 0x2b, 0x12, 0x5c, 0x97, 0x53, 0xb3,
+			0x90, 0xd0, 0x0a, 0xc7, 0x3f, 0xa1, 0x73, 0xf4,
+			0x07, 0x75, 0xad, 0x30, 0x60, 0x34, 0x41, 0x3d,
+			0xf2, 0x1c, 0x3e, 0x79, 0x31, 0x17, 0xa9, 0x85,
+			0xc6, 0xbc, 0x6f, 0x3d, 0x9d, 0xb2, 0xf6, 0xce,
+			0xba, 0xa5, 0x3c, 0xb4, 0x7e, 0x59, 0x69, 0xeb,
+			0x43, 0xba, 0x69, 0xea, 0xe0, 0xa5, 0x0f, 0x7f,
+			0xc9, 0xe1, 0xfb, 0xfe, 0x97, 0x66, 0x87, 0x55,
+			0x6f, 0x9b, 0xf9, 0x67, 0x5e, 0x95, 0xd5, 0x24,
+			0xa6, 0xf0, 0x2a, 0x66, 0xe3, 0xbd, 0x22, 0xe1,
+			0xa1, 0x33, 0x1d, 0x40, 0x3c, 0x03, 0x34, 0xd8,
+			0x5c, 0x83, 0x37, 0x35, 0xbc, 0xa5, 0x61, 0x87,
+			0x25, 0xc4, 0x7b, 0x94, 0x38, 0x04, 0x8c, 0x12,
+			0xd6, 0x6d, 0x42, 0xed, 0x36, 0x94, 0x8e, 0x03,
+			0xa3, 0x74, 0x0e, 0x88, 0x31, 0x73, 0xd3, 0x4e,
+			0x02, 0x2b, 0x74, 0x4d, 0x3b, 0x24, 0x56, 0x98,
+			0x57, 0xfe, 0xce, 0x94, 0x22, 0x18, 0xc5, 0x8d,
+			0x32, 0xb6, 0x86, 0xbc, 0x41, 0x0f, 0x2e, 0x27,
+			0x30, 0xce, 0xd7, 0xa5, 0xdb, 0xad, 0x25, 0x3a,
+			0x8a, 0x7b, 0xd5, 0x3d, 0x36, 0x29, 0x76, 0xd0,
+			0xb3, 0xd3, 0x1e, 0x7f, 0x75, 0x6b, 0x6a, 0x13,
+			0xa2, 0x79, 0x9e, 0x72, 0x16, 0x3c, 0xbc, 0x76,
+			0xdb, 0x2b, 0xb9, 0x3a, 0x7c, 0x94, 0x68, 0x17,
+			0x3e, 0x43, 0xaf, 0x3f, 0x45, 0x94, 0xa8, 0xc8,
+			0xdc, 0xb6, 0x02, 0x0e, 0xbe, 0xd5, 0x61, 0xfe,
+			0xa7, 0xe1, 0x70, 0x7d, 0x42, 0xf6, 0xa0, 0xef,
+			0x9b, 0x1a, 0x66, 0x5f, 0x02, 0x3b, 0x59, 0x93,
+			0x92, 0xa4, 0x29, 0xa4, 0x6a, 0x35, 0x3c, 0x8d,
+			0x58, 0x49, 0xe4, 0x1b, 0x52, 0x88, 0xdd, 0xd4,
+			0xfc, 0xaa, 0xa1, 0x68, 0xa4, 0x50, 0xad, 0x24,
+			0xc8, 0x81, 0x6c, 0xe8, 0x21, 0x3e, 0x3f, 0x4d,
+			0x40, 0xdb, 0xfa, 0x24, 0xb6, 0x54, 0xb1, 0xf4,
+			0x9b, 0x44, 0xee, 0x78, 0x63, 0x05, 0x28, 0x3e,
+			0xc8, 0xda, 0xd7, 0x35, 0x56, 0x04, 0x83, 0xc9,
+			0xd0, 0xcb, 0x4c, 0x8e, 0xbf, 0xe0, 0x1c, 0xa8,
+			0x75, 0x43, 0x36, 0x10, 0xcd, 0xd9, 0xdb, 0x7e,
+			0x86, 0xde, 0xc9, 0xfe, 0x13, 0x3f, 0x40, 0xcd,
+			0xa7, 0x6d, 0xd4, 0x62, 0x21, 0x54, 0xea, 0xb3,
+			0x94, 0x75, 0xdd, 0x01, 0xc9, 0x49, 0x66, 0x24,
+			0x3a, 0xdf, 0xf1, 0x5f, 0x7b, 0xab, 0x51, 0xad,
+			0x7d, 0x9a, 0x7a, 0xe0, 0x5d, 0x6f, 0xc9, 0xf9,
+			0xcc, 0x30, 0xc3, 0xcb, 0x46, 0xdb, 0xed, 0x64,
+			0x08, 0x07, 0xcf, 0x7b, 0xff, 0xc8, 0x44, 0xb2,
+			0xe3, 0x02, 0xb9, 0xf7, 0x03, 0xcf, 0x47, 0x7d,
+			0x26, 0x81, 0xd2, 0x1a, 0x46, 0x04, 0x81, 0x33,
+			0x0f, 0xc9, 0x90, 0x0c, 0x3b, 0xac, 0xf4, 0x16,
+			0x2b, 0xc0, 0x5a, 0x74, 0x3a, 0x3d, 0xc6, 0x74,
+			0x7b, 0x02, 0x28, 0xd8, 0xde, 0x9b, 0x6e, 0x6a,
+			0xc1, 0xae, 0x98, 0x2f, 0x7e, 0xf5, 0x32, 0xf0,
+			0xc0, 0xbc, 0x22, 0xbd, 0xe3, 0x1a, 0x36, 0x38,
+			0x06, 0x74, 0xd0, 0x31, 0x47, 0x68, 0xda, 0x31,
+			0xe3, 0x25, 0x39, 0xca, 0x3f, 0xfb, 0x6a, 0x4b,
+			0x5f, 0x53, 0xbb, 0xa7, 0x39, 0x7d, 0xfc, 0x2f,
+			0xd0, 0xb8, 0xfc, 0xf3, 0x35, 0x2c, 0x61, 0xb4,
+			0x29, 0x32, 0x23, 0xf6, 0xac, 0x59, 0x81, 0x60,
+			0x58, 0x97, 0x31, 0xab, 0xae, 0x20, 0xa6, 0xb9,
+			0x78, 0x4a, 0x41, 0xdd, 0x0b, 0xa4, 0xcf, 0x3f,
+			0xf4, 0x67, 0x42, 0xd4, 0x3e, 0xa5, 0x03, 0x91,
+			0x32, 0x89, 0xae, 0x77, 0x32, 0xcd, 0x17, 0xc9,
+			0x0b, 0xf1, 0x48, 0xf7, 0x54, 0xb1, 0x04, 0x53,
+			0x6f, 0x50, 0xf3, 0x25, 0x96, 0xc4, 0x15, 0x28,
+			0x37, 0xf3, 0xd5, 0x26, 0x2b, 0x72, 0x32, 0x00,
+			0xae, 0xda, 0x7c, 0x3f, 0xa1, 0x50, 0x99, 0x85,
+			0x02, 0x2d, 0x5f, 0x0c, 0x06, 0xe9, 0x59, 0x7a,
+			0xdd, 0x47, 0xa4, 0xdb, 0xdf, 0x21, 0xd7, 0x5a,
+			0x3b, 0x95, 0x40, 0x13, 0x99, 0x76, 0x60, 0xe0,
+			0x5d, 0x5c, 0xc2, 0x77, 0xd5, 0xfa, 0x3a, 0x8b,
+			0x3e, 0x47, 0x56, 0xe4, 0xcf, 0x82, 0x80, 0xef,
+			0x06, 0x8c, 0x38, 0x68, 0x1b, 0x38, 0xde, 0xbe,
+			0xb7, 0x7e, 0x2b, 0x20, 0xac, 0x7c, 0x0e, 0x4d,
+			0x39, 0x5d, 0xcc, 0x78, 0xb9, 0xc5, 0x1c, 0x9d,
+			0x23, 0x07, 0xc2, 0x17, 0x10, 0x20, 0x6d, 0x22,
+			0xe8, 0xc5, 0xde, 0xd9, 0xd6, 0x5e, 0x44, 0x96,
+			0x99, 0x78, 0xc1, 0xb6, 0x4f, 0xce, 0x55, 0xb8,
+			0x49, 0x95, 0x62, 0xa6, 0x84, 0x65, 0x92, 0x7b,
+			0x4a, 0x4a, 0xc0, 0x55, 0x88, 0xcc, 0xf0, 0xf8,
+			0xa4, 0xc7, 0xd9, 0x9e, 0x8a, 0xc2, 0xe8, 0x05,
+			0xfe, 0x3f, 0x7b, 0x37, 0xea, 0xb4, 0x4f, 0x16,
+			0xcc, 0x4d, 0xe2, 0x26, 0x64, 0x52, 0x47, 0x2f,
+			0x4f, 0xea, 0x58, 0xe8, 0xbc, 0xd3, 0x3d, 0x32,
+			0x9a, 0x79, 0x65, 0x96, 0xa7, 0x75, 0x55, 0x55,
+			0x10, 0x94, 0xe9, 0xcc, 0x43, 0x44, 0xd3, 0xe7,
+			0x25, 0xff, 0xc5, 0xc2, 0x41, 0xe9, 0xaa, 0x68,
+			0xb8, 0xad, 0xd9, 0x15, 0x51, 0x4f, 0xb8, 0xc2,
+			0x0f, 0x68, 0x2b, 0xdc, 0x2d, 0xb0, 0x01, 0xf8,
+			0xd3, 0xbd, 0xd4, 0x72, 0x3b, 0x60, 0xf3, 0xc0,
+			0xfe, 0x3e, 0xe2, 0x9b, 0xde, 0x68, 0xea, 0x76,
+			0xea, 0x48, 0xf5, 0x85, 0x7b, 0x39, 0x1f, 0xfb,
+			0xcd, 0x6a, 0x86, 0xa1, 0x77, 0xe9, 0xaa, 0x95,
+			0x8c, 0x6e, 0x6b, 0xc8, 0x06, 0x1a, 0xbe, 0x32,
+			0x23, 0xb5, 0x08, 0xc7, 0x92, 0xb0, 0xfa, 0x12,
+			0xbc, 0x48, 0x85, 0xf8, 0x1a, 0xe2, 0xa2, 0x2a,
+			0x92, 0x4d, 0x3a, 0xb6, 0x29, 0xb8, 0xc5, 0x88,
+			0x77, 0x0e, 0x58, 0x38, 0xea, 0xbb, 0x73, 0xd3,
+			0x20, 0xed, 0x0d, 0x96, 0x26, 0xde, 0x01, 0xde,
+			0x26, 0xf8, 0x71, 0x60, 0x62, 0x42, 0x51, 0xf0,
+			0x61, 0x46, 0x5a, 0x70, 0x4d, 0xe5, 0x36, 0xef,
+			0x3f, 0xcb, 0xaf, 0x51, 0xfb, 0xc3, 0xfc, 0x61,
+			0x72, 0xad, 0x6f, 0x65, 0x66, 0x16, 0x25, 0x47,
+			0x6b, 0xfc, 0xb5, 0x06, 0x6f, 0x19, 0x97, 0x87,
+			0x45, 0xb5, 0x5c, 0x44, 0x44, 0x14, 0x2e, 0xb7,
+			0xd8, 0x18, 0x68, 0x59, 0x24, 0x4d, 0x69, 0xbe,
+			0x7b, 0x6a, 0xa0, 0xc5, 0xb5, 0x3f, 0xd6, 0x75,
+			0x2e, 0xa6, 0x56, 0x53, 0xb2, 0x07, 0x3d, 0x2e,
+			0x8d, 0x83, 0x49, 0xd3, 0x0d, 0x88, 0x1c, 0x27,
+			0xb5, 0x66, 0x8d, 0x0f, 0x62, 0xd9, 0x89, 0xac,
+			0xe8, 0x3f, 0xa0, 0x80, 0x29, 0x5d, 0xf2, 0x8f,
+			0x98, 0x73, 0x89, 0x0b, 0x17, 0x11, 0xcb, 0x21,
+			0xb7, 0x6d, 0xfb, 0xf4, 0x7b, 0x39, 0x9a, 0xe6,
+			0x35, 0xc6, 0xfe, 0x54, 0xf5, 0xe9, 0xa4, 0x29,
+			0x8d, 0x96, 0x2d, 0xbf, 0x24, 0x2b, 0x66, 0x82,
+			0xa2, 0x60, 0xac, 0xae, 0x5d, 0x33, 0x35, 0xf0,
+			0xce, 0x64, 0x61, 0x73, 0x72, 0x0c, 0x3e, 0x09,
+			0x82, 0xd5, 0xb3, 0x8b, 0xff, 0x52, 0x08, 0x4a,
+			0xdd, 0x86, 0x21, 0xd2, 0x17, 0x3d, 0xc2, 0x66,
+			0x16, 0x7e, 0xc7, 0x27, 0xe3, 0xc5, 0xaa, 0x69,
+			0x33, 0x43, 0x4b, 0xa9, 0x4f, 0x5f, 0x05, 0x4e,
+			0x5e, 0xeb, 0x0c, 0x66, 0xf3, 0xee, 0x2c, 0x84,
+			0x49, 0x3d, 0x8f, 0xb4, 0x04, 0x1b, 0xe5, 0xae,
+			0xce, 0xd0, 0x2a, 0xf9, 0x1d, 0x5b, 0x1c, 0x7d,
+			0x28, 0x8e, 0xe3, 0x14, 0x55, 0x71, 0x72, 0x6d,
+			0xb3, 0x90, 0x09, 0x0d, 0xa1, 0xad, 0x6c, 0xe2,
+			0x0c, 0x20, 0x1d, 0xb5, 0xb1, 0x48, 0x41, 0x0d,
+			0x58, 0x8e, 0xe9, 0x8b, 0x3b, 0x6c, 0x90, 0xf4,
+			0x7d, 0x4b, 0x16, 0x3d, 0xc5, 0x4f, 0xf2, 0x49,
+			0x4a, 0x12, 0x32, 0xd0, 0x33, 0xda, 0xdd, 0x20,
+			0xa3, 0xe4, 0x70, 0x73, 0x4e, 0x1d, 0xfc, 0xba,
+			0xbe, 0x76, 0x7a, 0x73, 0xca, 0xc6, 0xf8, 0x29,
+			0x1d, 0xdd, 0xb3, 0xa8, 0x1a, 0x5c, 0x50, 0x8d,
+			0xf5, 0x19, 0x31, 0xad, 0xf6, 0x5a, 0x7c, 0x3c,
+			0x71, 0x3b, 0x3f, 0x55, 0xb1, 0xa5, 0x84, 0xfd,
+			0x64, 0x40, 0x9d, 0xe9, 0x85, 0x0d, 0xb3, 0x38,
+			0x92, 0x37, 0x63, 0xd1, 0xd6, 0x6b, 0x79, 0x73,
+			0x17, 0x5e, 0x56, 0xd2, 0xcd, 0xff, 0xc0, 0x08,
+			0x77, 0x3f, 0xef, 0x26, 0xa1, 0x2d, 0x9f, 0x98,
+			0x80, 0x0b, 0x3b, 0x67, 0x7a, 0x2e, 0xe9, 0xab,
+			0x72, 0x27, 0xea, 0x7f, 0x2a, 0xaf, 0x54, 0xf2,
+			0xb5, 0xf5, 0xfe, 0x50, 0x01, 0x3c, 0x4f, 0x55,
+			0x86, 0x7b, 0x22, 0x73, 0xbb, 0x34, 0xcd, 0x2d,
+			0xe1, 0xce, 0xab, 0x13, 0xbd, 0x41, 0xcf, 0x3b,
+			0xfa, 0x18, 0x59, 0xb3, 0x87, 0x33, 0x92, 0xd8,
+			0x00, 0x09, 0x7b, 0x6d, 0xc4, 0x46, 0x6c, 0x64,
+			0xd6, 0x6b, 0x94, 0x7d, 0x0b, 0xb0, 0x80, 0xe3,
+			0xa3, 0xd9, 0xcf, 0x22, 0xb1, 0x38, 0x1f, 0xa6,
+			0x0d, 0x47, 0x3d, 0xc6, 0x7c, 0xe0, 0xc0, 0xc6,
+			0x32, 0xbd, 0x39, 0x1f, 0xfc, 0xd8, 0x61, 0x6c,
+			0x18, 0xea, 0x35, 0x47, 0x73, 0x57, 0x36, 0xa5,
+			0x8b, 0x04, 0xe3, 0x92, 0xdb, 0x6e, 0xb1, 0x79,
+			0x6c, 0x3e, 0x5a, 0x7a, 0x58, 0x74, 0xe4, 0xf0,
+			0xd9, 0x41, 0xdd, 0x22, 0xb6, 0xc6, 0xa1, 0x8f,
+			0x56, 0xcc, 0x3d, 0xad, 0x59, 0x3f, 0xc6, 0x3d,
+			0xab, 0xbf, 0x14, 0x60, 0x91, 0x16, 0xe7, 0x8b,
+			0x40, 0x80, 0xc6, 0x6c, 0xb0, 0xf1, 0x65, 0x79,
+			0x12, 0x6b, 0x20, 0xd2, 0x77, 0x02, 0x3e, 0x6e,
+			0xa2, 0x20, 0x3b, 0xe1, 0xa1, 0xf6, 0xf6, 0x3c,
+			0xd1, 0xc8, 0x4c, 0x8f, 0xd2, 0xd9, 0xf4, 0x5f,
+			0xf1, 0x1b, 0xc0, 0x9a, 0x2d, 0xa1, 0x68, 0xd9,
+			0xe1, 0x49, 0xcf, 0x36, 0xa8, 0xa7, 0x63, 0x5f,
+			0x9e, 0x14, 0x78, 0x6c, 0x44, 0xcc, 0x02, 0x59,
+			0x34, 0x32, 0x26, 0x11, 0xcf, 0x89, 0x69, 0x41,
+			0x2c, 0x09, 0x12, 0xff, 0xa9, 0x52, 0xea, 0x53,
+			0x0a, 0x66, 0xe1, 0xc2, 0x86, 0x66, 0x74, 0x86,
+			0xd1, 0xdc, 0xfd, 0x0b, 0xb3, 0xb6, 0x4b, 0xe9,
+			0x5f, 0xec, 0x8e, 0xde, 0xfd, 0x9d, 0xbb, 0x4e,
+			0x77, 0x15, 0x6c, 0xd9, 0x26, 0xd7, 0xbb, 0x60,
+			0x0d, 0x00, 0x3c, 0x4d, 0x92, 0x2d, 0x92, 0xd5,
+			0x59, 0xd8, 0xa6, 0xbe, 0xb6, 0x81, 0xe4, 0x6a,
+			0xff, 0x8a, 0xbb, 0x3c, 0x44, 0xb0, 0x93, 0xf2,
+			0x06, 0xb7, 0x90, 0xf4, 0x20, 0x7b, 0xbb, 0x7e,
+			0x9f, 0xd9, 0x36, 0xa1, 0xa5, 0x74, 0x2c, 0xff,
+			0xa0, 0xd9, 0xbc, 0x20, 0xde, 0xc2, 0x99, 0x4a,
+			0xe3, 0xd7, 0x4f, 0x30, 0xc2, 0x0c, 0xc1, 0xbf,
+			0x51, 0x46, 0x5b, 0x7a, 0x05, 0x41, 0x94, 0x55,
+			0x37, 0x83, 0x7b, 0xd0, 0x3f, 0xf3, 0x9c, 0x1d,
+			0x0f, 0x04, 0x32, 0x5e, 0x7e, 0xee, 0x02, 0x5c,
+			0x18, 0x1f, 0xd9, 0xe2, 0x0f, 0x89, 0xc8, 0x6f,
+			0x3f, 0xee, 0xc2, 0x08, 0xcc, 0x69, 0xe8, 0xb2,
+			0xce, 0x82, 0x22, 0x0c, 0xc8, 0xa5, 0x02, 0x38,
+			0x85, 0xfe, 0x7b, 0x8c, 0x58, 0xbb, 0x16, 0x34,
+			0x7a, 0xf2, 0x76, 0xe7, 0xd2, 0x49, 0x41, 0x9c,
+			0xa5, 0xc7, 0xde, 0xe4, 0x9c, 0x96, 0xd4, 0xd1,
+			0xef, 0x3d, 0xd1, 0x69, 0x13, 0xb2, 0xb3, 0x39,
+			0x0c, 0x55, 0x78, 0x25, 0x71, 0x47, 0xf3, 0x69,
+			0xf1, 0xf0, 0x6d, 0x71, 0xc7, 0xd2, 0xf2, 0x4d,
+			0xaf, 0x02, 0x31, 0x83, 0x56, 0xd2, 0x7d, 0xf4,
+			0xa4, 0x8c, 0xeb, 0x1d, 0xd6, 0x20, 0xf8, 0xf6,
+			0xf3, 0x4b, 0x59, 0xda, 0x9a, 0xcd, 0xe2, 0x85,
+			0x8c, 0x69, 0xa1, 0xed, 0x11, 0xe9, 0xd1, 0xe2,
+			0xbc, 0x40, 0xe1, 0xc8, 0x27, 0x45, 0xf5, 0xf0,
+			0x7b, 0x37, 0x27, 0x6a, 0x4f, 0x11, 0x19, 0x83,
+			0xbf, 0x6c, 0xcd, 0x3b, 0x49, 0xaa, 0x06, 0x86,
+			0x4c, 0x26, 0x09, 0xdf, 0x7d, 0x42, 0x0e, 0xf2,
+			0xee, 0xec, 0x07, 0xa1, 0x26, 0xe0, 0xb5, 0x49,
+			0x04, 0x27, 0xd7, 0x5b, 0x80, 0xbb, 0x16, 0xe4,
+			0x10, 0xb6, 0x5d, 0xf6, 0x0f, 0x59, 0x51, 0xb2,
+			0xc6, 0xca, 0x8a, 0x8b, 0x89, 0x86, 0x18, 0x43,
+			0xc6, 0xee, 0x60, 0x2b, 0x97, 0x59, 0xb6, 0x0b,
+			0xe8, 0xe2, 0xa4, 0x55, 0x3e, 0x47, 0x1d, 0x54,
+			0x1a, 0x6a, 0xcb, 0xdb, 0x03, 0xcf, 0x35, 0x78,
+			0x3c, 0x48, 0x14, 0xcd, 0x6b, 0x61, 0xd2, 0x34,
+			0x86, 0xc9, 0x03, 0xbb, 0x7f, 0x28, 0x7c, 0x43,
+			0xa2, 0xd8, 0x2f, 0x81, 0x98, 0x17, 0x1e, 0xf3,
+			0xd0, 0xec, 0x24, 0x26, 0xd1, 0x4d, 0xda, 0xad,
+			0x7b, 0x0b, 0xe7, 0x15, 0xe3, 0x4e, 0xe3, 0xe9,
+			0x73, 0x0e, 0x3f, 0xa8, 0xd1, 0xb0, 0xb3, 0xc5,
+			0x89, 0x10, 0xf0, 0x6a, 0x62, 0xf9, 0xa6, 0x02,
+			0x4f, 0x0a, 0x44, 0x44, 0xf4, 0xa7, 0xc7, 0x03,
+			0x56, 0xa5, 0x13, 0x9d, 0x3a, 0x94, 0x56, 0xfa,
+			0x17, 0xec, 0xb4, 0x5f, 0x46, 0xef, 0x2d, 0x7b,
+			0x16, 0xa5, 0x71, 0x6b, 0xb3, 0xaa, 0x8c, 0x9c,
+			0x12, 0x48, 0xde, 0xe2, 0x03, 0x6d, 0x19, 0x75,
+			0x05, 0x02, 0xde, 0x7a, 0x41, 0x04, 0xbf, 0xdb,
+			0x0c, 0xa4, 0x80, 0xe0, 0xd5, 0x1c, 0x10, 0x26,
+			0xaa, 0x47, 0x2d, 0x49, 0x34, 0x06, 0x16, 0xac,
+			0xe4, 0x10, 0x7f, 0x1e, 0x0f, 0x24, 0xb7, 0x43,
+			0xd9, 0x0e, 0x21, 0xd3, 0x1b, 0xe8, 0xcb, 0xb3,
+			0x7c, 0xf5, 0x58, 0x8c, 0xda, 0xa8, 0x90, 0x4c,
+			0xf9, 0x44, 0x9c, 0xf2, 0xf5, 0x28, 0xf9, 0xc4,
+			0x8e, 0xde, 0x4e, 0x7e, 0x6e, 0x70, 0xd9, 0x66,
+			0xcc, 0xf5, 0xe0, 0xfb, 0x94, 0x03, 0xc5, 0x29,
+			0x42, 0x7d, 0x08, 0xe6, 0xe7, 0xd7, 0x6c, 0xb0,
+			0x52, 0xab, 0x6a, 0x0d, 0x5e, 0x06, 0x51, 0xcd,
+			0xa5, 0xfa, 0x2f, 0x1b, 0x7c, 0xd7, 0xc3, 0xca,
+			0xfe, 0x60, 0xb4, 0x51, 0x44, 0x5f, 0xe6, 0x77,
+			0xb5, 0x5e, 0xb7, 0x17, 0x5a, 0xb3, 0x71, 0x88,
+			0x8f, 0x22, 0x1b, 0xb6, 0x7f, 0xad, 0x4b, 0xcf,
+			0x37, 0x92, 0x13, 0xa8, 0x33, 0x2f, 0xbb, 0xeb,
+			0x90, 0x1d, 0xc0, 0x04, 0x14, 0x34, 0x02, 0x87,
+			0x8b, 0xca, 0xed, 0x91, 0xb4, 0x12, 0xdd, 0xa9,
+			0xeb, 0x6d, 0xc2, 0x84, 0x4c, 0x4b, 0xf6, 0xb2,
+			0xab, 0xfd, 0x52, 0x17, 0xed, 0xcb, 0x28, 0xa8,
+			0xe5, 0xf0, 0xf6, 0xef, 0xdf, 0x65, 0x66, 0x46,
+			0x9b, 0xf3, 0x37, 0x35, 0xdf, 0xb1, 0x62, 0x24,
+			0xf0, 0x5b, 0x4c, 0x3e, 0x4d, 0x36, 0x99, 0xea,
+			0x13, 0xc2, 0xa0, 0x8c, 0xa0, 0x2b, 0xf8, 0x16,
+			0x97, 0x6a, 0xc4, 0x51, 0x3a, 0x30, 0x56, 0xf1,
+			0x90, 0xf7, 0x37, 0x42, 0xac, 0xb3, 0x06, 0x52,
+			0x9a, 0x90, 0x8e, 0x37, 0x8e, 0xf3, 0x9e, 0xda,
+			0x04, 0xf7, 0xdb, 0xd9, 0x50, 0x64, 0x97, 0x38,
+			0x08, 0x03, 0x49, 0x6c, 0xc6, 0x25, 0x0f, 0x4c,
+			0x6b, 0x3b, 0x67, 0xb8, 0x24, 0x21, 0x19, 0x04,
+			0xe8, 0x4e, 0xa7, 0xee, 0xef, 0x97, 0x01, 0x7d,
+			0xd5, 0xb1, 0x81, 0xb3, 0x6b, 0xae, 0x37, 0x6b,
+			0xd5, 0x39, 0x98, 0xb7, 0x94, 0xa2, 0xda, 0x8b,
+			0xc3, 0x66, 0xc5, 0x64, 0x03, 0x23, 0x11, 0x97,
+			0x2f, 0xfe, 0xaf, 0x53, 0x11, 0x3f, 0xfe, 0xe9,
+			0x78, 0x24, 0x2e, 0xcd, 0x6a, 0xbf, 0x0e, 0xb8,
+			0xf1, 0xb9, 0x78, 0x40, 0x65, 0xee, 0x5e, 0xe9,
+			0x29, 0x78, 0xe3, 0x9f, 0x84, 0x31, 0x72, 0x9a,
+			0x62, 0x0a, 0x8f, 0xae, 0x0b, 0x2b, 0x2e, 0x10,
+			0xa6, 0xc0, 0x59, 0xa5, 0x37, 0x30, 0xe9, 0x47,
+			0x71, 0x8f, 0x2c, 0x1a, 0x9a, 0x08, 0x8c, 0x80,
+			0x50, 0x86, 0x76, 0x4d, 0x2a, 0x74, 0xed, 0x83,
+			0xb9, 0x28, 0xca, 0xd9, 0xe1, 0xe1, 0x17, 0x83,
+			0x7b, 0x68, 0x94, 0x75, 0x13, 0x0b, 0xf5, 0x6e,
+			0xc0, 0x15, 0xff, 0xab, 0xa5, 0x7b, 0x16, 0x43,
+			0x96, 0x2e, 0xc3, 0x80, 0xec, 0xd0, 0x33, 0x37,
+			0x3b, 0x81, 0x7e, 0x10, 0x2e, 0xe1, 0x96, 0xc9,
+			0xbf, 0x72, 0xf3, 0xd8, 0x78, 0x5a, 0xde, 0x4e,
+			0x9c, 0x1c, 0xf9, 0x1d, 0xcc, 0x1b, 0xc7, 0x9f,
+			0xc8, 0x19, 0x62, 0x4a, 0xf0, 0xbb, 0x10, 0x52,
+			0x55, 0xeb, 0x88, 0x19, 0xdf, 0x25, 0x4d, 0xb0,
+			0x46, 0xaa, 0x63, 0x70, 0x4b, 0xb9, 0xc3, 0x10,
+			0x6a, 0xf4, 0x52, 0x72, 0x80, 0x49, 0xff, 0xec,
+			0x36, 0x0d, 0x7d, 0x0e, 0x99, 0x0c, 0xc6, 0x95,
+			0xa1, 0xbc, 0x10, 0xa9, 0xe1, 0x10, 0xb2, 0xad,
+			0x0e, 0x1b, 0x6a, 0x9f, 0x20, 0x30, 0xad, 0x04,
+			0xe5, 0xaa, 0x3e, 0x87, 0xf3, 0xfa, 0x54, 0x9e,
+			0xc7, 0x1d, 0x39, 0xce, 0x27, 0x6e, 0x59, 0x0e,
+			0x2a, 0xbb, 0xe3, 0xa1, 0x93, 0xdb, 0x4b, 0xe6,
+			0xbe, 0x29, 0xc1, 0x96, 0x90, 0x42, 0x1f, 0x77,
+			0xa2, 0x97, 0x23, 0x52, 0x5a, 0x40, 0x1b, 0xf0,
+			0x31, 0x97, 0x76, 0x12, 0xfb, 0xf5, 0x24, 0x87,
+			0x11, 0x46, 0x25, 0xc9, 0x17, 0xb9, 0xe7, 0x39,
+			0xf6, 0xd9, 0x94, 0x57, 0x09, 0xf0, 0x18, 0x16,
+			0x9c, 0xf1, 0x01, 0x47, 0x98, 0x2d, 0x38, 0x8c,
+			0xbb, 0x45, 0x53, 0x34, 0xfe, 0x7c, 0xa9, 0x0e,
+			0x99, 0x3e, 0x47, 0xcb, 0xf9, 0xd9, 0x56, 0x35,
+			0xb7, 0x1f, 0x37, 0xc3, 0xc2, 0x2f, 0x95, 0xff,
+			0x9e, 0x1a, 0x85, 0xd4, 0x2a, 0x91, 0x28, 0x63,
+			0xb8, 0x98, 0x74, 0x53, 0x50, 0xf5, 0x3c, 0xdf,
+			0xc7, 0x36, 0x77, 0xf8, 0xc0, 0x95, 0x7d, 0x7c,
+			0x02, 0x20, 0x9d, 0x9e, 0x47, 0x8a, 0xed, 0x70,
+			0x95, 0x08, 0xc1, 0x51, 0x6b, 0x2f, 0xa3, 0xbb,
+			0xb3, 0x00, 0xaf, 0x6c, 0x25, 0xaf, 0x2f, 0x83,
+			0x36, 0xae, 0xc9, 0xbe, 0xde, 0x91, 0x24, 0xef,
+			0x9d, 0x5d, 0x77, 0xa2, 0x6c, 0x79, 0x3e, 0xb2,
+			0x83, 0x09, 0x67, 0xa3, 0x46, 0x42, 0xbf, 0xdd,
+			0x50, 0xbc, 0xd2, 0x9a, 0xb3, 0xb3, 0x78, 0xe4,
+			0xb1, 0xb2, 0x1c, 0x43, 0xaa, 0x48, 0x2e, 0x10,
+			0x60, 0x19, 0x94, 0xf0, 0xb9, 0xf7, 0x19, 0xa2,
+			0x54, 0x9d, 0x72, 0xcd, 0x25, 0x1c, 0x37, 0xb8,
+			0x20, 0xe5, 0x66, 0xa0, 0xf7, 0xce, 0xfd, 0x5d,
+			0x84, 0xb1, 0x60, 0xea, 0x41, 0xe5, 0xd2, 0x40,
+			0x59, 0x0c, 0xcc, 0x47, 0x4c, 0x82, 0x94, 0x6e,
+			0xe5, 0xfc, 0x4e, 0x0b, 0x6a, 0x40, 0x67, 0x40,
+			0xab, 0x4e, 0x3c, 0x80, 0x2e, 0x71, 0xf2, 0x32,
+			0xf7, 0x02, 0x7a, 0x88, 0x5e, 0x35, 0x3f, 0x02,
+			0x57, 0x47, 0xed, 0xd2, 0x61, 0xfe, 0x07, 0x3a,
+			0x37, 0xb1, 0x39, 0xb6, 0x97, 0x4d, 0xd2, 0xa8,
+			0xfd, 0xdc, 0xaa, 0x7f, 0x2b, 0x84, 0x37, 0x91,
+			0xef, 0xc4, 0x01, 0xfa, 0xc7, 0x6e, 0x17, 0x3d,
+			0x44, 0xda, 0xfd, 0xd6, 0xf6, 0xd3, 0xfe, 0x28,
+			0x32, 0xf1, 0xae, 0x49, 0x9a, 0xe9, 0x70, 0xe6,
+			0x5c, 0x66, 0x20, 0xb1, 0xea, 0xbb, 0x40, 0x05,
+			0xee, 0x90, 0xc5, 0xe6, 0xf2, 0x94, 0x43, 0x06,
+			0x1e, 0xa7, 0xce, 0xb1, 0x41, 0xba, 0xc2, 0xeb,
+			0x83, 0x7c, 0x63, 0x2c, 0x87, 0x09, 0x51, 0xb4,
+			0x03, 0x5d, 0x8c, 0x23, 0x6f, 0x00, 0xc1, 0x73,
+			0x42, 0x94, 0xe8, 0x28, 0x2f, 0x9a, 0x16, 0x3b,
+			0x98, 0x21, 0x7e, 0x21, 0x02, 0x7a, 0xcf, 0x30,
+			0x60, 0x4a, 0x68, 0xc2, 0xe2, 0x2a, 0x30, 0x98,
+			0xce, 0x44, 0x67, 0x82, 0xfa, 0x8e, 0x4e, 0xca,
+			0x89, 0x59, 0x6d, 0x2c, 0xbe, 0xeb, 0xe1, 0xd2,
+			0xd7, 0xda, 0xf5, 0x69, 0xe3, 0x1e, 0x2e, 0xd3,
+			0x59, 0x9a, 0x0c, 0xea, 0xc5, 0xc1, 0x2b, 0x81,
+			0x02, 0x86, 0xd4, 0x3c, 0x52, 0xe6, 0xf6, 0x34,
+			0x9b, 0x5b, 0x1b, 0x2f, 0x6c, 0x9e, 0x4f, 0x40,
+			0x3e, 0xa9, 0xb1, 0x1c, 0x8b, 0x5e, 0x2e, 0xe2,
+			0xd3, 0x96, 0xf9, 0x3f, 0x03, 0x12, 0xd2, 0x4b,
+			0x62, 0xe3, 0x04, 0x68, 0x73, 0x8c, 0xb3, 0xfd,
+			0xc2, 0x20, 0x56, 0x77, 0x1f, 0xa7, 0x76, 0xef,
+			0x8e, 0x24, 0xf9, 0x90, 0x59, 0x3f, 0x53, 0x70,
+			0x8d, 0x59, 0x94, 0xef, 0x68, 0x12, 0xaa, 0x61,
+			0x60, 0x10, 0xcd, 0xc2, 0x08, 0x89, 0x2b, 0x33,
+			0x0a, 0x62, 0xed, 0x7b, 0x67, 0x9b, 0x27, 0xa3,
+			0x2b, 0x3c, 0xf0, 0x77, 0x20, 0x27, 0x36, 0xd3,
+			0x38, 0x62, 0xd9, 0xf3, 0x9c, 0x20, 0x2e, 0xaa,
+			0x96, 0xe3, 0xa7, 0x32, 0xdd, 0xf1, 0x40, 0x82,
+			0x9b, 0xbb, 0x62, 0x8a, 0xb8, 0xa7, 0xc3, 0x6d,
+			0x2b, 0x57, 0x11, 0x5c, 0x14, 0x22, 0x49, 0x34,
+			0x64, 0x15, 0x80, 0xc7, 0x16, 0xfa, 0x2b, 0xae,
+			0xed, 0x47, 0xdb, 0x5b, 0x56, 0xe0, 0xa8, 0x45,
+			0x75, 0xd1, 0x56, 0x76, 0x65, 0x58, 0x1a, 0xe2,
+			0xd8, 0xef, 0xa9, 0x19, 0x05, 0xdb, 0xca, 0x80,
+			0xf6, 0x0c, 0xd2, 0x02, 0xe1, 0x3c, 0xd8, 0x20,
+			0xeb, 0xaf, 0xaf, 0x99, 0xd8, 0x49, 0x5c, 0xf5,
+			0x42, 0xf6, 0x44, 0x80, 0x99, 0xa1, 0xeb, 0x0e,
+			0x4f, 0x53, 0xb9, 0xd3, 0x4f, 0xfc, 0x59, 0x2d,
+			0x42, 0x64, 0x1e, 0xc4, 0x33, 0x8e, 0x5e, 0x13,
+			0xf2, 0x83, 0x12, 0xa5, 0xcc, 0x7d, 0x31, 0x62,
+			0x64, 0x76, 0x61, 0x1c, 0x58, 0xce, 0x04, 0xee,
+			0xfb, 0x7c, 0xcc, 0xd0, 0x4a, 0x0e, 0x36, 0x8a,
+			0x96, 0x83, 0x3c, 0x22, 0xa4, 0xa6, 0xa5, 0x07,
+			0x88, 0xea, 0x13, 0x76, 0x88, 0x6e, 0x58, 0x0b,
+			0xa0, 0x0e, 0x68, 0xc8, 0xa1, 0x88, 0x1a, 0x26,
+			0x72, 0xed, 0x24, 0xf1, 0xb6, 0x7c, 0x5d, 0x6a,
+			0xe7, 0x5b, 0x7d, 0x20, 0x14, 0xea, 0x27, 0x60,
+			0x0d, 0x9f, 0xb0, 0x9a, 0x75, 0xa5, 0x88, 0x25,
+			0xe9, 0xab, 0x94, 0x0e, 0x04, 0x69, 0xa4, 0xf5,
+			0x04, 0x81, 0xf9, 0x58, 0x34, 0x7a, 0x44, 0x71,
+			0x0f, 0xd7, 0x1f, 0x40, 0xaa, 0x8c, 0xc7, 0x6f,
+			0x56, 0x42, 0x3c, 0xbd, 0x00, 0x7e, 0xef, 0x92,
+			0xa5, 0xa5, 0x16, 0xc0, 0xcc, 0x2a, 0x9c, 0x54,
+			0x6b, 0xb2, 0xa6, 0x8e, 0x7d, 0x56, 0x07, 0x74,
+			0x4d, 0xba, 0xeb, 0xed, 0x48, 0x82, 0x58, 0xfa,
+			0xdc, 0xef, 0x76, 0x6b, 0xc4, 0x1a, 0xf1, 0x0c,
+			0x51, 0x0b, 0xd5, 0x41, 0xdf, 0x15, 0xe3, 0x0d,
+			0xfc, 0x4e, 0xdb, 0x33, 0x0c, 0xc6, 0xcb, 0xc3,
+			0x00, 0x91, 0xf3, 0x8f, 0xa9, 0x05, 0x81, 0x7f,
+			0x83, 0x77, 0xd1, 0x69, 0x4f, 0xfb, 0xab, 0x76,
+			0x4d, 0x95, 0xe1, 0xa3, 0x8f, 0x5e, 0xf6, 0x49,
+			0x89, 0x36, 0x03, 0x18, 0x73, 0x73, 0xd5, 0xee,
+			0xde, 0xe4, 0x25, 0xf3, 0x15, 0x34, 0xca, 0xc3,
+			0x63, 0xbe, 0x63, 0xab, 0x75, 0x33, 0xc0, 0x88,
+			0x32, 0xa4, 0xae, 0xfb, 0x71, 0x65, 0xb7, 0x8c,
+			0x70, 0x99, 0x02, 0x9a, 0x79, 0x69, 0x30, 0xc7,
+			0xe7, 0xde, 0xd2, 0x47, 0xe5, 0x81, 0x70, 0xbe,
+			0x63, 0x45, 0x5c, 0x6e, 0x76, 0xdd, 0xd2, 0xf9,
+			0xa6, 0xf7, 0x51, 0xca, 0x48, 0x77, 0xdd, 0x9f,
+			0x93, 0x8e, 0x14, 0xe2, 0xd7, 0x17, 0xb0, 0x5e,
+			0x0d, 0x49, 0xb7, 0x32, 0x78, 0x9a, 0xbe, 0x8a,
+			0xcd, 0x16, 0x56, 0x35, 0x51, 0xfc, 0x1b, 0xb5,
+			0x10, 0x59, 0x0e, 0xb5, 0x22, 0x98, 0xcf, 0x5f,
+			0x53, 0xae, 0xbf, 0xe5, 0x8d, 0xa0, 0xaa, 0xe3,
+			0xa0, 0x91, 0x7b, 0xd4, 0xd5, 0x1d, 0xc4, 0x81,
+			0x66, 0xb0, 0x69, 0xef, 0x1c, 0x7c, 0x5b, 0x1f,
+			0x6e, 0x9a, 0x97, 0x48, 0xc6, 0xde, 0xfe, 0x64,
+			0x93, 0x84, 0xba, 0x63, 0xa4, 0xe3, 0x0d, 0xa1,
+			0xda, 0x2b, 0xbd, 0xbe, 0xa6, 0xc1, 0xfb, 0xbb,
+			0xb4, 0x05, 0x38, 0x8e, 0x0c, 0x4c, 0x32, 0xd4,
+			0x92, 0xc1, 0x48, 0xed, 0x05, 0x5e, 0x8c, 0x3f,
+			0xb1, 0x49, 0x4e, 0x77, 0x9e, 0x6c, 0x11, 0xfc,
+			0x14, 0x8c, 0xbe, 0x27, 0x5f, 0xfb, 0x9b, 0x82,
+			0xbc, 0xdf, 0x7e, 0x10, 0x9d, 0x75, 0x89, 0xfa,
+			0xc7, 0x23, 0xdb, 0x4e, 0x39, 0xba, 0xe6, 0x75,
+			0xdf, 0x36, 0x6d, 0x40, 0x36, 0xbe, 0x43, 0x72,
+			0x0f, 0x04, 0x3c, 0xf1, 0xc8, 0x4c, 0x33, 0x94,
+			0xb4, 0x98, 0x3e, 0x47, 0x78, 0x7e, 0x5b, 0x9b,
+			0x64, 0xa7, 0x5e, 0x2c, 0x43, 0x7b, 0x98, 0xfa,
+			0xdb, 0x2e, 0x69, 0xaf, 0x7e, 0xb9, 0x42, 0x93,
+			0x93, 0x21, 0xf5, 0x9b, 0x39, 0x40, 0xca, 0x3e,
+			0xfc, 0xb3, 0x4a, 0xef, 0x13, 0xf2, 0xe3, 0x7b,
+			0xfa, 0x5f, 0x84, 0xf4, 0x13, 0x2e, 0x00, 0x7c,
+			0x31, 0x9d, 0x16, 0xbd, 0x78, 0x39, 0x9e, 0x88,
+			0x81, 0x42, 0x36, 0xf7, 0x05, 0x8a, 0x49, 0xe6,
+			0xb6, 0x60, 0xdd, 0xf0, 0xe3, 0xef, 0x70, 0x21,
+			0x63, 0x17, 0xca, 0xb9, 0xbd, 0x17, 0x0d, 0xcb,
+			0x7e, 0xaf, 0xdd, 0x2d, 0x8b, 0x5f, 0xef, 0xcd,
+			0xe7, 0xce, 0xb6, 0x8a, 0x5e, 0xbb, 0xed, 0x11,
+			0x7d, 0x8a, 0xd9, 0x7b, 0xaf, 0x55, 0xcc, 0x04,
+			0x87, 0x71, 0xae, 0x9c, 0xe2, 0x57, 0x8d, 0xc8,
+			0x7a, 0x50, 0xed, 0x6e, 0x8e, 0x44, 0x80, 0xa3,
+			0x06, 0xad, 0xa7, 0xab, 0xa1, 0x86, 0x7c, 0xe6,
+			0xc6, 0x0d, 0xbf, 0x74, 0xcb, 0xbe, 0x9d, 0xa6,
+			0x39, 0x7a, 0x40, 0x5d, 0x79, 0x60, 0xe6, 0xae,
+			0x68, 0x66, 0x9b, 0x50, 0xd4, 0x14, 0xff, 0x7d,
+			0x08, 0xa3, 0x1e, 0x14, 0x81, 0x28, 0xbb, 0x0a,
+			0x92, 0xa7, 0xfd, 0x5e, 0x81, 0x65, 0x2c, 0x39,
+			0x81, 0x8a, 0xf7, 0x71, 0x5c, 0xab, 0x35, 0xae,
+			0xc9, 0x04, 0xf8, 0x6f, 0xd6, 0x56, 0x4f, 0x44,
+			0x81, 0x54, 0x96, 0x2c, 0x53, 0x73, 0xb1, 0xf7,
+			0x50, 0x7a, 0xc6, 0xdb, 0x7c, 0x23, 0x70, 0x76,
+			0x81, 0x44, 0xcf, 0x62, 0x74, 0x2b, 0xc2, 0x87,
+			0x49, 0x7d, 0x32, 0xd4, 0x27, 0xcb, 0xbf, 0x41,
+			0xc5, 0x68, 0xf6, 0xba, 0xfa, 0x59, 0x32, 0x7e,
+			0x17, 0x9c, 0x8c, 0x0a, 0xd5, 0xa3, 0xb2, 0x2c,
+			0x91, 0xc0, 0xda, 0x7f, 0xbc, 0x51, 0xe4, 0xfb,
+			0x0d, 0x66, 0x53, 0x8c, 0x22, 0xfa, 0xa6, 0xae,
+			0xf1, 0xbd, 0x38, 0x30, 0xe0, 0x63, 0xea, 0xfc,
+			0x8a, 0x52, 0xbd, 0x17, 0xeb, 0x42, 0x2c, 0xb5,
+			0x4c, 0x8e, 0x80, 0xb6, 0xe5, 0x8c, 0xdc, 0xea,
+			0xe5, 0x64, 0x09, 0xe4, 0x5f, 0x59, 0x97, 0x2d,
+			0x33, 0x70, 0x7e, 0xb6, 0xc7, 0x03, 0x83, 0xca,
+			0xd2, 0x5b, 0xe8, 0x5c, 0xcd, 0xf6, 0xe1, 0xde,
+			0xd6, 0xbf, 0x31, 0x6d, 0xfa, 0xaf, 0x38, 0x9a,
+			0x4e, 0xdd, 0xfb, 0xd5, 0x60, 0x80, 0xf8, 0x4b,
+			0x15, 0x56, 0x62, 0x33, 0x4a, 0x7f, 0x87, 0x4c,
+			0x5b, 0xca, 0xb8, 0xf0, 0x3f, 0xc3, 0xdc, 0x53,
+			0xd8, 0xa8, 0xf3, 0x84, 0xfa, 0x04, 0x21, 0x75,
+			0x67, 0x8c, 0x82, 0xd6, 0x38, 0x70, 0xe2, 0xbf,
+			0x82, 0x8b, 0xa8, 0x4a, 0x7d, 0xb8, 0x11, 0x8b,
+			0x0a, 0xe4, 0x70, 0xac, 0x2f, 0x3d, 0x2d, 0x7c,
+			0xb9, 0x70, 0x96, 0xc5, 0xec, 0x40, 0x43, 0x55,
+			0x4d, 0xc1, 0x3c, 0x68, 0x1c, 0x1d, 0x88, 0x2f,
+			0x2d, 0xdd, 0xed, 0x7d, 0x29, 0x53, 0xdb, 0x25,
+			0x89, 0x3c, 0xeb, 0x94, 0xc3, 0xd7, 0x4d, 0xd8,
+			0x80, 0xef, 0x9f, 0x25, 0xb1, 0x8f, 0x69, 0x64,
+			0xa2, 0xc5, 0x02, 0xff, 0x07, 0xc0, 0x2e, 0xf2,
+			0xd4, 0x82, 0x97, 0xaf, 0x79, 0x20, 0xe4, 0xc6,
+			0x3e, 0xd2, 0xcd, 0xa7, 0x49, 0x01, 0xc6, 0xa2,
+			0x05, 0x42, 0x20, 0x1f, 0xf9, 0x7a, 0x50, 0x83,
+			0x77, 0x98, 0xa4, 0x31, 0x73, 0x5a, 0x9e, 0x67,
+			0x53, 0xdb, 0xd7, 0xa7, 0x8d, 0xd0, 0x4a, 0x71,
+			0x5b, 0x80, 0x4a, 0xcd, 0x07, 0xd6, 0x00, 0x4c,
+			0x29, 0x42, 0x54, 0x68, 0x9d, 0x2b, 0x7e, 0x6e,
+			0x0b, 0x17, 0xb9, 0x41, 0xc2, 0x64, 0x5c, 0x8f,
+			0x70, 0x4b, 0x2e, 0xe4, 0x26, 0x9a, 0xf8, 0x36,
+			0x2c, 0x33, 0xba, 0x83, 0x01, 0x69, 0x75, 0x30,
+			0xc7, 0xdc, 0xad, 0xdc, 0xf7, 0x35, 0xe6, 0xad,
+			0x6c, 0xa7, 0xe9, 0xb2, 0x4f, 0xe1, 0xef, 0xef,
+			0x59, 0xcf, 0xc5, 0x78, 0x47, 0x51, 0xfb, 0xc0,
+			0xac, 0x1d, 0x34, 0xb9, 0x5a, 0x76, 0x4f, 0x2b,
+			0xd8, 0xf8, 0x5d, 0x79, 0x75, 0x7a, 0x74, 0x4a,
+			0xb8, 0x57, 0xed, 0xa1, 0x0f, 0x72, 0x9b, 0x41,
+			0x41, 0x95, 0x5e, 0x55, 0xe4, 0x16, 0xf2, 0x12,
+			0x08, 0xaf, 0xd9, 0x59, 0xf1, 0x46, 0x46, 0x22,
+			0xf7, 0xb8, 0xd3, 0x19, 0xdf, 0x84, 0x39, 0xd4,
+			0x13, 0xe5, 0x55, 0x57, 0x51, 0x8a, 0x5c, 0xc6,
+			0x40, 0xad, 0x21, 0xa5, 0xee, 0x7a, 0x54, 0x2b,
+			0xbe, 0xd4, 0x9c, 0x0b, 0x6d, 0x84, 0x15, 0x14,
+			0xe7, 0xd2, 0xdb, 0xe3, 0xb7, 0xb5, 0x38, 0x8d,
+			0xba, 0x7f, 0x88, 0x0f, 0xf5, 0x99, 0x9f, 0xde,
+			0xc3, 0x41, 0x5d, 0x1e, 0xc3, 0xf9, 0x54, 0x12,
+			0x3b, 0x3e, 0x84, 0x52, 0xe4, 0x79, 0x6c, 0x2a,
+			0x8c, 0x99, 0xa9, 0x05, 0x0d, 0xad, 0x96, 0xec,
+			0xe1, 0xea, 0x5e, 0xa6, 0x9e, 0xeb, 0x6d, 0x5e,
+			0xaa, 0x3b, 0x58, 0x20, 0xf1, 0xa7, 0x1a, 0x90,
+			0x4d, 0x06, 0x63, 0x1c, 0x07, 0xd0, 0x64, 0xef,
+			0xdb, 0x0e, 0x58, 0x60, 0x15, 0xab, 0x99, 0x9b,
+			0xd8, 0xc4, 0xf0, 0xfc, 0x18, 0xcb, 0x21, 0xc4,
+			0x4c, 0x97, 0xf8, 0xbf, 0x34, 0xed, 0x53, 0x62,
+			0x4f, 0xb9, 0xc2, 0xc1, 0x3e, 0x5d, 0x2a, 0x29,
+			0x86, 0xde, 0x8f, 0xe8, 0x72, 0xc9, 0xf1, 0xc2,
+			0xec, 0x1f, 0x24, 0xf9, 0xf4, 0xef, 0x64, 0xae,
+			0x6c, 0x6d, 0x34, 0x8c, 0x84, 0xb7, 0x85, 0xa0,
+			0x6a, 0x7a, 0x14, 0x07, 0xb0, 0x27, 0x9f, 0x68,
+			0xc9, 0x31, 0x97, 0xbe, 0xb9, 0x97, 0x28, 0x5a,
+			0x82, 0x4c, 0xe9, 0x1a, 0x3a, 0x1e, 0xe9, 0x46,
+			0x06, 0x33, 0x78, 0xc2, 0x91, 0xc2, 0x1f, 0x1d,
+			0x10, 0x7e, 0x33, 0x30, 0x31, 0xc4, 0x5f, 0xab,
+			0x40, 0xf0, 0x6a, 0x6c, 0x94, 0xc5, 0x4d, 0x82,
+			0x57, 0xe7, 0x13, 0x43, 0x7d, 0x6b, 0xb5, 0xe4,
+			0x4f, 0xa2, 0xa4, 0x0a, 0x1e, 0xee, 0x86, 0xe5,
+			0x5c, 0x5f, 0x49, 0xba, 0x0c, 0xd8, 0x5d, 0x9d,
+			0xed, 0xba, 0x74, 0xe6, 0x01, 0xb9, 0xed, 0xb8,
+			0x67, 0xdc, 0x88, 0x3d, 0xf0, 0xe0, 0x84, 0xb0,
+			0x89, 0xaa, 0x6d, 0xe3, 0x7d, 0x6d, 0xf2, 0x6d,
+			0xa3, 0x2d, 0x08, 0xf1, 0xb9, 0x18, 0x3b, 0xfa,
+			0x61, 0x09, 0x85, 0xfa, 0x1d, 0x6f, 0x8f, 0x5c,
+			0x08, 0xfe, 0xa9, 0x50, 0x70, 0x26, 0x0f, 0xc1,
+			0xf6, 0x2e, 0x82, 0x5a, 0x15, 0x86, 0xdb, 0xe8,
+			0xd1, 0xe5, 0xa2, 0x59, 0x94, 0x86, 0xe8, 0x48,
+			0x3a, 0x74, 0x72, 0x92, 0xc2, 0xa1, 0x1e, 0x7a,
+			0x3f, 0xc3, 0xc5, 0x89, 0xd9, 0x9a, 0x90, 0x42,
+			0x6d, 0x8e, 0x07, 0x63, 0x34, 0x63, 0x2b, 0xe8,
+			0xc8, 0xca, 0xb1, 0xca, 0xa8, 0x77, 0x9b, 0xbd,
+			0x6b, 0xa6, 0xc7, 0x66, 0x25, 0x36, 0x84, 0x15,
+			0x11, 0x39, 0x3c, 0x27, 0xdc, 0x30, 0xfe, 0xcb,
+			0x12, 0x46, 0xdf, 0xee, 0x78, 0xf5, 0xd9, 0x53,
+			0xf8, 0x19, 0x4d, 0x8c, 0xb3, 0xe4, 0x97, 0xc9,
+			0x99, 0xe2, 0xbb, 0xa6, 0xa4, 0x86, 0x66, 0xc9,
+			0x40, 0xf4, 0x36, 0xd6, 0x2a, 0xaf, 0x01, 0xe4,
+			0x35, 0x3b, 0x89, 0x2a, 0xbb, 0x41, 0x06, 0x79,
+			0xd0, 0x84, 0xbf, 0xd3, 0x30, 0x31, 0x20, 0x8d,
+			0xb2, 0xab, 0xe2, 0x46, 0x41, 0x3b, 0xd2, 0x94,
+			0x58, 0xa4, 0x45, 0xa3, 0x5f, 0xaa, 0xb8, 0x86,
+			0xf5, 0x14, 0xf5, 0x3d, 0xb3, 0x44, 0xec, 0xe1,
+			0xa7, 0xf8, 0x69, 0x10, 0x3a, 0xc0, 0x5e, 0xbf,
+			0xf3, 0xf3, 0x65, 0x34, 0x41, 0x3e, 0x03, 0x80,
+			0xbd, 0x2d, 0x70, 0xe5, 0x25, 0x40, 0x01, 0x2b,
+			0x8b, 0x07, 0x98, 0xb6, 0x0d, 0xa5, 0x2f, 0x2c,
+			0xc5, 0x77, 0x62, 0x7b, 0x89, 0x4f, 0xfb, 0x8e,
+			0x8e, 0x62, 0xb7, 0x80, 0xfe, 0x8c, 0x43, 0x95,
+			0x56, 0x5f, 0x5c, 0x4b, 0x6c, 0x4c, 0x61, 0x9b,
+			0x8b, 0xa3, 0xd0, 0xd6, 0xef, 0x0d, 0x1b, 0x2c,
+			0x65, 0x86, 0x8e, 0x99, 0xd7, 0xdc, 0xfd, 0x24,
+			0x5f, 0x66, 0x6a, 0xb6, 0xc6, 0xe4, 0x24, 0x34,
+			0x46, 0x4f, 0xa0, 0xb5, 0xdf, 0x08, 0x33, 0x37,
+			0x73, 0xa4, 0xa7, 0xb3, 0x0a, 0x23, 0x27, 0x39,
+			0x49, 0x4d, 0x72, 0xd6, 0xdc, 0x60, 0x63, 0x89,
+			0xb0, 0xb2, 0xce, 0xdc, 0x11, 0x5c, 0x72, 0x82,
+			0x9a, 0x9d, 0xcc, 0xe5, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x05, 0x0f, 0x16, 0x1d, 0x24,
+			0x2d, 0x34, 0x3c, },
+	}, {
+		.what = "pure rejection vector",
+		.algo = "ml-dsa87",
+		.pk_len = DILITHIUM87_PUBLICKEYBYTES,
+		.pk = (const u8[DILITHIUM87_PUBLICKEYBYTES]){
+			0x32, 0x34, 0xe3, 0x52, 0x81, 0xc5, 0x69, 0x1b,
+			0x0f, 0xb2, 0xb2, 0x44, 0x0b, 0xeb, 0x56, 0xcd,
+			0x74, 0x0e, 0xb7, 0x30, 0x81, 0x42, 0xa3, 0x78,
+			0x6c, 0x57, 0x88, 0x93, 0xc3, 0x48, 0xf3, 0x95,
+			0x61, 0x20, 0xc7, 0x7c, 0xd3, 0xfa, 0x9f, 0x7a,
+			0x8b, 0x2c, 0x64, 0xaf, 0x2b, 0x1c, 0xda, 0xb4,
+			0x34, 0x33, 0xd9, 0x8e, 0x1c, 0xdb, 0x82, 0xfd,
+			0x58, 0xd5, 0x76, 0xf3, 0x74, 0x0b, 0x81, 0x12,
+			0xab, 0x15, 0x08, 0xe3, 0x14, 0x75, 0xff, 0x38,
+			0x1e, 0x6c, 0x1f, 0x2c, 0x8c, 0x20, 0x57, 0xf7,
+			0xc5, 0x73, 0x85, 0x9c, 0x54, 0x7e, 0x8f, 0x64,
+			0x82, 0xf7, 0x53, 0x26, 0x1a, 0xad, 0x1a, 0xc2,
+			0x04, 0x25, 0x67, 0xae, 0x7c, 0x26, 0x0f, 0xf9,
+			0xe0, 0xb4, 0x0c, 0x7c, 0x91, 0xf5, 0x5f, 0x17,
+			0xfc, 0xdc, 0xb9, 0x6c, 0x52, 0x52, 0x6d, 0xb7,
+			0x78, 0xf8, 0xa1, 0x0d, 0x35, 0xe9, 0x71, 0xa1,
+			0xad, 0x4a, 0xa3, 0x0d, 0x41, 0xaf, 0x2e, 0x82,
+			0xf6, 0x24, 0xaf, 0x46, 0x77, 0xa5, 0x05, 0xd3,
+			0xc3, 0xf0, 0xb9, 0xc7, 0x0c, 0x42, 0x42, 0xa2,
+			0x5f, 0x2b, 0x93, 0xc9, 0xce, 0x05, 0x2c, 0x83,
+			0xd4, 0x1a, 0xf0, 0x3b, 0x72, 0x84, 0xcc, 0xff,
+			0x6a, 0x39, 0xdb, 0xb4, 0xdf, 0xc0, 0x6c, 0xba,
+			0x42, 0x55, 0x7f, 0x2d, 0x09, 0x65, 0x4a, 0x65,
+			0x7a, 0xa3, 0xbc, 0xdc, 0x2f, 0x69, 0x06, 0x76,
+			0x4e, 0xe0, 0x08, 0x56, 0xb1, 0x2c, 0x46, 0x71,
+			0xb1, 0xc2, 0x94, 0x76, 0xcb, 0x27, 0xd1, 0x5a,
+			0x32, 0x1b, 0x1a, 0xd0, 0x54, 0xac, 0xa9, 0x73,
+			0xd3, 0x95, 0x4b, 0xe0, 0x1b, 0x3a, 0x48, 0xd9,
+			0x90, 0x6f, 0x6d, 0x82, 0x95, 0x7c, 0xf1, 0x8f,
+			0xec, 0x67, 0xbc, 0x72, 0x91, 0x93, 0x52, 0xdb,
+			0x48, 0x34, 0x16, 0x57, 0xb2, 0x7d, 0x5b, 0x56,
+			0xce, 0x33, 0x97, 0x47, 0xd4, 0xee, 0x97, 0x0b,
+			0x39, 0xd4, 0xf0, 0x0b, 0x29, 0x74, 0x29, 0xab,
+			0x66, 0xb6, 0x0d, 0xe5, 0x0f, 0xed, 0xfa, 0x8d,
+			0x4d, 0xe4, 0x93, 0x40, 0xf3, 0x51, 0x14, 0x78,
+			0x40, 0x25, 0x09, 0x6f, 0xdb, 0xea, 0xa8, 0x94,
+			0x45, 0xaa, 0xbc, 0x09, 0xea, 0x92, 0xcd, 0x90,
+			0xc2, 0xe5, 0xa8, 0x66, 0xba, 0x8f, 0x49, 0x18,
+			0xa4, 0x7c, 0xc2, 0xc6, 0xa4, 0xb4, 0xed, 0xcd,
+			0xb0, 0x87, 0xa2, 0xc7, 0x41, 0xac, 0xd1, 0xdc,
+			0x83, 0x12, 0xde, 0x71, 0x81, 0x65, 0x4c, 0x2f,
+			0xad, 0xca, 0xb4, 0x68, 0x47, 0x64, 0xa2, 0x7e,
+			0x8c, 0xee, 0xfe, 0x4a, 0xca, 0xb0, 0x05, 0xf3,
+			0x21, 0xb8, 0xca, 0x4a, 0x76, 0x6b, 0x73, 0x8d,
+			0xed, 0x53, 0x02, 0x6d, 0x79, 0x42, 0x15, 0xed,
+			0xb7, 0xb9, 0xff, 0x18, 0x2b, 0x53, 0x0d, 0xf4,
+			0x29, 0x35, 0xe3, 0x5e, 0xc2, 0x49, 0x1c, 0x71,
+			0x3d, 0x80, 0xa0, 0x56, 0x59, 0x19, 0xe4, 0x44,
+			0x67, 0x10, 0x00, 0x22, 0xb2, 0x9b, 0x7a, 0xfa,
+			0xbd, 0x0a, 0xdf, 0xe1, 0x7d, 0x57, 0xdf, 0xac,
+			0x3f, 0xcc, 0xb3, 0x85, 0xd9, 0x63, 0xbc, 0xd8,
+			0xd0, 0xa9, 0x5b, 0xd3, 0xd3, 0x82, 0x72, 0x21,
+			0x5c, 0x7f, 0xe2, 0xba, 0x1e, 0x54, 0x99, 0x3a,
+			0x29, 0x9e, 0x66, 0x9c, 0x3d, 0xb0, 0xb2, 0xec,
+			0x85, 0xee, 0x9d, 0xbb, 0x81, 0xb8, 0xb7, 0x52,
+			0x10, 0xb0, 0xa0, 0x18, 0x28, 0xd0, 0x83, 0x34,
+			0x8c, 0xbe, 0x3e, 0x69, 0xfb, 0xad, 0x5c, 0x53,
+			0xd9, 0x67, 0x60, 0x2a, 0x49, 0x2d, 0x68, 0xe7,
+			0x0b, 0x37, 0xdd, 0xb5, 0xa0, 0xa0, 0x32, 0x6e,
+			0xa2, 0x1e, 0x18, 0x19, 0x2c, 0x3c, 0x5d, 0x7e,
+			0x55, 0x7b, 0x03, 0x70, 0xeb, 0x70, 0x72, 0x16,
+			0x1b, 0x2f, 0x28, 0xe0, 0xc6, 0x4a, 0x4f, 0xea,
+			0x76, 0x20, 0x98, 0x09, 0x20, 0xf3, 0x01, 0x23,
+			0xcd, 0x96, 0x35, 0x33, 0xb6, 0x01, 0xa1, 0xd5,
+			0x2e, 0x5a, 0x96, 0x9c, 0xa0, 0xf2, 0x80, 0x76,
+			0x0a, 0x14, 0x53, 0xd9, 0xfc, 0x61, 0x4c, 0x48,
+			0xce, 0xfd, 0xa6, 0xf4, 0x3c, 0x2a, 0xef, 0x8e,
+			0x8c, 0xb4, 0xb3, 0xa2, 0x8e, 0x1a, 0x29, 0x32,
+			0xb2, 0xc3, 0x9e, 0x66, 0xa6, 0x2b, 0xa4, 0x2e,
+			0x1b, 0xf5, 0xb8, 0x89, 0xd4, 0x7e, 0x33, 0x46,
+			0xd0, 0x07, 0x29, 0x95, 0x19, 0xe2, 0x98, 0x49,
+			0x15, 0xca, 0x30, 0x62, 0x18, 0x37, 0xed, 0x40,
+			0xf8, 0xa3, 0xe0, 0x8b, 0xbb, 0xe2, 0x81, 0x28,
+			0xbf, 0xa4, 0xa5, 0xb8, 0x60, 0x29, 0x2a, 0xa6,
+			0x0d, 0x64, 0x36, 0x1b, 0xfa, 0x90, 0x8a, 0xe3,
+			0xae, 0x96, 0x4e, 0x89, 0xfc, 0x1f, 0x2a, 0x95,
+			0xef, 0xcd, 0x7c, 0xb2, 0xac, 0xe3, 0x03, 0x9f,
+			0x26, 0xc9, 0x55, 0xc4, 0x87, 0xfb, 0xb6, 0xc5,
+			0x71, 0xc3, 0x2a, 0xfd, 0x57, 0xd0, 0x92, 0x34,
+			0x9e, 0x49, 0x4b, 0xfe, 0x55, 0x08, 0xb8, 0xdc,
+			0x5c, 0xbf, 0xa4, 0x4e, 0xa0, 0xbe, 0xcf, 0xb1,
+			0x63, 0x7f, 0xfa, 0x85, 0xa3, 0xee, 0xb2, 0x6a,
+			0xeb, 0x76, 0x89, 0x67, 0x55, 0xf8, 0xe4, 0x44,
+			0xaf, 0xb4, 0xc1, 0x55, 0x74, 0x35, 0x8b, 0xe6,
+			0x86, 0xb8, 0xce, 0x24, 0xc7, 0xa4, 0xbe, 0x3d,
+			0x82, 0x4e, 0x1c, 0x08, 0xd3, 0xfd, 0x03, 0xc5,
+			0x98, 0xb9, 0xdf, 0x3e, 0x62, 0x23, 0xe2, 0x89,
+			0xbf, 0xa3, 0x28, 0x01, 0x7d, 0x16, 0x26, 0x1f,
+			0xe0, 0xc4, 0x2a, 0x0f, 0xd6, 0x6b, 0x76, 0xa1,
+			0xd3, 0x79, 0xc3, 0x5b, 0x9b, 0x2d, 0x24, 0x7b,
+			0xb2, 0x00, 0xf6, 0x91, 0xb0, 0x96, 0x1b, 0x92,
+			0x32, 0x75, 0x76, 0x59, 0xb3, 0xd1, 0x7d, 0x26,
+			0xde, 0xb8, 0x99, 0xfe, 0xa3, 0x6d, 0x96, 0x8c,
+			0xc1, 0x45, 0xcc, 0x89, 0x44, 0xa2, 0xb2, 0x19,
+			0xee, 0x26, 0xa0, 0x38, 0xf8, 0x28, 0xd2, 0x38,
+			0x79, 0x3b, 0xd1, 0xce, 0x56, 0x61, 0x7f, 0xa3,
+			0x77, 0x4a, 0xd3, 0x79, 0xeb, 0x8a, 0x9f, 0x06,
+			0x2a, 0x0e, 0xee, 0x59, 0xfb, 0x1e, 0xff, 0xfd,
+			0x77, 0x9c, 0x1c, 0xbb, 0xea, 0x7e, 0xe6, 0x16,
+			0xb5, 0x06, 0x79, 0x5f, 0xa4, 0xcf, 0xd2, 0x7e,
+			0xaf, 0x5a, 0x34, 0x2a, 0xb1, 0x56, 0xf6, 0x13,
+			0x67, 0x9e, 0x29, 0x0c, 0xa7, 0x80, 0xa9, 0x46,
+			0xaf, 0x3a, 0xc6, 0x58, 0x59, 0xb7, 0xf6, 0x17,
+			0x7f, 0x26, 0x8c, 0xa7, 0x07, 0x45, 0xbc, 0x72,
+			0xa7, 0xc6, 0x3f, 0x58, 0x5a, 0xde, 0xbe, 0xad,
+			0x7a, 0x43, 0x8b, 0x4b, 0x80, 0xd9, 0xbf, 0x97,
+			0xa8, 0x8f, 0xa2, 0x17, 0xba, 0x5a, 0x90, 0x64,
+			0xf8, 0xb8, 0x64, 0xd6, 0x43, 0x3d, 0x9f, 0x51,
+			0xb6, 0x7b, 0xdf, 0xc3, 0xee, 0x82, 0x36, 0x6f,
+			0xe6, 0xc5, 0x2a, 0x58, 0xae, 0xc7, 0x46, 0x0e,
+			0x0e, 0x9f, 0x41, 0x74, 0xc2, 0xcf, 0x1a, 0x45,
+			0x70, 0x45, 0x35, 0x9c, 0x33, 0x4e, 0x45, 0xb6,
+			0xc7, 0xc6, 0xbe, 0x01, 0xff, 0x54, 0x9c, 0xca,
+			0x49, 0x87, 0x6f, 0xbb, 0x8d, 0x92, 0xf0, 0x0c,
+			0xef, 0x63, 0x8d, 0x2b, 0xc0, 0xef, 0x95, 0xd7,
+			0xb1, 0x89, 0xd5, 0xb7, 0x8e, 0xeb, 0x95, 0xbb,
+			0x42, 0x97, 0xcf, 0xfe, 0x8e, 0xfa, 0x35, 0x55,
+			0x48, 0x44, 0xb1, 0x4d, 0xc9, 0x35, 0xc0, 0x50,
+			0x33, 0x41, 0xe0, 0x8a, 0x18, 0x31, 0x19, 0x51,
+			0x47, 0xbb, 0xc0, 0x82, 0x78, 0x5f, 0x62, 0xba,
+			0x89, 0x27, 0xa1, 0x01, 0xce, 0xa7, 0x65, 0x47,
+			0x7c, 0x90, 0xc3, 0xb6, 0x75, 0x06, 0x9e, 0x48,
+			0x56, 0xe5, 0x16, 0xad, 0x90, 0xe9, 0xea, 0xcc,
+			0xd5, 0xfb, 0xf2, 0x5b, 0x33, 0xa6, 0xc4, 0x4c,
+			0xa8, 0x1b, 0xd6, 0x39, 0x80, 0xec, 0x86, 0x71,
+			0x9f, 0x63, 0x8d, 0x15, 0x86, 0x7a, 0xd5, 0xe7,
+			0x78, 0xd3, 0x9b, 0xd0, 0x17, 0xc0, 0xa5, 0x85,
+			0xf8, 0x15, 0x47, 0x50, 0x4b, 0x4a, 0xf1, 0x3d,
+			0xf9, 0x07, 0x01, 0x1c, 0x58, 0x4c, 0x9b, 0x1c,
+			0x31, 0x4f, 0xe7, 0xda, 0x60, 0x68, 0x25, 0x29,
+			0x8c, 0x16, 0x82, 0xc5, 0x61, 0x9f, 0x4d, 0xf3,
+			0x17, 0xd0, 0x94, 0x40, 0x8d, 0xe2, 0xbc, 0xfb,
+			0xd8, 0xb5, 0xf3, 0x18, 0x5d, 0xee, 0x49, 0xff,
+			0x6d, 0x5e, 0x20, 0x9e, 0x42, 0xbb, 0x95, 0xb3,
+			0x24, 0x1b, 0xaa, 0x76, 0x9e, 0x8d, 0xf0, 0xea,
+			0xbc, 0x12, 0x6f, 0xf6, 0x9a, 0x85, 0x18, 0x49,
+			0xfd, 0x73, 0x48, 0x24, 0xe6, 0xfe, 0x00, 0xed,
+			0x63, 0x54, 0x35, 0xdd, 0x90, 0x91, 0x1b, 0x2f,
+			0x12, 0x87, 0x17, 0xd3, 0x18, 0x7a, 0xc0, 0x85,
+			0x17, 0x10, 0x76, 0xbc, 0x60, 0x26, 0x40, 0xae,
+			0xb0, 0xb4, 0x5a, 0x9e, 0x12, 0xb8, 0x1d, 0x19,
+			0x2c, 0x20, 0xd9, 0x52, 0x4b, 0x62, 0xf7, 0x9c,
+			0xd6, 0xfd, 0x71, 0xba, 0xc7, 0x48, 0xa6, 0x0e,
+			0x33, 0x16, 0x6c, 0x9e, 0x54, 0x3b, 0x97, 0xa4,
+			0x42, 0x20, 0xb4, 0x69, 0x37, 0x2b, 0x84, 0x49,
+			0xeb, 0xd7, 0xd9, 0xc1, 0x60, 0x2c, 0xdc, 0x2d,
+			0xa4, 0x24, 0xcc, 0xf8, 0x5e, 0x1b, 0xfb, 0x23,
+			0x21, 0x22, 0x2e, 0x92, 0x8d, 0x54, 0x93, 0x34,
+			0xd1, 0x25, 0x24, 0xb6, 0x4b, 0xfb, 0xd7, 0xf4,
+			0x54, 0x05, 0xab, 0xe8, 0x7e, 0xa3, 0x5b, 0x05,
+			0x0f, 0x55, 0x9e, 0xcf, 0x7e, 0x93, 0xbc, 0x85,
+			0x69, 0xf8, 0x8a, 0x85, 0x02, 0xdc, 0xa2, 0x25,
+			0x01, 0x54, 0xc2, 0xb5, 0xe2, 0x7f, 0xcd, 0xc3,
+			0x68, 0x68, 0x41, 0xc2, 0x3a, 0x5e, 0x47, 0xae,
+			0x74, 0x61, 0x43, 0x02, 0xf8, 0x6e, 0x66, 0x5c,
+			0x7f, 0x98, 0xb5, 0xb5, 0x75, 0xd5, 0x4a, 0x2e,
+			0x98, 0xb1, 0xb7, 0xeb, 0xa2, 0xa6, 0xe8, 0x34,
+			0xa1, 0xe5, 0x05, 0xe7, 0xf3, 0x62, 0x71, 0x4e,
+			0x38, 0xca, 0x60, 0x5b, 0xaa, 0x2e, 0x15, 0x2d,
+			0xff, 0x19, 0x43, 0xe7, 0xce, 0x1a, 0x5d, 0x7e,
+			0x9a, 0xa4, 0x01, 0xe3, 0x3d, 0x01, 0xcd, 0x3e,
+			0x17, 0x84, 0xe9, 0x80, 0x82, 0x7f, 0xc5, 0x3a,
+			0x05, 0x45, 0xfe, 0x19, 0xb0, 0x1e, 0x8b, 0xbb,
+			0xdb, 0xbf, 0x19, 0x38, 0xfa, 0x52, 0xd8, 0x2d,
+			0x6a, 0x23, 0x86, 0xe3, 0x0b, 0x28, 0x94, 0xc8,
+			0xa1, 0xcc, 0x49, 0xc2, 0x98, 0x2d, 0x56, 0x56,
+			0x0b, 0x0d, 0x3e, 0x6d, 0xdc, 0xb9, 0xfa, 0x8e,
+			0x56, 0xab, 0x01, 0x8d, 0x58, 0x3c, 0x4b, 0x04,
+			0x82, 0xb1, 0x97, 0xd0, 0x92, 0xfe, 0xb6, 0xc4,
+			0x5b, 0xe0, 0x37, 0x50, 0xc7, 0xac, 0xe2, 0xf4,
+			0xed, 0xf2, 0x05, 0x8c, 0x9d, 0x78, 0x4d, 0xf7,
+			0x9d, 0x59, 0xdb, 0xaa, 0x67, 0x9a, 0xd5, 0x48,
+			0x27, 0x41, 0x89, 0x5b, 0xea, 0x29, 0x26, 0x41,
+			0x76, 0xa8, 0x5f, 0x6d, 0x34, 0x04, 0xd2, 0x5f,
+			0xb9, 0xdc, 0x20, 0xee, 0x04, 0x82, 0x24, 0x7a,
+			0x09, 0x33, 0xf5, 0x02, 0x46, 0xa1, 0xc3, 0x58,
+			0xb5, 0xb6, 0x1b, 0x44, 0x21, 0x34, 0x12, 0x54,
+			0x23, 0xc6, 0x08, 0xa7, 0x54, 0xe4, 0x85, 0xed,
+			0xe5, 0x50, 0x25, 0x20, 0x19, 0xc4, 0x5a, 0x40,
+			0x9e, 0xde, 0x77, 0xd3, 0xe9, 0x1a, 0xe6, 0x7b,
+			0xfc, 0x94, 0x5c, 0x28, 0xb8, 0x40, 0x9f, 0x85,
+			0xa6, 0xa8, 0x18, 0x48, 0x75, 0x3f, 0x0c, 0x3e,
+			0x8a, 0x34, 0x8f, 0x7e, 0xc2, 0x74, 0x71, 0xc2,
+			0x30, 0x6c, 0x55, 0x3c, 0x11, 0xfc, 0x0c, 0xae,
+			0x30, 0x7f, 0xda, 0x71, 0x29, 0x66, 0xd6, 0x46,
+			0xed, 0x1c, 0xa1, 0xb0, 0x08, 0x63, 0xa4, 0xd4,
+			0xb2, 0xec, 0x16, 0xdb, 0xde, 0x22, 0x20, 0xeb,
+			0xe3, 0x8b, 0x7b, 0x2d, 0xac, 0x49, 0xec, 0x2a,
+			0x06, 0x39, 0xa7, 0xaf, 0x24, 0x8c, 0x58, 0x09,
+			0xe6, 0x58, 0x80, 0x3e, 0x8e, 0x2a, 0x0d, 0xbf,
+			0x9c, 0x51, 0x16, 0xe9, 0x95, 0x4a, 0x98, 0x68,
+			0x52, 0x16, 0xc2, 0x6f, 0x94, 0x2f, 0xdc, 0x3b,
+			0xc6, 0x7e, 0x90, 0x2c, 0xf6, 0x84, 0x10, 0x90,
+			0x9c, 0xe7, 0x31, 0x09, 0x8a, 0xe3, 0xad, 0x1f,
+			0x6d, 0x87, 0x74, 0x02, 0xce, 0x85, 0x47, 0x69,
+			0x3b, 0x33, 0x82, 0x51, 0x2a, 0xc8, 0xb4, 0x48,
+			0x22, 0x95, 0x77, 0xd1, 0x90, 0xa3, 0x80, 0xf4,
+			0x28, 0x74, 0xc1, 0x1d, 0x26, 0x7a, 0x79, 0xeb,
+			0x6d, 0x76, 0x64, 0x34, 0x6f, 0x90, 0xd9, 0xe5,
+			0xd0, 0xa8, 0xd9, 0x3d, 0x2a, 0x23, 0x6b, 0x9c,
+			0x58, 0x49, 0xef, 0xa2, 0x61, 0xdd, 0xcd, 0x5c,
+			0xbf, 0xef, 0x38, 0x3e, 0xa0, 0x2b, 0xe9, 0x71,
+			0x89, 0xd7, 0xfc, 0xa1, 0x0b, 0x70, 0x68, 0xda,
+			0xe5, 0x32, 0x30, 0x51, 0x65, 0xe0, 0x13, 0xd7,
+			0x4f, 0xf0, 0xca, 0xa1, 0x0c, 0x49, 0xaf, 0xde,
+			0x70, 0x52, 0xdc, 0x72, 0x7c, 0x29, 0x6d, 0x1c,
+			0x28, 0x3e, 0x5a, 0x75, 0xec, 0xea, 0xfb, 0x97,
+			0xcb, 0x81, 0xf2, 0x74, 0xd7, 0xe0, 0xc2, 0x8f,
+			0x74, 0x6c, 0x06, 0x65, 0x12, 0x69, 0x3c, 0x26,
+			0xbf, 0x37, 0x4c, 0xd8, 0xb2, 0x39, 0x1c, 0x1a,
+			0x26, 0x27, 0x63, 0xa9, 0x70, 0x45, 0x65, 0x03,
+			0x0a, 0x97, 0x75, 0xad, 0x37, 0xc1, 0x0a, 0xb3,
+			0x16, 0x35, 0x15, 0x81, 0xc3, 0x3f, 0xa5, 0xcd,
+			0x31, 0x27, 0x67, 0x95, 0xb2, 0x78, 0x0c, 0x91,
+			0x12, 0x1a, 0x54, 0xfe, 0x14, 0xac, 0xc9, 0x54,
+			0x04, 0x51, 0xa2, 0x3d, 0x0f, 0xb5, 0x2c, 0xab,
+			0x07, 0x72, 0x01, 0x17, 0xef, 0x5c, 0xe7, 0x05,
+			0x05, 0x08, 0x10, 0xa7, 0xf5, 0x30, 0x7c, 0x3e,
+			0xd5, 0x5d, 0xf2, 0xbd, 0x10, 0x58, 0xd1, 0x26,
+			0x12, 0x04, 0xd1, 0x91, 0x5c, 0x49, 0x90, 0x6f,
+			0xb9, 0x1e, 0x57, 0xf8, 0x58, 0x74, 0x3c, 0xe9,
+			0x6f, 0x92, 0x84, 0x95, 0x2f, 0x23, 0xce, 0x63,
+			0x9c, 0x80, 0xf3, 0x6e, 0xc7, 0xc5, 0x0f, 0xcc,
+			0x76, 0xbf, 0x46, 0xf2, 0x0e, 0xe6, 0xc8, 0x22,
+			0x44, 0x6e, 0xbe, 0x74, 0xd5, 0x12, 0x1b, 0x27,
+			0x55, 0xa4, 0x15, 0x4f, 0x14, 0x46, 0xec, 0xed,
+			0x81, 0x60, 0x19, 0x37, 0xa3, 0x38, 0x72, 0x97,
+			0x5e, 0xcd, 0xe6, 0x6f, 0x70, 0x05, 0x67, 0x46,
+			0x7b, 0xd9, 0x95, 0xc7, 0xe4, 0x1c, 0xa2, 0x81,
+			0x1a, 0x1c, 0x07, 0x6a, 0x3e, 0xfd, 0xe0, 0xd8,
+			0x4d, 0xac, 0xe5, 0x1d, 0xca, 0xd9, 0xca, 0x02,
+			0x64, 0x2b, 0xe5, 0xbe, 0x80, 0x84, 0x72, 0x3a,
+			0x67, 0x0d, 0xd1, 0x70, 0xda, 0xda, 0x4d, 0x40,
+			0xfb, 0x2a, 0x91, 0x5e, 0x7f, 0x87, 0xb8, 0x5d,
+			0xf0, 0x90, 0x9b, 0x86, 0x44, 0x72, 0xfc, 0xb6,
+			0x91, 0x32, 0xcc, 0xe1, 0xbb, 0x17, 0x55, 0xda,
+			0x9f, 0x39, 0x3f, 0x38, 0x44, 0xb7, 0x8c, 0x08,
+			0x86, 0x17, 0xbb, 0xc3, 0xe6, 0x46, 0x1e, 0xe1,
+			0xbd, 0xfd, 0x15, 0xec, 0x4e, 0x16, 0x76, 0xbb,
+			0xed, 0xe0, 0xf2, 0xfe, 0x72, 0xbe, 0xac, 0x05,
+			0xcb, 0x31, 0x3e, 0xb2, 0x97, 0x72, 0xcb, 0x92,
+			0x66, 0x93, 0xc0, 0x91, 0xb0, 0xfa, 0x37, 0x04,
+			0xad, 0x6f, 0x25, 0xe1, 0x70, 0x6d, 0xd3, 0x3d,
+			0x8b, 0xe8, 0xdd, 0x73, 0xd1, 0xb1, 0x67, 0xa9,
+			0x5b, 0x4c, 0xad, 0x71, 0xc5, 0x27, 0x87, 0x01,
+			0x76, 0x9f, 0x4f, 0x9e, 0x56, 0xf0, 0xf0, 0xe4,
+			0xe9, 0x63, 0x08, 0x52, 0xc1, 0x89, 0xbb, 0xb4,
+			0x77, 0x86, 0xa5, 0xf3, 0xc1, 0x3e, 0xd4, 0x3c,
+			0x0f, 0x32, 0x3e, 0x83, 0xed, 0x36, 0x7a, 0x9a,
+			0x83, 0x6c, 0x30, 0x42, 0x23, 0xdd, 0xd9, 0xd2,
+			0xe1, 0x02, 0x44, 0x5c, 0x78, 0x70, 0x35, 0x22,
+			0x3b, 0x8d, 0x05, 0xe8, 0xba, 0x1f, 0x68, 0xa3,
+			0x12, 0x25, 0xe2, 0xc2, 0x71, 0xdc, 0xb9, 0x66,
+			0x28, 0x58, 0x4d, 0x3d, 0x89, 0x69, 0x12, 0xca,
+			0xb2, 0x13, 0x9d, 0x8c, 0x84, 0x91, 0x61, 0x67,
+			0x78, 0xb1, 0xc2, 0x29, 0xe4, 0x66, 0x11, 0xb1,
+			0xf5, 0xb2, 0x02, 0xf2, 0x2a, 0x2b, 0x22, 0xc5,
+			0x63, 0x09, 0x6e, 0xfe, 0x16, 0x3c, 0x9e, 0x99,
+			0xa6, 0x9d, 0xc0, 0x4d, 0x2d, 0x37, 0x6e, 0x04,
+			0x74, 0x3f, 0x21, 0xdb, 0xa9, 0xf9, 0xef, 0x41,
+			0x31, 0x54, 0x94, 0xf9, 0x99, 0xaa, 0x03, 0xa3,
+			0x97, 0xfd, 0x5d, 0xa4, 0xf8, 0xd8, 0xc0, 0x99,
+			0xca, 0xd9, 0x33, 0x32, 0x96, 0x5a, 0x89, 0x27,
+			0xc7, 0x5d, 0x37, 0xe2, 0xd0, 0x5f, 0x2f, 0x06,
+			0xd8, 0x41, 0x84, 0x4e, 0xdc, 0xef, 0x92, 0x62,
+			0x7a, 0xe5, 0x7b, 0x12, 0x75, 0x81, 0xde, 0x95,
+			0x53, 0xca, 0x5b, 0xd0, 0x97, 0x25, 0x5c, 0x2c,
+			0xc7, 0xdc, 0xf6, 0x82, 0x2c, 0x6f, 0x5e, 0xef,
+			0x61, 0x2a, 0x35, 0x1b, 0xb8, 0xb5, 0x23, 0x63,
+			0xd5, 0x05, 0xe2, 0x76, 0x1a, 0xe6, 0xbb, 0xd6,
+			0x92, 0x60, 0x2b, 0x3f, 0x93, 0x92, 0x21, 0xa8,
+			0x4a, 0xe5, 0x6b, 0x6d, 0xcc, 0x80, 0x6a, 0x97,
+			0xf3, 0x32, 0xd1, 0xa3, 0xa4, 0x62, 0x62, 0xcb,
+			0xff, 0x89, 0x1c, 0xdc, 0x3d, 0xb3, 0xdd, 0x48,
+			0x3b, 0xcb, 0x4e, 0xb5, 0x29, 0xfd, 0xe7, 0x08,
+			0xe6, 0xf2, 0xdd, 0x57, 0x9e, 0xc0, 0x0b, 0x92,
+			0xbd, 0x90, 0x43, 0xd4, 0x0c, 0x6d, 0xac, 0x2a,
+			0xcc, 0xab, 0x1d, 0x84, 0x03, 0x1b, 0xe6, 0xf2,
+			0x45, 0x6b, 0x22, 0x6c, 0x9a, 0xf6, 0xdf, 0x53,
+			0x1b, 0x77, 0x12, 0x27, 0xd5, 0x90, 0x76, 0xfd,
+			0x7e, 0x1e, 0x8f, 0x27, 0x94, 0x18, 0xc1, 0x16,
+			0x62, 0x9b, 0xda, 0xd6, 0x71, 0x98, 0x47, 0xe3,
+			0x70, 0xb0, 0xf9, 0x60, 0x3d, 0x58, 0x6f, 0x78,
+			0x75, 0xb5, 0xb0, 0xf9, 0x92, 0x1f, 0x05, 0x65,
+			0x0e, 0x52, 0xe7, 0x5d, 0x39, 0x58, 0x89, 0x08,
+			0x62, 0xe4, 0x5a, 0xe9, 0x93, 0xe4, 0xe4, 0xd0,
+			0xf8, 0x27, 0xc6, 0xe0, 0x96, 0x91, 0x2b, 0xc9,
+			0x67, 0x80, 0x38, 0x85, 0xc9, 0xcc, 0x1b, 0x70,
+			0x44, 0xdc, 0x96, 0xe0, 0x49, 0x41, 0xbf, 0x0e,
+			0x57, 0x76, 0x8f, 0xd7, 0x8d, 0x71, 0xcb, 0x6a,
+			0x1b, 0x92, 0xb3, 0xe7, 0x96, 0xf4, 0xf0, 0x0a,
+			0x0b, 0xe7, 0x9c, 0x16, 0x64, 0xfa, 0xe4, 0xce,
+			0x7a, 0xda, 0x1a, 0xc5, 0x6e, 0x81, 0xc0, 0x21,
+			0x4d, 0x5d, 0xae, 0x74, 0xe3, 0x1b, 0xa4, 0xd3,
+			0x1a, 0x12, 0x7e, 0x65, 0x1b, 0xe7, 0x92, 0xbe,
+			0x1a, 0xc3, 0xf8, 0xd3, 0x84, 0x92, 0xb2, 0x7e,
+			0x5d, 0x40, 0x10, 0xaf, 0x61, 0x60, 0x21, 0x1f,
+			0x54, 0x54, 0xe3, 0x76, 0xa0, 0xa8, 0xda, 0xaa,
+			0x0f, 0x29, 0xa7, 0xa9, 0x99, 0xa9, 0xb3, 0xd2,
+			0xd4, 0xd1, 0xef, 0x8a, 0x94, 0x1d, 0xc5, 0x61,
+			0x54, 0xa2, 0x94, 0xaf, 0xcb, 0xad, 0x4b, 0x23,
+			0x6c, 0xb6, 0x50, 0x33, 0xeb, 0xac, 0x6e, 0x58,
+			0xf1, 0xd4, 0xd3, 0x7a, 0x1f, 0x95, 0x00, 0x9d,
+			0x9c, 0xf6, 0x84, 0x71, 0xe3, 0xe5, 0xd3, 0x4d,
+			0x28, 0x3b, 0x2d, 0xcb, 0x2b, 0xc1, 0x90, 0xf5,
+			0xee, 0x02, 0x22, 0xa2, 0x8a, 0xf1, 0x3c, 0x17,
+			0xeb, 0x40, 0x67, 0xd3, 0x57, 0x62, 0x8b, 0x9b,
+			0xec, 0xc1, 0xeb, 0x96, 0x55, 0xde, 0xa7, 0x6c,
+			0xaf, 0xcb, 0x5f, 0xf3, 0xc3, 0x11, 0x49, 0xae,
+			0x09, 0x3f, 0x66, 0x75, 0xce, 0x3f, 0x0d, 0x95,
+			0xb6, 0x4b, 0xc2, 0xbb, 0x7d, 0x81, 0xea, 0x2a,
+			0x9e, 0x22, 0xac, 0x2f, 0xbd, 0xcf, 0x8b, 0x18,
+			0x82, 0xeb, 0x86, 0xfb, 0x5b, 0x9a, 0x28, 0x0e,
+			0x11, 0xc8, 0x3e, 0x55, 0xd6, 0x1f, 0xe1, 0xe0,
+			0x30, 0x70, 0x4c, 0x54, 0xbf, 0x35, 0xec, 0x2f,
+			0x89, 0x53, 0xab, 0x81, 0x10, 0x7a, 0x42, 0x12,
+			0x6f, 0x3a, 0xec, 0xf7, 0x6b, 0x92, 0x85, 0x01,
+			0xab, 0x97, 0x23, 0x4e, 0xa4, 0xfc, 0x41, 0x2b,
+			0x90, 0xbb, 0x16, 0x73, 0x81, 0xeb, 0xd4, 0xdc,
+			0x84, 0x7f, 0x8a, 0xd8, 0x1f, 0x8d, 0x40, 0xce,
+			0xc0, 0xb5, 0x69, 0x8d, 0x42, 0xed, 0xb7, 0x87,
+			0x84, 0x00, 0x8e, 0x8e, 0x60, 0x46, 0x0a, 0x9e,
+			0x3c, 0xf6, 0x6a, 0xc6, 0x3b, 0x7a, 0x48, 0x64,
+			0x83, 0x7b, 0x3f, 0x02, 0x6e, 0x54, 0xd3, 0xa7,
+			},
+		.msg_len = 64,
+		.msg = (const u8[64]){
+			0x2d, 0x76, 0xc8, 0x74, 0x90, 0x71, 0x73, 0x7c,
+			0xd5, 0xa0, 0x78, 0x8f, 0xe9, 0x97, 0x0e, 0x3a,
+			0xdc, 0x3f, 0x38, 0x40, 0x28, 0x39, 0xa2, 0xfe,
+			0xcc, 0xdc, 0x86, 0x77, 0xb5, 0x76, 0xb0, 0x5c,
+			0x25, 0xbd, 0x6d, 0xe1, 0x6d, 0x00, 0x47, 0x6a,
+			0x26, 0xb5, 0xda, 0x38, 0x75, 0x9e, 0xcf, 0xff,
+			0x97, 0x67, 0x36, 0x41, 0xda, 0x9b, 0xa8, 0x1c,
+			0xba, 0x15, 0xa6, 0x65, 0xba, 0x7a, 0x55, 0x73,
+			},
+		.sig_len = DILITHIUM87_CRYPTO_BYTES,
+		.sig = (const u8[DILITHIUM87_CRYPTO_BYTES]){
+			0x7a, 0x5d, 0xe3, 0x9b, 0x46, 0x7c, 0x10, 0xd8,
+			0x40, 0x60, 0x48, 0x83, 0x19, 0x53, 0xcb, 0xcc,
+			0xff, 0xef, 0x34, 0x9d, 0xdb, 0x02, 0x5f, 0xa8,
+			0x8b, 0x3f, 0xac, 0x51, 0x14, 0x42, 0x9c, 0x3f,
+			0xef, 0xcd, 0x1d, 0x65, 0x34, 0x49, 0xd7, 0xce,
+			0x0f, 0x6a, 0x32, 0xb8, 0x8d, 0x39, 0x1e, 0x8c,
+			0x67, 0x56, 0xa7, 0xa4, 0x64, 0x4c, 0xcd, 0xb5,
+			0x77, 0xf8, 0x64, 0xa9, 0x08, 0x1d, 0xc8, 0x44,
+			0x0a, 0x0b, 0xb2, 0xcf, 0x5b, 0xac, 0x9d, 0xb7,
+			0x88, 0xb8, 0x91, 0x51, 0xb0, 0x91, 0xbd, 0xe1,
+			0x11, 0xc4, 0x7a, 0x02, 0xbf, 0x3b, 0x44, 0x21,
+			0x34, 0x6e, 0x45, 0x00, 0x2e, 0x09, 0x66, 0x04,
+			0xe4, 0x95, 0xc9, 0xe4, 0xee, 0xa8, 0x49, 0x92,
+			0x6a, 0x41, 0x6c, 0x55, 0x4f, 0x17, 0x09, 0x4c,
+			0x84, 0x19, 0xe9, 0xa2, 0xa6, 0x32, 0xb6, 0x1a,
+			0x28, 0x5c, 0x23, 0x93, 0x7f, 0x9a, 0xd0, 0x74,
+			0x47, 0xc4, 0x40, 0xe1, 0xd3, 0xb6, 0x4a, 0x0a,
+			0x39, 0x5a, 0x3d, 0xb1, 0xfe, 0x74, 0xf2, 0xc4,
+			0x4c, 0x42, 0x4f, 0xea, 0x73, 0x1f, 0xd9, 0x03,
+			0xf7, 0x2f, 0x04, 0x0e, 0x52, 0x50, 0x86, 0xc1,
+			0x77, 0x30, 0x8b, 0xdf, 0x94, 0x1c, 0x7d, 0x51,
+			0xdf, 0x3e, 0x46, 0xd4, 0xeb, 0x30, 0x5d, 0xe1,
+			0xea, 0x3a, 0x55, 0xeb, 0xfd, 0xe2, 0xab, 0x02,
+			0x92, 0x79, 0xe7, 0x1a, 0xc7, 0x74, 0xd8, 0x8e,
+			0xf3, 0x65, 0x5f, 0x19, 0x7d, 0x3d, 0x2b, 0xc0,
+			0x75, 0x15, 0x41, 0xe0, 0x6e, 0xf4, 0xe4, 0xea,
+			0xf8, 0xcf, 0x40, 0x51, 0xd4, 0x85, 0xc0, 0xcd,
+			0xe9, 0x2b, 0x12, 0x62, 0x02, 0xf4, 0xf2, 0xc5,
+			0xc4, 0xd2, 0x70, 0x13, 0xa8, 0xee, 0x69, 0x57,
+			0x0b, 0x17, 0x42, 0x99, 0xe9, 0x0f, 0xfa, 0x95,
+			0x2c, 0x32, 0x4e, 0x9e, 0xa4, 0x49, 0xc2, 0x9a,
+			0x19, 0x90, 0xba, 0x3d, 0x7a, 0xc0, 0x7c, 0xeb,
+			0x84, 0xe6, 0x45, 0x86, 0xf6, 0x37, 0x0b, 0xdd,
+			0x20, 0x8a, 0x8d, 0xc4, 0x59, 0x4e, 0x34, 0x91,
+			0x91, 0x39, 0xd1, 0x25, 0x89, 0x0e, 0x78, 0x81,
+			0x28, 0x3c, 0xf0, 0x67, 0x90, 0x30, 0xfe, 0x72,
+			0x53, 0x66, 0xce, 0xcd, 0x17, 0x62, 0xbf, 0x38,
+			0x1c, 0x9f, 0x7f, 0x74, 0x21, 0x94, 0x26, 0xb0,
+			0x2d, 0x20, 0xe3, 0x56, 0x36, 0xa8, 0x6c, 0x7c,
+			0xc3, 0x5d, 0xc1, 0x7d, 0xbd, 0xe1, 0x95, 0xdc,
+			0x7d, 0xc6, 0xf4, 0x93, 0xaf, 0xfc, 0x61, 0x2c,
+			0xcb, 0x4c, 0x10, 0x7f, 0x22, 0xfb, 0xcc, 0x05,
+			0x41, 0x00, 0x8c, 0xf6, 0xfc, 0x25, 0x62, 0xd5,
+			0xc8, 0xbc, 0x69, 0xfd, 0xef, 0xc6, 0x84, 0x89,
+			0x64, 0xcd, 0xa4, 0x5c, 0x5a, 0x7f, 0x0b, 0x55,
+			0xdf, 0x7e, 0x33, 0x14, 0x2f, 0x92, 0xe4, 0x49,
+			0x0c, 0x99, 0x07, 0xe2, 0x59, 0x28, 0xfc, 0x96,
+			0xa9, 0x5a, 0x06, 0xc0, 0xda, 0x18, 0xe8, 0x4b,
+			0x9a, 0x35, 0xbe, 0x36, 0xad, 0x00, 0x46, 0x0a,
+			0xe6, 0x75, 0xcf, 0x8c, 0x98, 0x08, 0x9b, 0x4b,
+			0x0f, 0x78, 0x1a, 0x19, 0x93, 0x8d, 0x72, 0x03,
+			0xe9, 0x21, 0xbe, 0x74, 0x32, 0xb8, 0xa2, 0x10,
+			0xa2, 0x86, 0xc3, 0xb4, 0xf3, 0x8b, 0xd9, 0x1e,
+			0x7b, 0x85, 0x9b, 0x7d, 0x6c, 0x9a, 0x68, 0x01,
+			0x0d, 0x26, 0xf1, 0x93, 0xcc, 0xdd, 0xae, 0xeb,
+			0x89, 0x56, 0x23, 0xcd, 0x05, 0x29, 0x43, 0xa2,
+			0x87, 0xa2, 0x72, 0x99, 0xef, 0xb6, 0x26, 0x2c,
+			0x99, 0x90, 0xb2, 0x89, 0xe8, 0x42, 0xfe, 0x16,
+			0x2d, 0x38, 0xb4, 0xe3, 0xef, 0x6f, 0x3c, 0xd9,
+			0x65, 0x32, 0xed, 0xbd, 0xca, 0x32, 0x82, 0x8a,
+			0xaa, 0x3a, 0x4f, 0xb3, 0xc5, 0xda, 0x82, 0x40,
+			0x51, 0x62, 0xdc, 0xfa, 0xa3, 0xd5, 0x21, 0x67,
+			0x7a, 0x6a, 0xda, 0x0e, 0xea, 0xe0, 0xdb, 0x68,
+			0x51, 0xbe, 0x9c, 0xd5, 0x3a, 0xec, 0xd1, 0xa9,
+			0x73, 0xa1, 0xc8, 0xbf, 0x05, 0x3b, 0xec, 0xe0,
+			0x41, 0xc1, 0x91, 0x8c, 0x3f, 0x31, 0xb5, 0x16,
+			0x68, 0x81, 0xad, 0xdf, 0x63, 0x9d, 0xb7, 0x2c,
+			0x8b, 0x5c, 0x66, 0x01, 0x53, 0x75, 0x4d, 0x90,
+			0xfb, 0x29, 0x17, 0x8e, 0xc5, 0x16, 0x84, 0x8f,
+			0x08, 0xfa, 0x9e, 0x4b, 0xfa, 0xb0, 0xa6, 0x1f,
+			0xd7, 0xa0, 0xf3, 0x7b, 0x9f, 0x26, 0x88, 0x75,
+			0x3a, 0x9a, 0xc8, 0xb7, 0x1c, 0xa1, 0x84, 0xad,
+			0xb4, 0xf4, 0xf2, 0x78, 0xa7, 0xda, 0xeb, 0x55,
+			0x5f, 0x89, 0x69, 0xa8, 0x3f, 0xbb, 0x93, 0x74,
+			0x72, 0xb8, 0x29, 0xc0, 0xb3, 0x4a, 0xb6, 0x06,
+			0x57, 0x79, 0xff, 0xd5, 0xe2, 0x89, 0x7e, 0xa2,
+			0xc2, 0x1a, 0xeb, 0x11, 0xb7, 0x86, 0x26, 0xd6,
+			0x20, 0xa4, 0xd8, 0x1b, 0x03, 0x7b, 0x5c, 0x4a,
+			0x4d, 0x60, 0x90, 0x19, 0x96, 0xa3, 0x64, 0x5f,
+			0x91, 0x6b, 0x03, 0xfb, 0x43, 0xd0, 0xa4, 0x51,
+			0xa2, 0x8a, 0xad, 0x55, 0x61, 0x23, 0xef, 0xe0,
+			0x87, 0xc0, 0xba, 0xe2, 0x3b, 0xdb, 0x11, 0x26,
+			0x94, 0x1f, 0x65, 0xf5, 0x20, 0x67, 0x36, 0xce,
+			0x5a, 0xee, 0x24, 0xad, 0xbe, 0xc0, 0x32, 0xa5,
+			0xa5, 0xf3, 0x92, 0x47, 0x55, 0xee, 0x67, 0xf8,
+			0x1a, 0x8a, 0xd6, 0x69, 0x50, 0x07, 0x96, 0x43,
+			0xcd, 0x01, 0x74, 0x78, 0x71, 0x40, 0xc4, 0x32,
+			0x89, 0x07, 0xe0, 0x16, 0x59, 0x11, 0x41, 0x4a,
+			0x60, 0x19, 0x89, 0xe4, 0xc8, 0x76, 0x02, 0xce,
+			0xd0, 0xa8, 0x26, 0xdd, 0xc1, 0xad, 0xb6, 0x13,
+			0xd1, 0x11, 0x30, 0x32, 0x93, 0xcd, 0xf8, 0xfe,
+			0xcb, 0x78, 0xcf, 0x4c, 0x58, 0xb8, 0x94, 0x22,
+			0xe1, 0x38, 0xa4, 0xb5, 0xbe, 0x78, 0x08, 0x9e,
+			0x15, 0x8a, 0xa9, 0x73, 0x15, 0x6d, 0x5d, 0x2f,
+			0xd0, 0x29, 0x28, 0xa1, 0x8f, 0xde, 0x86, 0x1b,
+			0xbb, 0xc2, 0xb1, 0x6f, 0xea, 0x7b, 0xb0, 0xa5,
+			0x8b, 0x91, 0xb6, 0xee, 0x77, 0xe1, 0xf2, 0x10,
+			0x18, 0xa0, 0x67, 0x88, 0x85, 0x97, 0xb9, 0x26,
+			0x44, 0xdc, 0x37, 0x9a, 0xda, 0xdf, 0xf0, 0x60,
+			0xda, 0x10, 0x7d, 0x03, 0x0d, 0xa1, 0x04, 0x3e,
+			0x2a, 0xd2, 0xaf, 0x46, 0xae, 0x24, 0x57, 0xff,
+			0x7f, 0x8b, 0xb0, 0xb3, 0xd2, 0xb6, 0xe1, 0x09,
+			0x24, 0xe0, 0x65, 0xbd, 0xcf, 0x08, 0x3e, 0xcc,
+			0x93, 0xd5, 0x00, 0x59, 0xf1, 0x71, 0x8d, 0x26,
+			0x10, 0xff, 0xa4, 0x64, 0x50, 0x7d, 0x8d, 0xcc,
+			0xc0, 0x14, 0x10, 0x38, 0x19, 0xe6, 0x3c, 0x5b,
+			0x86, 0xf9, 0xe5, 0xf5, 0x95, 0x56, 0x9b, 0xbb,
+			0x21, 0xbd, 0x61, 0x39, 0xbf, 0xa3, 0xe7, 0xea,
+			0xd7, 0x3d, 0x05, 0xe1, 0x89, 0xce, 0x8e, 0xb5,
+			0x49, 0x47, 0x6c, 0xc5, 0x34, 0x9d, 0x32, 0x9f,
+			0x1f, 0xba, 0x45, 0xef, 0xa1, 0xea, 0x55, 0xac,
+			0xfc, 0x21, 0x71, 0xcd, 0xb2, 0x20, 0x97, 0xfc,
+			0x8e, 0xa4, 0xc7, 0x0c, 0x92, 0x7c, 0x20, 0x0b,
+			0xab, 0xe2, 0xa9, 0xec, 0x30, 0x34, 0x73, 0xbc,
+			0x11, 0x9a, 0xbd, 0xf2, 0x55, 0x98, 0x84, 0xb4,
+			0xfb, 0x01, 0xc4, 0x27, 0xff, 0x40, 0xe5, 0x0c,
+			0x20, 0x46, 0x39, 0x8a, 0x08, 0x06, 0x79, 0x10,
+			0x0b, 0x8c, 0xf9, 0xda, 0x22, 0x56, 0xe4, 0xdb,
+			0x2e, 0xb1, 0x99, 0xae, 0x41, 0x96, 0x43, 0x74,
+			0x4f, 0xcf, 0xf3, 0xba, 0xaf, 0xca, 0xe8, 0xe9,
+			0xd0, 0xbc, 0x7e, 0x28, 0x73, 0x2c, 0xa9, 0x61,
+			0xcf, 0xb0, 0x57, 0xc4, 0x6c, 0x2a, 0xb3, 0xc8,
+			0x47, 0xba, 0x45, 0x14, 0x80, 0xf5, 0x91, 0xb8,
+			0xf5, 0xc8, 0x08, 0x0e, 0x6f, 0x3f, 0x7e, 0xa8,
+			0xc9, 0x60, 0xe2, 0xb0, 0x35, 0xbc, 0xa0, 0x75,
+			0xe7, 0x83, 0x04, 0xa0, 0xfa, 0x79, 0xdd, 0x5d,
+			0x39, 0xf9, 0x8d, 0x37, 0x92, 0x70, 0xa8, 0x87,
+			0xd0, 0xfb, 0x83, 0xa5, 0xaf, 0x4d, 0xa4, 0xcc,
+			0x86, 0xd4, 0xac, 0xfe, 0xae, 0xde, 0x22, 0x1c,
+			0x32, 0xb1, 0x97, 0x62, 0x78, 0x88, 0xd6, 0xbc,
+			0x88, 0x6d, 0x61, 0xda, 0xd5, 0xce, 0xb3, 0x98,
+			0xc4, 0x0f, 0xd3, 0x6e, 0x19, 0xdb, 0x45, 0xa2,
+			0x6d, 0x77, 0xb4, 0x17, 0x2c, 0x95, 0xd0, 0x49,
+			0x38, 0xa1, 0xef, 0xcb, 0x5d, 0x52, 0xc9, 0xcd,
+			0x22, 0xbe, 0x2b, 0x52, 0x9b, 0x25, 0x91, 0x2d,
+			0x24, 0xe4, 0xc6, 0x75, 0xc6, 0xd2, 0x76, 0x73,
+			0xf6, 0x73, 0xbe, 0x87, 0x35, 0x50, 0x7f, 0xeb,
+			0x11, 0x8e, 0x31, 0xb4, 0x9f, 0x00, 0xcb, 0x0b,
+			0x37, 0x77, 0xf7, 0xef, 0x7f, 0x28, 0x1a, 0x5c,
+			0x04, 0xc6, 0x4b, 0x35, 0x47, 0xb4, 0xa3, 0xf1,
+			0xde, 0x9b, 0x2a, 0x11, 0x76, 0xad, 0x1b, 0xa4,
+			0x59, 0xf3, 0xeb, 0x9a, 0xa6, 0xf5, 0xd4, 0x30,
+			0x17, 0x00, 0x44, 0xab, 0x3a, 0x99, 0x6b, 0x5a,
+			0x7a, 0x29, 0x5f, 0xce, 0x78, 0x49, 0x73, 0x7b,
+			0xf1, 0xbf, 0xcf, 0x69, 0xa4, 0x79, 0xa1, 0x45,
+			0x78, 0x95, 0xae, 0xe7, 0x6e, 0x71, 0xb9, 0x47,
+			0x51, 0xb0, 0xa0, 0xac, 0xc5, 0xeb, 0x17, 0x52,
+			0xbf, 0x6e, 0x94, 0xe1, 0x2b, 0x59, 0xca, 0x7d,
+			0xba, 0x40, 0xe2, 0xb0, 0x32, 0xeb, 0x3f, 0x31,
+			0x17, 0x39, 0x2c, 0x9c, 0xe7, 0xf7, 0xb3, 0xc1,
+			0x50, 0x0c, 0x1d, 0xa4, 0x2a, 0x00, 0xb1, 0x8d,
+			0x0c, 0x55, 0x68, 0xb3, 0xf5, 0x45, 0x38, 0x6b,
+			0x6b, 0x5f, 0xcc, 0xa2, 0x16, 0x8e, 0x41, 0xd6,
+			0xa7, 0xee, 0xaf, 0x4c, 0xea, 0x9c, 0x80, 0x46,
+			0x4b, 0x65, 0x06, 0xf4, 0x0b, 0x8e, 0xd1, 0x75,
+			0x3a, 0x7c, 0x4c, 0x1b, 0x3f, 0x65, 0xce, 0x61,
+			0xa8, 0xa3, 0x6e, 0xa8, 0x1d, 0xfe, 0x55, 0xc0,
+			0x96, 0x9d, 0x19, 0xcc, 0x5b, 0x6e, 0x01, 0x8b,
+			0xf7, 0xfe, 0x61, 0x73, 0x48, 0x9d, 0x1c, 0xf8,
+			0xc2, 0xd2, 0x0b, 0x18, 0xde, 0x6c, 0x2c, 0x87,
+			0x89, 0xd4, 0x4e, 0x37, 0x39, 0x67, 0x36, 0xe4,
+			0x23, 0x88, 0x49, 0x5a, 0x0f, 0x43, 0xc6, 0x8c,
+			0x60, 0x9f, 0xb6, 0x04, 0xa0, 0x2d, 0x31, 0xb4,
+			0x8d, 0xef, 0x4b, 0x5c, 0xc7, 0x2b, 0xf5, 0x8f,
+			0x47, 0xf1, 0x4f, 0x47, 0xff, 0x41, 0x06, 0xfa,
+			0x50, 0x4f, 0x7f, 0x1b, 0x87, 0xad, 0xed, 0x2a,
+			0xc5, 0x65, 0x0d, 0x53, 0x5f, 0xc2, 0x71, 0x95,
+			0xa5, 0xeb, 0x59, 0x6b, 0xef, 0xf9, 0x5d, 0x32,
+			0x4a, 0x09, 0xfa, 0x01, 0xaa, 0x3f, 0x70, 0x43,
+			0x1c, 0x16, 0x06, 0x01, 0x28, 0xa1, 0xfb, 0x82,
+			0xd8, 0x60, 0x79, 0xd2, 0x67, 0xd2, 0xcc, 0xd9,
+			0xce, 0xaf, 0x53, 0x45, 0xcd, 0x7d, 0x08, 0xf8,
+			0x22, 0x8e, 0x37, 0x4a, 0x4c, 0x12, 0xf2, 0xe2,
+			0x90, 0x2d, 0xe9, 0x27, 0x53, 0x44, 0x6d, 0x57,
+			0x2f, 0xd6, 0x19, 0x04, 0xe2, 0xe0, 0x3e, 0x23,
+			0x4a, 0xcf, 0x52, 0x1a, 0x9a, 0x0d, 0x7e, 0x62,
+			0xac, 0xd9, 0xee, 0xf2, 0x1d, 0x16, 0x59, 0x4d,
+			0x83, 0x7f, 0x44, 0x5e, 0x4e, 0x39, 0x63, 0x09,
+			0x10, 0xd4, 0xe2, 0xf3, 0x71, 0x54, 0xfd, 0xff,
+			0x2b, 0x82, 0x69, 0x6f, 0x1a, 0x7f, 0x63, 0xdd,
+			0x7f, 0x2a, 0xb6, 0x52, 0x42, 0xbb, 0x43, 0xef,
+			0xf5, 0x25, 0xf7, 0x96, 0xf6, 0x7b, 0x6c, 0x00,
+			0x1f, 0xda, 0xdc, 0x35, 0x1a, 0x44, 0x1b, 0xb5,
+			0xe5, 0x03, 0x97, 0x96, 0x67, 0x19, 0x13, 0x7a,
+			0xda, 0xd9, 0xc2, 0xe8, 0xec, 0xb1, 0xc6, 0x12,
+			0x88, 0xc5, 0x5c, 0xd7, 0x56, 0x76, 0xc2, 0x27,
+			0x0a, 0xf5, 0x94, 0x58, 0x0e, 0x70, 0xf1, 0x63,
+			0xbe, 0x13, 0xe1, 0x41, 0x17, 0xb4, 0x04, 0xe9,
+			0xad, 0x9a, 0x4c, 0x0b, 0x03, 0x1d, 0xe5, 0x7b,
+			0x5a, 0xaf, 0xc1, 0x15, 0x0a, 0xe1, 0x87, 0x2a,
+			0x0b, 0x1c, 0xd1, 0x44, 0x2e, 0x5a, 0x8b, 0x49,
+			0x47, 0xfc, 0xb2, 0x62, 0xd6, 0x16, 0xc8, 0xbf,
+			0x79, 0xab, 0x52, 0x2d, 0xbd, 0x52, 0x3c, 0xbd,
+			0x49, 0x95, 0x2a, 0xd8, 0x9d, 0x2d, 0xd4, 0x5d,
+			0x6b, 0xbb, 0x7e, 0x8e, 0xa0, 0x8f, 0x17, 0xf0,
+			0x48, 0xc7, 0xf3, 0x3a, 0x4e, 0x47, 0x7b, 0x5e,
+			0x1d, 0xb4, 0x45, 0xdd, 0x3c, 0x76, 0x71, 0x07,
+			0x99, 0x7c, 0xd0, 0xbc, 0x91, 0x8a, 0x18, 0x65,
+			0xec, 0xc2, 0x56, 0x65, 0x9b, 0x80, 0x7e, 0x65,
+			0xfc, 0xb2, 0xbb, 0xa3, 0xf3, 0xc2, 0xb1, 0x2a,
+			0xe5, 0x63, 0x7b, 0x15, 0xed, 0x20, 0x33, 0x61,
+			0xe2, 0x97, 0xdc, 0xb6, 0x53, 0x40, 0x11, 0x62,
+			0xf3, 0x17, 0x9a, 0xc9, 0x88, 0x1f, 0xf3, 0xd9,
+			0x3c, 0x9b, 0x66, 0xf5, 0x1c, 0x4a, 0x1e, 0xb5,
+			0x97, 0x14, 0x26, 0x2f, 0xf1, 0x13, 0x24, 0xb1,
+			0xb8, 0x1d, 0x2d, 0x04, 0xf5, 0x20, 0xbb, 0xb5,
+			0x4b, 0x39, 0x6d, 0x4d, 0xb2, 0xdd, 0x29, 0x82,
+			0x71, 0xce, 0x85, 0x20, 0x3c, 0xe3, 0x54, 0x71,
+			0x75, 0xd4, 0x7b, 0x90, 0xe7, 0x60, 0x1a, 0x3c,
+			0x6a, 0x6f, 0xe4, 0x67, 0xd8, 0xec, 0x7e, 0x56,
+			0x09, 0x79, 0x34, 0x1c, 0xd8, 0xf8, 0x76, 0xe2,
+			0xae, 0xef, 0x29, 0x4f, 0xcf, 0xb9, 0xf7, 0x0d,
+			0xd0, 0xd5, 0x89, 0xdd, 0x2c, 0x9a, 0xf0, 0x1a,
+			0xd0, 0x68, 0xc2, 0x31, 0x81, 0x1f, 0xed, 0xc7,
+			0x20, 0xd9, 0xa7, 0x2d, 0xbe, 0xd3, 0x77, 0xb0,
+			0x76, 0x55, 0x00, 0x0a, 0xbd, 0x0c, 0x19, 0x52,
+			0x80, 0x46, 0x5e, 0xec, 0x5f, 0x5b, 0xa5, 0x29,
+			0x5c, 0xaf, 0x41, 0xe3, 0xb8, 0x4e, 0xd3, 0x8d,
+			0xd2, 0xfb, 0x6a, 0xe7, 0xa3, 0x9c, 0xba, 0x41,
+			0xb4, 0x93, 0x90, 0x4d, 0x7d, 0x56, 0x1d, 0x50,
+			0x57, 0xa9, 0x28, 0xd9, 0xf2, 0x9f, 0x51, 0x3d,
+			0x44, 0xdd, 0x39, 0x39, 0x97, 0xd8, 0xc8, 0x52,
+			0xc6, 0xb7, 0xed, 0x50, 0x1e, 0x58, 0x22, 0x7d,
+			0x69, 0xcf, 0xb6, 0x61, 0xf4, 0xd5, 0x10, 0x61,
+			0xa8, 0x13, 0xdb, 0xd0, 0x7c, 0xc1, 0x7f, 0x3b,
+			0x7d, 0x80, 0x43, 0x37, 0x21, 0x44, 0x4a, 0xb7,
+			0x14, 0x63, 0xfa, 0x6a, 0x57, 0x7a, 0x55, 0xb1,
+			0x27, 0x7b, 0x6c, 0x66, 0x97, 0xc9, 0x7b, 0xdf,
+			0x4d, 0x32, 0x2b, 0x85, 0x57, 0x3d, 0x3b, 0x00,
+			0x38, 0xec, 0x8f, 0xba, 0xe3, 0xb6, 0xb9, 0x4c,
+			0x80, 0xc5, 0xe3, 0x8d, 0x73, 0x65, 0x5d, 0x74,
+			0x91, 0xe6, 0x6d, 0xf3, 0x4b, 0xd7, 0xc3, 0x34,
+			0x1b, 0x40, 0xd2, 0xc0, 0x10, 0x7d, 0x74, 0xf2,
+			0xa1, 0x8d, 0xb9, 0x74, 0x84, 0x9e, 0x10, 0xcc,
+			0x53, 0xc9, 0xca, 0x36, 0x9f, 0x4a, 0x86, 0xa8,
+			0xf3, 0x23, 0xea, 0xbe, 0x7c, 0x2a, 0x94, 0x3d,
+			0x2b, 0x35, 0xa2, 0x4c, 0xab, 0xf0, 0x5e, 0x78,
+			0x81, 0x60, 0x74, 0x5f, 0x51, 0xe3, 0x74, 0xe5,
+			0x92, 0xa0, 0x82, 0xbd, 0x92, 0x50, 0xc9, 0x20,
+			0x81, 0xeb, 0x6f, 0xdc, 0x49, 0x56, 0xb8, 0x87,
+			0x27, 0x2c, 0xd7, 0x4b, 0x1e, 0x31, 0x89, 0x85,
+			0x5d, 0x12, 0x9b, 0xcf, 0xf7, 0x7c, 0x51, 0x24,
+			0xce, 0x2d, 0x45, 0x61, 0xbb, 0x72, 0xcb, 0x3b,
+			0xc5, 0xf9, 0x90, 0x80, 0x51, 0x6b, 0x98, 0x09,
+			0xb2, 0x0c, 0xe9, 0x06, 0x64, 0x1f, 0x5d, 0xd9,
+			0x2c, 0xee, 0x35, 0xd5, 0x72, 0xe6, 0xca, 0xfe,
+			0x3d, 0xc6, 0x9a, 0x57, 0x45, 0x2e, 0x60, 0xc3,
+			0xfb, 0xb5, 0x4f, 0x45, 0x68, 0x35, 0x37, 0x5c,
+			0x8b, 0x4b, 0x73, 0x92, 0x1b, 0x14, 0x18, 0x6e,
+			0x51, 0x6b, 0x60, 0x6e, 0x66, 0x5e, 0x45, 0x61,
+			0xf9, 0x56, 0x2f, 0x12, 0xb1, 0x14, 0x0e, 0x42,
+			0xc9, 0xed, 0x53, 0x5c, 0x7c, 0x7a, 0x84, 0xb5,
+			0x6e, 0xff, 0xda, 0xc3, 0xc5, 0x1e, 0x32, 0x67,
+			0x1c, 0x40, 0xdc, 0xc4, 0x7b, 0x9e, 0xac, 0x82,
+			0xe3, 0x22, 0xcb, 0x62, 0x3b, 0xb2, 0x3f, 0xcc,
+			0xc7, 0x29, 0xa4, 0xcc, 0x59, 0x9b, 0xff, 0x74,
+			0x1c, 0x15, 0xd4, 0xd6, 0xc4, 0x8a, 0x4f, 0x04,
+			0xa6, 0xd8, 0x87, 0x6a, 0x37, 0x9c, 0x4f, 0x6d,
+			0xde, 0x39, 0x56, 0xa2, 0x00, 0x19, 0x10, 0x8d,
+			0x3b, 0xa6, 0x79, 0x7a, 0xa0, 0x1b, 0x68, 0x0e,
+			0xff, 0x22, 0x53, 0x48, 0x0a, 0xae, 0x97, 0x17,
+			0x40, 0x13, 0x2d, 0xe1, 0x2e, 0xba, 0x56, 0xd4,
+			0xd7, 0x13, 0xf7, 0x96, 0xdc, 0x29, 0x9a, 0x3b,
+			0x9f, 0x07, 0xf4, 0xe0, 0x4e, 0x9b, 0x1d, 0x6f,
+			0xf7, 0xfd, 0x3a, 0x30, 0xbe, 0xc5, 0x25, 0xb4,
+			0xbc, 0x54, 0xb4, 0x3e, 0xc9, 0x6b, 0xdc, 0x67,
+			0xa4, 0x47, 0xa7, 0xef, 0xad, 0xe7, 0x94, 0x43,
+			0x0e, 0x80, 0xd8, 0xab, 0xee, 0x76, 0x09, 0xc2,
+			0x28, 0x37, 0x63, 0x74, 0x5f, 0xf9, 0x97, 0x54,
+			0xcb, 0x78, 0xbb, 0x6c, 0xc5, 0xdc, 0x7d, 0x45,
+			0x08, 0x25, 0x24, 0xc3, 0xe7, 0x72, 0xc1, 0x6b,
+			0x3d, 0xe5, 0x0f, 0x5d, 0x08, 0x20, 0x7e, 0xa0,
+			0x53, 0x0b, 0x0d, 0x06, 0x0c, 0xed, 0x23, 0xbb,
+			0x39, 0x1a, 0x71, 0x2d, 0x4e, 0xbd, 0x6f, 0xb5,
+			0x44, 0x8d, 0x4b, 0x62, 0x82, 0x43, 0x42, 0x57,
+			0xd1, 0x98, 0x30, 0x16, 0x81, 0x5f, 0xa4, 0x07,
+			0x7e, 0x06, 0xc7, 0x51, 0xf6, 0xa4, 0x4a, 0x1c,
+			0x9d, 0xd7, 0x08, 0x43, 0xcd, 0x72, 0x07, 0xf9,
+			0xc6, 0x96, 0xde, 0x99, 0x6c, 0x9f, 0x0d, 0xb9,
+			0x7e, 0xc7, 0x30, 0x76, 0x26, 0xf7, 0x2c, 0xd9,
+			0x0e, 0xfd, 0xeb, 0x76, 0xea, 0x40, 0xfa, 0x10,
+			0x5f, 0x33, 0x19, 0x82, 0x8c, 0x1c, 0x8c, 0xf8,
+			0xc1, 0x81, 0x33, 0xba, 0xa5, 0x6b, 0xef, 0xb5,
+			0xbe, 0x70, 0xc3, 0x3a, 0xec, 0x7b, 0x7f, 0x44,
+			0xc1, 0x67, 0xf6, 0xd3, 0xa9, 0x6a, 0x7e, 0x52,
+			0x24, 0x9c, 0x9e, 0x80, 0xe1, 0xa9, 0x2f, 0x33,
+			0xfc, 0xd6, 0x1d, 0x20, 0xce, 0x0f, 0x9e, 0xe7,
+			0xdc, 0x10, 0xf7, 0x5c, 0x49, 0x43, 0x4a, 0x08,
+			0x49, 0x83, 0x57, 0x42, 0x4c, 0xce, 0x62, 0x0e,
+			0x66, 0xdd, 0x5d, 0x3f, 0xcb, 0xf6, 0x58, 0x62,
+			0xb9, 0x6c, 0xe3, 0xd3, 0xef, 0xaa, 0x79, 0x57,
+			0xe6, 0xcf, 0xdc, 0x5a, 0x12, 0x2d, 0xca, 0x15,
+			0xb7, 0xcd, 0x4b, 0x0e, 0x1f, 0xdd, 0x02, 0x8f,
+			0xfe, 0x25, 0xdd, 0xe1, 0xdc, 0xe3, 0x45, 0x88,
+			0x3f, 0x43, 0x36, 0x75, 0xaf, 0x2f, 0xed, 0x0a,
+			0x22, 0xc0, 0xfd, 0x1a, 0x06, 0x56, 0x26, 0xf7,
+			0x68, 0xd5, 0x12, 0x02, 0xea, 0xc5, 0x60, 0xef,
+			0x3f, 0x46, 0x8b, 0x3d, 0xb1, 0x40, 0x1d, 0xdc,
+			0xfd, 0x88, 0x83, 0x81, 0xec, 0xfd, 0xf5, 0x21,
+			0xa0, 0x1c, 0x53, 0xfc, 0x79, 0x1e, 0xc5, 0xbe,
+			0x6c, 0x18, 0x9d, 0x7e, 0x40, 0x9a, 0xeb, 0x1a,
+			0x04, 0x41, 0x5f, 0xd9, 0x63, 0xe8, 0x0c, 0x78,
+			0xda, 0xad, 0x0b, 0xbb, 0x91, 0x2f, 0x88, 0x04,
+			0xc3, 0xd5, 0x41, 0x5d, 0x2a, 0x36, 0x71, 0x66,
+			0x61, 0xa3, 0x05, 0xfb, 0xd2, 0xc3, 0x61, 0x05,
+			0x03, 0x64, 0xf0, 0xb8, 0xf2, 0x73, 0xc8, 0xde,
+			0x86, 0xca, 0xad, 0xa4, 0x8c, 0x2b, 0xf5, 0xd2,
+			0x3f, 0x84, 0x82, 0x07, 0xbc, 0x5d, 0x75, 0xb3,
+			0x37, 0xa3, 0x83, 0x99, 0x23, 0x61, 0x27, 0xbc,
+			0xa3, 0x5a, 0x22, 0x01, 0x14, 0x22, 0x88, 0x61,
+			0x7b, 0x42, 0x8f, 0x26, 0xb9, 0x99, 0xda, 0xdb,
+			0x9c, 0xec, 0x14, 0xe2, 0x96, 0x83, 0x66, 0xc7,
+			0xeb, 0x4b, 0xfb, 0xc2, 0x8a, 0x00, 0xf7, 0xac,
+			0x8c, 0x73, 0x1b, 0xc6, 0xd9, 0x6b, 0x6d, 0x37,
+			0x7a, 0x94, 0xf1, 0xeb, 0x1b, 0x52, 0x2e, 0xab,
+			0x8b, 0xfc, 0x77, 0x25, 0x8f, 0x21, 0x4a, 0x07,
+			0x7d, 0x99, 0xf4, 0x55, 0x22, 0xcc, 0x49, 0xdd,
+			0x26, 0x35, 0x15, 0xe7, 0x40, 0xac, 0xac, 0x8c,
+			0xd0, 0x58, 0x9d, 0xd4, 0x72, 0x10, 0x81, 0xc9,
+			0xc0, 0x46, 0x09, 0x2e, 0x12, 0xb9, 0x74, 0x1d,
+			0xa2, 0x80, 0xce, 0x9e, 0x04, 0x42, 0xf6, 0x55,
+			0xc1, 0xe9, 0xc5, 0xe4, 0x92, 0x56, 0xe0, 0xb8,
+			0x7d, 0x3d, 0x21, 0x39, 0x58, 0x05, 0x50, 0xfd,
+			0x54, 0xb8, 0x08, 0xe1, 0xc2, 0x32, 0xe2, 0x89,
+			0xee, 0x0e, 0x8a, 0x57, 0xb0, 0xe2, 0x29, 0x9f,
+			0x78, 0x0f, 0x56, 0x37, 0x5e, 0x34, 0x96, 0xdc,
+			0x6d, 0xde, 0xc0, 0xad, 0x27, 0xf9, 0xa2, 0x57,
+			0xec, 0xa9, 0x30, 0x9e, 0x8e, 0xf1, 0x5c, 0xc5,
+			0xfd, 0x20, 0x83, 0x28, 0x26, 0x2a, 0xbc, 0x22,
+			0x8d, 0x92, 0x65, 0xe2, 0xf7, 0x3d, 0x60, 0xe5,
+			0xeb, 0x44, 0x1c, 0xa0, 0xde, 0x04, 0x07, 0x19,
+			0x52, 0x60, 0xb1, 0x07, 0x34, 0x97, 0xec, 0x81,
+			0x25, 0x9f, 0x59, 0xe9, 0x67, 0x73, 0x5e, 0x40,
+			0xd3, 0xc9, 0x50, 0xa8, 0x6e, 0x2b, 0xff, 0x97,
+			0x40, 0x1d, 0xd0, 0x4b, 0xa4, 0x04, 0x39, 0x01,
+			0x13, 0xe3, 0x30, 0x85, 0x20, 0x0b, 0x76, 0xae,
+			0x40, 0x0f, 0x64, 0x0d, 0x60, 0xcc, 0x84, 0x8e,
+			0xf4, 0x86, 0xc3, 0x3d, 0x8f, 0x38, 0x94, 0xde,
+			0xfc, 0xfe, 0x58, 0xcd, 0x76, 0x67, 0x3d, 0xb0,
+			0xfb, 0x27, 0x4a, 0x1a, 0x8f, 0xe4, 0xad, 0xb7,
+			0x74, 0x81, 0x19, 0x98, 0x3d, 0xea, 0xe3, 0x63,
+			0x78, 0x44, 0xb9, 0x86, 0xcb, 0xe9, 0x79, 0xc6,
+			0x08, 0x55, 0xe4, 0xbf, 0xe7, 0xd3, 0xfb, 0x08,
+			0xd7, 0xfb, 0x96, 0x9a, 0x6b, 0xd1, 0xb4, 0xf3,
+			0x8a, 0xbb, 0xb4, 0xfd, 0x1b, 0x0f, 0x45, 0xf9,
+			0x40, 0xd8, 0x13, 0x68, 0xfa, 0xc4, 0x41, 0xb4,
+			0x3e, 0xe1, 0xbd, 0x7d, 0xfc, 0xa3, 0xb9, 0x7e,
+			0x79, 0x7f, 0x3b, 0x0c, 0xa6, 0x97, 0x80, 0x0b,
+			0x1d, 0x98, 0x80, 0x3f, 0xe4, 0x22, 0x3a, 0xf5,
+			0x48, 0x98, 0x93, 0x41, 0x75, 0x0e, 0x23, 0x11,
+			0xab, 0x39, 0x29, 0x11, 0xfc, 0x5a, 0x1f, 0xde,
+			0x1a, 0x61, 0xa7, 0xbc, 0x54, 0x9d, 0x02, 0xa3,
+			0xb8, 0xd9, 0xdd, 0xb0, 0x13, 0x0f, 0x45, 0x3e,
+			0x0b, 0x18, 0x1b, 0x2b, 0x4a, 0x8b, 0x25, 0x77,
+			0x8d, 0xdf, 0x9f, 0x41, 0xa7, 0xea, 0x09, 0xb4,
+			0x57, 0x11, 0xae, 0x36, 0x92, 0x13, 0x5a, 0xc1,
+			0x1a, 0xf2, 0xa4, 0x22, 0x6e, 0x02, 0x4b, 0xf9,
+			0xa5, 0xbe, 0xda, 0x56, 0x07, 0x4b, 0x5d, 0x39,
+			0xf1, 0x4e, 0xbc, 0xba, 0x03, 0x64, 0x6b, 0xa7,
+			0x51, 0x7e, 0x32, 0x05, 0xe8, 0x39, 0x0b, 0xfa,
+			0x7a, 0x7f, 0xb0, 0x51, 0xe7, 0x7c, 0xe0, 0xd9,
+			0x05, 0x36, 0x25, 0xef, 0xf2, 0xb7, 0x60, 0xec,
+			0x68, 0x25, 0xac, 0xd1, 0xb3, 0x0b, 0xc5, 0x9f,
+			0x73, 0xde, 0xb0, 0xb5, 0x03, 0x68, 0xfb, 0xd6,
+			0xc6, 0x41, 0xce, 0x9b, 0x8e, 0x41, 0x73, 0xa6,
+			0x72, 0x71, 0x5d, 0x15, 0xa6, 0x09, 0xbb, 0x78,
+			0xbd, 0x94, 0x52, 0x2e, 0x59, 0x46, 0x36, 0xbe,
+			0x58, 0x17, 0xa7, 0xbb, 0xbe, 0x95, 0xa4, 0xca,
+			0x25, 0x4f, 0x02, 0xed, 0x09, 0xc4, 0x5e, 0x0f,
+			0xf1, 0x64, 0xd1, 0x36, 0x7b, 0x5c, 0xd6, 0xe7,
+			0xc4, 0xcb, 0x62, 0x00, 0x67, 0xc7, 0x26, 0x4f,
+			0xf1, 0x85, 0x68, 0xef, 0xcc, 0xb3, 0xda, 0xc0,
+			0x70, 0xbf, 0xd6, 0x89, 0x24, 0x28, 0xbd, 0x52,
+			0xf7, 0x45, 0x68, 0xc6, 0x33, 0x5a, 0x35, 0x2c,
+			0xca, 0x3d, 0xac, 0xa3, 0x26, 0xb0, 0x5d, 0xf9,
+			0x15, 0x7b, 0xa7, 0xd4, 0xb6, 0xe4, 0xc9, 0x57,
+			0xdd, 0x04, 0x42, 0xd5, 0x61, 0x1b, 0xe8, 0x29,
+			0xd8, 0x36, 0xf3, 0x2c, 0x5b, 0x6e, 0xc5, 0x13,
+			0xf2, 0x39, 0x79, 0x01, 0x0f, 0xcf, 0x04, 0x4e,
+			0x62, 0x59, 0x40, 0xa9, 0x21, 0x37, 0xb9, 0x8d,
+			0x09, 0x17, 0x6e, 0x3f, 0x09, 0x03, 0xd5, 0x50,
+			0xb3, 0x14, 0x07, 0x1e, 0x38, 0x52, 0x42, 0xbd,
+			0x81, 0x8e, 0xf1, 0xe9, 0x43, 0xe3, 0xc9, 0xbf,
+			0x86, 0x1e, 0xac, 0xcb, 0xa0, 0xa1, 0x3c, 0x2f,
+			0x2b, 0xab, 0xe2, 0x95, 0x48, 0xfb, 0x62, 0xe0,
+			0x29, 0xae, 0x03, 0xaf, 0x67, 0x2e, 0x3c, 0xa8,
+			0xbf, 0xa2, 0xb7, 0x14, 0x79, 0x0d, 0x37, 0x7d,
+			0x0b, 0x95, 0x36, 0x98, 0x72, 0x12, 0x27, 0x60,
+			0xd8, 0x74, 0x66, 0xf2, 0x05, 0xe6, 0x32, 0x7c,
+			0x8c, 0x81, 0x7a, 0x15, 0x68, 0xf1, 0x46, 0x34,
+			0xcd, 0x3c, 0x46, 0x9c, 0xa9, 0x1b, 0x90, 0x17,
+			0xed, 0xd2, 0x2b, 0x85, 0xd9, 0xc4, 0x93, 0x0b,
+			0xa6, 0xb8, 0x60, 0x19, 0x84, 0x02, 0x13, 0xe2,
+			0x8f, 0x5e, 0xa7, 0x9c, 0x20, 0x90, 0x12, 0xda,
+			0xeb, 0x2c, 0xf7, 0x30, 0x29, 0x4b, 0xe6, 0x6d,
+			0xb0, 0xad, 0x9e, 0x1f, 0x92, 0xda, 0x2a, 0xa8,
+			0x3a, 0xa0, 0x10, 0xde, 0x63, 0x67, 0xb5, 0x08,
+			0xff, 0x70, 0xfc, 0xbb, 0x2b, 0x8c, 0x8a, 0xf6,
+			0xac, 0x53, 0x5e, 0xb5, 0x80, 0x23, 0x08, 0x37,
+			0x2b, 0x11, 0xb6, 0x19, 0xaa, 0xd4, 0x36, 0x12,
+			0xbc, 0xfa, 0x5d, 0x80, 0x0d, 0x6e, 0xbf, 0xb9,
+			0xf6, 0x9b, 0x09, 0xd7, 0x9f, 0xc2, 0x5a, 0xef,
+			0x11, 0xd7, 0x86, 0x6e, 0x76, 0xac, 0x08, 0xb1,
+			0x72, 0xb4, 0x3c, 0x60, 0x18, 0x67, 0xa5, 0x68,
+			0x94, 0xac, 0xcf, 0xb2, 0xe6, 0x2d, 0xd6, 0x40,
+			0x8b, 0x1f, 0xc0, 0x47, 0xb8, 0x59, 0x35, 0xdf,
+			0x2d, 0x7c, 0xfc, 0x36, 0x1a, 0xbe, 0x4e, 0xb9,
+			0x6e, 0x86, 0xff, 0x45, 0xc1, 0xcf, 0x67, 0xd2,
+			0xf6, 0x0d, 0x8c, 0x25, 0xc7, 0x3d, 0xee, 0x90,
+			0x07, 0xd8, 0x16, 0x6a, 0xa5, 0xac, 0x1a, 0x58,
+			0xb2, 0xe2, 0x9f, 0x2a, 0x23, 0x66, 0x45, 0xbf,
+			0x1b, 0x2d, 0xed, 0x7a, 0x48, 0x7b, 0x79, 0x54,
+			0x6b, 0xca, 0xe8, 0x17, 0xca, 0x73, 0x55, 0x12,
+			0x0d, 0x37, 0x82, 0xa5, 0x81, 0x65, 0x74, 0x20,
+			0xbe, 0x8e, 0xdd, 0x02, 0x7b, 0x85, 0x4d, 0x5a,
+			0xaa, 0xcc, 0x69, 0xc0, 0x77, 0xb3, 0x34, 0xaf,
+			0x25, 0xab, 0x68, 0xf4, 0x76, 0x8f, 0xf9, 0x33,
+			0x5b, 0x97, 0xd7, 0x2c, 0x60, 0xed, 0xff, 0x49,
+			0xf0, 0xf4, 0xb3, 0x98, 0x0d, 0x88, 0xd4, 0xd8,
+			0xaa, 0x09, 0x59, 0xcb, 0x3a, 0x29, 0x72, 0x60,
+			0x88, 0xe0, 0xd0, 0xd2, 0x03, 0xb5, 0x05, 0xf5,
+			0x1b, 0xa6, 0xc3, 0x02, 0x0a, 0x5c, 0xe2, 0xc1,
+			0xf8, 0x73, 0x22, 0x01, 0x8c, 0x70, 0x1b, 0x9a,
+			0xdb, 0xda, 0x66, 0x64, 0xf2, 0xd1, 0x76, 0xef,
+			0xa4, 0x5b, 0xef, 0xc3, 0x78, 0x0e, 0x83, 0x03,
+			0x23, 0xc4, 0x3d, 0xa3, 0xaf, 0xd4, 0x7e, 0x39,
+			0xf6, 0x30, 0xf5, 0x5c, 0x6d, 0x6b, 0xaa, 0xc8,
+			0x4f, 0xe8, 0xc4, 0xfc, 0xe4, 0x8f, 0xa2, 0x87,
+			0x3c, 0x2b, 0x13, 0x3f, 0xe4, 0x0a, 0xf7, 0x90,
+			0x47, 0x1e, 0x78, 0x58, 0x69, 0x9e, 0x93, 0xa4,
+			0xb0, 0x33, 0x86, 0x3b, 0x0b, 0x4f, 0xaa, 0xb5,
+			0x09, 0xff, 0xa3, 0x25, 0x24, 0x60, 0xed, 0x23,
+			0xa5, 0x63, 0x27, 0x44, 0xf9, 0x82, 0xbd, 0x7b,
+			0x84, 0x1d, 0x50, 0xf4, 0x84, 0xcb, 0x90, 0x45,
+			0xb2, 0x35, 0x30, 0x2a, 0x41, 0x9e, 0x19, 0xc7,
+			0xbe, 0x70, 0x9a, 0xff, 0x94, 0x1d, 0xaf, 0x7f,
+			0xa5, 0x41, 0x85, 0x7a, 0x5b, 0x78, 0x98, 0x0c,
+			0xa6, 0x39, 0x3b, 0xb9, 0xa5, 0xfe, 0xca, 0xd2,
+			0x21, 0x8b, 0x84, 0xc1, 0x2e, 0xa4, 0x0f, 0x59,
+			0x84, 0x51, 0x16, 0xb5, 0xef, 0x62, 0x3f, 0x78,
+			0xc0, 0x7e, 0x2d, 0x5f, 0xd1, 0x88, 0x89, 0x05,
+			0xda, 0xdf, 0x73, 0x1a, 0x04, 0xa1, 0x1b, 0xa4,
+			0x04, 0x29, 0xdf, 0x00, 0x44, 0x02, 0xa9, 0xd6,
+			0x0b, 0x4a, 0x52, 0x65, 0x99, 0x1e, 0x1a, 0x6c,
+			0xc1, 0xc1, 0xb0, 0x36, 0x07, 0x61, 0x92, 0xc2,
+			0x22, 0x12, 0x5a, 0x09, 0x36, 0x66, 0x07, 0xe2,
+			0x6c, 0x84, 0xd4, 0xf3, 0x72, 0x07, 0xf1, 0x49,
+			0x48, 0x20, 0xe3, 0x8d, 0x8b, 0x56, 0xf1, 0xf5,
+			0x9e, 0x93, 0x93, 0x48, 0x42, 0xa3, 0xf9, 0x95,
+			0x6d, 0x9a, 0xd8, 0x1c, 0x06, 0x05, 0x93, 0x4f,
+			0x89, 0x51, 0x1f, 0x41, 0xd8, 0xed, 0x6d, 0x59,
+			0x1c, 0x43, 0x0f, 0x34, 0x78, 0xaf, 0x9b, 0x78,
+			0xe9, 0x48, 0x4f, 0x7f, 0x0d, 0x57, 0x3b, 0x2b,
+			0x47, 0xab, 0x1d, 0xb0, 0xaa, 0x41, 0xbe, 0xd2,
+			0x52, 0x28, 0x27, 0x27, 0xf7, 0xc3, 0x6d, 0x88,
+			0xcd, 0x28, 0x2b, 0x50, 0xa0, 0xc4, 0x1b, 0x47,
+			0xb9, 0x57, 0x7f, 0xec, 0xda, 0x6a, 0xe2, 0xaa,
+			0x39, 0xde, 0x3d, 0x90, 0x04, 0x00, 0x41, 0xd9,
+			0x69, 0xe8, 0x4e, 0x60, 0x56, 0xb5, 0xd8, 0x80,
+			0xf2, 0x32, 0x8c, 0xe0, 0x01, 0x99, 0x2e, 0x4c,
+			0xc0, 0x4f, 0xe0, 0x2c, 0x4a, 0xc7, 0x76, 0xb7,
+			0xbb, 0xa6, 0x5a, 0x69, 0x83, 0x2d, 0xa3, 0xb0,
+			0x01, 0x09, 0xd3, 0x6b, 0x19, 0xb0, 0x41, 0x57,
+			0x4f, 0x2e, 0x14, 0x18, 0xc9, 0xfc, 0x08, 0xd8,
+			0x3c, 0x85, 0xfe, 0x8f, 0xd6, 0xc3, 0x93, 0x6f,
+			0xe0, 0xc1, 0x13, 0x7f, 0x36, 0xc8, 0x0a, 0x58,
+			0x1d, 0x32, 0x72, 0x45, 0xa9, 0x0d, 0xc2, 0x3c,
+			0xc7, 0xa5, 0x3f, 0xf6, 0x1a, 0xd0, 0x35, 0x9e,
+			0x47, 0x85, 0x7c, 0x8c, 0x5c, 0x38, 0xce, 0x9d,
+			0xd5, 0x68, 0xbd, 0x6f, 0x2e, 0x9a, 0xf9, 0x0d,
+			0x51, 0xa3, 0x7e, 0x42, 0x3c, 0x95, 0x4e, 0x19,
+			0xe8, 0x57, 0xd3, 0x29, 0xb8, 0x5c, 0x7b, 0x6b,
+			0x64, 0xb8, 0xa6, 0x9d, 0x7f, 0x95, 0xde, 0x09,
+			0xd1, 0x84, 0x7f, 0x86, 0xe5, 0xfa, 0xb5, 0x66,
+			0x6c, 0x52, 0x9f, 0x59, 0xe5, 0x29, 0x6d, 0x58,
+			0x52, 0x59, 0x2c, 0x2c, 0x10, 0x59, 0xb9, 0x1f,
+			0x92, 0x4e, 0x9e, 0xc2, 0xf7, 0xc5, 0x53, 0xb7,
+			0x4f, 0x48, 0xfa, 0x4e, 0xea, 0x73, 0x93, 0x55,
+			0x97, 0x26, 0x3f, 0xd0, 0xf7, 0x9e, 0x1f, 0xad,
+			0xfb, 0x57, 0x7b, 0x1f, 0x12, 0xcd, 0x81, 0xe1,
+			0x0e, 0x5b, 0x7d, 0xda, 0x97, 0xbd, 0x2a, 0xa3,
+			0x1c, 0xed, 0xc1, 0x83, 0x84, 0x92, 0x09, 0x17,
+			0x14, 0x8c, 0x49, 0xd1, 0x8d, 0x98, 0xf9, 0xdb,
+			0x9d, 0xbf, 0x07, 0x64, 0x12, 0xfa, 0x46, 0x9e,
+			0x22, 0x3a, 0x2d, 0x9a, 0xda, 0xf1, 0x99, 0xb6,
+			0xbf, 0x1e, 0x79, 0x91, 0x2b, 0x2b, 0x86, 0x2d,
+			0xbe, 0x67, 0xb0, 0x0a, 0x46, 0x32, 0xbf, 0x24,
+			0xeb, 0xa7, 0xf0, 0x57, 0x75, 0xa6, 0xf6, 0x3b,
+			0x75, 0x5d, 0x6c, 0x72, 0x0e, 0x70, 0x9c, 0x85,
+			0x6e, 0x26, 0xaa, 0x7d, 0xb8, 0x4d, 0xf5, 0xb4,
+			0x74, 0xb9, 0x05, 0xcc, 0xcb, 0xa6, 0xef, 0x15,
+			0x75, 0x30, 0xab, 0xc9, 0xab, 0x20, 0xc7, 0x58,
+			0xbe, 0x20, 0x0d, 0x5e, 0xaa, 0x37, 0x9c, 0xc8,
+			0x22, 0x39, 0x7b, 0x80, 0xb3, 0xbd, 0xd8, 0x18,
+			0x62, 0x10, 0xd9, 0xa7, 0x1f, 0xee, 0x8e, 0x8b,
+			0x90, 0x52, 0x1f, 0xa3, 0xe0, 0x07, 0xc2, 0x81,
+			0xeb, 0x68, 0x74, 0x6d, 0xef, 0xf8, 0xb4, 0xbb,
+			0xbf, 0x08, 0xe8, 0x8b, 0x21, 0x00, 0xa7, 0x53,
+			0x2b, 0xd6, 0x95, 0x45, 0xb0, 0xb2, 0x3b, 0x08,
+			0xe2, 0x49, 0xf6, 0xb2, 0xae, 0xc1, 0xf6, 0x19,
+			0xd1, 0x0a, 0xf0, 0x73, 0xbd, 0x01, 0x89, 0xd0,
+			0x68, 0xc2, 0xbb, 0xdb, 0x67, 0x6c, 0x8c, 0xe5,
+			0x9f, 0x09, 0xff, 0x80, 0x74, 0x61, 0xe7, 0xa9,
+			0x1a, 0xbe, 0xca, 0x0b, 0x2a, 0x1d, 0x6a, 0x6c,
+			0x04, 0xa0, 0x61, 0x40, 0x70, 0x85, 0x2f, 0x24,
+			0x72, 0xec, 0x1a, 0x4b, 0xa0, 0x35, 0x95, 0x06,
+			0xa9, 0x7c, 0x1f, 0x90, 0x77, 0xd5, 0xb6, 0xdd,
+			0x7f, 0x41, 0x0f, 0xcd, 0x82, 0xd0, 0x19, 0xc4,
+			0x7e, 0x89, 0xd6, 0x33, 0x8a, 0x68, 0x9d, 0x44,
+			0x74, 0x2e, 0x6a, 0x84, 0xb4, 0xe4, 0x86, 0x35,
+			0xd9, 0x19, 0x21, 0x44, 0x57, 0x80, 0x20, 0xb0,
+			0xf0, 0xdb, 0xcd, 0xe7, 0x50, 0x17, 0x0c, 0x00,
+			0x79, 0x28, 0xb6, 0xe0, 0xfa, 0x94, 0xc2, 0x96,
+			0x8d, 0xf9, 0xc4, 0x8c, 0x02, 0xb9, 0x4a, 0x6f,
+			0xa4, 0x57, 0x73, 0x91, 0x1b, 0x31, 0x29, 0xfc,
+			0x7d, 0x53, 0x61, 0x01, 0x95, 0xd8, 0x5c, 0xa6,
+			0x1f, 0xc4, 0x72, 0xf5, 0xd2, 0x98, 0xc6, 0xa9,
+			0x50, 0x2a, 0x40, 0x01, 0xe4, 0xb0, 0x0a, 0x4c,
+			0x38, 0x2c, 0x3a, 0xdc, 0x2a, 0x4e, 0x23, 0x69,
+			0x55, 0x1a, 0x21, 0xcd, 0x14, 0xae, 0x22, 0xe9,
+			0x42, 0x31, 0xa3, 0x0a, 0x73, 0x77, 0x8e, 0x80,
+			0x56, 0xc0, 0x9e, 0xc2, 0xca, 0xb2, 0x0f, 0xb5,
+			0x1e, 0x3a, 0x96, 0xf5, 0x32, 0xc5, 0x46, 0xd1,
+			0x02, 0x96, 0x50, 0x9c, 0x2a, 0xd4, 0xef, 0x06,
+			0x04, 0xc2, 0x61, 0xf6, 0xb8, 0x41, 0x08, 0x74,
+			0x04, 0xbc, 0x4e, 0x18, 0xc8, 0x72, 0x18, 0xc2,
+			0xc8, 0xbe, 0xde, 0x52, 0x7d, 0xc0, 0x83, 0xc0,
+			0x9b, 0xe2, 0xd8, 0xbd, 0x38, 0x38, 0xd9, 0xa3,
+			0xa9, 0x5c, 0x6e, 0xba, 0x38, 0xe6, 0x4e, 0xea,
+			0x7c, 0xb1, 0x10, 0x59, 0x41, 0x9e, 0x64, 0xd9,
+			0x41, 0x01, 0xbc, 0x94, 0x77, 0x0b, 0x12, 0x1e,
+			0xbf, 0x92, 0x98, 0xbc, 0xe9, 0x8b, 0xb0, 0x25,
+			0x1f, 0xb5, 0xe0, 0xcb, 0x7d, 0xd2, 0x15, 0xa3,
+			0x0e, 0x67, 0x50, 0x30, 0x80, 0xe2, 0x83, 0xe2,
+			0x5f, 0xe8, 0xa8, 0x44, 0x84, 0x89, 0x30, 0x2c,
+			0x66, 0x26, 0x7e, 0x22, 0xba, 0xfa, 0xa5, 0xd0,
+			0x15, 0x82, 0x9d, 0x2c, 0x23, 0x49, 0x79, 0x22,
+			0x91, 0x94, 0xc0, 0x73, 0xe8, 0xf8, 0x05, 0x26,
+			0x8c, 0x5c, 0xc4, 0xf0, 0xae, 0x88, 0x53, 0xce,
+			0x5d, 0x7b, 0xaf, 0x39, 0x07, 0x33, 0x7a, 0x3d,
+			0x9b, 0xe3, 0x4a, 0x5a, 0xbe, 0xeb, 0xed, 0x0f,
+			0x3b, 0xfe, 0xe2, 0x44, 0x59, 0x52, 0xdc, 0xab,
+			0x76, 0xfa, 0x44, 0xb8, 0x8e, 0x63, 0x9c, 0x86,
+			0xeb, 0x9e, 0x3f, 0x36, 0x07, 0x49, 0xf5, 0x06,
+			0x70, 0xa2, 0x92, 0x24, 0xff, 0x82, 0x3b, 0xd2,
+			0x31, 0x37, 0x71, 0x66, 0xe4, 0x1d, 0x56, 0x6e,
+			0x55, 0x53, 0xb0, 0x7c, 0x5d, 0x16, 0xa6, 0xb3,
+			0x1d, 0x6f, 0x53, 0x8c, 0x79, 0x2e, 0xe2, 0xe8,
+			0xa5, 0x94, 0x41, 0x33, 0xaf, 0xc6, 0x5c, 0x10,
+			0xd9, 0x2f, 0xa7, 0xf0, 0xbe, 0xf1, 0xe5, 0x3b,
+			0x60, 0x72, 0x74, 0xc3, 0x26, 0x9b, 0x01, 0x6f,
+			0xa2, 0x67, 0xa4, 0xcf, 0x00, 0xb8, 0x31, 0xf5,
+			0xda, 0x6b, 0x69, 0x30, 0x4f, 0x39, 0x37, 0x2c,
+			0x90, 0xf3, 0x2e, 0xff, 0x49, 0x4b, 0xfd, 0x1b,
+			0xd6, 0xa1, 0xfe, 0xbd, 0x14, 0x2d, 0x8f, 0xad,
+			0x73, 0xb0, 0x43, 0xa1, 0x48, 0x85, 0xa0, 0xf0,
+			0x53, 0xcc, 0xd5, 0xf3, 0xe9, 0x58, 0xb2, 0xca,
+			0x53, 0x02, 0x0b, 0x44, 0x86, 0xec, 0xe2, 0x1e,
+			0xc8, 0xca, 0x07, 0x5b, 0x1d, 0xb4, 0x2f, 0x8e,
+			0xe4, 0xf4, 0x38, 0x5b, 0xb0, 0x0a, 0xb9, 0xa3,
+			0xe7, 0xe7, 0x05, 0x98, 0x5a, 0x56, 0x19, 0x59,
+			0x46, 0xd8, 0xa9, 0xd1, 0xd8, 0x45, 0x3c, 0xcb,
+			0x3f, 0xe4, 0xbf, 0x4f, 0x14, 0xfc, 0x88, 0x1d,
+			0xb7, 0x7b, 0xf4, 0x95, 0xb6, 0xcc, 0x79, 0xc3,
+			0x25, 0x9d, 0x7a, 0x95, 0x7a, 0xa2, 0xfb, 0xbf,
+			0xf2, 0x32, 0x3a, 0x7d, 0x18, 0x84, 0x8b, 0xc2,
+			0x1e, 0x9c, 0x86, 0x52, 0x70, 0xe4, 0x4d, 0x74,
+			0x4f, 0xe0, 0xa3, 0x0a, 0x2a, 0x31, 0x03, 0x47,
+			0x0d, 0x3c, 0xab, 0xb9, 0xc0, 0xf5, 0x09, 0x3d,
+			0x5e, 0x5f, 0x62, 0x7c, 0xc0, 0xd4, 0x1f, 0x26,
+			0x4b, 0x53, 0x5f, 0x63, 0x65, 0x7e, 0xb2, 0xba,
+			0xd6, 0x24, 0x60, 0xc8, 0xe8, 0xf7, 0xf9, 0x05,
+			0x34, 0xaf, 0xed, 0xef, 0xf9, 0x3f, 0x75, 0x7b,
+			0x99, 0xa0, 0xc7, 0xca, 0x40, 0x63, 0x67, 0x6c,
+			0x90, 0xa0, 0xb6, 0xe6, 0xed, 0xf1, 0x12, 0x73,
+			0x77, 0x8e, 0x97, 0xa5, 0xa7, 0xb1, 0xd1, 0xf3,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x06, 0x0e, 0x19, 0x1f, 0x25,
+			0x2c, 0x36, 0x40, },
+	}, {
+		.what = "pure rejection vector",
+		.algo = "ml-dsa87",
+		.pk_len = DILITHIUM87_PUBLICKEYBYTES,
+		.pk = (const u8[DILITHIUM87_PUBLICKEYBYTES]){
+			0x02, 0xc2, 0x08, 0xda, 0x0f, 0x0e, 0x0c, 0x49,
+			0x39, 0xab, 0x53, 0x31, 0x83, 0x2e, 0x41, 0x5d,
+			0xe4, 0x76, 0x31, 0x1e, 0x65, 0x71, 0xe5, 0xb6,
+			0x8d, 0xe8, 0xb3, 0xa5, 0xd9, 0x9e, 0xb7, 0x99,
+			0x1a, 0x3d, 0x3e, 0xa9, 0x54, 0xf8, 0xb3, 0x74,
+			0xe7, 0x01, 0x02, 0x4e, 0x23, 0xbf, 0x9b, 0xd3,
+			0x2a, 0x03, 0xd6, 0x1a, 0x96, 0x7f, 0xf8, 0xc2,
+			0xc5, 0x36, 0x3b, 0x4f, 0xe1, 0x96, 0x93, 0x59,
+			0x06, 0x28, 0x64, 0xce, 0x2e, 0x73, 0xad, 0xab,
+			0xf6, 0x57, 0xe1, 0x84, 0x1c, 0x7d, 0x7b, 0x9b,
+			0x70, 0x33, 0x12, 0x48, 0x04, 0xe6, 0x1c, 0x6b,
+			0x5b, 0x45, 0x37, 0xcd, 0x5f, 0x00, 0x2e, 0x21,
+			0xb9, 0xd5, 0x86, 0x2d, 0x3e, 0x50, 0x30, 0x42,
+			0x2b, 0x13, 0xf8, 0x7b, 0x81, 0x6c, 0x4e, 0xe6,
+			0x17, 0xa3, 0x5e, 0xa8, 0x34, 0x53, 0x64, 0x15,
+			0xf3, 0xb6, 0xf5, 0x90, 0x8f, 0xa6, 0x23, 0x7f,
+			0x88, 0x71, 0xea, 0x25, 0x0a, 0x17, 0xc9, 0xd1,
+			0x34, 0x2c, 0xb4, 0xc5, 0x14, 0xa4, 0x03, 0xe1,
+			0x07, 0x01, 0xba, 0x22, 0x57, 0x97, 0xcd, 0x3b,
+			0xe0, 0xfc, 0xb1, 0xe5, 0xa4, 0x22, 0x72, 0xcb,
+			0x88, 0xb7, 0xaa, 0x84, 0x75, 0xae, 0x62, 0xff,
+			0x1a, 0x9f, 0x45, 0xd6, 0x2f, 0xd6, 0xad, 0x29,
+			0xa3, 0x4c, 0x9c, 0x7c, 0x55, 0xc5, 0xec, 0x4c,
+			0xc2, 0x7a, 0xad, 0x60, 0x65, 0x06, 0xfc, 0x7d,
+			0xf2, 0x67, 0xce, 0xf8, 0x11, 0xea, 0xbf, 0xd8,
+			0x84, 0x94, 0xf2, 0x13, 0xa2, 0xa8, 0x39, 0xe1,
+			0x0d, 0x47, 0x94, 0x8b, 0x1d, 0x4b, 0x51, 0xd3,
+			0xf9, 0x2f, 0x91, 0x76, 0x20, 0x4e, 0x22, 0xf8,
+			0x81, 0xc4, 0xac, 0xf6, 0xf1, 0x2f, 0x38, 0x2a,
+			0x78, 0x00, 0xa8, 0xbb, 0x9e, 0xfa, 0xa8, 0x1c,
+			0xaa, 0xc4, 0x7e, 0x6e, 0x30, 0xcc, 0x79, 0x17,
+			0xc6, 0x4e, 0x85, 0x9a, 0x96, 0x13, 0xef, 0x85,
+			0x7d, 0x7a, 0x91, 0x61, 0xfa, 0x8b, 0x8b, 0xdb,
+			0x85, 0x22, 0x69, 0x4a, 0x64, 0x36, 0x12, 0xc1,
+			0x9e, 0x13, 0x8e, 0x63, 0xaf, 0x35, 0xf4, 0xc8,
+			0x11, 0x9a, 0x77, 0xfa, 0x52, 0xe3, 0x63, 0x8a,
+			0xdc, 0x62, 0x91, 0xcd, 0xe1, 0x13, 0xe3, 0x4d,
+			0x9d, 0xfc, 0xd1, 0xb1, 0x42, 0xbb, 0x67, 0xcd,
+			0x2c, 0xc8, 0xb3, 0x14, 0x36, 0x95, 0xba, 0x7e,
+			0xbb, 0x84, 0xa0, 0x34, 0x8b, 0x63, 0x5f, 0x8e,
+			0x55, 0xb8, 0xde, 0x9f, 0x09, 0x7b, 0x43, 0x61,
+			0xac, 0x7d, 0x99, 0xa6, 0xc5, 0x2d, 0xb1, 0x2d,
+			0x37, 0xde, 0x54, 0x9a, 0x46, 0x70, 0x2f, 0xc0,
+			0xdf, 0xb8, 0x2b, 0x9c, 0xbe, 0x91, 0x77, 0x10,
+			0xb4, 0xb9, 0x75, 0xe4, 0xe2, 0xb3, 0x70, 0x09,
+			0x5c, 0x34, 0x14, 0x69, 0x9c, 0x00, 0xcf, 0x47,
+			0x4a, 0x2d, 0xf1, 0x14, 0xdb, 0xc1, 0xca, 0xf6,
+			0xcd, 0x8f, 0x2e, 0x03, 0xfc, 0x36, 0xa4, 0x5b,
+			0x11, 0x95, 0x5f, 0x42, 0x77, 0xf9, 0x03, 0x7c,
+			0xe8, 0x2f, 0x99, 0xd7, 0x59, 0x75, 0x62, 0xb1,
+			0x70, 0x01, 0x8d, 0x11, 0x32, 0xe3, 0xbb, 0xad,
+			0x0d, 0x97, 0x0f, 0x1a, 0xe0, 0x36, 0x6b, 0x0c,
+			0x2e, 0xf9, 0x47, 0xfa, 0xb6, 0xae, 0x65, 0x07,
+			0x1e, 0xf6, 0x8a, 0x89, 0x54, 0xbe, 0xa8, 0x98,
+			0xce, 0x08, 0xf2, 0xe5, 0xbf, 0x86, 0xed, 0x35,
+			0x8b, 0xc0, 0x6b, 0x75, 0x06, 0x1f, 0x4a, 0xb1,
+			0x21, 0x95, 0xf3, 0x61, 0xcf, 0x4e, 0x64, 0xab,
+			0x61, 0x34, 0xf4, 0x54, 0x4c, 0xe1, 0x60, 0x8a,
+			0xba, 0x2b, 0x71, 0x7c, 0xf5, 0xe2, 0x38, 0xfa,
+			0x75, 0xad, 0x09, 0x43, 0x45, 0x0d, 0x0d, 0x1b,
+			0x24, 0xe0, 0x92, 0xe8, 0xdf, 0xcd, 0xe6, 0x98,
+			0xde, 0x4b, 0xc1, 0xda, 0x7b, 0x91, 0xc8, 0x80,
+			0x0f, 0xe6, 0xee, 0xeb, 0x77, 0x21, 0xe7, 0xb3,
+			0x7c, 0x30, 0xaa, 0xb0, 0x49, 0xfe, 0x43, 0x40,
+			0xbd, 0x62, 0x24, 0xb3, 0x96, 0xaa, 0x3c, 0x5a,
+			0x3e, 0x7d, 0x5f, 0xc6, 0x7d, 0x5b, 0x09, 0xf0,
+			0x92, 0xdf, 0x07, 0x00, 0xb8, 0xac, 0x46, 0x8f,
+			0x87, 0x5b, 0x18, 0x93, 0x6c, 0x59, 0xf7, 0xdf,
+			0x6a, 0xa3, 0x7a, 0xf6, 0xcb, 0x75, 0x85, 0xee,
+			0x0e, 0x86, 0xd6, 0xb4, 0x0a, 0xa3, 0x29, 0xc9,
+			0x8b, 0x94, 0xc9, 0xa2, 0x6d, 0xbe, 0x4e, 0xd7,
+			0xf9, 0x6e, 0xff, 0xde, 0x01, 0x63, 0x3f, 0x4d,
+			0xd0, 0x4b, 0xb5, 0x8a, 0xfb, 0x8f, 0x9e, 0xd3,
+			0x6d, 0xba, 0x3c, 0x5c, 0x24, 0xae, 0xb1, 0x8e,
+			0x54, 0xfc, 0x3f, 0x62, 0xf3, 0x0e, 0xf7, 0x7b,
+			0x74, 0xc8, 0x4a, 0x88, 0x0a, 0xc1, 0x2f, 0x94,
+			0x6b, 0x30, 0xdd, 0xeb, 0x9f, 0xd6, 0x9c, 0x6d,
+			0x09, 0xf3, 0x78, 0x35, 0x85, 0x24, 0xf2, 0x9f,
+			0xf3, 0xf3, 0x26, 0xc2, 0x18, 0x82, 0x4d, 0xe7,
+			0x78, 0xad, 0x9e, 0x3e, 0x3a, 0xe1, 0xab, 0xe6,
+			0x35, 0x53, 0x8f, 0x1a, 0xf8, 0x07, 0xb6, 0x70,
+			0x9c, 0xd4, 0x2b, 0x36, 0xd4, 0xbd, 0xde, 0xae,
+			0x12, 0x79, 0x1b, 0x25, 0x56, 0x14, 0xea, 0x6e,
+			0x9f, 0x2e, 0xc6, 0xc6, 0xeb, 0xc3, 0x20, 0xc4,
+			0x44, 0x34, 0xda, 0x0a, 0x3f, 0x36, 0x78, 0xdd,
+			0x9f, 0xef, 0xc6, 0x18, 0x34, 0x6d, 0x4f, 0xa3,
+			0x86, 0x26, 0xdb, 0x97, 0x2f, 0x85, 0xee, 0xe1,
+			0x4d, 0xfa, 0xbd, 0x50, 0xc7, 0x5d, 0x2a, 0xaf,
+			0x59, 0x38, 0xca, 0xea, 0xfb, 0x11, 0x50, 0xcb,
+			0x71, 0x8a, 0x4e, 0xcc, 0xe9, 0x5e, 0x2d, 0xf4,
+			0x06, 0xe7, 0x9f, 0x2f, 0xcb, 0xea, 0x49, 0x8a,
+			0x67, 0x9d, 0x07, 0x35, 0xfc, 0x5a, 0x34, 0x73,
+			0xd7, 0x79, 0x3c, 0x93, 0x24, 0xf7, 0x2c, 0x2a,
+			0xe0, 0x23, 0x2c, 0x39, 0x66, 0x8e, 0x17, 0x36,
+			0x29, 0xef, 0xcb, 0xfc, 0x1c, 0xba, 0x25, 0xa3,
+			0xeb, 0x18, 0x25, 0xaa, 0x28, 0x85, 0x51, 0xab,
+			0x83, 0x5f, 0xe3, 0x49, 0x8a, 0xf4, 0x35, 0x81,
+			0x34, 0xd0, 0x03, 0xc8, 0x8c, 0x3e, 0xc3, 0x4c,
+			0x9c, 0xcd, 0x61, 0xfe, 0x1f, 0xf4, 0x69, 0xa1,
+			0x84, 0x27, 0x66, 0x37, 0xf0, 0x50, 0xad, 0x2e,
+			0xcd, 0xa4, 0xe7, 0xf8, 0x8c, 0xc0, 0xcf, 0x45,
+			0xed, 0x91, 0x55, 0xa0, 0x01, 0x88, 0x93, 0xd8,
+			0x28, 0x16, 0x3f, 0x46, 0x1e, 0x06, 0x32, 0x3d,
+			0x0b, 0x71, 0xc2, 0x4b, 0x79, 0xd2, 0x5e, 0xfa,
+			0xea, 0x1c, 0xa9, 0xcd, 0xfe, 0x1e, 0x18, 0x68,
+			0x44, 0x17, 0x02, 0xea, 0x8b, 0xaf, 0xd6, 0xfe,
+			0xb0, 0x67, 0xdb, 0x9f, 0x64, 0x04, 0x29, 0x58,
+			0xd7, 0x74, 0x40, 0x4d, 0x29, 0xee, 0x72, 0x1c,
+			0x11, 0xe9, 0x66, 0x44, 0x49, 0x6c, 0x26, 0x4d,
+			0x0b, 0xec, 0x26, 0x0a, 0x64, 0x89, 0x32, 0x48,
+			0xe4, 0x28, 0x35, 0x0e, 0x42, 0x6a, 0xf0, 0x6b,
+			0x6b, 0x84, 0x0a, 0x3d, 0xf7, 0x42, 0x81, 0x38,
+			0x0d, 0x77, 0x58, 0x6f, 0x41, 0x86, 0x13, 0x5e,
+			0x25, 0x95, 0x3d, 0xb8, 0x22, 0x9f, 0x25, 0xc8,
+			0x65, 0xf2, 0x72, 0x7c, 0xa0, 0xae, 0xa5, 0xfc,
+			0xcb, 0x91, 0x72, 0x5f, 0x04, 0x3a, 0xe1, 0x64,
+			0xea, 0x6c, 0x1b, 0x1d, 0xad, 0xfa, 0x63, 0xdd,
+			0x30, 0x8f, 0x98, 0xb8, 0x8f, 0x17, 0xaf, 0x38,
+			0x5a, 0x12, 0xaa, 0x3f, 0x7b, 0xf4, 0xc2, 0xa3,
+			0x9b, 0x74, 0xa1, 0x98, 0xf3, 0xb5, 0xb1, 0x50,
+			0x74, 0x36, 0x14, 0x6d, 0x9b, 0x8a, 0xae, 0xfe,
+			0xd9, 0x40, 0xf9, 0x59, 0x65, 0x57, 0x38, 0xe8,
+			0x1a, 0xa8, 0x7d, 0xfc, 0xac, 0xd1, 0xd7, 0x45,
+			0x2e, 0x40, 0xfa, 0xdc, 0x33, 0x61, 0x32, 0x30,
+			0x24, 0x20, 0x45, 0x44, 0xbb, 0x0b, 0x04, 0xb3,
+			0xf0, 0x07, 0x0a, 0x4c, 0x27, 0xf6, 0xdb, 0x6d,
+			0x5d, 0x5e, 0x07, 0x1e, 0x52, 0x19, 0x8a, 0x40,
+			0x01, 0x3b, 0xeb, 0x68, 0x90, 0x13, 0xc3, 0x4a,
+			0x7a, 0xe3, 0xb9, 0x3a, 0xd7, 0x19, 0x8d, 0xbb,
+			0xcd, 0x09, 0x10, 0xc7, 0x16, 0x3f, 0x0a, 0xf8,
+			0xdd, 0x32, 0x84, 0x40, 0x0e, 0xe7, 0xc5, 0xf7,
+			0x7e, 0x00, 0x1a, 0xb1, 0x62, 0xa5, 0xcf, 0x2f,
+			0xf8, 0xf2, 0x99, 0x17, 0xd7, 0x4e, 0x76, 0xe0,
+			0x07, 0xe7, 0xd4, 0xc0, 0x50, 0xf8, 0xfb, 0xb9,
+			0xce, 0x1d, 0x3c, 0x6b, 0xbd, 0x4d, 0xc5, 0xfc,
+			0xc9, 0xc0, 0x46, 0xb4, 0xbe, 0x70, 0x9c, 0x5e,
+			0x26, 0xdb, 0x91, 0x75, 0xd1, 0x6d, 0x87, 0x3c,
+			0x97, 0xac, 0x44, 0xac, 0x7b, 0x5a, 0x57, 0xca,
+			0x3d, 0x28, 0x77, 0x51, 0x99, 0x0f, 0x2e, 0x63,
+			0x87, 0x35, 0xed, 0x72, 0x3c, 0x66, 0x01, 0x1e,
+			0xf2, 0x09, 0xc0, 0xa7, 0xf9, 0xe8, 0x63, 0x8a,
+			0x69, 0x4e, 0x39, 0x5e, 0xdd, 0x39, 0x5f, 0x5b,
+			0x82, 0xc9, 0xc4, 0x90, 0x79, 0x76, 0x75, 0x73,
+			0x6e, 0x5e, 0xbc, 0x1a, 0xa5, 0xae, 0x62, 0xd2,
+			0x1b, 0x7d, 0xe0, 0x16, 0xe2, 0x9c, 0x75, 0xc2,
+			0x9c, 0x38, 0x08, 0x5b, 0xe5, 0x41, 0x59, 0x8e,
+			0x6d, 0xd9, 0x0c, 0x32, 0x5e, 0x84, 0x63, 0xb0,
+			0x5e, 0xad, 0x81, 0x7a, 0x4e, 0xfc, 0xcc, 0xfd,
+			0x71, 0x05, 0x91, 0x06, 0x73, 0x34, 0xee, 0xc2,
+			0xba, 0xbb, 0x84, 0x8a, 0x9c, 0xf4, 0x95, 0xc7,
+			0xee, 0x3c, 0xd4, 0xc0, 0xbf, 0x7a, 0x5d, 0x73,
+			0x64, 0x9b, 0xff, 0x6a, 0x51, 0x4b, 0xe4, 0x85,
+			0xbf, 0x77, 0x5e, 0xc0, 0x32, 0x57, 0x3f, 0x0f,
+			0xe3, 0xbc, 0xf2, 0xcf, 0x36, 0x86, 0x85, 0xd4,
+			0x01, 0xd2, 0x99, 0xf7, 0x23, 0xe9, 0x25, 0xa4,
+			0x54, 0x2c, 0xf6, 0x12, 0x97, 0xc3, 0x1b, 0xc4,
+			0x55, 0xc4, 0x59, 0xb7, 0x3b, 0x5d, 0xa0, 0x88,
+			0xa6, 0x80, 0xf7, 0x7f, 0x92, 0x06, 0xd3, 0x47,
+			0x35, 0x7c, 0xbb, 0xf5, 0x0a, 0x01, 0xc9, 0x5a,
+			0xdd, 0x8d, 0x31, 0x2e, 0xe5, 0xcf, 0x09, 0x93,
+			0x76, 0x9c, 0x55, 0xc7, 0xe0, 0x4f, 0xef, 0x4d,
+			0x53, 0x63, 0x5d, 0x4f, 0x2d, 0x00, 0x5a, 0x40,
+			0x83, 0xc4, 0x61, 0xb5, 0x62, 0x5f, 0x95, 0x22,
+			0x02, 0xc9, 0x34, 0xa1, 0x3b, 0xf7, 0x5e, 0x9a,
+			0xbc, 0xaf, 0xba, 0xa1, 0x3b, 0xe1, 0x15, 0x9d,
+			0x29, 0xa9, 0xd5, 0x16, 0x9e, 0x96, 0x1a, 0x4e,
+			0x2a, 0xe0, 0x30, 0x88, 0x56, 0x62, 0x9a, 0x89,
+			0x49, 0x6b, 0x54, 0x02, 0x8d, 0x59, 0x87, 0xc6,
+			0x8b, 0x08, 0xc9, 0xfd, 0x0e, 0x35, 0x64, 0x8f,
+			0xc7, 0x78, 0xde, 0x3b, 0x7f, 0x8a, 0x43, 0xa1,
+			0x18, 0xbc, 0x56, 0xec, 0xab, 0x4e, 0x35, 0x50,
+			0x1f, 0x22, 0x3e, 0xd1, 0x78, 0x07, 0x3d, 0x9e,
+			0xb3, 0xa0, 0x06, 0x7e, 0x59, 0xd7, 0x7f, 0xd6,
+			0xf6, 0xe9, 0xf6, 0x15, 0x9f, 0xf8, 0x51, 0xfb,
+			0xe2, 0x16, 0x62, 0x36, 0xfb, 0xca, 0x9f, 0x36,
+			0x64, 0x6f, 0xba, 0x6b, 0x99, 0x68, 0x43, 0xe6,
+			0xd5, 0x53, 0x84, 0xfa, 0xa9, 0x27, 0x04, 0x5c,
+			0x66, 0x7a, 0x41, 0x63, 0x09, 0x95, 0x4e, 0xa3,
+			0xe6, 0xc9, 0x62, 0x47, 0x3e, 0xb3, 0x50, 0xdf,
+			0x8c, 0xee, 0xe0, 0xe9, 0x02, 0xd0, 0xf3, 0x14,
+			0xc1, 0x26, 0x18, 0xd8, 0xd2, 0xef, 0xa8, 0xac,
+			0x1b, 0x03, 0x49, 0x34, 0x67, 0x1d, 0xd8, 0xb4,
+			0xad, 0x98, 0xdd, 0xd9, 0x47, 0x26, 0x12, 0xd0,
+			0x3c, 0x47, 0x89, 0x09, 0x23, 0xc9, 0x7d, 0xba,
+			0xba, 0x48, 0x65, 0x44, 0xe6, 0x24, 0xcb, 0xb1,
+			0x60, 0x48, 0x44, 0x5c, 0xdb, 0x37, 0x95, 0x7f,
+			0x95, 0xf8, 0x41, 0x92, 0x91, 0x96, 0xd0, 0xf9,
+			0xef, 0x54, 0xdf, 0x88, 0x77, 0x58, 0x8e, 0xae,
+			0x33, 0xea, 0xa4, 0x39, 0x9f, 0x00, 0xf5, 0x6e,
+			0x4e, 0x50, 0x15, 0xe1, 0x9e, 0x09, 0xb7, 0x5d,
+			0xab, 0xb2, 0x4b, 0x00, 0xcc, 0x13, 0x10, 0x44,
+			0x0b, 0xb1, 0xb9, 0x3b, 0xed, 0x8d, 0x8c, 0x53,
+			0x22, 0x5b, 0x78, 0x91, 0xce, 0x0d, 0xa0, 0x85,
+			0x33, 0x5f, 0x93, 0x55, 0xc2, 0xf2, 0xec, 0xef,
+			0x71, 0xb7, 0x61, 0x4f, 0x43, 0x32, 0xfa, 0xf4,
+			0x4b, 0x1d, 0xb8, 0xe0, 0x9b, 0xb8, 0x28, 0xcb,
+			0xc2, 0xa6, 0x76, 0x6c, 0x2c, 0xdd, 0x2d, 0xe3,
+			0x1e, 0x78, 0xc3, 0xd0, 0xe0, 0x64, 0xfd, 0xf9,
+			0x47, 0x2f, 0xd7, 0x7c, 0x9e, 0x12, 0x49, 0x17,
+			0x1a, 0x0c, 0xd2, 0xab, 0xd7, 0xf5, 0x53, 0xb3,
+			0x02, 0x16, 0xc8, 0xd9, 0xdd, 0x1f, 0x4d, 0xaa,
+			0xc1, 0xe6, 0xf5, 0xfd, 0x6b, 0xee, 0xb8, 0x54,
+			0x7c, 0x6b, 0x82, 0x77, 0xd0, 0x94, 0x42, 0xca,
+			0x66, 0xaf, 0xdb, 0x17, 0xae, 0xff, 0x37, 0x83,
+			0x98, 0x59, 0x08, 0x0e, 0xd2, 0xb4, 0x7c, 0x58,
+			0x87, 0xaa, 0xb9, 0xad, 0x75, 0x5e, 0x24, 0xab,
+			0xb9, 0xed, 0xd4, 0x00, 0x7d, 0xb8, 0x68, 0xf4,
+			0xc4, 0x92, 0x97, 0x89, 0x54, 0x2e, 0xd1, 0x1c,
+			0x9a, 0xd8, 0xf4, 0xb2, 0xb1, 0x15, 0xbb, 0x06,
+			0x74, 0x37, 0xb5, 0xb5, 0xcd, 0x7b, 0x77, 0x7f,
+			0x8d, 0xdd, 0x66, 0xd4, 0xd9, 0xd9, 0x25, 0x20,
+			0xbc, 0x87, 0x2a, 0xe2, 0xff, 0x7e, 0xd1, 0x96,
+			0xea, 0x12, 0x48, 0xc6, 0x09, 0xc1, 0x93, 0x2d,
+			0x5f, 0x02, 0x10, 0x90, 0xb3, 0x86, 0x0b, 0x47,
+			0x2e, 0x43, 0xf0, 0xe4, 0x6c, 0xa3, 0x0f, 0x45,
+			0x1c, 0x8e, 0x09, 0x4c, 0x71, 0xde, 0x2d, 0x99,
+			0x90, 0x31, 0x13, 0x60, 0x29, 0x34, 0xef, 0x6d,
+			0x6d, 0x95, 0xab, 0x77, 0x7e, 0xa2, 0xb4, 0x6a,
+			0xa5, 0x63, 0xa8, 0x94, 0x4a, 0xd7, 0x95, 0xf3,
+			0xa5, 0xe1, 0x23, 0x53, 0x51, 0x9d, 0xd7, 0xe4,
+			0xeb, 0xe5, 0xee, 0xdf, 0xbe, 0x96, 0x3a, 0x38,
+			0xef, 0x06, 0xa9, 0x44, 0xf0, 0xad, 0xab, 0x37,
+			0xc2, 0x67, 0xcf, 0x63, 0xc3, 0xd6, 0x22, 0x2e,
+			0x16, 0x3b, 0x5a, 0xa3, 0xf6, 0xf8, 0x0b, 0xdf,
+			0xf8, 0xa5, 0xcb, 0x19, 0x29, 0x65, 0xad, 0x8e,
+			0xec, 0x42, 0xec, 0x0b, 0x1d, 0x16, 0xc9, 0xf7,
+			0x0f, 0x74, 0xd1, 0x26, 0x9e, 0x22, 0xca, 0xc1,
+			0xfb, 0x7d, 0x4f, 0x73, 0x02, 0x44, 0x88, 0x55,
+			0x40, 0x57, 0xfa, 0xc7, 0xaf, 0xfd, 0xb2, 0x9d,
+			0xe0, 0xf9, 0x6c, 0x32, 0xc1, 0x70, 0x51, 0x38,
+			0x1f, 0xce, 0x95, 0x77, 0x55, 0xde, 0xca, 0x0d,
+			0x59, 0x89, 0x3d, 0x88, 0x63, 0x25, 0x77, 0x00,
+			0x3d, 0x96, 0x48, 0x39, 0xde, 0xf5, 0x83, 0x77,
+			0xe3, 0x11, 0x0c, 0x75, 0x0c, 0x89, 0x5c, 0x79,
+			0x75, 0x88, 0x21, 0x6e, 0xdc, 0x01, 0x6f, 0xee,
+			0xb6, 0x16, 0xaa, 0xb1, 0x99, 0x86, 0x30, 0x89,
+			0x8f, 0x95, 0xf4, 0xf1, 0x3b, 0xd3, 0x11, 0xe1,
+			0x48, 0x3a, 0x6c, 0x26, 0x0c, 0x3d, 0x6e, 0x0b,
+			0x6f, 0xf4, 0x21, 0x10, 0x17, 0xf1, 0x11, 0xc3,
+			0xb8, 0xde, 0x69, 0xce, 0x12, 0x26, 0x17, 0xc9,
+			0x66, 0xd7, 0x88, 0x23, 0xd8, 0xd9, 0xe8, 0xe5,
+			0x4b, 0x19, 0x7c, 0x9c, 0xcf, 0x45, 0x76, 0x58,
+			0x3c, 0x55, 0xaa, 0x4d, 0x4a, 0x44, 0xfb, 0x0b,
+			0xf2, 0x0f, 0x4b, 0x50, 0xad, 0xe5, 0x59, 0xda,
+			0x43, 0x25, 0x0f, 0x8b, 0x7c, 0xc6, 0x84, 0xed,
+			0x2f, 0x11, 0xc5, 0x66, 0x71, 0x43, 0x56, 0x03,
+			0x1b, 0xab, 0x30, 0xba, 0x0f, 0x56, 0xa8, 0x14,
+			0x91, 0x85, 0x65, 0x54, 0x8c, 0xbb, 0x6a, 0xa8,
+			0x9d, 0x5d, 0x73, 0xd9, 0xdd, 0xa2, 0x34, 0xb5,
+			0xba, 0x8d, 0x90, 0x1e, 0xf9, 0x3a, 0xc2, 0x7e,
+			0xcf, 0x6e, 0x59, 0x8b, 0xc9, 0x84, 0x4e, 0x8b,
+			0x50, 0x99, 0xa7, 0x5b, 0x4b, 0x7e, 0xc2, 0x1b,
+			0x36, 0xef, 0x8d, 0xce, 0x58, 0x7c, 0xf9, 0xad,
+			0x6a, 0x59, 0xca, 0xbe, 0x8c, 0x78, 0xf6, 0x43,
+			0x1f, 0x32, 0xe3, 0x4a, 0xa1, 0xde, 0x6d, 0xdc,
+			0xc9, 0x54, 0xd8, 0x02, 0x45, 0x96, 0xbe, 0x78,
+			0x0b, 0xfd, 0x81, 0x2d, 0x6c, 0xff, 0xa5, 0x8e,
+			0x57, 0x07, 0x30, 0xa3, 0x00, 0x57, 0x1a, 0x4a,
+			0x52, 0x6c, 0xa1, 0xc2, 0x29, 0xcf, 0x81, 0x4d,
+			0xdb, 0x87, 0xa8, 0x43, 0xa6, 0x5b, 0xe6, 0x86,
+			0x90, 0x5a, 0x46, 0xac, 0x86, 0x35, 0x1d, 0xfe,
+			0x28, 0xc8, 0x56, 0x39, 0xde, 0x31, 0x3a, 0x8d,
+			0x93, 0x77, 0xaa, 0xa0, 0x4e, 0xfd, 0x09, 0xc8,
+			0xf6, 0x22, 0x1f, 0xe9, 0x7a, 0x16, 0xf0, 0x43,
+			0xcc, 0xc7, 0x24, 0x81, 0x9d, 0xfb, 0x62, 0xbd,
+			0xf6, 0xf1, 0x8e, 0x7b, 0xae, 0x59, 0x9d, 0x14,
+			0xb6, 0x1f, 0x27, 0x1b, 0x3f, 0x58, 0x81, 0x8e,
+			0xc3, 0x08, 0xd6, 0x10, 0x9b, 0x44, 0xdb, 0x98,
+			0xd6, 0xec, 0x9e, 0x4a, 0x59, 0xd1, 0xe8, 0xcf,
+			0x36, 0x0c, 0x35, 0x06, 0xbd, 0x5a, 0xdc, 0x51,
+			0xa3, 0x25, 0xe6, 0x50, 0x2b, 0x90, 0x8c, 0x84,
+			0x20, 0xf3, 0x2c, 0xec, 0x36, 0xf7, 0xf9, 0x52,
+			0x2a, 0x8d, 0xb0, 0xba, 0x79, 0x2b, 0xce, 0x9b,
+			0x7f, 0xe8, 0x28, 0x85, 0x0a, 0xa6, 0x7b, 0x59,
+			0xb9, 0x10, 0xe5, 0x3d, 0x2b, 0x3b, 0x98, 0x24,
+			0xe0, 0xe2, 0x72, 0x6b, 0x62, 0x61, 0x2e, 0xe7,
+			0xb4, 0x79, 0xfc, 0x6d, 0x06, 0x6a, 0x70, 0x26,
+			0x6e, 0x60, 0x2d, 0x2f, 0x17, 0xd2, 0xa0, 0xc7,
+			0x5e, 0xca, 0x68, 0x52, 0x15, 0x56, 0x4f, 0x6d,
+			0x18, 0xde, 0x98, 0x14, 0xa2, 0x78, 0xd0, 0xb8,
+			0xc4, 0xab, 0xd3, 0x2a, 0x0e, 0x59, 0x9c, 0xec,
+			0xa6, 0x9d, 0x67, 0xbc, 0x47, 0xd7, 0xc7, 0x86,
+			0xbe, 0x6f, 0x1b, 0xa7, 0x81, 0x87, 0x45, 0x50,
+			0x5e, 0xd7, 0x66, 0x4c, 0x24, 0x28, 0xab, 0xa0,
+			0xe4, 0x59, 0xe5, 0xdb, 0x8b, 0x79, 0x62, 0xa0,
+			0x94, 0xcb, 0x6c, 0x1e, 0xfc, 0xdb, 0xa2, 0x2b,
+			0x02, 0x29, 0xf5, 0xa3, 0xed, 0xfc, 0x00, 0x86,
+			0x19, 0x5f, 0x68, 0x31, 0x86, 0xd9, 0x63, 0x90,
+			0x78, 0xb7, 0xec, 0xbd, 0x84, 0x61, 0xeb, 0xfd,
+			0x8d, 0xcd, 0xfd, 0xa0, 0xeb, 0xb3, 0x76, 0xc0,
+			0x0e, 0x98, 0xc7, 0x4c, 0x42, 0x7d, 0x92, 0xec,
+			0x2e, 0x9a, 0xf7, 0x2a, 0x20, 0x35, 0xe1, 0x3b,
+			0x43, 0x6b, 0xec, 0x0a, 0xd1, 0x4f, 0xc0, 0x59,
+			0x04, 0x9c, 0x2b, 0x38, 0x56, 0xcc, 0x01, 0xdc,
+			0x40, 0x48, 0xf9, 0x9d, 0xa4, 0x08, 0xb9, 0xb5,
+			0x42, 0x45, 0x07, 0x78, 0x52, 0x44, 0x07, 0x29,
+			0x97, 0x1c, 0x0b, 0xc4, 0x1c, 0x69, 0xc8, 0x45,
+			0xa1, 0x2b, 0xbf, 0x40, 0x78, 0x0e, 0xee, 0xc0,
+			0x23, 0xd8, 0x1e, 0x8f, 0x48, 0x85, 0x89, 0x58,
+			0xc0, 0x46, 0x91, 0xd2, 0x88, 0x17, 0x89, 0x9c,
+			0x4b, 0xb6, 0x6b, 0xac, 0xbb, 0x85, 0x99, 0x65,
+			0x16, 0x39, 0xec, 0x3c, 0x76, 0x4f, 0x51, 0x12,
+			0xc3, 0xfc, 0x2f, 0x71, 0x2e, 0x35, 0x77, 0x0d,
+			0x66, 0xab, 0x5b, 0x7f, 0x09, 0x63, 0xfd, 0x12,
+			0xf6, 0xac, 0xe8, 0x1f, 0xdd, 0xd6, 0x25, 0x7e,
+			0x52, 0x52, 0x0d, 0xc9, 0xe5, 0x32, 0x0a, 0x45,
+			0xff, 0x0e, 0x78, 0x8c, 0x72, 0x4f, 0x28, 0xac,
+			0x7b, 0xfa, 0xab, 0x7b, 0x76, 0x42, 0xad, 0x64,
+			0xb6, 0xa3, 0xe6, 0xda, 0x64, 0x1a, 0x17, 0xa5,
+			0x20, 0x00, 0x5c, 0x2a, 0xa9, 0xe5, 0xb3, 0x9e,
+			0x57, 0xf9, 0x65, 0x2b, 0x4a, 0x86, 0xa4, 0x5a,
+			0x36, 0x6e, 0xed, 0x68, 0x72, 0x47, 0xfc, 0xea,
+			0xb1, 0x14, 0x0b, 0xf6, 0x7a, 0x11, 0x1b, 0xe7,
+			0x7d, 0x57, 0xe9, 0x28, 0x10, 0xaf, 0x25, 0x01,
+			0x57, 0x4f, 0x4b, 0x0b, 0x9f, 0xa6, 0xcb, 0x1f,
+			0x20, 0x79, 0x4f, 0xe3, 0xc2, 0xc4, 0xf6, 0x45,
+			0xcf, 0x8c, 0xb7, 0x7b, 0x5e, 0x28, 0x58, 0x39,
+			0xfe, 0xa7, 0xad, 0x55, 0x65, 0x50, 0x6b, 0xd7,
+			0x44, 0x0f, 0x46, 0x24, 0xec, 0xac, 0x9f, 0xf9,
+			0xa0, 0x8a, 0xda, 0xdd, 0x25, 0x01, 0x6d, 0x07,
+			0x5c, 0x31, 0x4c, 0x15, 0xcc, 0x63, 0x23, 0x31,
+			0x10, 0xfa, 0x03, 0x05, 0x6f, 0xc9, 0xe3, 0x1b,
+			0x7a, 0x93, 0x07, 0xa0, 0x1d, 0x06, 0x02, 0x62,
+			0x35, 0xd7, 0x88, 0x62, 0xa5, 0x87, 0x45, 0x6b,
+			},
+		.msg_len = 64,
+		.msg = (const u8[64]){
+			0xb0, 0xfd, 0x6d, 0x90, 0x96, 0x40, 0xee, 0x80,
+			0xa5, 0x07, 0x91, 0x96, 0xd4, 0xe9, 0x23, 0xc2,
+			0x33, 0xd3, 0x66, 0xb8, 0xc9, 0xe0, 0x42, 0xf6,
+			0x4e, 0x58, 0x30, 0x2b, 0xa3, 0xda, 0x04, 0x98,
+			0x0e, 0x08, 0x1b, 0x1c, 0x6a, 0x05, 0xdb, 0xb2,
+			0xa1, 0x45, 0xe4, 0xc2, 0x8f, 0x6e, 0x6d, 0x3a,
+			0x43, 0x78, 0xa7, 0x34, 0x72, 0x6e, 0xb0, 0x1f,
+			0x60, 0x9d, 0x88, 0xbb, 0xf9, 0xf2, 0x37, 0xae,
+			},
+		.sig_len = DILITHIUM87_CRYPTO_BYTES,
+		.sig = (const u8[DILITHIUM87_CRYPTO_BYTES]){
+			0x25, 0x09, 0x7a, 0x53, 0x87, 0x5b, 0xd7, 0x3d,
+			0xc4, 0xfc, 0xec, 0x46, 0x67, 0xb5, 0x52, 0xbf,
+			0xf0, 0x43, 0x67, 0xd8, 0x55, 0xdc, 0x45, 0xbf,
+			0x0e, 0x71, 0xa0, 0xaf, 0x6d, 0x90, 0x16, 0x62,
+			0x09, 0x50, 0x05, 0x6a, 0xdf, 0xf9, 0x2e, 0x97,
+			0xaa, 0x17, 0x1d, 0x8a, 0xc3, 0xd8, 0x16, 0x80,
+			0xc7, 0xec, 0xed, 0xf7, 0x77, 0x92, 0xaa, 0x7e,
+			0xa0, 0xa9, 0x61, 0xb9, 0x0c, 0xfe, 0x3a, 0x38,
+			0x8a, 0x75, 0xda, 0x7f, 0x21, 0x3d, 0x8a, 0x2c,
+			0x6e, 0x2d, 0xe3, 0xb3, 0x4d, 0xe1, 0xba, 0xa7,
+			0xed, 0xa2, 0xf9, 0x7a, 0x5c, 0xa9, 0xa5, 0x78,
+			0x86, 0xb8, 0x18, 0xb8, 0xe9, 0x62, 0xa8, 0xa6,
+			0x69, 0x34, 0x36, 0xbb, 0x93, 0xb7, 0xf2, 0x6b,
+			0x25, 0x5e, 0x6c, 0x28, 0x8e, 0x92, 0xf7, 0x50,
+			0x81, 0xe7, 0xba, 0x07, 0x75, 0x31, 0xd2, 0xcb,
+			0x6f, 0x50, 0xc4, 0x49, 0x25, 0x6b, 0xd1, 0x07,
+			0x98, 0x40, 0xe3, 0x75, 0x19, 0xe8, 0xad, 0xd2,
+			0x91, 0x30, 0xd3, 0x34, 0xd2, 0xd3, 0x8e, 0x0f,
+			0xc7, 0x13, 0x1f, 0xed, 0xd6, 0x88, 0x13, 0xf0,
+			0x73, 0xd7, 0x65, 0x32, 0xeb, 0xa6, 0x0a, 0x5a,
+			0x17, 0x4f, 0x86, 0xd6, 0x37, 0x24, 0x95, 0xcc,
+			0xdd, 0xd3, 0x76, 0xaf, 0x4e, 0xc7, 0x54, 0xa8,
+			0x8a, 0xbf, 0x7b, 0xb8, 0xf3, 0xe7, 0x45, 0xd7,
+			0x7e, 0x76, 0xd3, 0x24, 0x7b, 0x95, 0xd8, 0xbc,
+			0x52, 0xde, 0xe5, 0x5a, 0x33, 0x6a, 0x2e, 0x3d,
+			0x2a, 0xd6, 0x93, 0x72, 0x74, 0x69, 0xfe, 0x6d,
+			0xb7, 0x26, 0x14, 0x83, 0x6c, 0xc3, 0xa2, 0x1c,
+			0xde, 0x17, 0x1b, 0x09, 0xf7, 0x52, 0x3a, 0x26,
+			0xa1, 0xfa, 0xd3, 0x0d, 0xf2, 0xb7, 0x2f, 0x94,
+			0xcf, 0xdb, 0xf0, 0x58, 0x42, 0x46, 0xf2, 0xc5,
+			0x64, 0xfd, 0x2d, 0x7e, 0x60, 0x7e, 0x13, 0x23,
+			0x46, 0x62, 0xd2, 0xf6, 0x4d, 0x07, 0xf8, 0xd1,
+			0x7c, 0xfc, 0xd2, 0x88, 0x18, 0xb2, 0xe2, 0x68,
+			0xb7, 0x6c, 0xb4, 0x87, 0xee, 0x59, 0x35, 0xd2,
+			0xf5, 0x3e, 0x4e, 0x9e, 0xfc, 0xc2, 0x93, 0x84,
+			0x1a, 0x18, 0x5e, 0x09, 0x70, 0x9e, 0xb9, 0x5a,
+			0xba, 0x9b, 0x68, 0x22, 0x6c, 0x8b, 0xb3, 0x4f,
+			0xc9, 0x9e, 0x7a, 0x77, 0xf4, 0x32, 0x66, 0xa3,
+			0x1b, 0xf7, 0x59, 0x15, 0xa3, 0xfb, 0x92, 0x54,
+			0x6b, 0x56, 0x8b, 0x19, 0x4c, 0x9e, 0x8d, 0x49,
+			0x56, 0x5e, 0x3d, 0x47, 0x99, 0x16, 0x5b, 0x00,
+			0xa0, 0x4e, 0x41, 0xbb, 0x42, 0x9f, 0xbd, 0x31,
+			0x3f, 0xe0, 0x40, 0x22, 0xd8, 0xf7, 0x42, 0x54,
+			0xcc, 0xbd, 0x2b, 0xbf, 0x7d, 0x09, 0x69, 0x18,
+			0xa6, 0x8e, 0x72, 0x3a, 0x8b, 0x69, 0x90, 0x91,
+			0x6f, 0xbb, 0x83, 0x34, 0x47, 0x2d, 0xfe, 0xb8,
+			0x72, 0xe4, 0xe0, 0xfc, 0xf6, 0x41, 0x2e, 0xb5,
+			0xed, 0x17, 0x4f, 0x91, 0xfe, 0x4c, 0xa6, 0xaa,
+			0xec, 0x1c, 0xfd, 0x6f, 0x25, 0x46, 0xf6, 0x84,
+			0xfe, 0x95, 0x03, 0xb3, 0xe1, 0xf3, 0xa7, 0x35,
+			0x18, 0x4d, 0x73, 0x8c, 0x1e, 0xab, 0x7a, 0x0c,
+			0xc7, 0xde, 0x2f, 0x84, 0x91, 0x29, 0x67, 0x95,
+			0x8d, 0xfe, 0x6f, 0x83, 0xb8, 0xd0, 0xba, 0xd5,
+			0xa2, 0xf7, 0xbb, 0xd1, 0xe2, 0x80, 0x8e, 0x62,
+			0xbc, 0xed, 0x56, 0x88, 0x0e, 0x05, 0x0c, 0xa4,
+			0xc6, 0xa7, 0xfb, 0x78, 0xc8, 0x52, 0x51, 0x56,
+			0x7e, 0xa2, 0xa9, 0xeb, 0x0a, 0xc1, 0xb7, 0xc3,
+			0x9f, 0x10, 0x91, 0xe1, 0xb8, 0x82, 0xa9, 0x63,
+			0xd1, 0x11, 0x39, 0x72, 0x45, 0xac, 0x98, 0xbd,
+			0x03, 0x4c, 0xd3, 0x15, 0x4d, 0x87, 0xcd, 0x8b,
+			0x35, 0x3f, 0xd0, 0x8a, 0x6d, 0xb7, 0x34, 0x85,
+			0xb7, 0xcc, 0xe5, 0xc2, 0xfc, 0xb8, 0x6d, 0xb6,
+			0x90, 0x3a, 0xef, 0x6f, 0x53, 0x02, 0x0c, 0x6c,
+			0x7d, 0x79, 0x51, 0xb8, 0xdf, 0x54, 0xa9, 0xf5,
+			0xf6, 0x9b, 0x80, 0xed, 0x97, 0x3b, 0x7e, 0xa1,
+			0xce, 0x3e, 0xa2, 0xd3, 0xce, 0xb2, 0x0c, 0x16,
+			0x28, 0x73, 0xf1, 0x5d, 0xeb, 0xc8, 0x6a, 0x10,
+			0x41, 0xbb, 0x14, 0x65, 0x48, 0x78, 0x18, 0xa3,
+			0x90, 0xb1, 0xc8, 0x5b, 0xf3, 0x65, 0xb3, 0xcb,
+			0x7c, 0x49, 0x87, 0x61, 0xa8, 0xf4, 0xdc, 0x58,
+			0x21, 0x12, 0x4b, 0xb8, 0x04, 0xf1, 0x1c, 0x7e,
+			0x7a, 0xd0, 0xc9, 0xde, 0x3f, 0x72, 0x5e, 0x5e,
+			0x6b, 0xf6, 0x73, 0x3e, 0x7c, 0x3d, 0xaf, 0x39,
+			0x9a, 0x3b, 0xa5, 0x8b, 0xea, 0x13, 0xa6, 0xb5,
+			0x3c, 0x13, 0xa1, 0x98, 0xa0, 0xbb, 0x75, 0xd2,
+			0xca, 0x0e, 0x3d, 0x8a, 0x08, 0x9f, 0x98, 0xb1,
+			0x5c, 0x59, 0x3a, 0xa5, 0x14, 0x3f, 0xc7, 0xfa,
+			0x71, 0xb8, 0xc0, 0x50, 0xa4, 0x35, 0xdd, 0x11,
+			0xaf, 0x10, 0x05, 0xc4, 0x66, 0x1c, 0xae, 0x9b,
+			0x43, 0xf3, 0x4f, 0xbd, 0xb1, 0xac, 0x3f, 0x7d,
+			0xe6, 0x99, 0xfc, 0xd3, 0x54, 0xc7, 0x82, 0xcc,
+			0xdc, 0xda, 0xe4, 0x1b, 0x15, 0x19, 0x70, 0x0a,
+			0xd0, 0x4a, 0xe2, 0x9d, 0x4c, 0xe9, 0x59, 0x12,
+			0x01, 0xab, 0x30, 0xfb, 0xe6, 0xe0, 0x74, 0x54,
+			0x25, 0xb5, 0xd9, 0x0e, 0x79, 0xba, 0x1b, 0x0b,
+			0x02, 0x4b, 0x0e, 0xf8, 0x81, 0x63, 0xf5, 0x54,
+			0xa0, 0xec, 0xf4, 0x80, 0x4a, 0x54, 0x2e, 0xda,
+			0xc4, 0x44, 0x97, 0xe4, 0xcb, 0xd5, 0x5f, 0x5a,
+			0x75, 0x21, 0x8d, 0xfd, 0x78, 0xed, 0x15, 0x97,
+			0x54, 0xd0, 0x77, 0x70, 0x8a, 0x62, 0xc7, 0x74,
+			0xd4, 0x1c, 0x7e, 0x28, 0x63, 0xae, 0x9d, 0xeb,
+			0x9e, 0xba, 0x40, 0x55, 0x52, 0x7e, 0x0d, 0xe9,
+			0x48, 0x20, 0x6d, 0x07, 0x39, 0xd0, 0x1a, 0x08,
+			0x1a, 0xea, 0xca, 0xbc, 0x96, 0x92, 0xaf, 0x34,
+			0xe6, 0x69, 0xe4, 0x23, 0xa7, 0x1e, 0x45, 0xbe,
+			0xd4, 0x7e, 0xd2, 0xb6, 0xb8, 0x86, 0xa3, 0x1d,
+			0xfd, 0x8e, 0xa0, 0x46, 0xca, 0x0e, 0xfe, 0xc9,
+			0xf5, 0x58, 0x44, 0x09, 0xf0, 0x5e, 0x1a, 0xf2,
+			0x0f, 0x88, 0x0f, 0x54, 0xf8, 0xb8, 0xcc, 0x2f,
+			0x1c, 0xd0, 0xe4, 0xd3, 0x21, 0x45, 0x66, 0x2e,
+			0x40, 0x59, 0xb8, 0x1e, 0x51, 0x19, 0x5a, 0x5c,
+			0x58, 0x6b, 0xb0, 0xde, 0xc8, 0x31, 0x77, 0xee,
+			0x02, 0xa0, 0xe3, 0xef, 0x84, 0x36, 0x48, 0xae,
+			0xa9, 0x41, 0x0c, 0x1b, 0xa4, 0xa2, 0xf7, 0x3e,
+			0x5d, 0xab, 0xd0, 0x02, 0x8b, 0x34, 0x4b, 0x42,
+			0x2c, 0xaf, 0x07, 0x32, 0x52, 0xc4, 0x2e, 0x8a,
+			0xbb, 0x37, 0xa5, 0x3c, 0x47, 0x19, 0x29, 0xde,
+			0x04, 0x87, 0xb6, 0x8d, 0xd5, 0x9c, 0x98, 0xa6,
+			0x06, 0x60, 0xf0, 0x37, 0x53, 0x29, 0x54, 0x98,
+			0xf0, 0x52, 0x8a, 0xb0, 0x6a, 0x1b, 0x8a, 0xde,
+			0x32, 0x1d, 0x4f, 0x53, 0x4f, 0x21, 0x48, 0x77,
+			0x97, 0xe6, 0x9e, 0x5a, 0x96, 0x34, 0x11, 0x67,
+			0xb8, 0xef, 0x9c, 0xad, 0x28, 0xee, 0xdf, 0xd2,
+			0x86, 0xdd, 0x0a, 0xfa, 0x5f, 0x2b, 0x39, 0xb3,
+			0x65, 0xda, 0xa6, 0xf7, 0x19, 0x15, 0xd1, 0x8f,
+			0x30, 0x2f, 0xfa, 0x24, 0x2f, 0x8a, 0x78, 0x72,
+			0x91, 0xdd, 0x28, 0x73, 0xfa, 0x2f, 0x6b, 0x1e,
+			0x8f, 0x60, 0x65, 0xa0, 0x93, 0x24, 0x3d, 0xdd,
+			0xc7, 0xed, 0x44, 0xba, 0x45, 0xa8, 0x60, 0xa4,
+			0x70, 0xaf, 0x6e, 0x2f, 0xc0, 0x86, 0xc6, 0x5e,
+			0xed, 0xed, 0xad, 0x7d, 0x10, 0xe4, 0x48, 0x04,
+			0xd7, 0xd8, 0x48, 0xfa, 0xbe, 0x5b, 0x5d, 0x43,
+			0x47, 0x0b, 0xcc, 0x75, 0x31, 0xed, 0x6e, 0x97,
+			0xb8, 0xff, 0x8c, 0x0d, 0x3b, 0x47, 0xdd, 0xff,
+			0x88, 0xd6, 0x98, 0x65, 0x76, 0xc2, 0x1b, 0xf6,
+			0xf0, 0x69, 0xcb, 0xaf, 0xa6, 0x79, 0x49, 0x99,
+			0xaf, 0xae, 0x7e, 0xa1, 0xa7, 0x1b, 0xc8, 0xc5,
+			0xf5, 0x40, 0xf6, 0xc9, 0x6a, 0xa4, 0xc1, 0xcb,
+			0x15, 0x35, 0x09, 0xb7, 0x85, 0x88, 0xc3, 0x6a,
+			0xcb, 0xc2, 0xa7, 0x5e, 0xcd, 0xc2, 0xe5, 0x7b,
+			0x92, 0xab, 0xd3, 0x6f, 0x59, 0x63, 0xe4, 0xb3,
+			0x50, 0x2f, 0x62, 0xad, 0x96, 0x00, 0x34, 0x60,
+			0x47, 0x0c, 0xef, 0x85, 0x70, 0xf9, 0xfd, 0x01,
+			0xaa, 0x3a, 0xcc, 0xc5, 0x22, 0x2e, 0xf7, 0xec,
+			0x4a, 0x5d, 0x08, 0x1d, 0x70, 0xa4, 0xe8, 0x51,
+			0x9a, 0x14, 0xa9, 0xda, 0xa2, 0xb3, 0x63, 0x44,
+			0x2e, 0x58, 0xb3, 0x32, 0xe2, 0x9c, 0x35, 0x0d,
+			0x02, 0x2f, 0x6c, 0xc1, 0xb9, 0xe9, 0x0f, 0x13,
+			0x02, 0x37, 0xdc, 0xc1, 0x97, 0xe2, 0x32, 0x1e,
+			0x6f, 0xba, 0xb8, 0xd1, 0xfd, 0xf0, 0xd5, 0x23,
+			0xe0, 0x7d, 0xae, 0x85, 0x1e, 0x9d, 0x0d, 0x7b,
+			0xfe, 0x40, 0xe8, 0x0d, 0xf1, 0x2c, 0xf0, 0xa9,
+			0xf7, 0x77, 0xbe, 0xb3, 0x8f, 0xe8, 0x47, 0xc2,
+			0x6a, 0x7d, 0x9a, 0xf4, 0x4e, 0xeb, 0x17, 0x8c,
+			0x62, 0xda, 0xcc, 0x85, 0x7b, 0x00, 0x9b, 0xc3,
+			0x14, 0xa4, 0x5b, 0xc6, 0xaf, 0x49, 0x6e, 0xf8,
+			0x2e, 0x76, 0x36, 0x05, 0xce, 0x19, 0x83, 0x7a,
+			0xdb, 0xcd, 0x99, 0x7a, 0x92, 0x0e, 0x1d, 0xd1,
+			0xfe, 0xc9, 0xec, 0x6f, 0xec, 0xdc, 0x96, 0x26,
+			0x71, 0x1b, 0x48, 0x72, 0x22, 0xe2, 0xf6, 0xbf,
+			0xc0, 0x34, 0xfe, 0x6c, 0xff, 0x3b, 0xc2, 0x9a,
+			0x73, 0x52, 0xbf, 0xc8, 0xda, 0x4a, 0xe5, 0xc4,
+			0x89, 0x3c, 0x81, 0x9c, 0x29, 0xa9, 0xee, 0x7d,
+			0x17, 0x71, 0xf0, 0xf6, 0x8d, 0x78, 0xac, 0x8a,
+			0x79, 0xfe, 0xfb, 0x37, 0x7e, 0xb3, 0x1a, 0xff,
+			0xf3, 0xd8, 0xd8, 0xa8, 0x15, 0x0e, 0xa0, 0x40,
+			0xf0, 0x1a, 0xa6, 0x1b, 0xc4, 0x63, 0x47, 0x65,
+			0x91, 0x32, 0xf5, 0x8a, 0x09, 0xe8, 0xb2, 0x14,
+			0xc8, 0xdb, 0x55, 0x66, 0x84, 0x17, 0x70, 0x96,
+			0x59, 0xd4, 0xcb, 0x13, 0xa1, 0x7e, 0x07, 0xa5,
+			0x55, 0x2e, 0xe0, 0xe6, 0xda, 0x4b, 0x7a, 0x6a,
+			0x19, 0x8b, 0x4c, 0x63, 0xc6, 0xaf, 0xe0, 0xeb,
+			0xe0, 0xf7, 0x0a, 0xe2, 0x04, 0x6f, 0xdd, 0xda,
+			0x39, 0xc0, 0xcf, 0xee, 0xab, 0xed, 0xec, 0x33,
+			0xfb, 0xf9, 0xcc, 0xb6, 0xc3, 0xa7, 0xa6, 0xc2,
+			0x22, 0x0c, 0xeb, 0xe1, 0x59, 0x8c, 0x34, 0x78,
+			0xe5, 0xa5, 0x11, 0xca, 0x6d, 0x46, 0x81, 0xbe,
+			0x84, 0x44, 0x8e, 0x31, 0x24, 0x5c, 0x6b, 0xdd,
+			0x2a, 0x13, 0xe1, 0x00, 0x94, 0xbb, 0x3b, 0x16,
+			0xfc, 0x72, 0xa3, 0xc6, 0x24, 0x0a, 0xd1, 0x10,
+			0x03, 0x66, 0x16, 0xb9, 0x94, 0x1b, 0x96, 0xca,
+			0x99, 0x27, 0xd2, 0xb7, 0xb4, 0xfe, 0x3e, 0x25,
+			0xec, 0x57, 0xdf, 0x45, 0x7b, 0x53, 0x01, 0xf3,
+			0x07, 0xb9, 0x77, 0xfa, 0x85, 0x1d, 0x69, 0x69,
+			0x2a, 0xbd, 0xcd, 0x9c, 0x73, 0x07, 0xf8, 0x26,
+			0xce, 0xaf, 0x18, 0x94, 0xd5, 0x08, 0x3e, 0x6c,
+			0xb8, 0x64, 0x57, 0xb8, 0xfc, 0xc1, 0xa2, 0xed,
+			0xf3, 0x20, 0x17, 0xe8, 0x93, 0x27, 0x3e, 0xc6,
+			0x4b, 0xf1, 0x2f, 0x21, 0x16, 0x1f, 0x60, 0x52,
+			0x94, 0x0b, 0x25, 0x42, 0x8a, 0x2e, 0x0b, 0x5d,
+			0x42, 0x91, 0xca, 0x77, 0x52, 0x8e, 0xbd, 0x3d,
+			0x82, 0x2b, 0xd5, 0xed, 0x53, 0x4a, 0x84, 0x9a,
+			0x9d, 0xc4, 0xb1, 0x75, 0x87, 0x95, 0x19, 0xa6,
+			0x46, 0x7f, 0xb8, 0xd0, 0x56, 0x18, 0xf8, 0xa6,
+			0x8f, 0xce, 0x64, 0xcd, 0xa5, 0x34, 0xf4, 0xd7,
+			0x02, 0x5e, 0xe1, 0xb1, 0x8f, 0x42, 0x3b, 0xbe,
+			0x18, 0x4d, 0xf8, 0x26, 0xa4, 0x1e, 0x5c, 0xf0,
+			0xd5, 0x73, 0x28, 0xdf, 0xaa, 0x73, 0x08, 0xee,
+			0x72, 0x52, 0x3d, 0x63, 0xfb, 0x82, 0x71, 0x88,
+			0xe5, 0x35, 0x54, 0xbc, 0xf8, 0x3f, 0xd0, 0x39,
+			0x1c, 0xc7, 0x86, 0x86, 0x80, 0x37, 0x1c, 0x88,
+			0xf0, 0xff, 0x65, 0x3d, 0x94, 0x07, 0x7f, 0x97,
+			0x65, 0xd2, 0xb2, 0xf6, 0xb2, 0xd8, 0x56, 0x23,
+			0xe4, 0xbb, 0xfe, 0xef, 0x80, 0x53, 0x7b, 0xd3,
+			0x44, 0x11, 0xb2, 0x32, 0x8b, 0x93, 0xea, 0x15,
+			0x2d, 0x3b, 0x80, 0x38, 0xdc, 0xfe, 0x80, 0x78,
+			0xd9, 0x01, 0x60, 0xc3, 0x03, 0xce, 0x96, 0x89,
+			0x00, 0x9e, 0x48, 0xa4, 0xfa, 0x33, 0x08, 0xe6,
+			0x1d, 0xca, 0xff, 0xbc, 0xbf, 0x2c, 0xa3, 0xfd,
+			0xf4, 0x6d, 0x25, 0x5c, 0xf7, 0x83, 0x0e, 0x9b,
+			0x97, 0xbf, 0xea, 0x8a, 0xcc, 0x7f, 0x74, 0xac,
+			0x77, 0xc6, 0x99, 0xb7, 0x02, 0xd0, 0xc7, 0x65,
+			0x76, 0x8e, 0x43, 0x0a, 0x23, 0xdc, 0xb5, 0x76,
+			0x85, 0x04, 0x2b, 0xc7, 0xf7, 0x67, 0xc4, 0xa8,
+			0xbc, 0x02, 0x91, 0xdb, 0x24, 0x50, 0xb8, 0x51,
+			0xb5, 0x74, 0xb2, 0x04, 0xeb, 0x83, 0x51, 0x0d,
+			0xa2, 0x74, 0xea, 0x72, 0xc8, 0x2f, 0x08, 0x61,
+			0x46, 0xa5, 0x5a, 0x09, 0x97, 0x9c, 0x2d, 0x81,
+			0xb4, 0x1b, 0x94, 0x75, 0x4a, 0x96, 0x30, 0x26,
+			0xda, 0xf8, 0x32, 0xb3, 0x07, 0xa6, 0xa7, 0x66,
+			0xdf, 0xca, 0xfd, 0xdf, 0x47, 0xcf, 0x66, 0x58,
+			0x81, 0x4c, 0x82, 0x58, 0xba, 0xa9, 0x03, 0xf9,
+			0xa9, 0xed, 0xd2, 0xf6, 0xe5, 0xec, 0x26, 0xf0,
+			0xa6, 0xc9, 0x54, 0x6f, 0x9a, 0x4b, 0x64, 0x93,
+			0xc3, 0xf9, 0xb6, 0x0a, 0xc2, 0x36, 0x5c, 0x23,
+			0xed, 0xfc, 0x0f, 0x6c, 0x91, 0x23, 0x69, 0x48,
+			0xbf, 0x3c, 0x85, 0x41, 0x8d, 0xd0, 0xcf, 0x28,
+			0x3a, 0x71, 0x63, 0x91, 0x04, 0x85, 0x81, 0x70,
+			0x06, 0x3e, 0x6c, 0x73, 0x8a, 0x33, 0xeb, 0x93,
+			0x52, 0xd5, 0x13, 0x55, 0xe5, 0xcb, 0x49, 0x60,
+			0x74, 0x44, 0xe1, 0xaf, 0xe2, 0xd5, 0xae, 0x0f,
+			0x7c, 0x3f, 0x9a, 0x15, 0x05, 0x1f, 0xdf, 0x39,
+			0x51, 0x45, 0xca, 0x26, 0xda, 0x03, 0xd1, 0x90,
+			0x23, 0xd9, 0x35, 0xf8, 0x93, 0x31, 0xec, 0xe3,
+			0xfe, 0x73, 0xe3, 0xbd, 0xa9, 0x33, 0x90, 0x9b,
+			0xcf, 0x5b, 0x31, 0x3d, 0xfe, 0x05, 0x1a, 0xb8,
+			0x69, 0xe3, 0xb6, 0xe8, 0x39, 0xe5, 0x68, 0x98,
+			0x85, 0x8e, 0x90, 0x7b, 0x97, 0x85, 0x2e, 0x98,
+			0x98, 0x17, 0xd8, 0x6f, 0x9c, 0x39, 0x75, 0x1b,
+			0x74, 0x43, 0x53, 0xae, 0x1c, 0xd0, 0xa1, 0x0a,
+			0x66, 0xf0, 0xc9, 0x66, 0xb8, 0xde, 0xcf, 0x15,
+			0xbb, 0x71, 0x73, 0xb0, 0x84, 0xed, 0x0f, 0x0d,
+			0x5e, 0xdc, 0xb8, 0x3f, 0xa5, 0x56, 0xd9, 0x0a,
+			0x24, 0xb5, 0x84, 0x7b, 0xf4, 0x50, 0xd6, 0x88,
+			0x0f, 0x16, 0x35, 0x7f, 0x47, 0xf4, 0xfd, 0xb0,
+			0x0c, 0x03, 0xfc, 0x87, 0x7b, 0xa0, 0x37, 0x0e,
+			0xbd, 0xd5, 0x57, 0x5b, 0xa5, 0x19, 0xec, 0x52,
+			0xd8, 0x57, 0x7e, 0x81, 0xc8, 0x33, 0x6d, 0xc4,
+			0x7f, 0x41, 0xb0, 0x0d, 0xee, 0x53, 0x3b, 0x69,
+			0x14, 0x63, 0x1e, 0xe1, 0xc9, 0xa8, 0x00, 0xb2,
+			0x9f, 0x6a, 0x84, 0x69, 0x49, 0x38, 0x78, 0x0b,
+			0x20, 0xcf, 0x9e, 0x1e, 0x86, 0x41, 0xc8, 0x3f,
+			0x86, 0x65, 0x68, 0x45, 0x1a, 0x8d, 0x56, 0x5b,
+			0x80, 0xf9, 0xad, 0x03, 0x65, 0x32, 0xa0, 0xc6,
+			0x6d, 0x95, 0x81, 0x79, 0x89, 0x98, 0x1d, 0x74,
+			0x61, 0xe2, 0x0a, 0xa9, 0x88, 0x4d, 0xa3, 0x50,
+			0x3c, 0xfd, 0x10, 0x9a, 0x38, 0x06, 0x93, 0xb3,
+			0x2a, 0xef, 0x17, 0xcb, 0x24, 0xa5, 0x41, 0x5b,
+			0xdc, 0xb5, 0x6b, 0x31, 0x8d, 0xa7, 0x58, 0x0b,
+			0xb1, 0xc8, 0xc6, 0x1f, 0x2f, 0x28, 0x0e, 0x76,
+			0x63, 0x49, 0x89, 0x73, 0x23, 0xf8, 0x2b, 0x53,
+			0xc7, 0xd1, 0x9a, 0x69, 0x2c, 0x13, 0xd8, 0x1b,
+			0x99, 0x09, 0x53, 0xd3, 0x7d, 0xc2, 0x59, 0xd4,
+			0x4c, 0x99, 0x4f, 0xb5, 0x55, 0x0b, 0x64, 0xaa,
+			0x61, 0x08, 0x2d, 0xb2, 0x60, 0xe1, 0x69, 0x00,
+			0x24, 0xc9, 0x32, 0x5d, 0xb9, 0x03, 0xe6, 0x84,
+			0xd8, 0xcf, 0xa3, 0xa5, 0x57, 0xc2, 0x88, 0x23,
+			0xf0, 0x4a, 0x11, 0x7f, 0x34, 0xa5, 0x4f, 0xe9,
+			0xda, 0xfb, 0xbc, 0x81, 0x0c, 0xae, 0xaa, 0xa7,
+			0x83, 0xe7, 0xa9, 0x31, 0x2b, 0x69, 0xf3, 0x8a,
+			0x84, 0x0a, 0xeb, 0xf7, 0xb0, 0x3b, 0x48, 0x7d,
+			0x04, 0x0c, 0xb4, 0xaa, 0xb9, 0x16, 0x0e, 0x2c,
+			0xbd, 0x0d, 0x9d, 0x4a, 0x88, 0xe2, 0x80, 0x85,
+			0x2a, 0xd0, 0xb0, 0x65, 0x65, 0x4e, 0xbb, 0xf9,
+			0x33, 0x89, 0x08, 0xdf, 0x30, 0xcb, 0x7e, 0x6b,
+			0x78, 0x3a, 0x7d, 0xeb, 0x64, 0x44, 0x50, 0x22,
+			0xd1, 0xe9, 0x50, 0xc4, 0x7b, 0x5c, 0x86, 0x79,
+			0x88, 0xb5, 0x2a, 0x54, 0xed, 0x37, 0x06, 0x1e,
+			0x08, 0xc5, 0xfb, 0xb1, 0x13, 0xb4, 0x73, 0x0a,
+			0x5e, 0x0a, 0x88, 0x01, 0x57, 0x0c, 0x92, 0x18,
+			0x6c, 0xac, 0x83, 0x45, 0xa0, 0x96, 0x69, 0xdf,
+			0xb5, 0x18, 0xf7, 0x0e, 0x4e, 0x6c, 0x34, 0xe3,
+			0x65, 0x83, 0xde, 0x40, 0xa0, 0xa7, 0x17, 0xfc,
+			0x48, 0x87, 0x82, 0x4c, 0x0d, 0xa0, 0xd4, 0xc4,
+			0x4a, 0x21, 0x1b, 0x75, 0xbd, 0x05, 0x31, 0x9b,
+			0x24, 0x47, 0x0f, 0x44, 0x50, 0x06, 0x6e, 0xac,
+			0x28, 0xd6, 0x2e, 0xf5, 0xce, 0xcf, 0x4c, 0xd2,
+			0x23, 0xf1, 0x8c, 0x79, 0xad, 0x56, 0x64, 0xb1,
+			0x6a, 0x5e, 0x51, 0x16, 0x4e, 0x66, 0xd0, 0xfa,
+			0x34, 0x80, 0xab, 0x10, 0x9c, 0xdf, 0xc5, 0xa3,
+			0x3e, 0xd6, 0xdc, 0x0c, 0x8e, 0x36, 0xc3, 0x5d,
+			0xde, 0x13, 0xea, 0x6e, 0x0a, 0xb4, 0x31, 0x62,
+			0x50, 0x06, 0xad, 0xff, 0x0f, 0xe6, 0x7e, 0x51,
+			0xd9, 0xe8, 0x59, 0x8f, 0x83, 0xf2, 0x7c, 0x4b,
+			0x36, 0x60, 0xb0, 0x3d, 0xa0, 0x74, 0xc9, 0x95,
+			0xb1, 0xd9, 0x8d, 0x4d, 0x03, 0xc9, 0x31, 0xbd,
+			0x50, 0x58, 0xed, 0x8a, 0x73, 0xaf, 0x12, 0x6b,
+			0xa5, 0x1b, 0x87, 0xec, 0xc0, 0xea, 0xc3, 0x30,
+			0x5c, 0x7f, 0xab, 0xec, 0xb1, 0xfd, 0x82, 0x8d,
+			0xf9, 0x12, 0x28, 0xca, 0x62, 0xff, 0x60, 0xfd,
+			0xf1, 0xf0, 0xc9, 0x9a, 0x54, 0xf0, 0x81, 0x48,
+			0xed, 0xe4, 0x08, 0x12, 0xa6, 0x5f, 0x9a, 0xf8,
+			0x96, 0xaa, 0x49, 0x7d, 0xf2, 0x85, 0x6d, 0x4f,
+			0x0b, 0x19, 0xcc, 0xbe, 0x62, 0xaa, 0xbb, 0x15,
+			0xb4, 0x2b, 0x10, 0xb1, 0x4e, 0xcf, 0xe8, 0x31,
+			0xbc, 0xa1, 0x61, 0x8a, 0x31, 0x4e, 0xda, 0x8a,
+			0xcd, 0xe9, 0x81, 0x4f, 0xd5, 0xb5, 0x54, 0xf3,
+			0x93, 0x7d, 0x0c, 0x19, 0x65, 0xc1, 0x3d, 0xa5,
+			0x74, 0xee, 0xe3, 0xe1, 0x53, 0x70, 0x3b, 0xe1,
+			0x01, 0x0b, 0x10, 0xb8, 0x41, 0x89, 0x01, 0x76,
+			0xe9, 0xff, 0x7d, 0x68, 0x86, 0xfc, 0x79, 0x73,
+			0xac, 0xce, 0x6c, 0xc5, 0x90, 0xe1, 0x13, 0x91,
+			0xbd, 0x9b, 0x94, 0xdf, 0x64, 0xba, 0x6c, 0xd1,
+			0x5a, 0x4f, 0x0a, 0xf5, 0x99, 0xaa, 0x2b, 0x2f,
+			0x51, 0xd6, 0x82, 0x52, 0xe8, 0x42, 0x8c, 0xbe,
+			0xed, 0x5c, 0x87, 0x7e, 0xe8, 0xd3, 0x6e, 0x29,
+			0x89, 0x3a, 0x0f, 0xaa, 0xb4, 0x8c, 0x72, 0x31,
+			0x5c, 0x82, 0x4e, 0xaa, 0x21, 0xa3, 0x50, 0x5a,
+			0xa7, 0x89, 0x09, 0x2b, 0xdd, 0x2a, 0xad, 0xb0,
+			0x0a, 0xb9, 0x48, 0x15, 0x4c, 0x4c, 0xd5, 0x08,
+			0x8c, 0x26, 0x6a, 0xd0, 0x06, 0x8b, 0x95, 0xdd,
+			0x81, 0x1d, 0x19, 0x2d, 0x1b, 0xa5, 0x7c, 0x0c,
+			0xb0, 0x68, 0x7d, 0x60, 0x89, 0x6f, 0x41, 0xde,
+			0x90, 0xfc, 0x51, 0x25, 0xe9, 0x1b, 0x3c, 0xe5,
+			0xc0, 0x36, 0xf4, 0x7d, 0x0e, 0x53, 0xa5, 0x78,
+			0xca, 0x06, 0xd9, 0x8d, 0xdf, 0x1c, 0xc6, 0x5a,
+			0x72, 0x8e, 0xcf, 0x4f, 0xc4, 0x5a, 0x79, 0x65,
+			0xe2, 0x71, 0xb8, 0xa9, 0x4a, 0x12, 0x29, 0xcc,
+			0x7e, 0x1b, 0x64, 0x93, 0xc7, 0x5b, 0x2a, 0x12,
+			0x2d, 0x30, 0xc1, 0x55, 0x2f, 0xea, 0xb3, 0xa4,
+			0xfd, 0x2b, 0xa0, 0xc3, 0x65, 0x46, 0x60, 0xaf,
+			0x56, 0xea, 0x79, 0xf2, 0x7e, 0xaf, 0x73, 0xbc,
+			0x91, 0xd2, 0xd4, 0xa5, 0x9e, 0x6f, 0x62, 0x34,
+			0x53, 0x6c, 0x8f, 0x29, 0x17, 0x68, 0x47, 0xea,
+			0xed, 0xec, 0x8a, 0x25, 0x6d, 0x6c, 0x83, 0x16,
+			0x7d, 0x93, 0xd3, 0x44, 0xbd, 0x56, 0x30, 0xbd,
+			0x64, 0x20, 0xa0, 0xfb, 0x40, 0xf5, 0x62, 0x77,
+			0xe6, 0x08, 0x91, 0x35, 0x3a, 0x0a, 0xc4, 0x2d,
+			0x74, 0x76, 0xca, 0x6d, 0x73, 0xb2, 0x23, 0x84,
+			0xe7, 0x4a, 0xc6, 0xd2, 0xa1, 0xbe, 0xd5, 0x71,
+			0xac, 0xfe, 0x19, 0x77, 0xde, 0x6c, 0x40, 0xc4,
+			0x41, 0x34, 0x2c, 0x8f, 0x7c, 0x3d, 0x2d, 0xfe,
+			0x1f, 0x96, 0xf3, 0x5e, 0xfa, 0x33, 0xf8, 0xe6,
+			0xfe, 0x93, 0x88, 0xf6, 0xec, 0x46, 0xf8, 0x5e,
+			0xd7, 0x56, 0xf2, 0x39, 0x8d, 0xee, 0x24, 0x40,
+			0x0e, 0x77, 0xf4, 0xe0, 0xfe, 0x37, 0x15, 0xa8,
+			0x7a, 0x21, 0xbd, 0x13, 0x82, 0x03, 0xa6, 0xb7,
+			0x3c, 0x90, 0xdd, 0xa7, 0x60, 0x20, 0x9f, 0xc4,
+			0xad, 0xfe, 0xaf, 0xb3, 0x6e, 0xe9, 0xc6, 0x29,
+			0x69, 0x47, 0x6d, 0x04, 0x80, 0x5c, 0x9e, 0x76,
+			0x22, 0x93, 0x18, 0x5e, 0x29, 0xec, 0xff, 0xf6,
+			0x0b, 0x99, 0xbc, 0xa8, 0x6e, 0xd7, 0x72, 0xf7,
+			0xb7, 0xbd, 0xb7, 0xd3, 0x8e, 0x85, 0x28, 0xc3,
+			0xb3, 0x96, 0xa9, 0x2c, 0x56, 0x5c, 0xab, 0x9a,
+			0x86, 0x16, 0xb3, 0x55, 0x51, 0x31, 0x1d, 0x2c,
+			0x8a, 0x20, 0xa1, 0x2b, 0xee, 0xd3, 0x2b, 0xf1,
+			0xb6, 0xe3, 0xa8, 0xda, 0x32, 0xd3, 0xae, 0x51,
+			0x75, 0xd1, 0x1c, 0xe9, 0xe1, 0x26, 0xc4, 0x7f,
+			0x68, 0x84, 0xb5, 0xbb, 0xca, 0xae, 0x11, 0x90,
+			0xb1, 0x18, 0x71, 0xab, 0x00, 0x03, 0x6e, 0xff,
+			0x96, 0x33, 0x92, 0x20, 0x3b, 0xdd, 0xd0, 0x4d,
+			0xd1, 0x2b, 0x64, 0x8c, 0xda, 0xf1, 0x93, 0xf6,
+			0xd3, 0xdc, 0x22, 0x88, 0x19, 0xf2, 0xa7, 0x79,
+			0x27, 0xc2, 0x23, 0xa7, 0x4c, 0x4c, 0xd8, 0x5d,
+			0xa5, 0x20, 0xbe, 0x60, 0x2e, 0x75, 0x96, 0xd0,
+			0xbf, 0x39, 0x71, 0xb5, 0x16, 0xce, 0xbf, 0x37,
+			0xb5, 0x5a, 0xfc, 0xfd, 0x14, 0x7a, 0xac, 0x13,
+			0x87, 0x95, 0xcd, 0x1b, 0x89, 0x73, 0xcb, 0xd7,
+			0xdf, 0xee, 0x2e, 0xb1, 0xf3, 0x2a, 0xde, 0x77,
+			0xc9, 0x6c, 0x5c, 0xce, 0x77, 0x0d, 0xdd, 0x71,
+			0x13, 0x7a, 0xa2, 0xfc, 0xd5, 0x66, 0xc8, 0xf7,
+			0xb6, 0x98, 0xf8, 0xf1, 0x3b, 0x3f, 0x6f, 0x0e,
+			0xfe, 0x49, 0xb1, 0xbf, 0xf8, 0x29, 0xc9, 0x4c,
+			0x8b, 0xda, 0xcd, 0x15, 0x6b, 0xa5, 0xac, 0x0d,
+			0x7f, 0x4e, 0x3d, 0x15, 0x48, 0x19, 0x19, 0x59,
+			0x6a, 0xdd, 0xa7, 0x49, 0x91, 0x31, 0xe6, 0x72,
+			0x82, 0xc8, 0x27, 0x53, 0xa0, 0xcb, 0x47, 0xf4,
+			0x58, 0xd2, 0x1f, 0xd8, 0x04, 0x90, 0xc3, 0x5b,
+			0x02, 0xc2, 0x8f, 0x4a, 0x09, 0x81, 0xd0, 0xe6,
+			0x6e, 0x84, 0x82, 0x37, 0xa6, 0xb5, 0x55, 0x7e,
+			0xfd, 0xa2, 0x2b, 0x90, 0xd2, 0x2c, 0x6b, 0xab,
+			0x9b, 0x16, 0xf8, 0xe0, 0xe6, 0x02, 0xcd, 0x29,
+			0x68, 0x99, 0xaa, 0xe5, 0xca, 0x31, 0xe0, 0x7e,
+			0xca, 0x4a, 0xa4, 0xdd, 0x8c, 0x04, 0x43, 0x44,
+			0x3b, 0x73, 0x78, 0x76, 0xa6, 0x4c, 0x02, 0xf1,
+			0x00, 0x4e, 0xbc, 0xfa, 0x2e, 0xc8, 0xbc, 0x82,
+			0x04, 0x9f, 0xf5, 0x17, 0xc4, 0x91, 0x6d, 0x97,
+			0x60, 0xaf, 0xa7, 0x92, 0xd7, 0xd3, 0x19, 0x97,
+			0xba, 0x79, 0x43, 0xa2, 0x62, 0x9a, 0xf6, 0x46,
+			0xa5, 0x13, 0xa8, 0xd9, 0x7c, 0x9a, 0x31, 0x66,
+			0x5b, 0x26, 0x84, 0x69, 0x52, 0x23, 0x09, 0x49,
+			0xc5, 0x8b, 0x79, 0x16, 0x8e, 0xa0, 0x22, 0xd8,
+			0x05, 0xb6, 0x9b, 0xd3, 0xc1, 0x71, 0xec, 0xaa,
+			0xc7, 0xba, 0x07, 0xb3, 0x47, 0xbe, 0x76, 0x3b,
+			0x2b, 0x20, 0x87, 0x8f, 0xcd, 0x35, 0x91, 0x8b,
+			0x28, 0xb9, 0xa7, 0x68, 0x98, 0x82, 0x3f, 0xfb,
+			0xe3, 0x51, 0x17, 0x5c, 0xc6, 0xad, 0x81, 0xe7,
+			0x6d, 0x93, 0xf5, 0xe8, 0xc2, 0x27, 0x1a, 0xf3,
+			0x66, 0x08, 0x41, 0xa2, 0x84, 0x7f, 0x8b, 0x29,
+			0xee, 0xec, 0x77, 0xc7, 0x9b, 0x60, 0x6a, 0xc3,
+			0xb2, 0x97, 0x4b, 0x37, 0xd9, 0x69, 0xf2, 0xfe,
+			0x5f, 0xd7, 0x47, 0xff, 0x5b, 0xe1, 0x9b, 0x14,
+			0x9d, 0xb0, 0x4f, 0xd1, 0xc4, 0xc0, 0x70, 0x56,
+			0xa9, 0x64, 0xa3, 0x1c, 0xf0, 0xbd, 0x4e, 0x25,
+			0x15, 0xa6, 0x39, 0xbd, 0x7c, 0xcd, 0x06, 0x06,
+			0x55, 0x81, 0x56, 0xe7, 0x87, 0xe8, 0xb6, 0xff,
+			0xdf, 0xdd, 0x6c, 0x5f, 0x8a, 0xbb, 0x20, 0x25,
+			0x98, 0xb6, 0xbd, 0x6b, 0x20, 0x79, 0x74, 0x67,
+			0x5e, 0x43, 0xae, 0x3e, 0x9c, 0xca, 0xef, 0xdc,
+			0x1e, 0x7e, 0xaf, 0xa0, 0x63, 0x33, 0xe0, 0xb1,
+			0x32, 0xb7, 0xbc, 0x4e, 0x41, 0x9b, 0x42, 0xe4,
+			0xad, 0xb3, 0x67, 0x79, 0x8b, 0x41, 0xc2, 0xa4,
+			0x84, 0xac, 0x1d, 0xc1, 0xfe, 0xc0, 0xae, 0x35,
+			0x3f, 0xca, 0xc7, 0x2e, 0x02, 0x91, 0xd1, 0x1b,
+			0xfc, 0xa8, 0x12, 0xd2, 0x92, 0xdd, 0x53, 0x40,
+			0xa0, 0x55, 0xbd, 0x23, 0x3a, 0x88, 0xcf, 0x3f,
+			0x76, 0xf1, 0x31, 0x81, 0x7c, 0x0c, 0x17, 0x39,
+			0x94, 0xf6, 0xcc, 0x55, 0x4c, 0xe7, 0x85, 0xa6,
+			0xca, 0xc0, 0x30, 0x9a, 0x7e, 0x11, 0x41, 0x35,
+			0xb6, 0x9c, 0xa0, 0xb4, 0x08, 0xa9, 0xe4, 0x2e,
+			0x0f, 0xa6, 0x8f, 0x73, 0xb5, 0x42, 0x04, 0x7c,
+			0x69, 0x61, 0xc7, 0x5d, 0x67, 0x45, 0x6f, 0x3c,
+			0x82, 0xab, 0xac, 0x21, 0x1c, 0x11, 0x03, 0x98,
+			0x1a, 0xa4, 0xc5, 0x1b, 0x4e, 0x3e, 0xb6, 0x5e,
+			0x0a, 0xb3, 0xc3, 0x25, 0x01, 0xd2, 0x03, 0x78,
+			0xe2, 0x8b, 0x3a, 0xf5, 0xac, 0xbc, 0x48, 0xf5,
+			0x4a, 0x91, 0xc6, 0x69, 0xfb, 0x88, 0x2e, 0x52,
+			0x46, 0x96, 0xd5, 0xf6, 0x07, 0x30, 0x95, 0x85,
+			0x1e, 0xbe, 0x2d, 0x5c, 0x45, 0x72, 0xd4, 0xcc,
+			0xef, 0xfc, 0x28, 0x1b, 0xbe, 0xc4, 0x2c, 0xa5,
+			0x03, 0x15, 0xf9, 0x1e, 0x26, 0x4f, 0x47, 0xc3,
+			0x52, 0xab, 0x4b, 0x93, 0x37, 0xa3, 0x8b, 0x1c,
+			0x13, 0xbe, 0x89, 0xa3, 0x42, 0x65, 0x8c, 0x0d,
+			0x00, 0x2f, 0xce, 0x10, 0x88, 0x6e, 0x02, 0x77,
+			0x45, 0x28, 0xd0, 0xd8, 0xfc, 0xd3, 0xc2, 0x9f,
+			0x76, 0xcb, 0xf1, 0x1e, 0x67, 0xae, 0xa4, 0xde,
+			0xe4, 0xdc, 0x84, 0x12, 0x42, 0x15, 0x04, 0x89,
+			0xa0, 0xe1, 0xfb, 0xfe, 0x16, 0x07, 0x8d, 0x34,
+			0x55, 0xb7, 0x01, 0x2a, 0x6e, 0x8d, 0x50, 0xaa,
+			0x3d, 0x5e, 0x42, 0xf5, 0x6d, 0xa3, 0x0a, 0x9d,
+			0xc2, 0x91, 0xcf, 0x1d, 0x0a, 0x84, 0xbd, 0xb9,
+			0xdc, 0xa6, 0xcc, 0xa6, 0x6a, 0x96, 0x69, 0x79,
+			0xe7, 0x5b, 0xb9, 0xf9, 0x6b, 0x24, 0xf1, 0xc8,
+			0x92, 0xe2, 0x1e, 0x2a, 0x22, 0xa4, 0x7b, 0x70,
+			0xd2, 0xd7, 0xf2, 0xf1, 0x93, 0x79, 0x92, 0x0c,
+			0x4f, 0xc4, 0xad, 0x95, 0x25, 0x29, 0x04, 0xea,
+			0x72, 0xe3, 0xce, 0xd5, 0xd0, 0xc1, 0x23, 0xad,
+			0x6f, 0x3d, 0xd6, 0xa9, 0x39, 0x2b, 0x24, 0x8d,
+			0xa7, 0x72, 0x23, 0xeb, 0xa5, 0xa4, 0x11, 0x10,
+			0x4a, 0x89, 0x2f, 0x7b, 0xe5, 0x06, 0xa2, 0xaa,
+			0xd8, 0xe8, 0x96, 0xeb, 0xf1, 0x7b, 0x74, 0x06,
+			0x65, 0x10, 0x8b, 0xc3, 0xa9, 0x0f, 0xae, 0x73,
+			0xd5, 0xb0, 0xea, 0x25, 0x77, 0xfd, 0xa6, 0x41,
+			0x55, 0x85, 0x72, 0xa6, 0x9d, 0xf3, 0x94, 0x5f,
+			0x00, 0x37, 0x6f, 0x63, 0x64, 0x0c, 0x99, 0xde,
+			0x36, 0x29, 0x89, 0x98, 0x88, 0x9e, 0xd9, 0x97,
+			0x63, 0xd8, 0xfa, 0x13, 0x7a, 0x1f, 0x7e, 0x47,
+			0x6a, 0xe9, 0xac, 0x18, 0x11, 0x69, 0xf4, 0x92,
+			0x04, 0xc9, 0xec, 0x54, 0xaa, 0x69, 0x79, 0x8b,
+			0xbb, 0x49, 0x81, 0x54, 0xeb, 0x3e, 0x87, 0xcc,
+			0x63, 0xee, 0x1b, 0x07, 0x4b, 0x75, 0x93, 0x8a,
+			0x81, 0x1b, 0x5e, 0xc3, 0x05, 0x6d, 0x1d, 0x8d,
+			0x27, 0x59, 0xf7, 0xc6, 0xe9, 0x37, 0xf4, 0x71,
+			0xcd, 0x1e, 0x27, 0x84, 0xd6, 0x4e, 0x1f, 0x07,
+			0x1f, 0xe1, 0xf0, 0xaa, 0xc2, 0x71, 0x6b, 0x4f,
+			0x15, 0xcf, 0x55, 0x62, 0xda, 0xcb, 0xe1, 0x49,
+			0x7c, 0x46, 0xee, 0x58, 0x6e, 0x57, 0x09, 0xd8,
+			0xef, 0xed, 0xa3, 0x8c, 0xa2, 0x63, 0x4a, 0x23,
+			0x55, 0x04, 0x49, 0x0d, 0x47, 0x2a, 0x22, 0xf8,
+			0x1f, 0xfd, 0x99, 0xab, 0x59, 0x18, 0x45, 0x9c,
+			0xce, 0xd5, 0x37, 0x84, 0xc9, 0xe7, 0x5c, 0x9c,
+			0xb8, 0xc8, 0x91, 0x4f, 0xc7, 0x97, 0xd2, 0x1f,
+			0xb0, 0x0f, 0x2e, 0x08, 0xaa, 0x10, 0x1d, 0x21,
+			0xb9, 0xbe, 0xb3, 0xa6, 0x3b, 0x09, 0xe0, 0x40,
+			0x05, 0xc1, 0x93, 0x32, 0x9e, 0xea, 0x73, 0x9e,
+			0x30, 0xe5, 0x74, 0x72, 0xcb, 0xf2, 0xfe, 0xf9,
+			0x83, 0xf5, 0x8c, 0xc8, 0x39, 0xc7, 0x90, 0xe9,
+			0x31, 0x0e, 0xcf, 0x0e, 0xa3, 0x11, 0xee, 0x74,
+			0xd9, 0x13, 0x40, 0x42, 0xd7, 0x04, 0xbd, 0x68,
+			0x60, 0xcd, 0xe5, 0x7c, 0x40, 0x96, 0xee, 0x88,
+			0x5e, 0x1a, 0xea, 0x17, 0x40, 0x5a, 0x95, 0xe6,
+			0xa9, 0xb2, 0x5e, 0xcb, 0x8a, 0x4f, 0xca, 0x18,
+			0x35, 0x62, 0x39, 0x02, 0xdb, 0x7b, 0x92, 0x16,
+			0x03, 0x18, 0xca, 0x84, 0xf0, 0xa5, 0x23, 0xb7,
+			0x82, 0x6e, 0x47, 0x72, 0xaa, 0x07, 0xe5, 0x27,
+			0x9f, 0x8a, 0x78, 0xd8, 0xa3, 0xca, 0xa4, 0x8f,
+			0xee, 0xcc, 0xda, 0x45, 0x8a, 0x56, 0x5e, 0x0f,
+			0x83, 0x10, 0x14, 0x0c, 0x71, 0x2a, 0x8b, 0xc7,
+			0xa5, 0x25, 0x06, 0x07, 0x64, 0x2f, 0x6a, 0xac,
+			0x70, 0x36, 0xce, 0x47, 0xda, 0x1c, 0xc6, 0x80,
+			0xcb, 0xd1, 0x89, 0xd7, 0xdf, 0xfc, 0xd3, 0xb1,
+			0x15, 0xd1, 0x51, 0xa6, 0x25, 0xa0, 0xfa, 0x2d,
+			0x1a, 0x8e, 0xad, 0xc5, 0xa7, 0xeb, 0x26, 0x2c,
+			0x48, 0xf7, 0x26, 0x4e, 0x61, 0x0f, 0x79, 0x3f,
+			0x4c, 0x4d, 0x7d, 0x5c, 0x2e, 0x3d, 0x39, 0x16,
+			0x77, 0x00, 0x31, 0x1d, 0x75, 0xdf, 0xb3, 0x88,
+			0xf7, 0x4b, 0x2e, 0x30, 0x42, 0x8e, 0xbb, 0xd4,
+			0x0b, 0xf7, 0xfd, 0x4d, 0x41, 0xb5, 0x75, 0x50,
+			0xf9, 0x04, 0x3d, 0xf6, 0xbb, 0x0b, 0xf1, 0x5f,
+			0x51, 0xac, 0x3a, 0xb8, 0x95, 0xb3, 0x35, 0xf7,
+			0xea, 0x0f, 0x1b, 0xb5, 0x9c, 0xef, 0xa2, 0x34,
+			0x6e, 0xf4, 0x19, 0x47, 0xb6, 0xc8, 0xfb, 0x63,
+			0x3f, 0x60, 0x5f, 0xc6, 0x6e, 0x29, 0xce, 0x37,
+			0xe6, 0xf9, 0xf4, 0xae, 0xb7, 0xe3, 0x6b, 0x65,
+			0xd8, 0x63, 0xf0, 0x37, 0xbf, 0x53, 0xdf, 0xd4,
+			0xeb, 0xa1, 0xf1, 0xb0, 0x73, 0xe8, 0x0c, 0x12,
+			0xac, 0x71, 0xca, 0xb4, 0x0f, 0x66, 0xf6, 0x1b,
+			0x01, 0xcf, 0x36, 0x33, 0x33, 0xf0, 0xff, 0x56,
+			0x5d, 0x1b, 0x01, 0xb3, 0x12, 0x9d, 0x1e, 0x5f,
+			0x49, 0xd3, 0x56, 0x0a, 0x3d, 0xcf, 0xf7, 0x1e,
+			0x25, 0x39, 0xaf, 0x68, 0xd9, 0xa5, 0xbf, 0x5b,
+			0xed, 0x23, 0x14, 0xfb, 0x0c, 0xed, 0x74, 0x09,
+			0xd2, 0x4b, 0x81, 0x22, 0x1b, 0x4c, 0x38, 0x00,
+			0xae, 0x62, 0xf5, 0xc0, 0x72, 0x3c, 0xa8, 0x83,
+			0x4a, 0xd8, 0x6f, 0x6f, 0xbb, 0x71, 0x18, 0x68,
+			0x9f, 0x44, 0x6a, 0x6a, 0x4f, 0x93, 0x6e, 0x01,
+			0xd1, 0x40, 0x10, 0x2c, 0xaa, 0xf1, 0x94, 0xb6,
+			0x3a, 0x90, 0xb0, 0x8d, 0xa2, 0x4f, 0xaf, 0x70,
+			0xb2, 0x98, 0x4b, 0x40, 0x06, 0x47, 0x04, 0x82,
+			0x6e, 0x93, 0x09, 0x97, 0xd7, 0x96, 0x9c, 0x94,
+			0x76, 0xda, 0x01, 0xad, 0xbd, 0x2a, 0x67, 0xc3,
+			0x31, 0xd6, 0x46, 0x8b, 0x7d, 0x37, 0x4e, 0x1c,
+			0xa3, 0x24, 0xb9, 0x3a, 0x65, 0x19, 0x44, 0x85,
+			0xdf, 0x45, 0x35, 0x10, 0xc4, 0x68, 0x78, 0x45,
+			0x99, 0x60, 0x14, 0x91, 0x0b, 0x3e, 0xe3, 0xa4,
+			0xfe, 0xe6, 0x08, 0x12, 0xae, 0xc3, 0xa2, 0x8d,
+			0x48, 0xd0, 0x11, 0xd7, 0x7a, 0xd4, 0xde, 0x94,
+			0x09, 0xa5, 0xb0, 0xec, 0x3f, 0xf7, 0x49, 0xd0,
+			0x8e, 0x46, 0xf2, 0xc3, 0x3d, 0x6b, 0xaa, 0xca,
+			0x1e, 0xfa, 0x5a, 0xa6, 0x9f, 0x53, 0xca, 0x3c,
+			0xdb, 0x4b, 0xf3, 0xa0, 0xe5, 0xc9, 0xd8, 0x08,
+			0xac, 0xe0, 0x95, 0x49, 0xf0, 0x2a, 0x02, 0x29,
+			0xe0, 0xc1, 0x87, 0x53, 0x8e, 0xa4, 0xab, 0xff,
+			0xc1, 0x3f, 0x2c, 0xaf, 0x0f, 0xbd, 0x0b, 0xfc,
+			0x43, 0x2e, 0xb6, 0x9d, 0xa1, 0x93, 0x87, 0x88,
+			0xc5, 0xc4, 0x47, 0xac, 0x61, 0xa2, 0x62, 0xbf,
+			0x35, 0xab, 0x11, 0x41, 0x5d, 0xf4, 0x3b, 0x3f,
+			0xb4, 0xaa, 0x51, 0x9e, 0xee, 0x6c, 0x70, 0xc3,
+			0x4e, 0xed, 0x49, 0xfc, 0x40, 0xb2, 0x02, 0x34,
+			0x5e, 0x82, 0x30, 0x68, 0x7e, 0x1a, 0xe6, 0xcd,
+			0x84, 0xef, 0xe4, 0x33, 0x45, 0x42, 0xc4, 0x8e,
+			0x54, 0xb9, 0x4c, 0x9d, 0xbf, 0x3b, 0x76, 0xfb,
+			0xfb, 0x27, 0xd8, 0xcd, 0x2f, 0x74, 0x3c, 0xda,
+			0x0f, 0xba, 0x3d, 0x2b, 0x92, 0x48, 0x14, 0x6e,
+			0xec, 0x6d, 0x26, 0xe3, 0xa6, 0x57, 0x55, 0x82,
+			0xd0, 0x38, 0xe2, 0xef, 0xab, 0xa7, 0xb1, 0x2b,
+			0x33, 0xe6, 0xf5, 0xa3, 0x61, 0x48, 0xb2, 0xf0,
+			0x2e, 0x37, 0x94, 0x38, 0x99, 0x39, 0x8c, 0x70,
+			0x4f, 0x50, 0xa6, 0x16, 0x03, 0x45, 0x2c, 0xae,
+			0x8e, 0x75, 0x0d, 0x6e, 0x3c, 0x54, 0xab, 0x15,
+			0xf9, 0x8d, 0xa8, 0x49, 0x54, 0x93, 0x62, 0x4e,
+			0x3d, 0xfb, 0x52, 0x32, 0xb4, 0x5e, 0xe0, 0xd5,
+			0xb9, 0xec, 0x2e, 0x26, 0x5d, 0x6d, 0x3d, 0xf0,
+			0xac, 0x54, 0x3c, 0xb0, 0x9d, 0xcf, 0x63, 0x22,
+			0x8e, 0x2a, 0xe3, 0xe7, 0xf0, 0x4f, 0x51, 0x1b,
+			0xf2, 0x4c, 0xe3, 0xb4, 0xa0, 0x78, 0x2d, 0xdb,
+			0x98, 0x99, 0xc0, 0xb9, 0x43, 0xf9, 0xbe, 0x72,
+			0x90, 0x6f, 0x21, 0x41, 0xff, 0xac, 0x63, 0x61,
+			0x5f, 0x54, 0x65, 0xde, 0x2d, 0x63, 0x76, 0xbc,
+			0x3c, 0x35, 0x62, 0xb8, 0x21, 0xa8, 0x5e, 0x4c,
+			0xf4, 0xfd, 0xa9, 0x73, 0x4f, 0x8b, 0xb9, 0xd1,
+			0x07, 0x64, 0x37, 0x92, 0x66, 0x1f, 0x41, 0xe1,
+			0xa1, 0xc7, 0xd9, 0x04, 0xc7, 0x1c, 0x81, 0x6a,
+			0x7f, 0x6d, 0x80, 0xec, 0xed, 0x84, 0x8b, 0xf3,
+			0xc3, 0xa7, 0xcb, 0x12, 0x2b, 0xd6, 0x27, 0x20,
+			0x20, 0x99, 0x30, 0x37, 0x50, 0xc4, 0xac, 0x63,
+			0x12, 0xb3, 0x8a, 0xcb, 0x16, 0xf1, 0x52, 0x7d,
+			0xa5, 0xab, 0xc4, 0xea, 0x83, 0xdb, 0x52, 0xbb,
+			0x97, 0x4c, 0xf7, 0x3c, 0x81, 0x67, 0x5b, 0xd8,
+			0xf8, 0xbc, 0xab, 0xf5, 0x7c, 0x93, 0x19, 0x41,
+			0x38, 0xa6, 0x0a, 0x78, 0x07, 0x03, 0xfd, 0x66,
+			0x9b, 0x5e, 0xc0, 0x60, 0x3f, 0xf8, 0xe1, 0x12,
+			0xd9, 0x1b, 0x72, 0x80, 0x75, 0xfa, 0x38, 0xc9,
+			0xbb, 0x41, 0x6a, 0x29, 0xd0, 0x26, 0x5d, 0xa9,
+			0xa5, 0x26, 0x05, 0x5e, 0xea, 0x1f, 0x63, 0x8b,
+			0xa0, 0x41, 0x09, 0x58, 0x21, 0xa8, 0x33, 0x02,
+			0x32, 0xaf, 0x86, 0xf7, 0xdd, 0x4d, 0x80, 0xdd,
+			0x48, 0x14, 0x03, 0xe9, 0xbf, 0xed, 0xff, 0xbd,
+			0x11, 0x18, 0x49, 0x63, 0x67, 0x6d, 0x96, 0xc2,
+			0xec, 0xef, 0xf8, 0x6d, 0x7f, 0x8f, 0x99, 0xaf,
+			0xc4, 0x0b, 0x4f, 0x61, 0x67, 0x86, 0x8b, 0x97,
+			0x35, 0x98, 0xd0, 0xd5, 0xfc, 0x0d, 0x35, 0x3d,
+			0x47, 0x55, 0x56, 0x66, 0x68, 0xc5, 0xfd, 0x03,
+			0x52, 0x83, 0xa0, 0xcd, 0xea, 0x05, 0x41, 0x4a,
+			0xa5, 0xe1, 0xec, 0x14, 0x1e, 0x26, 0x29, 0x2c,
+			0x39, 0x51, 0x9c, 0x9e, 0xe5, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x0b, 0x11, 0x18, 0x1d, 0x27,
+			0x2d, 0x33, 0x3d, },
+	}, {
+		.what = "pure rejection vector",
+		.algo = "ml-dsa87",
+		.pk_len = DILITHIUM87_PUBLICKEYBYTES,
+		.pk = (const u8[DILITHIUM87_PUBLICKEYBYTES]){
+			0xf0, 0xb2, 0xb4, 0x8a, 0x7e, 0x17, 0x02, 0xdf,
+			0x75, 0xc1, 0x1f, 0xd7, 0x0f, 0xfd, 0x02, 0x86,
+			0x74, 0x08, 0xb2, 0x1a, 0xf6, 0xbd, 0xbe, 0x4e,
+			0xad, 0x38, 0x2c, 0x48, 0x2e, 0x83, 0x71, 0xbb,
+			0xc0, 0x3b, 0xa0, 0x34, 0xd5, 0xfa, 0x3e, 0xfd,
+			0xba, 0x87, 0x19, 0x3a, 0x7f, 0xe0, 0x71, 0x45,
+			0x4d, 0x0a, 0xa2, 0x15, 0x93, 0x4a, 0x0a, 0x0a,
+			0x7e, 0xb5, 0xc7, 0x1b, 0x28, 0xb1, 0x13, 0x7c,
+			0x00, 0xc6, 0x89, 0xaf, 0x7f, 0x9c, 0x44, 0xec,
+			0x31, 0xff, 0x27, 0x53, 0x7b, 0x16, 0x45, 0xe0,
+			0x9f, 0x1d, 0x80, 0x70, 0x00, 0xe2, 0xa8, 0xd7,
+			0x69, 0x7d, 0xfc, 0x43, 0xef, 0x59, 0xaf, 0xfe,
+			0xdb, 0x79, 0x1a, 0x5b, 0xc2, 0x8b, 0x73, 0x1b,
+			0x6f, 0xf0, 0x8a, 0x6f, 0xd2, 0x74, 0x75, 0xbc,
+			0x13, 0xee, 0xb3, 0x70, 0x07, 0x82, 0x66, 0x1a,
+			0xb5, 0xee, 0xa4, 0xec, 0xae, 0xce, 0x3e, 0xc1,
+			0x21, 0xa0, 0x9e, 0xa9, 0x9d, 0x15, 0x5c, 0x9d,
+			0xa8, 0xef, 0xb2, 0x1e, 0x90, 0x41, 0x70, 0xe2,
+			0x39, 0x05, 0xed, 0xb6, 0x8a, 0x09, 0xfd, 0x81,
+			0x6e, 0x9b, 0xf6, 0x77, 0xd6, 0x5c, 0x1d, 0xd2,
+			0x04, 0xb8, 0x2e, 0xae, 0xdc, 0x5e, 0x5a, 0x23,
+			0x4a, 0x07, 0x3f, 0x95, 0x96, 0xc0, 0x94, 0x1f,
+			0xd2, 0x8b, 0x58, 0x17, 0x0b, 0x7b, 0xd3, 0x70,
+			0x90, 0xe2, 0xf9, 0xcf, 0x42, 0x92, 0xc6, 0x3e,
+			0x96, 0x29, 0x4b, 0xd3, 0x76, 0xd5, 0xf3, 0xdc,
+			0xda, 0x33, 0x52, 0xfd, 0x30, 0x72, 0xc8, 0x9c,
+			0xd0, 0xca, 0x3b, 0x52, 0xfa, 0x7c, 0x2f, 0xca,
+			0x99, 0x97, 0xdf, 0x03, 0x62, 0xf2, 0x90, 0x94,
+			0xb4, 0x89, 0xda, 0x72, 0x16, 0x3d, 0xed, 0x0e,
+			0xdc, 0xe0, 0x23, 0x80, 0x43, 0x05, 0xdc, 0x42,
+			0xf8, 0x16, 0xdf, 0x4a, 0xd2, 0xeb, 0x7d, 0xb3,
+			0x5c, 0xb0, 0x86, 0xb8, 0x43, 0xd5, 0x9b, 0x88,
+			0xd0, 0xb3, 0xa0, 0x68, 0x7f, 0x1e, 0x3b, 0xe1,
+			0x2d, 0x1c, 0x3d, 0x9f, 0x12, 0x61, 0xc2, 0x55,
+			0xce, 0xd1, 0xda, 0x6e, 0x1a, 0xd5, 0x10, 0xb3,
+			0x60, 0xde, 0x90, 0x58, 0x87, 0x94, 0x73, 0x40,
+			0xde, 0xdc, 0x0d, 0x8d, 0x36, 0x0b, 0xb5, 0x2a,
+			0x28, 0xae, 0xfb, 0x39, 0x90, 0x04, 0x55, 0xfd,
+			0x88, 0x81, 0x4e, 0x68, 0x0a, 0xf0, 0xed, 0xa7,
+			0x69, 0x25, 0xd2, 0xc3, 0xcd, 0x32, 0x75, 0x49,
+			0xac, 0xc5, 0xc8, 0xb9, 0x02, 0x1a, 0xb3, 0x57,
+			0xa5, 0x30, 0xa7, 0xc1, 0x03, 0x44, 0xcf, 0x58,
+			0x00, 0xeb, 0x23, 0x4b, 0xb6, 0x3b, 0x6b, 0x5e,
+			0x20, 0xcd, 0xac, 0x4a, 0x8e, 0xc6, 0xca, 0x33,
+			0xb6, 0x17, 0x5c, 0x76, 0x15, 0x30, 0xc8, 0xb5,
+			0x6b, 0x4c, 0x68, 0x46, 0x88, 0x31, 0xca, 0xae,
+			0x45, 0xe6, 0x8f, 0x2a, 0x69, 0x29, 0xfd, 0x7c,
+			0x95, 0x31, 0xa0, 0x8b, 0xc9, 0x35, 0x50, 0x24,
+			0xb6, 0xc4, 0x94, 0xf8, 0x74, 0xe0, 0xb0, 0x5a,
+			0xd5, 0x30, 0x11, 0x49, 0x37, 0x8a, 0x53, 0x68,
+			0x9e, 0xc3, 0x9e, 0xc2, 0x4e, 0x51, 0x97, 0xd8,
+			0x1b, 0x03, 0x4f, 0xa3, 0xc8, 0x6d, 0xdf, 0xdb,
+			0x2a, 0xfe, 0xf7, 0x78, 0xf7, 0xc3, 0xa7, 0xc6,
+			0x9e, 0xce, 0xb3, 0x77, 0x8c, 0xf7, 0x95, 0x26,
+			0xe5, 0x84, 0xa0, 0x0d, 0xc6, 0x8c, 0xae, 0x1e,
+			0xed, 0x23, 0xa0, 0x0c, 0xaa, 0xa1, 0x35, 0x63,
+			0x96, 0x4a, 0x8a, 0x83, 0xee, 0x96, 0xdd, 0xf1,
+			0x1d, 0xdb, 0xc3, 0x1c, 0x6d, 0xe7, 0x5b, 0xe6,
+			0x9c, 0x89, 0xe5, 0xe6, 0x8b, 0xf3, 0x61, 0xa4,
+			0xfd, 0x9a, 0xc6, 0xc1, 0x21, 0xb3, 0x39, 0x75,
+			0xcc, 0x1d, 0x84, 0x1f, 0x5b, 0xb9, 0xbd, 0x21,
+			0x6b, 0x3b, 0xdc, 0x7b, 0x52, 0x2d, 0x65, 0xcb,
+			0x1b, 0x47, 0x8c, 0xb6, 0x33, 0x6f, 0x07, 0xb1,
+			0xc8, 0x7e, 0x9a, 0x50, 0x69, 0xfc, 0x04, 0x43,
+			0xf1, 0x79, 0xf1, 0xd6, 0x34, 0x71, 0x35, 0x82,
+			0x8f, 0xdd, 0xab, 0x09, 0xe9, 0x74, 0xa3, 0xdf,
+			0x4a, 0x51, 0x70, 0xe5, 0x68, 0xae, 0x03, 0x3d,
+			0x3c, 0xab, 0x2b, 0x4c, 0x82, 0xfb, 0xd2, 0x3d,
+			0xcc, 0x83, 0x18, 0xaf, 0xc0, 0x0e, 0xa2, 0x0c,
+			0x7a, 0x10, 0x61, 0x8a, 0x2d, 0xc0, 0x69, 0xf5,
+			0x63, 0x3d, 0x46, 0x35, 0x3e, 0xd6, 0x58, 0xe0,
+			0x91, 0xbf, 0xf8, 0xe3, 0xd6, 0xb7, 0xce, 0x93,
+			0xa7, 0xc7, 0x4c, 0x62, 0xb9, 0xc6, 0xba, 0xcf,
+			0x4e, 0x4a, 0xb2, 0x24, 0x6a, 0xab, 0x2e, 0xdb,
+			0x5f, 0x80, 0x6a, 0x6b, 0xfe, 0x5e, 0xe2, 0x94,
+			0x4e, 0x5c, 0xde, 0x5a, 0x19, 0xee, 0xe6, 0xc2,
+			0xe0, 0x22, 0xf6, 0x20, 0x31, 0x5e, 0x33, 0x6a,
+			0xc5, 0xfb, 0xa1, 0x0a, 0x6a, 0x15, 0xde, 0x1c,
+			0x5f, 0xce, 0x3f, 0x33, 0xa7, 0x7e, 0x0f, 0x07,
+			0x57, 0x7e, 0x40, 0x67, 0xd1, 0x95, 0x3f, 0x87,
+			0xb2, 0x9a, 0xef, 0xb0, 0xa2, 0x9c, 0x13, 0xf6,
+			0x45, 0xb2, 0x69, 0x3c, 0x31, 0x09, 0x2d, 0x0d,
+			0x29, 0x87, 0xb1, 0x7a, 0xb5, 0x7a, 0x03, 0x87,
+			0xc6, 0x42, 0x63, 0x72, 0xee, 0x01, 0x0f, 0xda,
+			0xb8, 0x1a, 0x14, 0x2d, 0x5d, 0x83, 0x4f, 0x56,
+			0x04, 0x83, 0xd2, 0x35, 0x37, 0xaa, 0xf8, 0xd3,
+			0xd6, 0xca, 0x2f, 0xcd, 0xfd, 0xef, 0xb3, 0xa9,
+			0x27, 0xbd, 0x93, 0xe3, 0x20, 0xda, 0xb4, 0x9e,
+			0x65, 0x33, 0x39, 0x10, 0xc2, 0x19, 0x0e, 0x6c,
+			0xaa, 0x5d, 0xc6, 0xe6, 0x96, 0x96, 0xa9, 0x78,
+			0xd1, 0x86, 0x09, 0x24, 0x2b, 0x6a, 0xce, 0x79,
+			0xa4, 0x94, 0xe1, 0xc0, 0x57, 0xac, 0x35, 0xb9,
+			0xff, 0xb2, 0x0b, 0xdf, 0x98, 0xc6, 0x0d, 0xbf,
+			0xb1, 0x4b, 0xe7, 0x30, 0x8c, 0x1c, 0x9e, 0x41,
+			0x2c, 0xa8, 0x8c, 0xb3, 0x98, 0xa0, 0x98, 0x43,
+			0x39, 0xb5, 0x0c, 0x6a, 0x6f, 0xa3, 0x1c, 0x32,
+			0xb0, 0x20, 0xe7, 0x52, 0xf2, 0x79, 0x43, 0xa7,
+			0xa8, 0xd5, 0xbc, 0x04, 0x89, 0xf3, 0x2d, 0x77,
+			0xf4, 0x44, 0x54, 0x98, 0xb2, 0xbb, 0x53, 0xbc,
+			0xc5, 0x70, 0x3f, 0x5b, 0xda, 0xcc, 0x14, 0xac,
+			0xad, 0x94, 0xd1, 0x72, 0x3f, 0x0e, 0xaa, 0x52,
+			0xc4, 0xab, 0xe8, 0xf2, 0x2a, 0x9e, 0x22, 0xda,
+			0x5f, 0x02, 0xc8, 0x0d, 0x54, 0x89, 0xfc, 0x3c,
+			0x2b, 0x44, 0x18, 0x38, 0x94, 0xbd, 0x67, 0x74,
+			0x5c, 0x27, 0x13, 0x35, 0xa0, 0x0b, 0x70, 0x19,
+			0xc4, 0xcc, 0xeb, 0xa9, 0xdf, 0xcf, 0x69, 0x9d,
+			0xcf, 0x31, 0x86, 0xa1, 0xfc, 0x0f, 0x99, 0xbe,
+			0xfb, 0xb1, 0x02, 0x0d, 0x62, 0x13, 0xc0, 0x2b,
+			0xa5, 0x53, 0x0c, 0xa1, 0x8c, 0x52, 0x47, 0xe3,
+			0x5d, 0x31, 0xdb, 0xa0, 0xf8, 0xd2, 0x13, 0xc4,
+			0xa0, 0x75, 0x37, 0x46, 0x57, 0x82, 0x50, 0xcd,
+			0x7f, 0x22, 0x93, 0x5d, 0x06, 0x26, 0x32, 0x22,
+			0x49, 0xf6, 0xd5, 0x8f, 0xab, 0x64, 0x1c, 0x63,
+			0x3b, 0xe5, 0xf9, 0xb4, 0x6e, 0x8a, 0xfe, 0x9d,
+			0x14, 0x46, 0x34, 0xc7, 0x79, 0x03, 0x21, 0x44,
+			0xf6, 0x9c, 0xad, 0x67, 0xd4, 0x79, 0x82, 0xf2,
+			0x66, 0x66, 0x8b, 0xd7, 0x9c, 0x1a, 0x83, 0xa0,
+			0xc4, 0x79, 0x9d, 0x37, 0x02, 0x1b, 0x37, 0xb3,
+			0x22, 0xea, 0x59, 0x58, 0xe1, 0x28, 0xa5, 0x7a,
+			0x69, 0x88, 0x00, 0x2f, 0xaf, 0x4f, 0x5a, 0x85,
+			0x9b, 0x17, 0xdd, 0x0e, 0x56, 0x40, 0xb5, 0xde,
+			0x26, 0xfd, 0x31, 0xeb, 0x2a, 0x9f, 0x7d, 0xaf,
+			0x55, 0xfb, 0x10, 0x27, 0xd1, 0x84, 0x2c, 0xab,
+			0xd9, 0xee, 0x1d, 0xff, 0x30, 0x73, 0xdf, 0x34,
+			0x0d, 0xe1, 0x5c, 0x9f, 0xec, 0x46, 0x0f, 0x63,
+			0xd1, 0x7a, 0x59, 0xd2, 0x9b, 0xdb, 0x98, 0xa5,
+			0x5c, 0xbd, 0x09, 0xc5, 0xce, 0xa4, 0x78, 0xf1,
+			0xf5, 0x69, 0x4a, 0x63, 0xbd, 0xae, 0x6b, 0xcb,
+			0x90, 0xa9, 0x68, 0x90, 0x30, 0x04, 0x43, 0xdd,
+			0xba, 0xed, 0xfb, 0x6e, 0xab, 0x9d, 0x35, 0xcc,
+			0x45, 0xa4, 0x07, 0xe1, 0xfd, 0x05, 0x89, 0x93,
+			0xc1, 0x09, 0xe7, 0xc0, 0x3f, 0x91, 0x95, 0xbb,
+			0xba, 0x37, 0xa7, 0x33, 0xef, 0xae, 0x1a, 0x33,
+			0xde, 0xa9, 0x41, 0x9e, 0x4a, 0x98, 0x17, 0x10,
+			0x55, 0x83, 0xee, 0x9c, 0x8e, 0x51, 0x75, 0x87,
+			0x7d, 0xcb, 0xbf, 0x4e, 0x1f, 0x0d, 0xf6, 0x43,
+			0x20, 0x5d, 0x0d, 0xf5, 0x50, 0x9e, 0x6b, 0x47,
+			0x7b, 0x8a, 0xa6, 0xa7, 0xdc, 0x78, 0xde, 0xc1,
+			0x2d, 0x5e, 0x3e, 0x94, 0x41, 0xbe, 0x59, 0x6e,
+			0x76, 0x16, 0x72, 0x31, 0xf2, 0x76, 0xb1, 0x6a,
+			0xa3, 0x74, 0x01, 0x77, 0xc5, 0x6c, 0x32, 0x7c,
+			0xb8, 0xd3, 0x09, 0x57, 0x22, 0xaa, 0x3e, 0x93,
+			0x94, 0x7d, 0x70, 0xc9, 0x81, 0xfb, 0x64, 0x6e,
+			0xaf, 0xcc, 0xe7, 0x97, 0x6b, 0x33, 0x8f, 0x3c,
+			0x82, 0xd4, 0xf6, 0xa0, 0x9a, 0x15, 0x03, 0x94,
+			0xdc, 0x35, 0xf5, 0x00, 0x66, 0xf8, 0xee, 0x85,
+			0x9c, 0xc4, 0xb1, 0xe8, 0x6b, 0x1b, 0xb2, 0x16,
+			0x0c, 0xd8, 0x86, 0xa1, 0x69, 0x34, 0x49, 0xb7,
+			0x5a, 0xe0, 0xff, 0x8b, 0x51, 0xf7, 0xbb, 0x2e,
+			0x35, 0x9e, 0xcf, 0x32, 0x01, 0x1e, 0xd0, 0x6f,
+			0xff, 0x37, 0xfe, 0xcb, 0x29, 0xc2, 0xc4, 0x74,
+			0xcd, 0xea, 0x41, 0x68, 0x06, 0x7b, 0x82, 0x1b,
+			0x23, 0xf6, 0x4a, 0x67, 0xad, 0xe2, 0x6c, 0x69,
+			0x48, 0x1b, 0x10, 0xf8, 0x14, 0x74, 0x8f, 0x87,
+			0x80, 0x2c, 0xfa, 0xd7, 0xb5, 0x3c, 0xdb, 0xbf,
+			0x2a, 0xdb, 0xe3, 0x74, 0x63, 0x36, 0xae, 0x46,
+			0x05, 0xec, 0x14, 0xbf, 0x41, 0x97, 0xea, 0x19,
+			0x49, 0x49, 0x12, 0x1e, 0xab, 0x92, 0x8e, 0x95,
+			0x38, 0x02, 0x06, 0x82, 0x87, 0x52, 0xca, 0x37,
+			0x4c, 0x88, 0x76, 0xe3, 0x0f, 0x19, 0x64, 0x52,
+			0xab, 0x78, 0x11, 0xea, 0x12, 0xa4, 0x1f, 0x75,
+			0x8c, 0x29, 0x0d, 0x78, 0x25, 0x92, 0x32, 0xf5,
+			0xe6, 0xb2, 0x84, 0xfe, 0x4b, 0x9e, 0xbf, 0xbe,
+			0x9a, 0x08, 0x97, 0x0e, 0xaa, 0x1e, 0x1a, 0x4c,
+			0x79, 0xca, 0xe1, 0x47, 0x98, 0xf4, 0xdb, 0xc1,
+			0xe0, 0x09, 0x6f, 0xcf, 0x14, 0xbc, 0x2d, 0x18,
+			0xb5, 0x14, 0x09, 0xdd, 0x27, 0x21, 0xca, 0xa6,
+			0xe8, 0x01, 0xc7, 0xd7, 0xc2, 0xad, 0x77, 0xa7,
+			0x6c, 0xd4, 0x60, 0xfc, 0x32, 0x6d, 0xfe, 0xbd,
+			0x91, 0x06, 0x0e, 0x3d, 0x1f, 0xc8, 0xbf, 0x88,
+			0x69, 0x2d, 0x6f, 0x48, 0x6f, 0x1e, 0x8b, 0xf8,
+			0xa6, 0x81, 0x2e, 0x04, 0x98, 0xb6, 0xbd, 0x0f,
+			0x10, 0x0e, 0x96, 0xf2, 0xbc, 0xfd, 0x54, 0x4e,
+			0xd3, 0x76, 0x18, 0x98, 0x68, 0xc8, 0x7c, 0x33,
+			0x0b, 0x16, 0x35, 0xf8, 0x51, 0x89, 0xd8, 0xe5,
+			0x91, 0x70, 0xac, 0x5a, 0x25, 0x6f, 0xe1, 0xf3,
+			0x1f, 0xe1, 0xd8, 0xf1, 0xd2, 0xb2, 0x03, 0xb2,
+			0xb6, 0x11, 0x58, 0x19, 0xf0, 0x2c, 0xd5, 0x21,
+			0xca, 0x2f, 0xc3, 0x15, 0xb9, 0x8d, 0xfa, 0x52,
+			0x42, 0x4c, 0x9a, 0x78, 0x38, 0xf4, 0x57, 0xee,
+			0x75, 0xbe, 0x33, 0x89, 0x9b, 0x0a, 0xa3, 0xe7,
+			0x97, 0xc4, 0x77, 0xdf, 0xa5, 0xe6, 0x05, 0xf0,
+			0x7a, 0xb9, 0x84, 0x6c, 0xa1, 0x60, 0x51, 0x46,
+			0x9d, 0xce, 0x5b, 0x30, 0x56, 0x42, 0xf2, 0x30,
+			0xf1, 0xe4, 0x5f, 0x18, 0x13, 0xe3, 0xd0, 0xea,
+			0xa1, 0xc8, 0x48, 0xb3, 0x22, 0x3b, 0x32, 0x72,
+			0x92, 0x29, 0xa4, 0xc5, 0x8e, 0xcc, 0xdd, 0x0e,
+			0x6d, 0x8b, 0x49, 0x3e, 0xe9, 0xb5, 0xbd, 0x86,
+			0x9f, 0x8d, 0xa8, 0xf4, 0x24, 0x10, 0xf6, 0x57,
+			0xd1, 0x62, 0x8f, 0xe8, 0x31, 0x8f, 0xec, 0x4b,
+			0x86, 0xc4, 0xd0, 0x33, 0x1b, 0xac, 0x4f, 0xab,
+			0x61, 0x27, 0x1a, 0xb5, 0xa9, 0x0f, 0x30, 0x6f,
+			0x51, 0x42, 0x42, 0xd6, 0x8c, 0x7e, 0x10, 0x6b,
+			0x0b, 0xa1, 0xf9, 0x64, 0x62, 0xc7, 0x9d, 0xbf,
+			0xc6, 0xca, 0x5f, 0x6e, 0xbc, 0xc4, 0xdf, 0x7a,
+			0x5c, 0x62, 0x9e, 0xd9, 0x93, 0x8a, 0x96, 0xaa,
+			0x60, 0x96, 0x30, 0xbc, 0x96, 0xc6, 0x94, 0x15,
+			0xde, 0x12, 0x93, 0x58, 0xb5, 0x5f, 0x75, 0x67,
+			0xf7, 0x0d, 0x52, 0x3a, 0xd1, 0xb1, 0xae, 0xee,
+			0x92, 0x1c, 0x75, 0x56, 0xa3, 0x38, 0x81, 0xe2,
+			0x07, 0x32, 0x44, 0xd4, 0x17, 0xd2, 0x50, 0x9c,
+			0x8e, 0xe2, 0x80, 0x7a, 0xd3, 0x52, 0x8b, 0x33,
+			0xf8, 0xaf, 0x93, 0x93, 0xd5, 0x84, 0x85, 0xf5,
+			0x4d, 0x44, 0x71, 0x35, 0x88, 0x9e, 0x6d, 0x03,
+			0xfa, 0xea, 0x06, 0x06, 0x7c, 0x6c, 0x02, 0x88,
+			0xee, 0xc1, 0xd1, 0xf4, 0xe8, 0x51, 0x39, 0xa1,
+			0x39, 0x05, 0x5e, 0x8b, 0x37, 0x6f, 0x93, 0xf0,
+			0xfb, 0x4a, 0x38, 0x35, 0x5b, 0x6f, 0x75, 0x24,
+			0xbb, 0xa1, 0x42, 0xd5, 0x39, 0xbe, 0x18, 0x58,
+			0x1b, 0x6f, 0xd1, 0xd3, 0x0a, 0x9b, 0xeb, 0xa1,
+			0x6e, 0xa5, 0x69, 0xe8, 0x76, 0xd9, 0x75, 0xf1,
+			0x6d, 0x2f, 0xc2, 0xb7, 0x30, 0x0b, 0x99, 0xe2,
+			0x33, 0x87, 0x88, 0x5a, 0xc2, 0x64, 0x0b, 0x0e,
+			0x06, 0xd6, 0x28, 0x68, 0x8c, 0xaa, 0xaa, 0xf6,
+			0x9a, 0x30, 0xd4, 0x83, 0x90, 0x15, 0x0e, 0x83,
+			0xe7, 0x8d, 0x26, 0x58, 0x6c, 0xff, 0xa3, 0x33,
+			0xcd, 0x19, 0xe8, 0xe8, 0xa6, 0x93, 0x79, 0x45,
+			0x68, 0x85, 0xcb, 0x0a, 0x3b, 0x88, 0x74, 0x40,
+			0x40, 0x1d, 0xbc, 0x08, 0xfb, 0x6b, 0x17, 0xe7,
+			0xf1, 0x9e, 0x2b, 0x98, 0xe1, 0x87, 0xd6, 0x21,
+			0xb1, 0x9d, 0x47, 0xf4, 0xe3, 0x9f, 0xfb, 0xc7,
+			0x97, 0x13, 0x31, 0x59, 0x59, 0x46, 0x69, 0x5c,
+			0xbd, 0xb7, 0xb8, 0x97, 0x4b, 0x6c, 0x46, 0x34,
+			0x49, 0xc6, 0x6e, 0xd7, 0x62, 0x66, 0x54, 0x9f,
+			0x29, 0x66, 0x54, 0x75, 0x67, 0xf0, 0x68, 0x00,
+			0x43, 0x5e, 0xac, 0xf8, 0x24, 0xbf, 0xf5, 0xfd,
+			0xb8, 0xbc, 0x6c, 0x73, 0x7f, 0x34, 0xa4, 0x27,
+			0x31, 0xdd, 0x73, 0x3b, 0x57, 0xa7, 0x76, 0x01,
+			0x98, 0xdc, 0x6c, 0x97, 0x70, 0x60, 0xbb, 0x08,
+			0x53, 0x29, 0x26, 0x53, 0x5f, 0xd6, 0x1d, 0x4e,
+			0x25, 0xa0, 0x02, 0xd3, 0x10, 0x04, 0x96, 0xa2,
+			0xcb, 0x86, 0xb4, 0xd0, 0x91, 0x30, 0xe9, 0xe4,
+			0xe5, 0x2e, 0xe3, 0x22, 0x6c, 0x2c, 0xc8, 0xb2,
+			0xa8, 0xa6, 0x0c, 0xf0, 0x18, 0xf8, 0xf1, 0x76,
+			0x8a, 0x18, 0xd1, 0xc7, 0x98, 0x3c, 0x59, 0x62,
+			0xa2, 0xcb, 0x05, 0xeb, 0xc7, 0x0d, 0xec, 0xf4,
+			0x01, 0x36, 0x94, 0x32, 0x2a, 0xe6, 0x51, 0x77,
+			0xd7, 0x8f, 0x00, 0xea, 0x7a, 0x8e, 0x58, 0x10,
+			0xc1, 0x8a, 0x7d, 0x4c, 0x0d, 0x9c, 0x1e, 0x0d,
+			0xd8, 0x9c, 0x3f, 0xf0, 0xd7, 0xaa, 0xd7, 0xf3,
+			0x43, 0x88, 0x26, 0x30, 0x68, 0xd6, 0xf1, 0x07,
+			0x0e, 0x70, 0x4c, 0xd6, 0xfb, 0x10, 0xe1, 0xd6,
+			0xae, 0x41, 0xdf, 0x78, 0x7a, 0xc6, 0x54, 0x39,
+			0x45, 0x78, 0x1d, 0x26, 0x95, 0x0b, 0x20, 0x66,
+			0x16, 0x54, 0xad, 0x5f, 0x1c, 0x66, 0xf4, 0xc2,
+			0x68, 0x54, 0xfd, 0x3e, 0x61, 0x61, 0x0a, 0xd7,
+			0x23, 0xc4, 0x5b, 0xef, 0x36, 0x3d, 0x31, 0x95,
+			0xf4, 0x42, 0x8a, 0xf7, 0x5a, 0xf8, 0x83, 0x9e,
+			0xe8, 0x68, 0x57, 0x01, 0x4e, 0x18, 0x50, 0x5b,
+			0x82, 0xcd, 0x52, 0x7d, 0xa4, 0xb6, 0x1c, 0xe5,
+			0xd9, 0x8b, 0x9c, 0xd3, 0xfa, 0xfe, 0x5b, 0x6b,
+			0x89, 0x1c, 0x1d, 0xd3, 0xd2, 0x8a, 0xf8, 0xcb,
+			0x6d, 0xcb, 0x30, 0xc4, 0x66, 0x06, 0xfb, 0x83,
+			0xec, 0xc4, 0xae, 0x59, 0xbb, 0x6c, 0xae, 0x0e,
+			0x34, 0xe5, 0x32, 0xbf, 0x1a, 0xd6, 0x72, 0x7f,
+			0x49, 0x43, 0x85, 0x1b, 0x66, 0x22, 0x9b, 0x69,
+			0x8e, 0x46, 0x05, 0x6e, 0x95, 0xa7, 0x20, 0xc0,
+			0xc8, 0x0a, 0x0c, 0x51, 0x3c, 0x70, 0xde, 0x92,
+			0x82, 0xd3, 0x2a, 0x2a, 0x89, 0x8e, 0x9d, 0xc3,
+			0x01, 0xaa, 0x80, 0x61, 0x21, 0x3e, 0x7d, 0x86,
+			0x74, 0x38, 0x78, 0x37, 0x5a, 0x1e, 0xa3, 0x8d,
+			0xa5, 0xdb, 0x05, 0xdc, 0x48, 0x8a, 0x2f, 0x80,
+			0x46, 0x7f, 0xde, 0x4b, 0x99, 0x01, 0x55, 0x0f,
+			0xe7, 0x6c, 0x49, 0x65, 0x66, 0xae, 0xc2, 0xf9,
+			0x86, 0x71, 0x26, 0xf2, 0xbd, 0x00, 0x01, 0x38,
+			0x80, 0x9a, 0x42, 0xcc, 0xb0, 0xae, 0xda, 0x5f,
+			0xf6, 0xab, 0x27, 0xa6, 0x89, 0x6a, 0xce, 0x49,
+			0xbe, 0x5d, 0x3d, 0xc3, 0xde, 0x4c, 0xc7, 0x85,
+			0x39, 0x44, 0xe0, 0x33, 0x0a, 0x05, 0x96, 0x2f,
+			0x6f, 0xfa, 0x58, 0xf3, 0x63, 0xbf, 0x28, 0xc3,
+			0xef, 0xf6, 0xcb, 0xf1, 0xee, 0x36, 0x15, 0x3f,
+			0xc2, 0x94, 0xc3, 0xe0, 0xa9, 0x5f, 0x2e, 0x1d,
+			0x35, 0xc5, 0xf8, 0xb0, 0xf9, 0xde, 0xd7, 0xcd,
+			0xbd, 0x11, 0x04, 0x37, 0x72, 0x40, 0x9c, 0x33,
+			0xff, 0x17, 0xed, 0x3b, 0x0e, 0xbc, 0x02, 0x43,
+			0xe1, 0x09, 0xa0, 0xb8, 0x13, 0x7c, 0xcc, 0xe5,
+			0x0d, 0x1a, 0xdf, 0x0a, 0x88, 0xff, 0x6c, 0xfc,
+			0x01, 0x86, 0x51, 0x7a, 0x7e, 0x4b, 0x7b, 0x98,
+			0x45, 0xed, 0x32, 0xbf, 0x3c, 0x15, 0xef, 0xa7,
+			0x08, 0xa2, 0x34, 0x9f, 0xf5, 0x0b, 0x05, 0xed,
+			0x71, 0x2d, 0x1e, 0xa5, 0xe6, 0xe7, 0x74, 0x69,
+			0x9e, 0x3e, 0x64, 0x56, 0xf5, 0x4f, 0x4f, 0xf7,
+			0x77, 0x89, 0x1b, 0xd2, 0x73, 0xaa, 0x04, 0x73,
+			0x6d, 0x23, 0xd6, 0x60, 0x17, 0x1f, 0x95, 0xdd,
+			0x38, 0xa1, 0x9a, 0x1b, 0x4f, 0x53, 0x09, 0x8c,
+			0x59, 0xa0, 0x14, 0xd4, 0x92, 0x52, 0x4f, 0x0e,
+			0x43, 0x85, 0x2d, 0xfb, 0x98, 0x1a, 0x20, 0x46,
+			0x10, 0x81, 0xbb, 0x76, 0x17, 0xa2, 0xb2, 0xc8,
+			0xc7, 0xf5, 0xc2, 0xe5, 0x64, 0xbf, 0x53, 0xe5,
+			0x66, 0xd7, 0x08, 0x45, 0xa9, 0xb3, 0x79, 0xde,
+			0x5f, 0x2d, 0xbf, 0x96, 0xfd, 0x06, 0x51, 0xc9,
+			0x92, 0x78, 0x9b, 0x85, 0xdc, 0x77, 0x9f, 0xb7,
+			0x21, 0x52, 0xaf, 0x4b, 0x39, 0x10, 0x33, 0xef,
+			0x8c, 0x80, 0xac, 0x3e, 0x7b, 0x8a, 0x0f, 0x42,
+			0xed, 0x8f, 0xe1, 0xbc, 0x34, 0x32, 0x3b, 0xbd,
+			0xed, 0x94, 0x38, 0xa6, 0x77, 0x1a, 0xbf, 0xf6,
+			0x85, 0x22, 0xb7, 0x19, 0x9f, 0x27, 0xdf, 0x7a,
+			0x17, 0xcf, 0xc3, 0x61, 0x0d, 0xd5, 0x13, 0x6c,
+			0x3b, 0xa7, 0xb4, 0x26, 0x7b, 0x24, 0xf6, 0xd2,
+			0x6f, 0xdc, 0x48, 0xb3, 0xfc, 0x21, 0x68, 0x9f,
+			0xb3, 0xaf, 0x1e, 0x55, 0x7e, 0x7c, 0x2c, 0xa9,
+			0xb7, 0x19, 0x65, 0xf0, 0xc5, 0x79, 0x4b, 0x2c,
+			0x66, 0x83, 0xb7, 0xef, 0x00, 0x80, 0x8e, 0x1b,
+			0xc7, 0x62, 0xaf, 0x4d, 0x01, 0x96, 0x83, 0xb2,
+			0xda, 0x70, 0x0d, 0x18, 0xfa, 0x46, 0x2f, 0xaa,
+			0xaa, 0x2f, 0x99, 0x09, 0xa4, 0x85, 0x8a, 0xf7,
+			0x09, 0x20, 0xba, 0x08, 0x9c, 0xba, 0x87, 0xa1,
+			0x8c, 0xb0, 0x73, 0xee, 0x38, 0xb8, 0xde, 0x17,
+			0xe1, 0x8c, 0xcf, 0xa1, 0x2b, 0x98, 0xcf, 0x51,
+			0x7c, 0x60, 0x80, 0x26, 0x4a, 0x16, 0x0f, 0x50,
+			0x96, 0xab, 0x1e, 0x92, 0x12, 0xd3, 0x83, 0x4e,
+			0x50, 0x93, 0x19, 0x21, 0xdb, 0x69, 0x06, 0xf4,
+			0x69, 0xea, 0xc7, 0x1c, 0x86, 0xe5, 0x76, 0xb4,
+			0x4e, 0xc3, 0x15, 0xf8, 0x8a, 0xa9, 0xea, 0x1c,
+			0x41, 0x8f, 0xb1, 0xc4, 0x94, 0x8e, 0xed, 0x3a,
+			0xc0, 0xdf, 0x72, 0x6a, 0x49, 0x84, 0x2a, 0xa6,
+			0xe4, 0x14, 0x6d, 0xa1, 0x46, 0xa1, 0x0e, 0x61,
+			0xda, 0x38, 0xd3, 0x09, 0x8e, 0x03, 0xdf, 0x3c,
+			0xd9, 0x16, 0x34, 0x41, 0x8a, 0xb8, 0x71, 0x8f,
+			0x30, 0x44, 0x8f, 0x8f, 0xdf, 0x8d, 0x58, 0x30,
+			0xe1, 0xdc, 0x87, 0xf5, 0x74, 0xd3, 0xb9, 0xb0,
+			0xc9, 0xdd, 0x51, 0x2c, 0x4c, 0x2b, 0x56, 0xb3,
+			0xf8, 0xbe, 0x70, 0x21, 0xb4, 0x67, 0xc7, 0x06,
+			0x9b, 0xbd, 0x89, 0xb6, 0xfb, 0x7b, 0x5e, 0x37,
+			},
+		.msg_len = 64,
+		.msg = (const u8[64]){
+			0xa2, 0xec, 0x18, 0x06, 0x52, 0x37, 0x8a, 0x91,
+			0x70, 0xea, 0x93, 0x79, 0xad, 0x55, 0x5f, 0x11,
+			0xe6, 0x4a, 0xc7, 0x80, 0x05, 0x18, 0x36, 0xfd,
+			0x12, 0xa6, 0x8b, 0x61, 0x5c, 0xf8, 0xea, 0xb0,
+			0x34, 0x02, 0xc2, 0x5a, 0x1b, 0x22, 0x61, 0x78,
+			0xb2, 0x97, 0xb8, 0xd5, 0x5a, 0x9b, 0x6d, 0x09,
+			0xb6, 0xaf, 0x84, 0x0b, 0xb2, 0x51, 0x6e, 0x9f,
+			0x9e, 0x30, 0xec, 0x80, 0x79, 0xda, 0x14, 0x22,
+			},
+		.sig_len = DILITHIUM87_CRYPTO_BYTES,
+		.sig = (const u8[DILITHIUM87_CRYPTO_BYTES]){
+			0x48, 0x35, 0xc3, 0x69, 0x56, 0x2d, 0xef, 0xbf,
+			0xd9, 0x1b, 0x71, 0xce, 0x99, 0x94, 0x1c, 0x02,
+			0xc6, 0x8c, 0x36, 0xc6, 0x76, 0x91, 0x59, 0xfa,
+			0xbf, 0x68, 0xf3, 0x68, 0xe4, 0x6c, 0x75, 0x1c,
+			0x5d, 0x63, 0xbb, 0x33, 0x55, 0x39, 0x83, 0x85,
+			0xeb, 0x76, 0x5d, 0x84, 0xf5, 0x46, 0x42, 0x89,
+			0x69, 0xf7, 0x51, 0x5c, 0xf9, 0x83, 0x77, 0xde,
+			0xbb, 0xfe, 0x08, 0xb2, 0x63, 0x2e, 0x91, 0x6b,
+			0x76, 0x88, 0x3a, 0xea, 0xcd, 0xd5, 0x70, 0x84,
+			0x06, 0x5d, 0xab, 0x55, 0x51, 0x75, 0x8e, 0xfa,
+			0x09, 0xea, 0x73, 0x38, 0xe4, 0xf8, 0xbc, 0x98,
+			0x26, 0x2f, 0x1f, 0x61, 0x93, 0x86, 0xd8, 0x1d,
+			0xcf, 0x2d, 0xa5, 0x60, 0x16, 0x91, 0x9a, 0xc2,
+			0x04, 0xc3, 0x26, 0x56, 0xf2, 0x1d, 0x68, 0x87,
+			0xaa, 0xdd, 0xf8, 0xff, 0x80, 0xaa, 0x63, 0x1e,
+			0xa8, 0x6e, 0xed, 0xff, 0xbf, 0x2c, 0x69, 0x35,
+			0x41, 0x77, 0xa3, 0x5f, 0x1e, 0xb1, 0xb9, 0x2b,
+			0x60, 0x7e, 0x9d, 0x4e, 0xee, 0x3d, 0x52, 0x88,
+			0x23, 0x58, 0xf8, 0x35, 0x19, 0x5d, 0x74, 0x7c,
+			0x84, 0xac, 0x16, 0xa6, 0x77, 0xfd, 0x2c, 0xee,
+			0x1a, 0xdc, 0x98, 0xe4, 0x05, 0xbb, 0xd3, 0x2c,
+			0x57, 0xd9, 0x25, 0x6d, 0x0f, 0x7f, 0x7c, 0xd8,
+			0xa7, 0x16, 0x37, 0xc9, 0x34, 0x12, 0xb0, 0xb3,
+			0x33, 0x82, 0x26, 0xb7, 0x60, 0xec, 0xbf, 0xde,
+			0x39, 0xe7, 0x2f, 0x8c, 0x9f, 0x50, 0xce, 0x65,
+			0x86, 0xd1, 0xe8, 0x5b, 0x35, 0x87, 0x1a, 0xc0,
+			0x30, 0x34, 0x3c, 0xef, 0x06, 0x07, 0x97, 0x8c,
+			0x4d, 0x9b, 0x75, 0x15, 0xce, 0x70, 0x87, 0xd3,
+			0xd0, 0x7f, 0xfd, 0x08, 0xfe, 0x51, 0x23, 0xed,
+			0x07, 0x6c, 0xc4, 0x44, 0x47, 0x45, 0xf7, 0x15,
+			0x0c, 0x52, 0xe9, 0xfe, 0x16, 0xbc, 0x0f, 0x7d,
+			0x2a, 0x96, 0x0f, 0xa2, 0xf8, 0x4d, 0x7f, 0x27,
+			0x0f, 0x2a, 0xa4, 0xab, 0x73, 0x96, 0x68, 0xe1,
+			0xe8, 0xdb, 0x6a, 0xa1, 0x0e, 0x64, 0x08, 0x1d,
+			0x71, 0xb9, 0x79, 0x04, 0x72, 0xe1, 0x7c, 0x29,
+			0x3d, 0xe4, 0x41, 0xd2, 0x34, 0x15, 0x08, 0x68,
+			0xdc, 0x7b, 0x79, 0x19, 0xab, 0xb9, 0xcb, 0x0a,
+			0x6a, 0x56, 0x3c, 0x56, 0xbd, 0xe3, 0x9b, 0xea,
+			0xc4, 0x09, 0xae, 0xf8, 0x8b, 0xe0, 0x2d, 0xb0,
+			0xff, 0x3c, 0xd3, 0xc5, 0xe2, 0x5b, 0xf6, 0xfa,
+			0x5e, 0x58, 0xa6, 0x72, 0xcf, 0xa3, 0xdb, 0x66,
+			0x2e, 0x21, 0x71, 0x76, 0xfd, 0x68, 0x07, 0xea,
+			0x21, 0xaf, 0xa0, 0xc5, 0x17, 0x32, 0x6e, 0x10,
+			0x60, 0xeb, 0x86, 0xe9, 0x02, 0x43, 0x32, 0xcf,
+			0x81, 0x64, 0x0c, 0xff, 0xcc, 0x92, 0x19, 0xbd,
+			0x73, 0x99, 0x0e, 0xd3, 0x4b, 0xdd, 0xc6, 0x7b,
+			0xc5, 0xff, 0xef, 0x04, 0xc0, 0x79, 0x7e, 0x88,
+			0x17, 0xcf, 0x09, 0x37, 0x5c, 0x87, 0x18, 0xd4,
+			0xd0, 0x21, 0x68, 0xc0, 0xea, 0x47, 0xec, 0xcf,
+			0xec, 0xab, 0x98, 0x61, 0x88, 0xec, 0x02, 0x4f,
+			0x22, 0x8c, 0x77, 0xbb, 0x6e, 0x5b, 0xfc, 0xfc,
+			0xd0, 0x0d, 0xca, 0x49, 0xda, 0x37, 0x0a, 0x0a,
+			0xdf, 0x6f, 0xab, 0x75, 0xba, 0xbe, 0x7c, 0x70,
+			0x09, 0x83, 0x56, 0xcd, 0x12, 0x56, 0x25, 0x31,
+			0xbd, 0x41, 0x50, 0x93, 0x1f, 0x18, 0x74, 0x48,
+			0xbd, 0x7c, 0x19, 0x03, 0x0a, 0x06, 0x97, 0x28,
+			0x51, 0x4f, 0x5b, 0x8e, 0xa6, 0xf6, 0x7f, 0x50,
+			0x15, 0x69, 0xee, 0x56, 0xa0, 0x97, 0x9d, 0x76,
+			0x40, 0x5e, 0x7d, 0x10, 0x23, 0xd5, 0xba, 0x0b,
+			0x2a, 0x9e, 0x8f, 0x57, 0xf8, 0x58, 0x12, 0x0f,
+			0x0b, 0x4c, 0xee, 0x39, 0x77, 0xec, 0x86, 0xb6,
+			0x1e, 0xb9, 0x5d, 0x11, 0x9d, 0xac, 0x4d, 0x15,
+			0xa9, 0x6f, 0x45, 0xbf, 0xb0, 0x56, 0xd2, 0xc0,
+			0xc8, 0x63, 0xf2, 0x53, 0x90, 0xf3, 0x68, 0x88,
+			0xc8, 0xc9, 0xdd, 0x9b, 0xdd, 0x6c, 0x4e, 0x6e,
+			0xd0, 0x63, 0xd7, 0x6f, 0x8a, 0x39, 0xd9, 0x96,
+			0xf9, 0x0d, 0x4e, 0x0a, 0xf3, 0xc6, 0x80, 0x34,
+			0x10, 0xab, 0xfd, 0xc2, 0x52, 0xec, 0xc7, 0x00,
+			0x34, 0xb4, 0xbc, 0xc9, 0x11, 0xdd, 0x6d, 0xa0,
+			0xba, 0x94, 0xe8, 0xa2, 0xf9, 0x2d, 0x58, 0x70,
+			0xd5, 0x92, 0xa9, 0xae, 0x7f, 0x8b, 0x32, 0x44,
+			0x9b, 0xf6, 0x17, 0x23, 0x03, 0x7c, 0x06, 0x55,
+			0x91, 0xdc, 0x85, 0x1b, 0x13, 0x44, 0x9c, 0x36,
+			0xbb, 0x19, 0x0b, 0xc8, 0x05, 0x96, 0xbe, 0xf3,
+			0x1e, 0xd1, 0x9d, 0xbb, 0xf8, 0x4f, 0x5a, 0xd8,
+			0x95, 0x90, 0x49, 0xab, 0x23, 0x95, 0x3b, 0x63,
+			0x4c, 0xcb, 0x6b, 0x61, 0xf7, 0x2b, 0x88, 0xce,
+			0x42, 0x6d, 0x7e, 0x57, 0x4e, 0xfd, 0x43, 0xc5,
+			0xe5, 0xe0, 0xd3, 0xe4, 0x87, 0x63, 0xdd, 0xe8,
+			0x36, 0x58, 0x41, 0x4e, 0x46, 0x44, 0x3b, 0x9d,
+			0x85, 0xba, 0x29, 0xe0, 0xad, 0x21, 0x17, 0x1b,
+			0xd4, 0x7a, 0xa6, 0xb6, 0xf7, 0x0e, 0x9a, 0xc3,
+			0x29, 0xd1, 0x9e, 0xba, 0x16, 0x4c, 0xee, 0xd5,
+			0x8d, 0x73, 0xf7, 0xe3, 0xe9, 0xbb, 0x2a, 0xad,
+			0x3e, 0xe2, 0x32, 0xfa, 0x9f, 0x5a, 0x2f, 0x59,
+			0x06, 0x49, 0x8b, 0x73, 0xa0, 0x2c, 0xd2, 0xa4,
+			0x79, 0xa1, 0x9b, 0xf1, 0x4a, 0x19, 0x8e, 0x68,
+			0x18, 0xf1, 0xd7, 0x5d, 0x43, 0xa6, 0xcd, 0x69,
+			0x9e, 0xda, 0x2b, 0x4f, 0x61, 0x5b, 0x48, 0xb5,
+			0x09, 0x3c, 0x91, 0x44, 0x6d, 0x99, 0xc4, 0xaf,
+			0xae, 0x83, 0x74, 0x66, 0xe8, 0x06, 0x6e, 0x54,
+			0x6b, 0x5b, 0x4e, 0x7f, 0xaf, 0xbb, 0x18, 0x43,
+			0x62, 0xc2, 0xb6, 0xd6, 0x23, 0x77, 0x02, 0xdc,
+			0x3a, 0x1c, 0x24, 0x74, 0x3d, 0x6f, 0x01, 0x1a,
+			0xc0, 0x52, 0xa0, 0xe8, 0xa8, 0xe8, 0xc1, 0xd4,
+			0x64, 0xc1, 0x9f, 0x92, 0xcd, 0x14, 0x9c, 0x86,
+			0x01, 0x4c, 0xf0, 0x77, 0x64, 0x97, 0xdf, 0xd5,
+			0xd7, 0x37, 0x72, 0x3a, 0x25, 0x9a, 0x36, 0xb0,
+			0xc1, 0x6e, 0x1a, 0xc2, 0x3d, 0x3f, 0x49, 0xf3,
+			0x89, 0x98, 0xb9, 0x35, 0x0f, 0x8f, 0x53, 0x49,
+			0x4e, 0x65, 0xa9, 0xe1, 0x30, 0x9f, 0xa6, 0x2c,
+			0xbe, 0xd2, 0x60, 0x4a, 0x57, 0x51, 0xb9, 0x16,
+			0x7c, 0x72, 0x82, 0xf4, 0x93, 0x4e, 0x34, 0xeb,
+			0x60, 0xb2, 0x2f, 0x2a, 0xe5, 0x43, 0x14, 0xa7,
+			0x9c, 0x04, 0xf3, 0x76, 0xfe, 0x7d, 0xf7, 0x9e,
+			0xb3, 0xe7, 0xbb, 0x16, 0x0c, 0xb0, 0xb3, 0x4f,
+			0xd0, 0x18, 0x2e, 0x57, 0x2c, 0x93, 0xaf, 0xed,
+			0xf3, 0x4a, 0x2b, 0x91, 0xfe, 0x29, 0x0e, 0x83,
+			0x9d, 0x6a, 0x20, 0xe4, 0x3e, 0x42, 0x64, 0x54,
+			0x0b, 0xce, 0x78, 0xaa, 0xf6, 0x86, 0x21, 0xf8,
+			0xf4, 0x81, 0x75, 0xe2, 0xb1, 0xb9, 0x6d, 0x00,
+			0xb4, 0x5f, 0x7a, 0x1c, 0xd3, 0x1b, 0x7b, 0x76,
+			0xd1, 0x62, 0x6f, 0xb0, 0xb7, 0x41, 0xfc, 0xea,
+			0xa2, 0xd0, 0xc2, 0x37, 0x14, 0xaf, 0x89, 0x61,
+			0x78, 0x23, 0x2b, 0x35, 0x65, 0xf9, 0xab, 0xfe,
+			0xeb, 0xe2, 0x34, 0x02, 0x55, 0x65, 0xe1, 0xa9,
+			0x3b, 0xe5, 0x5e, 0x45, 0xce, 0x17, 0x91, 0xd6,
+			0x68, 0xb2, 0x9d, 0xa1, 0x2f, 0x4a, 0x4b, 0xdb,
+			0x23, 0xfb, 0xbc, 0x73, 0x04, 0x0d, 0x42, 0x24,
+			0x37, 0x22, 0x22, 0x76, 0x74, 0xc7, 0xc9, 0xfc,
+			0xb0, 0x4b, 0x62, 0x85, 0xd5, 0x12, 0xa4, 0x65,
+			0xb7, 0xb0, 0x88, 0xe1, 0x0f, 0xec, 0xaa, 0x81,
+			0xcd, 0x76, 0x10, 0x0f, 0x53, 0x62, 0x23, 0x0a,
+			0xf6, 0xb2, 0x1a, 0xe6, 0xf4, 0xb9, 0xef, 0xb1,
+			0x3d, 0x16, 0x8a, 0xef, 0x6d, 0x7b, 0xfb, 0x42,
+			0x27, 0xbf, 0x16, 0x7d, 0xab, 0xb0, 0x4e, 0x57,
+			0x32, 0x31, 0x96, 0x65, 0xac, 0xf3, 0x43, 0x3e,
+			0xa1, 0x8a, 0xbb, 0xa9, 0xcc, 0x2c, 0x7e, 0xbd,
+			0xda, 0x0a, 0x65, 0x91, 0x83, 0x17, 0x02, 0x3f,
+			0x4f, 0xe6, 0xa2, 0xf9, 0x69, 0x3b, 0xeb, 0xb7,
+			0xea, 0x05, 0x9e, 0x8f, 0x38, 0xd1, 0x2b, 0xa1,
+			0x0a, 0x6c, 0x0c, 0xb2, 0x17, 0xe5, 0x71, 0x77,
+			0x93, 0xdc, 0x94, 0x70, 0x1d, 0x65, 0x41, 0x9d,
+			0x49, 0xde, 0xb7, 0xf9, 0x23, 0x2a, 0xd4, 0x0a,
+			0xa9, 0x25, 0x4f, 0x87, 0xec, 0x31, 0x7b, 0x7e,
+			0x1c, 0x3c, 0xf6, 0x62, 0x2e, 0x76, 0x5a, 0x83,
+			0x2b, 0x41, 0x9b, 0xb0, 0x44, 0xbd, 0x11, 0xf2,
+			0x67, 0x53, 0xcb, 0x52, 0x38, 0xcd, 0xed, 0x23,
+			0xd6, 0xd1, 0x95, 0xb0, 0xa5, 0x83, 0x50, 0x41,
+			0x0c, 0x1b, 0x87, 0xa1, 0xed, 0x99, 0x10, 0x8c,
+			0x3f, 0x44, 0x68, 0xc2, 0x76, 0x99, 0x07, 0x3d,
+			0x5c, 0x67, 0x57, 0x5f, 0x66, 0xfc, 0x74, 0x2d,
+			0xae, 0xec, 0x90, 0xa3, 0x09, 0x54, 0xc8, 0xbd,
+			0xbe, 0xd1, 0x57, 0x99, 0xc1, 0xdf, 0x8c, 0xa1,
+			0xf2, 0x29, 0x5d, 0xc0, 0xbe, 0x2c, 0x08, 0x35,
+			0x46, 0x3d, 0x37, 0x8c, 0xde, 0x9f, 0xff, 0x4c,
+			0x0d, 0xc4, 0x6b, 0xf9, 0x57, 0x17, 0xf0, 0x9d,
+			0xa8, 0x32, 0xa8, 0xfa, 0xe0, 0x98, 0x8f, 0x7f,
+			0x91, 0x77, 0xc7, 0x9c, 0x2e, 0x8d, 0x4d, 0x27,
+			0x66, 0xbf, 0x6b, 0x0a, 0x74, 0x74, 0x70, 0xdb,
+			0x03, 0x6e, 0x0f, 0x36, 0xd7, 0xa5, 0x7d, 0x93,
+			0x32, 0xa7, 0xde, 0xa9, 0xe1, 0x97, 0xd8, 0x63,
+			0x11, 0x34, 0x20, 0x1b, 0x57, 0xbc, 0x90, 0xd5,
+			0x40, 0x83, 0xdc, 0xae, 0xb0, 0x47, 0x81, 0x7c,
+			0x4c, 0x9b, 0x4d, 0xa8, 0x34, 0xba, 0x14, 0xe1,
+			0x1e, 0xee, 0x3b, 0xfd, 0xb4, 0x20, 0xdb, 0x6a,
+			0xd9, 0x15, 0x41, 0xf6, 0x8c, 0xa6, 0x87, 0x63,
+			0xc6, 0x95, 0xae, 0x65, 0x40, 0x33, 0x26, 0x8a,
+			0x78, 0x86, 0x97, 0x25, 0xac, 0xb4, 0xe8, 0xf8,
+			0x96, 0xd3, 0x3b, 0xd4, 0x92, 0xaf, 0xa9, 0x60,
+			0x21, 0x3c, 0xb5, 0x92, 0x9d, 0xa8, 0x87, 0x82,
+			0xcc, 0x25, 0xe2, 0x1b, 0xbb, 0x99, 0xfe, 0x68,
+			0x6f, 0x0b, 0x44, 0x47, 0x3c, 0x90, 0x89, 0x12,
+			0xb8, 0xd7, 0xcf, 0x87, 0x82, 0x6c, 0xb0, 0x00,
+			0x79, 0xf0, 0xe1, 0xcf, 0xfe, 0x85, 0xec, 0x58,
+			0x8e, 0x47, 0xd6, 0x65, 0xcd, 0xe4, 0xc3, 0x4f,
+			0x80, 0xeb, 0xf6, 0xd1, 0x01, 0x9f, 0xe1, 0x08,
+			0xae, 0x44, 0x9e, 0x29, 0xa3, 0x6d, 0xad, 0xd7,
+			0x7e, 0x32, 0x83, 0x29, 0x9a, 0x65, 0xbd, 0xfe,
+			0x9a, 0x3f, 0x8f, 0xa5, 0x72, 0x63, 0xd2, 0xf7,
+			0xe0, 0x99, 0x61, 0x0f, 0xbb, 0xb7, 0x76, 0xe6,
+			0xf7, 0xa7, 0x49, 0x51, 0xc4, 0x0c, 0xea, 0xfb,
+			0xd3, 0xc7, 0xbd, 0x47, 0x9b, 0xf9, 0x5d, 0x6e,
+			0xe0, 0x44, 0xcb, 0xbc, 0x2c, 0x44, 0xd2, 0x1e,
+			0xae, 0xb6, 0x89, 0x2b, 0xfa, 0x51, 0x75, 0xdf,
+			0x81, 0x70, 0x5f, 0x6b, 0x4e, 0x15, 0xb4, 0x6c,
+			0xfd, 0xfb, 0x1c, 0x58, 0x22, 0xbd, 0xee, 0xab,
+			0xc9, 0x59, 0x81, 0xcf, 0x82, 0x3c, 0xe3, 0x6f,
+			0x6c, 0xb9, 0xcc, 0xcc, 0x3d, 0x77, 0x48, 0x4b,
+			0x8a, 0xee, 0x0c, 0x8d, 0x8a, 0xcb, 0x5a, 0x31,
+			0x0c, 0x7e, 0xe2, 0x08, 0xeb, 0x02, 0x13, 0xe8,
+			0xa9, 0x3c, 0xd7, 0xd5, 0x89, 0x5a, 0x36, 0xd4,
+			0x49, 0x4c, 0xc3, 0x48, 0x21, 0x4c, 0x7d, 0x00,
+			0x78, 0xc3, 0x6c, 0xc3, 0x89, 0xdc, 0x20, 0xf1,
+			0xcf, 0xb1, 0x91, 0x8a, 0x4f, 0x4d, 0x4a, 0x22,
+			0xb7, 0xec, 0xff, 0x8e, 0xd2, 0xd1, 0x5f, 0x3e,
+			0x78, 0x6b, 0x32, 0xd6, 0x76, 0x12, 0x4f, 0x33,
+			0xe7, 0x02, 0xf6, 0xbe, 0xc8, 0xd8, 0x27, 0x0b,
+			0xc9, 0xef, 0x1a, 0x30, 0x44, 0x4a, 0xb1, 0x55,
+			0x5f, 0xbc, 0xc6, 0x5b, 0x57, 0x9f, 0xa9, 0x5a,
+			0x3c, 0xec, 0xb5, 0x3a, 0x20, 0xdc, 0xae, 0xeb,
+			0x1c, 0x66, 0xc9, 0x84, 0x05, 0xb3, 0x18, 0xcc,
+			0x07, 0x93, 0xed, 0xd3, 0xf3, 0x6c, 0x2b, 0xe9,
+			0x38, 0x1a, 0x0f, 0xc8, 0x19, 0x63, 0xa4, 0x9b,
+			0x95, 0x07, 0x8c, 0x26, 0xa2, 0x68, 0x78, 0x1b,
+			0xbf, 0x8f, 0x90, 0xfd, 0xdd, 0x96, 0xf5, 0xe2,
+			0xc7, 0x25, 0xc8, 0xbc, 0x80, 0x3e, 0x49, 0x05,
+			0xf5, 0x62, 0xc4, 0x57, 0xe5, 0xa0, 0x42, 0xee,
+			0xd6, 0xfe, 0x3d, 0xf4, 0x9e, 0x61, 0xf8, 0x6e,
+			0x34, 0x7b, 0xea, 0x75, 0x9c, 0x29, 0xf0, 0xff,
+			0xd0, 0x45, 0xf2, 0x9c, 0x0a, 0x0f, 0x05, 0xc1,
+			0x71, 0xed, 0x42, 0xb4, 0x46, 0x2b, 0x22, 0xce,
+			0x06, 0xad, 0x67, 0x64, 0x7f, 0x2c, 0x7d, 0x07,
+			0x54, 0x12, 0x01, 0xee, 0x35, 0xd8, 0xbd, 0x66,
+			0x1c, 0xc8, 0x2f, 0xe8, 0x9a, 0xda, 0x40, 0xb7,
+			0x31, 0xdf, 0x59, 0x35, 0x3e, 0x67, 0xf2, 0xf2,
+			0x10, 0x31, 0x11, 0x60, 0x2b, 0x2d, 0x85, 0x88,
+			0x71, 0xfd, 0x34, 0x03, 0x83, 0x98, 0xf7, 0x11,
+			0x2b, 0xc0, 0x25, 0x0b, 0x39, 0xe4, 0xd0, 0xa9,
+			0x00, 0xa9, 0xa8, 0x88, 0x38, 0x87, 0x64, 0xc0,
+			0xb3, 0xc3, 0x5f, 0x9f, 0xd3, 0x48, 0x4c, 0xc3,
+			0x4c, 0x5f, 0x42, 0x6f, 0x2d, 0xfd, 0xb1, 0x52,
+			0x35, 0xf8, 0xf1, 0x83, 0x94, 0x89, 0xf0, 0x9a,
+			0xc0, 0x70, 0x66, 0xa6, 0x06, 0x6b, 0x7b, 0x4d,
+			0xe1, 0xb5, 0x37, 0xc6, 0xa8, 0xe3, 0x67, 0xdb,
+			0x23, 0x40, 0x98, 0xd4, 0xf0, 0x5d, 0x6f, 0xe9,
+			0x21, 0x28, 0x13, 0xe5, 0xbb, 0x06, 0x9e, 0xc6,
+			0x11, 0xa4, 0xa3, 0x2c, 0x0f, 0x31, 0x15, 0x75,
+			0xe2, 0x95, 0x04, 0x0c, 0xc5, 0x94, 0x7e, 0xea,
+			0x77, 0x05, 0x47, 0xe9, 0x9b, 0x71, 0x80, 0xd6,
+			0x01, 0xa4, 0x78, 0x9f, 0xdc, 0x62, 0xc3, 0x0f,
+			0x8b, 0x6f, 0x4c, 0x7e, 0xc1, 0x97, 0x87, 0x01,
+			0x9c, 0xc1, 0x46, 0x45, 0x98, 0xa6, 0x65, 0x93,
+			0xc5, 0x3c, 0xa1, 0x55, 0x3a, 0x7d, 0xf7, 0xa6,
+			0x31, 0x7c, 0x5d, 0x2c, 0x4c, 0xe7, 0x74, 0xb2,
+			0x02, 0x1f, 0xb4, 0x2e, 0x24, 0x5f, 0x8c, 0xa0,
+			0x7c, 0xd1, 0xc4, 0x29, 0x14, 0x49, 0xfa, 0x4b,
+			0x09, 0x97, 0x8e, 0x30, 0xea, 0x3f, 0xd9, 0x16,
+			0x1c, 0x38, 0x72, 0x3c, 0xe9, 0x2a, 0x84, 0x20,
+			0xb4, 0xa7, 0x34, 0x52, 0x5b, 0xa6, 0x68, 0x49,
+			0xa6, 0xd6, 0xe0, 0x72, 0xa9, 0x28, 0x83, 0xf7,
+			0x4f, 0x96, 0xbc, 0x7f, 0x97, 0x07, 0xe2, 0x9a,
+			0xdf, 0xe0, 0x89, 0xdd, 0x0c, 0x37, 0xb8, 0x90,
+			0xde, 0xc8, 0x53, 0x51, 0xb1, 0x36, 0xcf, 0xd3,
+			0x42, 0xf6, 0xed, 0x7c, 0x3f, 0xd2, 0x05, 0x67,
+			0xe0, 0x23, 0x6c, 0x4e, 0xae, 0x3c, 0xa4, 0x8b,
+			0x67, 0x0e, 0xda, 0x62, 0xd4, 0xf0, 0x3f, 0x33,
+			0xdb, 0x23, 0x00, 0x0e, 0xc8, 0x2e, 0xd0, 0xb0,
+			0x7a, 0x58, 0x66, 0xa1, 0x62, 0x02, 0x84, 0xf2,
+			0xad, 0xf8, 0xf6, 0xf0, 0x0a, 0xd8, 0xc4, 0xa9,
+			0x58, 0x50, 0x45, 0xf6, 0x56, 0x58, 0x26, 0x95,
+			0xb2, 0xe1, 0x5b, 0x5d, 0x8a, 0x2b, 0x94, 0x6d,
+			0xc1, 0xf5, 0xbe, 0xdb, 0xef, 0x67, 0x1d, 0x1f,
+			0xff, 0xb3, 0x28, 0x14, 0x9d, 0xe2, 0xcf, 0xc2,
+			0xf2, 0x84, 0xbc, 0xf1, 0xd1, 0x49, 0xc4, 0x26,
+			0x57, 0x88, 0xf9, 0x53, 0xb8, 0x62, 0xf4, 0x07,
+			0x7b, 0xf4, 0xf8, 0x77, 0x4b, 0x4d, 0x54, 0x56,
+			0xbe, 0xff, 0x7f, 0x18, 0x5f, 0xc2, 0x7e, 0x3a,
+			0x32, 0x92, 0x69, 0x3b, 0xbf, 0x8e, 0xde, 0xa0,
+			0x40, 0xd3, 0x13, 0xa4, 0xdb, 0x3b, 0x92, 0x7a,
+			0x9d, 0x72, 0x05, 0xdd, 0x8e, 0x1a, 0x6a, 0x53,
+			0xa0, 0x56, 0x74, 0x63, 0x5a, 0x32, 0xd4, 0x6c,
+			0xad, 0xad, 0xd1, 0x16, 0x3a, 0xb7, 0x34, 0x34,
+			0x19, 0xf1, 0x16, 0x53, 0xf9, 0x3a, 0x28, 0xde,
+			0xb3, 0x69, 0x53, 0x9e, 0xad, 0x25, 0xbc, 0xcf,
+			0xae, 0xda, 0xae, 0x77, 0xa8, 0xc8, 0x80, 0x70,
+			0x3c, 0x8e, 0xf8, 0x97, 0x16, 0x95, 0x2e, 0xd2,
+			0xf9, 0xe3, 0x73, 0xf8, 0x70, 0xd4, 0x70, 0x90,
+			0xdf, 0xd3, 0x60, 0x3f, 0x92, 0xd7, 0x7f, 0xb9,
+			0xd7, 0xce, 0x6c, 0x6a, 0x08, 0xb7, 0x78, 0x16,
+			0x9b, 0x5e, 0x7b, 0x73, 0xeb, 0x76, 0x4f, 0x13,
+			0xbd, 0x1b, 0xf9, 0x7c, 0xfa, 0x3d, 0x36, 0x0f,
+			0x04, 0x04, 0xe5, 0x07, 0x45, 0xfc, 0xda, 0x4d,
+			0xc6, 0x4c, 0x64, 0xc1, 0xc5, 0x1a, 0x52, 0xb8,
+			0x38, 0x34, 0x46, 0xda, 0x4f, 0xeb, 0x46, 0x9f,
+			0x33, 0x35, 0x02, 0xbb, 0xc5, 0x3c, 0xb0, 0xa7,
+			0x25, 0x7f, 0xf4, 0xdd, 0x75, 0x65, 0x65, 0x4c,
+			0x23, 0xce, 0x68, 0x88, 0xe7, 0xde, 0xdd, 0x14,
+			0x7b, 0x9f, 0xb0, 0x42, 0xdf, 0x81, 0x8c, 0xa8,
+			0xa8, 0xd5, 0xfd, 0x01, 0xdf, 0xd1, 0x85, 0xec,
+			0xdd, 0x57, 0xfe, 0xcc, 0x60, 0x5e, 0x10, 0x42,
+			0x82, 0xa1, 0x12, 0x45, 0x56, 0x53, 0x35, 0x49,
+			0x4e, 0xa3, 0xbe, 0xd3, 0xae, 0x86, 0x79, 0x3d,
+			0xa0, 0x2f, 0xbc, 0xb4, 0x2d, 0x06, 0xb9, 0x92,
+			0x96, 0x0e, 0x1c, 0xba, 0xea, 0x1a, 0x72, 0xa1,
+			0xe1, 0xc7, 0x90, 0xcb, 0x6f, 0xbc, 0x05, 0x32,
+			0x91, 0x5f, 0xa2, 0x67, 0xd6, 0x9f, 0x3a, 0xce,
+			0x70, 0x60, 0x6a, 0xfd, 0xcf, 0xd1, 0x46, 0xd6,
+			0x7d, 0x25, 0x7f, 0xee, 0x88, 0x6d, 0xe6, 0x87,
+			0x51, 0xf0, 0x5a, 0xf8, 0xfe, 0x0d, 0xb8, 0x5a,
+			0xd7, 0xb1, 0x33, 0x34, 0xa3, 0x63, 0xa2, 0x48,
+			0xa2, 0x77, 0x94, 0x4f, 0x61, 0x53, 0x05, 0x75,
+			0x30, 0xfe, 0x03, 0x67, 0xf8, 0xef, 0xb7, 0x4a,
+			0x36, 0x0d, 0xed, 0x6c, 0xfa, 0x6a, 0x0f, 0x93,
+			0xb1, 0xd5, 0xbc, 0xe9, 0x0c, 0x45, 0x58, 0x0d,
+			0x02, 0xc0, 0x4b, 0x1f, 0x86, 0x59, 0x7b, 0x50,
+			0x4c, 0x20, 0xc8, 0xf6, 0x7b, 0xf0, 0x36, 0xf1,
+			0xa6, 0x81, 0xa1, 0x1e, 0x55, 0x9f, 0x94, 0x6c,
+			0xa2, 0xa8, 0xe7, 0xcd, 0x27, 0xa3, 0xc5, 0x71,
+			0x69, 0xf2, 0x0d, 0x91, 0xba, 0x75, 0x9e, 0xbc,
+			0x01, 0x27, 0x27, 0x72, 0xe7, 0xd6, 0xb1, 0x93,
+			0x39, 0xde, 0x13, 0xbf, 0x68, 0x7a, 0xd0, 0xa3,
+			0xc8, 0x1d, 0x9f, 0x81, 0x66, 0x59, 0x3c, 0x3e,
+			0x5d, 0xe4, 0xb5, 0x25, 0x10, 0xb2, 0x06, 0xb8,
+			0x5c, 0x28, 0x07, 0x39, 0x64, 0x40, 0xd2, 0x75,
+			0xee, 0x9c, 0x1c, 0xed, 0xad, 0xb4, 0xa0, 0x68,
+			0xad, 0xb0, 0x69, 0xe6, 0xb2, 0x66, 0x9b, 0x44,
+			0x4d, 0xe1, 0xb9, 0xa6, 0xc5, 0x0b, 0xdc, 0x52,
+			0x31, 0x22, 0xd4, 0xec, 0x03, 0xd4, 0xa4, 0x9b,
+			0x26, 0x3b, 0xfc, 0x2b, 0x90, 0x3c, 0x76, 0xda,
+			0x11, 0xd2, 0x97, 0x8b, 0x08, 0x18, 0xf0, 0x7b,
+			0xfe, 0x12, 0x28, 0x3a, 0x95, 0x38, 0xc9, 0x0f,
+			0x01, 0x65, 0xad, 0xf2, 0xc9, 0xe0, 0xbf, 0x56,
+			0x85, 0x0e, 0x17, 0x69, 0x38, 0x26, 0x39, 0x07,
+			0x60, 0xc3, 0xb8, 0x27, 0x86, 0x4d, 0x80, 0xea,
+			0x71, 0xac, 0xb7, 0xad, 0x08, 0xf9, 0xbb, 0xd7,
+			0x9a, 0x16, 0x01, 0xb8, 0x51, 0x5f, 0xb4, 0x82,
+			0xd0, 0x20, 0x00, 0x47, 0x37, 0x15, 0xa7, 0x92,
+			0x33, 0x06, 0x9d, 0xd0, 0xcc, 0x1c, 0xa6, 0xa3,
+			0x8c, 0x47, 0x4e, 0xcf, 0x67, 0xbf, 0x6c, 0x3a,
+			0xc2, 0x9b, 0x93, 0xfc, 0x81, 0x21, 0xb1, 0xc9,
+			0x8a, 0x46, 0x46, 0xbe, 0x38, 0x36, 0x21, 0x1b,
+			0x4a, 0x5a, 0xa8, 0xb8, 0x85, 0xd7, 0x55, 0x60,
+			0x51, 0xf2, 0xee, 0x51, 0x32, 0xf7, 0x32, 0x87,
+			0x6c, 0x2e, 0xfb, 0x9d, 0x6d, 0x73, 0x98, 0x26,
+			0xde, 0x21, 0x9c, 0xc1, 0x7e, 0x99, 0x0e, 0xdc,
+			0x34, 0x95, 0xd3, 0x72, 0x0e, 0x1d, 0xae, 0xca,
+			0xca, 0xdf, 0x75, 0x67, 0x6a, 0x86, 0x97, 0x27,
+			0x18, 0x47, 0x33, 0x2d, 0xc6, 0x99, 0x6f, 0x89,
+			0x1c, 0xfb, 0xf3, 0x1d, 0xfd, 0xf1, 0x68, 0x22,
+			0x23, 0xfd, 0xb7, 0x9d, 0x7d, 0x5b, 0xe2, 0xaf,
+			0x4d, 0xa9, 0x87, 0xeb, 0x05, 0x5e, 0xa0, 0x52,
+			0x16, 0x61, 0x47, 0xb7, 0x07, 0xc8, 0x54, 0x86,
+			0x8d, 0x7e, 0xcb, 0x8d, 0xb4, 0x04, 0x4d, 0x9c,
+			0x51, 0x96, 0xd3, 0x4f, 0x87, 0x80, 0x69, 0x1c,
+			0x73, 0x57, 0xef, 0x39, 0x1c, 0xdc, 0x17, 0xe2,
+			0xfd, 0xed, 0x9d, 0x93, 0xb8, 0x7d, 0x5c, 0x7a,
+			0x16, 0xb6, 0x30, 0xa1, 0xd6, 0x75, 0xf8, 0x74,
+			0xe7, 0x0d, 0xbd, 0xd6, 0x44, 0x0d, 0x5d, 0x15,
+			0xad, 0x02, 0xa1, 0x8c, 0x82, 0xb6, 0xb2, 0x94,
+			0xf6, 0x0a, 0x5c, 0xda, 0x2b, 0x0d, 0x9c, 0x1e,
+			0x38, 0x1e, 0x42, 0xad, 0xa4, 0x7f, 0x8f, 0x9d,
+			0x60, 0xfd, 0x84, 0xec, 0x30, 0x72, 0x65, 0x59,
+			0xb8, 0xf6, 0xd9, 0x10, 0xe2, 0xae, 0x26, 0xcd,
+			0x09, 0x01, 0x88, 0x70, 0x59, 0x02, 0xde, 0xee,
+			0x77, 0x6d, 0x73, 0xd2, 0xf7, 0x6e, 0xfd, 0x9d,
+			0xf3, 0x0f, 0x9a, 0xfa, 0x21, 0x54, 0x2a, 0xb5,
+			0xbe, 0x7b, 0x0d, 0x53, 0x93, 0x59, 0xa5, 0x54,
+			0xab, 0xdb, 0x4d, 0x08, 0x52, 0xdd, 0xaf, 0xda,
+			0xa4, 0x81, 0x8a, 0xa2, 0x66, 0x22, 0xdb, 0x51,
+			0x82, 0xd6, 0x0d, 0xbe, 0x3f, 0x8c, 0xd9, 0x90,
+			0xc9, 0x2e, 0x93, 0x5c, 0x2a, 0x6a, 0x47, 0x47,
+			0xe6, 0x7f, 0x29, 0x1d, 0xa8, 0x17, 0x81, 0x02,
+			0x98, 0xb9, 0xce, 0x8c, 0xb9, 0x4f, 0xe7, 0x25,
+			0x7c, 0x6c, 0x1e, 0xf0, 0x14, 0x1e, 0xae, 0x77,
+			0x31, 0xd5, 0x69, 0x81, 0x77, 0x25, 0x59, 0x4e,
+			0x71, 0xf3, 0xf4, 0x3a, 0x1a, 0xd1, 0x1b, 0xbd,
+			0xd9, 0x08, 0x2d, 0x14, 0x3a, 0xb9, 0x8d, 0xb2,
+			0x30, 0xf8, 0xfe, 0x74, 0x18, 0xb7, 0x63, 0x05,
+			0x16, 0x07, 0xfc, 0x79, 0x54, 0x95, 0xbc, 0x0d,
+			0x4d, 0x3b, 0xa4, 0x26, 0x2e, 0x22, 0xd7, 0x47,
+			0x9c, 0x75, 0x43, 0x4e, 0xe3, 0xca, 0x65, 0xe6,
+			0xd6, 0x8d, 0xac, 0xd7, 0xb7, 0xbd, 0x10, 0x1d,
+			0x5e, 0x96, 0x35, 0x49, 0x04, 0x43, 0x2b, 0xe5,
+			0x33, 0x3a, 0xfc, 0x80, 0x6c, 0xfa, 0xad, 0x27,
+			0x57, 0xef, 0xa0, 0xc9, 0xef, 0x4a, 0x37, 0x1b,
+			0xab, 0xaa, 0x51, 0x02, 0xe2, 0xe8, 0x56, 0xea,
+			0xa4, 0x4a, 0x54, 0xe5, 0x80, 0xd6, 0xc4, 0x8e,
+			0xb8, 0x18, 0x52, 0x4f, 0xe9, 0x6f, 0x79, 0xcc,
+			0x24, 0x79, 0xfb, 0x47, 0x87, 0xef, 0xcd, 0x90,
+			0x76, 0x70, 0x8c, 0x2a, 0xce, 0xef, 0x10, 0xbb,
+			0xd7, 0x10, 0x9b, 0xb8, 0x59, 0x89, 0x95, 0x9b,
+			0x81, 0xe5, 0x7e, 0x15, 0xae, 0xc8, 0x93, 0xd5,
+			0x12, 0x4a, 0xba, 0x78, 0xde, 0x04, 0xd8, 0x0f,
+			0x34, 0xbb, 0xa0, 0xb8, 0x85, 0xe9, 0x90, 0x02,
+			0xeb, 0x92, 0x26, 0xe8, 0xda, 0x92, 0x6d, 0x45,
+			0x31, 0x30, 0x5d, 0xd3, 0x6f, 0x51, 0x34, 0x9c,
+			0x62, 0x2b, 0xbb, 0xc0, 0xc2, 0xa6, 0x3a, 0xd3,
+			0xfd, 0xfe, 0x7e, 0x71, 0x21, 0xf0, 0xfe, 0x74,
+			0x2f, 0xba, 0x2c, 0xdc, 0x15, 0xc2, 0xaf, 0xc2,
+			0xee, 0x90, 0x84, 0x5b, 0x40, 0x02, 0xba, 0xcb,
+			0xc4, 0x71, 0x58, 0x8c, 0xa7, 0x1f, 0x7a, 0xe2,
+			0xf6, 0x66, 0xae, 0x0d, 0x17, 0x4c, 0x25, 0x16,
+			0x39, 0x1b, 0xbe, 0x04, 0x87, 0x14, 0x30, 0xe9,
+			0x17, 0x36, 0x23, 0xa8, 0x6f, 0x86, 0x00, 0xb3,
+			0x2a, 0x64, 0xdc, 0xb4, 0xd2, 0xaa, 0xf0, 0xb4,
+			0x4f, 0x73, 0xf6, 0xc2, 0x7e, 0x48, 0x46, 0xd4,
+			0xb3, 0x08, 0xa9, 0x33, 0x9c, 0xb9, 0x95, 0x67,
+			0xa9, 0xa6, 0x0f, 0xc4, 0x2a, 0xc0, 0xe9, 0x45,
+			0xf5, 0x7f, 0x1d, 0x08, 0x02, 0x3b, 0x09, 0xb0,
+			0x04, 0x57, 0xca, 0xf9, 0x21, 0x97, 0x03, 0x51,
+			0xd4, 0xfb, 0x58, 0xb1, 0x9f, 0xb4, 0xf0, 0x97,
+			0xdc, 0xa8, 0x93, 0x38, 0x8f, 0xd0, 0x1a, 0x54,
+			0x41, 0xe1, 0x0e, 0xd3, 0xba, 0xb2, 0x21, 0xaa,
+			0x8e, 0x42, 0x2d, 0x60, 0x20, 0x9c, 0x39, 0xf3,
+			0x4f, 0xe6, 0x03, 0xce, 0xdd, 0xfc, 0xc6, 0x27,
+			0x9b, 0x87, 0x4d, 0xd8, 0x9e, 0x09, 0x56, 0x15,
+			0xfd, 0xbe, 0x86, 0xed, 0xfa, 0x91, 0x04, 0x1b,
+			0xf8, 0x34, 0x30, 0xba, 0xc3, 0x0c, 0x90, 0x88,
+			0x48, 0x32, 0x43, 0x2d, 0x30, 0xf1, 0xf1, 0xec,
+			0xdd, 0x06, 0x02, 0xe6, 0x45, 0xa4, 0xac, 0x5a,
+			0x3e, 0x1c, 0x27, 0x63, 0xd9, 0x62, 0x78, 0x68,
+			0xc8, 0x91, 0x0d, 0x70, 0xff, 0xb4, 0xee, 0xc6,
+			0xac, 0x3e, 0x66, 0x76, 0x15, 0xc2, 0x90, 0x02,
+			0xb6, 0x80, 0x80, 0x52, 0xb4, 0xb4, 0x64, 0x4b,
+			0xef, 0x9b, 0xa9, 0xf3, 0x4e, 0x49, 0x10, 0x47,
+			0xa9, 0x0a, 0x5d, 0x27, 0xe3, 0x86, 0xdc, 0xf6,
+			0xfd, 0xe3, 0xc4, 0x90, 0xfb, 0x11, 0xd9, 0x38,
+			0x62, 0x81, 0xaa, 0xed, 0x61, 0xd5, 0x0f, 0x7a,
+			0x27, 0x1c, 0x7a, 0x4d, 0x7b, 0xe6, 0xd0, 0x60,
+			0x35, 0xf5, 0xd3, 0x40, 0x47, 0x08, 0xba, 0x3f,
+			0x11, 0x29, 0xd7, 0x22, 0x47, 0xde, 0x1d, 0x9e,
+			0x19, 0xa5, 0x1f, 0x12, 0xea, 0xe8, 0xef, 0x72,
+			0x77, 0x6c, 0x8d, 0xf3, 0x05, 0x5a, 0xee, 0xdc,
+			0x6b, 0xf6, 0xc0, 0x81, 0x08, 0x0f, 0xa9, 0x84,
+			0x79, 0x5e, 0x68, 0xc3, 0x22, 0x21, 0x82, 0x94,
+			0x1b, 0xbb, 0x81, 0x09, 0x9a, 0x06, 0x15, 0xf5,
+			0xf6, 0x6d, 0xb2, 0x36, 0x84, 0x22, 0xfa, 0xc7,
+			0xbb, 0x0d, 0x17, 0x20, 0x16, 0x82, 0xa2, 0xc8,
+			0x8a, 0xe7, 0x5d, 0x7a, 0x8a, 0xa8, 0x0c, 0x4a,
+			0x23, 0xe5, 0x27, 0xad, 0xf4, 0x15, 0x4c, 0x61,
+			0xae, 0x00, 0x79, 0x54, 0x1d, 0x1c, 0x6e, 0x26,
+			0x02, 0x99, 0xf0, 0x0a, 0xeb, 0xe9, 0x10, 0xd2,
+			0xf9, 0x17, 0x75, 0xd0, 0x6a, 0x88, 0xaa, 0xbc,
+			0x64, 0xe3, 0x07, 0xff, 0x4f, 0xc2, 0xf1, 0xd2,
+			0xfe, 0x2a, 0xae, 0x68, 0xb8, 0xa6, 0x4b, 0x50,
+			0x6f, 0xc0, 0x7d, 0x94, 0xe2, 0xc7, 0x25, 0xad,
+			0x31, 0xcf, 0x3a, 0xe7, 0xca, 0x2c, 0x5f, 0x56,
+			0x3a, 0xe7, 0x8d, 0x63, 0xe3, 0xfe, 0x88, 0x34,
+			0xf5, 0xf8, 0xcd, 0x9f, 0x7d, 0x76, 0x0b, 0x3e,
+			0xf6, 0xda, 0xae, 0x74, 0xb2, 0x4a, 0x0f, 0xfd,
+			0x60, 0x9f, 0x6f, 0xa6, 0xfa, 0xef, 0xc1, 0xdd,
+			0x79, 0x8f, 0xe8, 0x0d, 0x76, 0xc6, 0xd9, 0x34,
+			0x06, 0x72, 0x8e, 0xf8, 0xda, 0xb9, 0x60, 0xa6,
+			0x01, 0xdd, 0xae, 0x30, 0x35, 0xf7, 0xf9, 0xac,
+			0x22, 0xb1, 0x67, 0xd7, 0x2f, 0x5f, 0x68, 0xef,
+			0x4c, 0xe7, 0xc9, 0xd1, 0x00, 0xbb, 0x27, 0x98,
+			0x98, 0x7e, 0x40, 0xae, 0x14, 0x38, 0x8e, 0x1b,
+			0xcd, 0x78, 0x86, 0xa2, 0xb1, 0x04, 0x9c, 0x04,
+			0xc4, 0xa6, 0x46, 0x3a, 0xc8, 0x1f, 0x33, 0x69,
+			0xe5, 0x2b, 0xf1, 0x03, 0x09, 0x44, 0x7f, 0x60,
+			0x49, 0xd2, 0x9c, 0x61, 0x0e, 0xf1, 0x8c, 0x13,
+			0x68, 0x2f, 0x9b, 0x18, 0x03, 0x69, 0xed, 0xc6,
+			0x8e, 0xf2, 0x84, 0x72, 0xaa, 0xa8, 0x5b, 0x2d,
+			0x3a, 0xfd, 0x0a, 0x71, 0xbe, 0xef, 0x07, 0xb8,
+			0xdb, 0xc2, 0x66, 0x05, 0x14, 0xf8, 0x29, 0x38,
+			0x0e, 0x7f, 0xae, 0xf1, 0xc3, 0x41, 0x8a, 0xe2,
+			0x6f, 0xac, 0x20, 0x80, 0xcf, 0x18, 0xf1, 0x97,
+			0x09, 0xba, 0x86, 0x25, 0xb9, 0x4b, 0xca, 0x7e,
+			0x8e, 0x75, 0x30, 0x6d, 0x11, 0x96, 0xb5, 0xf2,
+			0x60, 0x75, 0xf6, 0x9b, 0x8d, 0xca, 0x3c, 0x9e,
+			0x7f, 0xd4, 0xf3, 0x25, 0x5c, 0x09, 0x92, 0x31,
+			0x9a, 0x54, 0x2c, 0x3a, 0xc6, 0x62, 0x52, 0xb4,
+			0x9f, 0x38, 0x1a, 0xc4, 0x69, 0x27, 0xe4, 0xe0,
+			0x01, 0x74, 0x57, 0xe7, 0x35, 0xbc, 0x36, 0x8e,
+			0xdc, 0xd3, 0x17, 0x4d, 0x6a, 0x67, 0xe7, 0x8f,
+			0x8d, 0x78, 0x26, 0x13, 0x37, 0x21, 0xa9, 0x41,
+			0x81, 0x75, 0xde, 0x04, 0xaf, 0x9c, 0xa6, 0xab,
+			0xb3, 0x6a, 0x51, 0xba, 0xb2, 0xd5, 0xb4, 0x64,
+			0x5c, 0xae, 0x2a, 0xec, 0x92, 0x17, 0xdd, 0x7a,
+			0x26, 0x44, 0x46, 0x73, 0xdc, 0x51, 0x94, 0x26,
+			0x1c, 0xc0, 0x6d, 0xff, 0xa8, 0x43, 0x5c, 0xc5,
+			0xec, 0x51, 0x93, 0xb5, 0x27, 0x13, 0x75, 0xef,
+			0x6f, 0xc3, 0xe1, 0x7c, 0xbd, 0x72, 0x07, 0x7b,
+			0xae, 0xa5, 0x9f, 0xe3, 0x5f, 0x67, 0xd4, 0xad,
+			0x65, 0x19, 0x92, 0x6b, 0x10, 0xf8, 0xc2, 0xa3,
+			0x39, 0xa5, 0x96, 0x7a, 0xf5, 0x9d, 0x49, 0xd6,
+			0x62, 0x81, 0x0e, 0x63, 0x2e, 0xe7, 0x12, 0x5b,
+			0x9e, 0xd8, 0xde, 0x15, 0x86, 0x22, 0x6e, 0x9a,
+			0xe9, 0xae, 0x5a, 0x35, 0x8f, 0xe0, 0x40, 0xdd,
+			0x59, 0x15, 0x77, 0x40, 0x09, 0xa0, 0x50, 0xef,
+			0x8c, 0xca, 0x4c, 0x61, 0x24, 0x9a, 0x5e, 0x75,
+			0x9d, 0x6d, 0xae, 0x76, 0x04, 0xa7, 0xd5, 0x84,
+			0xde, 0xf4, 0xd5, 0xbb, 0xea, 0x2b, 0x87, 0xaa,
+			0x0e, 0xa1, 0x17, 0x90, 0x33, 0xb6, 0x0e, 0xa1,
+			0x05, 0xce, 0xb9, 0x7d, 0x92, 0x51, 0x87, 0xe2,
+			0x6f, 0xf5, 0xad, 0xb2, 0x77, 0xe8, 0x0a, 0xb8,
+			0xb3, 0xef, 0x9c, 0x19, 0x6b, 0x11, 0xdf, 0x23,
+			0xb5, 0xe4, 0xe3, 0xbf, 0xba, 0xf7, 0x4e, 0x80,
+			0x1c, 0xc7, 0x86, 0xfe, 0xce, 0x75, 0xfb, 0xa3,
+			0xa8, 0x78, 0x15, 0xb8, 0x72, 0x76, 0x1a, 0x20,
+			0x2f, 0xec, 0xde, 0x0f, 0x8d, 0xa8, 0xb6, 0x58,
+			0xf4, 0x95, 0x0e, 0x81, 0x2b, 0x31, 0x0d, 0x54,
+			0x41, 0xd7, 0x6c, 0xb3, 0xa7, 0xe5, 0x73, 0x94,
+			0x6f, 0xa2, 0x54, 0x34, 0xfa, 0xdc, 0xfc, 0x9c,
+			0x1b, 0x56, 0xea, 0x58, 0x1d, 0xdd, 0xd2, 0x0e,
+			0xef, 0x2b, 0x73, 0xdb, 0x19, 0xa7, 0x7a, 0x5c,
+			0x7a, 0x49, 0x85, 0x27, 0x25, 0x42, 0x5a, 0x7c,
+			0xf2, 0x7f, 0x3e, 0xde, 0x1d, 0x07, 0x5d, 0x59,
+			0xdd, 0xe8, 0x1d, 0x29, 0xe4, 0x66, 0x45, 0x0b,
+			0xfe, 0x8e, 0xf4, 0x30, 0x1e, 0x31, 0x21, 0x3c,
+			0x14, 0xa2, 0xfd, 0x74, 0xda, 0xb0, 0xd8, 0xb7,
+			0x71, 0x90, 0x9a, 0x6e, 0x04, 0x90, 0x71, 0x4f,
+			0x40, 0x47, 0xb1, 0x36, 0x33, 0xdd, 0x57, 0xcc,
+			0x05, 0xe4, 0x7b, 0xcd, 0xf3, 0x17, 0xad, 0xe3,
+			0x7c, 0x92, 0xdd, 0x28, 0x8d, 0xce, 0x16, 0xba,
+			0xbb, 0x71, 0x76, 0x53, 0x73, 0x5e, 0x2e, 0xb5,
+			0x4e, 0xc9, 0x89, 0xd4, 0x61, 0x6e, 0xe9, 0x08,
+			0x10, 0xfe, 0x4a, 0xbe, 0xc5, 0xef, 0xcb, 0xd2,
+			0x0d, 0x29, 0x0f, 0x10, 0xc7, 0x3c, 0xbd, 0xdd,
+			0x84, 0x11, 0x40, 0x97, 0xb1, 0xfb, 0x10, 0x59,
+			0x02, 0xce, 0xef, 0x8b, 0xa6, 0x99, 0xf3, 0x37,
+			0x85, 0x3e, 0x84, 0x65, 0x3e, 0x06, 0xbb, 0x4c,
+			0x0b, 0x72, 0xcb, 0x51, 0x5d, 0x4c, 0x24, 0x16,
+			0x19, 0xd4, 0x96, 0xe7, 0x64, 0xe3, 0x05, 0x1d,
+			0x99, 0xa8, 0x23, 0x3f, 0xe2, 0x0b, 0xd6, 0x24,
+			0xc2, 0x67, 0xc8, 0xb8, 0x48, 0xe7, 0xe8, 0x5a,
+			0x7d, 0x5b, 0x53, 0xa1, 0xe6, 0xde, 0x9f, 0x59,
+			0x4f, 0xf2, 0x28, 0x77, 0x79, 0xcd, 0xe2, 0xab,
+			0x7d, 0x9e, 0xfa, 0xb0, 0x62, 0xf9, 0xe7, 0xf8,
+			0xd9, 0x17, 0xd8, 0x74, 0xfc, 0x07, 0xd2, 0x82,
+			0xd0, 0xe9, 0x6c, 0x92, 0xf8, 0x81, 0x1c, 0xfc,
+			0x1b, 0xbf, 0x68, 0xbc, 0x65, 0xe9, 0xe3, 0x83,
+			0xe3, 0x16, 0x76, 0x85, 0xd7, 0xe0, 0x65, 0xc1,
+			0x61, 0xa6, 0x87, 0x4e, 0x6d, 0x5c, 0x0f, 0x08,
+			0x2f, 0xcb, 0xc6, 0xd0, 0x63, 0x5c, 0x2a, 0xa0,
+			0x8e, 0xfa, 0x46, 0x9f, 0xe7, 0x3b, 0xf3, 0x0e,
+			0x60, 0xeb, 0x0d, 0x96, 0x6f, 0x4c, 0xd1, 0x36,
+			0x67, 0xce, 0x4c, 0x5b, 0xec, 0x36, 0xd1, 0x69,
+			0x0b, 0x1c, 0x3e, 0x39, 0x9e, 0xbe, 0x11, 0xae,
+			0xe4, 0x4e, 0xa7, 0xe8, 0x81, 0x19, 0xe7, 0xab,
+			0x27, 0x5f, 0xd1, 0x0a, 0x89, 0xb6, 0x8f, 0x04,
+			0x5a, 0xb5, 0x3e, 0x30, 0x11, 0xf7, 0xb2, 0xb2,
+			0xf8, 0x7d, 0x65, 0x1c, 0x01, 0x5c, 0xfe, 0x57,
+			0x96, 0x04, 0x8c, 0x80, 0x62, 0x4c, 0xa8, 0x57,
+			0xf2, 0x56, 0x74, 0x83, 0xce, 0xff, 0xf9, 0xaa,
+			0xca, 0x0b, 0x04, 0xfe, 0x2c, 0xc2, 0x14, 0x49,
+			0x8d, 0xf2, 0x1f, 0xa0, 0xb0, 0xa1, 0x16, 0x16,
+			0x9a, 0xce, 0x73, 0xd4, 0x04, 0x8a, 0x3f, 0x52,
+			0x95, 0xf7, 0x8d, 0x13, 0x69, 0xb4, 0xc7, 0x20,
+			0x9e, 0x61, 0xcf, 0x3f, 0x51, 0xee, 0xc7, 0x67,
+			0x86, 0x3e, 0x15, 0xb4, 0xb9, 0x33, 0x72, 0xea,
+			0xe9, 0xd7, 0xf0, 0x34, 0xdc, 0xde, 0x42, 0xd0,
+			0xba, 0x30, 0x8f, 0x93, 0xa0, 0xdd, 0x9b, 0x00,
+			0xb0, 0x25, 0x08, 0x59, 0x2f, 0x9b, 0xed, 0x46,
+			0x3e, 0x60, 0x18, 0xce, 0x1d, 0xa3, 0x92, 0x2b,
+			0xec, 0x10, 0xa8, 0xf4, 0x0c, 0x62, 0xba, 0x27,
+			0xfb, 0x0d, 0xcc, 0x51, 0xb4, 0xa0, 0x70, 0x63,
+			0xd4, 0xf7, 0xda, 0x79, 0x21, 0x69, 0x49, 0x5e,
+			0xd9, 0x50, 0xd6, 0x2a, 0x74, 0xea, 0xce, 0x4c,
+			0xe9, 0x70, 0x51, 0x37, 0xf8, 0x11, 0xef, 0x11,
+			0x1a, 0x5c, 0x38, 0xec, 0x30, 0xbc, 0xd6, 0x90,
+			0xaa, 0x84, 0x2e, 0x14, 0xd5, 0x5a, 0xe0, 0xb5,
+			0xb6, 0xbd, 0x2c, 0xb8, 0x4d, 0x89, 0xa6, 0x6d,
+			0xfe, 0x9f, 0xcd, 0x9e, 0xb7, 0xa2, 0x1b, 0x0f,
+			0x84, 0xb0, 0x91, 0x38, 0x9a, 0xac, 0xcd, 0xa5,
+			0xbe, 0x70, 0x54, 0x98, 0x1c, 0x07, 0x64, 0x68,
+			0xeb, 0x55, 0x52, 0x8e, 0x35, 0x97, 0x74, 0x7f,
+			0x2d, 0x15, 0x62, 0x3f, 0xbe, 0x11, 0x57, 0x11,
+			0x4d, 0xa7, 0x99, 0x53, 0xc3, 0xd9, 0xcd, 0xd0,
+			0xe6, 0x53, 0xb5, 0xfd, 0x2b, 0xaa, 0x29, 0x3e,
+			0x69, 0x03, 0xef, 0x11, 0xe9, 0x88, 0x2f, 0x0d,
+			0xed, 0x5f, 0xd4, 0x3a, 0x31, 0xf0, 0x4c, 0x3a,
+			0xfb, 0xe8, 0x01, 0x61, 0x47, 0x95, 0xf5, 0xd2,
+			0x7d, 0x1a, 0xab, 0x7e, 0xc9, 0xd1, 0xd5, 0x13,
+			0x0a, 0xed, 0xc5, 0x62, 0xee, 0x0b, 0x3f, 0x1d,
+			0xd1, 0x46, 0xc9, 0x62, 0x25, 0xd2, 0x13, 0x1d,
+			0x51, 0xee, 0xb2, 0x2d, 0x4b, 0x42, 0x33, 0xe5,
+			0x50, 0xe5, 0x21, 0x80, 0xac, 0x4f, 0xd0, 0x7a,
+			0x67, 0x62, 0x1c, 0x74, 0x51, 0x04, 0x69, 0x54,
+			0x5b, 0x5d, 0x39, 0xfb, 0x17, 0x5f, 0xee, 0xd5,
+			0x9a, 0xb1, 0xaa, 0x9f, 0xed, 0x45, 0xf4, 0x2e,
+			0x6b, 0x45, 0xba, 0xc3, 0xec, 0x45, 0xba, 0x6e,
+			0x44, 0x92, 0x9f, 0xc4, 0xe1, 0xf5, 0xd0, 0x67,
+			0xab, 0x19, 0xfd, 0x64, 0x31, 0x4a, 0xfa, 0xfc,
+			0x1c, 0xb9, 0x41, 0x41, 0xbf, 0xdc, 0x84, 0xe1,
+			0x06, 0x84, 0xab, 0x79, 0xdc, 0x32, 0xc4, 0x3b,
+			0xcd, 0xfe, 0x0e, 0x3d, 0x41, 0xd9, 0xdb, 0x89,
+			0xb4, 0x3c, 0x05, 0xab, 0xd3, 0x03, 0x05, 0x96,
+			0x03, 0xfb, 0x24, 0x2a, 0x9a, 0xfc, 0x2c, 0xce,
+			0x32, 0x47, 0x46, 0xa1, 0x9f, 0xca, 0x5f, 0x2b,
+			0xdd, 0x15, 0xd7, 0x02, 0x1d, 0x30, 0x54, 0x42,
+			0xcf, 0x77, 0xf9, 0xd1, 0x26, 0xf4, 0xa6, 0x84,
+			0xce, 0x69, 0x58, 0xba, 0xd3, 0xd6, 0xa6, 0x6c,
+			0xcd, 0x57, 0x0e, 0x6c, 0xa3, 0x98, 0xaf, 0xe1,
+			0x5f, 0x59, 0x5a, 0x7b, 0xf2, 0x2f, 0x3d, 0xf9,
+			0x0b, 0xf2, 0xb0, 0xda, 0x37, 0x94, 0x6a, 0xf8,
+			0x7f, 0x51, 0xfa, 0x48, 0x73, 0xa6, 0xe0, 0x12,
+			0x05, 0x36, 0x38, 0x3a, 0x43, 0x57, 0x67, 0x81,
+			0x95, 0xb5, 0xcb, 0xf8, 0x01, 0x0a, 0x13, 0x17,
+			0x2d, 0x67, 0xae, 0xbc, 0xed, 0x5d, 0xaf, 0xb9,
+			0xce, 0xcf, 0xd1, 0x0b, 0x19, 0x90, 0xab, 0xe0,
+			0x30, 0x48, 0x62, 0x73, 0x75, 0x8d, 0x93, 0x98,
+			0xab, 0xdf, 0xe9, 0xf4, 0x1a, 0x60, 0x6c, 0x70,
+			0xa8, 0xb4, 0xe0, 0xe6, 0xf2, 0xff, 0x0b, 0x62,
+			0x6a, 0x87, 0x8a, 0xb0, 0xcf, 0xe6, 0xee, 0x38,
+			0x79, 0x7c, 0x80, 0x84, 0xa9, 0xe2, 0xe4, 0xe7,
+			0x00, 0x00, 0x00, 0x0c, 0x15, 0x1b, 0x20, 0x2c,
+			0x36, 0x3f, 0x48, },
+	},


^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v9 7/9] pkcs7: Allow the signing algo to calculate the digest itself
  2025-11-17 14:55 [PATCH v9 0/9] lib/crypto: Add ML-DSA signing David Howells
                   ` (5 preceding siblings ...)
  2025-11-17 14:55 ` [PATCH v9 6/9] crypto: Add ML-DSA-87 " David Howells
@ 2025-11-17 14:55 ` David Howells
  2025-11-17 14:55 ` [PATCH v9 8/9] pkcs7, x509: Add ML-DSA support David Howells
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 32+ messages in thread
From: David Howells @ 2025-11-17 14:55 UTC (permalink / raw)
  To: Herbert Xu
  Cc: David Howells, Eric Biggers, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

The ML-DSA public key algorithm really wants to calculate the message
digest itself, rather than having the digest precalculated and fed to it
separately as RSA does[*].  The kernel's PKCS#7 parser, however, is
designed around the latter approach.

  [*] ML-DSA does allow for an "external mu", but CMS doesn't yet have that
  standardised.

Fix this by noting in the public_key_signature struct when the signing
algorithm is going to want this and then, rather than doing the digest of
the authenticatedAttributes ourselves and overwriting the sig->digest with
that, replace sig->digest with a copy of the contents of the
authenticatedAttributes section and adjust the digest length to match.

This will then be fed to the public key algorithm as normal which can do
what it wants with the data.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Lukas Wunner <lukas@wunner.de>
cc: Ignat Korchagin <ignat@cloudflare.com>
cc: Stephan Mueller <smueller@chronox.de>
cc: Eric Biggers <ebiggers@kernel.org>
cc: Herbert Xu <herbert@gondor.apana.org.au>
cc: keyrings@vger.kernel.org
cc: linux-crypto@vger.kernel.org
---
 crypto/asymmetric_keys/pkcs7_parser.c |  4 +--
 crypto/asymmetric_keys/pkcs7_verify.c | 48 ++++++++++++++++++---------
 include/crypto/public_key.h           |  1 +
 3 files changed, 36 insertions(+), 17 deletions(-)

diff --git a/crypto/asymmetric_keys/pkcs7_parser.c b/crypto/asymmetric_keys/pkcs7_parser.c
index 423d13c47545..3cdbab3b9f50 100644
--- a/crypto/asymmetric_keys/pkcs7_parser.c
+++ b/crypto/asymmetric_keys/pkcs7_parser.c
@@ -599,8 +599,8 @@ int pkcs7_sig_note_set_of_authattrs(void *context, size_t hdrlen,
 	}
 
 	/* We need to switch the 'CONT 0' to a 'SET OF' when we digest */
-	sinfo->authattrs = value - (hdrlen - 1);
-	sinfo->authattrs_len = vlen + (hdrlen - 1);
+	sinfo->authattrs = value - hdrlen;
+	sinfo->authattrs_len = vlen + hdrlen;
 	return 0;
 }
 
diff --git a/crypto/asymmetric_keys/pkcs7_verify.c b/crypto/asymmetric_keys/pkcs7_verify.c
index 6d6475e3a9bf..0f9f515b784d 100644
--- a/crypto/asymmetric_keys/pkcs7_verify.c
+++ b/crypto/asymmetric_keys/pkcs7_verify.c
@@ -70,8 +70,6 @@ static int pkcs7_digest(struct pkcs7_message *pkcs7,
 	 * digest we just calculated.
 	 */
 	if (sinfo->authattrs) {
-		u8 tag;
-
 		if (!sinfo->msgdigest) {
 			pr_warn("Sig %u: No messageDigest\n", sinfo->index);
 			ret = -EKEYREJECTED;
@@ -97,20 +95,40 @@ static int pkcs7_digest(struct pkcs7_message *pkcs7,
 		 * as the contents of the digest instead.  Note that we need to
 		 * convert the attributes from a CONT.0 into a SET before we
 		 * hash it.
+		 *
+		 * However, for certain algorithms, such as ML-DSA, the digest
+		 * is integrated into the signing algorithm.  In such a case,
+		 * we copy the authattrs, modifying the tag type, and set that
+		 * as the digest.
 		 */
-		memset(sig->digest, 0, sig->digest_size);
-
-		ret = crypto_shash_init(desc);
-		if (ret < 0)
-			goto error;
-		tag = ASN1_CONS_BIT | ASN1_SET;
-		ret = crypto_shash_update(desc, &tag, 1);
-		if (ret < 0)
-			goto error;
-		ret = crypto_shash_finup(desc, sinfo->authattrs,
-					 sinfo->authattrs_len, sig->digest);
-		if (ret < 0)
-			goto error;
+		if (sig->algo_does_hash) {
+			kfree(sig->digest);
+
+			ret = -ENOMEM;
+			sig->digest = kmalloc(umax(sinfo->authattrs_len, sig->digest_size),
+					      GFP_KERNEL);
+			if (!sig->digest)
+				goto error_no_desc;
+
+			sig->digest_size = sinfo->authattrs_len;
+			memcpy(sig->digest, sinfo->authattrs, sinfo->authattrs_len);
+			((u8 *)sig->digest)[0] = ASN1_CONS_BIT | ASN1_SET;
+			ret = 0;
+		} else {
+			u8 tag = ASN1_CONS_BIT | ASN1_SET;
+
+			ret = crypto_shash_init(desc);
+			if (ret < 0)
+				goto error;
+			ret = crypto_shash_update(desc, &tag, 1);
+			if (ret < 0)
+				goto error;
+			ret = crypto_shash_finup(desc, sinfo->authattrs + 1,
+						 sinfo->authattrs_len - 1,
+						 sig->digest);
+			if (ret < 0)
+				goto error;
+		}
 		pr_devel("AADigest = [%*ph]\n", 8, sig->digest);
 	}
 
diff --git a/include/crypto/public_key.h b/include/crypto/public_key.h
index 81098e00c08f..e4ec8003a3a4 100644
--- a/include/crypto/public_key.h
+++ b/include/crypto/public_key.h
@@ -46,6 +46,7 @@ struct public_key_signature {
 	u8 *digest;
 	u32 s_size;		/* Number of bytes in signature */
 	u32 digest_size;	/* Number of bytes in digest */
+	bool algo_does_hash;	/* Public key algo does its own hashing */
 	const char *pkey_algo;
 	const char *hash_algo;
 	const char *encoding;


^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v9 8/9] pkcs7, x509: Add ML-DSA support
  2025-11-17 14:55 [PATCH v9 0/9] lib/crypto: Add ML-DSA signing David Howells
                   ` (6 preceding siblings ...)
  2025-11-17 14:55 ` [PATCH v9 7/9] pkcs7: Allow the signing algo to calculate the digest itself David Howells
@ 2025-11-17 14:55 ` David Howells
  2025-11-17 14:55 ` [PATCH v9 9/9] modsign: Enable ML-DSA module signing David Howells
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 32+ messages in thread
From: David Howells @ 2025-11-17 14:55 UTC (permalink / raw)
  To: Herbert Xu
  Cc: David Howells, Eric Biggers, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

Add support for ML-DSA keys and signatures to the PKCS#7 and X.509
implementations.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Lukas Wunner <lukas@wunner.de>
cc: Ignat Korchagin <ignat@cloudflare.com>
cc: Stephan Mueller <smueller@chronox.de>
cc: Eric Biggers <ebiggers@kernel.org>
cc: Herbert Xu <herbert@gondor.apana.org.au>
cc: keyrings@vger.kernel.org
cc: linux-crypto@vger.kernel.org
---
 crypto/asymmetric_keys/pkcs7_parser.c     | 15 ++++++++++++++
 crypto/asymmetric_keys/public_key.c       |  7 +++++++
 crypto/asymmetric_keys/x509_cert_parser.c | 24 +++++++++++++++++++++++
 include/linux/oid_registry.h              |  5 +++++
 4 files changed, 51 insertions(+)

diff --git a/crypto/asymmetric_keys/pkcs7_parser.c b/crypto/asymmetric_keys/pkcs7_parser.c
index 3cdbab3b9f50..90c36fe1b5ed 100644
--- a/crypto/asymmetric_keys/pkcs7_parser.c
+++ b/crypto/asymmetric_keys/pkcs7_parser.c
@@ -297,6 +297,21 @@ int pkcs7_sig_note_pkey_algo(void *context, size_t hdrlen,
 		ctx->sinfo->sig->pkey_algo = "ecrdsa";
 		ctx->sinfo->sig->encoding = "raw";
 		break;
+	case OID_id_ml_dsa_44:
+		ctx->sinfo->sig->pkey_algo = "mldsa44";
+		ctx->sinfo->sig->encoding = "raw";
+		ctx->sinfo->sig->algo_does_hash = true;
+		break;
+	case OID_id_ml_dsa_65:
+		ctx->sinfo->sig->pkey_algo = "mldsa65";
+		ctx->sinfo->sig->encoding = "raw";
+		ctx->sinfo->sig->algo_does_hash = true;
+		break;
+	case OID_id_ml_dsa_87:
+		ctx->sinfo->sig->pkey_algo = "mldsa87";
+		ctx->sinfo->sig->encoding = "raw";
+		ctx->sinfo->sig->algo_does_hash = true;
+		break;
 	default:
 		printk("Unsupported pkey algo: %u\n", ctx->last_oid);
 		return -ENOPKG;
diff --git a/crypto/asymmetric_keys/public_key.c b/crypto/asymmetric_keys/public_key.c
index e5b177c8e842..ed6b4b5ae4ef 100644
--- a/crypto/asymmetric_keys/public_key.c
+++ b/crypto/asymmetric_keys/public_key.c
@@ -142,6 +142,13 @@ software_key_determine_akcipher(const struct public_key *pkey,
 		if (strcmp(hash_algo, "streebog256") != 0 &&
 		    strcmp(hash_algo, "streebog512") != 0)
 			return -EINVAL;
+	} else if (strcmp(pkey->pkey_algo, "mldsa44") == 0 ||
+		   strcmp(pkey->pkey_algo, "mldsa65") == 0 ||
+		   strcmp(pkey->pkey_algo, "mldsa87") == 0) {
+		if (strcmp(encoding, "raw") != 0)
+			return -EINVAL;
+		if (!hash_algo)
+			return -EINVAL;
 	} else {
 		/* Unknown public key algorithm */
 		return -ENOPKG;
diff --git a/crypto/asymmetric_keys/x509_cert_parser.c b/crypto/asymmetric_keys/x509_cert_parser.c
index 8df3fa60a44f..d14584eca452 100644
--- a/crypto/asymmetric_keys/x509_cert_parser.c
+++ b/crypto/asymmetric_keys/x509_cert_parser.c
@@ -257,6 +257,15 @@ int x509_note_sig_algo(void *context, size_t hdrlen, unsigned char tag,
 	case OID_gost2012Signature512:
 		ctx->cert->sig->hash_algo = "streebog512";
 		goto ecrdsa;
+	case OID_id_ml_dsa_44:
+		ctx->cert->sig->pkey_algo = "mldsa44";
+		goto ml_dsa;
+	case OID_id_ml_dsa_65:
+		ctx->cert->sig->pkey_algo = "mldsa65";
+		goto ml_dsa;
+	case OID_id_ml_dsa_87:
+		ctx->cert->sig->pkey_algo = "mldsa87";
+		goto ml_dsa;
 	}
 
 rsa_pkcs1:
@@ -274,6 +283,12 @@ int x509_note_sig_algo(void *context, size_t hdrlen, unsigned char tag,
 	ctx->cert->sig->encoding = "x962";
 	ctx->sig_algo = ctx->last_oid;
 	return 0;
+ml_dsa:
+	ctx->cert->sig->algo_does_hash = true;
+	ctx->cert->sig->hash_algo = ctx->cert->sig->pkey_algo;
+	ctx->cert->sig->encoding = "raw";
+	ctx->sig_algo = ctx->last_oid;
+	return 0;
 }
 
 /*
@@ -524,6 +539,15 @@ int x509_extract_key_data(void *context, size_t hdrlen,
 			return -ENOPKG;
 		}
 		break;
+	case OID_id_ml_dsa_44:
+		ctx->cert->pub->pkey_algo = "mldsa44";
+		break;
+	case OID_id_ml_dsa_65:
+		ctx->cert->pub->pkey_algo = "mldsa65";
+		break;
+	case OID_id_ml_dsa_87:
+		ctx->cert->pub->pkey_algo = "mldsa87";
+		break;
 	default:
 		return -ENOPKG;
 	}
diff --git a/include/linux/oid_registry.h b/include/linux/oid_registry.h
index 6de479ebbe5d..30821a6a4f72 100644
--- a/include/linux/oid_registry.h
+++ b/include/linux/oid_registry.h
@@ -145,6 +145,11 @@ enum OID {
 	OID_id_rsassa_pkcs1_v1_5_with_sha3_384, /* 2.16.840.1.101.3.4.3.15 */
 	OID_id_rsassa_pkcs1_v1_5_with_sha3_512, /* 2.16.840.1.101.3.4.3.16 */
 
+	/* NIST FIPS-204 ML-DSA (Dilithium) */
+	OID_id_ml_dsa_44,			/* 2.16.840.1.101.3.4.3.17 */
+	OID_id_ml_dsa_65,			/* 2.16.840.1.101.3.4.3.18 */
+	OID_id_ml_dsa_87,			/* 2.16.840.1.101.3.4.3.19 */
+
 	OID__NR
 };
 


^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PATCH v9 9/9] modsign: Enable ML-DSA module signing
  2025-11-17 14:55 [PATCH v9 0/9] lib/crypto: Add ML-DSA signing David Howells
                   ` (7 preceding siblings ...)
  2025-11-17 14:55 ` [PATCH v9 8/9] pkcs7, x509: Add ML-DSA support David Howells
@ 2025-11-17 14:55 ` David Howells
  2025-11-17 15:22 ` Pick up keys-pqc branch for linux-next? David Howells
  2025-11-17 16:01 ` Where to add FIPS tests David Howells
  10 siblings, 0 replies; 32+ messages in thread
From: David Howells @ 2025-11-17 14:55 UTC (permalink / raw)
  To: Herbert Xu
  Cc: David Howells, Eric Biggers, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

Allow ML-DSA module signing to be enabled.

Note that openssl's CMS_*() function suite does not, as of openssl-3.5.1,
support the use of CMS_NOATTR with ML-DSA, so the prohibition against using
authenticatedAttributes with module signing has to be removed.  The selected
digest then applies only to the algorithm used to calculate the digest
stored in the messageDigest attribute.

The ML-DSA algorithm uses its own internal choice of digest (SHAKE256)
without regard to what's specified in the CMS message.  This is, in theory,
configurable, but there's currently no hook in the crypto_sig API to do
that, though possibly it could be done by parameterising the name of the
algorithm, e.g. ("ml-dsa87(sha512)").

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Lukas Wunner <lukas@wunner.de>
cc: Ignat Korchagin <ignat@cloudflare.com>
cc: Stephan Mueller <smueller@chronox.de>
cc: Eric Biggers <ebiggers@kernel.org>
cc: Herbert Xu <herbert@gondor.apana.org.au>
cc: keyrings@vger.kernel.org
cc: linux-crypto@vger.kernel.org
---
 Documentation/admin-guide/module-signing.rst | 15 ++++++-----
 certs/Kconfig                                | 27 ++++++++++++++++++++
 certs/Makefile                               |  3 +++
 crypto/asymmetric_keys/pkcs7_verify.c        |  4 ---
 kernel/module/Kconfig                        |  5 ++++
 scripts/sign-file.c                          | 26 +++++++++++++------
 6 files changed, 61 insertions(+), 19 deletions(-)

diff --git a/Documentation/admin-guide/module-signing.rst b/Documentation/admin-guide/module-signing.rst
index a8667a777490..6daff80c277b 100644
--- a/Documentation/admin-guide/module-signing.rst
+++ b/Documentation/admin-guide/module-signing.rst
@@ -28,10 +28,11 @@ trusted userspace bits.
 
 This facility uses X.509 ITU-T standard certificates to encode the public keys
 involved.  The signatures are not themselves encoded in any industrial standard
-type.  The built-in facility currently only supports the RSA & NIST P-384 ECDSA
-public key signing standard (though it is pluggable and permits others to be
-used).  The possible hash algorithms that can be used are SHA-2 and SHA-3 of
-sizes 256, 384, and 512 (the algorithm is selected by data in the signature).
+type.  The built-in facility currently only supports the RSA, NIST P-384 ECDSA
+and NIST FIPS-204 ML-DSA (Dilithium) public key signing standards (though it is
+pluggable and permits others to be used).  For RSA and ECDSA, the possible hash
+algorithms that can be used are SHA-2 and SHA-3 of sizes 256, 384, and 512 (the
+algorithm is selected by data in the signature); ML-DSA uses SHAKE256.
 
 
 ==========================
@@ -146,9 +147,9 @@ into vmlinux) using parameters in the::
 
 file (which is also generated if it does not already exist).
 
-One can select between RSA (``MODULE_SIG_KEY_TYPE_RSA``) and ECDSA
-(``MODULE_SIG_KEY_TYPE_ECDSA``) to generate either RSA 4k or NIST
-P-384 keypair.
+One can select between RSA (``MODULE_SIG_KEY_TYPE_RSA``), ECDSA
+(``MODULE_SIG_KEY_TYPE_ECDSA``) and ML-DSA (``MODULE_SIG_KEY_TYPE_ML_DSA``) to
+generate an RSA 4k, a NIST P-384 keypair or an ML-DSA keypair.
 
 It is strongly recommended that you provide your own x509.genkey file.
 
diff --git a/certs/Kconfig b/certs/Kconfig
index 78307dc25559..6d013191a373 100644
--- a/certs/Kconfig
+++ b/certs/Kconfig
@@ -39,6 +39,33 @@ config MODULE_SIG_KEY_TYPE_ECDSA
 	 Note: Remove all ECDSA signing keys, e.g. certs/signing_key.pem,
 	 when falling back to building Linux 5.14 and older kernels.
 
+config MODULE_SIG_KEY_TYPE_ML_DSA_44
+	bool "ML-DSA (Dilithium) 44"
+	select CRYPTO_LIB_MLDSA
+	select CRYPTO_LIB_MLDSA_44
+	select LIB_SHA3
+	help
+	  Use an ML-DSA (Dilithium) 44 key (NIST FIPS 204) for module signing
+	  with a SHAKE256 'hash' of the authenticatedAttributes.
+
+config MODULE_SIG_KEY_TYPE_ML_DSA_65
+	bool "ML-DSA (Dilithium) 65"
+	select CRYPTO_LIB_MLDSA
+	select CRYPTO_LIB_MLDSA_65
+	select LIB_SHA3
+	help
+	  Use an ML-DSA (Dilithium) 65 key (NIST FIPS 204) for module signing
+	  with a SHAKE256 'hash' of the authenticatedAttributes.
+
+config MODULE_SIG_KEY_TYPE_ML_DSA_87
+	bool "ML-DSA (Dilithium) 87"
+	select CRYPTO_LIB_MLDSA
+	select CRYPTO_LIB_MLDSA_87
+	select LIB_SHA3
+	help
+	  Use an ML-DSA (Dilithium) 87 key (NIST FIPS 204) for module signing
+	  with a SHAKE256 'hash' of the authenticatedAttributes.
+
 endchoice
 
 config SYSTEM_TRUSTED_KEYRING
diff --git a/certs/Makefile b/certs/Makefile
index f6fa4d8d75e0..231379c91b86 100644
--- a/certs/Makefile
+++ b/certs/Makefile
@@ -43,6 +43,9 @@ targets += x509_certificate_list
 ifeq ($(CONFIG_MODULE_SIG_KEY),certs/signing_key.pem)
 
 keytype-$(CONFIG_MODULE_SIG_KEY_TYPE_ECDSA) := -newkey ec -pkeyopt ec_paramgen_curve:secp384r1
+keytype-$(CONFIG_MODULE_SIG_KEY_TYPE_ML_DSA_44) := -newkey ml-dsa-44
+keytype-$(CONFIG_MODULE_SIG_KEY_TYPE_ML_DSA_65) := -newkey ml-dsa-65
+keytype-$(CONFIG_MODULE_SIG_KEY_TYPE_ML_DSA_87) := -newkey ml-dsa-87
 
 quiet_cmd_gen_key = GENKEY  $@
       cmd_gen_key = openssl req -new -nodes -utf8 -$(CONFIG_MODULE_SIG_HASH) -days 36500 \
diff --git a/crypto/asymmetric_keys/pkcs7_verify.c b/crypto/asymmetric_keys/pkcs7_verify.c
index 0f9f515b784d..f7ea1d41771d 100644
--- a/crypto/asymmetric_keys/pkcs7_verify.c
+++ b/crypto/asymmetric_keys/pkcs7_verify.c
@@ -424,10 +424,6 @@ int pkcs7_verify(struct pkcs7_message *pkcs7,
 			pr_warn("Invalid module sig (not pkcs7-data)\n");
 			return -EKEYREJECTED;
 		}
-		if (pkcs7->have_authattrs) {
-			pr_warn("Invalid module sig (has authattrs)\n");
-			return -EKEYREJECTED;
-		}
 		break;
 	case VERIFYING_FIRMWARE_SIGNATURE:
 		if (pkcs7->data_type != OID_data) {
diff --git a/kernel/module/Kconfig b/kernel/module/Kconfig
index 2a1beebf1d37..4b5d1601d537 100644
--- a/kernel/module/Kconfig
+++ b/kernel/module/Kconfig
@@ -327,6 +327,10 @@ config MODULE_SIG_SHA3_512
 	bool "SHA3-512"
 	select CRYPTO_SHA3
 
+config MODULE_SIG_SHAKE256
+	bool "SHAKE256"
+	select CRYPTO_SHA3
+
 endchoice
 
 config MODULE_SIG_HASH
@@ -339,6 +343,7 @@ config MODULE_SIG_HASH
 	default "sha3-256" if MODULE_SIG_SHA3_256
 	default "sha3-384" if MODULE_SIG_SHA3_384
 	default "sha3-512" if MODULE_SIG_SHA3_512
+	default "shake256" if MODULE_SIG_SHAKE256
 
 config MODULE_COMPRESS
 	bool "Module compression"
diff --git a/scripts/sign-file.c b/scripts/sign-file.c
index 7070245edfc1..b726581075f9 100644
--- a/scripts/sign-file.c
+++ b/scripts/sign-file.c
@@ -315,18 +315,28 @@ int main(int argc, char **argv)
 		ERR(!digest_algo, "EVP_get_digestbyname");
 
 #ifndef USE_PKCS7
+
+		unsigned int flags =
+			CMS_NOCERTS |
+			CMS_PARTIAL |
+			CMS_BINARY |
+			CMS_DETACHED |
+			CMS_STREAM  |
+			CMS_NOSMIMECAP |
+			CMS_NO_SIGNING_TIME |
+			use_keyid;
+		if (!EVP_PKEY_is_a(private_key, "ML-DSA-44") &&
+		    !EVP_PKEY_is_a(private_key, "ML-DSA-65") &&
+		    !EVP_PKEY_is_a(private_key, "ML-DSA-87"))
+			flags |= use_signed_attrs;
+
 		/* Load the signature message from the digest buffer. */
-		cms = CMS_sign(NULL, NULL, NULL, NULL,
-			       CMS_NOCERTS | CMS_PARTIAL | CMS_BINARY |
-			       CMS_DETACHED | CMS_STREAM);
+		cms = CMS_sign(NULL, NULL, NULL, NULL, flags);
 		ERR(!cms, "CMS_sign");
 
-		ERR(!CMS_add1_signer(cms, x509, private_key, digest_algo,
-				     CMS_NOCERTS | CMS_BINARY |
-				     CMS_NOSMIMECAP | use_keyid |
-				     use_signed_attrs),
+		ERR(!CMS_add1_signer(cms, x509, private_key, digest_algo, flags),
 		    "CMS_add1_signer");
-		ERR(CMS_final(cms, bm, NULL, CMS_NOCERTS | CMS_BINARY) != 1,
+		ERR(CMS_final(cms, bm, NULL, flags) != 1,
 		    "CMS_final");
 
 #else


^ permalink raw reply related	[flat|nested] 32+ messages in thread

* Pick up keys-pqc branch for linux-next?
  2025-11-17 14:55 [PATCH v9 0/9] lib/crypto: Add ML-DSA signing David Howells
                   ` (8 preceding siblings ...)
  2025-11-17 14:55 ` [PATCH v9 9/9] modsign: Enable ML-DSA module signing David Howells
@ 2025-11-17 15:22 ` David Howells
  2025-11-17 17:11   ` Eric Biggers
  2025-11-17 16:01 ` Where to add FIPS tests David Howells
  10 siblings, 1 reply; 32+ messages in thread
From: David Howells @ 2025-11-17 15:22 UTC (permalink / raw)
  To: Stephen Rothwell, Mark Brown
  Cc: dhowells, Herbert Xu, Eric Biggers, linux-crypto, keyrings,
	linux-modules, linux-next, linux-kernel

Hi Stephen,

Can you pick up my keys-pqc branch for linux-next please?  It can be found at:

	https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/
	keys-pqc

Note that it's based on Eric Bigger's libcrypto/lbcrypto-next branch which I
believe you already have in order to get SHA-3/SHAKE support.

Thanks,
David


^ permalink raw reply	[flat|nested] 32+ messages in thread

* Where to add FIPS tests
  2025-11-17 14:55 [PATCH v9 0/9] lib/crypto: Add ML-DSA signing David Howells
                   ` (9 preceding siblings ...)
  2025-11-17 15:22 ` Pick up keys-pqc branch for linux-next? David Howells
@ 2025-11-17 16:01 ` David Howells
  2025-11-17 16:54   ` Eric Biggers
  10 siblings, 1 reply; 32+ messages in thread
From: David Howells @ 2025-11-17 16:01 UTC (permalink / raw)
  To: Herbert Xu
  Cc: dhowells, Eric Biggers, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

Hi Herbert,

I'm wondering from where I should invoke the FIPS tests for ML-DSA.

Currently, the asymmetric key type has some FIPS selftests for RSA and ECDSA
built into it, but I wonder if that's the best way.  The problem is that it
does the selftest during module init - but that can only test whatever
algorithms are built into the base kernel image and initialised at the time
late_initcall() happens.

It might be better to put the tests into the algorithm modules themselves -
but that then has a potential circular dependency issue.  However, that might
not matter as the asymmetric key type won't be built as a module and will be
built into the kernel (though some of the components such as X.509 and PKCS#7
can be built as modules).

If I don't involve X.509/PKCS#7 in the selftest, then doing it from the ML-DSA
modules during module init would be fine.

Do you (or anyone else) have any thoughts?

David


^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 1/9] crypto: Add support for shake256 through crypto_shash
  2025-11-17 14:55 ` [PATCH v9 1/9] crypto: Add support for shake256 through crypto_shash David Howells
@ 2025-11-17 16:50   ` Eric Biggers
  0 siblings, 0 replies; 32+ messages in thread
From: Eric Biggers @ 2025-11-17 16:50 UTC (permalink / raw)
  To: David Howells
  Cc: Herbert Xu, Luis Chamberlain, Petr Pavlu, Daniel Gomez,
	Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

On Mon, Nov 17, 2025 at 02:55:50PM +0000, David Howells wrote:
> Add shake256 support to the SHA-3 crypto_sig module so that ML-DSA can use
> it.

Why?  Not only does this patch not expose SHAKE256 support correctly,
the ML-DSA code just accesses SHAKE256 via the library API, not
crypto_shash.  So this seems unnecessary.

- Eric

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: Where to add FIPS tests
  2025-11-17 16:01 ` Where to add FIPS tests David Howells
@ 2025-11-17 16:54   ` Eric Biggers
  0 siblings, 0 replies; 32+ messages in thread
From: Eric Biggers @ 2025-11-17 16:54 UTC (permalink / raw)
  To: David Howells
  Cc: Herbert Xu, Luis Chamberlain, Petr Pavlu, Daniel Gomez,
	Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

On Mon, Nov 17, 2025 at 04:01:39PM +0000, David Howells wrote:
> Hi Herbert,
> 
> I'm wondering from where I should invoke the FIPS tests for ML-DSA.
> 
> Currently, the asymmetric key type has some FIPS selftests for RSA and ECDSA
> built into it, but I wonder if that's the best way.  The problem is that it
> does the selftest during module init - but that can only test whatever
> algorithms are built into the base kernel image and initialised at the time
> late_initcall() happens.
> 
> It might be better to put the tests into the algorithm modules themselves -
> but that then has a potential circular dependency issue.  However, that might
> not matter as the asymmetric key type won't be built as a module and will be
> built into the kernel (though some of the components such as X.509 and PKCS#7
> can be built as modules).
> 
> If I don't involve X.509/PKCS#7 in the selftest, then doing it from the ML-DSA
> modules during module init would be fine.
> 
> Do you (or anyone else) have any thoughts?

The FIPS self-test should just go in the algorithm module itself and
test ML-DSA directly.  See the other lib/crypto/ FIPS self-tests.
Please check the FIPS Implementation Guidance documentation to see what
is needed; it isn't actually very much.

- Eric

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-17 14:55 ` [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support David Howells
@ 2025-11-17 17:10   ` Eric Biggers
  2025-11-25 10:10     ` Ignat Korchagin
  2025-11-17 19:52   ` David Howells
                     ` (2 subsequent siblings)
  3 siblings, 1 reply; 32+ messages in thread
From: Eric Biggers @ 2025-11-17 17:10 UTC (permalink / raw)
  To: David Howells
  Cc: Herbert Xu, Luis Chamberlain, Petr Pavlu, Daniel Gomez,
	Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

On Mon, Nov 17, 2025 at 02:55:51PM +0000, David Howells wrote:
>  lib/crypto/Kconfig                            |   1 +
>  lib/crypto/Makefile                           |   2 +
>  lib/crypto/mldsa/Kconfig                      |  29 ++
>  lib/crypto/mldsa/Makefile                     |  20 +
>  lib/crypto/mldsa/crypto_mldsa_44.c            | 166 ++++++++
>  lib/crypto/mldsa/crypto_mldsa_65.c            | 166 ++++++++
>  lib/crypto/mldsa/crypto_mldsa_87.c            | 166 ++++++++
>  lib/crypto/mldsa/dilithium.h                  | 304 ++++++++++++++
>  lib/crypto/mldsa/dilithium_44.c               |  33 ++
>  lib/crypto/mldsa/dilithium_44.h               | 291 ++++++++++++++
>  lib/crypto/mldsa/dilithium_65.c               |  33 ++
>  lib/crypto/mldsa/dilithium_65.h               | 291 ++++++++++++++
>  lib/crypto/mldsa/dilithium_87.c               |  33 ++
>  lib/crypto/mldsa/dilithium_87.h               | 291 ++++++++++++++
>  lib/crypto/mldsa/dilithium_common.c           | 117 ++++++
>  lib/crypto/mldsa/dilithium_debug.h            |  49 +++
>  lib/crypto/mldsa/dilithium_ntt.c              |  89 +++++
>  lib/crypto/mldsa/dilithium_ntt.h              |  35 ++
>  lib/crypto/mldsa/dilithium_pack.h             | 119 ++++++
>  lib/crypto/mldsa/dilithium_poly.c             | 377 ++++++++++++++++++
>  lib/crypto/mldsa/dilithium_poly.h             | 181 +++++++++
>  lib/crypto/mldsa/dilithium_poly_c.h           | 141 +++++++
>  lib/crypto/mldsa/dilithium_poly_common.h      |  35 ++
>  lib/crypto/mldsa/dilithium_polyvec.h          | 343 ++++++++++++++++
>  lib/crypto/mldsa/dilithium_polyvec_c.h        |  81 ++++
>  lib/crypto/mldsa/dilithium_reduce.h           |  85 ++++
>  lib/crypto/mldsa/dilithium_rounding.c         | 128 ++++++
>  lib/crypto/mldsa/dilithium_service_helpers.h  |  99 +++++
>  lib/crypto/mldsa/dilithium_signature_c.c      | 279 +++++++++++++
>  lib/crypto/mldsa/dilithium_signature_c.h      |  37 ++
>  lib/crypto/mldsa/dilithium_signature_impl.h   | 370 +++++++++++++++++
>  lib/crypto/mldsa/dilithium_type.h             | 108 +++++
>  lib/crypto/mldsa/dilithium_zetas.c            |  68 ++++
>  .../mldsa/signature_domain_separation.c       | 204 ++++++++++
>  .../mldsa/signature_domain_separation.h       |  30 ++
>  35 files changed, 4801 insertions(+)

Over the past week I've been starting to review this massive addition.

I don't think this is on the right track.  This implementation is really
messy, with lots of unused functionality and unnecessary abstractions,
and code that doesn't follow kernel conventions.

In comparison, BoringSSL has an entire implementation of ML-DSA,
*including key generation and signing*, in a bit over 3000 lines in one
file.  But about half of that code is specific to key generation or
signing, which the kernel doesn't need, so in principle
verification-only shouldn't be much more than a thousand.  I find it to
be much easier to understand than leancrypto as well.

Historically we've had a lot of problems with people integrating code
from external sources into the kernel, like mpi, with properly "owning"
it because they feel like it's not their code and someone else is
responsible.  I feel like that's going to be a big problem here.

I think we can do better here and put together a smaller implementation
for the kernel that we'll actually be able to maintain.

- Eric

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: Pick up keys-pqc branch for linux-next?
  2025-11-17 15:22 ` Pick up keys-pqc branch for linux-next? David Howells
@ 2025-11-17 17:11   ` Eric Biggers
  2025-11-20  9:53     ` Stephen Rothwell
  0 siblings, 1 reply; 32+ messages in thread
From: Eric Biggers @ 2025-11-17 17:11 UTC (permalink / raw)
  To: David Howells
  Cc: Stephen Rothwell, Mark Brown, Herbert Xu, linux-crypto, keyrings,
	linux-modules, linux-next, linux-kernel

On Mon, Nov 17, 2025 at 03:22:03PM +0000, David Howells wrote:
> Hi Stephen,
> 
> Can you pick up my keys-pqc branch for linux-next please?  It can be found at:
> 
> 	https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/
> 	keys-pqc
> 
> Note that it's based on Eric Bigger's libcrypto/lbcrypto-next branch which I
> believe you already have in order to get SHA-3/SHAKE support.
> 

I don't really see the point yet, since this isn't going to be ready for
the next merge window anyway.

- Eric

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-17 14:55 ` [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support David Howells
  2025-11-17 17:10   ` Eric Biggers
@ 2025-11-17 19:52   ` David Howells
  2025-11-17 20:12     ` Eric Biggers
                       ` (2 more replies)
  2025-11-17 20:05   ` David Howells
  2025-11-21  1:37   ` Eric Biggers
  3 siblings, 3 replies; 32+ messages in thread
From: David Howells @ 2025-11-17 19:52 UTC (permalink / raw)
  To: Eric Biggers
  Cc: dhowells, Herbert Xu, Luis Chamberlain, Petr Pavlu, Daniel Gomez,
	Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

Eric Biggers <ebiggers@kernel.org> wrote:

> In comparison, BoringSSL has an entire implementation of ML-DSA, ...

... which cannot be used in the kernel due to the licence.

David


^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-17 14:55 ` [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support David Howells
  2025-11-17 17:10   ` Eric Biggers
  2025-11-17 19:52   ` David Howells
@ 2025-11-17 20:05   ` David Howells
  2025-11-21  1:37   ` Eric Biggers
  3 siblings, 0 replies; 32+ messages in thread
From: David Howells @ 2025-11-17 20:05 UTC (permalink / raw)
  To: Eric Biggers
  Cc: dhowells, Herbert Xu, Luis Chamberlain, Petr Pavlu, Daniel Gomez,
	Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

> Eric Biggers <ebiggers@kernel.org> wrote:
> 
> > In comparison, BoringSSL has an entire implementation of ML-DSA, ...
> 
> ... which cannot be used in the kernel due to the licence.

... and it's written in C++.  Now, whilst I'm in favour generally of moving
the kernel to C++, it could be a hard sell.

David


^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-17 19:52   ` David Howells
@ 2025-11-17 20:12     ` Eric Biggers
  2025-11-19  3:59       ` Eric Biggers
  2025-11-19 14:20       ` David Howells
  2025-11-17 20:19     ` James Bottomley
  2025-11-18  8:39     ` David Howells
  2 siblings, 2 replies; 32+ messages in thread
From: Eric Biggers @ 2025-11-17 20:12 UTC (permalink / raw)
  To: David Howells
  Cc: Herbert Xu, Luis Chamberlain, Petr Pavlu, Daniel Gomez,
	Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

On Mon, Nov 17, 2025 at 07:52:55PM +0000, David Howells wrote:
> Eric Biggers <ebiggers@kernel.org> wrote:
> 
> > In comparison, BoringSSL has an entire implementation of ML-DSA, ...
> 
> ... which cannot be used in the kernel due to the licence.
> 
> David

First, BoringSSL's license changed to Apache only recently.  An older
version of the code is available under a BSD style license.

Second, even with the new license I can get permission to relicense it
if needed.

Third, regardless of license BoringSSL's code can't be reused directly
in the kernel anyway, for various reasons.  My point is that a smaller,
cleaner, and more maintainable implementation of ML-DSA is possible, and
your submission misses the mark.

- Eric

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-17 19:52   ` David Howells
  2025-11-17 20:12     ` Eric Biggers
@ 2025-11-17 20:19     ` James Bottomley
  2025-11-18  8:39     ` David Howells
  2 siblings, 0 replies; 32+ messages in thread
From: James Bottomley @ 2025-11-17 20:19 UTC (permalink / raw)
  To: David Howells, Eric Biggers
  Cc: Herbert Xu, Luis Chamberlain, Petr Pavlu, Daniel Gomez,
	Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

On Mon, 2025-11-17 at 19:52 +0000, David Howells wrote:
> Eric Biggers <ebiggers@kernel.org> wrote:
> 
> > In comparison, BoringSSL has an entire implementation of ML-DSA,
> > ...
> 
> ... which cannot be used in the kernel due to the licence.

The licence problem is not insurmountable.  There are now real lawyers
(not just me) prepared to stand up and say Apache-2 is GPL-2
compatible:

https://digitalcommons.law.scu.edu/chtlj/vol40/iss3/2/

But even if you don't accept that, Google keeps effective joint
ownership of the code through their CLA and so could grant a dual
licence to the kernel anyway without needing to refer to any
contributors.

Regards,

James


^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-17 19:52   ` David Howells
  2025-11-17 20:12     ` Eric Biggers
  2025-11-17 20:19     ` James Bottomley
@ 2025-11-18  8:39     ` David Howells
  2025-11-18 12:59       ` James Bottomley
  2 siblings, 1 reply; 32+ messages in thread
From: David Howells @ 2025-11-18  8:39 UTC (permalink / raw)
  To: James Bottomley
  Cc: dhowells, Eric Biggers, Herbert Xu, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

James Bottomley <James.Bottomley@HansenPartnership.com> wrote:

> But even if you don't accept that, Google keeps effective joint
> ownership of the code through their CLA and so could grant a dual
> licence to the kernel anyway without needing to refer to any
> contributors.

Actually, the fact that BoringSSL's ML-DSA implementation uses C++ with heavy
use of integer-parametered templating is more insurmountable for borrowing
their code.  Yes, it does allow them to reduce their LoC to ~3000 and is much
more readable, but I can't do that in C.  Now, if we want to work on
persuading Linus to allow C++ into the kernel...

David


^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-18  8:39     ` David Howells
@ 2025-11-18 12:59       ` James Bottomley
  0 siblings, 0 replies; 32+ messages in thread
From: James Bottomley @ 2025-11-18 12:59 UTC (permalink / raw)
  To: David Howells
  Cc: Eric Biggers, Herbert Xu, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

On Tue, 2025-11-18 at 08:39 +0000, David Howells wrote:
> James Bottomley <James.Bottomley@HansenPartnership.com> wrote:
> 
> > But even if you don't accept that, Google keeps effective joint
> > ownership of the code through their CLA and so could grant a dual
> > licence to the kernel anyway without needing to refer to any
> > contributors.
> 
> Actually, the fact that BoringSSL's ML-DSA implementation uses C++
> with heavy use of integer-parametered templating is more
> insurmountable for borrowing their code.  Yes, it does allow them to
> reduce their LoC to ~3000 and is much more readable, but I can't do
> that in C.

I was only commenting on the legality of copying not the technical
feasibility. 

>   Now, if we want to work on persuading Linus to allow C++ into the
> kernel...

Having worked on it, C++ is a bit of a messy language in that there are
many more idioms for the same construct than in C, so I can see why C
is preferred for cleaner coding.  On the other hand if the safety
profiles work actually produces something useful (unlike safe C++ which
just flamed out) I could see that being a reason to revisit.

Regards,

James


^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-17 20:12     ` Eric Biggers
@ 2025-11-19  3:59       ` Eric Biggers
  2025-11-19 14:20       ` David Howells
  1 sibling, 0 replies; 32+ messages in thread
From: Eric Biggers @ 2025-11-19  3:59 UTC (permalink / raw)
  To: David Howells
  Cc: Herbert Xu, Luis Chamberlain, Petr Pavlu, Daniel Gomez,
	Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

On Mon, Nov 17, 2025 at 12:12:33PM -0800, Eric Biggers wrote:
> My point is that a smaller, cleaner, and more maintainable
> implementation of ML-DSA is possible,

I've written an implementation of ML-DSA verification in about 600
lines.  It may grow slightly as I clean it up and test it, but we
definitely don't need 4800 lines.  I'll send it out once it's ready.

By the way, your proposed KUnit test suite has no negative test cases :(
We can do better than that.

- Eric

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-17 20:12     ` Eric Biggers
  2025-11-19  3:59       ` Eric Biggers
@ 2025-11-19 14:20       ` David Howells
  1 sibling, 0 replies; 32+ messages in thread
From: David Howells @ 2025-11-19 14:20 UTC (permalink / raw)
  To: Eric Biggers
  Cc: dhowells, Herbert Xu, Luis Chamberlain, Petr Pavlu, Daniel Gomez,
	Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

Eric Biggers <ebiggers@kernel.org> wrote:

> I've written an implementation of ML-DSA verification in about 600
> lines.  It may grow slightly as I clean it up and test it, but we
> definitely don't need 4800 lines.  I'll send it out once it's ready.

Could you post what you have now so that I can have a look at it, please?  It
doesn't matter if it's fully tested, but I can at least compare the algorithm
to that of Leancrypto.

David


^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: Pick up keys-pqc branch for linux-next?
  2025-11-17 17:11   ` Eric Biggers
@ 2025-11-20  9:53     ` Stephen Rothwell
  2025-11-21  2:48       ` Eric Biggers
  0 siblings, 1 reply; 32+ messages in thread
From: Stephen Rothwell @ 2025-11-20  9:53 UTC (permalink / raw)
  To: David Howells
  Cc: Eric Biggers, Mark Brown, Herbert Xu, linux-crypto, keyrings,
	linux-modules, linux-next, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 770 bytes --]

Hi David,

On Mon, 17 Nov 2025 09:11:26 -0800 Eric Biggers <ebiggers@kernel.org> wrote:
>
> On Mon, Nov 17, 2025 at 03:22:03PM +0000, David Howells wrote:
> > 
> > Can you pick up my keys-pqc branch for linux-next please?  It can be found at:
> > 
> > 	https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/
> > 	keys-pqc
> > 
> > Note that it's based on Eric Bigger's libcrypto/lbcrypto-next branch which I
> > believe you already have in order to get SHA-3/SHAKE support.
> 
> I don't really see the point yet, since this isn't going to be ready for
> the next merge window anyway.

Yeah, if it is not going into the next merge window, then I don't want
it until after that merge window closes, OK?

-- 
Cheers,
Stephen Rothwell

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-17 14:55 ` [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support David Howells
                     ` (2 preceding siblings ...)
  2025-11-17 20:05   ` David Howells
@ 2025-11-21  1:37   ` Eric Biggers
  2025-11-25  4:10     ` Eric Biggers
  3 siblings, 1 reply; 32+ messages in thread
From: Eric Biggers @ 2025-11-21  1:37 UTC (permalink / raw)
  To: David Howells
  Cc: Herbert Xu, Luis Chamberlain, Petr Pavlu, Daniel Gomez,
	Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

On Mon, Nov 17, 2025 at 02:55:51PM +0000, David Howells wrote:
> +/*
> + * @brief poly_uniform - Sample polynomial with uniformly random coefficients
> + *			 in [0,Q-1] by performing rejection sampling on the
> + *			 output stream of SHAKE128(seed|nonce).
> + *
> + * @param [out] a pointer to output polynomial
> + * @param [in] seed byte array with seed of length DILITHIUM_SEEDBYTES
> + * @param [in] nonce 2-byte nonce
> + */
> +void poly_uniform(poly *a, const uint8_t seed[DILITHIUM_SEEDBYTES],
> +		  __le16 nonce, void *ws_buf)
> +{
> +	struct shake_ctx hash_ctx;
> +	unsigned int i, ctr, off;
> +	unsigned int buflen = POLY_UNIFORM_NBLOCKS * SHAKE128_BLOCK_SIZE;
> +	uint8_t *buf = ws_buf;
> +
> +	shake128_init(&hash_ctx);
> +	shake_update(&hash_ctx, seed, DILITHIUM_SEEDBYTES);
> +	shake_update(&hash_ctx, (uint8_t *)&nonce, sizeof(nonce));
> +	shake_squeeze(&hash_ctx, buf, buflen);
> +
> +	ctr = rej_uniform(a->coeffs, DILITHIUM_N, buf, buflen);
> +
> +	while (ctr < DILITHIUM_N) {
> +		off = buflen % 3;
> +		for (i = 0; i < off; ++i)
> +			buf[i] = buf[buflen - off + i];
> +
> +		shake_squeeze(&hash_ctx, buf + off, SHAKE128_BLOCK_SIZE);
> +		buflen = DILITHIUM_SEEDBYTES + off;
> +		ctr += rej_uniform(a->coeffs + ctr, DILITHIUM_N - ctr, buf,
> +				   buflen);
> +	}
> +
> +	shake_zeroize_ctx(&hash_ctx);
> +}

By the way, the above has a bug.  In the second and later squeezes, it
squeezes SHAKE128_BLOCK_SIZE (168) bytes, but then it uses only the
first DILITHIUM_SEEDBYTES (32) bytes.

Now, that 32 is on top of the 840-byte first squeeze, so there are 872
correct bytes which is enough for 290 samples.  So an incorrect matrix
would be generated only if more than 290 samples happen to be required
to get the 256 coefficients.  q / 2^23 = ~99.9% of coefficients are
accepted, so that number of rejections would be pretty unlikely.

Still, it's a bug.  Anyway, we're not going to use this code (we'll use
my code that does this correctly and in a simpler way), but I thought
I'd point it out so that Stephan can fix it.  This seems to be a
"leancrypto" specific bug.

Note: this feedback should not be taken as implying that I've reviewed
the entire 4800 lines of code.  I just happened to notice this.

- Eric

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: Pick up keys-pqc branch for linux-next?
  2025-11-20  9:53     ` Stephen Rothwell
@ 2025-11-21  2:48       ` Eric Biggers
  0 siblings, 0 replies; 32+ messages in thread
From: Eric Biggers @ 2025-11-21  2:48 UTC (permalink / raw)
  To: Stephen Rothwell
  Cc: David Howells, Mark Brown, Herbert Xu, linux-crypto, keyrings,
	linux-modules, linux-next, linux-kernel

On Thu, Nov 20, 2025 at 08:53:41PM +1100, Stephen Rothwell wrote:
> Hi David,
> 
> On Mon, 17 Nov 2025 09:11:26 -0800 Eric Biggers <ebiggers@kernel.org> wrote:
> >
> > On Mon, Nov 17, 2025 at 03:22:03PM +0000, David Howells wrote:
> > > 
> > > Can you pick up my keys-pqc branch for linux-next please?  It can be found at:
> > > 
> > > 	https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/
> > > 	keys-pqc
> > > 
> > > Note that it's based on Eric Bigger's libcrypto/lbcrypto-next branch which I
> > > believe you already have in order to get SHA-3/SHAKE support.
> > 
> > I don't really see the point yet, since this isn't going to be ready for
> > the next merge window anyway.
> 
> Yeah, if it is not going into the next merge window, then I don't want
> it until after that merge window closes, OK?

Makes sense to me.  David, with
https://lore.kernel.org/r/20251120003653.335863-2-ebiggers@kernel.org
we're getting closer, but it's still too late for 6.19.  We need proper
tests to be added at the same time as the ML-DSA implementation itself.
The higher-level parts such as crypto/asymmetric_keys/ need review too.
Also, lib/crypto/ changes should go through the libcrypto tree.

wycheproof has negative test vectors for ML-DSA edge cases.  We maybe
could borrow those.  Note that ML-DSA keys and signatures are very
large, which results in huge files for the test vectors.  I'd also like
to keep the size down, but we might not have much choice there.

I'm also working to get another crypto-oriented developer, who doesn't
normally work on the Linux kernel, to review my ML-DSA code.  (I don't
think I was going to have any chance at getting anyone to look at the
original 4800-line submission, but with the 600-line one it's feasible.)

It's also worth noting that this is ML-DSA, not ML-KEM.  The
cryptographic community generally views upgrading to quantum-resistant
key encapsulation (e.g. ML-KEM) as more urgent than upgrading to
quantum-resistant signatures (e.g. ML-DSA).  I assume you have a reason
why you want the signatures.  That's fine, and I'm okay with ML-DSA
support being added.  But we shouldn't rush it in.

- Eric

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-21  1:37   ` Eric Biggers
@ 2025-11-25  4:10     ` Eric Biggers
  2025-11-25  8:32       ` Stephan Müller
  0 siblings, 1 reply; 32+ messages in thread
From: Eric Biggers @ 2025-11-25  4:10 UTC (permalink / raw)
  To: David Howells
  Cc: Herbert Xu, Luis Chamberlain, Petr Pavlu, Daniel Gomez,
	Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, Ignat Korchagin, linux-crypto,
	keyrings, linux-modules, linux-kernel

On Fri, Nov 21, 2025 at 01:37:16AM +0000, Eric Biggers wrote:
> On Mon, Nov 17, 2025 at 02:55:51PM +0000, David Howells wrote:
> > +/*
> > + * @brief poly_uniform - Sample polynomial with uniformly random coefficients
> > + *			 in [0,Q-1] by performing rejection sampling on the
> > + *			 output stream of SHAKE128(seed|nonce).
> > + *
> > + * @param [out] a pointer to output polynomial
> > + * @param [in] seed byte array with seed of length DILITHIUM_SEEDBYTES
> > + * @param [in] nonce 2-byte nonce
> > + */
> > +void poly_uniform(poly *a, const uint8_t seed[DILITHIUM_SEEDBYTES],
> > +		  __le16 nonce, void *ws_buf)
> > +{
> > +	struct shake_ctx hash_ctx;
> > +	unsigned int i, ctr, off;
> > +	unsigned int buflen = POLY_UNIFORM_NBLOCKS * SHAKE128_BLOCK_SIZE;
> > +	uint8_t *buf = ws_buf;
> > +
> > +	shake128_init(&hash_ctx);
> > +	shake_update(&hash_ctx, seed, DILITHIUM_SEEDBYTES);
> > +	shake_update(&hash_ctx, (uint8_t *)&nonce, sizeof(nonce));
> > +	shake_squeeze(&hash_ctx, buf, buflen);
> > +
> > +	ctr = rej_uniform(a->coeffs, DILITHIUM_N, buf, buflen);
> > +
> > +	while (ctr < DILITHIUM_N) {
> > +		off = buflen % 3;
> > +		for (i = 0; i < off; ++i)
> > +			buf[i] = buf[buflen - off + i];
> > +
> > +		shake_squeeze(&hash_ctx, buf + off, SHAKE128_BLOCK_SIZE);
> > +		buflen = DILITHIUM_SEEDBYTES + off;
> > +		ctr += rej_uniform(a->coeffs + ctr, DILITHIUM_N - ctr, buf,
> > +				   buflen);
> > +	}
> > +
> > +	shake_zeroize_ctx(&hash_ctx);
> > +}
> 
> By the way, the above has a bug.  In the second and later squeezes, it
> squeezes SHAKE128_BLOCK_SIZE (168) bytes, but then it uses only the
> first DILITHIUM_SEEDBYTES (32) bytes.
> 
> Now, that 32 is on top of the 840-byte first squeeze, so there are 872
> correct bytes which is enough for 290 samples.  So an incorrect matrix
> would be generated only if more than 290 samples happen to be required
> to get the 256 coefficients.  q / 2^23 = ~99.9% of coefficients are
> accepted, so that number of rejections would be pretty unlikely.
> 
> Still, it's a bug.  Anyway, we're not going to use this code (we'll use
> my code that does this correctly and in a simpler way), but I thought
> I'd point it out so that Stephan can fix it.  This seems to be a
> "leancrypto" specific bug.
> 
> Note: this feedback should not be taken as implying that I've reviewed
> the entire 4800 lines of code.  I just happened to notice this.

No reply from Stephan yet, so to make sure this doesn't get missed I
also opened an issue at
https://github.com/smuellerDD/leancrypto/issues/42

- Eric

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-25  4:10     ` Eric Biggers
@ 2025-11-25  8:32       ` Stephan Müller
  0 siblings, 0 replies; 32+ messages in thread
From: Stephan Müller @ 2025-11-25  8:32 UTC (permalink / raw)
  To: David Howells, Eric Biggers
  Cc: Herbert Xu, Luis Chamberlain, Petr Pavlu, Daniel Gomez,
	Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel, Lukas Wunner,
	Ignat Korchagin, linux-crypto, keyrings, linux-modules,
	linux-kernel

Am Dienstag, 25. November 2025, 05:10:50 Mitteleuropäische Normalzeit schrieb 
Eric Biggers:

Hi Eric,

> No reply from Stephan yet, so to make sure this doesn't get missed I
> also opened an issue at
> https://github.com/smuellerDD/leancrypto/issues/42

Thanks for the report, fixed.

Ciao
Stephan



^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-17 17:10   ` Eric Biggers
@ 2025-11-25 10:10     ` Ignat Korchagin
  2025-11-25 20:24       ` Eric Biggers
  0 siblings, 1 reply; 32+ messages in thread
From: Ignat Korchagin @ 2025-11-25 10:10 UTC (permalink / raw)
  To: Eric Biggers
  Cc: David Howells, Herbert Xu, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, linux-crypto, keyrings,
	linux-modules, linux-kernel

Hi all,

On Mon, Nov 17, 2025 at 5:11 PM Eric Biggers <ebiggers@kernel.org> wrote:
>
> On Mon, Nov 17, 2025 at 02:55:51PM +0000, David Howells wrote:
> >  lib/crypto/Kconfig                            |   1 +
> >  lib/crypto/Makefile                           |   2 +
> >  lib/crypto/mldsa/Kconfig                      |  29 ++
> >  lib/crypto/mldsa/Makefile                     |  20 +
> >  lib/crypto/mldsa/crypto_mldsa_44.c            | 166 ++++++++
> >  lib/crypto/mldsa/crypto_mldsa_65.c            | 166 ++++++++
> >  lib/crypto/mldsa/crypto_mldsa_87.c            | 166 ++++++++
> >  lib/crypto/mldsa/dilithium.h                  | 304 ++++++++++++++
> >  lib/crypto/mldsa/dilithium_44.c               |  33 ++
> >  lib/crypto/mldsa/dilithium_44.h               | 291 ++++++++++++++
> >  lib/crypto/mldsa/dilithium_65.c               |  33 ++
> >  lib/crypto/mldsa/dilithium_65.h               | 291 ++++++++++++++
> >  lib/crypto/mldsa/dilithium_87.c               |  33 ++
> >  lib/crypto/mldsa/dilithium_87.h               | 291 ++++++++++++++
> >  lib/crypto/mldsa/dilithium_common.c           | 117 ++++++
> >  lib/crypto/mldsa/dilithium_debug.h            |  49 +++
> >  lib/crypto/mldsa/dilithium_ntt.c              |  89 +++++
> >  lib/crypto/mldsa/dilithium_ntt.h              |  35 ++
> >  lib/crypto/mldsa/dilithium_pack.h             | 119 ++++++
> >  lib/crypto/mldsa/dilithium_poly.c             | 377 ++++++++++++++++++
> >  lib/crypto/mldsa/dilithium_poly.h             | 181 +++++++++
> >  lib/crypto/mldsa/dilithium_poly_c.h           | 141 +++++++
> >  lib/crypto/mldsa/dilithium_poly_common.h      |  35 ++
> >  lib/crypto/mldsa/dilithium_polyvec.h          | 343 ++++++++++++++++
> >  lib/crypto/mldsa/dilithium_polyvec_c.h        |  81 ++++
> >  lib/crypto/mldsa/dilithium_reduce.h           |  85 ++++
> >  lib/crypto/mldsa/dilithium_rounding.c         | 128 ++++++
> >  lib/crypto/mldsa/dilithium_service_helpers.h  |  99 +++++
> >  lib/crypto/mldsa/dilithium_signature_c.c      | 279 +++++++++++++
> >  lib/crypto/mldsa/dilithium_signature_c.h      |  37 ++
> >  lib/crypto/mldsa/dilithium_signature_impl.h   | 370 +++++++++++++++++
> >  lib/crypto/mldsa/dilithium_type.h             | 108 +++++
> >  lib/crypto/mldsa/dilithium_zetas.c            |  68 ++++
> >  .../mldsa/signature_domain_separation.c       | 204 ++++++++++
> >  .../mldsa/signature_domain_separation.h       |  30 ++
> >  35 files changed, 4801 insertions(+)
>
> Over the past week I've been starting to review this massive addition.
>
> I don't think this is on the right track.  This implementation is really
> messy, with lots of unused functionality and unnecessary abstractions,
> and code that doesn't follow kernel conventions.
>
> In comparison, BoringSSL has an entire implementation of ML-DSA,
> *including key generation and signing*, in a bit over 3000 lines in one
> file.  But about half of that code is specific to key generation or
> signing, which the kernel doesn't need, so in principle
> verification-only shouldn't be much more than a thousand.  I find it to
> be much easier to understand than leancrypto as well.
>
> Historically we've had a lot of problems with people integrating code
> from external sources into the kernel, like mpi, with properly "owning"
> it because they feel like it's not their code and someone else is
> responsible.  I feel like that's going to be a big problem here.
>
> I think we can do better here and put together a smaller implementation
> for the kernel that we'll actually be able to maintain.

I was thinking about this lately for some time - even put forward a
small discussion proposal for upcoming Plumbers (which wasn't accepted
unfortunately). Should we consider somehow safely "outsourcing" at
least some (asymmetric - potentially slow anyway) crypto
implementations to userspace? Something similar to
request_module/request_firmware/request_key usermode helpers or an
io_uring interface or a crypto socket? This way we can bring any
well-maintained crypto library (and even multiple ones) to the kernel:
  * it can have any software license
  * can be written in any programming language
  * can use architecture vector instructions more easily
  * can have any certifications out of the box (looking at you - FIPS)
  * distros would have the ability to plug their own
  * maybe it can even do private key crypto (which I personally would
really like more support of and it would be acceptable to Herbert)

Given the past experience of RSA and mpi - it is not that difficult to
port something to the kernel, but quite hard to maintain it over time
in a secure manner. With a userspace approach the kernel can
piggy-back on proven vendors like any other piece of open source
software out there.

I understand that there probably still be a need for some in-kernel
crypto, so the proposal here is not to fully replace things, but
rather complement the current offerings with an interface, which could
enable faster adoption of newer (and more secure versions of existing)
crypto algorithms.

> - Eric

Ignat

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-25 10:10     ` Ignat Korchagin
@ 2025-11-25 20:24       ` Eric Biggers
  2025-11-25 20:51         ` Ignat Korchagin
  0 siblings, 1 reply; 32+ messages in thread
From: Eric Biggers @ 2025-11-25 20:24 UTC (permalink / raw)
  To: Ignat Korchagin
  Cc: David Howells, Herbert Xu, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, linux-crypto, keyrings,
	linux-modules, linux-kernel

On Tue, Nov 25, 2025 at 10:10:18AM +0000, Ignat Korchagin wrote:
> Hi all,
> 
> On Mon, Nov 17, 2025 at 5:11 PM Eric Biggers <ebiggers@kernel.org> wrote:
> >
> > On Mon, Nov 17, 2025 at 02:55:51PM +0000, David Howells wrote:
> > >  lib/crypto/Kconfig                            |   1 +
> > >  lib/crypto/Makefile                           |   2 +
> > >  lib/crypto/mldsa/Kconfig                      |  29 ++
> > >  lib/crypto/mldsa/Makefile                     |  20 +
> > >  lib/crypto/mldsa/crypto_mldsa_44.c            | 166 ++++++++
> > >  lib/crypto/mldsa/crypto_mldsa_65.c            | 166 ++++++++
> > >  lib/crypto/mldsa/crypto_mldsa_87.c            | 166 ++++++++
> > >  lib/crypto/mldsa/dilithium.h                  | 304 ++++++++++++++
> > >  lib/crypto/mldsa/dilithium_44.c               |  33 ++
> > >  lib/crypto/mldsa/dilithium_44.h               | 291 ++++++++++++++
> > >  lib/crypto/mldsa/dilithium_65.c               |  33 ++
> > >  lib/crypto/mldsa/dilithium_65.h               | 291 ++++++++++++++
> > >  lib/crypto/mldsa/dilithium_87.c               |  33 ++
> > >  lib/crypto/mldsa/dilithium_87.h               | 291 ++++++++++++++
> > >  lib/crypto/mldsa/dilithium_common.c           | 117 ++++++
> > >  lib/crypto/mldsa/dilithium_debug.h            |  49 +++
> > >  lib/crypto/mldsa/dilithium_ntt.c              |  89 +++++
> > >  lib/crypto/mldsa/dilithium_ntt.h              |  35 ++
> > >  lib/crypto/mldsa/dilithium_pack.h             | 119 ++++++
> > >  lib/crypto/mldsa/dilithium_poly.c             | 377 ++++++++++++++++++
> > >  lib/crypto/mldsa/dilithium_poly.h             | 181 +++++++++
> > >  lib/crypto/mldsa/dilithium_poly_c.h           | 141 +++++++
> > >  lib/crypto/mldsa/dilithium_poly_common.h      |  35 ++
> > >  lib/crypto/mldsa/dilithium_polyvec.h          | 343 ++++++++++++++++
> > >  lib/crypto/mldsa/dilithium_polyvec_c.h        |  81 ++++
> > >  lib/crypto/mldsa/dilithium_reduce.h           |  85 ++++
> > >  lib/crypto/mldsa/dilithium_rounding.c         | 128 ++++++
> > >  lib/crypto/mldsa/dilithium_service_helpers.h  |  99 +++++
> > >  lib/crypto/mldsa/dilithium_signature_c.c      | 279 +++++++++++++
> > >  lib/crypto/mldsa/dilithium_signature_c.h      |  37 ++
> > >  lib/crypto/mldsa/dilithium_signature_impl.h   | 370 +++++++++++++++++
> > >  lib/crypto/mldsa/dilithium_type.h             | 108 +++++
> > >  lib/crypto/mldsa/dilithium_zetas.c            |  68 ++++
> > >  .../mldsa/signature_domain_separation.c       | 204 ++++++++++
> > >  .../mldsa/signature_domain_separation.h       |  30 ++
> > >  35 files changed, 4801 insertions(+)
> >
> > Over the past week I've been starting to review this massive addition.
> >
> > I don't think this is on the right track.  This implementation is really
> > messy, with lots of unused functionality and unnecessary abstractions,
> > and code that doesn't follow kernel conventions.
> >
> > In comparison, BoringSSL has an entire implementation of ML-DSA,
> > *including key generation and signing*, in a bit over 3000 lines in one
> > file.  But about half of that code is specific to key generation or
> > signing, which the kernel doesn't need, so in principle
> > verification-only shouldn't be much more than a thousand.  I find it to
> > be much easier to understand than leancrypto as well.
> >
> > Historically we've had a lot of problems with people integrating code
> > from external sources into the kernel, like mpi, with properly "owning"
> > it because they feel like it's not their code and someone else is
> > responsible.  I feel like that's going to be a big problem here.
> >
> > I think we can do better here and put together a smaller implementation
> > for the kernel that we'll actually be able to maintain.
> 
> I was thinking about this lately for some time - even put forward a
> small discussion proposal for upcoming Plumbers (which wasn't accepted
> unfortunately). Should we consider somehow safely "outsourcing" at
> least some (asymmetric - potentially slow anyway) crypto
> implementations to userspace? Something similar to
> request_module/request_firmware/request_key usermode helpers or an
> io_uring interface or a crypto socket? This way we can bring any
> well-maintained crypto library (and even multiple ones) to the kernel:
>   * it can have any software license
>   * can be written in any programming language
>   * can use architecture vector instructions more easily
>   * can have any certifications out of the box (looking at you - FIPS)
>   * distros would have the ability to plug their own
>   * maybe it can even do private key crypto (which I personally would
> really like more support of and it would be acceptable to Herbert)
> 
> Given the past experience of RSA and mpi - it is not that difficult to
> port something to the kernel, but quite hard to maintain it over time
> in a secure manner. With a userspace approach the kernel can
> piggy-back on proven vendors like any other piece of open source
> software out there.
> 
> I understand that there probably still be a need for some in-kernel
> crypto, so the proposal here is not to fully replace things, but
> rather complement the current offerings with an interface, which could
> enable faster adoption of newer (and more secure versions of existing)
> crypto algorithms.

The performance cost of that would be very high, so it would only have
any chance at possibly being reasonable for some of the asymmetric
algorithms.  It would also introduce reliability issues.

I'll also note that the main reason that people seem to want private key
operations in the kernel is for the keyctl() UAPIs for userspace, which
is already a bad idea.  So I guess we end up with userspace calling into
the kernel, which calls back into userspace to use some userspace crypto
library which the original userspace program refused to use in the first
place for some reason?  It makes no sense to me, sorry.

There is the opportunity to share more code with userspace projects at
the source code level.  Just it doesn't always work out due to different
languages, licences, requirements, conventions, and implementation
qualities.  For ML-DSA verification I didn't see a good alternative to
just writing it myself.  But in other cases a different conclusion could
be reached.  The kernel uses a lot of the assembly files from
CRYPTOGAMS, for example, and some of the Curve25519 code (including
formally verified code) is imported from other sources.

- Eric

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support
  2025-11-25 20:24       ` Eric Biggers
@ 2025-11-25 20:51         ` Ignat Korchagin
  0 siblings, 0 replies; 32+ messages in thread
From: Ignat Korchagin @ 2025-11-25 20:51 UTC (permalink / raw)
  To: Eric Biggers
  Cc: David Howells, Herbert Xu, Luis Chamberlain, Petr Pavlu,
	Daniel Gomez, Sami Tolvanen, Jason A . Donenfeld, Ard Biesheuvel,
	Stephan Mueller, Lukas Wunner, linux-crypto, keyrings,
	linux-modules, linux-kernel

On Tue, Nov 25, 2025 at 8:24 PM Eric Biggers <ebiggers@kernel.org> wrote:
>
> On Tue, Nov 25, 2025 at 10:10:18AM +0000, Ignat Korchagin wrote:
> > Hi all,
> >
> > On Mon, Nov 17, 2025 at 5:11 PM Eric Biggers <ebiggers@kernel.org> wrote:
> > >
> > > On Mon, Nov 17, 2025 at 02:55:51PM +0000, David Howells wrote:
> > > >  lib/crypto/Kconfig                            |   1 +
> > > >  lib/crypto/Makefile                           |   2 +
> > > >  lib/crypto/mldsa/Kconfig                      |  29 ++
> > > >  lib/crypto/mldsa/Makefile                     |  20 +
> > > >  lib/crypto/mldsa/crypto_mldsa_44.c            | 166 ++++++++
> > > >  lib/crypto/mldsa/crypto_mldsa_65.c            | 166 ++++++++
> > > >  lib/crypto/mldsa/crypto_mldsa_87.c            | 166 ++++++++
> > > >  lib/crypto/mldsa/dilithium.h                  | 304 ++++++++++++++
> > > >  lib/crypto/mldsa/dilithium_44.c               |  33 ++
> > > >  lib/crypto/mldsa/dilithium_44.h               | 291 ++++++++++++++
> > > >  lib/crypto/mldsa/dilithium_65.c               |  33 ++
> > > >  lib/crypto/mldsa/dilithium_65.h               | 291 ++++++++++++++
> > > >  lib/crypto/mldsa/dilithium_87.c               |  33 ++
> > > >  lib/crypto/mldsa/dilithium_87.h               | 291 ++++++++++++++
> > > >  lib/crypto/mldsa/dilithium_common.c           | 117 ++++++
> > > >  lib/crypto/mldsa/dilithium_debug.h            |  49 +++
> > > >  lib/crypto/mldsa/dilithium_ntt.c              |  89 +++++
> > > >  lib/crypto/mldsa/dilithium_ntt.h              |  35 ++
> > > >  lib/crypto/mldsa/dilithium_pack.h             | 119 ++++++
> > > >  lib/crypto/mldsa/dilithium_poly.c             | 377 ++++++++++++++++++
> > > >  lib/crypto/mldsa/dilithium_poly.h             | 181 +++++++++
> > > >  lib/crypto/mldsa/dilithium_poly_c.h           | 141 +++++++
> > > >  lib/crypto/mldsa/dilithium_poly_common.h      |  35 ++
> > > >  lib/crypto/mldsa/dilithium_polyvec.h          | 343 ++++++++++++++++
> > > >  lib/crypto/mldsa/dilithium_polyvec_c.h        |  81 ++++
> > > >  lib/crypto/mldsa/dilithium_reduce.h           |  85 ++++
> > > >  lib/crypto/mldsa/dilithium_rounding.c         | 128 ++++++
> > > >  lib/crypto/mldsa/dilithium_service_helpers.h  |  99 +++++
> > > >  lib/crypto/mldsa/dilithium_signature_c.c      | 279 +++++++++++++
> > > >  lib/crypto/mldsa/dilithium_signature_c.h      |  37 ++
> > > >  lib/crypto/mldsa/dilithium_signature_impl.h   | 370 +++++++++++++++++
> > > >  lib/crypto/mldsa/dilithium_type.h             | 108 +++++
> > > >  lib/crypto/mldsa/dilithium_zetas.c            |  68 ++++
> > > >  .../mldsa/signature_domain_separation.c       | 204 ++++++++++
> > > >  .../mldsa/signature_domain_separation.h       |  30 ++
> > > >  35 files changed, 4801 insertions(+)
> > >
> > > Over the past week I've been starting to review this massive addition.
> > >
> > > I don't think this is on the right track.  This implementation is really
> > > messy, with lots of unused functionality and unnecessary abstractions,
> > > and code that doesn't follow kernel conventions.
> > >
> > > In comparison, BoringSSL has an entire implementation of ML-DSA,
> > > *including key generation and signing*, in a bit over 3000 lines in one
> > > file.  But about half of that code is specific to key generation or
> > > signing, which the kernel doesn't need, so in principle
> > > verification-only shouldn't be much more than a thousand.  I find it to
> > > be much easier to understand than leancrypto as well.
> > >
> > > Historically we've had a lot of problems with people integrating code
> > > from external sources into the kernel, like mpi, with properly "owning"
> > > it because they feel like it's not their code and someone else is
> > > responsible.  I feel like that's going to be a big problem here.
> > >
> > > I think we can do better here and put together a smaller implementation
> > > for the kernel that we'll actually be able to maintain.
> >
> > I was thinking about this lately for some time - even put forward a
> > small discussion proposal for upcoming Plumbers (which wasn't accepted
> > unfortunately). Should we consider somehow safely "outsourcing" at
> > least some (asymmetric - potentially slow anyway) crypto
> > implementations to userspace? Something similar to
> > request_module/request_firmware/request_key usermode helpers or an
> > io_uring interface or a crypto socket? This way we can bring any
> > well-maintained crypto library (and even multiple ones) to the kernel:
> >   * it can have any software license
> >   * can be written in any programming language
> >   * can use architecture vector instructions more easily
> >   * can have any certifications out of the box (looking at you - FIPS)
> >   * distros would have the ability to plug their own
> >   * maybe it can even do private key crypto (which I personally would
> > really like more support of and it would be acceptable to Herbert)
> >
> > Given the past experience of RSA and mpi - it is not that difficult to
> > port something to the kernel, but quite hard to maintain it over time
> > in a secure manner. With a userspace approach the kernel can
> > piggy-back on proven vendors like any other piece of open source
> > software out there.
> >
> > I understand that there probably still be a need for some in-kernel
> > crypto, so the proposal here is not to fully replace things, but
> > rather complement the current offerings with an interface, which could
> > enable faster adoption of newer (and more secure versions of existing)
> > crypto algorithms.
>
> The performance cost of that would be very high, so it would only have
> any chance at possibly being reasonable for some of the asymmetric
> algorithms.  It would also introduce reliability issues.

Yes, definitely. For the userspace approach I would think only
asymmetric algorithms. For "reliability issues" I don't know if it is
a problem of the kernel itself, or the user/admin of the system. The
kernel supports network-based and userspace-based filesystems and
userspace-based block devices even and users successfully use them as
root filesystems. Surely a small crypto agent running locally would
not be worse than this.

> I'll also note that the main reason that people seem to want private key
> operations in the kernel is for the keyctl() UAPIs for userspace, which
> is already a bad idea.  So I guess we end up with userspace calling into

Can you elaborate on this? (I want to understand for myself). I think
keyctl UAPIs for private keys are a great idea and allows building
good (and relatively simple) secure architectures. So I want to enable
more of this, not less.

> the kernel, which calls back into userspace to use some userspace crypto
> library which the original userspace program refused to use in the first
> place for some reason?  It makes no sense to me, sorry.

It does make sense for userspace programs (apart from potential keyctl
users which don't want to have private keys in their address space),
but what about in-kernel services? How is this fundamentally different
from request_module, for example? If the kernel needs a module, it
tells userspace and there is a userspace helper, which provides it. It
is an "external service" to the kernel. So crypto can be another
service. After all, microkernels have been doing this forever.

> There is the opportunity to share more code with userspace projects at
> the source code level.  Just it doesn't always work out due to different
> languages, licences, requirements, conventions, and implementation
> qualities.  For ML-DSA verification I didn't see a good alternative to
> just writing it myself.  But in other cases a different conclusion could
> be reached.  The kernel uses a lot of the assembly files from

What about sharing code at the binary level? At Cloudflare we have an
internal kernel crypto driver, which just imports its implementation
directly from compiled BoringSSL into the kernel space. So in the end
it is fully in-kernel and fast, but the advantage is that the code
itself comes from BoringSSL (and we regularly update it). There are
rough edges of course (like using vector instructions, different stack
alignment etc), but it kinda works and I think with some investment we
can make such an approach upstream. We even considered open sourcing
it, but not sure about licensing as we effectively have a bespoke
"module loader" for BoringSSL, which is Apache (I hope James is right
that Apache may be considered GPL-2 compatible in the future).

While I think such an approach is much more technically challenging,
it provides "best of both worlds" by having fast in-kernel crypto
directly from established libraries.

> CRYPTOGAMS, for example, and some of the Curve25519 code (including
> formally verified code) is imported from other sources.
>
> - Eric

Ignat

^ permalink raw reply	[flat|nested] 32+ messages in thread

end of thread, other threads:[~2025-11-25 20:52 UTC | newest]

Thread overview: 32+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-17 14:55 [PATCH v9 0/9] lib/crypto: Add ML-DSA signing David Howells
2025-11-17 14:55 ` [PATCH v9 1/9] crypto: Add support for shake256 through crypto_shash David Howells
2025-11-17 16:50   ` Eric Biggers
2025-11-17 14:55 ` [PATCH v9 2/9] crypto: Add ML-DSA/Dilithium verify support David Howells
2025-11-17 17:10   ` Eric Biggers
2025-11-25 10:10     ` Ignat Korchagin
2025-11-25 20:24       ` Eric Biggers
2025-11-25 20:51         ` Ignat Korchagin
2025-11-17 19:52   ` David Howells
2025-11-17 20:12     ` Eric Biggers
2025-11-19  3:59       ` Eric Biggers
2025-11-19 14:20       ` David Howells
2025-11-17 20:19     ` James Bottomley
2025-11-18  8:39     ` David Howells
2025-11-18 12:59       ` James Bottomley
2025-11-17 20:05   ` David Howells
2025-11-21  1:37   ` Eric Biggers
2025-11-25  4:10     ` Eric Biggers
2025-11-25  8:32       ` Stephan Müller
2025-11-17 14:55 ` [PATCH v9 3/9] mldsa: Add a simpler API David Howells
2025-11-17 14:55 ` [PATCH v9 4/9] crypto: Add ML-DSA-44 pure rejection test vectors as a kunit test David Howells
2025-11-17 14:55 ` [PATCH v9 5/9] crypto: Add ML-DSA-65 " David Howells
2025-11-17 14:55 ` [PATCH v9 6/9] crypto: Add ML-DSA-87 " David Howells
2025-11-17 14:55 ` [PATCH v9 7/9] pkcs7: Allow the signing algo to calculate the digest itself David Howells
2025-11-17 14:55 ` [PATCH v9 8/9] pkcs7, x509: Add ML-DSA support David Howells
2025-11-17 14:55 ` [PATCH v9 9/9] modsign: Enable ML-DSA module signing David Howells
2025-11-17 15:22 ` Pick up keys-pqc branch for linux-next? David Howells
2025-11-17 17:11   ` Eric Biggers
2025-11-20  9:53     ` Stephen Rothwell
2025-11-21  2:48       ` Eric Biggers
2025-11-17 16:01 ` Where to add FIPS tests David Howells
2025-11-17 16:54   ` Eric Biggers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).