external/boringssl: Sync to 3743aafdacff2f7b083615a043a37101f740fa53.

This includes the following changes:

https://boringssl.googlesource.com/boringssl/+log/2fb729d4f36beaf263ad85e24a790b571652679c..3743aafdacff2f7b083615a043a37101f740fa53

* Add SSL_CIPHER_get_protocol_id.
* Add TrustTokenV2.
* Add X509_get_pathlen and X509_REVOKED_get0_extensions.
* Add some accommodations for FreeRDP
* Require non-NULL store in X509_STORE_CTX_init.
Update-Note: X509_STORE_CTX_init will now fail when the store is NULL,
rather than report success, only to crash later in X509_verify_cert.
Breakage should thus be limited to code which was passing in a NULL
store but never used the resulting X509_STORE_CTX.
* Const-correct X509V3_CONF_METHOD.
Update-Note: External definitions of X509V3_CONF_METHOD will need fix
the types of their functions. There should not be any of these (probably
hide this struct), but if there are, this aligns with upstream OpenSSL.
* Avoid unions in X509_NAME logic.
* Bump OPENSSL_VERSION_NUMBER to 1.1.1.
Update-Note: Some OPENSSL_VERSION_NUMBER/OPENSSL_IS_BORINGSSL checks may
need to be updated. Hopefully even more can go away.
* Document more of x509.h.
* Fix potential leak in bssl::Array::Shrink.
* Remove ASN1_STRING_length_set.
Update-Note: Use ASN1_STRING_set instead, though this function appears
to be unused.
* Revert "Check AlgorithmIdentifier parameters for RSA and ECDSA signatures."
* Implement PSK variants of HPKE setup functions.
* acvp: support working with files.
* Document a few more functions in x509.h.
* Add subject key ID and authority key ID accessors.
* Remove sxnet and pkey_usage_period extensions.
Update-Note: Parsers for these two extensions are removed. Parsing the
types directly or passing NID_sxnet and NID_pkey_usage_period into
X509V3_get_d2i, or *_get_ext_d2i will no longer work.
* Const-correct various X509 functions.
* Make X509_set_not{Before,After} functions rather than macros.
* Add X509_get0_uids from OpenSSL 1.1.0.
* Bound RSA and DSA key sizes better.
Update-Note: Some invalid or overly large RSA and DSA keys may
previously have been accepted that are now rejected at parse time. For
public keys, this only moves the error from verification to parsing. In
some private key cases, we would previously allow signing with those
keys, but the resulting signatures would not be accepted by BoringSSL
anyway. This CL makes us behave more consistently.
* Add set1 versions of X509 timestamp setters.
* Consistently sort generated build files.
* delocate: use 64-bit GOT offsets in the large memory model.
* Update HPKE implementation and test vectors to draft-irtf-cfrg-hpke-05.
* Handle NULL arguments in some i2d_* functions.
* aarch64: support BTI and pointer authentication in assembly
* Support delegated credentials verison 06
* delocation: large memory model support.
* Enforce presence of ALPN when QUIC is in use.
Update-Note: If an SSL_QUIC_METHOD is set, connections will now fail if
ALPN is not negotiated. This new behavior can be detected by checking
if the value of BORINGSSL_API_VERSION is greater than 10.
* Fix the naming of alert error codes.
Update-Note: The renamed alerts will log slightly different strings, but
the constants used by external code are still there.
* Use golang.org/x/crypto in runner.
Update-Note: The tests now have a golang.org/x/crypto dependency. This
should be fetched transparently with Go modules. Monorepos with
different import path conventions may need to rewrite these imports.
* Disable ClientHello padding for QUIC.
* Add X509_SIG_get0 and X509_SIG_getm.
* Implement HPKE.
* Disallow TLS 1.3 compatibility mode in QUIC.
* Switch clang-format IncludeBlocks to Preserve.
* Fix unterminated clang-format off.
* Add line number to doc.go error messages.
* Kick the bots.
* Add a JSON output to generate_build_files.py.
* Add details of 20190808 FIPS certification.
* Link to ws2_32 more consistently.
* Allow explicitly-encoded X.509v1 versions for now.
* Opaquify PKCS8_PRIV_KEY_INFO.
Update-Note: Direct accesses of PKCS8_PRIV_KEY_INFO now need to use the
accessors. Code search suggests no one uses the fields. Even the
accessors are virtually unused (the one thing which uses it doesn't need
it).
* Implement i2d_PUBKEY and friends without crypto/asn1.
* Remove TRUST_TOKEN_experiment_v0.
Update-Note: This gets rid of TRUST_TOKEN_experiment_v0. Existing callers
should be updated to call TRUST_TOKEN_experiment_v1.
* Clarify in-place rules for low-level AES mode functions.
* acvp: add CMAC-AES support.
* acvp: add SP800-108 KDF support.
* Remove x509->name.
Update-Note: instead of x509->name, use X509_NAME_oneline and
X509_get_subject_name.
* Maybe build for AArch64 Windows.
* sha1-x86_64: fix CFI.
* Use |crypto_word_t| and |size_t| more consistently in ECC scalar recoding.
* Enable shaext path for sha1.
* Avoid relying on SSL_get_session's behavior during the handshake.
Update-Note: SSL_generate_key_block will now fail mid-handshake. It is
ambiguous which key block to use and, in some cases, we may not even be
able to compute the right key block.
* Add a -wait-for-debugger flag to runner.
* Add missing OPENSSL_EXPORT to X509_get_X509_PUBKEY.
* Const-correct various functions in crypto/asn1.
* Remove uneeded switch statement.
* Convert X.509 accessor macros to proper functions.
Update-Note: This should be compatible, but it is possible that someone,
e.g., passed in a bssl::UniquePtr<X509> to an accessor and relied on
operator->. Callers may also run afoul of const correctness. I mirrored
OpenSSL 1.1.1's consts, so it should at least be compatible with
third-party code.
* Remove X509_CINF_get_issuer and X509_CINF_get_extensions.
Update-Note: Two unused macros were removed. If there were uses, the
X509-level accessors can be used instead.
* Remove X509_get_signature_type.
Update-Note: If there are any calls to X509_get_signature_type, remove
them. It more-or-less always returned NID_undef.
* clang-format x509.h and run comment converter.
* Check AlgorithmIdentifier parameters for RSA and ECDSA signatures.
* Remove some unimplemented prototypes.
* Check the X.509 version when parsing.
Update-Note: The X.509 parser is now a bit stricter. This may break some
malformed certificates which were previously incorrectly accepted.
* Fix x509v3_cache_extensions error-handling.
Update-Note: The X.509 verifier now correctly rejects syntax errors in
important certificate extensions. This may break some malformed
certificates which were incorrectly accepted before.
* Work around Windows command-line limits in embed_test_data.go.
* Move crypto/x509 test data into its own directory.
* Test resumability of same, different, and default ticket keys.
* Fixes warning when redefining PATH_MAX when building with MINGW.
* Abstract fd operations better in tool.
* Use CMAKE_SIZEOF_VOID_P instead of CMAKE_CL_64
* Enforce the keyUsage extension in TLS 1.2 client certs.
Update-Note: Client certificates which do not support the
digitalSignature key usage will be rejected. They should either include
that bit or omit the keyUsage extension.
* Reword some comments.
* Add “Z Computation” KAT.
* acvptool: handle negative sizeConstraint.
* Let memory hooks override the size prefix.
* acvptool: go fmt
* Assert md_size > 0.
* Remove -enable-ed25519 compat hack.
* Add a |SSL_process_tls13_new_session_ticket|.
* Use ctr32 optimizations for AES_ctr128_encrypt.
* Test AES mode wrappers.
* Bump minimum CMake version.
* Modify how QUIC 0-RTT go/no-go decision is made.
* Remove RAND_set_urandom_fd.
Update-Note: RAND_set_urandom_fd no longer exists. This was only called
by Chromium, which now uses CRYPTO_pre_sandbox_init.
* Document that getrandom support must be consistent.
* Fix docs link for SSL_CTX_load_verify_locations
* Fix TRUST_TOKEN experiment_v1 SRR map.
* Add CRYPTO_pre_sandbox_init.
* Still query getauxval if reading /proc/cpuinfo fails.
* Add missing header to ec/wnaf.c
* Fix OPENSSL_TSAN typo.
* Fix p256-x86_64-table.h indentation.
* Enable avx2 implementation of sha1.
* Trim Z coordinates from the OPENSSL_SMALL P-256 tables.
* Use public multi-scalar mults in Trust Tokens where applicable.
* Use batched DLEQ proofs for Trust Token.
* Restrict when 0-RTT will be accepted in QUIC.
* Disable TLS 1.3 compatibility mode for QUIC.
* Use a 5-bit comb for some Trust Tokens multiplications.
* Use a (mostly) constant-time multi-scalar mult for Trust Tokens.
* Batch inversions in Trust Tokens.
* Rearrange the DLEQ logic slightly.
* Use token hash to encode private metadata for Trust Token Experiment V1.
* Introduce an EC_AFFINE abstraction.
* Make the fuzzer PRNG thread-safe.
* Disable fork-detect tests under TSAN.
* Introduce TRUST_TOKENS_experiment_v1.
* Route PMBToken calls through TRUST_TOKEN_METHOD.
* Introduce a TRUST_TOKEN_METHOD hook to select TRUST_TOKEN variations.
Update-Note: Pass TRUST_TOKEN_experiment_v0() into any existing code
that now needs a TRUST_TOKEN_METHOD.
* fork_detect: be robust to qemu.
* Move serialization of points inside pmbtoken.c.
* Introduce PMBTOKENS key abstractions.
* Fix the types used in token counts.
Update-Note: Fix callers of TRUST_TOKEN_ISSUER_issue to use size_t
instead of uint8_t. The max_batchsize changes should go through without
changes to the caller.
* Remove unused code from ghash-x86_64.pl.
* Switch the P-384 hash-to-curve to draft-07.
* Add hash-to-curve code for P384.
* Write down the expressions for all the NIST primes.
* Move fork_detect files into rand/
* Harden against fork via MADV_WIPEONFORK.
* Fix typo in comment.
* Use faster addition chains for P-256 field inversion.
* Tidy up third_party/fiat.
* Prefix g_pre_comp in p256.c as well.
* Add missing curve check to ec_hash_to_scalar_p521_xmd_sha512.
* Add a tool to compare the output of bssl speed.
* Benchmark ECDH slightly more accurately.
* Align remaining Intel copyright notice.
* Don't retain T in PMBTOKEN_PRETOKEN.
* Check for trailing data in TRUST_TOKEN_CLIENT_finish_issuance.
* Properly namespace everything in third_party/fiat/p256.c.
* Update fiat-crypto.
* Add missing ERR_LIB_TRUST_TOKEN constants.
* Add bssl speed support for hashtocurve and trusttoken.
* Implement DLEQ checks for Trust Token.
* Fix error-handling in EVP_BytesToKey.
* Fix Trust Token CBOR.
* Match parameter names between header and source.
* Trust Token Implementation.
* Include mem.h for |CRYPTO_memcmp|
* acvptool: add subprocess tests.
* Add SHA-512-256.
* Make ec_GFp_simple_cmp constant-time.
Update-Note: This does mean that we pay a 6M+2S Jacobian comparison
where comparing two publicly affine points should cost no field
operations at all. Code which compares two EC public keys for equality
will be slightly slower. I wouldn't expect this to matter (if you
actually use the public keys, you'll pay much much more) If it does, we
can restore this optimization by keeping better track of affine vs.
Jacobian forms. See https://crbug.com/boringssl/326.
* Tidy up CRYPTO_sysrand variants.
* Do a better job testing EC_POINT_cmp.
* Follow-up comments to hash_to_scalar.
* Add a hash_to_scalar variation of P-521's hash_to_field.
* Add SSL_SESSION_copy_without_early_data.
* Double-check secret EC point multiplications.
* Make ec_felem_equal constant-time.
* Fix hash-to-curve comment.
* Make ec_GFp_simple_is_on_curve constant-time.
* Implement draft-irtf-cfrg-hash-to-curve-06.
* Update list of tested SDE configurations.
* Only draw from RDRAND for additional_data if it's fast.
* Generalize bn_from_montgomery_small.
* Remove BIGNUM from uncompressed coordinate parsing.
* Add EC_RAW_POINT serialization function.
* Base EC_FELEM conversions on bytes rather than BIGNUMs.
* runner: Replace supportsVersions calls with allVersions.
* Enable QUIC for some perMessageTest runner tests
* Move BN_nnmod calls out of low-level group_set_curve.
* Clean up various EC inversion functions.
* Start to organize ec/internal.h a little.
* Fix CFI for AVX2 ChaCha20-Poly1305.
* Remove unused function prototype.
* Enable more runner tests for QUIC
* Require QUIC method with Transport Parameters and vice versa
* acvptool: support non-interactive mode.
* Add is_quic bit to SSL_SESSION
* Update SDE.
* Update tools.
* Add simpler getters for DH and DSA.
* Don't define default implementations for weak symbols.
* Don't automatically run all tests for ABI testing.
* Fix test build with recent Clang.
* Remove LCM dependency from RSA_check_key.
* Simplify bn_sub_part_words.
* No-op commit to test Windows SDE bots.
* ABI-test each AEAD.
* Add memory tracking and sanitization hooks
* Add X509_STORE_CTX_get0_chain.
* Add DH_set_length.
* Static assert that CRYPTO_MUTEX is sufficiently aligned.
* [bazel] Format toplevel BUILD file with buildifier
* Add |SSL_CTX_get0_chain|.
* Configure QUIC secrets inside set_{read,write}_state.
Update-Note: See b/151142920#comment9
Change-Id: I4bbb76e15b5d95615ea643bccf796db87fae4989
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/40244
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: Steven Valdez <svaldez@google.com>
* Allow setting QUIC transport parameters after parsing the client's
* Fix comment for |BORINGSSL_self_test|.
* Trust Token Key Generation.
* Revise QUIC encryption secret APIs.
Update-Note: This is an incompatible change to SSL_QUIC_METHOD.
BORINGSSL_API_VERSION can be used to distinguish the two revisions.
* Fix ec_point_mul_scalar_public's documentation.

Test: atest CtsLibcoreTestCases CtsLibcoreTestCases
Change-Id: I754169828a3e1cb461bf0d4a64d4d7b46951d730
diff --git a/src/crypto/CMakeLists.txt b/src/crypto/CMakeLists.txt
index c6073d2..a872626 100644
--- a/src/crypto/CMakeLists.txt
+++ b/src/crypto/CMakeLists.txt
@@ -184,6 +184,7 @@
   err/pkcs8.errordata
   err/rsa.errordata
   err/ssl.errordata
+  err/trust_token.errordata
   err/x509.errordata
   err/x509v3.errordata
   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/err
@@ -262,6 +263,7 @@
   cpu-intel.c
   cpu-ppc64le.c
   crypto.c
+  curve25519/curve25519.c
   curve25519/spake25519.c
   dh/dh.c
   dh/params.c
@@ -274,6 +276,7 @@
   ecdsa_extra/ecdsa_asn1.c
   ec_extra/ec_asn1.c
   ec_extra/ec_derive.c
+  ec_extra/hash_to_curve.c
   err/err.c
   err_data.c
   engine/engine.c
@@ -296,6 +299,7 @@
   evp/sign.c
   ex_data.c
   hkdf/hkdf.c
+  hpke/hpke.c
   hrss/hrss.c
   lhash/lhash.c
   mem.c
@@ -334,6 +338,8 @@
   thread_none.c
   thread_pthread.c
   thread_win.c
+  trust_token/pmbtoken.c
+  trust_token/trust_token.c
   x509/a_digest.c
   x509/a_sign.c
   x509/a_strex.c
@@ -409,14 +415,11 @@
   x509v3/v3_pci.c
   x509v3/v3_pcia.c
   x509v3/v3_pcons.c
-  x509v3/v3_pku.c
   x509v3/v3_pmaps.c
   x509v3/v3_prn.c
   x509v3/v3_purp.c
   x509v3/v3_skey.c
-  x509v3/v3_sxnet.c
   x509v3/v3_utl.c
-  ../third_party/fiat/curve25519.c
 
   $<TARGET_OBJECTS:fipsmodule>
 
@@ -452,7 +455,7 @@
 
 SET_TARGET_PROPERTIES(crypto PROPERTIES LINKER_LANGUAGE C)
 
-if(NOT MSVC AND NOT ANDROID)
+if(NOT WIN32 AND NOT ANDROID)
   target_link_libraries(crypto pthread)
 endif()
 
@@ -492,6 +495,7 @@
   compiler_test.cc
   constant_time_test.cc
   cpu-arm-linux_test.cc
+  crypto_test.cc
   curve25519/ed25519_test.cc
   curve25519/spake25519_test.cc
   curve25519/x25519_test.cc
@@ -512,8 +516,10 @@
   fipsmodule/md5/md5_test.cc
   fipsmodule/modes/gcm_test.cc
   fipsmodule/rand/ctrdrbg_test.cc
+  fipsmodule/rand/fork_detect_test.cc
   fipsmodule/sha/sha_test.cc
   hkdf/hkdf_test.cc
+  hpke/hpke_test.cc
   hmac_extra/hmac_test.cc
   hrss/hrss_test.cc
   impl_dispatch_test.cc
@@ -533,6 +539,7 @@
   siphash/siphash_test.cc
   test/file_test_gtest.cc
   thread_test.cc
+  trust_token/trust_token_test.cc
   x509/x509_test.cc
   x509/x509_time_test.cc
   x509v3/tab_test.cc
diff --git a/src/crypto/asn1/a_bitstr.c b/src/crypto/asn1/a_bitstr.c
index 3942638..4024ed2 100644
--- a/src/crypto/asn1/a_bitstr.c
+++ b/src/crypto/asn1/a_bitstr.c
@@ -70,7 +70,7 @@
     return M_ASN1_BIT_STRING_set(x, d, len);
 }
 
-int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp)
+int i2c_ASN1_BIT_STRING(const ASN1_BIT_STRING *a, unsigned char **pp)
 {
     int ret, j, bits, len;
     unsigned char *p, *d;
@@ -233,7 +233,7 @@
     return (1);
 }
 
-int ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a, int n)
+int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n)
 {
     int w, v;
 
@@ -250,7 +250,7 @@
  * which is not specified in 'flags', 1 otherwise.
  * 'len' is the length of 'flags'.
  */
-int ASN1_BIT_STRING_check(ASN1_BIT_STRING *a,
+int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a,
                           unsigned char *flags, int flags_len)
 {
     int i, ok;
diff --git a/src/crypto/asn1/a_enum.c b/src/crypto/asn1/a_enum.c
index 11e60ac..b99663b 100644
--- a/src/crypto/asn1/a_enum.c
+++ b/src/crypto/asn1/a_enum.c
@@ -108,7 +108,7 @@
     return (1);
 }
 
-long ASN1_ENUMERATED_get(ASN1_ENUMERATED *a)
+long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a)
 {
     int neg = 0, i;
 
@@ -147,7 +147,7 @@
     return r;
 }
 
-ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai)
+ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai)
 {
     ASN1_ENUMERATED *ret;
     int len, j;
@@ -183,7 +183,7 @@
     return (NULL);
 }
 
-BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai, BIGNUM *bn)
+BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai, BIGNUM *bn)
 {
     BIGNUM *ret;
 
diff --git a/src/crypto/asn1/a_int.c b/src/crypto/asn1/a_int.c
index 7b483f2..2eda6c0 100644
--- a/src/crypto/asn1/a_int.c
+++ b/src/crypto/asn1/a_int.c
@@ -115,7 +115,7 @@
  * followed by optional zeros isn't padded.
  */
 
-int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp)
+int i2c_ASN1_INTEGER(const ASN1_INTEGER *a, unsigned char **pp)
 {
     int pad = 0, ret, i, neg;
     unsigned char *p, *n, pb = 0;
diff --git a/src/crypto/asn1/a_object.c b/src/crypto/asn1/a_object.c
index 97335bf..aa98453 100644
--- a/src/crypto/asn1/a_object.c
+++ b/src/crypto/asn1/a_object.c
@@ -66,7 +66,7 @@
 #include "../internal.h"
 
 
-int i2d_ASN1_OBJECT(ASN1_OBJECT *a, unsigned char **pp)
+int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp)
 {
     unsigned char *p, *allocated = NULL;
     int objsize;
@@ -98,12 +98,12 @@
     return objsize;
 }
 
-int i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *a)
+int i2t_ASN1_OBJECT(char *buf, int buf_len, const ASN1_OBJECT *a)
 {
     return OBJ_obj2txt(buf, buf_len, a, 0);
 }
 
-int i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a)
+int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a)
 {
     char buf[80], *p = buf;
     int i;
diff --git a/src/crypto/asn1/a_time.c b/src/crypto/asn1/a_time.c
index 51aae5d..98a9c3e 100644
--- a/src/crypto/asn1/a_time.c
+++ b/src/crypto/asn1/a_time.c
@@ -100,7 +100,7 @@
     return ASN1_GENERALIZEDTIME_adj(s, t, offset_day, offset_sec);
 }
 
-int ASN1_TIME_check(ASN1_TIME *t)
+int ASN1_TIME_check(const ASN1_TIME *t)
 {
     if (t->type == V_ASN1_GENERALIZEDTIME)
         return ASN1_GENERALIZEDTIME_check(t);
@@ -110,7 +110,7 @@
 }
 
 /* Convert an ASN1_TIME structure to GeneralizedTime */
-ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t,
+ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *t,
                                                    ASN1_GENERALIZEDTIME **out)
 {
     ASN1_GENERALIZEDTIME *ret = NULL;
diff --git a/src/crypto/asn1/a_type.c b/src/crypto/asn1/a_type.c
index 734ff8b..c12edfa 100644
--- a/src/crypto/asn1/a_type.c
+++ b/src/crypto/asn1/a_type.c
@@ -61,7 +61,7 @@
 #include <openssl/mem.h>
 #include <openssl/obj.h>
 
-int ASN1_TYPE_get(ASN1_TYPE *a)
+int ASN1_TYPE_get(const ASN1_TYPE *a)
 {
     if ((a->value.ptr != NULL) || (a->type == V_ASN1_NULL))
         return (a->type);
diff --git a/src/crypto/asn1/asn1_lib.c b/src/crypto/asn1/asn1_lib.c
index 8526aba..128d28f 100644
--- a/src/crypto/asn1/asn1_lib.c
+++ b/src/crypto/asn1/asn1_lib.c
@@ -424,13 +424,7 @@
     return M_ASN1_STRING_length(x);
 }
 
-void ASN1_STRING_length_set(ASN1_STRING *x, int len)
-{
-    M_ASN1_STRING_length_set(x, len);
-    return;
-}
-
-int ASN1_STRING_type(ASN1_STRING *x)
+int ASN1_STRING_type(const ASN1_STRING *x)
 {
     return M_ASN1_STRING_type(x);
 }
diff --git a/src/crypto/asn1/asn1_test.cc b/src/crypto/asn1/asn1_test.cc
index ff80e49..7f71c8c 100644
--- a/src/crypto/asn1/asn1_test.cc
+++ b/src/crypto/asn1/asn1_test.cc
@@ -174,7 +174,7 @@
   static const uint8_t kDER[] = {0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
                                  0xf7, 0x0d, 0x01, 0x01, 0x01};
   const ASN1_OBJECT *obj = OBJ_nid2obj(NID_rsaEncryption);
-  TestSerialize(const_cast<ASN1_OBJECT *>(obj), i2d_ASN1_OBJECT, kDER);
+  TestSerialize(obj, i2d_ASN1_OBJECT, kDER);
 }
 
 TEST(ASN1Test, SerializeBoolean) {
diff --git a/src/crypto/asn1/asn_pack.c b/src/crypto/asn1/asn_pack.c
index eff54e5..3c7116e 100644
--- a/src/crypto/asn1/asn_pack.c
+++ b/src/crypto/asn1/asn_pack.c
@@ -93,7 +93,7 @@
 
 /* Extract an ASN1 object from an ASN1_STRING */
 
-void *ASN1_item_unpack(ASN1_STRING *oct, const ASN1_ITEM *it)
+void *ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it)
 {
     const unsigned char *p;
     void *ret;
diff --git a/src/crypto/asn1/f_enum.c b/src/crypto/asn1/f_enum.c
index 7ce479d..e28755d 100644
--- a/src/crypto/asn1/f_enum.c
+++ b/src/crypto/asn1/f_enum.c
@@ -60,7 +60,7 @@
 
 /* Based on a_int.c: equivalent ENUMERATED functions */
 
-int i2a_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *a)
+int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a)
 {
     int i, n = 0;
     static const char *h = "0123456789ABCDEF";
diff --git a/src/crypto/asn1/f_int.c b/src/crypto/asn1/f_int.c
index 79ea152..25338d8 100644
--- a/src/crypto/asn1/f_int.c
+++ b/src/crypto/asn1/f_int.c
@@ -58,7 +58,7 @@
 
 #include <openssl/bio.h>
 
-int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a)
+int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a)
 {
     int i, n = 0;
     static const char *h = "0123456789ABCDEF";
diff --git a/src/crypto/asn1/f_string.c b/src/crypto/asn1/f_string.c
index 97c6ae7..01d9dec 100644
--- a/src/crypto/asn1/f_string.c
+++ b/src/crypto/asn1/f_string.c
@@ -58,7 +58,7 @@
 
 #include <openssl/bio.h>
 
-int i2a_ASN1_STRING(BIO *bp, ASN1_STRING *a, int type)
+int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type)
 {
     int i, n = 0;
     static const char *h = "0123456789ABCDEF";
diff --git a/src/crypto/chacha/asm/chacha-armv8.pl b/src/crypto/chacha/asm/chacha-armv8.pl
index 9cae28c..05958c8 100755
--- a/src/crypto/chacha/asm/chacha-armv8.pl
+++ b/src/crypto/chacha/asm/chacha-armv8.pl
@@ -139,6 +139,7 @@
 .type	ChaCha20_ctr32,%function
 .align	5
 ChaCha20_ctr32:
+	AARCH64_VALID_CALL_TARGET
 	cbz	$len,.Labort
 #if __has_feature(hwaddress_sanitizer) && __clang_major__ >= 10
 	adrp	@x[0],:pg_hi21_nc:OPENSSL_armcap_P
@@ -152,6 +153,7 @@
 	b.ne	ChaCha20_neon
 
 .Lshort:
+	AARCH64_SIGN_LINK_REGISTER
 	stp	x29,x30,[sp,#-96]!
 	add	x29,sp,#0
 
@@ -272,6 +274,7 @@
 	ldp	x25,x26,[x29,#64]
 	ldp	x27,x28,[x29,#80]
 	ldp	x29,x30,[sp],#96
+	AARCH64_VALIDATE_LINK_REGISTER
 .Labort:
 	ret
 
@@ -328,6 +331,7 @@
 	ldp	x25,x26,[x29,#64]
 	ldp	x27,x28,[x29,#80]
 	ldp	x29,x30,[sp],#96
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	ChaCha20_ctr32,.-ChaCha20_ctr32
 ___
@@ -373,6 +377,7 @@
 .type	ChaCha20_neon,%function
 .align	5
 ChaCha20_neon:
+	AARCH64_SIGN_LINK_REGISTER
 	stp	x29,x30,[sp,#-96]!
 	add	x29,sp,#0
 
@@ -572,6 +577,7 @@
 	ldp	x25,x26,[x29,#64]
 	ldp	x27,x28,[x29,#80]
 	ldp	x29,x30,[sp],#96
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 
 .Ltail_neon:
@@ -681,6 +687,7 @@
 	ldp	x25,x26,[x29,#64]
 	ldp	x27,x28,[x29,#80]
 	ldp	x29,x30,[sp],#96
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	ChaCha20_neon,.-ChaCha20_neon
 ___
@@ -693,6 +700,7 @@
 .type	ChaCha20_512_neon,%function
 .align	5
 ChaCha20_512_neon:
+	AARCH64_SIGN_LINK_REGISTER
 	stp	x29,x30,[sp,#-96]!
 	add	x29,sp,#0
 
@@ -1112,6 +1120,7 @@
 	ldp	x25,x26,[x29,#64]
 	ldp	x27,x28,[x29,#80]
 	ldp	x29,x30,[sp],#96
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	ChaCha20_512_neon,.-ChaCha20_512_neon
 ___
diff --git a/src/crypto/cipher_extra/aead_test.cc b/src/crypto/cipher_extra/aead_test.cc
index 9a4ef4f..fdf71b0 100644
--- a/src/crypto/cipher_extra/aead_test.cc
+++ b/src/crypto/cipher_extra/aead_test.cc
@@ -25,6 +25,7 @@
 
 #include "../fipsmodule/cipher/internal.h"
 #include "../internal.h"
+#include "../test/abi_test.h"
 #include "../test/file_test.h"
 #include "../test/test_util.h"
 #include "../test/wycheproof_util.h"
@@ -664,6 +665,91 @@
   }
 }
 
+#if defined(SUPPORTS_ABI_TEST)
+// CHECK_ABI can't pass enums, i.e. |evp_aead_seal| and |evp_aead_open|. Thus
+// these two wrappers.
+static int aead_ctx_init_for_seal(EVP_AEAD_CTX *ctx, const EVP_AEAD *aead,
+                                  const uint8_t *key, size_t key_len) {
+  return EVP_AEAD_CTX_init_with_direction(ctx, aead, key, key_len, 0,
+                                          evp_aead_seal);
+}
+
+static int aead_ctx_init_for_open(EVP_AEAD_CTX *ctx, const EVP_AEAD *aead,
+                                  const uint8_t *key, size_t key_len) {
+  return EVP_AEAD_CTX_init_with_direction(ctx, aead, key, key_len, 0,
+                                          evp_aead_open);
+}
+
+// CHECK_ABI can pass, at most, eight arguments. Thus these wrappers that
+// figure out the output length from the input length, and take the nonce length
+// from the configuration of the AEAD.
+static int aead_ctx_seal(EVP_AEAD_CTX *ctx, uint8_t *out_ciphertext,
+                         size_t *out_ciphertext_len, const uint8_t *nonce,
+                         const uint8_t *plaintext, size_t plaintext_len,
+                         const uint8_t *ad, size_t ad_len) {
+  const size_t nonce_len = EVP_AEAD_nonce_length(EVP_AEAD_CTX_aead(ctx));
+  return EVP_AEAD_CTX_seal(ctx, out_ciphertext, out_ciphertext_len,
+                           plaintext_len + EVP_AEAD_MAX_OVERHEAD, nonce,
+                           nonce_len, plaintext, plaintext_len, ad, ad_len);
+}
+
+static int aead_ctx_open(EVP_AEAD_CTX *ctx, uint8_t *out_plaintext,
+                         size_t *out_plaintext_len, const uint8_t *nonce,
+                         const uint8_t *ciphertext, size_t ciphertext_len,
+                         const uint8_t *ad, size_t ad_len) {
+  const size_t nonce_len = EVP_AEAD_nonce_length(EVP_AEAD_CTX_aead(ctx));
+  return EVP_AEAD_CTX_open(ctx, out_plaintext, out_plaintext_len,
+                           ciphertext_len, nonce, nonce_len, ciphertext,
+                           ciphertext_len, ad, ad_len);
+}
+
+TEST_P(PerAEADTest, ABI) {
+  uint8_t key[EVP_AEAD_MAX_KEY_LENGTH];
+  OPENSSL_memset(key, 'K', sizeof(key));
+  const size_t key_len = EVP_AEAD_key_length(aead());
+  ASSERT_LE(key_len, sizeof(key));
+
+  bssl::ScopedEVP_AEAD_CTX ctx_seal;
+  ASSERT_TRUE(
+      CHECK_ABI(aead_ctx_init_for_seal, ctx_seal.get(), aead(), key, key_len));
+
+  bssl::ScopedEVP_AEAD_CTX ctx_open;
+  ASSERT_TRUE(
+      CHECK_ABI(aead_ctx_init_for_open, ctx_open.get(), aead(), key, key_len));
+
+  alignas(2) uint8_t plaintext[512];
+  OPENSSL_memset(plaintext, 'P', sizeof(plaintext));
+
+  alignas(2) uint8_t ad_buf[512];
+  OPENSSL_memset(ad_buf, 'A', sizeof(ad_buf));
+  const uint8_t *const ad = ad_buf + 1;
+  ASSERT_LE(GetParam().ad_len, sizeof(ad_buf) - 1);
+  const size_t ad_len =
+      GetParam().ad_len != 0 ? GetParam().ad_len : sizeof(ad_buf) - 1;
+
+  uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
+  const size_t nonce_len = EVP_AEAD_nonce_length(aead());
+  ASSERT_LE(nonce_len, sizeof(nonce));
+
+  alignas(2) uint8_t ciphertext[sizeof(plaintext) + EVP_AEAD_MAX_OVERHEAD + 1];
+  size_t ciphertext_len;
+  // Knock plaintext, ciphertext, and AD off alignment and give odd lengths for
+  // plaintext and AD. This hopefully triggers any edge-cases in the assembly.
+  ASSERT_TRUE(CHECK_ABI(aead_ctx_seal, ctx_seal.get(), ciphertext + 1,
+                        &ciphertext_len, nonce, plaintext + 1,
+                        sizeof(plaintext) - 1, ad, ad_len));
+
+  alignas(2) uint8_t plaintext2[sizeof(ciphertext) + 1];
+  size_t plaintext2_len;
+  ASSERT_TRUE(CHECK_ABI(aead_ctx_open, ctx_open.get(), plaintext2 + 1,
+                        &plaintext2_len, nonce, ciphertext + 1, ciphertext_len,
+                        ad, ad_len));
+
+  EXPECT_EQ(Bytes(plaintext + 1, sizeof(plaintext) - 1),
+            Bytes(plaintext2 + 1, plaintext2_len));
+}
+#endif  // SUPPORTS_ABI_TEST
+
 TEST(AEADTest, AESCCMLargeAD) {
   static const std::vector<uint8_t> kKey(16, 'A');
   static const std::vector<uint8_t> kNonce(13, 'N');
diff --git a/src/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl b/src/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl
index ebf4563..b748c23 100644
--- a/src/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl
+++ b/src/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl
@@ -1273,7 +1273,7 @@
     pop %rbp
 .cfi_adjust_cfa_offset -8
     ret
-.cfi_adjust_cfa_offset (8 * 6) + 288 + 32
+.cfi_adjust_cfa_offset (8 * 7) + 288 + 32
 ################################################################################
 seal_sse_128:
     movdqu .chacha20_consts(%rip), $A0\nmovdqa $A0, $A1\nmovdqa $A0, $A2
diff --git a/src/crypto/cipher_extra/cipher_test.cc b/src/crypto/cipher_extra/cipher_test.cc
index 5ff308c..af7e0e7 100644
--- a/src/crypto/cipher_extra/cipher_test.cc
+++ b/src/crypto/cipher_extra/cipher_test.cc
@@ -61,8 +61,10 @@
 
 #include <gtest/gtest.h>
 
+#include <openssl/aes.h>
 #include <openssl/cipher.h>
 #include <openssl/err.h>
+#include <openssl/nid.h>
 #include <openssl/span.h>
 
 #include "../test/file_test.h"
@@ -221,6 +223,91 @@
         EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, tag.size(), rtag));
     EXPECT_EQ(Bytes(tag), Bytes(rtag, tag.size()));
   }
+
+  // Additionally test low-level AES mode APIs. Skip runs where |copy| because
+  // it does not apply.
+  if (!copy) {
+    int nid = EVP_CIPHER_nid(cipher);
+    bool is_ctr = nid == NID_aes_128_ctr || nid == NID_aes_192_ctr ||
+                  nid == NID_aes_256_ctr;
+    bool is_cbc = nid == NID_aes_128_cbc || nid == NID_aes_192_cbc ||
+                  nid == NID_aes_256_cbc;
+    bool is_ofb = nid == NID_aes_128_ofb128 || nid == NID_aes_192_ofb128 ||
+                  nid == NID_aes_256_ofb128;
+    if (is_ctr || is_cbc || is_ofb) {
+      AES_KEY aes;
+      if (encrypt || !is_cbc) {
+        ASSERT_EQ(0, AES_set_encrypt_key(key.data(), key.size() * 8, &aes));
+      } else {
+        ASSERT_EQ(0, AES_set_decrypt_key(key.data(), key.size() * 8, &aes));
+      }
+
+      // The low-level APIs all work in-place.
+      bssl::Span<const uint8_t> input = *in;
+      result.clear();
+      if (in_place) {
+        result = *in;
+        input = result;
+      } else {
+        result.resize(out->size());
+      }
+      bssl::Span<uint8_t> output = bssl::MakeSpan(result);
+      ASSERT_EQ(input.size(), output.size());
+
+      // The low-level APIs all use block-size IVs.
+      ASSERT_EQ(iv.size(), size_t{AES_BLOCK_SIZE});
+      uint8_t ivec[AES_BLOCK_SIZE];
+      OPENSSL_memcpy(ivec, iv.data(), iv.size());
+
+      if (is_ctr) {
+        unsigned num = 0;
+        uint8_t ecount_buf[AES_BLOCK_SIZE];
+        if (chunk_size == 0) {
+          AES_ctr128_encrypt(input.data(), output.data(), input.size(), &aes,
+                             ivec, ecount_buf, &num);
+        } else {
+          do {
+            size_t todo = std::min(input.size(), chunk_size);
+            AES_ctr128_encrypt(input.data(), output.data(), todo, &aes, ivec,
+                               ecount_buf, &num);
+            input = input.subspan(todo);
+            output = output.subspan(todo);
+          } while (!input.empty());
+        }
+        EXPECT_EQ(Bytes(*out), Bytes(result));
+      } else if (is_cbc && chunk_size % AES_BLOCK_SIZE == 0) {
+        // Note |AES_cbc_encrypt| requires block-aligned chunks.
+        if (chunk_size == 0) {
+          AES_cbc_encrypt(input.data(), output.data(), input.size(), &aes, ivec,
+                          encrypt);
+        } else {
+          do {
+            size_t todo = std::min(input.size(), chunk_size);
+            AES_cbc_encrypt(input.data(), output.data(), todo, &aes, ivec,
+                            encrypt);
+            input = input.subspan(todo);
+            output = output.subspan(todo);
+          } while (!input.empty());
+        }
+        EXPECT_EQ(Bytes(*out), Bytes(result));
+      } else if (is_ofb) {
+        int num = 0;
+        if (chunk_size == 0) {
+          AES_ofb128_encrypt(input.data(), output.data(), input.size(), &aes,
+                             ivec, &num);
+        } else {
+          do {
+            size_t todo = std::min(input.size(), chunk_size);
+            AES_ofb128_encrypt(input.data(), output.data(), todo, &aes, ivec,
+                               &num);
+            input = input.subspan(todo);
+            output = output.subspan(todo);
+          } while (!input.empty());
+        }
+        EXPECT_EQ(Bytes(*out), Bytes(result));
+      }
+    }
+  }
 }
 
 static void TestCipher(FileTest *t) {
diff --git a/src/crypto/cipher_extra/derive_key.c b/src/crypto/cipher_extra/derive_key.c
index ff5ae06..45b4963 100644
--- a/src/crypto/cipher_extra/derive_key.c
+++ b/src/crypto/cipher_extra/derive_key.c
@@ -86,7 +86,7 @@
   EVP_MD_CTX_init(&c);
   for (;;) {
     if (!EVP_DigestInit_ex(&c, md, NULL)) {
-      return 0;
+      goto err;
     }
     if (addmd++) {
       if (!EVP_DigestUpdate(&c, md_buf, mds)) {
diff --git a/src/crypto/cipher_extra/tls_cbc.c b/src/crypto/cipher_extra/tls_cbc.c
index 52353f2..5e97a1c 100644
--- a/src/crypto/cipher_extra/tls_cbc.c
+++ b/src/crypto/cipher_extra/tls_cbc.c
@@ -133,6 +133,7 @@
   assert(orig_len >= in_len);
   assert(in_len >= md_size);
   assert(md_size <= EVP_MAX_MD_SIZE);
+  assert(md_size > 0);
 
   // scan_start contains the number of bytes that we can ignore because
   // the MAC's position can only vary by 255 bytes.
diff --git a/src/crypto/cpu-arm-linux.c b/src/crypto/cpu-arm-linux.c
index ed30715..c9d771f 100644
--- a/src/crypto/cpu-arm-linux.c
+++ b/src/crypto/cpu-arm-linux.c
@@ -146,11 +146,13 @@
 static int g_has_broken_neon, g_needs_hwcap2_workaround;
 
 void OPENSSL_cpuid_setup(void) {
-  char *cpuinfo_data;
-  size_t cpuinfo_len;
-  if (!read_file(&cpuinfo_data, &cpuinfo_len, "/proc/cpuinfo")) {
-    return;
-  }
+  // We ignore the return value of |read_file| and proceed with an empty
+  // /proc/cpuinfo on error. If |getauxval| works, we will still detect
+  // capabilities. There may be a false positive due to
+  // |crypto_cpuinfo_has_broken_neon|, but this is now rare.
+  char *cpuinfo_data = NULL;
+  size_t cpuinfo_len = 0;
+  read_file(&cpuinfo_data, &cpuinfo_len, "/proc/cpuinfo");
   STRING_PIECE cpuinfo;
   cpuinfo.data = cpuinfo_data;
   cpuinfo.len = cpuinfo_len;
diff --git a/src/crypto/cpu-arm-linux_test.cc b/src/crypto/cpu-arm-linux_test.cc
index 2b5bc11..0472537 100644
--- a/src/crypto/cpu-arm-linux_test.cc
+++ b/src/crypto/cpu-arm-linux_test.cc
@@ -220,6 +220,13 @@
           0,
           false,
       },
+      // If opening /proc/cpuinfo fails, we process the empty string.
+      {
+          "",
+          0,
+          0,
+          false,
+      },
   };
 
   for (const auto &t : kTests) {
diff --git a/src/crypto/cpu-intel.c b/src/crypto/cpu-intel.c
index cc41fc4..53ece95 100644
--- a/src/crypto/cpu-intel.c
+++ b/src/crypto/cpu-intel.c
@@ -123,7 +123,9 @@
 // and |out[1]|. See the comment in |OPENSSL_cpuid_setup| about this.
 static void handle_cpu_env(uint32_t *out, const char *in) {
   const int invert = in[0] == '~';
-  const int hex = in[invert] == '0' && in[invert+1] == 'x';
+  const int or = in[0] == '|';
+  const int skip_first_byte = invert || or;
+  const int hex = in[skip_first_byte] == '0' && in[skip_first_byte+1] == 'x';
 
   int sscanf_result;
   uint64_t v;
@@ -140,6 +142,9 @@
   if (invert) {
     out[0] &= ~v;
     out[1] &= ~(v >> 32);
+  } else if (or) {
+    out[0] |= v;
+    out[1] |= (v >> 32);
   } else {
     out[0] = v;
     out[1] = v >> 32;
@@ -264,10 +269,14 @@
 
   // OPENSSL_ia32cap can contain zero, one or two values, separated with a ':'.
   // Each value is a 64-bit, unsigned value which may start with "0x" to
-  // indicate a hex value. Prior to the 64-bit value, a '~' may be given.
+  // indicate a hex value. Prior to the 64-bit value, a '~' or '|' may be given.
   //
-  // If '~' isn't present, then the value is taken as the result of the CPUID.
-  // Otherwise the value is inverted and ANDed with the probed CPUID result.
+  // If the '~' prefix is present:
+  //   the value is inverted and ANDed with the probed CPUID result
+  // If the '|' prefix is present:
+  //   the value is ORed with the probed CPUID result
+  // Otherwise:
+  //   the value is taken as the result of the CPUID
   //
   // The first value determines OPENSSL_ia32cap_P[0] and [1]. The second [2]
   // and [3].
diff --git a/src/crypto/crypto.c b/src/crypto/crypto.c
index 297240e..6886aa4 100644
--- a/src/crypto/crypto.c
+++ b/src/crypto/crypto.c
@@ -16,6 +16,8 @@
 
 #include <openssl/cpu.h>
 
+#include "fipsmodule/rand/fork_detect.h"
+#include "fipsmodule/rand/internal.h"
 #include "internal.h"
 
 
@@ -174,6 +176,15 @@
 #endif
 }
 
+void CRYPTO_pre_sandbox_init(void) {
+  // Read from /proc/cpuinfo if needed.
+  CRYPTO_library_init();
+  // Open /dev/urandom if needed.
+  CRYPTO_init_sysrand();
+  // Set up MADV_WIPEONFORK state if needed.
+  CRYPTO_get_fork_generation();
+}
+
 const char *SSLeay_version(int which) { return OpenSSL_version(which); }
 
 const char *OpenSSL_version(int which) {
diff --git a/src/crypto/crypto_test.cc b/src/crypto/crypto_test.cc
new file mode 100644
index 0000000..f6c2374
--- /dev/null
+++ b/src/crypto/crypto_test.cc
@@ -0,0 +1,35 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <string>
+
+#include <openssl/base.h>
+#include <openssl/crypto.h>
+
+#include <gtest/gtest.h>
+
+// Test that OPENSSL_VERSION_NUMBER and OPENSSL_VERSION_TEXT are consistent.
+// Node.js parses the version out of OPENSSL_VERSION_TEXT instead of using
+// OPENSSL_VERSION_NUMBER.
+TEST(CryptoTest, Version) {
+  char expected[512];
+  snprintf(expected, sizeof(expected), "OpenSSL %d.%d.%d ",
+           OPENSSL_VERSION_NUMBER >> 28, (OPENSSL_VERSION_NUMBER >> 20) & 0xff,
+           (OPENSSL_VERSION_NUMBER >> 12) & 0xff);
+  EXPECT_EQ(expected,
+            std::string(OPENSSL_VERSION_TEXT).substr(0, strlen(expected)));
+}
diff --git a/src/crypto/curve25519/curve25519.c b/src/crypto/curve25519/curve25519.c
new file mode 100644
index 0000000..232f6e0
--- /dev/null
+++ b/src/crypto/curve25519/curve25519.c
@@ -0,0 +1,2159 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+// Some of this code is taken from the ref10 version of Ed25519 in SUPERCOP
+// 20141124 (http://bench.cr.yp.to/supercop.html). That code is released as
+// public domain. Other parts have been replaced to call into code generated by
+// Fiat (https://github.com/mit-plv/fiat-crypto) in //third_party/fiat.
+//
+// The field functions are shared by Ed25519 and X25519 where possible.
+
+#include <openssl/curve25519.h>
+
+#include <assert.h>
+#include <string.h>
+
+#include <openssl/cpu.h>
+#include <openssl/mem.h>
+#include <openssl/rand.h>
+#include <openssl/sha.h>
+#include <openssl/type_check.h>
+
+#include "internal.h"
+#include "../internal.h"
+
+
+// Various pre-computed constants.
+#include "./curve25519_tables.h"
+
+#if defined(BORINGSSL_CURVE25519_64BIT)
+#include "../../third_party/fiat/curve25519_64.h"
+#else
+#include "../../third_party/fiat/curve25519_32.h"
+#endif  // BORINGSSL_CURVE25519_64BIT
+
+
+// Low-level intrinsic operations
+
+static uint64_t load_3(const uint8_t *in) {
+  uint64_t result;
+  result = (uint64_t)in[0];
+  result |= ((uint64_t)in[1]) << 8;
+  result |= ((uint64_t)in[2]) << 16;
+  return result;
+}
+
+static uint64_t load_4(const uint8_t *in) {
+  uint64_t result;
+  result = (uint64_t)in[0];
+  result |= ((uint64_t)in[1]) << 8;
+  result |= ((uint64_t)in[2]) << 16;
+  result |= ((uint64_t)in[3]) << 24;
+  return result;
+}
+
+
+// Field operations.
+
+#if defined(BORINGSSL_CURVE25519_64BIT)
+
+typedef uint64_t fe_limb_t;
+#define FE_NUM_LIMBS 5
+
+// assert_fe asserts that |f| satisfies bounds:
+//
+//  [[0x0 ~> 0x8cccccccccccc],
+//   [0x0 ~> 0x8cccccccccccc],
+//   [0x0 ~> 0x8cccccccccccc],
+//   [0x0 ~> 0x8cccccccccccc],
+//   [0x0 ~> 0x8cccccccccccc]]
+//
+// See comments in curve25519_64.h for which functions use these bounds for
+// inputs or outputs.
+#define assert_fe(f)                                                    \
+  do {                                                                  \
+    for (unsigned _assert_fe_i = 0; _assert_fe_i < 5; _assert_fe_i++) { \
+      assert(f[_assert_fe_i] <= UINT64_C(0x8cccccccccccc));             \
+    }                                                                   \
+  } while (0)
+
+// assert_fe_loose asserts that |f| satisfies bounds:
+//
+//  [[0x0 ~> 0x1a666666666664],
+//   [0x0 ~> 0x1a666666666664],
+//   [0x0 ~> 0x1a666666666664],
+//   [0x0 ~> 0x1a666666666664],
+//   [0x0 ~> 0x1a666666666664]]
+//
+// See comments in curve25519_64.h for which functions use these bounds for
+// inputs or outputs.
+#define assert_fe_loose(f)                                              \
+  do {                                                                  \
+    for (unsigned _assert_fe_i = 0; _assert_fe_i < 5; _assert_fe_i++) { \
+      assert(f[_assert_fe_i] <= UINT64_C(0x1a666666666664));            \
+    }                                                                   \
+  } while (0)
+
+#else
+
+typedef uint32_t fe_limb_t;
+#define FE_NUM_LIMBS 10
+
+// assert_fe asserts that |f| satisfies bounds:
+//
+//  [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333],
+//   [0x0 ~> 0x4666666], [0x0 ~> 0x2333333],
+//   [0x0 ~> 0x4666666], [0x0 ~> 0x2333333],
+//   [0x0 ~> 0x4666666], [0x0 ~> 0x2333333],
+//   [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]]
+//
+// See comments in curve25519_32.h for which functions use these bounds for
+// inputs or outputs.
+#define assert_fe(f)                                                     \
+  do {                                                                   \
+    for (unsigned _assert_fe_i = 0; _assert_fe_i < 10; _assert_fe_i++) { \
+      assert(f[_assert_fe_i] <=                                          \
+             ((_assert_fe_i & 1) ? 0x2333333u : 0x4666666u));            \
+    }                                                                    \
+  } while (0)
+
+// assert_fe_loose asserts that |f| satisfies bounds:
+//
+//  [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999],
+//   [0x0 ~> 0xd333332], [0x0 ~> 0x6999999],
+//   [0x0 ~> 0xd333332], [0x0 ~> 0x6999999],
+//   [0x0 ~> 0xd333332], [0x0 ~> 0x6999999],
+//   [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]]
+//
+// See comments in curve25519_32.h for which functions use these bounds for
+// inputs or outputs.
+#define assert_fe_loose(f)                                               \
+  do {                                                                   \
+    for (unsigned _assert_fe_i = 0; _assert_fe_i < 10; _assert_fe_i++) { \
+      assert(f[_assert_fe_i] <=                                          \
+             ((_assert_fe_i & 1) ? 0x6999999u : 0xd333332u));            \
+    }                                                                    \
+  } while (0)
+
+#endif  // BORINGSSL_CURVE25519_64BIT
+
+OPENSSL_STATIC_ASSERT(sizeof(fe) == sizeof(fe_limb_t) * FE_NUM_LIMBS,
+                      "fe_limb_t[FE_NUM_LIMBS] is inconsistent with fe");
+
+static void fe_frombytes_strict(fe *h, const uint8_t s[32]) {
+  // |fiat_25519_from_bytes| requires the top-most bit be clear.
+  assert((s[31] & 0x80) == 0);
+  fiat_25519_from_bytes(h->v, s);
+  assert_fe(h->v);
+}
+
+static void fe_frombytes(fe *h, const uint8_t s[32]) {
+  uint8_t s_copy[32];
+  OPENSSL_memcpy(s_copy, s, 32);
+  s_copy[31] &= 0x7f;
+  fe_frombytes_strict(h, s_copy);
+}
+
+static void fe_tobytes(uint8_t s[32], const fe *f) {
+  assert_fe(f->v);
+  fiat_25519_to_bytes(s, f->v);
+}
+
+// h = 0
+static void fe_0(fe *h) {
+  OPENSSL_memset(h, 0, sizeof(fe));
+}
+
+static void fe_loose_0(fe_loose *h) {
+  OPENSSL_memset(h, 0, sizeof(fe_loose));
+}
+
+// h = 1
+static void fe_1(fe *h) {
+  OPENSSL_memset(h, 0, sizeof(fe));
+  h->v[0] = 1;
+}
+
+static void fe_loose_1(fe_loose *h) {
+  OPENSSL_memset(h, 0, sizeof(fe_loose));
+  h->v[0] = 1;
+}
+
+// h = f + g
+// Can overlap h with f or g.
+static void fe_add(fe_loose *h, const fe *f, const fe *g) {
+  assert_fe(f->v);
+  assert_fe(g->v);
+  fiat_25519_add(h->v, f->v, g->v);
+  assert_fe_loose(h->v);
+}
+
+// h = f - g
+// Can overlap h with f or g.
+static void fe_sub(fe_loose *h, const fe *f, const fe *g) {
+  assert_fe(f->v);
+  assert_fe(g->v);
+  fiat_25519_sub(h->v, f->v, g->v);
+  assert_fe_loose(h->v);
+}
+
+static void fe_carry(fe *h, const fe_loose* f) {
+  assert_fe_loose(f->v);
+  fiat_25519_carry(h->v, f->v);
+  assert_fe(h->v);
+}
+
+static void fe_mul_impl(fe_limb_t out[FE_NUM_LIMBS],
+                        const fe_limb_t in1[FE_NUM_LIMBS],
+                        const fe_limb_t in2[FE_NUM_LIMBS]) {
+  assert_fe_loose(in1);
+  assert_fe_loose(in2);
+  fiat_25519_carry_mul(out, in1, in2);
+  assert_fe(out);
+}
+
+static void fe_mul_ltt(fe_loose *h, const fe *f, const fe *g) {
+  fe_mul_impl(h->v, f->v, g->v);
+}
+
+static void fe_mul_llt(fe_loose *h, const fe_loose *f, const fe *g) {
+  fe_mul_impl(h->v, f->v, g->v);
+}
+
+static void fe_mul_ttt(fe *h, const fe *f, const fe *g) {
+  fe_mul_impl(h->v, f->v, g->v);
+}
+
+static void fe_mul_tlt(fe *h, const fe_loose *f, const fe *g) {
+  fe_mul_impl(h->v, f->v, g->v);
+}
+
+static void fe_mul_ttl(fe *h, const fe *f, const fe_loose *g) {
+  fe_mul_impl(h->v, f->v, g->v);
+}
+
+static void fe_mul_tll(fe *h, const fe_loose *f, const fe_loose *g) {
+  fe_mul_impl(h->v, f->v, g->v);
+}
+
+static void fe_sq_tl(fe *h, const fe_loose *f) {
+  assert_fe_loose(f->v);
+  fiat_25519_carry_square(h->v, f->v);
+  assert_fe(h->v);
+}
+
+static void fe_sq_tt(fe *h, const fe *f) {
+  assert_fe_loose(f->v);
+  fiat_25519_carry_square(h->v, f->v);
+  assert_fe(h->v);
+}
+
+// Replace (f,g) with (g,f) if b == 1;
+// replace (f,g) with (f,g) if b == 0.
+//
+// Preconditions: b in {0,1}.
+static void fe_cswap(fe *f, fe *g, fe_limb_t b) {
+  b = 0-b;
+  for (unsigned i = 0; i < FE_NUM_LIMBS; i++) {
+    fe_limb_t x = f->v[i] ^ g->v[i];
+    x &= b;
+    f->v[i] ^= x;
+    g->v[i] ^= x;
+  }
+}
+
+static void fe_mul121666(fe *h, const fe_loose *f) {
+  assert_fe_loose(f->v);
+  fiat_25519_carry_scmul_121666(h->v, f->v);
+  assert_fe(h->v);
+}
+
+// h = -f
+static void fe_neg(fe_loose *h, const fe *f) {
+  assert_fe(f->v);
+  fiat_25519_opp(h->v, f->v);
+  assert_fe_loose(h->v);
+}
+
+// Replace (f,g) with (g,g) if b == 1;
+// replace (f,g) with (f,g) if b == 0.
+//
+// Preconditions: b in {0,1}.
+static void fe_cmov(fe_loose *f, const fe_loose *g, fe_limb_t b) {
+  // Silence an unused function warning. |fiat_25519_selectznz| isn't quite the
+  // calling convention the rest of this code wants, so implement it by hand.
+  //
+  // TODO(davidben): Switch to fiat's calling convention, or ask fiat to emit a
+  // different one.
+  (void)fiat_25519_selectznz;
+
+  b = 0-b;
+  for (unsigned i = 0; i < FE_NUM_LIMBS; i++) {
+    fe_limb_t x = f->v[i] ^ g->v[i];
+    x &= b;
+    f->v[i] ^= x;
+  }
+}
+
+// h = f
+static void fe_copy(fe *h, const fe *f) {
+  OPENSSL_memmove(h, f, sizeof(fe));
+}
+
+static void fe_copy_lt(fe_loose *h, const fe *f) {
+  OPENSSL_STATIC_ASSERT(sizeof(fe_loose) == sizeof(fe),
+                        "fe and fe_loose mismatch");
+  OPENSSL_memmove(h, f, sizeof(fe));
+}
+#if !defined(OPENSSL_SMALL)
+static void fe_copy_ll(fe_loose *h, const fe_loose *f) {
+  OPENSSL_memmove(h, f, sizeof(fe_loose));
+}
+#endif // !defined(OPENSSL_SMALL)
+
+static void fe_loose_invert(fe *out, const fe_loose *z) {
+  fe t0;
+  fe t1;
+  fe t2;
+  fe t3;
+  int i;
+
+  fe_sq_tl(&t0, z);
+  fe_sq_tt(&t1, &t0);
+  for (i = 1; i < 2; ++i) {
+    fe_sq_tt(&t1, &t1);
+  }
+  fe_mul_tlt(&t1, z, &t1);
+  fe_mul_ttt(&t0, &t0, &t1);
+  fe_sq_tt(&t2, &t0);
+  fe_mul_ttt(&t1, &t1, &t2);
+  fe_sq_tt(&t2, &t1);
+  for (i = 1; i < 5; ++i) {
+    fe_sq_tt(&t2, &t2);
+  }
+  fe_mul_ttt(&t1, &t2, &t1);
+  fe_sq_tt(&t2, &t1);
+  for (i = 1; i < 10; ++i) {
+    fe_sq_tt(&t2, &t2);
+  }
+  fe_mul_ttt(&t2, &t2, &t1);
+  fe_sq_tt(&t3, &t2);
+  for (i = 1; i < 20; ++i) {
+    fe_sq_tt(&t3, &t3);
+  }
+  fe_mul_ttt(&t2, &t3, &t2);
+  fe_sq_tt(&t2, &t2);
+  for (i = 1; i < 10; ++i) {
+    fe_sq_tt(&t2, &t2);
+  }
+  fe_mul_ttt(&t1, &t2, &t1);
+  fe_sq_tt(&t2, &t1);
+  for (i = 1; i < 50; ++i) {
+    fe_sq_tt(&t2, &t2);
+  }
+  fe_mul_ttt(&t2, &t2, &t1);
+  fe_sq_tt(&t3, &t2);
+  for (i = 1; i < 100; ++i) {
+    fe_sq_tt(&t3, &t3);
+  }
+  fe_mul_ttt(&t2, &t3, &t2);
+  fe_sq_tt(&t2, &t2);
+  for (i = 1; i < 50; ++i) {
+    fe_sq_tt(&t2, &t2);
+  }
+  fe_mul_ttt(&t1, &t2, &t1);
+  fe_sq_tt(&t1, &t1);
+  for (i = 1; i < 5; ++i) {
+    fe_sq_tt(&t1, &t1);
+  }
+  fe_mul_ttt(out, &t1, &t0);
+}
+
+static void fe_invert(fe *out, const fe *z) {
+  fe_loose l;
+  fe_copy_lt(&l, z);
+  fe_loose_invert(out, &l);
+}
+
+// return 0 if f == 0
+// return 1 if f != 0
+static int fe_isnonzero(const fe_loose *f) {
+  fe tight;
+  fe_carry(&tight, f);
+  uint8_t s[32];
+  fe_tobytes(s, &tight);
+
+  static const uint8_t zero[32] = {0};
+  return CRYPTO_memcmp(s, zero, sizeof(zero)) != 0;
+}
+
+// return 1 if f is in {1,3,5,...,q-2}
+// return 0 if f is in {0,2,4,...,q-1}
+static int fe_isnegative(const fe *f) {
+  uint8_t s[32];
+  fe_tobytes(s, f);
+  return s[0] & 1;
+}
+
+static void fe_sq2_tt(fe *h, const fe *f) {
+  // h = f^2
+  fe_sq_tt(h, f);
+
+  // h = h + h
+  fe_loose tmp;
+  fe_add(&tmp, h, h);
+  fe_carry(h, &tmp);
+}
+
+static void fe_pow22523(fe *out, const fe *z) {
+  fe t0;
+  fe t1;
+  fe t2;
+  int i;
+
+  fe_sq_tt(&t0, z);
+  fe_sq_tt(&t1, &t0);
+  for (i = 1; i < 2; ++i) {
+    fe_sq_tt(&t1, &t1);
+  }
+  fe_mul_ttt(&t1, z, &t1);
+  fe_mul_ttt(&t0, &t0, &t1);
+  fe_sq_tt(&t0, &t0);
+  fe_mul_ttt(&t0, &t1, &t0);
+  fe_sq_tt(&t1, &t0);
+  for (i = 1; i < 5; ++i) {
+    fe_sq_tt(&t1, &t1);
+  }
+  fe_mul_ttt(&t0, &t1, &t0);
+  fe_sq_tt(&t1, &t0);
+  for (i = 1; i < 10; ++i) {
+    fe_sq_tt(&t1, &t1);
+  }
+  fe_mul_ttt(&t1, &t1, &t0);
+  fe_sq_tt(&t2, &t1);
+  for (i = 1; i < 20; ++i) {
+    fe_sq_tt(&t2, &t2);
+  }
+  fe_mul_ttt(&t1, &t2, &t1);
+  fe_sq_tt(&t1, &t1);
+  for (i = 1; i < 10; ++i) {
+    fe_sq_tt(&t1, &t1);
+  }
+  fe_mul_ttt(&t0, &t1, &t0);
+  fe_sq_tt(&t1, &t0);
+  for (i = 1; i < 50; ++i) {
+    fe_sq_tt(&t1, &t1);
+  }
+  fe_mul_ttt(&t1, &t1, &t0);
+  fe_sq_tt(&t2, &t1);
+  for (i = 1; i < 100; ++i) {
+    fe_sq_tt(&t2, &t2);
+  }
+  fe_mul_ttt(&t1, &t2, &t1);
+  fe_sq_tt(&t1, &t1);
+  for (i = 1; i < 50; ++i) {
+    fe_sq_tt(&t1, &t1);
+  }
+  fe_mul_ttt(&t0, &t1, &t0);
+  fe_sq_tt(&t0, &t0);
+  for (i = 1; i < 2; ++i) {
+    fe_sq_tt(&t0, &t0);
+  }
+  fe_mul_ttt(out, &t0, z);
+}
+
+
+// Group operations.
+
+void x25519_ge_tobytes(uint8_t s[32], const ge_p2 *h) {
+  fe recip;
+  fe x;
+  fe y;
+
+  fe_invert(&recip, &h->Z);
+  fe_mul_ttt(&x, &h->X, &recip);
+  fe_mul_ttt(&y, &h->Y, &recip);
+  fe_tobytes(s, &y);
+  s[31] ^= fe_isnegative(&x) << 7;
+}
+
+static void ge_p3_tobytes(uint8_t s[32], const ge_p3 *h) {
+  fe recip;
+  fe x;
+  fe y;
+
+  fe_invert(&recip, &h->Z);
+  fe_mul_ttt(&x, &h->X, &recip);
+  fe_mul_ttt(&y, &h->Y, &recip);
+  fe_tobytes(s, &y);
+  s[31] ^= fe_isnegative(&x) << 7;
+}
+
+int x25519_ge_frombytes_vartime(ge_p3 *h, const uint8_t s[32]) {
+  fe u;
+  fe_loose v;
+  fe v3;
+  fe vxx;
+  fe_loose check;
+
+  fe_frombytes(&h->Y, s);
+  fe_1(&h->Z);
+  fe_sq_tt(&v3, &h->Y);
+  fe_mul_ttt(&vxx, &v3, &d);
+  fe_sub(&v, &v3, &h->Z);  // u = y^2-1
+  fe_carry(&u, &v);
+  fe_add(&v, &vxx, &h->Z);  // v = dy^2+1
+
+  fe_sq_tl(&v3, &v);
+  fe_mul_ttl(&v3, &v3, &v);  // v3 = v^3
+  fe_sq_tt(&h->X, &v3);
+  fe_mul_ttl(&h->X, &h->X, &v);
+  fe_mul_ttt(&h->X, &h->X, &u);  // x = uv^7
+
+  fe_pow22523(&h->X, &h->X);  // x = (uv^7)^((q-5)/8)
+  fe_mul_ttt(&h->X, &h->X, &v3);
+  fe_mul_ttt(&h->X, &h->X, &u);  // x = uv^3(uv^7)^((q-5)/8)
+
+  fe_sq_tt(&vxx, &h->X);
+  fe_mul_ttl(&vxx, &vxx, &v);
+  fe_sub(&check, &vxx, &u);
+  if (fe_isnonzero(&check)) {
+    fe_add(&check, &vxx, &u);
+    if (fe_isnonzero(&check)) {
+      return 0;
+    }
+    fe_mul_ttt(&h->X, &h->X, &sqrtm1);
+  }
+
+  if (fe_isnegative(&h->X) != (s[31] >> 7)) {
+    fe_loose t;
+    fe_neg(&t, &h->X);
+    fe_carry(&h->X, &t);
+  }
+
+  fe_mul_ttt(&h->T, &h->X, &h->Y);
+  return 1;
+}
+
+static void ge_p2_0(ge_p2 *h) {
+  fe_0(&h->X);
+  fe_1(&h->Y);
+  fe_1(&h->Z);
+}
+
+static void ge_p3_0(ge_p3 *h) {
+  fe_0(&h->X);
+  fe_1(&h->Y);
+  fe_1(&h->Z);
+  fe_0(&h->T);
+}
+
+static void ge_cached_0(ge_cached *h) {
+  fe_loose_1(&h->YplusX);
+  fe_loose_1(&h->YminusX);
+  fe_loose_1(&h->Z);
+  fe_loose_0(&h->T2d);
+}
+
+static void ge_precomp_0(ge_precomp *h) {
+  fe_loose_1(&h->yplusx);
+  fe_loose_1(&h->yminusx);
+  fe_loose_0(&h->xy2d);
+}
+
+// r = p
+static void ge_p3_to_p2(ge_p2 *r, const ge_p3 *p) {
+  fe_copy(&r->X, &p->X);
+  fe_copy(&r->Y, &p->Y);
+  fe_copy(&r->Z, &p->Z);
+}
+
+// r = p
+void x25519_ge_p3_to_cached(ge_cached *r, const ge_p3 *p) {
+  fe_add(&r->YplusX, &p->Y, &p->X);
+  fe_sub(&r->YminusX, &p->Y, &p->X);
+  fe_copy_lt(&r->Z, &p->Z);
+  fe_mul_ltt(&r->T2d, &p->T, &d2);
+}
+
+// r = p
+void x25519_ge_p1p1_to_p2(ge_p2 *r, const ge_p1p1 *p) {
+  fe_mul_tll(&r->X, &p->X, &p->T);
+  fe_mul_tll(&r->Y, &p->Y, &p->Z);
+  fe_mul_tll(&r->Z, &p->Z, &p->T);
+}
+
+// r = p
+void x25519_ge_p1p1_to_p3(ge_p3 *r, const ge_p1p1 *p) {
+  fe_mul_tll(&r->X, &p->X, &p->T);
+  fe_mul_tll(&r->Y, &p->Y, &p->Z);
+  fe_mul_tll(&r->Z, &p->Z, &p->T);
+  fe_mul_tll(&r->T, &p->X, &p->Y);
+}
+
+// r = p
+static void ge_p1p1_to_cached(ge_cached *r, const ge_p1p1 *p) {
+  ge_p3 t;
+  x25519_ge_p1p1_to_p3(&t, p);
+  x25519_ge_p3_to_cached(r, &t);
+}
+
+// r = 2 * p
+static void ge_p2_dbl(ge_p1p1 *r, const ge_p2 *p) {
+  fe trX, trZ, trT;
+  fe t0;
+
+  fe_sq_tt(&trX, &p->X);
+  fe_sq_tt(&trZ, &p->Y);
+  fe_sq2_tt(&trT, &p->Z);
+  fe_add(&r->Y, &p->X, &p->Y);
+  fe_sq_tl(&t0, &r->Y);
+
+  fe_add(&r->Y, &trZ, &trX);
+  fe_sub(&r->Z, &trZ, &trX);
+  fe_carry(&trZ, &r->Y);
+  fe_sub(&r->X, &t0, &trZ);
+  fe_carry(&trZ, &r->Z);
+  fe_sub(&r->T, &trT, &trZ);
+}
+
+// r = 2 * p
+static void ge_p3_dbl(ge_p1p1 *r, const ge_p3 *p) {
+  ge_p2 q;
+  ge_p3_to_p2(&q, p);
+  ge_p2_dbl(r, &q);
+}
+
+// r = p + q
+static void ge_madd(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q) {
+  fe trY, trZ, trT;
+
+  fe_add(&r->X, &p->Y, &p->X);
+  fe_sub(&r->Y, &p->Y, &p->X);
+  fe_mul_tll(&trZ, &r->X, &q->yplusx);
+  fe_mul_tll(&trY, &r->Y, &q->yminusx);
+  fe_mul_tlt(&trT, &q->xy2d, &p->T);
+  fe_add(&r->T, &p->Z, &p->Z);
+  fe_sub(&r->X, &trZ, &trY);
+  fe_add(&r->Y, &trZ, &trY);
+  fe_carry(&trZ, &r->T);
+  fe_add(&r->Z, &trZ, &trT);
+  fe_sub(&r->T, &trZ, &trT);
+}
+
+// r = p - q
+static void ge_msub(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q) {
+  fe trY, trZ, trT;
+
+  fe_add(&r->X, &p->Y, &p->X);
+  fe_sub(&r->Y, &p->Y, &p->X);
+  fe_mul_tll(&trZ, &r->X, &q->yminusx);
+  fe_mul_tll(&trY, &r->Y, &q->yplusx);
+  fe_mul_tlt(&trT, &q->xy2d, &p->T);
+  fe_add(&r->T, &p->Z, &p->Z);
+  fe_sub(&r->X, &trZ, &trY);
+  fe_add(&r->Y, &trZ, &trY);
+  fe_carry(&trZ, &r->T);
+  fe_sub(&r->Z, &trZ, &trT);
+  fe_add(&r->T, &trZ, &trT);
+}
+
+// r = p + q
+void x25519_ge_add(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) {
+  fe trX, trY, trZ, trT;
+
+  fe_add(&r->X, &p->Y, &p->X);
+  fe_sub(&r->Y, &p->Y, &p->X);
+  fe_mul_tll(&trZ, &r->X, &q->YplusX);
+  fe_mul_tll(&trY, &r->Y, &q->YminusX);
+  fe_mul_tlt(&trT, &q->T2d, &p->T);
+  fe_mul_ttl(&trX, &p->Z, &q->Z);
+  fe_add(&r->T, &trX, &trX);
+  fe_sub(&r->X, &trZ, &trY);
+  fe_add(&r->Y, &trZ, &trY);
+  fe_carry(&trZ, &r->T);
+  fe_add(&r->Z, &trZ, &trT);
+  fe_sub(&r->T, &trZ, &trT);
+}
+
+// r = p - q
+void x25519_ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) {
+  fe trX, trY, trZ, trT;
+
+  fe_add(&r->X, &p->Y, &p->X);
+  fe_sub(&r->Y, &p->Y, &p->X);
+  fe_mul_tll(&trZ, &r->X, &q->YminusX);
+  fe_mul_tll(&trY, &r->Y, &q->YplusX);
+  fe_mul_tlt(&trT, &q->T2d, &p->T);
+  fe_mul_ttl(&trX, &p->Z, &q->Z);
+  fe_add(&r->T, &trX, &trX);
+  fe_sub(&r->X, &trZ, &trY);
+  fe_add(&r->Y, &trZ, &trY);
+  fe_carry(&trZ, &r->T);
+  fe_sub(&r->Z, &trZ, &trT);
+  fe_add(&r->T, &trZ, &trT);
+}
+
+static uint8_t equal(signed char b, signed char c) {
+  uint8_t ub = b;
+  uint8_t uc = c;
+  uint8_t x = ub ^ uc;  // 0: yes; 1..255: no
+  uint32_t y = x;       // 0: yes; 1..255: no
+  y -= 1;               // 4294967295: yes; 0..254: no
+  y >>= 31;             // 1: yes; 0: no
+  return y;
+}
+
+static void cmov(ge_precomp *t, const ge_precomp *u, uint8_t b) {
+  fe_cmov(&t->yplusx, &u->yplusx, b);
+  fe_cmov(&t->yminusx, &u->yminusx, b);
+  fe_cmov(&t->xy2d, &u->xy2d, b);
+}
+
+void x25519_ge_scalarmult_small_precomp(
+    ge_p3 *h, const uint8_t a[32], const uint8_t precomp_table[15 * 2 * 32]) {
+  // precomp_table is first expanded into matching |ge_precomp|
+  // elements.
+  ge_precomp multiples[15];
+
+  unsigned i;
+  for (i = 0; i < 15; i++) {
+    // The precomputed table is assumed to already clear the top bit, so
+    // |fe_frombytes_strict| may be used directly.
+    const uint8_t *bytes = &precomp_table[i*(2 * 32)];
+    fe x, y;
+    fe_frombytes_strict(&x, bytes);
+    fe_frombytes_strict(&y, bytes + 32);
+
+    ge_precomp *out = &multiples[i];
+    fe_add(&out->yplusx, &y, &x);
+    fe_sub(&out->yminusx, &y, &x);
+    fe_mul_ltt(&out->xy2d, &x, &y);
+    fe_mul_llt(&out->xy2d, &out->xy2d, &d2);
+  }
+
+  // See the comment above |k25519SmallPrecomp| about the structure of the
+  // precomputed elements. This loop does 64 additions and 64 doublings to
+  // calculate the result.
+  ge_p3_0(h);
+
+  for (i = 63; i < 64; i--) {
+    unsigned j;
+    signed char index = 0;
+
+    for (j = 0; j < 4; j++) {
+      const uint8_t bit = 1 & (a[(8 * j) + (i / 8)] >> (i & 7));
+      index |= (bit << j);
+    }
+
+    ge_precomp e;
+    ge_precomp_0(&e);
+
+    for (j = 1; j < 16; j++) {
+      cmov(&e, &multiples[j-1], equal(index, j));
+    }
+
+    ge_cached cached;
+    ge_p1p1 r;
+    x25519_ge_p3_to_cached(&cached, h);
+    x25519_ge_add(&r, h, &cached);
+    x25519_ge_p1p1_to_p3(h, &r);
+
+    ge_madd(&r, h, &e);
+    x25519_ge_p1p1_to_p3(h, &r);
+  }
+}
+
+#if defined(OPENSSL_SMALL)
+
+void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t a[32]) {
+  x25519_ge_scalarmult_small_precomp(h, a, k25519SmallPrecomp);
+}
+
+#else
+
+static uint8_t negative(signed char b) {
+  uint32_t x = b;
+  x >>= 31;  // 1: yes; 0: no
+  return x;
+}
+
+static void table_select(ge_precomp *t, int pos, signed char b) {
+  ge_precomp minust;
+  uint8_t bnegative = negative(b);
+  uint8_t babs = b - ((uint8_t)((-bnegative) & b) << 1);
+
+  ge_precomp_0(t);
+  cmov(t, &k25519Precomp[pos][0], equal(babs, 1));
+  cmov(t, &k25519Precomp[pos][1], equal(babs, 2));
+  cmov(t, &k25519Precomp[pos][2], equal(babs, 3));
+  cmov(t, &k25519Precomp[pos][3], equal(babs, 4));
+  cmov(t, &k25519Precomp[pos][4], equal(babs, 5));
+  cmov(t, &k25519Precomp[pos][5], equal(babs, 6));
+  cmov(t, &k25519Precomp[pos][6], equal(babs, 7));
+  cmov(t, &k25519Precomp[pos][7], equal(babs, 8));
+  fe_copy_ll(&minust.yplusx, &t->yminusx);
+  fe_copy_ll(&minust.yminusx, &t->yplusx);
+
+  // NOTE: the input table is canonical, but types don't encode it
+  fe tmp;
+  fe_carry(&tmp, &t->xy2d);
+  fe_neg(&minust.xy2d, &tmp);
+
+  cmov(t, &minust, bnegative);
+}
+
+// h = a * B
+// where a = a[0]+256*a[1]+...+256^31 a[31]
+// B is the Ed25519 base point (x,4/5) with x positive.
+//
+// Preconditions:
+//   a[31] <= 127
+void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t *a) {
+  signed char e[64];
+  signed char carry;
+  ge_p1p1 r;
+  ge_p2 s;
+  ge_precomp t;
+  int i;
+
+  for (i = 0; i < 32; ++i) {
+    e[2 * i + 0] = (a[i] >> 0) & 15;
+    e[2 * i + 1] = (a[i] >> 4) & 15;
+  }
+  // each e[i] is between 0 and 15
+  // e[63] is between 0 and 7
+
+  carry = 0;
+  for (i = 0; i < 63; ++i) {
+    e[i] += carry;
+    carry = e[i] + 8;
+    carry >>= 4;
+    e[i] -= carry << 4;
+  }
+  e[63] += carry;
+  // each e[i] is between -8 and 8
+
+  ge_p3_0(h);
+  for (i = 1; i < 64; i += 2) {
+    table_select(&t, i / 2, e[i]);
+    ge_madd(&r, h, &t);
+    x25519_ge_p1p1_to_p3(h, &r);
+  }
+
+  ge_p3_dbl(&r, h);
+  x25519_ge_p1p1_to_p2(&s, &r);
+  ge_p2_dbl(&r, &s);
+  x25519_ge_p1p1_to_p2(&s, &r);
+  ge_p2_dbl(&r, &s);
+  x25519_ge_p1p1_to_p2(&s, &r);
+  ge_p2_dbl(&r, &s);
+  x25519_ge_p1p1_to_p3(h, &r);
+
+  for (i = 0; i < 64; i += 2) {
+    table_select(&t, i / 2, e[i]);
+    ge_madd(&r, h, &t);
+    x25519_ge_p1p1_to_p3(h, &r);
+  }
+}
+
+#endif
+
+static void cmov_cached(ge_cached *t, ge_cached *u, uint8_t b) {
+  fe_cmov(&t->YplusX, &u->YplusX, b);
+  fe_cmov(&t->YminusX, &u->YminusX, b);
+  fe_cmov(&t->Z, &u->Z, b);
+  fe_cmov(&t->T2d, &u->T2d, b);
+}
+
+// r = scalar * A.
+// where a = a[0]+256*a[1]+...+256^31 a[31].
+void x25519_ge_scalarmult(ge_p2 *r, const uint8_t *scalar, const ge_p3 *A) {
+  ge_p2 Ai_p2[8];
+  ge_cached Ai[16];
+  ge_p1p1 t;
+
+  ge_cached_0(&Ai[0]);
+  x25519_ge_p3_to_cached(&Ai[1], A);
+  ge_p3_to_p2(&Ai_p2[1], A);
+
+  unsigned i;
+  for (i = 2; i < 16; i += 2) {
+    ge_p2_dbl(&t, &Ai_p2[i / 2]);
+    ge_p1p1_to_cached(&Ai[i], &t);
+    if (i < 8) {
+      x25519_ge_p1p1_to_p2(&Ai_p2[i], &t);
+    }
+    x25519_ge_add(&t, A, &Ai[i]);
+    ge_p1p1_to_cached(&Ai[i + 1], &t);
+    if (i < 7) {
+      x25519_ge_p1p1_to_p2(&Ai_p2[i + 1], &t);
+    }
+  }
+
+  ge_p2_0(r);
+  ge_p3 u;
+
+  for (i = 0; i < 256; i += 4) {
+    ge_p2_dbl(&t, r);
+    x25519_ge_p1p1_to_p2(r, &t);
+    ge_p2_dbl(&t, r);
+    x25519_ge_p1p1_to_p2(r, &t);
+    ge_p2_dbl(&t, r);
+    x25519_ge_p1p1_to_p2(r, &t);
+    ge_p2_dbl(&t, r);
+    x25519_ge_p1p1_to_p3(&u, &t);
+
+    uint8_t index = scalar[31 - i/8];
+    index >>= 4 - (i & 4);
+    index &= 0xf;
+
+    unsigned j;
+    ge_cached selected;
+    ge_cached_0(&selected);
+    for (j = 0; j < 16; j++) {
+      cmov_cached(&selected, &Ai[j], equal(j, index));
+    }
+
+    x25519_ge_add(&t, &u, &selected);
+    x25519_ge_p1p1_to_p2(r, &t);
+  }
+}
+
+static void slide(signed char *r, const uint8_t *a) {
+  int i;
+  int b;
+  int k;
+
+  for (i = 0; i < 256; ++i) {
+    r[i] = 1 & (a[i >> 3] >> (i & 7));
+  }
+
+  for (i = 0; i < 256; ++i) {
+    if (r[i]) {
+      for (b = 1; b <= 6 && i + b < 256; ++b) {
+        if (r[i + b]) {
+          if (r[i] + (r[i + b] << b) <= 15) {
+            r[i] += r[i + b] << b;
+            r[i + b] = 0;
+          } else if (r[i] - (r[i + b] << b) >= -15) {
+            r[i] -= r[i + b] << b;
+            for (k = i + b; k < 256; ++k) {
+              if (!r[k]) {
+                r[k] = 1;
+                break;
+              }
+              r[k] = 0;
+            }
+          } else {
+            break;
+          }
+        }
+      }
+    }
+  }
+}
+
+// r = a * A + b * B
+// where a = a[0]+256*a[1]+...+256^31 a[31].
+// and b = b[0]+256*b[1]+...+256^31 b[31].
+// B is the Ed25519 base point (x,4/5) with x positive.
+static void ge_double_scalarmult_vartime(ge_p2 *r, const uint8_t *a,
+                                         const ge_p3 *A, const uint8_t *b) {
+  signed char aslide[256];
+  signed char bslide[256];
+  ge_cached Ai[8];  // A,3A,5A,7A,9A,11A,13A,15A
+  ge_p1p1 t;
+  ge_p3 u;
+  ge_p3 A2;
+  int i;
+
+  slide(aslide, a);
+  slide(bslide, b);
+
+  x25519_ge_p3_to_cached(&Ai[0], A);
+  ge_p3_dbl(&t, A);
+  x25519_ge_p1p1_to_p3(&A2, &t);
+  x25519_ge_add(&t, &A2, &Ai[0]);
+  x25519_ge_p1p1_to_p3(&u, &t);
+  x25519_ge_p3_to_cached(&Ai[1], &u);
+  x25519_ge_add(&t, &A2, &Ai[1]);
+  x25519_ge_p1p1_to_p3(&u, &t);
+  x25519_ge_p3_to_cached(&Ai[2], &u);
+  x25519_ge_add(&t, &A2, &Ai[2]);
+  x25519_ge_p1p1_to_p3(&u, &t);
+  x25519_ge_p3_to_cached(&Ai[3], &u);
+  x25519_ge_add(&t, &A2, &Ai[3]);
+  x25519_ge_p1p1_to_p3(&u, &t);
+  x25519_ge_p3_to_cached(&Ai[4], &u);
+  x25519_ge_add(&t, &A2, &Ai[4]);
+  x25519_ge_p1p1_to_p3(&u, &t);
+  x25519_ge_p3_to_cached(&Ai[5], &u);
+  x25519_ge_add(&t, &A2, &Ai[5]);
+  x25519_ge_p1p1_to_p3(&u, &t);
+  x25519_ge_p3_to_cached(&Ai[6], &u);
+  x25519_ge_add(&t, &A2, &Ai[6]);
+  x25519_ge_p1p1_to_p3(&u, &t);
+  x25519_ge_p3_to_cached(&Ai[7], &u);
+
+  ge_p2_0(r);
+
+  for (i = 255; i >= 0; --i) {
+    if (aslide[i] || bslide[i]) {
+      break;
+    }
+  }
+
+  for (; i >= 0; --i) {
+    ge_p2_dbl(&t, r);
+
+    if (aslide[i] > 0) {
+      x25519_ge_p1p1_to_p3(&u, &t);
+      x25519_ge_add(&t, &u, &Ai[aslide[i] / 2]);
+    } else if (aslide[i] < 0) {
+      x25519_ge_p1p1_to_p3(&u, &t);
+      x25519_ge_sub(&t, &u, &Ai[(-aslide[i]) / 2]);
+    }
+
+    if (bslide[i] > 0) {
+      x25519_ge_p1p1_to_p3(&u, &t);
+      ge_madd(&t, &u, &Bi[bslide[i] / 2]);
+    } else if (bslide[i] < 0) {
+      x25519_ge_p1p1_to_p3(&u, &t);
+      ge_msub(&t, &u, &Bi[(-bslide[i]) / 2]);
+    }
+
+    x25519_ge_p1p1_to_p2(r, &t);
+  }
+}
+
+// int64_lshift21 returns |a << 21| but is defined when shifting bits into the
+// sign bit. This works around a language flaw in C.
+static inline int64_t int64_lshift21(int64_t a) {
+  return (int64_t)((uint64_t)a << 21);
+}
+
+// The set of scalars is \Z/l
+// where l = 2^252 + 27742317777372353535851937790883648493.
+
+// Input:
+//   s[0]+256*s[1]+...+256^63*s[63] = s
+//
+// Output:
+//   s[0]+256*s[1]+...+256^31*s[31] = s mod l
+//   where l = 2^252 + 27742317777372353535851937790883648493.
+//   Overwrites s in place.
+void x25519_sc_reduce(uint8_t s[64]) {
+  int64_t s0 = 2097151 & load_3(s);
+  int64_t s1 = 2097151 & (load_4(s + 2) >> 5);
+  int64_t s2 = 2097151 & (load_3(s + 5) >> 2);
+  int64_t s3 = 2097151 & (load_4(s + 7) >> 7);
+  int64_t s4 = 2097151 & (load_4(s + 10) >> 4);
+  int64_t s5 = 2097151 & (load_3(s + 13) >> 1);
+  int64_t s6 = 2097151 & (load_4(s + 15) >> 6);
+  int64_t s7 = 2097151 & (load_3(s + 18) >> 3);
+  int64_t s8 = 2097151 & load_3(s + 21);
+  int64_t s9 = 2097151 & (load_4(s + 23) >> 5);
+  int64_t s10 = 2097151 & (load_3(s + 26) >> 2);
+  int64_t s11 = 2097151 & (load_4(s + 28) >> 7);
+  int64_t s12 = 2097151 & (load_4(s + 31) >> 4);
+  int64_t s13 = 2097151 & (load_3(s + 34) >> 1);
+  int64_t s14 = 2097151 & (load_4(s + 36) >> 6);
+  int64_t s15 = 2097151 & (load_3(s + 39) >> 3);
+  int64_t s16 = 2097151 & load_3(s + 42);
+  int64_t s17 = 2097151 & (load_4(s + 44) >> 5);
+  int64_t s18 = 2097151 & (load_3(s + 47) >> 2);
+  int64_t s19 = 2097151 & (load_4(s + 49) >> 7);
+  int64_t s20 = 2097151 & (load_4(s + 52) >> 4);
+  int64_t s21 = 2097151 & (load_3(s + 55) >> 1);
+  int64_t s22 = 2097151 & (load_4(s + 57) >> 6);
+  int64_t s23 = (load_4(s + 60) >> 3);
+  int64_t carry0;
+  int64_t carry1;
+  int64_t carry2;
+  int64_t carry3;
+  int64_t carry4;
+  int64_t carry5;
+  int64_t carry6;
+  int64_t carry7;
+  int64_t carry8;
+  int64_t carry9;
+  int64_t carry10;
+  int64_t carry11;
+  int64_t carry12;
+  int64_t carry13;
+  int64_t carry14;
+  int64_t carry15;
+  int64_t carry16;
+
+  s11 += s23 * 666643;
+  s12 += s23 * 470296;
+  s13 += s23 * 654183;
+  s14 -= s23 * 997805;
+  s15 += s23 * 136657;
+  s16 -= s23 * 683901;
+  s23 = 0;
+
+  s10 += s22 * 666643;
+  s11 += s22 * 470296;
+  s12 += s22 * 654183;
+  s13 -= s22 * 997805;
+  s14 += s22 * 136657;
+  s15 -= s22 * 683901;
+  s22 = 0;
+
+  s9 += s21 * 666643;
+  s10 += s21 * 470296;
+  s11 += s21 * 654183;
+  s12 -= s21 * 997805;
+  s13 += s21 * 136657;
+  s14 -= s21 * 683901;
+  s21 = 0;
+
+  s8 += s20 * 666643;
+  s9 += s20 * 470296;
+  s10 += s20 * 654183;
+  s11 -= s20 * 997805;
+  s12 += s20 * 136657;
+  s13 -= s20 * 683901;
+  s20 = 0;
+
+  s7 += s19 * 666643;
+  s8 += s19 * 470296;
+  s9 += s19 * 654183;
+  s10 -= s19 * 997805;
+  s11 += s19 * 136657;
+  s12 -= s19 * 683901;
+  s19 = 0;
+
+  s6 += s18 * 666643;
+  s7 += s18 * 470296;
+  s8 += s18 * 654183;
+  s9 -= s18 * 997805;
+  s10 += s18 * 136657;
+  s11 -= s18 * 683901;
+  s18 = 0;
+
+  carry6 = (s6 + (1 << 20)) >> 21;
+  s7 += carry6;
+  s6 -= int64_lshift21(carry6);
+  carry8 = (s8 + (1 << 20)) >> 21;
+  s9 += carry8;
+  s8 -= int64_lshift21(carry8);
+  carry10 = (s10 + (1 << 20)) >> 21;
+  s11 += carry10;
+  s10 -= int64_lshift21(carry10);
+  carry12 = (s12 + (1 << 20)) >> 21;
+  s13 += carry12;
+  s12 -= int64_lshift21(carry12);
+  carry14 = (s14 + (1 << 20)) >> 21;
+  s15 += carry14;
+  s14 -= int64_lshift21(carry14);
+  carry16 = (s16 + (1 << 20)) >> 21;
+  s17 += carry16;
+  s16 -= int64_lshift21(carry16);
+
+  carry7 = (s7 + (1 << 20)) >> 21;
+  s8 += carry7;
+  s7 -= int64_lshift21(carry7);
+  carry9 = (s9 + (1 << 20)) >> 21;
+  s10 += carry9;
+  s9 -= int64_lshift21(carry9);
+  carry11 = (s11 + (1 << 20)) >> 21;
+  s12 += carry11;
+  s11 -= int64_lshift21(carry11);
+  carry13 = (s13 + (1 << 20)) >> 21;
+  s14 += carry13;
+  s13 -= int64_lshift21(carry13);
+  carry15 = (s15 + (1 << 20)) >> 21;
+  s16 += carry15;
+  s15 -= int64_lshift21(carry15);
+
+  s5 += s17 * 666643;
+  s6 += s17 * 470296;
+  s7 += s17 * 654183;
+  s8 -= s17 * 997805;
+  s9 += s17 * 136657;
+  s10 -= s17 * 683901;
+  s17 = 0;
+
+  s4 += s16 * 666643;
+  s5 += s16 * 470296;
+  s6 += s16 * 654183;
+  s7 -= s16 * 997805;
+  s8 += s16 * 136657;
+  s9 -= s16 * 683901;
+  s16 = 0;
+
+  s3 += s15 * 666643;
+  s4 += s15 * 470296;
+  s5 += s15 * 654183;
+  s6 -= s15 * 997805;
+  s7 += s15 * 136657;
+  s8 -= s15 * 683901;
+  s15 = 0;
+
+  s2 += s14 * 666643;
+  s3 += s14 * 470296;
+  s4 += s14 * 654183;
+  s5 -= s14 * 997805;
+  s6 += s14 * 136657;
+  s7 -= s14 * 683901;
+  s14 = 0;
+
+  s1 += s13 * 666643;
+  s2 += s13 * 470296;
+  s3 += s13 * 654183;
+  s4 -= s13 * 997805;
+  s5 += s13 * 136657;
+  s6 -= s13 * 683901;
+  s13 = 0;
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+  s12 = 0;
+
+  carry0 = (s0 + (1 << 20)) >> 21;
+  s1 += carry0;
+  s0 -= int64_lshift21(carry0);
+  carry2 = (s2 + (1 << 20)) >> 21;
+  s3 += carry2;
+  s2 -= int64_lshift21(carry2);
+  carry4 = (s4 + (1 << 20)) >> 21;
+  s5 += carry4;
+  s4 -= int64_lshift21(carry4);
+  carry6 = (s6 + (1 << 20)) >> 21;
+  s7 += carry6;
+  s6 -= int64_lshift21(carry6);
+  carry8 = (s8 + (1 << 20)) >> 21;
+  s9 += carry8;
+  s8 -= int64_lshift21(carry8);
+  carry10 = (s10 + (1 << 20)) >> 21;
+  s11 += carry10;
+  s10 -= int64_lshift21(carry10);
+
+  carry1 = (s1 + (1 << 20)) >> 21;
+  s2 += carry1;
+  s1 -= int64_lshift21(carry1);
+  carry3 = (s3 + (1 << 20)) >> 21;
+  s4 += carry3;
+  s3 -= int64_lshift21(carry3);
+  carry5 = (s5 + (1 << 20)) >> 21;
+  s6 += carry5;
+  s5 -= int64_lshift21(carry5);
+  carry7 = (s7 + (1 << 20)) >> 21;
+  s8 += carry7;
+  s7 -= int64_lshift21(carry7);
+  carry9 = (s9 + (1 << 20)) >> 21;
+  s10 += carry9;
+  s9 -= int64_lshift21(carry9);
+  carry11 = (s11 + (1 << 20)) >> 21;
+  s12 += carry11;
+  s11 -= int64_lshift21(carry11);
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+  s12 = 0;
+
+  carry0 = s0 >> 21;
+  s1 += carry0;
+  s0 -= int64_lshift21(carry0);
+  carry1 = s1 >> 21;
+  s2 += carry1;
+  s1 -= int64_lshift21(carry1);
+  carry2 = s2 >> 21;
+  s3 += carry2;
+  s2 -= int64_lshift21(carry2);
+  carry3 = s3 >> 21;
+  s4 += carry3;
+  s3 -= int64_lshift21(carry3);
+  carry4 = s4 >> 21;
+  s5 += carry4;
+  s4 -= int64_lshift21(carry4);
+  carry5 = s5 >> 21;
+  s6 += carry5;
+  s5 -= int64_lshift21(carry5);
+  carry6 = s6 >> 21;
+  s7 += carry6;
+  s6 -= int64_lshift21(carry6);
+  carry7 = s7 >> 21;
+  s8 += carry7;
+  s7 -= int64_lshift21(carry7);
+  carry8 = s8 >> 21;
+  s9 += carry8;
+  s8 -= int64_lshift21(carry8);
+  carry9 = s9 >> 21;
+  s10 += carry9;
+  s9 -= int64_lshift21(carry9);
+  carry10 = s10 >> 21;
+  s11 += carry10;
+  s10 -= int64_lshift21(carry10);
+  carry11 = s11 >> 21;
+  s12 += carry11;
+  s11 -= int64_lshift21(carry11);
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+  s12 = 0;
+
+  carry0 = s0 >> 21;
+  s1 += carry0;
+  s0 -= int64_lshift21(carry0);
+  carry1 = s1 >> 21;
+  s2 += carry1;
+  s1 -= int64_lshift21(carry1);
+  carry2 = s2 >> 21;
+  s3 += carry2;
+  s2 -= int64_lshift21(carry2);
+  carry3 = s3 >> 21;
+  s4 += carry3;
+  s3 -= int64_lshift21(carry3);
+  carry4 = s4 >> 21;
+  s5 += carry4;
+  s4 -= int64_lshift21(carry4);
+  carry5 = s5 >> 21;
+  s6 += carry5;
+  s5 -= int64_lshift21(carry5);
+  carry6 = s6 >> 21;
+  s7 += carry6;
+  s6 -= int64_lshift21(carry6);
+  carry7 = s7 >> 21;
+  s8 += carry7;
+  s7 -= int64_lshift21(carry7);
+  carry8 = s8 >> 21;
+  s9 += carry8;
+  s8 -= int64_lshift21(carry8);
+  carry9 = s9 >> 21;
+  s10 += carry9;
+  s9 -= int64_lshift21(carry9);
+  carry10 = s10 >> 21;
+  s11 += carry10;
+  s10 -= int64_lshift21(carry10);
+
+  s[0] = s0 >> 0;
+  s[1] = s0 >> 8;
+  s[2] = (s0 >> 16) | (s1 << 5);
+  s[3] = s1 >> 3;
+  s[4] = s1 >> 11;
+  s[5] = (s1 >> 19) | (s2 << 2);
+  s[6] = s2 >> 6;
+  s[7] = (s2 >> 14) | (s3 << 7);
+  s[8] = s3 >> 1;
+  s[9] = s3 >> 9;
+  s[10] = (s3 >> 17) | (s4 << 4);
+  s[11] = s4 >> 4;
+  s[12] = s4 >> 12;
+  s[13] = (s4 >> 20) | (s5 << 1);
+  s[14] = s5 >> 7;
+  s[15] = (s5 >> 15) | (s6 << 6);
+  s[16] = s6 >> 2;
+  s[17] = s6 >> 10;
+  s[18] = (s6 >> 18) | (s7 << 3);
+  s[19] = s7 >> 5;
+  s[20] = s7 >> 13;
+  s[21] = s8 >> 0;
+  s[22] = s8 >> 8;
+  s[23] = (s8 >> 16) | (s9 << 5);
+  s[24] = s9 >> 3;
+  s[25] = s9 >> 11;
+  s[26] = (s9 >> 19) | (s10 << 2);
+  s[27] = s10 >> 6;
+  s[28] = (s10 >> 14) | (s11 << 7);
+  s[29] = s11 >> 1;
+  s[30] = s11 >> 9;
+  s[31] = s11 >> 17;
+}
+
+// Input:
+//   a[0]+256*a[1]+...+256^31*a[31] = a
+//   b[0]+256*b[1]+...+256^31*b[31] = b
+//   c[0]+256*c[1]+...+256^31*c[31] = c
+//
+// Output:
+//   s[0]+256*s[1]+...+256^31*s[31] = (ab+c) mod l
+//   where l = 2^252 + 27742317777372353535851937790883648493.
+static void sc_muladd(uint8_t *s, const uint8_t *a, const uint8_t *b,
+                      const uint8_t *c) {
+  int64_t a0 = 2097151 & load_3(a);
+  int64_t a1 = 2097151 & (load_4(a + 2) >> 5);
+  int64_t a2 = 2097151 & (load_3(a + 5) >> 2);
+  int64_t a3 = 2097151 & (load_4(a + 7) >> 7);
+  int64_t a4 = 2097151 & (load_4(a + 10) >> 4);
+  int64_t a5 = 2097151 & (load_3(a + 13) >> 1);
+  int64_t a6 = 2097151 & (load_4(a + 15) >> 6);
+  int64_t a7 = 2097151 & (load_3(a + 18) >> 3);
+  int64_t a8 = 2097151 & load_3(a + 21);
+  int64_t a9 = 2097151 & (load_4(a + 23) >> 5);
+  int64_t a10 = 2097151 & (load_3(a + 26) >> 2);
+  int64_t a11 = (load_4(a + 28) >> 7);
+  int64_t b0 = 2097151 & load_3(b);
+  int64_t b1 = 2097151 & (load_4(b + 2) >> 5);
+  int64_t b2 = 2097151 & (load_3(b + 5) >> 2);
+  int64_t b3 = 2097151 & (load_4(b + 7) >> 7);
+  int64_t b4 = 2097151 & (load_4(b + 10) >> 4);
+  int64_t b5 = 2097151 & (load_3(b + 13) >> 1);
+  int64_t b6 = 2097151 & (load_4(b + 15) >> 6);
+  int64_t b7 = 2097151 & (load_3(b + 18) >> 3);
+  int64_t b8 = 2097151 & load_3(b + 21);
+  int64_t b9 = 2097151 & (load_4(b + 23) >> 5);
+  int64_t b10 = 2097151 & (load_3(b + 26) >> 2);
+  int64_t b11 = (load_4(b + 28) >> 7);
+  int64_t c0 = 2097151 & load_3(c);
+  int64_t c1 = 2097151 & (load_4(c + 2) >> 5);
+  int64_t c2 = 2097151 & (load_3(c + 5) >> 2);
+  int64_t c3 = 2097151 & (load_4(c + 7) >> 7);
+  int64_t c4 = 2097151 & (load_4(c + 10) >> 4);
+  int64_t c5 = 2097151 & (load_3(c + 13) >> 1);
+  int64_t c6 = 2097151 & (load_4(c + 15) >> 6);
+  int64_t c7 = 2097151 & (load_3(c + 18) >> 3);
+  int64_t c8 = 2097151 & load_3(c + 21);
+  int64_t c9 = 2097151 & (load_4(c + 23) >> 5);
+  int64_t c10 = 2097151 & (load_3(c + 26) >> 2);
+  int64_t c11 = (load_4(c + 28) >> 7);
+  int64_t s0;
+  int64_t s1;
+  int64_t s2;
+  int64_t s3;
+  int64_t s4;
+  int64_t s5;
+  int64_t s6;
+  int64_t s7;
+  int64_t s8;
+  int64_t s9;
+  int64_t s10;
+  int64_t s11;
+  int64_t s12;
+  int64_t s13;
+  int64_t s14;
+  int64_t s15;
+  int64_t s16;
+  int64_t s17;
+  int64_t s18;
+  int64_t s19;
+  int64_t s20;
+  int64_t s21;
+  int64_t s22;
+  int64_t s23;
+  int64_t carry0;
+  int64_t carry1;
+  int64_t carry2;
+  int64_t carry3;
+  int64_t carry4;
+  int64_t carry5;
+  int64_t carry6;
+  int64_t carry7;
+  int64_t carry8;
+  int64_t carry9;
+  int64_t carry10;
+  int64_t carry11;
+  int64_t carry12;
+  int64_t carry13;
+  int64_t carry14;
+  int64_t carry15;
+  int64_t carry16;
+  int64_t carry17;
+  int64_t carry18;
+  int64_t carry19;
+  int64_t carry20;
+  int64_t carry21;
+  int64_t carry22;
+
+  s0 = c0 + a0 * b0;
+  s1 = c1 + a0 * b1 + a1 * b0;
+  s2 = c2 + a0 * b2 + a1 * b1 + a2 * b0;
+  s3 = c3 + a0 * b3 + a1 * b2 + a2 * b1 + a3 * b0;
+  s4 = c4 + a0 * b4 + a1 * b3 + a2 * b2 + a3 * b1 + a4 * b0;
+  s5 = c5 + a0 * b5 + a1 * b4 + a2 * b3 + a3 * b2 + a4 * b1 + a5 * b0;
+  s6 = c6 + a0 * b6 + a1 * b5 + a2 * b4 + a3 * b3 + a4 * b2 + a5 * b1 + a6 * b0;
+  s7 = c7 + a0 * b7 + a1 * b6 + a2 * b5 + a3 * b4 + a4 * b3 + a5 * b2 +
+       a6 * b1 + a7 * b0;
+  s8 = c8 + a0 * b8 + a1 * b7 + a2 * b6 + a3 * b5 + a4 * b4 + a5 * b3 +
+       a6 * b2 + a7 * b1 + a8 * b0;
+  s9 = c9 + a0 * b9 + a1 * b8 + a2 * b7 + a3 * b6 + a4 * b5 + a5 * b4 +
+       a6 * b3 + a7 * b2 + a8 * b1 + a9 * b0;
+  s10 = c10 + a0 * b10 + a1 * b9 + a2 * b8 + a3 * b7 + a4 * b6 + a5 * b5 +
+        a6 * b4 + a7 * b3 + a8 * b2 + a9 * b1 + a10 * b0;
+  s11 = c11 + a0 * b11 + a1 * b10 + a2 * b9 + a3 * b8 + a4 * b7 + a5 * b6 +
+        a6 * b5 + a7 * b4 + a8 * b3 + a9 * b2 + a10 * b1 + a11 * b0;
+  s12 = a1 * b11 + a2 * b10 + a3 * b9 + a4 * b8 + a5 * b7 + a6 * b6 + a7 * b5 +
+        a8 * b4 + a9 * b3 + a10 * b2 + a11 * b1;
+  s13 = a2 * b11 + a3 * b10 + a4 * b9 + a5 * b8 + a6 * b7 + a7 * b6 + a8 * b5 +
+        a9 * b4 + a10 * b3 + a11 * b2;
+  s14 = a3 * b11 + a4 * b10 + a5 * b9 + a6 * b8 + a7 * b7 + a8 * b6 + a9 * b5 +
+        a10 * b4 + a11 * b3;
+  s15 = a4 * b11 + a5 * b10 + a6 * b9 + a7 * b8 + a8 * b7 + a9 * b6 + a10 * b5 +
+        a11 * b4;
+  s16 = a5 * b11 + a6 * b10 + a7 * b9 + a8 * b8 + a9 * b7 + a10 * b6 + a11 * b5;
+  s17 = a6 * b11 + a7 * b10 + a8 * b9 + a9 * b8 + a10 * b7 + a11 * b6;
+  s18 = a7 * b11 + a8 * b10 + a9 * b9 + a10 * b8 + a11 * b7;
+  s19 = a8 * b11 + a9 * b10 + a10 * b9 + a11 * b8;
+  s20 = a9 * b11 + a10 * b10 + a11 * b9;
+  s21 = a10 * b11 + a11 * b10;
+  s22 = a11 * b11;
+  s23 = 0;
+
+  carry0 = (s0 + (1 << 20)) >> 21;
+  s1 += carry0;
+  s0 -= int64_lshift21(carry0);
+  carry2 = (s2 + (1 << 20)) >> 21;
+  s3 += carry2;
+  s2 -= int64_lshift21(carry2);
+  carry4 = (s4 + (1 << 20)) >> 21;
+  s5 += carry4;
+  s4 -= int64_lshift21(carry4);
+  carry6 = (s6 + (1 << 20)) >> 21;
+  s7 += carry6;
+  s6 -= int64_lshift21(carry6);
+  carry8 = (s8 + (1 << 20)) >> 21;
+  s9 += carry8;
+  s8 -= int64_lshift21(carry8);
+  carry10 = (s10 + (1 << 20)) >> 21;
+  s11 += carry10;
+  s10 -= int64_lshift21(carry10);
+  carry12 = (s12 + (1 << 20)) >> 21;
+  s13 += carry12;
+  s12 -= int64_lshift21(carry12);
+  carry14 = (s14 + (1 << 20)) >> 21;
+  s15 += carry14;
+  s14 -= int64_lshift21(carry14);
+  carry16 = (s16 + (1 << 20)) >> 21;
+  s17 += carry16;
+  s16 -= int64_lshift21(carry16);
+  carry18 = (s18 + (1 << 20)) >> 21;
+  s19 += carry18;
+  s18 -= int64_lshift21(carry18);
+  carry20 = (s20 + (1 << 20)) >> 21;
+  s21 += carry20;
+  s20 -= int64_lshift21(carry20);
+  carry22 = (s22 + (1 << 20)) >> 21;
+  s23 += carry22;
+  s22 -= int64_lshift21(carry22);
+
+  carry1 = (s1 + (1 << 20)) >> 21;
+  s2 += carry1;
+  s1 -= int64_lshift21(carry1);
+  carry3 = (s3 + (1 << 20)) >> 21;
+  s4 += carry3;
+  s3 -= int64_lshift21(carry3);
+  carry5 = (s5 + (1 << 20)) >> 21;
+  s6 += carry5;
+  s5 -= int64_lshift21(carry5);
+  carry7 = (s7 + (1 << 20)) >> 21;
+  s8 += carry7;
+  s7 -= int64_lshift21(carry7);
+  carry9 = (s9 + (1 << 20)) >> 21;
+  s10 += carry9;
+  s9 -= int64_lshift21(carry9);
+  carry11 = (s11 + (1 << 20)) >> 21;
+  s12 += carry11;
+  s11 -= int64_lshift21(carry11);
+  carry13 = (s13 + (1 << 20)) >> 21;
+  s14 += carry13;
+  s13 -= int64_lshift21(carry13);
+  carry15 = (s15 + (1 << 20)) >> 21;
+  s16 += carry15;
+  s15 -= int64_lshift21(carry15);
+  carry17 = (s17 + (1 << 20)) >> 21;
+  s18 += carry17;
+  s17 -= int64_lshift21(carry17);
+  carry19 = (s19 + (1 << 20)) >> 21;
+  s20 += carry19;
+  s19 -= int64_lshift21(carry19);
+  carry21 = (s21 + (1 << 20)) >> 21;
+  s22 += carry21;
+  s21 -= int64_lshift21(carry21);
+
+  s11 += s23 * 666643;
+  s12 += s23 * 470296;
+  s13 += s23 * 654183;
+  s14 -= s23 * 997805;
+  s15 += s23 * 136657;
+  s16 -= s23 * 683901;
+  s23 = 0;
+
+  s10 += s22 * 666643;
+  s11 += s22 * 470296;
+  s12 += s22 * 654183;
+  s13 -= s22 * 997805;
+  s14 += s22 * 136657;
+  s15 -= s22 * 683901;
+  s22 = 0;
+
+  s9 += s21 * 666643;
+  s10 += s21 * 470296;
+  s11 += s21 * 654183;
+  s12 -= s21 * 997805;
+  s13 += s21 * 136657;
+  s14 -= s21 * 683901;
+  s21 = 0;
+
+  s8 += s20 * 666643;
+  s9 += s20 * 470296;
+  s10 += s20 * 654183;
+  s11 -= s20 * 997805;
+  s12 += s20 * 136657;
+  s13 -= s20 * 683901;
+  s20 = 0;
+
+  s7 += s19 * 666643;
+  s8 += s19 * 470296;
+  s9 += s19 * 654183;
+  s10 -= s19 * 997805;
+  s11 += s19 * 136657;
+  s12 -= s19 * 683901;
+  s19 = 0;
+
+  s6 += s18 * 666643;
+  s7 += s18 * 470296;
+  s8 += s18 * 654183;
+  s9 -= s18 * 997805;
+  s10 += s18 * 136657;
+  s11 -= s18 * 683901;
+  s18 = 0;
+
+  carry6 = (s6 + (1 << 20)) >> 21;
+  s7 += carry6;
+  s6 -= int64_lshift21(carry6);
+  carry8 = (s8 + (1 << 20)) >> 21;
+  s9 += carry8;
+  s8 -= int64_lshift21(carry8);
+  carry10 = (s10 + (1 << 20)) >> 21;
+  s11 += carry10;
+  s10 -= int64_lshift21(carry10);
+  carry12 = (s12 + (1 << 20)) >> 21;
+  s13 += carry12;
+  s12 -= int64_lshift21(carry12);
+  carry14 = (s14 + (1 << 20)) >> 21;
+  s15 += carry14;
+  s14 -= int64_lshift21(carry14);
+  carry16 = (s16 + (1 << 20)) >> 21;
+  s17 += carry16;
+  s16 -= int64_lshift21(carry16);
+
+  carry7 = (s7 + (1 << 20)) >> 21;
+  s8 += carry7;
+  s7 -= int64_lshift21(carry7);
+  carry9 = (s9 + (1 << 20)) >> 21;
+  s10 += carry9;
+  s9 -= int64_lshift21(carry9);
+  carry11 = (s11 + (1 << 20)) >> 21;
+  s12 += carry11;
+  s11 -= int64_lshift21(carry11);
+  carry13 = (s13 + (1 << 20)) >> 21;
+  s14 += carry13;
+  s13 -= int64_lshift21(carry13);
+  carry15 = (s15 + (1 << 20)) >> 21;
+  s16 += carry15;
+  s15 -= int64_lshift21(carry15);
+
+  s5 += s17 * 666643;
+  s6 += s17 * 470296;
+  s7 += s17 * 654183;
+  s8 -= s17 * 997805;
+  s9 += s17 * 136657;
+  s10 -= s17 * 683901;
+  s17 = 0;
+
+  s4 += s16 * 666643;
+  s5 += s16 * 470296;
+  s6 += s16 * 654183;
+  s7 -= s16 * 997805;
+  s8 += s16 * 136657;
+  s9 -= s16 * 683901;
+  s16 = 0;
+
+  s3 += s15 * 666643;
+  s4 += s15 * 470296;
+  s5 += s15 * 654183;
+  s6 -= s15 * 997805;
+  s7 += s15 * 136657;
+  s8 -= s15 * 683901;
+  s15 = 0;
+
+  s2 += s14 * 666643;
+  s3 += s14 * 470296;
+  s4 += s14 * 654183;
+  s5 -= s14 * 997805;
+  s6 += s14 * 136657;
+  s7 -= s14 * 683901;
+  s14 = 0;
+
+  s1 += s13 * 666643;
+  s2 += s13 * 470296;
+  s3 += s13 * 654183;
+  s4 -= s13 * 997805;
+  s5 += s13 * 136657;
+  s6 -= s13 * 683901;
+  s13 = 0;
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+  s12 = 0;
+
+  carry0 = (s0 + (1 << 20)) >> 21;
+  s1 += carry0;
+  s0 -= int64_lshift21(carry0);
+  carry2 = (s2 + (1 << 20)) >> 21;
+  s3 += carry2;
+  s2 -= int64_lshift21(carry2);
+  carry4 = (s4 + (1 << 20)) >> 21;
+  s5 += carry4;
+  s4 -= int64_lshift21(carry4);
+  carry6 = (s6 + (1 << 20)) >> 21;
+  s7 += carry6;
+  s6 -= int64_lshift21(carry6);
+  carry8 = (s8 + (1 << 20)) >> 21;
+  s9 += carry8;
+  s8 -= int64_lshift21(carry8);
+  carry10 = (s10 + (1 << 20)) >> 21;
+  s11 += carry10;
+  s10 -= int64_lshift21(carry10);
+
+  carry1 = (s1 + (1 << 20)) >> 21;
+  s2 += carry1;
+  s1 -= int64_lshift21(carry1);
+  carry3 = (s3 + (1 << 20)) >> 21;
+  s4 += carry3;
+  s3 -= int64_lshift21(carry3);
+  carry5 = (s5 + (1 << 20)) >> 21;
+  s6 += carry5;
+  s5 -= int64_lshift21(carry5);
+  carry7 = (s7 + (1 << 20)) >> 21;
+  s8 += carry7;
+  s7 -= int64_lshift21(carry7);
+  carry9 = (s9 + (1 << 20)) >> 21;
+  s10 += carry9;
+  s9 -= int64_lshift21(carry9);
+  carry11 = (s11 + (1 << 20)) >> 21;
+  s12 += carry11;
+  s11 -= int64_lshift21(carry11);
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+  s12 = 0;
+
+  carry0 = s0 >> 21;
+  s1 += carry0;
+  s0 -= int64_lshift21(carry0);
+  carry1 = s1 >> 21;
+  s2 += carry1;
+  s1 -= int64_lshift21(carry1);
+  carry2 = s2 >> 21;
+  s3 += carry2;
+  s2 -= int64_lshift21(carry2);
+  carry3 = s3 >> 21;
+  s4 += carry3;
+  s3 -= int64_lshift21(carry3);
+  carry4 = s4 >> 21;
+  s5 += carry4;
+  s4 -= int64_lshift21(carry4);
+  carry5 = s5 >> 21;
+  s6 += carry5;
+  s5 -= int64_lshift21(carry5);
+  carry6 = s6 >> 21;
+  s7 += carry6;
+  s6 -= int64_lshift21(carry6);
+  carry7 = s7 >> 21;
+  s8 += carry7;
+  s7 -= int64_lshift21(carry7);
+  carry8 = s8 >> 21;
+  s9 += carry8;
+  s8 -= int64_lshift21(carry8);
+  carry9 = s9 >> 21;
+  s10 += carry9;
+  s9 -= int64_lshift21(carry9);
+  carry10 = s10 >> 21;
+  s11 += carry10;
+  s10 -= int64_lshift21(carry10);
+  carry11 = s11 >> 21;
+  s12 += carry11;
+  s11 -= int64_lshift21(carry11);
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+  s12 = 0;
+
+  carry0 = s0 >> 21;
+  s1 += carry0;
+  s0 -= int64_lshift21(carry0);
+  carry1 = s1 >> 21;
+  s2 += carry1;
+  s1 -= int64_lshift21(carry1);
+  carry2 = s2 >> 21;
+  s3 += carry2;
+  s2 -= int64_lshift21(carry2);
+  carry3 = s3 >> 21;
+  s4 += carry3;
+  s3 -= int64_lshift21(carry3);
+  carry4 = s4 >> 21;
+  s5 += carry4;
+  s4 -= int64_lshift21(carry4);
+  carry5 = s5 >> 21;
+  s6 += carry5;
+  s5 -= int64_lshift21(carry5);
+  carry6 = s6 >> 21;
+  s7 += carry6;
+  s6 -= int64_lshift21(carry6);
+  carry7 = s7 >> 21;
+  s8 += carry7;
+  s7 -= int64_lshift21(carry7);
+  carry8 = s8 >> 21;
+  s9 += carry8;
+  s8 -= int64_lshift21(carry8);
+  carry9 = s9 >> 21;
+  s10 += carry9;
+  s9 -= int64_lshift21(carry9);
+  carry10 = s10 >> 21;
+  s11 += carry10;
+  s10 -= int64_lshift21(carry10);
+
+  s[0] = s0 >> 0;
+  s[1] = s0 >> 8;
+  s[2] = (s0 >> 16) | (s1 << 5);
+  s[3] = s1 >> 3;
+  s[4] = s1 >> 11;
+  s[5] = (s1 >> 19) | (s2 << 2);
+  s[6] = s2 >> 6;
+  s[7] = (s2 >> 14) | (s3 << 7);
+  s[8] = s3 >> 1;
+  s[9] = s3 >> 9;
+  s[10] = (s3 >> 17) | (s4 << 4);
+  s[11] = s4 >> 4;
+  s[12] = s4 >> 12;
+  s[13] = (s4 >> 20) | (s5 << 1);
+  s[14] = s5 >> 7;
+  s[15] = (s5 >> 15) | (s6 << 6);
+  s[16] = s6 >> 2;
+  s[17] = s6 >> 10;
+  s[18] = (s6 >> 18) | (s7 << 3);
+  s[19] = s7 >> 5;
+  s[20] = s7 >> 13;
+  s[21] = s8 >> 0;
+  s[22] = s8 >> 8;
+  s[23] = (s8 >> 16) | (s9 << 5);
+  s[24] = s9 >> 3;
+  s[25] = s9 >> 11;
+  s[26] = (s9 >> 19) | (s10 << 2);
+  s[27] = s10 >> 6;
+  s[28] = (s10 >> 14) | (s11 << 7);
+  s[29] = s11 >> 1;
+  s[30] = s11 >> 9;
+  s[31] = s11 >> 17;
+}
+
+void ED25519_keypair(uint8_t out_public_key[32], uint8_t out_private_key[64]) {
+  uint8_t seed[32];
+  RAND_bytes(seed, 32);
+  ED25519_keypair_from_seed(out_public_key, out_private_key, seed);
+}
+
+int ED25519_sign(uint8_t out_sig[64], const uint8_t *message,
+                 size_t message_len, const uint8_t private_key[64]) {
+  // NOTE: The documentation on this function says that it returns zero on
+  // allocation failure. While that can't happen with the current
+  // implementation, we want to reserve the ability to allocate in this
+  // implementation in the future.
+
+  uint8_t az[SHA512_DIGEST_LENGTH];
+  SHA512(private_key, 32, az);
+
+  az[0] &= 248;
+  az[31] &= 63;
+  az[31] |= 64;
+
+  SHA512_CTX hash_ctx;
+  SHA512_Init(&hash_ctx);
+  SHA512_Update(&hash_ctx, az + 32, 32);
+  SHA512_Update(&hash_ctx, message, message_len);
+  uint8_t nonce[SHA512_DIGEST_LENGTH];
+  SHA512_Final(nonce, &hash_ctx);
+
+  x25519_sc_reduce(nonce);
+  ge_p3 R;
+  x25519_ge_scalarmult_base(&R, nonce);
+  ge_p3_tobytes(out_sig, &R);
+
+  SHA512_Init(&hash_ctx);
+  SHA512_Update(&hash_ctx, out_sig, 32);
+  SHA512_Update(&hash_ctx, private_key + 32, 32);
+  SHA512_Update(&hash_ctx, message, message_len);
+  uint8_t hram[SHA512_DIGEST_LENGTH];
+  SHA512_Final(hram, &hash_ctx);
+
+  x25519_sc_reduce(hram);
+  sc_muladd(out_sig + 32, hram, az, nonce);
+
+  return 1;
+}
+
+int ED25519_verify(const uint8_t *message, size_t message_len,
+                   const uint8_t signature[64], const uint8_t public_key[32]) {
+  ge_p3 A;
+  if ((signature[63] & 224) != 0 ||
+      !x25519_ge_frombytes_vartime(&A, public_key)) {
+    return 0;
+  }
+
+  fe_loose t;
+  fe_neg(&t, &A.X);
+  fe_carry(&A.X, &t);
+  fe_neg(&t, &A.T);
+  fe_carry(&A.T, &t);
+
+  uint8_t pkcopy[32];
+  OPENSSL_memcpy(pkcopy, public_key, 32);
+  uint8_t rcopy[32];
+  OPENSSL_memcpy(rcopy, signature, 32);
+  union {
+    uint64_t u64[4];
+    uint8_t u8[32];
+  } scopy;
+  OPENSSL_memcpy(&scopy.u8[0], signature + 32, 32);
+
+  // https://tools.ietf.org/html/rfc8032#section-5.1.7 requires that s be in
+  // the range [0, order) in order to prevent signature malleability.
+
+  // kOrder is the order of Curve25519 in little-endian form.
+  static const uint64_t kOrder[4] = {
+    UINT64_C(0x5812631a5cf5d3ed),
+    UINT64_C(0x14def9dea2f79cd6),
+    0,
+    UINT64_C(0x1000000000000000),
+  };
+  for (size_t i = 3;; i--) {
+    if (scopy.u64[i] > kOrder[i]) {
+      return 0;
+    } else if (scopy.u64[i] < kOrder[i]) {
+      break;
+    } else if (i == 0) {
+      return 0;
+    }
+  }
+
+  SHA512_CTX hash_ctx;
+  SHA512_Init(&hash_ctx);
+  SHA512_Update(&hash_ctx, signature, 32);
+  SHA512_Update(&hash_ctx, public_key, 32);
+  SHA512_Update(&hash_ctx, message, message_len);
+  uint8_t h[SHA512_DIGEST_LENGTH];
+  SHA512_Final(h, &hash_ctx);
+
+  x25519_sc_reduce(h);
+
+  ge_p2 R;
+  ge_double_scalarmult_vartime(&R, h, &A, scopy.u8);
+
+  uint8_t rcheck[32];
+  x25519_ge_tobytes(rcheck, &R);
+
+  return CRYPTO_memcmp(rcheck, rcopy, sizeof(rcheck)) == 0;
+}
+
+void ED25519_keypair_from_seed(uint8_t out_public_key[32],
+                               uint8_t out_private_key[64],
+                               const uint8_t seed[32]) {
+  uint8_t az[SHA512_DIGEST_LENGTH];
+  SHA512(seed, 32, az);
+
+  az[0] &= 248;
+  az[31] &= 127;
+  az[31] |= 64;
+
+  ge_p3 A;
+  x25519_ge_scalarmult_base(&A, az);
+  ge_p3_tobytes(out_public_key, &A);
+
+  OPENSSL_memcpy(out_private_key, seed, 32);
+  OPENSSL_memcpy(out_private_key + 32, out_public_key, 32);
+}
+
+
+static void x25519_scalar_mult_generic(uint8_t out[32],
+                                       const uint8_t scalar[32],
+                                       const uint8_t point[32]) {
+  fe x1, x2, z2, x3, z3, tmp0, tmp1;
+  fe_loose x2l, z2l, x3l, tmp0l, tmp1l;
+
+  uint8_t e[32];
+  OPENSSL_memcpy(e, scalar, 32);
+  e[0] &= 248;
+  e[31] &= 127;
+  e[31] |= 64;
+
+  // The following implementation was transcribed to Coq and proven to
+  // correspond to unary scalar multiplication in affine coordinates given that
+  // x1 != 0 is the x coordinate of some point on the curve. It was also checked
+  // in Coq that doing a ladderstep with x1 = x3 = 0 gives z2' = z3' = 0, and z2
+  // = z3 = 0 gives z2' = z3' = 0. The statement was quantified over the
+  // underlying field, so it applies to Curve25519 itself and the quadratic
+  // twist of Curve25519. It was not proven in Coq that prime-field arithmetic
+  // correctly simulates extension-field arithmetic on prime-field values.
+  // The decoding of the byte array representation of e was not considered.
+  // Specification of Montgomery curves in affine coordinates:
+  // <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Spec/MontgomeryCurve.v#L27>
+  // Proof that these form a group that is isomorphic to a Weierstrass curve:
+  // <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/AffineProofs.v#L35>
+  // Coq transcription and correctness proof of the loop (where scalarbits=255):
+  // <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZ.v#L118>
+  // <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZProofs.v#L278>
+  // preconditions: 0 <= e < 2^255 (not necessarily e < order), fe_invert(0) = 0
+  fe_frombytes(&x1, point);
+  fe_1(&x2);
+  fe_0(&z2);
+  fe_copy(&x3, &x1);
+  fe_1(&z3);
+
+  unsigned swap = 0;
+  int pos;
+  for (pos = 254; pos >= 0; --pos) {
+    // loop invariant as of right before the test, for the case where x1 != 0:
+    //   pos >= -1; if z2 = 0 then x2 is nonzero; if z3 = 0 then x3 is nonzero
+    //   let r := e >> (pos+1) in the following equalities of projective points:
+    //   to_xz (r*P)     === if swap then (x3, z3) else (x2, z2)
+    //   to_xz ((r+1)*P) === if swap then (x2, z2) else (x3, z3)
+    //   x1 is the nonzero x coordinate of the nonzero point (r*P-(r+1)*P)
+    unsigned b = 1 & (e[pos / 8] >> (pos & 7));
+    swap ^= b;
+    fe_cswap(&x2, &x3, swap);
+    fe_cswap(&z2, &z3, swap);
+    swap = b;
+    // Coq transcription of ladderstep formula (called from transcribed loop):
+    // <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZ.v#L89>
+    // <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZProofs.v#L131>
+    // x1 != 0 <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZProofs.v#L217>
+    // x1  = 0 <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZProofs.v#L147>
+    fe_sub(&tmp0l, &x3, &z3);
+    fe_sub(&tmp1l, &x2, &z2);
+    fe_add(&x2l, &x2, &z2);
+    fe_add(&z2l, &x3, &z3);
+    fe_mul_tll(&z3, &tmp0l, &x2l);
+    fe_mul_tll(&z2, &z2l, &tmp1l);
+    fe_sq_tl(&tmp0, &tmp1l);
+    fe_sq_tl(&tmp1, &x2l);
+    fe_add(&x3l, &z3, &z2);
+    fe_sub(&z2l, &z3, &z2);
+    fe_mul_ttt(&x2, &tmp1, &tmp0);
+    fe_sub(&tmp1l, &tmp1, &tmp0);
+    fe_sq_tl(&z2, &z2l);
+    fe_mul121666(&z3, &tmp1l);
+    fe_sq_tl(&x3, &x3l);
+    fe_add(&tmp0l, &tmp0, &z3);
+    fe_mul_ttt(&z3, &x1, &z2);
+    fe_mul_tll(&z2, &tmp1l, &tmp0l);
+  }
+  // here pos=-1, so r=e, so to_xz (e*P) === if swap then (x3, z3) else (x2, z2)
+  fe_cswap(&x2, &x3, swap);
+  fe_cswap(&z2, &z3, swap);
+
+  fe_invert(&z2, &z2);
+  fe_mul_ttt(&x2, &x2, &z2);
+  fe_tobytes(out, &x2);
+}
+
+static void x25519_scalar_mult(uint8_t out[32], const uint8_t scalar[32],
+                               const uint8_t point[32]) {
+#if defined(BORINGSSL_X25519_NEON)
+  if (CRYPTO_is_NEON_capable()) {
+    x25519_NEON(out, scalar, point);
+    return;
+  }
+#endif
+
+  x25519_scalar_mult_generic(out, scalar, point);
+}
+
+void X25519_keypair(uint8_t out_public_value[32], uint8_t out_private_key[32]) {
+  RAND_bytes(out_private_key, 32);
+
+  // All X25519 implementations should decode scalars correctly (see
+  // https://tools.ietf.org/html/rfc7748#section-5). However, if an
+  // implementation doesn't then it might interoperate with random keys a
+  // fraction of the time because they'll, randomly, happen to be correctly
+  // formed.
+  //
+  // Thus we do the opposite of the masking here to make sure that our private
+  // keys are never correctly masked and so, hopefully, any incorrect
+  // implementations are deterministically broken.
+  //
+  // This does not affect security because, although we're throwing away
+  // entropy, a valid implementation of scalarmult should throw away the exact
+  // same bits anyway.
+  out_private_key[0] |= ~248;
+  out_private_key[31] &= ~64;
+  out_private_key[31] |= ~127;
+
+  X25519_public_from_private(out_public_value, out_private_key);
+}
+
+int X25519(uint8_t out_shared_key[32], const uint8_t private_key[32],
+           const uint8_t peer_public_value[32]) {
+  static const uint8_t kZeros[32] = {0};
+  x25519_scalar_mult(out_shared_key, private_key, peer_public_value);
+  // The all-zero output results when the input is a point of small order.
+  return CRYPTO_memcmp(kZeros, out_shared_key, 32) != 0;
+}
+
+void X25519_public_from_private(uint8_t out_public_value[32],
+                                const uint8_t private_key[32]) {
+#if defined(BORINGSSL_X25519_NEON)
+  if (CRYPTO_is_NEON_capable()) {
+    static const uint8_t kMongomeryBasePoint[32] = {9};
+    x25519_NEON(out_public_value, private_key, kMongomeryBasePoint);
+    return;
+  }
+#endif
+
+  uint8_t e[32];
+  OPENSSL_memcpy(e, private_key, 32);
+  e[0] &= 248;
+  e[31] &= 127;
+  e[31] |= 64;
+
+  ge_p3 A;
+  x25519_ge_scalarmult_base(&A, e);
+
+  // We only need the u-coordinate of the curve25519 point. The map is
+  // u=(y+1)/(1-y). Since y=Y/Z, this gives u=(Z+Y)/(Z-Y).
+  fe_loose zplusy, zminusy;
+  fe zminusy_inv;
+  fe_add(&zplusy, &A.Z, &A.Y);
+  fe_sub(&zminusy, &A.Z, &A.Y);
+  fe_loose_invert(&zminusy_inv, &zminusy);
+  fe_mul_tlt(&zminusy_inv, &zplusy, &zminusy_inv);
+  fe_tobytes(out_public_value, &zminusy_inv);
+}
diff --git a/src/crypto/curve25519/curve25519_tables.h b/src/crypto/curve25519/curve25519_tables.h
new file mode 100644
index 0000000..310581c
--- /dev/null
+++ b/src/crypto/curve25519/curve25519_tables.h
@@ -0,0 +1,7872 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+// This file is generated from
+//    ./make_curve25519_tables.py > curve25519_tables.h
+
+
+static const fe d = {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+    929955233495203, 466365720129213, 1662059464998953, 2033849074728123,
+    1442794654840575
+#else
+    56195235, 13857412, 51736253, 6949390, 114729, 24766616, 60832955, 30306712,
+    48412415, 21499315
+#endif
+}};
+
+static const fe sqrtm1 = {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+    1718705420411056, 234908883556509, 2233514472574048, 2117202627021982,
+    765476049583133
+#else
+    34513072, 25610706, 9377949, 3500415, 12389472, 33281959, 41962654,
+    31548777, 326685, 11406482
+#endif
+}};
+
+static const fe d2 = {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+    1859910466990425, 932731440258426, 1072319116312658, 1815898335770999,
+    633789495995903
+#else
+    45281625, 27714825, 36363642, 13898781, 229458, 15978800, 54557047,
+    27058993, 29715967, 9444199
+#endif
+}};
+
+#if defined(OPENSSL_SMALL)
+
+// This block of code replaces the standard base-point table with a much smaller
+// one. The standard table is 30,720 bytes while this one is just 960.
+//
+// This table contains 15 pairs of group elements, (x, y), where each field
+// element is serialised with |fe_tobytes|. If |i| is the index of the group
+// element then consider i+1 as a four-bit number: (i₀, i₁, i₂, i₃) (where i₀
+// is the most significant bit). The value of the group element is then:
+// (i₀×2^192 + i₁×2^128 + i₂×2^64 + i₃)G, where G is the generator.
+static const uint8_t k25519SmallPrecomp[15 * 2 * 32] = {
+    0x1a, 0xd5, 0x25, 0x8f, 0x60, 0x2d, 0x56, 0xc9, 0xb2, 0xa7, 0x25, 0x95,
+    0x60, 0xc7, 0x2c, 0x69, 0x5c, 0xdc, 0xd6, 0xfd, 0x31, 0xe2, 0xa4, 0xc0,
+    0xfe, 0x53, 0x6e, 0xcd, 0xd3, 0x36, 0x69, 0x21, 0x58, 0x66, 0x66, 0x66,
+    0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+    0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+    0x66, 0x66, 0x66, 0x66, 0x02, 0xa2, 0xed, 0xf4, 0x8f, 0x6b, 0x0b, 0x3e,
+    0xeb, 0x35, 0x1a, 0xd5, 0x7e, 0xdb, 0x78, 0x00, 0x96, 0x8a, 0xa0, 0xb4,
+    0xcf, 0x60, 0x4b, 0xd4, 0xd5, 0xf9, 0x2d, 0xbf, 0x88, 0xbd, 0x22, 0x62,
+    0x13, 0x53, 0xe4, 0x82, 0x57, 0xfa, 0x1e, 0x8f, 0x06, 0x2b, 0x90, 0xba,
+    0x08, 0xb6, 0x10, 0x54, 0x4f, 0x7c, 0x1b, 0x26, 0xed, 0xda, 0x6b, 0xdd,
+    0x25, 0xd0, 0x4e, 0xea, 0x42, 0xbb, 0x25, 0x03, 0xa2, 0xfb, 0xcc, 0x61,
+    0x67, 0x06, 0x70, 0x1a, 0xc4, 0x78, 0x3a, 0xff, 0x32, 0x62, 0xdd, 0x2c,
+    0xab, 0x50, 0x19, 0x3b, 0xf2, 0x9b, 0x7d, 0xb8, 0xfd, 0x4f, 0x29, 0x9c,
+    0xa7, 0x91, 0xba, 0x0e, 0x46, 0x5e, 0x51, 0xfe, 0x1d, 0xbf, 0xe5, 0xe5,
+    0x9b, 0x95, 0x0d, 0x67, 0xf8, 0xd1, 0xb5, 0x5a, 0xa1, 0x93, 0x2c, 0xc3,
+    0xde, 0x0e, 0x97, 0x85, 0x2d, 0x7f, 0xea, 0xab, 0x3e, 0x47, 0x30, 0x18,
+    0x24, 0xe8, 0xb7, 0x60, 0xae, 0x47, 0x80, 0xfc, 0xe5, 0x23, 0xe7, 0xc2,
+    0xc9, 0x85, 0xe6, 0x98, 0xa0, 0x29, 0x4e, 0xe1, 0x84, 0x39, 0x2d, 0x95,
+    0x2c, 0xf3, 0x45, 0x3c, 0xff, 0xaf, 0x27, 0x4c, 0x6b, 0xa6, 0xf5, 0x4b,
+    0x11, 0xbd, 0xba, 0x5b, 0x9e, 0xc4, 0xa4, 0x51, 0x1e, 0xbe, 0xd0, 0x90,
+    0x3a, 0x9c, 0xc2, 0x26, 0xb6, 0x1e, 0xf1, 0x95, 0x7d, 0xc8, 0x6d, 0x52,
+    0xe6, 0x99, 0x2c, 0x5f, 0x9a, 0x96, 0x0c, 0x68, 0x29, 0xfd, 0xe2, 0xfb,
+    0xe6, 0xbc, 0xec, 0x31, 0x08, 0xec, 0xe6, 0xb0, 0x53, 0x60, 0xc3, 0x8c,
+    0xbe, 0xc1, 0xb3, 0x8a, 0x8f, 0xe4, 0x88, 0x2b, 0x55, 0xe5, 0x64, 0x6e,
+    0x9b, 0xd0, 0xaf, 0x7b, 0x64, 0x2a, 0x35, 0x25, 0x10, 0x52, 0xc5, 0x9e,
+    0x58, 0x11, 0x39, 0x36, 0x45, 0x51, 0xb8, 0x39, 0x93, 0xfc, 0x9d, 0x6a,
+    0xbe, 0x58, 0xcb, 0xa4, 0x0f, 0x51, 0x3c, 0x38, 0x05, 0xca, 0xab, 0x43,
+    0x63, 0x0e, 0xf3, 0x8b, 0x41, 0xa6, 0xf8, 0x9b, 0x53, 0x70, 0x80, 0x53,
+    0x86, 0x5e, 0x8f, 0xe3, 0xc3, 0x0d, 0x18, 0xc8, 0x4b, 0x34, 0x1f, 0xd8,
+    0x1d, 0xbc, 0xf2, 0x6d, 0x34, 0x3a, 0xbe, 0xdf, 0xd9, 0xf6, 0xf3, 0x89,
+    0xa1, 0xe1, 0x94, 0x9f, 0x5d, 0x4c, 0x5d, 0xe9, 0xa1, 0x49, 0x92, 0xef,
+    0x0e, 0x53, 0x81, 0x89, 0x58, 0x87, 0xa6, 0x37, 0xf1, 0xdd, 0x62, 0x60,
+    0x63, 0x5a, 0x9d, 0x1b, 0x8c, 0xc6, 0x7d, 0x52, 0xea, 0x70, 0x09, 0x6a,
+    0xe1, 0x32, 0xf3, 0x73, 0x21, 0x1f, 0x07, 0x7b, 0x7c, 0x9b, 0x49, 0xd8,
+    0xc0, 0xf3, 0x25, 0x72, 0x6f, 0x9d, 0xed, 0x31, 0x67, 0x36, 0x36, 0x54,
+    0x40, 0x92, 0x71, 0xe6, 0x11, 0x28, 0x11, 0xad, 0x93, 0x32, 0x85, 0x7b,
+    0x3e, 0xb7, 0x3b, 0x49, 0x13, 0x1c, 0x07, 0xb0, 0x2e, 0x93, 0xaa, 0xfd,
+    0xfd, 0x28, 0x47, 0x3d, 0x8d, 0xd2, 0xda, 0xc7, 0x44, 0xd6, 0x7a, 0xdb,
+    0x26, 0x7d, 0x1d, 0xb8, 0xe1, 0xde, 0x9d, 0x7a, 0x7d, 0x17, 0x7e, 0x1c,
+    0x37, 0x04, 0x8d, 0x2d, 0x7c, 0x5e, 0x18, 0x38, 0x1e, 0xaf, 0xc7, 0x1b,
+    0x33, 0x48, 0x31, 0x00, 0x59, 0xf6, 0xf2, 0xca, 0x0f, 0x27, 0x1b, 0x63,
+    0x12, 0x7e, 0x02, 0x1d, 0x49, 0xc0, 0x5d, 0x79, 0x87, 0xef, 0x5e, 0x7a,
+    0x2f, 0x1f, 0x66, 0x55, 0xd8, 0x09, 0xd9, 0x61, 0x38, 0x68, 0xb0, 0x07,
+    0xa3, 0xfc, 0xcc, 0x85, 0x10, 0x7f, 0x4c, 0x65, 0x65, 0xb3, 0xfa, 0xfa,
+    0xa5, 0x53, 0x6f, 0xdb, 0x74, 0x4c, 0x56, 0x46, 0x03, 0xe2, 0xd5, 0x7a,
+    0x29, 0x1c, 0xc6, 0x02, 0xbc, 0x59, 0xf2, 0x04, 0x75, 0x63, 0xc0, 0x84,
+    0x2f, 0x60, 0x1c, 0x67, 0x76, 0xfd, 0x63, 0x86, 0xf3, 0xfa, 0xbf, 0xdc,
+    0xd2, 0x2d, 0x90, 0x91, 0xbd, 0x33, 0xa9, 0xe5, 0x66, 0x0c, 0xda, 0x42,
+    0x27, 0xca, 0xf4, 0x66, 0xc2, 0xec, 0x92, 0x14, 0x57, 0x06, 0x63, 0xd0,
+    0x4d, 0x15, 0x06, 0xeb, 0x69, 0x58, 0x4f, 0x77, 0xc5, 0x8b, 0xc7, 0xf0,
+    0x8e, 0xed, 0x64, 0xa0, 0xb3, 0x3c, 0x66, 0x71, 0xc6, 0x2d, 0xda, 0x0a,
+    0x0d, 0xfe, 0x70, 0x27, 0x64, 0xf8, 0x27, 0xfa, 0xf6, 0x5f, 0x30, 0xa5,
+    0x0d, 0x6c, 0xda, 0xf2, 0x62, 0x5e, 0x78, 0x47, 0xd3, 0x66, 0x00, 0x1c,
+    0xfd, 0x56, 0x1f, 0x5d, 0x3f, 0x6f, 0xf4, 0x4c, 0xd8, 0xfd, 0x0e, 0x27,
+    0xc9, 0x5c, 0x2b, 0xbc, 0xc0, 0xa4, 0xe7, 0x23, 0x29, 0x02, 0x9f, 0x31,
+    0xd6, 0xe9, 0xd7, 0x96, 0xf4, 0xe0, 0x5e, 0x0b, 0x0e, 0x13, 0xee, 0x3c,
+    0x09, 0xed, 0xf2, 0x3d, 0x76, 0x91, 0xc3, 0xa4, 0x97, 0xae, 0xd4, 0x87,
+    0xd0, 0x5d, 0xf6, 0x18, 0x47, 0x1f, 0x1d, 0x67, 0xf2, 0xcf, 0x63, 0xa0,
+    0x91, 0x27, 0xf8, 0x93, 0x45, 0x75, 0x23, 0x3f, 0xd1, 0xf1, 0xad, 0x23,
+    0xdd, 0x64, 0x93, 0x96, 0x41, 0x70, 0x7f, 0xf7, 0xf5, 0xa9, 0x89, 0xa2,
+    0x34, 0xb0, 0x8d, 0x1b, 0xae, 0x19, 0x15, 0x49, 0x58, 0x23, 0x6d, 0x87,
+    0x15, 0x4f, 0x81, 0x76, 0xfb, 0x23, 0xb5, 0xea, 0xcf, 0xac, 0x54, 0x8d,
+    0x4e, 0x42, 0x2f, 0xeb, 0x0f, 0x63, 0xdb, 0x68, 0x37, 0xa8, 0xcf, 0x8b,
+    0xab, 0xf5, 0xa4, 0x6e, 0x96, 0x2a, 0xb2, 0xd6, 0xbe, 0x9e, 0xbd, 0x0d,
+    0xb4, 0x42, 0xa9, 0xcf, 0x01, 0x83, 0x8a, 0x17, 0x47, 0x76, 0xc4, 0xc6,
+    0x83, 0x04, 0x95, 0x0b, 0xfc, 0x11, 0xc9, 0x62, 0xb8, 0x0c, 0x76, 0x84,
+    0xd9, 0xb9, 0x37, 0xfa, 0xfc, 0x7c, 0xc2, 0x6d, 0x58, 0x3e, 0xb3, 0x04,
+    0xbb, 0x8c, 0x8f, 0x48, 0xbc, 0x91, 0x27, 0xcc, 0xf9, 0xb7, 0x22, 0x19,
+    0x83, 0x2e, 0x09, 0xb5, 0x72, 0xd9, 0x54, 0x1c, 0x4d, 0xa1, 0xea, 0x0b,
+    0xf1, 0xc6, 0x08, 0x72, 0x46, 0x87, 0x7a, 0x6e, 0x80, 0x56, 0x0a, 0x8a,
+    0xc0, 0xdd, 0x11, 0x6b, 0xd6, 0xdd, 0x47, 0xdf, 0x10, 0xd9, 0xd8, 0xea,
+    0x7c, 0xb0, 0x8f, 0x03, 0x00, 0x2e, 0xc1, 0x8f, 0x44, 0xa8, 0xd3, 0x30,
+    0x06, 0x89, 0xa2, 0xf9, 0x34, 0xad, 0xdc, 0x03, 0x85, 0xed, 0x51, 0xa7,
+    0x82, 0x9c, 0xe7, 0x5d, 0x52, 0x93, 0x0c, 0x32, 0x9a, 0x5b, 0xe1, 0xaa,
+    0xca, 0xb8, 0x02, 0x6d, 0x3a, 0xd4, 0xb1, 0x3a, 0xf0, 0x5f, 0xbe, 0xb5,
+    0x0d, 0x10, 0x6b, 0x38, 0x32, 0xac, 0x76, 0x80, 0xbd, 0xca, 0x94, 0x71,
+    0x7a, 0xf2, 0xc9, 0x35, 0x2a, 0xde, 0x9f, 0x42, 0x49, 0x18, 0x01, 0xab,
+    0xbc, 0xef, 0x7c, 0x64, 0x3f, 0x58, 0x3d, 0x92, 0x59, 0xdb, 0x13, 0xdb,
+    0x58, 0x6e, 0x0a, 0xe0, 0xb7, 0x91, 0x4a, 0x08, 0x20, 0xd6, 0x2e, 0x3c,
+    0x45, 0xc9, 0x8b, 0x17, 0x79, 0xe7, 0xc7, 0x90, 0x99, 0x3a, 0x18, 0x25,
+};
+
+#else
+
+// k25519Precomp[i][j] = (j+1)*256^i*B
+static const ge_precomp k25519Precomp[32][8] = {
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1288382639258501, 245678601348599, 269427782077623,
+                1462984067271730, 137412439391563
+#else
+                25967493, 19198397, 29566455, 3660896, 54414519, 4014786,
+                27544626, 21800161, 61029707, 2047604
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                62697248952638, 204681361388450, 631292143396476,
+                338455783676468, 1213667448819585
+#else
+                54563134, 934261, 64385954, 3049989, 66381436, 9406985,
+                12720692, 5043384, 19500929, 18085054
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                301289933810280, 1259582250014073, 1422107436869536,
+                796239922652654, 1953934009299142
+#else
+                58370664, 4489569, 9688441, 18769238, 10184608, 21191052,
+                29287918, 11864899, 42594502, 29115885
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1380971894829527, 790832306631236, 2067202295274102,
+                1995808275510000, 1566530869037010
+#else
+                54292951, 20578084, 45527620, 11784319, 41753206, 30803714,
+                55390960, 29739860, 66750418, 23343128
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                463307831301544, 432984605774163, 1610641361907204,
+                750899048855000, 1894842303421586
+#else
+                45405608, 6903824, 27185491, 6451973, 37531140, 24000426,
+                51492312, 11189267, 40279186, 28235350
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                748439484463711, 1033211726465151, 1396005112841647,
+                1611506220286469, 1972177495910992
+#else
+                26966623, 11152617, 32442495, 15396054, 14353839, 20802097,
+                63980037, 24013313, 51636816, 29387734
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1601611775252272, 1720807796594148, 1132070835939856,
+                1260455018889551, 2147779492816911
+#else
+                15636272, 23865875, 24204772, 25642034, 616976, 16869170,
+                27787599, 18782243, 28944399, 32004408
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                316559037616741, 2177824224946892, 1459442586438991,
+                1461528397712656, 751590696113597
+#else
+                16568933, 4717097, 55552716, 32452109, 15682895, 21747389,
+                16354576, 21778470, 7689661, 11199574
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1850748884277385, 1200145853858453, 1068094770532492,
+                672251375690438, 1586055907191707
+#else
+                30464137, 27578307, 55329429, 17883566, 23220364, 15915852,
+                7512774, 10017326, 49359771, 23634074
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                934282339813791, 1846903124198670, 1172395437954843,
+                1007037127761661, 1830588347719256
+#else
+                50071967, 13921891, 10945806, 27521001, 27105051, 17470053,
+                38182653, 15006022, 3284568, 27277892
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1694390458783935, 1735906047636159, 705069562067493,
+                648033061693059, 696214010414170
+#else
+                23599295, 25248385, 55915199, 25867015, 13236773, 10506355,
+                7464579, 9656445, 13059162, 10374397
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1121406372216585, 192876649532226, 190294192191717,
+                1994165897297032, 2245000007398739
+#else
+                7798537, 16710257, 3033922, 2874086, 28997861, 2835604,
+                32406664, 29715387, 66467155, 33453106
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                769950342298419, 132954430919746, 844085933195555,
+                974092374476333, 726076285546016
+#else
+                10861363, 11473154, 27284546, 1981175, 37044515, 12577860,
+                32867885, 14515107, 51670560, 10819379
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                425251763115706, 608463272472562, 442562545713235,
+                837766094556764, 374555092627893
+#else
+                4708026, 6336745, 20377586, 9066809, 55836755, 6594695,
+                41455196, 12483687, 54440373, 5581305
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1086255230780037, 274979815921559, 1960002765731872,
+                929474102396301, 1190409889297339
+#else
+                19563141, 16186464, 37722007, 4097518, 10237984, 29206317,
+                28542349, 13850243, 43430843, 17738489
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1388594989461809, 316767091099457, 394298842192982,
+                1230079486801005, 1440737038838979
+#else
+                51736881, 20691677, 32573249, 4720197, 40672342, 5875510,
+                47920237, 18329612, 57289923, 21468654
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                7380825640100, 146210432690483, 304903576448906,
+                1198869323871120, 997689833219095
+#else
+                58559652, 109982, 15149363, 2178705, 22900618, 4543417, 3044240,
+                17864545, 1762327, 14866737
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1181317918772081, 114573476638901, 262805072233344,
+                265712217171332, 294181933805782
+#else
+                48909169, 17603008, 56635573, 1707277, 49922944, 3916100,
+                38872452, 3959420, 27914454, 4383652
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                665000864555967, 2065379846933859, 370231110385876,
+                350988370788628, 1233371373142985
+#else
+                5153727, 9909285, 1723747, 30776558, 30523604, 5516873,
+                19480852, 5230134, 43156425, 18378665
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2019367628972465, 676711900706637, 110710997811333,
+                1108646842542025, 517791959672113
+#else
+                36839857, 30090922, 7665485, 10083793, 28475525, 1649722,
+                20654025, 16520125, 30598449, 7715701
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                965130719900578, 247011430587952, 526356006571389,
+                91986625355052, 2157223321444601
+#else
+                28881826, 14381568, 9657904, 3680757, 46927229, 7843315,
+                35708204, 1370707, 29794553, 32145132
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2068619540119183, 1966274918058806, 957728544705549,
+                729906502578991, 159834893065166
+#else
+                14499471, 30824833, 33917750, 29299779, 28494861, 14271267,
+                30290735, 10876454, 33954766, 2381725
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2073601412052185, 31021124762708, 264500969797082,
+                248034690651703, 1030252227928288
+#else
+                59913433, 30899068, 52378708, 462250, 39384538, 3941371,
+                60872247, 3696004, 34808032, 15351954
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                551790716293402, 1989538725166328, 801169423371717,
+                2052451893578887, 678432056995012
+#else
+                27431194, 8222322, 16448760, 29646437, 48401861, 11938354,
+                34147463, 30583916, 29551812, 10109425
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1368953770187805, 790347636712921, 437508475667162,
+                2142576377050580, 1932081720066286
+#else
+                53451805, 20399000, 35825113, 11777097, 21447386, 6519384,
+                64730580, 31926875, 10092782, 28790261
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                953638594433374, 1092333936795051, 1419774766716690,
+                805677984380077, 859228993502513
+#else
+                27939166, 14210322, 4677035, 16277044, 44144402, 21156292,
+                34600109, 12005537, 49298737, 12803509
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1200766035879111, 20142053207432, 1465634435977050,
+                1645256912097844, 295121984874596
+#else
+                17228999, 17892808, 65875336, 300139, 65883994, 21839654,
+                30364212, 24516238, 18016356, 4397660
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1735718747031557, 1248237894295956, 1204753118328107,
+                976066523550493, 65943769534592
+#else
+                56150021, 25864224, 4776340, 18600194, 27850027, 17952220,
+                40489757, 14544524, 49631360, 982638
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1060098822528990, 1586825862073490, 212301317240126,
+                1975302711403555, 666724059764335
+#else
+                29253598, 15796703, 64244882, 23645547, 10057022, 3163536,
+                7332899, 29434304, 46061167, 9934962
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1091990273418756, 1572899409348578, 80968014455247,
+                306009358661350, 1520450739132526
+#else
+                5793284, 16271923, 42977250, 23438027, 29188559, 1206517,
+                52360934, 4559894, 36984942, 22656481
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1480517209436112, 1511153322193952, 1244343858991172,
+                304788150493241, 369136856496443
+#else
+                39464912, 22061425, 16282656, 22517939, 28414020, 18542168,
+                24191033, 4541697, 53770555, 5500567
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2151330273626164, 762045184746182, 1688074332551515,
+                823046109005759, 907602769079491
+#else
+                12650548, 32057319, 9052870, 11355358, 49428827, 25154267,
+                49678271, 12264342, 10874051, 13524335
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2047386910586836, 168470092900250, 1552838872594810,
+                340951180073789, 360819374702533
+#else
+                25556948, 30508442, 714650, 2510400, 23394682, 23139102,
+                33119037, 5080568, 44580805, 5376627
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1982622644432056, 2014393600336956, 128909208804214,
+                1617792623929191, 105294281913815
+#else
+                41020600, 29543379, 50095164, 30016803, 60382070, 1920896,
+                44787559, 24106988, 4535767, 1569007
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                980234343912898, 1712256739246056, 588935272190264,
+                204298813091998, 841798321043288
+#else
+                64853442, 14606629, 45416424, 25514613, 28430648, 8775819,
+                36614302, 3044289, 31848280, 12543772
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                197561292938973, 454817274782871, 1963754960082318,
+                2113372252160468, 971377527342673
+#else
+                45080285, 2943892, 35251351, 6777305, 13784462, 29262229,
+                39731668, 31491700, 7718481, 14474653
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                164699448829328, 3127451757672, 1199504971548753,
+                1766155447043652, 1899238924683527
+#else
+                2385296, 2454213, 44477544, 46602, 62670929, 17874016, 656964,
+                26317767, 24316167, 28300865
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                732262946680281, 1674412764227063, 2182456405662809,
+                1350894754474250, 558458873295247
+#else
+                13741529, 10911568, 33875447, 24950694, 46931033, 32521134,
+                33040650, 20129900, 46379407, 8321685
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2103305098582922, 1960809151316468, 715134605001343,
+                1454892949167181, 40827143824949
+#else
+                21060490, 31341688, 15712756, 29218333, 1639039, 10656336,
+                23845965, 21679594, 57124405, 608371
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1239289043050212, 1744654158124578, 758702410031698,
+                1796762995074688, 1603056663766
+#else
+                53436132, 18466845, 56219170, 25997372, 61071954, 11305546,
+                1123968, 26773855, 27229398, 23887
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2232056027107988, 987343914584615, 2115594492994461,
+                1819598072792159, 1119305654014850
+#else
+                43864724, 33260226, 55364135, 14712570, 37643165, 31524814,
+                12797023, 27114124, 65475458, 16678953
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                320153677847348, 939613871605645, 641883205761567,
+                1930009789398224, 329165806634126
+#else
+                37608244, 4770661, 51054477, 14001337, 7830047, 9564805,
+                65600720, 28759386, 49939598, 4904952
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                980930490474130, 1242488692177893, 1251446316964684,
+                1086618677993530, 1961430968465772
+#else
+                24059538, 14617003, 19037157, 18514524, 19766092, 18648003,
+                5169210, 16191880, 2128236, 29227599
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                276821765317453, 1536835591188030, 1305212741412361,
+                61473904210175, 2051377036983058
+#else
+                50127693, 4124965, 58568254, 22900634, 30336521, 19449185,
+                37302527, 916032, 60226322, 30567899
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                833449923882501, 1750270368490475, 1123347002068295,
+                185477424765687, 278090826653186
+#else
+                44477957, 12419371, 59974635, 26081060, 50629959, 16739174,
+                285431, 2763829, 15736322, 4143876
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                794524995833413, 1849907304548286, 53348672473145,
+                1272368559505217, 1147304168324779
+#else
+                2379333, 11839345, 62998462, 27565766, 11274297, 794957, 212801,
+                18959769, 23527083, 17096164
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1504846112759364, 1203096289004681, 562139421471418,
+                274333017451844, 1284344053775441
+#else
+                33431108, 22423954, 49269897, 17927531, 8909498, 8376530,
+                34483524, 4087880, 51919953, 19138217
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                483048732424432, 2116063063343382, 30120189902313,
+                292451576741007, 1156379271702225
+#else
+                1767664, 7197987, 53903638, 31531796, 54017513, 448825, 5799055,
+                4357868, 62334673, 17231393
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                928372153029038, 2147692869914564, 1455665844462196,
+                1986737809425946, 185207050258089
+#else
+                6721966, 13833823, 43585476, 32003117, 26354292, 21691111,
+                23365146, 29604700, 7390889, 2759800
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                137732961814206, 706670923917341, 1387038086865771,
+                1965643813686352, 1384777115696347
+#else
+                4409022, 2052381, 23373853, 10530217, 7676779, 20668478,
+                21302352, 29290375, 1244379, 20634787
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                481144981981577, 2053319313589856, 2065402289827512,
+                617954271490316, 1106602634668125
+#else
+                62687625, 7169618, 4982368, 30596842, 30256824, 30776892,
+                14086412, 9208236, 15886429, 16489664
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                696298019648792, 893299659040895, 1148636718636009,
+                26734077349617, 2203955659340681
+#else
+                1996056, 10375649, 14346367, 13311202, 60234729, 17116020,
+                53415665, 398368, 36502409, 32841498
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                657390353372855, 998499966885562, 991893336905797,
+                810470207106761, 343139804608786
+#else
+                41801399, 9795879, 64331450, 14878808, 33577029, 14780362,
+                13348553, 12076947, 36272402, 5113181
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                791736669492960, 934767652997115, 824656780392914,
+                1759463253018643, 361530362383518
+#else
+                49338080, 11797795, 31950843, 13929123, 41220562, 12288343,
+                36767763, 26218045, 13847710, 5387222
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2022541353055597, 2094700262587466, 1551008075025686,
+                242785517418164, 695985404963562
+#else
+                48526701, 30138214, 17824842, 31213466, 22744342, 23111821,
+                8763060, 3617786, 47508202, 10370990
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1287487199965223, 2215311941380308, 1552928390931986,
+                1664859529680196, 1125004975265243
+#else
+                20246567, 19185054, 22358228, 33010720, 18507282, 23140436,
+                14554436, 24808340, 32232923, 16763880
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                677434665154918, 989582503122485, 1817429540898386,
+                1052904935475344, 1143826298169798
+#else
+                9648486, 10094563, 26416693, 14745928, 36734546, 27081810,
+                11094160, 15689506, 3140038, 17044340
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                367266328308408, 318431188922404, 695629353755355,
+                634085657580832, 24581612564426
+#else
+                50948792, 5472694, 31895588, 4744994, 8823515, 10365685,
+                39884064, 9448612, 38334410, 366294
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                773360688841258, 1815381330538070, 363773437667376,
+                539629987070205, 783280434248437
+#else
+                19153450, 11523972, 56012374, 27051289, 42461232, 5420646,
+                28344573, 8041113, 719605, 11671788
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                180820816194166, 168937968377394, 748416242794470,
+                1227281252254508, 1567587861004268
+#else
+                8678006, 2694440, 60300850, 2517371, 4964326, 11152271,
+                51675948, 18287915, 27000812, 23358879
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                478775558583645, 2062896624554807, 699391259285399,
+                358099408427873, 1277310261461761
+#else
+                51950941, 7134311, 8639287, 30739555, 59873175, 10421741,
+                564065, 5336097, 6750977, 19033406
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1984740906540026, 1079164179400229, 1056021349262661,
+                1659958556483663, 1088529069025527
+#else
+                11836410, 29574944, 26297893, 16080799, 23455045, 15735944,
+                1695823, 24735310, 8169719, 16220347
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                580736401511151, 1842931091388998, 1177201471228238,
+                2075460256527244, 1301133425678027
+#else
+                48993007, 8653646, 17578566, 27461813, 59083086, 17541668,
+                55964556, 30926767, 61118155, 19388398
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1515728832059182, 1575261009617579, 1510246567196186,
+                191078022609704, 116661716289141
+#else
+                43800366, 22586119, 15213227, 23473218, 36255258, 22504427,
+                27884328, 2847284, 2655861, 1738395
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1295295738269652, 1714742313707026, 545583042462581,
+                2034411676262552, 1513248090013606
+#else
+                39571412, 19301410, 41772562, 25551651, 57738101, 8129820,
+                21651608, 30315096, 48021414, 22549153
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                230710545179830, 30821514358353, 760704303452229,
+                390668103790604, 573437871383156
+#else
+                1533110, 3437855, 23735889, 459276, 29970501, 11335377,
+                26030092, 5821408, 10478196, 8544890
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1169380107545646, 263167233745614, 2022901299054448,
+                819900753251120, 2023898464874585
+#else
+                32173102, 17425121, 24896206, 3921497, 22579056, 30143578,
+                19270448, 12217473, 17789017, 30158437
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2102254323485823, 1570832666216754, 34696906544624,
+                1993213739807337, 70638552271463
+#else
+                36555903, 31326030, 51530034, 23407230, 13243888, 517024,
+                15479401, 29701199, 30460519, 1052596
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                894132856735058, 548675863558441, 845349339503395,
+                1942269668326667, 1615682209874691
+#else
+                55493970, 13323617, 32618793, 8175907, 51878691, 12596686,
+                27491595, 28942073, 3179267, 24075541
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1287670217537834, 1222355136884920, 1846481788678694,
+                1150426571265110, 1613523400722047
+#else
+                31947050, 19187781, 62468280, 18214510, 51982886, 27514722,
+                52352086, 17142691, 19072639, 24043372
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                793388516527298, 1315457083650035, 1972286999342417,
+                1901825953052455, 338269477222410
+#else
+                11685058, 11822410, 3158003, 19601838, 33402193, 29389366,
+                5977895, 28339415, 473098, 5040608
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                550201530671806, 778605267108140, 2063911101902983,
+                115500557286349, 2041641272971022
+#else
+                46817982, 8198641, 39698732, 11602122, 1290375, 30754672,
+                28326861, 1721092, 47550222, 30422825
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                717255318455100, 519313764361315, 2080406977303708,
+                541981206705521, 774328150311600
+#else
+                7881532, 10687937, 7578723, 7738378, 48157852, 31000479,
+                21820785, 8076149, 39240368, 11538388
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                261715221532238, 1795354330069993, 1496878026850283,
+                499739720521052, 389031152673770
+#else
+                47173198, 3899860, 18283497, 26752864, 51380203, 22305220,
+                8754524, 7446702, 61432810, 5797015
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1997217696294013, 1717306351628065, 1684313917746180,
+                1644426076011410, 1857378133465451
+#else
+                55813245, 29760862, 51326753, 25589858, 12708868, 25098233,
+                2014098, 24503858, 64739691, 27677090
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1475434724792648, 76931896285979, 1116729029771667,
+                2002544139318042, 725547833803938
+#else
+                44636488, 21985690, 39426843, 1146374, 18956691, 16640559,
+                1192730, 29840233, 15123618, 10811505
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2022306639183567, 726296063571875, 315345054448644,
+                1058733329149221, 1448201136060677
+#else
+                14352079, 30134717, 48166819, 10822654, 32750596, 4699007,
+                67038501, 15776355, 38222085, 21579878
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1710065158525665, 1895094923036397, 123988286168546,
+                1145519900776355, 1607510767693874
+#else
+                38867681, 25481956, 62129901, 28239114, 29416930, 1847569,
+                46454691, 17069576, 4714546, 23953777
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                561605375422540, 1071733543815037, 131496498800990,
+                1946868434569999, 828138133964203
+#else
+                15200332, 8368572, 19679101, 15970074, 35236190, 1959450,
+                24611599, 29010600, 55362987, 12340219
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1548495173745801, 442310529226540, 998072547000384,
+                553054358385281, 644824326376171
+#else
+                12876937, 23074376, 33134380, 6590940, 60801088, 14872439,
+                9613953, 8241152, 15370987, 9608631
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1445526537029440, 2225519789662536, 914628859347385,
+                1064754194555068, 1660295614401091
+#else
+                62965568, 21540023, 8446280, 33162829, 4407737, 13629032,
+                59383996, 15866073, 38898243, 24740332
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1199690223111956, 24028135822341, 66638289244341,
+                57626156285975, 565093967979607
+#else
+                26660628, 17876777, 8393733, 358047, 59707573, 992987, 43204631,
+                858696, 20571223, 8420556
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                876926774220824, 554618976488214, 1012056309841565,
+                839961821554611, 1414499340307677
+#else
+                14620696, 13067227, 51661590, 8264466, 14106269, 15080814,
+                33531827, 12516406, 45534429, 21077682
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                703047626104145, 1266841406201770, 165556500219173,
+                486991595001879, 1011325891650656
+#else
+                236881, 10476226, 57258, 18877408, 6472997, 2466984, 17258519,
+                7256740, 8791136, 15069930
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1622861044480487, 1156394801573634, 1869132565415504,
+                327103985777730, 2095342781472284
+#else
+                1276391, 24182514, 22949634, 17231625, 43615824, 27852245,
+                14711874, 4874229, 36445724, 31223040
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                334886927423922, 489511099221528, 129160865966726,
+                1720809113143481, 619700195649254
+#else
+                5855666, 4990204, 53397016, 7294283, 59304582, 1924646,
+                65685689, 25642053, 34039526, 9234252
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1646545795166119, 1758370782583567, 714746174550637,
+                1472693650165135, 898994790308209
+#else
+                20590503, 24535444, 31529743, 26201766, 64402029, 10650547,
+                31559055, 21944845, 18979185, 13396066
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                333403773039279, 295772542452938, 1693106465353610,
+                912330357530760, 471235657950362
+#else
+                24474287, 4968103, 22267082, 4407354, 24063882, 25229252,
+                48291976, 13594781, 33514650, 7021958
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1811196219982022, 1068969825533602, 289602974833439,
+                1988956043611592, 863562343398367
+#else
+                55541958, 26988926, 45743778, 15928891, 40950559, 4315420,
+                41160136, 29637754, 45628383, 12868081
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                906282429780072, 2108672665779781, 432396390473936,
+                150625823801893, 1708930497638539
+#else
+                38473832, 13504660, 19988037, 31421671, 21078224, 6443208,
+                45662757, 2244499, 54653067, 25465048
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                925664675702328, 21416848568684, 1831436641861340,
+                601157008940113, 371818055044496
+#else
+                36513336, 13793478, 61256044, 319135, 41385692, 27290532,
+                33086545, 8957937, 51875216, 5540520
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1479786007267725, 1738881859066675, 68646196476567,
+                2146507056100328, 1247662817535471
+#else
+                55478669, 22050529, 58989363, 25911358, 2620055, 1022908,
+                43398120, 31985447, 50980335, 18591624
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                52035296774456, 939969390708103, 312023458773250,
+                59873523517659, 1231345905848899
+#else
+                23152952, 775386, 27395463, 14006635, 57407746, 4649511,
+                1689819, 892185, 55595587, 18348483
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                643355106415761, 290186807495774, 2013561737429023,
+                319648069511546, 393736678496162
+#else
+                9770129, 9586738, 26496094, 4324120, 1556511, 30004408,
+                27453818, 4763127, 47929250, 5867133
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                129358342392716, 1932811617704777, 1176749390799681,
+                398040349861790, 1170779668090425
+#else
+                34343820, 1927589, 31726409, 28801137, 23962433, 17534932,
+                27846558, 5931263, 37359161, 17445976
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2051980782668029, 121859921510665, 2048329875753063,
+                1235229850149665, 519062146124755
+#else
+                27461885, 30576896, 22380809, 1815854, 44075111, 30522493,
+                7283489, 18406359, 47582163, 7734628
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1608170971973096, 415809060360428, 1350468408164766,
+                2038620059057678, 1026904485989112
+#else
+                59098600, 23963614, 55988460, 6196037, 29344158, 20123547,
+                7585294, 30377806, 18549496, 15302069
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1837656083115103, 1510134048812070, 906263674192061,
+                1821064197805734, 565375124676301
+#else
+                34450527, 27383209, 59436070, 22502750, 6258877, 13504381,
+                10458790, 27135971, 58236621, 8424745
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                578027192365650, 2034800251375322, 2128954087207123,
+                478816193810521, 2196171989962750
+#else
+                24687186, 8613276, 36441818, 30320886, 1863891, 31723888,
+                19206233, 7134917, 55824382, 32725512
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1633188840273139, 852787172373708, 1548762607215796,
+                1266275218902681, 1107218203325133
+#else
+                11334899, 24336410, 8025292, 12707519, 17523892, 23078361,
+                10243737, 18868971, 62042829, 16498836
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                462189358480054, 1784816734159228, 1611334301651368,
+                1303938263943540, 707589560319424
+#else
+                8911542, 6887158, 57524604, 26595841, 11145640, 24010752,
+                17303924, 19430194, 6536640, 10543906
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1038829280972848, 38176604650029, 753193246598573,
+                1136076426528122, 595709990562434
+#else
+                38162480, 15479762, 49642029, 568875, 65611181, 11223453,
+                64439674, 16928857, 39873154, 8876770
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1408451820859834, 2194984964010833, 2198361797561729,
+                1061962440055713, 1645147963442934
+#else
+                41365946, 20987567, 51458897, 32707824, 34082177, 32758143,
+                33627041, 15824473, 66504438, 24514614
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                4701053362120, 1647641066302348, 1047553002242085,
+                1923635013395977, 206970314902065
+#else
+                10330056, 70051, 7957388, 24551765, 9764901, 15609756, 27698697,
+                28664395, 1657393, 3084098
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1750479161778571, 1362553355169293, 1891721260220598,
+                966109370862782, 1024913988299801
+#else
+                10477963, 26084172, 12119565, 20303627, 29016246, 28188843,
+                31280318, 14396151, 36875289, 15272408
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                212699049131723, 1117950018299775, 1873945661751056,
+                1403802921984058, 130896082652698
+#else
+                54820555, 3169462, 28813183, 16658753, 25116432, 27923966,
+                41934906, 20918293, 42094106, 1950503
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                636808533673210, 1262201711667560, 390951380330599,
+                1663420692697294, 561951321757406
+#else
+                40928506, 9489186, 11053416, 18808271, 36055143, 5825629,
+                58724558, 24786899, 15341278, 8373727
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                520731594438141, 1446301499955692, 273753264629267,
+                1565101517999256, 1019411827004672
+#else
+                28685821, 7759505, 52730348, 21551571, 35137043, 4079241,
+                298136, 23321830, 64230656, 15190419
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                926527492029409, 1191853477411379, 734233225181171,
+                184038887541270, 1790426146325343
+#else
+                34175969, 13806335, 52771379, 17760000, 43104243, 10940927,
+                8669718, 2742393, 41075551, 26679428
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1464651961852572, 1483737295721717, 1519450561335517,
+                1161429831763785, 405914998179977
+#else
+                65528476, 21825014, 41129205, 22109408, 49696989, 22641577,
+                9291593, 17306653, 54954121, 6048604
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                996126634382301, 796204125879525, 127517800546509,
+                344155944689303, 615279846169038
+#else
+                36803549, 14843443, 1539301, 11864366, 20201677, 1900163,
+                13934231, 5128323, 11213262, 9168384
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                738724080975276, 2188666632415296, 1961313708559162,
+                1506545807547587, 1151301638969740
+#else
+                40828332, 11007846, 19408960, 32613674, 48515898, 29225851,
+                62020803, 22449281, 20470156, 17155731
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                622917337413835, 1218989177089035, 1284857712846592,
+                970502061709359, 351025208117090
+#else
+                43972811, 9282191, 14855179, 18164354, 59746048, 19145871,
+                44324911, 14461607, 14042978, 5230683
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2067814584765580, 1677855129927492, 2086109782475197,
+                235286517313238, 1416314046739645
+#else
+                29969548, 30812838, 50396996, 25001989, 9175485, 31085458,
+                21556950, 3506042, 61174973, 21104723
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                586844262630358, 307444381952195, 458399356043426,
+                602068024507062, 1028548203415243
+#else
+                63964118, 8744660, 19704003, 4581278, 46678178, 6830682,
+                45824694, 8971512, 38569675, 15326562
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                678489922928203, 2016657584724032, 90977383049628,
+                1026831907234582, 615271492942522
+#else
+                47644235, 10110287, 49846336, 30050539, 43608476, 1355668,
+                51585814, 15300987, 46594746, 9168259
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                301225714012278, 1094837270268560, 1202288391010439,
+                644352775178361, 1647055902137983
+#else
+                61755510, 4488612, 43305616, 16314346, 7780487, 17915493,
+                38160505, 9601604, 33087103, 24543045
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1210746697896478, 1416608304244708, 686487477217856,
+                1245131191434135, 1051238336855737
+#else
+                47665694, 18041531, 46311396, 21109108, 37284416, 10229460,
+                39664535, 18553900, 61111993, 15664671
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1135604073198207, 1683322080485474, 769147804376683,
+                2086688130589414, 900445683120379
+#else
+                23294591, 16921819, 44458082, 25083453, 27844203, 11461195,
+                13099750, 31094076, 18151675, 13417686
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1971518477615628, 401909519527336, 448627091057375,
+                1409486868273821, 1214789035034363
+#else
+                42385932, 29377914, 35958184, 5988918, 40250079, 6685064,
+                1661597, 21002991, 15271675, 18101767
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1364039144731711, 1897497433586190, 2203097701135459,
+                145461396811251, 1349844460790699
+#else
+                11433023, 20325767, 8239630, 28274915, 65123427, 32828713,
+                48410099, 2167543, 60187563, 20114249
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1045230323257973, 818206601145807, 630513189076103,
+                1672046528998132, 807204017562437
+#else
+                35672693, 15575145, 30436815, 12192228, 44645511, 9395378,
+                57191156, 24915434, 12215109, 12028277
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                439961968385997, 386362664488986, 1382706320807688,
+                309894000125359, 2207801346498567
+#else
+                14098381, 6555944, 23007258, 5757252, 51681032, 20603929,
+                30123439, 4617780, 50208775, 32898803
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1229004686397588, 920643968530863, 123975893911178,
+                681423993215777, 1400559197080973
+#else
+                63082644, 18313596, 11893167, 13718664, 52299402, 1847384,
+                51288865, 10154008, 23973261, 20869958
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2003766096898049, 170074059235165, 1141124258967971,
+                1485419893480973, 1573762821028725
+#else
+                40577025, 29858441, 65199965, 2534300, 35238307, 17004076,
+                18341389, 22134481, 32013173, 23450893
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                729905708611432, 1270323270673202, 123353058984288,
+                426460209632942, 2195574535456672
+#else
+                41629544, 10876442, 55337778, 18929291, 54739296, 1838103,
+                21911214, 6354752, 4425632, 32716610
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1271140255321235, 2044363183174497, 52125387634689,
+                1445120246694705, 942541986339084
+#else
+                56675475, 18941465, 22229857, 30463385, 53917697, 776728,
+                49693489, 21533969, 4725004, 14044970
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1761608437466135, 583360847526804, 1586706389685493,
+                2157056599579261, 1170692369685772
+#else
+                19268631, 26250011, 1555348, 8692754, 45634805, 23643767,
+                6347389, 32142648, 47586572, 17444675
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                871476219910823, 1878769545097794, 2241832391238412,
+                548957640601001, 690047440233174
+#else
+                42244775, 12986007, 56209986, 27995847, 55796492, 33405905,
+                19541417, 8180106, 9282262, 10282508
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                297194732135507, 1366347803776820, 1301185512245601,
+                561849853336294, 1533554921345731
+#else
+                40903763, 4428546, 58447668, 20360168, 4098401, 19389175,
+                15522534, 8372215, 5542595, 22851749
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                999628998628371, 1132836708493400, 2084741674517453,
+                469343353015612, 678782988708035
+#else
+                56546323, 14895632, 26814552, 16880582, 49628109, 31065071,
+                64326972, 6993760, 49014979, 10114654
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2189427607417022, 699801937082607, 412764402319267,
+                1478091893643349, 2244675696854460
+#else
+                47001790, 32625013, 31422703, 10427861, 59998115, 6150668,
+                38017109, 22025285, 25953724, 33448274
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1712292055966563, 204413590624874, 1405738637332841,
+                408981300829763, 861082219276721
+#else
+                62874467, 25515139, 57989738, 3045999, 2101609, 20947138,
+                19390019, 6094296, 63793585, 12831124
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                508561155940631, 966928475686665, 2236717801150132,
+                424543858577297, 2089272956986143
+#else
+                51110167, 7578151, 5310217, 14408357, 33560244, 33329692,
+                31575953, 6326196, 7381791, 31132593
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                221245220129925, 1156020201681217, 491145634799213,
+                542422431960839, 828100817819207
+#else
+                46206085, 3296810, 24736065, 17226043, 18374253, 7318640,
+                6295303, 8082724, 51746375, 12339663
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                153756971240384, 1299874139923977, 393099165260502,
+                1058234455773022, 996989038681183
+#else
+                27724736, 2291157, 6088201, 19369634, 1792726, 5857634,
+                13848414, 15768922, 25091167, 14856294
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                559086812798481, 573177704212711, 1629737083816402,
+                1399819713462595, 1646954378266038
+#else
+                48242193, 8331042, 24373479, 8541013, 66406866, 24284974,
+                12927299, 20858939, 44926390, 24541532
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1887963056288059, 228507035730124, 1468368348640282,
+                930557653420194, 613513962454686
+#else
+                55685435, 28132841, 11632844, 3405020, 30536730, 21880393,
+                39848098, 13866389, 30146206, 9142070
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1224529808187553, 1577022856702685, 2206946542980843,
+                625883007765001, 279930793512158
+#else
+                3924129, 18246916, 53291741, 23499471, 12291819, 32886066,
+                39406089, 9326383, 58871006, 4171293
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1076287717051609, 1114455570543035, 187297059715481,
+                250446884292121, 1885187512550540
+#else
+                51186905, 16037936, 6713787, 16606682, 45496729, 2790943,
+                26396185, 3731949, 345228, 28091483
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                902497362940219, 76749815795675, 1657927525633846,
+                1420238379745202, 1340321636548352
+#else
+                45781307, 13448258, 25284571, 1143661, 20614966, 24705045,
+                2031538, 21163201, 50855680, 19972348
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1129576631190784, 1281994010027327, 996844254743018,
+                257876363489249, 1150850742055018
+#else
+                31016192, 16832003, 26371391, 19103199, 62081514, 14854136,
+                17477601, 3842657, 28012650, 17149012
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                628740660038789, 1943038498527841, 467786347793886,
+                1093341428303375, 235413859513003
+#else
+                62033029, 9368965, 58546785, 28953529, 51858910, 6970559,
+                57918991, 16292056, 58241707, 3507939
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                237425418909360, 469614029179605, 1512389769174935,
+                1241726368345357, 441602891065214
+#else
+                29439664, 3537914, 23333589, 6997794, 49553303, 22536363,
+                51899661, 18503164, 57943934, 6580395
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1736417953058555, 726531315520508, 1833335034432527,
+                1629442561574747, 624418919286085
+#else
+                54923003, 25874643, 16438268, 10826160, 58412047, 27318820,
+                17860443, 24280586, 65013061, 9304566
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1960754663920689, 497040957888962, 1909832851283095,
+                1271432136996826, 2219780368020940
+#else
+                20714545, 29217521, 29088194, 7406487, 11426967, 28458727,
+                14792666, 18945815, 5289420, 33077305
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1537037379417136, 1358865369268262, 2130838645654099,
+                828733687040705, 1999987652890901
+#else
+                50443312, 22903641, 60948518, 20248671, 9192019, 31751970,
+                17271489, 12349094, 26939669, 29802138
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                629042105241814, 1098854999137608, 887281544569320,
+                1423102019874777, 7911258951561
+#else
+                54218966, 9373457, 31595848, 16374215, 21471720, 13221525,
+                39825369, 21205872, 63410057, 117886
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1811562332665373, 1501882019007673, 2213763501088999,
+                359573079719636, 36370565049116
+#else
+                22263325, 26994382, 3984569, 22379786, 51994855, 32987646,
+                28311252, 5358056, 43789084, 541963
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                218907117361280, 1209298913016966, 1944312619096112,
+                1130690631451061, 1342327389191701
+#else
+                16259200, 3261970, 2309254, 18019958, 50223152, 28972515,
+                24134069, 16848603, 53771797, 20002236
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1369976867854704, 1396479602419169, 1765656654398856,
+                2203659200586299, 998327836117241
+#else
+                9378160, 20414246, 44262881, 20809167, 28198280, 26310334,
+                64709179, 32837080, 690425, 14876244
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2230701885562825, 1348173180338974, 2172856128624598,
+                1426538746123771, 444193481326151
+#else
+                24977353, 33240048, 58884894, 20089345, 28432342, 32378079,
+                54040059, 21257083, 44727879, 6618998
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                784210426627951, 918204562375674, 1284546780452985,
+                1324534636134684, 1872449409642708
+#else
+                65570671, 11685645, 12944378, 13682314, 42719353, 19141238,
+                8044828, 19737104, 32239828, 27901670
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                319638829540294, 596282656808406, 2037902696412608,
+                1557219121643918, 341938082688094
+#else
+                48505798, 4762989, 66182614, 8885303, 38696384, 30367116,
+                9781646, 23204373, 32779358, 5095274
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1901860206695915, 2004489122065736, 1625847061568236,
+                973529743399879, 2075287685312905
+#else
+                34100715, 28339925, 34843976, 29869215, 9460460, 24227009,
+                42507207, 14506723, 21639561, 30924196
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1371853944110545, 1042332820512553, 1949855697918254,
+                1791195775521505, 37487364849293
+#else
+                50707921, 20442216, 25239337, 15531969, 3987758, 29055114,
+                65819361, 26690896, 17874573, 558605
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                687200189577855, 1082536651125675, 644224940871546,
+                340923196057951, 343581346747396
+#else
+                53508735, 10240080, 9171883, 16131053, 46239610, 9599699,
+                33499487, 5080151, 2085892, 5119761
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2082717129583892, 27829425539422, 145655066671970,
+                1690527209845512, 1865260509673478
+#else
+                44903700, 31034903, 50727262, 414690, 42089314, 2170429,
+                30634760, 25190818, 35108870, 27794547
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1059729620568824, 2163709103470266, 1440302280256872,
+                1769143160546397, 869830310425069
+#else
+                60263160, 15791201, 8550074, 32241778, 29928808, 21462176,
+                27534429, 26362287, 44757485, 12961481
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1609516219779025, 777277757338817, 2101121130363987,
+                550762194946473, 1905542338659364
+#else
+                42616785, 23983660, 10368193, 11582341, 43711571, 31309144,
+                16533929, 8206996, 36914212, 28394793
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2024821921041576, 426948675450149, 595133284085473,
+                471860860885970, 600321679413000
+#else
+                55987368, 30172197, 2307365, 6362031, 66973409, 8868176,
+                50273234, 7031274, 7589640, 8945490
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                598474602406721, 1468128276358244, 1191923149557635,
+                1501376424093216, 1281662691293476
+#else
+                34956097, 8917966, 6661220, 21876816, 65916803, 17761038,
+                7251488, 22372252, 24099108, 19098262
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1721138489890707, 1264336102277790, 433064545421287,
+                1359988423149466, 1561871293409447
+#else
+                5019539, 25646962, 4244126, 18840076, 40175591, 6453164,
+                47990682, 20265406, 60876967, 23273695
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                719520245587143, 393380711632345, 132350400863381,
+                1543271270810729, 1819543295798660
+#else
+                10853575, 10721687, 26480089, 5861829, 44113045, 1972174,
+                65242217, 22996533, 63745412, 27113307
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                396397949784152, 1811354474471839, 1362679985304303,
+                2117033964846756, 498041172552279
+#else
+                50106456, 5906789, 221599, 26991285, 7828207, 20305514,
+                24362660, 31546264, 53242455, 7421391
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1812471844975748, 1856491995543149, 126579494584102,
+                1036244859282620, 1975108050082550
+#else
+                8139908, 27007935, 32257645, 27663886, 30375718, 1886181,
+                45933756, 15441251, 28826358, 29431403
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                650623932407995, 1137551288410575, 2125223403615539,
+                1725658013221271, 2134892965117796
+#else
+                6267067, 9695052, 7709135, 16950835, 34239795, 31668296,
+                14795159, 25714308, 13746020, 31812384
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                522584000310195, 1241762481390450, 1743702789495384,
+                2227404127826575, 1686746002148897
+#else
+                28584883, 7787108, 60375922, 18503702, 22846040, 25983196,
+                63926927, 33190907, 4771361, 25134474
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                427904865186312, 1703211129693455, 1585368107547509,
+                1436984488744336, 761188534613978
+#else
+                24949256, 6376279, 39642383, 25379823, 48462709, 23623825,
+                33543568, 21412737, 3569626, 11342593
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                318101947455002, 248138407995851, 1481904195303927,
+                309278454311197, 1258516760217879
+#else
+                26514970, 4740088, 27912651, 3697550, 19331575, 22082093,
+                6809885, 4608608, 7325975, 18753361
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1275068538599310, 513726919533379, 349926553492294,
+                688428871968420, 1702400196000666
+#else
+                55490446, 19000001, 42787651, 7655127, 65739590, 5214311,
+                39708324, 10258389, 49462170, 25367739
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1061864036265233, 961611260325381, 321859632700838,
+                1045600629959517, 1985130202504038
+#else
+                11431185, 15823007, 26570245, 14329124, 18029990, 4796082,
+                35662685, 15580663, 9280358, 29580745
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1558816436882417, 1962896332636523, 1337709822062152,
+                1501413830776938, 294436165831932
+#else
+                66948081, 23228174, 44253547, 29249434, 46247496, 19933429,
+                34297962, 22372809, 51563772, 4387440
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                818359826554971, 1862173000996177, 626821592884859,
+                573655738872376, 1749691246745455
+#else
+                46309467, 12194511, 3937617, 27748540, 39954043, 9340369,
+                42594872, 8548136, 20617071, 26072431
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1988022651432119, 1082111498586040, 1834020786104821,
+                1454826876423687, 692929915223122
+#else
+                66170039, 29623845, 58394552, 16124717, 24603125, 27329039,
+                53333511, 21678609, 24345682, 10325460
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2146513703733331, 584788900394667, 464965657279958,
+                2183973639356127, 238371159456790
+#else
+                47253587, 31985546, 44906155, 8714033, 14007766, 6928528,
+                16318175, 32543743, 4766742, 3552007
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1129007025494441, 2197883144413266, 265142755578169,
+                971864464758890, 1983715884903702
+#else
+                45357481, 16823515, 1351762, 32751011, 63099193, 3950934,
+                3217514, 14481909, 10988822, 29559670
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1291366624493075, 381456718189114, 1711482489312444,
+                1815233647702022, 892279782992467
+#else
+                15564307, 19242862, 3101242, 5684148, 30446780, 25503076,
+                12677126, 27049089, 58813011, 13296004
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                444548969917454, 1452286453853356, 2113731441506810,
+                645188273895859, 810317625309512
+#else
+                57666574, 6624295, 36809900, 21640754, 62437882, 31497052,
+                31521203, 9614054, 37108040, 12074673
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2242724082797924, 1373354730327868, 1006520110883049,
+                2147330369940688, 1151816104883620
+#else
+                4771172, 33419193, 14290748, 20464580, 27992297, 14998318,
+                65694928, 31997715, 29832612, 17163397
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1745720200383796, 1911723143175317, 2056329390702074,
+                355227174309849, 879232794371100
+#else
+                7064884, 26013258, 47946901, 28486894, 48217594, 30641695,
+                25825241, 5293297, 39986204, 13101589
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                163723479936298, 115424889803150, 1156016391581227,
+                1894942220753364, 1970549419986329
+#else
+                64810282, 2439669, 59642254, 1719964, 39841323, 17225986,
+                32512468, 28236839, 36752793, 29363474
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                681981452362484, 267208874112496, 1374683991933094,
+                638600984916117, 646178654558546
+#else
+                37102324, 10162315, 33928688, 3981722, 50626726, 20484387,
+                14413973, 9515896, 19568978, 9628812
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                13378654854251, 106237307029567, 1944412051589651,
+                1841976767925457, 230702819835573
+#else
+                33053803, 199357, 15894591, 1583059, 27380243, 28973997,
+                49269969, 27447592, 60817077, 3437739
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                260683893467075, 854060306077237, 913639551980112,
+                4704576840123, 280254810808712
+#else
+                48129987, 3884492, 19469877, 12726490, 15913552, 13614290,
+                44147131, 70103, 7463304, 4176122
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                715374893080287, 1173334812210491, 1806524662079626,
+                1894596008000979, 398905715033393
+#else
+                39984863, 10659916, 11482427, 17484051, 12771466, 26919315,
+                34389459, 28231680, 24216881, 5944158
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                500026409727661, 1596431288195371, 1420380351989370,
+                985211561521489, 392444930785633
+#else
+                8894125, 7450974, 64444715, 23788679, 39028346, 21165316,
+                19345745, 14680796, 11632993, 5847885
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2096421546958141, 1922523000950363, 789831022876840,
+                427295144688779, 320923973161730
+#else
+                26942781, 31239115, 9129563, 28647825, 26024104, 11769399,
+                55590027, 6367193, 57381634, 4782139
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1927770723575450, 1485792977512719, 1850996108474547,
+                551696031508956, 2126047405475647
+#else
+                19916442, 28726022, 44198159, 22140040, 25606323, 27581991,
+                33253852, 8220911, 6358847, 31680575
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2112099158080148, 742570803909715, 6484558077432,
+                1951119898618916, 93090382703416
+#else
+                801428, 31472730, 16569427, 11065167, 29875704, 96627, 7908388,
+                29073952, 53570360, 1387154
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                383905201636970, 859946997631870, 855623867637644,
+                1017125780577795, 794250831877809
+#else
+                19646058, 5720633, 55692158, 12814208, 11607948, 12749789,
+                14147075, 15156355, 45242033, 11835259
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                77571826285752, 999304298101753, 487841111777762,
+                1038031143212339, 339066367948762
+#else
+                19299512, 1155910, 28703737, 14890794, 2925026, 7269399,
+                26121523, 15467869, 40548314, 5052482
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                674994775520533, 266035846330789, 826951213393478,
+                1405007746162285, 1781791018620876
+#else
+                64091413, 10058205, 1980837, 3964243, 22160966, 12322533,
+                60677741, 20936246, 12228556, 26550755
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1001412661522686, 348196197067298, 1666614366723946,
+                888424995032760, 580747687801357
+#else
+                32944382, 14922211, 44263970, 5188527, 21913450, 24834489,
+                4001464, 13238564, 60994061, 8653814
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1939560076207777, 1409892634407635, 552574736069277,
+                383854338280405, 190706709864139
+#else
+                22865569, 28901697, 27603667, 21009037, 14348957, 8234005,
+                24808405, 5719875, 28483275, 2841751
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2177087163428741, 1439255351721944, 1208070840382793,
+                2230616362004769, 1396886392021913
+#else
+                50687877, 32441126, 66781144, 21446575, 21886281, 18001658,
+                65220897, 33238773, 19932057, 20815229
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                676962063230039, 1880275537148808, 2046721011602706,
+                888463247083003, 1318301552024067
+#else
+                55452759, 10087520, 58243976, 28018288, 47830290, 30498519,
+                3999227, 13239134, 62331395, 19644223
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1466980508178206, 617045217998949, 652303580573628,
+                757303753529064, 207583137376902
+#else
+                1382174, 21859713, 17266789, 9194690, 53784508, 9720080,
+                20403944, 11284705, 53095046, 3093229
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1511056752906902, 105403126891277, 493434892772846,
+                1091943425335976, 1802717338077427
+#else
+                16650902, 22516500, 66044685, 1570628, 58779118, 7352752,
+                66806440, 16271224, 43059443, 26862581
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1853982405405128, 1878664056251147, 1528011020803992,
+                1019626468153565, 1128438412189035
+#else
+                45197768, 27626490, 62497547, 27994275, 35364760, 22769138,
+                24123613, 15193618, 45456747, 16815042
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1963939888391106, 293456433791664, 697897559513649,
+                985882796904380, 796244541237972
+#else
+                57172930, 29264984, 41829040, 4372841, 2087473, 10399484,
+                31870908, 14690798, 17361620, 11864968
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                416770998629779, 389655552427054, 1314476859406756,
+                1749382513022778, 1161905598739491
+#else
+                55801235, 6210371, 13206574, 5806320, 38091172, 19587231,
+                54777658, 26067830, 41530403, 17313742
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1428358296490651, 1027115282420478, 304840698058337,
+                441410174026628, 1819358356278573
+#else
+                14668443, 21284197, 26039038, 15305210, 25515617, 4542480,
+                10453892, 6577524, 9145645, 27110552
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                204943430200135, 1554861433819175, 216426658514651,
+                264149070665950, 2047097371738319
+#else
+                5974855, 3053895, 57675815, 23169240, 35243739, 3225008,
+                59136222, 3936127, 61456591, 30504127
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1934415182909034, 1393285083565062, 516409331772960,
+                1157690734993892, 121039666594268
+#else
+                30625386, 28825032, 41552902, 20761565, 46624288, 7695098,
+                17097188, 17250936, 39109084, 1803631
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                662035583584445, 286736105093098, 1131773000510616,
+                818494214211439, 472943792054479
+#else
+                63555773, 9865098, 61880298, 4272700, 61435032, 16864731,
+                14911343, 12196514, 45703375, 7047411
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                665784778135882, 1893179629898606, 808313193813106,
+                276797254706413, 1563426179676396
+#else
+                20093258, 9920966, 55970670, 28210574, 13161586, 12044805,
+                34252013, 4124600, 34765036, 23296865
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                945205108984232, 526277562959295, 1324180513733566,
+                1666970227868664, 153547609289173
+#else
+                46320040, 14084653, 53577151, 7842146, 19119038, 19731827,
+                4752376, 24839792, 45429205, 2288037
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2031433403516252, 203996615228162, 170487168837083,
+                981513604791390, 843573964916831
+#else
+                40289628, 30270716, 29965058, 3039786, 52635099, 2540456,
+                29457502, 14625692, 42289247, 12570231
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1476570093962618, 838514669399805, 1857930577281364,
+                2017007352225784, 317085545220047
+#else
+                66045306, 22002608, 16920317, 12494842, 1278292, 27685323,
+                45948920, 30055751, 55134159, 4724942
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1461557121912842, 1600674043318359, 2157134900399597,
+                1670641601940616, 127765583803283
+#else
+                17960970, 21778898, 62967895, 23851901, 58232301, 32143814,
+                54201480, 24894499, 37532563, 1903855
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1293543509393474, 2143624609202546, 1058361566797508,
+                214097127393994, 946888515472729
+#else
+                23134274, 19275300, 56426866, 31942495, 20684484, 15770816,
+                54119114, 3190295, 26955097, 14109738
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                357067959932916, 1290876214345711, 521245575443703,
+                1494975468601005, 800942377643885
+#else
+                15308788, 5320727, 36995055, 19235554, 22902007, 7767164,
+                29425325, 22276870, 31960941, 11934971
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                566116659100033, 820247422481740, 994464017954148,
+                327157611686365, 92591318111744
+#else
+                39713153, 8435795, 4109644, 12222639, 42480996, 14818668,
+                20638173, 4875028, 10491392, 1379718
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                617256647603209, 1652107761099439, 1857213046645471,
+                1085597175214970, 817432759830522
+#else
+                53949449, 9197840, 3875503, 24618324, 65725151, 27674630,
+                33518458, 16176658, 21432314, 12180697
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                771808161440705, 1323510426395069, 680497615846440,
+                851580615547985, 1320806384849017
+#else
+                55321537, 11500837, 13787581, 19721842, 44678184, 10140204,
+                1465425, 12689540, 56807545, 19681548
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1219260086131915, 647169006596815, 79601124759706,
+                2161724213426748, 404861897060198
+#else
+                5414091, 18168391, 46101199, 9643569, 12834970, 1186149,
+                64485948, 32212200, 26128230, 6032912
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1327968293887866, 1335500852943256, 1401587164534264,
+                558137311952440, 1551360549268902
+#else
+                40771450, 19788269, 32496024, 19900513, 17847800, 20885276,
+                3604024, 8316894, 41233830, 23117073
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                417621685193956, 1429953819744454, 396157358457099,
+                1940470778873255, 214000046234152
+#else
+                3296484, 6223048, 24680646, 21307972, 44056843, 5903204,
+                58246567, 28915267, 12376616, 3188849
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1268047918491973, 2172375426948536, 1533916099229249,
+                1761293575457130, 1590622667026765
+#else
+                29190469, 18895386, 27549112, 32370916, 3520065, 22857131,
+                32049514, 26245319, 50999629, 23702124
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1627072914981959, 2211603081280073, 1912369601616504,
+                1191770436221309, 2187309757525860
+#else
+                52364359, 24245275, 735817, 32955454, 46701176, 28496527,
+                25246077, 17758763, 18640740, 32593455
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1149147819689533, 378692712667677, 828475842424202,
+                2218619146419342, 70688125792186
+#else
+                60180029, 17123636, 10361373, 5642961, 4910474, 12345252,
+                35470478, 33060001, 10530746, 1053335
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1299739417079761, 1438616663452759, 1536729078504412,
+                2053896748919838, 1008421032591246
+#else
+                37842897, 19367626, 53570647, 21437058, 47651804, 22899047,
+                35646494, 30605446, 24018830, 15026644
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2040723824657366, 399555637875075, 632543375452995,
+                872649937008051, 1235394727030233
+#else
+                44516310, 30409154, 64819587, 5953842, 53668675, 9425630,
+                25310643, 13003497, 64794073, 18408815
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2211311599327900, 2139787259888175, 938706616835350,
+                12609661139114, 2081897930719789
+#else
+                39688860, 32951110, 59064879, 31885314, 41016598, 13987818,
+                39811242, 187898, 43942445, 31022696
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1324994503390450, 336982330582631, 1183998925654177,
+                1091654665913274, 48727673971319
+#else
+                45364466, 19743956, 1844839, 5021428, 56674465, 17642958,
+                9716666, 16266922, 62038647, 726098
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1845522914617879, 1222198248335542, 150841072760134,
+                1927029069940982, 1189913404498011
+#else
+                29370903, 27500434, 7334070, 18212173, 9385286, 2247707,
+                53446902, 28714970, 30007387, 17731091
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1079559557592645, 2215338383666441, 1903569501302605,
+                49033973033940, 305703433934152
+#else
+                66172485, 16086690, 23751945, 33011114, 65941325, 28365395,
+                9137108, 730663, 9835848, 4555336
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                94653405416909, 1386121349852999, 1062130477891762,
+                36553947479274, 833669648948846
+#else
+                43732429, 1410445, 44855111, 20654817, 30867634, 15826977,
+                17693930, 544696, 55123566, 12422645
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1432015813136298, 440364795295369, 1395647062821501,
+                1976874522764578, 934452372723352
+#else
+                31117226, 21338698, 53606025, 6561946, 57231997, 20796761,
+                61990178, 29457725, 29120152, 13924425
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1296625309219774, 2068273464883862, 1858621048097805,
+                1492281814208508, 2235868981918946
+#else
+                49707966, 19321222, 19675798, 30819676, 56101901, 27695611,
+                57724924, 22236731, 7240930, 33317044
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1490330266465570, 1858795661361448, 1436241134969763,
+                294573218899647, 1208140011028933
+#else
+                35747106, 22207651, 52101416, 27698213, 44655523, 21401660,
+                1222335, 4389483, 3293637, 18002689
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1282462923712748, 741885683986255, 2027754642827561,
+                518989529541027, 1826610009555945
+#else
+                50424044, 19110186, 11038543, 11054958, 53307689, 30215898,
+                42789283, 7733546, 12796905, 27218610
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1525827120027511, 723686461809551, 1597702369236987,
+                244802101764964, 1502833890372311
+#else
+                58349431, 22736595, 41689999, 10783768, 36493307, 23807620,
+                38855524, 3647835, 3222231, 22393970
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                113622036244513, 1233740067745854, 674109952278496,
+                2114345180342965, 166764512856263
+#else
+                18606113, 1693100, 41660478, 18384159, 4112352, 10045021,
+                23603893, 31506198, 59558087, 2484984
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2041668749310338, 2184405322203901, 1633400637611036,
+                2110682505536899, 2048144390084644
+#else
+                9255298, 30423235, 54952701, 32550175, 13098012, 24339566,
+                16377219, 31451620, 47306788, 30519729
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                503058759232932, 760293024620937, 2027152777219493,
+                666858468148475, 1539184379870952
+#else
+                44379556, 7496159, 61366665, 11329248, 19991973, 30206930,
+                35390715, 9936965, 37011176, 22935634
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1916168475367211, 915626432541343, 883217071712575,
+                363427871374304, 1976029821251593
+#else
+                21878571, 28553135, 4338335, 13643897, 64071999, 13160959,
+                19708896, 5415497, 59748361, 29445138
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                678039535434506, 570587290189340, 1605302676614120,
+                2147762562875701, 1706063797091704
+#else
+                27736842, 10103576, 12500508, 8502413, 63695848, 23920873,
+                10436917, 32004156, 43449720, 25422331
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1439489648586438, 2194580753290951, 832380563557396,
+                561521973970522, 584497280718389
+#else
+                19492550, 21450067, 37426887, 32701801, 63900692, 12403436,
+                30066266, 8367329, 13243957, 8709688
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                187989455492609, 681223515948275, 1933493571072456,
+                1872921007304880, 488162364135671
+#else
+                12015105, 2801261, 28198131, 10151021, 24818120, 28811299,
+                55914672, 27908697, 5150967, 7274186
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1413466089534451, 410844090765630, 1397263346404072,
+                408227143123410, 1594561803147811
+#else
+                2831347, 21062286, 1478974, 6122054, 23825128, 20820846,
+                31097298, 6083058, 31021603, 23760822
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2102170800973153, 719462588665004, 1479649438510153,
+                1097529543970028, 1302363283777685
+#else
+                64578913, 31324785, 445612, 10720828, 53259337, 22048494,
+                43601132, 16354464, 15067285, 19406725
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                942065717847195, 1069313679352961, 2007341951411051,
+                70973416446291, 1419433790163706
+#else
+                7840923, 14037873, 33744001, 15934015, 66380651, 29911725,
+                21403987, 1057586, 47729402, 21151211
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1146565545556377, 1661971299445212, 406681704748893,
+                564452436406089, 1109109865829139
+#else
+                915865, 17085158, 15608284, 24765302, 42751837, 6060029,
+                49737545, 8410996, 59888403, 16527024
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2214421081775077, 1165671861210569, 1890453018796184,
+                3556249878661, 442116172656317
+#else
+                32922597, 32997445, 20336073, 17369864, 10903704, 28169945,
+                16957573, 52992, 23834301, 6588044
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                753830546620811, 1666955059895019, 1530775289309243,
+                1119987029104146, 2164156153857580
+#else
+                32752011, 11232950, 3381995, 24839566, 22652987, 22810329,
+                17159698, 16689107, 46794284, 32248439
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                615171919212796, 1523849404854568, 854560460547503,
+                2067097370290715, 1765325848586042
+#else
+                62419196, 9166775, 41398568, 22707125, 11576751, 12733943,
+                7924251, 30802151, 1976122, 26305405
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1094538949313667, 1796592198908825, 870221004284388,
+                2025558921863561, 1699010892802384
+#else
+                21251203, 16309901, 64125849, 26771309, 30810596, 12967303,
+                156041, 30183180, 12331344, 25317235
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1951351290725195, 1916457206844795, 198025184438026,
+                1909076887557595, 1938542290318919
+#else
+                8651595, 29077400, 51023227, 28557437, 13002506, 2950805,
+                29054427, 28447462, 10008135, 28886531
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1014323197538413, 869150639940606, 1756009942696599,
+                1334952557375672, 1544945379082874
+#else
+                31486061, 15114593, 52847614, 12951353, 14369431, 26166587,
+                16347320, 19892343, 8684154, 23021480
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                764055910920305, 1603590757375439, 146805246592357,
+                1843313433854297, 954279890114939
+#else
+                19443825, 11385320, 24468943, 23895364, 43189605, 2187568,
+                40845657, 27467510, 31316347, 14219878
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                80113526615750, 764536758732259, 1055139345100233,
+                469252651759390, 617897512431515
+#else
+                38514374, 1193784, 32245219, 11392485, 31092169, 15722801,
+                27146014, 6992409, 29126555, 9207390
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                74497112547268, 740094153192149, 1745254631717581,
+                727713886503130, 1283034364416928
+#else
+                32382916, 1110093, 18477781, 11028262, 39697101, 26006320,
+                62128346, 10843781, 59151264, 19118701
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                525892105991110, 1723776830270342, 1476444848991936,
+                573789489857760, 133864092632978
+#else
+                2814918, 7836403, 27519878, 25686276, 46214848, 22000742,
+                45614304, 8550129, 28346258, 1994730
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                542611720192581, 1986812262899321, 1162535242465837,
+                481498966143464, 544600533583622
+#else
+                47530565, 8085544, 53108345, 29605809, 2785837, 17323125,
+                47591912, 7174893, 22628102, 8115180
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                64123227344372, 1239927720647794, 1360722983445904,
+                222610813654661, 62429487187991
+#else
+                36703732, 955510, 55975026, 18476362, 34661776, 20276352,
+                41457285, 3317159, 57165847, 930271
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1793193323953132, 91096687857833, 70945970938921,
+                2158587638946380, 1537042406482111
+#else
+                51805164, 26720662, 28856489, 1357446, 23421993, 1057177,
+                24091212, 32165462, 44343487, 22903716
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1895854577604609, 1394895708949416, 1728548428495944,
+                1140864900240149, 563645333603061
+#else
+                44357633, 28250434, 54201256, 20785565, 51297352, 25757378,
+                52269845, 17000211, 65241845, 8398969
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                141358280486863, 91435889572504, 1087208572552643,
+                1829599652522921, 1193307020643647
+#else
+                35139535, 2106402, 62372504, 1362500, 12813763, 16200670,
+                22981545, 27263159, 18009407, 17781660
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1611230858525381, 950720175540785, 499589887488610,
+                2001656988495019, 88977313255908
+#else
+                49887941, 24009210, 39324209, 14166834, 29815394, 7444469,
+                29551787, 29827013, 19288548, 1325865
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1189080501479658, 2184348804772597, 1040818725742319,
+                2018318290311834, 1712060030915354
+#else
+                15100138, 17718680, 43184885, 32549333, 40658671, 15509407,
+                12376730, 30075286, 33166106, 25511682
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                873966876953756, 1090638350350440, 1708559325189137,
+                672344594801910, 1320437969700239
+#else
+                20909212, 13023121, 57899112, 16251777, 61330449, 25459517,
+                12412150, 10018715, 2213263, 19676059
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1508590048271766, 1131769479776094, 101550868699323,
+                428297785557897, 561791648661744
+#else
+                32529814, 22479743, 30361438, 16864679, 57972923, 1513225,
+                22922121, 6382134, 61341936, 8371347
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                756417570499462, 237882279232602, 2136263418594016,
+                1701968045454886, 703713185137472
+#else
+                9923462, 11271500, 12616794, 3544722, 37110496, 31832805,
+                12891686, 25361300, 40665920, 10486143
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1781187809325462, 1697624151492346, 1381393690939988,
+                175194132284669, 1483054666415238
+#else
+                44511638, 26541766, 8587002, 25296571, 4084308, 20584370,
+                361725, 2610596, 43187334, 22099236
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2175517777364616, 708781536456029, 955668231122942,
+                1967557500069555, 2021208005604118
+#else
+                5408392, 32417741, 62139741, 10561667, 24145918, 14240566,
+                31319731, 29318891, 19985174, 30118346
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1115135966606887, 224217372950782, 915967306279222,
+                593866251291540, 561747094208006
+#else
+                53114407, 16616820, 14549246, 3341099, 32155958, 13648976,
+                49531796, 8849296, 65030, 8370684
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1443163092879439, 391875531646162, 2180847134654632,
+                464538543018753, 1594098196837178
+#else
+                58787919, 21504805, 31204562, 5839400, 46481576, 32497154,
+                47665921, 6922163, 12743482, 23753914
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                850858855888869, 319436476624586, 327807784938441,
+                740785849558761, 17128415486016
+#else
+                64747493, 12678784, 28815050, 4759974, 43215817, 4884716,
+                23783145, 11038569, 18800704, 255233
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2132756334090067, 536247820155645, 48907151276867,
+                608473197600695, 1261689545022784
+#else
+                61839187, 31780545, 13957885, 7990715, 23132995, 728773,
+                13393847, 9066957, 19258688, 18800639
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1525176236978354, 974205476721062, 293436255662638,
+                148269621098039, 137961998433963
+#else
+                64172210, 22726896, 56676774, 14516792, 63468078, 4372540,
+                35173943, 2209389, 65584811, 2055793
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1121075518299410, 2071745529082111, 1265567917414828,
+                1648196578317805, 496232102750820
+#else
+                580882, 16705327, 5468415, 30871414, 36182444, 18858431,
+                59905517, 24560042, 37087844, 7394434
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                122321229299801, 1022922077493685, 2001275453369484,
+                2017441881607947, 993205880778002
+#else
+                23838809, 1822728, 51370421, 15242726, 8318092, 29821328,
+                45436683, 30062226, 62287122, 14799920
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                654925550560074, 1168810995576858, 575655959430926,
+                905758704861388, 496774564663534
+#else
+                13345610, 9759151, 3371034, 17416641, 16353038, 8577942,
+                31129804, 13496856, 58052846, 7402517
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1954109525779738, 2117022646152485, 338102630417180,
+                1194140505732026, 107881734943492
+#else
+                2286874, 29118501, 47066405, 31546095, 53412636, 5038121,
+                11006906, 17794080, 8205060, 1607563
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1714785840001267, 2036500018681589, 1876380234251966,
+                2056717182974196, 1645855254384642
+#else
+                14414067, 25552300, 3331829, 30346215, 22249150, 27960244,
+                18364660, 30647474, 30019586, 24525154
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                106431476499341, 62482972120563, 1513446655109411,
+                807258751769522, 538491469114
+#else
+                39420813, 1585952, 56333811, 931068, 37988643, 22552112,
+                52698034, 12029092, 9944378, 8024
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2002850762893643, 1243624520538135, 1486040410574605,
+                2184752338181213, 378495998083531
+#else
+                4368715, 29844802, 29874199, 18531449, 46878477, 22143727,
+                50994269, 32555346, 58966475, 5640029
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                922510868424903, 1089502620807680, 402544072617374,
+                1131446598479839, 1290278588136533
+#else
+                10299591, 13746483, 11661824, 16234854, 7630238, 5998374,
+                9809887, 16859868, 15219797, 19226649
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1867998812076769, 715425053580701, 39968586461416,
+                2173068014586163, 653822651801304
+#else
+                27425505, 27835351, 3055005, 10660664, 23458024, 595578,
+                51710259, 32381236, 48766680, 9742716
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                162892278589453, 182585796682149, 75093073137630,
+                497037941226502, 133871727117371
+#else
+                6744077, 2427284, 26042789, 2720740, 66260958, 1118973,
+                32324614, 7406442, 12420155, 1994844
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1914596576579670, 1608999621851578, 1987629837704609,
+                1519655314857977, 1819193753409464
+#else
+                14012502, 28529712, 48724410, 23975962, 40623521, 29617992,
+                54075385, 22644628, 24319928, 27108099
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1949315551096831, 1069003344994464, 1939165033499916,
+                1548227205730856, 1933767655861407
+#else
+                16412671, 29047065, 10772640, 15929391, 50040076, 28895810,
+                10555944, 23070383, 37006495, 28815383
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1730519386931635, 1393284965610134, 1597143735726030,
+                416032382447158, 1429665248828629
+#else
+                22397363, 25786748, 57815702, 20761563, 17166286, 23799296,
+                39775798, 6199365, 21880021, 21303672
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                360275475604565, 547835731063078, 215360904187529,
+                596646739879007, 332709650425085
+#else
+                62825557, 5368522, 35991846, 8163388, 36785801, 3209127,
+                16557151, 8890729, 8840445, 4957760
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                47602113726801, 1522314509708010, 437706261372925,
+                814035330438027, 335930650933545
+#else
+                51661137, 709326, 60189418, 22684253, 37330941, 6522331,
+                45388683, 12130071, 52312361, 5005756
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1291597595523886, 1058020588994081, 402837842324045,
+                1363323695882781, 2105763393033193
+#else
+                64994094, 19246303, 23019041, 15765735, 41839181, 6002751,
+                10183197, 20315106, 50713577, 31378319
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                109521982566564, 1715257748585139, 1112231216891516,
+                2046641005101484, 134249157157013
+#else
+                48083108, 1632004, 13466291, 25559332, 43468412, 16573536,
+                35094956, 30497327, 22208661, 2000468
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2156991030936798, 2227544497153325, 1869050094431622,
+                754875860479115, 1754242344267058
+#else
+                3065054, 32141671, 41510189, 33192999, 49425798, 27851016,
+                58944651, 11248526, 63417650, 26140247
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1846089562873800, 98894784984326, 1412430299204844,
+                171351226625762, 1100604760929008
+#else
+                10379208, 27508878, 8877318, 1473647, 37817580, 21046851,
+                16690914, 2553332, 63976176, 16400288
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                84172382130492, 499710970700046, 425749630620778,
+                1762872794206857, 612842602127960
+#else
+                15716668, 1254266, 48636174, 7446273, 58659946, 6344163,
+                45011593, 26268851, 26894936, 9132066
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                868309334532756, 1703010512741873, 1952690008738057,
+                4325269926064, 2071083554962116
+#else
+                24158868, 12938817, 11085297, 25376834, 39045385, 29097348,
+                36532400, 64451, 60291780, 30861549
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                523094549451158, 401938899487815, 1407690589076010,
+                2022387426254453, 158660516411257
+#else
+                13488534, 7794716, 22236231, 5989356, 25426474, 20976224,
+                2350709, 30135921, 62420857, 2364225
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                612867287630009, 448212612103814, 571629077419196,
+                1466796750919376, 1728478129663858
+#else
+                16335033, 9132434, 25640582, 6678888, 1725628, 8517937,
+                55301840, 21856974, 15445874, 25756331
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1723848973783452, 2208822520534681, 1718748322776940,
+                1974268454121942, 1194212502258141
+#else
+                29004188, 25687351, 28661401, 32914020, 54314860, 25611345,
+                31863254, 29418892, 66830813, 17795152
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1254114807944608, 977770684047110, 2010756238954993,
+                1783628927194099, 1525962994408256
+#else
+                60986784, 18687766, 38493958, 14569918, 56250865, 29962602,
+                10343411, 26578142, 37280576, 22738620
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                232464058235826, 1948628555342434, 1835348780427694,
+                1031609499437291, 64472106918373
+#else
+                27081650, 3463984, 14099042, 29036828, 1616302, 27348828,
+                29542635, 15372179, 17293797, 960709
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                767338676040683, 754089548318405, 1523192045639075,
+                435746025122062, 512692508440385
+#else
+                20263915, 11434237, 61343429, 11236809, 13505955, 22697330,
+                50997518, 6493121, 47724353, 7639713
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1255955808701983, 1700487367990941, 1166401238800299,
+                1175121994891534, 1190934801395380
+#else
+                64278047, 18715199, 25403037, 25339236, 58791851, 17380732,
+                18006286, 17510682, 29994676, 17746311
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                349144008168292, 1337012557669162, 1475912332999108,
+                1321618454900458, 47611291904320
+#else
+                9769828, 5202651, 42951466, 19923039, 39057860, 21992807,
+                42495722, 19693649, 35924288, 709463
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                877519947135419, 2172838026132651, 272304391224129,
+                1655143327559984, 886229406429814
+#else
+                12286395, 13076066, 45333675, 32377809, 42105665, 4057651,
+                35090736, 24663557, 16102006, 13205847
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                375806028254706, 214463229793940, 572906353144089,
+                572168269875638, 697556386112979
+#else
+                13733362, 5599946, 10557076, 3195751, 61550873, 8536969,
+                41568694, 8525971, 10151379, 10394400
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1168827102357844, 823864273033637, 2071538752104697,
+                788062026895924, 599578340743362
+#else
+                4024660, 17416881, 22436261, 12276534, 58009849, 30868332,
+                19698228, 11743039, 33806530, 8934413
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1948116082078088, 2054898304487796, 2204939184983900,
+                210526805152138, 786593586607626
+#else
+                51229064, 29029191, 58528116, 30620370, 14634844, 32856154,
+                57659786, 3137093, 55571978, 11721157
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1915320147894736, 156481169009469, 655050471180417,
+                592917090415421, 2165897438660879
+#else
+                17555920, 28540494, 8268605, 2331751, 44370049, 9761012,
+                9319229, 8835153, 57903375, 32274386
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1726336468579724, 1119932070398949, 1929199510967666,
+                33918788322959, 1836837863503150
+#else
+                66647436, 25724417, 20614117, 16688288, 59594098, 28747312,
+                22300303, 505429, 6108462, 27371017
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                829996854845988, 217061778005138, 1686565909803640,
+                1346948817219846, 1723823550730181
+#else
+                62038564, 12367916, 36445330, 3234472, 32617080, 25131790,
+                29880582, 20071101, 40210373, 25686972
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                384301494966394, 687038900403062, 2211195391021739,
+                254684538421383, 1245698430589680
+#else
+                35133562, 5726538, 26934134, 10237677, 63935147, 32949378,
+                24199303, 3795095, 7592688, 18562353
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1247567493562688, 1978182094455847, 183871474792955,
+                806570235643435, 288461518067916
+#else
+                21594432, 18590204, 17466407, 29477210, 32537083, 2739898,
+                6407723, 12018833, 38852812, 4298411
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1449077384734201, 38285445457996, 2136537659177832,
+                2146493000841573, 725161151123125
+#else
+                46458361, 21592935, 39872588, 570497, 3767144, 31836892,
+                13891941, 31985238, 13717173, 10805743
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1201928866368855, 800415690605445, 1703146756828343,
+                997278587541744, 1858284414104014
+#else
+                52432215, 17910135, 15287173, 11927123, 24177847, 25378864,
+                66312432, 14860608, 40169934, 27690595
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                356468809648877, 782373916933152, 1718002439402870,
+                1392222252219254, 663171266061951
+#else
+                12962541, 5311799, 57048096, 11658279, 18855286, 25600231,
+                13286262, 20745728, 62727807, 9882021
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                759628738230460, 1012693474275852, 353780233086498,
+                246080061387552, 2030378857679162
+#else
+                18512060, 11319350, 46985740, 15090308, 18818594, 5271736,
+                44380960, 3666878, 43141434, 30255002
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2040672435071076, 888593182036908, 1298443657189359,
+                1804780278521327, 354070726137060
+#else
+                60319844, 30408388, 16192428, 13241070, 15898607, 19348318,
+                57023983, 26893321, 64705764, 5276064
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1894938527423184, 1463213041477277, 474410505497651,
+                247294963033299, 877975941029128
+#else
+                30169808, 28236784, 26306205, 21803573, 27814963, 7069267,
+                7152851, 3684982, 1449224, 13082861
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                207937160991127, 12966911039119, 820997788283092,
+                1010440472205286, 1701372890140810
+#else
+                10342807, 3098505, 2119311, 193222, 25702612, 12233820,
+                23697382, 15056736, 46092426, 25352431
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                218882774543183, 533427444716285, 1233243976733245,
+                435054256891319, 1509568989549904
+#else
+                33958735, 3261607, 22745853, 7948688, 19370557, 18376767,
+                40936887, 6482813, 56808784, 22494330
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1888838535711826, 1052177758340622, 1213553803324135,
+                169182009127332, 463374268115872
+#else
+                32869458, 28145887, 25609742, 15678670, 56421095, 18083360,
+                26112420, 2521008, 44444576, 6904814
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                299137589460312, 1594371588983567, 868058494039073,
+                257771590636681, 1805012993142921
+#else
+                29506904, 4457497, 3377935, 23757988, 36598817, 12935079,
+                1561737, 3841096, 38105225, 26896789
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1806842755664364, 2098896946025095, 1356630998422878,
+                1458279806348064, 347755825962072
+#else
+                10340844, 26924055, 48452231, 31276001, 12621150, 20215377,
+                30878496, 21730062, 41524312, 5181965
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1402334161391744, 1560083671046299, 1008585416617747,
+                1147797150908892, 1420416683642459
+#else
+                25940096, 20896407, 17324187, 23247058, 58437395, 15029093,
+                24396252, 17103510, 64786011, 21165857
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                665506704253369, 273770475169863, 799236974202630,
+                848328990077558, 1811448782807931
+#else
+                45343161, 9916822, 65808455, 4079497, 66080518, 11909558,
+                1782390, 12641087, 20603771, 26992690
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1468412523962641, 771866649897997, 1931766110147832,
+                799561180078482, 524837559150077
+#else
+                48226577, 21881051, 24849421, 11501709, 13161720, 28785558,
+                1925522, 11914390, 4662781, 7820689
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2223212657821850, 630416247363666, 2144451165500328,
+                816911130947791, 1024351058410032
+#else
+                12241050, 33128450, 8132690, 9393934, 32846760, 31954812,
+                29749455, 12172924, 16136752, 15264020
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1266603897524861, 156378408858100, 1275649024228779,
+                447738405888420, 253186462063095
+#else
+                56758909, 18873868, 58896884, 2330219, 49446315, 19008651,
+                10658212, 6671822, 19012087, 3772772
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2022215964509735, 136144366993649, 1800716593296582,
+                1193970603800203, 871675847064218
+#else
+                3753511, 30133366, 10617073, 2028709, 14841030, 26832768,
+                28718731, 17791548, 20527770, 12988982
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1862751661970328, 851596246739884, 1519315554814041,
+                1542798466547449, 1417975335901520
+#else
+                52286360, 27757162, 63400876, 12689772, 66209881, 22639565,
+                42925817, 22989488, 3299664, 21129479
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1228168094547481, 334133883362894, 587567568420081,
+                433612590281181, 603390400373205
+#else
+                50331161, 18301130, 57466446, 4978982, 3308785, 8755439,
+                6943197, 6461331, 41525717, 8991217
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                121893973206505, 1843345804916664, 1703118377384911,
+                497810164760654, 101150811654673
+#else
+                49882601, 1816361, 65435576, 27467992, 31783887, 25378441,
+                34160718, 7417949, 36866577, 1507264
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                458346255946468, 290909935619344, 1452768413850679,
+                550922875254215, 1537286854336538
+#else
+                29692644, 6829891, 56610064, 4334895, 20945975, 21647936,
+                38221255, 8209390, 14606362, 22907359
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                584322311184395, 380661238802118, 114839394528060,
+                655082270500073, 2111856026034852
+#else
+                63627275, 8707080, 32188102, 5672294, 22096700, 1711240,
+                34088169, 9761486, 4170404, 31469107
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                996965581008991, 2148998626477022, 1012273164934654,
+                1073876063914522, 1688031788934939
+#else
+                55521375, 14855944, 62981086, 32022574, 40459774, 15084045,
+                22186522, 16002000, 52832027, 25153633
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                923487018849600, 2085106799623355, 528082801620136,
+                1606206360876188, 735907091712524
+#else
+                62297408, 13761028, 35404987, 31070512, 63796392, 7869046,
+                59995292, 23934339, 13240844, 10965870
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1697697887804317, 1335343703828273, 831288615207040,
+                949416685250051, 288760277392022
+#else
+                59366301, 25297669, 52340529, 19898171, 43876480, 12387165,
+                4498947, 14147411, 29514390, 4302863
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1419122478109648, 1325574567803701, 602393874111094,
+                2107893372601700, 1314159682671307
+#else
+                53695440, 21146572, 20757301, 19752600, 14785142, 8976368,
+                62047588, 31410058, 17846987, 19582505
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2201150872731804, 2180241023425241, 97663456423163,
+                1633405770247824, 848945042443986
+#else
+                64864412, 32799703, 62511833, 32488122, 60861691, 1455298,
+                45461136, 24339642, 61886162, 12650266
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1173339555550611, 818605084277583, 47521504364289,
+                924108720564965, 735423405754506
+#else
+                57202067, 17484121, 21134159, 12198166, 40044289, 708125,
+                387813, 13770293, 47974538, 10958662
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                830104860549448, 1886653193241086, 1600929509383773,
+                1475051275443631, 286679780900937
+#else
+                22470984, 12369526, 23446014, 28113323, 45588061, 23855708,
+                55336367, 21979976, 42025033, 4271861
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1577111294832995, 1030899169768747, 144900916293530,
+                1964672592979567, 568390100955250
+#else
+                41939299, 23500789, 47199531, 15361594, 61124506, 2159191,
+                75375, 29275903, 34582642, 8469672
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                278388655910247, 487143369099838, 927762205508727,
+                181017540174210, 1616886700741287
+#else
+                15854951, 4148314, 58214974, 7259001, 11666551, 13824734,
+                36577666, 2697371, 24154791, 24093489
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1191033906638969, 940823957346562, 1606870843663445,
+                861684761499847, 658674867251089
+#else
+                15446137, 17747788, 29759746, 14019369, 30811221, 23944241,
+                35526855, 12840103, 24913809, 9815020
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1875032594195546, 1427106132796197, 724736390962158,
+                901860512044740, 635268497268760
+#else
+                62399578, 27940162, 35267365, 21265538, 52665326, 10799413,
+                58005188, 13438768, 18735128, 9466238
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                622869792298357, 1903919278950367, 1922588621661629,
+                1520574711600434, 1087100760174640
+#else
+                11933045, 9281483, 5081055, 28370608, 64480701, 28648802,
+                59381042, 22658328, 44380208, 16199063
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                25465949416618, 1693639527318811, 1526153382657203,
+                125943137857169, 145276964043999
+#else
+                14576810, 379472, 40322331, 25237195, 37682355, 22741457,
+                67006097, 1876698, 30801119, 2164795
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                214739857969358, 920212862967915, 1939901550972269,
+                1211862791775221, 85097515720120
+#else
+                15995086, 3199873, 13672555, 13712240, 47730029, 28906785,
+                54027253, 18058162, 53616056, 1268051
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2006245852772938, 734762734836159, 254642929763427,
+                1406213292755966, 239303749517686
+#else
+                56818250, 29895392, 63822271, 10948817, 23037027, 3794475,
+                63638526, 20954210, 50053494, 3565903
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1619678837192149, 1919424032779215, 1357391272956794,
+                1525634040073113, 1310226789796241
+#else
+                29210069, 24135095, 61189071, 28601646, 10834810, 20226706,
+                50596761, 22733718, 39946641, 19523900
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1040763709762123, 1704449869235352, 605263070456329,
+                1998838089036355, 1312142911487502
+#else
+                53946955, 15508587, 16663704, 25398282, 38758921, 9019122,
+                37925443, 29785008, 2244110, 19552453
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1996723311435669, 1844342766567060, 985455700466044,
+                1165924681400960, 311508689870129
+#else
+                61955989, 29753495, 57802388, 27482848, 16243068, 14684434,
+                41435776, 17373631, 13491505, 4641841
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                43173156290518, 2202883069785309, 1137787467085917,
+                1733636061944606, 1394992037553852
+#else
+                10813398, 643330, 47920349, 32825515, 30292061, 16954354,
+                27548446, 25833190, 14476988, 20787001
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                670078326344559, 555655025059356, 471959386282438,
+                2141455487356409, 849015953823125
+#else
+                10292079, 9984945, 6481436, 8279905, 59857350, 7032742,
+                27282937, 31910173, 39196053, 12651323
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2197214573372804, 794254097241315, 1030190060513737,
+                267632515541902, 2040478049202624
+#else
+                35923332, 32741048, 22271203, 11835308, 10201545, 15351028,
+                17099662, 3988035, 21721536, 30405492
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1812516004670529, 1609256702920783, 1706897079364493,
+                258549904773295, 996051247540686
+#else
+                10202177, 27008593, 35735631, 23979793, 34958221, 25434748,
+                54202543, 3852693, 13216206, 14842320
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1540374301420584, 1764656898914615, 1810104162020396,
+                923808779163088, 664390074196579
+#else
+                51293224, 22953365, 60569911, 26295436, 60124204, 26972653,
+                35608016, 13765823, 39674467, 9900183
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1323460699404750, 1262690757880991, 871777133477900,
+                1060078894988977, 1712236889662886
+#else
+                14465486, 19721101, 34974879, 18815558, 39665676, 12990491,
+                33046193, 15796406, 60056998, 25514317
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1696163952057966, 1391710137550823, 608793846867416,
+                1034391509472039, 1780770894075012
+#else
+                30924398, 25274812, 6359015, 20738097, 16508376, 9071735,
+                41620263, 15413634, 9524356, 26535554
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1367603834210841, 2131988646583224, 890353773628144,
+                1908908219165595, 270836895252891
+#else
+                12274201, 20378885, 32627640, 31769106, 6736624, 13267305,
+                5237659, 28444949, 15663515, 4035784
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                597536315471731, 40375058742586, 1942256403956049,
+                1185484645495932, 312666282024145
+#else
+                64157555, 8903984, 17349946, 601635, 50676049, 28941875,
+                53376124, 17665097, 44850385, 4659090
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1919411405316294, 1234508526402192, 1066863051997083,
+                1008444703737597, 1348810787701552
+#else
+                50192582, 28601458, 36715152, 18395610, 20774811, 15897498,
+                5736189, 15026997, 64930608, 20098846
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2102881477513865, 1570274565945361, 1573617900503708,
+                18662635732583, 2232324307922098
+#else
+                58249865, 31335375, 28571665, 23398914, 66634396, 23448733,
+                63307367, 278094, 23440562, 33264224
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1853931367696942, 8107973870707, 350214504129299,
+                775206934582587, 1752317649166792
+#else
+                10226222, 27625730, 15139955, 120818, 52241171, 5218602,
+                32937275, 11551483, 50536904, 26111567
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1417148368003523, 721357181628282, 505725498207811,
+                373232277872983, 261634707184480
+#else
+                17932739, 21117156, 43069306, 10749059, 11316803, 7535897,
+                22503767, 5561594, 63462240, 3898660
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2186733281493267, 2250694917008620, 1014829812957440,
+                479998161452389, 83566193876474
+#else
+                7749907, 32584865, 50769132, 33537967, 42090752, 15122142,
+                65535333, 7152529, 21831162, 1245233
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1268116367301224, 560157088142809, 802626839600444,
+                2210189936605713, 1129993785579988
+#else
+                26958440, 18896406, 4314585, 8346991, 61431100, 11960071,
+                34519569, 32934396, 36706772, 16838219
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                615183387352312, 917611676109240, 878893615973325,
+                978940963313282, 938686890583575
+#else
+                54942968, 9166946, 33491384, 13673479, 29787085, 13096535,
+                6280834, 14587357, 44770839, 13987524
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                522024729211672, 1045059315315808, 1892245413707790,
+                1907891107684253, 2059998109500714
+#else
+                42758936, 7778774, 21116000, 15572597, 62275598, 28196653,
+                62807965, 28429792, 59639082, 30696363
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1799679152208884, 912132775900387, 25967768040979,
+                432130448590461, 274568990261996
+#else
+                9681908, 26817309, 35157219, 13591837, 60225043, 386949,
+                31622781, 6439245, 52527852, 4091396
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                98698809797682, 2144627600856209, 1907959298569602,
+                811491302610148, 1262481774981493
+#else
+                58682418, 1470726, 38999185, 31957441, 3978626, 28430809,
+                47486180, 12092162, 29077877, 18812444
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1791451399743152, 1713538728337276, 118349997257490,
+                1882306388849954, 158235232210248
+#else
+                5269168, 26694706, 53878652, 25533716, 25932562, 1763552,
+                61502754, 28048550, 47091016, 2357888
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1217809823321928, 2173947284933160, 1986927836272325,
+                1388114931125539, 12686131160169
+#else
+                32264008, 18146780, 61721128, 32394338, 65017541, 29607531,
+                23104803, 20684524, 5727337, 189038
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1650875518872272, 1136263858253897, 1732115601395988,
+                734312880662190, 1252904681142109
+#else
+                14609104, 24599962, 61108297, 16931650, 52531476, 25810533,
+                40363694, 10942114, 41219933, 18669734
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                372986456113865, 525430915458171, 2116279931702135,
+                501422713587815, 1907002872974925
+#else
+                20513481, 5557931, 51504251, 7829530, 26413943, 31535028,
+                45729895, 7471780, 13913677, 28416557
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                803147181835288, 868941437997146, 316299302989663,
+                943495589630550, 571224287904572
+#else
+                41534488, 11967825, 29233242, 12948236, 60354399, 4713226,
+                58167894, 14059179, 12878652, 8511905
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                227742695588364, 1776969298667369, 628602552821802,
+                457210915378118, 2041906378111140
+#else
+                41452044, 3393630, 64153449, 26478905, 64858154, 9366907,
+                36885446, 6812973, 5568676, 30426776
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                815000523470260, 913085688728307, 1052060118271173,
+                1345536665214223, 541623413135555
+#else
+                11630004, 12144454, 2116339, 13606037, 27378885, 15676917,
+                49700111, 20050058, 52713667, 8070817
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1580216071604333, 1877997504342444, 857147161260913,
+                703522726778478, 2182763974211603
+#else
+                27117677, 23547054, 35826092, 27984343, 1127281, 12772488,
+                37262958, 10483305, 55556115, 32525717
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1870080310923419, 71988220958492, 1783225432016732,
+                615915287105016, 1035570475990230
+#else
+                10637467, 27866368, 5674780, 1072708, 40765276, 26572129,
+                65424888, 9177852, 39615702, 15431202
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                730987750830150, 857613889540280, 1083813157271766,
+                1002817255970169, 1719228484436074
+#else
+                20525126, 10892566, 54366392, 12779442, 37615830, 16150074,
+                38868345, 14943141, 52052074, 25618500
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                377616581647602, 1581980403078513, 804044118130621,
+                2034382823044191, 643844048472185
+#else
+                37084402, 5626925, 66557297, 23573344, 753597, 11981191,
+                25244767, 30314666, 63752313, 9594023
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                176957326463017, 1573744060478586, 528642225008045,
+                1816109618372371, 1515140189765006
+#else
+                43356201, 2636869, 61944954, 23450613, 585133, 7877383,
+                11345683, 27062142, 13352334, 22577348
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1888911448245718, 1387110895611080, 1924503794066429,
+                1731539523700949, 2230378382645454
+#else
+                65177046, 28146973, 3304648, 20669563, 17015805, 28677341,
+                37325013, 25801949, 53893326, 33235227
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                443392177002051, 233793396845137, 2199506622312416,
+                1011858706515937, 974676837063129
+#else
+                20239939, 6607058, 6203985, 3483793, 48721888, 32775202,
+                46385121, 15077869, 44358105, 14523816
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1846351103143623, 1949984838808427, 671247021915253,
+                1946756846184401, 1929296930380217
+#else
+                27406023, 27512775, 27423595, 29057038, 4996213, 10002360,
+                38266833, 29008937, 36936121, 28748764
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                849646212452002, 1410198775302919, 73767886183695,
+                1641663456615812, 762256272452411
+#else
+                11374242, 12660715, 17861383, 21013599, 10935567, 1099227,
+                53222788, 24462691, 39381819, 11358503
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                692017667358279, 723305578826727, 1638042139863265,
+                748219305990306, 334589200523901
+#else
+                54378055, 10311866, 1510375, 10778093, 64989409, 24408729,
+                32676002, 11149336, 40985213, 4985767
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                22893968530686, 2235758574399251, 1661465835630252,
+                925707319443452, 1203475116966621
+#else
+                48012542, 341146, 60911379, 33315398, 15756972, 24757770,
+                66125820, 13794113, 47694557, 17933176
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                801299035785166, 1733292596726131, 1664508947088596,
+                467749120991922, 1647498584535623
+#else
+                6490062, 11940286, 25495923, 25828072, 8668372, 24803116,
+                3367602, 6970005, 65417799, 24549641
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                903105258014366, 427141894933047, 561187017169777,
+                1884330244401954, 1914145708422219
+#else
+                1656478, 13457317, 15370807, 6364910, 13605745, 8362338,
+                47934242, 28078708, 50312267, 28522993
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1344191060517578, 1960935031767890, 1518838929955259,
+                1781502350597190, 1564784025565682
+#else
+                44835530, 20030007, 67044178, 29220208, 48503227, 22632463,
+                46537798, 26546453, 67009010, 23317098
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                673723351748086, 1979969272514923, 1175287312495508,
+                1187589090978666, 1881897672213940
+#else
+                17747446, 10039260, 19368299, 29503841, 46478228, 17513145,
+                31992682, 17696456, 37848500, 28042460
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1917185587363432, 1098342571752737, 5935801044414,
+                2000527662351839, 1538640296181569
+#else
+                31932008, 28568291, 47496481, 16366579, 22023614, 88450,
+                11371999, 29810185, 4882241, 22927527
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2495540013192, 678856913479236, 224998292422872,
+                219635787698590, 1972465269000940
+#else
+                29796488, 37186, 19818052, 10115756, 55279832, 3352735,
+                18551198, 3272828, 61917932, 29392022
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                271413961212179, 1353052061471651, 344711291283483,
+                2014925838520662, 2006221033113941
+#else
+                12501267, 4044383, 58495907, 20162046, 34678811, 5136598,
+                47878486, 30024734, 330069, 29895023
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                194583029968109, 514316781467765, 829677956235672,
+                1676415686873082, 810104584395840
+#else
+                6384877, 2899513, 17807477, 7663917, 64749976, 12363164,
+                25366522, 24980540, 66837568, 12071498
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1980510813313589, 1948645276483975, 152063780665900,
+                129968026417582, 256984195613935
+#else
+                58743349, 29511910, 25133447, 29037077, 60897836, 2265926,
+                34339246, 1936674, 61949167, 3829362
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1860190562533102, 1936576191345085, 461100292705964,
+                1811043097042830, 957486749306835
+#else
+                28425966, 27718999, 66531773, 28857233, 52891308, 6870929,
+                7921550, 26986645, 26333139, 14267664
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                796664815624365, 1543160838872951, 1500897791837765,
+                1667315977988401, 599303877030711
+#else
+                56041645, 11871230, 27385719, 22994888, 62522949, 22365119,
+                10004785, 24844944, 45347639, 8930323
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1151480509533204, 2136010406720455, 738796060240027,
+                319298003765044, 1150614464349587
+#else
+                45911060, 17158396, 25654215, 31829035, 12282011, 11008919,
+                1541940, 4757911, 40617363, 17145491
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1731069268103150, 735642447616087, 1364750481334268,
+                417232839982871, 927108269127661
+#else
+                13537262, 25794942, 46504023, 10961926, 61186044, 20336366,
+                53952279, 6217253, 51165165, 13814989
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1017222050227968, 1987716148359, 2234319589635701,
+                621282683093392, 2132553131763026
+#else
+                49686272, 15157789, 18705543, 29619, 24409717, 33293956,
+                27361680, 9257833, 65152338, 31777517
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1567828528453324, 1017807205202360, 565295260895298,
+                829541698429100, 307243822276582
+#else
+                42063564, 23362465, 15366584, 15166509, 54003778, 8423555,
+                37937324, 12361134, 48422886, 4578289
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                249079270936248, 1501514259790706, 947909724204848,
+                944551802437487, 552658763982480
+#else
+                24579768, 3711570, 1342322, 22374306, 40103728, 14124955,
+                44564335, 14074918, 21964432, 8235257
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2089966982947227, 1854140343916181, 2151980759220007,
+                2139781292261749, 158070445864917
+#else
+                60580251, 31142934, 9442965, 27628844, 12025639, 32067012,
+                64127349, 31885225, 13006805, 2355433
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1338766321464554, 1906702607371284, 1519569445519894,
+                115384726262267, 1393058953390992
+#else
+                50803946, 19949172, 60476436, 28412082, 16974358, 22643349,
+                27202043, 1719366, 1141648, 20758196
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1364621558265400, 1512388234908357, 1926731583198686,
+                2041482526432505, 920401122333774
+#else
+                54244920, 20334445, 58790597, 22536340, 60298718, 28710537,
+                13475065, 30420460, 32674894, 13715045
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1884844597333588, 601480070269079, 620203503079537,
+                1079527400117915, 1202076693132015
+#else
+                11423316, 28086373, 32344215, 8962751, 24989809, 9241752,
+                53843611, 16086211, 38367983, 17912338
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                840922919763324, 727955812569642, 1303406629750194,
+                522898432152867, 294161410441865
+#else
+                65699196, 12530727, 60740138, 10847386, 19531186, 19422272,
+                55399715, 7791793, 39862921, 4383346
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                353760790835310, 1598361541848743, 1122905698202299,
+                1922533590158905, 419107700666580
+#else
+                38137966, 5271446, 65842855, 23817442, 54653627, 16732598,
+                62246457, 28647982, 27193556, 6245191
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                359856369838236, 180914355488683, 861726472646627,
+                218807937262986, 575626773232501
+#else
+                51914908, 5362277, 65324971, 2695833, 4960227, 12840725,
+                23061898, 3260492, 22510453, 8577507
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                755467689082474, 909202735047934, 730078068932500,
+                936309075711518, 2007798262842972
+#else
+                54476394, 11257345, 34415870, 13548176, 66387860, 10879010,
+                31168030, 13952092, 37537372, 29918525
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1609384177904073, 362745185608627, 1335318541768201,
+                800965770436248, 547877979267412
+#else
+                3877321, 23981693, 32416691, 5405324, 56104457, 19897796,
+                3759768, 11935320, 5611860, 8164018
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                984339177776787, 815727786505884, 1645154585713747,
+                1659074964378553, 1686601651984156
+#else
+                50833043, 14667796, 15906460, 12155291, 44997715, 24514713,
+                32003001, 24722143, 5773084, 25132323
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1697863093781930, 599794399429786, 1104556219769607,
+                830560774794755, 12812858601017
+#else
+                43320746, 25300131, 1950874, 8937633, 18686727, 16459170,
+                66203139, 12376319, 31632953, 190926
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1168737550514982, 897832437380552, 463140296333799,
+                302564600022547, 2008360505135501
+#else
+                42515238, 17415546, 58684872, 13378745, 14162407, 6901328,
+                58820115, 4508563, 41767309, 29926903
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1856930662813910, 678090852002597, 1920179140755167,
+                1259527833759868, 55540971895511
+#else
+                8884438, 27670423, 6023973, 10104341, 60227295, 28612898,
+                18722940, 18768427, 65436375, 827624
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1158643631044921, 476554103621892, 178447851439725,
+                1305025542653569, 103433927680625
+#else
+                34388281, 17265135, 34605316, 7101209, 13354605, 2659080,
+                65308289, 19446395, 42230385, 1541285
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2176793111709008, 1576725716350391, 2009350167273523,
+                2012390194631546, 2125297410909580
+#else
+                2901328, 32436745, 3880375, 23495044, 49487923, 29941650,
+                45306746, 29986950, 20456844, 31669399
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                825403285195098, 2144208587560784, 1925552004644643,
+                1915177840006985, 1015952128947864
+#else
+                27019610, 12299467, 53450576, 31951197, 54247203, 28692960,
+                47568713, 28538373, 29439640, 15138866
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1807108316634472, 1534392066433717, 347342975407218,
+                1153820745616376, 7375003497471
+#else
+                21536104, 26928012, 34661045, 22864223, 44700786, 5175813,
+                61688824, 17193268, 7779327, 109896
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                983061001799725, 431211889901241, 2201903782961093,
+                817393911064341, 2214616493042167
+#else
+                30279725, 14648750, 59063993, 6425557, 13639621, 32810923,
+                28698389, 12180118, 23177719, 33000357
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                228567918409756, 865093958780220, 358083886450556,
+                159617889659320, 1360637926292598
+#else
+                26572828, 3405927, 35407164, 12890904, 47843196, 5335865,
+                60615096, 2378491, 4439158, 20275085
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                234147501399755, 2229469128637390, 2175289352258889,
+                1397401514549353, 1885288963089922
+#else
+                44392139, 3489069, 57883598, 33221678, 18875721, 32414337,
+                14819433, 20822905, 49391106, 28092994
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1111762412951562, 252849572507389, 1048714233823341,
+                146111095601446, 1237505378776770
+#else
+                62052362, 16566550, 15953661, 3767752, 56672365, 15627059,
+                66287910, 2177224, 8550082, 18440267
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1113790697840279, 1051167139966244, 1045930658550944,
+                2011366241542643, 1686166824620755
+#else
+                48635543, 16596774, 66727204, 15663610, 22860960, 15585581,
+                39264755, 29971692, 43848403, 25125843
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1054097349305049, 1872495070333352, 182121071220717,
+                1064378906787311, 100273572924182
+#else
+                34628313, 15707274, 58902952, 27902350, 29464557, 2713815,
+                44383727, 15860481, 45206294, 1494192
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1306410853171605, 1627717417672447, 50983221088417,
+                1109249951172250, 870201789081392
+#else
+                47546773, 19467038, 41524991, 24254879, 13127841, 759709,
+                21923482, 16529112, 8742704, 12967017
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                104233794644221, 1548919791188248, 2224541913267306,
+                2054909377116478, 1043803389015153
+#else
+                38643965, 1553204, 32536856, 23080703, 42417258, 33148257,
+                58194238, 30620535, 37205105, 15553882
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                216762189468802, 707284285441622, 190678557969733,
+                973969342604308, 1403009538434867
+#else
+                21877890, 3230008, 9881174, 10539357, 62311749, 2841331,
+                11543572, 14513274, 19375923, 20906471
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1279024291038477, 344776835218310, 273722096017199,
+                1834200436811442, 634517197663804
+#else
+                8832269, 19058947, 13253510, 5137575, 5037871, 4078777,
+                24880818, 27331716, 2862652, 9455043
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                343805853118335, 1302216857414201, 566872543223541,
+                2051138939539004, 321428858384280
+#else
+                29306751, 5123106, 20245049, 19404543, 9592565, 8447059,
+                65031740, 30564351, 15511448, 4789663
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                470067171324852, 1618629234173951, 2000092177515639,
+                7307679772789, 1117521120249968
+#else
+                46429108, 7004546, 8824831, 24119455, 63063159, 29803695,
+                61354101, 108892, 23513200, 16652362
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                278151578291475, 1810282338562947, 1771599529530998,
+                1383659409671631, 685373414471841
+#else
+                33852691, 4144781, 62632835, 26975308, 10770038, 26398890,
+                60458447, 20618131, 48789665, 10212859
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                577009397403102, 1791440261786291, 2177643735971638,
+                174546149911960, 1412505077782326
+#else
+                2756062, 8598110, 7383731, 26694540, 22312758, 32449420,
+                21179800, 2600940, 57120566, 21047965
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                893719721537457, 1201282458018197, 1522349501711173,
+                58011597740583, 1130406465887139
+#else
+                42463153, 13317461, 36659605, 17900503, 21365573, 22684775,
+                11344423, 864440, 64609187, 16844368
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                412607348255453, 1280455764199780, 2233277987330768,
+                14180080401665, 331584698417165
+#else
+                40676061, 6148328, 49924452, 19080277, 18782928, 33278435,
+                44547329, 211299, 2719757, 4940997
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                262483770854550, 990511055108216, 526885552771698,
+                571664396646158, 354086190278723
+#else
+                65784982, 3911312, 60160120, 14759764, 37081714, 7851206,
+                21690126, 8518463, 26699843, 5276295
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1820352417585487, 24495617171480, 1547899057533253,
+                10041836186225, 480457105094042
+#else
+                53958991, 27125364, 9396248, 365013, 24703301, 23065493,
+                1321585, 149635, 51656090, 7159368
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2023310314989233, 637905337525881, 2106474638900687,
+                557820711084072, 1687858215057826
+#else
+                9987761, 30149673, 17507961, 9505530, 9731535, 31388918,
+                22356008, 8312176, 22477218, 25151047
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1144168702609745, 604444390410187, 1544541121756138,
+                1925315550126027, 626401428894002
+#else
+                18155857, 17049442, 19744715, 9006923, 15154154, 23015456,
+                24256459, 28689437, 44560690, 9334108
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1922168257351784, 2018674099908659, 1776454117494445,
+                956539191509034, 36031129147635
+#else
+                2986088, 28642539, 10776627, 30080588, 10620589, 26471229,
+                45695018, 14253544, 44521715, 536905
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                544644538748041, 1039872944430374, 876750409130610,
+                710657711326551, 1216952687484972
+#else
+                4377737, 8115836, 24567078, 15495314, 11625074, 13064599,
+                7390551, 10589625, 10838060, 18134008
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                58242421545916, 2035812695641843, 2118491866122923,
+                1191684463816273, 46921517454099
+#else
+                47766460, 867879, 9277171, 30335973, 52677291, 31567988,
+                19295825, 17757482, 6378259, 699185
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                272268252444639, 1374166457774292, 2230115177009552,
+                1053149803909880, 1354288411641016
+#else
+                7895007, 4057113, 60027092, 20476675, 49222032, 33231305,
+                66392824, 15693154, 62063800, 20180469
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1857910905368338, 1754729879288912, 885945464109877,
+                1516096106802166, 1602902393369811
+#else
+                59371282, 27685029, 52542544, 26147512, 11385653, 13201616,
+                31730678, 22591592, 63190227, 23885106
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1193437069800958, 901107149704790, 999672920611411,
+                477584824802207, 364239578697845
+#else
+                10188286, 17783598, 59772502, 13427542, 22223443, 14896287,
+                30743455, 7116568, 45322357, 5427592
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                886299989548838, 1538292895758047, 1590564179491896,
+                1944527126709657, 837344427345298
+#else
+                696102, 13206899, 27047647, 22922350, 15285304, 23701253,
+                10798489, 28975712, 19236242, 12477404
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                754558365378305, 1712186480903618, 1703656826337531,
+                750310918489786, 518996040250900
+#else
+                55879425, 11243795, 50054594, 25513566, 66320635, 25386464,
+                63211194, 11180503, 43939348, 7733643
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1309847803895382, 1462151862813074, 211370866671570,
+                1544595152703681, 1027691798954090
+#else
+                17800790, 19518253, 40108434, 21787760, 23887826, 3149671,
+                23466177, 23016261, 10322026, 15313801
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                803217563745370, 1884799722343599, 1357706345069218,
+                2244955901722095, 730869460037413
+#else
+                26246234, 11968874, 32263343, 28085704, 6830754, 20231401,
+                51314159, 33452449, 42659621, 10890803
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                689299471295966, 1831210565161071, 1375187341585438,
+                1106284977546171, 1893781834054269
+#else
+                35743198, 10271362, 54448239, 27287163, 16690206, 20491888,
+                52126651, 16484930, 25180797, 28219548
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                696351368613042, 1494385251239250, 738037133616932,
+                636385507851544, 927483222611406
+#else
+                66522290, 10376443, 34522450, 22268075, 19801892, 10997610,
+                2276632, 9482883, 316878, 13820577
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1949114198209333, 1104419699537997, 783495707664463,
+                1747473107602770, 2002634765788641
+#else
+                57226037, 29044064, 64993357, 16457135, 56008783, 11674995,
+                30756178, 26039378, 30696929, 29841583
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1607325776830197, 530883941415333, 1451089452727895,
+                1581691157083423, 496100432831154
+#else
+                32988917, 23951020, 12499365, 7910787, 56491607, 21622917,
+                59766047, 23569034, 34759346, 7392472
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1068900648804224, 2006891997072550, 1134049269345549,
+                1638760646180091, 2055396084625778
+#else
+                58253184, 15927860, 9866406, 29905021, 64711949, 16898650,
+                36699387, 24419436, 25112946, 30627788
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2222475519314561, 1870703901472013, 1884051508440561,
+                1344072275216753, 1318025677799069
+#else
+                64604801, 33117465, 25621773, 27875660, 15085041, 28074555,
+                42223985, 20028237, 5537437, 19640113
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                155711679280656, 681100400509288, 389811735211209,
+                2135723811340709, 408733211204125
+#else
+                55883280, 2320284, 57524584, 10149186, 33664201, 5808647,
+                52232613, 31824764, 31234589, 6090599
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                7813206966729, 194444201427550, 2071405409526507,
+                1065605076176312, 1645486789731291
+#else
+                57475529, 116425, 26083934, 2897444, 60744427, 30866345, 609720,
+                15878753, 60138459, 24519663
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                16625790644959, 1647648827778410, 1579910185572704,
+                436452271048548, 121070048451050
+#else
+                39351007, 247743, 51914090, 24551880, 23288160, 23542496,
+                43239268, 6503645, 20650474, 1804084
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1037263028552531, 568385780377829, 297953104144430,
+                1558584511931211, 2238221839292471
+#else
+                39519059, 15456423, 8972517, 8469608, 15640622, 4439847,
+                3121995, 23224719, 27842615, 33352104
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                190565267697443, 672855706028058, 338796554369226,
+                337687268493904, 853246848691734
+#else
+                51801891, 2839643, 22530074, 10026331, 4602058, 5048462,
+                28248656, 5031932, 55733782, 12714368
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1763863028400139, 766498079432444, 1321118624818005,
+                69494294452268, 858786744165651
+#else
+                20807691, 26283607, 29286140, 11421711, 39232341, 19686201,
+                45881388, 1035545, 47375635, 12796919
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1292056768563024, 1456632109855638, 1100631247050184,
+                1386133165675321, 1232898350193752
+#else
+                12076880, 19253146, 58323862, 21705509, 42096072, 16400683,
+                49517369, 20654993, 3480664, 18371617
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                366253102478259, 525676242508811, 1449610995265438,
+                1183300845322183, 185960306491545
+#else
+                34747315, 5457596, 28548107, 7833186, 7303070, 21600887,
+                42745799, 17632556, 33734809, 2771024
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                28315355815982, 460422265558930, 1799675876678724,
+                1969256312504498, 1051823843138725
+#else
+                45719598, 421931, 26597266, 6860826, 22486084, 26817260,
+                49971378, 29344205, 42556581, 15673396
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                156914999361983, 1606148405719949, 1665208410108430,
+                317643278692271, 1383783705665320
+#else
+                46924223, 2338215, 19788685, 23933476, 63107598, 24813538,
+                46837679, 4733253, 3727144, 20619984
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                54684536365732, 2210010038536222, 1194984798155308,
+                535239027773705, 1516355079301361
+#else
+                6120100, 814863, 55314462, 32931715, 6812204, 17806661, 2019593,
+                7975683, 31123697, 22595451
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1484387703771650, 198537510937949, 2186282186359116,
+                617687444857508, 647477376402122
+#else
+                30069250, 22119100, 30434653, 2958439, 18399564, 32578143,
+                12296868, 9204260, 50676426, 9648164
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2147715541830533, 500032538445817, 646380016884826,
+                352227855331122, 1488268620408052
+#else
+                32705413, 32003455, 30705657, 7451065, 55303258, 9631812,
+                3305266, 5248604, 41100532, 22176930
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                159386186465542, 1877626593362941, 618737197060512,
+                1026674284330807, 1158121760792685
+#else
+                17219846, 2375039, 35537917, 27978816, 47649184, 9219902,
+                294711, 15298639, 2662509, 17257359
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1744544377739822, 1964054180355661, 1685781755873170,
+                2169740670377448, 1286112621104591
+#else
+                65935918, 25995736, 62742093, 29266687, 45762450, 25120105,
+                32087528, 32331655, 32247247, 19164571
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                81977249784993, 1667943117713086, 1668983819634866,
+                1605016835177615, 1353960708075544
+#else
+                14312609, 1221556, 17395390, 24854289, 62163122, 24869796,
+                38911119, 23916614, 51081240, 20175586
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1602253788689063, 439542044889886, 2220348297664483,
+                657877410752869, 157451572512238
+#else
+                65680039, 23875441, 57873182, 6549686, 59725795, 33085767,
+                23046501, 9803137, 17597934, 2346211
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1029287186166717, 65860128430192, 525298368814832,
+                1491902500801986, 1461064796385400
+#else
+                18510781, 15337574, 26171504, 981392, 44867312, 7827555,
+                43617730, 22231079, 3059832, 21771562
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                408216988729246, 2121095722306989, 913562102267595,
+                1879708920318308, 241061448436731
+#else
+                10141598, 6082907, 17829293, 31606789, 9830091, 13613136,
+                41552228, 28009845, 33606651, 3592095
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1185483484383269, 1356339572588553, 584932367316448,
+                102132779946470, 1792922621116791
+#else
+                33114149, 17665080, 40583177, 20211034, 33076704, 8716171,
+                1151462, 1521897, 66126199, 26716628
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1966196870701923, 2230044620318636, 1425982460745905,
+                261167817826569, 46517743394330
+#else
+                34169699, 29298616, 23947180, 33230254, 34035889, 21248794,
+                50471177, 3891703, 26353178, 693168
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                107077591595359, 884959942172345, 27306869797400,
+                2224911448949390, 964352058245223
+#else
+                30374239, 1595580, 50224825, 13186930, 4600344, 406904, 9585294,
+                33153764, 31375463, 14369965
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1730194207717538, 431790042319772, 1831515233279467,
+                1372080552768581, 1074513929381760
+#else
+                52738210, 25781902, 1510300, 6434173, 48324075, 27291703,
+                32732229, 20445593, 17901440, 16011505
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1450880638731607, 1019861580989005, 1229729455116861,
+                1174945729836143, 826083146840706
+#else
+                18171223, 21619806, 54608461, 15197121, 56070717, 18324396,
+                47936623, 17508055, 8764034, 12309598
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1899935429242705, 1602068751520477, 940583196550370,
+                82431069053859, 1540863155745696
+#else
+                5975889, 28311244, 47649501, 23872684, 55567586, 14015781,
+                43443107, 1228318, 17544096, 22960650
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2136688454840028, 2099509000964294, 1690800495246475,
+                1217643678575476, 828720645084218
+#else
+                5811932, 31839139, 3442886, 31285122, 48741515, 25194890,
+                49064820, 18144304, 61543482, 12348899
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                765548025667841, 462473984016099, 998061409979798,
+                546353034089527, 2212508972466858
+#else
+                35709185, 11407554, 25755363, 6891399, 63851926, 14872273,
+                42259511, 8141294, 56476330, 32968952
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                46575283771160, 892570971573071, 1281983193144090,
+                1491520128287375, 75847005908304
+#else
+                54433560, 694025, 62032719, 13300343, 14015258, 19103038,
+                57410191, 22225381, 30944592, 1130208
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1801436127943107, 1734436817907890, 1268728090345068,
+                167003097070711, 2233597765834956
+#else
+                8247747, 26843490, 40546482, 25845122, 52706924, 18905521,
+                4652151, 2488540, 23550156, 33283200
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1997562060465113, 1048700225534011, 7615603985628,
+                1855310849546841, 2242557647635213
+#else
+                17294297, 29765994, 7026747, 15626851, 22990044, 113481,
+                2267737, 27646286, 66700045, 33416712
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1161017320376250, 492624580169043, 2169815802355237,
+                976496781732542, 1770879511019629
+#else
+                16091066, 17300506, 18599251, 7340678, 2137637, 32332775,
+                63744702, 14550935, 3260525, 26388161
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1357044908364776, 729130645262438, 1762469072918979,
+                1365633616878458, 181282906404941
+#else
+                62198760, 20221544, 18550886, 10864893, 50649539, 26262835,
+                44079994, 20349526, 54360141, 2701325
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1080413443139865, 1155205815510486, 1848782073549786,
+                622566975152580, 124965574467971
+#else
+                58534169, 16099414, 4629974, 17213908, 46322650, 27548999,
+                57090500, 9276970, 11329923, 1862132
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1184526762066993, 247622751762817, 692129017206356,
+                820018689412496, 2188697339828085
+#else
+                14763057, 17650824, 36190593, 3689866, 3511892, 10313526,
+                45157776, 12219230, 58070901, 32614131
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2020536369003019, 202261491735136, 1053169669150884,
+                2056531979272544, 778165514694311
+#else
+                8894987, 30108338, 6150752, 3013931, 301220, 15693451, 35127648,
+                30644714, 51670695, 11595569
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                237404399610207, 1308324858405118, 1229680749538400,
+                720131409105291, 1958958863624906
+#else
+                15214943, 3537601, 40870142, 19495559, 4418656, 18323671,
+                13947275, 10730794, 53619402, 29190761
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                515583508038846, 17656978857189, 1717918437373989,
+                1568052070792483, 46975803123923
+#else
+                64570558, 7682792, 32759013, 263109, 37124133, 25598979,
+                44776739, 23365796, 977107, 699994
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                281527309158085, 36970532401524, 866906920877543,
+                2222282602952734, 1289598729589882
+#else
+                54642373, 4195083, 57897332, 550903, 51543527, 12917919,
+                19118110, 33114591, 36574330, 19216518
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1278207464902042, 494742455008756, 1262082121427081,
+                1577236621659884, 1888786707293291
+#else
+                31788442, 19046775, 4799988, 7372237, 8808585, 18806489,
+                9408236, 23502657, 12493931, 28145115
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                353042527954210, 1830056151907359, 1111731275799225,
+                174960955838824, 404312815582675
+#else
+                41428258, 5260743, 47873055, 27269961, 63412921, 16566086,
+                27218280, 2607121, 29375955, 6024730
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2064251142068628, 1666421603389706, 1419271365315441,
+                468767774902855, 191535130366583
+#else
+                842132, 30759739, 62345482, 24831616, 26332017, 21148791,
+                11831879, 6985184, 57168503, 2854095
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1716987058588002, 1859366439773457, 1767194234188234,
+                64476199777924, 1117233614485261
+#else
+                62261602, 25585100, 2516241, 27706719, 9695690, 26333246,
+                16512644, 960770, 12121869, 16648078
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                984292135520292, 135138246951259, 2220652137473167,
+                1722843421165029, 190482558012909
+#else
+                51890212, 14667095, 53772635, 2013716, 30598287, 33090295,
+                35603941, 25672367, 20237805, 2838411
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                298845952651262, 1166086588952562, 1179896526238434,
+                1347812759398693, 1412945390096208
+#else
+                47820798, 4453151, 15298546, 17376044, 22115042, 17581828,
+                12544293, 20083975, 1068880, 21054527
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1143239552672925, 906436640714209, 2177000572812152,
+                2075299936108548, 325186347798433
+#else
+                57549981, 17035596, 33238497, 13506958, 30505848, 32439836,
+                58621956, 30924378, 12521377, 4845654
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                721024854374772, 684487861263316, 1373438744094159,
+                2193186935276995, 1387043709851261
+#else
+                38910324, 10744107, 64150484, 10199663, 7759311, 20465832,
+                3409347, 32681032, 60626557, 20668561
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                418098668140962, 715065997721283, 1471916138376055,
+                2168570337288357, 937812682637044
+#else
+                43547042, 6230155, 46726851, 10655313, 43068279, 21933259,
+                10477733, 32314216, 63995636, 13974497
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1043584187226485, 2143395746619356, 2209558562919611,
+                482427979307092, 847556718384018
+#else
+                12966261, 15550616, 35069916, 31939085, 21025979, 32924988,
+                5642324, 7188737, 18895762, 12629579
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1248731221520759, 1465200936117687, 540803492710140,
+                52978634680892, 261434490176109
+#else
+                14741879, 18607545, 22177207, 21833195, 1279740, 8058600,
+                11758140, 789443, 32195181, 3895677
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1057329623869501, 620334067429122, 461700859268034,
+                2012481616501857, 297268569108938
+#else
+                10758205, 15755439, 62598914, 9243697, 62229442, 6879878,
+                64904289, 29988312, 58126794, 4429646
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1055352180870759, 1553151421852298, 1510903185371259,
+                1470458349428097, 1226259419062731
+#else
+                64654951, 15725972, 46672522, 23143759, 61304955, 22514211,
+                59972993, 21911536, 18047435, 18272689
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1492988790301668, 790326625573331, 1190107028409745,
+                1389394752159193, 1620408196604194
+#else
+                41935844, 22247266, 29759955, 11776784, 44846481, 17733976,
+                10993113, 20703595, 49488162, 24145963
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                47000654413729, 1004754424173864, 1868044813557703,
+                173236934059409, 588771199737015
+#else
+                21987233, 700364, 42603816, 14972007, 59334599, 27836036,
+                32155025, 2581431, 37149879, 8773374
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                30498470091663, 1082245510489825, 576771653181956,
+                806509986132686, 1317634017056939
+#else
+                41540495, 454462, 53896929, 16126714, 25240068, 8594567,
+                20656846, 12017935, 59234475, 19634276
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                420308055751555, 1493354863316002, 165206721528088,
+                1884845694919786, 2065456951573059
+#else
+                6028163, 6263078, 36097058, 22252721, 66289944, 2461771,
+                35267690, 28086389, 65387075, 30777706
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1115636332012334, 1854340990964155, 83792697369514,
+                1972177451994021, 457455116057587
+#else
+                54829870, 16624276, 987579, 27631834, 32908202, 1248608,
+                7719845, 29387734, 28408819, 6816612
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1698968457310898, 1435137169051090, 1083661677032510,
+                938363267483709, 340103887207182
+#else
+                56750770, 25316602, 19549650, 21385210, 22082622, 16147817,
+                20613181, 13982702, 56769294, 5067942
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1995325341336574, 911500251774648, 164010755403692,
+                855378419194762, 1573601397528842
+#else
+                36602878, 29732664, 12074680, 13582412, 47230892, 2443950,
+                47389578, 12746131, 5331210, 23448488
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                241719380661528, 310028521317150, 1215881323380194,
+                1408214976493624, 2141142156467363
+#else
+                30528792, 3601899, 65151774, 4619784, 39747042, 18118043,
+                24180792, 20984038, 27679907, 31905504
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1315157046163473, 727368447885818, 1363466668108618,
+                1668921439990361, 1398483384337907
+#else
+                9402385, 19597367, 32834042, 10838634, 40528714, 20317236,
+                26653273, 24868867, 22611443, 20839026
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                75029678299646, 1015388206460473, 1849729037055212,
+                1939814616452984, 444404230394954
+#else
+                22190590, 1118029, 22736441, 15130463, 36648172, 27563110,
+                19189624, 28905490, 4854858, 6622139
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2053597130993710, 2024431685856332, 2233550957004860,
+                2012407275509545, 872546993104440
+#else
+                58798126, 30600981, 58846284, 30166382, 56707132, 33282502,
+                13424425, 29987205, 26404408, 13001963
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1217269667678610, 599909351968693, 1390077048548598,
+                1471879360694802, 739586172317596
+#else
+                35867026, 18138731, 64114613, 8939345, 11562230, 20713762,
+                41044498, 21932711, 51703708, 11020692
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1718318639380794, 1560510726633958, 904462881159922,
+                1418028351780052, 94404349451937
+#else
+                1866042, 25604943, 59210214, 23253421, 12483314, 13477547,
+                3175636, 21130269, 28761761, 1406734
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2132502667405250, 214379346175414, 1502748313768060,
+                1960071701057800, 1353971822643138
+#else
+                66660290, 31776765, 13018550, 3194501, 57528444, 22392694,
+                24760584, 29207344, 25577410, 20175752
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                319394212043702, 2127459436033571, 717646691535162,
+                663366796076914, 318459064945314
+#else
+                42818486, 4759344, 66418211, 31701615, 2066746, 10693769,
+                37513074, 9884935, 57739938, 4745409
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                405989424923593, 1960452633787083, 667349034401665,
+                1492674260767112, 1451061489880787
+#else
+                57967561, 6049713, 47577803, 29213020, 35848065, 9944275,
+                51646856, 22242579, 10931923, 21622501
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                947085906234007, 323284730494107, 1485778563977200,
+                728576821512394, 901584347702286
+#else
+                50547351, 14112679, 59096219, 4817317, 59068400, 22139825,
+                44255434, 10856640, 46638094, 13434653
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1575783124125742, 2126210792434375, 1569430791264065,
+                1402582372904727, 1891780248341114
+#else
+                22759470, 23480998, 50342599, 31683009, 13637441, 23386341,
+                1765143, 20900106, 28445306, 28189722
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                838432205560695, 1997703511451664, 1018791879907867,
+                1662001808174331, 78328132957753
+#else
+                29875063, 12493613, 2795536, 29768102, 1710619, 15181182,
+                56913147, 24765756, 9074233, 1167180
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                739152638255629, 2074935399403557, 505483666745895,
+                1611883356514088, 628654635394878
+#else
+                40903181, 11014232, 57266213, 30918946, 40200743, 7532293,
+                48391976, 24018933, 3843902, 9367684
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1822054032121349, 643057948186973, 7306757352712,
+                577249257962099, 284735863382083
+#else
+                56139269, 27150720, 9591133, 9582310, 11349256, 108879,
+                16235123, 8601684, 66969667, 4242894
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1366558556363930, 1448606567552086, 1478881020944768,
+                165803179355898, 1115718458123498
+#else
+                22092954, 20363309, 65066070, 21585919, 32186752, 22037044,
+                60534522, 2470659, 39691498, 16625500
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                204146226972102, 1630511199034723, 2215235214174763,
+                174665910283542, 956127674017216
+#else
+                56051142, 3042015, 13770083, 24296510, 584235, 33009577,
+                59338006, 2602724, 39757248, 14247412
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1562934578796716, 1070893489712745, 11324610642270,
+                958989751581897, 2172552325473805
+#else
+                6314156, 23289540, 34336361, 15957556, 56951134, 168749,
+                58490057, 14290060, 27108877, 32373552
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1770564423056027, 735523631664565, 1326060113795289,
+                1509650369341127, 65892421582684
+#else
+                58522267, 26383465, 13241781, 10960156, 34117849, 19759835,
+                33547975, 22495543, 39960412, 981873
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                623682558650637, 1337866509471512, 990313350206649,
+                1314236615762469, 1164772974270275
+#else
+                22833421, 9293594, 34459416, 19935764, 57971897, 14756818,
+                44180005, 19583651, 56629059, 17356469
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                223256821462517, 723690150104139, 1000261663630601,
+                933280913953265, 254872671543046
+#else
+                59340277, 3326785, 38997067, 10783823, 19178761, 14905060,
+                22680049, 13906969, 51175174, 3797898
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1969087237026041, 624795725447124, 1335555107635969,
+                2069986355593023, 1712100149341902
+#else
+                21721337, 29341686, 54902740, 9310181, 63226625, 19901321,
+                23740223, 30845200, 20491982, 25512280
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1236103475266979, 1837885883267218, 1026072585230455,
+                1025865513954973, 1801964901432134
+#else
+                9209251, 18419377, 53852306, 27386633, 66377847, 15289672,
+                25947805, 15286587, 30997318, 26851369
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1115241013365517, 1712251818829143, 2148864332502771,
+                2096001471438138, 2235017246626125
+#else
+                7392013, 16618386, 23946583, 25514540, 53843699, 32020573,
+                52911418, 31232855, 17649997, 33304352
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1299268198601632, 2047148477845621, 2165648650132450,
+                1612539282026145, 514197911628890
+#else
+                57807776, 19360604, 30609525, 30504889, 41933794, 32270679,
+                51867297, 24028707, 64875610, 7662145
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                118352772338543, 1067608711804704, 1434796676193498,
+                1683240170548391, 230866769907437
+#else
+                49550191, 1763593, 33994528, 15908609, 37067994, 21380136,
+                7335079, 25082233, 63934189, 3440182
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1850689576796636, 1601590730430274, 1139674615958142,
+                1954384401440257, 76039205311
+#else
+                47219164, 27577423, 42997570, 23865561, 10799742, 16982475,
+                40449, 29122597, 4862399, 1133
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1723387471374172, 997301467038410, 533927635123657,
+                20928644693965, 1756575222802513
+#else
+                34252636, 25680474, 61686474, 14860949, 50789833, 7956141,
+                7258061, 311861, 36513873, 26175010
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2146711623855116, 503278928021499, 625853062251406,
+                1109121378393107, 1033853809911861
+#else
+                63335436, 31988495, 28985339, 7499440, 24445838, 9325937,
+                29727763, 16527196, 18278453, 15405622
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                571005965509422, 2005213373292546, 1016697270349626,
+                56607856974274, 914438579435146
+#else
+                62726958, 8508651, 47210498, 29880007, 61124410, 15149969,
+                53795266, 843522, 45233802, 13626196
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1346698876211176, 2076651707527589, 1084761571110205,
+                265334478828406, 1068954492309671
+#else
+                2281448, 20067377, 56193445, 30944521, 1879357, 16164207,
+                56324982, 3953791, 13340839, 15928663
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1769967932677654, 1695893319756416, 1151863389675920,
+                1781042784397689, 400287774418285
+#else
+                31727126, 26374577, 48671360, 25270779, 2875792, 17164102,
+                41838969, 26539605, 43656557, 5964752
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1851867764003121, 403841933237558, 820549523771987,
+                761292590207581, 1743735048551143
+#else
+                4100401, 27594980, 49929526, 6017713, 48403027, 12227140,
+                40424029, 11344143, 2538215, 25983677
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                410915148140008, 2107072311871739, 1004367461876503,
+                99684895396761, 1180818713503224
+#else
+                57675240, 6123112, 11159803, 31397824, 30016279, 14966241,
+                46633881, 1485420, 66479608, 17595569
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                285945406881439, 648174397347453, 1098403762631981,
+                1366547441102991, 1505876883139217
+#else
+                40304287, 4260918, 11851389, 9658551, 35091757, 16367491,
+                46903439, 20363143, 11659921, 22439314
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                672095903120153, 1675918957959872, 636236529315028,
+                1569297300327696, 2164144194785875
+#else
+                26180377, 10015009, 36264640, 24973138, 5418196, 9480663,
+                2231568, 23384352, 33100371, 32248261
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1902708175321798, 1035343530915438, 1178560808893263,
+                301095684058146, 1280977479761118
+#else
+                15121094, 28352561, 56718958, 15427820, 39598927, 17561924,
+                21670946, 4486675, 61177054, 19088051
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1615357281742403, 404257611616381, 2160201349780978,
+                1160947379188955, 1578038619549541
+#else
+                16166467, 24070699, 56004733, 6023907, 35182066, 32189508,
+                2340059, 17299464, 56373093, 23514607
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2013087639791217, 822734930507457, 1785668418619014,
+                1668650702946164, 389450875221715
+#else
+                28042865, 29997343, 54982337, 12259705, 63391366, 26608532,
+                6766452, 24864833, 18036435, 5803270
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                453918449698368, 106406819929001, 2072540975937135,
+                308588860670238, 1304394580755385
+#else
+                66291264, 6763911, 11803561, 1585585, 10958447, 30883267,
+                23855390, 4598332, 60949433, 19436993
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1295082798350326, 2091844511495996, 1851348972587817,
+                3375039684596, 789440738712837
+#else
+                36077558, 19298237, 17332028, 31170912, 31312681, 27587249,
+                696308, 50292, 47013125, 11763583
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2083069137186154, 848523102004566, 993982213589257,
+                1405313299916317, 1532824818698468
+#else
+                66514282, 31040148, 34874710, 12643979, 12650761, 14811489,
+                665117, 20940800, 47335652, 22840869
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1495961298852430, 1397203457344779, 1774950217066942,
+                139302743555696, 66603584342787
+#else
+                30464590, 22291560, 62981387, 20819953, 19835326, 26448819,
+                42712688, 2075772, 50088707, 992470
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1782411379088302, 1096724939964781, 27593390721418,
+                542241850291353, 1540337798439873
+#else
+                18357166, 26559999, 7766381, 16342475, 37783946, 411173,
+                14578841, 8080033, 55534529, 22952821
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                693543956581437, 171507720360750, 1557908942697227,
+                1074697073443438, 1104093109037196
+#else
+                19598397, 10334610, 12555054, 2555664, 18821899, 23214652,
+                21873262, 16014234, 26224780, 16452269
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                345288228393419, 1099643569747172, 134881908403743,
+                1740551994106740, 248212179299770
+#else
+                36884939, 5145195, 5944548, 16385966, 3976735, 2009897,
+                55731060, 25936245, 46575034, 3698649
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                231429562203065, 1526290236421172, 2021375064026423,
+                1520954495658041, 806337791525116
+#else
+                14187449, 3448569, 56472628, 22743496, 44444983, 30120835,
+                7268409, 22663988, 27394300, 12015369
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1079623667189886, 872403650198613, 766894200588288,
+                2163700860774109, 2023464507911816
+#else
+                19695742, 16087646, 28032085, 12999827, 6817792, 11427614,
+                20244189, 32241655, 53849736, 30151970
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                854645372543796, 1936406001954827, 151460662541253,
+                825325739271555, 1554306377287556
+#else
+                30860084, 12735208, 65220619, 28854697, 50133957, 2256939,
+                58942851, 12298311, 58558340, 23160969
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1497138821904622, 1044820250515590, 1742593886423484,
+                1237204112746837, 849047450816987
+#else
+                61389038, 22309106, 65198214, 15569034, 26642876, 25966672,
+                61319509, 18435777, 62132699, 12651792
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                667962773375330, 1897271816877105, 1399712621683474,
+                1143302161683099, 2081798441209593
+#else
+                64260450, 9953420, 11531313, 28271553, 26895122, 20857343,
+                53990043, 17036529, 9768697, 31021214
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                127147851567005, 1936114012888110, 1704424366552046,
+                856674880716312, 716603621335359
+#else
+                42389405, 1894650, 66821166, 28850346, 15348718, 25397902,
+                32767512, 12765450, 4940095, 10678226
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1072409664800960, 2146937497077528, 1508780108920651,
+                935767602384853, 1112800433544068
+#else
+                18860224, 15980149, 48121624, 31991861, 40875851, 22482575,
+                59264981, 13944023, 42736516, 16582018
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                333549023751292, 280219272863308, 2104176666454852,
+                1036466864875785, 536135186520207
+#else
+                51604604, 4970267, 37215820, 4175592, 46115652, 31354675,
+                55404809, 15444559, 56105103, 7989036
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                373666279883137, 146457241530109, 304116267127857,
+                416088749147715, 1258577131183391
+#else
+                31490433, 5568061, 64696061, 2182382, 34772017, 4531685,
+                35030595, 6200205, 47422751, 18754260
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1186115062588401, 2251609796968486, 1098944457878953,
+                1153112761201374, 1791625503417267
+#else
+                49800177, 17674491, 35586086, 33551600, 34221481, 16375548,
+                8680158, 17182719, 28550067, 26697300
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1870078460219737, 2129630962183380, 852283639691142,
+                292865602592851, 401904317342226
+#else
+                38981977, 27866340, 16837844, 31733974, 60258182, 12700015,
+                37068883, 4364037, 1155602, 5988841
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1361070124828035, 815664541425524, 1026798897364671,
+                1951790935390647, 555874891834790
+#else
+                21890435, 20281525, 54484852, 12154348, 59276991, 15300495,
+                23148983, 29083951, 24618406, 8283181
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1546301003424277, 459094500062839, 1097668518375311,
+                1780297770129643, 720763293687608
+#else
+                33972757, 23041680, 9975415, 6841041, 35549071, 16356535,
+                3070187, 26528504, 1466168, 10740210
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1212405311403990, 1536693382542438, 61028431067459,
+                1863929423417129, 1223219538638038
+#else
+                65599446, 18066246, 53605478, 22898515, 32799043, 909394,
+                53169961, 27774712, 34944214, 18227391
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1294303766540260, 1183557465955093, 882271357233093,
+                63854569425375, 2213283684565087
+#else
+                3960804, 19286629, 39082773, 17636380, 47704005, 13146867,
+                15567327, 951507, 63848543, 32980496
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                339050984211414, 601386726509773, 413735232134068,
+                966191255137228, 1839475899458159
+#else
+                24740822, 5052253, 37014733, 8961360, 25877428, 6165135,
+                42740684, 14397371, 59728495, 27410326
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                235605972169408, 2174055643032978, 1538335001838863,
+                1281866796917192, 1815940222628465
+#else
+                38220480, 3510802, 39005586, 32395953, 55870735, 22922977,
+                51667400, 19101303, 65483377, 27059617
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1632352921721536, 1833328609514701, 2092779091951987,
+                1923956201873226, 2210068022482919
+#else
+                793280, 24323954, 8836301, 27318725, 39747955, 31184838,
+                33152842, 28669181, 57202663, 32932579
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                35271216625062, 1712350667021807, 983664255668860,
+                98571260373038, 1232645608559836
+#else
+                5666214, 525582, 20782575, 25516013, 42570364, 14657739,
+                16099374, 1468826, 60937436, 18367850
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1998172393429622, 1798947921427073, 784387737563581,
+                1589352214827263, 1589861734168180
+#else
+                62249590, 29775088, 64191105, 26806412, 7778749, 11688288,
+                36704511, 23683193, 65549940, 23690785
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1733739258725305, 31715717059538, 201969945218860,
+                992093044556990, 1194308773174556
+#else
+                10896313, 25834728, 824274, 472601, 47648556, 3009586, 25248958,
+                14783338, 36527388, 17796587
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                846415389605137, 746163495539180, 829658752826080,
+                592067705956946, 957242537821393
+#else
+                10566929, 12612572, 35164652, 11118702, 54475488, 12362878,
+                21752402, 8822496, 24003793, 14264025
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1758148849754419, 619249044817679, 168089007997045,
+                1371497636330523, 1867101418880350
+#else
+                27713843, 26198459, 56100623, 9227529, 27050101, 2504721,
+                23886875, 20436907, 13958494, 27821979
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                326633984209635, 261759506071016, 1700682323676193,
+                1577907266349064, 1217647663383016
+#else
+                43627235, 4867225, 39861736, 3900520, 29838369, 25342141,
+                35219464, 23512650, 7340520, 18144364
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1714182387328607, 1477856482074168, 574895689942184,
+                2159118410227270, 1555532449716575
+#else
+                4646495, 25543308, 44342840, 22021777, 23184552, 8566613,
+                31366726, 32173371, 52042079, 23179239
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                853828206885131, 998498946036955, 1835887550391235,
+                207627336608048, 258363815956050
+#else
+                49838347, 12723031, 50115803, 14878793, 21619651, 27356856,
+                27584816, 3093888, 58265170, 3849920
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                141141474651677, 1236728744905256, 643101419899887,
+                1646615130509173, 1208239602291765
+#else
+                58043933, 2103171, 25561640, 18428694, 61869039, 9582957,
+                32477045, 24536477, 5002293, 18004173
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1501663228068911, 1354879465566912, 1444432675498247,
+                897812463852601, 855062598754348
+#else
+                55051311, 22376525, 21115584, 20189277, 8808711, 21523724,
+                16489529, 13378448, 41263148, 12741425
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                714380763546606, 1032824444965790, 1774073483745338,
+                1063840874947367, 1738680636537158
+#else
+                61162478, 10645102, 36197278, 15390283, 63821882, 26435754,
+                24306471, 15852464, 28834118, 25908360
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1640635546696252, 633168953192112, 2212651044092396,
+                30590958583852, 368515260889378
+#else
+                49773116, 24447374, 42577584, 9434952, 58636780, 32971069,
+                54018092, 455840, 20461858, 5491305
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1171650314802029, 1567085444565577, 1453660792008405,
+                757914533009261, 1619511342778196
+#else
+                13669229, 17458950, 54626889, 23351392, 52539093, 21661233,
+                42112877, 11293806, 38520660, 24132599
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                420958967093237, 971103481109486, 2169549185607107,
+                1301191633558497, 1661514101014240
+#else
+                28497909, 6272777, 34085870, 14470569, 8906179, 32328802,
+                18504673, 19389266, 29867744, 24758489
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                907123651818302, 1332556122804146, 1824055253424487,
+                1367614217442959, 1982558335973172
+#else
+                50901822, 13517195, 39309234, 19856633, 24009063, 27180541,
+                60741263, 20379039, 22853428, 29542421
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1121533090144639, 1021251337022187, 110469995947421,
+                1511059774758394, 2110035908131662
+#else
+                24191359, 16712145, 53177067, 15217830, 14542237, 1646131,
+                18603514, 22516545, 12876622, 31441985
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                303213233384524, 2061932261128138, 352862124777736,
+                40828818670255, 249879468482660
+#else
+                17902668, 4518229, 66697162, 30725184, 26878216, 5258055,
+                54248111, 608396, 16031844, 3723494
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                856559257852200, 508517664949010, 1378193767894916,
+                1723459126947129, 1962275756614521
+#else
+                38476072, 12763727, 46662418, 7577503, 33001348, 20536687,
+                17558841, 25681542, 23896953, 29240187
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1445691340537320, 40614383122127, 402104303144865,
+                485134269878232, 1659439323587426
+#else
+                47103464, 21542479, 31520463, 605201, 2543521, 5991821,
+                64163800, 7229063, 57189218, 24727572
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                20057458979482, 1183363722525800, 2140003847237215,
+                2053873950687614, 2112017736174909
+#else
+                28816026, 298879, 38943848, 17633493, 19000927, 31888542,
+                54428030, 30605106, 49057085, 31471516
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2228654250927986, 1483591363415267, 1368661293910956,
+                1076511285177291, 526650682059608
+#else
+                16000882, 33209536, 3493091, 22107234, 37604268, 20394642,
+                12577739, 16041268, 47393624, 7847706
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                709481497028540, 531682216165724, 316963769431931,
+                1814315888453765, 258560242424104
+#else
+                10151868, 10572098, 27312476, 7922682, 14825339, 4723128,
+                34252933, 27035413, 57088296, 3852847
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1053447823660455, 1955135194248683, 1010900954918985,
+                1182614026976701, 1240051576966610
+#else
+                55678375, 15697595, 45987307, 29133784, 5386313, 15063598,
+                16514493, 17622322, 29330898, 18478208
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1957943897155497, 1788667368028035, 137692910029106,
+                1039519607062, 826404763313028
+#else
+                41609129, 29175637, 51885955, 26653220, 16615730, 2051784,
+                3303702, 15490, 39560068, 12314390
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1848942433095597, 1582009882530495, 1849292741020143,
+                1068498323302788, 2001402229799484
+#else
+                15683501, 27551389, 18109119, 23573784, 15337967, 27556609,
+                50391428, 15921865, 16103996, 29823217
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1528282417624269, 2142492439828191, 2179662545816034,
+                362568973150328, 1591374675250271
+#else
+                43939021, 22773182, 13588191, 31925625, 63310306, 32479502,
+                47835256, 5402698, 37293151, 23713330
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                160026679434388, 232341189218716, 2149181472355545,
+                598041771119831, 183859001910173
+#else
+                23190676, 2384583, 34394524, 3462153, 37205209, 32025299,
+                55842007, 8911516, 41903005, 2739712
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2013278155187349, 662660471354454, 793981225706267,
+                411706605985744, 804490933124791
+#else
+                21374101, 30000182, 33584214, 9874410, 15377179, 11831242,
+                33578960, 6134906, 4931255, 11987849
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2051892037280204, 488391251096321, 2230187337030708,
+                930221970662692, 679002758255210
+#else
+                67101132, 30575573, 50885377, 7277596, 105524, 33232381,
+                35628324, 13861387, 37032554, 10117929
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1530723630438670, 875873929577927, 341560134269988,
+                449903119530753, 1055551308214179
+#else
+                37607694, 22809559, 40945095, 13051538, 41483300, 5089642,
+                60783361, 6704078, 12890019, 15728940
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1461835919309432, 1955256480136428, 180866187813063,
+                1551979252664528, 557743861963950
+#else
+                45136504, 21783052, 66157804, 29135591, 14704839, 2695116,
+                903376, 23126293, 12885166, 8311031
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                359179641731115, 1324915145732949, 902828372691474,
+                294254275669987, 1887036027752957
+#else
+                49592363, 5352193, 10384213, 19742774, 7506450, 13453191,
+                26423267, 4384730, 1888765, 28119028
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2043271609454323, 2038225437857464, 1317528426475850,
+                1398989128982787, 2027639881006861
+#else
+                41291507, 30447119, 53614264, 30371925, 30896458, 19632703,
+                34857219, 20846562, 47644429, 30214188
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2072902725256516, 312132452743412, 309930885642209,
+                996244312618453, 1590501300352303
+#else
+                43500868, 30888657, 66582772, 4651135, 5765089, 4618330,
+                6092245, 14845197, 17151279, 23700316
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1397254305160710, 695734355138021, 2233992044438756,
+                1776180593969996, 1085588199351115
+#else
+                42278406, 20820711, 51942885, 10367249, 37577956, 33289075,
+                22825804, 26467153, 50242379, 16176524
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                440567051331029, 254894786356681, 493869224930222,
+                1556322069683366, 1567456540319218
+#else
+                43525589, 6564960, 20063689, 3798228, 62368686, 7359224,
+                2006182, 23191006, 38362610, 23356922
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1950722461391320, 1907845598854797, 1822757481635527,
+                2121567704750244, 73811931471221
+#else
+                56482264, 29068029, 53788301, 28429114, 3432135, 27161203,
+                23632036, 31613822, 32808309, 1099883
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                387139307395758, 2058036430315676, 1220915649965325,
+                1794832055328951, 1230009312169328
+#else
+                15030958, 5768825, 39657628, 30667132, 60681485, 18193060,
+                51830967, 26745081, 2051440, 18328567
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1765973779329517, 659344059446977, 19821901606666,
+                1301928341311214, 1116266004075885
+#else
+                63746541, 26315059, 7517889, 9824992, 23555850, 295369, 5148398,
+                19400244, 44422509, 16633659
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1127572801181483, 1224743760571696, 1276219889847274,
+                1529738721702581, 1589819666871853
+#else
+                4577067, 16802144, 13249840, 18250104, 19958762, 19017158,
+                18559669, 22794883, 8402477, 23690159
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2181229378964934, 2190885205260020, 1511536077659137,
+                1246504208580490, 668883326494241
+#else
+                38702534, 32502850, 40318708, 32646733, 49896449, 22523642,
+                9453450, 18574360, 17983009, 9967138
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                437866655573314, 669026411194768, 81896997980338,
+                523874406393178, 245052060935236
+#else
+                41346370, 6524721, 26585488, 9969270, 24709298, 1220360,
+                65430874, 7806336, 17507396, 3651560
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1975438052228868, 1071801519999806, 594652299224319,
+                1877697652668809, 1489635366987285
+#else
+                56688388, 29436320, 14584638, 15971087, 51340543, 8861009,
+                26556809, 27979875, 48555541, 22197296
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                958592545673770, 233048016518599, 851568750216589,
+                567703851596087, 1740300006094761
+#else
+                2839082, 14284142, 4029895, 3472686, 14402957, 12689363,
+                40466743, 8459446, 61503401, 25932490
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2014540178270324, 192672779514432, 213877182641530,
+                2194819933853411, 1716422829364835
+#else
+                62269556, 30018987, 9744960, 2871048, 25113978, 3187018,
+                41998051, 32705365, 17258083, 25576693
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1540769606609725, 2148289943846077, 1597804156127445,
+                1230603716683868, 815423458809453
+#else
+                18164541, 22959256, 49953981, 32012014, 19237077, 23809137,
+                23357532, 18337424, 26908269, 12150756
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1738560251245018, 1779576754536888, 1783765347671392,
+                1880170990446751, 1088225159617541
+#else
+                36843994, 25906566, 5112248, 26517760, 65609056, 26580174,
+                43167, 28016731, 34806789, 16215818
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                659303913929492, 1956447718227573, 1830568515922666,
+                841069049744408, 1669607124206368
+#else
+                60209940, 9824393, 54804085, 29153342, 35711722, 27277596,
+                32574488, 12532905, 59605792, 24879084
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1143465490433355, 1532194726196059, 1093276745494697,
+                481041706116088, 2121405433561163
+#else
+                39765323, 17038963, 39957339, 22831480, 946345, 16291093,
+                254968, 7168080, 21676107, 31611404
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1686424298744462, 1451806974487153, 266296068846582,
+                1834686947542675, 1720762336132256
+#else
+                21260942, 25129680, 50276977, 21633609, 43430902, 3968120,
+                63456915, 27338965, 63552672, 25641356
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                889217026388959, 1043290623284660, 856125087551909,
+                1669272323124636, 1603340330827879
+#else
+                16544735, 13250366, 50304436, 15546241, 62525861, 12757257,
+                64646556, 24874095, 48201831, 23891632
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1206396181488998, 333158148435054, 1402633492821422,
+                1120091191722026, 1945474114550509
+#else
+                64693606, 17976703, 18312302, 4964443, 51836334, 20900867,
+                26820650, 16690659, 25459437, 28989823
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                766720088232571, 1512222781191002, 1189719893490790,
+                2091302129467914, 2141418006894941
+#else
+                41964155, 11425019, 28423002, 22533875, 60963942, 17728207,
+                9142794, 31162830, 60676445, 31909614
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                419663647306612, 1998875112167987, 1426599870253707,
+                1154928355379510, 486538532138187
+#else
+                44004212, 6253475, 16964147, 29785560, 41994891, 21257994,
+                39651638, 17209773, 6335691, 7249989
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                938160078005954, 1421776319053174, 1941643234741774,
+                180002183320818, 1414380336750546
+#else
+                36775618, 13979674, 7503222, 21186118, 55152142, 28932738,
+                36836594, 2682241, 25993170, 21075909
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                398001940109652, 1577721237663248, 1012748649830402,
+                1540516006905144, 1011684812884559
+#else
+                4364628, 5930691, 32304656, 23509878, 59054082, 15091130,
+                22857016, 22955477, 31820367, 15075278
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1653276489969630, 6081825167624, 1921777941170836,
+                1604139841794531, 861211053640641
+#else
+                31879134, 24635739, 17258760, 90626, 59067028, 28636722,
+                24162787, 23903546, 49138625, 12833044
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                996661541407379, 1455877387952927, 744312806857277,
+                139213896196746, 1000282908547789
+#else
+                19073683, 14851414, 42705695, 21694263, 7625277, 11091125,
+                47489674, 2074448, 57694925, 14905376
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1450817495603008, 1476865707053229, 1030490562252053,
+                620966950353376, 1744760161539058
+#else
+                24483648, 21618865, 64589997, 22007013, 65555733, 15355505,
+                41826784, 9253128, 27628530, 25998952
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                559728410002599, 37056661641185, 2038622963352006,
+                1637244893271723, 1026565352238948
+#else
+                17597607, 8340603, 19355617, 552187, 26198470, 30377849,
+                4593323, 24396850, 52997988, 15297015
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                962165956135846, 1116599660248791, 182090178006815,
+                1455605467021751, 196053588803284
+#else
+                510886, 14337390, 35323607, 16638631, 6328095, 2713355,
+                46891447, 21690211, 8683220, 2921426
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                796863823080135, 1897365583584155, 420466939481601,
+                2165972651724672, 932177357788289
+#else
+                18606791, 11874196, 27155355, 28272950, 43077121, 6265445,
+                41930624, 32275507, 4674689, 13890525
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                877047233620632, 1375632631944375, 643773611882121,
+                660022738847877, 19353932331831
+#else
+                13609624, 13069022, 39736503, 20498523, 24360585, 9592974,
+                14977157, 9835105, 4389687, 288396
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2216943882299338, 394841323190322, 2222656898319671,
+                558186553950529, 1077236877025190
+#else
+                9922506, 33035038, 13613106, 5883594, 48350519, 33120168,
+                54804801, 8317627, 23388070, 16052080
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                801118384953213, 1914330175515892, 574541023311511,
+                1471123787903705, 1526158900256288
+#else
+                12719997, 11937594, 35138804, 28525742, 26900119, 8561328,
+                46953177, 21921452, 52354592, 22741539
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                949617889087234, 2207116611267331, 912920039141287,
+                501158539198789, 62362560771472
+#else
+                15961858, 14150409, 26716931, 32888600, 44314535, 13603568,
+                11829573, 7467844, 38286736, 929274
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1474518386765335, 1760793622169197, 1157399790472736,
+                1622864308058898, 165428294422792
+#else
+                11038231, 21972036, 39798381, 26237869, 56610336, 17246600,
+                43629330, 24182562, 45715720, 2465073
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1961673048027128, 102619413083113, 1051982726768458,
+                1603657989805485, 1941613251499678
+#else
+                20017144, 29231206, 27915241, 1529148, 12396362, 15675764,
+                13817261, 23896366, 2463390, 28932292
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1401939116319266, 335306339903072, 72046196085786,
+                862423201496006, 850518754531384
+#else
+                50749986, 20890520, 55043680, 4996453, 65852442, 1073571,
+                9583558, 12851107, 4003896, 12673717
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1234706593321979, 1083343891215917, 898273974314935,
+                1640859118399498, 157578398571149
+#else
+                65377275, 18398561, 63845933, 16143081, 19294135, 13385325,
+                14741514, 24450706, 7903885, 2348101
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1143483057726416, 1992614991758919, 674268662140796,
+                1773370048077526, 674318359920189
+#else
+                24536016, 17039225, 12715591, 29692277, 1511292, 10047386,
+                63266518, 26425272, 38731325, 10048126
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1835401379538542, 173900035308392, 818247630716732,
+                1762100412152786, 1021506399448291
+#else
+                54486638, 27349611, 30718824, 2591312, 56491836, 12192839,
+                18873298, 26257342, 34811107, 15221631
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1506632088156630, 2127481795522179, 513812919490255,
+                140643715928370, 442476620300318
+#else
+                40630742, 22450567, 11546243, 31701949, 9180879, 7656409,
+                45764914, 2095754, 29769758, 6593415
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2056683376856736, 219094741662735, 2193541883188309,
+                1841182310235800, 556477468664293
+#else
+                35114656, 30646970, 4176911, 3264766, 12538965, 32686321,
+                26312344, 27435754, 30958053, 8292160
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1315019427910827, 1049075855992603, 2066573052986543,
+                266904467185534, 2040482348591520
+#else
+                31429803, 19595316, 29173531, 15632448, 12174511, 30794338,
+                32808830, 3977186, 26143136, 30405556
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                94096246544434, 922482381166992, 24517828745563,
+                2139430508542503, 2097139044231004
+#else
+                22648882, 1402143, 44308880, 13746058, 7936347, 365344,
+                58440231, 31879998, 63350620, 31249806
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                537697207950515, 1399352016347350, 1563663552106345,
+                2148749520888918, 549922092988516
+#else
+                51616947, 8012312, 64594134, 20851969, 43143017, 23300402,
+                65496150, 32018862, 50444388, 8194477
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1747985413252434, 680511052635695, 1809559829982725,
+                594274250930054, 201673170745982
+#else
+                27338066, 26047012, 59694639, 10140404, 48082437, 26964542,
+                27277190, 8855376, 28572286, 3005164
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                323583936109569, 1973572998577657, 1192219029966558,
+                79354804385273, 1374043025560347
+#else
+                26287105, 4821776, 25476601, 29408529, 63344350, 17765447,
+                49100281, 1182478, 41014043, 20474836
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                213277331329947, 416202017849623, 1950535221091783,
+                1313441578103244, 2171386783823658
+#else
+                59937691, 3178079, 23970071, 6201893, 49913287, 29065239,
+                45232588, 19571804, 32208682, 32356184
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                189088804229831, 993969372859110, 895870121536987,
+                1547301535298256, 1477373024911350
+#else
+                50451143, 2817642, 56822502, 14811297, 6024667, 13349505,
+                39793360, 23056589, 39436278, 22014573
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1620578418245010, 541035331188469, 2235785724453865,
+                2154865809088198, 1974627268751826
+#else
+                15941010, 24148500, 45741813, 8062054, 31876073, 33315803,
+                51830470, 32110002, 15397330, 29424239
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1346805451740245, 1350981335690626, 942744349501813,
+                2155094562545502, 1012483751693409
+#else
+                8934485, 20068965, 43822466, 20131190, 34662773, 14047985,
+                31170398, 32113411, 39603297, 15087183
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2107080134091762, 1132567062788208, 1824935377687210,
+                769194804343737, 1857941799971888
+#else
+                48751602, 31397940, 24524912, 16876564, 15520426, 27193656,
+                51606457, 11461895, 16788528, 27685490
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1074666112436467, 249279386739593, 1174337926625354,
+                1559013532006480, 1472287775519121
+#else
+                65161459, 16013772, 21750665, 3714552, 49707082, 17498998,
+                63338576, 23231111, 31322513, 21938797
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1872620123779532, 1892932666768992, 1921559078394978,
+                1270573311796160, 1438913646755037
+#else
+                21426636, 27904214, 53460576, 28206894, 38296674, 28633461,
+                48833472, 18933017, 13040861, 21441484
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                837390187648199, 1012253300223599, 989780015893987,
+                1351393287739814, 328627746545550
+#else
+                11293895, 12478086, 39972463, 15083749, 37801443, 14748871,
+                14555558, 20137329, 1613710, 4896935
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1028328827183114, 1711043289969857, 1350832470374933,
+                1923164689604327, 1495656368846911
+#else
+                41213962, 15323293, 58619073, 25496531, 25967125, 20128972,
+                2825959, 28657387, 43137087, 22287016
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1900828492104143, 430212361082163, 687437570852799,
+                832514536673512, 1685641495940794
+#else
+                51184079, 28324551, 49665331, 6410663, 3622847, 10243618,
+                20615400, 12405433, 43355834, 25118015
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                842632847936398, 605670026766216, 290836444839585,
+                163210774892356, 2213815011799645
+#else
+                60017550, 12556207, 46917512, 9025186, 50036385, 4333800,
+                4378436, 2432030, 23097949, 32988414
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1176336383453996, 1725477294339771, 12700622672454,
+                678015708818208, 162724078519879
+#else
+                4565804, 17528778, 20084411, 25711615, 1724998, 189254,
+                24767264, 10103221, 48596551, 2424777
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1448049969043497, 1789411762943521, 385587766217753,
+                90201620913498, 832999441066823
+#else
+                366633, 21577626, 8173089, 26664313, 30788633, 5745705,
+                59940186, 1344108, 63466311, 12412658
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                516086333293313, 2240508292484616, 1351669528166508,
+                1223255565316488, 750235824427138
+#else
+                43107073, 7690285, 14929416, 33386175, 34898028, 20141445,
+                24162696, 18227928, 63967362, 11179384
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1263624896582495, 1102602401673328, 526302183714372,
+                2152015839128799, 1483839308490010
+#else
+                18289503, 18829478, 8056944, 16430056, 45379140, 7842513,
+                61107423, 32067534, 48424218, 22110928
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                442991718646863, 1599275157036458, 1925389027579192,
+                899514691371390, 350263251085160
+#else
+                476239, 6601091, 60956074, 23831056, 17503544, 28690532,
+                27672958, 13403813, 11052904, 5219329
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1689713572022143, 593854559254373, 978095044791970,
+                1985127338729499, 1676069120347625
+#else
+                20678527, 25178694, 34436965, 8849122, 62099106, 14574751,
+                31186971, 29580702, 9014761, 24975376
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1557207018622683, 340631692799603, 1477725909476187,
+                614735951619419, 2033237123746766
+#else
+                53464795, 23204192, 51146355, 5075807, 65594203, 22019831,
+                34006363, 9160279, 8473550, 30297594
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                968764929340557, 1225534776710944, 662967304013036,
+                1155521416178595, 791142883466590
+#else
+                24900749, 14435722, 17209120, 18261891, 44516588, 9878982,
+                59419555, 17218610, 42540382, 11788947
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1487081286167458, 993039441814934, 1792378982844640,
+                698652444999874, 2153908693179754
+#else
+                63990690, 22159237, 53306774, 14797440, 9652448, 26708528,
+                47071426, 10410732, 42540394, 32095740
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1123181311102823, 685575944875442, 507605465509927,
+                1412590462117473, 568017325228626
+#else
+                51449703, 16736705, 44641714, 10215877, 58011687, 7563910,
+                11871841, 21049238, 48595538, 8464117
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                560258797465417, 2193971151466401, 1824086900849026,
+                579056363542056, 1690063960036441
+#else
+                43708233, 8348506, 52522913, 32692717, 63158658, 27181012,
+                14325288, 8628612, 33313881, 25183915
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1918407319222416, 353767553059963, 1930426334528099,
+                1564816146005724, 1861342381708096
+#else
+                46921872, 28586496, 22367355, 5271547, 66011747, 28765593,
+                42303196, 23317577, 58168128, 27736162
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2131325168777276, 1176636658428908, 1756922641512981,
+                1390243617176012, 1966325177038383
+#else
+                60160060, 31759219, 34483180, 17533252, 32635413, 26180187,
+                15989196, 20716244, 28358191, 29300528
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2063958120364491, 2140267332393533, 699896251574968,
+                273268351312140, 375580724713232
+#else
+                43547083, 30755372, 34757181, 31892468, 57961144, 10429266,
+                50471180, 4072015, 61757200, 5596588
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2024297515263178, 416959329722687, 1079014235017302,
+                171612225573183, 1031677520051053
+#else
+                38872266, 30164383, 12312895, 6213178, 3117142, 16078565,
+                29266239, 2557221, 1768301, 15373193
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2033900009388450, 1744902869870788, 2190580087917640,
+                1949474984254121, 231049754293748
+#else
+                59865506, 30307471, 62515396, 26001078, 66980936, 32642186,
+                66017961, 29049440, 42448372, 3442909
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                343868674606581, 550155864008088, 1450580864229630,
+                481603765195050, 896972360018042
+#else
+                36898293, 5124042, 14181784, 8197961, 18964734, 21615339,
+                22597930, 7176455, 48523386, 13365929
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2151139328380127, 314745882084928, 59756825775204,
+                1676664391494651, 2048348075599360
+#else
+                59231455, 32054473, 8324672, 4690079, 6261860, 890446, 24538107,
+                24984246, 57419264, 30522764
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1528930066340597, 1605003907059576, 1055061081337675,
+                1458319101947665, 1234195845213142
+#else
+                25008885, 22782833, 62803832, 23916421, 16265035, 15721635,
+                683793, 21730648, 15723478, 18390951
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                830430507734812, 1780282976102377, 1425386760709037,
+                362399353095425, 2168861579799910
+#else
+                57448220, 12374378, 40101865, 26528283, 59384749, 21239917,
+                11879681, 5400171, 519526, 32318556
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1155762232730333, 980662895504006, 2053766700883521,
+                490966214077606, 510405877041357
+#else
+                22258397, 17222199, 59239046, 14613015, 44588609, 30603508,
+                46754982, 7315966, 16648397, 7605640
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1683750316716132, 652278688286128, 1221798761193539,
+                1897360681476669, 319658166027343
+#else
+                59027556, 25089834, 58885552, 9719709, 19259459, 18206220,
+                23994941, 28272877, 57640015, 4763277
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                618808732869972, 72755186759744, 2060379135624181,
+                1730731526741822, 48862757828238
+#else
+                45409620, 9220968, 51378240, 1084136, 41632757, 30702041,
+                31088446, 25789909, 55752334, 728111
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1463171970593505, 1143040711767452, 614590986558883,
+                1409210575145591, 1882816996436803
+#else
+                26047201, 21802961, 60208540, 17032633, 24092067, 9158119,
+                62835319, 20998873, 37743427, 28056159
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2230133264691131, 563950955091024, 2042915975426398,
+                827314356293472, 672028980152815
+#else
+                17510331, 33231575, 5854288, 8403524, 17133918, 30441820,
+                38997856, 12327944, 10750447, 10014012
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                264204366029760, 1654686424479449, 2185050199932931,
+                2207056159091748, 506015669043634
+#else
+                56796096, 3936951, 9156313, 24656749, 16498691, 32559785,
+                39627812, 32887699, 3424690, 7540221
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1784446333136569, 1973746527984364, 334856327359575,
+                1156769775884610, 1023950124675478
+#else
+                30322361, 26590322, 11361004, 29411115, 7433303, 4989748,
+                60037442, 17237212, 57864598, 15258045
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2065270940578383, 31477096270353, 306421879113491,
+                181958643936686, 1907105536686083
+#else
+                13054543, 30774935, 19155473, 469045, 54626067, 4566041,
+                5631406, 2711395, 1062915, 28418087
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1496516440779464, 1748485652986458, 872778352227340,
+                818358834654919, 97932669284220
+#else
+                47868616, 22299832, 37599834, 26054466, 61273100, 13005410,
+                61042375, 12194496, 32960380, 1459310
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                471636015770351, 672455402793577, 1804995246884103,
+                1842309243470804, 1501862504981682
+#else
+                19852015, 7027924, 23669353, 10020366, 8586503, 26896525,
+                394196, 27452547, 18638002, 22379495
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1013216974933691, 538921919682598, 1915776722521558,
+                1742822441583877, 1886550687916656
+#else
+                31395515, 15098109, 26581030, 8030562, 50580950, 28547297,
+                9012485, 25970078, 60465776, 28111795
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2094270000643336, 303971879192276, 40801275554748,
+                649448917027930, 1818544418535447
+#else
+                57916680, 31207054, 65111764, 4529533, 25766844, 607986,
+                67095642, 9677542, 34813975, 27098423
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2241737709499165, 549397817447461, 838180519319392,
+                1725686958520781, 1705639080897747
+#else
+                64664349, 33404494, 29348901, 8186665, 1873760, 12489863,
+                36174285, 25714739, 59256019, 25416002
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1216074541925116, 50120933933509, 1565829004133810,
+                721728156134580, 349206064666188
+#else
+                51872508, 18120922, 7766469, 746860, 26346930, 23332670,
+                39775412, 10754587, 57677388, 5203575
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                948617110470858, 346222547451945, 1126511960599975,
+                1759386906004538, 493053284802266
+#else
+                31834314, 14135496, 66338857, 5159117, 20917671, 16786336,
+                59640890, 26216907, 31809242, 7347066
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1454933046815146, 874696014266362, 1467170975468588,
+                1432316382418897, 2111710746366763
+#else
+                57502122, 21680191, 20414458, 13033986, 13716524, 21862551,
+                19797969, 21343177, 15192875, 31466942
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2105387117364450, 1996463405126433, 1303008614294500,
+                851908115948209, 1353742049788635
+#else
+                54445282, 31372712, 1168161, 29749623, 26747876, 19416341,
+                10609329, 12694420, 33473243, 20172328
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                750300956351719, 1487736556065813, 15158817002104,
+                1511998221598392, 971739901354129
+#else
+                33184999, 11180355, 15832085, 22169002, 65475192, 225883,
+                15089336, 22530529, 60973201, 14480052
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1874648163531693, 2124487685930551, 1810030029384882,
+                918400043048335, 586348627300650
+#else
+                31308717, 27934434, 31030839, 31657333, 15674546, 26971549,
+                5496207, 13685227, 27595050, 8737275
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1235084464747900, 1166111146432082, 1745394857881591,
+                1405516473883040, 4463504151617
+#else
+                46790012, 18404192, 10933842, 17376410, 8335351, 26008410,
+                36100512, 20943827, 26498113, 66511
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1663810156463827, 327797390285791, 1341846161759410,
+                1964121122800605, 1747470312055380
+#else
+                22644435, 24792703, 50437087, 4884561, 64003250, 19995065,
+                30540765, 29267685, 53781076, 26039336
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                660005247548233, 2071860029952887, 1358748199950107,
+                911703252219107, 1014379923023831
+#else
+                39091017, 9834844, 18617207, 30873120, 63706907, 20246925,
+                8205539, 13585437, 49981399, 15115438
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2206641276178231, 1690587809721504, 1600173622825126,
+                2156096097634421, 1106822408548216
+#else
+                23711543, 32881517, 31206560, 25191721, 6164646, 23844445,
+                33572981, 32128335, 8236920, 16492939
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1344788193552206, 1949552134239140, 1735915881729557,
+                675891104100469, 1834220014427292
+#else
+                43198286, 20038905, 40809380, 29050590, 25005589, 25867162,
+                19574901, 10071562, 6708380, 27332008
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1920949492387964, 158885288387530, 70308263664033,
+                626038464897817, 1468081726101009
+#else
+                2101372, 28624378, 19702730, 2367575, 51681697, 1047674,
+                5301017, 9328700, 29955601, 21876122
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                622221042073383, 1210146474039168, 1742246422343683,
+                1403839361379025, 417189490895736
+#else
+                3096359, 9271816, 45488000, 18032587, 52260867, 25961494,
+                41216721, 20918836, 57191288, 6216607
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                22727256592983, 168471543384997, 1324340989803650,
+                1839310709638189, 504999476432775
+#else
+                34493015, 338662, 41913253, 2510421, 37895298, 19734218,
+                24822829, 27407865, 40341383, 7525078
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1313240518756327, 1721896294296942, 52263574587266,
+                2065069734239232, 804910473424630
+#else
+                44042215, 19568808, 16133486, 25658254, 63719298, 778787,
+                66198528, 30771936, 47722230, 11994100
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1337466662091884, 1287645354669772, 2018019646776184,
+                652181229374245, 898011753211715
+#else
+                21691500, 19929806, 66467532, 19187410, 3285880, 30070836,
+                42044197, 9718257, 59631427, 13381417
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1969792547910734, 779969968247557, 2011350094423418,
+                1823964252907487, 1058949448296945
+#else
+                18445390, 29352196, 14979845, 11622458, 65381754, 29971451,
+                23111647, 27179185, 28535281, 15779576
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                207343737062002, 1118176942430253, 758894594548164,
+                806764629546266, 1157700123092949
+#else
+                30098034, 3089662, 57874477, 16662134, 45801924, 11308410,
+                53040410, 12021729, 9955285, 17251076
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1273565321399022, 1638509681964574, 759235866488935,
+                666015124346707, 897983460943405
+#else
+                9734894, 18977602, 59635230, 24415696, 2060391, 11313496,
+                48682835, 9924398, 20194861, 13380996
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1717263794012298, 1059601762860786, 1837819172257618,
+                1054130665797229, 680893204263559
+#else
+                40730762, 25589224, 44941042, 15789296, 49053522, 27385639,
+                65123949, 15707770, 26342023, 10146099
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2237039662793603, 2249022333361206, 2058613546633703,
+                149454094845279, 2215176649164582
+#else
+                41091971, 33334488, 21339190, 33513044, 19745255, 30675732,
+                37471583, 2227039, 21612326, 33008704
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                79472182719605, 1851130257050174, 1825744808933107,
+                821667333481068, 781795293511946
+#else
+                54031477, 1184227, 23562814, 27583990, 46757619, 27205717,
+                25764460, 12243797, 46252298, 11649657
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                755822026485370, 152464789723500, 1178207602290608,
+                410307889503239, 156581253571278
+#else
+                57077370, 11262625, 27384172, 2271902, 26947504, 17556661,
+                39943, 6114064, 33514190, 2333242
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1418185496130297, 484520167728613, 1646737281442950,
+                1401487684670265, 1349185550126961
+#else
+                45675257, 21132610, 8119781, 7219913, 45278342, 24538297,
+                60429113, 20883793, 24350577, 20104431
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1495380034400429, 325049476417173, 46346894893933,
+                1553408840354856, 828980101835683
+#else
+                62992557, 22282898, 43222677, 4843614, 37020525, 690622,
+                35572776, 23147595, 8317859, 12352766
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1280337889310282, 2070832742866672, 1640940617225222,
+                2098284908289951, 450929509534434
+#else
+                18200138, 19078521, 34021104, 30857812, 43406342, 24451920,
+                43556767, 31266881, 20712162, 6719373
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                407703353998781, 126572141483652, 286039827513621,
+                1999255076709338, 2030511179441770
+#else
+                26656189, 6075253, 59250308, 1886071, 38764821, 4262325,
+                11117530, 29791222, 26224234, 30256974
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1254958221100483, 1153235960999843, 942907704968834,
+                637105404087392, 1149293270147267
+#else
+                49939907, 18700334, 63713187, 17184554, 47154818, 14050419,
+                21728352, 9493610, 18620611, 17125804
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                894249020470196, 400291701616810, 406878712230981,
+                1599128793487393, 1145868722604026
+#else
+                53785524, 13325348, 11432106, 5964811, 18609221, 6062965,
+                61839393, 23828875, 36407290, 17074774
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1497955250203334, 110116344653260, 1128535642171976,
+                1900106496009660, 129792717460909
+#else
+                43248326, 22321272, 26961356, 1640861, 34695752, 16816491,
+                12248508, 28313793, 13735341, 1934062
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                452487513298665, 1352120549024569, 1173495883910956,
+                1999111705922009, 367328130454226
+#else
+                25089769, 6742589, 17081145, 20148166, 21909292, 17486451,
+                51972569, 29789085, 45830866, 5473615
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1717539401269642, 1475188995688487, 891921989653942,
+                836824441505699, 1885988485608364
+#else
+                31883658, 25593331, 1083431, 21982029, 22828470, 13290673,
+                59983779, 12469655, 29111212, 28103418
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1241784121422547, 187337051947583, 1118481812236193,
+                428747751936362, 30358898927325
+#else
+                24244947, 18504025, 40845887, 2791539, 52111265, 16666677,
+                24367466, 6388839, 56813277, 452382
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2022432361201842, 1088816090685051, 1977843398539868,
+                1854834215890724, 564238862029357
+#else
+                41468082, 30136590, 5217915, 16224624, 19987036, 29472163,
+                42872612, 27639183, 15766061, 8407814
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                938868489100585, 1100285072929025, 1017806255688848,
+                1957262154788833, 152787950560442
+#else
+                46701865, 13990230, 15495425, 16395525, 5377168, 15166495,
+                58191841, 29165478, 59040954, 2276717
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                867319417678923, 620471962942542, 226032203305716,
+                342001443957629, 1761675818237336
+#else
+                30157899, 12924066, 49396814, 9245752, 19895028, 3368142,
+                43281277, 5096218, 22740376, 26251015
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1295072362439987, 931227904689414, 1355731432641687,
+                922235735834035, 892227229410209
+#else
+                2041139, 19298082, 7783686, 13876377, 41161879, 20201972,
+                24051123, 13742383, 51471265, 13295221
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1680989767906154, 535362787031440, 2136691276706570,
+                1942228485381244, 1267350086882274
+#else
+                33338218, 25048699, 12532112, 7977527, 9106186, 31839181,
+                49388668, 28941459, 62657506, 18884987
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                366018233770527, 432660629755596, 126409707644535,
+                1973842949591662, 645627343442376
+#else
+                47063583, 5454096, 52762316, 6447145, 28862071, 1883651,
+                64639598, 29412551, 7770568, 9620597
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                535509430575217, 546885533737322, 1524675609547799,
+                2138095752851703, 1260738089896827
+#else
+                23208049, 7979712, 33071466, 8149229, 1758231, 22719437,
+                30945527, 31860109, 33606523, 18786461
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1159906385590467, 2198530004321610, 714559485023225,
+                81880727882151, 1484020820037082
+#else
+                1439939, 17283952, 66028874, 32760649, 4625401, 10647766,
+                62065063, 1220117, 30494170, 22113633
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1377485731340769, 2046328105512000, 1802058637158797,
+                62146136768173, 1356993908853901
+#else
+                62071265, 20526136, 64138304, 30492664, 15640973, 26852766,
+                40369837, 926049, 65424525, 20220784
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2013612215646735, 1830770575920375, 536135310219832,
+                609272325580394, 270684344495013
+#else
+                13908495, 30005160, 30919927, 27280607, 45587000, 7989038,
+                9021034, 9078865, 3353509, 4033511
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1237542585982777, 2228682050256790, 1385281931622824,
+                593183794882890, 493654978552689
+#else
+                37445433, 18440821, 32259990, 33209950, 24295848, 20642309,
+                23161162, 8839127, 27485041, 7356032
+#endif
+            }},
+        },
+    },
+    {
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                47341488007760, 1891414891220257, 983894663308928,
+                176161768286818, 1126261115179708
+#else
+                9661008, 705443, 11980065, 28184278, 65480320, 14661172,
+                60762722, 2625014, 28431036, 16782598
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1694030170963455, 502038567066200, 1691160065225467,
+                949628319562187, 275110186693066
+#else
+                43269631, 25243016, 41163352, 7480957, 49427195, 25200248,
+                44562891, 14150564, 15970762, 4099461
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1124515748676336, 1661673816593408, 1499640319059718,
+                1584929449166988, 558148594103306
+#else
+                29262576, 16756590, 26350592, 24760869, 8529670, 22346382,
+                13617292, 23617289, 11465738, 8317062
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1784525599998356, 1619698033617383, 2097300287550715,
+                258265458103756, 1905684794832758
+#else
+                41615764, 26591503, 32500199, 24135381, 44070139, 31252209,
+                14898636, 3848455, 20969334, 28396916
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1288941072872766, 931787902039402, 190731008859042,
+                2006859954667190, 1005931482221702
+#else
+                46724414, 19206718, 48772458, 13884721, 34069410, 2842113,
+                45498038, 29904543, 11177094, 14989547
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1465551264822703, 152905080555927, 680334307368453,
+                173227184634745, 666407097159852
+#else
+                42612143, 21838415, 16959895, 2278463, 12066309, 10137771,
+                13515641, 2581286, 38621356, 9930239
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2111017076203943, 1378760485794347, 1248583954016456,
+                1352289194864422, 1895180776543896
+#else
+                49357223, 31456605, 16544299, 20545132, 51194056, 18605350,
+                18345766, 20150679, 16291480, 28240394
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                171348223915638, 662766099800389, 462338943760497,
+                466917763340314, 656911292869115
+#else
+                33879670, 2553287, 32678213, 9875984, 8534129, 6889387,
+                57432090, 6957616, 4368891, 9788741
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                488623681976577, 866497561541722, 1708105560937768,
+                1673781214218839, 1506146329818807
+#else
+                16660737, 7281060, 56278106, 12911819, 20108584, 25452756,
+                45386327, 24941283, 16250551, 22443329
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                160425464456957, 950394373239689, 430497123340934,
+                711676555398832, 320964687779005
+#else
+                47343357, 2390525, 50557833, 14161979, 1905286, 6414907,
+                4689584, 10604807, 36918461, 4782746
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                988979367990485, 1359729327576302, 1301834257246029,
+                294141160829308, 29348272277475
+#else
+                65754325, 14736940, 59741422, 20261545, 7710541, 19398842,
+                57127292, 4383044, 22546403, 437323
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1434382743317910, 100082049942065, 221102347892623,
+                186982837860588, 1305765053501834
+#else
+                31665558, 21373968, 50922033, 1491338, 48740239, 3294681,
+                27343084, 2786261, 36475274, 19457415
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                2205916462268190, 499863829790820, 961960554686616,
+                158062762756985, 1841471168298305
+#else
+                52641566, 32870716, 33734756, 7448551, 19294360, 14334329,
+                47418233, 2355318, 47824193, 27440058
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1191737341426592, 1847042034978363, 1382213545049056,
+                1039952395710448, 788812858896859
+#else
+                15121312, 17758270, 6377019, 27523071, 56310752, 20596586,
+                18952176, 15496498, 37728731, 11754227
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1346965964571152, 1291881610839830, 2142916164336056,
+                786821641205979, 1571709146321039
+#else
+                64471568, 20071356, 8488726, 19250536, 12728760, 31931939,
+                7141595, 11724556, 22761615, 23420291
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                787164375951248, 202869205373189, 1356590421032140,
+                1431233331032510, 786341368775957
+#else
+                16918416, 11729663, 49025285, 3022986, 36093132, 20214772,
+                38367678, 21327038, 32851221, 11717399
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                492448143532951, 304105152670757, 1761767168301056,
+                233782684697790, 1981295323106089
+#else
+                11166615, 7338049, 60386341, 4531519, 37640192, 26252376,
+                31474878, 3483633, 65915689, 29523600
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                665807507761866, 1343384868355425, 895831046139653,
+                439338948736892, 1986828765695105
+#else
+                66923210, 9921304, 31456609, 20017994, 55095045, 13348922,
+                33142652, 6546660, 47123585, 29606055
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                756096210874553, 1721699973539149, 258765301727885,
+                1390588532210645, 1212530909934781
+#else
+                34648249, 11266711, 55911757, 25655328, 31703693, 3855903,
+                58571733, 20721383, 36336829, 18068118
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                852891097972275, 1816988871354562, 1543772755726524,
+                1174710635522444, 202129090724628
+#else
+                49102387, 12709067, 3991746, 27075244, 45617340, 23004006,
+                35973516, 17504552, 10928916, 3011958
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1205281565824323, 22430498399418, 992947814485516,
+                1392458699738672, 688441466734558
+#else
+                60151107, 17960094, 31696058, 334240, 29576716, 14796075,
+                36277808, 20749251, 18008030, 10258577
+#endif
+            }},
+        },
+        {
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1050627428414972, 1955849529137135, 2171162376368357,
+                91745868298214, 447733118757826
+#else
+                44660220, 15655568, 7018479, 29144429, 36794597, 32352840,
+                65255398, 1367119, 25127874, 6671743
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1287181461435438, 622722465530711, 880952150571872,
+                741035693459198, 311565274989772
+#else
+                29701166, 19180498, 56230743, 9279287, 67091296, 13127209,
+                21382910, 11042292, 25838796, 4642684
+#endif
+            }},
+            {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+                1003649078149734, 545233927396469, 1849786171789880,
+                1318943684880434, 280345687170552
+#else
+                46678630, 14955536, 42982517, 8124618, 61739576, 27563961,
+                30468146, 19653792, 18423288, 4177476
+#endif
+            }},
+        },
+    },
+};
+
+#endif  // OPENSSL_SMALL
+
+// Bi[i] = (2*i+1)*B
+static const ge_precomp Bi[8] = {
+    {
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            1288382639258501, 245678601348599, 269427782077623,
+            1462984067271730, 137412439391563
+#else
+            25967493, 19198397, 29566455, 3660896, 54414519, 4014786, 27544626,
+            21800161, 61029707, 2047604
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            62697248952638, 204681361388450, 631292143396476, 338455783676468,
+            1213667448819585
+#else
+            54563134, 934261, 64385954, 3049989, 66381436, 9406985, 12720692,
+            5043384, 19500929, 18085054
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            301289933810280, 1259582250014073, 1422107436869536,
+            796239922652654, 1953934009299142
+#else
+            58370664, 4489569, 9688441, 18769238, 10184608, 21191052, 29287918,
+            11864899, 42594502, 29115885
+#endif
+        }},
+    },
+    {
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            1601611775252272, 1720807796594148, 1132070835939856,
+            1260455018889551, 2147779492816911
+#else
+            15636272, 23865875, 24204772, 25642034, 616976, 16869170, 27787599,
+            18782243, 28944399, 32004408
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            316559037616741, 2177824224946892, 1459442586438991,
+            1461528397712656, 751590696113597
+#else
+            16568933, 4717097, 55552716, 32452109, 15682895, 21747389, 16354576,
+            21778470, 7689661, 11199574
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            1850748884277385, 1200145853858453, 1068094770532492,
+            672251375690438, 1586055907191707
+#else
+            30464137, 27578307, 55329429, 17883566, 23220364, 15915852, 7512774,
+            10017326, 49359771, 23634074
+#endif
+        }},
+    },
+    {
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            769950342298419, 132954430919746, 844085933195555, 974092374476333,
+            726076285546016
+#else
+            10861363, 11473154, 27284546, 1981175, 37044515, 12577860, 32867885,
+            14515107, 51670560, 10819379
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            425251763115706, 608463272472562, 442562545713235, 837766094556764,
+            374555092627893
+#else
+            4708026, 6336745, 20377586, 9066809, 55836755, 6594695, 41455196,
+            12483687, 54440373, 5581305
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            1086255230780037, 274979815921559, 1960002765731872,
+            929474102396301, 1190409889297339
+#else
+            19563141, 16186464, 37722007, 4097518, 10237984, 29206317, 28542349,
+            13850243, 43430843, 17738489
+#endif
+        }},
+    },
+    {
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            665000864555967, 2065379846933859, 370231110385876, 350988370788628,
+            1233371373142985
+#else
+            5153727, 9909285, 1723747, 30776558, 30523604, 5516873, 19480852,
+            5230134, 43156425, 18378665
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            2019367628972465, 676711900706637, 110710997811333,
+            1108646842542025, 517791959672113
+#else
+            36839857, 30090922, 7665485, 10083793, 28475525, 1649722, 20654025,
+            16520125, 30598449, 7715701
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            965130719900578, 247011430587952, 526356006571389, 91986625355052,
+            2157223321444601
+#else
+            28881826, 14381568, 9657904, 3680757, 46927229, 7843315, 35708204,
+            1370707, 29794553, 32145132
+#endif
+        }},
+    },
+    {
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            1802695059465007, 1664899123557221, 593559490740857,
+            2160434469266659, 927570450755031
+#else
+            44589871, 26862249, 14201701, 24808930, 43598457, 8844725, 18474211,
+            32192982, 54046167, 13821876
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            1725674970513508, 1933645953859181, 1542344539275782,
+            1767788773573747, 1297447965928905
+#else
+            60653668, 25714560, 3374701, 28813570, 40010246, 22982724, 31655027,
+            26342105, 18853321, 19333481
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            1381809363726107, 1430341051343062, 2061843536018959,
+            1551778050872521, 2036394857967624
+#else
+            4566811, 20590564, 38133974, 21313742, 59506191, 30723862, 58594505,
+            23123294, 2207752, 30344648
+#endif
+        }},
+    },
+    {
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            1970894096313054, 528066325833207, 1619374932191227,
+            2207306624415883, 1169170329061080
+#else
+            41954014, 29368610, 29681143, 7868801, 60254203, 24130566, 54671499,
+            32891431, 35997400, 17421995
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            2070390218572616, 1458919061857835, 624171843017421,
+            1055332792707765, 433987520732508
+#else
+            25576264, 30851218, 7349803, 21739588, 16472781, 9300885, 3844789,
+            15725684, 171356, 6466918
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            893653801273833, 1168026499324677, 1242553501121234,
+            1306366254304474, 1086752658510815
+#else
+            23103977, 13316479, 9739013, 17404951, 817874, 18515490, 8965338,
+            19466374, 36393951, 16193876
+#endif
+        }},
+    },
+    {
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            213454002618221, 939771523987438, 1159882208056014, 317388369627517,
+            621213314200687
+#else
+            33587053, 3180712, 64714734, 14003686, 50205390, 17283591, 17238397,
+            4729455, 49034351, 9256799
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            1971678598905747, 338026507889165, 762398079972271, 655096486107477,
+            42299032696322
+#else
+            41926547, 29380300, 32336397, 5036987, 45872047, 11360616, 22616405,
+            9761698, 47281666, 630304
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            177130678690680, 1754759263300204, 1864311296286618,
+            1180675631479880, 1292726903152791
+#else
+            53388152, 2639452, 42871404, 26147950, 9494426, 27780403, 60554312,
+            17593437, 64659607, 19263131
+#endif
+        }},
+    },
+    {
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            1913163449625248, 460779200291993, 2193883288642314,
+            1008900146920800, 1721983679009502
+#else
+            63957664, 28508356, 9282713, 6866145, 35201802, 32691408, 48168288,
+            15033783, 25105118, 25659556
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            1070401523076875, 1272492007800961, 1910153608563310,
+            2075579521696771, 1191169788841221
+#else
+            42782475, 15950225, 35307649, 18961608, 55446126, 28463506, 1573891,
+            30928545, 2198789, 17749813
+#endif
+        }},
+        {{
+#if defined(BORINGSSL_CURVE25519_64BIT)
+            692896803108118, 500174642072499, 2068223309439677,
+            1162190621851337, 1426986007309901
+#else
+            64009494, 10324966, 64867251, 7453182, 61661885, 30818928, 53296841,
+            17317989, 34647629, 21263748
+#endif
+        }},
+    },
+};
diff --git a/src/crypto/curve25519/internal.h b/src/crypto/curve25519/internal.h
new file mode 100644
index 0000000..01be307
--- /dev/null
+++ b/src/crypto/curve25519/internal.h
@@ -0,0 +1,146 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#ifndef OPENSSL_HEADER_CURVE25519_INTERNAL_H
+#define OPENSSL_HEADER_CURVE25519_INTERNAL_H
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+#include <openssl/base.h>
+
+#include "../internal.h"
+
+
+#if defined(OPENSSL_ARM) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_APPLE)
+#define BORINGSSL_X25519_NEON
+
+// x25519_NEON is defined in asm/x25519-arm.S.
+void x25519_NEON(uint8_t out[32], const uint8_t scalar[32],
+                 const uint8_t point[32]);
+#endif
+
+#if defined(BORINGSSL_HAS_UINT128)
+#define BORINGSSL_CURVE25519_64BIT
+#endif
+
+#if defined(BORINGSSL_CURVE25519_64BIT)
+// fe means field element. Here the field is \Z/(2^255-19). An element t,
+// entries t[0]...t[4], represents the integer t[0]+2^51 t[1]+2^102 t[2]+2^153
+// t[3]+2^204 t[4].
+// fe limbs are bounded by 1.125*2^51.
+// Multiplication and carrying produce fe from fe_loose.
+typedef struct fe { uint64_t v[5]; } fe;
+
+// fe_loose limbs are bounded by 3.375*2^51.
+// Addition and subtraction produce fe_loose from (fe, fe).
+typedef struct fe_loose { uint64_t v[5]; } fe_loose;
+#else
+// fe means field element. Here the field is \Z/(2^255-19). An element t,
+// entries t[0]...t[9], represents the integer t[0]+2^26 t[1]+2^51 t[2]+2^77
+// t[3]+2^102 t[4]+...+2^230 t[9].
+// fe limbs are bounded by 1.125*2^26,1.125*2^25,1.125*2^26,1.125*2^25,etc.
+// Multiplication and carrying produce fe from fe_loose.
+typedef struct fe { uint32_t v[10]; } fe;
+
+// fe_loose limbs are bounded by 3.375*2^26,3.375*2^25,3.375*2^26,3.375*2^25,etc.
+// Addition and subtraction produce fe_loose from (fe, fe).
+typedef struct fe_loose { uint32_t v[10]; } fe_loose;
+#endif
+
+// ge means group element.
+//
+// Here the group is the set of pairs (x,y) of field elements (see fe.h)
+// satisfying -x^2 + y^2 = 1 + d x^2y^2
+// where d = -121665/121666.
+//
+// Representations:
+//   ge_p2 (projective): (X:Y:Z) satisfying x=X/Z, y=Y/Z
+//   ge_p3 (extended): (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT
+//   ge_p1p1 (completed): ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T
+//   ge_precomp (Duif): (y+x,y-x,2dxy)
+
+typedef struct {
+  fe X;
+  fe Y;
+  fe Z;
+} ge_p2;
+
+typedef struct {
+  fe X;
+  fe Y;
+  fe Z;
+  fe T;
+} ge_p3;
+
+typedef struct {
+  fe_loose X;
+  fe_loose Y;
+  fe_loose Z;
+  fe_loose T;
+} ge_p1p1;
+
+typedef struct {
+  fe_loose yplusx;
+  fe_loose yminusx;
+  fe_loose xy2d;
+} ge_precomp;
+
+typedef struct {
+  fe_loose YplusX;
+  fe_loose YminusX;
+  fe_loose Z;
+  fe_loose T2d;
+} ge_cached;
+
+void x25519_ge_tobytes(uint8_t s[32], const ge_p2 *h);
+int x25519_ge_frombytes_vartime(ge_p3 *h, const uint8_t *s);
+void x25519_ge_p3_to_cached(ge_cached *r, const ge_p3 *p);
+void x25519_ge_p1p1_to_p2(ge_p2 *r, const ge_p1p1 *p);
+void x25519_ge_p1p1_to_p3(ge_p3 *r, const ge_p1p1 *p);
+void x25519_ge_add(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q);
+void x25519_ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q);
+void x25519_ge_scalarmult_small_precomp(
+    ge_p3 *h, const uint8_t a[32], const uint8_t precomp_table[15 * 2 * 32]);
+void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t a[32]);
+void x25519_ge_scalarmult(ge_p2 *r, const uint8_t *scalar, const ge_p3 *A);
+void x25519_sc_reduce(uint8_t s[64]);
+
+enum spake2_state_t {
+  spake2_state_init = 0,
+  spake2_state_msg_generated,
+  spake2_state_key_generated,
+};
+
+struct spake2_ctx_st {
+  uint8_t private_key[32];
+  uint8_t my_msg[32];
+  uint8_t password_scalar[32];
+  uint8_t password_hash[64];
+  uint8_t *my_name;
+  size_t my_name_len;
+  uint8_t *their_name;
+  size_t their_name_len;
+  enum spake2_role_t my_role;
+  enum spake2_state_t state;
+  char disable_password_scalar_hack;
+};
+
+
+#if defined(__cplusplus)
+}  // extern C
+#endif
+
+#endif  // OPENSSL_HEADER_CURVE25519_INTERNAL_H
diff --git a/src/crypto/curve25519/make_curve25519_tables.py b/src/crypto/curve25519/make_curve25519_tables.py
new file mode 100755
index 0000000..50dee2a
--- /dev/null
+++ b/src/crypto/curve25519/make_curve25519_tables.py
@@ -0,0 +1,222 @@
+#!/usr/bin/env python
+# coding=utf-8
+# Copyright (c) 2020, Google Inc.
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import StringIO
+import subprocess
+
+# Base field Z_p
+p = 2**255 - 19
+
+def modp_inv(x):
+    return pow(x, p-2, p)
+
+# Square root of -1
+modp_sqrt_m1 = pow(2, (p-1) // 4, p)
+
+# Compute corresponding x-coordinate, with low bit corresponding to
+# sign, or return None on failure
+def recover_x(y, sign):
+    if y >= p:
+        return None
+    x2 = (y*y-1) * modp_inv(d*y*y+1)
+    if x2 == 0:
+        if sign:
+            return None
+        else:
+            return 0
+
+    # Compute square root of x2
+    x = pow(x2, (p+3) // 8, p)
+    if (x*x - x2) % p != 0:
+        x = x * modp_sqrt_m1 % p
+    if (x*x - x2) % p != 0:
+        return None
+
+    if (x & 1) != sign:
+        x = p - x
+    return x
+
+# Curve constant
+d = -121665 * modp_inv(121666) % p
+
+# Base point
+g_y = 4 * modp_inv(5) % p
+g_x = recover_x(g_y, 0)
+
+# Points are represented as affine tuples (x, y).
+
+def point_add(P, Q):
+    x1, y1 = P
+    x2, y2 = Q
+    x3 = ((x1*y2 + y1*x2) * modp_inv(1 + d*x1*x2*y1*y2)) % p
+    y3 = ((y1*y2 + x1*x2) * modp_inv(1 - d*x1*x2*y1*y2)) % p
+    return (x3, y3)
+
+# Computes Q = s * P
+def point_mul(s, P):
+    Q = (0, 1)  # Neutral element
+    while s > 0:
+        if s & 1:
+            Q = point_add(Q, P)
+        P = point_add(P, P)
+        s >>= 1
+    return Q
+
+def to_bytes(x):
+    ret = bytearray(32)
+    for i in range(len(ret)):
+        ret[i] = x % 256
+        x >>= 8
+    assert x == 0
+    return ret
+
+def to_ge_precomp(P):
+    # typedef struct {
+    #   fe_loose yplusx;
+    #   fe_loose yminusx;
+    #   fe_loose xy2d;
+    # } ge_precomp;
+    x, y = P
+    return ((y + x) % p, (y - x) % p, (x * y * 2 * d) % p)
+
+def to_base_25_5(x):
+    limbs = (26, 25, 26, 25, 26, 25, 26, 25, 26, 25)
+    ret = []
+    for l in limbs:
+        ret.append(x & ((1<<l) - 1))
+        x >>= l
+    assert x == 0
+    return ret
+
+def to_base_51(x):
+    ret = []
+    for _ in range(5):
+        ret.append(x & ((1<<51) - 1))
+        x >>= 51
+    assert x == 0
+    return ret
+
+def to_literal(x):
+    ret = "{{\n#if defined(BORINGSSL_CURVE25519_64BIT)\n"
+    ret += ", ".join(map(str, to_base_51(x)))
+    ret += "\n#else\n"
+    ret += ", ".join(map(str, to_base_25_5(x)))
+    ret += "\n#endif\n}}"
+    return ret
+
+def main():
+    d2 = (2 * d) % p
+
+    small_precomp = bytearray()
+    for i in range(1, 16):
+        s = (i&1) | ((i&2) << (64-1)) | ((i&4) << (128-2)) | ((i&8) << (192-3))
+        P = point_mul(s, (g_x, g_y))
+        small_precomp += to_bytes(P[0])
+        small_precomp += to_bytes(P[1])
+
+    large_precomp = []
+    for i in range(32):
+        large_precomp.append([])
+        for j in range(8):
+            P = point_mul((j + 1) << (i * 8), (g_x, g_y))
+            large_precomp[-1].append(to_ge_precomp(P))
+
+    bi_precomp = []
+    for i in range(8):
+        P = point_mul(2*i + 1, (g_x, g_y))
+        bi_precomp.append(to_ge_precomp(P))
+
+
+    buf = StringIO.StringIO()
+    buf.write("""/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+// This file is generated from
+//    ./make_curve25519_tables.py > curve25519_tables.h
+
+
+static const fe d = """)
+    buf.write(to_literal(d))
+    buf.write(""";
+
+static const fe sqrtm1 = """)
+    buf.write(to_literal(modp_sqrt_m1))
+    buf.write(""";
+
+static const fe d2 = """)
+    buf.write(to_literal(d2))
+    buf.write(""";
+
+#if defined(OPENSSL_SMALL)
+
+// This block of code replaces the standard base-point table with a much smaller
+// one. The standard table is 30,720 bytes while this one is just 960.
+//
+// This table contains 15 pairs of group elements, (x, y), where each field
+// element is serialised with |fe_tobytes|. If |i| is the index of the group
+// element then consider i+1 as a four-bit number: (i₀, i₁, i₂, i₃) (where i₀
+// is the most significant bit). The value of the group element is then:
+// (i₀×2^192 + i₁×2^128 + i₂×2^64 + i₃)G, where G is the generator.
+static const uint8_t k25519SmallPrecomp[15 * 2 * 32] = {""")
+    for i, b in enumerate(small_precomp):
+        buf.write("0x%02x, " % b)
+    buf.write("""
+};
+
+#else
+
+// k25519Precomp[i][j] = (j+1)*256^i*B
+static const ge_precomp k25519Precomp[32][8] = {
+""")
+    for child in large_precomp:
+        buf.write("{\n")
+        for val in child:
+            buf.write("{\n")
+            for term in val:
+                buf.write(to_literal(term) + ",\n")
+            buf.write("},\n")
+        buf.write("},\n")
+    buf.write("""};
+
+#endif  // OPENSSL_SMALL
+
+// Bi[i] = (2*i+1)*B
+static const ge_precomp Bi[8] = {
+""")
+    for val in bi_precomp:
+        buf.write("{\n")
+        for term in val:
+                buf.write(to_literal(term) + ",\n")
+        buf.write("},\n")
+    buf.write("""};
+""")
+
+    proc = subprocess.Popen(["clang-format"], stdin=subprocess.PIPE)
+    proc.communicate(buf.getvalue())
+
+if __name__ == "__main__":
+    main()
diff --git a/src/crypto/curve25519/spake25519.c b/src/crypto/curve25519/spake25519.c
index 650178c..f750911 100644
--- a/src/crypto/curve25519/spake25519.c
+++ b/src/crypto/curve25519/spake25519.c
@@ -23,7 +23,7 @@
 #include <openssl/sha.h>
 
 #include "../internal.h"
-#include "../../third_party/fiat/internal.h"
+#include "./internal.h"
 
 
 // The following precomputation tables are for the following
diff --git a/src/crypto/curve25519/spake25519_test.cc b/src/crypto/curve25519/spake25519_test.cc
index 71c9771..df20ec8 100644
--- a/src/crypto/curve25519/spake25519_test.cc
+++ b/src/crypto/curve25519/spake25519_test.cc
@@ -23,7 +23,7 @@
 #include <gtest/gtest.h>
 
 #include "../internal.h"
-#include "../../third_party/fiat/internal.h"
+#include "./internal.h"
 
 
 // TODO(agl): add tests with fixed vectors once SPAKE2 is nailed down.
diff --git a/src/crypto/dh/dh.c b/src/crypto/dh/dh.c
index 68d710d..3df9a80 100644
--- a/src/crypto/dh/dh.c
+++ b/src/crypto/dh/dh.c
@@ -113,6 +113,16 @@
   OPENSSL_free(dh);
 }
 
+const BIGNUM *DH_get0_pub_key(const DH *dh) { return dh->pub_key; }
+
+const BIGNUM *DH_get0_priv_key(const DH *dh) { return dh->priv_key; }
+
+const BIGNUM *DH_get0_p(const DH *dh) { return dh->p; }
+
+const BIGNUM *DH_get0_q(const DH *dh) { return dh->q; }
+
+const BIGNUM *DH_get0_g(const DH *dh) { return dh->g; }
+
 void DH_get0_key(const DH *dh, const BIGNUM **out_pub_key,
                  const BIGNUM **out_priv_key) {
   if (out_pub_key != NULL) {
@@ -174,6 +184,11 @@
   return 1;
 }
 
+int DH_set_length(DH *dh, unsigned priv_length) {
+  dh->priv_length = priv_length;
+  return 1;
+}
+
 int DH_generate_parameters_ex(DH *dh, int prime_bits, int generator, BN_GENCB *cb) {
   // We generate DH parameters as follows
   // find a prime q which is prime_bits/2 bits long.
diff --git a/src/crypto/digest_extra/digest_test.cc b/src/crypto/digest_extra/digest_test.cc
index 5cfe1c8..ba0884a 100644
--- a/src/crypto/digest_extra/digest_test.cc
+++ b/src/crypto/digest_extra/digest_test.cc
@@ -53,6 +53,7 @@
 static const MD sha256 = { "SHA256", &EVP_sha256, &SHA256 };
 static const MD sha384 = { "SHA384", &EVP_sha384, &SHA384 };
 static const MD sha512 = { "SHA512", &EVP_sha512, &SHA512 };
+static const MD sha512_256 = { "SHA512-256", &EVP_sha512_256, &SHA512_256 };
 static const MD md5_sha1 = { "MD5-SHA1", &EVP_md5_sha1, nullptr };
 
 struct DigestTestVector {
@@ -69,79 +70,81 @@
 static const DigestTestVector kTestVectors[] = {
     // MD4 tests, from RFC 1320. (crypto/md4 does not provide a
     // one-shot MD4 function.)
-    { md4, "", 1, "31d6cfe0d16ae931b73c59d7e0c089c0" },
-    { md4, "a", 1, "bde52cb31de33e46245e05fbdbd6fb24" },
-    { md4, "abc", 1, "a448017aaf21d8525fc10ae87aa6729d" },
-    { md4, "message digest", 1, "d9130a8164549fe818874806e1c7014b" },
-    { md4, "abcdefghijklmnopqrstuvwxyz", 1,
-      "d79e1c308aa5bbcdeea8ed63df412da9" },
-    { md4,
-      "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 1,
-      "043f8582f241db351ce627e153e7f0e4" },
-    { md4, "1234567890", 8, "e33b4ddc9c38f2199c3e7b164fcc0536" },
+    {md4, "", 1, "31d6cfe0d16ae931b73c59d7e0c089c0"},
+    {md4, "a", 1, "bde52cb31de33e46245e05fbdbd6fb24"},
+    {md4, "abc", 1, "a448017aaf21d8525fc10ae87aa6729d"},
+    {md4, "message digest", 1, "d9130a8164549fe818874806e1c7014b"},
+    {md4, "abcdefghijklmnopqrstuvwxyz", 1, "d79e1c308aa5bbcdeea8ed63df412da9"},
+    {md4, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 1,
+     "043f8582f241db351ce627e153e7f0e4"},
+    {md4, "1234567890", 8, "e33b4ddc9c38f2199c3e7b164fcc0536"},
 
     // MD5 tests, from RFC 1321.
-    { md5, "", 1, "d41d8cd98f00b204e9800998ecf8427e" },
-    { md5, "a", 1, "0cc175b9c0f1b6a831c399e269772661" },
-    { md5, "abc", 1, "900150983cd24fb0d6963f7d28e17f72" },
-    { md5, "message digest", 1, "f96b697d7cb7938d525a2f31aaf161d0" },
-    { md5, "abcdefghijklmnopqrstuvwxyz", 1,
-      "c3fcd3d76192e4007dfb496cca67e13b" },
-    { md5,
-      "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 1,
-      "d174ab98d277d9f5a5611c2c9f419d9f" },
-    { md5, "1234567890", 8, "57edf4a22be3c955ac49da2e2107b67a" },
+    {md5, "", 1, "d41d8cd98f00b204e9800998ecf8427e"},
+    {md5, "a", 1, "0cc175b9c0f1b6a831c399e269772661"},
+    {md5, "abc", 1, "900150983cd24fb0d6963f7d28e17f72"},
+    {md5, "message digest", 1, "f96b697d7cb7938d525a2f31aaf161d0"},
+    {md5, "abcdefghijklmnopqrstuvwxyz", 1, "c3fcd3d76192e4007dfb496cca67e13b"},
+    {md5, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 1,
+     "d174ab98d277d9f5a5611c2c9f419d9f"},
+    {md5, "1234567890", 8, "57edf4a22be3c955ac49da2e2107b67a"},
 
     // SHA-1 tests, from RFC 3174.
-    { sha1, "abc", 1, "a9993e364706816aba3e25717850c26c9cd0d89d" },
-    { sha1,
-      "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 1,
-      "84983e441c3bd26ebaae4aa1f95129e5e54670f1" },
-    { sha1, "a", 1000000, "34aa973cd4c4daa4f61eeb2bdbad27316534016f" },
-    { sha1,
-      "0123456701234567012345670123456701234567012345670123456701234567", 10,
-      "dea356a2cddd90c7a7ecedc5ebb563934f460452" },
+    {sha1, "abc", 1, "a9993e364706816aba3e25717850c26c9cd0d89d"},
+    {sha1, "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 1,
+     "84983e441c3bd26ebaae4aa1f95129e5e54670f1"},
+    {sha1, "a", 1000000, "34aa973cd4c4daa4f61eeb2bdbad27316534016f"},
+    {sha1, "0123456701234567012345670123456701234567012345670123456701234567",
+     10, "dea356a2cddd90c7a7ecedc5ebb563934f460452"},
 
     // SHA-224 tests, from RFC 3874.
-    { sha224, "abc", 1,
-      "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7" },
-    { sha224,
-      "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 1,
-      "75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525" },
-    { sha224,
-      "a", 1000000,
-      "20794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67" },
+    {sha224, "abc", 1,
+     "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7"},
+    {sha224, "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 1,
+     "75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525"},
+    {sha224, "a", 1000000,
+     "20794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67"},
 
     // SHA-256 tests, from NIST.
-    { sha256, "abc", 1,
-      "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" },
-    { sha256,
-      "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 1,
-      "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1" },
+    {sha256, "abc", 1,
+     "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"},
+    {sha256, "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 1,
+     "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"},
 
     // SHA-384 tests, from NIST.
-    { sha384, "abc", 1,
-      "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed"
-      "8086072ba1e7cc2358baeca134c825a7" },
-    { sha384,
-      "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
-      "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", 1,
-      "09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712"
-      "fcc7c71a557e2db966c3e9fa91746039" },
+    {sha384, "abc", 1,
+     "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed"
+     "8086072ba1e7cc2358baeca134c825a7"},
+    {sha384,
+     "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
+     "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
+     1,
+     "09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712"
+     "fcc7c71a557e2db966c3e9fa91746039"},
 
     // SHA-512 tests, from NIST.
-    { sha512, "abc", 1,
-      "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a"
-      "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f" },
-    { sha512,
-      "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
-      "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", 1,
-      "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018"
-      "501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909" },
+    {sha512, "abc", 1,
+     "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a"
+     "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"},
+    {sha512,
+     "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
+     "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
+     1,
+     "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018"
+     "501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909"},
+
+    // SHA-512-256 tests, from
+    // https://csrc.nist.gov/csrc/media/projects/cryptographic-standards-and-guidelines/documents/examples/sha512_256.pdf
+    {sha512_256, "abc", 1,
+     "53048e2681941ef99b2e29b76b4c7dabe4c2d0c634fc6d46e0e2f13107e7af23"},
+    {sha512_256,
+     "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopj"
+     "klmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
+     1, "3928e184fb8690f840da3988121d31be65cb9d3ef83ee6146feac861e19b563a"},
 
     // MD5-SHA1 tests.
-    { md5_sha1, "abc", 1,
-      "900150983cd24fb0d6963f7d28e17f72a9993e364706816aba3e25717850c26c9cd0d89d" },
+    {md5_sha1, "abc", 1,
+     "900150983cd24fb0d6963f7d28e17f72a9993e364706816aba3e25717850c26c9cd0d89d"},
 };
 
 static void CompareDigest(const DigestTestVector *test,
diff --git a/src/crypto/dsa/dsa.c b/src/crypto/dsa/dsa.c
index cc98225..c869568 100644
--- a/src/crypto/dsa/dsa.c
+++ b/src/crypto/dsa/dsa.c
@@ -72,12 +72,11 @@
 #include <openssl/sha.h>
 #include <openssl/thread.h>
 
+#include "internal.h"
 #include "../fipsmodule/bn/internal.h"
 #include "../internal.h"
 
 
-#define OPENSSL_DSA_MAX_MODULUS_BITS 10000
-
 // Primality test according to FIPS PUB 186[-1], Appendix 2.1: 50 rounds of
 // Miller-Rabin.
 #define DSS_prime_checks 50
@@ -131,6 +130,16 @@
   return 1;
 }
 
+const BIGNUM *DSA_get0_pub_key(const DSA *dsa) { return dsa->pub_key; }
+
+const BIGNUM *DSA_get0_priv_key(const DSA *dsa) { return dsa->priv_key; }
+
+const BIGNUM *DSA_get0_p(const DSA *dsa) { return dsa->p; }
+
+const BIGNUM *DSA_get0_q(const DSA *dsa) { return dsa->q; }
+
+const BIGNUM *DSA_get0_g(const DSA *dsa) { return dsa->g; }
+
 void DSA_get0_key(const DSA *dsa, const BIGNUM **out_pub_key,
                   const BIGNUM **out_priv_key) {
   if (out_pub_key != NULL) {
@@ -558,23 +567,7 @@
 }
 
 DSA_SIG *DSA_do_sign(const uint8_t *digest, size_t digest_len, const DSA *dsa) {
-  if (!dsa->p || !dsa->q || !dsa->g) {
-    OPENSSL_PUT_ERROR(DSA, DSA_R_MISSING_PARAMETERS);
-    return NULL;
-  }
-
-  // Reject invalid parameters. In particular, the algorithm will infinite loop
-  // if |g| is zero.
-  if (BN_is_zero(dsa->p) || BN_is_zero(dsa->q) || BN_is_zero(dsa->g)) {
-    OPENSSL_PUT_ERROR(DSA, DSA_R_INVALID_PARAMETERS);
-    return NULL;
-  }
-
-  // We only support DSA keys that are a multiple of 8 bits. (This is a weaker
-  // check than the one in |DSA_do_check_signature|, which only allows 160-,
-  // 224-, and 256-bit keys.
-  if (BN_num_bits(dsa->q) % 8 != 0) {
-    OPENSSL_PUT_ERROR(DSA, DSA_R_BAD_Q_VALUE);
+  if (!dsa_check_parameters(dsa)) {
     return NULL;
   }
 
@@ -668,35 +661,17 @@
 
 int DSA_do_check_signature(int *out_valid, const uint8_t *digest,
                            size_t digest_len, DSA_SIG *sig, const DSA *dsa) {
-  BN_CTX *ctx;
-  BIGNUM u1, u2, t1;
-  int ret = 0;
-  unsigned i;
-
   *out_valid = 0;
-
-  if (!dsa->p || !dsa->q || !dsa->g) {
-    OPENSSL_PUT_ERROR(DSA, DSA_R_MISSING_PARAMETERS);
+  if (!dsa_check_parameters(dsa)) {
     return 0;
   }
 
-  i = BN_num_bits(dsa->q);
-  // FIPS 186-3 allows only different sizes for q.
-  if (i != 160 && i != 224 && i != 256) {
-    OPENSSL_PUT_ERROR(DSA, DSA_R_BAD_Q_VALUE);
-    return 0;
-  }
-
-  if (BN_num_bits(dsa->p) > OPENSSL_DSA_MAX_MODULUS_BITS) {
-    OPENSSL_PUT_ERROR(DSA, DSA_R_MODULUS_TOO_LARGE);
-    return 0;
-  }
-
+  int ret = 0;
+  BIGNUM u1, u2, t1;
   BN_init(&u1);
   BN_init(&u2);
   BN_init(&t1);
-
-  ctx = BN_CTX_new();
+  BN_CTX *ctx = BN_CTX_new();
   if (ctx == NULL) {
     goto err;
   }
@@ -719,11 +694,12 @@
   }
 
   // save M in u1
-  if (digest_len > (i >> 3)) {
+  unsigned q_bits = BN_num_bits(dsa->q);
+  if (digest_len > (q_bits >> 3)) {
     // if the digest length is greater than the size of q use the
     // BN_num_bits(dsa->q) leftmost bits of the digest, see
     // fips 186-3, 4.2
-    digest_len = (i >> 3);
+    digest_len = (q_bits >> 3);
   }
 
   if (BN_bin2bn(digest, digest_len, &u1) == NULL) {
diff --git a/src/crypto/dsa/dsa_asn1.c b/src/crypto/dsa/dsa_asn1.c
index 97fd07f..3f3bd48 100644
--- a/src/crypto/dsa/dsa_asn1.c
+++ b/src/crypto/dsa/dsa_asn1.c
@@ -61,9 +61,45 @@
 #include <openssl/err.h>
 #include <openssl/mem.h>
 
+#include "internal.h"
 #include "../bytestring/internal.h"
 
 
+#define OPENSSL_DSA_MAX_MODULUS_BITS 10000
+
+// This function is in dsa_asn1.c rather than dsa.c because it is reachable from
+// |EVP_PKEY| parsers. This makes it easier for the static linker to drop most
+// of the DSA implementation.
+int dsa_check_parameters(const DSA *dsa) {
+  if (!dsa->p || !dsa->q || !dsa->g) {
+    OPENSSL_PUT_ERROR(DSA, DSA_R_MISSING_PARAMETERS);
+    return 0;
+  }
+
+  // Reject invalid parameters. In particular, signing will infinite loop if |g|
+  // is zero.
+  if (BN_is_zero(dsa->p) || BN_is_zero(dsa->q) || BN_is_zero(dsa->g)) {
+    OPENSSL_PUT_ERROR(DSA, DSA_R_INVALID_PARAMETERS);
+    return 0;
+  }
+
+  // FIPS 186-4 allows only three different sizes for q.
+  unsigned q_bits = BN_num_bits(dsa->q);
+  if (q_bits != 160 && q_bits != 224 && q_bits != 256) {
+    OPENSSL_PUT_ERROR(DSA, DSA_R_BAD_Q_VALUE);
+    return 0;
+  }
+
+  // Bound |dsa->p| to avoid a DoS vector. Note this limit is much larger than
+  // the one in FIPS 186-4, which only allows L = 1024, 2048, and 3072.
+  if (BN_num_bits(dsa->p) > OPENSSL_DSA_MAX_MODULUS_BITS) {
+    OPENSSL_PUT_ERROR(DSA, DSA_R_MODULUS_TOO_LARGE);
+    return 0;
+  }
+
+  return 1;
+}
+
 static int parse_integer(CBS *cbs, BIGNUM **out) {
   assert(*out == NULL);
   *out = BN_new();
@@ -124,10 +160,16 @@
       !parse_integer(&child, &ret->g) ||
       CBS_len(&child) != 0) {
     OPENSSL_PUT_ERROR(DSA, DSA_R_DECODE_ERROR);
-    DSA_free(ret);
-    return NULL;
+    goto err;
+  }
+  if (!dsa_check_parameters(ret)) {
+    goto err;
   }
   return ret;
+
+err:
+  DSA_free(ret);
+  return NULL;
 }
 
 int DSA_marshal_public_key(CBB *cbb, const DSA *dsa) {
@@ -156,10 +198,16 @@
       !parse_integer(&child, &ret->g) ||
       CBS_len(&child) != 0) {
     OPENSSL_PUT_ERROR(DSA, DSA_R_DECODE_ERROR);
-    DSA_free(ret);
-    return NULL;
+    goto err;
+  }
+  if (!dsa_check_parameters(ret)) {
+    goto err;
   }
   return ret;
+
+err:
+  DSA_free(ret);
+  return NULL;
 }
 
 int DSA_marshal_parameters(CBB *cbb, const DSA *dsa) {
@@ -203,6 +251,9 @@
     OPENSSL_PUT_ERROR(DSA, DSA_R_DECODE_ERROR);
     goto err;
   }
+  if (!dsa_check_parameters(ret)) {
+    goto err;
+  }
   return ret;
 
 err:
diff --git a/src/crypto/dsa/internal.h b/src/crypto/dsa/internal.h
new file mode 100644
index 0000000..2d86edb
--- /dev/null
+++ b/src/crypto/dsa/internal.h
@@ -0,0 +1,34 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#ifndef OPENSSL_HEADER_DSA_INTERNAL_H
+#define OPENSSL_HEADER_DSA_INTERNAL_H
+
+#include <openssl/dsa.h>
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+// dsa_check_parameters checks that |dsa|'s group is within DoS bounds. It
+// returns one on success and zero on error.
+int dsa_check_parameters(const DSA *dsa);
+
+
+#if defined(__cplusplus)
+}  // extern C
+#endif
+
+#endif  // OPENSSL_HEADER_DSA_INTERNAL_H
diff --git a/src/crypto/ec_extra/hash_to_curve.c b/src/crypto/ec_extra/hash_to_curve.c
new file mode 100644
index 0000000..9c82454
--- /dev/null
+++ b/src/crypto/ec_extra/hash_to_curve.c
@@ -0,0 +1,385 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#include <openssl/ec.h>
+
+#include <openssl/digest.h>
+#include <openssl/err.h>
+#include <openssl/nid.h>
+#include <openssl/type_check.h>
+
+#include <assert.h>
+
+#include "internal.h"
+#include "../fipsmodule/bn/internal.h"
+#include "../fipsmodule/ec/internal.h"
+#include "../internal.h"
+
+
+// This file implements hash-to-curve, as described in
+// draft-irtf-cfrg-hash-to-curve-07.
+//
+// This hash-to-curve implementation is written generically with the
+// expectation that we will eventually wish to support other curves. If it
+// becomes a performance bottleneck, some possible optimizations by
+// specializing it to the curve:
+//
+// - Rather than using a generic |felem_exp|, specialize the exponentation to
+//   c2 with a faster addition chain.
+//
+// - |felem_mul| and |felem_sqr| are indirect calls to generic Montgomery
+//   code. Given the few curves, we could specialize
+//   |map_to_curve_simple_swu|. But doing this reasonably without duplicating
+//   code in C is difficult. (C++ templates would be useful here.)
+//
+// - P-521's Z and c2 have small power-of-two absolute values. We could save
+//   two multiplications in SSWU. (Other curves have reasonable values of Z
+//   and inconvenient c2.) This is unlikely to be worthwhile without C++
+//   templates to make specializing more convenient.
+
+// expand_message_xmd implements the operation described in section 5.3.1 of
+// draft-irtf-cfrg-hash-to-curve-07. It returns one on success and zero on
+// allocation failure or if |out_len| was too large.
+static int expand_message_xmd(const EVP_MD *md, uint8_t *out, size_t out_len,
+                              const uint8_t *msg, size_t msg_len,
+                              const uint8_t *dst, size_t dst_len) {
+  int ret = 0;
+  const size_t block_size = EVP_MD_block_size(md);
+  const size_t md_size = EVP_MD_size(md);
+  EVP_MD_CTX ctx;
+  EVP_MD_CTX_init(&ctx);
+
+  // Long DSTs are hashed down to size. See section 5.3.3.
+  OPENSSL_STATIC_ASSERT(EVP_MAX_MD_SIZE < 256, "hashed DST still too large");
+  uint8_t dst_buf[EVP_MAX_MD_SIZE];
+  if (dst_len >= 256) {
+    static const char kPrefix[] = "H2C-OVERSIZE-DST-";
+    if (!EVP_DigestInit_ex(&ctx, md, NULL) ||
+        !EVP_DigestUpdate(&ctx, kPrefix, sizeof(kPrefix) - 1) ||
+        !EVP_DigestUpdate(&ctx, dst, dst_len) ||
+        !EVP_DigestFinal_ex(&ctx, dst_buf, NULL)) {
+      goto err;
+    }
+    dst = dst_buf;
+    dst_len = md_size;
+  }
+  uint8_t dst_len_u8 = (uint8_t)dst_len;
+
+  // Compute b_0.
+  static const uint8_t kZeros[EVP_MAX_MD_BLOCK_SIZE] = {0};
+  // If |out_len| exceeds 16 bits then |i| will wrap below causing an error to
+  // be returned. This depends on the static assert above.
+  uint8_t l_i_b_str_zero[3] = {out_len >> 8, out_len, 0};
+  uint8_t b_0[EVP_MAX_MD_SIZE];
+  if (!EVP_DigestInit_ex(&ctx, md, NULL) ||
+      !EVP_DigestUpdate(&ctx, kZeros, block_size) ||
+      !EVP_DigestUpdate(&ctx, msg, msg_len) ||
+      !EVP_DigestUpdate(&ctx, l_i_b_str_zero, sizeof(l_i_b_str_zero)) ||
+      !EVP_DigestUpdate(&ctx, dst, dst_len) ||
+      !EVP_DigestUpdate(&ctx, &dst_len_u8, 1) ||
+      !EVP_DigestFinal_ex(&ctx, b_0, NULL)) {
+    goto err;
+  }
+
+  uint8_t b_i[EVP_MAX_MD_SIZE];
+  uint8_t i = 1;
+  while (out_len > 0) {
+    if (i == 0) {
+      // Input was too large.
+      OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
+      goto err;
+    }
+    if (i > 1) {
+      for (size_t j = 0; j < md_size; j++) {
+        b_i[j] ^= b_0[j];
+      }
+    } else {
+      OPENSSL_memcpy(b_i, b_0, md_size);
+    }
+
+    if (!EVP_DigestInit_ex(&ctx, md, NULL) ||
+        !EVP_DigestUpdate(&ctx, b_i, md_size) ||
+        !EVP_DigestUpdate(&ctx, &i, 1) ||
+        !EVP_DigestUpdate(&ctx, dst, dst_len) ||
+        !EVP_DigestUpdate(&ctx, &dst_len_u8, 1) ||
+        !EVP_DigestFinal_ex(&ctx, b_i, NULL)) {
+      goto err;
+    }
+
+    size_t todo = out_len >= md_size ? md_size : out_len;
+    OPENSSL_memcpy(out, b_i, todo);
+    out += todo;
+    out_len -= todo;
+    i++;
+  }
+
+  ret = 1;
+
+err:
+  EVP_MD_CTX_cleanup(&ctx);
+  return ret;
+}
+
+// num_bytes_to_derive determines the number of bytes to derive when hashing to
+// a number modulo |modulus|. See the hash_to_field operation defined in
+// section 5.2 of draft-irtf-cfrg-hash-to-curve-07.
+static int num_bytes_to_derive(size_t *out, const BIGNUM *modulus, unsigned k) {
+  size_t bits = BN_num_bits(modulus);
+  size_t L = (bits + k + 7) / 8;
+  // We require 2^(8*L) < 2^(2*bits - 2) <= n^2 so to fit in bounds for
+  // |felem_reduce| and |ec_scalar_reduce|. All defined hash-to-curve suites
+  // define |k| to be well under this bound. (|k| is usually around half of
+  // |p_bits|.)
+  if (L * 8 >= 2 * bits - 2 ||
+      L > 2 * EC_MAX_BYTES) {
+    assert(0);
+    OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
+    return 0;
+  }
+
+  *out = L;
+  return 1;
+}
+
+// big_endian_to_words decodes |in| as a big-endian integer and writes the
+// result to |out|. |num_words| must be large enough to contain the output.
+static void big_endian_to_words(BN_ULONG *out, size_t num_words,
+                                const uint8_t *in, size_t len) {
+  assert(len <= num_words * sizeof(BN_ULONG));
+  // Ensure any excess bytes are zeroed.
+  OPENSSL_memset(out, 0, num_words * sizeof(BN_ULONG));
+  uint8_t *out_u8 = (uint8_t *)out;
+  for (size_t i = 0; i < len; i++) {
+    out_u8[len - 1 - i] = in[i];
+  }
+}
+
+// hash_to_field implements the operation described in section 5.2
+// of draft-irtf-cfrg-hash-to-curve-07, with count = 2. |k| is the security
+// factor.
+static int hash_to_field2(const EC_GROUP *group, const EVP_MD *md,
+                          EC_FELEM *out1, EC_FELEM *out2, const uint8_t *dst,
+                          size_t dst_len, unsigned k, const uint8_t *msg,
+                          size_t msg_len) {
+  size_t L;
+  uint8_t buf[4 * EC_MAX_BYTES];
+  if (!num_bytes_to_derive(&L, &group->field, k) ||
+      !expand_message_xmd(md, buf, 2 * L, msg, msg_len, dst, dst_len)) {
+    return 0;
+  }
+  BN_ULONG words[2 * EC_MAX_WORDS];
+  size_t num_words = 2 * group->field.width;
+  big_endian_to_words(words, num_words, buf, L);
+  group->meth->felem_reduce(group, out1, words, num_words);
+  big_endian_to_words(words, num_words, buf + L, L);
+  group->meth->felem_reduce(group, out2, words, num_words);
+  return 1;
+}
+
+// hash_to_scalar behaves like |hash_to_field2| but returns a value modulo the
+// group order rather than a field element. |k| is the security factor.
+static int hash_to_scalar(const EC_GROUP *group, const EVP_MD *md,
+                          EC_SCALAR *out, const uint8_t *dst, size_t dst_len,
+                          unsigned k, const uint8_t *msg, size_t msg_len) {
+  size_t L;
+  uint8_t buf[EC_MAX_BYTES * 2];
+  if (!num_bytes_to_derive(&L, &group->order, k) ||
+      !expand_message_xmd(md, buf, L, msg, msg_len, dst, dst_len)) {
+    return 0;
+  }
+
+  BN_ULONG words[2 * EC_MAX_WORDS];
+  size_t num_words = 2 * group->order.width;
+  big_endian_to_words(words, num_words, buf, L);
+  ec_scalar_reduce(group, out, words, num_words);
+  return 1;
+}
+
+static inline void mul_A(const EC_GROUP *group, EC_FELEM *out,
+                         const EC_FELEM *in) {
+  assert(group->a_is_minus3);
+  EC_FELEM tmp;
+  ec_felem_add(group, &tmp, in, in);      // tmp = 2*in
+  ec_felem_add(group, &tmp, &tmp, &tmp);  // tmp = 4*in
+  ec_felem_sub(group, out, in, &tmp);     // out = -3*in
+}
+
+static inline void mul_minus_A(const EC_GROUP *group, EC_FELEM *out,
+                               const EC_FELEM *in) {
+  assert(group->a_is_minus3);
+  EC_FELEM tmp;
+  ec_felem_add(group, &tmp, in, in);   // tmp = 2*in
+  ec_felem_add(group, out, &tmp, in);  // out = 3*in
+}
+
+// sgn0_le implements the operation described in section 4.1.2 of
+// draft-irtf-cfrg-hash-to-curve-07.
+static BN_ULONG sgn0_le(const EC_GROUP *group, const EC_FELEM *a) {
+  uint8_t buf[EC_MAX_BYTES];
+  size_t len;
+  ec_felem_to_bytes(group, buf, &len, a);
+  return buf[len - 1] & 1;
+}
+
+// map_to_curve_simple_swu implements the operation described in section 6.6.2
+// of draft-irtf-cfrg-hash-to-curve-07, using the optimization in appendix
+// D.2.1. It returns one on success and zero on error.
+static int map_to_curve_simple_swu(const EC_GROUP *group, const EC_FELEM *Z,
+                                   const BN_ULONG *c1, size_t num_c1,
+                                   const EC_FELEM *c2, EC_RAW_POINT *out,
+                                   const EC_FELEM *u) {
+  void (*const felem_mul)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a,
+                          const EC_FELEM *b) = group->meth->felem_mul;
+  void (*const felem_sqr)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a) =
+      group->meth->felem_sqr;
+
+  // This function requires the prime be 3 mod 4, and that A = -3.
+  if (group->field.width == 0 || (group->field.d[0] & 3) != 3 ||
+      !group->a_is_minus3) {
+    OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
+    return 0;
+  }
+
+  EC_FELEM tv1, tv2, tv3, tv4, xd, x1n, x2n, tmp, gxd, gx1, y1, y2;
+  felem_sqr(group, &tv1, u);                         // tv1 = u^2
+  felem_mul(group, &tv3, Z, &tv1);                   // tv3 = Z * tv1
+  felem_sqr(group, &tv2, &tv3);                      // tv2 = tv3^2
+  ec_felem_add(group, &xd, &tv2, &tv3);              // xd = tv2 + tv3
+  ec_felem_add(group, &x1n, &xd, &group->one);       // x1n = xd + 1
+  felem_mul(group, &x1n, &x1n, &group->b);           // x1n = x1n * B
+  mul_minus_A(group, &xd, &xd);                      // xd = -A * xd
+  BN_ULONG e1 = ec_felem_non_zero_mask(group, &xd);  // e1 = xd == 0 [flipped]
+  mul_A(group, &tmp, Z);
+  ec_felem_select(group, &xd, e1, &xd, &tmp);  // xd = CMOV(xd, Z * A, e1)
+  felem_sqr(group, &tv2, &xd);                 // tv2 = xd^2
+  felem_mul(group, &gxd, &tv2, &xd);           // gxd = tv2 * xd = xd^3
+  mul_A(group, &tv2, &tv2);                    // tv2 = A * tv2
+  felem_sqr(group, &gx1, &x1n);                // gx1 = x1n^2
+  ec_felem_add(group, &gx1, &gx1, &tv2);       // gx1 = gx1 + tv2
+  felem_mul(group, &gx1, &gx1, &x1n);          // gx1 = gx1 * x1n
+  felem_mul(group, &tv2, &group->b, &gxd);     // tv2 = B * gxd
+  ec_felem_add(group, &gx1, &gx1, &tv2);       // gx1 = gx1 + tv2
+  felem_sqr(group, &tv4, &gxd);                // tv4 = gxd^2
+  felem_mul(group, &tv2, &gx1, &gxd);          // tv2 = gx1 * gxd
+  felem_mul(group, &tv4, &tv4, &tv2);          // tv4 = tv4 * tv2
+  group->meth->felem_exp(group, &y1, &tv4, c1, num_c1);  // y1 = tv4^c1
+  felem_mul(group, &y1, &y1, &tv2);                      // y1 = y1 * tv2
+  felem_mul(group, &x2n, &tv3, &x1n);                    // x2n = tv3 * x1n
+  felem_mul(group, &y2, &y1, c2);                        // y2 = y1 * c2
+  felem_mul(group, &y2, &y2, &tv1);                      // y2 = y2 * tv1
+  felem_mul(group, &y2, &y2, u);                         // y2 = y2 * u
+  felem_sqr(group, &tv2, &y1);                           // tv2 = y1^2
+  felem_mul(group, &tv2, &tv2, &gxd);                    // tv2 = tv2 * gxd
+  ec_felem_sub(group, &tv3, &tv2, &gx1);
+  BN_ULONG e2 =
+      ec_felem_non_zero_mask(group, &tv3);       // e2 = tv2 == gx1 [flipped]
+  ec_felem_select(group, &x1n, e2, &x2n, &x1n);  // xn = CMOV(x2n, x1n, e2)
+  ec_felem_select(group, &y1, e2, &y2, &y1);     // y = CMOV(y2, y1, e2)
+  BN_ULONG sgn0_u = sgn0_le(group, u);
+  BN_ULONG sgn0_y = sgn0_le(group, &y1);
+  BN_ULONG e3 = sgn0_u ^ sgn0_y;
+  e3 = ((BN_ULONG)0) - e3;  // e3 = sgn0(u) == sgn0(y) [flipped]
+  ec_felem_neg(group, &y2, &y1);
+  ec_felem_select(group, &y1, e3, &y2, &y1);  // y = CMOV(-y, y, e3)
+
+  // Appendix D.1 describes how to convert (x1n, xd, y1, 1) to Jacobian
+  // coordinates. Note yd = 1. Also note that gxd computed above is xd^3.
+  felem_mul(group, &out->X, &x1n, &xd);     // X = xn * xd
+  felem_mul(group, &out->Y, &y1, &gxd);     // Y = yn * gxd = yn * xd^3
+  out->Z = xd;                              // Z = xd
+  return 1;
+}
+
+static int hash_to_curve(const EC_GROUP *group, const EVP_MD *md,
+                         const EC_FELEM *Z, const EC_FELEM *c2, unsigned k,
+                         EC_RAW_POINT *out, const uint8_t *dst, size_t dst_len,
+                         const uint8_t *msg, size_t msg_len) {
+  EC_FELEM u0, u1;
+  if (!hash_to_field2(group, md, &u0, &u1, dst, dst_len, k, msg, msg_len)) {
+    return 0;
+  }
+
+  // Compute |c1| = (p - 3) / 4.
+  BN_ULONG c1[EC_MAX_WORDS];
+  size_t num_c1 = group->field.width;
+  if (!bn_copy_words(c1, num_c1, &group->field)) {
+    return 0;
+  }
+  bn_rshift_words(c1, c1, /*shift=*/2, /*num=*/num_c1);
+
+  EC_RAW_POINT Q0, Q1;
+  if (!map_to_curve_simple_swu(group, Z, c1, num_c1, c2, &Q0, &u0) ||
+      !map_to_curve_simple_swu(group, Z, c1, num_c1, c2, &Q1, &u1)) {
+    return 0;
+  }
+
+  group->meth->add(group, out, &Q0, &Q1);  // R = Q0 + Q1
+  // All our curves have cofactor one, so |clear_cofactor| is a no-op.
+  return 1;
+}
+
+static int felem_from_u8(const EC_GROUP *group, EC_FELEM *out, uint8_t a) {
+  uint8_t bytes[EC_MAX_BYTES] = {0};
+  size_t len = BN_num_bytes(&group->field);
+  bytes[len - 1] = a;
+  return ec_felem_from_bytes(group, out, bytes, len);
+}
+
+int ec_hash_to_curve_p384_xmd_sha512_sswu_draft07(
+    const EC_GROUP *group, EC_RAW_POINT *out, const uint8_t *dst,
+    size_t dst_len, const uint8_t *msg, size_t msg_len) {
+  // See section 8.3 of draft-irtf-cfrg-hash-to-curve-07.
+  if (EC_GROUP_get_curve_name(group) != NID_secp384r1) {
+    OPENSSL_PUT_ERROR(EC, EC_R_GROUP_MISMATCH);
+    return 0;
+  }
+
+  // kSqrt1728 was computed as follows in python3:
+  //
+  // p = 2**384 - 2**128 - 2**96 + 2**32 - 1
+  // z3 = 12**3
+  // c2 = pow(z3, (p+1)//4, p)
+  // assert z3 == pow(c2, 2, p)
+  // ", ".join("0x%02x" % b for b in c2.to_bytes(384//8, 'big')
+
+  static const uint8_t kSqrt1728[] = {
+      0x01, 0x98, 0x77, 0xcc, 0x10, 0x41, 0xb7, 0x55, 0x57, 0x43, 0xc0, 0xae,
+      0x2e, 0x3a, 0x3e, 0x61, 0xfb, 0x2a, 0xaa, 0x2e, 0x0e, 0x87, 0xea, 0x55,
+      0x7a, 0x56, 0x3d, 0x8b, 0x59, 0x8a, 0x09, 0x40, 0xd0, 0xa6, 0x97, 0xa9,
+      0xe0, 0xb9, 0xe9, 0x2c, 0xfa, 0xa3, 0x14, 0xf5, 0x83, 0xc9, 0xd0, 0x66
+  };
+
+  // Z = -12, c2 = sqrt(1728)
+  EC_FELEM Z, c2;
+  if (!felem_from_u8(group, &Z, 12) ||
+      !ec_felem_from_bytes(group, &c2, kSqrt1728, sizeof(kSqrt1728))) {
+    return 0;
+  }
+  ec_felem_neg(group, &Z, &Z);
+
+  return hash_to_curve(group, EVP_sha512(), &Z, &c2, /*k=*/192, out, dst,
+                       dst_len, msg, msg_len);
+}
+
+int ec_hash_to_scalar_p384_xmd_sha512_draft07(
+    const EC_GROUP *group, EC_SCALAR *out, const uint8_t *dst, size_t dst_len,
+    const uint8_t *msg, size_t msg_len) {
+  if (EC_GROUP_get_curve_name(group) != NID_secp384r1) {
+    OPENSSL_PUT_ERROR(EC, EC_R_GROUP_MISMATCH);
+    return 0;
+  }
+
+  return hash_to_scalar(group, EVP_sha512(), out, dst, dst_len, /*k=*/192, msg,
+                        msg_len);
+}
diff --git a/src/crypto/ec_extra/internal.h b/src/crypto/ec_extra/internal.h
new file mode 100644
index 0000000..55314ac
--- /dev/null
+++ b/src/crypto/ec_extra/internal.h
@@ -0,0 +1,56 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#ifndef OPENSSL_HEADER_EC_EXTRA_INTERNAL_H
+#define OPENSSL_HEADER_EC_EXTRA_INTERNAL_H
+
+#include <openssl/ec.h>
+
+#include "../fipsmodule/ec/internal.h"
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+// Hash-to-curve.
+//
+// The following functions implement primitives from
+// draft-irtf-cfrg-hash-to-curve. The |dst| parameter in each function is the
+// domain separation tag and must be unique for each protocol and between the
+// |hash_to_curve| and |hash_to_scalar| variants. See section 3.1 of the spec
+// for additional guidance on this parameter.
+
+// ec_hash_to_curve_p384_xmd_sha512_sswu_draft07 hashes |msg| to a point on
+// |group| and writes the result to |out|, implementing the
+// P384_XMD:SHA-512_SSWU_RO_ suite from draft-irtf-cfrg-hash-to-curve-07. It
+// returns one on success and zero on error.
+OPENSSL_EXPORT int ec_hash_to_curve_p384_xmd_sha512_sswu_draft07(
+    const EC_GROUP *group, EC_RAW_POINT *out, const uint8_t *dst,
+    size_t dst_len, const uint8_t *msg, size_t msg_len);
+
+// ec_hash_to_scalar_p384_xmd_sha512_draft07 hashes |msg| to a scalar on |group|
+// and writes the result to |out|, using the hash_to_field operation from the
+// P384_XMD:SHA-512_SSWU_RO_ suite from draft-irtf-cfrg-hash-to-curve-07, but
+// generating a value modulo the group order rather than a field element.
+OPENSSL_EXPORT int ec_hash_to_scalar_p384_xmd_sha512_draft07(
+    const EC_GROUP *group, EC_SCALAR *out, const uint8_t *dst, size_t dst_len,
+    const uint8_t *msg, size_t msg_len);
+
+
+#if defined(__cplusplus)
+}  // extern C
+#endif
+
+#endif  // OPENSSL_HEADER_EC_EXTRA_INTERNAL_H
diff --git a/src/crypto/ecdh_extra/ecdh_extra.c b/src/crypto/ecdh_extra/ecdh_extra.c
index b8a099a..237d973 100644
--- a/src/crypto/ecdh_extra/ecdh_extra.c
+++ b/src/crypto/ecdh_extra/ecdh_extra.c
@@ -96,8 +96,8 @@
   uint8_t buf[EC_MAX_BYTES];
   size_t buf_len;
   if (!ec_point_mul_scalar(group, &shared_point, &pub_key->raw, priv) ||
-      !ec_point_get_affine_coordinate_bytes(group, buf, NULL, &buf_len,
-                                            sizeof(buf), &shared_point)) {
+      !ec_get_x_coordinate_as_bytes(group, buf, &buf_len, sizeof(buf),
+                                    &shared_point)) {
     OPENSSL_PUT_ERROR(ECDH, ECDH_R_POINT_ARITHMETIC_FAILURE);
     return -1;
   }
diff --git a/src/crypto/err/err.c b/src/crypto/err/err.c
index a432ce3..7973a0e 100644
--- a/src/crypto/err/err.c
+++ b/src/crypto/err/err.c
@@ -495,38 +495,39 @@
 
 static const char *const kLibraryNames[ERR_NUM_LIBS] = {
     "invalid library (0)",
-    "unknown library",                            // ERR_LIB_NONE
-    "system library",                             // ERR_LIB_SYS
-    "bignum routines",                            // ERR_LIB_BN
-    "RSA routines",                               // ERR_LIB_RSA
-    "Diffie-Hellman routines",                    // ERR_LIB_DH
-    "public key routines",                        // ERR_LIB_EVP
-    "memory buffer routines",                     // ERR_LIB_BUF
-    "object identifier routines",                 // ERR_LIB_OBJ
-    "PEM routines",                               // ERR_LIB_PEM
-    "DSA routines",                               // ERR_LIB_DSA
-    "X.509 certificate routines",                 // ERR_LIB_X509
-    "ASN.1 encoding routines",                    // ERR_LIB_ASN1
-    "configuration file routines",                // ERR_LIB_CONF
-    "common libcrypto routines",                  // ERR_LIB_CRYPTO
-    "elliptic curve routines",                    // ERR_LIB_EC
-    "SSL routines",                               // ERR_LIB_SSL
-    "BIO routines",                               // ERR_LIB_BIO
-    "PKCS7 routines",                             // ERR_LIB_PKCS7
-    "PKCS8 routines",                             // ERR_LIB_PKCS8
-    "X509 V3 routines",                           // ERR_LIB_X509V3
-    "random number generator",                    // ERR_LIB_RAND
-    "ENGINE routines",                            // ERR_LIB_ENGINE
-    "OCSP routines",                              // ERR_LIB_OCSP
-    "UI routines",                                // ERR_LIB_UI
-    "COMP routines",                              // ERR_LIB_COMP
-    "ECDSA routines",                             // ERR_LIB_ECDSA
-    "ECDH routines",                              // ERR_LIB_ECDH
-    "HMAC routines",                              // ERR_LIB_HMAC
-    "Digest functions",                           // ERR_LIB_DIGEST
-    "Cipher functions",                           // ERR_LIB_CIPHER
-    "HKDF functions",                             // ERR_LIB_HKDF
-    "User defined functions",                     // ERR_LIB_USER
+    "unknown library",              // ERR_LIB_NONE
+    "system library",               // ERR_LIB_SYS
+    "bignum routines",              // ERR_LIB_BN
+    "RSA routines",                 // ERR_LIB_RSA
+    "Diffie-Hellman routines",      // ERR_LIB_DH
+    "public key routines",          // ERR_LIB_EVP
+    "memory buffer routines",       // ERR_LIB_BUF
+    "object identifier routines",   // ERR_LIB_OBJ
+    "PEM routines",                 // ERR_LIB_PEM
+    "DSA routines",                 // ERR_LIB_DSA
+    "X.509 certificate routines",   // ERR_LIB_X509
+    "ASN.1 encoding routines",      // ERR_LIB_ASN1
+    "configuration file routines",  // ERR_LIB_CONF
+    "common libcrypto routines",    // ERR_LIB_CRYPTO
+    "elliptic curve routines",      // ERR_LIB_EC
+    "SSL routines",                 // ERR_LIB_SSL
+    "BIO routines",                 // ERR_LIB_BIO
+    "PKCS7 routines",               // ERR_LIB_PKCS7
+    "PKCS8 routines",               // ERR_LIB_PKCS8
+    "X509 V3 routines",             // ERR_LIB_X509V3
+    "random number generator",      // ERR_LIB_RAND
+    "ENGINE routines",              // ERR_LIB_ENGINE
+    "OCSP routines",                // ERR_LIB_OCSP
+    "UI routines",                  // ERR_LIB_UI
+    "COMP routines",                // ERR_LIB_COMP
+    "ECDSA routines",               // ERR_LIB_ECDSA
+    "ECDH routines",                // ERR_LIB_ECDH
+    "HMAC routines",                // ERR_LIB_HMAC
+    "Digest functions",             // ERR_LIB_DIGEST
+    "Cipher functions",             // ERR_LIB_CIPHER
+    "HKDF functions",               // ERR_LIB_HKDF
+    "Trust Token functions",        // ERR_LIB_TRUST_TOKEN
+    "User defined functions",       // ERR_LIB_USER
 };
 
 const char *ERR_lib_error_string(uint32_t packed_error) {
diff --git a/src/crypto/err/err_data_generate.go b/src/crypto/err/err_data_generate.go
index da965df..e8aefd8 100644
--- a/src/crypto/err/err_data_generate.go
+++ b/src/crypto/err/err_data_generate.go
@@ -63,6 +63,7 @@
 	"DIGEST",
 	"CIPHER",
 	"HKDF",
+	"TRUST_TOKEN",
 	"USER",
 }
 
diff --git a/src/crypto/err/evp.errordata b/src/crypto/err/evp.errordata
index 390dec0..d0f09d4 100644
--- a/src/crypto/err/evp.errordata
+++ b/src/crypto/err/evp.errordata
@@ -3,6 +3,7 @@
 EVP,102,DECODE_ERROR
 EVP,103,DIFFERENT_KEY_TYPES
 EVP,104,DIFFERENT_PARAMETERS
+EVP,136,EMPTY_PSK
 EVP,105,ENCODE_ERROR
 EVP,106,EXPECTING_AN_EC_KEY_KEY
 EVP,107,EXPECTING_AN_RSA_KEY
diff --git a/src/crypto/err/ssl.errordata b/src/crypto/err/ssl.errordata
index 27ad65c..3759c69 100644
--- a/src/crypto/err/ssl.errordata
+++ b/src/crypto/err/ssl.errordata
@@ -86,6 +86,7 @@
 SSL,161,INVALID_TICKET_KEYS_LENGTH
 SSL,302,KEY_USAGE_BIT_INCORRECT
 SSL,162,LENGTH_MISMATCH
+SSL,307,MISSING_ALPN
 SSL,164,MISSING_EXTENSION
 SSL,258,MISSING_KEY_SHARE
 SSL,165,MISSING_RSA_CERTIFICATE
@@ -133,6 +134,7 @@
 SSL,196,PSK_NO_CLIENT_CB
 SSL,197,PSK_NO_SERVER_CB
 SSL,298,QUIC_INTERNAL_ERROR
+SSL,305,QUIC_TRANSPORT_PARAMETERS_MISCONFIGURED
 SSL,198,READ_TIMEOUT_EXPIRED
 SSL,199,RECORD_LENGTH_MISMATCH
 SSL,200,RECORD_TOO_LARGE
@@ -173,6 +175,10 @@
 SSL,276,TICKET_ENCRYPTION_FAILED
 SSL,297,TLS13_DOWNGRADE
 SSL,1049,TLSV1_ALERT_ACCESS_DENIED
+SSL,1114,TLSV1_ALERT_BAD_CERTIFICATE_HASH_VALUE
+SSL,1113,TLSV1_ALERT_BAD_CERTIFICATE_STATUS_RESPONSE
+SSL,1116,TLSV1_ALERT_CERTIFICATE_REQUIRED
+SSL,1111,TLSV1_ALERT_CERTIFICATE_UNOBTAINABLE
 SSL,1050,TLSV1_ALERT_DECODE_ERROR
 SSL,1021,TLSV1_ALERT_DECRYPTION_FAILED
 SSL,1051,TLSV1_ALERT_DECRYPT_ERROR
@@ -180,18 +186,15 @@
 SSL,1086,TLSV1_ALERT_INAPPROPRIATE_FALLBACK
 SSL,1071,TLSV1_ALERT_INSUFFICIENT_SECURITY
 SSL,1080,TLSV1_ALERT_INTERNAL_ERROR
+SSL,1120,TLSV1_ALERT_NO_APPLICATION_PROTOCOL
 SSL,1100,TLSV1_ALERT_NO_RENEGOTIATION
 SSL,1070,TLSV1_ALERT_PROTOCOL_VERSION
 SSL,1022,TLSV1_ALERT_RECORD_OVERFLOW
 SSL,1048,TLSV1_ALERT_UNKNOWN_CA
+SSL,1115,TLSV1_ALERT_UNKNOWN_PSK_IDENTITY
+SSL,1112,TLSV1_ALERT_UNRECOGNIZED_NAME
+SSL,1110,TLSV1_ALERT_UNSUPPORTED_EXTENSION
 SSL,1090,TLSV1_ALERT_USER_CANCELLED
-SSL,1114,TLSV1_BAD_CERTIFICATE_HASH_VALUE
-SSL,1113,TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE
-SSL,1116,TLSV1_CERTIFICATE_REQUIRED
-SSL,1111,TLSV1_CERTIFICATE_UNOBTAINABLE
-SSL,1115,TLSV1_UNKNOWN_PSK_IDENTITY
-SSL,1112,TLSV1_UNRECOGNIZED_NAME
-SSL,1110,TLSV1_UNSUPPORTED_EXTENSION
 SSL,217,TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST
 SSL,218,TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG
 SSL,219,TOO_MANY_EMPTY_FRAGMENTS
@@ -201,6 +204,7 @@
 SSL,270,TOO_MUCH_SKIPPED_EARLY_DATA
 SSL,221,UNABLE_TO_FIND_ECDH_PARAMETERS
 SSL,293,UNCOMPRESSED_CERT_TOO_LARGE
+SSL,306,UNEXPECTED_COMPATIBILITY_MODE
 SSL,222,UNEXPECTED_EXTENSION
 SSL,279,UNEXPECTED_EXTENSION_ON_EARLY_DATA
 SSL,223,UNEXPECTED_MESSAGE
diff --git a/src/crypto/err/trust_token.errordata b/src/crypto/err/trust_token.errordata
new file mode 100644
index 0000000..7e612dc
--- /dev/null
+++ b/src/crypto/err/trust_token.errordata
@@ -0,0 +1,15 @@
+TRUST_TOKEN,111,BAD_VALIDITY_CHECK
+TRUST_TOKEN,101,BUFFER_TOO_SMALL
+TRUST_TOKEN,103,DECODE_ERROR
+TRUST_TOKEN,105,DECODE_FAILURE
+TRUST_TOKEN,109,INVALID_KEY_ID
+TRUST_TOKEN,106,INVALID_METADATA
+TRUST_TOKEN,113,INVALID_METADATA_KEY
+TRUST_TOKEN,114,INVALID_PROOF
+TRUST_TOKEN,110,INVALID_TOKEN
+TRUST_TOKEN,100,KEYGEN_FAILURE
+TRUST_TOKEN,108,NO_KEYS_CONFIGURED
+TRUST_TOKEN,112,NO_SRR_KEY_CONFIGURED
+TRUST_TOKEN,102,OVER_BATCHSIZE
+TRUST_TOKEN,104,SRR_SIGNATURE_ERROR
+TRUST_TOKEN,107,TOO_MANY_KEYS
diff --git a/src/crypto/err/x509.errordata b/src/crypto/err/x509.errordata
index 6ed8fa3..ffa4267 100644
--- a/src/crypto/err/x509.errordata
+++ b/src/crypto/err/x509.errordata
@@ -6,13 +6,16 @@
 X509,105,CERT_ALREADY_IN_HASH_TABLE
 X509,106,CRL_ALREADY_DELTA
 X509,107,CRL_VERIFY_FAILURE
+X509,138,DELTA_CRL_WITHOUT_CRL_NUMBER
 X509,108,IDP_MISMATCH
 X509,109,INVALID_BIT_STRING_BITS_LEFT
 X509,110,INVALID_DIRECTORY
+X509,139,INVALID_FIELD_FOR_VERSION
 X509,111,INVALID_FIELD_NAME
 X509,136,INVALID_PARAMETER
 X509,112,INVALID_PSS_PARAMETERS
 X509,113,INVALID_TRUST
+X509,140,INVALID_VERSION
 X509,114,ISSUER_MISMATCH
 X509,115,KEY_TYPE_MISMATCH
 X509,116,KEY_VALUES_MISMATCH
diff --git a/src/crypto/evp/evp.c b/src/crypto/evp/evp.c
index 60fdf64..653d657 100644
--- a/src/crypto/evp/evp.c
+++ b/src/crypto/evp/evp.c
@@ -76,6 +76,10 @@
 // TODO(davidben): Fix Node to not touch the error queue itself and remove this.
 OPENSSL_DECLARE_ERROR_REASON(EVP, NOT_XOF_OR_INVALID_LENGTH)
 
+// The HPKE module uses the EVP error namespace, but it lives in another
+// directory.
+OPENSSL_DECLARE_ERROR_REASON(EVP, EMPTY_PSK)
+
 EVP_PKEY *EVP_PKEY_new(void) {
   EVP_PKEY *ret;
 
diff --git a/src/crypto/evp/evp_asn1.c b/src/crypto/evp/evp_asn1.c
index fc1dce3..2f3e115 100644
--- a/src/crypto/evp/evp_asn1.c
+++ b/src/crypto/evp/evp_asn1.c
@@ -65,6 +65,7 @@
 #include <openssl/rsa.h>
 
 #include "internal.h"
+#include "../bytestring/internal.h"
 #include "../internal.h"
 
 
@@ -386,3 +387,161 @@
   EVP_PKEY_free(ret);
   return NULL;
 }
+
+EVP_PKEY *d2i_PUBKEY(EVP_PKEY **out, const uint8_t **inp, long len) {
+  if (len < 0) {
+    return NULL;
+  }
+  CBS cbs;
+  CBS_init(&cbs, *inp, (size_t)len);
+  EVP_PKEY *ret = EVP_parse_public_key(&cbs);
+  if (ret == NULL) {
+    return NULL;
+  }
+  if (out != NULL) {
+    EVP_PKEY_free(*out);
+    *out = ret;
+  }
+  *inp = CBS_data(&cbs);
+  return ret;
+}
+
+int i2d_PUBKEY(const EVP_PKEY *pkey, uint8_t **outp) {
+  if (pkey == NULL) {
+    return 0;
+  }
+
+  CBB cbb;
+  if (!CBB_init(&cbb, 128) ||
+      !EVP_marshal_public_key(&cbb, pkey)) {
+    CBB_cleanup(&cbb);
+    return -1;
+  }
+  return CBB_finish_i2d(&cbb, outp);
+}
+
+RSA *d2i_RSA_PUBKEY(RSA **out, const uint8_t **inp, long len) {
+  if (len < 0) {
+    return NULL;
+  }
+  CBS cbs;
+  CBS_init(&cbs, *inp, (size_t)len);
+  EVP_PKEY *pkey = EVP_parse_public_key(&cbs);
+  if (pkey == NULL) {
+    return NULL;
+  }
+  RSA *rsa = EVP_PKEY_get1_RSA(pkey);
+  EVP_PKEY_free(pkey);
+  if (rsa == NULL) {
+    return NULL;
+  }
+  if (out != NULL) {
+    RSA_free(*out);
+    *out = rsa;
+  }
+  *inp = CBS_data(&cbs);
+  return rsa;
+}
+
+int i2d_RSA_PUBKEY(const RSA *rsa, uint8_t **outp) {
+  if (rsa == NULL) {
+    return 0;
+  }
+
+  int ret = -1;
+  EVP_PKEY *pkey = EVP_PKEY_new();
+  if (pkey == NULL ||
+      !EVP_PKEY_set1_RSA(pkey, (RSA *)rsa)) {
+    goto err;
+  }
+
+  ret = i2d_PUBKEY(pkey, outp);
+
+err:
+  EVP_PKEY_free(pkey);
+  return ret;
+}
+
+DSA *d2i_DSA_PUBKEY(DSA **out, const uint8_t **inp, long len) {
+  if (len < 0) {
+    return NULL;
+  }
+  CBS cbs;
+  CBS_init(&cbs, *inp, (size_t)len);
+  EVP_PKEY *pkey = EVP_parse_public_key(&cbs);
+  if (pkey == NULL) {
+    return NULL;
+  }
+  DSA *dsa = EVP_PKEY_get1_DSA(pkey);
+  EVP_PKEY_free(pkey);
+  if (dsa == NULL) {
+    return NULL;
+  }
+  if (out != NULL) {
+    DSA_free(*out);
+    *out = dsa;
+  }
+  *inp = CBS_data(&cbs);
+  return dsa;
+}
+
+int i2d_DSA_PUBKEY(const DSA *dsa, uint8_t **outp) {
+  if (dsa == NULL) {
+    return 0;
+  }
+
+  int ret = -1;
+  EVP_PKEY *pkey = EVP_PKEY_new();
+  if (pkey == NULL ||
+      !EVP_PKEY_set1_DSA(pkey, (DSA *)dsa)) {
+    goto err;
+  }
+
+  ret = i2d_PUBKEY(pkey, outp);
+
+err:
+  EVP_PKEY_free(pkey);
+  return ret;
+}
+
+EC_KEY *d2i_EC_PUBKEY(EC_KEY **out, const uint8_t **inp, long len) {
+  if (len < 0) {
+    return NULL;
+  }
+  CBS cbs;
+  CBS_init(&cbs, *inp, (size_t)len);
+  EVP_PKEY *pkey = EVP_parse_public_key(&cbs);
+  if (pkey == NULL) {
+    return NULL;
+  }
+  EC_KEY *ec_key = EVP_PKEY_get1_EC_KEY(pkey);
+  EVP_PKEY_free(pkey);
+  if (ec_key == NULL) {
+    return NULL;
+  }
+  if (out != NULL) {
+    EC_KEY_free(*out);
+    *out = ec_key;
+  }
+  *inp = CBS_data(&cbs);
+  return ec_key;
+}
+
+int i2d_EC_PUBKEY(const EC_KEY *ec_key, uint8_t **outp) {
+  if (ec_key == NULL) {
+    return 0;
+  }
+
+  int ret = -1;
+  EVP_PKEY *pkey = EVP_PKEY_new();
+  if (pkey == NULL ||
+      !EVP_PKEY_set1_EC_KEY(pkey, (EC_KEY *)ec_key)) {
+    goto err;
+  }
+
+  ret = i2d_PUBKEY(pkey, outp);
+
+err:
+  EVP_PKEY_free(pkey);
+  return ret;
+}
diff --git a/src/crypto/evp/p_dsa_asn1.c b/src/crypto/evp/p_dsa_asn1.c
index d50e0fc..ac91127 100644
--- a/src/crypto/evp/p_dsa_asn1.c
+++ b/src/crypto/evp/p_dsa_asn1.c
@@ -141,9 +141,13 @@
     goto err;
   }
 
-  // Decode the key.
+  // Decode the key. To avoid DoS attacks when importing private keys, we bound
+  // |dsa->priv_key| against |dsa->q|, which itself bound by
+  // |DSA_parse_parameters|. (We cannot call |BN_num_bits| on |dsa->priv_key|.
+  // That would leak a secret bit width.)
   if (!BN_parse_asn1_unsigned(key, dsa->priv_key) ||
-      CBS_len(key) != 0) {
+      CBS_len(key) != 0 ||
+      BN_cmp(dsa->priv_key, dsa->q) >= 0) {
     OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
     goto err;
   }
diff --git a/src/crypto/fipsmodule/FIPS.md b/src/crypto/fipsmodule/FIPS.md
index 5d742dd..70f2531 100644
--- a/src/crypto/fipsmodule/FIPS.md
+++ b/src/crypto/fipsmodule/FIPS.md
@@ -10,6 +10,7 @@
 
 1. 2017-06-15: certificate [#2964](https://csrc.nist.gov/Projects/Cryptographic-Module-Validation-Program/Certificate/2964), [security policy](/crypto/fipsmodule/policydocs/BoringCrypto-Security-Policy-20170615.docx) (in docx format).
 1. 2018-07-30: certificate [#3318](https://csrc.nist.gov/Projects/Cryptographic-Module-Validation-Program/Certificate/3318), [security policy](/crypto/fipsmodule/policydocs/BoringCrypto-Security-Policy-20180730.docx) (in docx format).
+1. 2019-08-08: certificate [#3678](https://csrc.nist.gov/Projects/Cryptographic-Module-Validation-Program/Certificate/3678), [security policy](/crypto/fipsmodule/policydocs/BoringCrypto-Security-Policy-20190808.docx) (in docx format).
 
 ## Running CAVP tests
 
diff --git a/src/crypto/fipsmodule/aes/asm/aesv8-armx.pl b/src/crypto/fipsmodule/aes/asm/aesv8-armx.pl
index 187c221..5fd9864 100644
--- a/src/crypto/fipsmodule/aes/asm/aesv8-armx.pl
+++ b/src/crypto/fipsmodule/aes/asm/aesv8-armx.pl
@@ -96,6 +96,8 @@
 .Lenc_key:
 ___
 $code.=<<___	if ($flavour =~ /64/);
+	// Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later.
+	AARCH64_VALID_CALL_TARGET
 	stp	x29,x30,[sp,#-16]!
 	add	x29,sp,#0
 ___
@@ -274,6 +276,7 @@
 ${prefix}_set_decrypt_key:
 ___
 $code.=<<___	if ($flavour =~ /64/);
+	AARCH64_SIGN_LINK_REGISTER
 	stp	x29,x30,[sp,#-16]!
 	add	x29,sp,#0
 ___
@@ -317,6 +320,7 @@
 ___
 $code.=<<___	if ($flavour =~ /64/);
 	ldp	x29,x30,[sp],#16
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 ___
 $code.=<<___;
@@ -336,6 +340,11 @@
 .type	${prefix}_${dir}crypt,%function
 .align	5
 ${prefix}_${dir}crypt:
+___
+$code.=<<___	if ($flavour =~ /64/);
+	AARCH64_VALID_CALL_TARGET
+___
+$code.=<<___;
 	ldr	$rounds,[$key,#240]
 	vld1.32	{$rndkey0},[$key],#16
 	vld1.8	{$inout},[$inp]
@@ -383,6 +392,8 @@
 ${prefix}_cbc_encrypt:
 ___
 $code.=<<___	if ($flavour =~ /64/);
+	// Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later.
+	AARCH64_VALID_CALL_TARGET
 	stp	x29,x30,[sp,#-16]!
 	add	x29,sp,#0
 ___
@@ -712,6 +723,8 @@
 ${prefix}_ctr32_encrypt_blocks:
 ___
 $code.=<<___	if ($flavour =~ /64/);
+	// Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later.
+	AARCH64_VALID_CALL_TARGET
 	stp		x29,x30,[sp,#-16]!
 	add		x29,sp,#0
 ___
diff --git a/src/crypto/fipsmodule/aes/asm/vpaes-armv8.pl b/src/crypto/fipsmodule/aes/asm/vpaes-armv8.pl
index bae5e7e..e4b9ceb 100755
--- a/src/crypto/fipsmodule/aes/asm/vpaes-armv8.pl
+++ b/src/crypto/fipsmodule/aes/asm/vpaes-armv8.pl
@@ -49,6 +49,8 @@
 *STDOUT=*OUT;
 
 $code.=<<___;
+#include <openssl/arm_arch.h>
+
 .section	.rodata
 
 .type	_vpaes_consts,%object
@@ -259,6 +261,7 @@
 .type	vpaes_encrypt,%function
 .align	4
 vpaes_encrypt:
+	AARCH64_SIGN_LINK_REGISTER
 	stp	x29,x30,[sp,#-16]!
 	add	x29,sp,#0
 
@@ -268,6 +271,7 @@
 	st1	{v0.16b}, [$out]
 
 	ldp	x29,x30,[sp],#16
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	vpaes_encrypt,.-vpaes_encrypt
 
@@ -495,6 +499,7 @@
 .type	vpaes_decrypt,%function
 .align	4
 vpaes_decrypt:
+	AARCH64_SIGN_LINK_REGISTER
 	stp	x29,x30,[sp,#-16]!
 	add	x29,sp,#0
 
@@ -504,6 +509,7 @@
 	st1	{v0.16b}, [$out]
 
 	ldp	x29,x30,[sp],#16
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	vpaes_decrypt,.-vpaes_decrypt
 
@@ -680,6 +686,7 @@
 .type	_vpaes_schedule_core,%function
 .align	4
 _vpaes_schedule_core:
+	AARCH64_SIGN_LINK_REGISTER
 	stp	x29, x30, [sp,#-16]!
 	add	x29,sp,#0
 
@@ -849,6 +856,7 @@
 	eor	v6.16b, v6.16b, v6.16b		// vpxor	%xmm6,	%xmm6,	%xmm6
 	eor	v7.16b, v7.16b, v7.16b		// vpxor	%xmm7,	%xmm7,	%xmm7
 	ldp	x29, x30, [sp],#16
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	_vpaes_schedule_core,.-_vpaes_schedule_core
 
@@ -1061,6 +1069,7 @@
 .type	vpaes_set_encrypt_key,%function
 .align	4
 vpaes_set_encrypt_key:
+	AARCH64_SIGN_LINK_REGISTER
 	stp	x29,x30,[sp,#-16]!
 	add	x29,sp,#0
 	stp	d8,d9,[sp,#-16]!	// ABI spec says so
@@ -1076,6 +1085,7 @@
 
 	ldp	d8,d9,[sp],#16
 	ldp	x29,x30,[sp],#16
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	vpaes_set_encrypt_key,.-vpaes_set_encrypt_key
 
@@ -1083,6 +1093,7 @@
 .type	vpaes_set_decrypt_key,%function
 .align	4
 vpaes_set_decrypt_key:
+	AARCH64_SIGN_LINK_REGISTER
 	stp	x29,x30,[sp,#-16]!
 	add	x29,sp,#0
 	stp	d8,d9,[sp,#-16]!	// ABI spec says so
@@ -1102,6 +1113,7 @@
 
 	ldp	d8,d9,[sp],#16
 	ldp	x29,x30,[sp],#16
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	vpaes_set_decrypt_key,.-vpaes_set_decrypt_key
 ___
@@ -1114,6 +1126,7 @@
 .type	vpaes_cbc_encrypt,%function
 .align	4
 vpaes_cbc_encrypt:
+	AARCH64_SIGN_LINK_REGISTER
 	cbz	$len, .Lcbc_abort
 	cmp	w5, #0			// check direction
 	b.eq	vpaes_cbc_decrypt
@@ -1140,6 +1153,7 @@
 	st1	{v0.16b}, [$ivec]	// write ivec
 
 	ldp	x29,x30,[sp],#16
+	AARCH64_VALIDATE_LINK_REGISTER
 .Lcbc_abort:
 	ret
 .size	vpaes_cbc_encrypt,.-vpaes_cbc_encrypt
@@ -1147,6 +1161,8 @@
 .type	vpaes_cbc_decrypt,%function
 .align	4
 vpaes_cbc_decrypt:
+	// Not adding AARCH64_SIGN_LINK_REGISTER here because vpaes_cbc_decrypt is jumped to
+	// only from vpaes_cbc_encrypt which has already signed the return address.
 	stp	x29,x30,[sp,#-16]!
 	add	x29,sp,#0
 	stp	d8,d9,[sp,#-16]!	// ABI spec says so
@@ -1188,6 +1204,7 @@
 	ldp	d10,d11,[sp],#16
 	ldp	d8,d9,[sp],#16
 	ldp	x29,x30,[sp],#16
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	vpaes_cbc_decrypt,.-vpaes_cbc_decrypt
 ___
@@ -1198,6 +1215,7 @@
 .type	vpaes_ecb_encrypt,%function
 .align	4
 vpaes_ecb_encrypt:
+	AARCH64_SIGN_LINK_REGISTER
 	stp	x29,x30,[sp,#-16]!
 	add	x29,sp,#0
 	stp	d8,d9,[sp,#-16]!	// ABI spec says so
@@ -1231,6 +1249,7 @@
 	ldp	d10,d11,[sp],#16
 	ldp	d8,d9,[sp],#16
 	ldp	x29,x30,[sp],#16
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	vpaes_ecb_encrypt,.-vpaes_ecb_encrypt
 
@@ -1238,6 +1257,7 @@
 .type	vpaes_ecb_decrypt,%function
 .align	4
 vpaes_ecb_decrypt:
+	AARCH64_SIGN_LINK_REGISTER
 	stp	x29,x30,[sp,#-16]!
 	add	x29,sp,#0
 	stp	d8,d9,[sp,#-16]!	// ABI spec says so
@@ -1271,6 +1291,7 @@
 	ldp	d10,d11,[sp],#16
 	ldp	d8,d9,[sp],#16
 	ldp	x29,x30,[sp],#16
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	vpaes_ecb_decrypt,.-vpaes_ecb_decrypt
 ___
@@ -1285,6 +1306,7 @@
 .type	vpaes_ctr32_encrypt_blocks,%function
 .align	4
 vpaes_ctr32_encrypt_blocks:
+	AARCH64_SIGN_LINK_REGISTER
 	stp	x29,x30,[sp,#-16]!
 	add	x29,sp,#0
 	stp	d8,d9,[sp,#-16]!	// ABI spec says so
@@ -1352,6 +1374,7 @@
 	ldp	d10,d11,[sp],#16
 	ldp	d8,d9,[sp],#16
 	ldp	x29,x30,[sp],#16
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	vpaes_ctr32_encrypt_blocks,.-vpaes_ctr32_encrypt_blocks
 ___
diff --git a/src/crypto/fipsmodule/aes/mode_wrappers.c b/src/crypto/fipsmodule/aes/mode_wrappers.c
index 206fcfd..d29fb27 100644
--- a/src/crypto/fipsmodule/aes/mode_wrappers.c
+++ b/src/crypto/fipsmodule/aes/mode_wrappers.c
@@ -57,7 +57,23 @@
 void AES_ctr128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
                         const AES_KEY *key, uint8_t ivec[AES_BLOCK_SIZE],
                         uint8_t ecount_buf[AES_BLOCK_SIZE], unsigned int *num) {
-  CRYPTO_ctr128_encrypt(in, out, len, key, ivec, ecount_buf, num, AES_encrypt);
+  if (hwaes_capable()) {
+    CRYPTO_ctr128_encrypt_ctr32(in, out, len, key, ivec, ecount_buf, num,
+                                aes_hw_ctr32_encrypt_blocks);
+  } else if (vpaes_capable()) {
+#if defined(VPAES_CTR32)
+    // TODO(davidben): On ARM, where |BSAES| is additionally defined, this could
+    // use |vpaes_ctr32_encrypt_blocks_with_bsaes|.
+    CRYPTO_ctr128_encrypt_ctr32(in, out, len, key, ivec, ecount_buf, num,
+                                vpaes_ctr32_encrypt_blocks);
+#else
+    CRYPTO_ctr128_encrypt(in, out, len, key, ivec, ecount_buf, num,
+                          vpaes_encrypt);
+#endif
+  } else {
+    CRYPTO_ctr128_encrypt_ctr32(in, out, len, key, ivec, ecount_buf, num,
+                                aes_nohw_ctr32_encrypt_blocks);
+  }
 }
 
 void AES_ecb_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key,
diff --git a/src/crypto/fipsmodule/bcm.c b/src/crypto/fipsmodule/bcm.c
index 567a0cd..1d9a919 100644
--- a/src/crypto/fipsmodule/bcm.c
+++ b/src/crypto/fipsmodule/bcm.c
@@ -70,7 +70,7 @@
 #include "ec/felem.c"
 #include "ec/oct.c"
 #include "ec/p224-64.c"
-#include "../../third_party/fiat/p256.c"
+#include "ec/p256.c"
 #include "ec/p256-x86_64.c"
 #include "ec/scalar.c"
 #include "ec/simple.c"
@@ -88,6 +88,7 @@
 #include "modes/ofb.c"
 #include "modes/polyval.c"
 #include "rand/ctrdrbg.c"
+#include "rand/fork_detect.c"
 #include "rand/rand.c"
 #include "rand/urandom.c"
 #include "rsa/blinding.c"
diff --git a/src/crypto/fipsmodule/bn/asm/armv8-mont.pl b/src/crypto/fipsmodule/bn/asm/armv8-mont.pl
index db2ba49..788a0ce 100644
--- a/src/crypto/fipsmodule/bn/asm/armv8-mont.pl
+++ b/src/crypto/fipsmodule/bn/asm/armv8-mont.pl
@@ -64,12 +64,15 @@
 $num="x5";	# size_t num);
 
 $code.=<<___;
+#include <openssl/arm_arch.h>
+
 .text
 
 .globl	bn_mul_mont
 .type	bn_mul_mont,%function
 .align	5
 bn_mul_mont:
+	AARCH64_SIGN_LINK_REGISTER
 	tst	$num,#7
 	b.eq	__bn_sqr8x_mont
 	tst	$num,#3
@@ -267,6 +270,7 @@
 	mov	x0,#1
 	ldp	x23,x24,[x29,#48]
 	ldr	x29,[sp],#64
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	bn_mul_mont,.-bn_mul_mont
 ___
@@ -284,6 +288,8 @@
 .type	__bn_sqr8x_mont,%function
 .align	5
 __bn_sqr8x_mont:
+	// Not adding AARCH64_SIGN_LINK_REGISTER here because __bn_sqr8x_mont is jumped to
+	// only from bn_mul_mont which has already signed the return address.
 	cmp	$ap,$bp
 	b.ne	__bn_mul4x_mont
 .Lsqr8x_mont:
@@ -1040,6 +1046,8 @@
 	ldp	x25,x26,[x29,#64]
 	ldp	x27,x28,[x29,#80]
 	ldr	x29,[sp],#128
+	// x30 is popped earlier
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	__bn_sqr8x_mont,.-__bn_sqr8x_mont
 ___
@@ -1063,6 +1071,9 @@
 .type	__bn_mul4x_mont,%function
 .align	5
 __bn_mul4x_mont:
+	// Not adding AARCH64_SIGN_LINK_REGISTER here because __bn_mul4x_mont is jumped to
+	// only from bn_mul_mont or __bn_mul8x_mont which have already signed the
+	// return address.
 	stp	x29,x30,[sp,#-128]!
 	add	x29,sp,#0
 	stp	x19,x20,[sp,#16]
@@ -1496,6 +1507,8 @@
 	ldp	x25,x26,[x29,#64]
 	ldp	x27,x28,[x29,#80]
 	ldr	x29,[sp],#128
+	// x30 is popped earlier
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	__bn_mul4x_mont,.-__bn_mul4x_mont
 ___
diff --git a/src/crypto/fipsmodule/bn/bn_test.cc b/src/crypto/fipsmodule/bn/bn_test.cc
index d7db77e..9791437 100644
--- a/src/crypto/fipsmodule/bn/bn_test.cc
+++ b/src/crypto/fipsmodule/bn/bn_test.cc
@@ -659,11 +659,26 @@
       bn_mod_mul_montgomery_small(r_words.get(), a_words.get(), b_words.get(),
                                   m_width, mont.get());
       // Use the second half of |tmp| so ASan will catch out-of-bounds writes.
-      bn_from_montgomery_small(r_words.get(), r_words.get(), m_width,
+      bn_from_montgomery_small(r_words.get(), m_width, r_words.get(), m_width,
                                mont.get());
       ASSERT_TRUE(bn_set_words(ret.get(), r_words.get(), m_width));
       EXPECT_BIGNUMS_EQUAL("A * B (mod M) (Montgomery, words)", mod_mul.get(),
                            ret.get());
+
+      // |bn_from_montgomery_small| must additionally work on double-width
+      // inputs. Test this by running |bn_from_montgomery_small| on the result
+      // of a product. Note |a_words| * |b_words| has an extra factor of R^2, so
+      // we must reduce twice.
+      std::unique_ptr<BN_ULONG[]> prod_words(new BN_ULONG[m_width * 2]);
+      bn_mul_small(prod_words.get(), m_width * 2, a_words.get(), m_width,
+                   b_words.get(), m_width);
+      bn_from_montgomery_small(r_words.get(), m_width, prod_words.get(),
+                               m_width * 2, mont.get());
+      bn_from_montgomery_small(r_words.get(), m_width, r_words.get(), m_width,
+                               mont.get());
+      ASSERT_TRUE(bn_set_words(ret.get(), r_words.get(), m_width));
+      EXPECT_BIGNUMS_EQUAL("A * B (mod M) (Montgomery, words)",
+                           mod_mul.get(), ret.get());
     }
 #endif
   }
@@ -721,7 +736,8 @@
       bn_to_montgomery_small(a_words.get(), a_words.get(), m_width, mont.get());
       bn_mod_mul_montgomery_small(r_words.get(), a_words.get(), a_words.get(),
                                   m_width, mont.get());
-      bn_from_montgomery_small(r_words.get(), r_words.get(), m_width, mont.get());
+      bn_from_montgomery_small(r_words.get(), m_width, r_words.get(), m_width,
+                               mont.get());
       ASSERT_TRUE(bn_set_words(ret.get(), r_words.get(), m_width));
       EXPECT_BIGNUMS_EQUAL("A * A (mod M) (Montgomery, words)",
                            mod_square.get(), ret.get());
@@ -732,7 +748,7 @@
       bn_mod_mul_montgomery_small(r_words.get(), a_words.get(),
                                   a_copy_words.get(), m_width, mont.get());
       // Use the second half of |tmp| so ASan will catch out-of-bounds writes.
-      bn_from_montgomery_small(r_words.get(), r_words.get(), m_width,
+      bn_from_montgomery_small(r_words.get(), m_width, r_words.get(), m_width,
                                mont.get());
       ASSERT_TRUE(bn_set_words(ret.get(), r_words.get(), m_width));
       EXPECT_BIGNUMS_EQUAL("A * A_copy (mod M) (Montgomery, words)",
@@ -783,7 +799,7 @@
       bn_to_montgomery_small(a_words.get(), a_words.get(), m_width, mont.get());
       bn_mod_exp_mont_small(r_words.get(), a_words.get(), m_width, e->d,
                             e->width, mont.get());
-      bn_from_montgomery_small(r_words.get(), r_words.get(), m_width,
+      bn_from_montgomery_small(r_words.get(), m_width, r_words.get(), m_width,
                                mont.get());
       ASSERT_TRUE(bn_set_words(ret.get(), r_words.get(), m_width));
       EXPECT_BIGNUMS_EQUAL("A ^ E (mod M) (Montgomery, words)", mod_exp.get(),
diff --git a/src/crypto/fipsmodule/bn/exponentiation.c b/src/crypto/fipsmodule/bn/exponentiation.c
index 8d4a5c8..a0f2549 100644
--- a/src/crypto/fipsmodule/bn/exponentiation.c
+++ b/src/crypto/fipsmodule/bn/exponentiation.c
@@ -732,7 +732,7 @@
     num_p--;
   }
   if (num_p == 0) {
-    bn_from_montgomery_small(r, mont->RR.d, num, mont);
+    bn_from_montgomery_small(r, num, mont->RR.d, num, mont);
     return;
   }
   unsigned bits = BN_num_bits_word(p[num_p - 1]) + (num_p - 1) * BN_BITS2;
@@ -809,8 +809,8 @@
   OPENSSL_cleanse(val, sizeof(val));
 }
 
-void bn_mod_inverse_prime_mont_small(BN_ULONG *r, const BN_ULONG *a, size_t num,
-                                     const BN_MONT_CTX *mont) {
+void bn_mod_inverse0_prime_mont_small(BN_ULONG *r, const BN_ULONG *a,
+                                      size_t num, const BN_MONT_CTX *mont) {
   if (num != (size_t)mont->N.width || num > BN_SMALL_MAX_WORDS) {
     abort();
   }
diff --git a/src/crypto/fipsmodule/bn/internal.h b/src/crypto/fipsmodule/bn/internal.h
index d58a2ac..c3aa21b 100644
--- a/src/crypto/fipsmodule/bn/internal.h
+++ b/src/crypto/fipsmodule/bn/internal.h
@@ -404,9 +404,19 @@
 int bn_mod_exp_base_2_consttime(BIGNUM *r, unsigned p, const BIGNUM *n,
                                 BN_CTX *ctx);
 
-#if defined(OPENSSL_X86_64) && defined(_MSC_VER)
+#if defined(_MSC_VER)
+#if defined(OPENSSL_X86_64)
 #define BN_UMULT_LOHI(low, high, a, b) ((low) = _umul128((a), (b), &(high)))
+#elif defined(OPENSSL_AARCH64)
+#define BN_UMULT_LOHI(low, high, a, b) \
+  do {                                 \
+    const BN_ULONG _a = (a);           \
+    const BN_ULONG _b = (b);           \
+    (low) = _a * _b;                   \
+    (high) = __umulh(_a, _b);          \
+  } while (0)
 #endif
+#endif  // _MSC_VER
 
 #if !defined(BN_ULLONG) && !defined(BN_UMULT_LOHI)
 #error "Either BN_ULLONG or BN_UMULT_LOHI must be defined on every platform."
@@ -647,10 +657,13 @@
                             const BN_MONT_CTX *mont);
 
 // bn_from_montgomery_small sets |r| to |a| translated out of the Montgomery
-// domain. |r| and |a| are |num| words long, which must be |mont->N.width|. |a|
-// must be fully-reduced and may alias |r|.
-void bn_from_montgomery_small(BN_ULONG *r, const BN_ULONG *a, size_t num,
-                              const BN_MONT_CTX *mont);
+// domain. |r| and |a| are |num_r| and |num_a| words long, respectively. |num_r|
+// must be |mont->N.width|. |a| must be at most |mont->N|^2 and may alias |r|.
+//
+// Unlike most of these functions, only |num_r| is bounded by
+// |BN_SMALL_MAX_WORDS|. |num_a| may exceed it, but must be at most 2 * |num_r|.
+void bn_from_montgomery_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a,
+                              size_t num_a, const BN_MONT_CTX *mont);
 
 // bn_mod_mul_montgomery_small sets |r| to |a| * |b| mod |mont->N|. Both inputs
 // and outputs are in the Montgomery domain. Each array is |num| words long,
@@ -675,13 +688,13 @@
                            const BN_ULONG *p, size_t num_p,
                            const BN_MONT_CTX *mont);
 
-// bn_mod_inverse_prime_mont_small sets |r| to |a|^-1 mod |mont->N|. |mont->N|
-// must be a prime. |r| and |a| are |num| words long, which must be
-// |mont->N.width| and at most |BN_SMALL_MAX_WORDS|. |a| must be fully-reduced
-// and may alias |r|. This function runs in time independent of |a|, but
-// |mont->N| is a public value.
-void bn_mod_inverse_prime_mont_small(BN_ULONG *r, const BN_ULONG *a, size_t num,
-                                     const BN_MONT_CTX *mont);
+// bn_mod_inverse0_prime_mont_small sets |r| to |a|^-1 mod |mont->N|. If |a| is
+// zero, |r| is set to zero. |mont->N| must be a prime. |r| and |a| are |num|
+// words long, which must be |mont->N.width| and at most |BN_SMALL_MAX_WORDS|.
+// |a| must be fully-reduced and may alias |r|. This function runs in time
+// independent of |a|, but |mont->N| is a public value.
+void bn_mod_inverse0_prime_mont_small(BN_ULONG *r, const BN_ULONG *a,
+                                      size_t num, const BN_MONT_CTX *mont);
 
 
 #if defined(__cplusplus)
diff --git a/src/crypto/fipsmodule/bn/montgomery.c b/src/crypto/fipsmodule/bn/montgomery.c
index b6eaf6a..e9fa08f 100644
--- a/src/crypto/fipsmodule/bn/montgomery.c
+++ b/src/crypto/fipsmodule/bn/montgomery.c
@@ -455,18 +455,18 @@
   bn_mod_mul_montgomery_small(r, a, mont->RR.d, num, mont);
 }
 
-void bn_from_montgomery_small(BN_ULONG *r, const BN_ULONG *a, size_t num,
-                              const BN_MONT_CTX *mont) {
-  if (num != (size_t)mont->N.width || num > BN_SMALL_MAX_WORDS) {
+void bn_from_montgomery_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a,
+                              size_t num_a, const BN_MONT_CTX *mont) {
+  if (num_r != (size_t)mont->N.width || num_r > BN_SMALL_MAX_WORDS ||
+      num_a > 2 * num_r) {
     abort();
   }
-  BN_ULONG tmp[BN_SMALL_MAX_WORDS * 2];
-  OPENSSL_memcpy(tmp, a, num * sizeof(BN_ULONG));
-  OPENSSL_memset(tmp + num, 0, num * sizeof(BN_ULONG));
-  if (!bn_from_montgomery_in_place(r, num, tmp, 2 * num, mont)) {
+  BN_ULONG tmp[BN_SMALL_MAX_WORDS * 2] = {0};
+  OPENSSL_memcpy(tmp, a, num_a * sizeof(BN_ULONG));
+  if (!bn_from_montgomery_in_place(r, num_r, tmp, 2 * num_r, mont)) {
     abort();
   }
-  OPENSSL_cleanse(tmp, 2 * num * sizeof(BN_ULONG));
+  OPENSSL_cleanse(tmp, 2 * num_r * sizeof(BN_ULONG));
 }
 
 void bn_mod_mul_montgomery_small(BN_ULONG *r, const BN_ULONG *a,
diff --git a/src/crypto/fipsmodule/bn/mul.c b/src/crypto/fipsmodule/bn/mul.c
index dd31580..6e1c3ca 100644
--- a/src/crypto/fipsmodule/bn/mul.c
+++ b/src/crypto/fipsmodule/bn/mul.c
@@ -119,23 +119,20 @@
   }
 }
 
-// Here follows specialised variants of bn_add_words() and bn_sub_words(). They
-// have the property performing operations on arrays of different sizes. The
-// sizes of those arrays is expressed through cl, which is the common length (
-// basicall, min(len(a),len(b)) ), and dl, which is the delta between the two
-// lengths, calculated as len(a)-len(b). All lengths are the number of
-// BN_ULONGs...  For the operations that require a result array as parameter,
-// it must have the length cl+abs(dl).
-
+// bn_sub_part_words sets |r| to |a| - |b|. It returns the borrow bit, which is
+// one if the operation underflowed and zero otherwise. |cl| is the common
+// length, that is, the shorter of len(a) or len(b). |dl| is the delta length,
+// that is, len(a) - len(b). |r|'s length matches the larger of |a| and |b|, or
+// cl + abs(dl).
+//
+// TODO(davidben): Make this take |size_t|. The |cl| + |dl| calling convention
+// is confusing.
 static BN_ULONG bn_sub_part_words(BN_ULONG *r, const BN_ULONG *a,
                                   const BN_ULONG *b, int cl, int dl) {
-  BN_ULONG c, t;
-
   assert(cl >= 0);
-  c = bn_sub_words(r, a, b, cl);
-
+  BN_ULONG borrow = bn_sub_words(r, a, b, cl);
   if (dl == 0) {
-    return c;
+    return borrow;
   }
 
   r += cl;
@@ -143,141 +140,25 @@
   b += cl;
 
   if (dl < 0) {
-    for (;;) {
-      t = b[0];
-      r[0] = 0 - t - c;
-      if (t != 0) {
-        c = 1;
-      }
-      if (++dl >= 0) {
-        break;
-      }
-
-      t = b[1];
-      r[1] = 0 - t - c;
-      if (t != 0) {
-        c = 1;
-      }
-      if (++dl >= 0) {
-        break;
-      }
-
-      t = b[2];
-      r[2] = 0 - t - c;
-      if (t != 0) {
-        c = 1;
-      }
-      if (++dl >= 0) {
-        break;
-      }
-
-      t = b[3];
-      r[3] = 0 - t - c;
-      if (t != 0) {
-        c = 1;
-      }
-      if (++dl >= 0) {
-        break;
-      }
-
-      b += 4;
-      r += 4;
+    // |a| is shorter than |b|. Complete the subtraction as if the excess words
+    // in |a| were zeros.
+    dl = -dl;
+    for (int i = 0; i < dl; i++) {
+      r[i] = 0u - b[i] - borrow;
+      borrow |= r[i] != 0;
     }
   } else {
-    int save_dl = dl;
-    while (c) {
-      t = a[0];
-      r[0] = t - c;
-      if (t != 0) {
-        c = 0;
-      }
-      if (--dl <= 0) {
-        break;
-      }
-
-      t = a[1];
-      r[1] = t - c;
-      if (t != 0) {
-        c = 0;
-      }
-      if (--dl <= 0) {
-        break;
-      }
-
-      t = a[2];
-      r[2] = t - c;
-      if (t != 0) {
-        c = 0;
-      }
-      if (--dl <= 0) {
-        break;
-      }
-
-      t = a[3];
-      r[3] = t - c;
-      if (t != 0) {
-        c = 0;
-      }
-      if (--dl <= 0) {
-        break;
-      }
-
-      save_dl = dl;
-      a += 4;
-      r += 4;
-    }
-    if (dl > 0) {
-      if (save_dl > dl) {
-        switch (save_dl - dl) {
-          case 1:
-            r[1] = a[1];
-            if (--dl <= 0) {
-              break;
-            }
-            OPENSSL_FALLTHROUGH;
-          case 2:
-            r[2] = a[2];
-            if (--dl <= 0) {
-              break;
-            }
-            OPENSSL_FALLTHROUGH;
-          case 3:
-            r[3] = a[3];
-            if (--dl <= 0) {
-              break;
-            }
-        }
-        a += 4;
-        r += 4;
-      }
-    }
-
-    if (dl > 0) {
-      for (;;) {
-        r[0] = a[0];
-        if (--dl <= 0) {
-          break;
-        }
-        r[1] = a[1];
-        if (--dl <= 0) {
-          break;
-        }
-        r[2] = a[2];
-        if (--dl <= 0) {
-          break;
-        }
-        r[3] = a[3];
-        if (--dl <= 0) {
-          break;
-        }
-
-        a += 4;
-        r += 4;
-      }
+    // |b| is shorter than |a|. Complete the subtraction as if the excess words
+    // in |b| were zeros.
+    for (int i = 0; i < dl; i++) {
+      // |r| and |a| may alias, so use a temporary.
+      BN_ULONG tmp = a[i];
+      r[i] = a[i] - borrow;
+      borrow = tmp < r[i];
     }
   }
 
-  return c;
+  return borrow;
 }
 
 // bn_abs_sub_part_words computes |r| = |a| - |b|, storing the absolute value
@@ -574,7 +455,7 @@
   static const int kMulNormalSize = 16;
   if (al >= kMulNormalSize && bl >= kMulNormalSize) {
     if (-1 <= i && i <= 1) {
-      // Find the larger power of two less than or equal to the larger length.
+      // Find the largest power of two less than or equal to the larger length.
       int j;
       if (i >= 0) {
         j = BN_num_bits_word((BN_ULONG)al);
@@ -590,6 +471,10 @@
       if (al > j || bl > j) {
         // We know |al| and |bl| are at most one from each other, so if al > j,
         // bl >= j, and vice versa. Thus we can use |bn_mul_part_recursive|.
+        //
+        // TODO(davidben): This codepath is almost unused in standard
+        // algorithms. Is this optimization necessary? See notes in
+        // https://boringssl-review.googlesource.com/q/I0bd604e2cd6a75c266f64476c23a730ca1721ea6
         assert(al >= j && bl >= j);
         if (!bn_wexpand(t, j * 8) ||
             !bn_wexpand(rr, j * 4)) {
diff --git a/src/crypto/fipsmodule/digest/digest.c b/src/crypto/fipsmodule/digest/digest.c
index a0b3bf5..6b0c198 100644
--- a/src/crypto/fipsmodule/digest/digest.c
+++ b/src/crypto/fipsmodule/digest/digest.c
@@ -122,6 +122,8 @@
 
 uint32_t EVP_MD_meth_get_flags(const EVP_MD *md) { return EVP_MD_flags(md); }
 
+void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags) {}
+
 int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in) {
   // |in->digest| may be NULL if this is a signing |EVP_MD_CTX| for, e.g.,
   // Ed25519 which does not hash with |EVP_MD_CTX|.
diff --git a/src/crypto/fipsmodule/digest/digests.c b/src/crypto/fipsmodule/digest/digests.c
index f2fa349..16daeba 100644
--- a/src/crypto/fipsmodule/digest/digests.c
+++ b/src/crypto/fipsmodule/digest/digests.c
@@ -243,6 +243,22 @@
 }
 
 
+static void sha512_256_init(EVP_MD_CTX *ctx) {
+  CHECK(SHA512_256_Init(ctx->md_data));
+}
+
+DEFINE_METHOD_FUNCTION(EVP_MD, EVP_sha512_256) {
+  out->type = NID_sha512_256;
+  out->md_size = SHA512_256_DIGEST_LENGTH;
+  out->flags = 0;
+  out->init = sha512_256_init;
+  out->update = sha512_update;
+  out->final = sha512_final;
+  out->block_size = 128;
+  out->ctx_size = sizeof(SHA512_CTX);
+}
+
+
 typedef struct {
   MD5_CTX md5;
   SHA_CTX sha1;
diff --git a/src/crypto/fipsmodule/ec/ec.c b/src/crypto/fipsmodule/ec/ec.c
index 158d66c..ab2fd89 100644
--- a/src/crypto/fipsmodule/ec/ec.c
+++ b/src/crypto/fipsmodule/ec/ec.c
@@ -84,7 +84,7 @@
 static void ec_point_free(EC_POINT *point, int free_group);
 
 static const uint8_t kP224Params[6 * 28] = {
-    // p
+    // p = 2^224 - 2^96 + 1
     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
     0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     0x00, 0x00, 0x00, 0x01,
@@ -111,7 +111,7 @@
 };
 
 static const uint8_t kP256Params[6 * 32] = {
-    // p
+    // p = 2^256 - 2^224 + 2^192 + 2^96 - 1
     0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
@@ -138,7 +138,7 @@
 };
 
 static const uint8_t kP384Params[6 * 48] = {
-    // p
+    // p = 2^384 - 2^128 - 2^96 + 2^32 - 1
     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
@@ -171,7 +171,7 @@
 };
 
 static const uint8_t kP521Params[6 * 66] = {
-    // p
+    // p = 2^521 - 1
     0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
@@ -301,17 +301,49 @@
   return ret;
 }
 
-static void ec_group_set0_generator(EC_GROUP *group, EC_POINT *generator) {
+static int ec_group_set_generator(EC_GROUP *group, const EC_AFFINE *generator,
+                                  const BIGNUM *order) {
   assert(group->generator == NULL);
-  assert(group == generator->group);
+
+  if (!BN_copy(&group->order, order)) {
+    return 0;
+  }
+  // Store the order in minimal form, so it can be used with |BN_ULONG| arrays.
+  bn_set_minimal_width(&group->order);
+
+  BN_MONT_CTX_free(group->order_mont);
+  group->order_mont = BN_MONT_CTX_new_for_modulus(&group->order, NULL);
+  if (group->order_mont == NULL) {
+    return 0;
+  }
+
+  group->field_greater_than_order = BN_cmp(&group->field, order) > 0;
+  if (group->field_greater_than_order) {
+    BIGNUM tmp;
+    BN_init(&tmp);
+    int ok =
+        BN_sub(&tmp, &group->field, order) &&
+        bn_copy_words(group->field_minus_order.words, group->field.width, &tmp);
+    BN_free(&tmp);
+    if (!ok) {
+      return 0;
+    }
+  }
+
+  group->generator = EC_POINT_new(group);
+  if (group->generator == NULL) {
+    return 0;
+  }
+  ec_affine_to_jacobian(group, &group->generator->raw, generator);
+  assert(ec_felem_equal(group, &group->one, &group->generator->raw.Z));
 
   // Avoid a reference cycle. |group->generator| does not maintain an owning
   // pointer to |group|.
-  group->generator = generator;
   int is_zero = CRYPTO_refcount_dec_and_test_zero(&group->references);
 
   assert(!is_zero);
   (void)is_zero;
+  return 1;
 }
 
 EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a,
@@ -321,20 +353,37 @@
     return NULL;
   }
 
-  EC_GROUP *ret = ec_group_new(EC_GFp_mont_method());
-  if (ret == NULL) {
-    return NULL;
+  BN_CTX *new_ctx = NULL;
+  if (ctx == NULL) {
+    ctx = new_ctx = BN_CTX_new();
+    if (ctx == NULL) {
+      return NULL;
+    }
   }
 
-  if (ret->meth->group_set_curve == NULL) {
-    OPENSSL_PUT_ERROR(EC, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
-    EC_GROUP_free(ret);
-    return NULL;
+  // Historically, |a| and |b| were not required to be fully reduced.
+  // TODO(davidben): Can this be removed?
+  EC_GROUP *ret = NULL;
+  BN_CTX_start(ctx);
+  BIGNUM *a_reduced = BN_CTX_get(ctx);
+  BIGNUM *b_reduced = BN_CTX_get(ctx);
+  if (a_reduced == NULL || b_reduced == NULL ||
+      !BN_nnmod(a_reduced, a, p, ctx) ||
+      !BN_nnmod(b_reduced, b, p, ctx)) {
+    goto err;
   }
-  if (!ret->meth->group_set_curve(ret, p, a, b, ctx)) {
+
+  ret = ec_group_new(EC_GFp_mont_method());
+  if (ret == NULL ||
+      !ret->meth->group_set_curve(ret, p, a_reduced, b_reduced, ctx)) {
     EC_GROUP_free(ret);
-    return NULL;
+    ret = NULL;
+    goto err;
   }
+
+err:
+  BN_CTX_end(ctx);
+  BN_CTX_free(new_ctx);
   return ret;
 }
 
@@ -367,7 +416,6 @@
   // tiny prime (less than 17). See the proof in |field_element_to_scalar| in
   // the ECDSA implementation.
   int ret = 0;
-  EC_POINT *copy = NULL;
   BIGNUM *tmp = BN_new();
   if (tmp == NULL ||
       !BN_lshift1(tmp, order)) {
@@ -378,44 +426,22 @@
     goto err;
   }
 
-  copy = EC_POINT_new(group);
-  if (copy == NULL ||
-      !EC_POINT_copy(copy, generator) ||
-      !BN_copy(&group->order, order)) {
-    goto err;
-  }
-  // Store the order in minimal form, so it can be used with |BN_ULONG| arrays.
-  bn_set_minimal_width(&group->order);
-
-  BN_MONT_CTX_free(group->order_mont);
-  group->order_mont = BN_MONT_CTX_new_for_modulus(&group->order, NULL);
-  if (group->order_mont == NULL) {
+  EC_AFFINE affine;
+  if (!ec_jacobian_to_affine(group, &affine, &generator->raw) ||
+      !ec_group_set_generator(group, &affine, order)) {
     goto err;
   }
 
-  group->field_greater_than_order = BN_cmp(&group->field, &group->order) > 0;
-  if (group->field_greater_than_order) {
-    if (!BN_sub(tmp, &group->field, &group->order) ||
-        !bn_copy_words(group->field_minus_order.words, group->field.width,
-                       tmp)) {
-      goto err;
-    }
-  }
-
-  ec_group_set0_generator(group, copy);
-  copy = NULL;
   ret = 1;
 
 err:
-  EC_POINT_free(copy);
   BN_free(tmp);
   return ret;
 }
 
 static EC_GROUP *ec_group_new_from_data(const struct built_in_curve *curve) {
   EC_GROUP *group = NULL;
-  EC_POINT *P = NULL;
-  BIGNUM *p = NULL, *a = NULL, *b = NULL, *x = NULL, *y = NULL;
+  BIGNUM *p = NULL, *a = NULL, *b = NULL, *order = NULL;
   int ok = 0;
 
   BN_CTX *ctx = BN_CTX_new();
@@ -429,7 +455,8 @@
 
   if (!(p = BN_bin2bn(params + 0 * param_len, param_len, NULL)) ||
       !(a = BN_bin2bn(params + 1 * param_len, param_len, NULL)) ||
-      !(b = BN_bin2bn(params + 2 * param_len, param_len, NULL))) {
+      !(b = BN_bin2bn(params + 2 * param_len, param_len, NULL)) ||
+      !(order = BN_bin2bn(params + 5 * param_len, param_len, NULL))) {
     OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
     goto err;
   }
@@ -441,42 +468,18 @@
     goto err;
   }
 
-  if ((P = EC_POINT_new(group)) == NULL) {
-    OPENSSL_PUT_ERROR(EC, ERR_R_EC_LIB);
+  EC_AFFINE G;
+  EC_FELEM x, y;
+  if (!ec_felem_from_bytes(group, &x, params + 3 * param_len, param_len) ||
+      !ec_felem_from_bytes(group, &y, params + 4 * param_len, param_len) ||
+      !ec_point_set_affine_coordinates(group, &G, &x, &y)) {
     goto err;
   }
 
-  if (!(x = BN_bin2bn(params + 3 * param_len, param_len, NULL)) ||
-      !(y = BN_bin2bn(params + 4 * param_len, param_len, NULL))) {
-    OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
+  if (!ec_group_set_generator(group, &G, order)) {
     goto err;
   }
 
-  if (!EC_POINT_set_affine_coordinates_GFp(group, P, x, y, ctx)) {
-    OPENSSL_PUT_ERROR(EC, ERR_R_EC_LIB);
-    goto err;
-  }
-  if (!BN_bin2bn(params + 5 * param_len, param_len, &group->order)) {
-    OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
-    goto err;
-  }
-
-  group->field_greater_than_order = BN_cmp(&group->field, &group->order) > 0;
-  if (group->field_greater_than_order) {
-    if (!BN_sub(p, &group->field, &group->order) ||
-        !bn_copy_words(group->field_minus_order.words, group->field.width, p)) {
-      goto err;
-    }
-  }
-
-  group->order_mont = BN_MONT_CTX_new_for_modulus(&group->order, ctx);
-  if (group->order_mont == NULL) {
-    OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
-    goto err;
-  }
-
-  ec_group_set0_generator(group, P);
-  P = NULL;
   ok = 1;
 
 err:
@@ -484,13 +487,11 @@
     EC_GROUP_free(group);
     group = NULL;
   }
-  EC_POINT_free(P);
   BN_CTX_free(ctx);
   BN_free(p);
   BN_free(a);
   BN_free(b);
-  BN_free(x);
-  BN_free(y);
+  BN_free(order);
   return group;
 }
 
@@ -606,7 +607,7 @@
          BN_cmp(&a->field, &b->field) != 0 ||
          !ec_felem_equal(a, &a->a, &b->a) ||
          !ec_felem_equal(a, &a->b, &b->b) ||
-         ec_GFp_simple_cmp(a, &a->generator->raw, &b->generator->raw) != 0;
+         !ec_GFp_simple_points_equal(a, &a->generator->raw, &b->generator->raw);
 }
 
 const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group) {
@@ -769,7 +770,9 @@
     OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS);
     return -1;
   }
-  return ec_GFp_simple_cmp(group, &a->raw, &b->raw);
+
+  // Note |EC_POINT_cmp| returns zero for equality and non-zero for inequality.
+  return ec_GFp_simple_points_equal(group, &a->raw, &b->raw) ? 0 : 1;
 }
 
 int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group,
@@ -787,13 +790,67 @@
   if (!group->meth->point_get_affine_coordinates(group, &point->raw,
                                                  x == NULL ? NULL : &x_felem,
                                                  y == NULL ? NULL : &y_felem) ||
-      (x != NULL && !bn_set_words(x, x_felem.words, group->field.width)) ||
-      (y != NULL && !bn_set_words(y, y_felem.words, group->field.width))) {
+      (x != NULL && !ec_felem_to_bignum(group, x, &x_felem)) ||
+      (y != NULL && !ec_felem_to_bignum(group, y, &y_felem))) {
     return 0;
   }
   return 1;
 }
 
+void ec_affine_to_jacobian(const EC_GROUP *group, EC_RAW_POINT *out,
+                           const EC_AFFINE *p) {
+  out->X = p->X;
+  out->Y = p->Y;
+  out->Z = group->one;
+}
+
+int ec_jacobian_to_affine(const EC_GROUP *group, EC_AFFINE *out,
+                          const EC_RAW_POINT *p) {
+  return group->meth->point_get_affine_coordinates(group, p, &out->X, &out->Y);
+}
+
+int ec_jacobian_to_affine_batch(const EC_GROUP *group, EC_AFFINE *out,
+                                const EC_RAW_POINT *in, size_t num) {
+  if (group->meth->jacobian_to_affine_batch == NULL) {
+    OPENSSL_PUT_ERROR(EC, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+    return 0;
+  }
+  return group->meth->jacobian_to_affine_batch(group, out, in, num);
+}
+
+int ec_point_set_affine_coordinates(const EC_GROUP *group, EC_AFFINE *out,
+                                    const EC_FELEM *x, const EC_FELEM *y) {
+  void (*const felem_mul)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a,
+                          const EC_FELEM *b) = group->meth->felem_mul;
+  void (*const felem_sqr)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a) =
+      group->meth->felem_sqr;
+
+  // Check if the point is on the curve.
+  EC_FELEM lhs, rhs;
+  felem_sqr(group, &lhs, y);                   // lhs = y^2
+  felem_sqr(group, &rhs, x);                   // rhs = x^2
+  ec_felem_add(group, &rhs, &rhs, &group->a);  // rhs = x^2 + a
+  felem_mul(group, &rhs, &rhs, x);             // rhs = x^3 + ax
+  ec_felem_add(group, &rhs, &rhs, &group->b);  // rhs = x^3 + ax + b
+  if (!ec_felem_equal(group, &lhs, &rhs)) {
+    OPENSSL_PUT_ERROR(EC, EC_R_POINT_IS_NOT_ON_CURVE);
+    // In the event of an error, defend against the caller not checking the
+    // return value by setting a known safe value. Note this may not be possible
+    // if the caller is in the process of constructing an arbitrary group and
+    // the generator is missing.
+    if (group->generator != NULL) {
+      assert(ec_felem_equal(group, &group->one, &group->generator->raw.Z));
+      out->X = group->generator->raw.X;
+      out->Y = group->generator->raw.Y;
+    }
+    return 0;
+  }
+
+  out->X = *x;
+  out->Y = *y;
+  return 1;
+}
+
 int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *point,
                                         const BIGNUM *x, const BIGNUM *y,
                                         BN_CTX *ctx) {
@@ -801,24 +858,24 @@
     OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS);
     return 0;
   }
-  if (!ec_GFp_simple_point_set_affine_coordinates(group, &point->raw, x, y)) {
+
+  if (x == NULL || y == NULL) {
+    OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);
     return 0;
   }
 
-  if (!EC_POINT_is_on_curve(group, point, ctx)) {
+  EC_FELEM x_felem, y_felem;
+  EC_AFFINE affine;
+  if (!ec_bignum_to_felem(group, &x_felem, x) ||
+      !ec_bignum_to_felem(group, &y_felem, y) ||
+      !ec_point_set_affine_coordinates(group, &affine, &x_felem, &y_felem)) {
     // In the event of an error, defend against the caller not checking the
-    // return value by setting a known safe value: the base point.
-    const EC_POINT *generator = EC_GROUP_get0_generator(group);
-    // The generator can be missing if the caller is in the process of
-    // constructing an arbitrary group. In this, we give up and hope they're
-    // checking the return value.
-    if (generator) {
-      ec_GFp_simple_point_copy(&point->raw, &generator->raw);
-    }
-    OPENSSL_PUT_ERROR(EC, EC_R_POINT_IS_NOT_ON_CURVE);
+    // return value by setting a known safe value.
+    ec_set_to_safe_point(group, &point->raw);
     return 0;
   }
 
+  ec_affine_to_jacobian(group, &point->raw, &affine);
   return 1;
 }
 
@@ -949,10 +1006,27 @@
     return 0;
   }
 
+  if (group->meth->mul_public == NULL) {
+    return group->meth->mul_public_batch(group, r, g_scalar, p, p_scalar, 1);
+  }
+
   group->meth->mul_public(group, r, g_scalar, p, p_scalar);
   return 1;
 }
 
+int ec_point_mul_scalar_public_batch(const EC_GROUP *group, EC_RAW_POINT *r,
+                                     const EC_SCALAR *g_scalar,
+                                     const EC_RAW_POINT *points,
+                                     const EC_SCALAR *scalars, size_t num) {
+  if (group->meth->mul_public_batch == NULL) {
+    OPENSSL_PUT_ERROR(EC, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+    return 0;
+  }
+
+  return group->meth->mul_public_batch(group, r, g_scalar, points, scalars,
+                                       num);
+}
+
 int ec_point_mul_scalar(const EC_GROUP *group, EC_RAW_POINT *r,
                         const EC_RAW_POINT *p, const EC_SCALAR *scalar) {
   if (p == NULL || scalar == NULL) {
@@ -961,6 +1035,14 @@
   }
 
   group->meth->mul(group, r, p, scalar);
+
+  // Check the result is on the curve to defend against fault attacks or bugs.
+  // This has negligible cost compared to the multiplication.
+  if (!ec_GFp_simple_is_on_curve(group, r)) {
+    OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
+    return 0;
+  }
+
   return 1;
 }
 
@@ -972,9 +1054,93 @@
   }
 
   group->meth->mul_base(group, r, scalar);
+
+  // Check the result is on the curve to defend against fault attacks or bugs.
+  // This has negligible cost compared to the multiplication.
+  if (!ec_GFp_simple_is_on_curve(group, r)) {
+    OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
+    return 0;
+  }
+
   return 1;
 }
 
+int ec_point_mul_scalar_batch(const EC_GROUP *group, EC_RAW_POINT *r,
+                              const EC_RAW_POINT *p0, const EC_SCALAR *scalar0,
+                              const EC_RAW_POINT *p1, const EC_SCALAR *scalar1,
+                              const EC_RAW_POINT *p2,
+                              const EC_SCALAR *scalar2) {
+  if (group->meth->mul_batch == NULL) {
+    OPENSSL_PUT_ERROR(EC, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+    return 0;
+  }
+
+  group->meth->mul_batch(group, r, p0, scalar0, p1, scalar1, p2, scalar2);
+
+  // Check the result is on the curve to defend against fault attacks or bugs.
+  // This has negligible cost compared to the multiplication.
+  if (!ec_GFp_simple_is_on_curve(group, r)) {
+    OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
+    return 0;
+  }
+
+  return 1;
+}
+
+int ec_init_precomp(const EC_GROUP *group, EC_PRECOMP *out,
+                    const EC_RAW_POINT *p) {
+  if (group->meth->init_precomp == NULL) {
+    OPENSSL_PUT_ERROR(EC, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+    return 0;
+  }
+
+  return group->meth->init_precomp(group, out, p);
+}
+
+int ec_point_mul_scalar_precomp(const EC_GROUP *group, EC_RAW_POINT *r,
+                                const EC_PRECOMP *p0, const EC_SCALAR *scalar0,
+                                const EC_PRECOMP *p1, const EC_SCALAR *scalar1,
+                                const EC_PRECOMP *p2,
+                                const EC_SCALAR *scalar2) {
+  if (group->meth->mul_precomp == NULL) {
+    OPENSSL_PUT_ERROR(EC, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+    return 0;
+  }
+
+  group->meth->mul_precomp(group, r, p0, scalar0, p1, scalar1, p2, scalar2);
+
+  // Check the result is on the curve to defend against fault attacks or bugs.
+  // This has negligible cost compared to the multiplication.
+  if (!ec_GFp_simple_is_on_curve(group, r)) {
+    OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
+    return 0;
+  }
+
+  return 1;
+}
+
+void ec_point_select(const EC_GROUP *group, EC_RAW_POINT *out, BN_ULONG mask,
+                      const EC_RAW_POINT *a, const EC_RAW_POINT *b) {
+  ec_felem_select(group, &out->X, mask, &a->X, &b->X);
+  ec_felem_select(group, &out->Y, mask, &a->Y, &b->Y);
+  ec_felem_select(group, &out->Z, mask, &a->Z, &b->Z);
+}
+
+void ec_affine_select(const EC_GROUP *group, EC_AFFINE *out, BN_ULONG mask,
+                      const EC_AFFINE *a, const EC_AFFINE *b) {
+  ec_felem_select(group, &out->X, mask, &a->X, &b->X);
+  ec_felem_select(group, &out->Y, mask, &a->Y, &b->Y);
+}
+
+void ec_precomp_select(const EC_GROUP *group, EC_PRECOMP *out, BN_ULONG mask,
+                       const EC_PRECOMP *a, const EC_PRECOMP *b) {
+  OPENSSL_STATIC_ASSERT(sizeof(out->comb) == sizeof(*out),
+                        "out->comb does not span the entire structure");
+  for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(out->comb); i++) {
+    ec_affine_select(group, &out->comb[i], mask, &a->comb[i], &b->comb[i]);
+  }
+}
+
 int ec_cmp_x_coordinate(const EC_GROUP *group, const EC_RAW_POINT *p,
                         const EC_SCALAR *r) {
   return group->meth->cmp_x_coordinate(group, p, r);
@@ -982,14 +1148,19 @@
 
 int ec_get_x_coordinate_as_scalar(const EC_GROUP *group, EC_SCALAR *out,
                                   const EC_RAW_POINT *p) {
-  EC_FELEM x;
-  // For simplicity, in case of width mismatches between |group->field| and
-  // |group->order|, zero any untouched words in |x|.
-  OPENSSL_memset(&x, 0, sizeof(x));
-  if (!group->meth->point_get_affine_coordinates(group, p, &x, NULL)) {
+  uint8_t bytes[EC_MAX_BYTES];
+  size_t len;
+  if (!ec_get_x_coordinate_as_bytes(group, bytes, &len, sizeof(bytes), p)) {
     return 0;
   }
 
+  // For simplicity, in case of width mismatches between |group->field| and
+  // |group->order|, zero any untouched words in |out|.
+  OPENSSL_memset(out, 0, sizeof(EC_SCALAR));
+  for (size_t i = 0; i < len; i++) {
+    out->bytes[len - i - 1] = bytes[i];
+  }
+
   // We must have p < 2×order, assuming p is not tiny (p >= 17). Thus rather we
   // can reduce by performing at most one subtraction.
   //
@@ -1008,17 +1179,17 @@
 
   // The above does not guarantee |group->field| is not one word larger than
   // |group->order|, so read one extra carry word.
+  BN_ULONG tmp[EC_MAX_WORDS];
   BN_ULONG carry =
-      group->order.width < EC_MAX_WORDS ? x.words[group->order.width] : 0;
-  bn_reduce_once(out->words, x.words, carry, group->order.d,
-                 group->order.width);
+      group->order.width < EC_MAX_WORDS ? out->words[group->order.width] : 0;
+  bn_reduce_once_in_place(out->words, carry, group->order.d, tmp,
+                          group->order.width);
   return 1;
 }
 
-int ec_point_get_affine_coordinate_bytes(const EC_GROUP *group, uint8_t *out_x,
-                                         uint8_t *out_y, size_t *out_len,
-                                         size_t max_out,
-                                         const EC_RAW_POINT *p) {
+int ec_get_x_coordinate_as_bytes(const EC_GROUP *group, uint8_t *out,
+                                 size_t *out_len, size_t max_out,
+                                 const EC_RAW_POINT *p) {
   size_t len = BN_num_bytes(&group->field);
   assert(len <= EC_MAX_BYTES);
   if (max_out < len) {
@@ -1026,26 +1197,27 @@
     return 0;
   }
 
-  EC_FELEM x, y;
-  if (!group->meth->point_get_affine_coordinates(
-          group, p, out_x == NULL ? NULL : &x, out_y == NULL ? NULL : &y)) {
+  EC_FELEM x;
+  if (!group->meth->point_get_affine_coordinates(group, p, &x, NULL)) {
     return 0;
   }
 
-  if (out_x != NULL) {
-    for (size_t i = 0; i < len; i++) {
-      out_x[i] = x.bytes[len - i - 1];
-    }
-  }
-  if (out_y != NULL) {
-    for (size_t i = 0; i < len; i++) {
-      out_y[i] = y.bytes[len - i - 1];
-    }
-  }
+  ec_felem_to_bytes(group, out, out_len, &x);
   *out_len = len;
   return 1;
 }
 
+void ec_set_to_safe_point(const EC_GROUP *group, EC_RAW_POINT *out) {
+  if (group->generator != NULL) {
+    ec_GFp_simple_point_copy(out, &group->generator->raw);
+  } else {
+    // The generator can be missing if the caller is in the process of
+    // constructing an arbitrary group. In this case, we give up and use the
+    // point at infinity.
+    ec_GFp_simple_point_set_to_infinity(group, out);
+  }
+}
+
 void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag) {}
 
 const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group) {
diff --git a/src/crypto/fipsmodule/ec/ec_key.c b/src/crypto/fipsmodule/ec/ec_key.c
index 0d9ce67..cd48c60 100644
--- a/src/crypto/fipsmodule/ec/ec_key.c
+++ b/src/crypto/fipsmodule/ec/ec_key.c
@@ -292,10 +292,6 @@
 }
 
 int EC_KEY_check_key(const EC_KEY *eckey) {
-  int ok = 0;
-  BN_CTX *ctx = NULL;
-  EC_POINT *point = NULL;
-
   if (!eckey || !eckey->group || !eckey->pub_key) {
     OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);
     return 0;
@@ -303,41 +299,31 @@
 
   if (EC_POINT_is_at_infinity(eckey->group, eckey->pub_key)) {
     OPENSSL_PUT_ERROR(EC, EC_R_POINT_AT_INFINITY);
-    goto err;
+    return 0;
   }
 
-  ctx = BN_CTX_new();
-
-  if (ctx == NULL) {
-    goto err;
-  }
-
-  // testing whether the pub_key is on the elliptic curve
-  if (!EC_POINT_is_on_curve(eckey->group, eckey->pub_key, ctx)) {
+  // Test whether the public key is on the elliptic curve.
+  if (!EC_POINT_is_on_curve(eckey->group, eckey->pub_key, NULL)) {
     OPENSSL_PUT_ERROR(EC, EC_R_POINT_IS_NOT_ON_CURVE);
-    goto err;
+    return 0;
   }
-  // in case the priv_key is present :
-  // check if generator * priv_key == pub_key
+
+  // Check the public and private keys match.
   if (eckey->priv_key != NULL) {
-    point = EC_POINT_new(eckey->group);
-    if (point == NULL ||
-        !ec_point_mul_scalar_base(eckey->group, &point->raw,
+    EC_RAW_POINT point;
+    if (!ec_point_mul_scalar_base(eckey->group, &point,
                                   &eckey->priv_key->scalar)) {
       OPENSSL_PUT_ERROR(EC, ERR_R_EC_LIB);
-      goto err;
+      return 0;
     }
-    if (EC_POINT_cmp(eckey->group, point, eckey->pub_key, ctx) != 0) {
+    if (!ec_GFp_simple_points_equal(eckey->group, &point,
+                                    &eckey->pub_key->raw)) {
       OPENSSL_PUT_ERROR(EC, EC_R_INVALID_PRIVATE_KEY);
-      goto err;
+      return 0;
     }
   }
-  ok = 1;
 
-err:
-  BN_CTX_free(ctx);
-  EC_POINT_free(point);
-  return ok;
+  return 1;
 }
 
 int EC_KEY_check_fips(const EC_KEY *key) {
diff --git a/src/crypto/fipsmodule/ec/ec_montgomery.c b/src/crypto/fipsmodule/ec/ec_montgomery.c
index 0cf1d91..21d5d40 100644
--- a/src/crypto/fipsmodule/ec/ec_montgomery.c
+++ b/src/crypto/fipsmodule/ec/ec_montgomery.c
@@ -92,35 +92,20 @@
 
 int ec_GFp_mont_group_set_curve(EC_GROUP *group, const BIGNUM *p,
                                 const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) {
-  BN_CTX *new_ctx = NULL;
-  int ret = 0;
-
   BN_MONT_CTX_free(group->mont);
-  group->mont = NULL;
-
-  if (ctx == NULL) {
-    ctx = new_ctx = BN_CTX_new();
-    if (ctx == NULL) {
-      return 0;
-    }
-  }
-
   group->mont = BN_MONT_CTX_new_for_modulus(p, ctx);
   if (group->mont == NULL) {
     OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
-    goto err;
+    return 0;
   }
 
-  ret = ec_GFp_simple_group_set_curve(group, p, a, b, ctx);
-
-  if (!ret) {
+  if (!ec_GFp_simple_group_set_curve(group, p, a, b, ctx)) {
     BN_MONT_CTX_free(group->mont);
     group->mont = NULL;
+    return 0;
   }
 
-err:
-  BN_CTX_free(new_ctx);
-  return ret;
+  return 1;
 }
 
 static void ec_GFp_mont_felem_to_montgomery(const EC_GROUP *group,
@@ -132,14 +117,14 @@
 static void ec_GFp_mont_felem_from_montgomery(const EC_GROUP *group,
                                               EC_FELEM *out,
                                               const EC_FELEM *in) {
-  bn_from_montgomery_small(out->words, in->words, group->field.width,
-                           group->mont);
+  bn_from_montgomery_small(out->words, group->field.width, in->words,
+                           group->field.width, group->mont);
 }
 
-static void ec_GFp_mont_felem_inv(const EC_GROUP *group, EC_FELEM *out,
-                                  const EC_FELEM *a) {
-  bn_mod_inverse_prime_mont_small(out->words, a->words, group->field.width,
-                                  group->mont);
+static void ec_GFp_mont_felem_inv0(const EC_GROUP *group, EC_FELEM *out,
+                                   const EC_FELEM *a) {
+  bn_mod_inverse0_prime_mont_small(out->words, a->words, group->field.width,
+                                   group->mont);
 }
 
 void ec_GFp_mont_felem_mul(const EC_GROUP *group, EC_FELEM *r,
@@ -154,30 +139,39 @@
                               group->mont);
 }
 
-int ec_GFp_mont_bignum_to_felem(const EC_GROUP *group, EC_FELEM *out,
-                                const BIGNUM *in) {
-  if (group->mont == NULL) {
-    OPENSSL_PUT_ERROR(EC, EC_R_NOT_INITIALIZED);
+void ec_GFp_mont_felem_to_bytes(const EC_GROUP *group, uint8_t *out,
+                                size_t *out_len, const EC_FELEM *in) {
+  EC_FELEM tmp;
+  ec_GFp_mont_felem_from_montgomery(group, &tmp, in);
+  ec_GFp_simple_felem_to_bytes(group, out, out_len, &tmp);
+}
+
+int ec_GFp_mont_felem_from_bytes(const EC_GROUP *group, EC_FELEM *out,
+                                 const uint8_t *in, size_t len) {
+  if (!ec_GFp_simple_felem_from_bytes(group, out, in, len)) {
     return 0;
   }
 
-  if (!bn_copy_words(out->words, group->field.width, in)) {
-    return 0;
-  }
   ec_GFp_mont_felem_to_montgomery(group, out, out);
   return 1;
 }
 
-int ec_GFp_mont_felem_to_bignum(const EC_GROUP *group, BIGNUM *out,
-                                const EC_FELEM *in) {
-  if (group->mont == NULL) {
-    OPENSSL_PUT_ERROR(EC, EC_R_NOT_INITIALIZED);
-    return 0;
-  }
+static void ec_GFp_mont_felem_reduce(const EC_GROUP *group, EC_FELEM *out,
+                                     const BN_ULONG *words, size_t num) {
+  // Convert "from" Montgomery form so the value is reduced mod p.
+  bn_from_montgomery_small(out->words, group->field.width, words, num,
+                           group->mont);
+  // Convert "to" Montgomery form to remove the R^-1 factor added.
+  ec_GFp_mont_felem_to_montgomery(group, out, out);
+  // Convert to Montgomery form to match this implementation's representation.
+  ec_GFp_mont_felem_to_montgomery(group, out, out);
+}
 
-  EC_FELEM tmp;
-  ec_GFp_mont_felem_from_montgomery(group, &tmp, in);
-  return bn_set_words(out, tmp.words, group->field.width);
+static void ec_GFp_mont_felem_exp(const EC_GROUP *group, EC_FELEM *out,
+                                  const EC_FELEM *a, const BN_ULONG *exp,
+                                  size_t num_exp) {
+  bn_mod_exp_mont_small(out->words, a->words, group->field.width, exp, num_exp,
+                        group->mont);
 }
 
 static int ec_GFp_mont_point_get_affine_coordinates(const EC_GROUP *group,
@@ -188,18 +182,12 @@
     return 0;
   }
 
-  // Transform  (X, Y, Z)  into  (x, y) := (X/Z^2, Y/Z^3).
-
+  // Transform (X, Y, Z) into (x, y) := (X/Z^2, Y/Z^3). Note the check above
+  // ensures |point->Z| is non-zero, so the inverse always exists.
   EC_FELEM z1, z2;
-  ec_GFp_mont_felem_inv(group, &z2, &point->Z);
+  ec_GFp_mont_felem_inv0(group, &z2, &point->Z);
   ec_GFp_mont_felem_sqr(group, &z1, &z2);
 
-  // Instead of using |ec_GFp_mont_felem_from_montgomery| to convert the |x|
-  // coordinate and then calling |ec_GFp_mont_felem_from_montgomery| again to
-  // convert the |y| coordinate below, convert the common factor |z1| once now,
-  // saving one reduction.
-  ec_GFp_mont_felem_from_montgomery(group, &z1, &z1);
-
   if (x != NULL) {
     ec_GFp_mont_felem_mul(group, x, &point->X, &z1);
   }
@@ -212,6 +200,52 @@
   return 1;
 }
 
+static int ec_GFp_mont_jacobian_to_affine_batch(const EC_GROUP *group,
+                                                EC_AFFINE *out,
+                                                const EC_RAW_POINT *in,
+                                                size_t num) {
+  if (num == 0) {
+    return 1;
+  }
+
+  // Compute prefix products of all Zs. Use |out[i].X| as scratch space
+  // to store these values.
+  out[0].X = in[0].Z;
+  for (size_t i = 1; i < num; i++) {
+    ec_GFp_mont_felem_mul(group, &out[i].X, &out[i - 1].X, &in[i].Z);
+  }
+
+  // Some input was infinity iff the product of all Zs is zero.
+  if (ec_felem_non_zero_mask(group, &out[num - 1].X) == 0) {
+    OPENSSL_PUT_ERROR(EC, EC_R_POINT_AT_INFINITY);
+    return 0;
+  }
+
+  // Invert the product of all Zs.
+  EC_FELEM zinvprod;
+  ec_GFp_mont_felem_inv0(group, &zinvprod, &out[num - 1].X);
+  for (size_t i = num - 1; i < num; i--) {
+    // Our loop invariant is that |zinvprod| is Z0^-1 * Z1^-1 * ... * Zi^-1.
+    // Recover Zi^-1 by multiplying by the previous product.
+    EC_FELEM zinv, zinv2;
+    if (i == 0) {
+      zinv = zinvprod;
+    } else {
+      ec_GFp_mont_felem_mul(group, &zinv, &zinvprod, &out[i - 1].X);
+      // Maintain the loop invariant for the next iteration.
+      ec_GFp_mont_felem_mul(group, &zinvprod, &zinvprod, &in[i].Z);
+    }
+
+    // Compute affine coordinates: x = X * Z^-2 and y = Y * Z^-3.
+    ec_GFp_mont_felem_sqr(group, &zinv2, &zinv);
+    ec_GFp_mont_felem_mul(group, &out[i].X, &in[i].X, &zinv2);
+    ec_GFp_mont_felem_mul(group, &out[i].Y, &in[i].Y, &zinv2);
+    ec_GFp_mont_felem_mul(group, &out[i].Y, &out[i].Y, &zinv);
+  }
+
+  return 1;
+}
+
 void ec_GFp_mont_add(const EC_GROUP *group, EC_RAW_POINT *out,
                      const EC_RAW_POINT *a, const EC_RAW_POINT *b) {
   if (a == b) {
@@ -468,16 +502,23 @@
   out->group_finish = ec_GFp_mont_group_finish;
   out->group_set_curve = ec_GFp_mont_group_set_curve;
   out->point_get_affine_coordinates = ec_GFp_mont_point_get_affine_coordinates;
+  out->jacobian_to_affine_batch = ec_GFp_mont_jacobian_to_affine_batch;
   out->add = ec_GFp_mont_add;
   out->dbl = ec_GFp_mont_dbl;
   out->mul = ec_GFp_mont_mul;
   out->mul_base = ec_GFp_mont_mul_base;
-  out->mul_public = ec_GFp_mont_mul_public;
+  out->mul_batch = ec_GFp_mont_mul_batch;
+  out->mul_public_batch = ec_GFp_mont_mul_public_batch;
+  out->init_precomp = ec_GFp_mont_init_precomp;
+  out->mul_precomp = ec_GFp_mont_mul_precomp;
   out->felem_mul = ec_GFp_mont_felem_mul;
   out->felem_sqr = ec_GFp_mont_felem_sqr;
-  out->bignum_to_felem = ec_GFp_mont_bignum_to_felem;
-  out->felem_to_bignum = ec_GFp_mont_felem_to_bignum;
-  out->scalar_inv_montgomery = ec_simple_scalar_inv_montgomery;
-  out->scalar_inv_montgomery_vartime = ec_GFp_simple_mont_inv_mod_ord_vartime;
+  out->felem_to_bytes = ec_GFp_mont_felem_to_bytes;
+  out->felem_from_bytes = ec_GFp_mont_felem_from_bytes;
+  out->felem_reduce = ec_GFp_mont_felem_reduce;
+  out->felem_exp = ec_GFp_mont_felem_exp;
+  out->scalar_inv0_montgomery = ec_simple_scalar_inv0_montgomery;
+  out->scalar_to_montgomery_inv_vartime =
+      ec_simple_scalar_to_montgomery_inv_vartime;
   out->cmp_x_coordinate = ec_GFp_mont_cmp_x_coordinate;
 }
diff --git a/src/crypto/fipsmodule/ec/ec_test.cc b/src/crypto/fipsmodule/ec/ec_test.cc
index 1c8a9ce..edcfeaa 100644
--- a/src/crypto/fipsmodule/ec/ec_test.cc
+++ b/src/crypto/fipsmodule/ec/ec_test.cc
@@ -28,7 +28,9 @@
 #include <openssl/mem.h>
 #include <openssl/nid.h>
 #include <openssl/obj.h>
+#include <openssl/span.h>
 
+#include "../../ec_extra/internal.h"
 #include "../../test/file_test.h"
 #include "../../test/test_util.h"
 #include "../bn/internal.h"
@@ -132,6 +134,22 @@
   return true;
 }
 
+static bool EncodeECPoint(std::vector<uint8_t> *out, const EC_GROUP *group,
+                          const EC_POINT *p, point_conversion_form_t form) {
+  size_t len = EC_POINT_point2oct(group, p, form, nullptr, 0, nullptr);
+  if (len == 0) {
+    return false;
+  }
+
+  out->resize(len);
+  len = EC_POINT_point2oct(group, p, form, out->data(), out->size(), nullptr);
+  if (len != out->size()) {
+    return false;
+  }
+
+  return true;
+}
+
 TEST(ECTest, Encoding) {
   bssl::UniquePtr<EC_KEY> key =
       DecodeECPrivateKey(kECKeyWithoutPublic, sizeof(kECKeyWithoutPublic));
@@ -330,6 +348,23 @@
 
   EXPECT_EQ(0, EC_GROUP_cmp(group.get(), group4.get(), NULL));
 #endif
+
+  // group5 is the same group, but the curve coefficients are passed in
+  // unreduced and the caller does not pass in a |BN_CTX|.
+  ASSERT_TRUE(BN_sub(a.get(), a.get(), p.get()));
+  ASSERT_TRUE(BN_add(b.get(), b.get(), p.get()));
+  bssl::UniquePtr<EC_GROUP> group5(
+      EC_GROUP_new_curve_GFp(p.get(), a.get(), b.get(), NULL));
+  ASSERT_TRUE(group5);
+  bssl::UniquePtr<EC_POINT> generator5(EC_POINT_new(group5.get()));
+  ASSERT_TRUE(generator5);
+  ASSERT_TRUE(EC_POINT_set_affine_coordinates_GFp(
+      group5.get(), generator5.get(), gx.get(), gy.get(), ctx.get()));
+  ASSERT_TRUE(EC_GROUP_set_generator(group5.get(), generator5.get(),
+                                     order.get(), BN_value_one()));
+
+  EXPECT_EQ(0, EC_GROUP_cmp(group.get(), group.get(), NULL));
+  EXPECT_EQ(0, EC_GROUP_cmp(group5.get(), group.get(), NULL));
 }
 
 TEST(ECTest, SetKeyWithoutGroup) {
@@ -458,9 +493,6 @@
   ASSERT_TRUE(key);
   ASSERT_TRUE(EC_KEY_generate_key(key.get()));
 
-  EXPECT_TRUE(EC_POINT_is_on_curve(group(), EC_KEY_get0_public_key(key.get()),
-                                   nullptr));
-
   // Get the public key's coordinates.
   bssl::UniquePtr<BIGNUM> x(BN_new());
   ASSERT_TRUE(x);
@@ -498,6 +530,84 @@
       EC_KEY_set_public_key_affine_coordinates(key.get(), x.get(), y.get()));
 }
 
+TEST_P(ECCurveTest, IsOnCurve) {
+  bssl::UniquePtr<EC_KEY> key(EC_KEY_new_by_curve_name(GetParam().nid));
+  ASSERT_TRUE(key);
+  ASSERT_TRUE(EC_KEY_generate_key(key.get()));
+
+  // The generated point is on the curve.
+  EXPECT_TRUE(EC_POINT_is_on_curve(group(), EC_KEY_get0_public_key(key.get()),
+                                   nullptr));
+
+  bssl::UniquePtr<EC_POINT> p(EC_POINT_new(group()));
+  ASSERT_TRUE(p);
+  ASSERT_TRUE(EC_POINT_copy(p.get(), EC_KEY_get0_public_key(key.get())));
+
+  // This should never happen outside of a bug, but |EC_POINT_is_on_curve|
+  // rejects points not on the curve.
+  OPENSSL_memset(&p->raw.X, 0, sizeof(p->raw.X));
+  EXPECT_FALSE(EC_POINT_is_on_curve(group(), p.get(), nullptr));
+
+  // The point at infinity is always on the curve.
+  ASSERT_TRUE(EC_POINT_copy(p.get(), EC_KEY_get0_public_key(key.get())));
+  OPENSSL_memset(&p->raw.Z, 0, sizeof(p->raw.Z));
+  EXPECT_TRUE(EC_POINT_is_on_curve(group(), p.get(), nullptr));
+}
+
+TEST_P(ECCurveTest, Compare) {
+  bssl::UniquePtr<EC_KEY> key1(EC_KEY_new_by_curve_name(GetParam().nid));
+  ASSERT_TRUE(key1);
+  ASSERT_TRUE(EC_KEY_generate_key(key1.get()));
+  const EC_POINT *pub1 = EC_KEY_get0_public_key(key1.get());
+
+  bssl::UniquePtr<EC_KEY> key2(EC_KEY_new_by_curve_name(GetParam().nid));
+  ASSERT_TRUE(key2);
+  ASSERT_TRUE(EC_KEY_generate_key(key2.get()));
+  const EC_POINT *pub2 = EC_KEY_get0_public_key(key2.get());
+
+  // Two different points should not compare as equal.
+  EXPECT_EQ(1, EC_POINT_cmp(group(), pub1, pub2, nullptr));
+
+  // Serialize |pub1| and parse it back out. This gives a point in affine
+  // coordinates.
+  std::vector<uint8_t> serialized;
+  ASSERT_TRUE(
+      EncodeECPoint(&serialized, group(), pub1, POINT_CONVERSION_UNCOMPRESSED));
+  bssl::UniquePtr<EC_POINT> p(EC_POINT_new(group()));
+  ASSERT_TRUE(p);
+  ASSERT_TRUE(EC_POINT_oct2point(group(), p.get(), serialized.data(),
+                                 serialized.size(), nullptr));
+
+  // The points should be equal.
+  EXPECT_EQ(0, EC_POINT_cmp(group(), p.get(), pub1, nullptr));
+
+  // Add something to the point. It no longer compares as equal.
+  ASSERT_TRUE(EC_POINT_add(group(), p.get(), p.get(), pub2, nullptr));
+  EXPECT_EQ(1, EC_POINT_cmp(group(), p.get(), pub1, nullptr));
+
+  // Negate |pub2|. It should no longer compare as equal. This tests that we
+  // check both x and y coordinate.
+  bssl::UniquePtr<EC_POINT> q(EC_POINT_new(group()));
+  ASSERT_TRUE(q);
+  ASSERT_TRUE(EC_POINT_copy(q.get(), pub2));
+  ASSERT_TRUE(EC_POINT_invert(group(), q.get(), nullptr));
+  EXPECT_EQ(1, EC_POINT_cmp(group(), q.get(), pub2, nullptr));
+
+  // Return |p| to the original value. It should be equal to |pub1| again.
+  ASSERT_TRUE(EC_POINT_add(group(), p.get(), p.get(), q.get(), nullptr));
+  EXPECT_EQ(0, EC_POINT_cmp(group(), p.get(), pub1, nullptr));
+
+  // Infinity compares as equal to itself, but not other points.
+  bssl::UniquePtr<EC_POINT> inf1(EC_POINT_new(group())),
+      inf2(EC_POINT_new(group()));
+  ASSERT_TRUE(inf1);
+  ASSERT_TRUE(EC_POINT_set_to_infinity(group(), inf1.get()));
+  // |q| is currently -|pub2|.
+  ASSERT_TRUE(EC_POINT_add(group(), inf2.get(), pub2, q.get(), nullptr));
+  EXPECT_EQ(0, EC_POINT_cmp(group(), inf1.get(), inf2.get(), nullptr));
+  EXPECT_EQ(1, EC_POINT_cmp(group(), inf1.get(), p.get(), nullptr));
+}
+
 TEST_P(ECCurveTest, GenerateFIPS) {
   // Generate an EC_KEY.
   bssl::UniquePtr<EC_KEY> key(EC_KEY_new_by_curve_name(GetParam().nid));
@@ -704,18 +814,12 @@
                            nullptr, nullptr));
 
   // Serialize the point.
-  size_t serialized_len = EC_POINT_point2oct(
-      group(), point.get(), POINT_CONVERSION_UNCOMPRESSED, nullptr, 0, nullptr);
-  ASSERT_NE(0u, serialized_len);
-
-  std::vector<uint8_t> serialized(serialized_len);
-  ASSERT_EQ(
-      serialized_len,
-      EC_POINT_point2oct(group(), point.get(), POINT_CONVERSION_UNCOMPRESSED,
-                         serialized.data(), serialized_len, nullptr));
+  std::vector<uint8_t> serialized;
+  ASSERT_TRUE(EncodeECPoint(&serialized, group(), point.get(),
+                            POINT_CONVERSION_UNCOMPRESSED));
 
   // Create a serialized point that is not on the curve.
-  serialized[serialized_len - 1]++;
+  serialized[serialized.size() - 1]++;
 
   ASSERT_FALSE(EC_POINT_oct2point(group(), point.get(), serialized.data(),
                                   serialized.size(), nullptr));
@@ -1018,3 +1122,147 @@
     EXPECT_EQ(Bytes(pub, pub_len), Bytes(test.expected_pub));
   }
 }
+
+TEST(ECTest, HashToCurve) {
+  struct HashToCurveTest {
+    int (*hash_to_curve)(const EC_GROUP *group, EC_RAW_POINT *out,
+                         const uint8_t *dst, size_t dst_len, const uint8_t *msg,
+                         size_t msg_len);
+    int curve_nid;
+    const char *dst;
+    const char *msg;
+    const char *x_hex;
+    const char *y_hex;
+  };
+  static const HashToCurveTest kTests[] = {
+      // See draft-irtf-cfrg-hash-to-curve-07, appendix G.2.1.
+      {&ec_hash_to_curve_p384_xmd_sha512_sswu_draft07, NID_secp384r1,
+       "P384_XMD:SHA-512_SSWU_RO_TESTGEN", "",
+       "2fc0b9efdd63a8e43b4db88dc12f03c798f6fd91bccac0c9096185"
+       "4386e58fdc54fc2a01f0f358759054ce1f9b762025",
+       "949b936fabb72cdb02cd7980b86cb6a3adf286658e81301648851d"
+       "b8a49d9bec00ccb57698d559fc5960fa5030a8e54b"},
+      {&ec_hash_to_curve_p384_xmd_sha512_sswu_draft07, NID_secp384r1,
+       "P384_XMD:SHA-512_SSWU_RO_TESTGEN", "abc",
+       "4f3338035391e8ce8ce40c974136f0edc97f392ffd44a643338741"
+       "8ed1b8c2603487e1688ec151f048fbc6b2c138c92f",
+       "152b90aef6558be328a3168855fb1906452e7167b0f7c8a56ff9d4"
+       "fa87d6fb522cdf8e409db54418b2c764fd26260757"},
+      {&ec_hash_to_curve_p384_xmd_sha512_sswu_draft07, NID_secp384r1,
+       "P384_XMD:SHA-512_SSWU_RO_TESTGEN", "abcdef0123456789",
+       "e9e5d7ac397e123d060ad44301cbc8eb972f6e64ebcff29dcc9b9a"
+       "10357902aace2240c580fec85e5b427d98b4e80703",
+       "916cb8963521ad75105be43cc4148e5a5bbb4fcf107f1577e4f7fa"
+       "3ca58cd786aa76890c8e687d2353393bc16c78ec4d"},
+      {&ec_hash_to_curve_p384_xmd_sha512_sswu_draft07, NID_secp384r1,
+       "P384_XMD:SHA-512_SSWU_RO_TESTGEN",
+       "a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+       "41941db59a7b8b633bd5bfa462f1e29a9f18e5a341445d90fc6eb9"
+       "37f2913224287b9dfb64742851f760eb14ca115ff9",
+       "1510e764f1be968d661b7aaecb26a6d38c98e5205ca150f0ae426d"
+       "2c3983c68e3a9ffb283c6ae4891d891b5705500475"},
+  };
+
+  for (const auto &test : kTests) {
+    SCOPED_TRACE(test.dst);
+    SCOPED_TRACE(test.msg);
+
+    bssl::UniquePtr<EC_GROUP> group(EC_GROUP_new_by_curve_name(test.curve_nid));
+    ASSERT_TRUE(group);
+    bssl::UniquePtr<EC_POINT> p(EC_POINT_new(group.get()));
+    ASSERT_TRUE(p);
+    ASSERT_TRUE(test.hash_to_curve(
+        group.get(), &p->raw, reinterpret_cast<const uint8_t *>(test.dst),
+        strlen(test.dst), reinterpret_cast<const uint8_t *>(test.msg),
+        strlen(test.msg)));
+
+    std::vector<uint8_t> buf;
+    ASSERT_TRUE(EncodeECPoint(&buf, group.get(), p.get(),
+                              POINT_CONVERSION_UNCOMPRESSED));
+    size_t field_len = (buf.size() - 1) / 2;
+    EXPECT_EQ(test.x_hex,
+              EncodeHex(bssl::MakeConstSpan(buf).subspan(1, field_len)));
+    EXPECT_EQ(test.y_hex, EncodeHex(bssl::MakeConstSpan(buf).subspan(
+                              1 + field_len, field_len)));
+  }
+
+  // hash-to-curve functions should check for the wrong group.
+  bssl::UniquePtr<EC_GROUP> p224(EC_GROUP_new_by_curve_name(NID_secp224r1));
+  ASSERT_TRUE(p224);
+  EC_RAW_POINT p;
+  static const uint8_t kDST[] = {0, 1, 2, 3};
+  static const uint8_t kMessage[] = {4, 5, 6, 7};
+  EXPECT_FALSE(ec_hash_to_curve_p384_xmd_sha512_sswu_draft07(
+      p224.get(), &p, kDST, sizeof(kDST), kMessage, sizeof(kMessage)));
+}
+
+TEST(ECTest, HashToScalar) {
+  struct HashToScalarTest {
+    int (*hash_to_scalar)(const EC_GROUP *group, EC_SCALAR *out,
+                          const uint8_t *dst, size_t dst_len,
+                          const uint8_t *msg, size_t msg_len);
+    int curve_nid;
+    const char *dst;
+    const char *msg;
+    const char *result_hex;
+  };
+  static const HashToScalarTest kTests[] = {
+      {&ec_hash_to_scalar_p384_xmd_sha512_draft07, NID_secp384r1,
+       "P384_XMD:SHA-512_SCALAR_TEST", "",
+       "9687acc2de56c3cf94c0e05b6811a21aa480092254ec0532bdce63"
+       "140ecd340f09dc2d45d77e21fb0aa76f7707b8a676"},
+      {&ec_hash_to_scalar_p384_xmd_sha512_draft07, NID_secp384r1,
+       "P384_XMD:SHA-512_SCALAR_TEST", "abcdef0123456789",
+       "8f8076022a68233cbcecaceae68c2068f132724f001caa78619eff"
+       "1ffc58fa871db73fe9034fc9cf853c384ed34b5666"},
+      {&ec_hash_to_scalar_p384_xmd_sha512_draft07, NID_secp384r1,
+       "P384_XMD:SHA-512_SCALAR_TEST",
+       "a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+       "750f2fae7d2b2f41ac737d180c1d4363d85a1504798b4976d40921"
+       "1ddb3651c13a5b4daba9975cdfce18336791131915"},
+  };
+
+  for (const auto &test : kTests) {
+    SCOPED_TRACE(test.dst);
+    SCOPED_TRACE(test.msg);
+
+    bssl::UniquePtr<EC_GROUP> group(EC_GROUP_new_by_curve_name(test.curve_nid));
+    ASSERT_TRUE(group);
+    EC_SCALAR scalar;
+    ASSERT_TRUE(test.hash_to_scalar(
+        group.get(), &scalar, reinterpret_cast<const uint8_t *>(test.dst),
+        strlen(test.dst), reinterpret_cast<const uint8_t *>(test.msg),
+        strlen(test.msg)));
+    uint8_t buf[EC_MAX_BYTES];
+    size_t len;
+    ec_scalar_to_bytes(group.get(), buf, &len, &scalar);
+    EXPECT_EQ(test.result_hex, EncodeHex(bssl::MakeConstSpan(buf, len)));
+  }
+
+  // hash-to-scalar functions should check for the wrong group.
+  bssl::UniquePtr<EC_GROUP> p224(EC_GROUP_new_by_curve_name(NID_secp224r1));
+  ASSERT_TRUE(p224);
+  EC_SCALAR scalar;
+  static const uint8_t kDST[] = {0, 1, 2, 3};
+  static const uint8_t kMessage[] = {4, 5, 6, 7};
+  EXPECT_FALSE(ec_hash_to_scalar_p384_xmd_sha512_draft07(
+      p224.get(), &scalar, kDST, sizeof(kDST), kMessage, sizeof(kMessage)));
+}
diff --git a/src/crypto/fipsmodule/ec/felem.c b/src/crypto/fipsmodule/ec/felem.c
index 9be9f8c..e462514 100644
--- a/src/crypto/fipsmodule/ec/felem.c
+++ b/src/crypto/fipsmodule/ec/felem.c
@@ -14,6 +14,7 @@
 
 #include <openssl/ec.h>
 #include <openssl/err.h>
+#include <openssl/mem.h>
 
 #include <assert.h>
 
@@ -23,15 +24,34 @@
 
 
 int ec_bignum_to_felem(const EC_GROUP *group, EC_FELEM *out, const BIGNUM *in) {
-  if (BN_is_negative(in) || BN_cmp(in, &group->field) >= 0) {
+  uint8_t bytes[EC_MAX_BYTES];
+  size_t len = BN_num_bytes(&group->field);
+  assert(sizeof(bytes) >= len);
+  if (BN_is_negative(in) ||
+      BN_cmp(in, &group->field) >= 0 ||
+      !BN_bn2bin_padded(bytes, len, in)) {
     OPENSSL_PUT_ERROR(EC, EC_R_COORDINATES_OUT_OF_RANGE);
     return 0;
   }
-  return group->meth->bignum_to_felem(group, out, in);
+
+  return ec_felem_from_bytes(group, out, bytes, len);
 }
 
 int ec_felem_to_bignum(const EC_GROUP *group, BIGNUM *out, const EC_FELEM *in) {
-  return group->meth->felem_to_bignum(group, out, in);
+  uint8_t bytes[EC_MAX_BYTES];
+  size_t len;
+  ec_felem_to_bytes(group, bytes, &len, in);
+  return BN_bin2bn(bytes, len, out) != NULL;
+}
+
+void ec_felem_to_bytes(const EC_GROUP *group, uint8_t *out, size_t *out_len,
+                       const EC_FELEM *in) {
+  group->meth->felem_to_bytes(group, out, out_len, in);
+}
+
+int ec_felem_from_bytes(const EC_GROUP *group, EC_FELEM *out, const uint8_t *in,
+                        size_t len) {
+  return group->meth->felem_from_bytes(group, out, in, len);
 }
 
 void ec_felem_neg(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a) {
@@ -75,8 +95,6 @@
 
 int ec_felem_equal(const EC_GROUP *group, const EC_FELEM *a,
                    const EC_FELEM *b) {
-  // Note this function is variable-time. Constant-time operations should use
-  // |ec_felem_non_zero_mask|.
-  return OPENSSL_memcmp(a->words, b->words,
-                        group->field.width * sizeof(BN_ULONG)) == 0;
+  return CRYPTO_memcmp(a->words, b->words,
+                       group->field.width * sizeof(BN_ULONG)) == 0;
 }
diff --git a/src/crypto/fipsmodule/ec/internal.h b/src/crypto/fipsmodule/ec/internal.h
index 7934c3a..18aabb0 100644
--- a/src/crypto/fipsmodule/ec/internal.h
+++ b/src/crypto/fipsmodule/ec/internal.h
@@ -71,8 +71,8 @@
 #include <openssl/base.h>
 
 #include <openssl/bn.h>
+#include <openssl/ec.h>
 #include <openssl/ex_data.h>
-#include <openssl/thread.h>
 #include <openssl/type_check.h>
 
 #include "../bn/internal.h"
@@ -82,6 +82,9 @@
 #endif
 
 
+// EC internals.
+
+
 // Cap the size of all field elements and scalars, including custom curves, to
 // 66 bytes, large enough to fit secp521r1 and brainpoolP512r1, which appear to
 // be the largest fields anyone plausibly uses.
@@ -91,6 +94,9 @@
 OPENSSL_STATIC_ASSERT(EC_MAX_WORDS <= BN_SMALL_MAX_WORDS,
                       "bn_*_small functions not usable");
 
+
+// Scalars.
+
 // An EC_SCALAR is an integer fully reduced modulo the order. Only the first
 // |order->width| words are used. An |EC_SCALAR| is specific to an |EC_GROUP|
 // and must not be mixed between groups.
@@ -100,6 +106,88 @@
   BN_ULONG words[EC_MAX_WORDS];
 } EC_SCALAR;
 
+// ec_bignum_to_scalar converts |in| to an |EC_SCALAR| and writes it to
+// |*out|. It returns one on success and zero if |in| is out of range.
+OPENSSL_EXPORT int ec_bignum_to_scalar(const EC_GROUP *group, EC_SCALAR *out,
+                                       const BIGNUM *in);
+
+// ec_scalar_to_bytes serializes |in| as a big-endian bytestring to |out| and
+// sets |*out_len| to the number of bytes written. The number of bytes written
+// is |BN_num_bytes(&group->order)|, which is at most |EC_MAX_BYTES|.
+OPENSSL_EXPORT void ec_scalar_to_bytes(const EC_GROUP *group, uint8_t *out,
+                                       size_t *out_len, const EC_SCALAR *in);
+
+// ec_scalar_from_bytes deserializes |in| and stores the resulting scalar over
+// group |group| to |out|. It returns one on success and zero if |in| is
+// invalid.
+int ec_scalar_from_bytes(const EC_GROUP *group, EC_SCALAR *out,
+                         const uint8_t *in, size_t len);
+
+// ec_scalar_reduce sets |out| to |words|, reduced modulo the group order.
+// |words| must be less than order^2. |num| must be at most twice the width of
+// group order. This function treats |words| as secret.
+void ec_scalar_reduce(const EC_GROUP *group, EC_SCALAR *out,
+                      const BN_ULONG *words, size_t num);
+
+// ec_random_nonzero_scalar sets |out| to a uniformly selected random value from
+// 1 to |group->order| - 1. It returns one on success and zero on error.
+int ec_random_nonzero_scalar(const EC_GROUP *group, EC_SCALAR *out,
+                             const uint8_t additional_data[32]);
+
+// ec_scalar_equal_vartime returns one if |a| and |b| are equal and zero
+// otherwise. Both values are treated as public.
+int ec_scalar_equal_vartime(const EC_GROUP *group, const EC_SCALAR *a,
+                            const EC_SCALAR *b);
+
+// ec_scalar_is_zero returns one if |a| is zero and zero otherwise.
+int ec_scalar_is_zero(const EC_GROUP *group, const EC_SCALAR *a);
+
+// ec_scalar_add sets |r| to |a| + |b|.
+void ec_scalar_add(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a,
+                   const EC_SCALAR *b);
+
+// ec_scalar_sub sets |r| to |a| - |b|.
+void ec_scalar_sub(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a,
+                   const EC_SCALAR *b);
+
+// ec_scalar_neg sets |r| to -|a|.
+void ec_scalar_neg(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a);
+
+// ec_scalar_to_montgomery sets |r| to |a| in Montgomery form.
+void ec_scalar_to_montgomery(const EC_GROUP *group, EC_SCALAR *r,
+                             const EC_SCALAR *a);
+
+// ec_scalar_to_montgomery sets |r| to |a| converted from Montgomery form.
+void ec_scalar_from_montgomery(const EC_GROUP *group, EC_SCALAR *r,
+                               const EC_SCALAR *a);
+
+// ec_scalar_mul_montgomery sets |r| to |a| * |b| where inputs and outputs are
+// in Montgomery form.
+void ec_scalar_mul_montgomery(const EC_GROUP *group, EC_SCALAR *r,
+                              const EC_SCALAR *a, const EC_SCALAR *b);
+
+// ec_scalar_inv0_montgomery sets |r| to |a|^-1 where inputs and outputs are in
+// Montgomery form. If |a| is zero, |r| is set to zero.
+void ec_scalar_inv0_montgomery(const EC_GROUP *group, EC_SCALAR *r,
+                               const EC_SCALAR *a);
+
+// ec_scalar_to_montgomery_inv_vartime sets |r| to |a|^-1 R. That is, it takes
+// in |a| not in Montgomery form and computes the inverse in Montgomery form. It
+// returns one on success and zero if |a| has no inverse. This function assumes
+// |a| is public and may leak information about it via timing.
+//
+// Note this is not the same operation as |ec_scalar_inv0_montgomery|.
+int ec_scalar_to_montgomery_inv_vartime(const EC_GROUP *group, EC_SCALAR *r,
+                                        const EC_SCALAR *a);
+
+// ec_scalar_select, in constant time, sets |out| to |a| if |mask| is all ones
+// and |b| if |mask| is all zeros.
+void ec_scalar_select(const EC_GROUP *group, EC_SCALAR *out, BN_ULONG mask,
+                      const EC_SCALAR *a, const EC_SCALAR *b);
+
+
+// Field elements.
+
 // An EC_FELEM represents a field element. Only the first |field->width| words
 // are used. An |EC_FELEM| is specific to an |EC_GROUP| and must not be mixed
 // between groups. Additionally, the representation (whether or not elements are
@@ -110,15 +198,268 @@
   BN_ULONG words[EC_MAX_WORDS];
 } EC_FELEM;
 
-// An EC_RAW_POINT represents an elliptic curve point. Unlike |EC_POINT|, it is
-// a plain struct which can be stack-allocated and needs no cleanup. It is
-// specific to an |EC_GROUP| and must not be mixed between groups.
+// ec_bignum_to_felem converts |in| to an |EC_FELEM|. It returns one on success
+// and zero if |in| is out of range.
+int ec_bignum_to_felem(const EC_GROUP *group, EC_FELEM *out, const BIGNUM *in);
+
+// ec_felem_to_bignum converts |in| to a |BIGNUM|. It returns one on success and
+// zero on allocation failure.
+int ec_felem_to_bignum(const EC_GROUP *group, BIGNUM *out, const EC_FELEM *in);
+
+// ec_felem_to_bytes serializes |in| as a big-endian bytestring to |out| and
+// sets |*out_len| to the number of bytes written. The number of bytes written
+// is |BN_num_bytes(&group->order)|, which is at most |EC_MAX_BYTES|.
+void ec_felem_to_bytes(const EC_GROUP *group, uint8_t *out, size_t *out_len,
+                       const EC_FELEM *in);
+
+// ec_felem_from_bytes deserializes |in| and stores the resulting field element
+// to |out|. It returns one on success and zero if |in| is invalid.
+int ec_felem_from_bytes(const EC_GROUP *group, EC_FELEM *out, const uint8_t *in,
+                        size_t len);
+
+// ec_felem_neg sets |out| to -|a|.
+void ec_felem_neg(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a);
+
+// ec_felem_add sets |out| to |a| + |b|.
+void ec_felem_add(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a,
+                  const EC_FELEM *b);
+
+// ec_felem_add sets |out| to |a| - |b|.
+void ec_felem_sub(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a,
+                  const EC_FELEM *b);
+
+// ec_felem_non_zero_mask returns all ones if |a| is non-zero and all zeros
+// otherwise.
+BN_ULONG ec_felem_non_zero_mask(const EC_GROUP *group, const EC_FELEM *a);
+
+// ec_felem_select, in constant time, sets |out| to |a| if |mask| is all ones
+// and |b| if |mask| is all zeros.
+void ec_felem_select(const EC_GROUP *group, EC_FELEM *out, BN_ULONG mask,
+                     const EC_FELEM *a, const EC_FELEM *b);
+
+// ec_felem_equal returns one if |a| and |b| are equal and zero otherwise.
+int ec_felem_equal(const EC_GROUP *group, const EC_FELEM *a, const EC_FELEM *b);
+
+
+// Points.
+//
+// Points may represented in affine coordinates as |EC_AFFINE| or Jacobian
+// coordinates as |EC_RAW_POINT|. Affine coordinates directly represent a
+// point on the curve, but point addition over affine coordinates requires
+// costly field inversions, so arithmetic is done in Jacobian coordinates.
+// Converting from affine to Jacobian is cheap, while converting from Jacobian
+// to affine costs a field inversion. (Jacobian coordinates amortize the field
+// inversions needed in a sequence of point operations.)
+//
+// TODO(davidben): Rename |EC_RAW_POINT| to |EC_JACOBIAN|.
+
+// An EC_RAW_POINT represents an elliptic curve point in Jacobian coordinates.
+// Unlike |EC_POINT|, it is a plain struct which can be stack-allocated and
+// needs no cleanup. It is specific to an |EC_GROUP| and must not be mixed
+// between groups.
 typedef struct {
-  EC_FELEM X, Y, Z;
   // X, Y, and Z are Jacobian projective coordinates. They represent
   // (X/Z^2, Y/Z^3) if Z != 0 and the point at infinity otherwise.
+  EC_FELEM X, Y, Z;
 } EC_RAW_POINT;
 
+// An EC_AFFINE represents an elliptic curve point in affine coordinates.
+// coordinates. Note the point at infinity cannot be represented in affine
+// coordinates.
+typedef struct {
+  EC_FELEM X, Y;
+} EC_AFFINE;
+
+// ec_affine_to_jacobian converts |p| to Jacobian form and writes the result to
+// |*out|. This operation is very cheap and only costs a few copies.
+void ec_affine_to_jacobian(const EC_GROUP *group, EC_RAW_POINT *out,
+                           const EC_AFFINE *p);
+
+// ec_jacobian_to_affine converts |p| to affine form and writes the result to
+// |*out|. It returns one on success and zero if |p| was the point at infinity.
+// This operation performs a field inversion and should only be done once per
+// point.
+//
+// If only extracting the x-coordinate, use |ec_get_x_coordinate_*| which is
+// slightly faster.
+int ec_jacobian_to_affine(const EC_GROUP *group, EC_AFFINE *out,
+                          const EC_RAW_POINT *p);
+
+// ec_jacobian_to_affine_batch converts |num| points in |in| from Jacobian
+// coordinates to affine coordinates and writes the results to |out|. It returns
+// one on success and zero if any of the input points were infinity.
+//
+// This function is not implemented for all curves. Add implementations as
+// needed.
+int ec_jacobian_to_affine_batch(const EC_GROUP *group, EC_AFFINE *out,
+                                const EC_RAW_POINT *in, size_t num);
+
+// ec_point_set_affine_coordinates sets |out|'s to a point with affine
+// coordinates |x| and |y|. It returns one if the point is on the curve and
+// zero otherwise. If the point is not on the curve, the value of |out| is
+// undefined.
+int ec_point_set_affine_coordinates(const EC_GROUP *group, EC_AFFINE *out,
+                                    const EC_FELEM *x, const EC_FELEM *y);
+
+// ec_point_mul_scalar sets |r| to |p| * |scalar|. Both inputs are considered
+// secret.
+int ec_point_mul_scalar(const EC_GROUP *group, EC_RAW_POINT *r,
+                        const EC_RAW_POINT *p, const EC_SCALAR *scalar);
+
+// ec_point_mul_scalar_base sets |r| to generator * |scalar|. |scalar| is
+// treated as secret.
+int ec_point_mul_scalar_base(const EC_GROUP *group, EC_RAW_POINT *r,
+                             const EC_SCALAR *scalar);
+
+// ec_point_mul_scalar_batch sets |r| to |p0| * |scalar0| + |p1| * |scalar1| +
+// |p2| * |scalar2|. |p2| may be NULL to skip that term.
+//
+// The inputs are treated as secret, however, this function leaks information
+// about whether intermediate computations add a point to itself. Callers must
+// ensure that discrete logs between |p0|, |p1|, and |p2| are uniformly
+// distributed and independent of the scalars, which should be uniformly
+// selected and not under the attackers control. This ensures the doubling case
+// will occur with negligible probability.
+//
+// This function is not implemented for all curves. Add implementations as
+// needed.
+//
+// TODO(davidben): This function does not use base point tables. For now, it is
+// only used with the generic |EC_GFp_mont_method| implementation which has
+// none. If generalizing to tuned curves, this may be useful. However, we still
+// must double up to the least efficient input, so precomputed tables can only
+// save table setup and allow a wider window size.
+int ec_point_mul_scalar_batch(const EC_GROUP *group, EC_RAW_POINT *r,
+                              const EC_RAW_POINT *p0, const EC_SCALAR *scalar0,
+                              const EC_RAW_POINT *p1, const EC_SCALAR *scalar1,
+                              const EC_RAW_POINT *p2, const EC_SCALAR *scalar2);
+
+#define EC_MONT_PRECOMP_COMB_SIZE 5
+
+// An |EC_PRECOMP| stores precomputed information about a point, to optimize
+// repeated multiplications involving it. It is a union so different
+// |EC_METHOD|s can store different information in it.
+typedef union {
+  EC_AFFINE comb[(1 << EC_MONT_PRECOMP_COMB_SIZE) - 1];
+} EC_PRECOMP;
+
+// ec_init_precomp precomputes multiples of |p| and writes the result to |out|.
+// It returns one on success and zero on error. The resulting table may be used
+// with |ec_point_mul_scalar_precomp|. This function will fail if |p| is the
+// point at infinity.
+//
+// This function is not implemented for all curves. Add implementations as
+// needed.
+int ec_init_precomp(const EC_GROUP *group, EC_PRECOMP *out,
+                    const EC_RAW_POINT *p);
+
+// ec_point_mul_scalar_precomp sets |r| to |p0| * |scalar0| + |p1| * |scalar1| +
+// |p2| * |scalar2|. |p1| or |p2| may be NULL to skip the corresponding term.
+// The points are represented as |EC_PRECOMP| and must be initialized with
+// |ec_init_precomp|. This function runs faster than |ec_point_mul_scalar_batch|
+// but requires setup work per input point, so it is only appropriate for points
+// which are used frequently.
+//
+// The inputs are treated as secret, however, this function leaks information
+// about whether intermediate computations add a point to itself. Callers must
+// ensure that discrete logs between |p0|, |p1|, and |p2| are uniformly
+// distributed and independent of the scalars, which should be uniformly
+// selected and not under the attackers control. This ensures the doubling case
+// will occur with negligible probability.
+//
+// This function is not implemented for all curves. Add implementations as
+// needed.
+//
+// TODO(davidben): This function does not use base point tables. For now, it is
+// only used with the generic |EC_GFp_mont_method| implementation which has
+// none. If generalizing to tuned curves, we should add a parameter for the base
+// point and arrange for the generic implementation to have base point tables
+// available.
+int ec_point_mul_scalar_precomp(const EC_GROUP *group, EC_RAW_POINT *r,
+                                const EC_PRECOMP *p0, const EC_SCALAR *scalar0,
+                                const EC_PRECOMP *p1, const EC_SCALAR *scalar1,
+                                const EC_PRECOMP *p2, const EC_SCALAR *scalar2);
+
+// ec_point_mul_scalar_public sets |r| to
+// generator * |g_scalar| + |p| * |p_scalar|. It assumes that the inputs are
+// public so there is no concern about leaking their values through timing.
+OPENSSL_EXPORT int ec_point_mul_scalar_public(const EC_GROUP *group,
+                                              EC_RAW_POINT *r,
+                                              const EC_SCALAR *g_scalar,
+                                              const EC_RAW_POINT *p,
+                                              const EC_SCALAR *p_scalar);
+
+// ec_point_mul_scalar_public_batch sets |r| to the sum of generator *
+// |g_scalar| and |points[i]| * |scalars[i]| where |points| and |scalars| have
+// |num| elements. It assumes that the inputs are public so there is no concern
+// about leaking their values through timing. |g_scalar| may be NULL to skip
+// that term.
+//
+// This function is not implemented for all curves. Add implementations as
+// needed.
+int ec_point_mul_scalar_public_batch(const EC_GROUP *group, EC_RAW_POINT *r,
+                                     const EC_SCALAR *g_scalar,
+                                     const EC_RAW_POINT *points,
+                                     const EC_SCALAR *scalars, size_t num);
+
+// ec_point_select, in constant time, sets |out| to |a| if |mask| is all ones
+// and |b| if |mask| is all zeros.
+void ec_point_select(const EC_GROUP *group, EC_RAW_POINT *out, BN_ULONG mask,
+                     const EC_RAW_POINT *a, const EC_RAW_POINT *b);
+
+// ec_affine_select behaves like |ec_point_select| but acts on affine points.
+void ec_affine_select(const EC_GROUP *group, EC_AFFINE *out, BN_ULONG mask,
+                      const EC_AFFINE *a, const EC_AFFINE *b);
+
+// ec_precomp_select behaves like |ec_point_select| but acts on |EC_PRECOMP|.
+void ec_precomp_select(const EC_GROUP *group, EC_PRECOMP *out, BN_ULONG mask,
+                       const EC_PRECOMP *a, const EC_PRECOMP *b);
+
+// ec_cmp_x_coordinate compares the x (affine) coordinate of |p|, mod the group
+// order, with |r|. It returns one if the values match and zero if |p| is the
+// point at infinity of the values do not match.
+int ec_cmp_x_coordinate(const EC_GROUP *group, const EC_RAW_POINT *p,
+                        const EC_SCALAR *r);
+
+// ec_get_x_coordinate_as_scalar sets |*out| to |p|'s x-coordinate, modulo
+// |group->order|. It returns one on success and zero if |p| is the point at
+// infinity.
+int ec_get_x_coordinate_as_scalar(const EC_GROUP *group, EC_SCALAR *out,
+                                  const EC_RAW_POINT *p);
+
+// ec_get_x_coordinate_as_bytes writes |p|'s affine x-coordinate to |out|, which
+// must have at must |max_out| bytes. It sets |*out_len| to the number of bytes
+// written. The value is written big-endian and zero-padded to the size of the
+// field. This function returns one on success and zero on failure.
+int ec_get_x_coordinate_as_bytes(const EC_GROUP *group, uint8_t *out,
+                                 size_t *out_len, size_t max_out,
+                                 const EC_RAW_POINT *p);
+
+// ec_point_to_bytes behaves like |EC_POINT_point2oct| but takes an
+// |EC_AFFINE|.
+size_t ec_point_to_bytes(const EC_GROUP *group, const EC_AFFINE *point,
+                         point_conversion_form_t form, uint8_t *buf,
+                         size_t len);
+
+// ec_point_from_uncompressed parses |in| as a point in uncompressed form and
+// sets the result to |out|. It returns one on success and zero if the input was
+// invalid.
+int ec_point_from_uncompressed(const EC_GROUP *group, EC_AFFINE *out,
+                               const uint8_t *in, size_t len);
+
+// ec_set_to_safe_point sets |out| to an arbitrary point on |group|, either the
+// generator or the point at infinity. This is used to guard against callers of
+// external APIs not checking the return value.
+void ec_set_to_safe_point(const EC_GROUP *group, EC_RAW_POINT *out);
+
+// ec_affine_jacobian_equal returns one if |a| and |b| represent the same point
+// and zero otherwise. It treats both inputs as secret.
+int ec_affine_jacobian_equal(const EC_GROUP *group, const EC_AFFINE *a,
+                             const EC_RAW_POINT *b);
+
+
+// Implementation details.
+
 struct ec_method_st {
   int (*group_init)(EC_GROUP *);
   void (*group_finish)(EC_GROUP *);
@@ -128,12 +469,13 @@
   // point_get_affine_coordinates sets |*x| and |*y| to the affine coordinates
   // of |p|. Either |x| or |y| may be NULL to omit it. It returns one on success
   // and zero if |p| is the point at infinity.
-  //
-  // Note: unlike |EC_FELEM|s used as intermediate values internal to the
-  // |EC_METHOD|, |*x| and |*y| are not encoded in Montgomery form.
   int (*point_get_affine_coordinates)(const EC_GROUP *, const EC_RAW_POINT *p,
                                       EC_FELEM *x, EC_FELEM *y);
 
+  // jacobian_to_affine_batch implements |ec_jacobian_to_affine_batch|.
+  int (*jacobian_to_affine_batch)(const EC_GROUP *group, EC_AFFINE *out,
+                                  const EC_RAW_POINT *in, size_t num);
+
   // add sets |r| to |a| + |b|.
   void (*add)(const EC_GROUP *group, EC_RAW_POINT *r, const EC_RAW_POINT *a,
               const EC_RAW_POINT *b);
@@ -146,12 +488,32 @@
   // mul_base sets |r| to |scalar|*generator.
   void (*mul_base)(const EC_GROUP *group, EC_RAW_POINT *r,
                    const EC_SCALAR *scalar);
+  // mul_batch implements |ec_mul_scalar_batch|.
+  void (*mul_batch)(const EC_GROUP *group, EC_RAW_POINT *r,
+                    const EC_RAW_POINT *p0, const EC_SCALAR *scalar0,
+                    const EC_RAW_POINT *p1, const EC_SCALAR *scalar1,
+                    const EC_RAW_POINT *p2, const EC_SCALAR *scalar2);
   // mul_public sets |r| to |g_scalar|*generator + |p_scalar|*|p|. It assumes
   // that the inputs are public so there is no concern about leaking their
   // values through timing.
+  //
+  // This function may be omitted if |mul_public_batch| is provided.
   void (*mul_public)(const EC_GROUP *group, EC_RAW_POINT *r,
                      const EC_SCALAR *g_scalar, const EC_RAW_POINT *p,
                      const EC_SCALAR *p_scalar);
+  // mul_public_batch implements |ec_point_mul_scalar_public_batch|.
+  int (*mul_public_batch)(const EC_GROUP *group, EC_RAW_POINT *r,
+                          const EC_SCALAR *g_scalar, const EC_RAW_POINT *points,
+                          const EC_SCALAR *scalars, size_t num);
+
+  // init_precomp implements |ec_init_precomp|.
+  int (*init_precomp)(const EC_GROUP *group, EC_PRECOMP *out,
+                      const EC_RAW_POINT *p);
+  // mul_precomp implements |ec_point_mul_scalar_precomp|.
+  void (*mul_precomp)(const EC_GROUP *group, EC_RAW_POINT *r,
+                      const EC_PRECOMP *p0, const EC_SCALAR *scalar0,
+                      const EC_PRECOMP *p1, const EC_SCALAR *scalar1,
+                      const EC_PRECOMP *p2, const EC_SCALAR *scalar2);
 
   // felem_mul and felem_sqr implement multiplication and squaring,
   // respectively, so that the generic |EC_POINT_add| and |EC_POINT_dbl|
@@ -168,21 +530,36 @@
                     const EC_FELEM *b);
   void (*felem_sqr)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a);
 
-  int (*bignum_to_felem)(const EC_GROUP *group, EC_FELEM *out,
-                         const BIGNUM *in);
-  int (*felem_to_bignum)(const EC_GROUP *group, BIGNUM *out,
+  void (*felem_to_bytes)(const EC_GROUP *group, uint8_t *out, size_t *out_len,
                          const EC_FELEM *in);
+  int (*felem_from_bytes)(const EC_GROUP *group, EC_FELEM *out,
+                          const uint8_t *in, size_t len);
 
-  // scalar_inv_montgomery sets |out| to |in|^-1, where both input and output
-  // are in Montgomery form.
-  void (*scalar_inv_montgomery)(const EC_GROUP *group, EC_SCALAR *out,
-                                const EC_SCALAR *in);
+  // felem_reduce sets |out| to |words|, reduced modulo the field size, p.
+  // |words| must be less than p^2. |num| must be at most twice the width of p.
+  // This function treats |words| as secret.
+  //
+  // This function is only used in hash-to-curve and may be omitted in curves
+  // that do not support it.
+  void (*felem_reduce)(const EC_GROUP *group, EC_FELEM *out,
+                       const BN_ULONG *words, size_t num);
 
-  // scalar_inv_montgomery_vartime performs the same computation as
-  // |scalar_inv_montgomery|. It further assumes that the inputs are public so
-  // there is no concern about leaking their values through timing.
-  int (*scalar_inv_montgomery_vartime)(const EC_GROUP *group, EC_SCALAR *out,
-                                       const EC_SCALAR *in);
+  // felem_exp sets |out| to |a|^|exp|. It treats |a| is secret but |exp| as
+  // public.
+  //
+  // This function is used in hash-to-curve and may be NULL in curves not used
+  // with hash-to-curve.
+  void (*felem_exp)(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a,
+                    const BN_ULONG *exp, size_t num_exp);
+
+  // scalar_inv0_montgomery implements |ec_scalar_inv0_montgomery|.
+  void (*scalar_inv0_montgomery)(const EC_GROUP *group, EC_SCALAR *out,
+                                 const EC_SCALAR *in);
+
+  // scalar_to_montgomery_inv_vartime implements
+  // |ec_scalar_to_montgomery_inv_vartime|.
+  int (*scalar_to_montgomery_inv_vartime)(const EC_GROUP *group, EC_SCALAR *out,
+                                          const EC_SCALAR *in);
 
   // cmp_x_coordinate compares the x (affine) coordinate of |p|, mod the group
   // order, with |r|. It returns one if the values match and zero if |p| is the
@@ -197,7 +574,8 @@
   const EC_METHOD *meth;
 
   // Unlike all other |EC_POINT|s, |generator| does not own |generator->group|
-  // to avoid a reference cycle.
+  // to avoid a reference cycle. Additionally, Z is guaranteed to be one, so X
+  // and Y are suitable for use as an |EC_AFFINE|.
   EC_POINT *generator;
   BIGNUM order;
 
@@ -247,133 +625,20 @@
 
 EC_GROUP *ec_group_new(const EC_METHOD *meth);
 
-// ec_bignum_to_felem converts |in| to an |EC_FELEM|. It returns one on success
-// and zero if |in| is out of range.
-int ec_bignum_to_felem(const EC_GROUP *group, EC_FELEM *out, const BIGNUM *in);
-
-// ec_felem_to_bignum converts |in| to a |BIGNUM|. It returns one on success and
-// zero on allocation failure.
-int ec_felem_to_bignum(const EC_GROUP *group, BIGNUM *out, const EC_FELEM *in);
-
-// ec_felem_neg sets |out| to -|a|.
-void ec_felem_neg(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a);
-
-// ec_felem_add sets |out| to |a| + |b|.
-void ec_felem_add(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a,
-                  const EC_FELEM *b);
-
-// ec_felem_add sets |out| to |a| - |b|.
-void ec_felem_sub(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a,
-                  const EC_FELEM *b);
-
-// ec_felem_non_zero_mask returns all ones if |a| is non-zero and all zeros
-// otherwise.
-BN_ULONG ec_felem_non_zero_mask(const EC_GROUP *group, const EC_FELEM *a);
-
-// ec_felem_select, in constant time, sets |out| to |a| if |mask| is all ones
-// and |b| if |mask| is all zeros.
-void ec_felem_select(const EC_GROUP *group, EC_FELEM *out, BN_ULONG mask,
-                     const EC_FELEM *a, const EC_FELEM *b);
-
-// ec_felem_equal returns one if |a| and |b| are equal and zero otherwise. It
-// treats |a| and |b| as public and does *not* run in constant time.
-int ec_felem_equal(const EC_GROUP *group, const EC_FELEM *a, const EC_FELEM *b);
-
-// ec_bignum_to_scalar converts |in| to an |EC_SCALAR| and writes it to
-// |*out|. It returns one on success and zero if |in| is out of range.
-OPENSSL_EXPORT int ec_bignum_to_scalar(const EC_GROUP *group, EC_SCALAR *out,
-                                       const BIGNUM *in);
-
-// ec_random_nonzero_scalar sets |out| to a uniformly selected random value from
-// 1 to |group->order| - 1. It returns one on success and zero on error.
-int ec_random_nonzero_scalar(const EC_GROUP *group, EC_SCALAR *out,
-                             const uint8_t additional_data[32]);
-
-// ec_scalar_equal_vartime returns one if |a| and |b| are equal and zero
-// otherwise. Both values are treated as public.
-int ec_scalar_equal_vartime(const EC_GROUP *group, const EC_SCALAR *a,
-                            const EC_SCALAR *b);
-
-// ec_scalar_is_zero returns one if |a| is zero and zero otherwise.
-int ec_scalar_is_zero(const EC_GROUP *group, const EC_SCALAR *a);
-
-// ec_scalar_add sets |r| to |a| + |b|.
-void ec_scalar_add(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a,
-                   const EC_SCALAR *b);
-
-// ec_scalar_to_montgomery sets |r| to |a| in Montgomery form.
-void ec_scalar_to_montgomery(const EC_GROUP *group, EC_SCALAR *r,
-                             const EC_SCALAR *a);
-
-// ec_scalar_to_montgomery sets |r| to |a| converted from Montgomery form.
-void ec_scalar_from_montgomery(const EC_GROUP *group, EC_SCALAR *r,
-                               const EC_SCALAR *a);
-
-// ec_scalar_mul_montgomery sets |r| to |a| * |b| where inputs and outputs are
-// in Montgomery form.
-void ec_scalar_mul_montgomery(const EC_GROUP *group, EC_SCALAR *r,
-                              const EC_SCALAR *a, const EC_SCALAR *b);
-
-// ec_scalar_mul_montgomery sets |r| to |a|^-1 where inputs and outputs are in
-// Montgomery form.
-void ec_scalar_inv_montgomery(const EC_GROUP *group, EC_SCALAR *r,
-                              const EC_SCALAR *a);
-
-// ec_scalar_inv_montgomery_vartime performs the same actions as
-// |ec_scalar_inv_montgomery|, but in variable time.
-int ec_scalar_inv_montgomery_vartime(const EC_GROUP *group, EC_SCALAR *r,
-                                     const EC_SCALAR *a);
-
-// ec_point_mul_scalar sets |r| to |p| * |scalar|. Both inputs are considered
-// secret.
-int ec_point_mul_scalar(const EC_GROUP *group, EC_RAW_POINT *r,
-                        const EC_RAW_POINT *p, const EC_SCALAR *scalar);
-
-// ec_point_mul_scalar_base sets |r| to generator * |scalar|. |scalar| is
-// treated as secret.
-int ec_point_mul_scalar_base(const EC_GROUP *group, EC_RAW_POINT *r,
-                             const EC_SCALAR *scalar);
-
-// ec_point_mul_scalar_public performs the same computation as
-// ec_point_mul_scalar.  It further assumes that the inputs are public so
-// there is no concern about leaking their values through timing.
-OPENSSL_EXPORT int ec_point_mul_scalar_public(const EC_GROUP *group,
-                                              EC_RAW_POINT *r,
-                                              const EC_SCALAR *g_scalar,
-                                              const EC_RAW_POINT *p,
-                                              const EC_SCALAR *p_scalar);
-
-// ec_cmp_x_coordinate compares the x (affine) coordinate of |p|, mod the group
-// order, with |r|. It returns one if the values match and zero if |p| is the
-// point at infinity of the values do not match.
-int ec_cmp_x_coordinate(const EC_GROUP *group, const EC_RAW_POINT *p,
-                        const EC_SCALAR *r);
-
-// ec_get_x_coordinate_as_scalar sets |*out| to |p|'s x-coordinate, modulo
-// |group->order|. It returns one on success and zero if |p| is the point at
-// infinity.
-int ec_get_x_coordinate_as_scalar(const EC_GROUP *group, EC_SCALAR *out,
-                                  const EC_RAW_POINT *p);
-
-// ec_point_get_affine_coordinate_bytes writes |p|'s affine coordinates to
-// |out_x| and |out_y|, each of which must have at must |max_out| bytes. It sets
-// |*out_len| to the number of bytes written in each buffer. Coordinates are
-// written big-endian and zero-padded to the size of the field.
-//
-// Either of |out_x| or |out_y| may be NULL to omit that coordinate. This
-// function returns one on success and zero on failure.
-int ec_point_get_affine_coordinate_bytes(const EC_GROUP *group, uint8_t *out_x,
-                                         uint8_t *out_y, size_t *out_len,
-                                         size_t max_out, const EC_RAW_POINT *p);
-
-// ec_field_element_to_scalar reduces |r| modulo |group->order|. |r| must
-// previously have been reduced modulo |group->field|.
-int ec_field_element_to_scalar(const EC_GROUP *group, BIGNUM *r);
-
 void ec_GFp_mont_mul(const EC_GROUP *group, EC_RAW_POINT *r,
                      const EC_RAW_POINT *p, const EC_SCALAR *scalar);
 void ec_GFp_mont_mul_base(const EC_GROUP *group, EC_RAW_POINT *r,
                           const EC_SCALAR *scalar);
+void ec_GFp_mont_mul_batch(const EC_GROUP *group, EC_RAW_POINT *r,
+                           const EC_RAW_POINT *p0, const EC_SCALAR *scalar0,
+                           const EC_RAW_POINT *p1, const EC_SCALAR *scalar1,
+                           const EC_RAW_POINT *p2, const EC_SCALAR *scalar2);
+int ec_GFp_mont_init_precomp(const EC_GROUP *group, EC_PRECOMP *out,
+                             const EC_RAW_POINT *p);
+void ec_GFp_mont_mul_precomp(const EC_GROUP *group, EC_RAW_POINT *r,
+                             const EC_PRECOMP *p0, const EC_SCALAR *scalar0,
+                             const EC_PRECOMP *p1, const EC_SCALAR *scalar1,
+                             const EC_PRECOMP *p2, const EC_SCALAR *scalar2);
 
 // ec_compute_wNAF writes the modified width-(w+1) Non-Adjacent Form (wNAF) of
 // |scalar| to |out|. |out| must have room for |bits| + 1 elements, each of
@@ -386,9 +651,10 @@
 void ec_compute_wNAF(const EC_GROUP *group, int8_t *out,
                      const EC_SCALAR *scalar, size_t bits, int w);
 
-void ec_GFp_mont_mul_public(const EC_GROUP *group, EC_RAW_POINT *r,
-                            const EC_SCALAR *g_scalar, const EC_RAW_POINT *p,
-                            const EC_SCALAR *p_scalar);
+int ec_GFp_mont_mul_public_batch(const EC_GROUP *group, EC_RAW_POINT *r,
+                                 const EC_SCALAR *g_scalar,
+                                 const EC_RAW_POINT *points,
+                                 const EC_SCALAR *scalars, size_t num);
 
 // method functions in simple.c
 int ec_GFp_simple_group_init(EC_GROUP *);
@@ -400,26 +666,29 @@
 void ec_GFp_simple_point_init(EC_RAW_POINT *);
 void ec_GFp_simple_point_copy(EC_RAW_POINT *, const EC_RAW_POINT *);
 void ec_GFp_simple_point_set_to_infinity(const EC_GROUP *, EC_RAW_POINT *);
-int ec_GFp_simple_point_set_affine_coordinates(const EC_GROUP *, EC_RAW_POINT *,
-                                               const BIGNUM *x,
-                                               const BIGNUM *y);
 void ec_GFp_mont_add(const EC_GROUP *, EC_RAW_POINT *r, const EC_RAW_POINT *a,
                      const EC_RAW_POINT *b);
 void ec_GFp_mont_dbl(const EC_GROUP *, EC_RAW_POINT *r, const EC_RAW_POINT *a);
 void ec_GFp_simple_invert(const EC_GROUP *, EC_RAW_POINT *);
 int ec_GFp_simple_is_at_infinity(const EC_GROUP *, const EC_RAW_POINT *);
 int ec_GFp_simple_is_on_curve(const EC_GROUP *, const EC_RAW_POINT *);
-int ec_GFp_simple_cmp(const EC_GROUP *, const EC_RAW_POINT *a,
-                      const EC_RAW_POINT *b);
-void ec_simple_scalar_inv_montgomery(const EC_GROUP *group, EC_SCALAR *r,
-                                     const EC_SCALAR *a);
+int ec_GFp_simple_points_equal(const EC_GROUP *, const EC_RAW_POINT *a,
+                               const EC_RAW_POINT *b);
+void ec_simple_scalar_inv0_montgomery(const EC_GROUP *group, EC_SCALAR *r,
+                                      const EC_SCALAR *a);
 
-int ec_GFp_simple_mont_inv_mod_ord_vartime(const EC_GROUP *group, EC_SCALAR *r,
-                                           const EC_SCALAR *a);
+int ec_simple_scalar_to_montgomery_inv_vartime(const EC_GROUP *group,
+                                               EC_SCALAR *r,
+                                               const EC_SCALAR *a);
 
 int ec_GFp_simple_cmp_x_coordinate(const EC_GROUP *group, const EC_RAW_POINT *p,
                                    const EC_SCALAR *r);
 
+void ec_GFp_simple_felem_to_bytes(const EC_GROUP *group, uint8_t *out,
+                                  size_t *out_len, const EC_FELEM *in);
+int ec_GFp_simple_felem_from_bytes(const EC_GROUP *group, EC_FELEM *out,
+                                   const uint8_t *in, size_t len);
+
 // method functions in montgomery.c
 int ec_GFp_mont_group_init(EC_GROUP *);
 int ec_GFp_mont_group_set_curve(EC_GROUP *, const BIGNUM *p, const BIGNUM *a,
@@ -429,12 +698,13 @@
                            const EC_FELEM *b);
 void ec_GFp_mont_felem_sqr(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a);
 
-int ec_GFp_mont_bignum_to_felem(const EC_GROUP *group, EC_FELEM *out,
-                                const BIGNUM *in);
-int ec_GFp_mont_felem_to_bignum(const EC_GROUP *group, BIGNUM *out,
-                                const EC_FELEM *in);
+void ec_GFp_mont_felem_to_bytes(const EC_GROUP *group, uint8_t *out,
+                                size_t *out_len, const EC_FELEM *in);
+int ec_GFp_mont_felem_from_bytes(const EC_GROUP *group, EC_FELEM *out,
+                                 const uint8_t *in, size_t len);
 
-void ec_GFp_nistp_recode_scalar_bits(uint8_t *sign, uint8_t *digit, uint8_t in);
+void ec_GFp_nistp_recode_scalar_bits(crypto_word_t *sign, crypto_word_t *digit,
+                                     crypto_word_t in);
 
 const EC_METHOD *EC_GFp_nistp224_method(void);
 const EC_METHOD *EC_GFp_nistp256_method(void);
@@ -453,6 +723,9 @@
 struct ec_key_st {
   EC_GROUP *group;
 
+  // Ideally |pub_key| would be an |EC_AFFINE| so serializing it does not pay an
+  // inversion each time, but the |EC_KEY_get0_public_key| API implies public
+  // keys are stored in an |EC_POINT|-compatible form.
   EC_POINT *pub_key;
   EC_WRAPPED_SCALAR *priv_key;
 
diff --git a/src/crypto/fipsmodule/ec/make_p256-x86_64-table.go b/src/crypto/fipsmodule/ec/make_p256-x86_64-table.go
deleted file mode 100644
index 8a9da2c..0000000
--- a/src/crypto/fipsmodule/ec/make_p256-x86_64-table.go
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Copyright (c) 2018, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-package main
-
-import (
-	"crypto/elliptic"
-	"fmt"
-	"math/big"
-	"os"
-)
-
-const fileHeader = `/* Copyright (c) 2015, Intel Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-// This is the precomputed constant time access table for the code in
-// p256-x86_64.c, for the default generator. The table consists of 37
-// subtables, each subtable contains 64 affine points. The affine points are
-// encoded as eight uint64's, four for the x coordinate and four for the y.
-// Both values are in little-endian order. There are 37 tables because a
-// signed, 6-bit wNAF form of the scalar is used and ceil(256/(6 + 1)) = 37.
-// Within each table there are 64 values because the 6-bit wNAF value can take
-// 64 values, ignoring the sign bit, which is implemented by performing a
-// negation of the affine point when required. We would like to align it to 2MB
-// in order to increase the chances of using a large page but that appears to
-// lead to invalid ELF files being produced.
-
-// This file is generated by make_p256-x86_64-table.go.
-
-static const alignas(4096) PRECOMP256_ROW ecp_nistz256_precomputed[37] = {
-`
-
-func main() {
-	os.Stdout.WriteString(fileHeader)
-
-	scalar, tmp := new(big.Int), new(big.Int)
-	p256 := elliptic.P256()
-	p := p256.Params().P
-
-	// The wNAF windows are 7 bits wide, so advance across the 256-bit scalar
-	// space in 7-bit increments.
-	for shift := uint(0); shift < 256; shift += 7 {
-		// For each window, encode 64 multiples of the base point.
-		for multiple := 1; multiple <= 64; multiple++ {
-			scalar.SetInt64(int64(multiple))
-			scalar.Lsh(scalar, shift)
-
-			x, y := p256.ScalarBaseMult(scalar.Bytes())
-
-			toMontgomery(x, p)
-			toMontgomery(y, p)
-
-			if multiple == 1 {
-				os.Stdout.WriteString("        {{")
-			} else {
-				os.Stdout.WriteString("         {")
-			}
-			printNum(x, tmp)
-
-			os.Stdout.WriteString(",\n          ")
-			printNum(y, tmp)
-
-			if multiple == 64 {
-				os.Stdout.WriteString("}}")
-			} else {
-				os.Stdout.WriteString("},\n")
-			}
-		}
-
-		if shift+7 < 256 {
-			os.Stdout.WriteString(",\n")
-		} else {
-			os.Stdout.WriteString("};\n")
-		}
-	}
-}
-
-var mask, R *big.Int
-
-func init() {
-	mask = new(big.Int).SetUint64(0xffffffffffffffff)
-	R = new(big.Int).SetInt64(1)
-	R.Lsh(R, 256)
-}
-
-func printNum(n, tmp *big.Int) {
-	fmt.Printf("{")
-	for i := 0; i < 4; i++ {
-		tmp.And(n, mask)
-		limb := tmp.Uint64()
-		fmt.Printf("TOBN(0x%08x, 0x%08x)", uint32(limb>>32), uint32(limb))
-		n.Rsh(n, 64)
-
-		switch i {
-		case 0, 2:
-			os.Stdout.WriteString(", ")
-		case 1:
-			os.Stdout.WriteString(",\n           ")
-		}
-	}
-	fmt.Printf("}")
-}
-
-// toMontgomery sets n to be n×R mod p
-func toMontgomery(n, p *big.Int) {
-	n.Mul(n, R)
-	n.Mod(n, p)
-}
diff --git a/src/crypto/fipsmodule/ec/make_tables.go b/src/crypto/fipsmodule/ec/make_tables.go
new file mode 100644
index 0000000..34e8c23
--- /dev/null
+++ b/src/crypto/fipsmodule/ec/make_tables.go
@@ -0,0 +1,406 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+package main
+
+import (
+	"crypto/elliptic"
+	"fmt"
+	"io"
+	"math/big"
+	"os"
+)
+
+func main() {
+	if err := writeP256X86_64Table("p256-x86_64-table.h"); err != nil {
+		fmt.Fprintf(os.Stderr, "Error writing p256-x86_64-table.h: %s\n", err)
+		os.Exit(1)
+	}
+
+	if err := writeP256Table("p256_table.h"); err != nil {
+		fmt.Fprintf(os.Stderr, "Error writing p256_table.h: %s\n", err)
+		os.Exit(1)
+	}
+}
+
+func writeP256X86_64Table(path string) error {
+	curve := elliptic.P256()
+	tables := make([][][2]*big.Int, 0, 37)
+	for shift := 0; shift < 256; shift += 7 {
+		row := makeMultiples(curve, 64, shift)
+		tables = append(tables, row)
+	}
+
+	f, err := os.Create(path)
+	if err != nil {
+		return err
+	}
+	defer f.Close()
+
+	const fileHeader = `/*
+ * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2015, Intel Inc.
+ *
+ * Licensed under the OpenSSL license (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+// This is the precomputed constant time access table for the code in
+// p256-x86_64.c, for the default generator. The table consists of 37
+// subtables, each subtable contains 64 affine points. The affine points are
+// encoded as eight uint64's, four for the x coordinate and four for the y.
+// Both values are in little-endian order. There are 37 tables because a
+// signed, 6-bit wNAF form of the scalar is used and ceil(256/(6 + 1)) = 37.
+// Within each table there are 64 values because the 6-bit wNAF value can take
+// 64 values, ignoring the sign bit, which is implemented by performing a
+// negation of the affine point when required. We would like to align it to 2MB
+// in order to increase the chances of using a large page but that appears to
+// lead to invalid ELF files being produced.
+
+// This file is generated by make_tables.go.
+
+static const alignas(4096) PRECOMP256_ROW ecp_nistz256_precomputed[37] = `
+	if _, err := f.WriteString(fileHeader); err != nil {
+		return err
+	}
+	if err := writeTables(f, curve, tables, true, 4, writeBNMont); err != nil {
+		return err
+	}
+	if _, err := f.WriteString(";\n"); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func writeP256Table(path string) error {
+	curve := elliptic.P256()
+	tables := [][][2]*big.Int{
+		makeComb(curve, 64, 4, 0),
+		makeComb(curve, 64, 4, 32),
+	}
+
+	f, err := os.Create(path)
+	if err != nil {
+		return err
+	}
+	defer f.Close()
+
+	const fileHeader = `/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+// This file is generated by make_tables.go.
+
+// Base point pre computation
+// --------------------------
+//
+// Two different sorts of precomputed tables are used in the following code.
+// Each contain various points on the curve, where each point is three field
+// elements (x, y, z).
+//
+// For the base point table, z is usually 1 (0 for the point at infinity).
+// This table has 2 * 16 elements, starting with the following:
+// index | bits    | point
+// ------+---------+------------------------------
+//     0 | 0 0 0 0 | 0G
+//     1 | 0 0 0 1 | 1G
+//     2 | 0 0 1 0 | 2^64G
+//     3 | 0 0 1 1 | (2^64 + 1)G
+//     4 | 0 1 0 0 | 2^128G
+//     5 | 0 1 0 1 | (2^128 + 1)G
+//     6 | 0 1 1 0 | (2^128 + 2^64)G
+//     7 | 0 1 1 1 | (2^128 + 2^64 + 1)G
+//     8 | 1 0 0 0 | 2^192G
+//     9 | 1 0 0 1 | (2^192 + 1)G
+//    10 | 1 0 1 0 | (2^192 + 2^64)G
+//    11 | 1 0 1 1 | (2^192 + 2^64 + 1)G
+//    12 | 1 1 0 0 | (2^192 + 2^128)G
+//    13 | 1 1 0 1 | (2^192 + 2^128 + 1)G
+//    14 | 1 1 1 0 | (2^192 + 2^128 + 2^64)G
+//    15 | 1 1 1 1 | (2^192 + 2^128 + 2^64 + 1)G
+// followed by a copy of this with each element multiplied by 2^32.
+//
+// The reason for this is so that we can clock bits into four different
+// locations when doing simple scalar multiplies against the base point,
+// and then another four locations using the second 16 elements.
+//
+// Tables for other points have table[i] = iG for i in 0 .. 16.
+
+// fiat_p256_g_pre_comp is the table of precomputed base points
+#if defined(BORINGSSL_NISTP256_64BIT)
+static const fiat_p256_felem fiat_p256_g_pre_comp[2][15][2] = `
+	if _, err := f.WriteString(fileHeader); err != nil {
+		return err
+	}
+	if err := writeTables(f, curve, tables, true, 4, writeU64Mont); err != nil {
+		return err
+	}
+	if _, err := f.WriteString(";\n#else\nstatic const fiat_p256_felem fiat_p256_g_pre_comp[2][15][2] = "); err != nil {
+		return err
+	}
+	if err := writeTables(f, curve, tables, true, 4, writeU32Mont); err != nil {
+		return err
+	}
+	if _, err := f.WriteString(";\n#endif\n"); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// makeMultiples returns a table of the first n multiples of 2^shift * G,
+// starting from 1 * 2^shift * G.
+func makeMultiples(curve elliptic.Curve, n, shift int) [][2]*big.Int {
+	ret := make([][2]*big.Int, n)
+	x, y := curve.Params().Gx, curve.Params().Gy
+	for j := 0; j < shift; j++ {
+		x, y = curve.Double(x, y)
+	}
+	ret[1-1] = [2]*big.Int{x, y}
+	for i := 2; i <= n; i++ {
+		if i&1 == 0 {
+			x, y := curve.Double(ret[i/2-1][0], ret[i/2-1][1])
+			ret[i-1] = [2]*big.Int{x, y}
+		} else {
+			x, y := curve.Add(ret[i-1-1][0], ret[i-1-1][1], ret[1-1][0], ret[1-1][1])
+			ret[i-1] = [2]*big.Int{x, y}
+		}
+	}
+	return ret
+}
+
+// makeComb returns a table of 2^size - 1 points. The i-1th entry is k*G.
+// If i is represented in binary by b0*2^0 + b1*2^1 + ... bn*2^n, k is
+// b0*2^(shift + 0*stride) + b1*2^(shift + 1*stride) + ... + bn*2^(shift + n*stride).
+// The entry for i = 0 is omitted because it is always the point at infinity.
+func makeComb(curve elliptic.Curve, stride, size, shift int) [][2]*big.Int {
+	ret := make([][2]*big.Int, 1<<size-1)
+	x, y := curve.Params().Gx, curve.Params().Gy
+	for j := 0; j < shift; j++ {
+		x, y = curve.Double(x, y)
+	}
+	ret[1<<0-1] = [2]*big.Int{x, y}
+	for i := 1; i < size; i++ {
+		// Entry 2^i is entry 2^(i-1) doubled stride times.
+		x, y = ret[1<<(i-1)-1][0], ret[1<<(i-1)-1][1]
+		for j := 0; j < stride; j++ {
+			x, y = curve.Double(x, y)
+		}
+		ret[1<<i-1] = [2]*big.Int{x, y}
+		// The remaining entries with MSB 2^i are computed by adding entry 2^i
+		// to the corresponding previous entry.
+		for j := 1; j < 1<<i; j++ {
+			x, y = curve.Add(ret[1<<i-1][0], ret[1<<i-1][1], ret[j-1][0], ret[j-1][1])
+			ret[1<<i+j-1] = [2]*big.Int{x, y}
+		}
+	}
+	return ret
+}
+
+// toMontgomery sets n to be n×R mod p, where R is the Montgomery factor.
+func toMontgomery(curve elliptic.Curve, n *big.Int) *big.Int {
+	params := curve.Params()
+	// R is the bit width of p, rounded up to word size.
+	rounded64 := 64 * ((params.BitSize + 63) / 64)
+	rounded32 := 32 * ((params.BitSize + 31) / 32)
+	if rounded64 != rounded32 {
+		panic(fmt.Sprintf("Montgomery form for %s is inconsistent between 32-bit and 64-bit", params.Name))
+	}
+	R := new(big.Int).SetInt64(1)
+	R.Lsh(R, uint(rounded64))
+
+	ret := new(big.Int).Mul(n, R)
+	ret.Mod(ret, params.P)
+	return ret
+}
+
+func bigIntToU64s(curve elliptic.Curve, n *big.Int) []uint64 {
+	words := (curve.Params().BitSize + 63) / 64
+	ret := make([]uint64, words)
+	bytes := n.Bytes()
+	for i, b := range bytes {
+		i = len(bytes) - i - 1
+		ret[i/8] |= uint64(b) << (8 * (i % 8))
+	}
+	return ret
+}
+
+func bigIntToU32s(curve elliptic.Curve, n *big.Int) []uint64 {
+	words := (curve.Params().BitSize + 31) / 32
+	ret := make([]uint64, words)
+	bytes := n.Bytes()
+	for i, b := range bytes {
+		i = len(bytes) - i - 1
+		ret[i/4] |= uint64(b) << (8 * (i % 4))
+	}
+	return ret
+}
+
+func writeIndent(w io.Writer, indent int) error {
+	for i := 0; i < indent; i++ {
+		if _, err := io.WriteString(w, " "); err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
+func writeWords(w io.Writer, words []uint64, wrap, indent int, format func(uint64) string) error {
+	if _, err := io.WriteString(w, "{"); err != nil {
+		return err
+	}
+	for i, word := range words {
+		if i > 0 {
+			if i%wrap == 0 {
+				if _, err := io.WriteString(w, ",\n"); err != nil {
+					return err
+				}
+				if err := writeIndent(w, indent+1); err != nil {
+					return err
+				}
+			} else {
+				if _, err := io.WriteString(w, ", "); err != nil {
+					return err
+				}
+			}
+		}
+		if _, err := io.WriteString(w, format(word)); err != nil {
+			return err
+		}
+	}
+	if _, err := io.WriteString(w, "}"); err != nil {
+		return err
+	}
+	return nil
+}
+
+func writeBNMont(w io.Writer, curve elliptic.Curve, n *big.Int, indent int) error {
+	n = toMontgomery(curve, n)
+	return writeWords(w, bigIntToU64s(curve, n), 2, indent, func(word uint64) string {
+		return fmt.Sprintf("TOBN(0x%08x, 0x%08x)", uint32(word>>32), uint32(word))
+	})
+}
+
+func writeU64Mont(w io.Writer, curve elliptic.Curve, n *big.Int, indent int) error {
+	n = toMontgomery(curve, n)
+	return writeWords(w, bigIntToU64s(curve, n), 3, indent, func(word uint64) string {
+		return fmt.Sprintf("0x%016x", word)
+	})
+}
+
+func writeU32Mont(w io.Writer, curve elliptic.Curve, n *big.Int, indent int) error {
+	n = toMontgomery(curve, n)
+	return writeWords(w, bigIntToU32s(curve, n), 6, indent, func(word uint64) string {
+		if word >= 1<<32 {
+			panic(fmt.Sprintf("word too large: 0x%x", word))
+		}
+		return fmt.Sprintf("0x%08x", word)
+	})
+}
+
+type writeBigIntFunc func(w io.Writer, curve elliptic.Curve, n *big.Int, indent int) error
+
+func writeTable(w io.Writer, curve elliptic.Curve, table [][2]*big.Int, isRoot bool, indent int, writeBigInt writeBigIntFunc) error {
+	if _, err := io.WriteString(w, "{"); err != nil {
+		return err
+	}
+	if isRoot {
+		if _, err := io.WriteString(w, "\n"); err != nil {
+			return err
+		}
+		if err := writeIndent(w, indent); err != nil {
+			return err
+		}
+	} else {
+		indent++
+	}
+	for i, point := range table {
+		if i != 0 {
+			if _, err := io.WriteString(w, ",\n"); err != nil {
+				return err
+			}
+			if err := writeIndent(w, indent); err != nil {
+				return err
+			}
+		}
+		if _, err := io.WriteString(w, "{"); err != nil {
+			return err
+		}
+		if err := writeBigInt(w, curve, point[0], indent+1); err != nil {
+			return err
+		}
+		if _, err := io.WriteString(w, ",\n"); err != nil {
+			return err
+		}
+		if err := writeIndent(w, indent+1); err != nil {
+			return err
+		}
+		if err := writeBigInt(w, curve, point[1], indent+1); err != nil {
+			return err
+		}
+		if _, err := io.WriteString(w, "}"); err != nil {
+			return err
+		}
+	}
+	if _, err := io.WriteString(w, "}"); err != nil {
+		return err
+	}
+	return nil
+}
+
+func writeTables(w io.Writer, curve elliptic.Curve, tables [][][2]*big.Int, isRoot bool, indent int, writeBigInt writeBigIntFunc) error {
+	if _, err := io.WriteString(w, "{"); err != nil {
+		return err
+	}
+	if isRoot {
+		if _, err := io.WriteString(w, "\n"); err != nil {
+			return err
+		}
+		if err := writeIndent(w, indent); err != nil {
+			return err
+		}
+	} else {
+		indent++
+	}
+	for i, table := range tables {
+		if i != 0 {
+			if _, err := io.WriteString(w, ",\n"); err != nil {
+				return err
+			}
+			if err := writeIndent(w, indent); err != nil {
+				return err
+			}
+		}
+		if err := writeTable(w, curve, table, false, indent, writeBigInt); err != nil {
+			return err
+		}
+	}
+	if _, err := io.WriteString(w, "}"); err != nil {
+		return err
+	}
+	return nil
+}
diff --git a/src/crypto/fipsmodule/ec/oct.c b/src/crypto/fipsmodule/ec/oct.c
index 04b1f2c..ddd0f37 100644
--- a/src/crypto/fipsmodule/ec/oct.c
+++ b/src/crypto/fipsmodule/ec/oct.c
@@ -73,21 +73,15 @@
 #include "internal.h"
 
 
-static size_t ec_GFp_simple_point2oct(const EC_GROUP *group,
-                                      const EC_RAW_POINT *point,
-                                      point_conversion_form_t form,
-                                      uint8_t *buf, size_t len) {
+size_t ec_point_to_bytes(const EC_GROUP *group, const EC_AFFINE *point,
+                         point_conversion_form_t form, uint8_t *buf,
+                         size_t len) {
   if (form != POINT_CONVERSION_COMPRESSED &&
       form != POINT_CONVERSION_UNCOMPRESSED) {
     OPENSSL_PUT_ERROR(EC, EC_R_INVALID_FORM);
     return 0;
   }
 
-  if (ec_GFp_simple_is_at_infinity(group, point)) {
-    OPENSSL_PUT_ERROR(EC, EC_R_POINT_AT_INFINITY);
-    return 0;
-  }
-
   const size_t field_len = BN_num_bytes(&group->field);
   size_t output_len = 1 /* type byte */ + field_len;
   if (form == POINT_CONVERSION_UNCOMPRESSED) {
@@ -102,79 +96,89 @@
       return 0;
     }
 
-    uint8_t y_buf[EC_MAX_BYTES];
     size_t field_len_out;
-    if (!ec_point_get_affine_coordinate_bytes(
-            group, buf + 1 /* x */,
-            form == POINT_CONVERSION_COMPRESSED ? y_buf : buf + 1 + field_len,
-            &field_len_out, field_len, point)) {
-      return 0;
-    }
+    ec_felem_to_bytes(group, buf + 1, &field_len_out, &point->X);
+    assert(field_len_out == field_len);
 
-    if (field_len_out != field_len) {
-      OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
-      return 0;
-    }
-
-    if (form == POINT_CONVERSION_COMPRESSED) {
-      buf[0] = form + (y_buf[field_len - 1] & 1);
-    } else {
+    if (form == POINT_CONVERSION_UNCOMPRESSED) {
+      ec_felem_to_bytes(group, buf + 1 + field_len, &field_len_out, &point->Y);
+      assert(field_len_out == field_len);
       buf[0] = form;
+    } else {
+      uint8_t y_buf[EC_MAX_BYTES];
+      ec_felem_to_bytes(group, y_buf, &field_len_out, &point->Y);
+      buf[0] = form + (y_buf[field_len_out - 1] & 1);
     }
   }
 
   return output_len;
 }
 
+int ec_point_from_uncompressed(const EC_GROUP *group, EC_AFFINE *out,
+                               const uint8_t *in, size_t len) {
+  const size_t field_len = BN_num_bytes(&group->field);
+  if (len != 1 + 2 * field_len || in[0] != POINT_CONVERSION_UNCOMPRESSED) {
+    OPENSSL_PUT_ERROR(EC, EC_R_INVALID_ENCODING);
+    return 0;
+  }
+
+  EC_FELEM x, y;
+  if (!ec_felem_from_bytes(group, &x, in + 1, field_len) ||
+      !ec_felem_from_bytes(group, &y, in + 1 + field_len, field_len) ||
+      !ec_point_set_affine_coordinates(group, out, &x, &y)) {
+    return 0;
+  }
+
+  return 1;
+}
+
 static int ec_GFp_simple_oct2point(const EC_GROUP *group, EC_POINT *point,
                                    const uint8_t *buf, size_t len,
                                    BN_CTX *ctx) {
-  BN_CTX *new_ctx = NULL;
-  int ret = 0, used_ctx = 0;
-
   if (len == 0) {
     OPENSSL_PUT_ERROR(EC, EC_R_BUFFER_TOO_SMALL);
-    goto err;
+    return 0;
   }
 
   point_conversion_form_t form = buf[0];
-  const int y_bit = form & 1;
-  form = form & ~1U;
-  if ((form != POINT_CONVERSION_COMPRESSED &&
-       form != POINT_CONVERSION_UNCOMPRESSED) ||
-      (form == POINT_CONVERSION_UNCOMPRESSED && y_bit)) {
-    OPENSSL_PUT_ERROR(EC, EC_R_INVALID_ENCODING);
-    goto err;
-  }
-
-  const size_t field_len = BN_num_bytes(&group->field);
-  size_t enc_len = 1 /* type byte */ + field_len;
   if (form == POINT_CONVERSION_UNCOMPRESSED) {
-    // Uncompressed points have a second coordinate.
-    enc_len += field_len;
+    EC_AFFINE affine;
+    if (!ec_point_from_uncompressed(group, &affine, buf, len)) {
+      // In the event of an error, defend against the caller not checking the
+      // return value by setting a known safe value.
+      ec_set_to_safe_point(group, &point->raw);
+      return 0;
+    }
+    ec_affine_to_jacobian(group, &point->raw, &affine);
+    return 1;
   }
 
-  if (len != enc_len) {
+  const int y_bit = form & 1;
+  const size_t field_len = BN_num_bytes(&group->field);
+  form = form & ~1u;
+  if (form != POINT_CONVERSION_COMPRESSED ||
+      len != 1 /* type byte */ + field_len) {
     OPENSSL_PUT_ERROR(EC, EC_R_INVALID_ENCODING);
-    goto err;
+    return 0;
   }
 
+  // TODO(davidben): Integrate compressed coordinates with the lower-level EC
+  // abstractions. This requires a way to compute square roots, which is tricky
+  // for primes which are not 3 (mod 4), namely P-224 and custom curves. P-224's
+  // prime is particularly inconvenient for compressed coordinates. See
+  // https://cr.yp.to/papers/sqroot.pdf
+  BN_CTX *new_ctx = NULL;
   if (ctx == NULL) {
     ctx = new_ctx = BN_CTX_new();
     if (ctx == NULL) {
-      goto err;
+      return 0;
     }
   }
 
+  int ret = 0;
   BN_CTX_start(ctx);
-  used_ctx = 1;
   BIGNUM *x = BN_CTX_get(ctx);
-  BIGNUM *y = BN_CTX_get(ctx);
-  if (x == NULL || y == NULL) {
-    goto err;
-  }
-
-  if (!BN_bin2bn(buf + 1, field_len, x)) {
+  if (x == NULL || !BN_bin2bn(buf + 1, field_len, x)) {
     goto err;
   }
   if (BN_ucmp(x, &group->field) >= 0) {
@@ -182,30 +186,14 @@
     goto err;
   }
 
-  if (form == POINT_CONVERSION_COMPRESSED) {
-    if (!EC_POINT_set_compressed_coordinates_GFp(group, point, x, y_bit, ctx)) {
-      goto err;
-    }
-  } else {
-    if (!BN_bin2bn(buf + 1 + field_len, field_len, y)) {
-      goto err;
-    }
-    if (BN_ucmp(y, &group->field) >= 0) {
-      OPENSSL_PUT_ERROR(EC, EC_R_INVALID_ENCODING);
-      goto err;
-    }
-
-    if (!EC_POINT_set_affine_coordinates_GFp(group, point, x, y, ctx)) {
-      goto err;
-    }
+  if (!EC_POINT_set_compressed_coordinates_GFp(group, point, x, y_bit, ctx)) {
+    goto err;
   }
 
   ret = 1;
 
 err:
-  if (used_ctx) {
-    BN_CTX_end(ctx);
-  }
+  BN_CTX_end(ctx);
   BN_CTX_free(new_ctx);
   return ret;
 }
@@ -226,7 +214,11 @@
     OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS);
     return 0;
   }
-  return ec_GFp_simple_point2oct(group, &point->raw, form, buf, len);
+  EC_AFFINE affine;
+  if (!ec_jacobian_to_affine(group, &affine, &point->raw)) {
+    return 0;
+  }
+  return ec_point_to_bytes(group, &affine, form, buf, len);
 }
 
 int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group,
diff --git a/src/crypto/fipsmodule/ec/p224-64.c b/src/crypto/fipsmodule/ec/p224-64.c
index f8af39b..da4308c 100644
--- a/src/crypto/fipsmodule/ec/p224-64.c
+++ b/src/crypto/fipsmodule/ec/p224-64.c
@@ -866,7 +866,7 @@
 }
 
 // p224_get_bit returns the |i|th bit in |in|
-static char p224_get_bit(const p224_felem_bytearray in, size_t i) {
+static crypto_word_t p224_get_bit(const p224_felem_bytearray in, size_t i) {
   if (i >= 224) {
     return 0;
   }
@@ -977,13 +977,13 @@
 
     // Add every 5 doublings.
     if (i % 5 == 0) {
-      uint64_t bits = p224_get_bit(scalar->bytes, i + 4) << 5;
+      crypto_word_t bits = p224_get_bit(scalar->bytes, i + 4) << 5;
       bits |= p224_get_bit(scalar->bytes, i + 3) << 4;
       bits |= p224_get_bit(scalar->bytes, i + 2) << 3;
       bits |= p224_get_bit(scalar->bytes, i + 1) << 2;
       bits |= p224_get_bit(scalar->bytes, i) << 1;
       bits |= p224_get_bit(scalar->bytes, i - 1);
-      uint8_t sign, digit;
+      crypto_word_t sign, digit;
       ec_GFp_nistp_recode_scalar_bits(&sign, &digit, bits);
 
       // Select the point to add or subtract.
@@ -1022,7 +1022,7 @@
     }
 
     // First, look 28 bits upwards.
-    uint64_t bits = p224_get_bit(scalar->bytes, i + 196) << 3;
+    crypto_word_t bits = p224_get_bit(scalar->bytes, i + 196) << 3;
     bits |= p224_get_bit(scalar->bytes, i + 140) << 2;
     bits |= p224_get_bit(scalar->bytes, i + 84) << 1;
     bits |= p224_get_bit(scalar->bytes, i + 28);
@@ -1080,14 +1080,15 @@
     // Add multiples of the generator.
     if (i <= 27) {
       // First, look 28 bits upwards.
-      uint64_t bits = p224_get_bit(g_scalar->bytes, i + 196) << 3;
+      crypto_word_t bits = p224_get_bit(g_scalar->bytes, i + 196) << 3;
       bits |= p224_get_bit(g_scalar->bytes, i + 140) << 2;
       bits |= p224_get_bit(g_scalar->bytes, i + 84) << 1;
       bits |= p224_get_bit(g_scalar->bytes, i + 28);
 
+      size_t index = (size_t)bits;
       p224_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */,
-                     g_p224_pre_comp[1][bits][0], g_p224_pre_comp[1][bits][1],
-                     g_p224_pre_comp[1][bits][2]);
+                     g_p224_pre_comp[1][index][0], g_p224_pre_comp[1][index][1],
+                     g_p224_pre_comp[1][index][2]);
       assert(!skip);
 
       // Second, look at the current position.
@@ -1095,20 +1096,21 @@
       bits |= p224_get_bit(g_scalar->bytes, i + 112) << 2;
       bits |= p224_get_bit(g_scalar->bytes, i + 56) << 1;
       bits |= p224_get_bit(g_scalar->bytes, i);
+      index = (size_t)bits;
       p224_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */,
-                     g_p224_pre_comp[0][bits][0], g_p224_pre_comp[0][bits][1],
-                     g_p224_pre_comp[0][bits][2]);
+                     g_p224_pre_comp[0][index][0], g_p224_pre_comp[0][index][1],
+                     g_p224_pre_comp[0][index][2]);
     }
 
     // Incorporate |p_scalar| every 5 doublings.
     if (i % 5 == 0) {
-      uint64_t bits = p224_get_bit(p_scalar->bytes, i + 4) << 5;
+      crypto_word_t bits = p224_get_bit(p_scalar->bytes, i + 4) << 5;
       bits |= p224_get_bit(p_scalar->bytes, i + 3) << 4;
       bits |= p224_get_bit(p_scalar->bytes, i + 2) << 3;
       bits |= p224_get_bit(p_scalar->bytes, i + 1) << 2;
       bits |= p224_get_bit(p_scalar->bytes, i) << 1;
       bits |= p224_get_bit(p_scalar->bytes, i - 1);
-      uint8_t sign, digit;
+      crypto_word_t sign, digit;
       ec_GFp_nistp_recode_scalar_bits(&sign, &digit, bits);
 
       // Select the point to add or subtract.
@@ -1154,16 +1156,6 @@
   p224_felem_to_generic(r, felem);
 }
 
-static int ec_GFp_nistp224_bignum_to_felem(const EC_GROUP *group, EC_FELEM *out,
-                                           const BIGNUM *in) {
-  return bn_copy_words(out->words, group->field.width, in);
-}
-
-static int ec_GFp_nistp224_felem_to_bignum(const EC_GROUP *group, BIGNUM *out,
-                                           const EC_FELEM *in) {
-  return bn_set_words(out, in->words, group->field.width);
-}
-
 DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_nistp224_method) {
   out->group_init = ec_GFp_simple_group_init;
   out->group_finish = ec_GFp_simple_group_finish;
@@ -1177,10 +1169,11 @@
   out->mul_public = ec_GFp_nistp224_point_mul_public;
   out->felem_mul = ec_GFp_nistp224_felem_mul;
   out->felem_sqr = ec_GFp_nistp224_felem_sqr;
-  out->bignum_to_felem = ec_GFp_nistp224_bignum_to_felem;
-  out->felem_to_bignum = ec_GFp_nistp224_felem_to_bignum;
-  out->scalar_inv_montgomery = ec_simple_scalar_inv_montgomery;
-  out->scalar_inv_montgomery_vartime = ec_GFp_simple_mont_inv_mod_ord_vartime;
+  out->felem_to_bytes = ec_GFp_simple_felem_to_bytes;
+  out->felem_from_bytes = ec_GFp_simple_felem_from_bytes;
+  out->scalar_inv0_montgomery = ec_simple_scalar_inv0_montgomery;
+  out->scalar_to_montgomery_inv_vartime =
+      ec_simple_scalar_to_montgomery_inv_vartime;
   out->cmp_x_coordinate = ec_GFp_simple_cmp_x_coordinate;
 }
 
diff --git a/src/crypto/fipsmodule/ec/p256-x86_64-table.h b/src/crypto/fipsmodule/ec/p256-x86_64-table.h
index 8246b11..3af0b01 100644
--- a/src/crypto/fipsmodule/ec/p256-x86_64-table.h
+++ b/src/crypto/fipsmodule/ec/p256-x86_64-table.h
@@ -1,16 +1,12 @@
-/* Copyright (c) 2015, Intel Inc.
+/*
+ * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2015, Intel Inc.
  *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+ * Licensed under the OpenSSL license (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
 
 // This is the precomputed constant time access table for the code in
 // p256-x86_64.c, for the default generator. The table consists of 37
@@ -24,9478 +20,9478 @@
 // in order to increase the chances of using a large page but that appears to
 // lead to invalid ELF files being produced.
 
-// This file is generated by make_p256-x86_64-table.go.
+// This file is generated by make_tables.go.
 
 static const alignas(4096) PRECOMP256_ROW ecp_nistz256_precomputed[37] = {
-        {{{TOBN(0x79e730d4, 0x18a9143c), TOBN(0x75ba95fc, 0x5fedb601),
-           TOBN(0x79fb732b, 0x77622510), TOBN(0x18905f76, 0xa53755c6)},
-          {TOBN(0xddf25357, 0xce95560a), TOBN(0x8b4ab8e4, 0xba19e45c),
-           TOBN(0xd2e88688, 0xdd21f325), TOBN(0x8571ff18, 0x25885d85)}},
-         {{TOBN(0x850046d4, 0x10ddd64d), TOBN(0xaa6ae3c1, 0xa433827d),
-           TOBN(0x73220503, 0x8d1490d9), TOBN(0xf6bb32e4, 0x3dcf3a3b)},
-          {TOBN(0x2f3648d3, 0x61bee1a5), TOBN(0x152cd7cb, 0xeb236ff8),
-           TOBN(0x19a8fb0e, 0x92042dbe), TOBN(0x78c57751, 0x0a5b8a3b)}},
-         {{TOBN(0xffac3f90, 0x4eebc127), TOBN(0xb027f84a, 0x087d81fb),
-           TOBN(0x66ad77dd, 0x87cbbc98), TOBN(0x26936a3f, 0xb6ff747e)},
-          {TOBN(0xb04c5c1f, 0xc983a7eb), TOBN(0x583e47ad, 0x0861fe1a),
-           TOBN(0x78820831, 0x1a2ee98e), TOBN(0xd5f06a29, 0xe587cc07)}},
-         {{TOBN(0x74b0b50d, 0x46918dcc), TOBN(0x4650a6ed, 0xc623c173),
-           TOBN(0x0cdaacac, 0xe8100af2), TOBN(0x577362f5, 0x41b0176b)},
-          {TOBN(0x2d96f24c, 0xe4cbaba6), TOBN(0x17628471, 0xfad6f447),
-           TOBN(0x6b6c36de, 0xe5ddd22e), TOBN(0x84b14c39, 0x4c5ab863)}},
-         {{TOBN(0xbe1b8aae, 0xc45c61f5), TOBN(0x90ec649a, 0x94b9537d),
-           TOBN(0x941cb5aa, 0xd076c20c), TOBN(0xc9079605, 0x890523c8)},
-          {TOBN(0xeb309b4a, 0xe7ba4f10), TOBN(0x73c568ef, 0xe5eb882b),
-           TOBN(0x3540a987, 0x7e7a1f68), TOBN(0x73a076bb, 0x2dd1e916)}},
-         {{TOBN(0x40394737, 0x3e77664a), TOBN(0x55ae744f, 0x346cee3e),
-           TOBN(0xd50a961a, 0x5b17a3ad), TOBN(0x13074b59, 0x54213673)},
-          {TOBN(0x93d36220, 0xd377e44b), TOBN(0x299c2b53, 0xadff14b5),
-           TOBN(0xf424d44c, 0xef639f11), TOBN(0xa4c9916d, 0x4a07f75f)}},
-         {{TOBN(0x0746354e, 0xa0173b4f), TOBN(0x2bd20213, 0xd23c00f7),
-           TOBN(0xf43eaab5, 0x0c23bb08), TOBN(0x13ba5119, 0xc3123e03)},
-          {TOBN(0x2847d030, 0x3f5b9d4d), TOBN(0x6742f2f2, 0x5da67bdd),
-           TOBN(0xef933bdc, 0x77c94195), TOBN(0xeaedd915, 0x6e240867)}},
-         {{TOBN(0x27f14cd1, 0x9499a78f), TOBN(0x462ab5c5, 0x6f9b3455),
-           TOBN(0x8f90f02a, 0xf02cfc6b), TOBN(0xb763891e, 0xb265230d)},
-          {TOBN(0xf59da3a9, 0x532d4977), TOBN(0x21e3327d, 0xcf9eba15),
-           TOBN(0x123c7b84, 0xbe60bbf0), TOBN(0x56ec12f2, 0x7706df76)}},
-         {{TOBN(0x75c96e8f, 0x264e20e8), TOBN(0xabe6bfed, 0x59a7a841),
-           TOBN(0x2cc09c04, 0x44c8eb00), TOBN(0xe05b3080, 0xf0c4e16b)},
-          {TOBN(0x1eb7777a, 0xa45f3314), TOBN(0x56af7bed, 0xce5d45e3),
-           TOBN(0x2b6e019a, 0x88b12f1a), TOBN(0x086659cd, 0xfd835f9b)}},
-         {{TOBN(0x2c18dbd1, 0x9dc21ec8), TOBN(0x98f9868a, 0x0fcf8139),
-           TOBN(0x737d2cd6, 0x48250b49), TOBN(0xcc61c947, 0x24b3428f)},
-          {TOBN(0x0c2b4078, 0x80dd9e76), TOBN(0xc43a8991, 0x383fbe08),
-           TOBN(0x5f7d2d65, 0x779be5d2), TOBN(0x78719a54, 0xeb3b4ab5)}},
-         {{TOBN(0xea7d260a, 0x6245e404), TOBN(0x9de40795, 0x6e7fdfe0),
-           TOBN(0x1ff3a415, 0x8dac1ab5), TOBN(0x3e7090f1, 0x649c9073)},
-          {TOBN(0x1a768561, 0x2b944e88), TOBN(0x250f939e, 0xe57f61c8),
-           TOBN(0x0c0daa89, 0x1ead643d), TOBN(0x68930023, 0xe125b88e)}},
-         {{TOBN(0x04b71aa7, 0xd2697768), TOBN(0xabdedef5, 0xca345a33),
-           TOBN(0x2409d29d, 0xee37385e), TOBN(0x4ee1df77, 0xcb83e156)},
-          {TOBN(0x0cac12d9, 0x1cbb5b43), TOBN(0x170ed2f6, 0xca895637),
-           TOBN(0x28228cfa, 0x8ade6d66), TOBN(0x7ff57c95, 0x53238aca)}},
-         {{TOBN(0xccc42563, 0x4b2ed709), TOBN(0x0e356769, 0x856fd30d),
-           TOBN(0xbcbcd43f, 0x559e9811), TOBN(0x738477ac, 0x5395b759)},
-          {TOBN(0x35752b90, 0xc00ee17f), TOBN(0x68748390, 0x742ed2e3),
-           TOBN(0x7cd06422, 0xbd1f5bc1), TOBN(0xfbc08769, 0xc9e7b797)}},
-         {{TOBN(0xa242a35b, 0xb0cf664a), TOBN(0x126e48f7, 0x7f9707e3),
-           TOBN(0x1717bf54, 0xc6832660), TOBN(0xfaae7332, 0xfd12c72e)},
-          {TOBN(0x27b52db7, 0x995d586b), TOBN(0xbe29569e, 0x832237c2),
-           TOBN(0xe8e4193e, 0x2a65e7db), TOBN(0x152706dc, 0x2eaa1bbb)}},
-         {{TOBN(0x72bcd8b7, 0xbc60055b), TOBN(0x03cc23ee, 0x56e27e4b),
-           TOBN(0xee337424, 0xe4819370), TOBN(0xe2aa0e43, 0x0ad3da09)},
-          {TOBN(0x40b8524f, 0x6383c45d), TOBN(0xd7663554, 0x42a41b25),
-           TOBN(0x64efa6de, 0x778a4797), TOBN(0x2042170a, 0x7079adf4)}},
-         {{TOBN(0x808b0b65, 0x0bc6fb80), TOBN(0x5882e075, 0x3ffe2e6b),
-           TOBN(0xd5ef2f7c, 0x2c83f549), TOBN(0x54d63c80, 0x9103b723)},
-          {TOBN(0xf2f11bd6, 0x52a23f9b), TOBN(0x3670c319, 0x4b0b6587),
-           TOBN(0x55c4623b, 0xb1580e9e), TOBN(0x64edf7b2, 0x01efe220)}},
-         {{TOBN(0x97091dcb, 0xd53c5c9d), TOBN(0xf17624b6, 0xac0a177b),
-           TOBN(0xb0f13975, 0x2cfe2dff), TOBN(0xc1a35c0a, 0x6c7a574e)},
-          {TOBN(0x227d3146, 0x93e79987), TOBN(0x0575bf30, 0xe89cb80e),
-           TOBN(0x2f4e247f, 0x0d1883bb), TOBN(0xebd51226, 0x3274c3d0)}},
-         {{TOBN(0x5f3e51c8, 0x56ada97a), TOBN(0x4afc964d, 0x8f8b403e),
-           TOBN(0xa6f247ab, 0x412e2979), TOBN(0x675abd1b, 0x6f80ebda)},
-          {TOBN(0x66a2bd72, 0x5e485a1d), TOBN(0x4b2a5caf, 0x8f4f0b3c),
-           TOBN(0x2626927f, 0x1b847bba), TOBN(0x6c6fc7d9, 0x0502394d)}},
-         {{TOBN(0xfea912ba, 0xa5659ae8), TOBN(0x68363aba, 0x25e1a16e),
-           TOBN(0xb8842277, 0x752c41ac), TOBN(0xfe545c28, 0x2897c3fc)},
-          {TOBN(0x2d36e9e7, 0xdc4c696b), TOBN(0x5806244a, 0xfba977c5),
-           TOBN(0x85665e9b, 0xe39508c1), TOBN(0xf720ee25, 0x6d12597b)}},
-         {{TOBN(0x8a979129, 0xd2337a31), TOBN(0x5916868f, 0x0f862bdc),
-           TOBN(0x048099d9, 0x5dd283ba), TOBN(0xe2d1eeb6, 0xfe5bfb4e)},
-          {TOBN(0x82ef1c41, 0x7884005d), TOBN(0xa2d4ec17, 0xffffcbae),
-           TOBN(0x9161c53f, 0x8aa95e66), TOBN(0x5ee104e1, 0xc5fee0d0)}},
-         {{TOBN(0x562e4cec, 0xc135b208), TOBN(0x74e1b265, 0x4783f47d),
-           TOBN(0x6d2a506c, 0x5a3f3b30), TOBN(0xecead9f4, 0xc16762fc)},
-          {TOBN(0xf29dd4b2, 0xe286e5b9), TOBN(0x1b0fadc0, 0x83bb3c61),
-           TOBN(0x7a75023e, 0x7fac29a4), TOBN(0xc086d5f1, 0xc9477fa3)}},
-         {{TOBN(0x0fc61135, 0x2f6f3076), TOBN(0xc99ffa23, 0xe3912a9a),
-           TOBN(0x6a0b0685, 0xd2f8ba3d), TOBN(0xfdc777e8, 0xe93358a4)},
-          {TOBN(0x94a787bb, 0x35415f04), TOBN(0x640c2d6a, 0x4d23fea4),
-           TOBN(0x9de917da, 0x153a35b5), TOBN(0x793e8d07, 0x5d5cd074)}},
-         {{TOBN(0xf4f87653, 0x2de45068), TOBN(0x37c7a7e8, 0x9e2e1f6e),
-           TOBN(0xd0825fa2, 0xa3584069), TOBN(0xaf2cea7c, 0x1727bf42)},
-          {TOBN(0x0360a4fb, 0x9e4785a9), TOBN(0xe5fda49c, 0x27299f4a),
-           TOBN(0x48068e13, 0x71ac2f71), TOBN(0x83d0687b, 0x9077666f)}},
-         {{TOBN(0x6d3883b2, 0x15d02819), TOBN(0x6d0d7550, 0x40dd9a35),
-           TOBN(0x61d7cbf9, 0x1d2b469f), TOBN(0xf97b232f, 0x2efc3115)},
-          {TOBN(0xa551d750, 0xb24bcbc7), TOBN(0x11ea4949, 0x88a1e356),
-           TOBN(0x7669f031, 0x93cb7501), TOBN(0x595dc55e, 0xca737b8a)}},
-         {{TOBN(0xa4a319ac, 0xd837879f), TOBN(0x6fc1b49e, 0xed6b67b0),
-           TOBN(0xe3959933, 0x32f1f3af), TOBN(0x966742eb, 0x65432a2e)},
-          {TOBN(0x4b8dc9fe, 0xb4966228), TOBN(0x96cc6312, 0x43f43950),
-           TOBN(0x12068859, 0xc9b731ee), TOBN(0x7b948dc3, 0x56f79968)}},
-         {{TOBN(0x61e4ad32, 0xed1f8008), TOBN(0xe6c9267a, 0xd8b17538),
-           TOBN(0x1ac7c5eb, 0x857ff6fb), TOBN(0x994baaa8, 0x55f2fb10)},
-          {TOBN(0x84cf14e1, 0x1d248018), TOBN(0x5a39898b, 0x628ac508),
-           TOBN(0x14fde97b, 0x5fa944f5), TOBN(0xed178030, 0xd12e5ac7)}},
-         {{TOBN(0x042c2af4, 0x97e2feb4), TOBN(0xd36a42d7, 0xaebf7313),
-           TOBN(0x49d2c9eb, 0x084ffdd7), TOBN(0x9f8aa54b, 0x2ef7c76a)},
-          {TOBN(0x9200b7ba, 0x09895e70), TOBN(0x3bd0c66f, 0xddb7fb58),
-           TOBN(0x2d97d108, 0x78eb4cbb), TOBN(0x2d431068, 0xd84bde31)}},
-         {{TOBN(0x4b523eb7, 0x172ccd1f), TOBN(0x7323cb28, 0x30a6a892),
-           TOBN(0x97082ec0, 0xcfe153eb), TOBN(0xe97f6b6a, 0xf2aadb97)},
-          {TOBN(0x1d3d393e, 0xd1a83da1), TOBN(0xa6a7f9c7, 0x804b2a68),
-           TOBN(0x4a688b48, 0x2d0cb71e), TOBN(0xa9b4cc5f, 0x40585278)}},
-         {{TOBN(0x5e5db46a, 0xcb66e132), TOBN(0xf1be963a, 0x0d925880),
-           TOBN(0x944a7027, 0x0317b9e2), TOBN(0xe266f959, 0x48603d48)},
-          {TOBN(0x98db6673, 0x5c208899), TOBN(0x90472447, 0xa2fb18a3),
-           TOBN(0x8a966939, 0x777c619f), TOBN(0x3798142a, 0x2a3be21b)}},
-         {{TOBN(0xb4241cb1, 0x3298b343), TOBN(0xa3a14e49, 0xb44f65a1),
-           TOBN(0xc5f4d6cd, 0x3ac77acd), TOBN(0xd0288cb5, 0x52b6fc3c)},
-          {TOBN(0xd5cc8c2f, 0x1c040abc), TOBN(0xb675511e, 0x06bf9b4a),
-           TOBN(0xd667da37, 0x9b3aa441), TOBN(0x460d45ce, 0x51601f72)}},
-         {{TOBN(0xe2f73c69, 0x6755ff89), TOBN(0xdd3cf7e7, 0x473017e6),
-           TOBN(0x8ef5689d, 0x3cf7600d), TOBN(0x948dc4f8, 0xb1fc87b4)},
-          {TOBN(0xd9e9fe81, 0x4ea53299), TOBN(0x2d921ca2, 0x98eb6028),
-           TOBN(0xfaecedfd, 0x0c9803fc), TOBN(0xf38ae891, 0x4d7b4745)}},
-         {{TOBN(0xd8c5fccf, 0xc5e3a3d8), TOBN(0xbefd904c, 0x4079dfbf),
-           TOBN(0xbc6d6a58, 0xfead0197), TOBN(0x39227077, 0x695532a4)},
-          {TOBN(0x09e23e6d, 0xdbef42f5), TOBN(0x7e449b64, 0x480a9908),
-           TOBN(0x7b969c1a, 0xad9a2e40), TOBN(0x6231d792, 0x9591c2a4)}},
-         {{TOBN(0x87151456, 0x0f664534), TOBN(0x85ceae7c, 0x4b68f103),
-           TOBN(0xac09c4ae, 0x65578ab9), TOBN(0x33ec6868, 0xf044b10c)},
-          {TOBN(0x6ac4832b, 0x3a8ec1f1), TOBN(0x5509d128, 0x5847d5ef),
-           TOBN(0xf909604f, 0x763f1574), TOBN(0xb16c4303, 0xc32f63c4)}},
-         {{TOBN(0xb6ab2014, 0x7ca23cd3), TOBN(0xcaa7a5c6, 0xa391849d),
-           TOBN(0x5b0673a3, 0x75678d94), TOBN(0xc982ddd4, 0xdd303e64)},
-          {TOBN(0xfd7b000b, 0x5db6f971), TOBN(0xbba2cb1f, 0x6f876f92),
-           TOBN(0xc77332a3, 0x3c569426), TOBN(0xa159100c, 0x570d74f8)}},
-         {{TOBN(0xfd16847f, 0xdec67ef5), TOBN(0x742ee464, 0x233e76b7),
-           TOBN(0x0b8e4134, 0xefc2b4c8), TOBN(0xca640b86, 0x42a3e521)},
-          {TOBN(0x653a0190, 0x8ceb6aa9), TOBN(0x313c300c, 0x547852d5),
-           TOBN(0x24e4ab12, 0x6b237af7), TOBN(0x2ba90162, 0x8bb47af8)}},
-         {{TOBN(0x3d5e58d6, 0xa8219bb7), TOBN(0xc691d0bd, 0x1b06c57f),
-           TOBN(0x0ae4cb10, 0xd257576e), TOBN(0x3569656c, 0xd54a3dc3)},
-          {TOBN(0xe5ebaebd, 0x94cda03a), TOBN(0x934e82d3, 0x162bfe13),
-           TOBN(0x450ac0ba, 0xe251a0c6), TOBN(0x480b9e11, 0xdd6da526)}},
-         {{TOBN(0x00467bc5, 0x8cce08b5), TOBN(0xb636458c, 0x7f178d55),
-           TOBN(0xc5748bae, 0xa677d806), TOBN(0x2763a387, 0xdfa394eb)},
-          {TOBN(0xa12b448a, 0x7d3cebb6), TOBN(0xe7adda3e, 0x6f20d850),
-           TOBN(0xf63ebce5, 0x1558462c), TOBN(0x58b36143, 0x620088a8)}},
-         {{TOBN(0x8a2cc3ca, 0x4d63c0ee), TOBN(0x51233117, 0x0fe948ce),
-           TOBN(0x7463fd85, 0x222ef33b), TOBN(0xadf0c7dc, 0x7c603d6c)},
-          {TOBN(0x0ec32d3b, 0xfe7765e5), TOBN(0xccaab359, 0xbf380409),
-           TOBN(0xbdaa84d6, 0x8e59319c), TOBN(0xd9a4c280, 0x9c80c34d)}},
-         {{TOBN(0xa9d89488, 0xa059c142), TOBN(0x6f5ae714, 0xff0b9346),
-           TOBN(0x068f237d, 0x16fb3664), TOBN(0x5853e4c4, 0x363186ac)},
-          {TOBN(0xe2d87d23, 0x63c52f98), TOBN(0x2ec4a766, 0x81828876),
-           TOBN(0x47b864fa, 0xe14e7b1c), TOBN(0x0c0bc0e5, 0x69192408)}},
-         {{TOBN(0xe4d7681d, 0xb82e9f3e), TOBN(0x83200f0b, 0xdf25e13c),
-           TOBN(0x8909984c, 0x66f27280), TOBN(0x462d7b00, 0x75f73227)},
-          {TOBN(0xd90ba188, 0xf2651798), TOBN(0x74c6e18c, 0x36ab1c34),
-           TOBN(0xab256ea3, 0x5ef54359), TOBN(0x03466612, 0xd1aa702f)}},
-         {{TOBN(0x624d6049, 0x2ed22e91), TOBN(0x6fdfe0b5, 0x6f072822),
-           TOBN(0xeeca1115, 0x39ce2271), TOBN(0x98100a4f, 0xdb01614f)},
-          {TOBN(0xb6b0daa2, 0xa35c628f), TOBN(0xb6f94d2e, 0xc87e9a47),
-           TOBN(0xc6773259, 0x1d57d9ce), TOBN(0xf70bfeec, 0x03884a7b)}},
-         {{TOBN(0x5fb35ccf, 0xed2bad01), TOBN(0xa155cbe3, 0x1da6a5c7),
-           TOBN(0xc2e2594c, 0x30a92f8f), TOBN(0x649c89ce, 0x5bfafe43)},
-          {TOBN(0xd158667d, 0xe9ff257a), TOBN(0x9b359611, 0xf32c50ae),
-           TOBN(0x4b00b20b, 0x906014cf), TOBN(0xf3a8cfe3, 0x89bc7d3d)}},
-         {{TOBN(0x4ff23ffd, 0x248a7d06), TOBN(0x80c5bfb4, 0x878873fa),
-           TOBN(0xb7d9ad90, 0x05745981), TOBN(0x179c85db, 0x3db01994)},
-          {TOBN(0xba41b062, 0x61a6966c), TOBN(0x4d82d052, 0xeadce5a8),
-           TOBN(0x9e91cd3b, 0xa5e6a318), TOBN(0x47795f4f, 0x95b2dda0)}},
-         {{TOBN(0xecfd7c1f, 0xd55a897c), TOBN(0x009194ab, 0xb29110fb),
-           TOBN(0x5f0e2046, 0xe381d3b0), TOBN(0x5f3425f6, 0xa98dd291)},
-          {TOBN(0xbfa06687, 0x730d50da), TOBN(0x0423446c, 0x4b083b7f),
-           TOBN(0x397a247d, 0xd69d3417), TOBN(0xeb629f90, 0x387ba42a)}},
-         {{TOBN(0x1ee426cc, 0xd5cd79bf), TOBN(0x0032940b, 0x946c6e18),
-           TOBN(0x1b1e8ae0, 0x57477f58), TOBN(0xe94f7d34, 0x6d823278)},
-          {TOBN(0xc747cb96, 0x782ba21a), TOBN(0xc5254469, 0xf72b33a5),
-           TOBN(0x772ef6de, 0xc7f80c81), TOBN(0xd73acbfe, 0x2cd9e6b5)}},
-         {{TOBN(0x4075b5b1, 0x49ee90d9), TOBN(0x785c339a, 0xa06e9eba),
-           TOBN(0xa1030d5b, 0xabf825e0), TOBN(0xcec684c3, 0xa42931dc)},
-          {TOBN(0x42ab62c9, 0xc1586e63), TOBN(0x45431d66, 0x5ab43f2b),
-           TOBN(0x57c8b2c0, 0x55f7835d), TOBN(0x033da338, 0xc1b7f865)}},
-         {{TOBN(0x283c7513, 0xcaa76097), TOBN(0x0a624fa9, 0x36c83906),
-           TOBN(0x6b20afec, 0x715af2c7), TOBN(0x4b969974, 0xeba78bfd)},
-          {TOBN(0x220755cc, 0xd921d60e), TOBN(0x9b944e10, 0x7baeca13),
-           TOBN(0x04819d51, 0x5ded93d4), TOBN(0x9bbff86e, 0x6dddfd27)}},
-         {{TOBN(0x6b344130, 0x77adc612), TOBN(0xa7496529, 0xbbd803a0),
-           TOBN(0x1a1baaa7, 0x6d8805bd), TOBN(0xc8403902, 0x470343ad)},
-          {TOBN(0x39f59f66, 0x175adff1), TOBN(0x0b26d7fb, 0xb7d8c5b7),
-           TOBN(0xa875f5ce, 0x529d75e3), TOBN(0x85efc7e9, 0x41325cc2)}},
-         {{TOBN(0x21950b42, 0x1ff6acd3), TOBN(0xffe70484, 0x53dc6909),
-           TOBN(0xff4cd0b2, 0x28766127), TOBN(0xabdbe608, 0x4fb7db2b)},
-          {TOBN(0x837c9228, 0x5e1109e8), TOBN(0x26147d27, 0xf4645b5a),
-           TOBN(0x4d78f592, 0xf7818ed8), TOBN(0xd394077e, 0xf247fa36)}},
-         {{TOBN(0x0fb9c2d0, 0x488c171a), TOBN(0xa78bfbaa, 0x13685278),
-           TOBN(0xedfbe268, 0xd5b1fa6a), TOBN(0x0dceb8db, 0x2b7eaba7)},
-          {TOBN(0xbf9e8089, 0x9ae2b710), TOBN(0xefde7ae6, 0xa4449c96),
-           TOBN(0x43b7716b, 0xcc143a46), TOBN(0xd7d34194, 0xc3628c13)}},
-         {{TOBN(0x508cec1c, 0x3b3f64c9), TOBN(0xe20bc0ba, 0x1e5edf3f),
-           TOBN(0xda1deb85, 0x2f4318d4), TOBN(0xd20ebe0d, 0x5c3fa443)},
-          {TOBN(0x370b4ea7, 0x73241ea3), TOBN(0x61f1511c, 0x5e1a5f65),
-           TOBN(0x99a5e23d, 0x82681c62), TOBN(0xd731e383, 0xa2f54c2d)}},
-         {{TOBN(0x2692f36e, 0x83445904), TOBN(0x2e0ec469, 0xaf45f9c0),
-           TOBN(0x905a3201, 0xc67528b7), TOBN(0x88f77f34, 0xd0e5e542)},
-          {TOBN(0xf67a8d29, 0x5864687c), TOBN(0x23b92eae, 0x22df3562),
-           TOBN(0x5c27014b, 0x9bbec39e), TOBN(0x7ef2f226, 0x9c0f0f8d)}},
-         {{TOBN(0x97359638, 0x546c4d8d), TOBN(0x5f9c3fc4, 0x92f24679),
-           TOBN(0x912e8bed, 0xa8c8acd9), TOBN(0xec3a318d, 0x306634b0)},
-          {TOBN(0x80167f41, 0xc31cb264), TOBN(0x3db82f6f, 0x522113f2),
-           TOBN(0xb155bcd2, 0xdcafe197), TOBN(0xfba1da59, 0x43465283)}},
-         {{TOBN(0xa0425b8e, 0xb212cf53), TOBN(0x4f2e512e, 0xf8557c5f),
-           TOBN(0xc1286ff9, 0x25c4d56c), TOBN(0xbb8a0fea, 0xee26c851)},
-          {TOBN(0xc28f70d2, 0xe7d6107e), TOBN(0x7ee0c444, 0xe76265aa),
-           TOBN(0x3df277a4, 0x1d1936b1), TOBN(0x1a556e3f, 0xea9595eb)}},
-         {{TOBN(0x258bbbf9, 0xe7305683), TOBN(0x31eea5bf, 0x07ef5be6),
-           TOBN(0x0deb0e4a, 0x46c814c1), TOBN(0x5cee8449, 0xa7b730dd)},
-          {TOBN(0xeab495c5, 0xa0182bde), TOBN(0xee759f87, 0x9e27a6b4),
-           TOBN(0xc2cf6a68, 0x80e518ca), TOBN(0x25e8013f, 0xf14cf3f4)}},
-         {{TOBN(0x8fc44140, 0x7e8d7a14), TOBN(0xbb1ff3ca, 0x9556f36a),
-           TOBN(0x6a844385, 0x14600044), TOBN(0xba3f0c4a, 0x7451ae63)},
-          {TOBN(0xdfcac25b, 0x1f9af32a), TOBN(0x01e0db86, 0xb1f2214b),
-           TOBN(0x4e9a5bc2, 0xa4b596ac), TOBN(0x83927681, 0x026c2c08)}},
-         {{TOBN(0x3ec832e7, 0x7acaca28), TOBN(0x1bfeea57, 0xc7385b29),
-           TOBN(0x068212e3, 0xfd1eaf38), TOBN(0xc1329830, 0x6acf8ccc)},
-          {TOBN(0xb909f2db, 0x2aac9e59), TOBN(0x5748060d, 0xb661782a),
-           TOBN(0xc5ab2632, 0xc79b7a01), TOBN(0xda44c6c6, 0x00017626)}},
-         {{TOBN(0xf26c00e8, 0xa7ea82f0), TOBN(0x99cac80d, 0xe4299aaf),
-           TOBN(0xd66fe3b6, 0x7ed78be1), TOBN(0x305f725f, 0x648d02cd)},
-          {TOBN(0x33ed1bc4, 0x623fb21b), TOBN(0xfa70533e, 0x7a6319ad),
-           TOBN(0x17ab562d, 0xbe5ffb3e), TOBN(0x06374994, 0x56674741)}},
-         {{TOBN(0x69d44ed6, 0x5c46aa8e), TOBN(0x2100d5d3, 0xa8d063d1),
-           TOBN(0xcb9727ea, 0xa2d17c36), TOBN(0x4c2bab1b, 0x8add53b7)},
-          {TOBN(0xa084e90c, 0x15426704), TOBN(0x778afcd3, 0xa837ebea),
-           TOBN(0x6651f701, 0x7ce477f8), TOBN(0xa0624998, 0x46fb7a8b)}},
-         {{TOBN(0xdc1e6828, 0xed8a6e19), TOBN(0x33fc2336, 0x4189d9c7),
-           TOBN(0x026f8fe2, 0x671c39bc), TOBN(0xd40c4ccd, 0xbc6f9915)},
-          {TOBN(0xafa135bb, 0xf80e75ca), TOBN(0x12c651a0, 0x22adff2c),
-           TOBN(0xc40a04bd, 0x4f51ad96), TOBN(0x04820109, 0xbbe4e832)}},
-         {{TOBN(0x3667eb1a, 0x7f4c04cc), TOBN(0x59556621, 0xa9404f84),
-           TOBN(0x71cdf653, 0x7eceb50a), TOBN(0x994a44a6, 0x9b8335fa)},
-          {TOBN(0xd7faf819, 0xdbeb9b69), TOBN(0x473c5680, 0xeed4350d),
-           TOBN(0xb6658466, 0xda44bba2), TOBN(0x0d1bc780, 0x872bdbf3)}},
-         {{TOBN(0xe535f175, 0xa1962f91), TOBN(0x6ed7e061, 0xed58f5a7),
-           TOBN(0x177aa4c0, 0x2089a233), TOBN(0x0dbcb03a, 0xe539b413)},
-          {TOBN(0xe3dc424e, 0xbb32e38e), TOBN(0x6472e5ef, 0x6806701e),
-           TOBN(0xdd47ff98, 0x814be9ee), TOBN(0x6b60cfff, 0x35ace009)}},
-         {{TOBN(0xb8d3d931, 0x9ff91fe5), TOBN(0x039c4800, 0xf0518eed),
-           TOBN(0x95c37632, 0x9182cb26), TOBN(0x0763a434, 0x82fc568d)},
-          {TOBN(0x707c04d5, 0x383e76ba), TOBN(0xac98b930, 0x824e8197),
-           TOBN(0x92bf7c8f, 0x91230de0), TOBN(0x90876a01, 0x40959b70)}},
-         {{TOBN(0xdb6d96f3, 0x05968b80), TOBN(0x380a0913, 0x089f73b9),
-           TOBN(0x7da70b83, 0xc2c61e01), TOBN(0x95fb8394, 0x569b38c7)},
-          {TOBN(0x9a3c6512, 0x80edfe2f), TOBN(0x8f726bb9, 0x8faeaf82),
-           TOBN(0x8010a4a0, 0x78424bf8), TOBN(0x29672044, 0x0e844970)}}},
-        {{{TOBN(0x63c5cb81, 0x7a2ad62a), TOBN(0x7ef2b6b9, 0xac62ff54),
-           TOBN(0x3749bba4, 0xb3ad9db5), TOBN(0xad311f2c, 0x46d5a617)},
-          {TOBN(0xb77a8087, 0xc2ff3b6d), TOBN(0xb46feaf3, 0x367834ff),
-           TOBN(0xf8aa266d, 0x75d6b138), TOBN(0xfa38d320, 0xec008188)}},
-         {{TOBN(0x486d8ffa, 0x696946fc), TOBN(0x50fbc6d8, 0xb9cba56d),
-           TOBN(0x7e3d423e, 0x90f35a15), TOBN(0x7c3da195, 0xc0dd962c)},
-          {TOBN(0xe673fdb0, 0x3cfd5d8b), TOBN(0x0704b7c2, 0x889dfca5),
-           TOBN(0xf6ce581f, 0xf52305aa), TOBN(0x399d49eb, 0x914d5e53)}},
-         {{TOBN(0x380a496d, 0x6ec293cd), TOBN(0x733dbda7, 0x8e7051f5),
-           TOBN(0x037e388d, 0xb849140a), TOBN(0xee4b32b0, 0x5946dbf6)},
-          {TOBN(0xb1c4fda9, 0xcae368d1), TOBN(0x5001a7b0, 0xfdb0b2f3),
-           TOBN(0x6df59374, 0x2e3ac46e), TOBN(0x4af675f2, 0x39b3e656)}},
-         {{TOBN(0x44e38110, 0x39949296), TOBN(0x5b63827b, 0x361db1b5),
-           TOBN(0x3e5323ed, 0x206eaff5), TOBN(0x942370d2, 0xc21f4290)},
-          {TOBN(0xf2caaf2e, 0xe0d985a1), TOBN(0x192cc64b, 0x7239846d),
-           TOBN(0x7c0b8f47, 0xae6312f8), TOBN(0x7dc61f91, 0x96620108)}},
-         {{TOBN(0xb830fb5b, 0xc2da7de9), TOBN(0xd0e643df, 0x0ff8d3be),
-           TOBN(0x31ee77ba, 0x188a9641), TOBN(0x4e8aa3aa, 0xbcf6d502)},
-          {TOBN(0xf9fb6532, 0x9a49110f), TOBN(0xd18317f6, 0x2dd6b220),
-           TOBN(0x7e3ced41, 0x52c3ea5a), TOBN(0x0d296a14, 0x7d579c4a)}},
-         {{TOBN(0x35d6a53e, 0xed4c3717), TOBN(0x9f8240cf, 0x3d0ed2a3),
-           TOBN(0x8c0d4d05, 0xe5543aa5), TOBN(0x45d5bbfb, 0xdd33b4b4)},
-          {TOBN(0xfa04cc73, 0x137fd28e), TOBN(0x862ac6ef, 0xc73b3ffd),
-           TOBN(0x403ff9f5, 0x31f51ef2), TOBN(0x34d5e0fc, 0xbc73f5a2)}},
-         {{TOBN(0xf2526820, 0x08913f4f), TOBN(0xea20ed61, 0xeac93d95),
-           TOBN(0x51ed38b4, 0x6ca6b26c), TOBN(0x8662dcbc, 0xea4327b0)},
-          {TOBN(0x6daf295c, 0x725d2aaa), TOBN(0xbad2752f, 0x8e52dcda),
-           TOBN(0x2210e721, 0x0b17dacc), TOBN(0xa37f7912, 0xd51e8232)}},
-         {{TOBN(0x4f7081e1, 0x44cc3add), TOBN(0xd5ffa1d6, 0x87be82cf),
-           TOBN(0x89890b6c, 0x0edd6472), TOBN(0xada26e1a, 0x3ed17863)},
-          {TOBN(0x276f2715, 0x63483caa), TOBN(0xe6924cd9, 0x2f6077fd),
-           TOBN(0x05a7fe98, 0x0a466e3c), TOBN(0xf1c794b0, 0xb1902d1f)}},
-         {{TOBN(0xe5213688, 0x82a8042c), TOBN(0xd931cfaf, 0xcd278298),
-           TOBN(0x069a0ae0, 0xf597a740), TOBN(0x0adbb3f3, 0xeb59107c)},
-          {TOBN(0x983e951e, 0x5eaa8eb8), TOBN(0xe663a8b5, 0x11b48e78),
-           TOBN(0x1631cc0d, 0x8a03f2c5), TOBN(0x7577c11e, 0x11e271e2)}},
-         {{TOBN(0x33b2385c, 0x08369a90), TOBN(0x2990c59b, 0x190eb4f8),
-           TOBN(0x819a6145, 0xc68eac80), TOBN(0x7a786d62, 0x2ec4a014)},
-          {TOBN(0x33faadbe, 0x20ac3a8d), TOBN(0x31a21781, 0x5aba2d30),
-           TOBN(0x209d2742, 0xdba4f565), TOBN(0xdb2ce9e3, 0x55aa0fbb)}},
-         {{TOBN(0x8cef334b, 0x168984df), TOBN(0xe81dce17, 0x33879638),
-           TOBN(0xf6e6949c, 0x263720f0), TOBN(0x5c56feaf, 0xf593cbec)},
-          {TOBN(0x8bff5601, 0xfde58c84), TOBN(0x74e24117, 0x2eccb314),
-           TOBN(0xbcf01b61, 0x4c9a8a78), TOBN(0xa233e35e, 0x544c9868)}},
-         {{TOBN(0xb3156bf3, 0x8bd7aff1), TOBN(0x1b5ee4cb, 0x1d81b146),
-           TOBN(0x7ba1ac41, 0xd628a915), TOBN(0x8f3a8f9c, 0xfd89699e)},
-          {TOBN(0x7329b9c9, 0xa0748be7), TOBN(0x1d391c95, 0xa92e621f),
-           TOBN(0xe51e6b21, 0x4d10a837), TOBN(0xd255f53a, 0x4947b435)}},
-         {{TOBN(0x07669e04, 0xf1788ee3), TOBN(0xc14f27af, 0xa86938a2),
-           TOBN(0x8b47a334, 0xe93a01c0), TOBN(0xff627438, 0xd9366808)},
-          {TOBN(0x7a0985d8, 0xca2a5965), TOBN(0x3d9a5542, 0xd6e9b9b3),
-           TOBN(0xc23eb80b, 0x4cf972e8), TOBN(0x5c1c33bb, 0x4fdf72fd)}},
-         {{TOBN(0x0c4a58d4, 0x74a86108), TOBN(0xf8048a8f, 0xee4c5d90),
-           TOBN(0xe3c7c924, 0xe86d4c80), TOBN(0x28c889de, 0x056a1e60)},
-          {TOBN(0x57e2662e, 0xb214a040), TOBN(0xe8c48e98, 0x37e10347),
-           TOBN(0x87742862, 0x80ac748a), TOBN(0xf1c24022, 0x186b06f2)}},
-         {{TOBN(0xac2dd4c3, 0x5f74040a), TOBN(0x409aeb71, 0xfceac957),
-           TOBN(0x4fbad782, 0x55c4ec23), TOBN(0xb359ed61, 0x8a7b76ec)},
-          {TOBN(0x12744926, 0xed6f4a60), TOBN(0xe21e8d7f, 0x4b912de3),
-           TOBN(0xe2575a59, 0xfc705a59), TOBN(0x72f1d4de, 0xed2dbc0e)}},
-         {{TOBN(0x3d2b24b9, 0xeb7926b8), TOBN(0xbff88cb3, 0xcdbe5509),
-           TOBN(0xd0f399af, 0xe4dd640b), TOBN(0x3c5fe130, 0x2f76ed45)},
-          {TOBN(0x6f3562f4, 0x3764fb3d), TOBN(0x7b5af318, 0x3151b62d),
-           TOBN(0xd5bd0bc7, 0xd79ce5f3), TOBN(0xfdaf6b20, 0xec66890f)}},
-         {{TOBN(0x735c67ec, 0x6063540c), TOBN(0x50b259c2, 0xe5f9cb8f),
-           TOBN(0xb8734f9a, 0x3f99c6ab), TOBN(0xf8cc13d5, 0xa3a7bc85)},
-          {TOBN(0x80c1b305, 0xc5217659), TOBN(0xfe5364d4, 0x4ec12a54),
-           TOBN(0xbd87045e, 0x681345fe), TOBN(0x7f8efeb1, 0x582f897f)}},
-         {{TOBN(0xe8cbf1e5, 0xd5923359), TOBN(0xdb0cea9d, 0x539b9fb0),
-           TOBN(0x0c5b34cf, 0x49859b98), TOBN(0x5e583c56, 0xa4403cc6)},
-          {TOBN(0x11fc1a2d, 0xd48185b7), TOBN(0xc93fbc7e, 0x6e521787),
-           TOBN(0x47e7a058, 0x05105b8b), TOBN(0x7b4d4d58, 0xdb8260c8)}},
-         {{TOBN(0xe33930b0, 0x46eb842a), TOBN(0x8e844a9a, 0x7bdae56d),
-           TOBN(0x34ef3a9e, 0x13f7fdfc), TOBN(0xb3768f82, 0x636ca176)},
-          {TOBN(0x2821f4e0, 0x4e09e61c), TOBN(0x414dc3a1, 0xa0c7cddc),
-           TOBN(0xd5379437, 0x54945fcd), TOBN(0x151b6eef, 0xb3555ff1)}},
-         {{TOBN(0xb31bd613, 0x6339c083), TOBN(0x39ff8155, 0xdfb64701),
-           TOBN(0x7c3388d2, 0xe29604ab), TOBN(0x1e19084b, 0xa6b10442)},
-          {TOBN(0x17cf54c0, 0xeccd47ef), TOBN(0x89693385, 0x4a5dfb30),
-           TOBN(0x69d023fb, 0x47daf9f6), TOBN(0x9222840b, 0x7d91d959)}},
-         {{TOBN(0x439108f5, 0x803bac62), TOBN(0x0b7dd91d, 0x379bd45f),
-           TOBN(0xd651e827, 0xca63c581), TOBN(0x5c5d75f6, 0x509c104f)},
-          {TOBN(0x7d5fc738, 0x1f2dc308), TOBN(0x20faa7bf, 0xd98454be),
-           TOBN(0x95374bee, 0xa517b031), TOBN(0xf036b9b1, 0x642692ac)}},
-         {{TOBN(0xc5106109, 0x39842194), TOBN(0xb7e2353e, 0x49d05295),
-           TOBN(0xfc8c1d5c, 0xefb42ee0), TOBN(0xe04884eb, 0x08ce811c)},
-          {TOBN(0xf1f75d81, 0x7419f40e), TOBN(0x5b0ac162, 0xa995c241),
-           TOBN(0x120921bb, 0xc4c55646), TOBN(0x713520c2, 0x8d33cf97)}},
-         {{TOBN(0xb4a65a5c, 0xe98c5100), TOBN(0x6cec871d, 0x2ddd0f5a),
-           TOBN(0x251f0b7f, 0x9ba2e78b), TOBN(0x224a8434, 0xce3a2a5f)},
-          {TOBN(0x26827f61, 0x25f5c46f), TOBN(0x6a22bedc, 0x48545ec0),
-           TOBN(0x25ae5fa0, 0xb1bb5cdc), TOBN(0xd693682f, 0xfcb9b98f)}},
-         {{TOBN(0x32027fe8, 0x91e5d7d3), TOBN(0xf14b7d17, 0x73a07678),
-           TOBN(0xf88497b3, 0xc0dfdd61), TOBN(0xf7c2eec0, 0x2a8c4f48)},
-          {TOBN(0xaa5573f4, 0x3756e621), TOBN(0xc013a240, 0x1825b948),
-           TOBN(0x1c03b345, 0x63878572), TOBN(0xa0472bea, 0x653a4184)}},
-         {{TOBN(0xf4222e27, 0x0ac69a80), TOBN(0x34096d25, 0xf51e54f6),
-           TOBN(0x00a648cb, 0x8fffa591), TOBN(0x4e87acdc, 0x69b6527f)},
-          {TOBN(0x0575e037, 0xe285ccb4), TOBN(0x188089e4, 0x50ddcf52),
-           TOBN(0xaa96c9a8, 0x870ff719), TOBN(0x74a56cd8, 0x1fc7e369)}},
-         {{TOBN(0x41d04ee2, 0x1726931a), TOBN(0x0bbbb2c8, 0x3660ecfd),
-           TOBN(0xa6ef6de5, 0x24818e18), TOBN(0xe421cc51, 0xe7d57887)},
-          {TOBN(0xf127d208, 0xbea87be6), TOBN(0x16a475d3, 0xb1cdd682),
-           TOBN(0x9db1b684, 0x439b63f7), TOBN(0x5359b3db, 0xf0f113b6)}},
-         {{TOBN(0xdfccf1de, 0x8bf06e31), TOBN(0x1fdf8f44, 0xdd383901),
-           TOBN(0x10775cad, 0x5017e7d2), TOBN(0xdfc3a597, 0x58d11eef)},
-          {TOBN(0x6ec9c8a0, 0xb1ecff10), TOBN(0xee6ed6cc, 0x28400549),
-           TOBN(0xb5ad7bae, 0x1b4f8d73), TOBN(0x61b4f11d, 0xe00aaab9)}},
-         {{TOBN(0x7b32d69b, 0xd4eff2d7), TOBN(0x88ae6771, 0x4288b60f),
-           TOBN(0x159461b4, 0x37a1e723), TOBN(0x1f3d4789, 0x570aae8c)},
-          {TOBN(0x869118c0, 0x7f9871da), TOBN(0x35fbda78, 0xf635e278),
-           TOBN(0x738f3641, 0xe1541dac), TOBN(0x6794b13a, 0xc0dae45f)}},
-         {{TOBN(0x065064ac, 0x09cc0917), TOBN(0x27c53729, 0xc68540fd),
-           TOBN(0x0d2d4c8e, 0xef227671), TOBN(0xd23a9f80, 0xa1785a04)},
-          {TOBN(0x98c59528, 0x52650359), TOBN(0xfa09ad01, 0x74a1acad),
-           TOBN(0x082d5a29, 0x0b55bf5c), TOBN(0xa40f1c67, 0x419b8084)}},
-         {{TOBN(0x3a5c752e, 0xdcc18770), TOBN(0x4baf1f2f, 0x8825c3a5),
-           TOBN(0xebd63f74, 0x21b153ed), TOBN(0xa2383e47, 0xb2f64723)},
-          {TOBN(0xe7bf620a, 0x2646d19a), TOBN(0x56cb44ec, 0x03c83ffd),
-           TOBN(0xaf7267c9, 0x4f6be9f1), TOBN(0x8b2dfd7b, 0xc06bb5e9)}},
-         {{TOBN(0xb87072f2, 0xa672c5c7), TOBN(0xeacb11c8, 0x0d53c5e2),
-           TOBN(0x22dac29d, 0xff435932), TOBN(0x37bdb99d, 0x4408693c)},
-          {TOBN(0xf6e62fb6, 0x2899c20f), TOBN(0x3535d512, 0x447ece24),
-           TOBN(0xfbdc6b88, 0xff577ce3), TOBN(0x726693bd, 0x190575f2)}},
-         {{TOBN(0x6772b0e5, 0xab4b35a2), TOBN(0x1d8b6001, 0xf5eeaacf),
-           TOBN(0x728f7ce4, 0x795b9580), TOBN(0x4a20ed2a, 0x41fb81da)},
-          {TOBN(0x9f685cd4, 0x4fec01e6), TOBN(0x3ed7ddcc, 0xa7ff50ad),
-           TOBN(0x460fd264, 0x0c2d97fd), TOBN(0x3a241426, 0xeb82f4f9)}},
-         {{TOBN(0x17d1df2c, 0x6a8ea820), TOBN(0xb2b50d3b, 0xf22cc254),
-           TOBN(0x03856cba, 0xb7291426), TOBN(0x87fd26ae, 0x04f5ee39)},
-          {TOBN(0x9cb696cc, 0x02bee4ba), TOBN(0x53121804, 0x06820fd6),
-           TOBN(0xa5dfc269, 0x0212e985), TOBN(0x666f7ffa, 0x160f9a09)}},
-         {{TOBN(0xc503cd33, 0xbccd9617), TOBN(0x365dede4, 0xba7730a3),
-           TOBN(0x798c6355, 0x5ddb0786), TOBN(0xa6c3200e, 0xfc9cd3bc)},
-          {TOBN(0x060ffb2c, 0xe5e35efd), TOBN(0x99a4e25b, 0x5555a1c1),
-           TOBN(0x11d95375, 0xf70b3751), TOBN(0x0a57354a, 0x160e1bf6)}},
-         {{TOBN(0xecb3ae4b, 0xf8e4b065), TOBN(0x07a834c4, 0x2e53022b),
-           TOBN(0x1cd300b3, 0x8692ed96), TOBN(0x16a6f792, 0x61ee14ec)},
-          {TOBN(0x8f1063c6, 0x6a8649ed), TOBN(0xfbcdfcfe, 0x869f3e14),
-           TOBN(0x2cfb97c1, 0x00a7b3ec), TOBN(0xcea49b3c, 0x7130c2f1)}},
-         {{TOBN(0x462d044f, 0xe9d96488), TOBN(0x4b53d52e, 0x8182a0c1),
-           TOBN(0x84b6ddd3, 0x0391e9e9), TOBN(0x80ab7b48, 0xb1741a09)},
-          {TOBN(0xec0e15d4, 0x27d3317f), TOBN(0x8dfc1ddb, 0x1a64671e),
-           TOBN(0x93cc5d5f, 0xd49c5b92), TOBN(0xc995d53d, 0x3674a331)}},
-         {{TOBN(0x302e41ec, 0x090090ae), TOBN(0x2278a0cc, 0xedb06830),
-           TOBN(0x1d025932, 0xfbc99690), TOBN(0x0c32fbd2, 0xb80d68da)},
-          {TOBN(0xd79146da, 0xf341a6c1), TOBN(0xae0ba139, 0x1bef68a0),
-           TOBN(0xc6b8a563, 0x8d774b3a), TOBN(0x1cf307bd, 0x880ba4d7)}},
-         {{TOBN(0xc033bdc7, 0x19803511), TOBN(0xa9f97b3b, 0x8888c3be),
-           TOBN(0x3d68aebc, 0x85c6d05e), TOBN(0xc3b88a9d, 0x193919eb)},
-          {TOBN(0x2d300748, 0xc48b0ee3), TOBN(0x7506bc7c, 0x07a746c1),
-           TOBN(0xfc48437c, 0x6e6d57f3), TOBN(0x5bd71587, 0xcfeaa91a)}},
-         {{TOBN(0xa4ed0408, 0xc1bc5225), TOBN(0xd0b946db, 0x2719226d),
-           TOBN(0x109ecd62, 0x758d2d43), TOBN(0x75c8485a, 0x2751759b)},
-          {TOBN(0xb0b75f49, 0x9ce4177a), TOBN(0x4fa61a1e, 0x79c10c3d),
-           TOBN(0xc062d300, 0xa167fcd7), TOBN(0x4df3874c, 0x750f0fa8)}},
-         {{TOBN(0x29ae2cf9, 0x83dfedc9), TOBN(0xf8437134, 0x8d87631a),
-           TOBN(0xaf571711, 0x7429c8d2), TOBN(0x18d15867, 0x146d9272)},
-          {TOBN(0x83053ecf, 0x69769bb7), TOBN(0xc55eb856, 0xc479ab82),
-           TOBN(0x5ef7791c, 0x21b0f4b2), TOBN(0xaa5956ba, 0x3d491525)}},
-         {{TOBN(0x407a96c2, 0x9fe20eba), TOBN(0xf27168bb, 0xe52a5ad3),
-           TOBN(0x43b60ab3, 0xbf1d9d89), TOBN(0xe45c51ef, 0x710e727a)},
-          {TOBN(0xdfca5276, 0x099b4221), TOBN(0x8dc6407c, 0x2557a159),
-           TOBN(0x0ead8335, 0x91035895), TOBN(0x0a9db957, 0x9c55dc32)}},
-         {{TOBN(0xe40736d3, 0xdf61bc76), TOBN(0x13a619c0, 0x3f778cdb),
-           TOBN(0x6dd921a4, 0xc56ea28f), TOBN(0x76a52433, 0x2fa647b4)},
-          {TOBN(0x23591891, 0xac5bdc5d), TOBN(0xff4a1a72, 0xbac7dc01),
-           TOBN(0x9905e261, 0x62df8453), TOBN(0x3ac045df, 0xe63b265f)}},
-         {{TOBN(0x8a3f341b, 0xad53dba7), TOBN(0x8ec269cc, 0x837b625a),
-           TOBN(0xd71a2782, 0x3ae31189), TOBN(0x8fb4f9a3, 0x55e96120)},
-          {TOBN(0x804af823, 0xff9875cf), TOBN(0x23224f57, 0x5d442a9b),
-           TOBN(0x1c4d3b9e, 0xecc62679), TOBN(0x91da22fb, 0xa0e7ddb1)}},
-         {{TOBN(0xa370324d, 0x6c04a661), TOBN(0x9710d3b6, 0x5e376d17),
-           TOBN(0xed8c98f0, 0x3044e357), TOBN(0xc364ebbe, 0x6422701c)},
-          {TOBN(0x347f5d51, 0x7733d61c), TOBN(0xd55644b9, 0xcea826c3),
-           TOBN(0x80c6e0ad, 0x55a25548), TOBN(0x0aa7641d, 0x844220a7)}},
-         {{TOBN(0x1438ec81, 0x31810660), TOBN(0x9dfa6507, 0xde4b4043),
-           TOBN(0x10b515d8, 0xcc3e0273), TOBN(0x1b6066dd, 0x28d8cfb2)},
-          {TOBN(0xd3b04591, 0x9c9efebd), TOBN(0x425d4bdf, 0xa21c1ff4),
-           TOBN(0x5fe5af19, 0xd57607d3), TOBN(0xbbf773f7, 0x54481084)}},
-         {{TOBN(0x8435bd69, 0x94b03ed1), TOBN(0xd9ad1de3, 0x634cc546),
-           TOBN(0x2cf423fc, 0x00e420ca), TOBN(0xeed26d80, 0xa03096dd)},
-          {TOBN(0xd7f60be7, 0xa4db09d2), TOBN(0xf47f569d, 0x960622f7),
-           TOBN(0xe5925fd7, 0x7296c729), TOBN(0xeff2db26, 0x26ca2715)}},
-         {{TOBN(0xa6fcd014, 0xb913e759), TOBN(0x53da4786, 0x8ff4de93),
-           TOBN(0x14616d79, 0xc32068e1), TOBN(0xb187d664, 0xccdf352e)},
-          {TOBN(0xf7afb650, 0x1dc90b59), TOBN(0x8170e943, 0x7daa1b26),
-           TOBN(0xc8e3bdd8, 0x700c0a84), TOBN(0x6e8d345f, 0x6482bdfa)}},
-         {{TOBN(0x84cfbfa1, 0xc5c5ea50), TOBN(0xd3baf14c, 0x67960681),
-           TOBN(0x26398403, 0x0dd50942), TOBN(0xe4b7839c, 0x4716a663)},
-          {TOBN(0xd5f1f794, 0xe7de6dc0), TOBN(0x5cd0f4d4, 0x622aa7ce),
-           TOBN(0x5295f3f1, 0x59acfeec), TOBN(0x8d933552, 0x953e0607)}},
-         {{TOBN(0xc7db8ec5, 0x776c5722), TOBN(0xdc467e62, 0x2b5f290c),
-           TOBN(0xd4297e70, 0x4ff425a9), TOBN(0x4be924c1, 0x0cf7bb72)},
-          {TOBN(0x0d5dc5ae, 0xa1892131), TOBN(0x8bf8a8e3, 0xa705c992),
-           TOBN(0x73a0b064, 0x7a305ac5), TOBN(0x00c9ca4e, 0x9a8c77a8)}},
-         {{TOBN(0x5dfee80f, 0x83774bdd), TOBN(0x63131602, 0x85734485),
-           TOBN(0xa1b524ae, 0x914a69a9), TOBN(0xebc2ffaf, 0xd4e300d7)},
-          {TOBN(0x52c93db7, 0x7cfa46a5), TOBN(0x71e6161f, 0x21653b50),
-           TOBN(0x3574fc57, 0xa4bc580a), TOBN(0xc09015dd, 0xe1bc1253)}},
-         {{TOBN(0x4b7b47b2, 0xd174d7aa), TOBN(0x4072d8e8, 0xf3a15d04),
-           TOBN(0xeeb7d47f, 0xd6fa07ed), TOBN(0x6f2b9ff9, 0xedbdafb1)},
-          {TOBN(0x18c51615, 0x3760fe8a), TOBN(0x7a96e6bf, 0xf06c6c13),
-           TOBN(0x4d7a0410, 0x0ea2d071), TOBN(0xa1914e9b, 0x0be2a5ce)}},
-         {{TOBN(0x5726e357, 0xd8a3c5cf), TOBN(0x1197ecc3, 0x2abb2b13),
-           TOBN(0x6c0d7f7f, 0x31ae88dd), TOBN(0x15b20d1a, 0xfdbb3efe)},
-          {TOBN(0xcd06aa26, 0x70584039), TOBN(0x2277c969, 0xa7dc9747),
-           TOBN(0xbca69587, 0x7855d815), TOBN(0x899ea238, 0x5188b32a)}},
-         {{TOBN(0x37d9228b, 0x760c1c9d), TOBN(0xc7efbb11, 0x9b5c18da),
-           TOBN(0x7f0d1bc8, 0x19f6dbc5), TOBN(0x4875384b, 0x07e6905b)},
-          {TOBN(0xc7c50baa, 0x3ba8cd86), TOBN(0xb0ce40fb, 0xc2905de0),
-           TOBN(0x70840673, 0x7a231952), TOBN(0xa912a262, 0xcf43de26)}},
-         {{TOBN(0x9c38ddcc, 0xeb5b76c1), TOBN(0x746f5285, 0x26fc0ab4),
-           TOBN(0x52a63a50, 0xd62c269f), TOBN(0x60049c55, 0x99458621)},
-          {TOBN(0xe7f48f82, 0x3c2f7c9e), TOBN(0x6bd99043, 0x917d5cf3),
-           TOBN(0xeb1317a8, 0x8701f469), TOBN(0xbd3fe2ed, 0x9a449fe0)}},
-         {{TOBN(0x421e79ca, 0x12ef3d36), TOBN(0x9ee3c36c, 0x3e7ea5de),
-           TOBN(0xe48198b5, 0xcdff36f7), TOBN(0xaff4f967, 0xc6b82228)},
-          {TOBN(0x15e19dd0, 0xc47adb7e), TOBN(0x45699b23, 0x032e7dfa),
-           TOBN(0x40680c8b, 0x1fae026a), TOBN(0x5a347a48, 0x550dbf4d)}},
-         {{TOBN(0xe652533b, 0x3cef0d7d), TOBN(0xd94f7b18, 0x2bbb4381),
-           TOBN(0x838752be, 0x0e80f500), TOBN(0x8e6e2488, 0x9e9c9bfb)},
-          {TOBN(0xc9751697, 0x16caca6a), TOBN(0x866c49d8, 0x38531ad9),
-           TOBN(0xc917e239, 0x7151ade1), TOBN(0x2d016ec1, 0x6037c407)}},
-         {{TOBN(0xa407ccc9, 0x00eac3f9), TOBN(0x835f6280, 0xe2ed4748),
-           TOBN(0xcc54c347, 0x1cc98e0d), TOBN(0x0e969937, 0xdcb572eb)},
-          {TOBN(0x1b16c8e8, 0x8f30c9cb), TOBN(0xa606ae75, 0x373c4661),
-           TOBN(0x47aa689b, 0x35502cab), TOBN(0xf89014ae, 0x4d9bb64f)}},
-         {{TOBN(0x202f6a9c, 0x31c71f7b), TOBN(0x01f95aa3, 0x296ffe5c),
-           TOBN(0x5fc06014, 0x53cec3a3), TOBN(0xeb991237, 0x5f498a45)},
-          {TOBN(0xae9a935e, 0x5d91ba87), TOBN(0xc6ac6281, 0x0b564a19),
-           TOBN(0x8a8fe81c, 0x3bd44e69), TOBN(0x7c8b467f, 0x9dd11d45)}},
-         {{TOBN(0xf772251f, 0xea5b8e69), TOBN(0xaeecb3bd, 0xc5b75fbc),
-           TOBN(0x1aca3331, 0x887ff0e5), TOBN(0xbe5d49ff, 0x19f0a131)},
-          {TOBN(0x582c13aa, 0xe5c8646f), TOBN(0xdbaa12e8, 0x20e19980),
-           TOBN(0x8f40f31a, 0xf7abbd94), TOBN(0x1f13f5a8, 0x1dfc7663)}},
-         {{TOBN(0x5d81f1ee, 0xaceb4fc0), TOBN(0x36256002, 0x5e6f0f42),
-           TOBN(0x4b67d6d7, 0x751370c8), TOBN(0x2608b698, 0x03e80589)},
-          {TOBN(0xcfc0d2fc, 0x05268301), TOBN(0xa6943d39, 0x40309212),
-           TOBN(0x192a90c2, 0x1fd0e1c2), TOBN(0xb209f113, 0x37f1dc76)}},
-         {{TOBN(0xefcc5e06, 0x97bf1298), TOBN(0xcbdb6730, 0x219d639e),
-           TOBN(0xd009c116, 0xb81e8c6f), TOBN(0xa3ffdde3, 0x1a7ce2e5)},
-          {TOBN(0xc53fbaaa, 0xa914d3ba), TOBN(0x836d500f, 0x88df85ee),
-           TOBN(0xd98dc71b, 0x66ee0751), TOBN(0x5a3d7005, 0x714516fd)}},
-         {{TOBN(0x21d3634d, 0x39eedbba), TOBN(0x35cd2e68, 0x0455a46d),
-           TOBN(0xc8cafe65, 0xf9d7eb0c), TOBN(0xbda3ce9e, 0x00cefb3e)},
-          {TOBN(0xddc17a60, 0x2c9cf7a4), TOBN(0x01572ee4, 0x7bcb8773),
-           TOBN(0xa92b2b01, 0x8c7548df), TOBN(0x732fd309, 0xa84600e3)}},
-         {{TOBN(0xe22109c7, 0x16543a40), TOBN(0x9acafd36, 0xfede3c6c),
-           TOBN(0xfb206852, 0x6824e614), TOBN(0x2a4544a9, 0xda25dca0)},
-          {TOBN(0x25985262, 0x91d60b06), TOBN(0x281b7be9, 0x28753545),
-           TOBN(0xec667b1a, 0x90f13b27), TOBN(0x33a83aff, 0x940e2eb4)}},
-         {{TOBN(0x80009862, 0xd5d721d5), TOBN(0x0c3357a3, 0x5bd3a182),
-           TOBN(0x27f3a83b, 0x7aa2cda4), TOBN(0xb58ae74e, 0xf6f83085)},
-          {TOBN(0x2a911a81, 0x2e6dad6b), TOBN(0xde286051, 0xf43d6c5b),
-           TOBN(0x4bdccc41, 0xf996c4d8), TOBN(0xe7312ec0, 0x0ae1e24e)}}},
-        {{{TOBN(0xf8d112e7, 0x6e6485b3), TOBN(0x4d3e24db, 0x771c52f8),
-           TOBN(0x48e3ee41, 0x684a2f6d), TOBN(0x7161957d, 0x21d95551)},
-          {TOBN(0x19631283, 0xcdb12a6c), TOBN(0xbf3fa882, 0x2e50e164),
-           TOBN(0xf6254b63, 0x3166cc73), TOBN(0x3aefa7ae, 0xaee8cc38)}},
-         {{TOBN(0x79b0fe62, 0x3b36f9fd), TOBN(0x26543b23, 0xfde19fc0),
-           TOBN(0x136e64a0, 0x958482ef), TOBN(0x23f63771, 0x9b095825)},
-          {TOBN(0x14cfd596, 0xb6a1142e), TOBN(0x5ea6aac6, 0x335aac0b),
-           TOBN(0x86a0e8bd, 0xf3081dd5), TOBN(0x5fb89d79, 0x003dc12a)}},
-         {{TOBN(0xf615c33a, 0xf72e34d4), TOBN(0x0bd9ea40, 0x110eec35),
-           TOBN(0x1c12bc5b, 0xc1dea34e), TOBN(0x686584c9, 0x49ae4699)},
-          {TOBN(0x13ad95d3, 0x8c97b942), TOBN(0x4609561a, 0x4e5c7562),
-           TOBN(0x9e94a4ae, 0xf2737f89), TOBN(0xf57594c6, 0x371c78b6)}},
-         {{TOBN(0x0f0165fc, 0xe3779ee3), TOBN(0xe00e7f9d, 0xbd495d9e),
-           TOBN(0x1fa4efa2, 0x20284e7a), TOBN(0x4564bade, 0x47ac6219)},
-          {TOBN(0x90e6312a, 0xc4708e8e), TOBN(0x4f5725fb, 0xa71e9adf),
-           TOBN(0xe95f55ae, 0x3d684b9f), TOBN(0x47f7ccb1, 0x1e94b415)}},
-         {{TOBN(0x7322851b, 0x8d946581), TOBN(0xf0d13133, 0xbdf4a012),
-           TOBN(0xa3510f69, 0x6584dae0), TOBN(0x03a7c171, 0x3c9f6c6d)},
-          {TOBN(0x5be97f38, 0xe475381a), TOBN(0xca1ba422, 0x85823334),
-           TOBN(0xf83cc5c7, 0x0be17dda), TOBN(0x158b1494, 0x0b918c0f)}},
-         {{TOBN(0xda3a77e5, 0x522e6b69), TOBN(0x69c908c3, 0xbbcd6c18),
-           TOBN(0x1f1b9e48, 0xd924fd56), TOBN(0x37c64e36, 0xaa4bb3f7)},
-          {TOBN(0x5a4fdbdf, 0xee478d7d), TOBN(0xba75c8bc, 0x0193f7a0),
-           TOBN(0x84bc1e84, 0x56cd16df), TOBN(0x1fb08f08, 0x46fad151)}},
-         {{TOBN(0x8a7cabf9, 0x842e9f30), TOBN(0xa331d4bf, 0x5eab83af),
-           TOBN(0xd272cfba, 0x017f2a6a), TOBN(0x27560abc, 0x83aba0e3)},
-          {TOBN(0x94b83387, 0x0e3a6b75), TOBN(0x25c6aea2, 0x6b9f50f5),
-           TOBN(0x803d691d, 0xb5fdf6d0), TOBN(0x03b77509, 0xe6333514)}},
-         {{TOBN(0x36178903, 0x61a341c1), TOBN(0x3604dc60, 0x0cfd6142),
-           TOBN(0x022295eb, 0x8533316c), TOBN(0x3dbde4ac, 0x44af2922)},
-          {TOBN(0x898afc5d, 0x1c7eef69), TOBN(0x58896805, 0xd14f4fa1),
-           TOBN(0x05002160, 0x203c21ca), TOBN(0x6f0d1f30, 0x40ef730b)}},
-         {{TOBN(0x8e8c44d4, 0x196224f8), TOBN(0x75a4ab95, 0x374d079d),
-           TOBN(0x79085ecc, 0x7d48f123), TOBN(0x56f04d31, 0x1bf65ad8)},
-          {TOBN(0xe220bf1c, 0xbda602b2), TOBN(0x73ee1742, 0xf9612c69),
-           TOBN(0x76008fc8, 0x084fd06b), TOBN(0x4000ef9f, 0xf11380d1)}},
-         {{TOBN(0x48201b4b, 0x12cfe297), TOBN(0x3eee129c, 0x292f74e5),
-           TOBN(0xe1fe114e, 0xc9e874e8), TOBN(0x899b055c, 0x92c5fc41)},
-          {TOBN(0x4e477a64, 0x3a39c8cf), TOBN(0x82f09efe, 0x78963cc9),
-           TOBN(0x6fd3fd8f, 0xd333f863), TOBN(0x85132b2a, 0xdc949c63)}},
-         {{TOBN(0x7e06a3ab, 0x516eb17b), TOBN(0x73bec06f, 0xd2c7372b),
-           TOBN(0xe4f74f55, 0xba896da6), TOBN(0xbb4afef8, 0x8e9eb40f)},
-          {TOBN(0x2d75bec8, 0xe61d66b0), TOBN(0x02bda4b4, 0xef29300b),
-           TOBN(0x8bbaa8de, 0x026baa5a), TOBN(0xff54befd, 0xa07f4440)}},
-         {{TOBN(0xbd9b8b1d, 0xbe7a2af3), TOBN(0xec51caa9, 0x4fb74a72),
-           TOBN(0xb9937a4b, 0x63879697), TOBN(0x7c9a9d20, 0xec2687d5)},
-          {TOBN(0x1773e44f, 0x6ef5f014), TOBN(0x8abcf412, 0xe90c6900),
-           TOBN(0x387bd022, 0x8142161e), TOBN(0x50393755, 0xfcb6ff2a)}},
-         {{TOBN(0x9813fd56, 0xed6def63), TOBN(0x53cf6482, 0x7d53106c),
-           TOBN(0x991a35bd, 0x431f7ac1), TOBN(0xf1e274dd, 0x63e65faf)},
-          {TOBN(0xf63ffa3c, 0x44cc7880), TOBN(0x411a426b, 0x7c256981),
-           TOBN(0xb698b9fd, 0x93a420e0), TOBN(0x89fdddc0, 0xae53f8fe)}},
-         {{TOBN(0x766e0722, 0x32398baa), TOBN(0x205fee42, 0x5cfca031),
-           TOBN(0xa49f5341, 0x7a029cf2), TOBN(0xa88c68b8, 0x4023890d)},
-          {TOBN(0xbc275041, 0x7337aaa8), TOBN(0x9ed364ad, 0x0eb384f4),
-           TOBN(0xe0816f85, 0x29aba92f), TOBN(0x2e9e1941, 0x04e38a88)}},
-         {{TOBN(0x57eef44a, 0x3dafd2d5), TOBN(0x35d1fae5, 0x97ed98d8),
-           TOBN(0x50628c09, 0x2307f9b1), TOBN(0x09d84aae, 0xd6cba5c6)},
-          {TOBN(0x67071bc7, 0x88aaa691), TOBN(0x2dea57a9, 0xafe6cb03),
-           TOBN(0xdfe11bb4, 0x3d78ac01), TOBN(0x7286418c, 0x7fd7aa51)}},
-         {{TOBN(0xfabf7709, 0x77f7195a), TOBN(0x8ec86167, 0xadeb838f),
-           TOBN(0xea1285a8, 0xbb4f012d), TOBN(0xd6883503, 0x9a3eab3f)},
-          {TOBN(0xee5d24f8, 0x309004c2), TOBN(0xa96e4b76, 0x13ffe95e),
-           TOBN(0x0cdffe12, 0xbd223ea4), TOBN(0x8f5c2ee5, 0xb6739a53)}},
-         {{TOBN(0x5cb4aaa5, 0xdd968198), TOBN(0xfa131c52, 0x72413a6c),
-           TOBN(0x53d46a90, 0x9536d903), TOBN(0xb270f0d3, 0x48606d8e)},
-          {TOBN(0x518c7564, 0xa053a3bc), TOBN(0x088254b7, 0x1a86caef),
-           TOBN(0xb3ba8cb4, 0x0ab5efd0), TOBN(0x5c59900e, 0x4605945d)}},
-         {{TOBN(0xecace1dd, 0xa1887395), TOBN(0x40960f36, 0x932a65de),
-           TOBN(0x9611ff5c, 0x3aa95529), TOBN(0xc58215b0, 0x7c1e5a36)},
-          {TOBN(0xd48c9b58, 0xf0e1a524), TOBN(0xb406856b, 0xf590dfb8),
-           TOBN(0xc7605e04, 0x9cd95662), TOBN(0x0dd036ee, 0xa33ecf82)}},
-         {{TOBN(0xa50171ac, 0xc33156b3), TOBN(0xf09d24ea, 0x4a80172e),
-           TOBN(0x4e1f72c6, 0x76dc8eef), TOBN(0xe60caadc, 0x5e3d44ee)},
-          {TOBN(0x006ef8a6, 0x979b1d8f), TOBN(0x60908a1c, 0x97788d26),
-           TOBN(0x6e08f95b, 0x266feec0), TOBN(0x618427c2, 0x22e8c94e)}},
-         {{TOBN(0x3d613339, 0x59145a65), TOBN(0xcd9bc368, 0xfa406337),
-           TOBN(0x82d11be3, 0x2d8a52a0), TOBN(0xf6877b27, 0x97a1c590)},
-          {TOBN(0x837a819b, 0xf5cbdb25), TOBN(0x2a4fd1d8, 0xde090249),
-           TOBN(0x622a7de7, 0x74990e5f), TOBN(0x840fa5a0, 0x7945511b)}},
-         {{TOBN(0x30b974be, 0x6558842d), TOBN(0x70df8c64, 0x17f3d0a6),
-           TOBN(0x7c803520, 0x7542e46d), TOBN(0x7251fe7f, 0xe4ecc823)},
-          {TOBN(0xe59134cb, 0x5e9aac9a), TOBN(0x11bb0934, 0xf0045d71),
-           TOBN(0x53e5d9b5, 0xdbcb1d4e), TOBN(0x8d97a905, 0x92defc91)}},
-         {{TOBN(0xfe289327, 0x7946d3f9), TOBN(0xe132bd24, 0x07472273),
-           TOBN(0xeeeb510c, 0x1eb6ae86), TOBN(0x777708c5, 0xf0595067)},
-          {TOBN(0x18e2c8cd, 0x1297029e), TOBN(0x2c61095c, 0xbbf9305e),
-           TOBN(0xe466c258, 0x6b85d6d9), TOBN(0x8ac06c36, 0xda1ea530)}},
-         {{TOBN(0xa365dc39, 0xa1304668), TOBN(0xe4a9c885, 0x07f89606),
-           TOBN(0x65a4898f, 0xacc7228d), TOBN(0x3e2347ff, 0x84ca8303)},
-          {TOBN(0xa5f6fb77, 0xea7d23a3), TOBN(0x2fac257d, 0x672a71cd),
-           TOBN(0x6908bef8, 0x7e6a44d3), TOBN(0x8ff87566, 0x891d3d7a)}},
-         {{TOBN(0xe58e90b3, 0x6b0cf82e), TOBN(0x6438d246, 0x2615b5e7),
-           TOBN(0x07b1f8fc, 0x669c145a), TOBN(0xb0d8b2da, 0x36f1e1cb)},
-          {TOBN(0x54d5dadb, 0xd9184c4d), TOBN(0x3dbb18d5, 0xf93d9976),
-           TOBN(0x0a3e0f56, 0xd1147d47), TOBN(0x2afa8c8d, 0xa0a48609)}},
-         {{TOBN(0x275353e8, 0xbc36742c), TOBN(0x898f427e, 0xeea0ed90),
-           TOBN(0x26f4947e, 0x3e477b00), TOBN(0x8ad8848a, 0x308741e3)},
-          {TOBN(0x6c703c38, 0xd74a2a46), TOBN(0x5e3e05a9, 0x9ba17ba2),
-           TOBN(0xc1fa6f66, 0x4ab9a9e4), TOBN(0x474a2d9a, 0x3841d6ec)}},
-         {{TOBN(0x871239ad, 0x653ae326), TOBN(0x14bcf72a, 0xa74cbb43),
-           TOBN(0x8737650e, 0x20d4c083), TOBN(0x3df86536, 0x110ed4af)},
-          {TOBN(0xd2d86fe7, 0xb53ca555), TOBN(0x688cb00d, 0xabd5d538),
-           TOBN(0xcf81bda3, 0x1ad38468), TOBN(0x7ccfe3cc, 0xf01167b6)}},
-         {{TOBN(0xcf4f47e0, 0x6c4c1fe6), TOBN(0x557e1f1a, 0x298bbb79),
-           TOBN(0xf93b974f, 0x30d45a14), TOBN(0x174a1d2d, 0x0baf97c4)},
-          {TOBN(0x7a003b30, 0xc51fbf53), TOBN(0xd8940991, 0xee68b225),
-           TOBN(0x5b0aa7b7, 0x1c0f4173), TOBN(0x975797c9, 0xa20a7153)}},
-         {{TOBN(0x26e08c07, 0xe3533d77), TOBN(0xd7222e6a, 0x2e341c99),
-           TOBN(0x9d60ec3d, 0x8d2dc4ed), TOBN(0xbdfe0d8f, 0x7c476cf8)},
-          {TOBN(0x1fe59ab6, 0x1d056605), TOBN(0xa9ea9df6, 0x86a8551f),
-           TOBN(0x8489941e, 0x47fb8d8c), TOBN(0xfeb874eb, 0x4a7f1b10)}},
-         {{TOBN(0xfe5fea86, 0x7ee0d98f), TOBN(0x201ad34b, 0xdbf61864),
-           TOBN(0x45d8fe47, 0x37c031d4), TOBN(0xd5f49fae, 0x795f0822)},
-          {TOBN(0xdb0fb291, 0xc7f4a40c), TOBN(0x2e69d9c1, 0x730ddd92),
-           TOBN(0x754e1054, 0x49d76987), TOBN(0x8a24911d, 0x7662db87)}},
-         {{TOBN(0x61fc1810, 0x60a71676), TOBN(0xe852d1a8, 0xf66a8ad1),
-           TOBN(0x172bbd65, 0x6417231e), TOBN(0x0d6de7bd, 0x3babb11f)},
-          {TOBN(0x6fde6f88, 0xc8e347f8), TOBN(0x1c587547, 0x9bd99cc3),
-           TOBN(0x78e54ed0, 0x34076950), TOBN(0x97f0f334, 0x796e83ba)}},
-         {{TOBN(0xe4dbe1ce, 0x4924867a), TOBN(0xbd5f51b0, 0x60b84917),
-           TOBN(0x37530040, 0x3cb09a79), TOBN(0xdb3fe0f8, 0xff1743d8)},
-          {TOBN(0xed7894d8, 0x556fa9db), TOBN(0xfa262169, 0x23412fbf),
-           TOBN(0x563be0db, 0xba7b9291), TOBN(0x6ca8b8c0, 0x0c9fb234)}},
-         {{TOBN(0xed406aa9, 0xbd763802), TOBN(0xc21486a0, 0x65303da1),
-           TOBN(0x61ae291e, 0xc7e62ec4), TOBN(0x622a0492, 0xdf99333e)},
-          {TOBN(0x7fd80c9d, 0xbb7a8ee0), TOBN(0xdc2ed3bc, 0x6c01aedb),
-           TOBN(0x35c35a12, 0x08be74ec), TOBN(0xd540cb1a, 0x469f671f)}},
-         {{TOBN(0xd16ced4e, 0xcf84f6c7), TOBN(0x8561fb9c, 0x2d090f43),
-           TOBN(0x7e693d79, 0x6f239db4), TOBN(0xa736f928, 0x77bd0d94)},
-          {TOBN(0x07b4d929, 0x2c1950ee), TOBN(0xda177543, 0x56dc11b3),
-           TOBN(0xa5dfbbaa, 0x7a6a878e), TOBN(0x1c70cb29, 0x4decb08a)}},
-         {{TOBN(0xfba28c8b, 0x6f0f7c50), TOBN(0xa8eba2b8, 0x854dcc6d),
-           TOBN(0x5ff8e89a, 0x36b78642), TOBN(0x070c1c8e, 0xf6873adf)},
-          {TOBN(0xbbd3c371, 0x6484d2e4), TOBN(0xfb78318f, 0x0d414129),
-           TOBN(0x2621a39c, 0x6ad93b0b), TOBN(0x979d74c2, 0xa9e917f7)}},
-         {{TOBN(0xfc195647, 0x61fb0428), TOBN(0x4d78954a, 0xbee624d4),
-           TOBN(0xb94896e0, 0xb8ae86fd), TOBN(0x6667ac0c, 0xc91c8b13)},
-          {TOBN(0x9f180512, 0x43bcf832), TOBN(0xfbadf8b7, 0xa0010137),
-           TOBN(0xc69b4089, 0xb3ba8aa7), TOBN(0xfac4bacd, 0xe687ce85)}},
-         {{TOBN(0x9164088d, 0x977eab40), TOBN(0x51f4c5b6, 0x2760b390),
-           TOBN(0xd238238f, 0x340dd553), TOBN(0x358566c3, 0xdb1d31c9)},
-          {TOBN(0x3a5ad69e, 0x5068f5ff), TOBN(0xf31435fc, 0xdaff6b06),
-           TOBN(0xae549a5b, 0xd6debff0), TOBN(0x59e5f0b7, 0x75e01331)}},
-         {{TOBN(0x5d492fb8, 0x98559acf), TOBN(0x96018c2e, 0x4db79b50),
-           TOBN(0x55f4a48f, 0x609f66aa), TOBN(0x1943b3af, 0x4900a14f)},
-          {TOBN(0xc22496df, 0x15a40d39), TOBN(0xb2a44684, 0x4c20f7c5),
-           TOBN(0x76a35afa, 0x3b98404c), TOBN(0xbec75725, 0xff5d1b77)}},
-         {{TOBN(0xb67aa163, 0xbea06444), TOBN(0x27e95bb2, 0xf724b6f2),
-           TOBN(0x3c20e3e9, 0xd238c8ab), TOBN(0x1213754e, 0xddd6ae17)},
-          {TOBN(0x8c431020, 0x716e0f74), TOBN(0x6679c82e, 0xffc095c2),
-           TOBN(0x2eb3adf4, 0xd0ac2932), TOBN(0x2cc970d3, 0x01bb7a76)}},
-         {{TOBN(0x70c71f2f, 0x740f0e66), TOBN(0x545c616b, 0x2b6b23cc),
-           TOBN(0x4528cfcb, 0xb40a8bd7), TOBN(0xff839633, 0x2ab27722)},
-          {TOBN(0x049127d9, 0x025ac99a), TOBN(0xd314d4a0, 0x2b63e33b),
-           TOBN(0xc8c310e7, 0x28d84519), TOBN(0x0fcb8983, 0xb3bc84ba)}},
-         {{TOBN(0x2cc52261, 0x38634818), TOBN(0x501814f4, 0xb44c2e0b),
-           TOBN(0xf7e181aa, 0x54dfdba3), TOBN(0xcfd58ff0, 0xe759718c)},
-          {TOBN(0xf90cdb14, 0xd3b507a8), TOBN(0x57bd478e, 0xc50bdad8),
-           TOBN(0x29c197e2, 0x50e5f9aa), TOBN(0x4db6eef8, 0xe40bc855)}},
-         {{TOBN(0x2cc8f21a, 0xd1fc0654), TOBN(0xc71cc963, 0x81269d73),
-           TOBN(0xecfbb204, 0x077f49f9), TOBN(0xdde92571, 0xca56b793)},
-          {TOBN(0x9abed6a3, 0xf97ad8f7), TOBN(0xe6c19d3f, 0x924de3bd),
-           TOBN(0x8dce92f4, 0xa140a800), TOBN(0x85f44d1e, 0x1337af07)}},
-         {{TOBN(0x5953c08b, 0x09d64c52), TOBN(0xa1b5e49f, 0xf5df9749),
-           TOBN(0x336a8fb8, 0x52735f7d), TOBN(0xb332b6db, 0x9add676b)},
-          {TOBN(0x558b88a0, 0xb4511aa4), TOBN(0x09788752, 0xdbd5cc55),
-           TOBN(0x16b43b9c, 0xd8cd52bd), TOBN(0x7f0bc5a0, 0xc2a2696b)}},
-         {{TOBN(0x146e12d4, 0xc11f61ef), TOBN(0x9ce10754, 0x3a83e79e),
-           TOBN(0x08ec73d9, 0x6cbfca15), TOBN(0x09ff29ad, 0x5b49653f)},
-          {TOBN(0xe31b72bd, 0xe7da946e), TOBN(0xebf9eb3b, 0xee80a4f2),
-           TOBN(0xd1aabd08, 0x17598ce4), TOBN(0x18b5fef4, 0x53f37e80)}},
-         {{TOBN(0xd5d5cdd3, 0x5958cd79), TOBN(0x3580a1b5, 0x1d373114),
-           TOBN(0xa36e4c91, 0xfa935726), TOBN(0xa38c534d, 0xef20d760)},
-          {TOBN(0x7088e40a, 0x2ff5845b), TOBN(0xe5bb40bd, 0xbd78177f),
-           TOBN(0x4f06a7a8, 0x857f9920), TOBN(0xe3cc3e50, 0xe968f05d)}},
-         {{TOBN(0x1d68b7fe, 0xe5682d26), TOBN(0x5206f76f, 0xaec7f87c),
-           TOBN(0x41110530, 0x041951ab), TOBN(0x58ec52c1, 0xd4b5a71a)},
-          {TOBN(0xf3488f99, 0x0f75cf9a), TOBN(0xf411951f, 0xba82d0d5),
-           TOBN(0x27ee75be, 0x618895ab), TOBN(0xeae060d4, 0x6d8aab14)}},
-         {{TOBN(0x9ae1df73, 0x7fb54dc2), TOBN(0x1f3e391b, 0x25963649),
-           TOBN(0x242ec32a, 0xfe055081), TOBN(0x5bd450ef, 0x8491c9bd)},
-          {TOBN(0x367efc67, 0x981eb389), TOBN(0xed7e1928, 0x3a0550d5),
-           TOBN(0x362e776b, 0xab3ce75c), TOBN(0xe890e308, 0x1f24c523)}},
-         {{TOBN(0xb961b682, 0xfeccef76), TOBN(0x8b8e11f5, 0x8bba6d92),
-           TOBN(0x8f2ccc4c, 0x2b2375c4), TOBN(0x0d7f7a52, 0xe2f86cfa)},
-          {TOBN(0xfd94d30a, 0x9efe5633), TOBN(0x2d8d246b, 0x5451f934),
-           TOBN(0x2234c6e3, 0x244e6a00), TOBN(0xde2b5b0d, 0xddec8c50)}},
-         {{TOBN(0x2ce53c5a, 0xbf776f5b), TOBN(0x6f724071, 0x60357b05),
-           TOBN(0xb2593717, 0x71bf3f7a), TOBN(0x87d2501c, 0x440c4a9f)},
-          {TOBN(0x440552e1, 0x87b05340), TOBN(0xb7bf7cc8, 0x21624c32),
-           TOBN(0x4155a6ce, 0x22facddb), TOBN(0x5a4228cb, 0x889837ef)}},
-         {{TOBN(0xef87d6d6, 0xfd4fd671), TOBN(0xa233687e, 0xc2daa10e),
-           TOBN(0x75622244, 0x03c0eb96), TOBN(0x7632d184, 0x8bf19be6)},
-          {TOBN(0x05d0f8e9, 0x40735ff4), TOBN(0x3a3e6e13, 0xc00931f1),
-           TOBN(0x31ccde6a, 0xdafe3f18), TOBN(0xf381366a, 0xcfe51207)}},
-         {{TOBN(0x24c222a9, 0x60167d92), TOBN(0x62f9d6f8, 0x7529f18c),
-           TOBN(0x412397c0, 0x0353b114), TOBN(0x334d89dc, 0xef808043)},
-          {TOBN(0xd9ec63ba, 0x2a4383ce), TOBN(0xcec8e937, 0x5cf92ba0),
-           TOBN(0xfb8b4288, 0xc8be74c0), TOBN(0x67d6912f, 0x105d4391)}},
-         {{TOBN(0x7b996c46, 0x1b913149), TOBN(0x36aae2ef, 0x3a4e02da),
-           TOBN(0xb68aa003, 0x972de594), TOBN(0x284ec70d, 0x4ec6d545)},
-          {TOBN(0xf3d2b2d0, 0x61391d54), TOBN(0x69c5d5d6, 0xfe114e92),
-           TOBN(0xbe0f00b5, 0xb4482dff), TOBN(0xe1596fa5, 0xf5bf33c5)}},
-         {{TOBN(0x10595b56, 0x96a71cba), TOBN(0x944938b2, 0xfdcadeb7),
-           TOBN(0xa282da4c, 0xfccd8471), TOBN(0x98ec05f3, 0x0d37bfe1)},
-          {TOBN(0xe171ce1b, 0x0698304a), TOBN(0x2d691444, 0x21bdf79b),
-           TOBN(0xd0cd3b74, 0x1b21dec1), TOBN(0x712ecd8b, 0x16a15f71)}},
-         {{TOBN(0x8d4c00a7, 0x00fd56e1), TOBN(0x02ec9692, 0xf9527c18),
-           TOBN(0x21c44937, 0x4a3e42e1), TOBN(0x9176fbab, 0x1392ae0a)},
-          {TOBN(0x8726f1ba, 0x44b7b618), TOBN(0xb4d7aae9, 0xf1de491c),
-           TOBN(0xf91df7b9, 0x07b582c0), TOBN(0x7e116c30, 0xef60aa3a)}},
-         {{TOBN(0x99270f81, 0x466265d7), TOBN(0xb15b6fe2, 0x4df7adf0),
-           TOBN(0xfe33b2d3, 0xf9738f7f), TOBN(0x48553ab9, 0xd6d70f95)},
-          {TOBN(0x2cc72ac8, 0xc21e94db), TOBN(0x795ac38d, 0xbdc0bbee),
-           TOBN(0x0a1be449, 0x2e40478f), TOBN(0x81bd3394, 0x052bde55)}},
-         {{TOBN(0x63c8dbe9, 0x56b3c4f2), TOBN(0x017a99cf, 0x904177cc),
-           TOBN(0x947bbddb, 0x4d010fc1), TOBN(0xacf9b00b, 0xbb2c9b21)},
-          {TOBN(0x2970bc8d, 0x47173611), TOBN(0x1a4cbe08, 0xac7d756f),
-           TOBN(0x06d9f4aa, 0x67d541a2), TOBN(0xa3e8b689, 0x59c2cf44)}},
-         {{TOBN(0xaad066da, 0x4d88f1dd), TOBN(0xc604f165, 0x7ad35dea),
-           TOBN(0x7edc0720, 0x4478ca67), TOBN(0xa10dfae0, 0xba02ce06)},
-          {TOBN(0xeceb1c76, 0xaf36f4e4), TOBN(0x994b2292, 0xaf3f8f48),
-           TOBN(0xbf9ed77b, 0x77c8a68c), TOBN(0x74f544ea, 0x51744c9d)}},
-         {{TOBN(0x82d05bb9, 0x8113a757), TOBN(0x4ef2d2b4, 0x8a9885e4),
-           TOBN(0x1e332be5, 0x1aa7865f), TOBN(0x22b76b18, 0x290d1a52)},
-          {TOBN(0x308a2310, 0x44351683), TOBN(0x9d861896, 0xa3f22840),
-           TOBN(0x5959ddcd, 0x841ed947), TOBN(0x0def0c94, 0x154b73bf)}},
-         {{TOBN(0xf0105417, 0x4c7c15e0), TOBN(0x539bfb02, 0x3a277c32),
-           TOBN(0xe699268e, 0xf9dccf5f), TOBN(0x9f5796a5, 0x0247a3bd)},
-          {TOBN(0x8b839de8, 0x4f157269), TOBN(0xc825c1e5, 0x7a30196b),
-           TOBN(0x6ef0aabc, 0xdc8a5a91), TOBN(0xf4a8ce6c, 0x498b7fe6)}},
-         {{TOBN(0x1cce35a7, 0x70cbac78), TOBN(0x83488e9b, 0xf6b23958),
-           TOBN(0x0341a070, 0xd76cb011), TOBN(0xda6c9d06, 0xae1b2658)},
-          {TOBN(0xb701fb30, 0xdd648c52), TOBN(0x994ca02c, 0x52fb9fd1),
-           TOBN(0x06933117, 0x6f563086), TOBN(0x3d2b8100, 0x17856bab)}},
-         {{TOBN(0xe89f48c8, 0x5963a46e), TOBN(0x658ab875, 0xa99e61c7),
-           TOBN(0x6e296f87, 0x4b8517b4), TOBN(0x36c4fcdc, 0xfc1bc656)},
-          {TOBN(0xde5227a1, 0xa3906def), TOBN(0x9fe95f57, 0x62418945),
-           TOBN(0x20c91e81, 0xfdd96cde), TOBN(0x5adbe47e, 0xda4480de)}},
-         {{TOBN(0xa009370f, 0x396de2b6), TOBN(0x98583d4b, 0xf0ecc7bd),
-           TOBN(0xf44f6b57, 0xe51d0672), TOBN(0x03d6b078, 0x556b1984)},
-          {TOBN(0x27dbdd93, 0xb0b64912), TOBN(0x9b3a3434, 0x15687b09),
-           TOBN(0x0dba6461, 0x51ec20a9), TOBN(0xec93db7f, 0xff28187c)}},
-         {{TOBN(0x00ff8c24, 0x66e48bdd), TOBN(0x2514f2f9, 0x11ccd78e),
-           TOBN(0xeba11f4f, 0xe1250603), TOBN(0x8a22cd41, 0x243fa156)},
-          {TOBN(0xa4e58df4, 0xb283e4c6), TOBN(0x78c29859, 0x8b39783f),
-           TOBN(0x5235aee2, 0xa5259809), TOBN(0xc16284b5, 0x0e0227dd)}},
-         {{TOBN(0xa5f57916, 0x1338830d), TOBN(0x6d4b8a6b, 0xd2123fca),
-           TOBN(0x236ea68a, 0xf9c546f8), TOBN(0xc1d36873, 0xfa608d36)},
-          {TOBN(0xcd76e495, 0x8d436d13), TOBN(0xd4d9c221, 0x8fb080af),
-           TOBN(0x665c1728, 0xe8ad3fb5), TOBN(0xcf1ebe4d, 0xb3d572e0)}},
-         {{TOBN(0xa7a8746a, 0x584c5e20), TOBN(0x267e4ea1, 0xb9dc7035),
-           TOBN(0x593a15cf, 0xb9548c9b), TOBN(0x5e6e2135, 0x4bd012f3)},
-          {TOBN(0xdf31cc6a, 0x8c8f936e), TOBN(0x8af84d04, 0xb5c241dc),
-           TOBN(0x63990a6f, 0x345efb86), TOBN(0x6fef4e61, 0xb9b962cb)}}},
-        {{{TOBN(0xf6368f09, 0x25722608), TOBN(0x131260db, 0x131cf5c6),
-           TOBN(0x40eb353b, 0xfab4f7ac), TOBN(0x85c78880, 0x37eee829)},
-          {TOBN(0x4c1581ff, 0xc3bdf24e), TOBN(0x5bff75cb, 0xf5c3c5a8),
-           TOBN(0x35e8c83f, 0xa14e6f40), TOBN(0xb81d1c0f, 0x0295e0ca)}},
-         {{TOBN(0xfcde7cc8, 0xf43a730f), TOBN(0xe89b6f3c, 0x33ab590e),
-           TOBN(0xc823f529, 0xad03240b), TOBN(0x82b79afe, 0x98bea5db)},
-          {TOBN(0x568f2856, 0x962fe5de), TOBN(0x0c590adb, 0x60c591f3),
-           TOBN(0x1fc74a14, 0x4a28a858), TOBN(0x3b662498, 0xb3203f4c)}},
-         {{TOBN(0x91e3cf0d, 0x6c39765a), TOBN(0xa2db3acd, 0xac3cca0b),
-           TOBN(0x288f2f08, 0xcb953b50), TOBN(0x2414582c, 0xcf43cf1a)},
-          {TOBN(0x8dec8bbc, 0x60eee9a8), TOBN(0x54c79f02, 0x729aa042),
-           TOBN(0xd81cd5ec, 0x6532f5d5), TOBN(0xa672303a, 0xcf82e15f)}},
-         {{TOBN(0x376aafa8, 0x719c0563), TOBN(0xcd8ad2dc, 0xbc5fc79f),
-           TOBN(0x303fdb9f, 0xcb750cd3), TOBN(0x14ff052f, 0x4418b08e)},
-          {TOBN(0xf75084cf, 0x3e2d6520), TOBN(0x7ebdf0f8, 0x144ed509),
-           TOBN(0xf43bf0f2, 0xd3f25b98), TOBN(0x86ad71cf, 0xa354d837)}},
-         {{TOBN(0xb827fe92, 0x26f43572), TOBN(0xdfd3ab5b, 0x5d824758),
-           TOBN(0x315dd23a, 0x539094c1), TOBN(0x85c0e37a, 0x66623d68)},
-          {TOBN(0x575c7972, 0x7be19ae0), TOBN(0x616a3396, 0xdf0d36b5),
-           TOBN(0xa1ebb3c8, 0x26b1ff7e), TOBN(0x635b9485, 0x140ad453)}},
-         {{TOBN(0x92bf3cda, 0xda430c0b), TOBN(0x4702850e, 0x3a96dac6),
-           TOBN(0xc91cf0a5, 0x15ac326a), TOBN(0x95de4f49, 0xab8c25e4)},
-          {TOBN(0xb01bad09, 0xe265c17c), TOBN(0x24e45464, 0x087b3881),
-           TOBN(0xd43e583c, 0xe1fac5ca), TOBN(0xe17cb318, 0x6ead97a6)}},
-         {{TOBN(0x6cc39243, 0x74dcec46), TOBN(0x33cfc02d, 0x54c2b73f),
-           TOBN(0x82917844, 0xf26cd99c), TOBN(0x8819dd95, 0xd1773f89)},
-          {TOBN(0x09572aa6, 0x0871f427), TOBN(0x8e0cf365, 0xf6f01c34),
-           TOBN(0x7fa52988, 0xbff1f5af), TOBN(0x4eb357ea, 0xe75e8e50)}},
-         {{TOBN(0xd9d0c8c4, 0x868af75d), TOBN(0xd7325cff, 0x45c8c7ea),
-           TOBN(0xab471996, 0xcc81ecb0), TOBN(0xff5d55f3, 0x611824ed)},
-          {TOBN(0xbe314541, 0x1977a0ee), TOBN(0x5085c4c5, 0x722038c6),
-           TOBN(0x2d5335bf, 0xf94bb495), TOBN(0x894ad8a6, 0xc8e2a082)}},
-         {{TOBN(0x5c3e2341, 0xada35438), TOBN(0xf4a9fc89, 0x049b8c4e),
-           TOBN(0xbeeb355a, 0x9f17cf34), TOBN(0x3f311e0e, 0x6c91fe10)},
-          {TOBN(0xc2d20038, 0x92ab9891), TOBN(0x257bdcc1, 0x3e8ce9a9),
-           TOBN(0x1b2d9789, 0x88c53bee), TOBN(0x927ce89a, 0xcdba143a)}},
-         {{TOBN(0xb0a32cca, 0x523db280), TOBN(0x5c889f8a, 0x50d43783),
-           TOBN(0x503e04b3, 0x4897d16f), TOBN(0x8cdb6e78, 0x08f5f2e8)},
-          {TOBN(0x6ab91cf0, 0x179c8e74), TOBN(0xd8874e52, 0x48211d60),
-           TOBN(0xf948d4d5, 0xea851200), TOBN(0x4076d41e, 0xe6f9840a)}},
-         {{TOBN(0xc20e263c, 0x47b517ea), TOBN(0x79a448fd, 0x30685e5e),
-           TOBN(0xe55f6f78, 0xf90631a0), TOBN(0x88a790b1, 0xa79e6346)},
-          {TOBN(0x62160c7d, 0x80969fe8), TOBN(0x54f92fd4, 0x41491bb9),
-           TOBN(0xa6645c23, 0x5c957526), TOBN(0xf44cc5ae, 0xbea3ce7b)}},
-         {{TOBN(0xf7628327, 0x8b1e68b7), TOBN(0xc731ad7a, 0x303f29d3),
-           TOBN(0xfe5a9ca9, 0x57d03ecb), TOBN(0x96c0d50c, 0x41bc97a7)},
-          {TOBN(0xc4669fe7, 0x9b4f7f24), TOBN(0xfdd781d8, 0x3d9967ef),
-           TOBN(0x7892c7c3, 0x5d2c208d), TOBN(0x8bf64f7c, 0xae545cb3)}},
-         {{TOBN(0xc01f862c, 0x467be912), TOBN(0xf4c85ee9, 0xc73d30cc),
-           TOBN(0x1fa6f4be, 0x6ab83ec7), TOBN(0xa07a3c1c, 0x4e3e3cf9)},
-          {TOBN(0x87f8ef45, 0x0c00beb3), TOBN(0x30e2c2b3, 0x000d4c3e),
-           TOBN(0x1aa00b94, 0xfe08bf5b), TOBN(0x32c133aa, 0x9224ef52)}},
-         {{TOBN(0x38df16bb, 0x32e5685d), TOBN(0x68a9e069, 0x58e6f544),
-           TOBN(0x495aaff7, 0xcdc5ebc6), TOBN(0xf894a645, 0x378b135f)},
-          {TOBN(0xf316350a, 0x09e27ecf), TOBN(0xeced201e, 0x58f7179d),
-           TOBN(0x2eec273c, 0xe97861ba), TOBN(0x47ec2cae, 0xd693be2e)}},
-         {{TOBN(0xfa4c97c4, 0xf68367ce), TOBN(0xe4f47d0b, 0xbe5a5755),
-           TOBN(0x17de815d, 0xb298a979), TOBN(0xd7eca659, 0xc177dc7d)},
-          {TOBN(0x20fdbb71, 0x49ded0a3), TOBN(0x4cb2aad4, 0xfb34d3c5),
-           TOBN(0x2cf31d28, 0x60858a33), TOBN(0x3b6873ef, 0xa24aa40f)}},
-         {{TOBN(0x540234b2, 0x2c11bb37), TOBN(0x2d0366dd, 0xed4c74a3),
-           TOBN(0xf9a968da, 0xeec5f25d), TOBN(0x36601068, 0x67b63142)},
-          {TOBN(0x07cd6d2c, 0x68d7b6d4), TOBN(0xa8f74f09, 0x0c842942),
-           TOBN(0xe2751404, 0x7768b1ee), TOBN(0x4b5f7e89, 0xfe62aee4)}},
-         {{TOBN(0xc6a77177, 0x89070d26), TOBN(0xa1f28e4e, 0xdd1c8bc7),
-           TOBN(0xea5f4f06, 0x469e1f17), TOBN(0x78fc242a, 0xfbdb78e0)},
-          {TOBN(0xc9c7c592, 0x8b0588f1), TOBN(0xb6b7a0fd, 0x1535921e),
-           TOBN(0xcc5bdb91, 0xbde5ae35), TOBN(0xb42c485e, 0x12ff1864)}},
-         {{TOBN(0xa1113e13, 0xdbab98aa), TOBN(0xde9d469b, 0xa17b1024),
-           TOBN(0x23f48b37, 0xc0462d3a), TOBN(0x3752e537, 0x7c5c078d)},
-          {TOBN(0xe3a86add, 0x15544eb9), TOBN(0xf013aea7, 0x80fba279),
-           TOBN(0x8b5bb76c, 0xf22001b5), TOBN(0xe617ba14, 0xf02891ab)}},
-         {{TOBN(0xd39182a6, 0x936219d3), TOBN(0x5ce1f194, 0xae51cb19),
-           TOBN(0xc78f8598, 0xbf07a74c), TOBN(0x6d7158f2, 0x22cbf1bc)},
-          {TOBN(0x3b846b21, 0xe300ce18), TOBN(0x35fba630, 0x2d11275d),
-           TOBN(0x5fe25c36, 0xa0239b9b), TOBN(0xd8beb35d, 0xdf05d940)}},
-         {{TOBN(0x4db02bb0, 0x1f7e320d), TOBN(0x0641c364, 0x6da320ea),
-           TOBN(0x6d95fa5d, 0x821389a3), TOBN(0x92699748, 0x8fcd8e3d)},
-          {TOBN(0x316fef17, 0xceb6c143), TOBN(0x67fcb841, 0xd933762b),
-           TOBN(0xbb837e35, 0x118b17f8), TOBN(0x4b92552f, 0x9fd24821)}},
-         {{TOBN(0xae6bc70e, 0x46aca793), TOBN(0x1cf0b0e4, 0xe579311b),
-           TOBN(0x8dc631be, 0x5802f716), TOBN(0x099bdc6f, 0xbddbee4d)},
-          {TOBN(0xcc352bb2, 0x0caf8b05), TOBN(0xf74d505a, 0x72d63df2),
-           TOBN(0xb9876d4b, 0x91c4f408), TOBN(0x1ce18473, 0x9e229b2d)}},
-         {{TOBN(0x49507597, 0x83abdb4a), TOBN(0x850fbcb6, 0xdee84b18),
-           TOBN(0x6325236e, 0x609e67dc), TOBN(0x04d831d9, 0x9336c6d8)},
-          {TOBN(0x8deaae3b, 0xfa12d45d), TOBN(0xe425f8ce, 0x4746e246),
-           TOBN(0x8004c175, 0x24f5f31e), TOBN(0xaca16d8f, 0xad62c3b7)}},
-         {{TOBN(0x0dc15a6a, 0x9152f934), TOBN(0xf1235e5d, 0xed0e12c1),
-           TOBN(0xc33c06ec, 0xda477dac), TOBN(0x76be8732, 0xb2ea0006)},
-          {TOBN(0xcf3f7831, 0x0c0cd313), TOBN(0x3c524553, 0xa614260d),
-           TOBN(0x31a756f8, 0xcab22d15), TOBN(0x03ee10d1, 0x77827a20)}},
-         {{TOBN(0xd1e059b2, 0x1994ef20), TOBN(0x2a653b69, 0x638ae318),
-           TOBN(0x70d5eb58, 0x2f699010), TOBN(0x279739f7, 0x09f5f84a)},
-          {TOBN(0x5da4663c, 0x8b799336), TOBN(0xfdfdf14d, 0x203c37eb),
-           TOBN(0x32d8a9dc, 0xa1dbfb2d), TOBN(0xab40cff0, 0x77d48f9b)}},
-         {{TOBN(0xc018b383, 0xd20b42d5), TOBN(0xf9a810ef, 0x9f78845f),
-           TOBN(0x40af3753, 0xbdba9df0), TOBN(0xb90bdcfc, 0x131dfdf9)},
-          {TOBN(0x18720591, 0xf01ab782), TOBN(0xc823f211, 0x6af12a88),
-           TOBN(0xa51b80f3, 0x0dc14401), TOBN(0xde248f77, 0xfb2dfbe3)}},
-         {{TOBN(0xef5a44e5, 0x0cafe751), TOBN(0x73997c9c, 0xd4dcd221),
-           TOBN(0x32fd86d1, 0xde854024), TOBN(0xd5b53adc, 0xa09b84bb)},
-          {TOBN(0x008d7a11, 0xdcedd8d1), TOBN(0x406bd1c8, 0x74b32c84),
-           TOBN(0x5d4472ff, 0x05dde8b1), TOBN(0x2e25f2cd, 0xfce2b32f)}},
-         {{TOBN(0xbec0dd5e, 0x29dfc254), TOBN(0x4455fcf6, 0x2b98b267),
-           TOBN(0x0b4d43a5, 0xc72df2ad), TOBN(0xea70e6be, 0x48a75397)},
-          {TOBN(0x2aad6169, 0x5820f3bf), TOBN(0xf410d2dd, 0x9e37f68f),
-           TOBN(0x70fb7dba, 0x7be5ac83), TOBN(0x636bb645, 0x36ec3eec)}},
-         {{TOBN(0x27104ea3, 0x9754e21c), TOBN(0xbc87a3e6, 0x8d63c373),
-           TOBN(0x483351d7, 0x4109db9a), TOBN(0x0fa724e3, 0x60134da7)},
-          {TOBN(0x9ff44c29, 0xb0720b16), TOBN(0x2dd0cf13, 0x06aceead),
-           TOBN(0x5942758c, 0xe26929a6), TOBN(0x96c5db92, 0xb766a92b)}},
-         {{TOBN(0xcec7d4c0, 0x5f18395e), TOBN(0xd3f22744, 0x1f80d032),
-           TOBN(0x7a68b37a, 0xcb86075b), TOBN(0x074764dd, 0xafef92db)},
-          {TOBN(0xded1e950, 0x7bc7f389), TOBN(0xc580c850, 0xb9756460),
-           TOBN(0xaeeec2a4, 0x7da48157), TOBN(0x3f0b4e7f, 0x82c587b3)}},
-         {{TOBN(0x231c6de8, 0xa9f19c53), TOBN(0x5717bd73, 0x6974e34e),
-           TOBN(0xd9e1d216, 0xf1508fa9), TOBN(0x9f112361, 0xdadaa124)},
-          {TOBN(0x80145e31, 0x823b7348), TOBN(0x4dd8f0d5, 0xac634069),
-           TOBN(0xe3d82fc7, 0x2297c258), TOBN(0x276fcfee, 0x9cee7431)}},
-         {{TOBN(0x8eb61b5e, 0x2bc0aea9), TOBN(0x4f668fd5, 0xde329431),
-           TOBN(0x03a32ab1, 0x38e4b87e), TOBN(0xe1374517, 0x73d0ef0b)},
-          {TOBN(0x1a46f7e6, 0x853ac983), TOBN(0xc3bdf42e, 0x68e78a57),
-           TOBN(0xacf20785, 0x2ea96dd1), TOBN(0xa10649b9, 0xf1638460)}},
-         {{TOBN(0xf2369f0b, 0x879fbbed), TOBN(0x0ff0ae86, 0xda9d1869),
-           TOBN(0x5251d759, 0x56766f45), TOBN(0x4984d8c0, 0x2be8d0fc)},
-          {TOBN(0x7ecc95a6, 0xd21008f0), TOBN(0x29bd54a0, 0x3a1a1c49),
-           TOBN(0xab9828c5, 0xd26c50f3), TOBN(0x32c0087c, 0x51d0d251)}},
-         {{TOBN(0x9bac3ce6, 0x0c1cdb26), TOBN(0xcd94d947, 0x557ca205),
-           TOBN(0x1b1bd598, 0x9db1fdcd), TOBN(0x0eda0108, 0xa3d8b149)},
-          {TOBN(0x95066610, 0x56152fcc), TOBN(0xc2f037e6, 0xe7192b33),
-           TOBN(0xdeffb41a, 0xc92e05a4), TOBN(0x1105f6c2, 0xc2f6c62e)}},
-         {{TOBN(0x68e73500, 0x8733913c), TOBN(0xcce86163, 0x3f3adc40),
-           TOBN(0xf407a942, 0x38a278e9), TOBN(0xd13c1b9d, 0x2ab21292)},
-          {TOBN(0x93ed7ec7, 0x1c74cf5c), TOBN(0x8887dc48, 0xf1a4c1b4),
-           TOBN(0x3830ff30, 0x4b3a11f1), TOBN(0x358c5a3c, 0x58937cb6)}},
-         {{TOBN(0x027dc404, 0x89022829), TOBN(0x40e93977, 0x3b798f79),
-           TOBN(0x90ad3337, 0x38be6ead), TOBN(0x9c23f6bc, 0xf34c0a5d)},
-          {TOBN(0xd1711a35, 0xfbffd8bb), TOBN(0x60fcfb49, 0x1949d3dd),
-           TOBN(0x09c8ef4b, 0x7825d93a), TOBN(0x24233cff, 0xa0a8c968)}},
-         {{TOBN(0x67ade46c, 0xe6d982af), TOBN(0xebb6bf3e, 0xe7544d7c),
-           TOBN(0xd6b9ba76, 0x3d8bd087), TOBN(0x46fe382d, 0x4dc61280)},
-          {TOBN(0xbd39a7e8, 0xb5bdbd75), TOBN(0xab381331, 0xb8f228fe),
-           TOBN(0x0709a77c, 0xce1c4300), TOBN(0x6a247e56, 0xf337ceac)}},
-         {{TOBN(0x8f34f21b, 0x636288be), TOBN(0x9dfdca74, 0xc8a7c305),
-           TOBN(0x6decfd1b, 0xea919e04), TOBN(0xcdf2688d, 0x8e1991f8)},
-          {TOBN(0xe607df44, 0xd0f8a67e), TOBN(0xd985df4b, 0x0b58d010),
-           TOBN(0x57f834c5, 0x0c24f8f4), TOBN(0xe976ef56, 0xa0bf01ae)}},
-         {{TOBN(0x536395ac, 0xa1c32373), TOBN(0x351027aa, 0x734c0a13),
-           TOBN(0xd2f1b5d6, 0x5e6bd5bc), TOBN(0x2b539e24, 0x223debed)},
-          {TOBN(0xd4994cec, 0x0eaa1d71), TOBN(0x2a83381d, 0x661dcf65),
-           TOBN(0x5f1aed2f, 0x7b54c740), TOBN(0x0bea3fa5, 0xd6dda5ee)}},
-         {{TOBN(0x9d4fb684, 0x36cc6134), TOBN(0x8eb9bbf3, 0xc0a443dd),
-           TOBN(0xfc500e2e, 0x383b7d2a), TOBN(0x7aad621c, 0x5b775257)},
-          {TOBN(0x69284d74, 0x0a8f7cc0), TOBN(0xe820c2ce, 0x07562d65),
-           TOBN(0xbf9531b9, 0x499758ee), TOBN(0x73e95ca5, 0x6ee0cc2d)}},
-         {{TOBN(0xf61790ab, 0xfbaf50a5), TOBN(0xdf55e76b, 0x684e0750),
-           TOBN(0xec516da7, 0xf176b005), TOBN(0x575553bb, 0x7a2dddc7)},
-          {TOBN(0x37c87ca3, 0x553afa73), TOBN(0x315f3ffc, 0x4d55c251),
-           TOBN(0xe846442a, 0xaf3e5d35), TOBN(0x61b91149, 0x6495ff28)}},
-         {{TOBN(0x23cc95d3, 0xfa326dc3), TOBN(0x1df4da1f, 0x18fc2cea),
-           TOBN(0x24bf9adc, 0xd0a37d59), TOBN(0xb6710053, 0x320d6e1e)},
-          {TOBN(0x96f9667e, 0x618344d1), TOBN(0xcc7ce042, 0xa06445af),
-           TOBN(0xa02d8514, 0xd68dbc3a), TOBN(0x4ea109e4, 0x280b5a5b)}},
-         {{TOBN(0x5741a7ac, 0xb40961bf), TOBN(0x4ada5937, 0x6aa56bfa),
-           TOBN(0x7feb9145, 0x02b765d1), TOBN(0x561e97be, 0xe6ad1582)},
-          {TOBN(0xbbc4a5b6, 0xda3982f5), TOBN(0x0c2659ed, 0xb546f468),
-           TOBN(0xb8e7e6aa, 0x59612d20), TOBN(0xd83dfe20, 0xac19e8e0)}},
-         {{TOBN(0x8530c45f, 0xb835398c), TOBN(0x6106a8bf, 0xb38a41c2),
-           TOBN(0x21e8f9a6, 0x35f5dcdb), TOBN(0x39707137, 0xcae498ed)},
-          {TOBN(0x70c23834, 0xd8249f00), TOBN(0x9f14b58f, 0xab2537a0),
-           TOBN(0xd043c365, 0x5f61c0c2), TOBN(0xdc5926d6, 0x09a194a7)}},
-         {{TOBN(0xddec0339, 0x8e77738a), TOBN(0xd07a63ef, 0xfba46426),
-           TOBN(0x2e58e79c, 0xee7f6e86), TOBN(0xe59b0459, 0xff32d241)},
-          {TOBN(0xc5ec84e5, 0x20fa0338), TOBN(0x97939ac8, 0xeaff5ace),
-           TOBN(0x0310a4e3, 0xb4a38313), TOBN(0x9115fba2, 0x8f9d9885)}},
-         {{TOBN(0x8dd710c2, 0x5fadf8c3), TOBN(0x66be38a2, 0xce19c0e2),
-           TOBN(0xd42a279c, 0x4cfe5022), TOBN(0x597bb530, 0x0e24e1b8)},
-          {TOBN(0x3cde86b7, 0xc153ca7f), TOBN(0xa8d30fb3, 0x707d63bd),
-           TOBN(0xac905f92, 0xbd60d21e), TOBN(0x98e7ffb6, 0x7b9a54ab)}},
-         {{TOBN(0xd7147df8, 0xe9726a30), TOBN(0xb5e216ff, 0xafce3533),
-           TOBN(0xb550b799, 0x2ff1ec40), TOBN(0x6b613b87, 0xa1e953fd)},
-          {TOBN(0x87b88dba, 0x792d5610), TOBN(0x2ee1270a, 0xa190fbe1),
-           TOBN(0x02f4e2dc, 0x2ef581da), TOBN(0x016530e4, 0xeff82a95)}},
-         {{TOBN(0xcbb93dfd, 0x8fd6ee89), TOBN(0x16d3d986, 0x46848fff),
-           TOBN(0x600eff24, 0x1da47adf), TOBN(0x1b9754a0, 0x0ad47a71)},
-          {TOBN(0x8f9266df, 0x70c33b98), TOBN(0xaadc87ae, 0xdf34186e),
-           TOBN(0x0d2ce8e1, 0x4ad24132), TOBN(0x8a47cbfc, 0x19946eba)}},
-         {{TOBN(0x47feeb66, 0x62b5f3af), TOBN(0xcefab561, 0x0abb3734),
-           TOBN(0x449de60e, 0x19f35cb1), TOBN(0x39f8db14, 0x157f0eb9)},
-          {TOBN(0xffaecc5b, 0x3c61bfd6), TOBN(0xa5a4d41d, 0x41216703),
-           TOBN(0x7f8fabed, 0x224e1cc2), TOBN(0x0d5a8186, 0x871ad953)}},
-         {{TOBN(0xf10774f7, 0xd22da9a9), TOBN(0x45b8a678, 0xcc8a9b0d),
-           TOBN(0xd9c2e722, 0xbdc32cff), TOBN(0xbf71b5f5, 0x337202a5)},
-          {TOBN(0x95c57f2f, 0x69fc4db9), TOBN(0xb6dad34c, 0x765d01e1),
-           TOBN(0x7e0bd13f, 0xcb904635), TOBN(0x61751253, 0x763a588c)}},
-         {{TOBN(0xd85c2997, 0x81af2c2d), TOBN(0xc0f7d9c4, 0x81b9d7da),
-           TOBN(0x838a34ae, 0x08533e8d), TOBN(0x15c4cb08, 0x311d8311)},
-          {TOBN(0x97f83285, 0x8e121e14), TOBN(0xeea7dc1e, 0x85000a5f),
-           TOBN(0x0c6059b6, 0x5d256274), TOBN(0xec9beace, 0xb95075c0)}},
-         {{TOBN(0x173daad7, 0x1df97828), TOBN(0xbf851cb5, 0xa8937877),
-           TOBN(0xb083c594, 0x01646f3c), TOBN(0x3bad30cf, 0x50c6d352)},
-          {TOBN(0xfeb2b202, 0x496bbcea), TOBN(0x3cf9fd4f, 0x18a1e8ba),
-           TOBN(0xd26de7ff, 0x1c066029), TOBN(0x39c81e9e, 0x4e9ed4f8)}},
-         {{TOBN(0xd8be0cb9, 0x7b390d35), TOBN(0x01df2bbd, 0x964aab27),
-           TOBN(0x3e8c1a65, 0xc3ef64f8), TOBN(0x567291d1, 0x716ed1dd)},
-          {TOBN(0x95499c6c, 0x5f5406d3), TOBN(0x71fdda39, 0x5ba8e23f),
-           TOBN(0xcfeb320e, 0xd5096ece), TOBN(0xbe7ba92b, 0xca66dd16)}},
-         {{TOBN(0x4608d36b, 0xc6fb5a7d), TOBN(0xe3eea15a, 0x6d2dd0e0),
-           TOBN(0x75b0a3eb, 0x8f97a36a), TOBN(0xf59814cc, 0x1c83de1e)},
-          {TOBN(0x56c9c5b0, 0x1c33c23f), TOBN(0xa96c1da4, 0x6faa4136),
-           TOBN(0x46bf2074, 0xde316551), TOBN(0x3b866e7b, 0x1f756c8f)}},
-         {{TOBN(0x727727d8, 0x1495ed6b), TOBN(0xb2394243, 0xb682dce7),
-           TOBN(0x8ab8454e, 0x758610f3), TOBN(0xc243ce84, 0x857d72a4)},
-          {TOBN(0x7b320d71, 0xdbbf370f), TOBN(0xff9afa37, 0x78e0f7ca),
-           TOBN(0x0119d1e0, 0xea7b523f), TOBN(0xb997f8cb, 0x058c7d42)}},
-         {{TOBN(0x285bcd2a, 0x37bbb184), TOBN(0x51dcec49, 0xa45d1fa6),
-           TOBN(0x6ade3b64, 0xe29634cb), TOBN(0x080c94a7, 0x26b86ef1)},
-          {TOBN(0xba583db1, 0x2283fbe3), TOBN(0x902bddc8, 0x5a9315ed),
-           TOBN(0x07c1ccb3, 0x86964bec), TOBN(0x78f4eacf, 0xb6258301)}},
-         {{TOBN(0x4bdf3a49, 0x56f90823), TOBN(0xba0f5080, 0x741d777b),
-           TOBN(0x091d71c3, 0xf38bf760), TOBN(0x9633d50f, 0x9b625b02)},
-          {TOBN(0x03ecb743, 0xb8c9de61), TOBN(0xb4751254, 0x5de74720),
-           TOBN(0x9f9defc9, 0x74ce1cb2), TOBN(0x774a4f6a, 0x00bd32ef)}},
-         {{TOBN(0xaca385f7, 0x73848f22), TOBN(0x53dad716, 0xf3f8558e),
-           TOBN(0xab7b34b0, 0x93c471f9), TOBN(0xf530e069, 0x19644bc7)},
-          {TOBN(0x3d9fb1ff, 0xdd59d31a), TOBN(0x4382e0df, 0x08daa795),
-           TOBN(0x165c6f4b, 0xd5cc88d7), TOBN(0xeaa392d5, 0x4a18c900)}},
-         {{TOBN(0x94203c67, 0x648024ee), TOBN(0x188763f2, 0x8c2fabcd),
-           TOBN(0xa80f87ac, 0xbbaec835), TOBN(0x632c96e0, 0xf29d8d54)},
-          {TOBN(0x29b0a60e, 0x4c00a95e), TOBN(0x2ef17f40, 0xe011e9fa),
-           TOBN(0xf6c0e1d1, 0x15b77223), TOBN(0xaaec2c62, 0x14b04e32)}},
-         {{TOBN(0xd35688d8, 0x3d84e58c), TOBN(0x2af5094c, 0x958571db),
-           TOBN(0x4fff7e19, 0x760682a6), TOBN(0x4cb27077, 0xe39a407c)},
-          {TOBN(0x0f59c547, 0x4ff0e321), TOBN(0x169f34a6, 0x1b34c8ff),
-           TOBN(0x2bff1096, 0x52bc1ba7), TOBN(0xa25423b7, 0x83583544)}},
-         {{TOBN(0x5d55d5d5, 0x0ac8b782), TOBN(0xff6622ec, 0x2db3c892),
-           TOBN(0x48fce741, 0x6b8bb642), TOBN(0x31d6998c, 0x69d7e3dc)},
-          {TOBN(0xdbaf8004, 0xcadcaed0), TOBN(0x801b0142, 0xd81d053c),
-           TOBN(0x94b189fc, 0x59630ec6), TOBN(0x120e9934, 0xaf762c8e)}},
-         {{TOBN(0x53a29aa4, 0xfdc6a404), TOBN(0x19d8e01e, 0xa1909948),
-           TOBN(0x3cfcabf1, 0xd7e89681), TOBN(0x3321a50d, 0x4e132d37)},
-          {TOBN(0xd0496863, 0xe9a86111), TOBN(0x8c0cde61, 0x06a3bc65),
-           TOBN(0xaf866c49, 0xfc9f8eef), TOBN(0x2066350e, 0xff7f5141)}},
-         {{TOBN(0x4f8a4689, 0xe56ddfbd), TOBN(0xea1b0c07, 0xfe32983a),
-           TOBN(0x2b317462, 0x873cb8cb), TOBN(0x658deddc, 0x2d93229f)},
-          {TOBN(0x65efaf4d, 0x0f64ef58), TOBN(0xfe43287d, 0x730cc7a8),
-           TOBN(0xaebc0c72, 0x3d047d70), TOBN(0x92efa539, 0xd92d26c9)}},
-         {{TOBN(0x06e78457, 0x94b56526), TOBN(0x415cb80f, 0x0961002d),
-           TOBN(0x89e5c565, 0x76dcb10f), TOBN(0x8bbb6982, 0xff9259fe)},
-          {TOBN(0x4fe8795b, 0x9abc2668), TOBN(0xb5d4f534, 0x1e678fb1),
-           TOBN(0x6601f3be, 0x7b7da2b9), TOBN(0x98da59e2, 0xa13d6805)}},
-         {{TOBN(0x190d8ea6, 0x01799a52), TOBN(0xa20cec41, 0xb86d2952),
-           TOBN(0x3062ffb2, 0x7fff2a7c), TOBN(0x741b32e5, 0x79f19d37)},
-          {TOBN(0xf80d8181, 0x4eb57d47), TOBN(0x7a2d0ed4, 0x16aef06b),
-           TOBN(0x09735fb0, 0x1cecb588), TOBN(0x1641caaa, 0xc6061f5b)}}},
-        {{{TOBN(0x7f99824f, 0x20151427), TOBN(0x206828b6, 0x92430206),
-           TOBN(0xaa9097d7, 0xe1112357), TOBN(0xacf9a2f2, 0x09e414ec)},
-          {TOBN(0xdbdac9da, 0x27915356), TOBN(0x7e0734b7, 0x001efee3),
-           TOBN(0x54fab5bb, 0xd2b288e2), TOBN(0x4c630fc4, 0xf62dd09c)}},
-         {{TOBN(0x8537107a, 0x1ac2703b), TOBN(0xb49258d8, 0x6bc857b5),
-           TOBN(0x57df14de, 0xbcdaccd1), TOBN(0x24ab68d7, 0xc4ae8529)},
-          {TOBN(0x7ed8b5d4, 0x734e59d0), TOBN(0x5f8740c8, 0xc495cc80),
-           TOBN(0x84aedd5a, 0x291db9b3), TOBN(0x80b360f8, 0x4fb995be)}},
-         {{TOBN(0xae915f5d, 0x5fa067d1), TOBN(0x4134b57f, 0x9668960c),
-           TOBN(0xbd3656d6, 0xa48edaac), TOBN(0xdac1e3e4, 0xfc1d7436)},
-          {TOBN(0x674ff869, 0xd81fbb26), TOBN(0x449ed3ec, 0xb26c33d4),
-           TOBN(0x85138705, 0xd94203e8), TOBN(0xccde538b, 0xbeeb6f4a)}},
-         {{TOBN(0x55d5c68d, 0xa61a76fa), TOBN(0x598b441d, 0xca1554dc),
-           TOBN(0xd39923b9, 0x773b279c), TOBN(0x33331d3c, 0x36bf9efc)},
-          {TOBN(0x2d4c848e, 0x298de399), TOBN(0xcfdb8e77, 0xa1a27f56),
-           TOBN(0x94c855ea, 0x57b8ab70), TOBN(0xdcdb9dae, 0x6f7879ba)}},
-         {{TOBN(0x7bdff8c2, 0x019f2a59), TOBN(0xb3ce5bb3, 0xcb4fbc74),
-           TOBN(0xea907f68, 0x8a9173dd), TOBN(0x6cd3d0d3, 0x95a75439)},
-          {TOBN(0x92ecc4d6, 0xefed021c), TOBN(0x09a9f9b0, 0x6a77339a),
-           TOBN(0x87ca6b15, 0x7188c64a), TOBN(0x10c29968, 0x44899158)}},
-         {{TOBN(0x5859a229, 0xed6e82ef), TOBN(0x16f338e3, 0x65ebaf4e),
-           TOBN(0x0cd31387, 0x5ead67ae), TOBN(0x1c73d228, 0x54ef0bb4)},
-          {TOBN(0x4cb55131, 0x74a5c8c7), TOBN(0x01cd2970, 0x7f69ad6a),
-           TOBN(0xa04d00dd, 0xe966f87e), TOBN(0xd96fe447, 0x0b7b0321)}},
-         {{TOBN(0x342ac06e, 0x88fbd381), TOBN(0x02cd4a84, 0x5c35a493),
-           TOBN(0xe8fa89de, 0x54f1bbcd), TOBN(0x341d6367, 0x2575ed4c)},
-          {TOBN(0xebe357fb, 0xd238202b), TOBN(0x600b4d1a, 0xa984ead9),
-           TOBN(0xc35c9f44, 0x52436ea0), TOBN(0x96fe0a39, 0xa370751b)}},
-         {{TOBN(0x4c4f0736, 0x7f636a38), TOBN(0x9f943fb7, 0x0e76d5cb),
-           TOBN(0xb03510ba, 0xa8b68b8b), TOBN(0xc246780a, 0x9ed07a1f)},
-          {TOBN(0x3c051415, 0x6d549fc2), TOBN(0xc2953f31, 0x607781ca),
-           TOBN(0x955e2c69, 0xd8d95413), TOBN(0xb300fadc, 0x7bd282e3)}},
-         {{TOBN(0x81fe7b50, 0x87e9189f), TOBN(0xdb17375c, 0xf42dda27),
-           TOBN(0x22f7d896, 0xcf0a5904), TOBN(0xa0e57c5a, 0xebe348e6)},
-          {TOBN(0xa61011d3, 0xf40e3c80), TOBN(0xb1189321, 0x8db705c5),
-           TOBN(0x4ed9309e, 0x50fedec3), TOBN(0xdcf14a10, 0x4d6d5c1d)}},
-         {{TOBN(0x056c265b, 0x55691342), TOBN(0xe8e08504, 0x91049dc7),
-           TOBN(0x131329f5, 0xc9bae20a), TOBN(0x96c8b3e8, 0xd9dccdb4)},
-          {TOBN(0x8c5ff838, 0xfb4ee6b4), TOBN(0xfc5a9aeb, 0x41e8ccf0),
-           TOBN(0x7417b764, 0xfae050c6), TOBN(0x0953c3d7, 0x00452080)}},
-         {{TOBN(0x21372682, 0x38dfe7e8), TOBN(0xea417e15, 0x2bb79d4b),
-           TOBN(0x59641f1c, 0x76e7cf2d), TOBN(0x271e3059, 0xea0bcfcc)},
-          {TOBN(0x624c7dfd, 0x7253ecbd), TOBN(0x2f552e25, 0x4fca6186),
-           TOBN(0xcbf84ecd, 0x4d866e9c), TOBN(0x73967709, 0xf68d4610)}},
-         {{TOBN(0xa14b1163, 0xc27901b4), TOBN(0xfd9236e0, 0x899b8bf3),
-           TOBN(0x42b091ec, 0xcbc6da0a), TOBN(0xbb1dac6f, 0x5ad1d297)},
-          {TOBN(0x80e61d53, 0xa91cf76e), TOBN(0x4110a412, 0xd31f1ee7),
-           TOBN(0x2d87c3ba, 0x13efcf77), TOBN(0x1f374bb4, 0xdf450d76)}},
-         {{TOBN(0x5e78e2f2, 0x0d188dab), TOBN(0xe3968ed0, 0xf4b885ef),
-           TOBN(0x46c0568e, 0x7314570f), TOBN(0x31616338, 0x01170521)},
-          {TOBN(0x18e1e7e2, 0x4f0c8afe), TOBN(0x4caa75ff, 0xdeea78da),
-           TOBN(0x82db67f2, 0x7c5d8a51), TOBN(0x36a44d86, 0x6f505370)}},
-         {{TOBN(0xd72c5bda, 0x0333974f), TOBN(0x5db516ae, 0x27a70146),
-           TOBN(0x34705281, 0x210ef921), TOBN(0xbff17a8f, 0x0c9c38e5)},
-          {TOBN(0x78f4814e, 0x12476da1), TOBN(0xc1e16613, 0x33c16980),
-           TOBN(0x9e5b386f, 0x424d4bca), TOBN(0x4c274e87, 0xc85740de)}},
-         {{TOBN(0xb6a9b88d, 0x6c2f5226), TOBN(0x14d1b944, 0x550d7ca8),
-           TOBN(0x580c85fc, 0x1fc41709), TOBN(0xc1da368b, 0x54c6d519)},
-          {TOBN(0x2b0785ce, 0xd5113cf7), TOBN(0x0670f633, 0x5a34708f),
-           TOBN(0x46e23767, 0x15cc3f88), TOBN(0x1b480cfa, 0x50c72c8f)}},
-         {{TOBN(0x20288602, 0x4147519a), TOBN(0xd0981eac, 0x26b372f0),
-           TOBN(0xa9d4a7ca, 0xa785ebc8), TOBN(0xd953c50d, 0xdbdf58e9)},
-          {TOBN(0x9d6361cc, 0xfd590f8f), TOBN(0x72e9626b, 0x44e6c917),
-           TOBN(0x7fd96110, 0x22eb64cf), TOBN(0x863ebb7e, 0x9eb288f3)}},
-         {{TOBN(0x6e6ab761, 0x6aca8ee7), TOBN(0x97d10b39, 0xd7b40358),
-           TOBN(0x1687d377, 0x1e5feb0d), TOBN(0xc83e50e4, 0x8265a27a)},
-          {TOBN(0x8f75a9fe, 0xc954b313), TOBN(0xcc2e8f47, 0x310d1f61),
-           TOBN(0xf5ba81c5, 0x6557d0e0), TOBN(0x25f9680c, 0x3eaf6207)}},
-         {{TOBN(0xf95c6609, 0x4354080b), TOBN(0x5225bfa5, 0x7bf2fe1c),
-           TOBN(0xc5c004e2, 0x5c7d98fa), TOBN(0x3561bf1c, 0x019aaf60)},
-          {TOBN(0x5e6f9f17, 0xba151474), TOBN(0xdec2f934, 0xb04f6eca),
-           TOBN(0x64e368a1, 0x269acb1e), TOBN(0x1332d9e4, 0x0cdda493)}},
-         {{TOBN(0x60d6cf69, 0xdf23de05), TOBN(0x66d17da2, 0x009339a0),
-           TOBN(0x9fcac985, 0x0a693923), TOBN(0xbcf057fc, 0xed7c6a6d)},
-          {TOBN(0xc3c5c8c5, 0xf0b5662c), TOBN(0x25318dd8, 0xdcba4f24),
-           TOBN(0x60e8cb75, 0x082b69ff), TOBN(0x7c23b3ee, 0x1e728c01)}},
-         {{TOBN(0x15e10a0a, 0x097e4403), TOBN(0xcb3d0a86, 0x19854665),
-           TOBN(0x88d8e211, 0xd67d4826), TOBN(0xb39af66e, 0x0b9d2839)},
-          {TOBN(0xa5f94588, 0xbd475ca8), TOBN(0xe06b7966, 0xc077b80b),
-           TOBN(0xfedb1485, 0xda27c26c), TOBN(0xd290d33a, 0xfe0fd5e0)}},
-         {{TOBN(0xa40bcc47, 0xf34fb0fa), TOBN(0xb4760cc8, 0x1fb1ab09),
-           TOBN(0x8fca0993, 0xa273bfe3), TOBN(0x13e4fe07, 0xf70b213c)},
-          {TOBN(0x3bcdb992, 0xfdb05163), TOBN(0x8c484b11, 0x0c2b19b6),
-           TOBN(0x1acb815f, 0xaaf2e3e2), TOBN(0xc6905935, 0xb89ff1b4)}},
-         {{TOBN(0xb2ad6f9d, 0x586e74e1), TOBN(0x488883ad, 0x67b80484),
-           TOBN(0x758aa2c7, 0x369c3ddb), TOBN(0x8ab74e69, 0x9f9afd31)},
-          {TOBN(0x10fc2d28, 0x5e21beb1), TOBN(0x3484518a, 0x318c42f9),
-           TOBN(0x377427dc, 0x53cf40c3), TOBN(0x9de0781a, 0x391bc1d9)}},
-         {{TOBN(0x8faee858, 0x693807e1), TOBN(0xa3865327, 0x4e81ccc7),
-           TOBN(0x02c30ff2, 0x6f835b84), TOBN(0xb604437b, 0x0d3d38d4)},
-          {TOBN(0xb3fc8a98, 0x5ca1823d), TOBN(0xb82f7ec9, 0x03be0324),
-           TOBN(0xee36d761, 0xcf684a33), TOBN(0x5a01df0e, 0x9f29bf7d)}},
-         {{TOBN(0x686202f3, 0x1306583d), TOBN(0x05b10da0, 0x437c622e),
-           TOBN(0xbf9aaa0f, 0x076a7bc8), TOBN(0x25e94efb, 0x8f8f4e43)},
-          {TOBN(0x8a35c9b7, 0xfa3dc26d), TOBN(0xe0e5fb93, 0x96ff03c5),
-           TOBN(0xa77e3843, 0xebc394ce), TOBN(0xcede6595, 0x8361de60)}},
-         {{TOBN(0xd27c22f6, 0xa1993545), TOBN(0xab01cc36, 0x24d671ba),
-           TOBN(0x63fa2877, 0xa169c28e), TOBN(0x925ef904, 0x2eb08376)},
-          {TOBN(0x3b2fa3cf, 0x53aa0b32), TOBN(0xb27beb5b, 0x71c49d7a),
-           TOBN(0xb60e1834, 0xd105e27f), TOBN(0xd6089788, 0x4f68570d)}},
-         {{TOBN(0x23094ce0, 0xd6fbc2ac), TOBN(0x738037a1, 0x815ff551),
-           TOBN(0xda73b1bb, 0x6bef119c), TOBN(0xdcf6c430, 0xeef506ba)},
-          {TOBN(0x00e4fe7b, 0xe3ef104a), TOBN(0xebdd9a2c, 0x0a065628),
-           TOBN(0x853a81c3, 0x8792043e), TOBN(0x22ad6ece, 0xb3b59108)}},
-         {{TOBN(0x9fb813c0, 0x39cd297d), TOBN(0x8ec7e16e, 0x05bda5d9),
-           TOBN(0x2834797c, 0x0d104b96), TOBN(0xcc11a2e7, 0x7c511510)},
-          {TOBN(0x96ca5a53, 0x96ee6380), TOBN(0x054c8655, 0xcea38742),
-           TOBN(0xb5946852, 0xd54dfa7d), TOBN(0x97c422e7, 0x1f4ab207)}},
-         {{TOBN(0xbf907509, 0x0c22b540), TOBN(0x2cde42aa, 0xb7c267d4),
-           TOBN(0xba18f9ed, 0x5ab0d693), TOBN(0x3ba62aa6, 0x6e4660d9)},
-          {TOBN(0xb24bf97b, 0xab9ea96a), TOBN(0x5d039642, 0xe3b60e32),
-           TOBN(0x4e6a4506, 0x7c4d9bd5), TOBN(0x666c5b9e, 0x7ed4a6a4)}},
-         {{TOBN(0xfa3fdcd9, 0x8edbd7cc), TOBN(0x4660bb87, 0xc6ccd753),
-           TOBN(0x9ae90820, 0x21e6b64f), TOBN(0x8a56a713, 0xb36bfb3f)},
-          {TOBN(0xabfce096, 0x5726d47f), TOBN(0x9eed01b2, 0x0b1a9a7f),
-           TOBN(0x30e9cad4, 0x4eb74a37), TOBN(0x7b2524cc, 0x53e9666d)}},
-         {{TOBN(0x6a29683b, 0x8f4b002f), TOBN(0xc2200d7a, 0x41f4fc20),
-           TOBN(0xcf3af47a, 0x3a338acc), TOBN(0x6539a4fb, 0xe7128975)},
-          {TOBN(0xcec31c14, 0xc33c7fcf), TOBN(0x7eb6799b, 0xc7be322b),
-           TOBN(0x119ef4e9, 0x6646f623), TOBN(0x7b7a26a5, 0x54d7299b)}},
-         {{TOBN(0xcb37f08d, 0x403f46f2), TOBN(0x94b8fc43, 0x1a0ec0c7),
-           TOBN(0xbb8514e3, 0xc332142f), TOBN(0xf3ed2c33, 0xe80d2a7a)},
-          {TOBN(0x8d2080af, 0xb639126c), TOBN(0xf7b6be60, 0xe3553ade),
-           TOBN(0x3950aa9f, 0x1c7e2b09), TOBN(0x847ff958, 0x6410f02b)}},
-         {{TOBN(0x877b7cf5, 0x678a31b0), TOBN(0xd50301ae, 0x3998b620),
-           TOBN(0x734257c5, 0xc00fb396), TOBN(0xf9fb18a0, 0x04e672a6)},
-          {TOBN(0xff8bd8eb, 0xe8758851), TOBN(0x1e64e4c6, 0x5d99ba44),
-           TOBN(0x4b8eaedf, 0x7dfd93b7), TOBN(0xba2f2a98, 0x04e76b8c)}},
-         {{TOBN(0x7d790cba, 0xe8053433), TOBN(0xc8e725a0, 0x3d2c9585),
-           TOBN(0x58c5c476, 0xcdd8f5ed), TOBN(0xd106b952, 0xefa9fe1d)},
-          {TOBN(0x3c5c775b, 0x0eff13a9), TOBN(0x242442ba, 0xe057b930),
-           TOBN(0xe9f458d4, 0xc9b70cbd), TOBN(0x69b71448, 0xa3cdb89a)}},
-         {{TOBN(0x41ee46f6, 0x0e2ed742), TOBN(0x573f1045, 0x40067493),
-           TOBN(0xb1e154ff, 0x9d54c304), TOBN(0x2ad0436a, 0x8d3a7502)},
-          {TOBN(0xee4aaa2d, 0x431a8121), TOBN(0xcd38b3ab, 0x886f11ed),
-           TOBN(0x57d49ea6, 0x034a0eb7), TOBN(0xd2b773bd, 0xf7e85e58)}},
-         {{TOBN(0x4a559ac4, 0x9b5c1f14), TOBN(0xc444be1a, 0x3e54df2b),
-           TOBN(0x13aad704, 0xeda41891), TOBN(0xcd927bec, 0x5eb5c788)},
-          {TOBN(0xeb3c8516, 0xe48c8a34), TOBN(0x1b7ac812, 0x4b546669),
-           TOBN(0x1815f896, 0x594df8ec), TOBN(0x87c6a79c, 0x79227865)}},
-         {{TOBN(0xae02a2f0, 0x9b56ddbd), TOBN(0x1339b5ac, 0x8a2f1cf3),
-           TOBN(0xf2b569c7, 0x839dff0d), TOBN(0xb0b9e864, 0xfee9a43d)},
-          {TOBN(0x4ff8ca41, 0x77bb064e), TOBN(0x145a2812, 0xfd249f63),
-           TOBN(0x3ab7beac, 0xf86f689a), TOBN(0x9bafec27, 0x01d35f5e)}},
-         {{TOBN(0x28054c65, 0x4265aa91), TOBN(0xa4b18304, 0x035efe42),
-           TOBN(0x6887b0e6, 0x9639dec7), TOBN(0xf4b8f6ad, 0x3d52aea5)},
-          {TOBN(0xfb9293cc, 0x971a8a13), TOBN(0x3f159e5d, 0x4c934d07),
-           TOBN(0x2c50e9b1, 0x09acbc29), TOBN(0x08eb65e6, 0x7154d129)}},
-         {{TOBN(0x4feff589, 0x30b75c3e), TOBN(0x0bb82fe2, 0x94491c93),
-           TOBN(0xd8ac377a, 0x89af62bb), TOBN(0xd7b51490, 0x9685e49f)},
-          {TOBN(0xabca9a7b, 0x04497f19), TOBN(0x1b35ed0a, 0x1a7ad13f),
-           TOBN(0x6b601e21, 0x3ec86ed6), TOBN(0xda91fcb9, 0xce0c76f1)}},
-         {{TOBN(0x9e28507b, 0xd7ab27e1), TOBN(0x7c19a555, 0x63945b7b),
-           TOBN(0x6b43f0a1, 0xaafc9827), TOBN(0x443b4fbd, 0x3aa55b91)},
-          {TOBN(0x962b2e65, 0x6962c88f), TOBN(0x139da8d4, 0xce0db0ca),
-           TOBN(0xb93f05dd, 0x1b8d6c4f), TOBN(0x779cdff7, 0x180b9824)}},
-         {{TOBN(0xbba23fdd, 0xae57c7b7), TOBN(0x345342f2, 0x1b932522),
-           TOBN(0xfd9c80fe, 0x556d4aa3), TOBN(0xa03907ba, 0x6525bb61)},
-          {TOBN(0x38b010e1, 0xff218933), TOBN(0xc066b654, 0xaa52117b),
-           TOBN(0x8e141920, 0x94f2e6ea), TOBN(0x66a27dca, 0x0d32f2b2)}},
-         {{TOBN(0x69c7f993, 0x048b3717), TOBN(0xbf5a989a, 0xb178ae1c),
-           TOBN(0x49fa9058, 0x564f1d6b), TOBN(0x27ec6e15, 0xd31fde4e)},
-          {TOBN(0x4cce0373, 0x7276e7fc), TOBN(0x64086d79, 0x89d6bf02),
-           TOBN(0x5a72f046, 0x4ccdd979), TOBN(0x909c3566, 0x47775631)}},
-         {{TOBN(0x1c07bc6b, 0x75dd7125), TOBN(0xb4c6bc97, 0x87a0428d),
-           TOBN(0x507ece52, 0xfdeb6b9d), TOBN(0xfca56512, 0xb2c95432)},
-          {TOBN(0x15d97181, 0xd0e8bd06), TOBN(0x384dd317, 0xc6bb46ea),
-           TOBN(0x5441ea20, 0x3952b624), TOBN(0xbcf70dee, 0x4e7dc2fb)}},
-         {{TOBN(0x372b016e, 0x6628e8c3), TOBN(0x07a0d667, 0xb60a7522),
-           TOBN(0xcf05751b, 0x0a344ee2), TOBN(0x0ec09a48, 0x118bdeec)},
-          {TOBN(0x6e4b3d4e, 0xd83dce46), TOBN(0x43a6316d, 0x99d2fc6e),
-           TOBN(0xa99d8989, 0x56cf044c), TOBN(0x7c7f4454, 0xae3e5fb7)}},
-         {{TOBN(0xb2e6b121, 0xfbabbe92), TOBN(0x281850fb, 0xe1330076),
-           TOBN(0x093581ec, 0x97890015), TOBN(0x69b1dded, 0x75ff77f5)},
-          {TOBN(0x7cf0b18f, 0xab105105), TOBN(0x953ced31, 0xa89ccfef),
-           TOBN(0x3151f85f, 0xeb914009), TOBN(0x3c9f1b87, 0x88ed48ad)}},
-         {{TOBN(0xc9aba1a1, 0x4a7eadcb), TOBN(0x928e7501, 0x522e71cf),
-           TOBN(0xeaede727, 0x3a2e4f83), TOBN(0x467e10d1, 0x1ce3bbd3)},
-          {TOBN(0xf3442ac3, 0xb955dcf0), TOBN(0xba96307d, 0xd3d5e527),
-           TOBN(0xf763a10e, 0xfd77f474), TOBN(0x5d744bd0, 0x6a6e1ff0)}},
-         {{TOBN(0xd287282a, 0xa777899e), TOBN(0xe20eda8f, 0xd03f3cde),
-           TOBN(0x6a7e75bb, 0x50b07d31), TOBN(0x0b7e2a94, 0x6f379de4)},
-          {TOBN(0x31cb64ad, 0x19f593cf), TOBN(0x7b1a9e4f, 0x1e76ef1d),
-           TOBN(0xe18c9c9d, 0xb62d609c), TOBN(0x439bad6d, 0xe779a650)}},
-         {{TOBN(0x219d9066, 0xe032f144), TOBN(0x1db632b8, 0xe8b2ec6a),
-           TOBN(0xff0d0fd4, 0xfda12f78), TOBN(0x56fb4c2d, 0x2a25d265)},
-          {TOBN(0x5f4e2ee1, 0x255a03f1), TOBN(0x61cd6af2, 0xe96af176),
-           TOBN(0xe0317ba8, 0xd068bc97), TOBN(0x927d6bab, 0x264b988e)}},
-         {{TOBN(0xa18f07e0, 0xe90fb21e), TOBN(0x00fd2b80, 0xbba7fca1),
-           TOBN(0x20387f27, 0x95cd67b5), TOBN(0x5b89a4e7, 0xd39707f7)},
-          {TOBN(0x8f83ad3f, 0x894407ce), TOBN(0xa0025b94, 0x6c226132),
-           TOBN(0xc79563c7, 0xf906c13b), TOBN(0x5f548f31, 0x4e7bb025)}},
-         {{TOBN(0x2b4c6b8f, 0xeac6d113), TOBN(0xa67e3f9c, 0x0e813c76),
-           TOBN(0x3982717c, 0x3fe1f4b9), TOBN(0x58865819, 0x26d8050e)},
-          {TOBN(0x99f3640c, 0xf7f06f20), TOBN(0xdc610216, 0x2a66ebc2),
-           TOBN(0x52f2c175, 0x767a1e08), TOBN(0x05660e1a, 0x5999871b)}},
-         {{TOBN(0x6b0f1762, 0x6d3c4693), TOBN(0xf0e7d627, 0x37ed7bea),
-           TOBN(0xc51758c7, 0xb75b226d), TOBN(0x40a88628, 0x1f91613b)},
-          {TOBN(0x889dbaa7, 0xbbb38ce0), TOBN(0xe0404b65, 0xbddcad81),
-           TOBN(0xfebccd3a, 0x8bc9671f), TOBN(0xfbf9a357, 0xee1f5375)}},
-         {{TOBN(0x5dc169b0, 0x28f33398), TOBN(0xb07ec11d, 0x72e90f65),
-           TOBN(0xae7f3b4a, 0xfaab1eb1), TOBN(0xd970195e, 0x5f17538a)},
-          {TOBN(0x52b05cbe, 0x0181e640), TOBN(0xf5debd62, 0x2643313d),
-           TOBN(0x76148154, 0x5df31f82), TOBN(0x23e03b33, 0x3a9e13c5)}},
-         {{TOBN(0xff758949, 0x4fde0c1f), TOBN(0xbf8a1abe, 0xe5b6ec20),
-           TOBN(0x702278fb, 0x87e1db6c), TOBN(0xc447ad7a, 0x35ed658f)},
-          {TOBN(0x48d4aa38, 0x03d0ccf2), TOBN(0x80acb338, 0x819a7c03),
-           TOBN(0x9bc7c89e, 0x6e17cecc), TOBN(0x46736b8b, 0x03be1d82)}},
-         {{TOBN(0xd65d7b60, 0xc0432f96), TOBN(0xddebe7a3, 0xdeb5442f),
-           TOBN(0x79a25307, 0x7dff69a2), TOBN(0x37a56d94, 0x02cf3122)},
-          {TOBN(0x8bab8aed, 0xf2350d0a), TOBN(0x13c3f276, 0x037b0d9a),
-           TOBN(0xc664957c, 0x44c65cae), TOBN(0x88b44089, 0xc2e71a88)}},
-         {{TOBN(0xdb88e5a3, 0x5cb02664), TOBN(0x5d4c0bf1, 0x8686c72e),
-           TOBN(0xea3d9b62, 0xa682d53e), TOBN(0x9b605ef4, 0x0b2ad431)},
-          {TOBN(0x71bac202, 0xc69645d0), TOBN(0xa115f03a, 0x6a1b66e7),
-           TOBN(0xfe2c563a, 0x158f4dc4), TOBN(0xf715b3a0, 0x4d12a78c)}},
-         {{TOBN(0x8f7f0a48, 0xd413213a), TOBN(0x2035806d, 0xc04becdb),
-           TOBN(0xecd34a99, 0x5d8587f5), TOBN(0x4d8c3079, 0x9f6d3a71)},
-          {TOBN(0x1b2a2a67, 0x8d95a8f6), TOBN(0xc58c9d7d, 0xf2110d0d),
-           TOBN(0xdeee81d5, 0xcf8fba3f), TOBN(0xa42be3c0, 0x0c7cdf68)}},
-         {{TOBN(0x2126f742, 0xd43b5eaa), TOBN(0x054a0766, 0xdfa59b85),
-           TOBN(0x9d0d5e36, 0x126bfd45), TOBN(0xa1f8fbd7, 0x384f8a8f)},
-          {TOBN(0x317680f5, 0xd563fccc), TOBN(0x48ca5055, 0xf280a928),
-           TOBN(0xe00b81b2, 0x27b578cf), TOBN(0x10aad918, 0x2994a514)}},
-         {{TOBN(0xd9e07b62, 0xb7bdc953), TOBN(0x9f0f6ff2, 0x5bc086dd),
-           TOBN(0x09d1ccff, 0x655eee77), TOBN(0x45475f79, 0x5bef7df1)},
-          {TOBN(0x3faa28fa, 0x86f702cc), TOBN(0x92e60905, 0x0f021f07),
-           TOBN(0xe9e62968, 0x7f8fa8c6), TOBN(0xbd71419a, 0xf036ea2c)}},
-         {{TOBN(0x171ee1cc, 0x6028da9a), TOBN(0x5352fe1a, 0xc251f573),
-           TOBN(0xf8ff236e, 0x3fa997f4), TOBN(0xd831b6c9, 0xa5749d5f)},
-          {TOBN(0x7c872e1d, 0xe350e2c2), TOBN(0xc56240d9, 0x1e0ce403),
-           TOBN(0xf9deb077, 0x6974f5cb), TOBN(0x7d50ba87, 0x961c3728)}},
-         {{TOBN(0xd6f89426, 0x5a3a2518), TOBN(0xcf817799, 0xc6303d43),
-           TOBN(0x510a0471, 0x619e5696), TOBN(0xab049ff6, 0x3a5e307b)},
-          {TOBN(0xe4cdf9b0, 0xfeb13ec7), TOBN(0xd5e97117, 0x9d8ff90c),
-           TOBN(0xf6f64d06, 0x9afa96af), TOBN(0x00d0bf5e, 0x9d2012a2)}},
-         {{TOBN(0xe63f301f, 0x358bcdc0), TOBN(0x07689e99, 0x0a9d47f8),
-           TOBN(0x1f689e2f, 0x4f43d43a), TOBN(0x4d542a16, 0x90920904)},
-          {TOBN(0xaea293d5, 0x9ca0a707), TOBN(0xd061fe45, 0x8ac68065),
-           TOBN(0x1033bf1b, 0x0090008c), TOBN(0x29749558, 0xc08a6db6)}},
-         {{TOBN(0x74b5fc59, 0xc1d5d034), TOBN(0xf712e9f6, 0x67e215e0),
-           TOBN(0xfd520cbd, 0x860200e6), TOBN(0x0229acb4, 0x3ea22588)},
-          {TOBN(0x9cd1e14c, 0xfff0c82e), TOBN(0x87684b62, 0x59c69e73),
-           TOBN(0xda85e61c, 0x96ccb989), TOBN(0x2d5dbb02, 0xa3d06493)}},
-         {{TOBN(0xf22ad33a, 0xe86b173c), TOBN(0xe8e41ea5, 0xa79ff0e3),
-           TOBN(0x01d2d725, 0xdd0d0c10), TOBN(0x31f39088, 0x032d28f9)},
-          {TOBN(0x7b3f71e1, 0x7829839e), TOBN(0x0cf691b4, 0x4502ae58),
-           TOBN(0xef658dbd, 0xbefc6115), TOBN(0xa5cd6ee5, 0xb3ab5314)}},
-         {{TOBN(0x206c8d7b, 0x5f1d2347), TOBN(0x794645ba, 0x4cc2253a),
-           TOBN(0xd517d8ff, 0x58389e08), TOBN(0x4fa20dee, 0x9f847288)},
-          {TOBN(0xeba072d8, 0xd797770a), TOBN(0x7360c91d, 0xbf429e26),
-           TOBN(0x7200a3b3, 0x80af8279), TOBN(0x6a1c9150, 0x82dadce3)}},
-         {{TOBN(0x0ee6d3a7, 0xc35d8794), TOBN(0x042e6558, 0x0356bae5),
-           TOBN(0x9f59698d, 0x643322fd), TOBN(0x9379ae15, 0x50a61967)},
-          {TOBN(0x64b9ae62, 0xfcc9981e), TOBN(0xaed3d631, 0x6d2934c6),
-           TOBN(0x2454b302, 0x5e4e65eb), TOBN(0xab09f647, 0xf9950428)}}},
-        {{{TOBN(0xb2083a12, 0x22248acc), TOBN(0x1f6ec0ef, 0x3264e366),
-           TOBN(0x5659b704, 0x5afdee28), TOBN(0x7a823a40, 0xe6430bb5)},
-          {TOBN(0x24592a04, 0xe1900a79), TOBN(0xcde09d4a, 0xc9ee6576),
-           TOBN(0x52b6463f, 0x4b5ea54a), TOBN(0x1efe9ed3, 0xd3ca65a7)}},
-         {{TOBN(0xe27a6dbe, 0x305406dd), TOBN(0x8eb7dc7f, 0xdd5d1957),
-           TOBN(0xf54a6876, 0x387d4d8f), TOBN(0x9c479409, 0xc7762de4)},
-          {TOBN(0xbe4d5b5d, 0x99b30778), TOBN(0x25380c56, 0x6e793682),
-           TOBN(0x602d37f3, 0xdac740e3), TOBN(0x140deabe, 0x1566e4ae)}},
-         {{TOBN(0x4481d067, 0xafd32acf), TOBN(0xd8f0fcca, 0xe1f71ccf),
-           TOBN(0xd208dd0c, 0xb596f2da), TOBN(0xd049d730, 0x9aad93f9)},
-          {TOBN(0xc79f263d, 0x42ab580e), TOBN(0x09411bb1, 0x23f707b4),
-           TOBN(0x8cfde1ff, 0x835e0eda), TOBN(0x72707490, 0x90f03402)}},
-         {{TOBN(0xeaee6126, 0xc49a861e), TOBN(0x024f3b65, 0xe14f0d06),
-           TOBN(0x51a3f1e8, 0xc69bfc17), TOBN(0xc3c3a8e9, 0xa7686381)},
-          {TOBN(0x3400752c, 0xb103d4c8), TOBN(0x02bc4613, 0x9218b36b),
-           TOBN(0xc67f75eb, 0x7651504a), TOBN(0xd6848b56, 0xd02aebfa)}},
-         {{TOBN(0xbd9802e6, 0xc30fa92b), TOBN(0x5a70d96d, 0x9a552784),
-           TOBN(0x9085c4ea, 0x3f83169b), TOBN(0xfa9423bb, 0x06908228)},
-          {TOBN(0x2ffebe12, 0xfe97a5b9), TOBN(0x85da6049, 0x71b99118),
-           TOBN(0x9cbc2f7f, 0x63178846), TOBN(0xfd96bc70, 0x9153218e)}},
-         {{TOBN(0x958381db, 0x1782269b), TOBN(0xae34bf79, 0x2597e550),
-           TOBN(0xbb5c6064, 0x5f385153), TOBN(0x6f0e96af, 0xe3088048)},
-          {TOBN(0xbf6a0215, 0x77884456), TOBN(0xb3b5688c, 0x69310ea7),
-           TOBN(0x17c94295, 0x04fad2de), TOBN(0xe020f0e5, 0x17896d4d)}},
-         {{TOBN(0x730ba0ab, 0x0976505f), TOBN(0x567f6813, 0x095e2ec5),
-           TOBN(0x47062010, 0x6331ab71), TOBN(0x72cfa977, 0x41d22b9f)},
-          {TOBN(0x33e55ead, 0x8a2373da), TOBN(0xa8d0d5f4, 0x7ba45a68),
-           TOBN(0xba1d8f9c, 0x03029d15), TOBN(0x8f34f1cc, 0xfc55b9f3)}},
-         {{TOBN(0xcca4428d, 0xbbe5a1a9), TOBN(0x8187fd5f, 0x3126bd67),
-           TOBN(0x0036973a, 0x48105826), TOBN(0xa39b6663, 0xb8bd61a0)},
-          {TOBN(0x6d42deef, 0x2d65a808), TOBN(0x4969044f, 0x94636b19),
-           TOBN(0xf611ee47, 0xdd5d564c), TOBN(0x7b2f3a49, 0xd2873077)}},
-         {{TOBN(0x94157d45, 0x300eb294), TOBN(0x2b2a656e, 0x169c1494),
-           TOBN(0xc000dd76, 0xd3a47aa9), TOBN(0xa2864e4f, 0xa6243ea4)},
-          {TOBN(0x82716c47, 0xdb89842e), TOBN(0x12dfd7d7, 0x61479fb7),
-           TOBN(0x3b9a2c56, 0xe0b2f6dc), TOBN(0x46be862a, 0xd7f85d67)}},
-         {{TOBN(0x03b0d8dd, 0x0f82b214), TOBN(0x460c34f9, 0xf103cbc6),
-           TOBN(0xf32e5c03, 0x18d79e19), TOBN(0x8b8888ba, 0xa84117f8)},
-          {TOBN(0x8f3c37dc, 0xc0722677), TOBN(0x10d21be9, 0x1c1c0f27),
-           TOBN(0xd47c8468, 0xe0f7a0c6), TOBN(0x9bf02213, 0xadecc0e0)}},
-         {{TOBN(0x0baa7d12, 0x42b48b99), TOBN(0x1bcb665d, 0x48424096),
-           TOBN(0x8b847cd6, 0xebfb5cfb), TOBN(0x87c2ae56, 0x9ad4d10d)},
-          {TOBN(0xf1cbb122, 0x0de36726), TOBN(0xe7043c68, 0x3fdfbd21),
-           TOBN(0x4bd0826a, 0x4e79d460), TOBN(0x11f5e598, 0x4bd1a2cb)}},
-         {{TOBN(0x97554160, 0xb7fe7b6e), TOBN(0x7d16189a, 0x400a3fb2),
-           TOBN(0xd73e9bea, 0xe328ca1e), TOBN(0x0dd04b97, 0xe793d8cc)},
-          {TOBN(0xa9c83c9b, 0x506db8cc), TOBN(0x5cd47aae, 0xcf38814c),
-           TOBN(0x26fc430d, 0xb64b45e6), TOBN(0x079b5499, 0xd818ea84)}},
-         {{TOBN(0xebb01102, 0xc1c24a3b), TOBN(0xca24e568, 0x1c161c1a),
-           TOBN(0x103eea69, 0x36f00a4a), TOBN(0x9ad76ee8, 0x76176c7b)},
-          {TOBN(0x97451fc2, 0x538e0ff7), TOBN(0x94f89809, 0x6604b3b0),
-           TOBN(0x6311436e, 0x3249cfd7), TOBN(0x27b4a7bd, 0x41224f69)}},
-         {{TOBN(0x03b5d21a, 0xe0ac2941), TOBN(0x279b0254, 0xc2d31937),
-           TOBN(0x3307c052, 0xcac992d0), TOBN(0x6aa7cb92, 0xefa8b1f3)},
-          {TOBN(0x5a182580, 0x0d37c7a5), TOBN(0x13380c37, 0x342d5422),
-           TOBN(0x92ac2d66, 0xd5d2ef92), TOBN(0x035a70c9, 0x030c63c6)}},
-         {{TOBN(0xc16025dd, 0x4ce4f152), TOBN(0x1f419a71, 0xf9df7c06),
-           TOBN(0x6d5b2214, 0x91e4bb14), TOBN(0xfc43c6cc, 0x839fb4ce)},
-          {TOBN(0x49f06591, 0x925d6b2d), TOBN(0x4b37d9d3, 0x62186598),
-           TOBN(0x8c54a971, 0xd01b1629), TOBN(0xe1a9c29f, 0x51d50e05)}},
-         {{TOBN(0x5109b785, 0x71ba1861), TOBN(0x48b22d5c, 0xd0c8f93d),
-           TOBN(0xe8fa84a7, 0x8633bb93), TOBN(0x53fba6ba, 0x5aebbd08)},
-          {TOBN(0x7ff27df3, 0xe5eea7d8), TOBN(0x521c8796, 0x68ca7158),
-           TOBN(0xb9d5133b, 0xce6f1a05), TOBN(0x2d50cd53, 0xfd0ebee4)}},
-         {{TOBN(0xc82115d6, 0xc5a3ef16), TOBN(0x993eff9d, 0xba079221),
-           TOBN(0xe4da2c5e, 0x4b5da81c), TOBN(0x9a89dbdb, 0x8033fd85)},
-          {TOBN(0x60819ebf, 0x2b892891), TOBN(0x53902b21, 0x5d14a4d5),
-           TOBN(0x6ac35051, 0xd7fda421), TOBN(0xcc6ab885, 0x61c83284)}},
-         {{TOBN(0x14eba133, 0xf74cff17), TOBN(0x240aaa03, 0xecb813f2),
-           TOBN(0xcfbb6540, 0x6f665bee), TOBN(0x084b1fe4, 0xa425ad73)},
-          {TOBN(0x009d5d16, 0xd081f6a6), TOBN(0x35304fe8, 0xeef82c90),
-           TOBN(0xf20346d5, 0xaa9eaa22), TOBN(0x0ada9f07, 0xac1c91e3)}},
-         {{TOBN(0xa6e21678, 0x968a6144), TOBN(0x54c1f77c, 0x07b31a1e),
-           TOBN(0xd6bb787e, 0x5781fbe1), TOBN(0x61bd2ee0, 0xe31f1c4a)},
-          {TOBN(0xf25aa1e9, 0x781105fc), TOBN(0x9cf2971f, 0x7b2f8e80),
-           TOBN(0x26d15412, 0xcdff919b), TOBN(0x01db4ebe, 0x34bc896e)}},
-         {{TOBN(0x7d9b3e23, 0xb40df1cf), TOBN(0x59337373, 0x94e971b4),
-           TOBN(0xbf57bd14, 0x669cf921), TOBN(0x865daedf, 0x0c1a1064)},
-          {TOBN(0x3eb70bd3, 0x83279125), TOBN(0xbc3d5b9f, 0x34ecdaab),
-           TOBN(0x91e3ed7e, 0x5f755caf), TOBN(0x49699f54, 0xd41e6f02)}},
-         {{TOBN(0x185770e1, 0xd4a7a15b), TOBN(0x08f3587a, 0xeaac87e7),
-           TOBN(0x352018db, 0x473133ea), TOBN(0x674ce719, 0x04fd30fc)},
-          {TOBN(0x7b8d9835, 0x088b3e0e), TOBN(0x7a0356a9, 0x5d0d47a1),
-           TOBN(0x9d9e7659, 0x6474a3c4), TOBN(0x61ea48a7, 0xff66966c)}},
-         {{TOBN(0x30417758, 0x0f3e4834), TOBN(0xfdbb21c2, 0x17a9afcb),
-           TOBN(0x756fa17f, 0x2f9a67b3), TOBN(0x2a6b2421, 0xa245c1a8)},
-          {TOBN(0x64be2794, 0x4af02291), TOBN(0xade465c6, 0x2a5804fe),
-           TOBN(0x8dffbd39, 0xa6f08fd7), TOBN(0xc4efa84c, 0xaa14403b)}},
-         {{TOBN(0xa1b91b2a, 0x442b0f5c), TOBN(0xb748e317, 0xcf997736),
-           TOBN(0x8d1b62bf, 0xcee90e16), TOBN(0x907ae271, 0x0b2078c0)},
-          {TOBN(0xdf31534b, 0x0c9bcddd), TOBN(0x043fb054, 0x39adce83),
-           TOBN(0x99031043, 0xd826846a), TOBN(0x61a9c0d6, 0xb144f393)}},
-         {{TOBN(0xdab48046, 0x47718427), TOBN(0xdf17ff9b, 0x6e830f8b),
-           TOBN(0x408d7ee8, 0xe49a1347), TOBN(0x6ac71e23, 0x91c1d4ae)},
-          {TOBN(0xc8cbb9fd, 0x1defd73c), TOBN(0x19840657, 0xbbbbfec5),
-           TOBN(0x39db1cb5, 0x9e7ef8ea), TOBN(0x78aa8296, 0x64105f30)}},
-         {{TOBN(0xa3d9b7f0, 0xa3738c29), TOBN(0x0a2f235a, 0xbc3250a3),
-           TOBN(0x55e506f6, 0x445e4caf), TOBN(0x0974f73d, 0x33475f7a)},
-          {TOBN(0xd37dbba3, 0x5ba2f5a8), TOBN(0x542c6e63, 0x6af40066),
-           TOBN(0x26d99b53, 0xc5d73e2c), TOBN(0x06060d7d, 0x6c3ca33e)}},
-         {{TOBN(0xcdbef1c2, 0x065fef4a), TOBN(0x77e60f7d, 0xfd5b92e3),
-           TOBN(0xd7c549f0, 0x26708350), TOBN(0x201b3ad0, 0x34f121bf)},
-          {TOBN(0x5fcac2a1, 0x0334fc14), TOBN(0x8a9a9e09, 0x344552f6),
-           TOBN(0x7dd8a1d3, 0x97653082), TOBN(0x5fc0738f, 0x79d4f289)}},
-         {{TOBN(0x787d244d, 0x17d2d8c3), TOBN(0xeffc6345, 0x70830684),
-           TOBN(0x5ddb96dd, 0xe4f73ae5), TOBN(0x8efb14b1, 0x172549a5)},
-          {TOBN(0x6eb73eee, 0x2245ae7a), TOBN(0xbca4061e, 0xea11f13e),
-           TOBN(0xb577421d, 0x30b01f5d), TOBN(0xaa688b24, 0x782e152c)}},
-         {{TOBN(0x67608e71, 0xbd3502ba), TOBN(0x4ef41f24, 0xb4de75a0),
-           TOBN(0xb08dde5e, 0xfd6125e5), TOBN(0xde484825, 0xa409543f)},
-          {TOBN(0x1f198d98, 0x65cc2295), TOBN(0x428a3771, 0x6e0edfa2),
-           TOBN(0x4f9697a2, 0xadf35fc7), TOBN(0x01a43c79, 0xf7cac3c7)}},
-         {{TOBN(0xb05d7059, 0x0fd3659a), TOBN(0x8927f30c, 0xbb7f2d9a),
-           TOBN(0x4023d1ac, 0x8cf984d3), TOBN(0x32125ed3, 0x02897a45)},
-          {TOBN(0xfb572dad, 0x3d414205), TOBN(0x73000ef2, 0xe3fa82a9),
-           TOBN(0x4c0868e9, 0xf10a5581), TOBN(0x5b61fc67, 0x6b0b3ca5)}},
-         {{TOBN(0xc1258d5b, 0x7cae440c), TOBN(0x21c08b41, 0x402b7531),
-           TOBN(0xf61a8955, 0xde932321), TOBN(0x3568faf8, 0x2d1408af)},
-          {TOBN(0x71b15e99, 0x9ecf965b), TOBN(0xf14ed248, 0xe917276f),
-           TOBN(0xc6f4caa1, 0x820cf9e2), TOBN(0x681b20b2, 0x18d83c7e)}},
-         {{TOBN(0x6cde738d, 0xc6c01120), TOBN(0x71db0813, 0xae70e0db),
-           TOBN(0x95fc0644, 0x74afe18c), TOBN(0x34619053, 0x129e2be7)},
-          {TOBN(0x80615cea, 0xdb2a3b15), TOBN(0x0a49a19e, 0xdb4c7073),
-           TOBN(0x0e1b84c8, 0x8fd2d367), TOBN(0xd74bf462, 0x033fb8aa)}},
-         {{TOBN(0x889f6d65, 0x533ef217), TOBN(0x7158c7e4, 0xc3ca2e87),
-           TOBN(0xfb670dfb, 0xdc2b4167), TOBN(0x75910a01, 0x844c257f)},
-          {TOBN(0xf336bf07, 0xcf88577d), TOBN(0x22245250, 0xe45e2ace),
-           TOBN(0x2ed92e8d, 0x7ca23d85), TOBN(0x29f8be4c, 0x2b812f58)}},
-         {{TOBN(0xdd9ebaa7, 0x076fe12b), TOBN(0x3f2400cb, 0xae1537f9),
-           TOBN(0x1aa93528, 0x17bdfb46), TOBN(0xc0f98430, 0x67883b41)},
-          {TOBN(0x5590ede1, 0x0170911d), TOBN(0x7562f5bb, 0x34d4b17f),
-           TOBN(0xe1fa1df2, 0x1826b8d2), TOBN(0xb40b796a, 0x6bd80d59)}},
-         {{TOBN(0xd65bf197, 0x3467ba92), TOBN(0x8c9b46db, 0xf70954b0),
-           TOBN(0x97c8a0f3, 0x0e78f15d), TOBN(0xa8f3a69a, 0x85a4c961)},
-          {TOBN(0x4242660f, 0x61e4ce9b), TOBN(0xbf06aab3, 0x6ea6790c),
-           TOBN(0xc6706f8e, 0xec986416), TOBN(0x9e56dec1, 0x9a9fc225)}},
-         {{TOBN(0x527c46f4, 0x9a9898d9), TOBN(0xd799e77b, 0x5633cdef),
-           TOBN(0x24eacc16, 0x7d9e4297), TOBN(0xabb61cea, 0x6b1cb734)},
-          {TOBN(0xbee2e8a7, 0xf778443c), TOBN(0x3bb42bf1, 0x29de2fe6),
-           TOBN(0xcbed86a1, 0x3003bb6f), TOBN(0xd3918e6c, 0xd781cdf6)}},
-         {{TOBN(0x4bee3271, 0x9a5103f1), TOBN(0x5243efc6, 0xf50eac06),
-           TOBN(0xb8e122cb, 0x6adcc119), TOBN(0x1b7faa84, 0xc0b80a08)},
-          {TOBN(0x32c3d1bd, 0x6dfcd08c), TOBN(0x129dec4e, 0x0be427de),
-           TOBN(0x98ab679c, 0x1d263c83), TOBN(0xafc83cb7, 0xcef64eff)}},
-         {{TOBN(0x85eb6088, 0x2fa6be76), TOBN(0x892585fb, 0x1328cbfe),
-           TOBN(0xc154d3ed, 0xcf618dda), TOBN(0xc44f601b, 0x3abaf26e)},
-          {TOBN(0x7bf57d0b, 0x2be1fdfd), TOBN(0xa833bd2d, 0x21137fee),
-           TOBN(0x9353af36, 0x2db591a8), TOBN(0xc76f26dc, 0x5562a056)}},
-         {{TOBN(0x1d87e47d, 0x3fdf5a51), TOBN(0x7afb5f93, 0x55c9cab0),
-           TOBN(0x91bbf58f, 0x89e0586e), TOBN(0x7c72c018, 0x0d843709)},
-          {TOBN(0xa9a5aafb, 0x99b5c3dc), TOBN(0xa48a0f1d, 0x3844aeb0),
-           TOBN(0x7178b7dd, 0xb667e482), TOBN(0x453985e9, 0x6e23a59a)}},
-         {{TOBN(0x4a54c860, 0x01b25dd8), TOBN(0x0dd37f48, 0xfb897c8a),
-           TOBN(0x5f8aa610, 0x0ea90cd9), TOBN(0xc8892c68, 0x16d5830d)},
-          {TOBN(0xeb4befc0, 0xef514ca5), TOBN(0x478eb679, 0xe72c9ee6),
-           TOBN(0x9bca20da, 0xdbc40d5f), TOBN(0xf015de21, 0xdde4f64a)}},
-         {{TOBN(0xaa6a4de0, 0xeaf4b8a5), TOBN(0x68cfd9ca, 0x4bc60e32),
-           TOBN(0x668a4b01, 0x7fd15e70), TOBN(0xd9f0694a, 0xf27dc09d)},
-          {TOBN(0xf6c3cad5, 0xba708bcd), TOBN(0x5cd2ba69, 0x5bb95c2a),
-           TOBN(0xaa28c1d3, 0x33c0a58f), TOBN(0x23e274e3, 0xabc77870)}},
-         {{TOBN(0x44c3692d, 0xdfd20a4a), TOBN(0x091c5fd3, 0x81a66653),
-           TOBN(0x6c0bb691, 0x09a0757d), TOBN(0x9072e8b9, 0x667343ea)},
-          {TOBN(0x31d40eb0, 0x80848bec), TOBN(0x95bd480a, 0x79fd36cc),
-           TOBN(0x01a77c61, 0x65ed43f5), TOBN(0xafccd127, 0x2e0d40bf)}},
-         {{TOBN(0xeccfc82d, 0x1cc1884b), TOBN(0xc85ac201, 0x5d4753b4),
-           TOBN(0xc7a6caac, 0x658e099f), TOBN(0xcf46369e, 0x04b27390)},
-          {TOBN(0xe2e7d049, 0x506467ea), TOBN(0x481b63a2, 0x37cdeccc),
-           TOBN(0x4029abd8, 0xed80143a), TOBN(0x28bfe3c7, 0xbcb00b88)}},
-         {{TOBN(0x3bec1009, 0x0643d84a), TOBN(0x885f3668, 0xabd11041),
-           TOBN(0xdb02432c, 0xf83a34d6), TOBN(0x32f7b360, 0x719ceebe)},
-          {TOBN(0xf06c7837, 0xdad1fe7a), TOBN(0x60a157a9, 0x5441a0b0),
-           TOBN(0x704970e9, 0xe2d47550), TOBN(0xcd2bd553, 0x271b9020)}},
-         {{TOBN(0xff57f82f, 0x33e24a0b), TOBN(0x9cbee23f, 0xf2565079),
-           TOBN(0x16353427, 0xeb5f5825), TOBN(0x276feec4, 0xe948d662)},
-          {TOBN(0xd1b62bc6, 0xda10032b), TOBN(0x718351dd, 0xf0e72a53),
-           TOBN(0x93452076, 0x2420e7ba), TOBN(0x96368fff, 0x3a00118d)}},
-         {{TOBN(0x00ce2d26, 0x150a49e4), TOBN(0x0c28b636, 0x3f04706b),
-           TOBN(0xbad65a46, 0x58b196d0), TOBN(0x6c8455fc, 0xec9f8b7c)},
-          {TOBN(0xe90c895f, 0x2d71867e), TOBN(0x5c0be31b, 0xedf9f38c),
-           TOBN(0x2a37a15e, 0xd8f6ec04), TOBN(0x239639e7, 0x8cd85251)}},
-         {{TOBN(0xd8975315, 0x9c7c4c6b), TOBN(0x603aa3c0, 0xd7409af7),
-           TOBN(0xb8d53d0c, 0x007132fb), TOBN(0x68d12af7, 0xa6849238)},
-          {TOBN(0xbe0607e7, 0xbf5d9279), TOBN(0x9aa50055, 0xaada74ce),
-           TOBN(0xe81079cb, 0xba7e8ccb), TOBN(0x610c71d1, 0xa5f4ff5e)}},
-         {{TOBN(0x9e2ee1a7, 0x5aa07093), TOBN(0xca84004b, 0xa75da47c),
-           TOBN(0x074d3951, 0x3de75401), TOBN(0xf938f756, 0xbb311592)},
-          {TOBN(0x96197618, 0x00a43421), TOBN(0x39a25362, 0x07bc78c8),
-           TOBN(0x278f710a, 0x0a171276), TOBN(0xb28446ea, 0x8d1a8f08)}},
-         {{TOBN(0x184781bf, 0xe3b6a661), TOBN(0x7751cb1d, 0xe6d279f7),
-           TOBN(0xf8ff95d6, 0xc59eb662), TOBN(0x186d90b7, 0x58d3dea7)},
-          {TOBN(0x0e4bb6c1, 0xdfb4f754), TOBN(0x5c5cf56b, 0x2b2801dc),
-           TOBN(0xc561e452, 0x1f54564d), TOBN(0xb4fb8c60, 0xf0dd7f13)}},
-         {{TOBN(0xf8849630, 0x33ff98c7), TOBN(0x9619fffa, 0xcf17769c),
-           TOBN(0xf8090bf6, 0x1bfdd80a), TOBN(0x14d9a149, 0x422cfe63)},
-          {TOBN(0xb354c360, 0x6f6df9ea), TOBN(0xdbcf770d, 0x218f17ea),
-           TOBN(0x207db7c8, 0x79eb3480), TOBN(0x213dbda8, 0x559b6a26)}},
-         {{TOBN(0xac4c200b, 0x29fc81b3), TOBN(0xebc3e09f, 0x171d87c1),
-           TOBN(0x91799530, 0x1481aa9e), TOBN(0x051b92e1, 0x92e114fa)},
-          {TOBN(0xdf8f92e9, 0xecb5537f), TOBN(0x44b1b2cc, 0x290c7483),
-           TOBN(0xa711455a, 0x2adeb016), TOBN(0x964b6856, 0x81a10c2c)}},
-         {{TOBN(0x4f159d99, 0xcec03623), TOBN(0x05532225, 0xef3271ea),
-           TOBN(0xb231bea3, 0xc5ee4849), TOBN(0x57a54f50, 0x7094f103)},
-          {TOBN(0x3e2d421d, 0x9598b352), TOBN(0xe865a49c, 0x67412ab4),
-           TOBN(0xd2998a25, 0x1cc3a912), TOBN(0x5d092808, 0x0c74d65d)}},
-         {{TOBN(0x73f45908, 0x4088567a), TOBN(0xeb6b280e, 0x1f214a61),
-           TOBN(0x8c9adc34, 0xcaf0c13d), TOBN(0x39d12938, 0xf561fb80)},
-          {TOBN(0xb2dc3a5e, 0xbc6edfb4), TOBN(0x7485b1b1, 0xfe4d210e),
-           TOBN(0x062e0400, 0xe186ae72), TOBN(0x91e32d5c, 0x6eeb3b88)}},
-         {{TOBN(0x6df574d7, 0x4be59224), TOBN(0xebc88ccc, 0x716d55f3),
-           TOBN(0x26c2e6d0, 0xcad6ed33), TOBN(0xc6e21e7d, 0x0d3e8b10)},
-          {TOBN(0x2cc5840e, 0x5bcc36bb), TOBN(0x9292445e, 0x7da74f69),
-           TOBN(0x8be8d321, 0x4e5193a8), TOBN(0x3ec23629, 0x8df06413)}},
-         {{TOBN(0xc7e9ae85, 0xb134defa), TOBN(0x6073b1d0, 0x1bb2d475),
-           TOBN(0xb9ad615e, 0x2863c00d), TOBN(0x9e29493d, 0x525f4ac4)},
-          {TOBN(0xc32b1dea, 0x4e9acf4f), TOBN(0x3e1f01c8, 0xa50db88d),
-           TOBN(0xb05d70ea, 0x04da916c), TOBN(0x714b0d0a, 0xd865803e)}},
-         {{TOBN(0x4bd493fc, 0x9920cb5e), TOBN(0x5b44b1f7, 0x92c7a3ac),
-           TOBN(0xa2a77293, 0xbcec9235), TOBN(0x5ee06e87, 0xcd378553)},
-          {TOBN(0xceff8173, 0xda621607), TOBN(0x2bb03e4c, 0x99f5d290),
-           TOBN(0x2945106a, 0xa6f734ac), TOBN(0xb5056604, 0xd25c4732)}},
-         {{TOBN(0x5945920c, 0xe079afee), TOBN(0x686e17a0, 0x6789831f),
-           TOBN(0x5966bee8, 0xb74a5ae5), TOBN(0x38a673a2, 0x1e258d46)},
-          {TOBN(0xbd1cc1f2, 0x83141c95), TOBN(0x3b2ecf4f, 0x0e96e486),
-           TOBN(0xcd3aa896, 0x74e5fc78), TOBN(0x415ec10c, 0x2482fa7a)}},
-         {{TOBN(0x15234419, 0x80503380), TOBN(0x513d917a, 0xd314b392),
-           TOBN(0xb0b52f4e, 0x63caecae), TOBN(0x07bf22ad, 0x2dc7780b)},
-          {TOBN(0xe761e8a1, 0xe4306839), TOBN(0x1b3be962, 0x5dd7feaa),
-           TOBN(0x4fe728de, 0x74c778f1), TOBN(0xf1fa0bda, 0x5e0070f6)}},
-         {{TOBN(0x85205a31, 0x6ec3f510), TOBN(0x2c7e4a14, 0xd2980475),
-           TOBN(0xde3c19c0, 0x6f30ebfd), TOBN(0xdb1c1f38, 0xd4b7e644)},
-          {TOBN(0xfe291a75, 0x5dce364a), TOBN(0xb7b22a3c, 0x058f5be3),
-           TOBN(0x2cd2c302, 0x37fea38c), TOBN(0x2930967a, 0x2e17be17)}},
-         {{TOBN(0x87f009de, 0x0c061c65), TOBN(0xcb014aac, 0xedc6ed44),
-           TOBN(0x49bd1cb4, 0x3bafb1eb), TOBN(0x81bd8b5c, 0x282d3688)},
-          {TOBN(0x1cdab87e, 0xf01a17af), TOBN(0x21f37ac4, 0xe710063b),
-           TOBN(0x5a6c5676, 0x42fc8193), TOBN(0xf4753e70, 0x56a6015c)}},
-         {{TOBN(0x020f795e, 0xa15b0a44), TOBN(0x8f37c8d7, 0x8958a958),
-           TOBN(0x63b7e89b, 0xa4b675b5), TOBN(0xb4fb0c0c, 0x0fc31aea)},
-          {TOBN(0xed95e639, 0xa7ff1f2e), TOBN(0x9880f5a3, 0x619614fb),
-           TOBN(0xdeb6ff02, 0x947151ab), TOBN(0x5bc5118c, 0xa868dcdb)}},
-         {{TOBN(0xd8da2055, 0x4c20cea5), TOBN(0xcac2776e, 0x14c4d69a),
-           TOBN(0xcccb22c1, 0x622d599b), TOBN(0xa4ddb653, 0x68a9bb50)},
-          {TOBN(0x2c4ff151, 0x1b4941b4), TOBN(0xe1ff19b4, 0x6efba588),
-           TOBN(0x35034363, 0xc48345e0), TOBN(0x45542e3d, 0x1e29dfc4)}},
-         {{TOBN(0xf197cb91, 0x349f7aed), TOBN(0x3b2b5a00, 0x8fca8420),
-           TOBN(0x7c175ee8, 0x23aaf6d8), TOBN(0x54dcf421, 0x35af32b6)},
-          {TOBN(0x0ba14307, 0x27d6561e), TOBN(0x879d5ee4, 0xd175b1e2),
-           TOBN(0xc7c43673, 0x99807db5), TOBN(0x77a54455, 0x9cd55bcd)}},
-         {{TOBN(0xe6c2ff13, 0x0105c072), TOBN(0x18f7a99f, 0x8dda7da4),
-           TOBN(0x4c301820, 0x0e2d35c1), TOBN(0x06a53ca0, 0xd9cc6c82)},
-          {TOBN(0xaa21cc1e, 0xf1aa1d9e), TOBN(0x32414334, 0x4a75b1e8),
-           TOBN(0x2a6d1328, 0x0ebe9fdc), TOBN(0x16bd173f, 0x98a4755a)}},
-         {{TOBN(0xfbb9b245, 0x2133ffd9), TOBN(0x39a8b2f1, 0x830f1a20),
-           TOBN(0x484bc97d, 0xd5a1f52a), TOBN(0xd6aebf56, 0xa40eddf8)},
-          {TOBN(0x32257acb, 0x76ccdac6), TOBN(0xaf4d36ec, 0x1586ff27),
-           TOBN(0x8eaa8863, 0xf8de7dd1), TOBN(0x0045d5cf, 0x88647c16)}}},
-        {{{TOBN(0xa6f3d574, 0xc005979d), TOBN(0xc2072b42, 0x6a40e350),
-           TOBN(0xfca5c156, 0x8de2ecf9), TOBN(0xa8c8bf5b, 0xa515344e)},
-          {TOBN(0x97aee555, 0x114df14a), TOBN(0xd4374a4d, 0xfdc5ec6b),
-           TOBN(0x754cc28f, 0x2ca85418), TOBN(0x71cb9e27, 0xd3c41f78)}},
-         {{TOBN(0x89105079, 0x03605c39), TOBN(0xf0843d9e, 0xa142c96c),
-           TOBN(0xf3744934, 0x16923684), TOBN(0x732caa2f, 0xfa0a2893)},
-          {TOBN(0xb2e8c270, 0x61160170), TOBN(0xc32788cc, 0x437fbaa3),
-           TOBN(0x39cd818e, 0xa6eda3ac), TOBN(0xe2e94239, 0x9e2b2e07)}},
-         {{TOBN(0x6967d39b, 0x0260e52a), TOBN(0xd42585cc, 0x90653325),
-           TOBN(0x0d9bd605, 0x21ca7954), TOBN(0x4fa20877, 0x81ed57b3)},
-          {TOBN(0x60c1eff8, 0xe34a0bbe), TOBN(0x56b0040c, 0x84f6ef64),
-           TOBN(0x28be2b24, 0xb1af8483), TOBN(0xb2278163, 0xf5531614)}},
-         {{TOBN(0x8df27545, 0x5922ac1c), TOBN(0xa7b3ef5c, 0xa52b3f63),
-           TOBN(0x8e77b214, 0x71de57c4), TOBN(0x31682c10, 0x834c008b)},
-          {TOBN(0xc76824f0, 0x4bd55d31), TOBN(0xb6d1c086, 0x17b61c71),
-           TOBN(0x31db0903, 0xc2a5089d), TOBN(0x9c092172, 0x184e5d3f)}},
-         {{TOBN(0xdd7ced5b, 0xc00cc638), TOBN(0x1a2015eb, 0x61278fc2),
-           TOBN(0x2e8e5288, 0x6a37f8d6), TOBN(0xc457786f, 0xe79933ad)},
-          {TOBN(0xb3fe4cce, 0x2c51211a), TOBN(0xad9b10b2, 0x24c20498),
-           TOBN(0x90d87a4f, 0xd28db5e5), TOBN(0x698cd105, 0x3aca2fc3)}},
-         {{TOBN(0x4f112d07, 0xe91b536d), TOBN(0xceb982f2, 0x9eba09d6),
-           TOBN(0x3c157b2c, 0x197c396f), TOBN(0xe23c2d41, 0x7b66eb24)},
-          {TOBN(0x480c57d9, 0x3f330d37), TOBN(0xb3a4c8a1, 0x79108deb),
-           TOBN(0x702388de, 0xcb199ce5), TOBN(0x0b019211, 0xb944a8d4)}},
-         {{TOBN(0x24f2a692, 0x840bb336), TOBN(0x7c353bdc, 0xa669fa7b),
-           TOBN(0xda20d6fc, 0xdec9c300), TOBN(0x625fbe2f, 0xa13a4f17)},
-          {TOBN(0xa2b1b61a, 0xdbc17328), TOBN(0x008965bf, 0xa9515621),
-           TOBN(0x49690939, 0xc620ff46), TOBN(0x182dd27d, 0x8717e91c)}},
-         {{TOBN(0x5ace5035, 0xea6c3997), TOBN(0x54259aaa, 0xc2610bef),
-           TOBN(0xef18bb3f, 0x3c80dd39), TOBN(0x6910b95b, 0x5fc3fa39)},
-          {TOBN(0xfce2f510, 0x43e09aee), TOBN(0xced56c9f, 0xa7675665),
-           TOBN(0x10e265ac, 0xd872db61), TOBN(0x6982812e, 0xae9fce69)}},
-         {{TOBN(0x29be11c6, 0xce800998), TOBN(0x72bb1752, 0xb90360d9),
-           TOBN(0x2c193197, 0x5a4ad590), TOBN(0x2ba2f548, 0x9fc1dbc0)},
-          {TOBN(0x7fe4eebb, 0xe490ebe0), TOBN(0x12a0a4cd, 0x7fae11c0),
-           TOBN(0x7197cf81, 0xe903ba37), TOBN(0xcf7d4aa8, 0xde1c6dd8)}},
-         {{TOBN(0x92af6bf4, 0x3fd5684c), TOBN(0x2b26eecf, 0x80360aa1),
-           TOBN(0xbd960f30, 0x00546a82), TOBN(0x407b3c43, 0xf59ad8fe)},
-          {TOBN(0x86cae5fe, 0x249c82ba), TOBN(0x9e0faec7, 0x2463744c),
-           TOBN(0x87f551e8, 0x94916272), TOBN(0x033f9344, 0x6ceb0615)}},
-         {{TOBN(0x1e5eb0d1, 0x8be82e84), TOBN(0x89967f0e, 0x7a582fef),
-           TOBN(0xbcf687d5, 0xa6e921fa), TOBN(0xdfee4cf3, 0xd37a09ba)},
-          {TOBN(0x94f06965, 0xb493c465), TOBN(0x638b9a1c, 0x7635c030),
-           TOBN(0x76667864, 0x66f05e9f), TOBN(0xccaf6808, 0xc04da725)}},
-         {{TOBN(0xca2eb690, 0x768fccfc), TOBN(0xf402d37d, 0xb835b362),
-           TOBN(0x0efac0d0, 0xe2fdfcce), TOBN(0xefc9cdef, 0xb638d990)},
-          {TOBN(0x2af12b72, 0xd1669a8b), TOBN(0x33c536bc, 0x5774ccbd),
-           TOBN(0x30b21909, 0xfb34870e), TOBN(0xc38fa2f7, 0x7df25aca)}},
-         {{TOBN(0x74c5f02b, 0xbf81f3f5), TOBN(0x0525a5ae, 0xaf7e4581),
-           TOBN(0x88d2aaba, 0x433c54ae), TOBN(0xed9775db, 0x806a56c5)},
-          {TOBN(0xd320738a, 0xc0edb37d), TOBN(0x25fdb6ee, 0x66cc1f51),
-           TOBN(0xac661d17, 0x10600d76), TOBN(0x931ec1f3, 0xbdd1ed76)}},
-         {{TOBN(0x65c11d62, 0x19ee43f1), TOBN(0x5cd57c3e, 0x60829d97),
-           TOBN(0xd26c91a3, 0x984be6e8), TOBN(0xf08d9309, 0x8b0c53bd)},
-          {TOBN(0x94bc9e5b, 0xc016e4ea), TOBN(0xd3916839, 0x11d43d2b),
-           TOBN(0x886c5ad7, 0x73701155), TOBN(0xe0377626, 0x20b00715)}},
-         {{TOBN(0x7f01c9ec, 0xaa80ba59), TOBN(0x3083411a, 0x68538e51),
-           TOBN(0x970370f1, 0xe88128af), TOBN(0x625cc3db, 0x91dec14b)},
-          {TOBN(0xfef9666c, 0x01ac3107), TOBN(0xb2a8d577, 0xd5057ac3),
-           TOBN(0xb0f26299, 0x92be5df7), TOBN(0xf579c8e5, 0x00353924)}},
-         {{TOBN(0xb8fa3d93, 0x1341ed7a), TOBN(0x4223272c, 0xa7b59d49),
-           TOBN(0x3dcb1947, 0x83b8c4a4), TOBN(0x4e413c01, 0xed1302e4)},
-          {TOBN(0x6d999127, 0xe17e44ce), TOBN(0xee86bf75, 0x33b3adfb),
-           TOBN(0xf6902fe6, 0x25aa96ca), TOBN(0xb73540e4, 0xe5aae47d)}},
-         {{TOBN(0x32801d7b, 0x1b4a158c), TOBN(0xe571c99e, 0x27e2a369),
-           TOBN(0x40cb76c0, 0x10d9f197), TOBN(0xc308c289, 0x3167c0ae)},
-          {TOBN(0xa6ef9dd3, 0xeb7958f2), TOBN(0xa7226dfc, 0x300879b1),
-           TOBN(0x6cd0b362, 0x7edf0636), TOBN(0x4efbce6c, 0x7bc37eed)}},
-         {{TOBN(0x75f92a05, 0x8d699021), TOBN(0x586d4c79, 0x772566e3),
-           TOBN(0x378ca5f1, 0x761ad23a), TOBN(0x650d86fc, 0x1465a8ac)},
-          {TOBN(0x7a4ed457, 0x842ba251), TOBN(0x6b65e3e6, 0x42234933),
-           TOBN(0xaf1543b7, 0x31aad657), TOBN(0xa4cefe98, 0xcbfec369)}},
-         {{TOBN(0xb587da90, 0x9f47befb), TOBN(0x6562e9fb, 0x41312d13),
-           TOBN(0xa691ea59, 0xeff1cefe), TOBN(0xcc30477a, 0x05fc4cf6)},
-          {TOBN(0xa1632461, 0x0b0ffd3d), TOBN(0xa1f16f3b, 0x5b355956),
-           TOBN(0x5b148d53, 0x4224ec24), TOBN(0xdc834e7b, 0xf977012a)}},
-         {{TOBN(0x7bfc5e75, 0xb2c69dbc), TOBN(0x3aa77a29, 0x03c3da6c),
-           TOBN(0xde0df03c, 0xca910271), TOBN(0xcbd5ca4a, 0x7806dc55)},
-          {TOBN(0xe1ca5807, 0x6db476cb), TOBN(0xfde15d62, 0x5f37a31e),
-           TOBN(0xf49af520, 0xf41af416), TOBN(0x96c5c5b1, 0x7d342db5)}},
-         {{TOBN(0x155c43b7, 0xeb4ceb9b), TOBN(0x2e993010, 0x4e77371a),
-           TOBN(0x1d2987da, 0x675d43af), TOBN(0xef2bc1c0, 0x8599fd72)},
-          {TOBN(0x96894b7b, 0x9342f6b2), TOBN(0x201eadf2, 0x7c8e71f0),
-           TOBN(0xf3479d9f, 0x4a1f3efc), TOBN(0xe0f8a742, 0x702a9704)}},
-         {{TOBN(0xeafd44b6, 0xb3eba40c), TOBN(0xf9739f29, 0xc1c1e0d0),
-           TOBN(0x0091471a, 0x619d505e), TOBN(0xc15f9c96, 0x9d7c263e)},
-          {TOBN(0x5be47285, 0x83afbe33), TOBN(0xa3b6d6af, 0x04f1e092),
-           TOBN(0xe76526b9, 0x751a9d11), TOBN(0x2ec5b26d, 0x9a4ae4d2)}},
-         {{TOBN(0xeb66f4d9, 0x02f6fb8d), TOBN(0x4063c561, 0x96912164),
-           TOBN(0xeb7050c1, 0x80ef3000), TOBN(0x288d1c33, 0xeaa5b3f0)},
-          {TOBN(0xe87c68d6, 0x07806fd8), TOBN(0xb2f7f9d5, 0x4bbbf50f),
-           TOBN(0x25972f3a, 0xac8d6627), TOBN(0xf8547774, 0x10e8c13b)}},
-         {{TOBN(0xcc50ef6c, 0x872b4a60), TOBN(0xab2a34a4, 0x4613521b),
-           TOBN(0x39c5c190, 0x983e15d1), TOBN(0x61dde5df, 0x59905512)},
-          {TOBN(0xe417f621, 0x9f2275f3), TOBN(0x0750c8b6, 0x451d894b),
-           TOBN(0x75b04ab9, 0x78b0bdaa), TOBN(0x3bfd9fd4, 0x458589bd)}},
-         {{TOBN(0xf1013e30, 0xee9120b6), TOBN(0x2b51af93, 0x23a4743e),
-           TOBN(0xea96ffae, 0x48d14d9e), TOBN(0x71dc0dbe, 0x698a1d32)},
-          {TOBN(0x914962d2, 0x0180cca4), TOBN(0x1ae60677, 0xc3568963),
-           TOBN(0x8cf227b1, 0x437bc444), TOBN(0xc650c83b, 0xc9962c7a)}},
-         {{TOBN(0x23c2c7dd, 0xfe7ccfc4), TOBN(0xf925c89d, 0x1b929d48),
-           TOBN(0x4460f74b, 0x06783c33), TOBN(0xac2c8d49, 0xa590475a)},
-          {TOBN(0xfb40b407, 0xb807bba0), TOBN(0x9d1e362d, 0x69ff8f3a),
-           TOBN(0xa33e9681, 0xcbef64a4), TOBN(0x67ece5fa, 0x332fb4b2)}},
-         {{TOBN(0x6900a99b, 0x739f10e3), TOBN(0xc3341ca9, 0xff525925),
-           TOBN(0xee18a626, 0xa9e2d041), TOBN(0xa5a83685, 0x29580ddd)},
-          {TOBN(0xf3470c81, 0x9d7de3cd), TOBN(0xedf02586, 0x2062cf9c),
-           TOBN(0xf43522fa, 0xc010edb0), TOBN(0x30314135, 0x13a4b1ae)}},
-         {{TOBN(0xc792e02a, 0xdb22b94b), TOBN(0x993d8ae9, 0xa1eaa45b),
-           TOBN(0x8aad6cd3, 0xcd1e1c63), TOBN(0x89529ca7, 0xc5ce688a)},
-          {TOBN(0x2ccee3aa, 0xe572a253), TOBN(0xe02b6438, 0x02a21efb),
-           TOBN(0xa7091b6e, 0xc9430358), TOBN(0x06d1b1fa, 0x9d7db504)}},
-         {{TOBN(0x58846d32, 0xc4744733), TOBN(0x40517c71, 0x379f9e34),
-           TOBN(0x2f65655f, 0x130ef6ca), TOBN(0x526e4488, 0xf1f3503f)},
-          {TOBN(0x8467bd17, 0x7ee4a976), TOBN(0x1d9dc913, 0x921363d1),
-           TOBN(0xd8d24c33, 0xb069e041), TOBN(0x5eb5da0a, 0x2cdf7f51)}},
-         {{TOBN(0x1c0f3cb1, 0x197b994f), TOBN(0x3c95a6c5, 0x2843eae9),
-           TOBN(0x7766ffc9, 0xa6097ea5), TOBN(0x7bea4093, 0xd723b867)},
-          {TOBN(0xb48e1f73, 0x4db378f9), TOBN(0x70025b00, 0xe37b77ac),
-           TOBN(0x943dc8e7, 0xaf24ad46), TOBN(0xb98a15ac, 0x16d00a85)}},
-         {{TOBN(0x3adc38ba, 0x2743b004), TOBN(0xb1c7f4f7, 0x334415ee),
-           TOBN(0xea43df8f, 0x1e62d05a), TOBN(0x32618905, 0x9d76a3b6)},
-          {TOBN(0x2fbd0bb5, 0xa23a0f46), TOBN(0x5bc971db, 0x6a01918c),
-           TOBN(0x7801d94a, 0xb4743f94), TOBN(0xb94df65e, 0x676ae22b)}},
-         {{TOBN(0xaafcbfab, 0xaf95894c), TOBN(0x7b9bdc07, 0x276b2241),
-           TOBN(0xeaf98362, 0x5bdda48b), TOBN(0x5977faf2, 0xa3fcb4df)},
-          {TOBN(0xbed042ef, 0x052c4b5b), TOBN(0x9fe87f71, 0x067591f0),
-           TOBN(0xc89c73ca, 0x22f24ec7), TOBN(0x7d37fa9e, 0xe64a9f1b)}},
-         {{TOBN(0x2710841a, 0x15562627), TOBN(0x2c01a613, 0xc243b034),
-           TOBN(0x1d135c56, 0x2bc68609), TOBN(0xc2ca1715, 0x8b03f1f6)},
-          {TOBN(0xc9966c2d, 0x3eb81d82), TOBN(0xc02abf4a, 0x8f6df13e),
-           TOBN(0x77b34bd7, 0x8f72b43b), TOBN(0xaff6218f, 0x360c82b0)}},
-         {{TOBN(0x0aa5726c, 0x8d55b9d2), TOBN(0xdc0adbe9, 0x99e9bffb),
-           TOBN(0x9097549c, 0xefb9e72a), TOBN(0x16755712, 0x9dfb3111)},
-          {TOBN(0xdd8bf984, 0xf26847f9), TOBN(0xbcb8e387, 0xdfb30cb7),
-           TOBN(0xc1fd32a7, 0x5171ef9c), TOBN(0x977f3fc7, 0x389b363f)}},
-         {{TOBN(0x116eaf2b, 0xf4babda0), TOBN(0xfeab68bd, 0xf7113c8e),
-           TOBN(0xd1e3f064, 0xb7def526), TOBN(0x1ac30885, 0xe0b3fa02)},
-          {TOBN(0x1c5a6e7b, 0x40142d9d), TOBN(0x839b5603, 0x30921c0b),
-           TOBN(0x48f301fa, 0x36a116a3), TOBN(0x380e1107, 0xcfd9ee6d)}},
-         {{TOBN(0x7945ead8, 0x58854be1), TOBN(0x4111c12e, 0xcbd4d49d),
-           TOBN(0xece3b1ec, 0x3a29c2ef), TOBN(0x6356d404, 0x8d3616f5)},
-          {TOBN(0x9f0d6a8f, 0x594d320e), TOBN(0x0989316d, 0xf651ccd2),
-           TOBN(0x6c32117a, 0x0f8fdde4), TOBN(0x9abe5cc5, 0xa26a9bbc)}},
-         {{TOBN(0xcff560fb, 0x9723f671), TOBN(0x21b2a12d, 0x7f3d593c),
-           TOBN(0xe4cb18da, 0x24ba0696), TOBN(0x186e2220, 0xc3543384)},
-          {TOBN(0x722f64e0, 0x88312c29), TOBN(0x94282a99, 0x17dc7752),
-           TOBN(0x62467bbf, 0x5a85ee89), TOBN(0xf435c650, 0xf10076a0)}},
-         {{TOBN(0xc9ff1539, 0x43b3a50b), TOBN(0x7132130c, 0x1a53efbc),
-           TOBN(0x31bfe063, 0xf7b0c5b7), TOBN(0xb0179a7d, 0x4ea994cc)},
-          {TOBN(0x12d064b3, 0xc85f455b), TOBN(0x47259328, 0x8f6e0062),
-           TOBN(0xf64e590b, 0xb875d6d9), TOBN(0x22dd6225, 0xad92bcc7)}},
-         {{TOBN(0xb658038e, 0xb9c3bd6d), TOBN(0x00cdb0d6, 0xfbba27c8),
-           TOBN(0x0c681337, 0x1062c45d), TOBN(0xd8515b8c, 0x2d33407d)},
-          {TOBN(0xcb8f699e, 0x8cbb5ecf), TOBN(0x8c4347f8, 0xc608d7d8),
-           TOBN(0x2c11850a, 0xbb3e00db), TOBN(0x20a8dafd, 0xecb49d19)}},
-         {{TOBN(0xbd781480, 0x45ee2f40), TOBN(0x75e354af, 0x416b60cf),
-           TOBN(0xde0b58a1, 0x8d49a8c4), TOBN(0xe40e94e2, 0xfa359536)},
-          {TOBN(0xbd4fa59f, 0x62accd76), TOBN(0x05cf466a, 0x8c762837),
-           TOBN(0xb5abda99, 0x448c277b), TOBN(0x5a9e01bf, 0x48b13740)}},
-         {{TOBN(0x9d457798, 0x326aad8d), TOBN(0xbdef4954, 0xc396f7e7),
-           TOBN(0x6fb274a2, 0xc253e292), TOBN(0x2800bf0a, 0x1cfe53e7)},
-          {TOBN(0x22426d31, 0x44438fd4), TOBN(0xef233923, 0x5e259f9a),
-           TOBN(0x4188503c, 0x03f66264), TOBN(0x9e5e7f13, 0x7f9fdfab)}},
-         {{TOBN(0x565eb76c, 0x5fcc1aba), TOBN(0xea632548, 0x59b5bff8),
-           TOBN(0x5587c087, 0xaab6d3fa), TOBN(0x92b639ea, 0x6ce39c1b)},
-          {TOBN(0x0706e782, 0x953b135c), TOBN(0x7308912e, 0x425268ef),
-           TOBN(0x599e92c7, 0x090e7469), TOBN(0x83b90f52, 0x9bc35e75)}},
-         {{TOBN(0x4750b3d0, 0x244975b3), TOBN(0xf3a44358, 0x11965d72),
-           TOBN(0x179c6774, 0x9c8dc751), TOBN(0xff18cdfe, 0xd23d9ff0)},
-          {TOBN(0xc4013833, 0x2028e247), TOBN(0x96e280e2, 0xf3bfbc79),
-           TOBN(0xf60417bd, 0xd0880a84), TOBN(0x263c9f3d, 0x2a568151)}},
-         {{TOBN(0x36be15b3, 0x2d2ce811), TOBN(0x846dc0c2, 0xf8291d21),
-           TOBN(0x5cfa0ecb, 0x789fcfdb), TOBN(0x45a0beed, 0xd7535b9a)},
-          {TOBN(0xec8e9f07, 0x96d69af1), TOBN(0x31a7c5b8, 0x599ab6dc),
-           TOBN(0xd36d45ef, 0xf9e2e09f), TOBN(0x3cf49ef1, 0xdcee954b)}},
-         {{TOBN(0x6be34cf3, 0x086cff9b), TOBN(0x88dbd491, 0x39a3360f),
-           TOBN(0x1e96b8cc, 0x0dbfbd1d), TOBN(0xc1e5f7bf, 0xcb7e2552)},
-          {TOBN(0x0547b214, 0x28819d98), TOBN(0xc770dd9c, 0x7aea9dcb),
-           TOBN(0xaef0d4c7, 0x041d68c8), TOBN(0xcc2b9818, 0x13cb9ba8)}},
-         {{TOBN(0x7fc7bc76, 0xfe86c607), TOBN(0x6b7b9337, 0x502a9a95),
-           TOBN(0x1948dc27, 0xd14dab63), TOBN(0x249dd198, 0xdae047be)},
-          {TOBN(0xe8356584, 0xa981a202), TOBN(0x3531dd18, 0x3a893387),
-           TOBN(0x1be11f90, 0xc85c7209), TOBN(0x93d2fe1e, 0xe2a52b5a)}},
-         {{TOBN(0x8225bfe2, 0xec6d6b97), TOBN(0x9cf6d6f4, 0xbd0aa5de),
-           TOBN(0x911459cb, 0x54779f5f), TOBN(0x5649cddb, 0x86aeb1f3)},
-          {TOBN(0x32133579, 0x3f26ce5a), TOBN(0xc289a102, 0x550f431e),
-           TOBN(0x559dcfda, 0x73b84c6f), TOBN(0x84973819, 0xee3ac4d7)}},
-         {{TOBN(0xb51e55e6, 0xf2606a82), TOBN(0xe25f7061, 0x90f2fb57),
-           TOBN(0xacef6c2a, 0xb1a4e37c), TOBN(0x864e359d, 0x5dcf2706)},
-          {TOBN(0x479e6b18, 0x7ce57316), TOBN(0x2cab2500, 0x3a96b23d),
-           TOBN(0xed489862, 0x8ef16df7), TOBN(0x2056538c, 0xef3758b5)}},
-         {{TOBN(0xa7df865e, 0xf15d3101), TOBN(0x80c5533a, 0x61b553d7),
-           TOBN(0x366e1997, 0x4ed14294), TOBN(0x6620741f, 0xb3c0bcd6)},
-          {TOBN(0x21d1d9c4, 0xedc45418), TOBN(0x005b859e, 0xc1cc4a9d),
-           TOBN(0xdf01f630, 0xa1c462f0), TOBN(0x15d06cf3, 0xf26820c7)}},
-         {{TOBN(0x9f7f24ee, 0x3484be47), TOBN(0x2ff33e96, 0x4a0c902f),
-           TOBN(0x00bdf457, 0x5a0bc453), TOBN(0x2378dfaf, 0x1aa238db)},
-          {TOBN(0x272420ec, 0x856720f2), TOBN(0x2ad9d95b, 0x96797291),
-           TOBN(0xd1242cc6, 0x768a1558), TOBN(0x2e287f8b, 0x5cc86aa8)}},
-         {{TOBN(0x796873d0, 0x990cecaa), TOBN(0xade55f81, 0x675d4080),
-           TOBN(0x2645eea3, 0x21f0cd84), TOBN(0x7a1efa0f, 0xb4e17d02)},
-          {TOBN(0xf6858420, 0x037cc061), TOBN(0x682e05f0, 0xd5d43e12),
-           TOBN(0x59c36994, 0x27218710), TOBN(0x85cbba4d, 0x3f7cd2fc)}},
-         {{TOBN(0x726f9729, 0x7a3cd22a), TOBN(0x9f8cd5dc, 0x4a628397),
-           TOBN(0x17b93ab9, 0xc23165ed), TOBN(0xff5f5dbf, 0x122823d4)},
-          {TOBN(0xc1e4e4b5, 0x654a446d), TOBN(0xd1a9496f, 0x677257ba),
-           TOBN(0x6387ba94, 0xde766a56), TOBN(0x23608bc8, 0x521ec74a)}},
-         {{TOBN(0x16a522d7, 0x6688c4d4), TOBN(0x9d6b4282, 0x07373abd),
-           TOBN(0xa62f07ac, 0xb42efaa3), TOBN(0xf73e00f7, 0xe3b90180)},
-          {TOBN(0x36175fec, 0x49421c3e), TOBN(0xc4e44f9b, 0x3dcf2678),
-           TOBN(0x76df436b, 0x7220f09f), TOBN(0x172755fb, 0x3aa8b6cf)}},
-         {{TOBN(0xbab89d57, 0x446139cc), TOBN(0x0a0a6e02, 0x5fe0208f),
-           TOBN(0xcdbb63e2, 0x11e5d399), TOBN(0x33ecaa12, 0xa8977f0b)},
-          {TOBN(0x59598b21, 0xf7c42664), TOBN(0xb3e91b32, 0xab65d08a),
-           TOBN(0x035822ee, 0xf4502526), TOBN(0x1dcf0176, 0x720a82a9)}},
-         {{TOBN(0x50f8598f, 0x3d589e02), TOBN(0xdf0478ff, 0xb1d63d2c),
-           TOBN(0x8b8068bd, 0x1571cd07), TOBN(0x30c3aa4f, 0xd79670cd)},
-          {TOBN(0x25e8fd4b, 0x941ade7f), TOBN(0x3d1debdc, 0x32790011),
-           TOBN(0x65b6dcbd, 0x3a3f9ff0), TOBN(0x282736a4, 0x793de69c)}},
-         {{TOBN(0xef69a0c3, 0xd41d3bd3), TOBN(0xb533b8c9, 0x07a26bde),
-           TOBN(0xe2801d97, 0xdb2edf9f), TOBN(0xdc4a8269, 0xe1877af0)},
-          {TOBN(0x6c1c5851, 0x3d590dbe), TOBN(0x84632f6b, 0xee4e9357),
-           TOBN(0xd36d36b7, 0x79b33374), TOBN(0xb46833e3, 0x9bbca2e6)}},
-         {{TOBN(0x37893913, 0xf7fc0586), TOBN(0x385315f7, 0x66bf4719),
-           TOBN(0x72c56293, 0xb31855dc), TOBN(0xd1416d4e, 0x849061fe)},
-          {TOBN(0xbeb3ab78, 0x51047213), TOBN(0x447f6e61, 0xf040c996),
-           TOBN(0xd06d310d, 0x638b1d0c), TOBN(0xe28a413f, 0xbad1522e)}},
-         {{TOBN(0x685a76cb, 0x82003f86), TOBN(0x610d07f7, 0x0bcdbca3),
-           TOBN(0x6ff66021, 0x9ca4c455), TOBN(0x7df39b87, 0xcea10eec)},
-          {TOBN(0xb9255f96, 0xe22db218), TOBN(0x8cc6d9eb, 0x08a34c44),
-           TOBN(0xcd4ffb86, 0x859f9276), TOBN(0x8fa15eb2, 0x50d07335)}},
-         {{TOBN(0xdf553845, 0xcf2c24b5), TOBN(0x89f66a9f, 0x52f9c3ba),
-           TOBN(0x8f22b5b9, 0xe4a7ceb3), TOBN(0xaffef809, 0x0e134686)},
-          {TOBN(0x3e53e1c6, 0x8eb8fac2), TOBN(0x93c1e4eb, 0x28aec98e),
-           TOBN(0xb6b91ec5, 0x32a43bcb), TOBN(0x2dbfa947, 0xb2d74a51)}},
-         {{TOBN(0xe065d190, 0xca84bad7), TOBN(0xfb13919f, 0xad58e65c),
-           TOBN(0x3c41718b, 0xf1cb6e31), TOBN(0x688969f0, 0x06d05c3f)},
-          {TOBN(0xd4f94ce7, 0x21264d45), TOBN(0xfdfb65e9, 0x7367532b),
-           TOBN(0x5b1be8b1, 0x0945a39d), TOBN(0x229f789c, 0x2b8baf3b)}},
-         {{TOBN(0xd8f41f3e, 0x6f49f15d), TOBN(0x678ce828, 0x907f0792),
-           TOBN(0xc69ace82, 0xfca6e867), TOBN(0x106451ae, 0xd01dcc89)},
-          {TOBN(0x1bb4f7f0, 0x19fc32d2), TOBN(0x64633dfc, 0xb00c52d2),
-           TOBN(0x8f13549a, 0xad9ea445), TOBN(0x99a3bf50, 0xfb323705)}},
-         {{TOBN(0x0c9625a2, 0x534d4dbc), TOBN(0x45b8f1d1, 0xc2a2fea3),
-           TOBN(0x76ec21a1, 0xa530fc1a), TOBN(0x4bac9c2a, 0x9e5bd734)},
-          {TOBN(0x5996d76a, 0x7b4e3587), TOBN(0x0045cdee, 0x1182d9e3),
-           TOBN(0x1aee24b9, 0x1207f13d), TOBN(0x66452e97, 0x97345a41)}},
-         {{TOBN(0x16e5b054, 0x9f950cd0), TOBN(0x9cc72fb1, 0xd7fdd075),
-           TOBN(0x6edd61e7, 0x66249663), TOBN(0xde4caa4d, 0xf043cccb)},
-          {TOBN(0x11b1f57a, 0x55c7ac17), TOBN(0x779cbd44, 0x1a85e24d),
-           TOBN(0x78030f86, 0xe46081e7), TOBN(0xfd4a6032, 0x8e20f643)}},
-         {{TOBN(0xcc7a6488, 0x0a750c0f), TOBN(0x39bacfe3, 0x4e548e83),
-           TOBN(0x3d418c76, 0x0c110f05), TOBN(0x3e4daa4c, 0xb1f11588)},
-          {TOBN(0x2733e7b5, 0x5ffc69ff), TOBN(0x46f147bc, 0x92053127),
-           TOBN(0x885b2434, 0xd722df94), TOBN(0x6a444f65, 0xe6fc6b7c)}}},
-        {{{TOBN(0x7a1a465a, 0xc3f16ea8), TOBN(0x115a461d, 0xb2f1d11c),
-           TOBN(0x4767dd95, 0x6c68a172), TOBN(0x3392f2eb, 0xd13a4698)},
-          {TOBN(0xc7a99ccd, 0xe526cdc7), TOBN(0x8e537fdc, 0x22292b81),
-           TOBN(0x76d8cf69, 0xa6d39198), TOBN(0xffc5ff43, 0x2446852d)}},
-         {{TOBN(0x97b14f7e, 0xa90567e6), TOBN(0x513257b7, 0xb6ae5cb7),
-           TOBN(0x85454a3c, 0x9f10903d), TOBN(0xd8d2c9ad, 0x69bc3724)},
-          {TOBN(0x38da9324, 0x6b29cb44), TOBN(0xb540a21d, 0x77c8cbac),
-           TOBN(0x9bbfe435, 0x01918e42), TOBN(0xfffa707a, 0x56c3614e)}},
-         {{TOBN(0x0ce4e3f1, 0xd4e353b7), TOBN(0x062d8a14, 0xef46b0a0),
-           TOBN(0x6408d5ab, 0x574b73fd), TOBN(0xbc41d1c9, 0xd3273ffd)},
-          {TOBN(0x3538e1e7, 0x6be77800), TOBN(0x71fe8b37, 0xc5655031),
-           TOBN(0x1cd91621, 0x6b9b331a), TOBN(0xad825d0b, 0xbb388f73)}},
-         {{TOBN(0x56c2e05b, 0x1cb76219), TOBN(0x0ec0bf91, 0x71567e7e),
-           TOBN(0xe7076f86, 0x61c4c910), TOBN(0xd67b085b, 0xbabc04d9)},
-          {TOBN(0x9fb90459, 0x5e93a96a), TOBN(0x7526c1ea, 0xfbdc249a),
-           TOBN(0x0d44d367, 0xecdd0bb7), TOBN(0x95399917, 0x9dc0d695)}},
-         {{TOBN(0x61360ee9, 0x9e240d18), TOBN(0x057cdcac, 0xb4b94466),
-           TOBN(0xe7667cd1, 0x2fe5325c), TOBN(0x1fa297b5, 0x21974e3b)},
-          {TOBN(0xfa4081e7, 0xdb083d76), TOBN(0x31993be6, 0xf206bd15),
-           TOBN(0x8949269b, 0x14c19f8c), TOBN(0x21468d72, 0xa9d92357)}},
-         {{TOBN(0x2ccbc583, 0xa4c506ec), TOBN(0x957ed188, 0xd1acfe97),
-           TOBN(0x8baed833, 0x12f1aea2), TOBN(0xef2a6cb4, 0x8325362d)},
-          {TOBN(0x130dde42, 0x8e195c43), TOBN(0xc842025a, 0x0e6050c6),
-           TOBN(0x2da972a7, 0x08686a5d), TOBN(0xb52999a1, 0xe508b4a8)}},
-         {{TOBN(0xd9f090b9, 0x10a5a8bd), TOBN(0xca91d249, 0x096864da),
-           TOBN(0x8e6a93be, 0x3f67dbc1), TOBN(0xacae6fba, 0xf5f4764c)},
-          {TOBN(0x1563c6e0, 0xd21411a0), TOBN(0x28fa787f, 0xda0a4ad8),
-           TOBN(0xd524491c, 0x908c8030), TOBN(0x1257ba0e, 0x4c795f07)}},
-         {{TOBN(0x83f49167, 0xceca9754), TOBN(0x426d2cf6, 0x4b7939a0),
-           TOBN(0x2555e355, 0x723fd0bf), TOBN(0xa96e6d06, 0xc4f144e2)},
-          {TOBN(0x4768a8dd, 0x87880e61), TOBN(0x15543815, 0xe508e4d5),
-           TOBN(0x09d7e772, 0xb1b65e15), TOBN(0x63439dd6, 0xac302fa0)}},
-         {{TOBN(0xb93f802f, 0xc14e35c2), TOBN(0x71735b7c, 0x4341333c),
-           TOBN(0x03a25104, 0x16d4f362), TOBN(0x3f4d069b, 0xbf433c8e)},
-          {TOBN(0x0d83ae01, 0xf78f5a7c), TOBN(0x50a8ffbe, 0x7c4eed07),
-           TOBN(0xc74f8906, 0x76e10f83), TOBN(0x7d080966, 0x9ddaf8e1)}},
-         {{TOBN(0xb11df8e1, 0x698e04cc), TOBN(0x877be203, 0x169005c8),
-           TOBN(0x32749e8c, 0x4f3c6179), TOBN(0x2dbc9d0a, 0x7853fc05)},
-          {TOBN(0x187d4f93, 0x9454d937), TOBN(0xe682ce9d, 0xb4800e1b),
-           TOBN(0xa9129ad8, 0x165e68e8), TOBN(0x0fe29735, 0xbe7f785b)}},
-         {{TOBN(0x5303f40c, 0x5b9e02b7), TOBN(0xa37c9692, 0x35ee04e8),
-           TOBN(0x5f46cc20, 0x34d6632b), TOBN(0x55ef72b2, 0x96ac545b)},
-          {TOBN(0xabec5c1f, 0x7b91b062), TOBN(0x0a79e1c7, 0xbb33e821),
-           TOBN(0xbb04b428, 0x3a9f4117), TOBN(0x0de1f28f, 0xfd2a475a)}},
-         {{TOBN(0x31019ccf, 0x3a4434b4), TOBN(0xa3458111, 0x1a7954dc),
-           TOBN(0xa9dac80d, 0xe34972a7), TOBN(0xb043d054, 0x74f6b8dd)},
-          {TOBN(0x021c319e, 0x11137b1a), TOBN(0x00a754ce, 0xed5cc03f),
-           TOBN(0x0aa2c794, 0xcbea5ad4), TOBN(0x093e67f4, 0x70c015b6)}},
-         {{TOBN(0x72cdfee9, 0xc97e3f6b), TOBN(0xc10bcab4, 0xb6da7461),
-           TOBN(0x3b02d2fc, 0xb59806b9), TOBN(0x85185e89, 0xa1de6f47)},
-          {TOBN(0x39e6931f, 0x0eb6c4d4), TOBN(0x4d4440bd, 0xd4fa5b04),
-           TOBN(0x5418786e, 0x34be7eb8), TOBN(0x6380e521, 0x9d7259bc)}},
-         {{TOBN(0x20ac0351, 0xd598d710), TOBN(0x272c4166, 0xcb3a4da4),
-           TOBN(0xdb82fe1a, 0xca71de1f), TOBN(0x746e79f2, 0xd8f54b0f)},
-          {TOBN(0x6e7fc736, 0x4b573e9b), TOBN(0x75d03f46, 0xfd4b5040),
-           TOBN(0x5c1cc36d, 0x0b98d87b), TOBN(0x513ba3f1, 0x1f472da1)}},
-         {{TOBN(0x79d0af26, 0xabb177dd), TOBN(0xf82ab568, 0x7891d564),
-           TOBN(0x2b6768a9, 0x72232173), TOBN(0xefbb3bb0, 0x8c1f6619)},
-          {TOBN(0xb29c11db, 0xa6d18358), TOBN(0x519e2797, 0xb0916d3a),
-           TOBN(0xd4dc18f0, 0x9188e290), TOBN(0x648e86e3, 0x98b0ca7f)}},
-         {{TOBN(0x859d3145, 0x983c38b5), TOBN(0xb14f176c, 0x637abc8b),
-           TOBN(0x2793fb9d, 0xcaff7be6), TOBN(0xebe5a55f, 0x35a66a5a)},
-          {TOBN(0x7cec1dcd, 0x9f87dc59), TOBN(0x7c595cd3, 0xfbdbf560),
-           TOBN(0x5b543b22, 0x26eb3257), TOBN(0x69080646, 0xc4c935fd)}},
-         {{TOBN(0x7f2e4403, 0x81e9ede3), TOBN(0x243c3894, 0xcaf6df0a),
-           TOBN(0x7c605bb1, 0x1c073b11), TOBN(0xcd06a541, 0xba6a4a62)},
-          {TOBN(0x29168949, 0x49d4e2e5), TOBN(0x33649d07, 0x4af66880),
-           TOBN(0xbfc0c885, 0xe9a85035), TOBN(0xb4e52113, 0xfc410f4b)}},
-         {{TOBN(0xdca3b706, 0x78a6513b), TOBN(0x92ea4a2a, 0x9edb1943),
-           TOBN(0x02642216, 0xdb6e2dd8), TOBN(0x9b45d0b4, 0x9fd57894)},
-          {TOBN(0x114e70db, 0xc69d11ae), TOBN(0x1477dd19, 0x4c57595f),
-           TOBN(0xbc2208b4, 0xec77c272), TOBN(0x95c5b4d7, 0xdb68f59c)}},
-         {{TOBN(0xb8c4fc63, 0x42e532b7), TOBN(0x386ba422, 0x9ae35290),
-           TOBN(0xfb5dda42, 0xd201ecbc), TOBN(0x2353dc8b, 0xa0e38fd6)},
-          {TOBN(0x9a0b85ea, 0x68f7e978), TOBN(0x96ec5682, 0x2ad6d11f),
-           TOBN(0x5e279d6c, 0xe5f6886d), TOBN(0xd3fe03cd, 0x3cb1914d)}},
-         {{TOBN(0xfe541fa4, 0x7ea67c77), TOBN(0x952bd2af, 0xe3ea810c),
-           TOBN(0x791fef56, 0x8d01d374), TOBN(0xa3a1c621, 0x0f11336e)},
-          {TOBN(0x5ad0d5a9, 0xc7ec6d79), TOBN(0xff7038af, 0x3225c342),
-           TOBN(0x003c6689, 0xbc69601b), TOBN(0x25059bc7, 0x45e8747d)}},
-         {{TOBN(0xfa4965b2, 0xf2086fbf), TOBN(0xf6840ea6, 0x86916078),
-           TOBN(0xd7ac7620, 0x70081d6c), TOBN(0xe600da31, 0xb5328645)},
-          {TOBN(0x01916f63, 0x529b8a80), TOBN(0xe80e4858, 0x2d7d6f3e),
-           TOBN(0x29eb0fe8, 0xd664ca7c), TOBN(0xf017637b, 0xe7b43b0c)}},
-         {{TOBN(0x9a75c806, 0x76cb2566), TOBN(0x8f76acb1, 0xb24892d9),
-           TOBN(0x7ae7b9cc, 0x1f08fe45), TOBN(0x19ef7329, 0x6a4907d8)},
-          {TOBN(0x2db4ab71, 0x5f228bf0), TOBN(0xf3cdea39, 0x817032d7),
-           TOBN(0x0b1f482e, 0xdcabe3c0), TOBN(0x3baf76b4, 0xbb86325c)}},
-         {{TOBN(0xd49065e0, 0x10089465), TOBN(0x3bab5d29, 0x8e77c596),
-           TOBN(0x7636c3a6, 0x193dbd95), TOBN(0xdef5d294, 0xb246e499)},
-          {TOBN(0xb22c58b9, 0x286b2475), TOBN(0xa0b93939, 0xcd80862b),
-           TOBN(0x3002c83a, 0xf0992388), TOBN(0x6de01f9b, 0xeacbe14c)}},
-         {{TOBN(0x6aac688e, 0xadd70482), TOBN(0x708de92a, 0x7b4a4e8a),
-           TOBN(0x75b6dd73, 0x758a6eef), TOBN(0xea4bf352, 0x725b3c43)},
-          {TOBN(0x10041f2c, 0x87912868), TOBN(0xb1b1be95, 0xef09297a),
-           TOBN(0x19ae23c5, 0xa9f3860a), TOBN(0xc4f0f839, 0x515dcf4b)}},
-         {{TOBN(0x3c7ecca3, 0x97f6306a), TOBN(0x744c44ae, 0x68a3a4b0),
-           TOBN(0x69cd13a0, 0xb3a1d8a2), TOBN(0x7cad0a1e, 0x5256b578)},
-          {TOBN(0xea653fcd, 0x33791d9e), TOBN(0x9cc2a05d, 0x74b2e05f),
-           TOBN(0x73b391dc, 0xfd7affa2), TOBN(0xddb7091e, 0xb6b05442)}},
-         {{TOBN(0xc71e27bf, 0x8538a5c6), TOBN(0x195c63dd, 0x89abff17),
-           TOBN(0xfd315285, 0x1b71e3da), TOBN(0x9cbdfda7, 0xfa680fa0)},
-          {TOBN(0x9db876ca, 0x849d7eab), TOBN(0xebe2764b, 0x3c273271),
-           TOBN(0x663357e3, 0xf208dcea), TOBN(0x8c5bd833, 0x565b1b70)}},
-         {{TOBN(0xccc3b4f5, 0x9837fc0d), TOBN(0x9b641ba8, 0xa79cf00f),
-           TOBN(0x7428243d, 0xdfdf3990), TOBN(0x83a594c4, 0x020786b1)},
-          {TOBN(0xb712451a, 0x526c4502), TOBN(0x9d39438e, 0x6adb3f93),
-           TOBN(0xfdb261e3, 0xe9ff0ccd), TOBN(0x80344e3c, 0xe07af4c3)}},
-         {{TOBN(0x75900d7c, 0x2fa4f126), TOBN(0x08a3b865, 0x5c99a232),
-           TOBN(0x2478b6bf, 0xdb25e0c3), TOBN(0x482cc2c2, 0x71db2edf)},
-          {TOBN(0x37df7e64, 0x5f321bb8), TOBN(0x8a93821b, 0x9a8005b4),
-           TOBN(0x3fa2f10c, 0xcc8c1958), TOBN(0x0d332218, 0x2c269d0a)}},
-         {{TOBN(0x20ab8119, 0xe246b0e6), TOBN(0xb39781e4, 0xd349fd17),
-           TOBN(0xd293231e, 0xb31aa100), TOBN(0x4b779c97, 0xbb032168)},
-          {TOBN(0x4b3f19e1, 0xc8470500), TOBN(0x45b7efe9, 0x0c4c869d),
-           TOBN(0xdb84f38a, 0xa1a6bbcc), TOBN(0x3b59cb15, 0xb2fddbc1)}},
-         {{TOBN(0xba5514df, 0x3fd165e8), TOBN(0x499fd6a9, 0x061f8811),
-           TOBN(0x72cd1fe0, 0xbfef9f00), TOBN(0x120a4bb9, 0x79ad7e8a)},
-          {TOBN(0xf2ffd095, 0x5f4a5ac5), TOBN(0xcfd174f1, 0x95a7a2f0),
-           TOBN(0xd42301ba, 0x9d17baf1), TOBN(0xd2fa487a, 0x77f22089)}},
-         {{TOBN(0x9cb09efe, 0xb1dc77e1), TOBN(0xe9566939, 0x21c99682),
-           TOBN(0x8c546901, 0x6c6067bb), TOBN(0xfd378574, 0x61c24456)},
-          {TOBN(0x2b6a6cbe, 0x81796b33), TOBN(0x62d550f6, 0x58e87f8b),
-           TOBN(0x1b763e1c, 0x7f1b01b4), TOBN(0x4b93cfea, 0x1b1b5e12)}},
-         {{TOBN(0xb9345238, 0x1d531696), TOBN(0x57201c00, 0x88cdde69),
-           TOBN(0xdde92251, 0x9a86afc7), TOBN(0xe3043895, 0xbd35cea8)},
-          {TOBN(0x7608c1e1, 0x8555970d), TOBN(0x8267dfa9, 0x2535935e),
-           TOBN(0xd4c60a57, 0x322ea38b), TOBN(0xe0bf7977, 0x804ef8b5)}},
-         {{TOBN(0x1a0dab28, 0xc06fece4), TOBN(0xd405991e, 0x94e7b49d),
-           TOBN(0xc542b6d2, 0x706dab28), TOBN(0xcb228da3, 0xa91618fb)},
-          {TOBN(0x224e4164, 0x107d1cea), TOBN(0xeb9fdab3, 0xd0f5d8f1),
-           TOBN(0xc02ba386, 0x0d6e41cd), TOBN(0x676a72c5, 0x9b1f7146)}},
-         {{TOBN(0xffd6dd98, 0x4d6cb00b), TOBN(0xcef9c5ca, 0xde2e8d7c),
-           TOBN(0xa1bbf5d7, 0x641c7936), TOBN(0x1b95b230, 0xee8f772e)},
-          {TOBN(0xf765a92e, 0xe8ac25b1), TOBN(0xceb04cfc, 0x3a18b7c6),
-           TOBN(0x27944cef, 0x0acc8966), TOBN(0xcbb3c957, 0x434c1004)}},
-         {{TOBN(0x9c9971a1, 0xa43ff93c), TOBN(0x5bc2db17, 0xa1e358a9),
-           TOBN(0x45b4862e, 0xa8d9bc82), TOBN(0x70ebfbfb, 0x2201e052)},
-          {TOBN(0xafdf64c7, 0x92871591), TOBN(0xea5bcae6, 0xb42d0219),
-           TOBN(0xde536c55, 0x2ad8f03c), TOBN(0xcd6c3f4d, 0xa76aa33c)}},
-         {{TOBN(0xbeb5f623, 0x0bca6de3), TOBN(0xdd20dd99, 0xb1e706fd),
-           TOBN(0x90b3ff9d, 0xac9059d4), TOBN(0x2d7b2902, 0x7ccccc4e)},
-          {TOBN(0x8a090a59, 0xce98840f), TOBN(0xa5d947e0, 0x8410680a),
-           TOBN(0x49ae346a, 0x923379a5), TOBN(0x7dbc84f9, 0xb28a3156)}},
-         {{TOBN(0xfd40d916, 0x54a1aff2), TOBN(0xabf318ba, 0x3a78fb9b),
-           TOBN(0x50152ed8, 0x3029f95e), TOBN(0x9fc1dd77, 0xc58ad7fa)},
-          {TOBN(0x5fa57915, 0x13595c17), TOBN(0xb9504668, 0x8f62b3a9),
-           TOBN(0x907b5b24, 0xff3055b0), TOBN(0x2e995e35, 0x9a84f125)}},
-         {{TOBN(0x87dacf69, 0x7e9bbcfb), TOBN(0x95d0c1d6, 0xe86d96e3),
-           TOBN(0x65726e3c, 0x2d95a75c), TOBN(0x2c3c9001, 0xacd27f21)},
-          {TOBN(0x1deab561, 0x6c973f57), TOBN(0x108b7e2c, 0xa5221643),
-           TOBN(0x5fee9859, 0xc4ef79d4), TOBN(0xbd62b88a, 0x40d4b8c6)}},
-         {{TOBN(0xb4dd29c4, 0x197c75d6), TOBN(0x266a6df2, 0xb7076feb),
-           TOBN(0x9512d0ea, 0x4bf2df11), TOBN(0x1320c24f, 0x6b0cc9ec)},
-          {TOBN(0x6bb1e0e1, 0x01a59596), TOBN(0x8317c5bb, 0xeff9aaac),
-           TOBN(0x65bb405e, 0x385aa6c9), TOBN(0x613439c1, 0x8f07988f)}},
-         {{TOBN(0xd730049f, 0x16a66e91), TOBN(0xe97f2820, 0xfa1b0e0d),
-           TOBN(0x4131e003, 0x304c28ea), TOBN(0x820ab732, 0x526bac62)},
-          {TOBN(0xb2ac9ef9, 0x28714423), TOBN(0x54ecfffa, 0xadb10cb2),
-           TOBN(0x8781476e, 0xf886a4cc), TOBN(0x4b2c87b5, 0xdb2f8d49)}},
-         {{TOBN(0xe857cd20, 0x0a44295d), TOBN(0x707d7d21, 0x58c6b044),
-           TOBN(0xae8521f9, 0xf596757c), TOBN(0x87448f03, 0x67b2b714)},
-          {TOBN(0x13a9bc45, 0x5ebcd58d), TOBN(0x79bcced9, 0x9122d3c1),
-           TOBN(0x3c644247, 0x9e076642), TOBN(0x0cf22778, 0x2df4767d)}},
-         {{TOBN(0x5e61aee4, 0x71d444b6), TOBN(0x211236bf, 0xc5084a1d),
-           TOBN(0x7e15bc9a, 0x4fd3eaf6), TOBN(0x68df2c34, 0xab622bf5)},
-          {TOBN(0x9e674f0f, 0x59bf4f36), TOBN(0xf883669b, 0xd7f34d73),
-           TOBN(0xc48ac1b8, 0x31497b1d), TOBN(0x323b925d, 0x5106703b)}},
-         {{TOBN(0x22156f42, 0x74082008), TOBN(0xeffc521a, 0xc8482bcb),
-           TOBN(0x5c6831bf, 0x12173479), TOBN(0xcaa2528f, 0xc4739490)},
-          {TOBN(0x84d2102a, 0x8f1b3c4d), TOBN(0xcf64dfc1, 0x2d9bec0d),
-           TOBN(0x433febad, 0x78a546ef), TOBN(0x1f621ec3, 0x7b73cef1)}},
-         {{TOBN(0x6aecd627, 0x37338615), TOBN(0x162082ab, 0x01d8edf6),
-           TOBN(0x833a8119, 0x19e86b66), TOBN(0x6023a251, 0xd299b5db)},
-          {TOBN(0xf5bb0c3a, 0xbbf04b89), TOBN(0x6735eb69, 0xae749a44),
-           TOBN(0xd0e058c5, 0x4713de3b), TOBN(0xfdf2593e, 0x2c3d4ccd)}},
-         {{TOBN(0x1b8f414e, 0xfdd23667), TOBN(0xdd52aaca, 0xfa2015ee),
-           TOBN(0x3e31b517, 0xbd9625ff), TOBN(0x5ec9322d, 0x8db5918c)},
-          {TOBN(0xbc73ac85, 0xa96f5294), TOBN(0x82aa5bf3, 0x61a0666a),
-           TOBN(0x49755810, 0xbf08ac42), TOBN(0xd21cdfd5, 0x891cedfc)}},
-         {{TOBN(0x918cb57b, 0x67f8be10), TOBN(0x365d1a7c, 0x56ffa726),
-           TOBN(0x2435c504, 0x6532de93), TOBN(0xc0fc5e10, 0x2674cd02)},
-          {TOBN(0x6e51fcf8, 0x9cbbb142), TOBN(0x1d436e5a, 0xafc50692),
-           TOBN(0x766bffff, 0x3fbcae22), TOBN(0x3148c2fd, 0xfd55d3b8)}},
-         {{TOBN(0x52c7fdc9, 0x233222fa), TOBN(0x89ff1092, 0xe419fb6b),
-           TOBN(0x3cd6db99, 0x25254977), TOBN(0x2e85a161, 0x1cf12ca7)},
-          {TOBN(0xadd2547c, 0xdc810bc9), TOBN(0xea3f458f, 0x9d257c22),
-           TOBN(0x642c1fbe, 0x27d6b19b), TOBN(0xed07e6b5, 0x140481a6)}},
-         {{TOBN(0x6ada1d42, 0x86d2e0f8), TOBN(0xe5920122, 0x0e8a9fd5),
-           TOBN(0x02c936af, 0x708c1b49), TOBN(0x60f30fee, 0x2b4bfaff)},
-          {TOBN(0x6637ad06, 0x858e6a61), TOBN(0xce4c7767, 0x3fd374d0),
-           TOBN(0x39d54b2d, 0x7188defb), TOBN(0xa8c9d250, 0xf56a6b66)}},
-         {{TOBN(0x58fc0f5e, 0xb24fe1dc), TOBN(0x9eaf9dee, 0x6b73f24c),
-           TOBN(0xa90d588b, 0x33650705), TOBN(0xde5b62c5, 0xaf2ec729)},
-          {TOBN(0x5c72cfae, 0xd3c2b36e), TOBN(0x868c19d5, 0x034435da),
-           TOBN(0x88605f93, 0xe17ee145), TOBN(0xaa60c4ee, 0x77a5d5b1)}},
-         {{TOBN(0xbcf5bfd2, 0x3b60c472), TOBN(0xaf4ef13c, 0xeb1d3049),
-           TOBN(0x373f44fc, 0xe13895c9), TOBN(0xf29b382f, 0x0cbc9822)},
-          {TOBN(0x1bfcb853, 0x73efaef6), TOBN(0xcf56ac9c, 0xa8c96f40),
-           TOBN(0xd7adf109, 0x7a191e24), TOBN(0x98035f44, 0xbf8a8dc2)}},
-         {{TOBN(0xf40a71b9, 0x1e750c84), TOBN(0xc57f7b0c, 0x5dc6c469),
-           TOBN(0x49a0e79c, 0x6fbc19c1), TOBN(0x6b0f5889, 0xa48ebdb8)},
-          {TOBN(0x5d3fd084, 0xa07c4e9f), TOBN(0xc3830111, 0xab27de14),
-           TOBN(0x0e4929fe, 0x33e08dcc), TOBN(0xf4a5ad24, 0x40bb73a3)}},
-         {{TOBN(0xde86c2bf, 0x490f97ca), TOBN(0x288f09c6, 0x67a1ce18),
-           TOBN(0x364bb886, 0x1844478d), TOBN(0x7840fa42, 0xceedb040)},
-          {TOBN(0x1269fdd2, 0x5a631b37), TOBN(0x94761f1e, 0xa47c8b7d),
-           TOBN(0xfc0c2e17, 0x481c6266), TOBN(0x85e16ea2, 0x3daa5fa7)}},
-         {{TOBN(0xccd86033, 0x92491048), TOBN(0x0c2f6963, 0xf4d402d7),
-           TOBN(0x6336f7df, 0xdf6a865c), TOBN(0x0a2a463c, 0xb5c02a87)},
-          {TOBN(0xb0e29be7, 0xbf2f12ee), TOBN(0xf0a22002, 0x66bad988),
-           TOBN(0x27f87e03, 0x9123c1d7), TOBN(0x21669c55, 0x328a8c98)}},
-         {{TOBN(0x186b9803, 0x92f14529), TOBN(0xd3d056cc, 0x63954df3),
-           TOBN(0x2f03fd58, 0x175a46f6), TOBN(0x63e34ebe, 0x11558558)},
-          {TOBN(0xe13fedee, 0x5b80cfa5), TOBN(0xe872a120, 0xd401dbd1),
-           TOBN(0x52657616, 0xe8a9d667), TOBN(0xbc8da4b6, 0xe08d6693)}},
-         {{TOBN(0x370fb9bb, 0x1b703e75), TOBN(0x6773b186, 0xd4338363),
-           TOBN(0x18dad378, 0xecef7bff), TOBN(0xaac787ed, 0x995677da)},
-          {TOBN(0x4801ea8b, 0x0437164b), TOBN(0xf430ad20, 0x73fe795e),
-           TOBN(0xb164154d, 0x8ee5eb73), TOBN(0x0884ecd8, 0x108f7c0e)}},
-         {{TOBN(0x0e6ec096, 0x5f520698), TOBN(0x640631fe, 0x44f7b8d9),
-           TOBN(0x92fd34fc, 0xa35a68b9), TOBN(0x9c5a4b66, 0x4d40cf4e)},
-          {TOBN(0x949454bf, 0x80b6783d), TOBN(0x80e701fe, 0x3a320a10),
-           TOBN(0x8d1a564a, 0x1a0a39b2), TOBN(0x1436d53d, 0x320587db)}},
-         {{TOBN(0xf5096e6d, 0x6556c362), TOBN(0xbc23a3c0, 0xe2455d7e),
-           TOBN(0x3a7aee54, 0x807230f9), TOBN(0x9ba1cfa6, 0x22ae82fd)},
-          {TOBN(0x833a057a, 0x99c5d706), TOBN(0x8be85f4b, 0x842315c9),
-           TOBN(0xd083179a, 0x66a72f12), TOBN(0x2fc77d5d, 0xcdcc73cd)}},
-         {{TOBN(0x22b88a80, 0x5616ee30), TOBN(0xfb09548f, 0xe7ab1083),
-           TOBN(0x8ad6ab0d, 0x511270cd), TOBN(0x61f6c57a, 0x6924d9ab)},
-          {TOBN(0xa0f7bf72, 0x90aecb08), TOBN(0x849f87c9, 0x0df784a4),
-           TOBN(0x27c79c15, 0xcfaf1d03), TOBN(0xbbf9f675, 0xc463face)}},
-         {{TOBN(0x91502c65, 0x765ba543), TOBN(0x18ce3cac, 0x42ea60dd),
-           TOBN(0xe5cee6ac, 0x6e43ecb3), TOBN(0x63e4e910, 0x68f2aeeb)},
-          {TOBN(0x26234fa3, 0xc85932ee), TOBN(0x96883e8b, 0x4c90c44d),
-           TOBN(0x29b9e738, 0xa18a50f6), TOBN(0xbfc62b2a, 0x3f0420df)}},
-         {{TOBN(0xd22a7d90, 0x6d3e1fa9), TOBN(0x17115618, 0xfe05b8a3),
-           TOBN(0x2a0c9926, 0xbb2b9c01), TOBN(0xc739fcc6, 0xe07e76a2)},
-          {TOBN(0x540e9157, 0x165e439a), TOBN(0x06353a62, 0x6a9063d8),
-           TOBN(0x84d95594, 0x61e927a3), TOBN(0x013b9b26, 0xe2e0be7f)}},
-         {{TOBN(0x4feaec3b, 0x973497f1), TOBN(0x15c0f94e, 0x093ebc2d),
-           TOBN(0x6af5f227, 0x33af0583), TOBN(0x0c2af206, 0xc61f3340)},
-          {TOBN(0xd25dbdf1, 0x4457397c), TOBN(0x2e8ed017, 0xcabcbae0),
-           TOBN(0xe3010938, 0xc2815306), TOBN(0xbaa99337, 0xe8c6cd68)}},
-         {{TOBN(0x08513182, 0x3b0ec7de), TOBN(0x1e1b822b, 0x58df05df),
-           TOBN(0x5c14842f, 0xa5c3b683), TOBN(0x98fe977e, 0x3eba34ce)},
-          {TOBN(0xfd2316c2, 0x0d5e8873), TOBN(0xe48d839a, 0xbd0d427d),
-           TOBN(0x495b2218, 0x623fc961), TOBN(0x24ee56e7, 0xb46fba5e)}},
-         {{TOBN(0x9184a55b, 0x91e4de58), TOBN(0xa7488ca5, 0xdfdea288),
-           TOBN(0xa723862e, 0xa8dcc943), TOBN(0x92d762b2, 0x849dc0fc)},
-          {TOBN(0x3c444a12, 0x091ff4a9), TOBN(0x581113fa, 0x0cada274),
-           TOBN(0xb9de0a45, 0x30d8eae2), TOBN(0x5e0fcd85, 0xdf6b41ea)}},
-         {{TOBN(0x6233ea68, 0xc094dbb5), TOBN(0xb77d062e, 0xd968d410),
-           TOBN(0x3e719bbc, 0x58b3002d), TOBN(0x68e7dd3d, 0x3dc49d58)},
-          {TOBN(0x8d825740, 0x013a5e58), TOBN(0x21311747, 0x3c9e3c1b),
-           TOBN(0x0cb0a2a7, 0x7c99b6ab), TOBN(0x5c48a3b3, 0xc2f888f2)}}},
-        {{{TOBN(0xc7913e91, 0x991724f3), TOBN(0x5eda799c, 0x39cbd686),
-           TOBN(0xddb595c7, 0x63d4fc1e), TOBN(0x6b63b80b, 0xac4fed54)},
-          {TOBN(0x6ea0fc69, 0x7e5fb516), TOBN(0x737708ba, 0xd0f1c964),
-           TOBN(0x9628745f, 0x11a92ca5), TOBN(0x61f37958, 0x9a86967a)}},
-         {{TOBN(0x9af39b2c, 0xaa665072), TOBN(0x78322fa4, 0xefd324ef),
-           TOBN(0x3d153394, 0xc327bd31), TOBN(0x81d5f271, 0x3129dab0)},
-          {TOBN(0xc72e0c42, 0xf48027f5), TOBN(0xaa40cdbc, 0x8536e717),
-           TOBN(0xf45a657a, 0x2d369d0f), TOBN(0xb03bbfc4, 0xea7f74e6)}},
-         {{TOBN(0x46a8c418, 0x0d738ded), TOBN(0x6f1a5bb0, 0xe0de5729),
-           TOBN(0xf10230b9, 0x8ba81675), TOBN(0x32c6f30c, 0x112b33d4)},
-          {TOBN(0x7559129d, 0xd8fffb62), TOBN(0x6a281b47, 0xb459bf05),
-           TOBN(0x77c1bd3a, 0xfa3b6776), TOBN(0x0709b380, 0x7829973a)}},
-         {{TOBN(0x8c26b232, 0xa3326505), TOBN(0x38d69272, 0xee1d41bf),
-           TOBN(0x0459453e, 0xffe32afa), TOBN(0xce8143ad, 0x7cb3ea87)},
-          {TOBN(0x932ec1fa, 0x7e6ab666), TOBN(0x6cd2d230, 0x22286264),
-           TOBN(0x459a46fe, 0x6736f8ed), TOBN(0x50bf0d00, 0x9eca85bb)}},
-         {{TOBN(0x0b825852, 0x877a21ec), TOBN(0x300414a7, 0x0f537a94),
-           TOBN(0x3f1cba40, 0x21a9a6a2), TOBN(0x50824eee, 0x76943c00)},
-          {TOBN(0xa0dbfcec, 0xf83cba5d), TOBN(0xf9538148, 0x93b4f3c0),
-           TOBN(0x61744162, 0x48f24dd7), TOBN(0x5322d64d, 0xe4fb09dd)}},
-         {{TOBN(0x57447384, 0x3d9325f3), TOBN(0xa9bef2d0, 0xf371cb84),
-           TOBN(0x77d2188b, 0xa61e36c5), TOBN(0xbbd6a7d7, 0xc602df72)},
-          {TOBN(0xba3aa902, 0x8f61bc0b), TOBN(0xf49085ed, 0x6ed0b6a1),
-           TOBN(0x8bc625d6, 0xae6e8298), TOBN(0x832b0b1d, 0xa2e9c01d)}},
-         {{TOBN(0xa337c447, 0xf1f0ced1), TOBN(0x800cc793, 0x9492dd2b),
-           TOBN(0x4b93151d, 0xbea08efa), TOBN(0x820cf3f8, 0xde0a741e)},
-          {TOBN(0xff1982dc, 0x1c0f7d13), TOBN(0xef921960, 0x84dde6ca),
-           TOBN(0x1ad7d972, 0x45f96ee3), TOBN(0x319c8dbe, 0x29dea0c7)}},
-         {{TOBN(0xd3ea3871, 0x7b82b99b), TOBN(0x75922d4d, 0x470eb624),
-           TOBN(0x8f66ec54, 0x3b95d466), TOBN(0x66e673cc, 0xbee1e346)},
-          {TOBN(0x6afe67c4, 0xb5f2b89a), TOBN(0x3de9c1e6, 0x290e5cd3),
-           TOBN(0x8c278bb6, 0x310a2ada), TOBN(0x420fa384, 0x0bdb323b)}},
-         {{TOBN(0x0ae1d63b, 0x0eb919b0), TOBN(0xd74ee51d, 0xa74b9620),
-           TOBN(0x395458d0, 0xa674290c), TOBN(0x324c930f, 0x4620a510)},
-          {TOBN(0x2d1f4d19, 0xfbac27d4), TOBN(0x4086e8ca, 0x9bedeeac),
-           TOBN(0x0cdd211b, 0x9b679ab8), TOBN(0x5970167d, 0x7090fec4)}},
-         {{TOBN(0x3420f2c9, 0xfaf1fc63), TOBN(0x616d333a, 0x328c8bb4),
-           TOBN(0x7d65364c, 0x57f1fe4a), TOBN(0x9343e877, 0x55e5c73a)},
-          {TOBN(0x5795176b, 0xe970e78c), TOBN(0xa36ccebf, 0x60533627),
-           TOBN(0xfc7c7380, 0x09cdfc1b), TOBN(0xb39a2afe, 0xb3fec326)}},
-         {{TOBN(0xb7ff1ba1, 0x6224408a), TOBN(0xcc856e92, 0x247cfc5e),
-           TOBN(0x01f102e7, 0xc18bc493), TOBN(0x4613ab74, 0x2091c727)},
-          {TOBN(0xaa25e89c, 0xc420bf2b), TOBN(0x00a53176, 0x90337ec2),
-           TOBN(0xd2be9f43, 0x7d025fc7), TOBN(0x3316fb85, 0x6e6fe3dc)}},
-         {{TOBN(0x27520af5, 0x9ac50814), TOBN(0xfdf95e78, 0x9a8e4223),
-           TOBN(0xb7e7df2a, 0x56bec5a0), TOBN(0xf7022f7d, 0xdf159e5d)},
-          {TOBN(0x93eeeab1, 0xcac1fe8f), TOBN(0x8040188c, 0x37451168),
-           TOBN(0x7ee8aa8a, 0xd967dce6), TOBN(0xfa0e79e7, 0x3abc9299)}},
-         {{TOBN(0x67332cfc, 0x2064cfd1), TOBN(0x339c31de, 0xb0651934),
-           TOBN(0x719b28d5, 0x2a3bcbea), TOBN(0xee74c82b, 0x9d6ae5c6)},
-          {TOBN(0x0927d05e, 0xbaf28ee6), TOBN(0x82cecf2c, 0x9d719028),
-           TOBN(0x0b0d353e, 0xddb30289), TOBN(0xfe4bb977, 0xfddb2e29)}},
-         {{TOBN(0xbb5bb990, 0x640bfd9e), TOBN(0xd226e277, 0x82f62108),
-           TOBN(0x4bf00985, 0x02ffdd56), TOBN(0x7756758a, 0x2ca1b1b5)},
-          {TOBN(0xc32b62a3, 0x5285fe91), TOBN(0xedbc546a, 0x8c9cd140),
-           TOBN(0x1e47a013, 0xaf5cb008), TOBN(0xbca7e720, 0x073ce8f2)}},
-         {{TOBN(0xe10b2ab8, 0x17a91cae), TOBN(0xb89aab65, 0x08e27f63),
-           TOBN(0x7b3074a7, 0xdba3ddf9), TOBN(0x1c20ce09, 0x330c2972)},
-          {TOBN(0x6b9917b4, 0x5fcf7e33), TOBN(0xe6793743, 0x945ceb42),
-           TOBN(0x18fc2215, 0x5c633d19), TOBN(0xad1adb3c, 0xc7485474)}},
-         {{TOBN(0x646f9679, 0x6424c49b), TOBN(0xf888dfe8, 0x67c241c9),
-           TOBN(0xe12d4b93, 0x24f68b49), TOBN(0x9a6b62d8, 0xa571df20)},
-          {TOBN(0x81b4b26d, 0x179483cb), TOBN(0x666f9632, 0x9511fae2),
-           TOBN(0xd281b3e4, 0xd53aa51f), TOBN(0x7f96a765, 0x7f3dbd16)}},
-         {{TOBN(0xa7f8b5bf, 0x074a30ce), TOBN(0xd7f52107, 0x005a32e6),
-           TOBN(0x6f9e0907, 0x50237ed4), TOBN(0x2f21da47, 0x8096fa2b)},
-          {TOBN(0xf3e19cb4, 0xeec863a0), TOBN(0xd18f77fd, 0x9527620a),
-           TOBN(0x9505c81c, 0x407c1cf8), TOBN(0x9998db4e, 0x1b6ec284)}},
-         {{TOBN(0x7e3389e5, 0xc247d44d), TOBN(0x12507141, 0x3f4f3d80),
-           TOBN(0xd4ba0110, 0x4a78a6c7), TOBN(0x312874a0, 0x767720be)},
-          {TOBN(0xded059a6, 0x75944370), TOBN(0xd6123d90, 0x3b2c0bdd),
-           TOBN(0xa56b717b, 0x51c108e3), TOBN(0x9bb7940e, 0x070623e9)}},
-         {{TOBN(0x794e2d59, 0x84ac066c), TOBN(0xf5954a92, 0xe68c69a0),
-           TOBN(0x28c52458, 0x4fd99dcc), TOBN(0x60e639fc, 0xb1012517)},
-          {TOBN(0xc2e60125, 0x7de79248), TOBN(0xe9ef6404, 0xf12fc6d7),
-           TOBN(0x4c4f2808, 0x2a3b5d32), TOBN(0x865ad32e, 0xc768eb8a)}},
-         {{TOBN(0xac02331b, 0x13fb70b6), TOBN(0x037b44c1, 0x95599b27),
-           TOBN(0x1a860fc4, 0x60bd082c), TOBN(0xa2e25745, 0xc980cd01)},
-          {TOBN(0xee3387a8, 0x1da0263e), TOBN(0x931bfb95, 0x2d10f3d6),
-           TOBN(0x5b687270, 0xa1f24a32), TOBN(0xf140e65d, 0xca494b86)}},
-         {{TOBN(0x4f4ddf91, 0xb2f1ac7a), TOBN(0xf99eaabb, 0x760fee27),
-           TOBN(0x57f4008a, 0x49c228e5), TOBN(0x090be440, 0x1cf713bb)},
-          {TOBN(0xac91fbe4, 0x5004f022), TOBN(0xd838c2c2, 0x569e1af6),
-           TOBN(0xd6c7d20b, 0x0f1daaa5), TOBN(0xaa063ac1, 0x1bbb02c0)}},
-         {{TOBN(0x0938a422, 0x59558a78), TOBN(0x5343c669, 0x8435da2f),
-           TOBN(0x96f67b18, 0x034410dc), TOBN(0x7cc1e424, 0x84510804)},
-          {TOBN(0x86a1543f, 0x16dfbb7d), TOBN(0x921fa942, 0x5b5bd592),
-           TOBN(0x9dcccb6e, 0xb33dd03c), TOBN(0x8581ddd9, 0xb843f51e)}},
-         {{TOBN(0x54935fcb, 0x81d73c9e), TOBN(0x6d07e979, 0x0a5e97ab),
-           TOBN(0x4dc7b30a, 0xcf3a6bab), TOBN(0x147ab1f3, 0x170bee11)},
-          {TOBN(0x0aaf8e3d, 0x9fafdee4), TOBN(0xfab3dbcb, 0x538a8b95),
-           TOBN(0x405df4b3, 0x6ef13871), TOBN(0xf1f4e9cb, 0x088d5a49)}},
-         {{TOBN(0x9bcd24d3, 0x66b33f1d), TOBN(0x3b97b820, 0x5ce445c0),
-           TOBN(0xe2926549, 0xba93ff61), TOBN(0xd9c341ce, 0x4dafe616)},
-          {TOBN(0xfb30a76e, 0x16efb6f3), TOBN(0xdf24b8ca, 0x605b953c),
-           TOBN(0x8bd52afe, 0xc2fffb9f), TOBN(0xbbac5ff7, 0xe19d0b96)}},
-         {{TOBN(0x43c01b87, 0x459afccd), TOBN(0x6bd45143, 0xb7432652),
-           TOBN(0x84734530, 0x55b5d78e), TOBN(0x81088fdb, 0x1554ba7d)},
-          {TOBN(0xada0a52c, 0x1e269375), TOBN(0xf9f037c4, 0x2dc5ec10),
-           TOBN(0xc0660607, 0x94bfbc11), TOBN(0xc0a630bb, 0xc9c40d2f)}},
-         {{TOBN(0x5efc797e, 0xab64c31e), TOBN(0xffdb1dab, 0x74507144),
-           TOBN(0xf6124287, 0x1ca6790c), TOBN(0xe9609d81, 0xe69bf1bf)},
-          {TOBN(0xdb898595, 0x00d24fc9), TOBN(0x9c750333, 0xe51fb417),
-           TOBN(0x51830a91, 0xfef7bbde), TOBN(0x0ce67dc8, 0x945f585c)}},
-         {{TOBN(0x9a730ed4, 0x4763eb50), TOBN(0x24a0e221, 0xc1ab0d66),
-           TOBN(0x643b6393, 0x648748f3), TOBN(0x1982daa1, 0x6d3c6291)},
-          {TOBN(0x6f00a9f7, 0x8bbc5549), TOBN(0x7a1783e1, 0x7f36384e),
-           TOBN(0xe8346323, 0xde977f50), TOBN(0x91ab688d, 0xb245502a)}},
-         {{TOBN(0x331ab6b5, 0x6d0bdd66), TOBN(0x0a6ef32e, 0x64b71229),
-           TOBN(0x1028150e, 0xfe7c352f), TOBN(0x27e04350, 0xce7b39d3)},
-          {TOBN(0x2a3c8acd, 0xc1070c82), TOBN(0xfb2034d3, 0x80c9feef),
-           TOBN(0x2d729621, 0x709f3729), TOBN(0x8df290bf, 0x62cb4549)}},
-         {{TOBN(0x02f99f33, 0xfc2e4326), TOBN(0x3b30076d, 0x5eddf032),
-           TOBN(0xbb21f8cf, 0x0c652fb5), TOBN(0x314fb49e, 0xed91cf7b)},
-          {TOBN(0xa013eca5, 0x2f700750), TOBN(0x2b9e3c23, 0x712a4575),
-           TOBN(0xe5355557, 0xaf30fbb0), TOBN(0x1ada3516, 0x7c77e771)}},
-         {{TOBN(0x45f6ecb2, 0x7b135670), TOBN(0xe85d19df, 0x7cfc202e),
-           TOBN(0x0f1b50c7, 0x58d1be9f), TOBN(0x5ebf2c0a, 0xead2e344)},
-          {TOBN(0x1531fe4e, 0xabc199c9), TOBN(0xc7032592, 0x56bab0ae),
-           TOBN(0x16ab2e48, 0x6c1fec54), TOBN(0x0f87fda8, 0x04280188)}},
-         {{TOBN(0xdc9f46fc, 0x609e4a74), TOBN(0x2a44a143, 0xba667f91),
-           TOBN(0xbc3d8b95, 0xb4d83436), TOBN(0xa01e4bd0, 0xc7bd2958)},
-          {TOBN(0x7b182932, 0x73483c90), TOBN(0xa79c6aa1, 0xa7c7b598),
-           TOBN(0xbf3983c6, 0xeaaac07e), TOBN(0x8f18181e, 0x96e0d4e6)}},
-         {{TOBN(0x8553d37c, 0x051af62b), TOBN(0xe9a998eb, 0x0bf94496),
-           TOBN(0xe0844f9f, 0xb0d59aa1), TOBN(0x983fd558, 0xe6afb813)},
-          {TOBN(0x9670c0ca, 0x65d69804), TOBN(0x732b22de, 0x6ea5ff2d),
-           TOBN(0xd7640ba9, 0x5fd8623b), TOBN(0x9f619163, 0xa6351782)}},
-         {{TOBN(0x0bfc27ee, 0xacee5043), TOBN(0xae419e73, 0x2eb10f02),
-           TOBN(0x19c028d1, 0x8943fb05), TOBN(0x71f01cf7, 0xff13aa2a)},
-          {TOBN(0x7790737e, 0x8887a132), TOBN(0x67513309, 0x66318410),
-           TOBN(0x9819e8a3, 0x7ddb795e), TOBN(0xfecb8ef5, 0xdad100b2)}},
-         {{TOBN(0x59f74a22, 0x3021926a), TOBN(0xb7c28a49, 0x6f9b4c1c),
-           TOBN(0xed1a733f, 0x912ad0ab), TOBN(0x42a910af, 0x01a5659c)},
-          {TOBN(0x3842c6e0, 0x7bd68cab), TOBN(0x2b57fa38, 0x76d70ac8),
-           TOBN(0x8a6707a8, 0x3c53aaeb), TOBN(0x62c1c510, 0x65b4db18)}},
-         {{TOBN(0x8de2c1fb, 0xb2d09dc7), TOBN(0xc3dfed12, 0x266bd23b),
-           TOBN(0x927d039b, 0xd5b27db6), TOBN(0x2fb2f0f1, 0x103243da)},
-          {TOBN(0xf855a07b, 0x80be7399), TOBN(0xed9327ce, 0x1f9f27a8),
-           TOBN(0xa0bd99c7, 0x729bdef7), TOBN(0x2b67125e, 0x28250d88)}},
-         {{TOBN(0x784b26e8, 0x8670ced7), TOBN(0xe3dfe41f, 0xc31bd3b4),
-           TOBN(0x9e353a06, 0xbcc85cbc), TOBN(0x302e2909, 0x60178a9d)},
-          {TOBN(0x860abf11, 0xa6eac16e), TOBN(0x76447000, 0xaa2b3aac),
-           TOBN(0x46ff9d19, 0x850afdab), TOBN(0x35bdd6a5, 0xfdb2d4c1)}},
-         {{TOBN(0xe82594b0, 0x7e5c9ce9), TOBN(0x0f379e53, 0x20af346e),
-           TOBN(0x608b31e3, 0xbc65ad4a), TOBN(0x710c6b12, 0x267c4826)},
-          {TOBN(0x51c966f9, 0x71954cf1), TOBN(0xb1cec793, 0x0d0aa215),
-           TOBN(0x1f155989, 0x86bd23a8), TOBN(0xae2ff99c, 0xf9452e86)}},
-         {{TOBN(0xd8dd953c, 0x340ceaa2), TOBN(0x26355275, 0x2e2e9333),
-           TOBN(0x15d4e5f9, 0x8586f06d), TOBN(0xd6bf94a8, 0xf7cab546)},
-          {TOBN(0x33c59a0a, 0xb76a9af0), TOBN(0x52740ab3, 0xba095af7),
-           TOBN(0xc444de8a, 0x24389ca0), TOBN(0xcc6f9863, 0x706da0cb)}},
-         {{TOBN(0xb5a741a7, 0x6b2515cf), TOBN(0x71c41601, 0x9585c749),
-           TOBN(0x78350d4f, 0xe683de97), TOBN(0x31d61524, 0x63d0b5f5)},
-          {TOBN(0x7a0cc5e1, 0xfbce090b), TOBN(0xaac927ed, 0xfbcb2a5b),
-           TOBN(0xe920de49, 0x20d84c35), TOBN(0x8c06a0b6, 0x22b4de26)}},
-         {{TOBN(0xd34dd58b, 0xafe7ddf3), TOBN(0x55851fed, 0xc1e6e55b),
-           TOBN(0xd1395616, 0x960696e7), TOBN(0x940304b2, 0x5f22705f)},
-          {TOBN(0x6f43f861, 0xb0a2a860), TOBN(0xcf121282, 0x0e7cc981),
-           TOBN(0x12186212, 0x0ab64a96), TOBN(0x09215b9a, 0xb789383c)}},
-         {{TOBN(0x311eb305, 0x37387c09), TOBN(0xc5832fce, 0xf03ee760),
-           TOBN(0x30358f58, 0x32f7ea19), TOBN(0xe01d3c34, 0x91d53551)},
-          {TOBN(0x1ca5ee41, 0xda48ea80), TOBN(0x34e71e8e, 0xcf4fa4c1),
-           TOBN(0x312abd25, 0x7af1e1c7), TOBN(0xe3afcdeb, 0x2153f4a5)}},
-         {{TOBN(0x9d5c84d7, 0x00235e9a), TOBN(0x0308d3f4, 0x8c4c836f),
-           TOBN(0xc0a66b04, 0x89332de5), TOBN(0x610dd399, 0x89e566ef)},
-          {TOBN(0xf8eea460, 0xd1ac1635), TOBN(0x84cbb3fb, 0x20a2c0df),
-           TOBN(0x40afb488, 0xe74a48c5), TOBN(0x29738198, 0xd326b150)}},
-         {{TOBN(0x2a17747f, 0xa6d74081), TOBN(0x60ea4c05, 0x55a26214),
-           TOBN(0x53514bb4, 0x1f88c5fe), TOBN(0xedd64567, 0x7e83426c)},
-          {TOBN(0xd5d6cbec, 0x96460b25), TOBN(0xa12fd0ce, 0x68dc115e),
-           TOBN(0xc5bc3ed2, 0x697840ea), TOBN(0x969876a8, 0xa6331e31)}},
-         {{TOBN(0x60c36217, 0x472ff580), TOBN(0xf4229705, 0x4ad41393),
-           TOBN(0x4bd99ef0, 0xa03b8b92), TOBN(0x501c7317, 0xc144f4f6)},
-          {TOBN(0x159009b3, 0x18464945), TOBN(0x6d5e594c, 0x74c5c6be),
-           TOBN(0x2d587011, 0x321a3660), TOBN(0xd1e184b1, 0x3898d022)}},
-         {{TOBN(0x5ba04752, 0x4c6a7e04), TOBN(0x47fa1e2b, 0x45550b65),
-           TOBN(0x9419daf0, 0x48c0a9a5), TOBN(0x66362953, 0x7c243236)},
-          {TOBN(0xcd0744b1, 0x5cb12a88), TOBN(0x561b6f9a, 0x2b646188),
-           TOBN(0x599415a5, 0x66c2c0c0), TOBN(0xbe3f0859, 0x0f83f09a)}},
-         {{TOBN(0x9141c5be, 0xb92041b8), TOBN(0x01ae38c7, 0x26477d0d),
-           TOBN(0xca8b71f3, 0xd12c7a94), TOBN(0xfab5b31f, 0x765c70db)},
-          {TOBN(0x76ae7492, 0x487443e9), TOBN(0x8595a310, 0x990d1349),
-           TOBN(0xf8dbeda8, 0x7d460a37), TOBN(0x7f7ad082, 0x1e45a38f)}},
-         {{TOBN(0xed1d4db6, 0x1059705a), TOBN(0xa3dd492a, 0xe6b9c697),
-           TOBN(0x4b92ee3a, 0x6eb38bd5), TOBN(0xbab2609d, 0x67cc0bb7)},
-          {TOBN(0x7fc4fe89, 0x6e70ee82), TOBN(0xeff2c56e, 0x13e6b7e3),
-           TOBN(0x9b18959e, 0x34d26fca), TOBN(0x2517ab66, 0x889d6b45)}},
-         {{TOBN(0xf167b4e0, 0xbdefdd4f), TOBN(0x69958465, 0xf366e401),
-           TOBN(0x5aa368ab, 0xa73bbec0), TOBN(0x12148709, 0x7b240c21)},
-          {TOBN(0x378c3233, 0x18969006), TOBN(0xcb4d73ce, 0xe1fe53d1),
-           TOBN(0x5f50a80e, 0x130c4361), TOBN(0xd67f5951, 0x7ef5212b)}},
-         {{TOBN(0xf145e21e, 0x9e70c72e), TOBN(0xb2e52e29, 0x5566d2fb),
-           TOBN(0x44eaba4a, 0x032397f5), TOBN(0x5e56937b, 0x7e31a7de)},
-          {TOBN(0x68dcf517, 0x456c61e1), TOBN(0xbc2e954a, 0xa8b0a388),
-           TOBN(0xe3552fa7, 0x60a8b755), TOBN(0x03442dae, 0x73ad0cde)}},
-         {{TOBN(0x37ffe747, 0xceb26210), TOBN(0x983545e8, 0x787baef9),
-           TOBN(0x8b8c8535, 0x86a3de31), TOBN(0xc621dbcb, 0xfacd46db)},
-          {TOBN(0x82e442e9, 0x59266fbb), TOBN(0xa3514c37, 0x339d471c),
-           TOBN(0x3a11b771, 0x62cdad96), TOBN(0xf0cb3b3c, 0xecf9bdf0)}},
-         {{TOBN(0x3fcbdbce, 0x478e2135), TOBN(0x7547b5cf, 0xbda35342),
-           TOBN(0xa97e81f1, 0x8a677af6), TOBN(0xc8c2bf83, 0x28817987)},
-          {TOBN(0xdf07eaaf, 0x45580985), TOBN(0xc68d1f05, 0xc93b45cb),
-           TOBN(0x106aa2fe, 0xc77b4cac), TOBN(0x4c1d8afc, 0x04a7ae86)}},
-         {{TOBN(0xdb41c3fd, 0x9eb45ab2), TOBN(0x5b234b5b, 0xd4b22e74),
-           TOBN(0xda253dec, 0xf215958a), TOBN(0x67e0606e, 0xa04edfa0)},
-          {TOBN(0xabbbf070, 0xef751b11), TOBN(0xf352f175, 0xf6f06dce),
-           TOBN(0xdfc4b6af, 0x6839f6b4), TOBN(0x53ddf9a8, 0x9959848e)}},
-         {{TOBN(0xda49c379, 0xc21520b0), TOBN(0x90864ff0, 0xdbd5d1b6),
-           TOBN(0x2f055d23, 0x5f49c7f7), TOBN(0xe51e4e6a, 0xa796b2d8)},
-          {TOBN(0xc361a67f, 0x5c9dc340), TOBN(0x5ad53c37, 0xbca7c620),
-           TOBN(0xda1d6588, 0x32c756d0), TOBN(0xad60d911, 0x8bb67e13)}},
-         {{TOBN(0xd6c47bdf, 0x0eeec8c6), TOBN(0x4a27fec1, 0x078a1821),
-           TOBN(0x081f7415, 0xc3099524), TOBN(0x8effdf0b, 0x82cd8060)},
-          {TOBN(0xdb70ec1c, 0x65842df8), TOBN(0x8821b358, 0xd319a901),
-           TOBN(0x72ee56ee, 0xde42b529), TOBN(0x5bb39592, 0x236e4286)}},
-         {{TOBN(0xd1183316, 0xfd6f7140), TOBN(0xf9fadb5b, 0xbd8e81f7),
-           TOBN(0x701d5e0c, 0x5a02d962), TOBN(0xfdee4dbf, 0x1b601324)},
-          {TOBN(0xbed17407, 0x35d7620e), TOBN(0x04e3c2c3, 0xf48c0012),
-           TOBN(0x9ee29da7, 0x3455449a), TOBN(0x562cdef4, 0x91a836c4)}},
-         {{TOBN(0x8f682a5f, 0x47701097), TOBN(0x617125d8, 0xff88d0c2),
-           TOBN(0x948fda24, 0x57bb86dd), TOBN(0x348abb8f, 0x289f7286)},
-          {TOBN(0xeb10eab5, 0x99d94bbd), TOBN(0xd51ba28e, 0x4684d160),
-           TOBN(0xabe0e51c, 0x30c8f41a), TOBN(0x66588b45, 0x13254f4a)}},
-         {{TOBN(0x147ebf01, 0xfad097a5), TOBN(0x49883ea8, 0x610e815d),
-           TOBN(0xe44d60ba, 0x8a11de56), TOBN(0xa970de6e, 0x827a7a6d)},
-          {TOBN(0x2be41424, 0x5e17fc19), TOBN(0xd833c657, 0x01214057),
-           TOBN(0x1375813b, 0x363e723f), TOBN(0x6820bb88, 0xe6a52e9b)}},
-         {{TOBN(0x7e7f6970, 0xd875d56a), TOBN(0xd6a0a9ac, 0x51fbf6bf),
-           TOBN(0x54ba8790, 0xa3083c12), TOBN(0xebaeb23d, 0x6ae7eb64)},
-          {TOBN(0xa8685c3a, 0xb99a907a), TOBN(0xf1e74550, 0x026bf40b),
-           TOBN(0x7b73a027, 0xc802cd9e), TOBN(0x9a8a927c, 0x4fef4635)}},
-         {{TOBN(0xe1b6f60c, 0x08191224), TOBN(0xc4126ebb, 0xde4ec091),
-           TOBN(0xe1dff4dc, 0x4ae38d84), TOBN(0xde3f57db, 0x4f2ef985)},
-          {TOBN(0x34964337, 0xd446a1dd), TOBN(0x7bf217a0, 0x859e77f6),
-           TOBN(0x8ff10527, 0x8e1d13f5), TOBN(0xa304ef03, 0x74eeae27)}},
-         {{TOBN(0xfc6f5e47, 0xd19dfa5a), TOBN(0xdb007de3, 0x7fad982b),
-           TOBN(0x28205ad1, 0x613715f5), TOBN(0x251e6729, 0x7889529e)},
-          {TOBN(0x72705184, 0x1ae98e78), TOBN(0xf818537d, 0x271cac32),
-           TOBN(0xc8a15b7e, 0xb7f410f5), TOBN(0xc474356f, 0x81f62393)}},
-         {{TOBN(0x92dbdc5a, 0xc242316b), TOBN(0xabe060ac, 0xdbf4aff5),
-           TOBN(0x6e8c38fe, 0x909a8ec6), TOBN(0x43e514e5, 0x6116cb94)},
-          {TOBN(0x2078fa38, 0x07d784f9), TOBN(0x1161a880, 0xf4b5b357),
-           TOBN(0x5283ce79, 0x13adea3d), TOBN(0x0756c3e6, 0xcc6a910b)}},
-         {{TOBN(0x60bcfe01, 0xaaa79697), TOBN(0x04a73b29, 0x56391db1),
-           TOBN(0xdd8dad47, 0x189b45a0), TOBN(0xbfac0dd0, 0x48d5b8d9)},
-          {TOBN(0x34ab3af5, 0x7d3d2ec2), TOBN(0x6fa2fc2d, 0x207bd3af),
-           TOBN(0x9ff40092, 0x66550ded), TOBN(0x719b3e87, 0x1fd5b913)}},
-         {{TOBN(0xa573a496, 0x6d17fbc7), TOBN(0x0cd1a70a, 0x73d2b24e),
-           TOBN(0x34e2c5ca, 0xb2676937), TOBN(0xe7050b06, 0xbf669f21)},
-          {TOBN(0xfbe948b6, 0x1ede9046), TOBN(0xa0530051, 0x97662659),
-           TOBN(0x58cbd4ed, 0xf10124c5), TOBN(0xde2646e4, 0xdd6c06c8)}},
-         {{TOBN(0x332f8108, 0x8cad38c0), TOBN(0x471b7e90, 0x6bd68ae2),
-           TOBN(0x56ac3fb2, 0x0d8e27a3), TOBN(0xb54660db, 0x136b4b0d)},
-          {TOBN(0x123a1e11, 0xa6fd8de4), TOBN(0x44dbffea, 0xa37799ef),
-           TOBN(0x4540b977, 0xce6ac17c), TOBN(0x495173a8, 0xaf60acef)}}},
-        {{{TOBN(0x9ebb284d, 0x391c2a82), TOBN(0xbcdd4863, 0x158308e8),
-           TOBN(0x006f16ec, 0x83f1edca), TOBN(0xa13e2c37, 0x695dc6c8)},
-          {TOBN(0x2ab756f0, 0x4a057a87), TOBN(0xa8765500, 0xa6b48f98),
-           TOBN(0x4252face, 0x68651c44), TOBN(0xa52b540b, 0xe1765e02)}},
-         {{TOBN(0x4f922fc5, 0x16a0d2bb), TOBN(0x0d5cc16c, 0x1a623499),
-           TOBN(0x9241cf3a, 0x57c62c8b), TOBN(0x2f5e6961, 0xfd1b667f)},
-          {TOBN(0x5c15c70b, 0xf5a01797), TOBN(0x3d20b44d, 0x60956192),
-           TOBN(0x04911b37, 0x071fdb52), TOBN(0xf648f916, 0x8d6f0f7b)}},
-         {{TOBN(0x6dc1acaf, 0xe60b7cf7), TOBN(0x25860a50, 0x84a9d869),
-           TOBN(0x56fc6f09, 0xe7ba8ac4), TOBN(0x828c5bd0, 0x6148d29e)},
-          {TOBN(0xac6b435e, 0xdc55ae5f), TOBN(0xa527f56c, 0xc0117411),
-           TOBN(0x94d5045e, 0xfd24342c), TOBN(0x2c4c0a35, 0x70b67c0d)}},
-         {{TOBN(0x027cc8b8, 0xfac61d9a), TOBN(0x7d25e062, 0xe3c6fe8a),
-           TOBN(0xe08805bf, 0xe5bff503), TOBN(0x13271e6c, 0x6ff632f7)},
-          {TOBN(0x55dca6c0, 0x232f76a5), TOBN(0x8957c32d, 0x701ef426),
-           TOBN(0xee728bcb, 0xa10a5178), TOBN(0x5ea60411, 0xb62c5173)}},
-         {{TOBN(0xfc4e964e, 0xd0b8892b), TOBN(0x9ea17683, 0x9301bb74),
-           TOBN(0x6265c5ae, 0xfcc48626), TOBN(0xe60cf82e, 0xbb3e9102)},
-          {TOBN(0x57adf797, 0xd4df5531), TOBN(0x235b59a1, 0x8deeefe2),
-           TOBN(0x60adcf58, 0x3f306eb1), TOBN(0x105c2753, 0x3d09492d)}},
-         {{TOBN(0x4090914b, 0xb5def996), TOBN(0x1cb69c83, 0x233dd1e7),
-           TOBN(0xc1e9c1d3, 0x9b3d5e76), TOBN(0x1f3338ed, 0xfccf6012)},
-          {TOBN(0xb1e95d0d, 0x2f5378a8), TOBN(0xacf4c2c7, 0x2f00cd21),
-           TOBN(0x6e984240, 0xeb5fe290), TOBN(0xd66c038d, 0x248088ae)}},
-         {{TOBN(0x804d264a, 0xf94d70cf), TOBN(0xbdb802ef, 0x7314bf7e),
-           TOBN(0x8fb54de2, 0x4333ed02), TOBN(0x740461e0, 0x285635d9)},
-          {TOBN(0x4113b2c8, 0x365e9383), TOBN(0xea762c83, 0x3fdef652),
-           TOBN(0x4eec6e2e, 0x47b956c1), TOBN(0xa3d814be, 0x65620fa4)}},
-         {{TOBN(0x9ad5462b, 0xb4d8bc50), TOBN(0x181c0b16, 0xa9195770),
-           TOBN(0xebd4fe1c, 0x78412a68), TOBN(0xae0341bc, 0xc0dff48c)},
-          {TOBN(0xb6bc45cf, 0x7003e866), TOBN(0xf11a6dea, 0x8a24a41b),
-           TOBN(0x5407151a, 0xd04c24c2), TOBN(0x62c9d27d, 0xda5b7b68)}},
-         {{TOBN(0x2e964235, 0x88cceff6), TOBN(0x8594c54f, 0x8b07ed69),
-           TOBN(0x1578e73c, 0xc84d0d0d), TOBN(0x7b4e1055, 0xff532868)},
-          {TOBN(0xa348c0d5, 0xb5ec995a), TOBN(0xbf4b9d55, 0x14289a54),
-           TOBN(0x9ba155a6, 0x58fbd777), TOBN(0x186ed7a8, 0x1a84491d)}},
-         {{TOBN(0xd4992b30, 0x614c0900), TOBN(0xda98d121, 0xbd00c24b),
-           TOBN(0x7f534dc8, 0x7ec4bfa1), TOBN(0x4a5ff674, 0x37dc34bc)},
-          {TOBN(0x68c196b8, 0x1d7ea1d7), TOBN(0x38cf2893, 0x80a6d208),
-           TOBN(0xfd56cd09, 0xe3cbbd6e), TOBN(0xec72e27e, 0x4205a5b6)}},
-         {{TOBN(0x15ea68f5, 0xa44f77f7), TOBN(0x7aa5f9fd, 0xb43c52bc),
-           TOBN(0x86ff676f, 0x94f0e609), TOBN(0xa4cde963, 0x2e2d432b)},
-          {TOBN(0x8cafa0c0, 0xeee470af), TOBN(0x84137d0e, 0x8a3f5ec8),
-           TOBN(0xebb40411, 0xfaa31231), TOBN(0xa239c13f, 0x6f7f7ccf)}},
-         {{TOBN(0x32865719, 0xa8afd30b), TOBN(0x86798328, 0x8a826dce),
-           TOBN(0xdf04e891, 0xc4a8fbe0), TOBN(0xbb6b6e1b, 0xebf56ad3)},
-          {TOBN(0x0a695b11, 0x471f1ff0), TOBN(0xd76c3389, 0xbe15baf0),
-           TOBN(0x018edb95, 0xbe96c43e), TOBN(0xf2beaaf4, 0x90794158)}},
-         {{TOBN(0x152db09e, 0xc3076a27), TOBN(0x5e82908e, 0xe416545d),
-           TOBN(0xa2c41272, 0x356d6f2e), TOBN(0xdc9c9642, 0x31fd74e1)},
-          {TOBN(0x66ceb88d, 0x519bf615), TOBN(0xe29ecd76, 0x05a2274e),
-           TOBN(0x3a0473c4, 0xbf5e2fa0), TOBN(0x6b6eb671, 0x64284e67)}},
-         {{TOBN(0xe8b97932, 0xb88756dd), TOBN(0xed4e8652, 0xf17e3e61),
-           TOBN(0xc2dd1499, 0x3ee1c4a4), TOBN(0xc0aaee17, 0x597f8c0e)},
-          {TOBN(0x15c4edb9, 0x6c168af3), TOBN(0x6563c7bf, 0xb39ae875),
-           TOBN(0xadfadb6f, 0x20adb436), TOBN(0xad55e8c9, 0x9a042ac0)}},
-         {{TOBN(0x975a1ed8, 0xb76da1f5), TOBN(0x10dfa466, 0xa58acb94),
-           TOBN(0x8dd7f7e3, 0xac060282), TOBN(0x6813e66a, 0x572a051e)},
-          {TOBN(0xb4ccae1e, 0x350cb901), TOBN(0xb653d656, 0x50cb7822),
-           TOBN(0x42484710, 0xdfab3b87), TOBN(0xcd7ee537, 0x9b670fd0)}},
-         {{TOBN(0x0a50b12e, 0x523b8bf6), TOBN(0x8009eb5b, 0x8f910c1b),
-           TOBN(0xf535af82, 0x4a167588), TOBN(0x0f835f9c, 0xfb2a2abd)},
-          {TOBN(0xf59b2931, 0x2afceb62), TOBN(0xc797df2a, 0x169d383f),
-           TOBN(0xeb3f5fb0, 0x66ac02b0), TOBN(0x029d4c6f, 0xdaa2d0ca)}},
-         {{TOBN(0xd4059bc1, 0xafab4bc5), TOBN(0x833f5c6f, 0x56783247),
-           TOBN(0xb5346630, 0x8d2d3605), TOBN(0x83387891, 0xd34d8433)},
-          {TOBN(0xd973b30f, 0xadd9419a), TOBN(0xbcca1099, 0xafe3fce8),
-           TOBN(0x08178315, 0x0809aac6), TOBN(0x01b7f21a, 0x540f0f11)}},
-         {{TOBN(0x65c29219, 0x909523c8), TOBN(0xa62f648f, 0xa3a1c741),
-           TOBN(0x88598d4f, 0x60c9e55a), TOBN(0xbce9141b, 0x0e4f347a)},
-          {TOBN(0x9af97d84, 0x35f9b988), TOBN(0x0210da62, 0x320475b6),
-           TOBN(0x3c076e22, 0x9191476c), TOBN(0x7520dbd9, 0x44fc7834)}},
-         {{TOBN(0x6a6b2cfe, 0xc1ab1bbd), TOBN(0xef8a65be, 0xdc650938),
-           TOBN(0x72855540, 0x805d7bc4), TOBN(0xda389396, 0xed11fdfd)},
-          {TOBN(0xa9d5bd36, 0x74660876), TOBN(0x11d67c54, 0xb45dff35),
-           TOBN(0x6af7d148, 0xa4f5da94), TOBN(0xbb8d4c3f, 0xc0bbeb31)}},
-         {{TOBN(0x87a7ebd1, 0xe0a1b12a), TOBN(0x1e4ef88d, 0x770ba95f),
-           TOBN(0x8c33345c, 0xdc2ae9cb), TOBN(0xcecf1276, 0x01cc8403)},
-          {TOBN(0x687c012e, 0x1b39b80f), TOBN(0xfd90d0ad, 0x35c33ba4),
-           TOBN(0xa3ef5a67, 0x5c9661c2), TOBN(0x368fc88e, 0xe017429e)}},
-         {{TOBN(0xd30c6761, 0x196a2fa2), TOBN(0x931b9817, 0xbd5b312e),
-           TOBN(0xba01000c, 0x72f54a31), TOBN(0xa203d2c8, 0x66eaa541)},
-          {TOBN(0xf2abdee0, 0x98939db3), TOBN(0xe37d6c2c, 0x3e606c02),
-           TOBN(0xf2921574, 0x521ff643), TOBN(0x2781b3c4, 0xd7e2fca3)}},
-         {{TOBN(0x664300b0, 0x7850ec06), TOBN(0xac5a38b9, 0x7d3a10cf),
-           TOBN(0x9233188d, 0xe34ab39d), TOBN(0xe77057e4, 0x5072cbb9)},
-          {TOBN(0xbcf0c042, 0xb59e78df), TOBN(0x4cfc91e8, 0x1d97de52),
-           TOBN(0x4661a26c, 0x3ee0ca4a), TOBN(0x5620a4c1, 0xfb8507bc)}},
-         {{TOBN(0x4b44d4aa, 0x049f842c), TOBN(0xceabc5d5, 0x1540e82b),
-           TOBN(0x306710fd, 0x15c6f156), TOBN(0xbe5ae52b, 0x63db1d72)},
-          {TOBN(0x06f1e7e6, 0x334957f1), TOBN(0x57e388f0, 0x31144a70),
-           TOBN(0xfb69bb2f, 0xdf96447b), TOBN(0x0f78ebd3, 0x73e38a12)}},
-         {{TOBN(0xb8222605, 0x2b7ce542), TOBN(0xe6d4ce99, 0x7472bde1),
-           TOBN(0x53e16ebe, 0x09d2f4da), TOBN(0x180ff42e, 0x53b92b2e)},
-          {TOBN(0xc59bcc02, 0x2c34a1c6), TOBN(0x3803d6f9, 0x422c46c2),
-           TOBN(0x18aff74f, 0x5c14a8a2), TOBN(0x55aebf80, 0x10a08b28)}},
-         {{TOBN(0x66097d58, 0x7135593f), TOBN(0x32e6eff7, 0x2be570cd),
-           TOBN(0x584e6a10, 0x2a8c860d), TOBN(0xcd185890, 0xa2eb4163)},
-          {TOBN(0x7ceae99d, 0x6d97e134), TOBN(0xd42c6b70, 0xdd8447ce),
-           TOBN(0x59ddbb4a, 0xb8c50273), TOBN(0x03c612df, 0x3cf34e1e)}},
-         {{TOBN(0x84b9ca15, 0x04b6c5a0), TOBN(0x35216f39, 0x18f0e3a3),
-           TOBN(0x3ec2d2bc, 0xbd986c00), TOBN(0x8bf546d9, 0xd19228fe)},
-          {TOBN(0xd1c655a4, 0x4cd623c3), TOBN(0x366ce718, 0x502b8e5a),
-           TOBN(0x2cfc84b4, 0xeea0bfe7), TOBN(0xe01d5cee, 0xcf443e8e)}},
-         {{TOBN(0x8ec045d9, 0x036520f8), TOBN(0xdfb3c3d1, 0x92d40e98),
-           TOBN(0x0bac4cce, 0xcc559a04), TOBN(0x35eccae5, 0x240ea6b1)},
-          {TOBN(0x180b32db, 0xf8a5a0ac), TOBN(0x547972a5, 0xeb699700),
-           TOBN(0xa3765801, 0xca26bca0), TOBN(0x57e09d0e, 0xa647f25a)}},
-         {{TOBN(0xb956970e, 0x2fdd23cc), TOBN(0xb80288bc, 0x5682e971),
-           TOBN(0xe6e6d91e, 0x9ae86ebc), TOBN(0x0564c83f, 0x8c9f1939)},
-          {TOBN(0x551932a2, 0x39560368), TOBN(0xe893752b, 0x049c28e2),
-           TOBN(0x0b03cee5, 0xa6a158c3), TOBN(0xe12d656b, 0x04964263)}},
-         {{TOBN(0x4b47554e, 0x63e3bc1d), TOBN(0xc719b6a2, 0x45044ff7),
-           TOBN(0x4f24d30a, 0xe48daa07), TOBN(0xa3f37556, 0xc8c1edc3)},
-          {TOBN(0x9a47bf76, 0x0700d360), TOBN(0xbb1a1824, 0x822ae4e2),
-           TOBN(0x22e275a3, 0x89f1fb4c), TOBN(0x72b1aa23, 0x9968c5f5)}},
-         {{TOBN(0xa75feaca, 0xbe063f64), TOBN(0x9b392f43, 0xbce47a09),
-           TOBN(0xd4241509, 0x1ad07aca), TOBN(0x4b0c591b, 0x8d26cd0f)},
-          {TOBN(0x2d42ddfd, 0x92f1169a), TOBN(0x63aeb1ac, 0x4cbf2392),
-           TOBN(0x1de9e877, 0x0691a2af), TOBN(0xebe79af7, 0xd98021da)}},
-         {{TOBN(0xcfdf2a4e, 0x40e50acf), TOBN(0xf0a98ad7, 0xaf01d665),
-           TOBN(0xefb640bf, 0x1831be1f), TOBN(0x6fe8bd2f, 0x80e9ada0)},
-          {TOBN(0x94c103a1, 0x6cafbc91), TOBN(0x170f8759, 0x8308e08c),
-           TOBN(0x5de2d2ab, 0x9780ff4f), TOBN(0x666466bc, 0x45b201f2)}},
-         {{TOBN(0x58af2010, 0xf5b343bc), TOBN(0x0f2e400a, 0xf2f142fe),
-           TOBN(0x3483bfde, 0xa85f4bdf), TOBN(0xf0b1d093, 0x03bfeaa9)},
-          {TOBN(0x2ea01b95, 0xc7081603), TOBN(0xe943e4c9, 0x3dba1097),
-           TOBN(0x47be92ad, 0xb438f3a6), TOBN(0x00bb7742, 0xe5bf6636)}},
-         {{TOBN(0x136b7083, 0x824297b4), TOBN(0x9d0e5580, 0x5584455f),
-           TOBN(0xab48cedc, 0xf1c7d69e), TOBN(0x53a9e481, 0x2a256e76)},
-          {TOBN(0x0402b0e0, 0x65eb2413), TOBN(0xdadbbb84, 0x8fc407a7),
-           TOBN(0xa65cd5a4, 0x8d7f5492), TOBN(0x21d44293, 0x74bae294)}},
-         {{TOBN(0x66917ce6, 0x3b5f1cc4), TOBN(0x37ae52ea, 0xce872e62),
-           TOBN(0xbb087b72, 0x2905f244), TOBN(0x12077086, 0x1e6af74f)},
-          {TOBN(0x4b644e49, 0x1058edea), TOBN(0x827510e3, 0xb638ca1d),
-           TOBN(0x8cf2b704, 0x6038591c), TOBN(0xffc8b47a, 0xfe635063)}},
-         {{TOBN(0x3ae220e6, 0x1b4d5e63), TOBN(0xbd864742, 0x9d961b4b),
-           TOBN(0x610c107e, 0x9bd16bed), TOBN(0x4270352a, 0x1127147b)},
-          {TOBN(0x7d17ffe6, 0x64cfc50e), TOBN(0x50dee01a, 0x1e36cb42),
-           TOBN(0x068a7622, 0x35dc5f9a), TOBN(0x9a08d536, 0xdf53f62c)}},
-         {{TOBN(0x4ed71457, 0x6be5f7de), TOBN(0xd93006f8, 0xc2263c9e),
-           TOBN(0xe073694c, 0xcacacb36), TOBN(0x2ff7a5b4, 0x3ae118ab)},
-          {TOBN(0x3cce53f1, 0xcd871236), TOBN(0xf156a39d, 0xc2aa6d52),
-           TOBN(0x9cc5f271, 0xb198d76d), TOBN(0xbc615b6f, 0x81383d39)}},
-         {{TOBN(0xa54538e8, 0xde3eee6b), TOBN(0x58c77538, 0xab910d91),
-           TOBN(0x31e5bdbc, 0x58d278bd), TOBN(0x3cde4adf, 0xb963acae)},
-          {TOBN(0xb1881fd2, 0x5302169c), TOBN(0x8ca60fa0, 0xa989ed8b),
-           TOBN(0xa1999458, 0xff96a0ee), TOBN(0xc1141f03, 0xac6c283d)}},
-         {{TOBN(0x7677408d, 0x6dfafed3), TOBN(0x33a01653, 0x39661588),
-           TOBN(0x3c9c15ec, 0x0b726fa0), TOBN(0x090cfd93, 0x6c9b56da)},
-          {TOBN(0xe34f4bae, 0xa3c40af5), TOBN(0x3469eadb, 0xd21129f1),
-           TOBN(0xcc51674a, 0x1e207ce8), TOBN(0x1e293b24, 0xc83b1ef9)}},
-         {{TOBN(0x17173d13, 0x1e6c0bb4), TOBN(0x19004695, 0x90776d35),
-           TOBN(0xe7980e34, 0x6de6f922), TOBN(0x873554cb, 0xf4dd9a22)},
-          {TOBN(0x0316c627, 0xcbf18a51), TOBN(0x4d93651b, 0x3032c081),
-           TOBN(0x207f2771, 0x3946834d), TOBN(0x2c08d7b4, 0x30cdbf80)}},
-         {{TOBN(0x137a4fb4, 0x86df2a61), TOBN(0xa1ed9c07, 0xecf7b4a2),
-           TOBN(0xb2e460e2, 0x7bd042ff), TOBN(0xb7f5e2fa, 0x5f62f5ec)},
-          {TOBN(0x7aa6ec6b, 0xcc2423b7), TOBN(0x75ce0a7f, 0xba63eea7),
-           TOBN(0x67a45fb1, 0xf250a6e1), TOBN(0x93bc919c, 0xe53cdc9f)}},
-         {{TOBN(0x9271f56f, 0x871942df), TOBN(0x2372ff6f, 0x7859ad66),
-           TOBN(0x5f4c2b96, 0x33cb1a78), TOBN(0xe3e29101, 0x5838aa83)},
-          {TOBN(0xa7ed1611, 0xe4e8110c), TOBN(0x2a2d70d5, 0x330198ce),
-           TOBN(0xbdf132e8, 0x6720efe0), TOBN(0xe61a8962, 0x66a471bf)}},
-         {{TOBN(0x796d3a85, 0x825808bd), TOBN(0x51dc3cb7, 0x3fd6e902),
-           TOBN(0x643c768a, 0x916219d1), TOBN(0x36cd7685, 0xa2ad7d32)},
-          {TOBN(0xe3db9d05, 0xb22922a4), TOBN(0x6494c87e, 0xdba29660),
-           TOBN(0xf0ac91df, 0xbcd2ebc7), TOBN(0x4deb57a0, 0x45107f8d)}},
-         {{TOBN(0x42271f59, 0xc3d12a73), TOBN(0x5f71687c, 0xa5c2c51d),
-           TOBN(0xcb1f50c6, 0x05797bcb), TOBN(0x29ed0ed9, 0xd6d34eb0)},
-          {TOBN(0xe5fe5b47, 0x4683c2eb), TOBN(0x4956eeb5, 0x97447c46),
-           TOBN(0x5b163a43, 0x71207167), TOBN(0x93fa2fed, 0x0248c5ef)}},
-         {{TOBN(0x67930af2, 0x31f63950), TOBN(0xa77797c1, 0x14caa2c9),
-           TOBN(0x526e80ee, 0x27ac7e62), TOBN(0xe1e6e626, 0x58b28aec)},
-          {TOBN(0x636178b0, 0xb3c9fef0), TOBN(0xaf7752e0, 0x6d5f90be),
-           TOBN(0x94ecaf18, 0xeece51cf), TOBN(0x2864d0ed, 0xca806e1f)}},
-         {{TOBN(0x6de2e383, 0x97c69134), TOBN(0x5a42c316, 0xeb291293),
-           TOBN(0xc7779219, 0x6a60bae0), TOBN(0xa24de346, 0x6b7599d1)},
-          {TOBN(0x49d374aa, 0xb75d4941), TOBN(0x98900586, 0x2d501ff0),
-           TOBN(0x9f16d40e, 0xeb7974cf), TOBN(0x1033860b, 0xcdd8c115)}},
-         {{TOBN(0xb6c69ac8, 0x2094cec3), TOBN(0x9976fb88, 0x403b770c),
-           TOBN(0x1dea026c, 0x4859590d), TOBN(0xb6acbb46, 0x8562d1fd)},
-          {TOBN(0x7cd6c461, 0x44569d85), TOBN(0xc3190a36, 0x97f0891d),
-           TOBN(0xc6f53195, 0x48d5a17d), TOBN(0x7d919966, 0xd749abc8)}},
-         {{TOBN(0x65104837, 0xdd1c8a20), TOBN(0x7e5410c8, 0x2f683419),
-           TOBN(0x958c3ca8, 0xbe94022e), TOBN(0x605c3197, 0x6145dac2)},
-          {TOBN(0x3fc07501, 0x01683d54), TOBN(0x1d7127c5, 0x595b1234),
-           TOBN(0x10b8f87c, 0x9481277f), TOBN(0x677db2a8, 0xe65a1adb)}},
-         {{TOBN(0xec2fccaa, 0xddce3345), TOBN(0x2a6811b7, 0x012a4350),
-           TOBN(0x96760ff1, 0xac598bdc), TOBN(0x054d652a, 0xd1bf4128)},
-          {TOBN(0x0a1151d4, 0x92a21005), TOBN(0xad7f3971, 0x33110fdf),
-           TOBN(0x8c95928c, 0x1960100f), TOBN(0x6c91c825, 0x7bf03362)}},
-         {{TOBN(0xc8c8b2a2, 0xce309f06), TOBN(0xfdb27b59, 0xca27204b),
-           TOBN(0xd223eaa5, 0x0848e32e), TOBN(0xb93e4b2e, 0xe7bfaf1e)},
-          {TOBN(0xc5308ae6, 0x44aa3ded), TOBN(0x317a666a, 0xc015d573),
-           TOBN(0xc888ce23, 0x1a979707), TOBN(0xf141c1e6, 0x0d5c4958)}},
-         {{TOBN(0xb53b7de5, 0x61906373), TOBN(0x858dbade, 0xeb999595),
-           TOBN(0x8cbb47b2, 0xa59e5c36), TOBN(0x660318b3, 0xdcf4e842)},
-          {TOBN(0xbd161ccd, 0x12ba4b7a), TOBN(0xf399daab, 0xf8c8282a),
-           TOBN(0x1587633a, 0xeeb2130d), TOBN(0xa465311a, 0xda38dd7d)}},
-         {{TOBN(0x5f75eec8, 0x64d3779b), TOBN(0x3c5d0476, 0xad64c171),
-           TOBN(0x87410371, 0x2a914428), TOBN(0x8096a891, 0x90e2fc29)},
-          {TOBN(0xd3d2ae9d, 0x23b3ebc2), TOBN(0x90bdd6db, 0xa580cfd6),
-           TOBN(0x52dbb7f3, 0xc5b01f6c), TOBN(0xe68eded4, 0xe102a2dc)}},
-         {{TOBN(0x17785b77, 0x99eb6df0), TOBN(0x26c3cc51, 0x7386b779),
-           TOBN(0x345ed988, 0x6417a48e), TOBN(0xe990b4e4, 0x07d6ef31)},
-          {TOBN(0x0f456b7e, 0x2586abba), TOBN(0x239ca6a5, 0x59c96e9a),
-           TOBN(0xe327459c, 0xe2eb4206), TOBN(0x3a4c3313, 0xa002b90a)}},
-         {{TOBN(0x2a114806, 0xf6a3f6fb), TOBN(0xad5cad2f, 0x85c251dd),
-           TOBN(0x92c1f613, 0xf5a784d3), TOBN(0xec7bfacf, 0x349766d5)},
-          {TOBN(0x04b3cd33, 0x3e23cb3b), TOBN(0x3979fe84, 0xc5a64b2d),
-           TOBN(0x192e2720, 0x7e589106), TOBN(0xa60c43d1, 0xa15b527f)}},
-         {{TOBN(0x2dae9082, 0xbe7cf3a6), TOBN(0xcc86ba92, 0xbc967274),
-           TOBN(0xf28a2ce8, 0xaea0a8a9), TOBN(0x404ca6d9, 0x6ee988b3)},
-          {TOBN(0xfd7e9c5d, 0x005921b8), TOBN(0xf56297f1, 0x44e79bf9),
-           TOBN(0xa163b460, 0x0d75ddc2), TOBN(0x30b23616, 0xa1f2be87)}},
-         {{TOBN(0x4b070d21, 0xbfe50e2b), TOBN(0x7ef8cfd0, 0xe1bfede1),
-           TOBN(0xadba0011, 0x2aac4ae0), TOBN(0x2a3e7d01, 0xb9ebd033)},
-          {TOBN(0x995277ec, 0xe38d9d1c), TOBN(0xb500249e, 0x9c5d2de3),
-           TOBN(0x8912b820, 0xf13ca8c9), TOBN(0xc8798114, 0x877793af)}},
-         {{TOBN(0x19e6125d, 0xec3f1dec), TOBN(0x07b1f040, 0x911178da),
-           TOBN(0xd93ededa, 0x904a6738), TOBN(0x55187a5a, 0x0bebedcd)},
-          {TOBN(0xf7d04722, 0xeb329d41), TOBN(0xf449099e, 0xf170b391),
-           TOBN(0xfd317a69, 0xca99f828), TOBN(0x50c3db2b, 0x34a4976d)}},
-         {{TOBN(0xe9ba7784, 0x3757b392), TOBN(0x326caefd, 0xaa3ca05a),
-           TOBN(0x78e5293b, 0xf1e593d4), TOBN(0x7842a937, 0x0d98fd13)},
-          {TOBN(0xe694bf96, 0x5f96b10d), TOBN(0x373a9df6, 0x06a8cd05),
-           TOBN(0x997d1e51, 0xe8f0c7fc), TOBN(0x1d019790, 0x63fd972e)}},
-         {{TOBN(0x0064d858, 0x5499fb32), TOBN(0x7b67bad9, 0x77a8aeb7),
-           TOBN(0x1d3eb977, 0x2d08eec5), TOBN(0x5fc047a6, 0xcbabae1d)},
-          {TOBN(0x0577d159, 0xe54a64bb), TOBN(0x8862201b, 0xc43497e4),
-           TOBN(0xad6b4e28, 0x2ce0608d), TOBN(0x8b687b7d, 0x0b167aac)}},
-         {{TOBN(0x6ed4d367, 0x8b2ecfa9), TOBN(0x24dfe62d, 0xa90c3c38),
-           TOBN(0xa1862e10, 0x3fe5c42b), TOBN(0x1ca73dca, 0xd5732a9f)},
-          {TOBN(0x35f038b7, 0x76bb87ad), TOBN(0x674976ab, 0xf242b81f),
-           TOBN(0x4f2bde7e, 0xb0fd90cd), TOBN(0x6efc172e, 0xa7fdf092)}},
-         {{TOBN(0x3806b69b, 0x92222f1f), TOBN(0x5a2459ca, 0x6cf7ae70),
-           TOBN(0x6789f69c, 0xa85217ee), TOBN(0x5f232b5e, 0xe3dc85ac)},
-          {TOBN(0x660e3ec5, 0x48e9e516), TOBN(0x124b4e47, 0x3197eb31),
-           TOBN(0x10a0cb13, 0xaafcca23), TOBN(0x7bd63ba4, 0x8213224f)}},
-         {{TOBN(0xaffad7cc, 0x290a7f4f), TOBN(0x6b409c9e, 0x0286b461),
-           TOBN(0x58ab809f, 0xffa407af), TOBN(0xc3122eed, 0xc68ac073)},
-          {TOBN(0x17bf9e50, 0x4ef24d7e), TOBN(0x5d929794, 0x3e2a5811),
-           TOBN(0x519bc867, 0x02902e01), TOBN(0x76bba5da, 0x39c8a851)}},
-         {{TOBN(0xe9f9669c, 0xda94951e), TOBN(0x4b6af58d, 0x66b8d418),
-           TOBN(0xfa321074, 0x17d426a4), TOBN(0xc78e66a9, 0x9dde6027)},
-          {TOBN(0x0516c083, 0x4a53b964), TOBN(0xfc659d38, 0xff602330),
-           TOBN(0x0ab55e5c, 0x58c5c897), TOBN(0x985099b2, 0x838bc5df)}},
-         {{TOBN(0x061d9efc, 0xc52fc238), TOBN(0x712b2728, 0x6ac1da3f),
-           TOBN(0xfb658149, 0x9283fe08), TOBN(0x4954ac94, 0xb8aaa2f7)},
-          {TOBN(0x85c0ada4, 0x7fb2e74f), TOBN(0xee8ba98e, 0xb89926b0),
-           TOBN(0xe4f9d37d, 0x23d1af5b), TOBN(0x14ccdbf9, 0xba9b015e)}},
-         {{TOBN(0xb674481b, 0x7bfe7178), TOBN(0x4e1debae, 0x65405868),
-           TOBN(0x061b2821, 0xc48c867d), TOBN(0x69c15b35, 0x513b30ea)},
-          {TOBN(0x3b4a1666, 0x36871088), TOBN(0xe5e29f5d, 0x1220b1ff),
-           TOBN(0x4b82bb35, 0x233d9f4d), TOBN(0x4e076333, 0x18cdc675)}}},
-        {{{TOBN(0x0d53f5c7, 0xa3e6fced), TOBN(0xe8cbbdd5, 0xf45fbdeb),
-           TOBN(0xf85c01df, 0x13339a70), TOBN(0x0ff71880, 0x142ceb81)},
-          {TOBN(0x4c4e8774, 0xbd70437a), TOBN(0x5fb32891, 0xba0bda6a),
-           TOBN(0x1cdbebd2, 0xf18bd26e), TOBN(0x2f9526f1, 0x03a9d522)}},
-         {{TOBN(0x40ce3051, 0x92c4d684), TOBN(0x8b04d725, 0x7612efcd),
-           TOBN(0xb9dcda36, 0x6f9cae20), TOBN(0x0edc4d24, 0xf058856c)},
-          {TOBN(0x64f2e6bf, 0x85427900), TOBN(0x3de81295, 0xdc09dfea),
-           TOBN(0xd41b4487, 0x379bf26c), TOBN(0x50b62c6d, 0x6df135a9)}},
-         {{TOBN(0xd4f8e3b4, 0xc72dfe67), TOBN(0xc416b0f6, 0x90e19fdf),
-           TOBN(0x18b9098d, 0x4c13bd35), TOBN(0xac11118a, 0x15b8cb9e)},
-          {TOBN(0xf598a318, 0xf0062841), TOBN(0xbfe0602f, 0x89f356f4),
-           TOBN(0x7ae3637e, 0x30177a0c), TOBN(0x34097747, 0x61136537)}},
-         {{TOBN(0x0db2fb5e, 0xd005832a), TOBN(0x5f5efd3b, 0x91042e4f),
-           TOBN(0x8c4ffdc6, 0xed70f8ca), TOBN(0xe4645d0b, 0xb52da9cc)},
-          {TOBN(0x9596f58b, 0xc9001d1f), TOBN(0x52c8f0bc, 0x4e117205),
-           TOBN(0xfd4aa0d2, 0xe398a084), TOBN(0x815bfe3a, 0x104f49de)}},
-         {{TOBN(0x97e5443f, 0x23885e5f), TOBN(0xf72f8f99, 0xe8433aab),
-           TOBN(0xbd00b154, 0xe4d4e604), TOBN(0xd0b35e6a, 0xe5e173ff)},
-          {TOBN(0x57b2a048, 0x9164722d), TOBN(0x3e3c665b, 0x88761ec8),
-           TOBN(0x6bdd1397, 0x3da83832), TOBN(0x3c8b1a1e, 0x73dafe3b)}},
-         {{TOBN(0x4497ace6, 0x54317cac), TOBN(0xbe600ab9, 0x521771b3),
-           TOBN(0xb42e409e, 0xb0dfe8b8), TOBN(0x386a67d7, 0x3942310f)},
-          {TOBN(0x25548d8d, 0x4431cc28), TOBN(0xa7cff142, 0x985dc524),
-           TOBN(0x4d60f5a1, 0x93c4be32), TOBN(0x83ebd5c8, 0xd071c6e1)}},
-         {{TOBN(0xba3a80a7, 0xb1fd2b0b), TOBN(0x9b3ad396, 0x5bec33e8),
-           TOBN(0xb3868d61, 0x79743fb3), TOBN(0xcfd169fc, 0xfdb462fa)},
-          {TOBN(0xd3b499d7, 0x9ce0a6af), TOBN(0x55dc1cf1, 0xe42d3ff8),
-           TOBN(0x04fb9e6c, 0xc6c3e1b2), TOBN(0x47e6961d, 0x6f69a474)}},
-         {{TOBN(0x54eb3acc, 0xe548b37b), TOBN(0xb38e7542, 0x84d40549),
-           TOBN(0x8c3daa51, 0x7b341b4f), TOBN(0x2f6928ec, 0x690bf7fa)},
-          {TOBN(0x0496b323, 0x86ce6c41), TOBN(0x01be1c55, 0x10adadcd),
-           TOBN(0xc04e67e7, 0x4bb5faf9), TOBN(0x3cbaf678, 0xe15c9985)}},
-         {{TOBN(0x8cd12145, 0x50ca4247), TOBN(0xba1aa47a, 0xe7dd30aa),
-           TOBN(0x2f81ddf1, 0xe58fee24), TOBN(0x03452936, 0xeec9b0e8)},
-          {TOBN(0x8bdc3b81, 0x243aea96), TOBN(0x9a2919af, 0x15c3d0e5),
-           TOBN(0x9ea640ec, 0x10948361), TOBN(0x5ac86d5b, 0x6e0bcccf)}},
-         {{TOBN(0xf892d918, 0xc36cf440), TOBN(0xaed3e837, 0xc939719c),
-           TOBN(0xb07b08d2, 0xc0218b64), TOBN(0x6f1bcbba, 0xce9790dd)},
-          {TOBN(0x4a84d6ed, 0x60919b8e), TOBN(0xd8900791, 0x8ac1f9eb),
-           TOBN(0xf84941aa, 0x0dd5daef), TOBN(0xb22fe40a, 0x67fd62c5)}},
-         {{TOBN(0x97e15ba2, 0x157f2db3), TOBN(0xbda2fc8f, 0x8e28ca9c),
-           TOBN(0x5d050da4, 0x37b9f454), TOBN(0x3d57eb57, 0x2379d72e)},
-          {TOBN(0xe9b5eba2, 0xfb5ee997), TOBN(0x01648ca2, 0xe11538ca),
-           TOBN(0x32bb76f6, 0xf6327974), TOBN(0x338f14b8, 0xff3f4bb7)}},
-         {{TOBN(0x524d226a, 0xd7ab9a2d), TOBN(0x9c00090d, 0x7dfae958),
-           TOBN(0x0ba5f539, 0x8751d8c2), TOBN(0x8afcbcdd, 0x3ab8262d)},
-          {TOBN(0x57392729, 0xe99d043b), TOBN(0xef51263b, 0xaebc943a),
-           TOBN(0x9feace93, 0x20862935), TOBN(0x639efc03, 0xb06c817b)}},
-         {{TOBN(0x1fe054b3, 0x66b4be7a), TOBN(0x3f25a9de, 0x84a37a1e),
-           TOBN(0xf39ef1ad, 0x78d75cd9), TOBN(0xd7b58f49, 0x5062c1b5)},
-          {TOBN(0x6f74f9a9, 0xff563436), TOBN(0xf718ff29, 0xe8af51e7),
-           TOBN(0x5234d313, 0x15e97fec), TOBN(0xb6a8e2b1, 0x292f1c0a)}},
-         {{TOBN(0xa7f53aa8, 0x327720c1), TOBN(0x956ca322, 0xba092cc8),
-           TOBN(0x8f03d64a, 0x28746c4d), TOBN(0x51fe1782, 0x66d0d392)},
-          {TOBN(0xd19b34db, 0x3c832c80), TOBN(0x60dccc5c, 0x6da2e3b4),
-           TOBN(0x245dd62e, 0x0a104ccc), TOBN(0xa7ab1de1, 0x620b21fd)}},
-         {{TOBN(0xb293ae0b, 0x3893d123), TOBN(0xf7b75783, 0xb15ee71c),
-           TOBN(0x5aa3c614, 0x42a9468b), TOBN(0xd686123c, 0xdb15d744)},
-          {TOBN(0x8c616891, 0xa7ab4116), TOBN(0x6fcd72c8, 0xa4e6a459),
-           TOBN(0xac219110, 0x77e5fad7), TOBN(0xfb6a20e7, 0x704fa46b)}},
-         {{TOBN(0xe839be7d, 0x341d81dc), TOBN(0xcddb6889, 0x32148379),
-           TOBN(0xda6211a1, 0xf7026ead), TOBN(0xf3b2575f, 0xf4d1cc5e)},
-          {TOBN(0x40cfc8f6, 0xa7a73ae6), TOBN(0x83879a5e, 0x61d5b483),
-           TOBN(0xc5acb1ed, 0x41a50ebc), TOBN(0x59a60cc8, 0x3c07d8fa)}},
-         {{TOBN(0x1b73bdce, 0xb1876262), TOBN(0x2b0d79f0, 0x12af4ee9),
-           TOBN(0x8bcf3b0b, 0xd46e1d07), TOBN(0x17d6af9d, 0xe45d152f)},
-          {TOBN(0x73520461, 0x6d736451), TOBN(0x43cbbd97, 0x56b0bf5a),
-           TOBN(0xb0833a5b, 0xd5999b9d), TOBN(0x702614f0, 0xeb72e398)}},
-         {{TOBN(0x0aadf01a, 0x59c3e9f8), TOBN(0x40200e77, 0xce6b3d16),
-           TOBN(0xda22bdd3, 0xdeddafad), TOBN(0x76dedaf4, 0x310d72e1)},
-          {TOBN(0x49ef807c, 0x4bc2e88f), TOBN(0x6ba81291, 0x146dd5a5),
-           TOBN(0xa1a4077a, 0x7d8d59e9), TOBN(0x87b6a2e7, 0x802db349)}},
-         {{TOBN(0xd5679997, 0x1b4e598e), TOBN(0xf499ef1f, 0x06fe4b1d),
-           TOBN(0x3978d3ae, 0xfcb267c5), TOBN(0xb582b557, 0x235786d0)},
-          {TOBN(0x32b3b2ca, 0x1715cb07), TOBN(0x4c3de6a2, 0x8480241d),
-           TOBN(0x63b5ffed, 0xcb571ecd), TOBN(0xeaf53900, 0xed2fe9a9)}},
-         {{TOBN(0xdec98d4a, 0xc3b81990), TOBN(0x1cb83722, 0x9e0cc8fe),
-           TOBN(0xfe0b0491, 0xd2b427b9), TOBN(0x0f2386ac, 0xe983a66c)},
-          {TOBN(0x930c4d1e, 0xb3291213), TOBN(0xa2f82b2e, 0x59a62ae4),
-           TOBN(0x77233853, 0xf93e89e3), TOBN(0x7f8063ac, 0x11777c7f)}},
-         {{TOBN(0xff0eb567, 0x59ad2877), TOBN(0x6f454642, 0x9865c754),
-           TOBN(0xe6fe701a, 0x236e9a84), TOBN(0xc586ef16, 0x06e40fc3)},
-          {TOBN(0x3f62b6e0, 0x24bafad9), TOBN(0xc8b42bd2, 0x64da906a),
-           TOBN(0xc98e1eb4, 0xda3276a0), TOBN(0x30d0e5fc, 0x06cbf852)}},
-         {{TOBN(0x1b6b2ae1, 0xe8b4dfd4), TOBN(0xd754d5c7, 0x8301cbac),
-           TOBN(0x66097629, 0x112a39ac), TOBN(0xf86b5999, 0x93ba4ab9)},
-          {TOBN(0x26c9dea7, 0x99f9d581), TOBN(0x0473b1a8, 0xc2fafeaa),
-           TOBN(0x1469af55, 0x3b2505a5), TOBN(0x227d16d7, 0xd6a43323)}},
-         {{TOBN(0x3316f73c, 0xad3d97f9), TOBN(0x52bf3bb5, 0x1f137455),
-           TOBN(0x953eafeb, 0x09954e7c), TOBN(0xa721dfed, 0xdd732411)},
-          {TOBN(0xb4929821, 0x141d4579), TOBN(0x3411321c, 0xaa3bd435),
-           TOBN(0xafb355aa, 0x17fa6015), TOBN(0xb4e7ef4a, 0x18e42f0e)}},
-         {{TOBN(0x604ac97c, 0x59371000), TOBN(0xe1c48c70, 0x7f759c18),
-           TOBN(0x3f62ecc5, 0xa5db6b65), TOBN(0x0a78b173, 0x38a21495)},
-          {TOBN(0x6be1819d, 0xbcc8ad94), TOBN(0x70dc04f6, 0xd89c3400),
-           TOBN(0x462557b4, 0xa6b4840a), TOBN(0x544c6ade, 0x60bd21c0)}},
-         {{TOBN(0x6a00f24e, 0x907a544b), TOBN(0xa7520dcb, 0x313da210),
-           TOBN(0xfe939b75, 0x11e4994b), TOBN(0x918b6ba6, 0xbc275d70)},
-          {TOBN(0xd3e5e0fc, 0x644be892), TOBN(0x707a9816, 0xfdaf6c42),
-           TOBN(0x60145567, 0xf15c13fe), TOBN(0x4818ebaa, 0xe130a54a)}},
-         {{TOBN(0x28aad3ad, 0x58d2f767), TOBN(0xdc5267fd, 0xd7e7c773),
-           TOBN(0x4919cc88, 0xc3afcc98), TOBN(0xaa2e6ab0, 0x2db8cd4b)},
-          {TOBN(0xd46fec04, 0xd0c63eaa), TOBN(0xa1cb92c5, 0x19ffa832),
-           TOBN(0x678dd178, 0xe43a631f), TOBN(0xfb5ae1cd, 0x3dc788b3)}},
-         {{TOBN(0x68b4fb90, 0x6e77de04), TOBN(0x7992bcf0, 0xf06dbb97),
-           TOBN(0x896e6a13, 0xc417c01d), TOBN(0x8d96332c, 0xb956be01)},
-          {TOBN(0x902fc93a, 0x413aa2b9), TOBN(0x99a4d915, 0xfc98c8a5),
-           TOBN(0x52c29407, 0x565f1137), TOBN(0x4072690f, 0x21e4f281)}},
-         {{TOBN(0x36e607cf, 0x02ff6072), TOBN(0xa47d2ca9, 0x8ad98cdc),
-           TOBN(0xbf471d1e, 0xf5f56609), TOBN(0xbcf86623, 0xf264ada0)},
-          {TOBN(0xb70c0687, 0xaa9e5cb6), TOBN(0xc98124f2, 0x17401c6c),
-           TOBN(0x8189635f, 0xd4a61435), TOBN(0xd28fb8af, 0xa9d98ea6)}},
-         {{TOBN(0xb9a67c2a, 0x40c251f8), TOBN(0x88cd5d87, 0xa2da44be),
-           TOBN(0x437deb96, 0xe09b5423), TOBN(0x150467db, 0x64287dc1)},
-          {TOBN(0xe161debb, 0xcdabb839), TOBN(0xa79e9742, 0xf1839a3e),
-           TOBN(0xbb8dd3c2, 0x652d202b), TOBN(0x7b3e67f7, 0xe9f97d96)}},
-         {{TOBN(0x5aa5d78f, 0xb1cb6ac9), TOBN(0xffa13e8e, 0xca1d0d45),
-           TOBN(0x369295dd, 0x2ba5bf95), TOBN(0xd68bd1f8, 0x39aff05e)},
-          {TOBN(0xaf0d86f9, 0x26d783f2), TOBN(0x543a59b3, 0xfc3aafc1),
-           TOBN(0x3fcf81d2, 0x7b7da97c), TOBN(0xc990a056, 0xd25dee46)}},
-         {{TOBN(0x3e6775b8, 0x519cce2c), TOBN(0xfc9af71f, 0xae13d863),
-           TOBN(0x774a4a6f, 0x47c1605c), TOBN(0x46ba4245, 0x2fd205e8)},
-          {TOBN(0xa06feea4, 0xd3fd524d), TOBN(0x1e724641, 0x6de1acc2),
-           TOBN(0xf53816f1, 0x334e2b42), TOBN(0x49e5918e, 0x922f0024)}},
-         {{TOBN(0x439530b6, 0x65c7322d), TOBN(0xcf12cc01, 0xb3c1b3fb),
-           TOBN(0xc70b0186, 0x0172f685), TOBN(0xb915ee22, 0x1b58391d)},
-          {TOBN(0x9afdf03b, 0xa317db24), TOBN(0x87dec659, 0x17b8ffc4),
-           TOBN(0x7f46597b, 0xe4d3d050), TOBN(0x80a1c1ed, 0x006500e7)}},
-         {{TOBN(0x84902a96, 0x78bf030e), TOBN(0xfb5e9c9a, 0x50560148),
-           TOBN(0x6dae0a92, 0x63362426), TOBN(0xdcaeecf4, 0xa9e30c40)},
-          {TOBN(0xc0d887bb, 0x518d0c6b), TOBN(0x99181152, 0xcb985b9d),
-           TOBN(0xad186898, 0xef7bc381), TOBN(0x18168ffb, 0x9ee46201)}},
-         {{TOBN(0x9a04cdaa, 0x2502753c), TOBN(0xbb279e26, 0x51407c41),
-           TOBN(0xeacb03aa, 0xf23564e5), TOBN(0x18336582, 0x71e61016)},
-          {TOBN(0x8684b8c4, 0xeb809877), TOBN(0xb336e18d, 0xea0e672e),
-           TOBN(0xefb601f0, 0x34ee5867), TOBN(0x2733edbe, 0x1341cfd1)}},
-         {{TOBN(0xb15e809a, 0x26025c3c), TOBN(0xe6e981a6, 0x9350df88),
-           TOBN(0x92376237, 0x8502fd8e), TOBN(0x4791f216, 0x0c12be9b)},
-          {TOBN(0xb7256789, 0x25f02425), TOBN(0xec863194, 0x7a974443),
-           TOBN(0x7c0ce882, 0xfb41cc52), TOBN(0xc266ff7e, 0xf25c07f2)}},
-         {{TOBN(0x3d4da8c3, 0x017025f3), TOBN(0xefcf628c, 0xfb9579b4),
-           TOBN(0x5c4d0016, 0x1f3716ec), TOBN(0x9c27ebc4, 0x6801116e)},
-          {TOBN(0x5eba0ea1, 0x1da1767e), TOBN(0xfe151452, 0x47004c57),
-           TOBN(0x3ace6df6, 0x8c2373b7), TOBN(0x75c3dffe, 0x5dbc37ac)}},
-         {{TOBN(0x3dc32a73, 0xddc925fc), TOBN(0xb679c841, 0x2f65ee0b),
-           TOBN(0x715a3295, 0x451cbfeb), TOBN(0xd9889768, 0xf76e9a29)},
-          {TOBN(0xec20ce7f, 0xb28ad247), TOBN(0xe99146c4, 0x00894d79),
-           TOBN(0x71457d7c, 0x9f5e3ea7), TOBN(0x097b2662, 0x38030031)}},
-         {{TOBN(0xdb7f6ae6, 0xcf9f82a8), TOBN(0x319decb9, 0x438f473a),
-           TOBN(0xa63ab386, 0x283856c3), TOBN(0x13e3172f, 0xb06a361b)},
-          {TOBN(0x2959f8dc, 0x7d5a006c), TOBN(0x2dbc27c6, 0x75fba752),
-           TOBN(0xc1227ab2, 0x87c22c9e), TOBN(0x06f61f75, 0x71a268b2)}},
-         {{TOBN(0x1b6bb971, 0x04779ce2), TOBN(0xaca83812, 0x0aadcb1d),
-           TOBN(0x297ae0bc, 0xaeaab2d5), TOBN(0xa5c14ee7, 0x5bfb9f13)},
-          {TOBN(0xaa00c583, 0xf17a62c7), TOBN(0x39eb962c, 0x173759f6),
-           TOBN(0x1eeba1d4, 0x86c9a88f), TOBN(0x0ab6c37a, 0xdf016c5e)}},
-         {{TOBN(0xa2a147db, 0xa28a0749), TOBN(0x246c20d6, 0xee519165),
-           TOBN(0x5068d1b1, 0xd3810715), TOBN(0xb1e7018c, 0x748160b9)},
-          {TOBN(0x03f5b1fa, 0xf380ff62), TOBN(0xef7fb1dd, 0xf3cb2c1e),
-           TOBN(0xeab539a8, 0xfc91a7da), TOBN(0x83ddb707, 0xf3f9b561)}},
-         {{TOBN(0xc550e211, 0xfe7df7a4), TOBN(0xa7cd07f2, 0x063f6f40),
-           TOBN(0xb0de3635, 0x2976879c), TOBN(0xb5f83f85, 0xe55741da)},
-          {TOBN(0x4ea9d25e, 0xf3d8ac3d), TOBN(0x6fe2066f, 0x62819f02),
-           TOBN(0x4ab2b9c2, 0xcef4a564), TOBN(0x1e155d96, 0x5ffa2de3)}},
-         {{TOBN(0x0eb0a19b, 0xc3a72d00), TOBN(0x4037665b, 0x8513c31b),
-           TOBN(0x2fb2b6bf, 0x04c64637), TOBN(0x45c34d6e, 0x08cdc639)},
-          {TOBN(0x56f1e10f, 0xf01fd796), TOBN(0x4dfb8101, 0xfe3667b8),
-           TOBN(0xe0eda253, 0x9021d0c0), TOBN(0x7a94e9ff, 0x8a06c6ab)}},
-         {{TOBN(0x2d3bb0d9, 0xbb9aa882), TOBN(0xea20e4e5, 0xec05fd10),
-           TOBN(0xed7eeb5f, 0x1a1ca64e), TOBN(0x2fa6b43c, 0xc6327cbd)},
-          {TOBN(0xb577e3cf, 0x3aa91121), TOBN(0x8c6bd5ea, 0x3a34079b),
-           TOBN(0xd7e5ba39, 0x60e02fc0), TOBN(0xf16dd2c3, 0x90141bf8)}},
-         {{TOBN(0xb57276d9, 0x80101b98), TOBN(0x760883fd, 0xb82f0f66),
-           TOBN(0x89d7de75, 0x4bc3eff3), TOBN(0x03b60643, 0x5dc2ab40)},
-          {TOBN(0xcd6e53df, 0xe05beeac), TOBN(0xf2f1e862, 0xbc3325cd),
-           TOBN(0xdd0f7921, 0x774f03c3), TOBN(0x97ca7221, 0x4552cc1b)}},
-         {{TOBN(0x5a0d6afe, 0x1cd19f72), TOBN(0xa20915dc, 0xf183fbeb),
-           TOBN(0x9fda4b40, 0x832c403c), TOBN(0x32738edd, 0xbe425442)},
-          {TOBN(0x469a1df6, 0xb5eccf1a), TOBN(0x4b5aff42, 0x28bbe1f0),
-           TOBN(0x31359d7f, 0x570dfc93), TOBN(0xa18be235, 0xf0088628)}},
-         {{TOBN(0xa5b30fba, 0xb00ed3a9), TOBN(0x34c61374, 0x73cdf8be),
-           TOBN(0x2c5c5f46, 0xabc56797), TOBN(0x5cecf93d, 0xb82a8ae2)},
-          {TOBN(0x7d3dbe41, 0xa968fbf0), TOBN(0xd23d4583, 0x1a5c7f3d),
-           TOBN(0xf28f69a0, 0xc087a9c7), TOBN(0xc2d75471, 0x474471ca)}},
-         {{TOBN(0x36ec9f4a, 0x4eb732ec), TOBN(0x6c943bbd, 0xb1ca6bed),
-           TOBN(0xd64535e1, 0xf2457892), TOBN(0x8b84a8ea, 0xf7e2ac06)},
-          {TOBN(0xe0936cd3, 0x2499dd5f), TOBN(0x12053d7e, 0x0ed04e57),
-           TOBN(0x4bdd0076, 0xe4305d9d), TOBN(0x34a527b9, 0x1f67f0a2)}},
-         {{TOBN(0xe79a4af0, 0x9cec46ea), TOBN(0xb15347a1, 0x658b9bc7),
-           TOBN(0x6bd2796f, 0x35af2f75), TOBN(0xac957990, 0x4051c435)},
-          {TOBN(0x2669dda3, 0xc33a655d), TOBN(0x5d503c2e, 0x88514aa3),
-           TOBN(0xdfa11337, 0x3753dd41), TOBN(0x3f054673, 0x0b754f78)}},
-         {{TOBN(0xbf185677, 0x496125bd), TOBN(0xfb0023c8, 0x3775006c),
-           TOBN(0xfa0f072f, 0x3a037899), TOBN(0x4222b6eb, 0x0e4aea57)},
-          {TOBN(0x3dde5e76, 0x7866d25a), TOBN(0xb6eb04f8, 0x4837aa6f),
-           TOBN(0x5315591a, 0x2cf1cdb8), TOBN(0x6dfb4f41, 0x2d4e683c)}},
-         {{TOBN(0x7e923ea4, 0x48ee1f3a), TOBN(0x9604d9f7, 0x05a2afd5),
-           TOBN(0xbe1d4a33, 0x40ea4948), TOBN(0x5b45f1f4, 0xb44cbd2f)},
-          {TOBN(0x5faf8376, 0x4acc757e), TOBN(0xa7cf9ab8, 0x63d68ff7),
-           TOBN(0x8ad62f69, 0xdf0e404b), TOBN(0xd65f33c2, 0x12bdafdf)}},
-         {{TOBN(0xc365de15, 0xa377b14e), TOBN(0x6bf5463b, 0x8e39f60c),
-           TOBN(0x62030d2d, 0x2ce68148), TOBN(0xd95867ef, 0xe6f843a8)},
-          {TOBN(0xd39a0244, 0xef5ab017), TOBN(0x0bd2d8c1, 0x4ab55d12),
-           TOBN(0xc9503db3, 0x41639169), TOBN(0x2d4e25b0, 0xf7660c8a)}},
-         {{TOBN(0x760cb3b5, 0xe224c5d7), TOBN(0xfa3baf8c, 0x68616919),
-           TOBN(0x9fbca113, 0x8d142552), TOBN(0x1ab18bf1, 0x7669ebf5)},
-          {TOBN(0x55e6f53e, 0x9bdf25dd), TOBN(0x04cc0bf3, 0xcb6cd154),
-           TOBN(0x595bef49, 0x95e89080), TOBN(0xfe9459a8, 0x104a9ac1)}},
-         {{TOBN(0xad2d89ca, 0xcce9bb32), TOBN(0xddea65e1, 0xf7de8285),
-           TOBN(0x62ed8c35, 0xb351bd4b), TOBN(0x4150ff36, 0x0c0e19a7)},
-          {TOBN(0x86e3c801, 0x345f4e47), TOBN(0x3bf21f71, 0x203a266c),
-           TOBN(0x7ae110d4, 0x855b1f13), TOBN(0x5d6aaf6a, 0x07262517)}},
-         {{TOBN(0x1e0f12e1, 0x813d28f1), TOBN(0x6000e11d, 0x7ad7a523),
-           TOBN(0xc7d8deef, 0xc744a17b), TOBN(0x1e990b48, 0x14c05a00)},
-          {TOBN(0x68fddaee, 0x93e976d5), TOBN(0x696241d1, 0x46610d63),
-           TOBN(0xb204e7c3, 0x893dda88), TOBN(0x8bccfa65, 0x6a3a6946)}},
-         {{TOBN(0xb59425b4, 0xc5cd1411), TOBN(0x701b4042, 0xff3658b1),
-           TOBN(0xe3e56bca, 0x4784cf93), TOBN(0x27de5f15, 0x8fe68d60)},
-          {TOBN(0x4ab9cfce, 0xf8d53f19), TOBN(0xddb10311, 0xa40a730d),
-           TOBN(0x6fa73cd1, 0x4eee0a8a), TOBN(0xfd548748, 0x5249719d)}},
-         {{TOBN(0x49d66316, 0xa8123ef0), TOBN(0x73c32db4, 0xe7f95438),
-           TOBN(0x2e2ed209, 0x0d9e7854), TOBN(0xf98a9329, 0x9d9f0507)},
-          {TOBN(0xc5d33cf6, 0x0c6aa20a), TOBN(0x9a32ba14, 0x75279bb2),
-           TOBN(0x7e3202cb, 0x774a7307), TOBN(0x64ed4bc4, 0xe8c42dbd)}},
-         {{TOBN(0xc20f1a06, 0xd4caed0d), TOBN(0xb8021407, 0x171d22b3),
-           TOBN(0xd426ca04, 0xd13268d7), TOBN(0x92377007, 0x25f4d126)},
-          {TOBN(0x4204cbc3, 0x71f21a85), TOBN(0x18461b7a, 0xf82369ba),
-           TOBN(0xc0c07d31, 0x3fc858f9), TOBN(0x5deb5a50, 0xe2bab569)}},
-         {{TOBN(0xd5959d46, 0xd5eea89e), TOBN(0xfdff8424, 0x08437f4b),
-           TOBN(0xf21071e4, 0x3cfe254f), TOBN(0x72417696, 0x95468321)},
-          {TOBN(0x5d8288b9, 0x102cae3e), TOBN(0x2d143e3d, 0xf1965dff),
-           TOBN(0x00c9a376, 0xa078d847), TOBN(0x6fc0da31, 0x26028731)}},
-         {{TOBN(0xa2baeadf, 0xe45083a2), TOBN(0x66bc7218, 0x5e5b4bcd),
-           TOBN(0x2c826442, 0xd04b8e7f), TOBN(0xc19f5451, 0x6c4b586b)},
-          {TOBN(0x60182c49, 0x5b7eeed5), TOBN(0xd9954ecd, 0x7aa9dfa1),
-           TOBN(0xa403a8ec, 0xc73884ad), TOBN(0x7fb17de2, 0x9bb39041)}},
-         {{TOBN(0x694b64c5, 0xabb020e8), TOBN(0x3d18c184, 0x19c4eec7),
-           TOBN(0x9c4673ef, 0x1c4793e5), TOBN(0xc7b8aeb5, 0x056092e6)},
-          {TOBN(0x3aa1ca43, 0xf0f8c16b), TOBN(0x224ed5ec, 0xd679b2f6),
-           TOBN(0x0d56eeaf, 0x55a205c9), TOBN(0xbfe115ba, 0x4b8e028b)}},
-         {{TOBN(0x97e60849, 0x3927f4fe), TOBN(0xf91fbf94, 0x759aa7c5),
-           TOBN(0x985af769, 0x6be90a51), TOBN(0xc1277b78, 0x78ccb823)},
-          {TOBN(0x395b656e, 0xe7a75952), TOBN(0x00df7de0, 0x928da5f5),
-           TOBN(0x09c23175, 0x4ca4454f), TOBN(0x4ec971f4, 0x7aa2d3c1)}},
-         {{TOBN(0x45c3c507, 0xe75d9ccc), TOBN(0x63b7be8a, 0x3dc90306),
-           TOBN(0x37e09c66, 0x5db44bdc), TOBN(0x50d60da1, 0x6841c6a2)},
-          {TOBN(0x6f9b65ee, 0x08df1b12), TOBN(0x38734879, 0x7ff089df),
-           TOBN(0x9c331a66, 0x3fe8013d), TOBN(0x017f5de9, 0x5f42fcc8)}},
-         {{TOBN(0x43077866, 0xe8e57567), TOBN(0xc9f781ce, 0xf9fcdb18),
-           TOBN(0x38131dda, 0x9b12e174), TOBN(0x25d84aa3, 0x8a03752a)},
-          {TOBN(0x45e09e09, 0x4d0c0ce2), TOBN(0x1564008b, 0x92bebba5),
-           TOBN(0xf7e8ad31, 0xa87284c7), TOBN(0xb7c4b46c, 0x97e7bbaa)}},
-         {{TOBN(0x3e22a7b3, 0x97acf4ec), TOBN(0x0426c400, 0x5ea8b640),
-           TOBN(0x5e3295a6, 0x4e969285), TOBN(0x22aabc59, 0xa6a45670)},
-          {TOBN(0xb929714c, 0x5f5942bc), TOBN(0x9a6168bd, 0xfa3182ed),
-           TOBN(0x2216a665, 0x104152ba), TOBN(0x46908d03, 0xb6926368)}}},
-        {{{TOBN(0xa9f5d874, 0x5a1251fb), TOBN(0x967747a8, 0xc72725c7),
-           TOBN(0x195c33e5, 0x31ffe89e), TOBN(0x609d210f, 0xe964935e)},
-          {TOBN(0xcafd6ca8, 0x2fe12227), TOBN(0xaf9b5b96, 0x0426469d),
-           TOBN(0x2e9ee04c, 0x5693183c), TOBN(0x1084a333, 0xc8146fef)}},
-         {{TOBN(0x96649933, 0xaed1d1f7), TOBN(0x566eaff3, 0x50563090),
-           TOBN(0x345057f0, 0xad2e39cf), TOBN(0x148ff65b, 0x1f832124)},
-          {TOBN(0x042e89d4, 0xcf94cf0d), TOBN(0x319bec84, 0x520c58b3),
-           TOBN(0x2a267626, 0x5361aa0d), TOBN(0xc86fa302, 0x8fbc87ad)}},
-         {{TOBN(0xfc83d2ab, 0x5c8b06d5), TOBN(0xb1a785a2, 0xfe4eac46),
-           TOBN(0xb99315bc, 0x846f7779), TOBN(0xcf31d816, 0xef9ea505)},
-          {TOBN(0x2391fe6a, 0x15d7dc85), TOBN(0x2f132b04, 0xb4016b33),
-           TOBN(0x29547fe3, 0x181cb4c7), TOBN(0xdb66d8a6, 0x650155a1)}},
-         {{TOBN(0x6b66d7e1, 0xadc1696f), TOBN(0x98ebe593, 0x0acd72d0),
-           TOBN(0x65f24550, 0xcc1b7435), TOBN(0xce231393, 0xb4b9a5ec)},
-          {TOBN(0x234a22d4, 0xdb067df9), TOBN(0x98dda095, 0xcaff9b00),
-           TOBN(0x1bbc75a0, 0x6100c9c1), TOBN(0x1560a9c8, 0x939cf695)}},
-         {{TOBN(0xcf006d3e, 0x99e0925f), TOBN(0x2dd74a96, 0x6322375a),
-           TOBN(0xc58b446a, 0xb56af5ba), TOBN(0x50292683, 0xe0b9b4f1)},
-          {TOBN(0xe2c34cb4, 0x1aeaffa3), TOBN(0x8b17203f, 0x9b9587c1),
-           TOBN(0x6d559207, 0xead1350c), TOBN(0x2b66a215, 0xfb7f9604)}},
-         {{TOBN(0x0850325e, 0xfe51bf74), TOBN(0x9c4f579e, 0x5e460094),
-           TOBN(0x5c87b92a, 0x76da2f25), TOBN(0x889de4e0, 0x6febef33)},
-          {TOBN(0x6900ec06, 0x646083ce), TOBN(0xbe2a0335, 0xbfe12773),
-           TOBN(0xadd1da35, 0xc5344110), TOBN(0x757568b7, 0xb802cd20)}},
-         {{TOBN(0x75559779, 0x00f7e6c8), TOBN(0x38e8b94f, 0x0facd2f0),
-           TOBN(0xfea1f3af, 0x03fde375), TOBN(0x5e11a1d8, 0x75881dfc)},
-          {TOBN(0xb3a6b02e, 0xc1e2f2ef), TOBN(0x193d2bbb, 0xc605a6c5),
-           TOBN(0x325ffeee, 0x339a0b2d), TOBN(0x27b6a724, 0x9e0c8846)}},
-         {{TOBN(0xe4050f1c, 0xf1c367ca), TOBN(0x9bc85a9b, 0xc90fbc7d),
-           TOBN(0xa373c4a2, 0xe1a11032), TOBN(0xb64232b7, 0xad0393a9)},
-          {TOBN(0xf5577eb0, 0x167dad29), TOBN(0x1604f301, 0x94b78ab2),
-           TOBN(0x0baa94af, 0xe829348b), TOBN(0x77fbd8dd, 0x41654342)}},
-         {{TOBN(0xdab50ea5, 0xb964e39a), TOBN(0xd4c29e3c, 0xd0d3c76e),
-           TOBN(0x80dae67c, 0x56d11964), TOBN(0x7307a8bf, 0xe5ffcc2f)},
-          {TOBN(0x65bbc1aa, 0x91708c3b), TOBN(0xa151e62c, 0x28bf0eeb),
-           TOBN(0x6cb53381, 0x6fa34db7), TOBN(0x5139e05c, 0xa29403a8)}},
-         {{TOBN(0x6ff651b4, 0x94a7cd2e), TOBN(0x5671ffd1, 0x0699336c),
-           TOBN(0x6f5fd2cc, 0x979a896a), TOBN(0x11e893a8, 0xd8148cef)},
-          {TOBN(0x988906a1, 0x65cf7b10), TOBN(0x81b67178, 0xc50d8485),
-           TOBN(0x7c0deb35, 0x8a35b3de), TOBN(0x423ac855, 0xc1d29799)}},
-         {{TOBN(0xaf580d87, 0xdac50b74), TOBN(0x28b2b89f, 0x5869734c),
-           TOBN(0x99a3b936, 0x874e28fb), TOBN(0xbb2c9190, 0x25f3f73a)},
-          {TOBN(0x199f6918, 0x84a9d5b7), TOBN(0x7ebe2325, 0x7e770374),
-           TOBN(0xf442e107, 0x0738efe2), TOBN(0xcf9f3f56, 0xcf9082d2)}},
-         {{TOBN(0x719f69e1, 0x09618708), TOBN(0xcc9e8364, 0xc183f9b1),
-           TOBN(0xec203a95, 0x366a21af), TOBN(0x6aec5d6d, 0x068b141f)},
-          {TOBN(0xee2df78a, 0x994f04e9), TOBN(0xb39ccae8, 0x271245b0),
-           TOBN(0xb875a4a9, 0x97e43f4f), TOBN(0x507dfe11, 0xdb2cea98)}},
-         {{TOBN(0x4fbf81cb, 0x489b03e9), TOBN(0xdb86ec5b, 0x6ec414fa),
-           TOBN(0xfad444f9, 0xf51b3ae5), TOBN(0xca7d33d6, 0x1914e3fe)},
-          {TOBN(0xa9c32f5c, 0x0ae6c4d0), TOBN(0xa9ca1d1e, 0x73969568),
-           TOBN(0x98043c31, 0x1aa7467e), TOBN(0xe832e75c, 0xe21b5ac6)}},
-         {{TOBN(0x314b7aea, 0x5232123d), TOBN(0x08307c8c, 0x65ae86db),
-           TOBN(0x06e7165c, 0xaa4668ed), TOBN(0xb170458b, 0xb4d3ec39)},
-          {TOBN(0x4d2e3ec6, 0xc19bb986), TOBN(0xc5f34846, 0xae0304ed),
-           TOBN(0x917695a0, 0x6c9f9722), TOBN(0x6c7f7317, 0x4cab1c0a)}},
-         {{TOBN(0x6295940e, 0x9d6d2e8b), TOBN(0xd318b8c1, 0x549f7c97),
-           TOBN(0x22453204, 0x97713885), TOBN(0x468d834b, 0xa8a440fe)},
-          {TOBN(0xd81fe5b2, 0xbfba796e), TOBN(0x152364db, 0x6d71f116),
-           TOBN(0xbb8c7c59, 0xb5b66e53), TOBN(0x0b12c61b, 0x2641a192)}},
-         {{TOBN(0x31f14802, 0xfcf0a7fd), TOBN(0x42fd0789, 0x5488b01e),
-           TOBN(0x71d78d6d, 0x9952b498), TOBN(0x8eb572d9, 0x07ac5201)},
-          {TOBN(0xe0a2a44c, 0x4d194a88), TOBN(0xd2b63fd9, 0xba017e66),
-           TOBN(0x78efc6c8, 0xf888aefc), TOBN(0xb76f6bda, 0x4a881a11)}},
-         {{TOBN(0x187f314b, 0xb46c2397), TOBN(0x004cf566, 0x5ded2819),
-           TOBN(0xa9ea5704, 0x38764d34), TOBN(0xbba45217, 0x78084709)},
-          {TOBN(0x06474571, 0x1171121e), TOBN(0xad7b7eb1, 0xe7c9b671),
-           TOBN(0xdacfbc40, 0x730f7507), TOBN(0x178cd8c6, 0xc7ad7bd1)}},
-         {{TOBN(0xbf0be101, 0xb2a67238), TOBN(0x3556d367, 0xaf9c14f2),
-           TOBN(0x104b7831, 0xa5662075), TOBN(0x58ca59bb, 0x79d9e60a)},
-          {TOBN(0x4bc45392, 0xa569a73b), TOBN(0x517a52e8, 0x5698f6c9),
-           TOBN(0x85643da5, 0xaeadd755), TOBN(0x1aed0cd5, 0x2a581b84)}},
-         {{TOBN(0xb9b4ff84, 0x80af1372), TOBN(0x244c3113, 0xf1ba5d1f),
-           TOBN(0x2a5dacbe, 0xf5f98d31), TOBN(0x2c3323e8, 0x4375bc2a)},
-          {TOBN(0x17a3ab4a, 0x5594b1dd), TOBN(0xa1928bfb, 0xceb4797e),
-           TOBN(0xe83af245, 0xe4886a19), TOBN(0x8979d546, 0x72b5a74a)}},
-         {{TOBN(0xa0f726bc, 0x19f9e967), TOBN(0xd9d03152, 0xe8fbbf4e),
-           TOBN(0xcfd6f51d, 0xb7707d40), TOBN(0x633084d9, 0x63f6e6e0)},
-          {TOBN(0xedcd9cdc, 0x55667eaf), TOBN(0x73b7f92b, 0x2e44d56f),
-           TOBN(0xfb2e39b6, 0x4e962b14), TOBN(0x7d408f6e, 0xf671fcbf)}},
-         {{TOBN(0xcc634ddc, 0x164a89bb), TOBN(0x74a42bb2, 0x3ef3bd05),
-           TOBN(0x1280dbb2, 0x428decbb), TOBN(0x6103f6bb, 0x402c8596)},
-          {TOBN(0xfa2bf581, 0x355a5752), TOBN(0x562f96a8, 0x00946674),
-           TOBN(0x4e4ca16d, 0x6da0223b), TOBN(0xfe47819f, 0x28d3aa25)}},
-         {{TOBN(0x9eea3075, 0xf8dfcf8a), TOBN(0xa284f0aa, 0x95669825),
-           TOBN(0xb3fca250, 0x867d3fd8), TOBN(0x20757b5f, 0x269d691e)},
-          {TOBN(0xf2c24020, 0x93b8a5de), TOBN(0xd3f93359, 0xebc06da6),
-           TOBN(0x1178293e, 0xb2739c33), TOBN(0xd2a3e770, 0xbcd686e5)}},
-         {{TOBN(0xa76f49f4, 0xcd941534), TOBN(0x0d37406b, 0xe3c71c0e),
-           TOBN(0x172d9397, 0x3b97f7e3), TOBN(0xec17e239, 0xbd7fd0de)},
-          {TOBN(0xe3290551, 0x6f496ba2), TOBN(0x6a693172, 0x36ad50e7),
-           TOBN(0xc4e539a2, 0x83e7eff5), TOBN(0x752737e7, 0x18e1b4cf)}},
-         {{TOBN(0xa2f7932c, 0x68af43ee), TOBN(0x5502468e, 0x703d00bd),
-           TOBN(0xe5dc978f, 0x2fb061f5), TOBN(0xc9a1904a, 0x28c815ad)},
-          {TOBN(0xd3af538d, 0x470c56a4), TOBN(0x159abc5f, 0x193d8ced),
-           TOBN(0x2a37245f, 0x20108ef3), TOBN(0xfa17081e, 0x223f7178)}},
-         {{TOBN(0x27b0fb2b, 0x10c8c0f5), TOBN(0x2102c3ea, 0x40650547),
-           TOBN(0x594564df, 0x8ac3bfa7), TOBN(0x98102033, 0x509dad96)},
-          {TOBN(0x6989643f, 0xf1d18a13), TOBN(0x35eebd91, 0xd7fc5af0),
-           TOBN(0x078d096a, 0xfaeaafd8), TOBN(0xb7a89341, 0xdef3de98)}},
-         {{TOBN(0x2a206e8d, 0xecf2a73a), TOBN(0x066a6397, 0x8e551994),
-           TOBN(0x3a6a088a, 0xb98d53a2), TOBN(0x0ce7c67c, 0x2d1124aa)},
-          {TOBN(0x48cec671, 0x759a113c), TOBN(0xe3b373d3, 0x4f6f67fa),
-           TOBN(0x5455d479, 0xfd36727b), TOBN(0xe5a428ee, 0xa13c0d81)}},
-         {{TOBN(0xb853dbc8, 0x1c86682b), TOBN(0xb78d2727, 0xb8d02b2a),
-           TOBN(0xaaf69bed, 0x8ebc329a), TOBN(0xdb6b40b3, 0x293b2148)},
-          {TOBN(0xe42ea77d, 0xb8c4961f), TOBN(0xb1a12f7c, 0x20e5e0ab),
-           TOBN(0xa0ec5274, 0x79e8b05e), TOBN(0x68027391, 0xfab60a80)}},
-         {{TOBN(0x6bfeea5f, 0x16b1bd5e), TOBN(0xf957e420, 0x4de30ad3),
-           TOBN(0xcbaf664e, 0x6a353b9e), TOBN(0x5c873312, 0x26d14feb)},
-          {TOBN(0x4e87f98c, 0xb65f57cb), TOBN(0xdb60a621, 0x5e0cdd41),
-           TOBN(0x67c16865, 0xa6881440), TOBN(0x1093ef1a, 0x46ab52aa)}},
-         {{TOBN(0xc095afb5, 0x3f4ece64), TOBN(0x6a6bb02e, 0x7604551a),
-           TOBN(0x55d44b4e, 0x0b26b8cd), TOBN(0xe5f9a999, 0xf971268a)},
-          {TOBN(0xc08ec425, 0x11a7de84), TOBN(0x83568095, 0xfda469dd),
-           TOBN(0x737bfba1, 0x6c6c90a2), TOBN(0x1cb9c4a0, 0xbe229831)}},
-         {{TOBN(0x93bccbba, 0xbb2eec64), TOBN(0xa0c23b64, 0xda03adbe),
-           TOBN(0x5f7aa00a, 0xe0e86ac4), TOBN(0x470b941e, 0xfc1401e6)},
-          {TOBN(0x5ad8d679, 0x9df43574), TOBN(0x4ccfb8a9, 0x0f65d810),
-           TOBN(0x1bce80e3, 0xaa7fbd81), TOBN(0x273291ad, 0x9508d20a)}},
-         {{TOBN(0xf5c4b46b, 0x42a92806), TOBN(0x810684ec, 0xa86ab44a),
-           TOBN(0x4591640b, 0xca0bc9f8), TOBN(0xb5efcdfc, 0x5c4b6054)},
-          {TOBN(0x16fc8907, 0x6e9edd12), TOBN(0xe29d0b50, 0xd4d792f9),
-           TOBN(0xa45fd01c, 0x9b03116d), TOBN(0x85035235, 0xc81765a4)}},
-         {{TOBN(0x1fe2a9b2, 0xb4b4b67c), TOBN(0xc1d10df0, 0xe8020604),
-           TOBN(0x9d64abfc, 0xbc8058d8), TOBN(0x8943b9b2, 0x712a0fbb)},
-          {TOBN(0x90eed914, 0x3b3def04), TOBN(0x85ab3aa2, 0x4ce775ff),
-           TOBN(0x605fd4ca, 0x7bbc9040), TOBN(0x8b34a564, 0xe2c75dfb)}},
-         {{TOBN(0x41ffc94a, 0x10358560), TOBN(0x2d8a5072, 0x9e5c28aa),
-           TOBN(0xe915a0fc, 0x4cc7eb15), TOBN(0xe9efab05, 0x8f6d0f5d)},
-          {TOBN(0xdbab47a9, 0xd19e9b91), TOBN(0x8cfed745, 0x0276154c),
-           TOBN(0x154357ae, 0x2cfede0d), TOBN(0x520630df, 0x19f5a4ef)}},
-         {{TOBN(0x25759f7c, 0xe382360f), TOBN(0xb6db05c9, 0x88bf5857),
-           TOBN(0x2917d61d, 0x6c58d46c), TOBN(0x14f8e491, 0xfd20cb7a)},
-          {TOBN(0xb68a727a, 0x11c20340), TOBN(0x0386f86f, 0xaf7ccbb6),
-           TOBN(0x5c8bc6cc, 0xfee09a20), TOBN(0x7d76ff4a, 0xbb7eea35)}},
-         {{TOBN(0xa7bdebe7, 0xdb15be7a), TOBN(0x67a08054, 0xd89f0302),
-           TOBN(0x56bf0ea9, 0xc1193364), TOBN(0xc8244467, 0x62837ebe)},
-          {TOBN(0x32bd8e8b, 0x20d841b8), TOBN(0x127a0548, 0xdbb8a54f),
-           TOBN(0x83dd4ca6, 0x63b20236), TOBN(0x87714718, 0x203491fa)}},
-         {{TOBN(0x4dabcaaa, 0xaa8a5288), TOBN(0x91cc0c8a, 0xaf23a1c9),
-           TOBN(0x34c72c6a, 0x3f220e0c), TOBN(0xbcc20bdf, 0x1232144a)},
-          {TOBN(0x6e2f42da, 0xa20ede1b), TOBN(0xc441f00c, 0x74a00515),
-           TOBN(0xbf46a5b6, 0x734b8c4b), TOBN(0x57409503, 0x7b56c9a4)}},
-         {{TOBN(0x9f735261, 0xe4585d45), TOBN(0x9231faed, 0x6734e642),
-           TOBN(0x1158a176, 0xbe70ee6c), TOBN(0x35f1068d, 0x7c3501bf)},
-          {TOBN(0x6beef900, 0xa2d26115), TOBN(0x649406f2, 0xef0afee3),
-           TOBN(0x3f43a60a, 0xbc2420a1), TOBN(0x509002a7, 0xd5aee4ac)}},
-         {{TOBN(0xb46836a5, 0x3ff3571b), TOBN(0x24f98b78, 0x837927c1),
-           TOBN(0x6254256a, 0x4533c716), TOBN(0xf27abb0b, 0xd07ee196)},
-          {TOBN(0xd7cf64fc, 0x5c6d5bfd), TOBN(0x6915c751, 0xf0cd7a77),
-           TOBN(0xd9f59012, 0x8798f534), TOBN(0x772b0da8, 0xf81d8b5f)}},
-         {{TOBN(0x1244260c, 0x2e03fa69), TOBN(0x36cf0e3a, 0x3be1a374),
-           TOBN(0x6e7c1633, 0xef06b960), TOBN(0xa71a4c55, 0x671f90f6)},
-          {TOBN(0x7a941251, 0x33c673db), TOBN(0xc0bea510, 0x73e8c131),
-           TOBN(0x61a8a699, 0xd4f6c734), TOBN(0x25e78c88, 0x341ed001)}},
-         {{TOBN(0x5c18acf8, 0x8e2f7d90), TOBN(0xfdbf33d7, 0x77be32cd),
-           TOBN(0x0a085cd7, 0xd2eb5ee9), TOBN(0x2d702cfb, 0xb3201115)},
-          {TOBN(0xb6e0ebdb, 0x85c88ce8), TOBN(0x23a3ce3c, 0x1e01d617),
-           TOBN(0x3041618e, 0x567333ac), TOBN(0x9dd0fd8f, 0x157edb6b)}},
-         {{TOBN(0x27f74702, 0xb57872b8), TOBN(0x2ef26b4f, 0x657d5fe1),
-           TOBN(0x95426f0a, 0x57cf3d40), TOBN(0x847e2ad1, 0x65a6067a)},
-          {TOBN(0xd474d9a0, 0x09996a74), TOBN(0x16a56acd, 0x2a26115c),
-           TOBN(0x02a615c3, 0xd16f4d43), TOBN(0xcc3fc965, 0xaadb85b7)}},
-         {{TOBN(0x386bda73, 0xce07d1b0), TOBN(0xd82910c2, 0x58ad4178),
-           TOBN(0x124f82cf, 0xcd2617f4), TOBN(0xcc2f5e8d, 0xef691770)},
-          {TOBN(0x82702550, 0xb8c30ccc), TOBN(0x7b856aea, 0x1a8e575a),
-           TOBN(0xbb822fef, 0xb1ab9459), TOBN(0x085928bc, 0xec24e38e)}},
-         {{TOBN(0x5d0402ec, 0xba8f4b4d), TOBN(0xc07cd4ba, 0x00b4d58b),
-           TOBN(0x5d8dffd5, 0x29227e7a), TOBN(0x61d44d0c, 0x31bf386f)},
-          {TOBN(0xe486dc2b, 0x135e6f4d), TOBN(0x680962eb, 0xe79410ef),
-           TOBN(0xa61bd343, 0xf10088b5), TOBN(0x6aa76076, 0xe2e28686)}},
-         {{TOBN(0x80463d11, 0x8fb98871), TOBN(0xcb26f5c3, 0xbbc76aff),
-           TOBN(0xd4ab8edd, 0xfbe03614), TOBN(0xc8eb579b, 0xc0cf2dee)},
-          {TOBN(0xcc004c15, 0xc93bae41), TOBN(0x46fbae5d, 0x3aeca3b2),
-           TOBN(0x671235cf, 0x0f1e9ab1), TOBN(0xadfba934, 0x9ec285c1)}},
-         {{TOBN(0x88ded013, 0xf216c980), TOBN(0xc8ac4fb8, 0xf79e0bc1),
-           TOBN(0xa29b89c6, 0xfb97a237), TOBN(0xb697b780, 0x9922d8e7)},
-          {TOBN(0x3142c639, 0xddb945b5), TOBN(0x447b06c7, 0xe094c3a9),
-           TOBN(0xcdcb3642, 0x72266c90), TOBN(0x633aad08, 0xa9385046)}},
-         {{TOBN(0xa36c936b, 0xb57c6477), TOBN(0x871f8b64, 0xe94dbcc6),
-           TOBN(0x28d0fb62, 0xa591a67b), TOBN(0x9d40e081, 0xc1d926f5)},
-          {TOBN(0x3111eaf6, 0xf2d84b5a), TOBN(0x228993f9, 0xa565b644),
-           TOBN(0x0ccbf592, 0x2c83188b), TOBN(0xf87b30ab, 0x3df3e197)}},
-         {{TOBN(0xb8658b31, 0x7642bca8), TOBN(0x1a032d7f, 0x52800f17),
-           TOBN(0x051dcae5, 0x79bf9445), TOBN(0xeba6b8ee, 0x54a2e253)},
-          {TOBN(0x5c8b9cad, 0xd4485692), TOBN(0x84bda40e, 0x8986e9be),
-           TOBN(0xd16d16a4, 0x2f0db448), TOBN(0x8ec80050, 0xa14d4188)}},
-         {{TOBN(0xb2b26107, 0x98fa7aaa), TOBN(0x41209ee4, 0xf073aa4e),
-           TOBN(0xf1570359, 0xf2d6b19b), TOBN(0xcbe6868c, 0xfc577caf)},
-          {TOBN(0x186c4bdc, 0x32c04dd3), TOBN(0xa6c35fae, 0xcfeee397),
-           TOBN(0xb4a1b312, 0xf086c0cf), TOBN(0xe0a5ccc6, 0xd9461fe2)}},
-         {{TOBN(0xc32278aa, 0x1536189f), TOBN(0x1126c55f, 0xba6df571),
-           TOBN(0x0f71a602, 0xb194560e), TOBN(0x8b2d7405, 0x324bd6e1)},
-          {TOBN(0x8481939e, 0x3738be71), TOBN(0xb5090b1a, 0x1a4d97a9),
-           TOBN(0x116c65a3, 0xf05ba915), TOBN(0x21863ad3, 0xaae448aa)}},
-         {{TOBN(0xd24e2679, 0xa7aae5d3), TOBN(0x7076013d, 0x0de5c1c4),
-           TOBN(0x2d50f8ba, 0xbb05b629), TOBN(0x73c1abe2, 0x6e66efbb)},
-          {TOBN(0xefd4b422, 0xf2488af7), TOBN(0xe4105d02, 0x663ba575),
-           TOBN(0x7eb60a8b, 0x53a69457), TOBN(0x62210008, 0xc945973b)}},
-         {{TOBN(0xfb255478, 0x77a50ec6), TOBN(0xbf0392f7, 0x0a37a72c),
-           TOBN(0xa0a7a19c, 0x4be18e7a), TOBN(0x90d8ea16, 0x25b1e0af)},
-          {TOBN(0x7582a293, 0xef953f57), TOBN(0x90a64d05, 0xbdc5465a),
-           TOBN(0xca79c497, 0xe2510717), TOBN(0x560dbb7c, 0x18cb641f)}},
-         {{TOBN(0x1d8e3286, 0x4b66abfb), TOBN(0xd26f52e5, 0x59030900),
-           TOBN(0x1ee3f643, 0x5584941a), TOBN(0x6d3b3730, 0x569f5958)},
-          {TOBN(0x9ff2a62f, 0x4789dba5), TOBN(0x91fcb815, 0x72b5c9b7),
-           TOBN(0xf446cb7d, 0x6c8f9a0e), TOBN(0x48f625c1, 0x39b7ecb5)}},
-         {{TOBN(0xbabae801, 0x1c6219b8), TOBN(0xe7a562d9, 0x28ac2f23),
-           TOBN(0xe1b48732, 0x26e20588), TOBN(0x06ee1cad, 0x775af051)},
-          {TOBN(0xda29ae43, 0xfaff79f7), TOBN(0xc141a412, 0x652ee9e0),
-           TOBN(0x1e127f6f, 0x195f4bd0), TOBN(0x29c6ab4f, 0x072f34f8)}},
-         {{TOBN(0x7b7c1477, 0x30448112), TOBN(0x82b51af1, 0xe4a38656),
-           TOBN(0x2bf2028a, 0x2f315010), TOBN(0xc9a4a01f, 0x6ea88cd4)},
-          {TOBN(0xf63e95d8, 0x257e5818), TOBN(0xdd8efa10, 0xb4519b16),
-           TOBN(0xed8973e0, 0x0da910bf), TOBN(0xed49d077, 0x5c0fe4a9)}},
-         {{TOBN(0xac3aac5e, 0xb7caee1e), TOBN(0x1033898d, 0xa7f4da57),
-           TOBN(0x42145c0e, 0x5c6669b9), TOBN(0x42daa688, 0xc1aa2aa0)},
-          {TOBN(0x629cc15c, 0x1a1d885a), TOBN(0x25572ec0, 0xf4b76817),
-           TOBN(0x8312e435, 0x9c8f8f28), TOBN(0x8107f8cd, 0x81965490)}},
-         {{TOBN(0x516ff3a3, 0x6fa6110c), TOBN(0x74fb1eb1, 0xfb93561f),
-           TOBN(0x6c0c9047, 0x8457522b), TOBN(0xcfd32104, 0x6bb8bdc6)},
-          {TOBN(0x2d6884a2, 0xcc80ad57), TOBN(0x7c27fc35, 0x86a9b637),
-           TOBN(0x3461baed, 0xadf4e8cd), TOBN(0x1d56251a, 0x617242f0)}},
-         {{TOBN(0x0b80d209, 0xc955bef4), TOBN(0xdf02cad2, 0x06adb047),
-           TOBN(0xf0d7cb91, 0x5ec74fee), TOBN(0xd2503375, 0x1111ba44)},
-          {TOBN(0x9671755e, 0xdf53cb36), TOBN(0x54dcb612, 0x3368551b),
-           TOBN(0x66d69aac, 0xc8a025a4), TOBN(0x6be946c6, 0xe77ef445)}},
-         {{TOBN(0x719946d1, 0xa995e094), TOBN(0x65e848f6, 0xe51e04d8),
-           TOBN(0xe62f3300, 0x6a1e3113), TOBN(0x1541c7c1, 0x501de503)},
-          {TOBN(0x4daac9fa, 0xf4acfade), TOBN(0x0e585897, 0x44cd0b71),
-           TOBN(0x544fd869, 0x0a51cd77), TOBN(0x60fc20ed, 0x0031016d)}},
-         {{TOBN(0x58b404ec, 0xa4276867), TOBN(0x46f6c3cc, 0x34f34993),
-           TOBN(0x477ca007, 0xc636e5bd), TOBN(0x8018f5e5, 0x7c458b47)},
-          {TOBN(0xa1202270, 0xe47b668f), TOBN(0xcef48ccd, 0xee14f203),
-           TOBN(0x23f98bae, 0x62ff9b4d), TOBN(0x55acc035, 0xc589eddd)}},
-         {{TOBN(0x3fe712af, 0x64db4444), TOBN(0x19e9d634, 0xbecdd480),
-           TOBN(0xe08bc047, 0xa930978a), TOBN(0x2dbf24ec, 0xa1280733)},
-          {TOBN(0x3c0ae38c, 0x2cd706b2), TOBN(0x5b012a5b, 0x359017b9),
-           TOBN(0x3943c38c, 0x72e0f5ae), TOBN(0x786167ea, 0x57176fa3)}},
-         {{TOBN(0xe5f9897d, 0x594881dc), TOBN(0x6b5efad8, 0xcfb820c1),
-           TOBN(0xb2179093, 0xd55018de), TOBN(0x39ad7d32, 0x0bac56ce)},
-          {TOBN(0xb55122e0, 0x2cfc0e81), TOBN(0x117c4661, 0xf6d89daa),
-           TOBN(0x362d01e1, 0xcb64fa09), TOBN(0x6a309b4e, 0x3e9c4ddd)}},
-         {{TOBN(0xfa979fb7, 0xabea49b1), TOBN(0xb4b1d27d, 0x10e2c6c5),
-           TOBN(0xbd61c2c4, 0x23afde7a), TOBN(0xeb6614f8, 0x9786d358)},
-          {TOBN(0x4a5d816b, 0x7f6f7459), TOBN(0xe431a44f, 0x09360e7b),
-           TOBN(0x8c27a032, 0xc309914c), TOBN(0xcea5d68a, 0xcaede3d8)}},
-         {{TOBN(0x3668f665, 0x3a0a3f95), TOBN(0x89369416, 0x7ceba27b),
-           TOBN(0x89981fad, 0xe4728fe9), TOBN(0x7102c8a0, 0x8a093562)},
-          {TOBN(0xbb80310e, 0x235d21c8), TOBN(0x505e55d1, 0xbefb7f7b),
-           TOBN(0xa0a90811, 0x12958a67), TOBN(0xd67e106a, 0x4d851fef)}},
-         {{TOBN(0xb84011a9, 0x431dd80e), TOBN(0xeb7c7cca, 0x73306cd9),
-           TOBN(0x20fadd29, 0xd1b3b730), TOBN(0x83858b5b, 0xfe37b3d3)},
-          {TOBN(0xbf4cd193, 0xb6251d5c), TOBN(0x1cca1fd3, 0x1352d952),
-           TOBN(0xc66157a4, 0x90fbc051), TOBN(0x7990a638, 0x89b98636)}}},
-        {{{TOBN(0xe5aa692a, 0x87dec0e1), TOBN(0x010ded8d, 0xf7b39d00),
-           TOBN(0x7b1b80c8, 0x54cfa0b5), TOBN(0x66beb876, 0xa0f8ea28)},
-          {TOBN(0x50d7f531, 0x3476cd0e), TOBN(0xa63d0e65, 0xb08d3949),
-           TOBN(0x1a09eea9, 0x53479fc6), TOBN(0x82ae9891, 0xf499e742)}},
-         {{TOBN(0xab58b910, 0x5ca7d866), TOBN(0x582967e2, 0x3adb3b34),
-           TOBN(0x89ae4447, 0xcceac0bc), TOBN(0x919c667c, 0x7bf56af5)},
-          {TOBN(0x9aec17b1, 0x60f5dcd7), TOBN(0xec697b9f, 0xddcaadbc),
-           TOBN(0x0b98f341, 0x463467f5), TOBN(0xb187f1f7, 0xa967132f)}},
-         {{TOBN(0x90fe7a1d, 0x214aeb18), TOBN(0x1506af3c, 0x741432f7),
-           TOBN(0xbb5565f9, 0xe591a0c4), TOBN(0x10d41a77, 0xb44f1bc3)},
-          {TOBN(0xa09d65e4, 0xa84bde96), TOBN(0x42f060d8, 0xf20a6a1c),
-           TOBN(0x652a3bfd, 0xf27f9ce7), TOBN(0xb6bdb65c, 0x3b3d739f)}},
-         {{TOBN(0xeb5ddcb6, 0xec7fae9f), TOBN(0x995f2714, 0xefb66e5a),
-           TOBN(0xdee95d8e, 0x69445d52), TOBN(0x1b6c2d46, 0x09e27620)},
-          {TOBN(0x32621c31, 0x8129d716), TOBN(0xb03909f1, 0x0958c1aa),
-           TOBN(0x8c468ef9, 0x1af4af63), TOBN(0x162c429f, 0xfba5cdf6)}},
-         {{TOBN(0x2f682343, 0x753b9371), TOBN(0x29cab45a, 0x5f1f9cd7),
-           TOBN(0x571623ab, 0xb245db96), TOBN(0xc507db09, 0x3fd79999)},
-          {TOBN(0x4e2ef652, 0xaf036c32), TOBN(0x86f0cc78, 0x05018e5c),
-           TOBN(0xc10a73d4, 0xab8be350), TOBN(0x6519b397, 0x7e826327)}},
-         {{TOBN(0xe8cb5eef, 0x9c053df7), TOBN(0x8de25b37, 0xb300ea6f),
-           TOBN(0xdb03fa92, 0xc849cffb), TOBN(0x242e43a7, 0xe84169bb)},
-          {TOBN(0xe4fa51f4, 0xdd6f958e), TOBN(0x6925a77f, 0xf4445a8d),
-           TOBN(0xe6e72a50, 0xe90d8949), TOBN(0xc66648e3, 0x2b1f6390)}},
-         {{TOBN(0xb2ab1957, 0x173e460c), TOBN(0x1bbbce75, 0x30704590),
-           TOBN(0xc0a90dbd, 0xdb1c7162), TOBN(0x505e399e, 0x15cdd65d)},
-          {TOBN(0x68434dcb, 0x57797ab7), TOBN(0x60ad35ba, 0x6a2ca8e8),
-           TOBN(0x4bfdb1e0, 0xde3336c1), TOBN(0xbbef99eb, 0xd8b39015)}},
-         {{TOBN(0x6c3b96f3, 0x1711ebec), TOBN(0x2da40f1f, 0xce98fdc4),
-           TOBN(0xb99774d3, 0x57b4411f), TOBN(0x87c8bdf4, 0x15b65bb6)},
-          {TOBN(0xda3a89e3, 0xc2eef12d), TOBN(0xde95bb9b, 0x3c7471f3),
-           TOBN(0x600f225b, 0xd812c594), TOBN(0x54907c5d, 0x2b75a56b)}},
-         {{TOBN(0xa93cc5f0, 0x8db60e35), TOBN(0x743e3cd6, 0xfa833319),
-           TOBN(0x7dad5c41, 0xf81683c9), TOBN(0x70c1e7d9, 0x9c34107e)},
-          {TOBN(0x0edc4a39, 0xa6be0907), TOBN(0x36d47035, 0x86d0b7d3),
-           TOBN(0x8c76da03, 0x272bfa60), TOBN(0x0b4a07ea, 0x0f08a414)}},
-         {{TOBN(0x699e4d29, 0x45c1dd53), TOBN(0xcadc5898, 0x231debb5),
-           TOBN(0xdf49fcc7, 0xa77f00e0), TOBN(0x93057bbf, 0xa73e5a0e)},
-          {TOBN(0x2f8b7ecd, 0x027a4cd1), TOBN(0x114734b3, 0xc614011a),
-           TOBN(0xe7a01db7, 0x67677c68), TOBN(0x89d9be5e, 0x7e273f4f)}},
-         {{TOBN(0xd225cb2e, 0x089808ef), TOBN(0xf1f7a27d, 0xd59e4107),
-           TOBN(0x53afc761, 0x8211b9c9), TOBN(0x0361bc67, 0xe6819159)},
-          {TOBN(0x2a865d0b, 0x7f071426), TOBN(0x6a3c1810, 0xe7072567),
-           TOBN(0x3e3bca1e, 0x0d6bcabd), TOBN(0xa1b02bc1, 0x408591bc)}},
-         {{TOBN(0xe0deee59, 0x31fba239), TOBN(0xf47424d3, 0x98bd91d1),
-           TOBN(0x0f8886f4, 0x071a3c1d), TOBN(0x3f7d41e8, 0xa819233b)},
-          {TOBN(0x708623c2, 0xcf6eb998), TOBN(0x86bb49af, 0x609a287f),
-           TOBN(0x942bb249, 0x63c90762), TOBN(0x0ef6eea5, 0x55a9654b)}},
-         {{TOBN(0x5f6d2d72, 0x36f5defe), TOBN(0xfa9922dc, 0x56f99176),
-           TOBN(0x6c8c5ece, 0xf78ce0c7), TOBN(0x7b44589d, 0xbe09b55e)},
-          {TOBN(0xe11b3bca, 0x9ea83770), TOBN(0xd7fa2c7f, 0x2ab71547),
-           TOBN(0x2a3dd6fa, 0x2a1ddcc0), TOBN(0x09acb430, 0x5a7b7707)}},
-         {{TOBN(0x4add4a2e, 0x649d4e57), TOBN(0xcd53a2b0, 0x1917526e),
-           TOBN(0xc5262330, 0x20b44ac4), TOBN(0x4028746a, 0xbaa2c31d)},
-          {TOBN(0x51318390, 0x64291d4c), TOBN(0xbf48f151, 0xee5ad909),
-           TOBN(0xcce57f59, 0x7b185681), TOBN(0x7c3ac1b0, 0x4854d442)}},
-         {{TOBN(0x65587dc3, 0xc093c171), TOBN(0xae7acb24, 0x24f42b65),
-           TOBN(0x5a338adb, 0x955996cb), TOBN(0xc8e65675, 0x6051f91b)},
-          {TOBN(0x66711fba, 0x28b8d0b1), TOBN(0x15d74137, 0xb6c10a90),
-           TOBN(0x70cdd7eb, 0x3a232a80), TOBN(0xc9e2f07f, 0x6191ed24)}},
-         {{TOBN(0xa80d1db6, 0xf79588c0), TOBN(0xfa52fc69, 0xb55768cc),
-           TOBN(0x0b4df1ae, 0x7f54438a), TOBN(0x0cadd1a7, 0xf9b46a4f)},
-          {TOBN(0xb40ea6b3, 0x1803dd6f), TOBN(0x488e4fa5, 0x55eaae35),
-           TOBN(0x9f047d55, 0x382e4e16), TOBN(0xc9b5b7e0, 0x2f6e0c98)}},
-         {{TOBN(0x6b1bd2d3, 0x95762649), TOBN(0xa9604ee7, 0xc7aea3f6),
-           TOBN(0x3646ff27, 0x6dc6f896), TOBN(0x9bf0e7f5, 0x2860bad1)},
-          {TOBN(0x2d92c821, 0x7cb44b92), TOBN(0xa2f5ce63, 0xaea9c182),
-           TOBN(0xd0a2afb1, 0x9154a5fd), TOBN(0x482e474c, 0x95801da6)}},
-         {{TOBN(0xc19972d0, 0xb611c24b), TOBN(0x1d468e65, 0x60a8f351),
-           TOBN(0xeb758069, 0x7bcf6421), TOBN(0xec9dd0ee, 0x88fbc491)},
-          {TOBN(0x5b59d2bf, 0x956c2e32), TOBN(0x73dc6864, 0xdcddf94e),
-           TOBN(0xfd5e2321, 0xbcee7665), TOBN(0xa7b4f8ef, 0x5e9a06c4)}},
-         {{TOBN(0xfba918dd, 0x7280f855), TOBN(0xbbaac260, 0x8baec688),
-           TOBN(0xa3b3f00f, 0x33400f42), TOBN(0x3d2dba29, 0x66f2e6e4)},
-          {TOBN(0xb6f71a94, 0x98509375), TOBN(0x8f33031f, 0xcea423cc),
-           TOBN(0x009b8dd0, 0x4807e6fb), TOBN(0x5163cfe5, 0x5cdb954c)}},
-         {{TOBN(0x03cc8f17, 0xcf41c6e8), TOBN(0xf1f03c2a, 0x037b925c),
-           TOBN(0xc39c19cc, 0x66d2427c), TOBN(0x823d24ba, 0x7b6c18e4)},
-          {TOBN(0x32ef9013, 0x901f0b4f), TOBN(0x684360f1, 0xf8941c2e),
-           TOBN(0x0ebaff52, 0x2c28092e), TOBN(0x7891e4e3, 0x256c932f)}},
-         {{TOBN(0x51264319, 0xac445e3d), TOBN(0x553432e7, 0x8ea74381),
-           TOBN(0xe6eeaa69, 0x67e9c50a), TOBN(0x27ced284, 0x62e628c7)},
-          {TOBN(0x3f96d375, 0x7a4afa57), TOBN(0xde0a14c3, 0xe484c150),
-           TOBN(0x364a24eb, 0x38bd9923), TOBN(0x1df18da0, 0xe5177422)}},
-         {{TOBN(0x174e8f82, 0xd8d38a9b), TOBN(0x2e97c600, 0xe7de1391),
-           TOBN(0xc5709850, 0xa1c175dd), TOBN(0x969041a0, 0x32ae5035)},
-          {TOBN(0xcbfd533b, 0x76a2086b), TOBN(0xd6bba71b, 0xd7c2e8fe),
-           TOBN(0xb2d58ee6, 0x099dfb67), TOBN(0x3a8b342d, 0x064a85d9)}},
-         {{TOBN(0x3bc07649, 0x522f9be3), TOBN(0x690c075b, 0xdf1f49a8),
-           TOBN(0x80e1aee8, 0x3854ec42), TOBN(0x2a7dbf44, 0x17689dc7)},
-          {TOBN(0xc004fc0e, 0x3faf4078), TOBN(0xb2f02e9e, 0xdf11862c),
-           TOBN(0xf10a5e0f, 0xa0a1b7b3), TOBN(0x30aca623, 0x8936ec80)}},
-         {{TOBN(0xf83cbf05, 0x02f40d9a), TOBN(0x4681c468, 0x2c318a4d),
-           TOBN(0x98575618, 0x0e9c2674), TOBN(0xbe79d046, 0x1847092e)},
-          {TOBN(0xaf1e480a, 0x78bd01e0), TOBN(0x6dd359e4, 0x72a51db9),
-           TOBN(0x62ce3821, 0xe3afbab6), TOBN(0xc5cee5b6, 0x17733199)}},
-         {{TOBN(0xe08b30d4, 0x6ffd9fbb), TOBN(0x6e5bc699, 0x36c610b7),
-           TOBN(0xf343cff2, 0x9ce262cf), TOBN(0xca2e4e35, 0x68b914c1)},
-          {TOBN(0x011d64c0, 0x16de36c5), TOBN(0xe0b10fdd, 0x42e2b829),
-           TOBN(0x78942981, 0x6685aaf8), TOBN(0xe7511708, 0x230ede97)}},
-         {{TOBN(0x671ed8fc, 0x3b922bf8), TOBN(0xe4d8c0a0, 0x4c29b133),
-           TOBN(0x87eb1239, 0x3b6e99c4), TOBN(0xaff3974c, 0x8793beba)},
-          {TOBN(0x03749405, 0x2c18df9b), TOBN(0xc5c3a293, 0x91007139),
-           TOBN(0x6a77234f, 0xe37a0b95), TOBN(0x02c29a21, 0xb661c96b)}},
-         {{TOBN(0xc3aaf1d6, 0x141ecf61), TOBN(0x9195509e, 0x3bb22f53),
-           TOBN(0x29597404, 0x22d51357), TOBN(0x1b083822, 0x537bed60)},
-          {TOBN(0xcd7d6e35, 0xe07289f0), TOBN(0x1f94c48c, 0x6dd86eff),
-           TOBN(0xc8bb1f82, 0xeb0f9cfa), TOBN(0x9ee0b7e6, 0x1b2eb97d)}},
-         {{TOBN(0x5a52fe2e, 0x34d74e31), TOBN(0xa352c310, 0x3bf79ab6),
-           TOBN(0x97ff6c5a, 0xabfeeb8f), TOBN(0xbfbe8fef, 0xf5c97305)},
-          {TOBN(0xd6081ce6, 0xa7904608), TOBN(0x1f812f3a, 0xc4fca249),
-           TOBN(0x9b24bc9a, 0xb9e5e200), TOBN(0x91022c67, 0x38012ee8)}},
-         {{TOBN(0xe83d9c5d, 0x30a713a1), TOBN(0x4876e3f0, 0x84ef0f93),
-           TOBN(0xc9777029, 0xc1fbf928), TOBN(0xef7a6bb3, 0xbce7d2a4)},
-          {TOBN(0xb8067228, 0xdfa2a659), TOBN(0xd5cd3398, 0xd877a48f),
-           TOBN(0xbea4fd8f, 0x025d0f3f), TOBN(0xd67d2e35, 0x2eae7c2b)}},
-         {{TOBN(0x184de7d7, 0xcc5f4394), TOBN(0xb5551b5c, 0x4536e142),
-           TOBN(0x2e89b212, 0xd34aa60a), TOBN(0x14a96fea, 0xf50051d5)},
-          {TOBN(0x4e21ef74, 0x0d12bb0b), TOBN(0xc522f020, 0x60b9677e),
-           TOBN(0x8b12e467, 0x2df7731d), TOBN(0x39f80382, 0x7b326d31)}},
-         {{TOBN(0xdfb8630c, 0x39024a94), TOBN(0xaacb96a8, 0x97319452),
-           TOBN(0xd68a3961, 0xeda3867c), TOBN(0x0c58e2b0, 0x77c4ffca)},
-          {TOBN(0x3d545d63, 0x4da919fa), TOBN(0xef79b69a, 0xf15e2289),
-           TOBN(0x54bc3d3d, 0x808bab10), TOBN(0xc8ab3007, 0x45f82c37)}},
-         {{TOBN(0xc12738b6, 0x7c4a658a), TOBN(0xb3c47639, 0x40e72182),
-           TOBN(0x3b77be46, 0x8798e44f), TOBN(0xdc047df2, 0x17a7f85f)},
-          {TOBN(0x2439d4c5, 0x5e59d92d), TOBN(0xcedca475, 0xe8e64d8d),
-           TOBN(0xa724cd0d, 0x87ca9b16), TOBN(0x35e4fd59, 0xa5540dfe)}},
-         {{TOBN(0xf8c1ff18, 0xe4bcf6b1), TOBN(0x856d6285, 0x295018fa),
-           TOBN(0x433f665c, 0x3263c949), TOBN(0xa6a76dd6, 0xa1f21409)},
-          {TOBN(0x17d32334, 0xcc7b4f79), TOBN(0xa1d03122, 0x06720e4a),
-           TOBN(0xadb6661d, 0x81d9bed5), TOBN(0xf0d6fb02, 0x11db15d1)}},
-         {{TOBN(0x7fd11ad5, 0x1fb747d2), TOBN(0xab50f959, 0x3033762b),
-           TOBN(0x2a7e711b, 0xfbefaf5a), TOBN(0xc7393278, 0x3fef2bbf)},
-          {TOBN(0xe29fa244, 0x0df6f9be), TOBN(0x9092757b, 0x71efd215),
-           TOBN(0xee60e311, 0x4f3d6fd9), TOBN(0x338542d4, 0x0acfb78b)}},
-         {{TOBN(0x44a23f08, 0x38961a0f), TOBN(0x1426eade, 0x986987ca),
-           TOBN(0x36e6ee2e, 0x4a863cc6), TOBN(0x48059420, 0x628b8b79)},
-          {TOBN(0x30303ad8, 0x7396e1de), TOBN(0x5c8bdc48, 0x38c5aad1),
-           TOBN(0x3e40e11f, 0x5c8f5066), TOBN(0xabd6e768, 0x8d246bbd)}},
-         {{TOBN(0x68aa40bb, 0x23330a01), TOBN(0xd23f5ee4, 0xc34eafa0),
-           TOBN(0x3bbee315, 0x5de02c21), TOBN(0x18dd4397, 0xd1d8dd06)},
-          {TOBN(0x3ba1939a, 0x122d7b44), TOBN(0xe6d3b40a, 0xa33870d6),
-           TOBN(0x8e620f70, 0x1c4fe3f8), TOBN(0xf6bba1a5, 0xd3a50cbf)}},
-         {{TOBN(0x4a78bde5, 0xcfc0aee0), TOBN(0x847edc46, 0xc08c50bd),
-           TOBN(0xbaa2439c, 0xad63c9b2), TOBN(0xceb4a728, 0x10fc2acb)},
-          {TOBN(0xa419e40e, 0x26da033d), TOBN(0x6cc3889d, 0x03e02683),
-           TOBN(0x1cd28559, 0xfdccf725), TOBN(0x0fd7e0f1, 0x8d13d208)}},
-         {{TOBN(0x01b9733b, 0x1f0df9d4), TOBN(0x8cc2c5f3, 0xa2b5e4f3),
-           TOBN(0x43053bfa, 0x3a304fd4), TOBN(0x8e87665c, 0x0a9f1aa7)},
-          {TOBN(0x087f29ec, 0xd73dc965), TOBN(0x15ace455, 0x3e9023db),
-           TOBN(0x2370e309, 0x2bce28b4), TOBN(0xf9723442, 0xb6b1e84a)}},
-         {{TOBN(0xbeee662e, 0xb72d9f26), TOBN(0xb19396de, 0xf0e47109),
-           TOBN(0x85b1fa73, 0xe13289d0), TOBN(0x436cf77e, 0x54e58e32)},
-          {TOBN(0x0ec833b3, 0xe990ef77), TOBN(0x7373e3ed, 0x1b11fc25),
-           TOBN(0xbe0eda87, 0x0fc332ce), TOBN(0xced04970, 0x8d7ea856)}},
-         {{TOBN(0xf85ff785, 0x7e977ca0), TOBN(0xb66ee8da, 0xdfdd5d2b),
-           TOBN(0xf5e37950, 0x905af461), TOBN(0x587b9090, 0x966d487c)},
-          {TOBN(0x6a198a1b, 0x32ba0127), TOBN(0xa7720e07, 0x141615ac),
-           TOBN(0xa23f3499, 0x996ef2f2), TOBN(0xef5f64b4, 0x470bcb3d)}},
-         {{TOBN(0xa526a962, 0x92b8c559), TOBN(0x0c14aac0, 0x69740a0f),
-           TOBN(0x0d41a9e3, 0xa6bdc0a5), TOBN(0x97d52106, 0x9c48aef4)},
-          {TOBN(0xcf16bd30, 0x3e7c253b), TOBN(0xcc834b1a, 0x47fdedc1),
-           TOBN(0x7362c6e5, 0x373aab2e), TOBN(0x264ed85e, 0xc5f590ff)}},
-         {{TOBN(0x7a46d9c0, 0x66d41870), TOBN(0xa50c20b1, 0x4787ba09),
-           TOBN(0x185e7e51, 0xe3d44635), TOBN(0xb3b3e080, 0x31e2d8dc)},
-          {TOBN(0xbed1e558, 0xa179e9d9), TOBN(0x2daa3f79, 0x74a76781),
-           TOBN(0x4372baf2, 0x3a40864f), TOBN(0x46900c54, 0x4fe75cb5)}},
-         {{TOBN(0xb95f171e, 0xf76765d0), TOBN(0x4ad726d2, 0x95c87502),
-           TOBN(0x2ec769da, 0x4d7c99bd), TOBN(0x5e2ddd19, 0xc36cdfa8)},
-          {TOBN(0xc22117fc, 0xa93e6dea), TOBN(0xe8a2583b, 0x93771123),
-           TOBN(0xbe2f6089, 0xfa08a3a2), TOBN(0x4809d5ed, 0x8f0e1112)}},
-         {{TOBN(0x3b414aa3, 0xda7a095e), TOBN(0x9049acf1, 0x26f5aadd),
-           TOBN(0x78d46a4d, 0x6be8b84a), TOBN(0xd66b1963, 0xb732b9b3)},
-          {TOBN(0x5c2ac2a0, 0xde6e9555), TOBN(0xcf52d098, 0xb5bd8770),
-           TOBN(0x15a15fa6, 0x0fd28921), TOBN(0x56ccb81e, 0x8b27536d)}},
-         {{TOBN(0x0f0d8ab8, 0x9f4ccbb8), TOBN(0xed5f44d2, 0xdb221729),
-           TOBN(0x43141988, 0x00bed10c), TOBN(0xc94348a4, 0x1d735b8b)},
-          {TOBN(0x79f3e9c4, 0x29ef8479), TOBN(0x4c13a4e3, 0x614c693f),
-           TOBN(0x32c9af56, 0x8e143a14), TOBN(0xbc517799, 0xe29ac5c4)}},
-         {{TOBN(0x05e17992, 0x2774856f), TOBN(0x6e52fb05, 0x6c1bf55f),
-           TOBN(0xaeda4225, 0xe4f19e16), TOBN(0x70f4728a, 0xaf5ccb26)},
-          {TOBN(0x5d2118d1, 0xb2947f22), TOBN(0xc827ea16, 0x281d6fb9),
-           TOBN(0x8412328d, 0x8cf0eabd), TOBN(0x45ee9fb2, 0x03ef9dcf)}},
-         {{TOBN(0x8e700421, 0xbb937d63), TOBN(0xdf8ff2d5, 0xcc4b37a6),
-           TOBN(0xa4c0d5b2, 0x5ced7b68), TOBN(0x6537c1ef, 0xc7308f59)},
-          {TOBN(0x25ce6a26, 0x3b37f8e8), TOBN(0x170e9a9b, 0xdeebc6ce),
-           TOBN(0xdd037952, 0x8728d72c), TOBN(0x445b0e55, 0x850154bc)}},
-         {{TOBN(0x4b7d0e06, 0x83a7337b), TOBN(0x1e3416d4, 0xffecf249),
-           TOBN(0x24840eff, 0x66a2b71f), TOBN(0xd0d9a50a, 0xb37cc26d)},
-          {TOBN(0xe2198150, 0x6fe28ef7), TOBN(0x3cc5ef16, 0x23324c7f),
-           TOBN(0x220f3455, 0x769b5263), TOBN(0xe2ade2f1, 0xa10bf475)}},
-         {{TOBN(0x28cd20fa, 0x458d3671), TOBN(0x1549722c, 0x2dc4847b),
-           TOBN(0x6dd01e55, 0x591941e3), TOBN(0x0e6fbcea, 0x27128ccb)},
-          {TOBN(0xae1a1e6b, 0x3bef0262), TOBN(0xfa8c472c, 0x8f54e103),
-           TOBN(0x7539c0a8, 0x72c052ec), TOBN(0xd7b27369, 0x5a3490e9)}},
-         {{TOBN(0x143fe1f1, 0x71684349), TOBN(0x36b4722e, 0x32e19b97),
-           TOBN(0xdc059227, 0x90980aff), TOBN(0x175c9c88, 0x9e13d674)},
-          {TOBN(0xa7de5b22, 0x6e6bfdb1), TOBN(0x5ea5b7b2, 0xbedb4b46),
-           TOBN(0xd5570191, 0xd34a6e44), TOBN(0xfcf60d2e, 0xa24ff7e6)}},
-         {{TOBN(0x614a392d, 0x677819e1), TOBN(0x7be74c7e, 0xaa5a29e8),
-           TOBN(0xab50fece, 0x63c85f3f), TOBN(0xaca2e2a9, 0x46cab337)},
-          {TOBN(0x7f700388, 0x122a6fe3), TOBN(0xdb69f703, 0x882a04a8),
-           TOBN(0x9a77935d, 0xcf7aed57), TOBN(0xdf16207c, 0x8d91c86f)}},
-         {{TOBN(0x2fca49ab, 0x63ed9998), TOBN(0xa3125c44, 0xa77ddf96),
-           TOBN(0x05dd8a86, 0x24344072), TOBN(0xa023dda2, 0xfec3fb56)},
-          {TOBN(0x421b41fc, 0x0c743032), TOBN(0x4f2120c1, 0x5e438639),
-           TOBN(0xfb7cae51, 0xc83c1b07), TOBN(0xb2370caa, 0xcac2171a)}},
-         {{TOBN(0x2eb2d962, 0x6cc820fb), TOBN(0x59feee5c, 0xb85a44bf),
-           TOBN(0x94620fca, 0x5b6598f0), TOBN(0x6b922cae, 0x7e314051)},
-          {TOBN(0xff8745ad, 0x106bed4e), TOBN(0x546e71f5, 0xdfa1e9ab),
-           TOBN(0x935c1e48, 0x1ec29487), TOBN(0x9509216c, 0x4d936530)}},
-         {{TOBN(0xc7ca3067, 0x85c9a2db), TOBN(0xd6ae5152, 0x6be8606f),
-           TOBN(0x09dbcae6, 0xe14c651d), TOBN(0xc9536e23, 0x9bc32f96)},
-          {TOBN(0xa90535a9, 0x34521b03), TOBN(0xf39c526c, 0x878756ff),
-           TOBN(0x383172ec, 0x8aedf03c), TOBN(0x20a8075e, 0xefe0c034)}},
-         {{TOBN(0xf22f9c62, 0x64026422), TOBN(0x8dd10780, 0x24b9d076),
-           TOBN(0x944c742a, 0x3bef2950), TOBN(0x55b9502e, 0x88a2b00b)},
-          {TOBN(0xa59e14b4, 0x86a09817), TOBN(0xa39dd3ac, 0x47bb4071),
-           TOBN(0x55137f66, 0x3be0592f), TOBN(0x07fcafd4, 0xc9e63f5b)}},
-         {{TOBN(0x963652ee, 0x346eb226), TOBN(0x7dfab085, 0xec2facb7),
-           TOBN(0x273bf2b8, 0x691add26), TOBN(0x30d74540, 0xf2b46c44)},
-          {TOBN(0x05e8e73e, 0xf2c2d065), TOBN(0xff9b8a00, 0xd42eeac9),
-           TOBN(0x2fcbd205, 0x97209d22), TOBN(0xeb740ffa, 0xde14ea2c)}},
-         {{TOBN(0xc71ff913, 0xa8aef518), TOBN(0x7bfc74bb, 0xfff4cfa2),
-           TOBN(0x1716680c, 0xb6b36048), TOBN(0x121b2cce, 0x9ef79af1)},
-          {TOBN(0xbff3c836, 0xa01eb3d3), TOBN(0x50eb1c6a, 0x5f79077b),
-           TOBN(0xa48c32d6, 0xa004bbcf), TOBN(0x47a59316, 0x7d64f61d)}},
-         {{TOBN(0x6068147f, 0x93102016), TOBN(0x12c5f654, 0x94d12576),
-           TOBN(0xefb071a7, 0xc9bc6b91), TOBN(0x7c2da0c5, 0x6e23ea95)},
-          {TOBN(0xf4fd45b6, 0xd4a1dd5d), TOBN(0x3e7ad9b6, 0x9122b13c),
-           TOBN(0x342ca118, 0xe6f57a48), TOBN(0x1c2e94a7, 0x06f8288f)}},
-         {{TOBN(0x99e68f07, 0x5a97d231), TOBN(0x7c80de97, 0x4d838758),
-           TOBN(0xbce0f5d0, 0x05872727), TOBN(0xbe5d95c2, 0x19c4d016)},
-          {TOBN(0x921d5cb1, 0x9c2492ee), TOBN(0x42192dc1, 0x404d6fb3),
-           TOBN(0x4c84dcd1, 0x32f988d3), TOBN(0xde26d61f, 0xa17b8e85)}},
-         {{TOBN(0xc466dcb6, 0x137c7408), TOBN(0x9a38d7b6, 0x36a266da),
-           TOBN(0x7ef5cb06, 0x83bebf1b), TOBN(0xe5cdcbbf, 0x0fd014e3)},
-          {TOBN(0x30aa376d, 0xf65965a0), TOBN(0x60fe88c2, 0xebb3e95e),
-           TOBN(0x33fd0b61, 0x66ee6f20), TOBN(0x8827dcdb, 0x3f41f0a0)}},
-         {{TOBN(0xbf8a9d24, 0x0c56c690), TOBN(0x40265dad, 0xddb7641d),
-           TOBN(0x522b05bf, 0x3a6b662b), TOBN(0x466d1dfe, 0xb1478c9b)},
-          {TOBN(0xaa616962, 0x1484469b), TOBN(0x0db60549, 0x02df8f9f),
-           TOBN(0xc37bca02, 0x3cb8bf51), TOBN(0x5effe346, 0x21371ce8)}},
-         {{TOBN(0xe8f65264, 0xff112c32), TOBN(0x8a9c736d, 0x7b971fb2),
-           TOBN(0xa4f19470, 0x7b75080d), TOBN(0xfc3f2c5a, 0x8839c59b)},
-          {TOBN(0x1d6c777e, 0x5aeb49c2), TOBN(0xf3db034d, 0xda1addfe),
-           TOBN(0xd76fee5a, 0x5535affc), TOBN(0x0853ac70, 0xb92251fd)}},
-         {{TOBN(0x37e3d594, 0x8b2a29d5), TOBN(0x28f1f457, 0x4de00ddb),
-           TOBN(0x8083c1b5, 0xf42c328b), TOBN(0xd8ef1d8f, 0xe493c73b)},
-          {TOBN(0x96fb6260, 0x41dc61bd), TOBN(0xf74e8a9d, 0x27ee2f8a),
-           TOBN(0x7c605a80, 0x2c946a5d), TOBN(0xeed48d65, 0x3839ccfd)}},
-         {{TOBN(0x9894344f, 0x3a29467a), TOBN(0xde81e949, 0xc51eba6d),
-           TOBN(0xdaea066b, 0xa5e5c2f2), TOBN(0x3fc8a614, 0x08c8c7b3)},
-          {TOBN(0x7adff88f, 0x06d0de9f), TOBN(0xbbc11cf5, 0x3b75ce0a),
-           TOBN(0x9fbb7acc, 0xfbbc87d5), TOBN(0xa1458e26, 0x7badfde2)}}},
-        {{{TOBN(0x1cb43668, 0xe039c256), TOBN(0x5f26fb8b, 0x7c17fd5d),
-           TOBN(0xeee426af, 0x79aa062b), TOBN(0x072002d0, 0xd78fbf04)},
-          {TOBN(0x4c9ca237, 0xe84fb7e3), TOBN(0xb401d8a1, 0x0c82133d),
-           TOBN(0xaaa52592, 0x6d7e4181), TOBN(0xe9430833, 0x73dbb152)}},
-         {{TOBN(0xf92dda31, 0xbe24319a), TOBN(0x03f7d28b, 0xe095a8e7),
-           TOBN(0xa52fe840, 0x98782185), TOBN(0x276ddafe, 0x29c24dbc)},
-          {TOBN(0x80cd5496, 0x1d7a64eb), TOBN(0xe4360889, 0x7f1dbe42),
-           TOBN(0x2f81a877, 0x8438d2d5), TOBN(0x7e4d52a8, 0x85169036)}},
-         {{TOBN(0x19e3d5b1, 0x1d59715d), TOBN(0xc7eaa762, 0xd788983e),
-           TOBN(0xe5a730b0, 0xabf1f248), TOBN(0xfbab8084, 0xfae3fd83)},
-          {TOBN(0x65e50d21, 0x53765b2f), TOBN(0xbdd4e083, 0xfa127f3d),
-           TOBN(0x9cf3c074, 0x397b1b10), TOBN(0x59f8090c, 0xb1b59fd3)}},
-         {{TOBN(0x7b15fd9d, 0x615faa8f), TOBN(0x8fa1eb40, 0x968554ed),
-           TOBN(0x7bb4447e, 0x7aa44882), TOBN(0x2bb2d0d1, 0x029fff32)},
-          {TOBN(0x075e2a64, 0x6caa6d2f), TOBN(0x8eb879de, 0x22e7351b),
-           TOBN(0xbcd5624e, 0x9a506c62), TOBN(0x218eaef0, 0xa87e24dc)}},
-         {{TOBN(0x37e56847, 0x44ddfa35), TOBN(0x9ccfc5c5, 0xdab3f747),
-           TOBN(0x9ac1df3f, 0x1ee96cf4), TOBN(0x0c0571a1, 0x3b480b8f)},
-          {TOBN(0x2fbeb3d5, 0x4b3a7b3c), TOBN(0x35c03669, 0x5dcdbb99),
-           TOBN(0x52a0f5dc, 0xb2415b3a), TOBN(0xd57759b4, 0x4413ed9a)}},
-         {{TOBN(0x1fe647d8, 0x3d30a2c5), TOBN(0x0857f77e, 0xf78a81dc),
-           TOBN(0x11d5a334, 0x131a4a9b), TOBN(0xc0a94af9, 0x29d393f5)},
-          {TOBN(0xbc3a5c0b, 0xdaa6ec1a), TOBN(0xba9fe493, 0x88d2d7ed),
-           TOBN(0xbb4335b4, 0xbb614797), TOBN(0x991c4d68, 0x72f83533)}},
-         {{TOBN(0x53258c28, 0xd2f01cb3), TOBN(0x93d6eaa3, 0xd75db0b1),
-           TOBN(0x419a2b0d, 0xe87d0db4), TOBN(0xa1e48f03, 0xd8fe8493)},
-          {TOBN(0xf747faf6, 0xc508b23a), TOBN(0xf137571a, 0x35d53549),
-           TOBN(0x9f5e58e2, 0xfcf9b838), TOBN(0xc7186cee, 0xa7fd3cf5)}},
-         {{TOBN(0x77b868ce, 0xe978a1d3), TOBN(0xe3a68b33, 0x7ab92d04),
-           TOBN(0x51029794, 0x87a5b862), TOBN(0x5f0606c3, 0x3a61d41d)},
-          {TOBN(0x2814be27, 0x6f9326f1), TOBN(0x2f521c14, 0xc6fe3c2e),
-           TOBN(0x17464d7d, 0xacdf7351), TOBN(0x10f5f9d3, 0x777f7e44)}},
-         {{TOBN(0xce8e616b, 0x269fb37d), TOBN(0xaaf73804, 0x7de62de5),
-           TOBN(0xaba11175, 0x4fdd4153), TOBN(0x515759ba, 0x3770b49b)},
-          {TOBN(0x8b09ebf8, 0xaa423a61), TOBN(0x592245a1, 0xcd41fb92),
-           TOBN(0x1cba8ec1, 0x9b4c8936), TOBN(0xa87e91e3, 0xaf36710e)}},
-         {{TOBN(0x1fd84ce4, 0x3d34a2e3), TOBN(0xee3759ce, 0xb43b5d61),
-           TOBN(0x895bc78c, 0x619186c7), TOBN(0xf19c3809, 0xcbb9725a)},
-          {TOBN(0xc0be21aa, 0xde744b1f), TOBN(0xa7d222b0, 0x60f8056b),
-           TOBN(0x74be6157, 0xb23efe11), TOBN(0x6fab2b4f, 0x0cd68253)}},
-         {{TOBN(0xad33ea5f, 0x4bf1d725), TOBN(0x9c1d8ee2, 0x4f6c950f),
-           TOBN(0x544ee78a, 0xa377af06), TOBN(0x54f489bb, 0x94a113e1)},
-          {TOBN(0x8f11d634, 0x992fb7e8), TOBN(0x0169a7aa, 0xa2a44347),
-           TOBN(0x1d49d4af, 0x95020e00), TOBN(0x95945722, 0xe08e120b)}},
-         {{TOBN(0xb6e33878, 0xa4d32282), TOBN(0xe36e029d, 0x48020ae7),
-           TOBN(0xe05847fb, 0x37a9b750), TOBN(0xf876812c, 0xb29e3819)},
-          {TOBN(0x84ad138e, 0xd23a17f0), TOBN(0x6d7b4480, 0xf0b3950e),
-           TOBN(0xdfa8aef4, 0x2fd67ae0), TOBN(0x8d3eea24, 0x52333af6)}},
-         {{TOBN(0x0d052075, 0xb15d5acc), TOBN(0xc6d9c79f, 0xbd815bc4),
-           TOBN(0x8dcafd88, 0xdfa36cf2), TOBN(0x908ccbe2, 0x38aa9070)},
-          {TOBN(0x638722c4, 0xba35afce), TOBN(0x5a3da8b0, 0xfd6abf0b),
-           TOBN(0x2dce252c, 0xc9c335c1), TOBN(0x84e7f0de, 0x65aa799b)}},
-         {{TOBN(0x2101a522, 0xb99a72cb), TOBN(0x06de6e67, 0x87618016),
-           TOBN(0x5ff8c7cd, 0xe6f3653e), TOBN(0x0a821ab5, 0xc7a6754a)},
-          {TOBN(0x7e3fa52b, 0x7cb0b5a2), TOBN(0xa7fb121c, 0xc9048790),
-           TOBN(0x1a725020, 0x06ce053a), TOBN(0xb490a31f, 0x04e929b0)}},
-         {{TOBN(0xe17be47d, 0x62dd61ad), TOBN(0x781a961c, 0x6be01371),
-           TOBN(0x1063bfd3, 0xdae3cbba), TOBN(0x35647406, 0x7f73c9ba)},
-          {TOBN(0xf50e957b, 0x2736a129), TOBN(0xa6313702, 0xed13f256),
-           TOBN(0x9436ee65, 0x3a19fcc5), TOBN(0xcf2bdb29, 0xe7a4c8b6)}},
-         {{TOBN(0xb06b1244, 0xc5f95cd8), TOBN(0xda8c8af0, 0xf4ab95f4),
-           TOBN(0x1bae59c2, 0xb9e5836d), TOBN(0x07d51e7e, 0x3acffffc)},
-          {TOBN(0x01e15e6a, 0xc2ccbcda), TOBN(0x3bc1923f, 0x8528c3e0),
-           TOBN(0x43324577, 0xa49fead4), TOBN(0x61a1b884, 0x2aa7a711)}},
-         {{TOBN(0xf9a86e08, 0x700230ef), TOBN(0x0af585a1, 0xbd19adf8),
-           TOBN(0x7645f361, 0xf55ad8f2), TOBN(0x6e676223, 0x46c3614c)},
-          {TOBN(0x23cb257c, 0x4e774d3f), TOBN(0x82a38513, 0xac102d1b),
-           TOBN(0x9bcddd88, 0x7b126aa5), TOBN(0xe716998b, 0xeefd3ee4)}},
-         {{TOBN(0x4239d571, 0xfb167583), TOBN(0xdd011c78, 0xd16c8f8a),
-           TOBN(0x271c2895, 0x69a27519), TOBN(0x9ce0a3b7, 0xd2d64b6a)},
-          {TOBN(0x8c977289, 0xd5ec6738), TOBN(0xa3b49f9a, 0x8840ef6b),
-           TOBN(0x808c14c9, 0x9a453419), TOBN(0x5c00295b, 0x0cf0a2d5)}},
-         {{TOBN(0x524414fb, 0x1d4bcc76), TOBN(0xb07691d2, 0x459a88f1),
-           TOBN(0x77f43263, 0xf70d110f), TOBN(0x64ada5e0, 0xb7abf9f3)},
-          {TOBN(0xafd0f94e, 0x5b544cf5), TOBN(0xb4a13a15, 0xfd2713fe),
-           TOBN(0xb99b7d6e, 0x250c74f4), TOBN(0x097f2f73, 0x20324e45)}},
-         {{TOBN(0x994b37d8, 0xaffa8208), TOBN(0xc3c31b0b, 0xdc29aafc),
-           TOBN(0x3da74651, 0x7a3a607f), TOBN(0xd8e1b8c1, 0xfe6955d6)},
-          {TOBN(0x716e1815, 0xc8418682), TOBN(0x541d487f, 0x7dc91d97),
-           TOBN(0x48a04669, 0xc6996982), TOBN(0xf39cab15, 0x83a6502e)}},
-         {{TOBN(0x025801a0, 0xe68db055), TOBN(0xf3569758, 0xba3338d5),
-           TOBN(0xb0c8c0aa, 0xee2afa84), TOBN(0x4f6985d3, 0xfb6562d1)},
-          {TOBN(0x351f1f15, 0x132ed17a), TOBN(0x510ed0b4, 0xc04365fe),
-           TOBN(0xa3f98138, 0xe5b1f066), TOBN(0xbc9d95d6, 0x32df03dc)}},
-         {{TOBN(0xa83ccf6e, 0x19abd09e), TOBN(0x0b4097c1, 0x4ff17edb),
-           TOBN(0x58a5c478, 0xd64a06ce), TOBN(0x2ddcc3fd, 0x544a58fd)},
-          {TOBN(0xd449503d, 0x9e8153b8), TOBN(0x3324fd02, 0x7774179b),
-           TOBN(0xaf5d47c8, 0xdbd9120c), TOBN(0xeb860162, 0x34fa94db)}},
-         {{TOBN(0x5817bdd1, 0x972f07f4), TOBN(0xe5579e2e, 0xd27bbceb),
-           TOBN(0x86847a1f, 0x5f11e5a6), TOBN(0xb39ed255, 0x7c3cf048)},
-          {TOBN(0xe1076417, 0xa2f62e55), TOBN(0x6b9ab38f, 0x1bcf82a2),
-           TOBN(0x4bb7c319, 0x7aeb29f9), TOBN(0xf6d17da3, 0x17227a46)}},
-         {{TOBN(0xab53ddbd, 0x0f968c00), TOBN(0xa03da7ec, 0x000c880b),
-           TOBN(0x7b239624, 0x6a9ad24d), TOBN(0x612c0401, 0x01ec60d0)},
-          {TOBN(0x70d10493, 0x109f5df1), TOBN(0xfbda4030, 0x80af7550),
-           TOBN(0x30b93f95, 0xc6b9a9b3), TOBN(0x0c74ec71, 0x007d9418)}},
-         {{TOBN(0x94175564, 0x6edb951f), TOBN(0x5f4a9d78, 0x7f22c282),
-           TOBN(0xb7870895, 0xb38d1196), TOBN(0xbc593df3, 0xa228ce7c)},
-          {TOBN(0xc78c5bd4, 0x6af3641a), TOBN(0x7802200b, 0x3d9b3dcc),
-           TOBN(0x0dc73f32, 0x8be33304), TOBN(0x847ed87d, 0x61ffb79a)}},
-         {{TOBN(0xf85c974e, 0x6d671192), TOBN(0x1e14100a, 0xde16f60f),
-           TOBN(0x45cb0d5a, 0x95c38797), TOBN(0x18923bba, 0x9b022da4)},
-          {TOBN(0xef2be899, 0xbbe7e86e), TOBN(0x4a1510ee, 0x216067bf),
-           TOBN(0xd98c8154, 0x84d5ce3e), TOBN(0x1af777f0, 0xf92a2b90)}},
-         {{TOBN(0x9fbcb400, 0x4ef65724), TOBN(0x3e04a4c9, 0x3c0ca6fe),
-           TOBN(0xfb3e2cb5, 0x55002994), TOBN(0x1f3a93c5, 0x5363ecab)},
-          {TOBN(0x1fe00efe, 0x3923555b), TOBN(0x744bedd9, 0x1e1751ea),
-           TOBN(0x3fb2db59, 0x6ab69357), TOBN(0x8dbd7365, 0xf5e6618b)}},
-         {{TOBN(0x99d53099, 0xdf1ea40e), TOBN(0xb3f24a0b, 0x57d61e64),
-           TOBN(0xd088a198, 0x596eb812), TOBN(0x22c8361b, 0x5762940b)},
-          {TOBN(0x66f01f97, 0xf9c0d95c), TOBN(0x88461172, 0x8e43cdae),
-           TOBN(0x11599a7f, 0xb72b15c3), TOBN(0x135a7536, 0x420d95cc)}},
-         {{TOBN(0x2dcdf0f7, 0x5f7ae2f6), TOBN(0x15fc6e1d, 0xd7fa6da2),
-           TOBN(0x81ca829a, 0xd1d441b6), TOBN(0x84c10cf8, 0x04a106b6)},
-          {TOBN(0xa9b26c95, 0xa73fbbd0), TOBN(0x7f24e0cb, 0x4d8f6ee8),
-           TOBN(0x48b45937, 0x1e25a043), TOBN(0xf8a74fca, 0x036f3dfe)}},
-         {{TOBN(0x1ed46585, 0xc9f84296), TOBN(0x7fbaa8fb, 0x3bc278b0),
-           TOBN(0xa8e96cd4, 0x6c4fcbd0), TOBN(0x940a1202, 0x73b60a5f)},
-          {TOBN(0x34aae120, 0x55a4aec8), TOBN(0x550e9a74, 0xdbd742f0),
-           TOBN(0x794456d7, 0x228c68ab), TOBN(0x492f8868, 0xa4e25ec6)}},
-         {{TOBN(0x682915ad, 0xb2d8f398), TOBN(0xf13b51cc, 0x5b84c953),
-           TOBN(0xcda90ab8, 0x5bb917d6), TOBN(0x4b615560, 0x4ea3dee1)},
-          {TOBN(0x578b4e85, 0x0a52c1c8), TOBN(0xeab1a695, 0x20b75fc4),
-           TOBN(0x60c14f3c, 0xaa0bb3c6), TOBN(0x220f448a, 0xb8216094)}},
-         {{TOBN(0x4fe7ee31, 0xb0e63d34), TOBN(0xf4600572, 0xa9e54fab),
-           TOBN(0xc0493334, 0xd5e7b5a4), TOBN(0x8589fb92, 0x06d54831)},
-          {TOBN(0xaa70f5cc, 0x6583553a), TOBN(0x0879094a, 0xe25649e5),
-           TOBN(0xcc904507, 0x10044652), TOBN(0xebb0696d, 0x02541c4f)}},
-         {{TOBN(0x5a171fde, 0xb9718710), TOBN(0x38f1bed8, 0xf374a9f5),
-           TOBN(0xc8c582e1, 0xba39bdc1), TOBN(0xfc457b0a, 0x908cc0ce)},
-          {TOBN(0x9a187fd4, 0x883841e2), TOBN(0x8ec25b39, 0x38725381),
-           TOBN(0x2553ed05, 0x96f84395), TOBN(0x095c7661, 0x6f6c6897)}},
-         {{TOBN(0x917ac85c, 0x4bdc5610), TOBN(0xb2885fe4, 0x179eb301),
-           TOBN(0x5fc65547, 0x8b78bdcc), TOBN(0x4a9fc893, 0xe59e4699)},
-          {TOBN(0xbb7ff0cd, 0x3ce299af), TOBN(0x195be9b3, 0xadf38b20),
-           TOBN(0x6a929c87, 0xd38ddb8f), TOBN(0x55fcc99c, 0xb21a51b9)}},
-         {{TOBN(0x2b695b4c, 0x721a4593), TOBN(0xed1e9a15, 0x768eaac2),
-           TOBN(0xfb63d71c, 0x7489f914), TOBN(0xf98ba31c, 0x78118910)},
-          {TOBN(0x80291373, 0x9b128eb4), TOBN(0x7801214e, 0xd448af4a),
-           TOBN(0xdbd2e22b, 0x55418dd3), TOBN(0xeffb3c0d, 0xd3998242)}},
-         {{TOBN(0xdfa6077c, 0xc7bf3827), TOBN(0xf2165bcb, 0x47f8238f),
-           TOBN(0xfe37cf68, 0x8564d554), TOBN(0xe5f825c4, 0x0a81fb98)},
-          {TOBN(0x43cc4f67, 0xffed4d6f), TOBN(0xbc609578, 0xb50a34b0),
-           TOBN(0x8aa8fcf9, 0x5041faf1), TOBN(0x5659f053, 0x651773b6)}},
-         {{TOBN(0xe87582c3, 0x6044d63b), TOBN(0xa6089409, 0x0cdb0ca0),
-           TOBN(0x8c993e0f, 0xbfb2bcf6), TOBN(0xfc64a719, 0x45985cfc)},
-          {TOBN(0x15c4da80, 0x83dbedba), TOBN(0x804ae112, 0x2be67df7),
-           TOBN(0xda4c9658, 0xa23defde), TOBN(0x12002ddd, 0x5156e0d3)}},
-         {{TOBN(0xe68eae89, 0x5dd21b96), TOBN(0x8b99f28b, 0xcf44624d),
-           TOBN(0x0ae00808, 0x1ec8897a), TOBN(0xdd0a9303, 0x6712f76e)},
-          {TOBN(0x96237522, 0x4e233de4), TOBN(0x192445b1, 0x2b36a8a5),
-           TOBN(0xabf9ff74, 0x023993d9), TOBN(0x21f37bf4, 0x2aad4a8f)}},
-         {{TOBN(0x340a4349, 0xf8bd2bbd), TOBN(0x1d902cd9, 0x4868195d),
-           TOBN(0x3d27bbf1, 0xe5fdb6f1), TOBN(0x7a5ab088, 0x124f9f1c)},
-          {TOBN(0xc466ab06, 0xf7a09e03), TOBN(0x2f8a1977, 0x31f2c123),
-           TOBN(0xda355dc7, 0x041b6657), TOBN(0xcb840d12, 0x8ece2a7c)}},
-         {{TOBN(0xb600ad9f, 0x7db32675), TOBN(0x78fea133, 0x07a06f1b),
-           TOBN(0x5d032269, 0xb31f6094), TOBN(0x07753ef5, 0x83ec37aa)},
-          {TOBN(0x03485aed, 0x9c0bea78), TOBN(0x41bb3989, 0xbc3f4524),
-           TOBN(0x09403761, 0x697f726d), TOBN(0x6109beb3, 0xdf394820)}},
-         {{TOBN(0x804111ea, 0x3b6d1145), TOBN(0xb6271ea9, 0xa8582654),
-           TOBN(0x619615e6, 0x24e66562), TOBN(0xa2554945, 0xd7b6ad9c)},
-          {TOBN(0xd9c4985e, 0x99bfe35f), TOBN(0x9770ccc0, 0x7b51cdf6),
-           TOBN(0x7c327013, 0x92881832), TOBN(0x8777d45f, 0x286b26d1)}},
-         {{TOBN(0x9bbeda22, 0xd847999d), TOBN(0x03aa33b6, 0xc3525d32),
-           TOBN(0x4b7b96d4, 0x28a959a1), TOBN(0xbb3786e5, 0x31e5d234)},
-          {TOBN(0xaeb5d3ce, 0x6961f247), TOBN(0x20aa85af, 0x02f93d3f),
-           TOBN(0x9cd1ad3d, 0xd7a7ae4f), TOBN(0xbf6688f0, 0x781adaa8)}},
-         {{TOBN(0xb1b40e86, 0x7469cead), TOBN(0x1904c524, 0x309fca48),
-           TOBN(0x9b7312af, 0x4b54bbc7), TOBN(0xbe24bf8f, 0x593affa2)},
-          {TOBN(0xbe5e0790, 0xbd98764b), TOBN(0xa0f45f17, 0xa26e299e),
-           TOBN(0x4af0d2c2, 0x6b8fe4c7), TOBN(0xef170db1, 0x8ae8a3e6)}},
-         {{TOBN(0x0e8d61a0, 0x29e0ccc1), TOBN(0xcd53e87e, 0x60ad36ca),
-           TOBN(0x328c6623, 0xc8173822), TOBN(0x7ee1767d, 0xa496be55)},
-          {TOBN(0x89f13259, 0x648945af), TOBN(0x9e45a5fd, 0x25c8009c),
-           TOBN(0xaf2febd9, 0x1f61ab8c), TOBN(0x43f6bc86, 0x8a275385)}},
-         {{TOBN(0x87792348, 0xf2142e79), TOBN(0x17d89259, 0xc6e6238a),
-           TOBN(0x7536d2f6, 0x4a839d9b), TOBN(0x1f428fce, 0x76a1fbdc)},
-          {TOBN(0x1c109601, 0x0db06dfe), TOBN(0xbfc16bc1, 0x50a3a3cc),
-           TOBN(0xf9cbd9ec, 0x9b30f41b), TOBN(0x5b5da0d6, 0x00138cce)}},
-         {{TOBN(0xec1d0a48, 0x56ef96a7), TOBN(0xb47eb848, 0x982bf842),
-           TOBN(0x66deae32, 0xec3f700d), TOBN(0x4e43c42c, 0xaa1181e0)},
-          {TOBN(0xa1d72a31, 0xd1a4aa2a), TOBN(0x440d4668, 0xc004f3ce),
-           TOBN(0x0d6a2d3b, 0x45fe8a7a), TOBN(0x820e52e2, 0xfb128365)}},
-         {{TOBN(0x29ac5fcf, 0x25e51b09), TOBN(0x180cd2bf, 0x2023d159),
-           TOBN(0xa9892171, 0xa1ebf90e), TOBN(0xf97c4c87, 0x7c132181)},
-          {TOBN(0x9f1dc724, 0xc03dbb7e), TOBN(0xae043765, 0x018cbbe4),
-           TOBN(0xfb0b2a36, 0x0767d153), TOBN(0xa8e2f4d6, 0x249cbaeb)}},
-         {{TOBN(0x172a5247, 0xd95ea168), TOBN(0x1758fada, 0x2970764a),
-           TOBN(0xac803a51, 0x1d978169), TOBN(0x299cfe2e, 0xde77e01b)},
-          {TOBN(0x652a1e17, 0xb0a98927), TOBN(0x2e26e1d1, 0x20014495),
-           TOBN(0x7ae0af9f, 0x7175b56a), TOBN(0xc2e22a80, 0xd64b9f95)}},
-         {{TOBN(0x4d0ff9fb, 0xd90a060a), TOBN(0x496a27db, 0xbaf38085),
-           TOBN(0x32305401, 0xda776bcf), TOBN(0xb8cdcef6, 0x725f209e)},
-          {TOBN(0x61ba0f37, 0x436a0bba), TOBN(0x263fa108, 0x76860049),
-           TOBN(0x92beb98e, 0xda3542cf), TOBN(0xa2d4d14a, 0xd5849538)}},
-         {{TOBN(0x989b9d68, 0x12e9a1bc), TOBN(0x61d9075c, 0x5f6e3268),
-           TOBN(0x352c6aa9, 0x99ace638), TOBN(0xde4e4a55, 0x920f43ff)},
-          {TOBN(0xe5e4144a, 0xd673c017), TOBN(0x667417ae, 0x6f6e05ea),
-           TOBN(0x613416ae, 0xdcd1bd56), TOBN(0x5eb36201, 0x86693711)}},
-         {{TOBN(0x2d7bc504, 0x3a1aa914), TOBN(0x175a1299, 0x76dc5975),
-           TOBN(0xe900e0f2, 0x3fc8125c), TOBN(0x569ef68c, 0x11198875)},
-          {TOBN(0x9012db63, 0x63a113b4), TOBN(0xe3bd3f56, 0x98835766),
-           TOBN(0xa5c94a52, 0x76412dea), TOBN(0xad9e2a09, 0xaa735e5c)}},
-         {{TOBN(0x405a984c, 0x508b65e9), TOBN(0xbde4a1d1, 0x6df1a0d1),
-           TOBN(0x1a9433a1, 0xdfba80da), TOBN(0xe9192ff9, 0x9440ad2e)},
-          {TOBN(0x9f649696, 0x5099fe92), TOBN(0x25ddb65c, 0x0b27a54a),
-           TOBN(0x178279dd, 0xc590da61), TOBN(0x5479a999, 0xfbde681a)}},
-         {{TOBN(0xd0e84e05, 0x013fe162), TOBN(0xbe11dc92, 0x632d471b),
-           TOBN(0xdf0b0c45, 0xfc0e089f), TOBN(0x04fb15b0, 0x4c144025)},
-          {TOBN(0xa61d5fc2, 0x13c99927), TOBN(0xa033e9e0, 0x3de2eb35),
-           TOBN(0xf8185d5c, 0xb8dacbb4), TOBN(0x9a88e265, 0x8644549d)}},
-         {{TOBN(0xf717af62, 0x54671ff6), TOBN(0x4bd4241b, 0x5fa58603),
-           TOBN(0x06fba40b, 0xe67773c0), TOBN(0xc1d933d2, 0x6a2847e9)},
-          {TOBN(0xf4f5acf3, 0x689e2c70), TOBN(0x92aab0e7, 0x46bafd31),
-           TOBN(0x798d76aa, 0x3473f6e5), TOBN(0xcc6641db, 0x93141934)}},
-         {{TOBN(0xcae27757, 0xd31e535e), TOBN(0x04cc43b6, 0x87c2ee11),
-           TOBN(0x8d1f9675, 0x2e029ffa), TOBN(0xc2150672, 0xe4cc7a2c)},
-          {TOBN(0x3b03c1e0, 0x8d68b013), TOBN(0xa9d6816f, 0xedf298f3),
-           TOBN(0x1bfbb529, 0xa2804464), TOBN(0x95a52fae, 0x5db22125)}},
-         {{TOBN(0x55b32160, 0x0e1cb64e), TOBN(0x004828f6, 0x7e7fc9fe),
-           TOBN(0x13394b82, 0x1bb0fb93), TOBN(0xb6293a2d, 0x35f1a920)},
-          {TOBN(0xde35ef21, 0xd145d2d9), TOBN(0xbe6225b3, 0xbb8fa603),
-           TOBN(0x00fc8f6b, 0x32cf252d), TOBN(0xa28e52e6, 0x117cf8c2)}},
-         {{TOBN(0x9d1dc89b, 0x4c371e6d), TOBN(0xcebe0675, 0x36ef0f28),
-           TOBN(0x5de05d09, 0xa4292f81), TOBN(0xa8303593, 0x353e3083)},
-          {TOBN(0xa1715b0a, 0x7e37a9bb), TOBN(0x8c56f61e, 0x2b8faec3),
-           TOBN(0x52507431, 0x33c9b102), TOBN(0x0130cefc, 0xa44431f0)}},
-         {{TOBN(0x56039fa0, 0xbd865cfb), TOBN(0x4b03e578, 0xbc5f1dd7),
-           TOBN(0x40edf2e4, 0xbabe7224), TOBN(0xc752496d, 0x3a1988f6)},
-          {TOBN(0xd1572d3b, 0x564beb6b), TOBN(0x0db1d110, 0x39a1c608),
-           TOBN(0x568d1934, 0x16f60126), TOBN(0x05ae9668, 0xf354af33)}},
-         {{TOBN(0x19de6d37, 0xc92544f2), TOBN(0xcc084353, 0xa35837d5),
-           TOBN(0xcbb6869c, 0x1a514ece), TOBN(0xb633e728, 0x2e1d1066)},
-          {TOBN(0xf15dd69f, 0x936c581c), TOBN(0x96e7b8ce, 0x7439c4f9),
-           TOBN(0x5e676f48, 0x2e448a5b), TOBN(0xb2ca7d5b, 0xfd916bbb)}},
-         {{TOBN(0xd55a2541, 0xf5024025), TOBN(0x47bc5769, 0xe4c2d937),
-           TOBN(0x7d31b92a, 0x0362189f), TOBN(0x83f3086e, 0xef7816f9)},
-          {TOBN(0xf9f46d94, 0xb587579a), TOBN(0xec2d22d8, 0x30e76c5f),
-           TOBN(0x27d57461, 0xb000ffcf), TOBN(0xbb7e65f9, 0x364ffc2c)}},
-         {{TOBN(0x7c7c9477, 0x6652a220), TOBN(0x61618f89, 0xd696c981),
-           TOBN(0x5021701d, 0x89effff3), TOBN(0xf2c8ff8e, 0x7c314163)},
-          {TOBN(0x2da413ad, 0x8efb4d3e), TOBN(0x937b5adf, 0xce176d95),
-           TOBN(0x22867d34, 0x2a67d51c), TOBN(0x262b9b10, 0x18eb3ac9)}},
-         {{TOBN(0x4e314fe4, 0xc43ff28b), TOBN(0x76476627, 0x6a664e7a),
-           TOBN(0x3e90e40b, 0xb7a565c2), TOBN(0x8588993a, 0xc1acf831)},
-          {TOBN(0xd7b501d6, 0x8f938829), TOBN(0x996627ee, 0x3edd7d4c),
-           TOBN(0x37d44a62, 0x90cd34c7), TOBN(0xa8327499, 0xf3833e8d)}},
-         {{TOBN(0x2e18917d, 0x4bf50353), TOBN(0x85dd726b, 0x556765fb),
-           TOBN(0x54fe65d6, 0x93d5ab66), TOBN(0x3ddbaced, 0x915c25fe)},
-          {TOBN(0xa799d9a4, 0x12f22e85), TOBN(0xe2a24867, 0x6d06f6bc),
-           TOBN(0xf4f1ee56, 0x43ca1637), TOBN(0xfda2828b, 0x61ece30a)}},
-         {{TOBN(0x758c1a3e, 0xa2dee7a6), TOBN(0xdcde2f3c, 0x734b2284),
-           TOBN(0xaba445d2, 0x4eaba6ad), TOBN(0x35aaf668, 0x76cee0a7)},
-          {TOBN(0x7e0b04a9, 0xe5aa049a), TOBN(0xe74083ad, 0x91103e84),
-           TOBN(0xbeb183ce, 0x40afecc3), TOBN(0x6b89de9f, 0xea043f7a)}}},
-        {{{TOBN(0x0e299d23, 0xfe67ba66), TOBN(0x91450760, 0x93cf2f34),
-           TOBN(0xf45b5ea9, 0x97fcf913), TOBN(0x5be00843, 0x8bd7ddda)},
-          {TOBN(0x358c3e05, 0xd53ff04d), TOBN(0xbf7ccdc3, 0x5de91ef7),
-           TOBN(0xad684dbf, 0xb69ec1a0), TOBN(0x367e7cf2, 0x801fd997)}},
-         {{TOBN(0x0ca1f3b7, 0xb0dc8595), TOBN(0x27de4608, 0x9f1d9f2e),
-           TOBN(0x1af3bf39, 0xbadd82a7), TOBN(0x79356a79, 0x65862448)},
-          {TOBN(0xc0602345, 0xf5f9a052), TOBN(0x1a8b0f89, 0x139a42f9),
-           TOBN(0xb53eee42, 0x844d40fc), TOBN(0x93b0bfe5, 0x4e5b6368)}},
-         {{TOBN(0x5434dd02, 0xc024789c), TOBN(0x90dca9ea, 0x41b57bfc),
-           TOBN(0x8aa898e2, 0x243398df), TOBN(0xf607c834, 0x894a94bb)},
-          {TOBN(0xbb07be97, 0xc2c99b76), TOBN(0x6576ba67, 0x18c29302),
-           TOBN(0x3d79efcc, 0xe703a88c), TOBN(0xf259ced7, 0xb6a0d106)}},
-         {{TOBN(0x0f893a5d, 0xc8de610b), TOBN(0xe8c515fb, 0x67e223ce),
-           TOBN(0x7774bfa6, 0x4ead6dc5), TOBN(0x89d20f95, 0x925c728f)},
-          {TOBN(0x7a1e0966, 0x098583ce), TOBN(0xa2eedb94, 0x93f2a7d7),
-           TOBN(0x1b282097, 0x4c304d4a), TOBN(0x0842e3da, 0xc077282d)}},
-         {{TOBN(0xe4d972a3, 0x3b9e2d7b), TOBN(0x7cc60b27, 0xc48218ff),
-           TOBN(0x8fc70838, 0x84149d91), TOBN(0x5c04346f, 0x2f461ecc)},
-          {TOBN(0xebe9fdf2, 0x614650a9), TOBN(0x5e35b537, 0xc1f666ac),
-           TOBN(0x645613d1, 0x88babc83), TOBN(0x88cace3a, 0xc5e1c93e)}},
-         {{TOBN(0x209ca375, 0x3de92e23), TOBN(0xccb03cc8, 0x5fbbb6e3),
-           TOBN(0xccb90f03, 0xd7b1487e), TOBN(0xfa9c2a38, 0xc710941f)},
-          {TOBN(0x756c3823, 0x6724ceed), TOBN(0x3a902258, 0x192d0323),
-           TOBN(0xb150e519, 0xea5e038e), TOBN(0xdcba2865, 0xc7427591)}},
-         {{TOBN(0xe549237f, 0x78890732), TOBN(0xc443bef9, 0x53fcb4d9),
-           TOBN(0x9884d8a6, 0xeb3480d6), TOBN(0x8a35b6a1, 0x3048b186)},
-          {TOBN(0xb4e44716, 0x65e9a90a), TOBN(0x45bf380d, 0x653006c0),
-           TOBN(0x8f3f820d, 0x4fe9ae3b), TOBN(0x244a35a0, 0x979a3b71)}},
-         {{TOBN(0xa1010e9d, 0x74cd06ff), TOBN(0x9c17c7df, 0xaca3eeac),
-           TOBN(0x74c86cd3, 0x8063aa2b), TOBN(0x8595c4b3, 0x734614ff)},
-          {TOBN(0xa3de00ca, 0x990f62cc), TOBN(0xd9bed213, 0xca0c3be5),
-           TOBN(0x7886078a, 0xdf8ce9f5), TOBN(0xddb27ce3, 0x5cd44444)}},
-         {{TOBN(0xed374a66, 0x58926ddd), TOBN(0x138b2d49, 0x908015b8),
-           TOBN(0x886c6579, 0xde1f7ab8), TOBN(0x888b9aa0, 0xc3020b7a)},
-          {TOBN(0xd3ec034e, 0x3a96e355), TOBN(0xba65b0b8, 0xf30fbe9a),
-           TOBN(0x064c8e50, 0xff21367a), TOBN(0x1f508ea4, 0x0b04b46e)}},
-         {{TOBN(0x98561a49, 0x747c866c), TOBN(0xbbb1e5fe, 0x0518a062),
-           TOBN(0x20ff4e8b, 0xecdc3608), TOBN(0x7f55cded, 0x20184027)},
-          {TOBN(0x8d73ec95, 0xf38c85f0), TOBN(0x5b589fdf, 0x8bc3b8c3),
-           TOBN(0xbe95dd98, 0x0f12b66f), TOBN(0xf5bd1a09, 0x0e338e01)}},
-         {{TOBN(0x65163ae5, 0x5e915918), TOBN(0x6158d6d9, 0x86f8a46b),
-           TOBN(0x8466b538, 0xeeebf99c), TOBN(0xca8761f6, 0xbca477ef)},
-          {TOBN(0xaf3449c2, 0x9ebbc601), TOBN(0xef3b0f41, 0xe0c3ae2f),
-           TOBN(0xaa6c577d, 0x5de63752), TOBN(0xe9166601, 0x64682a51)}},
-         {{TOBN(0x5a3097be, 0xfc15aa1e), TOBN(0x40d12548, 0xb54b0745),
-           TOBN(0x5bad4706, 0x519a5f12), TOBN(0xed03f717, 0xa439dee6)},
-          {TOBN(0x0794bb6c, 0x4a02c499), TOBN(0xf725083d, 0xcffe71d2),
-           TOBN(0x2cad7519, 0x0f3adcaf), TOBN(0x7f68ea1c, 0x43729310)}},
-         {{TOBN(0xe747c8c7, 0xb7ffd977), TOBN(0xec104c35, 0x80761a22),
-           TOBN(0x8395ebaf, 0x5a3ffb83), TOBN(0xfb3261f4, 0xe4b63db7)},
-          {TOBN(0x53544960, 0xd883e544), TOBN(0x13520d70, 0x8cc2eeb8),
-           TOBN(0x08f6337b, 0xd3d65f99), TOBN(0x83997db2, 0x781cf95b)}},
-         {{TOBN(0xce6ff106, 0x0dbd2c01), TOBN(0x4f8eea6b, 0x1f9ce934),
-           TOBN(0x546f7c4b, 0x0e993921), TOBN(0x6236a324, 0x5e753fc7)},
-          {TOBN(0x65a41f84, 0xa16022e9), TOBN(0x0c18d878, 0x43d1dbb2),
-           TOBN(0x73c55640, 0x2d4cef9c), TOBN(0xa0428108, 0x70444c74)}},
-         {{TOBN(0x68e4f15e, 0x9afdfb3c), TOBN(0x49a56143, 0x5bdfb6df),
-           TOBN(0xa9bc1bd4, 0x5f823d97), TOBN(0xbceb5970, 0xea111c2a)},
-          {TOBN(0x366b455f, 0xb269bbc4), TOBN(0x7cd85e1e, 0xe9bc5d62),
-           TOBN(0xc743c41c, 0x4f18b086), TOBN(0xa4b40990, 0x95294fb9)}},
-         {{TOBN(0x9c7c581d, 0x26ee8382), TOBN(0xcf17dcc5, 0x359d638e),
-           TOBN(0xee8273ab, 0xb728ae3d), TOBN(0x1d112926, 0xf821f047)},
-          {TOBN(0x11498477, 0x50491a74), TOBN(0x687fa761, 0xfde0dfb9),
-           TOBN(0x2c258022, 0x7ea435ab), TOBN(0x6b8bdb94, 0x91ce7e3f)}},
-         {{TOBN(0x4c5b5dc9, 0x3bf834aa), TOBN(0x04371819, 0x4f6c7e4b),
-           TOBN(0xc284e00a, 0x3736bcad), TOBN(0x0d881118, 0x21ae8f8d)},
-          {TOBN(0xf9cf0f82, 0xf48c8e33), TOBN(0xa11fd075, 0xa1bf40db),
-           TOBN(0xdceab0de, 0xdc2733e5), TOBN(0xc560a8b5, 0x8e986bd7)}},
-         {{TOBN(0x48dd1fe2, 0x3929d097), TOBN(0x3885b290, 0x92f188f1),
-           TOBN(0x0f2ae613, 0xda6fcdac), TOBN(0x9054303e, 0xb662a46c)},
-          {TOBN(0xb6871e44, 0x0738042a), TOBN(0x98e6a977, 0xbdaf6449),
-           TOBN(0xd8bc0650, 0xd1c9df1b), TOBN(0xef3d6451, 0x36e098f9)}},
-         {{TOBN(0x03fbae82, 0xb6d72d28), TOBN(0x77ca9db1, 0xf5d84080),
-           TOBN(0x8a112cff, 0xa58efc1c), TOBN(0x518d761c, 0xc564cb4a)},
-          {TOBN(0x69b5740e, 0xf0d1b5ce), TOBN(0x717039cc, 0xe9eb1785),
-           TOBN(0x3fe29f90, 0x22f53382), TOBN(0x8e54ba56, 0x6bc7c95c)}},
-         {{TOBN(0x9c806d8a, 0xf7f91d0f), TOBN(0x3b61b0f1, 0xa82a5728),
-           TOBN(0x4640032d, 0x94d76754), TOBN(0x273eb5de, 0x47d834c6)},
-          {TOBN(0x2988abf7, 0x7b4e4d53), TOBN(0xb7ce66bf, 0xde401777),
-           TOBN(0x9fba6b32, 0x715071b3), TOBN(0x82413c24, 0xad3a1a98)}},
-         {{TOBN(0x5b7fc8c4, 0xe0e8ad93), TOBN(0xb5679aee, 0x5fab868d),
-           TOBN(0xb1f9d2fa, 0x2b3946f3), TOBN(0x458897dc, 0x5685b50a)},
-          {TOBN(0x1e98c930, 0x89d0caf3), TOBN(0x39564c5f, 0x78642e92),
-           TOBN(0x1b77729a, 0x0dbdaf18), TOBN(0xf9170722, 0x579e82e6)}},
-         {{TOBN(0x680c0317, 0xe4515fa5), TOBN(0xf85cff84, 0xfb0c790f),
-           TOBN(0xc7a82aab, 0x6d2e0765), TOBN(0x7446bca9, 0x35c82b32)},
-          {TOBN(0x5de607aa, 0x6d63184f), TOBN(0x7c1a46a8, 0x262803a6),
-           TOBN(0xd218313d, 0xaebe8035), TOBN(0x92113ffd, 0xc73c51f8)}},
-         {{TOBN(0x4b38e083, 0x12e7e46c), TOBN(0x69d0a37a, 0x56126bd5),
-           TOBN(0xfb3f324b, 0x73c07e04), TOBN(0xa0c22f67, 0x8fda7267)},
-          {TOBN(0x8f2c0051, 0x4d2c7d8f), TOBN(0xbc45ced3, 0xcbe2cae5),
-           TOBN(0xe1c6cf07, 0xa8f0f277), TOBN(0xbc392312, 0x1eb99a98)}},
-         {{TOBN(0x75537b7e, 0x3cc8ac85), TOBN(0x8d725f57, 0xdd02753b),
-           TOBN(0xfd05ff64, 0xb737df2f), TOBN(0x55fe8712, 0xf6d2531d)},
-          {TOBN(0x57ce04a9, 0x6ab6b01c), TOBN(0x69a02a89, 0x7cd93724),
-           TOBN(0x4f82ac35, 0xcf86699b), TOBN(0x8242d3ad, 0x9cb4b232)}},
-         {{TOBN(0x713d0f65, 0xd62105e5), TOBN(0xbb222bfa, 0x2d29be61),
-           TOBN(0xf2f9a79e, 0x6cfbef09), TOBN(0xfc24d8d3, 0xd5d6782f)},
-          {TOBN(0x5db77085, 0xd4129967), TOBN(0xdb81c3cc, 0xdc3c2a43),
-           TOBN(0x9d655fc0, 0x05d8d9a3), TOBN(0x3f5d057a, 0x54298026)}},
-         {{TOBN(0x1157f56d, 0x88c54694), TOBN(0xb26baba5, 0x9b09573e),
-           TOBN(0x2cab03b0, 0x22adffd1), TOBN(0x60a412c8, 0xdd69f383)},
-          {TOBN(0xed76e98b, 0x54b25039), TOBN(0xd4ee67d3, 0x687e714d),
-           TOBN(0x87739648, 0x7b00b594), TOBN(0xce419775, 0xc9ef709b)}},
-         {{TOBN(0x40f76f85, 0x1c203a40), TOBN(0x30d352d6, 0xeafd8f91),
-           TOBN(0xaf196d3d, 0x95578dd2), TOBN(0xea4bb3d7, 0x77cc3f3d)},
-          {TOBN(0x42a5bd03, 0xb98e782b), TOBN(0xac958c40, 0x0624920d),
-           TOBN(0xb838134c, 0xfc56fcc8), TOBN(0x86ec4ccf, 0x89572e5e)}},
-         {{TOBN(0x69c43526, 0x9be47be0), TOBN(0x323b7dd8, 0xcb28fea1),
-           TOBN(0xfa5538ba, 0x3a6c67e5), TOBN(0xef921d70, 0x1d378e46)},
-          {TOBN(0xf92961fc, 0x3c4b880e), TOBN(0x3f6f914e, 0x98940a67),
-           TOBN(0xa990eb0a, 0xfef0ff39), TOBN(0xa6c2920f, 0xf0eeff9c)}},
-         {{TOBN(0xca804166, 0x51b8d9a3), TOBN(0x42531bc9, 0x0ffb0db1),
-           TOBN(0x72ce4718, 0xaa82e7ce), TOBN(0x6e199913, 0xdf574741)},
-          {TOBN(0xd5f1b13d, 0xd5d36946), TOBN(0x8255dc65, 0xf68f0194),
-           TOBN(0xdc9df4cd, 0x8710d230), TOBN(0x3453c20f, 0x138c1988)}},
-         {{TOBN(0x9af98dc0, 0x89a6ef01), TOBN(0x4dbcc3f0, 0x9857df85),
-           TOBN(0x34805601, 0x5c1ad924), TOBN(0x40448da5, 0xd0493046)},
-          {TOBN(0xf629926d, 0x4ee343e2), TOBN(0x6343f1bd, 0x90e8a301),
-           TOBN(0xefc93491, 0x40815b3f), TOBN(0xf882a423, 0xde8f66fb)}},
-         {{TOBN(0x3a12d5f4, 0xe7db9f57), TOBN(0x7dfba38a, 0x3c384c27),
-           TOBN(0x7a904bfd, 0x6fc660b1), TOBN(0xeb6c5db3, 0x2773b21c)},
-          {TOBN(0xc350ee66, 0x1cdfe049), TOBN(0x9baac0ce, 0x44540f29),
-           TOBN(0xbc57b6ab, 0xa5ec6aad), TOBN(0x167ce8c3, 0x0a7c1baa)}},
-         {{TOBN(0xb23a03a5, 0x53fb2b56), TOBN(0x6ce141e7, 0x4e057f78),
-           TOBN(0x796525c3, 0x89e490d9), TOBN(0x0bc95725, 0xa31a7e75)},
-          {TOBN(0x1ec56791, 0x1220fd06), TOBN(0x716e3a3c, 0x408b0bd6),
-           TOBN(0x31cd6bf7, 0xe8ebeba9), TOBN(0xa7326ca6, 0xbee6b670)}},
-         {{TOBN(0x3d9f851c, 0xcd090c43), TOBN(0x561e8f13, 0xf12c3988),
-           TOBN(0x50490b6a, 0x904b7be4), TOBN(0x61690ce1, 0x0410737b)},
-          {TOBN(0x299e9a37, 0x0f009052), TOBN(0x258758f0, 0xf026092e),
-           TOBN(0x9fa255f3, 0xfdfcdc0f), TOBN(0xdbc9fb1f, 0xc0e1bcd2)}},
-         {{TOBN(0x35f9dd6e, 0x24651840), TOBN(0xdca45a84, 0xa5c59abc),
-           TOBN(0x103d396f, 0xecca4938), TOBN(0x4532da0a, 0xb97b3f29)},
-          {TOBN(0xc4135ea5, 0x1999a6bf), TOBN(0x3aa9505a, 0x5e6bf2ee),
-           TOBN(0xf77cef06, 0x3f5be093), TOBN(0x97d1a0f8, 0xa943152e)}},
-         {{TOBN(0x2cb0ebba, 0x2e1c21dd), TOBN(0xf41b29fc, 0x2c6797c4),
-           TOBN(0xc6e17321, 0xb300101f), TOBN(0x4422b0e9, 0xd0d79a89)},
-          {TOBN(0x49e4901c, 0x92f1bfc4), TOBN(0x06ab1f8f, 0xe1e10ed9),
-           TOBN(0x84d35577, 0xdb2926b8), TOBN(0xca349d39, 0x356e8ec2)}},
-         {{TOBN(0x70b63d32, 0x343bf1a9), TOBN(0x8fd3bd28, 0x37d1a6b1),
-           TOBN(0x0454879c, 0x316865b4), TOBN(0xee959ff6, 0xc458efa2)},
-          {TOBN(0x0461dcf8, 0x9706dc3f), TOBN(0x737db0e2, 0x164e4b2e),
-           TOBN(0x09262680, 0x2f8843c8), TOBN(0x54498bbc, 0x7745e6f6)}},
-         {{TOBN(0x359473fa, 0xa29e24af), TOBN(0xfcc3c454, 0x70aa87a1),
-           TOBN(0xfd2c4bf5, 0x00573ace), TOBN(0xb65b514e, 0x28dd1965)},
-          {TOBN(0xe46ae7cf, 0x2193e393), TOBN(0x60e9a4e1, 0xf5444d97),
-           TOBN(0xe7594e96, 0x00ff38ed), TOBN(0x43d84d2f, 0x0a0e0f02)}},
-         {{TOBN(0x8b6db141, 0xee398a21), TOBN(0xb88a56ae, 0xe3bcc5be),
-           TOBN(0x0a1aa52f, 0x373460ea), TOBN(0x20da1a56, 0x160bb19b)},
-          {TOBN(0xfb54999d, 0x65bf0384), TOBN(0x71a14d24, 0x5d5a180e),
-           TOBN(0xbc44db7b, 0x21737b04), TOBN(0xd84fcb18, 0x01dd8e92)}},
-         {{TOBN(0x80de937b, 0xfa44b479), TOBN(0x53505499, 0x5c98fd4f),
-           TOBN(0x1edb12ab, 0x28f08727), TOBN(0x4c58b582, 0xa5f3ef53)},
-          {TOBN(0xbfb236d8, 0x8327f246), TOBN(0xc3a3bfaa, 0x4d7df320),
-           TOBN(0xecd96c59, 0xb96024f2), TOBN(0xfc293a53, 0x7f4e0433)}},
-         {{TOBN(0x5341352b, 0x5acf6e10), TOBN(0xc50343fd, 0xafe652c3),
-           TOBN(0x4af3792d, 0x18577a7f), TOBN(0xe1a4c617, 0xaf16823d)},
-          {TOBN(0x9b26d0cd, 0x33425d0a), TOBN(0x306399ed, 0x9b7bc47f),
-           TOBN(0x2a792f33, 0x706bb20b), TOBN(0x31219614, 0x98111055)}},
-         {{TOBN(0x864ec064, 0x87f5d28b), TOBN(0x11392d91, 0x962277fd),
-           TOBN(0xb5aa7942, 0xbb6aed5f), TOBN(0x080094dc, 0x47e799d9)},
-          {TOBN(0x4afa588c, 0x208ba19b), TOBN(0xd3e7570f, 0x8512f284),
-           TOBN(0xcbae64e6, 0x02f5799a), TOBN(0xdeebe7ef, 0x514b9492)}},
-         {{TOBN(0x30300f98, 0xe5c298ff), TOBN(0x17f561be, 0x3678361f),
-           TOBN(0xf52ff312, 0x98cb9a16), TOBN(0x6233c3bc, 0x5562d490)},
-          {TOBN(0x7bfa15a1, 0x92e3a2cb), TOBN(0x961bcfd1, 0xe6365119),
-           TOBN(0x3bdd29bf, 0x2c8c53b1), TOBN(0x739704df, 0x822844ba)}},
-         {{TOBN(0x7dacfb58, 0x7e7b754b), TOBN(0x23360791, 0xa806c9b9),
-           TOBN(0xe7eb88c9, 0x23504452), TOBN(0x2983e996, 0x852c1783)},
-          {TOBN(0xdd4ae529, 0x958d881d), TOBN(0x026bae03, 0x262c7b3c),
-           TOBN(0x3a6f9193, 0x960b52d1), TOBN(0xd0980f90, 0x92696cfb)}},
-         {{TOBN(0x4c1f428c, 0xd5f30851), TOBN(0x94dfed27, 0x2a4f6630),
-           TOBN(0x4df53772, 0xfc5d48a4), TOBN(0xdd2d5a2f, 0x933260ce)},
-          {TOBN(0x574115bd, 0xd44cc7a5), TOBN(0x4ba6b20d, 0xbd12533a),
-           TOBN(0x30e93cb8, 0x243057c9), TOBN(0x794c486a, 0x14de320e)}},
-         {{TOBN(0xe925d4ce, 0xf21496e4), TOBN(0xf951d198, 0xec696331),
-           TOBN(0x9810e2de, 0x3e8d812f), TOBN(0xd0a47259, 0x389294ab)},
-          {TOBN(0x513ba2b5, 0x0e3bab66), TOBN(0x462caff5, 0xabad306f),
-           TOBN(0xe2dc6d59, 0xaf04c49e), TOBN(0x1aeb8750, 0xe0b84b0b)}},
-         {{TOBN(0xc034f12f, 0x2f7d0ca2), TOBN(0x6d2e8128, 0xe06acf2f),
-           TOBN(0x801f4f83, 0x21facc2f), TOBN(0xa1170c03, 0xf40ef607)},
-          {TOBN(0xfe0a1d4f, 0x7805a99c), TOBN(0xbde56a36, 0xcc26aba5),
-           TOBN(0x5b1629d0, 0x35531f40), TOBN(0xac212c2b, 0x9afa6108)}},
-         {{TOBN(0x30a06bf3, 0x15697be5), TOBN(0x6f0545dc, 0x2c63c7c1),
-           TOBN(0x5d8cb842, 0x7ccdadaf), TOBN(0xd52e379b, 0xac7015bb)},
-          {TOBN(0xc4f56147, 0xf462c23e), TOBN(0xd44a4298, 0x46bc24b0),
-           TOBN(0xbc73d23a, 0xe2856d4f), TOBN(0x61cedd8c, 0x0832bcdf)}},
-         {{TOBN(0x60953556, 0x99f241d7), TOBN(0xee4adbd7, 0x001a349d),
-           TOBN(0x0b35bf6a, 0xaa89e491), TOBN(0x7f0076f4, 0x136f7546)},
-          {TOBN(0xd19a18ba, 0x9264da3d), TOBN(0x6eb2d2cd, 0x62a7a28b),
-           TOBN(0xcdba941f, 0x8761c971), TOBN(0x1550518b, 0xa3be4a5d)}},
-         {{TOBN(0xd0e8e2f0, 0x57d0b70c), TOBN(0xeea8612e, 0xcd133ba3),
-           TOBN(0x814670f0, 0x44416aec), TOBN(0x424db6c3, 0x30775061)},
-          {TOBN(0xd96039d1, 0x16213fd1), TOBN(0xc61e7fa5, 0x18a3478f),
-           TOBN(0xa805bdcc, 0xcb0c5021), TOBN(0xbdd6f3a8, 0x0cc616dd)}},
-         {{TOBN(0x06009667, 0x5d97f7e2), TOBN(0x31db0fc1, 0xaf0bf4b6),
-           TOBN(0x23680ed4, 0x5491627a), TOBN(0xb99a3c66, 0x7d741fb1)},
-          {TOBN(0xe9bb5f55, 0x36b1ff92), TOBN(0x29738577, 0x512b388d),
-           TOBN(0xdb8a2ce7, 0x50fcf263), TOBN(0x385346d4, 0x6c4f7b47)}},
-         {{TOBN(0xbe86c5ef, 0x31631f9e), TOBN(0xbf91da21, 0x03a57a29),
-           TOBN(0xc3b1f796, 0x7b23f821), TOBN(0x0f7d00d2, 0x770db354)},
-          {TOBN(0x8ffc6c3b, 0xd8fe79da), TOBN(0xcc5e8c40, 0xd525c996),
-           TOBN(0x4640991d, 0xcfff632a), TOBN(0x64d97e8c, 0x67112528)}},
-         {{TOBN(0xc232d973, 0x02f1cd1e), TOBN(0xce87eacb, 0x1dd212a4),
-           TOBN(0x6e4c8c73, 0xe69802f7), TOBN(0x12ef0290, 0x1fffddbd)},
-          {TOBN(0x941ec74e, 0x1bcea6e2), TOBN(0xd0b54024, 0x3cb92cbb),
-           TOBN(0x809fb9d4, 0x7e8f9d05), TOBN(0x3bf16159, 0xf2992aae)}},
-         {{TOBN(0xad40f279, 0xf8a7a838), TOBN(0x11aea631, 0x05615660),
-           TOBN(0xbf52e6f1, 0xa01f6fa1), TOBN(0xef046995, 0x3dc2aec9)},
-          {TOBN(0x785dbec9, 0xd8080711), TOBN(0xe1aec60a, 0x9fdedf76),
-           TOBN(0xece797b5, 0xfa21c126), TOBN(0xc66e898f, 0x05e52732)}},
-         {{TOBN(0x39bb69c4, 0x08811fdb), TOBN(0x8bfe1ef8, 0x2fc7f082),
-           TOBN(0xc8e7a393, 0x174f4138), TOBN(0xfba8ad1d, 0xd58d1f98)},
-          {TOBN(0xbc21d0ce, 0xbfd2fd5b), TOBN(0x0b839a82, 0x6ee60d61),
-           TOBN(0xaacf7658, 0xafd22253), TOBN(0xb526bed8, 0xaae396b3)}},
-         {{TOBN(0xccc1bbc2, 0x38564464), TOBN(0x9e3ff947, 0x8c45bc73),
-           TOBN(0xcde9bca3, 0x58188a78), TOBN(0x138b8ee0, 0xd73bf8f7)},
-          {TOBN(0x5c7e234c, 0x4123c489), TOBN(0x66e69368, 0xfa643297),
-           TOBN(0x0629eeee, 0x39a15fa3), TOBN(0x95fab881, 0xa9e2a927)}},
-         {{TOBN(0xb2497007, 0xeafbb1e1), TOBN(0xd75c9ce6, 0xe75b7a93),
-           TOBN(0x3558352d, 0xefb68d78), TOBN(0xa2f26699, 0x223f6396)},
-          {TOBN(0xeb911ecf, 0xe469b17a), TOBN(0x62545779, 0xe72d3ec2),
-           TOBN(0x8ea47de7, 0x82cb113f), TOBN(0xebe4b086, 0x4e1fa98d)}},
-         {{TOBN(0xec2d5ed7, 0x8cdfedb1), TOBN(0xa535c077, 0xfe211a74),
-           TOBN(0x9678109b, 0x11d244c5), TOBN(0xf17c8bfb, 0xbe299a76)},
-          {TOBN(0xb651412e, 0xfb11fbc4), TOBN(0xea0b5482, 0x94ab3f65),
-           TOBN(0xd8dffd95, 0x0cf78243), TOBN(0x2e719e57, 0xce0361d4)}},
-         {{TOBN(0x9007f085, 0x304ddc5b), TOBN(0x095e8c6d, 0x4daba2ea),
-           TOBN(0x5a33cdb4, 0x3f9d28a9), TOBN(0x85b95cd8, 0xe2283003)},
-          {TOBN(0xbcd6c819, 0xb9744733), TOBN(0x29c5f538, 0xfc7f5783),
-           TOBN(0x6c49b2fa, 0xd59038e4), TOBN(0x68349cc1, 0x3bbe1018)}},
-         {{TOBN(0xcc490c1d, 0x21830ee5), TOBN(0x36f9c4ee, 0xe9bfa297),
-           TOBN(0x58fd7294, 0x48de1a94), TOBN(0xaadb13a8, 0x4e8f2cdc)},
-          {TOBN(0x515eaaa0, 0x81313dba), TOBN(0xc76bb468, 0xc2152dd8),
-           TOBN(0x357f8d75, 0xa653dbf8), TOBN(0xe4d8c4d1, 0xb14ac143)}},
-         {{TOBN(0xbdb8e675, 0xb055cb40), TOBN(0x898f8e7b, 0x977b5167),
-           TOBN(0xecc65651, 0xb82fb863), TOBN(0x56544814, 0x6d88f01f)},
-          {TOBN(0xb0928e95, 0x263a75a9), TOBN(0xcfb6836f, 0x1a22fcda),
-           TOBN(0x651d14db, 0x3f3bd37c), TOBN(0x1d3837fb, 0xb6ad4664)}},
-         {{TOBN(0x7c5fb538, 0xff4f94ab), TOBN(0x7243c712, 0x6d7fb8f2),
-           TOBN(0xef13d60c, 0xa85c5287), TOBN(0x18cfb7c7, 0x4bb8dd1b)},
-          {TOBN(0x82f9bfe6, 0x72908219), TOBN(0x35c4592b, 0x9d5144ab),
-           TOBN(0x52734f37, 0x9cf4b42f), TOBN(0x6bac55e7, 0x8c60ddc4)}},
-         {{TOBN(0xb5cd811e, 0x94dea0f6), TOBN(0x259ecae4, 0xe18cc1a3),
-           TOBN(0x6a0e836e, 0x15e660f8), TOBN(0x6c639ea6, 0x0e02bff2)},
-          {TOBN(0x8721b8cb, 0x7e1026fd), TOBN(0x9e73b50b, 0x63261942),
-           TOBN(0xb8c70974, 0x77f01da3), TOBN(0x1839e6a6, 0x8268f57f)}},
-         {{TOBN(0x571b9415, 0x5150b805), TOBN(0x1892389e, 0xf92c7097),
-           TOBN(0x8d69c18e, 0x4a084b95), TOBN(0x7014c512, 0xbe5b495c)},
-          {TOBN(0x4780db36, 0x1b07523c), TOBN(0x2f6219ce, 0x2c1c64fa),
-           TOBN(0xc38b81b0, 0x602c105a), TOBN(0xab4f4f20, 0x5dc8e360)}},
-         {{TOBN(0x20d3c982, 0xcf7d62d2), TOBN(0x1f36e29d, 0x23ba8150),
-           TOBN(0x48ae0bf0, 0x92763f9e), TOBN(0x7a527e6b, 0x1d3a7007)},
-          {TOBN(0xb4a89097, 0x581a85e3), TOBN(0x1f1a520f, 0xdc158be5),
-           TOBN(0xf98db37d, 0x167d726e), TOBN(0x8802786e, 0x1113e862)}}},
-        {{{TOBN(0xefb2149e, 0x36f09ab0), TOBN(0x03f163ca, 0x4a10bb5b),
-           TOBN(0xd0297045, 0x06e20998), TOBN(0x56f0af00, 0x1b5a3bab)},
-          {TOBN(0x7af4cfec, 0x70880e0d), TOBN(0x7332a66f, 0xbe3d913f),
-           TOBN(0x32e6c84a, 0x7eceb4bd), TOBN(0xedc4a79a, 0x9c228f55)}},
-         {{TOBN(0xc37c7dd0, 0xc55c4496), TOBN(0xa6a96357, 0x25bbabd2),
-           TOBN(0x5b7e63f2, 0xadd7f363), TOBN(0x9dce3782, 0x2e73f1df)},
-          {TOBN(0xe1e5a16a, 0xb2b91f71), TOBN(0xe4489823, 0x5ba0163c),
-           TOBN(0xf2759c32, 0xf6e515ad), TOBN(0xa5e2f1f8, 0x8615eecf)}},
-         {{TOBN(0x74519be7, 0xabded551), TOBN(0x03d358b8, 0xc8b74410),
-           TOBN(0x4d00b10b, 0x0e10d9a9), TOBN(0x6392b0b1, 0x28da52b7)},
-          {TOBN(0x6744a298, 0x0b75c904), TOBN(0xc305b0ae, 0xa8f7f96c),
-           TOBN(0x042e421d, 0x182cf932), TOBN(0xf6fc5d50, 0x9e4636ca)}},
-         {{TOBN(0x795847c9, 0xd64cc78c), TOBN(0x6c50621b, 0x9b6cb27b),
-           TOBN(0x07099bf8, 0xdf8022ab), TOBN(0x48f862eb, 0xc04eda1d)},
-          {TOBN(0xd12732ed, 0xe1603c16), TOBN(0x19a80e0f, 0x5c9a9450),
-           TOBN(0xe2257f54, 0xb429b4fc), TOBN(0x66d3b2c6, 0x45460515)}},
-         {{TOBN(0x6ca4f87e, 0x822e37be), TOBN(0x73f237b4, 0x253bda4e),
-           TOBN(0xf747f3a2, 0x41190aeb), TOBN(0xf06fa36f, 0x804cf284)},
-          {TOBN(0x0a6bbb6e, 0xfc621c12), TOBN(0x5d624b64, 0x40b80ec6),
-           TOBN(0x4b072425, 0x7ba556f3), TOBN(0x7fa0c354, 0x3e2d20a8)}},
-         {{TOBN(0xe921fa31, 0xe3229d41), TOBN(0xa929c652, 0x94531bd4),
-           TOBN(0x84156027, 0xa6d38209), TOBN(0xf3d69f73, 0x6bdb97bd)},
-          {TOBN(0x8906d19a, 0x16833631), TOBN(0x68a34c2e, 0x03d51be3),
-           TOBN(0xcb59583b, 0x0e511cd8), TOBN(0x99ce6bfd, 0xfdc132a8)}},
-         {{TOBN(0x3facdaaa, 0xffcdb463), TOBN(0x658bbc1a, 0x34a38b08),
-           TOBN(0x12a801f8, 0xf1a9078d), TOBN(0x1567bcf9, 0x6ab855de)},
-          {TOBN(0xe08498e0, 0x3572359b), TOBN(0xcf0353e5, 0x8659e68b),
-           TOBN(0xbb86e9c8, 0x7d23807c), TOBN(0xbc08728d, 0x2198e8a2)}},
-         {{TOBN(0x8de2b7bc, 0x453cadd6), TOBN(0x203900a7, 0xbc0bc1f8),
-           TOBN(0xbcd86e47, 0xa6abd3af), TOBN(0x911cac12, 0x8502effb)},
-          {TOBN(0x2d550242, 0xec965469), TOBN(0x0e9f7692, 0x29e0017e),
-           TOBN(0x633f078f, 0x65979885), TOBN(0xfb87d449, 0x4cf751ef)}},
-         {{TOBN(0xe1790e4b, 0xfc25419a), TOBN(0x36467203, 0x4bff3cfd),
-           TOBN(0xc8db6386, 0x25b6e83f), TOBN(0x6cc69f23, 0x6cad6fd2)},
-          {TOBN(0x0219e45a, 0x6bc68bb9), TOBN(0xe43d79b6, 0x297f7334),
-           TOBN(0x7d445368, 0x465dc97c), TOBN(0x4b9eea32, 0x2a0b949a)}},
-         {{TOBN(0x1b96c6ba, 0x6102d021), TOBN(0xeaafac78, 0x2f4461ea),
-           TOBN(0xd4b85c41, 0xc49f19a8), TOBN(0x275c28e4, 0xcf538875)},
-          {TOBN(0x35451a9d, 0xdd2e54e0), TOBN(0x6991adb5, 0x0605618b),
-           TOBN(0x5b8b4bcd, 0x7b36cd24), TOBN(0x372a4f8c, 0x56f37216)}},
-         {{TOBN(0xc890bd73, 0xa6a5da60), TOBN(0x6f083da0, 0xdc4c9ff0),
-           TOBN(0xf4e14d94, 0xf0536e57), TOBN(0xf9ee1eda, 0xaaec8243)},
-          {TOBN(0x571241ec, 0x8bdcf8e7), TOBN(0xa5db8271, 0x0b041e26),
-           TOBN(0x9a0b9a99, 0xe3fff040), TOBN(0xcaaf21dd, 0x7c271202)}},
-         {{TOBN(0xb4e2b2e1, 0x4f0dd2e8), TOBN(0xe77e7c4f, 0x0a377ac7),
-           TOBN(0x69202c3f, 0x0d7a2198), TOBN(0xf759b7ff, 0x28200eb8)},
-          {TOBN(0xc87526ed, 0xdcfe314e), TOBN(0xeb84c524, 0x53d5cf99),
-           TOBN(0xb1b52ace, 0x515138b6), TOBN(0x5aa7ff8c, 0x23fca3f4)}},
-         {{TOBN(0xff0b13c3, 0xb9791a26), TOBN(0x960022da, 0xcdd58b16),
-           TOBN(0xdbd55c92, 0x57aad2de), TOBN(0x3baaaaa3, 0xf30fe619)},
-          {TOBN(0x9a4b2346, 0x0d881efd), TOBN(0x506416c0, 0x46325e2a),
-           TOBN(0x91381e76, 0x035c18d4), TOBN(0xb3bb68be, 0xf27817b0)}},
-         {{TOBN(0x15bfb8bf, 0x5116f937), TOBN(0x7c64a586, 0xc1268943),
-           TOBN(0x71e25cc3, 0x8419a2c8), TOBN(0x9fd6b0c4, 0x8335f463)},
-          {TOBN(0x4bf0ba3c, 0xe8ee0e0e), TOBN(0x6f6fba60, 0x298c21fa),
-           TOBN(0x57d57b39, 0xae66bee0), TOBN(0x292d5130, 0x22672544)}},
-         {{TOBN(0xf451105d, 0xbab093b3), TOBN(0x012f59b9, 0x02839986),
-           TOBN(0x8a915802, 0x3474a89c), TOBN(0x048c919c, 0x2de03e97)},
-          {TOBN(0xc476a2b5, 0x91071cd5), TOBN(0x791ed89a, 0x034970a5),
-           TOBN(0x89bd9042, 0xe1b7994b), TOBN(0x8eaf5179, 0xa1057ffd)}},
-         {{TOBN(0x6066e2a2, 0xd551ee10), TOBN(0x87a8f1d8, 0x727e09a6),
-           TOBN(0x00d08bab, 0x2c01148d), TOBN(0x6da8e4f1, 0x424f33fe)},
-          {TOBN(0x466d17f0, 0xcf9a4e71), TOBN(0xff502010, 0x3bf5cb19),
-           TOBN(0xdccf97d8, 0xd062ecc0), TOBN(0x80c0d9af, 0x81d80ac4)}},
-         {{TOBN(0xe87771d8, 0x033f2876), TOBN(0xb0186ec6, 0x7d5cc3db),
-           TOBN(0x58e8bb80, 0x3bc9bc1d), TOBN(0x4d1395cc, 0x6f6ef60e)},
-          {TOBN(0xa73c62d6, 0x186244a0), TOBN(0x918e5f23, 0x110a5b53),
-           TOBN(0xed4878ca, 0x741b7eab), TOBN(0x3038d71a, 0xdbe03e51)}},
-         {{TOBN(0x840204b7, 0xa93c3246), TOBN(0x21ab6069, 0xa0b9b4cd),
-           TOBN(0xf5fa6e2b, 0xb1d64218), TOBN(0x1de6ad0e, 0xf3d56191)},
-          {TOBN(0x570aaa88, 0xff1929c7), TOBN(0xc6df4c6b, 0x640e87b5),
-           TOBN(0xde8a74f2, 0xc65f0ccc), TOBN(0x8b972fd5, 0xe6f6cc01)}},
-         {{TOBN(0x3fff36b6, 0x0b846531), TOBN(0xba7e45e6, 0x10a5e475),
-           TOBN(0x84a1d10e, 0x4145b6c5), TOBN(0xf1f7f91a, 0x5e046d9d)},
-          {TOBN(0x0317a692, 0x44de90d7), TOBN(0x951a1d4a, 0xf199c15e),
-           TOBN(0x91f78046, 0xc9d73deb), TOBN(0x74c82828, 0xfab8224f)}},
-         {{TOBN(0xaa6778fc, 0xe7560b90), TOBN(0xb4073e61, 0xa7e824ce),
-           TOBN(0xff0d693c, 0xd642eba8), TOBN(0x7ce2e57a, 0x5dccef38)},
-          {TOBN(0x89c2c789, 0x1df1ad46), TOBN(0x83a06922, 0x098346fd),
-           TOBN(0x2d715d72, 0xda2fc177), TOBN(0x7b6dd71d, 0x85b6cf1d)}},
-         {{TOBN(0xc60a6d0a, 0x73fa9cb0), TOBN(0xedd3992e, 0x328bf5a9),
-           TOBN(0xc380ddd0, 0x832c8c82), TOBN(0xd182d410, 0xa2a0bf50)},
-          {TOBN(0x7d9d7438, 0xd9a528db), TOBN(0xe8b1a0e9, 0xcaf53994),
-           TOBN(0xddd6e5fe, 0x0e19987c), TOBN(0xacb8df03, 0x190b059d)}},
-         {{TOBN(0x53703a32, 0x8300129f), TOBN(0x1f637662, 0x68c43bfd),
-           TOBN(0xbcbd1913, 0x00e54051), TOBN(0x812fcc62, 0x7bf5a8c5)},
-          {TOBN(0x3f969d5f, 0x29fb85da), TOBN(0x72f4e00a, 0x694759e8),
-           TOBN(0x426b6e52, 0x790726b7), TOBN(0x617bbc87, 0x3bdbb209)}},
-         {{TOBN(0x511f8bb9, 0x97aee317), TOBN(0x812a4096, 0xe81536a8),
-           TOBN(0x137dfe59, 0x3ac09b9b), TOBN(0x0682238f, 0xba8c9a7a)},
-          {TOBN(0x7072ead6, 0xaeccb4bd), TOBN(0x6a34e9aa, 0x692ba633),
-           TOBN(0xc82eaec2, 0x6fff9d33), TOBN(0xfb753512, 0x1d4d2b62)}},
-         {{TOBN(0x1a0445ff, 0x1d7aadab), TOBN(0x65d38260, 0xd5f6a67c),
-           TOBN(0x6e62fb08, 0x91cfb26f), TOBN(0xef1e0fa5, 0x5c7d91d6)},
-          {TOBN(0x47e7c7ba, 0x33db72cd), TOBN(0x017cbc09, 0xfa7c74b2),
-           TOBN(0x3c931590, 0xf50a503c), TOBN(0xcac54f60, 0x616baa42)}},
-         {{TOBN(0x9b6cd380, 0xb2369f0f), TOBN(0x97d3a70d, 0x23c76151),
-           TOBN(0x5f9dd6fc, 0x9862a9c6), TOBN(0x044c4ab2, 0x12312f51)},
-          {TOBN(0x035ea0fd, 0x834a2ddc), TOBN(0x49e6b862, 0xcc7b826d),
-           TOBN(0xb03d6883, 0x62fce490), TOBN(0x62f2497a, 0xb37e36e9)}},
-         {{TOBN(0x04b005b6, 0xc6458293), TOBN(0x36bb5276, 0xe8d10af7),
-           TOBN(0xacf2dc13, 0x8ee617b8), TOBN(0x470d2d35, 0xb004b3d4)},
-          {TOBN(0x06790832, 0xfeeb1b77), TOBN(0x2bb75c39, 0x85657f9c),
-           TOBN(0xd70bd4ed, 0xc0f60004), TOBN(0xfe797ecc, 0x219b018b)}},
-         {{TOBN(0x9b5bec2a, 0x753aebcc), TOBN(0xdaf9f3dc, 0xc939eca5),
-           TOBN(0xd6bc6833, 0xd095ad09), TOBN(0x98abdd51, 0xdaa4d2fc)},
-          {TOBN(0xd9840a31, 0x8d168be5), TOBN(0xcf7c10e0, 0x2325a23c),
-           TOBN(0xa5c02aa0, 0x7e6ecfaf), TOBN(0x2462e7e6, 0xb5bfdf18)}},
-         {{TOBN(0xab2d8a8b, 0xa0cc3f12), TOBN(0x68dd485d, 0xbc672a29),
-           TOBN(0x72039752, 0x596f2cd3), TOBN(0x5d3eea67, 0xa0cf3d8d)},
-          {TOBN(0x810a1a81, 0xe6602671), TOBN(0x8f144a40, 0x14026c0c),
-           TOBN(0xbc753a6d, 0x76b50f85), TOBN(0xc4dc21e8, 0x645cd4a4)}},
-         {{TOBN(0xc5262dea, 0x521d0378), TOBN(0x802b8e0e, 0x05011c6f),
-           TOBN(0x1ba19cbb, 0x0b4c19ea), TOBN(0x21db64b5, 0xebf0aaec)},
-          {TOBN(0x1f394ee9, 0x70342f9d), TOBN(0x93a10aee, 0x1bc44a14),
-           TOBN(0xa7eed31b, 0x3efd0baa), TOBN(0x6e7c824e, 0x1d154e65)}},
-         {{TOBN(0xee23fa81, 0x9966e7ee), TOBN(0x64ec4aa8, 0x05b7920d),
-           TOBN(0x2d44462d, 0x2d90aad4), TOBN(0xf44dd195, 0xdf277ad5)},
-          {TOBN(0x8d6471f1, 0xbb46b6a1), TOBN(0x1e65d313, 0xfd885090),
-           TOBN(0x33a800f5, 0x13a977b4), TOBN(0xaca9d721, 0x0797e1ef)}},
-         {{TOBN(0x9a5a85a0, 0xfcff6a17), TOBN(0x9970a3f3, 0x1eca7cee),
-           TOBN(0xbb9f0d6b, 0xc9504be3), TOBN(0xe0c504be, 0xadd24ee2)},
-          {TOBN(0x7e09d956, 0x77fcc2f4), TOBN(0xef1a5227, 0x65bb5fc4),
-           TOBN(0x145d4fb1, 0x8b9286aa), TOBN(0x66fd0c5d, 0x6649028b)}},
-         {{TOBN(0x98857ceb, 0x1bf4581c), TOBN(0xe635e186, 0xaca7b166),
-           TOBN(0x278ddd22, 0x659722ac), TOBN(0xa0903c4c, 0x1db68007)},
-          {TOBN(0x366e4589, 0x48f21402), TOBN(0x31b49c14, 0xb96abda2),
-           TOBN(0x329c4b09, 0xe0403190), TOBN(0x97197ca3, 0xd29f43fe)}},
-         {{TOBN(0x8073dd1e, 0x274983d8), TOBN(0xda1a3bde, 0x55717c8f),
-           TOBN(0xfd3d4da2, 0x0361f9d1), TOBN(0x1332d081, 0x4c7de1ce)},
-          {TOBN(0x9b7ef7a3, 0xaa6d0e10), TOBN(0x17db2e73, 0xf54f1c4a),
-           TOBN(0xaf3dffae, 0x4cd35567), TOBN(0xaaa2f406, 0xe56f4e71)}},
-         {{TOBN(0x8966759e, 0x7ace3fc7), TOBN(0x9594eacf, 0x45a8d8c6),
-           TOBN(0x8de3bd8b, 0x91834e0e), TOBN(0xafe4ca53, 0x548c0421)},
-          {TOBN(0xfdd7e856, 0xe6ee81c6), TOBN(0x8f671beb, 0x6b891a3a),
-           TOBN(0xf7a58f2b, 0xfae63829), TOBN(0x9ab186fb, 0x9c11ac9f)}},
-         {{TOBN(0x8d6eb369, 0x10b5be76), TOBN(0x046b7739, 0xfb040bcd),
-           TOBN(0xccb4529f, 0xcb73de88), TOBN(0x1df0fefc, 0xcf26be03)},
-          {TOBN(0xad7757a6, 0xbcfcd027), TOBN(0xa8786c75, 0xbb3165ca),
-           TOBN(0xe9db1e34, 0x7e99a4d9), TOBN(0x99ee86df, 0xb06c504b)}},
-         {{TOBN(0x5b7c2ddd, 0xc15c9f0a), TOBN(0xdf87a734, 0x4295989e),
-           TOBN(0x59ece47c, 0x03d08fda), TOBN(0xb074d3dd, 0xad5fc702)},
-          {TOBN(0x20407903, 0x51a03776), TOBN(0x2bb1f77b, 0x2a608007),
-           TOBN(0x25c58f4f, 0xe1153185), TOBN(0xe6df62f6, 0x766e6447)}},
-         {{TOBN(0xefb3d1be, 0xed51275a), TOBN(0x5de47dc7, 0x2f0f483f),
-           TOBN(0x7932d98e, 0x97c2bedf), TOBN(0xd5c11927, 0x0219f8a1)},
-          {TOBN(0x9d751200, 0xa73a294e), TOBN(0x5f88434a, 0x9dc20172),
-           TOBN(0xd28d9fd3, 0xa26f506a), TOBN(0xa890cd31, 0x9d1dcd48)}},
-         {{TOBN(0x0aebaec1, 0x70f4d3b4), TOBN(0xfd1a1369, 0x0ffc8d00),
-           TOBN(0xb9d9c240, 0x57d57838), TOBN(0x45929d26, 0x68bac361)},
-          {TOBN(0x5a2cd060, 0x25b15ca6), TOBN(0x4b3c83e1, 0x6e474446),
-           TOBN(0x1aac7578, 0xee1e5134), TOBN(0xa418f5d6, 0xc91e2f41)}},
-         {{TOBN(0x6936fc8a, 0x213ed68b), TOBN(0x860ae7ed, 0x510a5224),
-           TOBN(0x63660335, 0xdef09b53), TOBN(0x641b2897, 0xcd79c98d)},
-          {TOBN(0x29bd38e1, 0x01110f35), TOBN(0x79c26f42, 0x648b1937),
-           TOBN(0x64dae519, 0x9d9164f4), TOBN(0xd85a2310, 0x0265c273)}},
-         {{TOBN(0x7173dd5d, 0x4b07e2b1), TOBN(0xd144c4cb, 0x8d9ea221),
-           TOBN(0xe8b04ea4, 0x1105ab14), TOBN(0x92dda542, 0xfe80d8f1)},
-          {TOBN(0xe9982fa8, 0xcf03dce6), TOBN(0x8b5ea965, 0x1a22cffc),
-           TOBN(0xf7f4ea7f, 0x3fad88c4), TOBN(0x62db773e, 0x6a5ba95c)}},
-         {{TOBN(0xd20f02fb, 0x93f24567), TOBN(0xfd46c69a, 0x315257ca),
-           TOBN(0x0ac74cc7, 0x8bcab987), TOBN(0x46f31c01, 0x5ceca2f5)},
-          {TOBN(0x40aedb59, 0x888b219e), TOBN(0xe50ecc37, 0xe1fccd02),
-           TOBN(0x1bcd9dad, 0x911f816c), TOBN(0x583cc1ec, 0x8db9b00c)}},
-         {{TOBN(0xf3cd2e66, 0xa483bf11), TOBN(0xfa08a6f5, 0xb1b2c169),
-           TOBN(0xf375e245, 0x4be9fa28), TOBN(0x99a7ffec, 0x5b6d011f)},
-          {TOBN(0x6a3ebddb, 0xc4ae62da), TOBN(0x6cea00ae, 0x374aef5d),
-           TOBN(0xab5fb98d, 0x9d4d05bc), TOBN(0x7cba1423, 0xd560f252)}},
-         {{TOBN(0x49b2cc21, 0x208490de), TOBN(0x1ca66ec3, 0xbcfb2879),
-           TOBN(0x7f1166b7, 0x1b6fb16f), TOBN(0xfff63e08, 0x65fe5db3)},
-          {TOBN(0xb8345abe, 0x8b2610be), TOBN(0xb732ed80, 0x39de3df4),
-           TOBN(0x0e24ed50, 0x211c32b4), TOBN(0xd10d8a69, 0x848ff27d)}},
-         {{TOBN(0xc1074398, 0xed4de248), TOBN(0xd7cedace, 0x10488927),
-           TOBN(0xa4aa6bf8, 0x85673e13), TOBN(0xb46bae91, 0x6daf30af)},
-          {TOBN(0x07088472, 0xfcef7ad8), TOBN(0x61151608, 0xd4b35e97),
-           TOBN(0xbcfe8f26, 0xdde29986), TOBN(0xeb84c4c7, 0xd5a34c79)}},
-         {{TOBN(0xc1eec55c, 0x164e1214), TOBN(0x891be86d, 0xa147bb03),
-           TOBN(0x9fab4d10, 0x0ba96835), TOBN(0xbf01e9b8, 0xa5c1ae9f)},
-          {TOBN(0x6b4de139, 0xb186ebc0), TOBN(0xd5c74c26, 0x85b91bca),
-           TOBN(0x5086a99c, 0xc2d93854), TOBN(0xeed62a7b, 0xa7a9dfbc)}},
-         {{TOBN(0x8778ed6f, 0x76b7618a), TOBN(0xbff750a5, 0x03b66062),
-           TOBN(0x4cb7be22, 0xb65186db), TOBN(0x369dfbf0, 0xcc3a6d13)},
-          {TOBN(0xc7dab26c, 0x7191a321), TOBN(0x9edac3f9, 0x40ed718e),
-           TOBN(0xbc142b36, 0xd0cfd183), TOBN(0xc8af82f6, 0x7c991693)}},
-         {{TOBN(0xb3d1e4d8, 0x97ce0b2a), TOBN(0xe6d7c87f, 0xc3a55cdf),
-           TOBN(0x35846b95, 0x68b81afe), TOBN(0x018d12af, 0xd3c239d8)},
-          {TOBN(0x2b2c6208, 0x01206e15), TOBN(0xe0e42453, 0xa3b882c6),
-           TOBN(0x854470a3, 0xa50162d5), TOBN(0x08157478, 0x7017a62a)}},
-         {{TOBN(0x18bd3fb4, 0x820357c7), TOBN(0x992039ae, 0x6f1458ad),
-           TOBN(0x9a1df3c5, 0x25b44aa1), TOBN(0x2d780357, 0xed3d5281)},
-          {TOBN(0x58cf7e4d, 0xc77ad4d4), TOBN(0xd49a7998, 0xf9df4fc4),
-           TOBN(0x4465a8b5, 0x1d71205e), TOBN(0xa0ee0ea6, 0x649254aa)}},
-         {{TOBN(0x4b5eeecf, 0xab7bd771), TOBN(0x6c873073, 0x35c262b9),
-           TOBN(0xdc5bd648, 0x3c9d61e7), TOBN(0x233d6d54, 0x321460d2)},
-          {TOBN(0xd20c5626, 0xfc195bcc), TOBN(0x25445958, 0x04d78b63),
-           TOBN(0xe03fcb3d, 0x17ec8ef3), TOBN(0x54b690d1, 0x46b8f781)}},
-         {{TOBN(0x82fa2c8a, 0x21230646), TOBN(0xf51aabb9, 0x084f418c),
-           TOBN(0xff4fbec1, 0x1a30ba43), TOBN(0x6a5acf73, 0x743c9df7)},
-          {TOBN(0x1da2b357, 0xd635b4d5), TOBN(0xc3de68dd, 0xecd5c1da),
-           TOBN(0xa689080b, 0xd61af0dd), TOBN(0xdea5938a, 0xd665bf99)}},
-         {{TOBN(0x0231d71a, 0xfe637294), TOBN(0x01968aa6, 0xa5a81cd8),
-           TOBN(0x11252d50, 0x048e63b5), TOBN(0xc446bc52, 0x6ca007e9)},
-          {TOBN(0xef8c50a6, 0x96d6134b), TOBN(0x9361fbf5, 0x9e09a05c),
-           TOBN(0xf17f85a6, 0xdca3291a), TOBN(0xb178d548, 0xff251a21)}},
-         {{TOBN(0x87f6374b, 0xa4df3915), TOBN(0x566ce1bf, 0x2fd5d608),
-           TOBN(0x425cba4d, 0x7de35102), TOBN(0x6b745f8f, 0x58c5d5e2)},
-          {TOBN(0x88402af6, 0x63122edf), TOBN(0x3190f9ed, 0x3b989a89),
-           TOBN(0x4ad3d387, 0xebba3156), TOBN(0xef385ad9, 0xc7c469a5)}},
-         {{TOBN(0xb08281de, 0x3f642c29), TOBN(0x20be0888, 0x910ffb88),
-           TOBN(0xf353dd4a, 0xd5292546), TOBN(0x3f1627de, 0x8377a262)},
-          {TOBN(0xa5faa013, 0xeefcd638), TOBN(0x8f3bf626, 0x74cc77c3),
-           TOBN(0x32618f65, 0xa348f55e), TOBN(0x5787c0dc, 0x9fefeb9e)}},
-         {{TOBN(0xf1673aa2, 0xd9a23e44), TOBN(0x88dfa993, 0x4e10690d),
-           TOBN(0x1ced1b36, 0x2bf91108), TOBN(0x9193ceca, 0x3af48649)},
-          {TOBN(0xfb34327d, 0x2d738fc5), TOBN(0x6697b037, 0x975fee6c),
-           TOBN(0x2f485da0, 0xc04079a5), TOBN(0x2cdf5735, 0x2feaa1ac)}},
-         {{TOBN(0x76944420, 0xbd55659e), TOBN(0x7973e32b, 0x4376090c),
-           TOBN(0x86bb4fe1, 0x163b591a), TOBN(0x10441aed, 0xc196f0ca)},
-          {TOBN(0x3b431f4a, 0x045ad915), TOBN(0x6c11b437, 0xa4afacb1),
-           TOBN(0x30b0c7db, 0x71fdbbd8), TOBN(0xb642931f, 0xeda65acd)}},
-         {{TOBN(0x4baae6e8, 0x9c92b235), TOBN(0xa73bbd0e, 0x6b3993a1),
-           TOBN(0xd06d60ec, 0x693dd031), TOBN(0x03cab91b, 0x7156881c)},
-          {TOBN(0xd615862f, 0x1db3574b), TOBN(0x485b0185, 0x64bb061a),
-           TOBN(0x27434988, 0xa0181e06), TOBN(0x2cd61ad4, 0xc1c0c757)}},
-         {{TOBN(0x3effed5a, 0x2ff9f403), TOBN(0x8dc98d8b, 0x62239029),
-           TOBN(0x2206021e, 0x1f17b70d), TOBN(0xafbec0ca, 0xbf510015)},
-          {TOBN(0x9fed7164, 0x80130dfa), TOBN(0x306dc2b5, 0x8a02dcf5),
-           TOBN(0x48f06620, 0xfeb10fc0), TOBN(0x78d1e1d5, 0x5a57cf51)}},
-         {{TOBN(0xadef8c5a, 0x192ef710), TOBN(0x88afbd4b, 0x3b7431f9),
-           TOBN(0x7e1f7407, 0x64250c9e), TOBN(0x6e31318d, 0xb58bec07)},
-          {TOBN(0xfd4fc4b8, 0x24f89b4e), TOBN(0x65a5dd88, 0x48c36a2a),
-           TOBN(0x4f1eccff, 0xf024baa7), TOBN(0x22a21cf2, 0xcba94650)}},
-         {{TOBN(0x95d29dee, 0x42a554f7), TOBN(0x828983a5, 0x002ec4ba),
-           TOBN(0x8112a1f7, 0x8badb73d), TOBN(0x79ea8897, 0xa27c1839)},
-          {TOBN(0x8969a5a7, 0xd065fd83), TOBN(0xf49af791, 0xb262a0bc),
-           TOBN(0xfcdea8b6, 0xaf2b5127), TOBN(0x10e913e1, 0x564c2dbc)}},
-         {{TOBN(0x51239d14, 0xbc21ef51), TOBN(0xe51c3ceb, 0x4ce57292),
-           TOBN(0x795ff068, 0x47bbcc3b), TOBN(0x86b46e1e, 0xbd7e11e6)},
-          {TOBN(0x0ea6ba23, 0x80041ef4), TOBN(0xd72fe505, 0x6262342e),
-           TOBN(0x8abc6dfd, 0x31d294d4), TOBN(0xbbe017a2, 0x1278c2c9)}},
-         {{TOBN(0xb1fcfa09, 0xb389328a), TOBN(0x322fbc62, 0xd01771b5),
-           TOBN(0x04c0d063, 0x60b045bf), TOBN(0xdb652edc, 0x10e52d01)},
-          {TOBN(0x50ef932c, 0x03ec6627), TOBN(0xde1b3b2d, 0xc1ee50e3),
-           TOBN(0x5ab7bdc5, 0xdc37a90d), TOBN(0xfea67213, 0x31e33a96)}},
-         {{TOBN(0x6482b5cb, 0x4f2999aa), TOBN(0x38476cc6, 0xb8cbf0dd),
-           TOBN(0x93ebfacb, 0x173405bb), TOBN(0x15cdafe7, 0xe52369ec)},
-          {TOBN(0xd42d5ba4, 0xd935b7db), TOBN(0x648b6004, 0x1c99a4cd),
-           TOBN(0x785101bd, 0xa3b5545b), TOBN(0x4bf2c38a, 0x9dd67faf)}},
-         {{TOBN(0xb1aadc63, 0x4442449c), TOBN(0xe0e9921a, 0x33ad4fb8),
-           TOBN(0x5c552313, 0xaa686d82), TOBN(0xdee635fa, 0x465d866c)},
-          {TOBN(0xbc3c224a, 0x18ee6e8a), TOBN(0xeed748a6, 0xed42e02f),
-           TOBN(0xe70f930a, 0xd474cd08), TOBN(0x774ea6ec, 0xfff24adf)}},
-         {{TOBN(0x03e2de1c, 0xf3480d4a), TOBN(0xf0d8edc7, 0xbc8acf1a),
-           TOBN(0xf23e3303, 0x68295a9c), TOBN(0xfadd5f68, 0xc546a97d)},
-          {TOBN(0x895597ad, 0x96f8acb1), TOBN(0xbddd49d5, 0x671bdae2),
-           TOBN(0x16fcd528, 0x21dd43f4), TOBN(0xa5a45412, 0x6619141a)}}},
-        {{{TOBN(0x8ce9b6bf, 0xc360e25a), TOBN(0xe6425195, 0x075a1a78),
-           TOBN(0x9dc756a8, 0x481732f4), TOBN(0x83c0440f, 0x5432b57a)},
-          {TOBN(0xc670b3f1, 0xd720281f), TOBN(0x2205910e, 0xd135e051),
-           TOBN(0xded14b0e, 0xdb052be7), TOBN(0x697b3d27, 0xc568ea39)}},
-         {{TOBN(0x2e599b9a, 0xfb3ff9ed), TOBN(0x28c2e0ab, 0x17f6515c),
-           TOBN(0x1cbee4fd, 0x474da449), TOBN(0x071279a4, 0x4f364452)},
-          {TOBN(0x97abff66, 0x01fbe855), TOBN(0x3ee394e8, 0x5fda51c4),
-           TOBN(0x190385f6, 0x67597c0b), TOBN(0x6e9fccc6, 0xa27ee34b)}},
-         {{TOBN(0x0b89de93, 0x14092ebb), TOBN(0xf17256bd, 0x428e240c),
-           TOBN(0xcf89a7f3, 0x93d2f064), TOBN(0x4f57841e, 0xe1ed3b14)},
-          {TOBN(0x4ee14405, 0xe708d855), TOBN(0x856aae72, 0x03f1c3d0),
-           TOBN(0xc8e5424f, 0xbdd7eed5), TOBN(0x3333e4ef, 0x73ab4270)}},
-         {{TOBN(0x3bc77ade, 0xdda492f8), TOBN(0xc11a3aea, 0x78297205),
-           TOBN(0x5e89a3e7, 0x34931b4c), TOBN(0x17512e2e, 0x9f5694bb)},
-          {TOBN(0x5dc349f3, 0x177bf8b6), TOBN(0x232ea4ba, 0x08c7ff3e),
-           TOBN(0x9c4f9d16, 0xf511145d), TOBN(0xccf109a3, 0x33b379c3)}},
-         {{TOBN(0xe75e7a88, 0xa1f25897), TOBN(0x7ac6961f, 0xa1b5d4d8),
-           TOBN(0xe3e10773, 0x08f3ed5c), TOBN(0x208a54ec, 0x0a892dfb)},
-          {TOBN(0xbe826e19, 0x78660710), TOBN(0x0cf70a97, 0x237df2c8),
-           TOBN(0x418a7340, 0xed704da5), TOBN(0xa3eeb9a9, 0x08ca33fd)}},
-         {{TOBN(0x49d96233, 0x169bca96), TOBN(0x04d286d4, 0x2da6aafb),
-           TOBN(0xc09606ec, 0xa0c2fa94), TOBN(0x8869d0d5, 0x23ff0fb3)},
-          {TOBN(0xa99937e5, 0xd0150d65), TOBN(0xa92e2503, 0x240c14c9),
-           TOBN(0x656bf945, 0x108e2d49), TOBN(0x152a733a, 0xa2f59e2b)}},
-         {{TOBN(0xb4323d58, 0x8434a920), TOBN(0xc0af8e93, 0x622103c5),
-           TOBN(0x667518ef, 0x938dbf9a), TOBN(0xa1843073, 0x83a9cdf2)},
-          {TOBN(0x350a94aa, 0x5447ab80), TOBN(0xe5e5a325, 0xc75a3d61),
-           TOBN(0x74ba507f, 0x68411a9e), TOBN(0x10581fc1, 0x594f70c5)}},
-         {{TOBN(0x60e28570, 0x80eb24a9), TOBN(0x7bedfb4d, 0x488e0cfd),
-           TOBN(0x721ebbd7, 0xc259cdb8), TOBN(0x0b0da855, 0xbc6390a9)},
-          {TOBN(0x2b4d04db, 0xde314c70), TOBN(0xcdbf1fbc, 0x6c32e846),
-           TOBN(0x33833eab, 0xb162fc9e), TOBN(0x9939b48b, 0xb0dd3ab7)}},
-         {{TOBN(0x5aaa98a7, 0xcb0c9c8c), TOBN(0x75105f30, 0x81c4375c),
-           TOBN(0xceee5057, 0x5ef1c90f), TOBN(0xb31e065f, 0xc23a17bf)},
-          {TOBN(0x5364d275, 0xd4b6d45a), TOBN(0xd363f3ad, 0x62ec8996),
-           TOBN(0xb5d21239, 0x4391c65b), TOBN(0x84564765, 0xebb41b47)}},
-         {{TOBN(0x20d18ecc, 0x37107c78), TOBN(0xacff3b6b, 0x570c2a66),
-           TOBN(0x22f975d9, 0x9bd0d845), TOBN(0xef0a0c46, 0xba178fa0)},
-          {TOBN(0x1a419651, 0x76b6028e), TOBN(0xc49ec674, 0x248612d4),
-           TOBN(0x5b6ac4f2, 0x7338af55), TOBN(0x06145e62, 0x7bee5a36)}},
-         {{TOBN(0x33e95d07, 0xe75746b5), TOBN(0x1c1e1f6d, 0xc40c78be),
-           TOBN(0x967833ef, 0x222ff8e2), TOBN(0x4bedcf6a, 0xb49180ad)},
-          {TOBN(0x6b37e9c1, 0x3d7a4c8a), TOBN(0x2748887c, 0x6ddfe760),
-           TOBN(0xf7055123, 0xaa3a5bbc), TOBN(0x954ff225, 0x7bbb8e74)}},
-         {{TOBN(0xc42b8ab1, 0x97c3dfb9), TOBN(0x55a549b0, 0xcf168154),
-           TOBN(0xad6748e7, 0xc1b50692), TOBN(0x2775780f, 0x6fc5cbcb)},
-          {TOBN(0x4eab80b8, 0xe1c9d7c8), TOBN(0x8c69dae1, 0x3fdbcd56),
-           TOBN(0x47e6b4fb, 0x9969eace), TOBN(0x002f1085, 0xa705cb5a)}},
-         {{TOBN(0x4e23ca44, 0x6d3fea55), TOBN(0xb4ae9c86, 0xf4810568),
-           TOBN(0x47bfb91b, 0x2a62f27d), TOBN(0x60deb4c9, 0xd9bac28c)},
-          {TOBN(0xa892d894, 0x7de6c34c), TOBN(0x4ee68259, 0x4494587d),
-           TOBN(0x914ee14e, 0x1a3f8a5b), TOBN(0xbb113eaa, 0x28700385)}},
-         {{TOBN(0x81ca03b9, 0x2115b4c9), TOBN(0x7c163d38, 0x8908cad1),
-           TOBN(0xc912a118, 0xaa18179a), TOBN(0xe09ed750, 0x886e3081)},
-          {TOBN(0xa676e3fa, 0x26f516ca), TOBN(0x753cacf7, 0x8e732f91),
-           TOBN(0x51592aea, 0x833da8b4), TOBN(0xc626f42f, 0x4cbea8aa)}},
-         {{TOBN(0xef9dc899, 0xa7b56eaf), TOBN(0x00c0e52c, 0x34ef7316),
-           TOBN(0x5b1e4e24, 0xfe818a86), TOBN(0x9d31e20d, 0xc538be47)},
-          {TOBN(0x22eb932d, 0x3ed68974), TOBN(0xe44bbc08, 0x7c4e87c4),
-           TOBN(0x4121086e, 0x0dde9aef), TOBN(0x8e6b9cff, 0x134f4345)}},
-         {{TOBN(0x96892c1f, 0x711b0eb9), TOBN(0xb905f2c8, 0x780ab954),
-           TOBN(0xace26309, 0xa20792db), TOBN(0xec8ac9b3, 0x0684e126)},
-          {TOBN(0x486ad8b6, 0xb40a2447), TOBN(0x60121fc1, 0x9fe3fb24),
-           TOBN(0x5626fccf, 0x1a8e3b3f), TOBN(0x4e568622, 0x6ad1f394)}},
-         {{TOBN(0xda7aae0d, 0x196aa5a1), TOBN(0xe0df8c77, 0x1041b5fb),
-           TOBN(0x451465d9, 0x26b318b7), TOBN(0xc29b6e55, 0x7ab136e9)},
-          {TOBN(0x2c2ab48b, 0x71148463), TOBN(0xb5738de3, 0x64454a76),
-           TOBN(0x54ccf9a0, 0x5a03abe4), TOBN(0x377c0296, 0x0427d58e)}},
-         {{TOBN(0x73f5f0b9, 0x2bb39c1f), TOBN(0x14373f2c, 0xe608d8c5),
-           TOBN(0xdcbfd314, 0x00fbb805), TOBN(0xdf18fb20, 0x83afdcfb)},
-          {TOBN(0x81a57f42, 0x42b3523f), TOBN(0xe958532d, 0x87f650fb),
-           TOBN(0xaa8dc8b6, 0x8b0a7d7c), TOBN(0x1b75dfb7, 0x150166be)}},
-         {{TOBN(0x90e4f7c9, 0x2d7d1413), TOBN(0x67e2d6b5, 0x9834f597),
-           TOBN(0x4fd4f4f9, 0xa808c3e8), TOBN(0xaf8237e0, 0xd5281ec1)},
-          {TOBN(0x25ab5fdc, 0x84687cee), TOBN(0xc5ded6b1, 0xa5b26c09),
-           TOBN(0x8e4a5aec, 0xc8ea7650), TOBN(0x23b73e5c, 0x14cc417f)}},
-         {{TOBN(0x2bfb4318, 0x3037bf52), TOBN(0xb61e6db5, 0x78c725d7),
-           TOBN(0x8efd4060, 0xbbb3e5d7), TOBN(0x2e014701, 0xdbac488e)},
-          {TOBN(0xac75cf9a, 0x360aa449), TOBN(0xb70cfd05, 0x79634d08),
-           TOBN(0xa591536d, 0xfffb15ef), TOBN(0xb2c37582, 0xd07c106c)}},
-         {{TOBN(0xb4293fdc, 0xf50225f9), TOBN(0xc52e175c, 0xb0e12b03),
-           TOBN(0xf649c3ba, 0xd0a8bf64), TOBN(0x745a8fef, 0xeb8ae3c6)},
-          {TOBN(0x30d7e5a3, 0x58321bc3), TOBN(0xb1732be7, 0x0bc4df48),
-           TOBN(0x1f217993, 0xe9ea5058), TOBN(0xf7a71cde, 0x3e4fd745)}},
-         {{TOBN(0x86cc533e, 0x894c5bbb), TOBN(0x6915c7d9, 0x69d83082),
-           TOBN(0xa6aa2d05, 0x5815c244), TOBN(0xaeeee592, 0x49b22ce5)},
-          {TOBN(0x89e39d13, 0x78135486), TOBN(0x3a275c1f, 0x16b76f2f),
-           TOBN(0xdb6bcc1b, 0xe036e8f5), TOBN(0x4df69b21, 0x5e4709f5)}},
-         {{TOBN(0xa188b250, 0x2d0f39aa), TOBN(0x622118bb, 0x15a85947),
-           TOBN(0x2ebf520f, 0xfde0f4fa), TOBN(0xa40e9f29, 0x4860e539)},
-          {TOBN(0x7b6a51eb, 0x22b57f0f), TOBN(0x849a33b9, 0x7e80644a),
-           TOBN(0x50e5d16f, 0x1cf095fe), TOBN(0xd754b54e, 0xec55f002)}},
-         {{TOBN(0x5cfbbb22, 0x236f4a98), TOBN(0x0b0c59e9, 0x066800bb),
-           TOBN(0x4ac69a8f, 0x5a9a7774), TOBN(0x2b33f804, 0xd6bec948)},
-          {TOBN(0xb3729295, 0x32e6c466), TOBN(0x68956d0f, 0x4e599c73),
-           TOBN(0xa47a249f, 0x155c31cc), TOBN(0x24d80f0d, 0xe1ce284e)}},
-         {{TOBN(0xcd821dfb, 0x988baf01), TOBN(0xe6331a7d, 0xdbb16647),
-           TOBN(0x1eb8ad33, 0x094cb960), TOBN(0x593cca38, 0xc91bbca5)},
-          {TOBN(0x384aac8d, 0x26567456), TOBN(0x40fa0309, 0xc04b6490),
-           TOBN(0x97834cd6, 0xdab6c8f6), TOBN(0x68a7318d, 0x3f91e55f)}},
-         {{TOBN(0xa00fd04e, 0xfc4d3157), TOBN(0xb56f8ab2, 0x2bf3bdea),
-           TOBN(0x014f5648, 0x4fa57172), TOBN(0x948c5860, 0x450abdb3)},
-          {TOBN(0x342b5df0, 0x0ebd4f08), TOBN(0x3e5168cd, 0x0e82938e),
-           TOBN(0x7aedc1ce, 0xb0df5dd0), TOBN(0x6bbbc6d9, 0xe5732516)}},
-         {{TOBN(0xc7bfd486, 0x605daaa6), TOBN(0x46fd72b7, 0xbb9a6c9e),
-           TOBN(0xe4847fb1, 0xa124fb89), TOBN(0x75959cbd, 0xa2d8ffbc)},
-          {TOBN(0x42579f65, 0xc8a588ee), TOBN(0x368c92e6, 0xb80b499d),
-           TOBN(0xea4ef6cd, 0x999a5df1), TOBN(0xaa73bb7f, 0x936fe604)}},
-         {{TOBN(0xf347a70d, 0x6457d188), TOBN(0x86eda86b, 0x8b7a388b),
-           TOBN(0xb7cdff06, 0x0ccd6013), TOBN(0xbeb1b6c7, 0xd0053fb2)},
-          {TOBN(0x0b022387, 0x99240a9f), TOBN(0x1bbb384f, 0x776189b2),
-           TOBN(0x8695e71e, 0x9066193a), TOBN(0x2eb50097, 0x06ffac7e)}},
-         {{TOBN(0x0654a9c0, 0x4a7d2caa), TOBN(0x6f3fb3d1, 0xa5aaa290),
-           TOBN(0x835db041, 0xff476e8f), TOBN(0x540b8b0b, 0xc42295e4)},
-          {TOBN(0xa5c73ac9, 0x05e214f5), TOBN(0x9a74075a, 0x56a0b638),
-           TOBN(0x2e4b1090, 0xce9e680b), TOBN(0x57a5b479, 0x6b8d9afa)}},
-         {{TOBN(0x0dca48e7, 0x26bfe65c), TOBN(0x097e391c, 0x7290c307),
-           TOBN(0x683c462e, 0x6669e72e), TOBN(0xf505be1e, 0x062559ac)},
-          {TOBN(0x5fbe3ea1, 0xe3a3035a), TOBN(0x6431ebf6, 0x9cd50da8),
-           TOBN(0xfd169d5c, 0x1f6407f2), TOBN(0x8d838a95, 0x60fce6b8)}},
-         {{TOBN(0x2a2bfa7f, 0x650006f0), TOBN(0xdfd7dad3, 0x50c0fbb2),
-           TOBN(0x92452495, 0xccf9ad96), TOBN(0x183bf494, 0xd95635f9)},
-          {TOBN(0x02d5df43, 0x4a7bd989), TOBN(0x505385cc, 0xa5431095),
-           TOBN(0xdd98e67d, 0xfd43f53e), TOBN(0xd61e1a6c, 0x500c34a9)}},
-         {{TOBN(0x5a4b46c6, 0x4a8a3d62), TOBN(0x8469c4d0, 0x247743d2),
-           TOBN(0x2bb3a13d, 0x88f7e433), TOBN(0x62b23a10, 0x01be5849)},
-          {TOBN(0xe83596b4, 0xa63d1a4c), TOBN(0x454e7fea, 0x7d183f3e),
-           TOBN(0x643fce61, 0x17afb01c), TOBN(0x4e65e5e6, 0x1c4c3638)}},
-         {{TOBN(0x41d85ea1, 0xef74c45b), TOBN(0x2cfbfa66, 0xae328506),
-           TOBN(0x98b078f5, 0x3ada7da9), TOBN(0xd985fe37, 0xec752fbb)},
-          {TOBN(0xeece68fe, 0x5a0148b4), TOBN(0x6f9a55c7, 0x2d78136d),
-           TOBN(0x232dccc4, 0xd2b729ce), TOBN(0xa27e0dfd, 0x90aafbc4)}},
-         {{TOBN(0x96474452, 0x12b4603e), TOBN(0xa876c551, 0x6b706d14),
-           TOBN(0xdf145fcf, 0x69a9d412), TOBN(0xe2ab75b7, 0x2d479c34)},
-          {TOBN(0x12df9a76, 0x1a23ff97), TOBN(0xc6138992, 0x5d359d10),
-           TOBN(0x6e51c7ae, 0xfa835f22), TOBN(0x69a79cb1, 0xc0fcc4d9)}},
-         {{TOBN(0xf57f350d, 0x594cc7e1), TOBN(0x3079ca63, 0x3350ab79),
-           TOBN(0x226fb614, 0x9aff594a), TOBN(0x35afec02, 0x6d59a62b)},
-          {TOBN(0x9bee46f4, 0x06ed2c6e), TOBN(0x58da1735, 0x7d939a57),
-           TOBN(0x44c50402, 0x8fd1797e), TOBN(0xd8853e7c, 0x5ccea6ca)}},
-         {{TOBN(0x4065508d, 0xa35fcd5f), TOBN(0x8965df8c, 0x495ccaeb),
-           TOBN(0x0f2da850, 0x12e1a962), TOBN(0xee471b94, 0xc1cf1cc4)},
-          {TOBN(0xcef19bc8, 0x0a08fb75), TOBN(0x704958f5, 0x81de3591),
-           TOBN(0x2867f8b2, 0x3aef4f88), TOBN(0x8d749384, 0xea9f9a5f)}},
-         {{TOBN(0x1b385537, 0x8c9049f4), TOBN(0x5be948f3, 0x7b92d8b6),
-           TOBN(0xd96f725d, 0xb6e2bd6b), TOBN(0x37a222bc, 0x958c454d)},
-          {TOBN(0xe7c61abb, 0x8809bf61), TOBN(0x46f07fbc, 0x1346f18d),
-           TOBN(0xfb567a7a, 0xe87c0d1c), TOBN(0x84a461c8, 0x7ef3d07a)}},
-         {{TOBN(0x0a5adce6, 0xd9278d98), TOBN(0x24d94813, 0x9dfc73e1),
-           TOBN(0x4f3528b6, 0x054321c3), TOBN(0x2e03fdde, 0x692ea706)},
-          {TOBN(0x10e60619, 0x47b533c0), TOBN(0x1a8bc73f, 0x2ca3c055),
-           TOBN(0xae58d4b2, 0x1bb62b8f), TOBN(0xb2045a73, 0x584a24e3)}},
-         {{TOBN(0x3ab3d5af, 0xbd76e195), TOBN(0x478dd1ad, 0x6938a810),
-           TOBN(0x6ffab393, 0x6ee3d5cb), TOBN(0xdfb693db, 0x22b361e4)},
-          {TOBN(0xf9694496, 0x51dbf1a7), TOBN(0xcab4b4ef, 0x08a2e762),
-           TOBN(0xe8c92f25, 0xd39bba9a), TOBN(0x850e61bc, 0xf1464d96)}},
-         {{TOBN(0xb7e830e3, 0xdc09508b), TOBN(0xfaf6d2cf, 0x74317655),
-           TOBN(0x72606ceb, 0xdf690355), TOBN(0x48bb92b3, 0xd0c3ded6)},
-          {TOBN(0x65b75484, 0x5c7cf892), TOBN(0xf6cd7ac9, 0xd5d5f01f),
-           TOBN(0xc2c30a59, 0x96401d69), TOBN(0x91268650, 0xed921878)}},
-         {{TOBN(0x380bf913, 0xb78c558f), TOBN(0x43c0baeb, 0xc8afdaa9),
-           TOBN(0x377f61d5, 0x54f169d3), TOBN(0xf8da07e3, 0xae5ff20b)},
-          {TOBN(0xb676c49d, 0xa8a90ea8), TOBN(0x81c1ff2b, 0x83a29b21),
-           TOBN(0x383297ac, 0x2ad8d276), TOBN(0x3001122f, 0xba89f982)}},
-         {{TOBN(0xe1d794be, 0x6718e448), TOBN(0x246c1482, 0x7c3e6e13),
-           TOBN(0x56646ef8, 0x5d26b5ef), TOBN(0x80f5091e, 0x88069cdd)},
-          {TOBN(0xc5992e2f, 0x724bdd38), TOBN(0x02e915b4, 0x8471e8c7),
-           TOBN(0x96ff320a, 0x0d0ff2a9), TOBN(0xbf886487, 0x4384d1a0)}},
-         {{TOBN(0xbbe1e6a6, 0xc93f72d6), TOBN(0xd5f75d12, 0xcad800ea),
-           TOBN(0xfa40a09f, 0xe7acf117), TOBN(0x32c8cdd5, 0x7581a355)},
-          {TOBN(0x74221992, 0x7023c499), TOBN(0xa8afe5d7, 0x38ec3901),
-           TOBN(0x5691afcb, 0xa90e83f0), TOBN(0x41bcaa03, 0x0b8f8eac)}},
-         {{TOBN(0xe38b5ff9, 0x8d2668d5), TOBN(0x0715281a, 0x7ad81965),
-           TOBN(0x1bc8fc7c, 0x03c6ce11), TOBN(0xcbbee6e2, 0x8b650436)},
-          {TOBN(0x06b00fe8, 0x0cdb9808), TOBN(0x17d6e066, 0xfe3ed315),
-           TOBN(0x2e9d38c6, 0x4d0b5018), TOBN(0xab8bfd56, 0x844dcaef)}},
-         {{TOBN(0x42894a59, 0x513aed8b), TOBN(0xf77f3b6d, 0x314bd07a),
-           TOBN(0xbbdecb8f, 0x8e42b582), TOBN(0xf10e2fa8, 0xd2390fe6)},
-          {TOBN(0xefb95022, 0x62a2f201), TOBN(0x4d59ea50, 0x50ee32b0),
-           TOBN(0xd87f7728, 0x6da789a8), TOBN(0xcf98a2cf, 0xf79492c4)}},
-         {{TOBN(0xf9577239, 0x720943c2), TOBN(0xba044cf5, 0x3990b9d0),
-           TOBN(0x5aa8e823, 0x95f2884a), TOBN(0x834de6ed, 0x0278a0af)},
-          {TOBN(0xc8e1ee9a, 0x5f25bd12), TOBN(0x9259ceaa, 0x6f7ab271),
-           TOBN(0x7e6d97a2, 0x77d00b76), TOBN(0x5c0c6eea, 0xa437832a)}},
-         {{TOBN(0x5232c20f, 0x5606b81d), TOBN(0xabd7b375, 0x0d991ee5),
-           TOBN(0x4d2bfe35, 0x8632d951), TOBN(0x78f85146, 0x98ed9364)},
-          {TOBN(0x951873f0, 0xf30c3282), TOBN(0x0da8ac80, 0xa789230b),
-           TOBN(0x3ac7789c, 0x5398967f), TOBN(0xa69b8f7f, 0xbdda0fb5)}},
-         {{TOBN(0xe5db7717, 0x6add8545), TOBN(0x1b71cb66, 0x72c49b66),
-           TOBN(0xd8560739, 0x68421d77), TOBN(0x03840fe8, 0x83e3afea)},
-          {TOBN(0xb391dad5, 0x1ec69977), TOBN(0xae243fb9, 0x307f6726),
-           TOBN(0xc88ac87b, 0xe8ca160c), TOBN(0x5174cced, 0x4ce355f4)}},
-         {{TOBN(0x98a35966, 0xe58ba37d), TOBN(0xfdcc8da2, 0x7817335d),
-           TOBN(0x5b752830, 0x83fbc7bf), TOBN(0x68e419d4, 0xd9c96984)},
-          {TOBN(0x409a39f4, 0x02a40380), TOBN(0x88940faf, 0x1fe977bc),
-           TOBN(0xc640a94b, 0x8f8edea6), TOBN(0x1e22cd17, 0xed11547d)}},
-         {{TOBN(0xe28568ce, 0x59ffc3e2), TOBN(0x60aa1b55, 0xc1dee4e7),
-           TOBN(0xc67497c8, 0x837cb363), TOBN(0x06fb438a, 0x105a2bf2)},
-          {TOBN(0x30357ec4, 0x500d8e20), TOBN(0x1ad9095d, 0x0670db10),
-           TOBN(0x7f589a05, 0xc73b7cfd), TOBN(0xf544607d, 0x880d6d28)}},
-         {{TOBN(0x17ba93b1, 0xa20ef103), TOBN(0xad859130, 0x6ba6577b),
-           TOBN(0x65c91cf6, 0x6fa214a0), TOBN(0xd7d49c6c, 0x27990da5)},
-          {TOBN(0xecd9ec8d, 0x20bb569d), TOBN(0xbd4b2502, 0xeeffbc33),
-           TOBN(0x2056ca5a, 0x6bed0467), TOBN(0x7916a1f7, 0x5b63728c)}},
-         {{TOBN(0xd4f9497d, 0x53a4f566), TOBN(0x89734664, 0x97b56810),
-           TOBN(0xf8e1da74, 0x0494a621), TOBN(0x82546a93, 0x8d011c68)},
-          {TOBN(0x1f3acb19, 0xc61ac162), TOBN(0x52f8fa9c, 0xabad0d3e),
-           TOBN(0x15356523, 0xb4b7ea43), TOBN(0x5a16ad61, 0xae608125)}},
-         {{TOBN(0xb0bcb87f, 0x4faed184), TOBN(0x5f236b1d, 0x5029f45f),
-           TOBN(0xd42c7607, 0x0bc6b1fc), TOBN(0xc644324e, 0x68aefce3)},
-          {TOBN(0x8e191d59, 0x5c5d8446), TOBN(0xc0208077, 0x13ae1979),
-           TOBN(0xadcaee55, 0x3ba59cc7), TOBN(0x20ed6d6b, 0xa2cb81ba)}},
-         {{TOBN(0x0952ba19, 0xb6efcffc), TOBN(0x60f12d68, 0x97c0b87c),
-           TOBN(0x4ee2c7c4, 0x9caa30bc), TOBN(0x767238b7, 0x97fbff4e)},
-          {TOBN(0xebc73921, 0x501b5d92), TOBN(0x3279e3df, 0xc2a37737),
-           TOBN(0x9fc12bc8, 0x6d197543), TOBN(0xfa94dc6f, 0x0a40db4e)}},
-         {{TOBN(0x7392b41a, 0x530ccbbd), TOBN(0x87c82146, 0xea823525),
-           TOBN(0xa52f984c, 0x05d98d0c), TOBN(0x2ae57d73, 0x5ef6974c)},
-          {TOBN(0x9377f7bf, 0x3042a6dd), TOBN(0xb1a007c0, 0x19647a64),
-           TOBN(0xfaa9079a, 0x0cca9767), TOBN(0x3d81a25b, 0xf68f72d5)}},
-         {{TOBN(0x752067f8, 0xff81578e), TOBN(0x78622150, 0x9045447d),
-           TOBN(0xc0c22fcf, 0x0505aa6f), TOBN(0x1030f0a6, 0x6bed1c77)},
-          {TOBN(0x31f29f15, 0x1f0bd739), TOBN(0x2d7989c7, 0xe6debe85),
-           TOBN(0x5c070e72, 0x8e677e98), TOBN(0x0a817bd3, 0x06e81fd5)}},
-         {{TOBN(0xc110d830, 0xb0f2ac95), TOBN(0x48d0995a, 0xab20e64e),
-           TOBN(0x0f3e00e1, 0x7729cd9a), TOBN(0x2a570c20, 0xdd556946)},
-          {TOBN(0x912dbcfd, 0x4e86214d), TOBN(0x2d014ee2, 0xcf615498),
-           TOBN(0x55e2b1e6, 0x3530d76e), TOBN(0xc5135ae4, 0xfd0fd6d1)}},
-         {{TOBN(0x0066273a, 0xd4f3049f), TOBN(0xbb8e9893, 0xe7087477),
-           TOBN(0x2dba1ddb, 0x14c6e5fd), TOBN(0xdba37886, 0x51f57e6c)},
-          {TOBN(0x5aaee0a6, 0x5a72f2cf), TOBN(0x1208bfbf, 0x7bea5642),
-           TOBN(0xf5c6aa3b, 0x67872c37), TOBN(0xd726e083, 0x43f93224)}},
-         {{TOBN(0x1854daa5, 0x061f1658), TOBN(0xc0016df1, 0xdf0cd2b3),
-           TOBN(0xc2a3f23e, 0x833d50de), TOBN(0x73b681d2, 0xbbbd3017)},
-          {TOBN(0x2f046dc4, 0x3ac343c0), TOBN(0x9c847e7d, 0x85716421),
-           TOBN(0xe1e13c91, 0x0917eed4), TOBN(0x3fc9eebd, 0x63a1b9c6)}},
-         {{TOBN(0x0f816a72, 0x7fe02299), TOBN(0x6335ccc2, 0x294f3319),
-           TOBN(0x3820179f, 0x4745c5be), TOBN(0xe647b782, 0x922f066e)},
-          {TOBN(0xc22e49de, 0x02cafb8a), TOBN(0x299bc2ff, 0xfcc2eccc),
-           TOBN(0x9a8feea2, 0x6e0e8282), TOBN(0xa627278b, 0xfe893205)}},
-         {{TOBN(0xa7e19733, 0x7933e47b), TOBN(0xf4ff6b13, 0x2e766402),
-           TOBN(0xa4d8be0a, 0x98440d9f), TOBN(0x658f5c2f, 0x38938808)},
-          {TOBN(0x90b75677, 0xc95b3b3e), TOBN(0xfa044269, 0x3137b6ff),
-           TOBN(0x077b039b, 0x43c47c29), TOBN(0xcca95dd3, 0x8a6445b2)}},
-         {{TOBN(0x0b498ba4, 0x2333fc4c), TOBN(0x274f8e68, 0xf736a1b1),
-           TOBN(0x6ca348fd, 0x5f1d4b2e), TOBN(0x24d3be78, 0xa8f10199)},
-          {TOBN(0x8535f858, 0xca14f530), TOBN(0xa6e7f163, 0x5b982e51),
-           TOBN(0x847c8512, 0x36e1bf62), TOBN(0xf6a7c58e, 0x03448418)}},
-         {{TOBN(0x583f3703, 0xf9374ab6), TOBN(0x864f9195, 0x6e564145),
-           TOBN(0x33bc3f48, 0x22526d50), TOBN(0x9f323c80, 0x1262a496)},
-          {TOBN(0xaa97a7ae, 0x3f046a9a), TOBN(0x70da183e, 0xdf8a039a),
-           TOBN(0x5b68f71c, 0x52aa0ba6), TOBN(0x9be0fe51, 0x21459c2d)}},
-         {{TOBN(0xc1e17eb6, 0xcbc613e5), TOBN(0x33131d55, 0x497ea61c),
-           TOBN(0x2f69d39e, 0xaf7eded5), TOBN(0x73c2f434, 0xde6af11b)},
-          {TOBN(0x4ca52493, 0xa4a375fa), TOBN(0x5f06787c, 0xb833c5c2),
-           TOBN(0x814e091f, 0x3e6e71cf), TOBN(0x76451f57, 0x8b746666)}}},
-        {{{TOBN(0x80f9bdef, 0x694db7e0), TOBN(0xedca8787, 0xb9fcddc6),
-           TOBN(0x51981c34, 0x03b8dce1), TOBN(0x4274dcf1, 0x70e10ba1)},
-          {TOBN(0xf72743b8, 0x6def6d1a), TOBN(0xd25b1670, 0xebdb1866),
-           TOBN(0xc4491e8c, 0x050c6f58), TOBN(0x2be2b2ab, 0x87fbd7f5)}},
-         {{TOBN(0x3e0e5c9d, 0xd111f8ec), TOBN(0xbcc33f8d, 0xb7c4e760),
-           TOBN(0x702f9a91, 0xbd392a51), TOBN(0x7da4a795, 0xc132e92d)},
-          {TOBN(0x1a0b0ae3, 0x0bb1151b), TOBN(0x54febac8, 0x02e32251),
-           TOBN(0xea3a5082, 0x694e9e78), TOBN(0xe58ffec1, 0xe4fe40b8)}},
-         {{TOBN(0xf85592fc, 0xd1e0cf9e), TOBN(0xdea75f0d, 0xc0e7b2e8),
-           TOBN(0xc04215cf, 0xc135584e), TOBN(0x174fc727, 0x2f57092a)},
-          {TOBN(0xe7277877, 0xeb930bea), TOBN(0x504caccb, 0x5eb02a5a),
-           TOBN(0xf9fe08f7, 0xf5241b9b), TOBN(0xe7fb62f4, 0x8d5ca954)}},
-         {{TOBN(0xfbb8349d, 0x29c4120b), TOBN(0x9f94391f, 0xc0d0d915),
-           TOBN(0xc4074fa7, 0x5410ba51), TOBN(0xa66adbf6, 0x150a5911)},
-          {TOBN(0xc164543c, 0x34bfca38), TOBN(0xe0f27560, 0xb9e1ccfc),
-           TOBN(0x99da0f53, 0xe820219c), TOBN(0xe8234498, 0xc6b4997a)}},
-         {{TOBN(0xcfb88b76, 0x9d4c5423), TOBN(0x9e56eb10, 0xb0521c49),
-           TOBN(0x418e0b5e, 0xbe8700a1), TOBN(0x00cbaad6, 0xf93cb58a)},
-          {TOBN(0xe923fbde, 0xd92a5e67), TOBN(0xca4979ac, 0x1f347f11),
-           TOBN(0x89162d85, 0x6bc0585b), TOBN(0xdd6254af, 0xac3c70e3)}},
-         {{TOBN(0x7b23c513, 0x516e19e4), TOBN(0x56e2e847, 0xc5c4d593),
-           TOBN(0x9f727d73, 0x5ce71ef6), TOBN(0x5b6304a6, 0xf79a44c5)},
-          {TOBN(0x6638a736, 0x3ab7e433), TOBN(0x1adea470, 0xfe742f83),
-           TOBN(0xe054b854, 0x5b7fc19f), TOBN(0xf935381a, 0xba1d0698)}},
-         {{TOBN(0x546eab2d, 0x799e9a74), TOBN(0x96239e0e, 0xa949f729),
-           TOBN(0xca274c6b, 0x7090055a), TOBN(0x835142c3, 0x9020c9b0)},
-          {TOBN(0xa405667a, 0xa2e8807f), TOBN(0x29f2c085, 0x1aa3d39e),
-           TOBN(0xcc555d64, 0x42fc72f5), TOBN(0xe856e0e7, 0xfbeacb3c)}},
-         {{TOBN(0xb5504f9d, 0x918e4936), TOBN(0x65035ef6, 0xb2513982),
-           TOBN(0x0553a0c2, 0x6f4d9cb9), TOBN(0x6cb10d56, 0xbea85509)},
-          {TOBN(0x48d957b7, 0xa242da11), TOBN(0x16a4d3dd, 0x672b7268),
-           TOBN(0x3d7e637c, 0x8502a96b), TOBN(0x27c7032b, 0x730d463b)}},
-         {{TOBN(0xbdc02b18, 0xe4136a14), TOBN(0xbacf969d, 0x678e32bf),
-           TOBN(0xc98d89a3, 0xdd9c3c03), TOBN(0x7b92420a, 0x23becc4f)},
-          {TOBN(0xd4b41f78, 0xc64d565c), TOBN(0x9f969d00, 0x10f28295),
-           TOBN(0xec7f7f76, 0xb13d051a), TOBN(0x08945e1e, 0xa92da585)}},
-         {{TOBN(0x55366b7d, 0x5846426f), TOBN(0xe7d09e89, 0x247d441d),
-           TOBN(0x510b404d, 0x736fbf48), TOBN(0x7fa003d0, 0xe784bd7d)},
-          {TOBN(0x25f7614f, 0x17fd9596), TOBN(0x49e0e0a1, 0x35cb98db),
-           TOBN(0x2c65957b, 0x2e83a76a), TOBN(0x5d40da8d, 0xcddbe0f8)}},
-         {{TOBN(0xf2b8c405, 0x050bad24), TOBN(0x8918426d, 0xc2aa4823),
-           TOBN(0x2aeab3dd, 0xa38365a7), TOBN(0x72031717, 0x7c91b690)},
-          {TOBN(0x8b00d699, 0x60a94120), TOBN(0x478a255d, 0xe99eaeec),
-           TOBN(0xbf656a5f, 0x6f60aafd), TOBN(0xdfd7cb75, 0x5dee77b3)}},
-         {{TOBN(0x37f68bb4, 0xa595939d), TOBN(0x03556479, 0x28740217),
-           TOBN(0x8e740e7c, 0x84ad7612), TOBN(0xd89bc843, 0x9044695f)},
-          {TOBN(0xf7f3da5d, 0x85a9184d), TOBN(0x562563bb, 0x9fc0b074),
-           TOBN(0x06d2e6aa, 0xf88a888e), TOBN(0x612d8643, 0x161fbe7c)}},
-         {{TOBN(0x465edba7, 0xf64085e7), TOBN(0xb230f304, 0x29aa8511),
-           TOBN(0x53388426, 0xcda2d188), TOBN(0x90885735, 0x4b666649)},
-          {TOBN(0x6f02ff9a, 0x652f54f6), TOBN(0x65c82294, 0x5fae2bf0),
-           TOBN(0x7816ade0, 0x62f5eee3), TOBN(0xdcdbdf43, 0xfcc56d70)}},
-         {{TOBN(0x9fb3bba3, 0x54530bb2), TOBN(0xbde3ef77, 0xcb0869ea),
-           TOBN(0x89bc9046, 0x0b431163), TOBN(0x4d03d7d2, 0xe4819a35)},
-          {TOBN(0x33ae4f9e, 0x43b6a782), TOBN(0x216db307, 0x9c88a686),
-           TOBN(0x91dd88e0, 0x00ffedd9), TOBN(0xb280da9f, 0x12bd4840)}},
-         {{TOBN(0x32a7cb8a, 0x1635e741), TOBN(0xfe14008a, 0x78be02a7),
-           TOBN(0x3fafb334, 0x1b7ae030), TOBN(0x7fd508e7, 0x5add0ce9)},
-          {TOBN(0x72c83219, 0xd607ad51), TOBN(0x0f229c0a, 0x8d40964a),
-           TOBN(0x1be2c336, 0x1c878da2), TOBN(0xe0c96742, 0xeab2ab86)}},
-         {{TOBN(0x458f8691, 0x3e538cd7), TOBN(0xa7001f6c, 0x8e08ad53),
-           TOBN(0x52b8c6e6, 0xbf5d15ff), TOBN(0x548234a4, 0x011215dd)},
-          {TOBN(0xff5a9d2d, 0x3d5b4045), TOBN(0xb0ffeeb6, 0x4a904190),
-           TOBN(0x55a3aca4, 0x48607f8b), TOBN(0x8cbd665c, 0x30a0672a)}},
-         {{TOBN(0x87f834e0, 0x42583068), TOBN(0x02da2aeb, 0xf3f6e683),
-           TOBN(0x6b763e5d, 0x05c12248), TOBN(0x7230378f, 0x65a8aefc)},
-          {TOBN(0x93bd80b5, 0x71e8e5ca), TOBN(0x53ab041c, 0xb3b62524),
-           TOBN(0x1b860513, 0x6c9c552e), TOBN(0xe84d402c, 0xd5524e66)}},
-         {{TOBN(0xa37f3573, 0xf37f5937), TOBN(0xeb0f6c7d, 0xd1e4fca5),
-           TOBN(0x2965a554, 0xac8ab0fc), TOBN(0x17fbf56c, 0x274676ac)},
-          {TOBN(0x2e2f6bd9, 0xacf7d720), TOBN(0x41fc8f88, 0x10224766),
-           TOBN(0x517a14b3, 0x85d53bef), TOBN(0xdae327a5, 0x7d76a7d1)}},
-         {{TOBN(0x6ad0a065, 0xc4818267), TOBN(0x33aa189b, 0x37c1bbc1),
-           TOBN(0x64970b52, 0x27392a92), TOBN(0x21699a1c, 0x2d1535ea)},
-          {TOBN(0xcd20779c, 0xc2d7a7fd), TOBN(0xe3186059, 0x99c83cf2),
-           TOBN(0x9b69440b, 0x72c0b8c7), TOBN(0xa81497d7, 0x7b9e0e4d)}},
-         {{TOBN(0x515d5c89, 0x1f5f82dc), TOBN(0x9a7f67d7, 0x6361079e),
-           TOBN(0xa8da81e3, 0x11a35330), TOBN(0xe44990c4, 0x4b18be1b)},
-          {TOBN(0xc7d5ed95, 0xaf103e59), TOBN(0xece8aba7, 0x8dac9261),
-           TOBN(0xbe82b099, 0x9394b8d3), TOBN(0x6830f09a, 0x16adfe83)}},
-         {{TOBN(0x250a29b4, 0x88172d01), TOBN(0x8b20bd65, 0xcaff9e02),
-           TOBN(0xb8a7661e, 0xe8a6329a), TOBN(0x4520304d, 0xd3fce920)},
-          {TOBN(0xae45da1f, 0x2b47f7ef), TOBN(0xe07f5288, 0x5bffc540),
-           TOBN(0xf7997009, 0x3464f874), TOBN(0x2244c2cd, 0xa6fa1f38)}},
-         {{TOBN(0x43c41ac1, 0x94d7d9b1), TOBN(0x5bafdd82, 0xc82e7f17),
-           TOBN(0xdf0614c1, 0x5fda0fca), TOBN(0x74b043a7, 0xa8ae37ad)},
-          {TOBN(0x3ba6afa1, 0x9e71734c), TOBN(0x15d5437e, 0x9c450f2e),
-           TOBN(0x4a5883fe, 0x67e242b1), TOBN(0x5143bdc2, 0x2c1953c2)}},
-         {{TOBN(0x542b8b53, 0xfc5e8920), TOBN(0x363bf9a8, 0x9a9cee08),
-           TOBN(0x02375f10, 0xc3486e08), TOBN(0x2037543b, 0x8c5e70d2)},
-          {TOBN(0x7109bccc, 0x625640b4), TOBN(0xcbc1051e, 0x8bc62c3b),
-           TOBN(0xf8455fed, 0x803f26ea), TOBN(0x6badceab, 0xeb372424)}},
-         {{TOBN(0xa2a9ce7c, 0x6b53f5f9), TOBN(0x64246595, 0x1b176d99),
-           TOBN(0xb1298d36, 0xb95c081b), TOBN(0x53505bb8, 0x1d9a9ee6)},
-          {TOBN(0x3f6f9e61, 0xf2ba70b0), TOBN(0xd07e16c9, 0x8afad453),
-           TOBN(0x9f1694bb, 0xe7eb4a6a), TOBN(0xdfebced9, 0x3cb0bc8e)}},
-         {{TOBN(0x92d3dcdc, 0x53868c8b), TOBN(0x174311a2, 0x386107a6),
-           TOBN(0x4109e07c, 0x689b4e64), TOBN(0x30e4587f, 0x2df3dcb6)},
-          {TOBN(0x841aea31, 0x0811b3b2), TOBN(0x6144d41d, 0x0cce43ea),
-           TOBN(0x464c4581, 0x2a9a7803), TOBN(0xd03d371f, 0x3e158930)}},
-         {{TOBN(0xc676d7f2, 0xb1f3390b), TOBN(0x9f7a1b8c, 0xa5b61272),
-           TOBN(0x4ebebfc9, 0xc2e127a9), TOBN(0x4602500c, 0x5dd997bf)},
-          {TOBN(0x7f09771c, 0x4711230f), TOBN(0x058eb37c, 0x020f09c1),
-           TOBN(0xab693d4b, 0xfee5e38b), TOBN(0x9289eb1f, 0x4653cbc0)}},
-         {{TOBN(0xbecf46ab, 0xd51b9cf5), TOBN(0xd2aa9c02, 0x9f0121af),
-           TOBN(0x36aaf7d2, 0xe90dc274), TOBN(0x909e4ea0, 0x48b95a3c)},
-          {TOBN(0xe6b70496, 0x6f32dbdb), TOBN(0x672188a0, 0x8b030b3e),
-           TOBN(0xeeffe5b3, 0xcfb617e2), TOBN(0x87e947de, 0x7c82709e)}},
-         {{TOBN(0xa44d2b39, 0x1770f5a7), TOBN(0xe4d4d791, 0x0e44eb82),
-           TOBN(0x42e69d1e, 0x3f69712a), TOBN(0xbf11c4d6, 0xac6a820e)},
-          {TOBN(0xb5e7f3e5, 0x42c4224c), TOBN(0xd6b4e81c, 0x449d941c),
-           TOBN(0x5d72bd16, 0x5450e878), TOBN(0x6a61e28a, 0xee25ac54)}},
-         {{TOBN(0x33272094, 0xe6f1cd95), TOBN(0x7512f30d, 0x0d18673f),
-           TOBN(0x32f7a4ca, 0x5afc1464), TOBN(0x2f095656, 0x6bbb977b)},
-          {TOBN(0x586f47ca, 0xa8226200), TOBN(0x02c868ad, 0x1ac07369),
-           TOBN(0x4ef2b845, 0xc613acbe), TOBN(0x43d7563e, 0x0386054c)}},
-         {{TOBN(0x54da9dc7, 0xab952578), TOBN(0xb5423df2, 0x26e84d0b),
-           TOBN(0xa8b64eeb, 0x9b872042), TOBN(0xac205782, 0x5990f6df)},
-          {TOBN(0x4ff696eb, 0x21f4c77a), TOBN(0x1a79c3e4, 0xaab273af),
-           TOBN(0x29bc922e, 0x9436b3f1), TOBN(0xff807ef8, 0xd6d9a27a)}},
-         {{TOBN(0x82acea3d, 0x778f22a0), TOBN(0xfb10b2e8, 0x5b5e7469),
-           TOBN(0xc0b16980, 0x2818ee7d), TOBN(0x011afff4, 0xc91c1a2f)},
-          {TOBN(0x95a6d126, 0xad124418), TOBN(0x31c081a5, 0xe72e295f),
-           TOBN(0x36bb283a, 0xf2f4db75), TOBN(0xd115540f, 0x7acef462)}},
-         {{TOBN(0xc7f3a8f8, 0x33f6746c), TOBN(0x21e46f65, 0xfea990ca),
-           TOBN(0x915fd5c5, 0xcaddb0a9), TOBN(0xbd41f016, 0x78614555)},
-          {TOBN(0x346f4434, 0x426ffb58), TOBN(0x80559436, 0x14dbc204),
-           TOBN(0xf3dd20fe, 0x5a969b7f), TOBN(0x9d59e956, 0xe899a39a)}},
-         {{TOBN(0xf1b0971c, 0x8ad4cf4b), TOBN(0x03448860, 0x2ffb8fb8),
-           TOBN(0xf071ac3c, 0x65340ba4), TOBN(0x408d0596, 0xb27fd758)},
-          {TOBN(0xe7c78ea4, 0x98c364b0), TOBN(0xa4aac4a5, 0x051e8ab5),
-           TOBN(0xb9e1d560, 0x485d9002), TOBN(0x9acd518a, 0x88844455)}},
-         {{TOBN(0xe4ca688f, 0xd06f56c0), TOBN(0xa48af70d, 0xdf027972),
-           TOBN(0x691f0f04, 0x5e9a609d), TOBN(0xa9dd82cd, 0xee61270e)},
-          {TOBN(0x8903ca63, 0xa0ef18d3), TOBN(0x9fb7ee35, 0x3d6ca3bd),
-           TOBN(0xa7b4a09c, 0xabf47d03), TOBN(0x4cdada01, 0x1c67de8e)}},
-         {{TOBN(0x52003749, 0x9355a244), TOBN(0xe77fd2b6, 0x4f2151a9),
-           TOBN(0x695d6cf6, 0x66b4efcb), TOBN(0xc5a0cacf, 0xda2cfe25)},
-          {TOBN(0x104efe5c, 0xef811865), TOBN(0xf52813e8, 0x9ea5cc3d),
-           TOBN(0x855683dc, 0x40b58dbc), TOBN(0x0338ecde, 0x175fcb11)}},
-         {{TOBN(0xf9a05637, 0x74921592), TOBN(0xb4f1261d, 0xb9bb9d31),
-           TOBN(0x551429b7, 0x4e9c5459), TOBN(0xbe182e6f, 0x6ea71f53)},
-          {TOBN(0xd3a3b07c, 0xdfc50573), TOBN(0x9ba1afda, 0x62be8d44),
-           TOBN(0x9bcfd2cb, 0x52ab65d3), TOBN(0xdf11d547, 0xa9571802)}},
-         {{TOBN(0x099403ee, 0x02a2404a), TOBN(0x497406f4, 0x21088a71),
-           TOBN(0x99479409, 0x5004ae71), TOBN(0xbdb42078, 0xa812c362)},
-          {TOBN(0x2b72a30f, 0xd8828442), TOBN(0x283add27, 0xfcb5ed1c),
-           TOBN(0xf7c0e200, 0x66a40015), TOBN(0x3e3be641, 0x08b295ef)}},
-         {{TOBN(0xac127dc1, 0xe038a675), TOBN(0x729deff3, 0x8c5c6320),
-           TOBN(0xb7df8fd4, 0xa90d2c53), TOBN(0x9b74b0ec, 0x681e7cd3)},
-          {TOBN(0x5cb5a623, 0xdab407e5), TOBN(0xcdbd3615, 0x76b340c6),
-           TOBN(0xa184415a, 0x7d28392c), TOBN(0xc184c1d8, 0xe96f7830)}},
-         {{TOBN(0xc3204f19, 0x81d3a80f), TOBN(0xfde0c841, 0xc8e02432),
-           TOBN(0x78203b3e, 0x8149e0c1), TOBN(0x5904bdbb, 0x08053a73)},
-          {TOBN(0x30fc1dd1, 0x101b6805), TOBN(0x43c223bc, 0x49aa6d49),
-           TOBN(0x9ed67141, 0x7a174087), TOBN(0x311469a0, 0xd5997008)}},
-         {{TOBN(0xb189b684, 0x5e43fc61), TOBN(0xf3282375, 0xe0d3ab57),
-           TOBN(0x4fa34b67, 0xb1181da8), TOBN(0x621ed0b2, 0x99ee52b8)},
-          {TOBN(0x9b178de1, 0xad990676), TOBN(0xd51de67b, 0x56d54065),
-           TOBN(0x2a2c27c4, 0x7538c201), TOBN(0x33856ec8, 0x38a40f5c)}},
-         {{TOBN(0x2522fc15, 0xbe6cdcde), TOBN(0x1e603f33, 0x9f0c6f89),
-           TOBN(0x7994edc3, 0x103e30a6), TOBN(0x033a00db, 0x220c853e)},
-          {TOBN(0xd3cfa409, 0xf7bb7fd7), TOBN(0x70f8781e, 0x462d18f6),
-           TOBN(0xbbd82980, 0x687fe295), TOBN(0x6eef4c32, 0x595669f3)}},
-         {{TOBN(0x86a9303b, 0x2f7e85c3), TOBN(0x5fce4621, 0x71988f9b),
-           TOBN(0x5b935bf6, 0xc138acb5), TOBN(0x30ea7d67, 0x25661212)},
-          {TOBN(0xef1eb5f4, 0xe51ab9a2), TOBN(0x0587c98a, 0xae067c78),
-           TOBN(0xb3ce1b3c, 0x77ca9ca6), TOBN(0x2a553d4d, 0x54b5f057)}},
-         {{TOBN(0xc7898236, 0x4da29ec2), TOBN(0xdbdd5d13, 0xb9c57316),
-           TOBN(0xc57d6e6b, 0x2cd80d47), TOBN(0x80b460cf, 0xfe9e7391)},
-          {TOBN(0x98648cab, 0xf963c31e), TOBN(0x67f9f633, 0xcc4d32fd),
-           TOBN(0x0af42a9d, 0xfdf7c687), TOBN(0x55f292a3, 0x0b015ea7)}},
-         {{TOBN(0x89e468b2, 0xcd21ab3d), TOBN(0xe504f022, 0xc393d392),
-           TOBN(0xab21e1d4, 0xa5013af9), TOBN(0xe3283f78, 0xc2c28acb)},
-          {TOBN(0xf38b35f6, 0x226bf99f), TOBN(0xe8354274, 0x0e291e69),
-           TOBN(0x61673a15, 0xb20c162d), TOBN(0xc101dc75, 0xb04fbdbe)}},
-         {{TOBN(0x8323b4c2, 0x255bd617), TOBN(0x6c969693, 0x6c2a9154),
-           TOBN(0xc6e65860, 0x62679387), TOBN(0x8e01db0c, 0xb8c88e23)},
-          {TOBN(0x33c42873, 0x893a5559), TOBN(0x7630f04b, 0x47a3e149),
-           TOBN(0xb5d80805, 0xddcf35f8), TOBN(0x582ca080, 0x77dfe732)}},
-         {{TOBN(0x2c7156e1, 0x0b1894a0), TOBN(0x92034001, 0xd81c68c0),
-           TOBN(0xed225d00, 0xc8b115b5), TOBN(0x237f9c22, 0x83b907f2)},
-          {TOBN(0x0ea2f32f, 0x4470e2c0), TOBN(0xb725f7c1, 0x58be4e95),
-           TOBN(0x0f1dcafa, 0xb1ae5463), TOBN(0x59ed5187, 0x1ba2fc04)}},
-         {{TOBN(0xf6e0f316, 0xd0115d4d), TOBN(0x5180b12f, 0xd3691599),
-           TOBN(0x157e32c9, 0x527f0a41), TOBN(0x7b0b081d, 0xa8e0ecc0)},
-          {TOBN(0x6dbaaa8a, 0xbf4f0dd0), TOBN(0x99b289c7, 0x4d252696),
-           TOBN(0x79b7755e, 0xdbf864fe), TOBN(0x6974e2b1, 0x76cad3ab)}},
-         {{TOBN(0x35dbbee2, 0x06ddd657), TOBN(0xe7cbdd11, 0x2ff3a96d),
-           TOBN(0x88381968, 0x076be758), TOBN(0x2d737e72, 0x08c91f5d)},
-          {TOBN(0x5f83ab62, 0x86ec3776), TOBN(0x98aa649d, 0x945fa7a1),
-           TOBN(0xf477ec37, 0x72ef0933), TOBN(0x66f52b1e, 0x098c17b1)}},
-         {{TOBN(0x9eec58fb, 0xd803738b), TOBN(0x91aaade7, 0xe4e86aa4),
-           TOBN(0x6b1ae617, 0xa5b51492), TOBN(0x63272121, 0xbbc45974)},
-          {TOBN(0x7e0e28f0, 0x862c5129), TOBN(0x0a8f79a9, 0x3321a4a0),
-           TOBN(0xe26d1664, 0x5041c88f), TOBN(0x0571b805, 0x53233e3a)}},
-         {{TOBN(0xd1b0ccde, 0xc9520711), TOBN(0x55a9e4ed, 0x3c8b84bf),
-           TOBN(0x9426bd39, 0xa1fef314), TOBN(0x4f5f638e, 0x6eb93f2b)},
-          {TOBN(0xba2a1ed3, 0x2bf9341b), TOBN(0xd63c1321, 0x4d42d5a9),
-           TOBN(0xd2964a89, 0x316dc7c5), TOBN(0xd1759606, 0xca511851)}},
-         {{TOBN(0xd8a9201f, 0xf9e6ed35), TOBN(0xb7b5ee45, 0x6736925a),
-           TOBN(0x0a83fbbc, 0x99581af7), TOBN(0x3076bc40, 0x64eeb051)},
-          {TOBN(0x5511c98c, 0x02dec312), TOBN(0x270de898, 0x238dcb78),
-           TOBN(0x2cf4cf9c, 0x539c08c9), TOBN(0xa70cb65e, 0x38d3b06e)}},
-         {{TOBN(0xb12ec10e, 0xcfe57bbd), TOBN(0x82c7b656, 0x35a0c2b5),
-           TOBN(0xddc7d5cd, 0x161c67bd), TOBN(0xe32e8985, 0xae3a32cc)},
-          {TOBN(0x7aba9444, 0xd11a5529), TOBN(0xe964ed02, 0x2427fa1a),
-           TOBN(0x1528392d, 0x24a1770a), TOBN(0xa152ce2c, 0x12c72fcd)}},
-         {{TOBN(0x714553a4, 0x8ec07649), TOBN(0x18b4c290, 0x459dd453),
-           TOBN(0xea32b714, 0x7b64b110), TOBN(0xb871bfa5, 0x2e6f07a2)},
-          {TOBN(0xb67112e5, 0x9e2e3c9b), TOBN(0xfbf250e5, 0x44aa90f6),
-           TOBN(0xf77aedb8, 0xbd539006), TOBN(0x3b0cdf9a, 0xd172a66f)}},
-         {{TOBN(0xedf69fea, 0xf8c51187), TOBN(0x05bb67ec, 0x741e4da7),
-           TOBN(0x47df0f32, 0x08114345), TOBN(0x56facb07, 0xbb9792b1)},
-          {TOBN(0xf3e007e9, 0x8f6229e4), TOBN(0x62d103f4, 0x526fba0f),
-           TOBN(0x4f33bef7, 0xb0339d79), TOBN(0x9841357b, 0xb59bfec1)}},
-         {{TOBN(0xfa8dbb59, 0xc34e6705), TOBN(0xc3c7180b, 0x7fdaa84c),
-           TOBN(0xf95872fc, 0xa4108537), TOBN(0x8750cc3b, 0x932a3e5a)},
-          {TOBN(0xb61cc69d, 0xb7275d7d), TOBN(0xffa0168b, 0x2e59b2e9),
-           TOBN(0xca032abc, 0x6ecbb493), TOBN(0x1d86dbd3, 0x2c9082d8)}},
-         {{TOBN(0xae1e0b67, 0xe28ef5ba), TOBN(0x2c9a4699, 0xcb18e169),
-           TOBN(0x0ecd0e33, 0x1e6bbd20), TOBN(0x571b360e, 0xaf5e81d2)},
-          {TOBN(0xcd9fea58, 0x101c1d45), TOBN(0x6651788e, 0x18880452),
-           TOBN(0xa9972635, 0x1f8dd446), TOBN(0x44bed022, 0xe37281d0)}},
-         {{TOBN(0x094b2b2d, 0x33da525d), TOBN(0xf193678e, 0x13144fd8),
-           TOBN(0xb8ab5ba4, 0xf4c1061d), TOBN(0x4343b5fa, 0xdccbe0f4)},
-          {TOBN(0xa8702371, 0x63812713), TOBN(0x47bf6d2d, 0xf7611d93),
-           TOBN(0x46729b8c, 0xbd21e1d7), TOBN(0x7484d4e0, 0xd629e77d)}},
-         {{TOBN(0x830e6eea, 0x60dbac1f), TOBN(0x23d8c484, 0xda06a2f7),
-           TOBN(0x896714b0, 0x50ca535b), TOBN(0xdc8d3644, 0xebd97a9b)},
-          {TOBN(0x106ef9fa, 0xb12177b4), TOBN(0xf79bf464, 0x534d5d9c),
-           TOBN(0x2537a349, 0xa6ab360b), TOBN(0xc7c54253, 0xa00c744f)}},
-         {{TOBN(0xb3c7a047, 0xe5911a76), TOBN(0x61ffa5c8, 0x647f1ee7),
-           TOBN(0x15aed36f, 0x8f56ab42), TOBN(0x6a0d41b0, 0xa3ff9ac9)},
-          {TOBN(0x68f469f5, 0xcc30d357), TOBN(0xbe9adf81, 0x6b72be96),
-           TOBN(0x1cd926fe, 0x903ad461), TOBN(0x7e89e38f, 0xcaca441b)}},
-         {{TOBN(0xf0f82de5, 0xfacf69d4), TOBN(0x363b7e76, 0x4775344c),
-           TOBN(0x6894f312, 0xb2e36d04), TOBN(0x3c6cb4fe, 0x11d1c9a5)},
-          {TOBN(0x85d9c339, 0x4008e1f2), TOBN(0x5e9a85ea, 0x249f326c),
-           TOBN(0xdc35c60a, 0x678c5e06), TOBN(0xc08b944f, 0x9f86fba9)}},
-         {{TOBN(0xde40c02c, 0x89f71f0f), TOBN(0xad8f3e31, 0xff3da3c0),
-           TOBN(0x3ea5096b, 0x42125ded), TOBN(0x13879cbf, 0xa7379183)},
-          {TOBN(0x6f4714a5, 0x6b306a0b), TOBN(0x359c2ea6, 0x67646c5e),
-           TOBN(0xfacf8943, 0x07726368), TOBN(0x07a58935, 0x65ff431e)}},
-         {{TOBN(0x24d661d1, 0x68754ab0), TOBN(0x801fce1d, 0x6f429a76),
-           TOBN(0xc068a85f, 0xa58ce769), TOBN(0xedc35c54, 0x5d5eca2b)},
-          {TOBN(0xea31276f, 0xa3f660d1), TOBN(0xa0184ebe, 0xb8fc7167),
-           TOBN(0x0f20f21a, 0x1d8db0ae), TOBN(0xd96d095f, 0x56c35e12)}},
-         {{TOBN(0xedf402b5, 0xf8c2a25b), TOBN(0x1bb772b9, 0x059204b6),
-           TOBN(0x50cbeae2, 0x19b4e34c), TOBN(0x93109d80, 0x3fa0845a)},
-          {TOBN(0x54f7ccf7, 0x8ef59fb5), TOBN(0x3b438fe2, 0x88070963),
-           TOBN(0x9e28c659, 0x31f3ba9b), TOBN(0x9cc31b46, 0xead9da92)}},
-         {{TOBN(0x3c2f0ba9, 0xb733aa5f), TOBN(0xdece47cb, 0xf05af235),
-           TOBN(0xf8e3f715, 0xa2ac82a5), TOBN(0xc97ba641, 0x2203f18a)},
-          {TOBN(0xc3af5504, 0x09c11060), TOBN(0x56ea2c05, 0x46af512d),
-           TOBN(0xfac28daf, 0xf3f28146), TOBN(0x87fab43a, 0x959ef494)}}},
-        {{{TOBN(0x09891641, 0xd4c5105f), TOBN(0x1ae80f8e, 0x6d7fbd65),
-           TOBN(0x9d67225f, 0xbee6bdb0), TOBN(0x3b433b59, 0x7fc4d860)},
-          {TOBN(0x44e66db6, 0x93e85638), TOBN(0xf7b59252, 0xe3e9862f),
-           TOBN(0xdb785157, 0x665c32ec), TOBN(0x702fefd7, 0xae362f50)}},
-         {{TOBN(0x3754475d, 0x0fefb0c3), TOBN(0xd48fb56b, 0x46d7c35d),
-           TOBN(0xa070b633, 0x363798a4), TOBN(0xae89f3d2, 0x8fdb98e6)},
-          {TOBN(0x970b89c8, 0x6363d14c), TOBN(0x89817521, 0x67abd27d),
-           TOBN(0x9bf7d474, 0x44d5a021), TOBN(0xb3083baf, 0xcac72aee)}},
-         {{TOBN(0x389741de, 0xbe949a44), TOBN(0x638e9388, 0x546a4fa5),
-           TOBN(0x3fe6419c, 0xa0047bdc), TOBN(0x7047f648, 0xaaea57ca)},
-          {TOBN(0x54e48a90, 0x41fbab17), TOBN(0xda8e0b28, 0x576bdba2),
-           TOBN(0xe807eebc, 0xc72afddc), TOBN(0x07d3336d, 0xf42577bf)}},
-         {{TOBN(0x62a8c244, 0xbfe20925), TOBN(0x91c19ac3, 0x8fdce867),
-           TOBN(0x5a96a5d5, 0xdd387063), TOBN(0x61d587d4, 0x21d324f6)},
-          {TOBN(0xe87673a2, 0xa37173ea), TOBN(0x23848008, 0x53778b65),
-           TOBN(0x10f8441e, 0x05bab43e), TOBN(0xfa11fe12, 0x4621efbe)}},
-         {{TOBN(0x047b772e, 0x81685d7b), TOBN(0x23f27d81, 0xbf34a976),
-           TOBN(0xc27608e2, 0x915f48ef), TOBN(0x3b0b43fa, 0xa521d5c3)},
-          {TOBN(0x7613fb26, 0x63ca7284), TOBN(0x7f5729b4, 0x1d4db837),
-           TOBN(0x87b14898, 0x583b526b), TOBN(0x00b732a6, 0xbbadd3d1)}},
-         {{TOBN(0x8e02f426, 0x2048e396), TOBN(0x436b50b6, 0x383d9de4),
-           TOBN(0xf78d3481, 0x471e85ad), TOBN(0x8b01ea6a, 0xd005c8d6)},
-          {TOBN(0xd3c7afee, 0x97015c07), TOBN(0x46cdf1a9, 0x4e3ba2ae),
-           TOBN(0x7a42e501, 0x83d3a1d2), TOBN(0xd54b5268, 0xb541dff4)}},
-         {{TOBN(0x3f24cf30, 0x4e23e9bc), TOBN(0x4387f816, 0x126e3624),
-           TOBN(0x26a46a03, 0x3b0b6d61), TOBN(0xaf1bc845, 0x8b2d777c)},
-          {TOBN(0x25c401ba, 0x527de79c), TOBN(0x0e1346d4, 0x4261bbb6),
-           TOBN(0x4b96c44b, 0x287b4bc7), TOBN(0x658493c7, 0x5254562f)}},
-         {{TOBN(0x23f949fe, 0xb8a24a20), TOBN(0x17ebfed1, 0xf52ca53f),
-           TOBN(0x9b691bbe, 0xbcfb4853), TOBN(0x5617ff6b, 0x6278a05d)},
-          {TOBN(0x241b34c5, 0xe3c99ebd), TOBN(0xfc64242e, 0x1784156a),
-           TOBN(0x4206482f, 0x695d67df), TOBN(0xb967ce0e, 0xee27c011)}},
-         {{TOBN(0x65db3751, 0x21c80b5d), TOBN(0x2e7a563c, 0xa31ecca0),
-           TOBN(0xe56ffc4e, 0x5238a07e), TOBN(0x3d6c2966, 0x32ced854)},
-          {TOBN(0xe99d7d1a, 0xaf70b885), TOBN(0xafc3bad9, 0x2d686459),
-           TOBN(0x9c78bf46, 0x0cc8ba5b), TOBN(0x5a439519, 0x18955aa3)}},
-         {{TOBN(0xf8b517a8, 0x5fe4e314), TOBN(0xe60234d0, 0xfcb8906f),
-           TOBN(0xffe542ac, 0xf2061b23), TOBN(0x287e191f, 0x6b4cb59c)},
-          {TOBN(0x21857ddc, 0x09d877d8), TOBN(0x1c23478c, 0x14678941),
-           TOBN(0xbbf0c056, 0xb6e05ea4), TOBN(0x82da4b53, 0xb01594fe)}},
-         {{TOBN(0xf7526791, 0xfadb8608), TOBN(0x049e832d, 0x7b74cdf6),
-           TOBN(0xa43581cc, 0xc2b90a34), TOBN(0x73639eb8, 0x9360b10c)},
-          {TOBN(0x4fba331f, 0xe1e4a71b), TOBN(0x6ffd6b93, 0x8072f919),
-           TOBN(0x6e53271c, 0x65679032), TOBN(0x67206444, 0xf14272ce)}},
-         {{TOBN(0xc0f734a3, 0xb2335834), TOBN(0x9526205a, 0x90ef6860),
-           TOBN(0xcb8be717, 0x04e2bb0d), TOBN(0x2418871e, 0x02f383fa)},
-          {TOBN(0xd7177681, 0x4082c157), TOBN(0xcc914ad0, 0x29c20073),
-           TOBN(0xf186c1eb, 0xe587e728), TOBN(0x6fdb3c22, 0x61bcd5fd)}},
-         {{TOBN(0x30d014a6, 0xf2f9f8e9), TOBN(0x963ece23, 0x4fec49d2),
-           TOBN(0x862025c5, 0x9605a8d9), TOBN(0x39874445, 0x19f8929a)},
-          {TOBN(0x01b6ff65, 0x12bf476a), TOBN(0x598a64d8, 0x09cf7d91),
-           TOBN(0xd7ec7749, 0x93be56ca), TOBN(0x10899785, 0xcbb33615)}},
-         {{TOBN(0xb8a092fd, 0x02eee3ad), TOBN(0xa86b3d35, 0x30145270),
-           TOBN(0x323d98c6, 0x8512b675), TOBN(0x4b8bc785, 0x62ebb40f)},
-          {TOBN(0x7d301f54, 0x413f9cde), TOBN(0xa5e4fb4f, 0x2bab5664),
-           TOBN(0x1d2b252d, 0x1cbfec23), TOBN(0xfcd576bb, 0xe177120d)}},
-         {{TOBN(0x04427d3e, 0x83731a34), TOBN(0x2bb9028e, 0xed836e8e),
-           TOBN(0xb36acff8, 0xb612ca7c), TOBN(0xb88fe5ef, 0xd3d9c73a)},
-          {TOBN(0xbe2a6bc6, 0xedea4eb3), TOBN(0x43b93133, 0x488eec77),
-           TOBN(0xf41ff566, 0xb17106e1), TOBN(0x469e9172, 0x654efa32)}},
-         {{TOBN(0xb4480f04, 0x41c23fa3), TOBN(0xb4712eb0, 0xc1989a2e),
-           TOBN(0x3ccbba0f, 0x93a29ca7), TOBN(0x6e205c14, 0xd619428c)},
-          {TOBN(0x90db7957, 0xb3641686), TOBN(0x0432691d, 0x45ac8b4e),
-           TOBN(0x07a759ac, 0xf64e0350), TOBN(0x0514d89c, 0x9c972517)}},
-         {{TOBN(0x1701147f, 0xa8e67fc3), TOBN(0x9e2e0b8b, 0xab2085be),
-           TOBN(0xd5651824, 0xac284e57), TOBN(0x890d4325, 0x74893664)},
-          {TOBN(0x8a7c5e6e, 0xc55e68a3), TOBN(0xbf12e90b, 0x4339c85a),
-           TOBN(0x31846b85, 0xf922b655), TOBN(0x9a54ce4d, 0x0bf4d700)}},
-         {{TOBN(0xd7f4e83a, 0xf1a14295), TOBN(0x916f955c, 0xb285d4f9),
-           TOBN(0xe57bb0e0, 0x99ffdaba), TOBN(0x28a43034, 0xeab0d152)},
-          {TOBN(0x0a36ffa2, 0xb8a9cef8), TOBN(0x5517407e, 0xb9ec051a),
-           TOBN(0x9c796096, 0xea68e672), TOBN(0x853db5fb, 0xfb3c77fb)}},
-         {{TOBN(0x21474ba9, 0xe864a51a), TOBN(0x6c267699, 0x6e8a1b8b),
-           TOBN(0x7c823626, 0x94120a28), TOBN(0xe61e9a48, 0x8383a5db)},
-          {TOBN(0x7dd75003, 0x9f84216d), TOBN(0xab020d07, 0xad43cd85),
-           TOBN(0x9437ae48, 0xda12c659), TOBN(0x6449c2eb, 0xe65452ad)}},
-         {{TOBN(0xcc7c4c1c, 0x2cf9d7c1), TOBN(0x1320886a, 0xee95e5ab),
-           TOBN(0xbb7b9056, 0xbeae170c), TOBN(0xc8a5b250, 0xdbc0d662)},
-          {TOBN(0x4ed81432, 0xc11d2303), TOBN(0x7da66912, 0x1f03769f),
-           TOBN(0x3ac7a5fd, 0x84539828), TOBN(0x14dada94, 0x3bccdd02)}},
-         {{TOBN(0x8b84c321, 0x7ef6b0d1), TOBN(0x52a9477a, 0x7c933f22),
-           TOBN(0x5ef6728a, 0xfd440b82), TOBN(0x5c3bd859, 0x6ce4bd5e)},
-          {TOBN(0x918b80f5, 0xf22c2d3e), TOBN(0x368d5040, 0xb7bb6cc5),
-           TOBN(0xb66142a1, 0x2695a11c), TOBN(0x60ac583a, 0xeb19ea70)}},
-         {{TOBN(0x317cbb98, 0x0eab2437), TOBN(0x8cc08c55, 0x5e2654c8),
-           TOBN(0xfe2d6520, 0xe6d8307f), TOBN(0xe9f147f3, 0x57428993)},
-          {TOBN(0x5f9c7d14, 0xd2fd6cf1), TOBN(0xa3ecd064, 0x2d4fcbb0),
-           TOBN(0xad83fef0, 0x8e7341f7), TOBN(0x643f23a0, 0x3a63115c)}},
-         {{TOBN(0xd38a78ab, 0xe65ab743), TOBN(0xbf7c75b1, 0x35edc89c),
-           TOBN(0x3dd8752e, 0x530df568), TOBN(0xf85c4a76, 0xe308c682)},
-          {TOBN(0x4c9955b2, 0xe68acf37), TOBN(0xa544df3d, 0xab32af85),
-           TOBN(0x4b8ec3f5, 0xa25cf493), TOBN(0x4d8f2764, 0x1a622feb)}},
-         {{TOBN(0x7bb4f7aa, 0xf0dcbc49), TOBN(0x7de551f9, 0x70bbb45b),
-           TOBN(0xcfd0f3e4, 0x9f2ca2e5), TOBN(0xece58709, 0x1f5c76ef)},
-          {TOBN(0x32920edd, 0x167d79ae), TOBN(0x039df8a2, 0xfa7d7ec1),
-           TOBN(0xf46206c0, 0xbb30af91), TOBN(0x1ff5e2f5, 0x22676b59)}},
-         {{TOBN(0x11f4a039, 0x6ea51d66), TOBN(0x506c1445, 0x807d7a26),
-           TOBN(0x60da5705, 0x755a9b24), TOBN(0x8fc8cc32, 0x1f1a319e)},
-          {TOBN(0x83642d4d, 0x9433d67d), TOBN(0x7fa5cb8f, 0x6a7dd296),
-           TOBN(0x576591db, 0x9b7bde07), TOBN(0x13173d25, 0x419716fb)}},
-         {{TOBN(0xea30599d, 0xd5b340ff), TOBN(0xfc6b5297, 0xb0fe76c5),
-           TOBN(0x1c6968c8, 0xab8f5adc), TOBN(0xf723c7f5, 0x901c928d)},
-          {TOBN(0x4203c321, 0x9773d402), TOBN(0xdf7c6aa3, 0x1b51dd47),
-           TOBN(0x3d49e37a, 0x552be23c), TOBN(0x57febee8, 0x0b5a6e87)}},
-         {{TOBN(0xc5ecbee4, 0x7bd8e739), TOBN(0x79d44994, 0xae63bf75),
-           TOBN(0x168bd00f, 0x38fb8923), TOBN(0x75d48ee4, 0xd0533130)},
-          {TOBN(0x554f77aa, 0xdb5cdf33), TOBN(0x3396e896, 0x3c696769),
-           TOBN(0x2fdddbf2, 0xd3fd674e), TOBN(0xbbb8f6ee, 0x99d0e3e5)}},
-         {{TOBN(0x51b90651, 0xcbae2f70), TOBN(0xefc4bc05, 0x93aaa8eb),
-           TOBN(0x8ecd8689, 0xdd1df499), TOBN(0x1aee99a8, 0x22f367a5)},
-          {TOBN(0x95d485b9, 0xae8274c5), TOBN(0x6c14d445, 0x7d30b39c),
-           TOBN(0xbafea90b, 0xbcc1ef81), TOBN(0x7c5f317a, 0xa459a2ed)}},
-         {{TOBN(0x01211075, 0x4ef44227), TOBN(0xa17bed6e, 0xdc20f496),
-           TOBN(0x0cdfe424, 0x819853cd), TOBN(0x13793298, 0xf71e2ce7)},
-          {TOBN(0x3c1f3078, 0xdbbe307b), TOBN(0x6dd1c20e, 0x76ee9936),
-           TOBN(0x23ee4b57, 0x423caa20), TOBN(0x4ac3793b, 0x8efb840e)}},
-         {{TOBN(0x934438eb, 0xed1f8ca0), TOBN(0x3e546658, 0x4ebb25a2),
-           TOBN(0xc415af0e, 0xc069896f), TOBN(0xc13eddb0, 0x9a5aa43d)},
-          {TOBN(0x7a04204f, 0xd49eb8f6), TOBN(0xd0d5bdfc, 0xd74f1670),
-           TOBN(0x3697e286, 0x56fc0558), TOBN(0x10207371, 0x01cebade)}},
-         {{TOBN(0x5f87e690, 0x0647a82b), TOBN(0x908e0ed4, 0x8f40054f),
-           TOBN(0xa9f633d4, 0x79853803), TOBN(0x8ed13c9a, 0x4a28b252)},
-          {TOBN(0x3e2ef676, 0x1f460f64), TOBN(0x53930b9b, 0x36d06336),
-           TOBN(0x347073ac, 0x8fc4979b), TOBN(0x84380e0e, 0x5ecd5597)}},
-         {{TOBN(0xe3b22c6b, 0xc4fe3c39), TOBN(0xba4a8153, 0x6c7bebdf),
-           TOBN(0xf23ab6b7, 0x25693459), TOBN(0x53bc3770, 0x14922b11)},
-          {TOBN(0x4645c8ab, 0x5afc60db), TOBN(0xaa022355, 0x20b9f2a3),
-           TOBN(0x52a2954c, 0xce0fc507), TOBN(0x8c2731bb, 0x7ce1c2e7)}},
-         {{TOBN(0xf39608ab, 0x18a0339d), TOBN(0xac7a658d, 0x3735436c),
-           TOBN(0xb22c2b07, 0xcd992b4f), TOBN(0x4e83daec, 0xf40dcfd4)},
-          {TOBN(0x8a34c7be, 0x2f39ea3e), TOBN(0xef0c005f, 0xb0a56d2e),
-           TOBN(0x62731f6a, 0x6edd8038), TOBN(0x5721d740, 0x4e3cb075)}},
-         {{TOBN(0x1ea41511, 0xfbeeee1b), TOBN(0xd1ef5e73, 0xef1d0c05),
-           TOBN(0x42feefd1, 0x73c07d35), TOBN(0xe530a00a, 0x8a329493)},
-          {TOBN(0x5d55b7fe, 0xf15ebfb0), TOBN(0x549de03c, 0xd322491a),
-           TOBN(0xf7b5f602, 0x745b3237), TOBN(0x3632a3a2, 0x1ab6e2b6)}},
-         {{TOBN(0x0d3bba89, 0x0ef59f78), TOBN(0x0dfc6443, 0xc9e52b9a),
-           TOBN(0x1dc79699, 0x72631447), TOBN(0xef033917, 0xb3be20b1)},
-          {TOBN(0x0c92735d, 0xb1383948), TOBN(0xc1fc29a2, 0xc0dd7d7d),
-           TOBN(0x6485b697, 0x403ed068), TOBN(0x13bfaab3, 0xaac93bdc)}},
-         {{TOBN(0x410dc6a9, 0x0deeaf52), TOBN(0xb003fb02, 0x4c641c15),
-           TOBN(0x1384978c, 0x5bc504c4), TOBN(0x37640487, 0x864a6a77)},
-          {TOBN(0x05991bc6, 0x222a77da), TOBN(0x62260a57, 0x5e47eb11),
-           TOBN(0xc7af6613, 0xf21b432c), TOBN(0x22f3acc9, 0xab4953e9)}},
-         {{TOBN(0x52934922, 0x8e41d155), TOBN(0x4d024568, 0x3ac059ef),
-           TOBN(0xb0201755, 0x4d884411), TOBN(0xce8055cf, 0xa59a178f)},
-          {TOBN(0xcd77d1af, 0xf6204549), TOBN(0xa0a00a3e, 0xc7066759),
-           TOBN(0x471071ef, 0x0272c229), TOBN(0x009bcf6b, 0xd3c4b6b0)}},
-         {{TOBN(0x2a2638a8, 0x22305177), TOBN(0xd51d59df, 0x41645bbf),
-           TOBN(0xa81142fd, 0xc0a7a3c0), TOBN(0xa17eca6d, 0x4c7063ee)},
-          {TOBN(0x0bb887ed, 0x60d9dcec), TOBN(0xd6d28e51, 0x20ad2455),
-           TOBN(0xebed6308, 0xa67102ba), TOBN(0x042c3114, 0x8bffa408)}},
-         {{TOBN(0xfd099ac5, 0x8aa68e30), TOBN(0x7a6a3d7c, 0x1483513e),
-           TOBN(0xffcc6b75, 0xba2d8f0c), TOBN(0x54dacf96, 0x1e78b954)},
-          {TOBN(0xf645696f, 0xa4a9af89), TOBN(0x3a411940, 0x06ac98ec),
-           TOBN(0x41b8b3f6, 0x22a67a20), TOBN(0x2d0b1e0f, 0x99dec626)}},
-         {{TOBN(0x27c89192, 0x40be34e8), TOBN(0xc7162b37, 0x91907f35),
-           TOBN(0x90188ec1, 0xa956702b), TOBN(0xca132f7d, 0xdf93769c)},
-          {TOBN(0x3ece44f9, 0x0e2025b4), TOBN(0x67aaec69, 0x0c62f14c),
-           TOBN(0xad741418, 0x22e3cc11), TOBN(0xcf9b75c3, 0x7ff9a50e)}},
-         {{TOBN(0x02fa2b16, 0x4d348272), TOBN(0xbd99d61a, 0x9959d56d),
-           TOBN(0xbc4f19db, 0x18762916), TOBN(0xcc7cce50, 0x49c1ac80)},
-          {TOBN(0x4d59ebaa, 0xd846bd83), TOBN(0x8775a9dc, 0xa9202849),
-           TOBN(0x07ec4ae1, 0x6e1f4ca9), TOBN(0x27eb5875, 0xba893f11)}},
-         {{TOBN(0x00284d51, 0x662cc565), TOBN(0x82353a6b, 0x0db4138d),
-           TOBN(0xd9c7aaaa, 0xaa32a594), TOBN(0xf5528b5e, 0xa5669c47)},
-          {TOBN(0xf3220231, 0x2f23c5ff), TOBN(0xe3e8147a, 0x6affa3a1),
-           TOBN(0xfb423d5c, 0x202ddda0), TOBN(0x3d6414ac, 0x6b871bd4)}},
-         {{TOBN(0x586f82e1, 0xa51a168a), TOBN(0xb712c671, 0x48ae5448),
-           TOBN(0x9a2e4bd1, 0x76233eb8), TOBN(0x0188223a, 0x78811ca9)},
-          {TOBN(0x553c5e21, 0xf7c18de1), TOBN(0x7682e451, 0xb27bb286),
-           TOBN(0x3ed036b3, 0x0e51e929), TOBN(0xf487211b, 0xec9cb34f)}},
-         {{TOBN(0x0d094277, 0x0c24efc8), TOBN(0x0349fd04, 0xbef737a4),
-           TOBN(0x6d1c9dd2, 0x514cdd28), TOBN(0x29c135ff, 0x30da9521)},
-          {TOBN(0xea6e4508, 0xf78b0b6f), TOBN(0x176f5dd2, 0x678c143c),
-           TOBN(0x08148418, 0x4be21e65), TOBN(0x27f7525c, 0xe7df38c4)}},
-         {{TOBN(0x1fb70e09, 0x748ab1a4), TOBN(0x9cba50a0, 0x5efe4433),
-           TOBN(0x7846c7a6, 0x15f75af2), TOBN(0x2a7c2c57, 0x5ee73ea8)},
-          {TOBN(0x42e566a4, 0x3f0a449a), TOBN(0x45474c3b, 0xad90fc3d),
-           TOBN(0x7447be3d, 0x8b61d057), TOBN(0x3e9d1cf1, 0x3a4ec092)}},
-         {{TOBN(0x1603e453, 0xf380a6e6), TOBN(0x0b86e431, 0x9b1437c2),
-           TOBN(0x7a4173f2, 0xef29610a), TOBN(0x8fa729a7, 0xf03d57f7)},
-          {TOBN(0x3e186f6e, 0x6c9c217e), TOBN(0xbe1d3079, 0x91919524),
-           TOBN(0x92a62a70, 0x153d4fb1), TOBN(0x32ed3e34, 0xd68c2f71)}},
-         {{TOBN(0xd785027f, 0x9eb1a8b7), TOBN(0xbc37eb77, 0xc5b22fe8),
-           TOBN(0x466b34f0, 0xb9d6a191), TOBN(0x008a89af, 0x9a05f816)},
-          {TOBN(0x19b028fb, 0x7d42c10a), TOBN(0x7fe8c92f, 0x49b3f6b8),
-           TOBN(0x58907cc0, 0xa5a0ade3), TOBN(0xb3154f51, 0x559d1a7c)}},
-         {{TOBN(0x5066efb6, 0xd9790ed6), TOBN(0xa77a0cbc, 0xa6aa793b),
-           TOBN(0x1a915f3c, 0x223e042e), TOBN(0x1c5def04, 0x69c5874b)},
-          {TOBN(0x0e830078, 0x73b6c1da), TOBN(0x55cf85d2, 0xfcd8557a),
-           TOBN(0x0f7c7c76, 0x0460f3b1), TOBN(0x87052acb, 0x46e58063)}},
-         {{TOBN(0x09212b80, 0x907eae66), TOBN(0x3cb068e0, 0x4d721c89),
-           TOBN(0xa87941ae, 0xdd45ac1c), TOBN(0xde8d5c0d, 0x0daa0dbb)},
-          {TOBN(0xda421fdc, 0xe3502e6e), TOBN(0xc8944201, 0x4d89a084),
-           TOBN(0x7307ba5e, 0xf0c24bfb), TOBN(0xda212beb, 0x20bde0ef)}},
-         {{TOBN(0xea2da24b, 0xf82ce682), TOBN(0x058d3816, 0x07f71fe4),
-           TOBN(0x35a02462, 0x5ffad8de), TOBN(0xcd7b05dc, 0xaadcefab)},
-          {TOBN(0xd442f8ed, 0x1d9f54ec), TOBN(0x8be3d618, 0xb2d3b5ca),
-           TOBN(0xe2220ed0, 0xe06b2ce2), TOBN(0x82699a5f, 0x1b0da4c0)}},
-         {{TOBN(0x3ff106f5, 0x71c0c3a7), TOBN(0x8f580f5a, 0x0d34180c),
-           TOBN(0x4ebb120e, 0x22d7d375), TOBN(0x5e5782cc, 0xe9513675)},
-          {TOBN(0x2275580c, 0x99c82a70), TOBN(0xe8359fbf, 0x15ea8c4c),
-           TOBN(0x53b48db8, 0x7b415e70), TOBN(0xaacf2240, 0x100c6014)}},
-         {{TOBN(0x9faaccf5, 0xe4652f1d), TOBN(0xbd6fdd2a, 0xd56157b2),
-           TOBN(0xa4f4fb1f, 0x6261ec50), TOBN(0x244e55ad, 0x476bcd52)},
-          {TOBN(0x881c9305, 0x047d320b), TOBN(0x1ca983d5, 0x6181263f),
-           TOBN(0x354e9a44, 0x278fb8ee), TOBN(0xad2dbc0f, 0x396e4964)}},
-         {{TOBN(0x723f3aa2, 0x9268b3de), TOBN(0x0d1ca29a, 0xe6e0609a),
-           TOBN(0x794866aa, 0x6cf44252), TOBN(0x0b59f3e3, 0x01af87ed)},
-          {TOBN(0xe234e5ff, 0x7f4a6c51), TOBN(0xa8768fd2, 0x61dc2f7e),
-           TOBN(0xdafc7332, 0x0a94d81f), TOBN(0xd7f84282, 0x06938ce1)}},
-         {{TOBN(0xae0b3c0e, 0x0546063e), TOBN(0x7fbadcb2, 0x5d61abc6),
-           TOBN(0xd5d7a2c9, 0x369ac400), TOBN(0xa5978d09, 0xae67d10c)},
-          {TOBN(0x290f211e, 0x4f85eaac), TOBN(0xe61e2ad1, 0xfacac681),
-           TOBN(0xae125225, 0x388384cd), TOBN(0xa7fb68e9, 0xccfde30f)}},
-         {{TOBN(0x7a59b936, 0x3daed4c2), TOBN(0x80a9aa40, 0x2606f789),
-           TOBN(0xb40c1ea5, 0xf6a6d90a), TOBN(0x948364d3, 0x514d5885)},
-          {TOBN(0x062ebc60, 0x70985182), TOBN(0xa6db5b0e, 0x33310895),
-           TOBN(0x64a12175, 0xe329c2f5), TOBN(0xc5f25bd2, 0x90ea237e)}},
-         {{TOBN(0x7915c524, 0x2d0a4c23), TOBN(0xeb5d26e4, 0x6bb3cc52),
-           TOBN(0x369a9116, 0xc09e2c92), TOBN(0x0c527f92, 0xcf182cf8)},
-          {TOBN(0x9e591938, 0x2aede0ac), TOBN(0xb2922208, 0x6cc34939),
-           TOBN(0x3c9d8962, 0x99a34361), TOBN(0x3c81836d, 0xc1905fe6)}},
-         {{TOBN(0x4bfeb57f, 0xa001ec5a), TOBN(0xe993f5bb, 0xa0dc5dba),
-           TOBN(0x47884109, 0x724a1380), TOBN(0x8a0369ab, 0x32fe9a04)},
-          {TOBN(0xea068d60, 0x8c927db8), TOBN(0xbf5f37cf, 0x94655741),
-           TOBN(0x47d402a2, 0x04b6c7ea), TOBN(0x4551c295, 0x6af259cb)}},
-         {{TOBN(0x698b71e7, 0xed77ee8b), TOBN(0xbddf7bd0, 0xf309d5c7),
-           TOBN(0x6201c22c, 0x34e780ca), TOBN(0xab04f7d8, 0x4c295ef4)},
-          {TOBN(0x1c947294, 0x4313a8ce), TOBN(0xe532e4ac, 0x92ca4cfe),
-           TOBN(0x89738f80, 0xd0a7a97a), TOBN(0xec088c88, 0xa580fd5b)}},
-         {{TOBN(0x612b1ecc, 0x42ce9e51), TOBN(0x8f9840fd, 0xb25fdd2a),
-           TOBN(0x3cda78c0, 0x01e7f839), TOBN(0x546b3d3a, 0xece05480)},
-          {TOBN(0x271719a9, 0x80d30916), TOBN(0x45497107, 0x584c20c4),
-           TOBN(0xaf8f9478, 0x5bc78608), TOBN(0x28c7d484, 0x277e2a4c)}},
-         {{TOBN(0xfce01767, 0x88a2ffe4), TOBN(0xdc506a35, 0x28e169a5),
-           TOBN(0x0ea10861, 0x7af9c93a), TOBN(0x1ed24361, 0x03fa0e08)},
-          {TOBN(0x96eaaa92, 0xa3d694e7), TOBN(0xc0f43b4d, 0xef50bc74),
-           TOBN(0xce6aa58c, 0x64114db4), TOBN(0x8218e8ea, 0x7c000fd4)}},
-         {{TOBN(0xac815dfb, 0x185f8844), TOBN(0xcd7e90cb, 0x1557abfb),
-           TOBN(0x23d16655, 0xafbfecdf), TOBN(0x80f3271f, 0x085cac4a)},
-          {TOBN(0x7fc39aa7, 0xd0e62f47), TOBN(0x88d519d1, 0x460a48e5),
-           TOBN(0x59559ac4, 0xd28f101e), TOBN(0x7981d9e9, 0xca9ae816)}},
-         {{TOBN(0x5c38652c, 0x9ac38203), TOBN(0x86eaf87f, 0x57657fe5),
-           TOBN(0x568fc472, 0xe21f5416), TOBN(0x2afff39c, 0xe7e597b5)},
-          {TOBN(0x3adbbb07, 0x256d4eab), TOBN(0x22598692, 0x8285ab89),
-           TOBN(0x35f8112a, 0x041caefe), TOBN(0x95df02e3, 0xa5064c8b)}},
-         {{TOBN(0x4d63356e, 0xc7004bf3), TOBN(0x230a08f4, 0xdb83c7de),
-           TOBN(0xca27b270, 0x8709a7b7), TOBN(0x0d1c4cc4, 0xcb9abd2d)},
-          {TOBN(0x8a0bc66e, 0x7550fee8), TOBN(0x369cd4c7, 0x9cf7247e),
-           TOBN(0x75562e84, 0x92b5b7e7), TOBN(0x8fed0da0, 0x5802af7b)}},
-         {{TOBN(0x6a7091c2, 0xe48fb889), TOBN(0x26882c13, 0x7b8a9d06),
-           TOBN(0xa2498663, 0x1b82a0e2), TOBN(0x844ed736, 0x3518152d)},
-          {TOBN(0x282f476f, 0xd86e27c7), TOBN(0xa04edaca, 0x04afefdc),
-           TOBN(0x8b256ebc, 0x6119e34d), TOBN(0x56a413e9, 0x0787d78b)}}},
-        {{{TOBN(0x82ee061d, 0x5a74be50), TOBN(0xe41781c4, 0xdea16ff5),
-           TOBN(0xe0b0c81e, 0x99bfc8a2), TOBN(0x624f4d69, 0x0b547e2d)},
-          {TOBN(0x3a83545d, 0xbdcc9ae4), TOBN(0x2573dbb6, 0x409b1e8e),
-           TOBN(0x482960c4, 0xa6c93539), TOBN(0xf01059ad, 0x5ae18798)}},
-         {{TOBN(0x715c9f97, 0x3112795f), TOBN(0xe8244437, 0x984e6ee1),
-           TOBN(0x55cb4858, 0xecb66bcd), TOBN(0x7c136735, 0xabaffbee)},
-          {TOBN(0x54661595, 0x5dbec38e), TOBN(0x51c0782c, 0x388ad153),
-           TOBN(0x9ba4c53a, 0xc6e0952f), TOBN(0x27e6782a, 0x1b21dfa8)}},
-         {{TOBN(0x682f903d, 0x4ed2dbc2), TOBN(0x0eba59c8, 0x7c3b2d83),
-           TOBN(0x8e9dc84d, 0x9c7e9335), TOBN(0x5f9b21b0, 0x0eb226d7)},
-          {TOBN(0xe33bd394, 0xaf267bae), TOBN(0xaa86cc25, 0xbe2e15ae),
-           TOBN(0x4f0bf67d, 0x6a8ec500), TOBN(0x5846aa44, 0xf9630658)}},
-         {{TOBN(0xfeb09740, 0xe2c2bf15), TOBN(0x627a2205, 0xa9e99704),
-           TOBN(0xec8d73d0, 0xc2fbc565), TOBN(0x223eed8f, 0xc20c8de8)},
-          {TOBN(0x1ee32583, 0xa8363b49), TOBN(0x1a0b6cb9, 0xc9c2b0a6),
-           TOBN(0x49f7c3d2, 0x90dbc85c), TOBN(0xa8dfbb97, 0x1ef4c1ac)}},
-         {{TOBN(0xafb34d4c, 0x65c7c2ab), TOBN(0x1d4610e7, 0xe2c5ea84),
-           TOBN(0x893f6d1b, 0x973c4ab5), TOBN(0xa3cdd7e9, 0x945ba5c4)},
-          {TOBN(0x60514983, 0x064417ee), TOBN(0x1459b23c, 0xad6bdf2b),
-           TOBN(0x23b2c341, 0x5cf726c3), TOBN(0x3a829635, 0x32d6354a)}},
-         {{TOBN(0x294f901f, 0xab192c18), TOBN(0xec5fcbfe, 0x7030164f),
-           TOBN(0xe2e2fcb7, 0xe2246ba6), TOBN(0x1e7c88b3, 0x221a1a0c)},
-          {TOBN(0x72c7dd93, 0xc92d88c5), TOBN(0x41c2148e, 0x1106fb59),
-           TOBN(0x547dd4f5, 0xa0f60f14), TOBN(0xed9b52b2, 0x63960f31)}},
-         {{TOBN(0x6c8349eb, 0xb0a5b358), TOBN(0xb154c5c2, 0x9e7e2ed6),
-           TOBN(0xcad5eccf, 0xeda462db), TOBN(0xf2d6dbe4, 0x2de66b69)},
-          {TOBN(0x426aedf3, 0x8665e5b2), TOBN(0x488a8513, 0x7b7f5723),
-           TOBN(0x15cc43b3, 0x8bcbb386), TOBN(0x27ad0af3, 0xd791d879)}},
-         {{TOBN(0xc16c236e, 0x846e364f), TOBN(0x7f33527c, 0xdea50ca0),
-           TOBN(0xc4810775, 0x0926b86d), TOBN(0x6c2a3609, 0x0598e70c)},
-          {TOBN(0xa6755e52, 0xf024e924), TOBN(0xe0fa07a4, 0x9db4afca),
-           TOBN(0x15c3ce7d, 0x66831790), TOBN(0x5b4ef350, 0xa6cbb0d6)}},
-         {{TOBN(0x2c4aafc4, 0xb6205969), TOBN(0x42563f02, 0xf6c7854f),
-           TOBN(0x016aced5, 0x1d983b48), TOBN(0xfeb356d8, 0x99949755)},
-          {TOBN(0x8c2a2c81, 0xd1a39bd7), TOBN(0x8f44340f, 0xe6934ae9),
-           TOBN(0x148cf91c, 0x447904da), TOBN(0x7340185f, 0x0f51a926)}},
-         {{TOBN(0x2f8f00fb, 0x7409ab46), TOBN(0x057e78e6, 0x80e289b2),
-           TOBN(0x03e5022c, 0xa888e5d1), TOBN(0x3c87111a, 0x9dede4e2)},
-          {TOBN(0x5b9b0e1c, 0x7809460b), TOBN(0xe751c852, 0x71c9abc7),
-           TOBN(0x8b944e28, 0xc7cc1dc9), TOBN(0x4f201ffa, 0x1d3cfa08)}},
-         {{TOBN(0x02fc905c, 0x3e6721ce), TOBN(0xd52d70da, 0xd0b3674c),
-           TOBN(0x5dc2e5ca, 0x18810da4), TOBN(0xa984b273, 0x5c69dd99)},
-          {TOBN(0x63b92527, 0x84de5ca4), TOBN(0x2f1c9872, 0xc852dec4),
-           TOBN(0x18b03593, 0xc2e3de09), TOBN(0x19d70b01, 0x9813dc2f)}},
-         {{TOBN(0x42806b2d, 0xa6dc1d29), TOBN(0xd3030009, 0xf871e144),
-           TOBN(0xa1feb333, 0xaaf49276), TOBN(0xb5583b9e, 0xc70bc04b)},
-          {TOBN(0x1db0be78, 0x95695f20), TOBN(0xfc841811, 0x89d012b5),
-           TOBN(0x6409f272, 0x05f61643), TOBN(0x40d34174, 0xd5883128)}},
-         {{TOBN(0xd79196f5, 0x67419833), TOBN(0x6059e252, 0x863b7b08),
-           TOBN(0x84da1817, 0x1c56700c), TOBN(0x5758ee56, 0xb28d3ec4)},
-          {TOBN(0x7da2771d, 0x013b0ea6), TOBN(0xfddf524b, 0x54c5e9b9),
-           TOBN(0x7df4faf8, 0x24305d80), TOBN(0x58f5c1bf, 0x3a97763f)}},
-         {{TOBN(0xa5af37f1, 0x7c696042), TOBN(0xd4cba22c, 0x4a2538de),
-           TOBN(0x211cb995, 0x9ea42600), TOBN(0xcd105f41, 0x7b069889)},
-          {TOBN(0xb1e1cf19, 0xddb81e74), TOBN(0x472f2d89, 0x5157b8ca),
-           TOBN(0x086fb008, 0xee9db885), TOBN(0x365cd570, 0x0f26d131)}},
-         {{TOBN(0x284b02bb, 0xa2be7053), TOBN(0xdcbbf7c6, 0x7ab9a6d6),
-           TOBN(0x4425559c, 0x20f7a530), TOBN(0x961f2dfa, 0x188767c8)},
-          {TOBN(0xe2fd9435, 0x70dc80c4), TOBN(0x104d6b63, 0xf0784120),
-           TOBN(0x7f592bc1, 0x53567122), TOBN(0xf6bc1246, 0xf688ad77)}},
-         {{TOBN(0x05214c05, 0x0f15dde9), TOBN(0xa47a76a8, 0x0d5f2b82),
-           TOBN(0xbb254d30, 0x62e82b62), TOBN(0x11a05fe0, 0x3ec955ee)},
-          {TOBN(0x7eaff46e, 0x9d529b36), TOBN(0x55ab1301, 0x8f9e3df6),
-           TOBN(0xc463e371, 0x99317698), TOBN(0xfd251438, 0xccda47ad)}},
-         {{TOBN(0xca9c3547, 0x23d695ea), TOBN(0x48ce626e, 0x16e589b5),
-           TOBN(0x6b5b64c7, 0xb187d086), TOBN(0xd02e1794, 0xb2207948)},
-          {TOBN(0x8b58e98f, 0x7198111d), TOBN(0x90ca6305, 0xdcf9c3cc),
-           TOBN(0x5691fe72, 0xf34089b0), TOBN(0x60941af1, 0xfc7c80ff)}},
-         {{TOBN(0xa09bc0a2, 0x22eb51e5), TOBN(0xc0bb7244, 0xaa9cf09a),
-           TOBN(0x36a8077f, 0x80159f06), TOBN(0x8b5c989e, 0xdddc560e)},
-          {TOBN(0x19d2f316, 0x512e1f43), TOBN(0x02eac554, 0xad08ff62),
-           TOBN(0x012ab84c, 0x07d20b4e), TOBN(0x37d1e115, 0xd6d4e4e1)}},
-         {{TOBN(0xb6443e1a, 0xab7b19a8), TOBN(0xf08d067e, 0xdef8cd45),
-           TOBN(0x63adf3e9, 0x685e03da), TOBN(0xcf15a10e, 0x4792b916)},
-          {TOBN(0xf44bcce5, 0xb738a425), TOBN(0xebe131d5, 0x9636b2fd),
-           TOBN(0x94068841, 0x7850d605), TOBN(0x09684eaa, 0xb40d749d)}},
-         {{TOBN(0x8c3c669c, 0x72ba075b), TOBN(0x89f78b55, 0xba469015),
-           TOBN(0x5706aade, 0x3e9f8ba8), TOBN(0x6d8bd565, 0xb32d7ed7)},
-          {TOBN(0x25f4e63b, 0x805f08d6), TOBN(0x7f48200d, 0xc3bcc1b5),
-           TOBN(0x4e801968, 0xb025d847), TOBN(0x74afac04, 0x87cbe0a8)}},
-         {{TOBN(0x43ed2c2b, 0x7e63d690), TOBN(0xefb6bbf0, 0x0223cdb8),
-           TOBN(0x4fec3cae, 0x2884d3fe), TOBN(0x065ecce6, 0xd75e25a4)},
-          {TOBN(0x6c2294ce, 0x69f79071), TOBN(0x0d9a8e5f, 0x044b8666),
-           TOBN(0x5009f238, 0x17b69d8f), TOBN(0x3c29f8fe, 0xc5dfdaf7)}},
-         {{TOBN(0x9067528f, 0xebae68c4), TOBN(0x5b385632, 0x30c5ba21),
-           TOBN(0x540df119, 0x1fdd1aec), TOBN(0xcf37825b, 0xcfba4c78)},
-          {TOBN(0x77eff980, 0xbeb11454), TOBN(0x40a1a991, 0x60c1b066),
-           TOBN(0xe8018980, 0xf889a1c7), TOBN(0xb9c52ae9, 0x76c24be0)}},
-         {{TOBN(0x05fbbcce, 0x45650ef4), TOBN(0xae000f10, 0x8aa29ac7),
-           TOBN(0x884b7172, 0x4f04c470), TOBN(0x7cd4fde2, 0x19bb5c25)},
-          {TOBN(0x6477b22a, 0xe8840869), TOBN(0xa8868859, 0x5fbd0686),
-           TOBN(0xf23cc02e, 0x1116dfba), TOBN(0x76cd563f, 0xd87d7776)}},
-         {{TOBN(0xe2a37598, 0xa9d82abf), TOBN(0x5f188ccb, 0xe6c170f5),
-           TOBN(0x81682200, 0x5066b087), TOBN(0xda22c212, 0xc7155ada)},
-          {TOBN(0x151e5d3a, 0xfbddb479), TOBN(0x4b606b84, 0x6d715b99),
-           TOBN(0x4a73b54b, 0xf997cb2e), TOBN(0x9a1bfe43, 0x3ecd8b66)}},
-         {{TOBN(0x1c312809, 0x2a67d48a), TOBN(0xcd6a671e, 0x031fa9e2),
-           TOBN(0xbec3312a, 0x0e43a34a), TOBN(0x1d935639, 0x55ef47d3)},
-          {TOBN(0x5ea02489, 0x8fea73ea), TOBN(0x8247b364, 0xa035afb2),
-           TOBN(0xb58300a6, 0x5265b54c), TOBN(0x3286662f, 0x722c7148)}},
-         {{TOBN(0xb77fd76b, 0xb4ec4c20), TOBN(0xf0a12fa7, 0x0f3fe3fd),
-           TOBN(0xf845bbf5, 0x41d8c7e8), TOBN(0xe4d969ca, 0x5ec10aa8)},
-          {TOBN(0x4c0053b7, 0x43e232a3), TOBN(0xdc7a3fac, 0x37f8a45a),
-           TOBN(0x3c4261c5, 0x20d81c8f), TOBN(0xfd4b3453, 0xb00eab00)}},
-         {{TOBN(0x76d48f86, 0xd36e3062), TOBN(0x626c5277, 0xa143ff02),
-           TOBN(0x538174de, 0xaf76f42e), TOBN(0x2267aa86, 0x6407ceac)},
-          {TOBN(0xfad76351, 0x72e572d5), TOBN(0xab861af7, 0xba7330eb),
-           TOBN(0xa0a1c8c7, 0x418d8657), TOBN(0x988821cb, 0x20289a52)}},
-         {{TOBN(0x79732522, 0xcccc18ad), TOBN(0xaadf3f8d, 0xf1a6e027),
-           TOBN(0xf7382c93, 0x17c2354d), TOBN(0x5ce1680c, 0xd818b689)},
-          {TOBN(0x359ebbfc, 0xd9ecbee9), TOBN(0x4330689c, 0x1cae62ac),
-           TOBN(0xb55ce5b4, 0xc51ac38a), TOBN(0x7921dfea, 0xfe238ee8)}},
-         {{TOBN(0x3972bef8, 0x271d1ca5), TOBN(0x3e423bc7, 0xe8aabd18),
-           TOBN(0x57b09f3f, 0x44a3e5e3), TOBN(0x5da886ae, 0x7b444d66)},
-          {TOBN(0x68206634, 0xa9964375), TOBN(0x356a2fa3, 0x699cd0ff),
-           TOBN(0xaf0faa24, 0xdba515e9), TOBN(0x536e1f5c, 0xb321d79a)}},
-         {{TOBN(0xd3b9913a, 0x5c04e4ea), TOBN(0xd549dcfe, 0xd6f11513),
-           TOBN(0xee227bf5, 0x79fd1d94), TOBN(0x9f35afee, 0xb43f2c67)},
-          {TOBN(0xd2638d24, 0xf1314f53), TOBN(0x62baf948, 0xcabcd822),
-           TOBN(0x5542de29, 0x4ef48db0), TOBN(0xb3eb6a04, 0xfc5f6bb2)}},
-         {{TOBN(0x23c110ae, 0x1208e16a), TOBN(0x1a4d15b5, 0xf8363e24),
-           TOBN(0x30716844, 0x164be00b), TOBN(0xa8e24824, 0xf6f4690d)},
-          {TOBN(0x548773a2, 0x90b170cf), TOBN(0xa1bef331, 0x42f191f4),
-           TOBN(0x70f418d0, 0x9247aa97), TOBN(0xea06028e, 0x48be9147)}},
-         {{TOBN(0xe13122f3, 0xdbfb894e), TOBN(0xbe9b79f6, 0xce274b18),
-           TOBN(0x85a49de5, 0xca58aadf), TOBN(0x24957758, 0x11487351)},
-          {TOBN(0x111def61, 0xbb939099), TOBN(0x1d6a974a, 0x26d13694),
-           TOBN(0x4474b4ce, 0xd3fc253b), TOBN(0x3a1485e6, 0x4c5db15e)}},
-         {{TOBN(0xe79667b4, 0x147c15b4), TOBN(0xe34f553b, 0x7bc61301),
-           TOBN(0x032b80f8, 0x17094381), TOBN(0x55d8bafd, 0x723eaa21)},
-          {TOBN(0x5a987995, 0xf1c0e74e), TOBN(0x5a9b292e, 0xebba289c),
-           TOBN(0x413cd4b2, 0xeb4c8251), TOBN(0x98b5d243, 0xd162db0a)}},
-         {{TOBN(0xbb47bf66, 0x68342520), TOBN(0x08d68949, 0xbaa862d1),
-           TOBN(0x11f349c7, 0xe906abcd), TOBN(0x454ce985, 0xed7bf00e)},
-          {TOBN(0xacab5c9e, 0xb55b803b), TOBN(0xb03468ea, 0x31e3c16d),
-           TOBN(0x5c24213d, 0xd273bf12), TOBN(0x211538eb, 0x71587887)}},
-         {{TOBN(0x198e4a2f, 0x731dea2d), TOBN(0xd5856cf2, 0x74ed7b2a),
-           TOBN(0x86a632eb, 0x13a664fe), TOBN(0x932cd909, 0xbda41291)},
-          {TOBN(0x850e95d4, 0xc0c4ddc0), TOBN(0xc0f422f8, 0x347fc2c9),
-           TOBN(0xe68cbec4, 0x86076bcb), TOBN(0xf9e7c0c0, 0xcd6cd286)}},
-         {{TOBN(0x65994ddb, 0x0f5f27ca), TOBN(0xe85461fb, 0xa80d59ff),
-           TOBN(0xff05481a, 0x66601023), TOBN(0xc665427a, 0xfc9ebbfb)},
-          {TOBN(0xb0571a69, 0x7587fd52), TOBN(0x935289f8, 0x8d49efce),
-           TOBN(0x61becc60, 0xea420688), TOBN(0xb22639d9, 0x13a786af)}},
-         {{TOBN(0x1a8e6220, 0x361ecf90), TOBN(0x001f23e0, 0x25506463),
-           TOBN(0xe4ae9b5d, 0x0a5c2b79), TOBN(0xebc9cdad, 0xd8149db5)},
-          {TOBN(0xb33164a1, 0x934aa728), TOBN(0x750eb00e, 0xae9b60f3),
-           TOBN(0x5a91615b, 0x9b9cfbfd), TOBN(0x97015cbf, 0xef45f7f6)}},
-         {{TOBN(0xb462c4a5, 0xbf5151df), TOBN(0x21adcc41, 0xb07118f2),
-           TOBN(0xd60c545b, 0x043fa42c), TOBN(0xfc21aa54, 0xe96be1ab)},
-          {TOBN(0xe84bc32f, 0x4e51ea80), TOBN(0x3dae45f0, 0x259b5d8d),
-           TOBN(0xbb73c7eb, 0xc38f1b5e), TOBN(0xe405a74a, 0xe8ae617d)}},
-         {{TOBN(0xbb1ae9c6, 0x9f1c56bd), TOBN(0x8c176b98, 0x49f196a4),
-           TOBN(0xc448f311, 0x6875092b), TOBN(0xb5afe3de, 0x9f976033)},
-          {TOBN(0xa8dafd49, 0x145813e5), TOBN(0x687fc4d9, 0xe2b34226),
-           TOBN(0xf2dfc92d, 0x4c7ff57f), TOBN(0x004e3fc1, 0x401f1b46)}},
-         {{TOBN(0x5afddab6, 0x1430c9ab), TOBN(0x0bdd41d3, 0x2238e997),
-           TOBN(0xf0947430, 0x418042ae), TOBN(0x71f9adda, 0xcdddc4cb)},
-          {TOBN(0x7090c016, 0xc52dd907), TOBN(0xd9bdf44d, 0x29e2047f),
-           TOBN(0xe6f1fe80, 0x1b1011a6), TOBN(0xb63accbc, 0xd9acdc78)}},
-         {{TOBN(0xcfc7e235, 0x1272a95b), TOBN(0x0c667717, 0xa6276ac8),
-           TOBN(0x3c0d3709, 0xe2d7eef7), TOBN(0x5add2b06, 0x9a685b3e)},
-          {TOBN(0x363ad32d, 0x14ea5d65), TOBN(0xf8e01f06, 0x8d7dd506),
-           TOBN(0xc9ea2213, 0x75b4aac6), TOBN(0xed2a2bf9, 0x0d353466)}},
-         {{TOBN(0x439d79b5, 0xe9d3a7c3), TOBN(0x8e0ee5a6, 0x81b7f34b),
-           TOBN(0xcf3dacf5, 0x1dc4ba75), TOBN(0x1d3d1773, 0xeb3310c7)},
-          {TOBN(0xa8e67112, 0x7747ae83), TOBN(0x31f43160, 0x197d6b40),
-           TOBN(0x0521ccee, 0xcd961400), TOBN(0x67246f11, 0xf6535768)}},
-         {{TOBN(0x702fcc5a, 0xef0c3133), TOBN(0x247cc45d, 0x7e16693b),
-           TOBN(0xfd484e49, 0xc729b749), TOBN(0x522cef7d, 0xb218320f)},
-          {TOBN(0xe56ef405, 0x59ab93b3), TOBN(0x225fba11, 0x9f181071),
-           TOBN(0x33bd6595, 0x15330ed0), TOBN(0xc4be69d5, 0x1ddb32f7)}},
-         {{TOBN(0x264c7668, 0x0448087c), TOBN(0xac30903f, 0x71432dae),
-           TOBN(0x3851b266, 0x00f9bf47), TOBN(0x400ed311, 0x6cdd6d03)},
-          {TOBN(0x045e79fe, 0xf8fd2424), TOBN(0xfdfd974a, 0xfa6da98b),
-           TOBN(0x45c9f641, 0x0c1e673a), TOBN(0x76f2e733, 0x5b2c5168)}},
-         {{TOBN(0x1adaebb5, 0x2a601753), TOBN(0xb286514c, 0xc57c2d49),
-           TOBN(0xd8769670, 0x1e0bfd24), TOBN(0x950c547e, 0x04478922)},
-          {TOBN(0xd1d41969, 0xe5d32bfe), TOBN(0x30bc1472, 0x750d6c3e),
-           TOBN(0x8f3679fe, 0xe0e27f3a), TOBN(0x8f64a7dc, 0xa4a6ee0c)}},
-         {{TOBN(0x2fe59937, 0x633dfb1f), TOBN(0xea82c395, 0x977f2547),
-           TOBN(0xcbdfdf1a, 0x661ea646), TOBN(0xc7ccc591, 0xb9085451)},
-          {TOBN(0x82177962, 0x81761e13), TOBN(0xda57596f, 0x9196885c),
-           TOBN(0xbc17e849, 0x28ffbd70), TOBN(0x1e6e0a41, 0x2671d36f)}},
-         {{TOBN(0x61ae872c, 0x4152fcf5), TOBN(0x441c87b0, 0x9e77e754),
-           TOBN(0xd0799dd5, 0xa34dff09), TOBN(0x766b4e44, 0x88a6b171)},
-          {TOBN(0xdc06a512, 0x11f1c792), TOBN(0xea02ae93, 0x4be35c3e),
-           TOBN(0xe5ca4d6d, 0xe90c469e), TOBN(0x4df4368e, 0x56e4ff5c)}},
-         {{TOBN(0x7817acab, 0x4baef62e), TOBN(0x9f5a2202, 0xa85b91e8),
-           TOBN(0x9666ebe6, 0x6ce57610), TOBN(0x32ad31f3, 0xf73bfe03)},
-          {TOBN(0x628330a4, 0x25bcf4d6), TOBN(0xea950593, 0x515056e6),
-           TOBN(0x59811c89, 0xe1332156), TOBN(0xc89cf1fe, 0x8c11b2d7)}},
-         {{TOBN(0x75b63913, 0x04e60cc0), TOBN(0xce811e8d, 0x4625d375),
-           TOBN(0x030e43fc, 0x2d26e562), TOBN(0xfbb30b4b, 0x608d36a0)},
-          {TOBN(0x634ff82c, 0x48528118), TOBN(0x7c6fe085, 0xcd285911),
-           TOBN(0x7f2830c0, 0x99358f28), TOBN(0x2e60a95e, 0x665e6c09)}},
-         {{TOBN(0x08407d3d, 0x9b785dbf), TOBN(0x530889ab, 0xa759bce7),
-           TOBN(0xf228e0e6, 0x52f61239), TOBN(0x2b6d1461, 0x6879be3c)},
-          {TOBN(0xe6902c04, 0x51a7bbf7), TOBN(0x30ad99f0, 0x76f24a64),
-           TOBN(0x66d9317a, 0x98bc6da0), TOBN(0xf4f877f3, 0xcb596ac0)}},
-         {{TOBN(0xb05ff62d, 0x4c44f119), TOBN(0x4555f536, 0xe9b77416),
-           TOBN(0xc7c0d059, 0x8caed63b), TOBN(0x0cd2b7ce, 0xc358b2a9)},
-          {TOBN(0x3f33287b, 0x46945fa3), TOBN(0xf8785b20, 0xd67c8791),
-           TOBN(0xc54a7a61, 0x9637bd08), TOBN(0x54d4598c, 0x18be79d7)}},
-         {{TOBN(0x889e5acb, 0xc46d7ce1), TOBN(0x9a515bb7, 0x8b085877),
-           TOBN(0xfac1a03d, 0x0b7a5050), TOBN(0x7d3e738a, 0xf2926035)},
-          {TOBN(0x861cc2ce, 0x2a6cb0eb), TOBN(0x6f2e2955, 0x8f7adc79),
-           TOBN(0x61c4d451, 0x33016376), TOBN(0xd9fd2c80, 0x5ad59090)}},
-         {{TOBN(0xe5a83738, 0xb2b836a1), TOBN(0x855b41a0, 0x7c0d6622),
-           TOBN(0x186fe317, 0x7cc19af1), TOBN(0x6465c1ff, 0xfdd99acb)},
-          {TOBN(0x46e5c23f, 0x6974b99e), TOBN(0x75a7cf8b, 0xa2717cbe),
-           TOBN(0x4d2ebc3f, 0x062be658), TOBN(0x094b4447, 0x5f209c98)}},
-         {{TOBN(0x4af285ed, 0xb940cb5a), TOBN(0x6706d792, 0x7cc82f10),
-           TOBN(0xc8c8776c, 0x030526fa), TOBN(0xfa8e6f76, 0xa0da9140)},
-          {TOBN(0x77ea9d34, 0x591ee4f0), TOBN(0x5f46e337, 0x40274166),
-           TOBN(0x1bdf98bb, 0xea671457), TOBN(0xd7c08b46, 0x862a1fe2)}},
-         {{TOBN(0x46cc303c, 0x1c08ad63), TOBN(0x99543440, 0x4c845e7b),
-           TOBN(0x1b8fbdb5, 0x48f36bf7), TOBN(0x5b82c392, 0x8c8273a7)},
-          {TOBN(0x08f712c4, 0x928435d5), TOBN(0x071cf0f1, 0x79330380),
-           TOBN(0xc74c2d24, 0xa8da054a), TOBN(0xcb0e7201, 0x43c46b5c)}},
-         {{TOBN(0x0ad7337a, 0xc0b7eff3), TOBN(0x8552225e, 0xc5e48b3c),
-           TOBN(0xe6f78b0c, 0x73f13a5f), TOBN(0x5e70062e, 0x82349cbe)},
-          {TOBN(0x6b8d5048, 0xe7073969), TOBN(0x392d2a29, 0xc33cb3d2),
-           TOBN(0xee4f727c, 0x4ecaa20f), TOBN(0xa068c99e, 0x2ccde707)}},
-         {{TOBN(0xfcd5651f, 0xb87a2913), TOBN(0xea3e3c15, 0x3cc252f0),
-           TOBN(0x777d92df, 0x3b6cd3e4), TOBN(0x7a414143, 0xc5a732e7)},
-          {TOBN(0xa895951a, 0xa71ff493), TOBN(0xfe980c92, 0xbbd37cf6),
-           TOBN(0x45bd5e64, 0xdecfeeff), TOBN(0x910dc2a9, 0xa44c43e9)}},
-         {{TOBN(0xcb403f26, 0xcca9f54d), TOBN(0x928bbdfb, 0x9303f6db),
-           TOBN(0x3c37951e, 0xa9eee67c), TOBN(0x3bd61a52, 0xf79961c3)},
-          {TOBN(0x09a238e6, 0x395c9a79), TOBN(0x6940ca2d, 0x61eb352d),
-           TOBN(0x7d1e5c5e, 0xc1875631), TOBN(0x1e19742c, 0x1e1b20d1)}},
-         {{TOBN(0x4633d908, 0x23fc2e6e), TOBN(0xa76e29a9, 0x08959149),
-           TOBN(0x61069d9c, 0x84ed7da5), TOBN(0x0baa11cf, 0x5dbcad51)},
-          {TOBN(0xd01eec64, 0x961849da), TOBN(0x93b75f1f, 0xaf3d8c28),
-           TOBN(0x57bc4f9f, 0x1ca2ee44), TOBN(0x5a26322d, 0x00e00558)}},
-         {{TOBN(0x1888d658, 0x61a023ef), TOBN(0x1d72aab4, 0xb9e5246e),
-           TOBN(0xa9a26348, 0xe5563ec0), TOBN(0xa0971963, 0xc3439a43)},
-          {TOBN(0x567dd54b, 0xadb9b5b7), TOBN(0x73fac1a1, 0xc45a524b),
-           TOBN(0x8fe97ef7, 0xfe38e608), TOBN(0x608748d2, 0x3f384f48)}},
-         {{TOBN(0xb0571794, 0xc486094f), TOBN(0x869254a3, 0x8bf3a8d6),
-           TOBN(0x148a8dd1, 0x310b0e25), TOBN(0x99ab9f3f, 0x9aa3f7d8)},
-          {TOBN(0x0927c68a, 0x6706c02e), TOBN(0x22b5e76c, 0x69790e6c),
-           TOBN(0x6c325260, 0x6c71376c), TOBN(0x53a57690, 0x09ef6657)}},
-         {{TOBN(0x8d63f852, 0xedffcf3a), TOBN(0xb4d2ed04, 0x3c0a6f55),
-           TOBN(0xdb3aa8de, 0x12519b9e), TOBN(0x5d38e9c4, 0x1e0a569a)},
-          {TOBN(0x871528bf, 0x303747e2), TOBN(0xa208e77c, 0xf5b5c18d),
-           TOBN(0x9d129c88, 0xca6bf923), TOBN(0xbcbf197f, 0xbf02839f)}},
-         {{TOBN(0x9b9bf030, 0x27323194), TOBN(0x3b055a8b, 0x339ca59d),
-           TOBN(0xb46b2312, 0x0f669520), TOBN(0x19789f1f, 0x497e5f24)},
-          {TOBN(0x9c499468, 0xaaf01801), TOBN(0x72ee1190, 0x8b69d59c),
-           TOBN(0x8bd39595, 0xacf4c079), TOBN(0x3ee11ece, 0x8e0cd048)}},
-         {{TOBN(0xebde86ec, 0x1ed66f18), TOBN(0x225d906b, 0xd61fce43),
-           TOBN(0x5cab07d6, 0xe8bed74d), TOBN(0x16e4617f, 0x27855ab7)},
-          {TOBN(0x6568aadd, 0xb2fbc3dd), TOBN(0xedb5484f, 0x8aeddf5b),
-           TOBN(0x878f20e8, 0x6dcf2fad), TOBN(0x3516497c, 0x615f5699)}}},
-        {{{TOBN(0xef0a3fec, 0xfa181e69), TOBN(0x9ea02f81, 0x30d69a98),
-           TOBN(0xb2e9cf8e, 0x66eab95d), TOBN(0x520f2beb, 0x24720021)},
-          {TOBN(0x621c540a, 0x1df84361), TOBN(0x12037721, 0x71fa6d5d),
-           TOBN(0x6e3c7b51, 0x0ff5f6ff), TOBN(0x817a069b, 0xabb2bef3)}},
-         {{TOBN(0x83572fb6, 0xb294cda6), TOBN(0x6ce9bf75, 0xb9039f34),
-           TOBN(0x20e012f0, 0x095cbb21), TOBN(0xa0aecc1b, 0xd063f0da)},
-          {TOBN(0x57c21c3a, 0xf02909e5), TOBN(0xc7d59ecf, 0x48ce9cdc),
-           TOBN(0x2732b844, 0x8ae336f8), TOBN(0x056e3723, 0x3f4f85f4)}},
-         {{TOBN(0x8a10b531, 0x89e800ca), TOBN(0x50fe0c17, 0x145208fd),
-           TOBN(0x9e43c0d3, 0xb714ba37), TOBN(0x427d200e, 0x34189acc)},
-          {TOBN(0x05dee24f, 0xe616e2c0), TOBN(0x9c25f4c8, 0xee1854c1),
-           TOBN(0x4d3222a5, 0x8f342a73), TOBN(0x0807804f, 0xa027c952)}},
-         {{TOBN(0xc222653a, 0x4f0d56f3), TOBN(0x961e4047, 0xca28b805),
-           TOBN(0x2c03f8b0, 0x4a73434b), TOBN(0x4c966787, 0xab712a19)},
-          {TOBN(0xcc196c42, 0x864fee42), TOBN(0xc1be93da, 0x5b0ece5c),
-           TOBN(0xa87d9f22, 0xc131c159), TOBN(0x2bb6d593, 0xdce45655)}},
-         {{TOBN(0x22c49ec9, 0xb809b7ce), TOBN(0x8a41486b, 0xe2c72c2c),
-           TOBN(0x813b9420, 0xfea0bf36), TOBN(0xb3d36ee9, 0xa66dac69)},
-          {TOBN(0x6fddc08a, 0x328cc987), TOBN(0x0a3bcd2c, 0x3a326461),
-           TOBN(0x7103c49d, 0xd810dbba), TOBN(0xf9d81a28, 0x4b78a4c4)}},
-         {{TOBN(0x3de865ad, 0xe4d55941), TOBN(0xdedafa5e, 0x30384087),
-           TOBN(0x6f414abb, 0x4ef18b9b), TOBN(0x9ee9ea42, 0xfaee5268)},
-          {TOBN(0x260faa16, 0x37a55a4a), TOBN(0xeb19a514, 0x015f93b9),
-           TOBN(0x51d7ebd2, 0x9e9c3598), TOBN(0x523fc56d, 0x1932178e)}},
-         {{TOBN(0x501d070c, 0xb98fe684), TOBN(0xd60fbe9a, 0x124a1458),
-           TOBN(0xa45761c8, 0x92bc6b3f), TOBN(0xf5384858, 0xfe6f27cb)},
-          {TOBN(0x4b0271f7, 0xb59e763b), TOBN(0x3d4606a9, 0x5b5a8e5e),
-           TOBN(0x1eda5d9b, 0x05a48292), TOBN(0xda7731d0, 0xe6fec446)}},
-         {{TOBN(0xa3e33693, 0x90d45871), TOBN(0xe9764040, 0x06166d8d),
-           TOBN(0xb5c33682, 0x89a90403), TOBN(0x4bd17983, 0x72f1d637)},
-          {TOBN(0xa616679e, 0xd5d2c53a), TOBN(0x5ec4bcd8, 0xfdcf3b87),
-           TOBN(0xae6d7613, 0xb66a694e), TOBN(0x7460fc76, 0xe3fc27e5)}},
-         {{TOBN(0x70469b82, 0x95caabee), TOBN(0xde024ca5, 0x889501e3),
-           TOBN(0x6bdadc06, 0x076ed265), TOBN(0x0cb1236b, 0x5a0ef8b2)},
-          {TOBN(0x4065ddbf, 0x0972ebf9), TOBN(0xf1dd3875, 0x22aca432),
-           TOBN(0xa88b97cf, 0x744aff76), TOBN(0xd1359afd, 0xfe8e3d24)}},
-         {{TOBN(0x52a3ba2b, 0x91502cf3), TOBN(0x2c3832a8, 0x084db75d),
-           TOBN(0x04a12ddd, 0xde30b1c9), TOBN(0x7802eabc, 0xe31fd60c)},
-          {TOBN(0x33707327, 0xa37fddab), TOBN(0x65d6f2ab, 0xfaafa973),
-           TOBN(0x3525c5b8, 0x11e6f91a), TOBN(0x76aeb0c9, 0x5f46530b)}},
-         {{TOBN(0xe8815ff6, 0x2f93a675), TOBN(0xa6ec9684, 0x05f48679),
-           TOBN(0x6dcbb556, 0x358ae884), TOBN(0x0af61472, 0xe19e3873)},
-          {TOBN(0x72334372, 0xa5f696be), TOBN(0xc65e57ea, 0x6f22fb70),
-           TOBN(0x268da30c, 0x946cea90), TOBN(0x136a8a87, 0x65681b2a)}},
-         {{TOBN(0xad5e81dc, 0x0f9f44d4), TOBN(0xf09a6960, 0x2c46585a),
-           TOBN(0xd1649164, 0xc447d1b1), TOBN(0x3b4b36c8, 0x879dc8b1)},
-          {TOBN(0x20d4177b, 0x3b6b234c), TOBN(0x096a2505, 0x1730d9d0),
-           TOBN(0x0611b9b8, 0xef80531d), TOBN(0xba904b3b, 0x64bb495d)}},
-         {{TOBN(0x1192d9d4, 0x93a3147a), TOBN(0x9f30a5dc, 0x9a565545),
-           TOBN(0x90b1f9cb, 0x6ef07212), TOBN(0x29958546, 0x0d87fc13)},
-          {TOBN(0xd3323eff, 0xc17db9ba), TOBN(0xcb18548c, 0xcb1644a8),
-           TOBN(0x18a306d4, 0x4f49ffbc), TOBN(0x28d658f1, 0x4c2e8684)}},
-         {{TOBN(0x44ba60cd, 0xa99f8c71), TOBN(0x67b7abdb, 0x4bf742ff),
-           TOBN(0x66310f9c, 0x914b3f99), TOBN(0xae430a32, 0xf412c161)},
-          {TOBN(0x1e6776d3, 0x88ace52f), TOBN(0x4bc0fa24, 0x52d7067d),
-           TOBN(0x03c286aa, 0x8f07cd1b), TOBN(0x4cb8f38c, 0xa985b2c1)}},
-         {{TOBN(0x83ccbe80, 0x8c3bff36), TOBN(0x005a0bd2, 0x5263e575),
-           TOBN(0x460d7dda, 0x259bdcd1), TOBN(0x4a1c5642, 0xfa5cab6b)},
-          {TOBN(0x2b7bdbb9, 0x9fe4fc88), TOBN(0x09418e28, 0xcc97bbb5),
-           TOBN(0xd8274fb4, 0xa12321ae), TOBN(0xb137007d, 0x5c87b64e)}},
-         {{TOBN(0x80531fe1, 0xc63c4962), TOBN(0x50541e89, 0x981fdb25),
-           TOBN(0xdc1291a1, 0xfd4c2b6b), TOBN(0xc0693a17, 0xa6df4fca)},
-          {TOBN(0xb2c4604e, 0x0117f203), TOBN(0x245f1963, 0x0a99b8d0),
-           TOBN(0xaedc20aa, 0xc6212c44), TOBN(0xb1ed4e56, 0x520f52a8)}},
-         {{TOBN(0xfe48f575, 0xf8547be3), TOBN(0x0a7033cd, 0xa9e45f98),
-           TOBN(0x4b45d3a9, 0x18c50100), TOBN(0xb2a6cd6a, 0xa61d41da)},
-          {TOBN(0x60bbb4f5, 0x57933c6b), TOBN(0xa7538ebd, 0x2b0d7ffc),
-           TOBN(0x9ea3ab8d, 0x8cd626b6), TOBN(0x8273a484, 0x3601625a)}},
-         {{TOBN(0x88859845, 0x0168e508), TOBN(0x8cbc9bb2, 0x99a94abd),
-           TOBN(0x713ac792, 0xfab0a671), TOBN(0xa3995b19, 0x6c9ebffc)},
-          {TOBN(0xe711668e, 0x1239e152), TOBN(0x56892558, 0xbbb8dff4),
-           TOBN(0x8bfc7dab, 0xdbf17963), TOBN(0x5b59fe5a, 0xb3de1253)}},
-         {{TOBN(0x7e3320eb, 0x34a9f7ae), TOBN(0xe5e8cf72, 0xd751efe4),
-           TOBN(0x7ea003bc, 0xd9be2f37), TOBN(0xc0f551a0, 0xb6c08ef7)},
-          {TOBN(0x56606268, 0x038f6725), TOBN(0x1dd38e35, 0x6d92d3b6),
-           TOBN(0x07dfce7c, 0xc3cbd686), TOBN(0x4e549e04, 0x651c5da8)}},
-         {{TOBN(0x4058f93b, 0x08b19340), TOBN(0xc2fae6f4, 0xcac6d89d),
-           TOBN(0x4bad8a8c, 0x8f159cc7), TOBN(0x0ddba4b3, 0xcb0b601c)},
-          {TOBN(0xda4fc7b5, 0x1dd95f8c), TOBN(0x1d163cd7, 0xcea5c255),
-           TOBN(0x30707d06, 0x274a8c4c), TOBN(0x79d9e008, 0x2802e9ce)}},
-         {{TOBN(0x02a29ebf, 0xe6ddd505), TOBN(0x37064e74, 0xb50bed1a),
-           TOBN(0x3f6bae65, 0xa7327d57), TOBN(0x3846f5f1, 0xf83920bc)},
-          {TOBN(0x87c37491, 0x60df1b9b), TOBN(0x4cfb2895, 0x2d1da29f),
-           TOBN(0x10a478ca, 0x4ed1743c), TOBN(0x390c6030, 0x3edd47c6)}},
-         {{TOBN(0x8f3e5312, 0x8c0a78de), TOBN(0xccd02bda, 0x1e85df70),
-           TOBN(0xd6c75c03, 0xa61b6582), TOBN(0x0762921c, 0xfc0eebd1)},
-          {TOBN(0xd34d0823, 0xd85010c0), TOBN(0xd73aaacb, 0x0044cf1f),
-           TOBN(0xfb4159bb, 0xa3b5e78a), TOBN(0x2287c7f7, 0xe5826f3f)}},
-         {{TOBN(0x4aeaf742, 0x580b1a01), TOBN(0xf080415d, 0x60423b79),
-           TOBN(0xe12622cd, 0xa7dea144), TOBN(0x49ea4996, 0x59d62472)},
-          {TOBN(0xb42991ef, 0x571f3913), TOBN(0x0610f214, 0xf5b25a8a),
-           TOBN(0x47adc585, 0x30b79e8f), TOBN(0xf90e3df6, 0x07a065a2)}},
-         {{TOBN(0x5d0a5deb, 0x43e2e034), TOBN(0x53fb5a34, 0x444024aa),
-           TOBN(0xa8628c68, 0x6b0c9f7f), TOBN(0x9c69c29c, 0xac563656)},
-          {TOBN(0x5a231feb, 0xbace47b6), TOBN(0xbdce0289, 0x9ea5a2ec),
-           TOBN(0x05da1fac, 0x9463853e), TOBN(0x96812c52, 0x509e78aa)}},
-         {{TOBN(0xd3fb5771, 0x57151692), TOBN(0xeb2721f8, 0xd98e1c44),
-           TOBN(0xc0506087, 0x32399be1), TOBN(0xda5a5511, 0xd979d8b8)},
-          {TOBN(0x737ed55d, 0xc6f56780), TOBN(0xe20d3004, 0x0dc7a7f4),
-           TOBN(0x02ce7301, 0xf5941a03), TOBN(0x91ef5215, 0xed30f83a)}},
-         {{TOBN(0x28727fc1, 0x4092d85f), TOBN(0x72d223c6, 0x5c49e41a),
-           TOBN(0xa7cf30a2, 0xba6a4d81), TOBN(0x7c086209, 0xb030d87d)},
-          {TOBN(0x04844c7d, 0xfc588b09), TOBN(0x728cd499, 0x5874bbb0),
-           TOBN(0xcc1281ee, 0xe84c0495), TOBN(0x0769b5ba, 0xec31958f)}},
-         {{TOBN(0x665c228b, 0xf99c2471), TOBN(0xf2d8a11b, 0x191eb110),
-           TOBN(0x4594f494, 0xd36d7024), TOBN(0x482ded8b, 0xcdcb25a1)},
-          {TOBN(0xc958a9d8, 0xdadd4885), TOBN(0x7004477e, 0xf1d2b547),
-           TOBN(0x0a45f6ef, 0x2a0af550), TOBN(0x4fc739d6, 0x2f8d6351)}},
-         {{TOBN(0x75cdaf27, 0x786f08a9), TOBN(0x8700bb26, 0x42c2737f),
-           TOBN(0x855a7141, 0x1c4e2670), TOBN(0x810188c1, 0x15076fef)},
-          {TOBN(0xc251d0c9, 0xabcd3297), TOBN(0xae4c8967, 0xf48108eb),
-           TOBN(0xbd146de7, 0x18ceed30), TOBN(0xf9d4f07a, 0xc986bced)}},
-         {{TOBN(0x5ad98ed5, 0x83fa1e08), TOBN(0x7780d33e, 0xbeabd1fb),
-           TOBN(0xe330513c, 0x903b1196), TOBN(0xba11de9e, 0xa47bc8c4)},
-          {TOBN(0x684334da, 0x02c2d064), TOBN(0x7ecf360d, 0xa48de23b),
-           TOBN(0x57a1b474, 0x0a9089d8), TOBN(0xf28fa439, 0xff36734c)}},
-         {{TOBN(0xf2a482cb, 0xea4570b3), TOBN(0xee65d68b, 0xa5ebcee9),
-           TOBN(0x988d0036, 0xb9694cd5), TOBN(0x53edd0e9, 0x37885d32)},
-          {TOBN(0xe37e3307, 0xbeb9bc6d), TOBN(0xe9abb907, 0x9f5c6768),
-           TOBN(0x4396ccd5, 0x51f2160f), TOBN(0x2500888c, 0x47336da6)}},
-         {{TOBN(0x383f9ed9, 0x926fce43), TOBN(0x809dd1c7, 0x04da2930),
-           TOBN(0x30f6f596, 0x8a4cb227), TOBN(0x0d700c7f, 0x73a56b38)},
-          {TOBN(0x1825ea33, 0xab64a065), TOBN(0xaab9b735, 0x1338df80),
-           TOBN(0x1516100d, 0x9b63f57f), TOBN(0x2574395a, 0x27a6a634)}},
-         {{TOBN(0xb5560fb6, 0x700a1acd), TOBN(0xe823fd73, 0xfd999681),
-           TOBN(0xda915d1f, 0x6cb4e1ba), TOBN(0x0d030118, 0x6ebe00a3)},
-          {TOBN(0x744fb0c9, 0x89fca8cd), TOBN(0x970d01db, 0xf9da0e0b),
-           TOBN(0x0ad8c564, 0x7931d76f), TOBN(0xb15737bf, 0xf659b96a)}},
-         {{TOBN(0xdc9933e8, 0xa8b484e7), TOBN(0xb2fdbdf9, 0x7a26dec7),
-           TOBN(0x2349e9a4, 0x9f1f0136), TOBN(0x7860368e, 0x70fddddb)},
-          {TOBN(0xd93d2c1c, 0xf9ad3e18), TOBN(0x6d6c5f17, 0x689f4e79),
-           TOBN(0x7a544d91, 0xb24ff1b6), TOBN(0x3e12a5eb, 0xfe16cd8c)}},
-         {{TOBN(0x543574e9, 0xa56b872f), TOBN(0xa1ad550c, 0xfcf68ea2),
-           TOBN(0x689e37d2, 0x3f560ef7), TOBN(0x8c54b9ca, 0xc9d47a8b)},
-          {TOBN(0x46d40a4a, 0x088ac342), TOBN(0xec450c7c, 0x1576c6d0),
-           TOBN(0xb589e31c, 0x1f9689e9), TOBN(0xdacf2602, 0xb8781718)}},
-         {{TOBN(0xa89237c6, 0xc8cb6b42), TOBN(0x1326fc93, 0xb96ef381),
-           TOBN(0x55d56c6d, 0xb5f07825), TOBN(0xacba2eea, 0x7449e22d)},
-          {TOBN(0x74e0887a, 0x633c3000), TOBN(0xcb6cd172, 0xd7cbcf71),
-           TOBN(0x309e81de, 0xc36cf1be), TOBN(0x07a18a6d, 0x60ae399b)}},
-         {{TOBN(0xb36c2679, 0x9edce57e), TOBN(0x52b892f4, 0xdf001d41),
-           TOBN(0xd884ae5d, 0x16a1f2c6), TOBN(0x9b329424, 0xefcc370a)},
-          {TOBN(0x3120daf2, 0xbd2e21df), TOBN(0x55298d2d, 0x02470a99),
-           TOBN(0x0b78af6c, 0xa05db32e), TOBN(0x5c76a331, 0x601f5636)}},
-         {{TOBN(0xaae861ff, 0xf8a4f29c), TOBN(0x70dc9240, 0xd68f8d49),
-           TOBN(0x960e649f, 0x81b1321c), TOBN(0x3d2c801b, 0x8792e4ce)},
-          {TOBN(0xf479f772, 0x42521876), TOBN(0x0bed93bc, 0x416c79b1),
-           TOBN(0xa67fbc05, 0x263e5bc9), TOBN(0x01e8e630, 0x521db049)}},
-         {{TOBN(0x76f26738, 0xc6f3431e), TOBN(0xe609cb02, 0xe3267541),
-           TOBN(0xb10cff2d, 0x818c877c), TOBN(0x1f0e75ce, 0x786a13cb)},
-          {TOBN(0xf4fdca64, 0x1158544d), TOBN(0x5d777e89, 0x6cb71ed0),
-           TOBN(0x3c233737, 0xa9aa4755), TOBN(0x7b453192, 0xe527ab40)}},
-         {{TOBN(0xdb59f688, 0x39f05ffe), TOBN(0x8f4f4be0, 0x6d82574e),
-           TOBN(0xcce3450c, 0xee292d1b), TOBN(0xaa448a12, 0x61ccd086)},
-          {TOBN(0xabce91b3, 0xf7914967), TOBN(0x4537f09b, 0x1908a5ed),
-           TOBN(0xa812421e, 0xf51042e7), TOBN(0xfaf5cebc, 0xec0b3a34)}},
-         {{TOBN(0x730ffd87, 0x4ca6b39a), TOBN(0x70fb72ed, 0x02efd342),
-           TOBN(0xeb4735f9, 0xd75c8edb), TOBN(0xc11f2157, 0xc278aa51)},
-          {TOBN(0xc459f635, 0xbf3bfebf), TOBN(0x3a1ff0b4, 0x6bd9601f),
-           TOBN(0xc9d12823, 0xc420cb73), TOBN(0x3e9af3e2, 0x3c2915a3)}},
-         {{TOBN(0xe0c82c72, 0xb41c3440), TOBN(0x175239e5, 0xe3039a5f),
-           TOBN(0xe1084b8a, 0x558795a3), TOBN(0x328d0a1d, 0xd01e5c60)},
-          {TOBN(0x0a495f2e, 0xd3788a04), TOBN(0x25d8ff16, 0x66c11a9f),
-           TOBN(0xf5155f05, 0x9ed692d6), TOBN(0x954fa107, 0x4f425fe4)}},
-         {{TOBN(0xd16aabf2, 0xe98aaa99), TOBN(0x90cd8ba0, 0x96b0f88a),
-           TOBN(0x957f4782, 0xc154026a), TOBN(0x54ee0734, 0x52af56d2)},
-          {TOBN(0xbcf89e54, 0x45b4147a), TOBN(0x3d102f21, 0x9a52816c),
-           TOBN(0x6808517e, 0x39b62e77), TOBN(0x92e25421, 0x69169ad8)}},
-         {{TOBN(0xd721d871, 0xbb608558), TOBN(0x60e4ebae, 0xf6d4ff9b),
-           TOBN(0x0ba10819, 0x41f2763e), TOBN(0xca2e45be, 0x51ee3247)},
-          {TOBN(0x66d172ec, 0x2bfd7a5f), TOBN(0x528a8f2f, 0x74d0b12d),
-           TOBN(0xe17f1e38, 0xdabe70dc), TOBN(0x1d5d7316, 0x9f93983c)}},
-         {{TOBN(0x51b2184a, 0xdf423e31), TOBN(0xcb417291, 0xaedb1a10),
-           TOBN(0x2054ca93, 0x625bcab9), TOBN(0x54396860, 0xa98998f0)},
-          {TOBN(0x4e53f6c4, 0xa54ae57e), TOBN(0x0ffeb590, 0xee648e9d),
-           TOBN(0xfbbdaadc, 0x6afaf6bc), TOBN(0xf88ae796, 0xaa3bfb8a)}},
-         {{TOBN(0x209f1d44, 0xd2359ed9), TOBN(0xac68dd03, 0xf3544ce2),
-           TOBN(0xf378da47, 0xfd51e569), TOBN(0xe1abd860, 0x2cc80097)},
-          {TOBN(0x23ca18d9, 0x343b6e3a), TOBN(0x480797e8, 0xb40a1bae),
-           TOBN(0xd1f0c717, 0x533f3e67), TOBN(0x44896970, 0x06e6cdfc)}},
-         {{TOBN(0x8ca21055, 0x52a82e8d), TOBN(0xb2caf785, 0x78460cdc),
-           TOBN(0x4c1b7b62, 0xe9037178), TOBN(0xefc09d2c, 0xdb514b58)},
-          {TOBN(0x5f2df9ee, 0x9113be5c), TOBN(0x2fbda78f, 0xb3f9271c),
-           TOBN(0xe09a81af, 0x8f83fc54), TOBN(0x06b13866, 0x8afb5141)}},
-         {{TOBN(0x38f6480f, 0x43e3865d), TOBN(0x72dd77a8, 0x1ddf47d9),
-           TOBN(0xf2a8e971, 0x4c205ff7), TOBN(0x46d449d8, 0x9d088ad8)},
-          {TOBN(0x926619ea, 0x185d706f), TOBN(0xe47e02eb, 0xc7dd7f62),
-           TOBN(0xe7f120a7, 0x8cbc2031), TOBN(0xc18bef00, 0x998d4ac9)}},
-         {{TOBN(0x18f37a9c, 0x6bdf22da), TOBN(0xefbc432f, 0x90dc82df),
-           TOBN(0xc52cef8e, 0x5d703651), TOBN(0x82887ba0, 0xd99881a5)},
-          {TOBN(0x7cec9dda, 0xb920ec1d), TOBN(0xd0d7e8c3, 0xec3e8d3b),
-           TOBN(0x445bc395, 0x4ca88747), TOBN(0xedeaa2e0, 0x9fd53535)}},
-         {{TOBN(0x461b1d93, 0x6cc87475), TOBN(0xd92a52e2, 0x6d2383bd),
-           TOBN(0xfabccb59, 0xd7903546), TOBN(0x6111a761, 0x3d14b112)},
-          {TOBN(0x0ae584fe, 0xb3d5f612), TOBN(0x5ea69b8d, 0x60e828ec),
-           TOBN(0x6c078985, 0x54087030), TOBN(0x649cab04, 0xac4821fe)}},
-         {{TOBN(0x25ecedcf, 0x8bdce214), TOBN(0xb5622f72, 0x86af7361),
-           TOBN(0x0e1227aa, 0x7038b9e2), TOBN(0xd0efb273, 0xac20fa77)},
-          {TOBN(0x817ff88b, 0x79df975b), TOBN(0x856bf286, 0x1999503e),
-           TOBN(0xb4d5351f, 0x5038ec46), TOBN(0x740a52c5, 0xfc42af6e)}},
-         {{TOBN(0x2e38bb15, 0x2cbb1a3f), TOBN(0xc3eb99fe, 0x17a83429),
-           TOBN(0xca4fcbf1, 0xdd66bb74), TOBN(0x880784d6, 0xcde5e8fc)},
-          {TOBN(0xddc84c1c, 0xb4e7a0be), TOBN(0x8780510d, 0xbd15a72f),
-           TOBN(0x44bcf1af, 0x81ec30e1), TOBN(0x141e50a8, 0x0a61073e)}},
-         {{TOBN(0x0d955718, 0x47be87ae), TOBN(0x68a61417, 0xf76a4372),
-           TOBN(0xf57e7e87, 0xc607c3d3), TOBN(0x043afaf8, 0x5252f332)},
-          {TOBN(0xcc14e121, 0x1552a4d2), TOBN(0xb6dee692, 0xbb4d4ab4),
-           TOBN(0xb6ab74c8, 0xa03816a4), TOBN(0x84001ae4, 0x6f394a29)}},
-         {{TOBN(0x5bed8344, 0xd795fb45), TOBN(0x57326e7d, 0xb79f55a5),
-           TOBN(0xc9533ce0, 0x4accdffc), TOBN(0x53473caf, 0x3993fa04)},
-          {TOBN(0x7906eb93, 0xa13df4c8), TOBN(0xa73e51f6, 0x97cbe46f),
-           TOBN(0xd1ab3ae1, 0x0ae4ccf8), TOBN(0x25614508, 0x8a5b3dbc)}},
-         {{TOBN(0x61eff962, 0x11a71b27), TOBN(0xdf71412b, 0x6bb7fa39),
-           TOBN(0xb31ba6b8, 0x2bd7f3ef), TOBN(0xb0b9c415, 0x69180d29)},
-          {TOBN(0xeec14552, 0x014cdde5), TOBN(0x702c624b, 0x227b4bbb),
-           TOBN(0x2b15e8c2, 0xd3e988f3), TOBN(0xee3bcc6d, 0xa4f7fd04)}},
-         {{TOBN(0x9d00822a, 0x42ac6c85), TOBN(0x2db0cea6, 0x1df9f2b7),
-           TOBN(0xd7cad2ab, 0x42de1e58), TOBN(0x346ed526, 0x2d6fbb61)},
-          {TOBN(0xb3962995, 0x1a2faf09), TOBN(0x2fa8a580, 0x7c25612e),
-           TOBN(0x30ae04da, 0x7cf56490), TOBN(0x75662908, 0x0eea3961)}},
-         {{TOBN(0x3609f5c5, 0x3d080847), TOBN(0xcb081d39, 0x5241d4f6),
-           TOBN(0xb4fb3810, 0x77961a63), TOBN(0xc20c5984, 0x2abb66fc)},
-          {TOBN(0x3d40aa7c, 0xf902f245), TOBN(0x9cb12736, 0x4e536b1e),
-           TOBN(0x5eda24da, 0x99b3134f), TOBN(0xafbd9c69, 0x5cd011af)}},
-         {{TOBN(0x9a16e30a, 0xc7088c7d), TOBN(0x5ab65710, 0x3207389f),
-           TOBN(0x1b09547f, 0xe7407a53), TOBN(0x2322f9d7, 0x4fdc6eab)},
-          {TOBN(0xc0f2f22d, 0x7430de4d), TOBN(0x19382696, 0xe68ca9a9),
-           TOBN(0x17f1eff1, 0x918e5868), TOBN(0xe3b5b635, 0x586f4204)}},
-         {{TOBN(0x146ef980, 0x3fbc4341), TOBN(0x359f2c80, 0x5b5eed4e),
-           TOBN(0x9f35744e, 0x7482e41d), TOBN(0x9a9ac3ec, 0xf3b224c2)},
-          {TOBN(0x9161a6fe, 0x91fc50ae), TOBN(0x89ccc66b, 0xc613fa7c),
-           TOBN(0x89268b14, 0xc732f15a), TOBN(0x7cd6f4e2, 0xb467ed03)}},
-         {{TOBN(0xfbf79869, 0xce56b40e), TOBN(0xf93e094c, 0xc02dde98),
-           TOBN(0xefe0c3a8, 0xedee2cd7), TOBN(0x90f3ffc0, 0xb268fd42)},
-          {TOBN(0x81a7fd56, 0x08241aed), TOBN(0x95ab7ad8, 0x00b1afe8),
-           TOBN(0x40127056, 0x3e310d52), TOBN(0xd3ffdeb1, 0x09d9fc43)}},
-         {{TOBN(0xc8f85c91, 0xd11a8594), TOBN(0x2e74d258, 0x31cf6db8),
-           TOBN(0x829c7ca3, 0x02b5dfd0), TOBN(0xe389cfbe, 0x69143c86)},
-          {TOBN(0xd01b6405, 0x941768d8), TOBN(0x45103995, 0x03bf825d),
-           TOBN(0xcc4ee166, 0x56cd17e2), TOBN(0xbea3c283, 0xba037e79)}},
-         {{TOBN(0x4e1ac06e, 0xd9a47520), TOBN(0xfbfe18aa, 0xaf852404),
-           TOBN(0x5615f8e2, 0x8087648a), TOBN(0x7301e47e, 0xb9d150d9)},
-          {TOBN(0x79f9f9dd, 0xb299b977), TOBN(0x76697a7b, 0xa5b78314),
-           TOBN(0x10d67468, 0x7d7c90e7), TOBN(0x7afffe03, 0x937210b5)}},
-         {{TOBN(0x5aef3e4b, 0x28c22cee), TOBN(0xefb0ecd8, 0x09fd55ae),
-           TOBN(0x4cea7132, 0x0d2a5d6a), TOBN(0x9cfb5fa1, 0x01db6357)},
-          {TOBN(0x395e0b57, 0xf36e1ac5), TOBN(0x008fa9ad, 0x36cafb7d),
-           TOBN(0x8f6cdf70, 0x5308c4db), TOBN(0x51527a37, 0x95ed2477)}},
-         {{TOBN(0xba0dee30, 0x5bd21311), TOBN(0x6ed41b22, 0x909c90d7),
-           TOBN(0xc5f6b758, 0x7c8696d3), TOBN(0x0db8eaa8, 0x3ce83a80)},
-          {TOBN(0xd297fe37, 0xb24b4b6f), TOBN(0xfe58afe8, 0x522d1f0d),
-           TOBN(0x97358736, 0x8c98dbd9), TOBN(0x6bc226ca, 0x9454a527)}},
-         {{TOBN(0xa12b384e, 0xce53c2d0), TOBN(0x779d897d, 0x5e4606da),
-           TOBN(0xa53e47b0, 0x73ec12b0), TOBN(0x462dbbba, 0x5756f1ad)},
-          {TOBN(0x69fe09f2, 0xcafe37b6), TOBN(0x273d1ebf, 0xecce2e17),
-           TOBN(0x8ac1d538, 0x3cf607fd), TOBN(0x8035f7ff, 0x12e10c25)}}},
-        {{{TOBN(0x854d34c7, 0x7e6c5520), TOBN(0xc27df9ef, 0xdcb9ea58),
-           TOBN(0x405f2369, 0xd686666d), TOBN(0x29d1febf, 0x0417aa85)},
-          {TOBN(0x9846819e, 0x93470afe), TOBN(0x3e6a9669, 0xe2a27f9e),
-           TOBN(0x24d008a2, 0xe31e6504), TOBN(0xdba7cecf, 0x9cb7680a)}},
-         {{TOBN(0xecaff541, 0x338d6e43), TOBN(0x56f7dd73, 0x4541d5cc),
-           TOBN(0xb5d426de, 0x96bc88ca), TOBN(0x48d94f6b, 0x9ed3a2c3)},
-          {TOBN(0x6354a3bb, 0x2ef8279c), TOBN(0xd575465b, 0x0b1867f2),
-           TOBN(0xef99b0ff, 0x95225151), TOBN(0xf3e19d88, 0xf94500d8)}},
-         {{TOBN(0x92a83268, 0xe32dd620), TOBN(0x913ec99f, 0x627849a2),
-           TOBN(0xedd8fdfa, 0x2c378882), TOBN(0xaf96f33e, 0xee6f8cfe)},
-          {TOBN(0xc06737e5, 0xdc3fa8a5), TOBN(0x236bb531, 0xb0b03a1d),
-           TOBN(0x33e59f29, 0x89f037b0), TOBN(0x13f9b5a7, 0xd9a12a53)}},
-         {{TOBN(0x0d0df6ce, 0x51efb310), TOBN(0xcb5b2eb4, 0x958df5be),
-           TOBN(0xd6459e29, 0x36158e59), TOBN(0x82aae2b9, 0x1466e336)},
-          {TOBN(0xfb658a39, 0x411aa636), TOBN(0x7152ecc5, 0xd4c0a933),
-           TOBN(0xf10c758a, 0x49f026b7), TOBN(0xf4837f97, 0xcb09311f)}},
-         {{TOBN(0xddfb02c4, 0xc753c45f), TOBN(0x18ca81b6, 0xf9c840fe),
-           TOBN(0x846fd09a, 0xb0f8a3e6), TOBN(0xb1162add, 0xe7733dbc)},
-          {TOBN(0x7070ad20, 0x236e3ab6), TOBN(0xf88cdaf5, 0xb2a56326),
-           TOBN(0x05fc8719, 0x997cbc7a), TOBN(0x442cd452, 0x4b665272)}},
-         {{TOBN(0x7807f364, 0xb71698f5), TOBN(0x6ba418d2, 0x9f7b605e),
-           TOBN(0xfd20b00f, 0xa03b2cbb), TOBN(0x883eca37, 0xda54386f)},
-          {TOBN(0xff0be43f, 0xf3437f24), TOBN(0xe910b432, 0xa48bb33c),
-           TOBN(0x4963a128, 0x329df765), TOBN(0xac1dd556, 0xbe2fe6f7)}},
-         {{TOBN(0x557610f9, 0x24a0a3fc), TOBN(0x38e17bf4, 0xe881c3f9),
-           TOBN(0x6ba84faf, 0xed0dac99), TOBN(0xd4a222c3, 0x59eeb918)},
-          {TOBN(0xc79c1dbe, 0x13f542b6), TOBN(0x1fc65e0d, 0xe425d457),
-           TOBN(0xeffb754f, 0x1debb779), TOBN(0x638d8fd0, 0x9e08af60)}},
-         {{TOBN(0x994f523a, 0x626332d5), TOBN(0x7bc38833, 0x5561bb44),
-           TOBN(0x005ed4b0, 0x3d845ea2), TOBN(0xd39d3ee1, 0xc2a1f08a)},
-          {TOBN(0x6561fdd3, 0xe7676b0d), TOBN(0x620e35ff, 0xfb706017),
-           TOBN(0x36ce424f, 0xf264f9a8), TOBN(0xc4c3419f, 0xda2681f7)}},
-         {{TOBN(0xfb6afd2f, 0x69beb6e8), TOBN(0x3a50b993, 0x6d700d03),
-           TOBN(0xc840b2ad, 0x0c83a14f), TOBN(0x573207be, 0x54085bef)},
-          {TOBN(0x5af882e3, 0x09fe7e5b), TOBN(0x957678a4, 0x3b40a7e1),
-           TOBN(0x172d4bdd, 0x543056e2), TOBN(0x9c1b26b4, 0x0df13c0a)}},
-         {{TOBN(0x1c30861c, 0xf405ff06), TOBN(0xebac86bd, 0x486e828b),
-           TOBN(0xe791a971, 0x636933fc), TOBN(0x50e7c2be, 0x7aeee947)},
-          {TOBN(0xc3d4a095, 0xfa90d767), TOBN(0xae60eb7b, 0xe670ab7b),
-           TOBN(0x17633a64, 0x397b056d), TOBN(0x93a21f33, 0x105012aa)}},
-         {{TOBN(0x663c370b, 0xabb88643), TOBN(0x91df36d7, 0x22e21599),
-           TOBN(0x183ba835, 0x8b761671), TOBN(0x381eea1d, 0x728f3bf1)},
-          {TOBN(0xb9b2f1ba, 0x39966e6c), TOBN(0x7c464a28, 0xe7295492),
-           TOBN(0x0fd5f70a, 0x09b26b7f), TOBN(0xa9aba1f9, 0xfbe009df)}},
-         {{TOBN(0x857c1f22, 0x369b87ad), TOBN(0x3c00e5d9, 0x32fca556),
-           TOBN(0x1ad74cab, 0x90b06466), TOBN(0xa7112386, 0x550faaf2)},
-          {TOBN(0x7435e198, 0x6d9bd5f5), TOBN(0x2dcc7e38, 0x59c3463f),
-           TOBN(0xdc7df748, 0xca7bd4b2), TOBN(0x13cd4c08, 0x9dec2f31)}},
-         {{TOBN(0x0d3b5df8, 0xe3237710), TOBN(0x0dadb26e, 0xcbd2f7b0),
-           TOBN(0x9f5966ab, 0xe4aa082b), TOBN(0x666ec8de, 0x350e966e)},
-          {TOBN(0x1bfd1ed5, 0xee524216), TOBN(0xcd93c59b, 0x41dab0b6),
-           TOBN(0x658a8435, 0xd186d6ba), TOBN(0x1b7d34d2, 0x159d1195)}},
-         {{TOBN(0x5936e460, 0x22caf46b), TOBN(0x6a45dd8f, 0x9a96fe4f),
-           TOBN(0xf7925434, 0xb98f474e), TOBN(0x41410412, 0x0053ef15)},
-          {TOBN(0x71cf8d12, 0x41de97bf), TOBN(0xb8547b61, 0xbd80bef4),
-           TOBN(0xb47d3970, 0xc4db0037), TOBN(0xf1bcd328, 0xfef20dff)}},
-         {{TOBN(0x31a92e09, 0x10caad67), TOBN(0x1f591960, 0x5531a1e1),
-           TOBN(0x3bb852e0, 0x5f4fc840), TOBN(0x63e297ca, 0x93a72c6c)},
-          {TOBN(0x3c2b0b2e, 0x49abad67), TOBN(0x6ec405fc, 0xed3db0d9),
-           TOBN(0xdc14a530, 0x7fef1d40), TOBN(0xccd19846, 0x280896fc)}},
-         {{TOBN(0x00f83176, 0x9bb81648), TOBN(0xd69eb485, 0x653120d0),
-           TOBN(0xd17d75f4, 0x4ccabc62), TOBN(0x34a07f82, 0xb749fcb1)},
-          {TOBN(0x2c3af787, 0xbbfb5554), TOBN(0xb06ed4d0, 0x62e283f8),
-           TOBN(0x5722889f, 0xa19213a0), TOBN(0x162b085e, 0xdcf3c7b4)}},
-         {{TOBN(0xbcaecb31, 0xe0dd3eca), TOBN(0xc6237fbc, 0xe52f13a5),
-           TOBN(0xcc2b6b03, 0x27bac297), TOBN(0x2ae1cac5, 0xb917f54a)},
-          {TOBN(0x474807d4, 0x7845ae4f), TOBN(0xfec7dd92, 0xce5972e0),
-           TOBN(0xc3bd2541, 0x1d7915bb), TOBN(0x66f85dc4, 0xd94907ca)}},
-         {{TOBN(0xd981b888, 0xbdbcf0ca), TOBN(0xd75f5da6, 0xdf279e9f),
-           TOBN(0x128bbf24, 0x7054e934), TOBN(0x3c6ff6e5, 0x81db134b)},
-          {TOBN(0x795b7cf4, 0x047d26e4), TOBN(0xf370f7b8, 0x5049ec37),
-           TOBN(0xc6712d4d, 0xced945af), TOBN(0xdf30b5ec, 0x095642bc)}},
-         {{TOBN(0x9b034c62, 0x4896246e), TOBN(0x5652c016, 0xee90bbd1),
-           TOBN(0xeb38636f, 0x87fedb73), TOBN(0x5e32f847, 0x0135a613)},
-          {TOBN(0x0703b312, 0xcf933c83), TOBN(0xd05bb76e, 0x1a7f47e6),
-           TOBN(0x825e4f0c, 0x949c2415), TOBN(0x569e5622, 0x7250d6f8)}},
-         {{TOBN(0xbbe9eb3a, 0x6568013e), TOBN(0x8dbd203f, 0x22f243fc),
-           TOBN(0x9dbd7694, 0xb342734a), TOBN(0x8f6d12f8, 0x46afa984)},
-          {TOBN(0xb98610a2, 0xc9eade29), TOBN(0xbab4f323, 0x47dd0f18),
-           TOBN(0x5779737b, 0x671c0d46), TOBN(0x10b6a7c6, 0xd3e0a42a)}},
-         {{TOBN(0xfb19ddf3, 0x3035b41c), TOBN(0xd336343f, 0x99c45895),
-           TOBN(0x61fe4938, 0x54c857e5), TOBN(0xc4d506be, 0xae4e57d5)},
-          {TOBN(0x3cd8c8cb, 0xbbc33f75), TOBN(0x7281f08a, 0x9262c77d),
-           TOBN(0x083f4ea6, 0xf11a2823), TOBN(0x8895041e, 0x9fba2e33)}},
-         {{TOBN(0xfcdfea49, 0x9c438edf), TOBN(0x7678dcc3, 0x91edba44),
-           TOBN(0xf07b3b87, 0xe2ba50f0), TOBN(0xc13888ef, 0x43948c1b)},
-          {TOBN(0xc2135ad4, 0x1140af42), TOBN(0x8e5104f3, 0x926ed1a7),
-           TOBN(0xf24430cb, 0x88f6695f), TOBN(0x0ce0637b, 0x6d73c120)}},
-         {{TOBN(0xb2db01e6, 0xfe631e8f), TOBN(0x1c5563d7, 0xd7bdd24b),
-           TOBN(0x8daea3ba, 0x369ad44f), TOBN(0x000c81b6, 0x8187a9f9)},
-          {TOBN(0x5f48a951, 0xaae1fd9a), TOBN(0xe35626c7, 0x8d5aed8a),
-           TOBN(0x20952763, 0x0498c622), TOBN(0x76d17634, 0x773aa504)}},
-         {{TOBN(0x36d90dda, 0xeb300f7a), TOBN(0x9dcf7dfc, 0xedb5e801),
-           TOBN(0x645cb268, 0x74d5244c), TOBN(0xa127ee79, 0x348e3aa2)},
-          {TOBN(0x488acc53, 0x575f1dbb), TOBN(0x95037e85, 0x80e6161e),
-           TOBN(0x57e59283, 0x292650d0), TOBN(0xabe67d99, 0x14938216)}},
-         {{TOBN(0x3c7f944b, 0x3f8e1065), TOBN(0xed908cb6, 0x330e8924),
-           TOBN(0x08ee8fd5, 0x6f530136), TOBN(0x2227b7d5, 0xd7ffc169)},
-          {TOBN(0x4f55c893, 0xb5cd6dd5), TOBN(0x82225e11, 0xa62796e8),
-           TOBN(0x5c6cead1, 0xcb18e12c), TOBN(0x4381ae0c, 0x84f5a51a)}},
-         {{TOBN(0x345913d3, 0x7fafa4c8), TOBN(0x3d918082, 0x0491aac0),
-           TOBN(0x9347871f, 0x3e69264c), TOBN(0xbea9dd3c, 0xb4f4f0cd)},
-          {TOBN(0xbda5d067, 0x3eadd3e7), TOBN(0x0033c1b8, 0x0573bcd8),
-           TOBN(0x25589379, 0x5da2486c), TOBN(0xcb89ee5b, 0x86abbee7)}},
-         {{TOBN(0x8fe0a8f3, 0x22532e5d), TOBN(0xb6410ff0, 0x727dfc4c),
-           TOBN(0x619b9d58, 0x226726db), TOBN(0x5ec25669, 0x7a2b2dc7)},
-          {TOBN(0xaf4d2e06, 0x4c3beb01), TOBN(0x852123d0, 0x7acea556),
-           TOBN(0x0e9470fa, 0xf783487a), TOBN(0x75a7ea04, 0x5664b3eb)}},
-         {{TOBN(0x4ad78f35, 0x6798e4ba), TOBN(0x9214e6e5, 0xc7d0e091),
-           TOBN(0xc420b488, 0xb1290403), TOBN(0x64049e0a, 0xfc295749)},
-          {TOBN(0x03ef5af1, 0x3ae9841f), TOBN(0xdbe4ca19, 0xb0b662a6),
-           TOBN(0x46845c5f, 0xfa453458), TOBN(0xf8dabf19, 0x10b66722)}},
-         {{TOBN(0xb650f0aa, 0xcce2793b), TOBN(0x71db851e, 0xc5ec47c1),
-           TOBN(0x3eb78f3e, 0x3b234fa9), TOBN(0xb0c60f35, 0xfc0106ce)},
-          {TOBN(0x05427121, 0x774eadbd), TOBN(0x25367faf, 0xce323863),
-           TOBN(0x7541b5c9, 0xcd086976), TOBN(0x4ff069e2, 0xdc507ad1)}},
-         {{TOBN(0x74145256, 0x8776e667), TOBN(0x6e76142c, 0xb23c6bb5),
-           TOBN(0xdbf30712, 0x1b3a8a87), TOBN(0x60e7363e, 0x98450836)},
-          {TOBN(0x5741450e, 0xb7366d80), TOBN(0xe4ee14ca, 0x4837dbdf),
-           TOBN(0xa765eb9b, 0x69d4316f), TOBN(0x04548dca, 0x8ef43825)}},
-         {{TOBN(0x9c9f4e4c, 0x5ae888eb), TOBN(0x733abb51, 0x56e9ac99),
-           TOBN(0xdaad3c20, 0xba6ac029), TOBN(0x9b8dd3d3, 0x2ba3e38e)},
-          {TOBN(0xa9bb4c92, 0x0bc5d11a), TOBN(0xf20127a7, 0x9c5f88a3),
-           TOBN(0x4f52b06e, 0x161d3cb8), TOBN(0x26c1ff09, 0x6afaf0a6)}},
-         {{TOBN(0x32670d2f, 0x7189e71f), TOBN(0xc6438748, 0x5ecf91e7),
-           TOBN(0x15758e57, 0xdb757a21), TOBN(0x427d09f8, 0x290a9ce5)},
-          {TOBN(0x846a308f, 0x38384a7a), TOBN(0xaac3acb4, 0xb0732b99),
-           TOBN(0x9e941009, 0x17845819), TOBN(0x95cba111, 0xa7ce5e03)}},
-         {{TOBN(0x6f3d4f7f, 0xb00009c4), TOBN(0xb8396c27, 0x8ff28b5f),
-           TOBN(0xb1a9ae43, 0x1c97975d), TOBN(0x9d7ba8af, 0xe5d9fed5)},
-          {TOBN(0x338cf09f, 0x34f485b6), TOBN(0xbc0ddacc, 0x64122516),
-           TOBN(0xa450da12, 0x05d471fe), TOBN(0x4c3a6250, 0x628dd8c9)}},
-         {{TOBN(0x69c7d103, 0xd1295837), TOBN(0xa2893e50, 0x3807eb2f),
-           TOBN(0xd6e1e1de, 0xbdb41491), TOBN(0xc630745b, 0x5e138235)},
-          {TOBN(0xc892109e, 0x48661ae1), TOBN(0x8d17e7eb, 0xea2b2674),
-           TOBN(0x00ec0f87, 0xc328d6b5), TOBN(0x6d858645, 0xf079ff9e)}},
-         {{TOBN(0x6cdf243e, 0x19115ead), TOBN(0x1ce1393e, 0x4bac4fcf),
-           TOBN(0x2c960ed0, 0x9c29f25b), TOBN(0x59be4d8e, 0x9d388a05)},
-          {TOBN(0x0d46e06c, 0xd0def72b), TOBN(0xb923db5d, 0xe0342748),
-           TOBN(0xf7d3aacd, 0x936d4a3d), TOBN(0x558519cc, 0x0b0b099e)}},
-         {{TOBN(0x3ea8ebf8, 0x827097ef), TOBN(0x259353db, 0xd054f55d),
-           TOBN(0x84c89abc, 0x6d2ed089), TOBN(0x5c548b69, 0x8e096a7c)},
-          {TOBN(0xd587f616, 0x994b995d), TOBN(0x4d1531f6, 0xa5845601),
-           TOBN(0x792ab31e, 0x451fd9f0), TOBN(0xc8b57bb2, 0x65adf6ca)}},
-         {{TOBN(0x68440fcb, 0x1cd5ad73), TOBN(0xb9c860e6, 0x6144da4f),
-           TOBN(0x2ab286aa, 0x8462beb8), TOBN(0xcc6b8fff, 0xef46797f)},
-          {TOBN(0xac820da4, 0x20c8a471), TOBN(0x69ae05a1, 0x77ff7faf),
-           TOBN(0xb9163f39, 0xbfb5da77), TOBN(0xbd03e590, 0x2c73ab7a)}},
-         {{TOBN(0x7e862b5e, 0xb2940d9e), TOBN(0x3c663d86, 0x4b9af564),
-           TOBN(0xd8309031, 0xbde3033d), TOBN(0x298231b2, 0xd42c5bc6)},
-          {TOBN(0x42090d2c, 0x552ad093), TOBN(0xa4799d1c, 0xff854695),
-           TOBN(0x0a88b5d6, 0xd31f0d00), TOBN(0xf8b40825, 0xa2f26b46)}},
-         {{TOBN(0xec29b1ed, 0xf1bd7218), TOBN(0xd491c53b, 0x4b24c86e),
-           TOBN(0xd2fe588f, 0x3395ea65), TOBN(0x6f3764f7, 0x4456ef15)},
-          {TOBN(0xdb43116d, 0xcdc34800), TOBN(0xcdbcd456, 0xc1e33955),
-           TOBN(0xefdb5540, 0x74ab286b), TOBN(0x948c7a51, 0xd18c5d7c)}},
-         {{TOBN(0xeb81aa37, 0x7378058e), TOBN(0x41c746a1, 0x04411154),
-           TOBN(0xa10c73bc, 0xfb828ac7), TOBN(0x6439be91, 0x9d972b29)},
-          {TOBN(0x4bf3b4b0, 0x43a2fbad), TOBN(0x39e6dadf, 0x82b5e840),
-           TOBN(0x4f716408, 0x6397bd4c), TOBN(0x0f7de568, 0x7f1eeccb)}},
-         {{TOBN(0x5865c5a1, 0xd2ffbfc1), TOBN(0xf74211fa, 0x4ccb6451),
-           TOBN(0x66368a88, 0xc0b32558), TOBN(0x5b539dc2, 0x9ad7812e)},
-          {TOBN(0x579483d0, 0x2f3af6f6), TOBN(0x52132078, 0x99934ece),
-           TOBN(0x50b9650f, 0xdcc9e983), TOBN(0xca989ec9, 0xaee42b8a)}},
-         {{TOBN(0x6a44c829, 0xd6f62f99), TOBN(0x8f06a309, 0x4c2a7c0c),
-           TOBN(0x4ea2b3a0, 0x98a0cb0a), TOBN(0x5c547b70, 0xbeee8364)},
-          {TOBN(0x461d40e1, 0x682afe11), TOBN(0x9e0fc77a, 0x7b41c0a8),
-           TOBN(0x79e4aefd, 0xe20d5d36), TOBN(0x2916e520, 0x32dd9f63)}},
-         {{TOBN(0xf59e52e8, 0x3f883faf), TOBN(0x396f9639, 0x2b868d35),
-           TOBN(0xc902a9df, 0x4ca19881), TOBN(0x0fc96822, 0xdb2401a6)},
-          {TOBN(0x41237587, 0x66f1c68d), TOBN(0x10fc6de3, 0xfb476c0d),
-           TOBN(0xf8b6b579, 0x841f5d90), TOBN(0x2ba8446c, 0xfa24f44a)}},
-         {{TOBN(0xa237b920, 0xef4a9975), TOBN(0x60bb6004, 0x2330435f),
-           TOBN(0xd6f4ab5a, 0xcfb7e7b5), TOBN(0xb2ac5097, 0x83435391)},
-          {TOBN(0xf036ee2f, 0xb0d1ea67), TOBN(0xae779a6a, 0x74c56230),
-           TOBN(0x59bff8c8, 0xab838ae6), TOBN(0xcd83ca99, 0x9b38e6f0)}},
-         {{TOBN(0xbb27bef5, 0xe33deed3), TOBN(0xe6356f6f, 0x001892a8),
-           TOBN(0xbf3be6cc, 0x7adfbd3e), TOBN(0xaecbc81c, 0x33d1ac9d)},
-          {TOBN(0xe4feb909, 0xe6e861dc), TOBN(0x90a247a4, 0x53f5f801),
-           TOBN(0x01c50acb, 0x27346e57), TOBN(0xce29242e, 0x461acc1b)}},
-         {{TOBN(0x04dd214a, 0x2f998a91), TOBN(0x271ee9b1, 0xd4baf27b),
-           TOBN(0x7e3027d1, 0xe8c26722), TOBN(0x21d1645c, 0x1820dce5)},
-          {TOBN(0x086f242c, 0x7501779c), TOBN(0xf0061407, 0xfa0e8009),
-           TOBN(0xf23ce477, 0x60187129), TOBN(0x05bbdedb, 0x0fde9bd0)}},
-         {{TOBN(0x682f4832, 0x25d98473), TOBN(0xf207fe85, 0x5c658427),
-           TOBN(0xb6fdd7ba, 0x4166ffa1), TOBN(0x0c314056, 0x9eed799d)},
-          {TOBN(0x0db8048f, 0x4107e28f), TOBN(0x74ed3871, 0x41216840),
-           TOBN(0x74489f8f, 0x56a3c06e), TOBN(0x1e1c005b, 0x12777134)}},
-         {{TOBN(0xdb332a73, 0xf37ec3c3), TOBN(0xc65259bd, 0xdd59eba0),
-           TOBN(0x2291709c, 0xdb4d3257), TOBN(0x9a793b25, 0xbd389390)},
-          {TOBN(0xf39fe34b, 0xe43756f0), TOBN(0x2f76bdce, 0x9afb56c9),
-           TOBN(0x9f37867a, 0x61208b27), TOBN(0xea1d4307, 0x089972c3)}},
-         {{TOBN(0x8c595330, 0x8bdf623a), TOBN(0x5f5accda, 0x8441fb7d),
-           TOBN(0xfafa9418, 0x32ddfd95), TOBN(0x6ad40c5a, 0x0fde9be7)},
-          {TOBN(0x43faba89, 0xaeca8709), TOBN(0xc64a7cf1, 0x2c248a9d),
-           TOBN(0x16620252, 0x72637a76), TOBN(0xaee1c791, 0x22b8d1bb)}},
-         {{TOBN(0xf0f798fd, 0x21a843b2), TOBN(0x56e4ed4d, 0x8d005cb1),
-           TOBN(0x355f7780, 0x1f0d8abe), TOBN(0x197b04cf, 0x34522326)},
-          {TOBN(0x41f9b31f, 0xfd42c13f), TOBN(0x5ef7feb2, 0xb40f933d),
-           TOBN(0x27326f42, 0x5d60bad4), TOBN(0x027ecdb2, 0x8c92cf89)}},
-         {{TOBN(0x04aae4d1, 0x4e3352fe), TOBN(0x08414d2f, 0x73591b90),
-           TOBN(0x5ed6124e, 0xb7da7d60), TOBN(0xb985b931, 0x4d13d4ec)},
-          {TOBN(0xa592d3ab, 0x96bf36f9), TOBN(0x012dbed5, 0xbbdf51df),
-           TOBN(0xa57963c0, 0xdf6c177d), TOBN(0x010ec869, 0x87ca29cf)}},
-         {{TOBN(0xba1700f6, 0xbf926dff), TOBN(0x7c9fdbd1, 0xf4bf6bc2),
-           TOBN(0xdc18dc8f, 0x64da11f5), TOBN(0xa6074b7a, 0xd938ae75)},
-          {TOBN(0x14270066, 0xe84f44a4), TOBN(0x99998d38, 0xd27b954e),
-           TOBN(0xc1be8ab2, 0xb4f38e9a), TOBN(0x8bb55bbf, 0x15c01016)}},
-         {{TOBN(0xf73472b4, 0x0ea2ab30), TOBN(0xd365a340, 0xf73d68dd),
-           TOBN(0xc01a7168, 0x19c2e1eb), TOBN(0x32f49e37, 0x34061719)},
-          {TOBN(0xb73c57f1, 0x01d8b4d6), TOBN(0x03c8423c, 0x26b47700),
-           TOBN(0x321d0bc8, 0xa4d8826a), TOBN(0x6004213c, 0x4bc0e638)}},
-         {{TOBN(0xf78c64a1, 0xc1c06681), TOBN(0x16e0a16f, 0xef018e50),
-           TOBN(0x31cbdf91, 0xdb42b2b3), TOBN(0xf8f4ffce, 0xe0d36f58)},
-          {TOBN(0xcdcc71cd, 0x4cc5e3e0), TOBN(0xd55c7cfa, 0xa129e3e0),
-           TOBN(0xccdb6ba0, 0x0fb2cbf1), TOBN(0x6aba0005, 0xc4bce3cb)}},
-         {{TOBN(0x501cdb30, 0xd232cfc4), TOBN(0x9ddcf12e, 0xd58a3cef),
-           TOBN(0x02d2cf9c, 0x87e09149), TOBN(0xdc5d7ec7, 0x2c976257)},
-          {TOBN(0x6447986e, 0x0b50d7dd), TOBN(0x88fdbaf7, 0x807f112a),
-           TOBN(0x58c9822a, 0xb00ae9f6), TOBN(0x6abfb950, 0x6d3d27e0)}},
-         {{TOBN(0xd0a74487, 0x8a429f4f), TOBN(0x0649712b, 0xdb516609),
-           TOBN(0xb826ba57, 0xe769b5df), TOBN(0x82335df2, 0x1fc7aaf2)},
-          {TOBN(0x2389f067, 0x5c93d995), TOBN(0x59ac367a, 0x68677be6),
-           TOBN(0xa77985ff, 0x21d9951b), TOBN(0x038956fb, 0x85011cce)}},
-         {{TOBN(0x608e48cb, 0xbb734e37), TOBN(0xc08c0bf2, 0x2be5b26f),
-           TOBN(0x17bbdd3b, 0xf9b1a0d9), TOBN(0xeac7d898, 0x10483319)},
-          {TOBN(0xc95c4baf, 0xbc1a6dea), TOBN(0xfdd0e2bf, 0x172aafdb),
-           TOBN(0x40373cbc, 0x8235c41a), TOBN(0x14303f21, 0xfb6f41d5)}},
-         {{TOBN(0xba063621, 0x0408f237), TOBN(0xcad3b09a, 0xecd2d1ed),
-           TOBN(0x4667855a, 0x52abb6a2), TOBN(0xba9157dc, 0xaa8b417b)},
-          {TOBN(0xfe7f3507, 0x4f013efb), TOBN(0x1b112c4b, 0xaa38c4a2),
-           TOBN(0xa1406a60, 0x9ba64345), TOBN(0xe53cba33, 0x6993c80b)}},
-         {{TOBN(0x45466063, 0xded40d23), TOBN(0x3d5f1f4d, 0x54908e25),
-           TOBN(0x9ebefe62, 0x403c3c31), TOBN(0x274ea0b5, 0x0672a624)},
-          {TOBN(0xff818d99, 0x451d1b71), TOBN(0x80e82643, 0x8f79cf79),
-           TOBN(0xa165df13, 0x73ce37f5), TOBN(0xa744ef4f, 0xfe3a21fd)}},
-         {{TOBN(0x73f1e7f5, 0xcf551396), TOBN(0xc616898e, 0x868c676b),
-           TOBN(0x671c28c7, 0x8c442c36), TOBN(0xcfe5e558, 0x5e0a317d)},
-          {TOBN(0x1242d818, 0x7051f476), TOBN(0x56fad2a6, 0x14f03442),
-           TOBN(0x262068bc, 0x0a44d0f6), TOBN(0xdfa2cd6e, 0xce6edf4e)}},
-         {{TOBN(0x0f43813a, 0xd15d1517), TOBN(0x61214cb2, 0x377d44f5),
-           TOBN(0xd399aa29, 0xc639b35f), TOBN(0x42136d71, 0x54c51c19)},
-          {TOBN(0x9774711b, 0x08417221), TOBN(0x0a5546b3, 0x52545a57),
-           TOBN(0x80624c41, 0x1150582d), TOBN(0x9ec5c418, 0xfbc555bc)}},
-         {{TOBN(0x2c87dcad, 0x771849f1), TOBN(0xb0c932c5, 0x01d7bf6f),
-           TOBN(0x6aa5cd3e, 0x89116eb2), TOBN(0xd378c25a, 0x51ca7bd3)},
-          {TOBN(0xc612a0da, 0x9e6e3e31), TOBN(0x0417a54d, 0xb68ad5d0),
-           TOBN(0x00451e4a, 0x22c6edb8), TOBN(0x9fbfe019, 0xb42827ce)}},
-         {{TOBN(0x2fa92505, 0xba9384a2), TOBN(0x21b8596e, 0x64ad69c1),
-           TOBN(0x8f4fcc49, 0x983b35a6), TOBN(0xde093760, 0x72754672)},
-          {TOBN(0x2f14ccc8, 0xf7bffe6d), TOBN(0x27566bff, 0x5d94263d),
-           TOBN(0xb5b4e9c6, 0x2df3ec30), TOBN(0x94f1d7d5, 0x3e6ea6ba)}},
-         {{TOBN(0x97b7851a, 0xaaca5e9b), TOBN(0x518aa521, 0x56713b97),
-           TOBN(0x3357e8c7, 0x150a61f6), TOBN(0x7842e7e2, 0xec2c2b69)},
-          {TOBN(0x8dffaf65, 0x6868a548), TOBN(0xd963bd82, 0xe068fc81),
-           TOBN(0x64da5c8b, 0x65917733), TOBN(0x927090ff, 0x7b247328)}}},
-        {{{TOBN(0x214bc9a7, 0xd298c241), TOBN(0xe3b697ba, 0x56807cfd),
-           TOBN(0xef1c7802, 0x4564eadb), TOBN(0xdde8cdcf, 0xb48149c5)},
-          {TOBN(0x946bf0a7, 0x5a4d2604), TOBN(0x27154d7f, 0x6c1538af),
-           TOBN(0x95cc9230, 0xde5b1fcc), TOBN(0xd88519e9, 0x66864f82)}},
-         {{TOBN(0xb828dd1a, 0x7cb1282c), TOBN(0xa08d7626, 0xbe46973a),
-           TOBN(0x6baf8d40, 0xe708d6b2), TOBN(0x72571fa1, 0x4daeb3f3)},
-          {TOBN(0x85b1732f, 0xf22dfd98), TOBN(0x87ab01a7, 0x0087108d),
-           TOBN(0xaaaafea8, 0x5988207a), TOBN(0xccc832f8, 0x69f00755)}},
-         {{TOBN(0x964d950e, 0x36ff3bf0), TOBN(0x8ad20f6f, 0xf0b34638),
-           TOBN(0x4d9177b3, 0xb5d7585f), TOBN(0xcf839760, 0xef3f019f)},
-          {TOBN(0x582fc5b3, 0x8288c545), TOBN(0x2f8e4e9b, 0x13116bd1),
-           TOBN(0xf91e1b2f, 0x332120ef), TOBN(0xcf568724, 0x2a17dd23)}},
-         {{TOBN(0x488f1185, 0xca8d9d1a), TOBN(0xadf2c77d, 0xd987ded2),
-           TOBN(0x5f3039f0, 0x60c46124), TOBN(0xe5d70b75, 0x71e095f4)},
-          {TOBN(0x82d58650, 0x6260e70f), TOBN(0x39d75ea7, 0xf750d105),
-           TOBN(0x8cf3d0b1, 0x75bac364), TOBN(0xf3a7564d, 0x21d01329)}},
-         {{TOBN(0x182f04cd, 0x2f52d2a7), TOBN(0x4fde149a, 0xe2df565a),
-           TOBN(0xb80c5eec, 0xa79fb2f7), TOBN(0xab491d7b, 0x22ddc897)},
-          {TOBN(0x99d76c18, 0xc6312c7f), TOBN(0xca0d5f3d, 0x6aa41a57),
-           TOBN(0x71207325, 0xd15363a0), TOBN(0xe82aa265, 0xbeb252c2)}},
-         {{TOBN(0x94ab4700, 0xec3128c2), TOBN(0x6c76d862, 0x8e383f49),
-           TOBN(0xdc36b150, 0xc03024eb), TOBN(0xfb439477, 0x53daac69)},
-          {TOBN(0xfc68764a, 0x8dc79623), TOBN(0x5b86995d, 0xb440fbb2),
-           TOBN(0xd66879bf, 0xccc5ee0d), TOBN(0x05228942, 0x95aa8bd3)}},
-         {{TOBN(0xb51a40a5, 0x1e6a75c1), TOBN(0x24327c76, 0x0ea7d817),
-           TOBN(0x06630182, 0x07774597), TOBN(0xd6fdbec3, 0x97fa7164)},
-          {TOBN(0x20c99dfb, 0x13c90f48), TOBN(0xd6ac5273, 0x686ef263),
-           TOBN(0xc6a50bdc, 0xfef64eeb), TOBN(0xcd87b281, 0x86fdfc32)}},
-         {{TOBN(0xb24aa43e, 0x3fcd3efc), TOBN(0xdd26c034, 0xb8088e9a),
-           TOBN(0xa5ef4dc9, 0xbd3d46ea), TOBN(0xa2f99d58, 0x8a4c6a6f)},
-          {TOBN(0xddabd355, 0x2f1da46c), TOBN(0x72c3f8ce, 0x1afacdd1),
-           TOBN(0xd90c4eee, 0x92d40578), TOBN(0xd28bb41f, 0xca623b94)}},
-         {{TOBN(0x50fc0711, 0x745edc11), TOBN(0x9dd9ad7d, 0x3dc87558),
-           TOBN(0xce6931fb, 0xb49d1e64), TOBN(0x6c77a0a2, 0xc98bd0f9)},
-          {TOBN(0x62b9a629, 0x6baf7cb1), TOBN(0xcf065f91, 0xccf72d22),
-           TOBN(0x7203cce9, 0x79639071), TOBN(0x09ae4885, 0xf9cb732f)}},
-         {{TOBN(0x5e7c3bec, 0xee8314f3), TOBN(0x1c068aed, 0xdbea298f),
-           TOBN(0x08d381f1, 0x7c80acec), TOBN(0x03b56be8, 0xe330495b)},
-          {TOBN(0xaeffb8f2, 0x9222882d), TOBN(0x95ff38f6, 0xc4af8bf7),
-           TOBN(0x50e32d35, 0x1fc57d8c), TOBN(0x6635be52, 0x17b444f0)}},
-         {{TOBN(0x04d15276, 0xa5177900), TOBN(0x4e1dbb47, 0xf6858752),
-           TOBN(0x5b475622, 0xc615796c), TOBN(0xa6fa0387, 0x691867bf)},
-          {TOBN(0xed7f5d56, 0x2844c6d0), TOBN(0xc633cf9b, 0x03a2477d),
-           TOBN(0xf6be5c40, 0x2d3721d6), TOBN(0xaf312eb7, 0xe9fd68e6)}},
-         {{TOBN(0x242792d2, 0xe7417ce1), TOBN(0xff42bc71, 0x970ee7f5),
-           TOBN(0x1ff4dc6d, 0x5c67a41e), TOBN(0x77709b7b, 0x20882a58)},
-          {TOBN(0x3554731d, 0xbe217f2c), TOBN(0x2af2a8cd, 0x5bb72177),
-           TOBN(0x58eee769, 0x591dd059), TOBN(0xbb2930c9, 0x4bba6477)}},
-         {{TOBN(0x863ee047, 0x7d930cfc), TOBN(0x4c262ad1, 0x396fd1f4),
-           TOBN(0xf4765bc8, 0x039af7e1), TOBN(0x2519834b, 0x5ba104f6)},
-          {TOBN(0x7cd61b4c, 0xd105f961), TOBN(0xa5415da5, 0xd63bca54),
-           TOBN(0x778280a0, 0x88a1f17c), TOBN(0xc4968949, 0x2329512c)}},
-         {{TOBN(0x174a9126, 0xcecdaa7a), TOBN(0xfc8c7e0e, 0x0b13247b),
-           TOBN(0x29c110d2, 0x3484c1c4), TOBN(0xf8eb8757, 0x831dfc3b)},
-          {TOBN(0x022f0212, 0xc0067452), TOBN(0x3f6f69ee, 0x7b9b926c),
-           TOBN(0x09032da0, 0xef42daf4), TOBN(0x79f00ade, 0x83f80de4)}},
-         {{TOBN(0x6210db71, 0x81236c97), TOBN(0x74f7685b, 0x3ee0781f),
-           TOBN(0x4df7da7b, 0xa3e41372), TOBN(0x2aae38b1, 0xb1a1553e)},
-          {TOBN(0x1688e222, 0xf6dd9d1b), TOBN(0x57695448, 0x5b8b6487),
-           TOBN(0x478d2127, 0x4b2edeaa), TOBN(0xb2818fa5, 0x1e85956a)}},
-         {{TOBN(0x1e6addda, 0xf176f2c0), TOBN(0x01ca4604, 0xe2572658),
-           TOBN(0x0a404ded, 0x85342ffb), TOBN(0x8cf60f96, 0x441838d6)},
-          {TOBN(0x9bbc691c, 0xc9071c4a), TOBN(0xfd588744, 0x34442803),
-           TOBN(0x97101c85, 0x809c0d81), TOBN(0xa7fb754c, 0x8c456f7f)}},
-         {{TOBN(0xc95f3c5c, 0xd51805e1), TOBN(0xab4ccd39, 0xb299dca8),
-           TOBN(0x3e03d20b, 0x47eaf500), TOBN(0xfa3165c1, 0xd7b80893)},
-          {TOBN(0x005e8b54, 0xe160e552), TOBN(0xdc4972ba, 0x9019d11f),
-           TOBN(0x21a6972e, 0x0c9a4a7a), TOBN(0xa52c258f, 0x37840fd7)}},
-         {{TOBN(0xf8559ff4, 0xc1e99d81), TOBN(0x08e1a7d6, 0xa3c617c0),
-           TOBN(0xb398fd43, 0x248c6ba7), TOBN(0x6ffedd91, 0xd1283794)},
-          {TOBN(0x8a6a59d2, 0xd629d208), TOBN(0xa9d141d5, 0x3490530e),
-           TOBN(0x42f6fc18, 0x38505989), TOBN(0x09bf250d, 0x479d94ee)}},
-         {{TOBN(0x223ad3b1, 0xb3822790), TOBN(0x6c5926c0, 0x93b8971c),
-           TOBN(0x609efc7e, 0x75f7fa62), TOBN(0x45d66a6d, 0x1ec2d989)},
-          {TOBN(0x4422d663, 0x987d2792), TOBN(0x4a73caad, 0x3eb31d2b),
-           TOBN(0xf06c2ac1, 0xa32cb9e6), TOBN(0xd9445c5f, 0x91aeba84)}},
-         {{TOBN(0x6af7a1d5, 0xaf71013f), TOBN(0xe68216e5, 0x0bedc946),
-           TOBN(0xf4cba30b, 0xd27370a0), TOBN(0x7981afbf, 0x870421cc)},
-          {TOBN(0x02496a67, 0x9449f0e1), TOBN(0x86cfc4be, 0x0a47edae),
-           TOBN(0x3073c936, 0xb1feca22), TOBN(0xf5694612, 0x03f8f8fb)}},
-         {{TOBN(0xd063b723, 0x901515ea), TOBN(0x4c6c77a5, 0x749cf038),
-           TOBN(0x6361e360, 0xab9e5059), TOBN(0x596cf171, 0xa76a37c0)},
-          {TOBN(0x800f53fa, 0x6530ae7a), TOBN(0x0f5e631e, 0x0792a7a6),
-           TOBN(0x5cc29c24, 0xefdb81c9), TOBN(0xa269e868, 0x3f9c40ba)}},
-         {{TOBN(0xec14f9e1, 0x2cb7191e), TOBN(0x78ea1bd8, 0xe5b08ea6),
-           TOBN(0x3c65aa9b, 0x46332bb9), TOBN(0x84cc22b3, 0xbf80ce25)},
-          {TOBN(0x0098e9e9, 0xd49d5bf1), TOBN(0xcd4ec1c6, 0x19087da4),
-           TOBN(0x3c9d07c5, 0xaef6e357), TOBN(0x839a0268, 0x9f8f64b8)}},
-         {{TOBN(0xc5e9eb62, 0xc6d8607f), TOBN(0x759689f5, 0x6aa995e4),
-           TOBN(0x70464669, 0xbbb48317), TOBN(0x921474bf, 0xe402417d)},
-          {TOBN(0xcabe135b, 0x2a354c8c), TOBN(0xd51e52d2, 0x812fa4b5),
-           TOBN(0xec741096, 0x53311fe8), TOBN(0x4f774535, 0xb864514b)}},
-         {{TOBN(0xbcadd671, 0x5bde48f8), TOBN(0xc9703873, 0x2189bc7d),
-           TOBN(0x5d45299e, 0xc709ee8a), TOBN(0xd1287ee2, 0x845aaff8)},
-          {TOBN(0x7d1f8874, 0xdb1dbf1f), TOBN(0xea46588b, 0x990c88d6),
-           TOBN(0x60ba649a, 0x84368313), TOBN(0xd5fdcbce, 0x60d543ae)}},
-         {{TOBN(0x90b46d43, 0x810d5ab0), TOBN(0x6739d8f9, 0x04d7e5cc),
-           TOBN(0x021c1a58, 0x0d337c33), TOBN(0x00a61162, 0x68e67c40)},
-          {TOBN(0x95ef413b, 0x379f0a1f), TOBN(0xfe126605, 0xe9e2ab95),
-           TOBN(0x67578b85, 0x2f5f199c), TOBN(0xf5c00329, 0x2cb84913)}},
-         {{TOBN(0xf7956430, 0x37577dd8), TOBN(0x83b82af4, 0x29c5fe88),
-           TOBN(0x9c1bea26, 0xcdbdc132), TOBN(0x589fa086, 0x9c04339e)},
-          {TOBN(0x033e9538, 0xb13799df), TOBN(0x85fa8b21, 0xd295d034),
-           TOBN(0xdf17f73f, 0xbd9ddcca), TOBN(0xf32bd122, 0xddb66334)}},
-         {{TOBN(0x55ef88a7, 0x858b044c), TOBN(0x1f0d69c2, 0x5aa9e397),
-           TOBN(0x55fd9cc3, 0x40d85559), TOBN(0xc774df72, 0x7785ddb2)},
-          {TOBN(0x5dcce9f6, 0xd3bd2e1c), TOBN(0xeb30da20, 0xa85dfed0),
-           TOBN(0x5ed7f5bb, 0xd3ed09c4), TOBN(0x7d42a35c, 0x82a9c1bd)}},
-         {{TOBN(0xcf3de995, 0x9890272d), TOBN(0x75f3432a, 0x3e713a10),
-           TOBN(0x5e13479f, 0xe28227b8), TOBN(0xb8561ea9, 0xfefacdc8)},
-          {TOBN(0xa6a297a0, 0x8332aafd), TOBN(0x9b0d8bb5, 0x73809b62),
-           TOBN(0xd2fa1cfd, 0x0c63036f), TOBN(0x7a16eb55, 0xbd64bda8)}},
-         {{TOBN(0x3f5cf5f6, 0x78e62ddc), TOBN(0x2267c454, 0x07fd752b),
-           TOBN(0x5e361b6b, 0x5e437bbe), TOBN(0x95c59501, 0x8354e075)},
-          {TOBN(0xec725f85, 0xf2b254d9), TOBN(0x844b617d, 0x2cb52b4e),
-           TOBN(0xed8554f5, 0xcf425fb5), TOBN(0xab67703e, 0x2af9f312)}},
-         {{TOBN(0x4cc34ec1, 0x3cf48283), TOBN(0xb09daa25, 0x9c8a705e),
-           TOBN(0xd1e9d0d0, 0x5b7d4f84), TOBN(0x4df6ef64, 0xdb38929d)},
-          {TOBN(0xe16b0763, 0xaa21ba46), TOBN(0xc6b1d178, 0xa293f8fb),
-           TOBN(0x0ff5b602, 0xd520aabf), TOBN(0x94d671bd, 0xc339397a)}},
-         {{TOBN(0x7c7d98cf, 0x4f5792fa), TOBN(0x7c5e0d67, 0x11215261),
-           TOBN(0x9b19a631, 0xa7c5a6d4), TOBN(0xc8511a62, 0x7a45274d)},
-          {TOBN(0x0c16621c, 0xa5a60d99), TOBN(0xf7fbab88, 0xcf5e48cb),
-           TOBN(0xab1e6ca2, 0xf7ddee08), TOBN(0x83bd08ce, 0xe7867f3c)}},
-         {{TOBN(0xf7e48e8a, 0x2ac13e27), TOBN(0x4494f6df, 0x4eb1a9f5),
-           TOBN(0xedbf84eb, 0x981f0a62), TOBN(0x49badc32, 0x536438f0)},
-          {TOBN(0x50bea541, 0x004f7571), TOBN(0xbac67d10, 0xdf1c94ee),
-           TOBN(0x253d73a1, 0xb727bc31), TOBN(0xb3d01cf2, 0x30686e28)}},
-         {{TOBN(0x51b77b1b, 0x55fd0b8b), TOBN(0xa099d183, 0xfeec3173),
-           TOBN(0x202b1fb7, 0x670e72b7), TOBN(0xadc88b33, 0xa8e1635f)},
-          {TOBN(0x34e8216a, 0xf989d905), TOBN(0xc2e68d20, 0x29b58d01),
-           TOBN(0x11f81c92, 0x6fe55a93), TOBN(0x15f1462a, 0x8f296f40)}},
-         {{TOBN(0x1915d375, 0xea3d62f2), TOBN(0xa17765a3, 0x01c8977d),
-           TOBN(0x7559710a, 0xe47b26f6), TOBN(0xe0bd29c8, 0x535077a5)},
-          {TOBN(0x615f976d, 0x08d84858), TOBN(0x370dfe85, 0x69ced5c1),
-           TOBN(0xbbc7503c, 0xa734fa56), TOBN(0xfbb9f1ec, 0x91ac4574)}},
-         {{TOBN(0x95d7ec53, 0x060dd7ef), TOBN(0xeef2dacd, 0x6e657979),
-           TOBN(0x54511af3, 0xe2a08235), TOBN(0x1e324aa4, 0x1f4aea3d)},
-          {TOBN(0x550e7e71, 0xe6e67671), TOBN(0xbccd5190, 0xbf52faf7),
-           TOBN(0xf880d316, 0x223cc62a), TOBN(0x0d402c7e, 0x2b32eb5d)}},
-         {{TOBN(0xa40bc039, 0x306a5a3b), TOBN(0x4e0a41fd, 0x96783a1b),
-           TOBN(0xa1e8d39a, 0x0253cdd4), TOBN(0x6480be26, 0xc7388638)},
-          {TOBN(0xee365e1d, 0x2285f382), TOBN(0x188d8d8f, 0xec0b5c36),
-           TOBN(0x34ef1a48, 0x1f0f4d82), TOBN(0x1a8f43e1, 0xa487d29a)}},
-         {{TOBN(0x8168226d, 0x77aefb3a), TOBN(0xf69a751e, 0x1e72c253),
-           TOBN(0x8e04359a, 0xe9594df1), TOBN(0x475ffd7d, 0xd14c0467)},
-          {TOBN(0xb5a2c2b1, 0x3844e95c), TOBN(0x85caf647, 0xdd12ef94),
-           TOBN(0x1ecd2a9f, 0xf1063d00), TOBN(0x1dd2e229, 0x23843311)}},
-         {{TOBN(0x38f0e09d, 0x73d17244), TOBN(0x3ede7746, 0x8fc653f1),
-           TOBN(0xae4459f5, 0xdc20e21c), TOBN(0x00db2ffa, 0x6a8599ea)},
-          {TOBN(0x11682c39, 0x30cfd905), TOBN(0x4934d074, 0xa5c112a6),
-           TOBN(0xbdf063c5, 0x568bfe95), TOBN(0x779a440a, 0x016c441a)}},
-         {{TOBN(0x0c23f218, 0x97d6fbdc), TOBN(0xd3a5cd87, 0xe0776aac),
-           TOBN(0xcee37f72, 0xd712e8db), TOBN(0xfb28c70d, 0x26f74e8d)},
-          {TOBN(0xffe0c728, 0xb61301a0), TOBN(0xa6282168, 0xd3724354),
-           TOBN(0x7ff4cb00, 0x768ffedc), TOBN(0xc51b3088, 0x03b02de9)}},
-         {{TOBN(0xa5a8147c, 0x3902dda5), TOBN(0x35d2f706, 0xfe6973b4),
-           TOBN(0x5ac2efcf, 0xc257457e), TOBN(0x933f48d4, 0x8700611b)},
-          {TOBN(0xc365af88, 0x4912beb2), TOBN(0x7f5a4de6, 0x162edf94),
-           TOBN(0xc646ba7c, 0x0c32f34b), TOBN(0x632c6af3, 0xb2091074)}},
-         {{TOBN(0x58d4f2e3, 0x753e43a9), TOBN(0x70e1d217, 0x24d4e23f),
-           TOBN(0xb24bf729, 0xafede6a6), TOBN(0x7f4a94d8, 0x710c8b60)},
-          {TOBN(0xaad90a96, 0x8d4faa6a), TOBN(0xd9ed0b32, 0xb066b690),
-           TOBN(0x52fcd37b, 0x78b6dbfd), TOBN(0x0b64615e, 0x8bd2b431)}},
-         {{TOBN(0x228e2048, 0xcfb9fad5), TOBN(0xbeaa386d, 0x240b76bd),
-           TOBN(0x2d6681c8, 0x90dad7bc), TOBN(0x3e553fc3, 0x06d38f5e)},
-          {TOBN(0xf27cdb9b, 0x9d5f9750), TOBN(0x3e85c52a, 0xd28c5b0e),
-           TOBN(0x190795af, 0x5247c39b), TOBN(0x547831eb, 0xbddd6828)}},
-         {{TOBN(0xf327a227, 0x4a82f424), TOBN(0x36919c78, 0x7e47f89d),
-           TOBN(0xe4783919, 0x43c7392c), TOBN(0xf101b9aa, 0x2316fefe)},
-          {TOBN(0xbcdc9e9c, 0x1c5009d2), TOBN(0xfb55ea13, 0x9cd18345),
-           TOBN(0xf5b5e231, 0xa3ce77c7), TOBN(0xde6b4527, 0xd2f2cb3d)}},
-         {{TOBN(0x10f6a333, 0x9bb26f5f), TOBN(0x1e85db8e, 0x044d85b6),
-           TOBN(0xc3697a08, 0x94197e54), TOBN(0x65e18cc0, 0xa7cb4ea8)},
-          {TOBN(0xa38c4f50, 0xa471fe6e), TOBN(0xf031747a, 0x2f13439c),
-           TOBN(0x53c4a6ba, 0xc007318b), TOBN(0xa8da3ee5, 0x1deccb3d)}},
-         {{TOBN(0x0555b31c, 0x558216b1), TOBN(0x90c7810c, 0x2f79e6c2),
-           TOBN(0x9b669f4d, 0xfe8eed3c), TOBN(0x70398ec8, 0xe0fac126)},
-          {TOBN(0xa96a449e, 0xf701b235), TOBN(0x0ceecdb3, 0xeb94f395),
-           TOBN(0x285fc368, 0xd0cb7431), TOBN(0x0d37bb52, 0x16a18c64)}},
-         {{TOBN(0x05110d38, 0xb880d2dd), TOBN(0xa60f177b, 0x65930d57),
-           TOBN(0x7da34a67, 0xf36235f5), TOBN(0x47f5e17c, 0x183816b9)},
-          {TOBN(0xc7664b57, 0xdb394af4), TOBN(0x39ba215d, 0x7036f789),
-           TOBN(0x46d2ca0e, 0x2f27b472), TOBN(0xc42647ee, 0xf73a84b7)}},
-         {{TOBN(0x44bc7545, 0x64488f1d), TOBN(0xaa922708, 0xf4cf85d5),
-           TOBN(0x721a01d5, 0x53e4df63), TOBN(0x649c0c51, 0x5db46ced)},
-          {TOBN(0x6bf0d64e, 0x3cffcb6c), TOBN(0xe3bf93fe, 0x50f71d96),
-           TOBN(0x75044558, 0xbcc194a0), TOBN(0x16ae3372, 0x6afdc554)}},
-         {{TOBN(0xbfc01adf, 0x5ca48f3f), TOBN(0x64352f06, 0xe22a9b84),
-           TOBN(0xcee54da1, 0xc1099e4a), TOBN(0xbbda54e8, 0xfa1b89c0)},
-          {TOBN(0x166a3df5, 0x6f6e55fb), TOBN(0x1ca44a24, 0x20176f88),
-           TOBN(0x936afd88, 0xdfb7b5ff), TOBN(0xe34c2437, 0x8611d4a0)}},
-         {{TOBN(0x7effbb75, 0x86142103), TOBN(0x6704ba1b, 0x1f34fc4d),
-           TOBN(0x7c2a468f, 0x10c1b122), TOBN(0x36b3a610, 0x8c6aace9)},
-          {TOBN(0xabfcc0a7, 0x75a0d050), TOBN(0x066f9197, 0x3ce33e32),
-           TOBN(0xce905ef4, 0x29fe09be), TOBN(0x89ee25ba, 0xa8376351)}},
-         {{TOBN(0x2a3ede22, 0xfd29dc76), TOBN(0x7fd32ed9, 0x36f17260),
-           TOBN(0x0cadcf68, 0x284b4126), TOBN(0x63422f08, 0xa7951fc8)},
-          {TOBN(0x562b24f4, 0x0807e199), TOBN(0xfe9ce5d1, 0x22ad4490),
-           TOBN(0xc2f51b10, 0x0db2b1b4), TOBN(0xeb3613ff, 0xe4541d0d)}},
-         {{TOBN(0xbd2c4a05, 0x2680813b), TOBN(0x527aa55d, 0x561b08d6),
-           TOBN(0xa9f8a40e, 0xa7205558), TOBN(0xe3eea56f, 0x243d0bec)},
-          {TOBN(0x7b853817, 0xa0ff58b3), TOBN(0xb67d3f65, 0x1a69e627),
-           TOBN(0x0b76bbb9, 0xa869b5d6), TOBN(0xa3afeb82, 0x546723ed)}},
-         {{TOBN(0x5f24416d, 0x3e554892), TOBN(0x8413b53d, 0x430e2a45),
-           TOBN(0x99c56aee, 0x9032a2a0), TOBN(0x09432bf6, 0xeec367b1)},
-          {TOBN(0x552850c6, 0xdaf0ecc1), TOBN(0x49ebce55, 0x5bc92048),
-           TOBN(0xdfb66ba6, 0x54811307), TOBN(0x1b84f797, 0x6f298597)}},
-         {{TOBN(0x79590481, 0x8d1d7a0d), TOBN(0xd9fabe03, 0x3a6fa556),
-           TOBN(0xa40f9c59, 0xba9e5d35), TOBN(0xcb1771c1, 0xf6247577)},
-          {TOBN(0x542a47ca, 0xe9a6312b), TOBN(0xa34b3560, 0x552dd8c5),
-           TOBN(0xfdf94de0, 0x0d794716), TOBN(0xd46124a9, 0x9c623094)}},
-         {{TOBN(0x56b7435d, 0x68afe8b4), TOBN(0x27f20540, 0x6c0d8ea1),
-           TOBN(0x12b77e14, 0x73186898), TOBN(0xdbc3dd46, 0x7479490f)},
-          {TOBN(0x951a9842, 0xc03b0c05), TOBN(0x8b1b3bb3, 0x7921bc96),
-           TOBN(0xa573b346, 0x2b202e0a), TOBN(0x77e4665d, 0x47254d56)}},
-         {{TOBN(0x08b70dfc, 0xd23e3984), TOBN(0xab86e8bc, 0xebd14236),
-           TOBN(0xaa3e07f8, 0x57114ba7), TOBN(0x5ac71689, 0xab0ef4f2)},
-          {TOBN(0x88fca384, 0x0139d9af), TOBN(0x72733f88, 0x76644af0),
-           TOBN(0xf122f72a, 0x65d74f4a), TOBN(0x13931577, 0xa5626c7a)}},
-         {{TOBN(0xd5b5d9eb, 0x70f8d5a4), TOBN(0x375adde7, 0xd7bbb228),
-           TOBN(0x31e88b86, 0x0c1c0b32), TOBN(0xd1f568c4, 0x173edbaa)},
-          {TOBN(0x1592fc83, 0x5459df02), TOBN(0x2beac0fb, 0x0fcd9a7e),
-           TOBN(0xb0a6fdb8, 0x1b473b0a), TOBN(0xe3224c6f, 0x0fe8fc48)}},
-         {{TOBN(0x680bd00e, 0xe87edf5b), TOBN(0x30385f02, 0x20e77cf5),
-           TOBN(0xe9ab98c0, 0x4d42d1b2), TOBN(0x72d191d2, 0xd3816d77)},
-          {TOBN(0x1564daca, 0x0917d9e5), TOBN(0x394eab59, 0x1f8fed7f),
-           TOBN(0xa209aa8d, 0x7fbb3896), TOBN(0x5564f3b9, 0xbe6ac98e)}},
-         {{TOBN(0xead21d05, 0xd73654ef), TOBN(0x68d1a9c4, 0x13d78d74),
-           TOBN(0x61e01708, 0x6d4973a0), TOBN(0x83da3500, 0x46e6d32a)},
-          {TOBN(0x6a3dfca4, 0x68ae0118), TOBN(0xa1b9a4c9, 0xd02da069),
-           TOBN(0x0b2ff9c7, 0xebab8302), TOBN(0x98af07c3, 0x944ba436)}},
-         {{TOBN(0x85997326, 0x995f0f9f), TOBN(0x467fade0, 0x71b58bc6),
-           TOBN(0x47e4495a, 0xbd625a2b), TOBN(0xfdd2d01d, 0x33c3b8cd)},
-          {TOBN(0x2c38ae28, 0xc693f9fa), TOBN(0x48622329, 0x348f7999),
-           TOBN(0x97bf738e, 0x2161f583), TOBN(0x15ee2fa7, 0x565e8cc9)}},
-         {{TOBN(0xa1a5c845, 0x5777e189), TOBN(0xcc10bee0, 0x456f2829),
-           TOBN(0x8ad95c56, 0xda762bd5), TOBN(0x152e2214, 0xe9d91da8)},
-          {TOBN(0x975b0e72, 0x7cb23c74), TOBN(0xfd5d7670, 0xa90c66df),
-           TOBN(0xb5b5b8ad, 0x225ffc53), TOBN(0xab6dff73, 0xfaded2ae)}},
-         {{TOBN(0xebd56781, 0x6f4cbe9d), TOBN(0x0ed8b249, 0x6a574bd7),
-           TOBN(0x41c246fe, 0x81a881fa), TOBN(0x91564805, 0xc3db9c70)},
-          {TOBN(0xd7c12b08, 0x5b862809), TOBN(0x1facd1f1, 0x55858d7b),
-           TOBN(0x7693747c, 0xaf09e92a), TOBN(0x3b69dcba, 0x189a425f)}},
-         {{TOBN(0x0be28e9f, 0x967365ef), TOBN(0x57300eb2, 0xe801f5c9),
-           TOBN(0x93b8ac6a, 0xd583352f), TOBN(0xa2cf1f89, 0xcd05b2b7)},
-          {TOBN(0x7c0c9b74, 0x4dcc40cc), TOBN(0xfee38c45, 0xada523fb),
-           TOBN(0xb49a4dec, 0x1099cc4d), TOBN(0x325c377f, 0x69f069c6)}},
-         {{TOBN(0xe12458ce, 0x476cc9ff), TOBN(0x580e0b6c, 0xc6d4cb63),
-           TOBN(0xd561c8b7, 0x9072289b), TOBN(0x0377f264, 0xa619e6da)},
-          {TOBN(0x26685362, 0x88e591a5), TOBN(0xa453a7bd, 0x7523ca2b),
-           TOBN(0x8a9536d2, 0xc1df4533), TOBN(0xc8e50f2f, 0xbe972f79)}},
-         {{TOBN(0xd433e50f, 0x6d3549cf), TOBN(0x6f33696f, 0xfacd665e),
-           TOBN(0x695bfdac, 0xce11fcb4), TOBN(0x810ee252, 0xaf7c9860)},
-          {TOBN(0x65450fe1, 0x7159bb2c), TOBN(0xf7dfbebe, 0x758b357b),
-           TOBN(0x2b057e74, 0xd69fea72), TOBN(0xd485717a, 0x92731745)}}},
-        {{{TOBN(0x896c42e8, 0xee36860c), TOBN(0xdaf04dfd, 0x4113c22d),
-           TOBN(0x1adbb7b7, 0x44104213), TOBN(0xe5fd5fa1, 0x1fd394ea)},
-          {TOBN(0x68235d94, 0x1a4e0551), TOBN(0x6772cfbe, 0x18d10151),
-           TOBN(0x276071e3, 0x09984523), TOBN(0xe4e879de, 0x5a56ba98)}},
-         {{TOBN(0xaaafafb0, 0x285b9491), TOBN(0x01a0be88, 0x1e4c705e),
-           TOBN(0xff1d4f5d, 0x2ad9caab), TOBN(0x6e349a4a, 0xc37a233f)},
-          {TOBN(0xcf1c1246, 0x4a1c6a16), TOBN(0xd99e6b66, 0x29383260),
-           TOBN(0xea3d4366, 0x5f6d5471), TOBN(0x36974d04, 0xff8cc89b)}},
-         {{TOBN(0xc26c49a1, 0xcfe89d80), TOBN(0xb42c026d, 0xda9c8371),
-           TOBN(0xca6c013a, 0xdad066d2), TOBN(0xfb8f7228, 0x56a4f3ee)},
-          {TOBN(0x08b579ec, 0xd850935b), TOBN(0x34c1a74c, 0xd631e1b3),
-           TOBN(0xcb5fe596, 0xac198534), TOBN(0x39ff21f6, 0xe1f24f25)}},
-         {{TOBN(0x27f29e14, 0x8f929057), TOBN(0x7a64ae06, 0xc0c853df),
-           TOBN(0x256cd183, 0x58e9c5ce), TOBN(0x9d9cce82, 0xded092a5)},
-          {TOBN(0xcc6e5979, 0x6e93b7c7), TOBN(0xe1e47092, 0x31bb9e27),
-           TOBN(0xb70b3083, 0xaa9e29a0), TOBN(0xbf181a75, 0x3785e644)}},
-         {{TOBN(0xf53f2c65, 0x8ead09f7), TOBN(0x1335e1d5, 0x9780d14d),
-           TOBN(0x69cc20e0, 0xcd1b66bc), TOBN(0x9b670a37, 0xbbe0bfc8)},
-          {TOBN(0xce53dc81, 0x28efbeed), TOBN(0x0c74e77c, 0x8326a6e5),
-           TOBN(0x3604e0d2, 0xb88e9a63), TOBN(0xbab38fca, 0x13dc2248)}},
-         {{TOBN(0x8ed6e8c8, 0x5c0a3f1e), TOBN(0xbcad2492, 0x7c87c37f),
-           TOBN(0xfdfb62bb, 0x9ee3b78d), TOBN(0xeba8e477, 0xcbceba46)},
-          {TOBN(0x37d38cb0, 0xeeaede4b), TOBN(0x0bc498e8, 0x7976deb6),
-           TOBN(0xb2944c04, 0x6b6147fb), TOBN(0x8b123f35, 0xf71f9609)}},
-         {{TOBN(0xa155dcc7, 0xde79dc24), TOBN(0xf1168a32, 0x558f69cd),
-           TOBN(0xbac21595, 0x0d1850df), TOBN(0x15c8295b, 0xb204c848)},
-          {TOBN(0xf661aa36, 0x7d8184ff), TOBN(0xc396228e, 0x30447bdb),
-           TOBN(0x11cd5143, 0xbde4a59e), TOBN(0xe3a26e3b, 0x6beab5e6)}},
-         {{TOBN(0xd3b3a13f, 0x1402b9d0), TOBN(0x573441c3, 0x2c7bc863),
-           TOBN(0x4b301ec4, 0x578c3e6e), TOBN(0xc26fc9c4, 0x0adaf57e)},
-          {TOBN(0x96e71bfd, 0x7493cea3), TOBN(0xd05d4b3f, 0x1af81456),
-           TOBN(0xdaca2a8a, 0x6a8c608f), TOBN(0x53ef07f6, 0x0725b276)}},
-         {{TOBN(0x07a5fbd2, 0x7824fc56), TOBN(0x34675218, 0x13289077),
-           TOBN(0x5bf69fd5, 0xe0c48349), TOBN(0xa613ddd3, 0xb6aa7875)},
-          {TOBN(0x7f78c19c, 0x5450d866), TOBN(0x46f4409c, 0x8f84a481),
-           TOBN(0x9f1d1928, 0x90fce239), TOBN(0x016c4168, 0xb2ce44b9)}},
-         {{TOBN(0xbae023f0, 0xc7435978), TOBN(0xb152c888, 0x20e30e19),
-           TOBN(0x9c241645, 0xe3fa6faf), TOBN(0x735d95c1, 0x84823e60)},
-          {TOBN(0x03197573, 0x03955317), TOBN(0x0b4b02a9, 0xf03b4995),
-           TOBN(0x076bf559, 0x70274600), TOBN(0x32c5cc53, 0xaaf57508)}},
-         {{TOBN(0xe8af6d1f, 0x60624129), TOBN(0xb7bc5d64, 0x9a5e2b5e),
-           TOBN(0x3814b048, 0x5f082d72), TOBN(0x76f267f2, 0xce19677a)},
-          {TOBN(0x626c630f, 0xb36eed93), TOBN(0x55230cd7, 0x3bf56803),
-           TOBN(0x78837949, 0xce2736a0), TOBN(0x0d792d60, 0xaa6c55f1)}},
-         {{TOBN(0x0318dbfd, 0xd5c7c5d2), TOBN(0xb38f8da7, 0x072b342d),
-           TOBN(0x3569bddc, 0x7b8de38a), TOBN(0xf25b5887, 0xa1c94842)},
-          {TOBN(0xb2d5b284, 0x2946ad60), TOBN(0x854f29ad, 0xe9d1707e),
-           TOBN(0xaa5159dc, 0x2c6a4509), TOBN(0x899f94c0, 0x57189837)}},
-         {{TOBN(0xcf6adc51, 0xf4a55b03), TOBN(0x261762de, 0x35e3b2d5),
-           TOBN(0x4cc43012, 0x04827b51), TOBN(0xcd22a113, 0xc6021442)},
-          {TOBN(0xce2fd61a, 0x247c9569), TOBN(0x59a50973, 0xd152beca),
-           TOBN(0x6c835a11, 0x63a716d4), TOBN(0xc26455ed, 0x187dedcf)}},
-         {{TOBN(0x27f536e0, 0x49ce89e7), TOBN(0x18908539, 0xcc890cb5),
-           TOBN(0x308909ab, 0xd83c2aa1), TOBN(0xecd3142b, 0x1ab73bd3)},
-          {TOBN(0x6a85bf59, 0xb3f5ab84), TOBN(0x3c320a68, 0xf2bea4c6),
-           TOBN(0xad8dc538, 0x6da4541f), TOBN(0xeaf34eb0, 0xb7c41186)}},
-         {{TOBN(0x1c780129, 0x977c97c4), TOBN(0x5ff9beeb, 0xc57eb9fa),
-           TOBN(0xa24d0524, 0xc822c478), TOBN(0xfd8eec2a, 0x461cd415)},
-          {TOBN(0xfbde194e, 0xf027458c), TOBN(0xb4ff5319, 0x1d1be115),
-           TOBN(0x63f874d9, 0x4866d6f4), TOBN(0x35c75015, 0xb21ad0c9)}},
-         {{TOBN(0xa6b5c9d6, 0x46ac49d2), TOBN(0x42c77c0b, 0x83137aa9),
-           TOBN(0x24d000fc, 0x68225a38), TOBN(0x0f63cfc8, 0x2fe1e907)},
-          {TOBN(0x22d1b01b, 0xc6441f95), TOBN(0x7d38f719, 0xec8e448f),
-           TOBN(0x9b33fa5f, 0x787fb1ba), TOBN(0x94dcfda1, 0x190158df)}},
-         {{TOBN(0xc47cb339, 0x5f6d4a09), TOBN(0x6b4f355c, 0xee52b826),
-           TOBN(0x3d100f5d, 0xf51b930a), TOBN(0xf4512fac, 0x9f668f69)},
-          {TOBN(0x546781d5, 0x206c4c74), TOBN(0xd021d4d4, 0xcb4d2e48),
-           TOBN(0x494a54c2, 0xca085c2d), TOBN(0xf1dbaca4, 0x520850a8)}},
-         {{TOBN(0x63c79326, 0x490a1aca), TOBN(0xcb64dd9c, 0x41526b02),
-           TOBN(0xbb772591, 0xa2979258), TOBN(0x3f582970, 0x48d97846)},
-          {TOBN(0xd66b70d1, 0x7c213ba7), TOBN(0xc28febb5, 0xe8a0ced4),
-           TOBN(0x6b911831, 0xc10338c1), TOBN(0x0d54e389, 0xbf0126f3)}},
-         {{TOBN(0x7048d460, 0x4af206ee), TOBN(0x786c88f6, 0x77e97cb9),
-           TOBN(0xd4375ae1, 0xac64802e), TOBN(0x469bcfe1, 0xd53ec11c)},
-          {TOBN(0xfc9b340d, 0x47062230), TOBN(0xe743bb57, 0xc5b4a3ac),
-           TOBN(0xfe00b4aa, 0x59ef45ac), TOBN(0x29a4ef23, 0x59edf188)}},
-         {{TOBN(0x40242efe, 0xb483689b), TOBN(0x2575d3f6, 0x513ac262),
-           TOBN(0xf30037c8, 0x0ca6db72), TOBN(0xc9fcce82, 0x98864be2)},
-          {TOBN(0x84a112ff, 0x0149362d), TOBN(0x95e57582, 0x1c4ae971),
-           TOBN(0x1fa4b1a8, 0x945cf86c), TOBN(0x4525a734, 0x0b024a2f)}},
-         {{TOBN(0xe76c8b62, 0x8f338360), TOBN(0x483ff593, 0x28edf32b),
-           TOBN(0x67e8e90a, 0x298b1aec), TOBN(0x9caab338, 0x736d9a21)},
-          {TOBN(0x5c09d2fd, 0x66892709), TOBN(0x2496b4dc, 0xb55a1d41),
-           TOBN(0x93f5fb1a, 0xe24a4394), TOBN(0x08c75049, 0x6fa8f6c1)}},
-         {{TOBN(0xcaead1c2, 0xc905d85f), TOBN(0xe9d7f790, 0x0733ae57),
-           TOBN(0x24c9a65c, 0xf07cdd94), TOBN(0x7389359c, 0xa4b55931)},
-          {TOBN(0xf58709b7, 0x367e45f7), TOBN(0x1f203067, 0xcb7e7adc),
-           TOBN(0x82444bff, 0xc7b72818), TOBN(0x07303b35, 0xbaac8033)}},
-         {{TOBN(0x1e1ee4e4, 0xd13b7ea1), TOBN(0xe6489b24, 0xe0e74180),
-           TOBN(0xa5f2c610, 0x7e70ef70), TOBN(0xa1655412, 0xbdd10894)},
-          {TOBN(0x555ebefb, 0x7af4194e), TOBN(0x533c1c3c, 0x8e89bd9c),
-           TOBN(0x735b9b57, 0x89895856), TOBN(0x15fb3cd2, 0x567f5c15)}},
-         {{TOBN(0x057fed45, 0x526f09fd), TOBN(0xe8a4f10c, 0x8128240a),
-           TOBN(0x9332efc4, 0xff2bfd8d), TOBN(0x214e77a0, 0xbd35aa31)},
-          {TOBN(0x32896d73, 0x14faa40e), TOBN(0x767867ec, 0x01e5f186),
-           TOBN(0xc9adf8f1, 0x17a1813e), TOBN(0xcb6cda78, 0x54741795)}},
-         {{TOBN(0xb7521b6d, 0x349d51aa), TOBN(0xf56b5a9e, 0xe3c7b8e9),
-           TOBN(0xc6f1e5c9, 0x32a096df), TOBN(0x083667c4, 0xa3635024)},
-          {TOBN(0x365ea135, 0x18087f2f), TOBN(0xf1b8eaac, 0xd136e45d),
-           TOBN(0xc8a0e484, 0x73aec989), TOBN(0xd75a324b, 0x142c9259)}},
-         {{TOBN(0xb7b4d001, 0x01dae185), TOBN(0x45434e0b, 0x9b7a94bc),
-           TOBN(0xf54339af, 0xfbd8cb0b), TOBN(0xdcc4569e, 0xe98ef49e)},
-          {TOBN(0x7789318a, 0x09a51299), TOBN(0x81b4d206, 0xb2b025d8),
-           TOBN(0xf64aa418, 0xfae85792), TOBN(0x3e50258f, 0xacd7baf7)}},
-         {{TOBN(0xdce84cdb, 0x2996864b), TOBN(0xa2e67089, 0x1f485fa4),
-           TOBN(0xb28b2bb6, 0x534c6a5a), TOBN(0x31a7ec6b, 0xc94b9d39)},
-          {TOBN(0x1d217766, 0xd6bc20da), TOBN(0x4acdb5ec, 0x86761190),
-           TOBN(0x68726328, 0x73701063), TOBN(0x4d24ee7c, 0x2128c29b)}},
-         {{TOBN(0xc072ebd3, 0xa19fd868), TOBN(0x612e481c, 0xdb8ddd3b),
-           TOBN(0xb4e1d754, 0x1a64d852), TOBN(0x00ef95ac, 0xc4c6c4ab)},
-          {TOBN(0x1536d2ed, 0xaa0a6c46), TOBN(0x61294086, 0x43774790),
-           TOBN(0x54af25e8, 0x343fda10), TOBN(0x9ff9d98d, 0xfd25d6f2)}},
-         {{TOBN(0x0746af7c, 0x468b8835), TOBN(0x977a31cb, 0x730ecea7),
-           TOBN(0xa5096b80, 0xc2cf4a81), TOBN(0xaa986833, 0x6458c37a)},
-          {TOBN(0x6af29bf3, 0xa6bd9d34), TOBN(0x6a62fe9b, 0x33c5d854),
-           TOBN(0x50e6c304, 0xb7133b5e), TOBN(0x04b60159, 0x7d6e6848)}},
-         {{TOBN(0x4cd296df, 0x5579bea4), TOBN(0x10e35ac8, 0x5ceedaf1),
-           TOBN(0x04c4c5fd, 0xe3bcc5b1), TOBN(0x95f9ee8a, 0x89412cf9)},
-          {TOBN(0x2c9459ee, 0x82b6eb0f), TOBN(0x2e845765, 0x95c2aadd),
-           TOBN(0x774a84ae, 0xd327fcfe), TOBN(0xd8c93722, 0x0368d476)}},
-         {{TOBN(0x0dbd5748, 0xf83e8a3b), TOBN(0xa579aa96, 0x8d2495f3),
-           TOBN(0x535996a0, 0xae496e9b), TOBN(0x07afbfe9, 0xb7f9bcc2)},
-          {TOBN(0x3ac1dc6d, 0x5b7bd293), TOBN(0x3b592cff, 0x7022323d),
-           TOBN(0xba0deb98, 0x9c0a3e76), TOBN(0x18e78e9f, 0x4b197acb)}},
-         {{TOBN(0x211cde10, 0x296c36ef), TOBN(0x7ee89672, 0x82c4da77),
-           TOBN(0xb617d270, 0xa57836da), TOBN(0xf0cd9c31, 0x9cb7560b)},
-          {TOBN(0x01fdcbf7, 0xe455fe90), TOBN(0x3fb53cbb, 0x7e7334f3),
-           TOBN(0x781e2ea4, 0x4e7de4ec), TOBN(0x8adab3ad, 0x0b384fd0)}},
-         {{TOBN(0x129eee2f, 0x53d64829), TOBN(0x7a471e17, 0xa261492b),
-           TOBN(0xe4f9adb9, 0xe4cb4a2c), TOBN(0x3d359f6f, 0x97ba2c2d)},
-          {TOBN(0x346c6786, 0x0aacd697), TOBN(0x92b444c3, 0x75c2f8a8),
-           TOBN(0xc79fa117, 0xd85df44e), TOBN(0x56782372, 0x398ddf31)}},
-         {{TOBN(0x60e690f2, 0xbbbab3b8), TOBN(0x4851f8ae, 0x8b04816b),
-           TOBN(0xc72046ab, 0x9c92e4d2), TOBN(0x518c74a1, 0x7cf3136b)},
-          {TOBN(0xff4eb50a, 0xf9877d4c), TOBN(0x14578d90, 0xa919cabb),
-           TOBN(0x8218f8c4, 0xac5eb2b6), TOBN(0xa3ccc547, 0x542016e4)}},
-         {{TOBN(0x025bf48e, 0x327f8349), TOBN(0xf3e97346, 0xf43cb641),
-           TOBN(0xdc2bafdf, 0x500f1085), TOBN(0x57167876, 0x2f063055)},
-          {TOBN(0x5bd914b9, 0x411925a6), TOBN(0x7c078d48, 0xa1123de5),
-           TOBN(0xee6bf835, 0x182b165d), TOBN(0xb11b5e5b, 0xba519727)}},
-         {{TOBN(0xe33ea76c, 0x1eea7b85), TOBN(0x2352b461, 0x92d4f85e),
-           TOBN(0xf101d334, 0xafe115bb), TOBN(0xfabc1294, 0x889175a3)},
-          {TOBN(0x7f6bcdc0, 0x5233f925), TOBN(0xe0a802db, 0xe77fec55),
-           TOBN(0xbdb47b75, 0x8069b659), TOBN(0x1c5e12de, 0xf98fbd74)}},
-         {{TOBN(0x869c58c6, 0x4b8457ee), TOBN(0xa5360f69, 0x4f7ea9f7),
-           TOBN(0xe576c09f, 0xf460b38f), TOBN(0x6b70d548, 0x22b7fb36)},
-          {TOBN(0x3fd237f1, 0x3bfae315), TOBN(0x33797852, 0xcbdff369),
-           TOBN(0x97df25f5, 0x25b516f9), TOBN(0x46f388f2, 0xba38ad2d)}},
-         {{TOBN(0x656c4658, 0x89d8ddbb), TOBN(0x8830b26e, 0x70f38ee8),
-           TOBN(0x4320fd5c, 0xde1212b0), TOBN(0xc34f30cf, 0xe4a2edb2)},
-          {TOBN(0xabb131a3, 0x56ab64b8), TOBN(0x7f77f0cc, 0xd99c5d26),
-           TOBN(0x66856a37, 0xbf981d94), TOBN(0x19e76d09, 0x738bd76e)}},
-         {{TOBN(0xe76c8ac3, 0x96238f39), TOBN(0xc0a482be, 0xa830b366),
-           TOBN(0xb7b8eaff, 0x0b4eb499), TOBN(0x8ecd83bc, 0x4bfb4865)},
-          {TOBN(0x971b2cb7, 0xa2f3776f), TOBN(0xb42176a4, 0xf4b88adf),
-           TOBN(0xb9617df5, 0xbe1fa446), TOBN(0x8b32d508, 0xcd031bd2)}},
-         {{TOBN(0x1c6bd47d, 0x53b618c0), TOBN(0xc424f46c, 0x6a227923),
-           TOBN(0x7303ffde, 0xdd92d964), TOBN(0xe9712878, 0x71b5abf2)},
-          {TOBN(0x8f48a632, 0xf815561d), TOBN(0x85f48ff5, 0xd3c055d1),
-           TOBN(0x222a1427, 0x7525684f), TOBN(0xd0d841a0, 0x67360cc3)}},
-         {{TOBN(0x4245a926, 0x0b9267c6), TOBN(0xc78913f1, 0xcf07f863),
-           TOBN(0xaa844c8e, 0x4d0d9e24), TOBN(0xa42ad522, 0x3d5f9017)},
-          {TOBN(0xbd371749, 0xa2c989d5), TOBN(0x928292df, 0xe1f5e78e),
-           TOBN(0x493b383e, 0x0a1ea6da), TOBN(0x5136fd8d, 0x13aee529)}},
-         {{TOBN(0x860c44b1, 0xf2c34a99), TOBN(0x3b00aca4, 0xbf5855ac),
-           TOBN(0xabf6aaa0, 0xfaaf37be), TOBN(0x65f43682, 0x2a53ec08)},
-          {TOBN(0x1d9a5801, 0xa11b12e1), TOBN(0x78a7ab2c, 0xe20ed475),
-           TOBN(0x0de1067e, 0x9a41e0d5), TOBN(0x30473f5f, 0x305023ea)}},
-         {{TOBN(0xdd3ae09d, 0x169c7d97), TOBN(0x5cd5baa4, 0xcfaef9cd),
-           TOBN(0x5cd7440b, 0x65a44803), TOBN(0xdc13966a, 0x47f364de)},
-          {TOBN(0x077b2be8, 0x2b8357c1), TOBN(0x0cb1b4c5, 0xe9d57c2a),
-           TOBN(0x7a4ceb32, 0x05ff363e), TOBN(0xf310fa4d, 0xca35a9ef)}},
-         {{TOBN(0xdbb7b352, 0xf97f68c6), TOBN(0x0c773b50, 0x0b02cf58),
-           TOBN(0xea2e4821, 0x3c1f96d9), TOBN(0xffb357b0, 0xeee01815)},
-          {TOBN(0xb9c924cd, 0xe0f28039), TOBN(0x0b36c95a, 0x46a3fbe4),
-           TOBN(0x1faaaea4, 0x5e46db6c), TOBN(0xcae575c3, 0x1928aaff)}},
-         {{TOBN(0x7f671302, 0xa70dab86), TOBN(0xfcbd12a9, 0x71c58cfc),
-           TOBN(0xcbef9acf, 0xbee0cb92), TOBN(0x573da0b9, 0xf8c1b583)},
-          {TOBN(0x4752fcfe, 0x0d41d550), TOBN(0xe7eec0e3, 0x2155cffe),
-           TOBN(0x0fc39fcb, 0x545ae248), TOBN(0x522cb8d1, 0x8065f44e)}},
-         {{TOBN(0x263c962a, 0x70cbb96c), TOBN(0xe034362a, 0xbcd124a9),
-           TOBN(0xf120db28, 0x3c2ae58d), TOBN(0xb9a38d49, 0xfef6d507)},
-          {TOBN(0xb1fd2a82, 0x1ff140fd), TOBN(0xbd162f30, 0x20aee7e0),
-           TOBN(0x4e17a5d4, 0xcb251949), TOBN(0x2aebcb83, 0x4f7e1c3d)}},
-         {{TOBN(0x608eb25f, 0x937b0527), TOBN(0xf42e1e47, 0xeb7d9997),
-           TOBN(0xeba699c4, 0xb8a53a29), TOBN(0x1f921c71, 0xe091b536)},
-          {TOBN(0xcce29e7b, 0x5b26bbd5), TOBN(0x7a8ef5ed, 0x3b61a680),
-           TOBN(0xe5ef8043, 0xba1f1c7e), TOBN(0x16ea8217, 0x18158dda)}},
-         {{TOBN(0x01778a2b, 0x599ff0f9), TOBN(0x68a923d7, 0x8104fc6b),
-           TOBN(0x5bfa44df, 0xda694ff3), TOBN(0x4f7199db, 0xf7667f12)},
-          {TOBN(0xc06d8ff6, 0xe46f2a79), TOBN(0x08b5dead, 0xe9f8131d),
-           TOBN(0x02519a59, 0xabb4ce7c), TOBN(0xc4f710bc, 0xb42aec3e)}},
-         {{TOBN(0x3d77b057, 0x78bde41a), TOBN(0x6474bf80, 0xb4186b5a),
-           TOBN(0x048b3f67, 0x88c65741), TOBN(0xc64519de, 0x03c7c154)},
-          {TOBN(0xdf073846, 0x0edfcc4f), TOBN(0x319aa737, 0x48f1aa6b),
-           TOBN(0x8b9f8a02, 0xca909f77), TOBN(0x90258139, 0x7580bfef)}},
-         {{TOBN(0xd8bfd3ca, 0xc0c22719), TOBN(0xc60209e4, 0xc9ca151e),
-           TOBN(0x7a744ab5, 0xd9a1a69c), TOBN(0x6de5048b, 0x14937f8f)},
-          {TOBN(0x171938d8, 0xe115ac04), TOBN(0x7df70940, 0x1c6b16d2),
-           TOBN(0xa6aeb663, 0x7f8e94e7), TOBN(0xc130388e, 0x2a2cf094)}},
-         {{TOBN(0x1850be84, 0x77f54e6e), TOBN(0x9f258a72, 0x65d60fe5),
-           TOBN(0xff7ff0c0, 0x6c9146d6), TOBN(0x039aaf90, 0xe63a830b)},
-          {TOBN(0x38f27a73, 0x9460342f), TOBN(0x4703148c, 0x3f795f8a),
-           TOBN(0x1bb5467b, 0x9681a97e), TOBN(0x00931ba5, 0xecaeb594)}},
-         {{TOBN(0xcdb6719d, 0x786f337c), TOBN(0xd9c01cd2, 0xe704397d),
-           TOBN(0x0f4a3f20, 0x555c2fef), TOBN(0x00452509, 0x7c0af223)},
-          {TOBN(0x54a58047, 0x84db8e76), TOBN(0x3bacf1aa, 0x93c8aa06),
-           TOBN(0x11ca957c, 0xf7919422), TOBN(0x50641053, 0x78cdaa40)}},
-         {{TOBN(0x7a303874, 0x9f7144ae), TOBN(0x170c963f, 0x43d4acfd),
-           TOBN(0x5e148149, 0x58ddd3ef), TOBN(0xa7bde582, 0x9e72dba8)},
-          {TOBN(0x0769da8b, 0x6fa68750), TOBN(0xfa64e532, 0x572e0249),
-           TOBN(0xfcaadf9d, 0x2619ad31), TOBN(0x87882daa, 0xa7b349cd)}},
-         {{TOBN(0x9f6eb731, 0x6c67a775), TOBN(0xcb10471a, 0xefc5d0b1),
-           TOBN(0xb433750c, 0xe1b806b2), TOBN(0x19c5714d, 0x57b1ae7e)},
-          {TOBN(0xc0dc8b7b, 0xed03fd3f), TOBN(0xdd03344f, 0x31bc194e),
-           TOBN(0xa66c52a7, 0x8c6320b5), TOBN(0x8bc82ce3, 0xd0b6fd93)}},
-         {{TOBN(0xf8e13501, 0xb35f1341), TOBN(0xe53156dd, 0x25a43e42),
-           TOBN(0xd3adf27e, 0x4daeb85c), TOBN(0xb81d8379, 0xbbeddeb5)},
-          {TOBN(0x1b0b546e, 0x2e435867), TOBN(0x9020eb94, 0xeba5dd60),
-           TOBN(0x37d91161, 0x8210cb9d), TOBN(0x4c596b31, 0x5c91f1cf)}},
-         {{TOBN(0xb228a90f, 0x0e0b040d), TOBN(0xbaf02d82, 0x45ff897f),
-           TOBN(0x2aac79e6, 0x00fa6122), TOBN(0x24828817, 0x8e36f557)},
-          {TOBN(0xb9521d31, 0x113ec356), TOBN(0x9e48861e, 0x15eff1f8),
-           TOBN(0x2aa1d412, 0xe0d41715), TOBN(0x71f86203, 0x53f131b8)}},
-         {{TOBN(0xf60da8da, 0x3fd19408), TOBN(0x4aa716dc, 0x278d9d99),
-           TOBN(0x394531f7, 0xa8c51c90), TOBN(0xb560b0e8, 0xf59db51c)},
-          {TOBN(0xa28fc992, 0xfa34bdad), TOBN(0xf024fa14, 0x9cd4f8bd),
-           TOBN(0x5cf530f7, 0x23a9d0d3), TOBN(0x615ca193, 0xe28c9b56)}},
-         {{TOBN(0x6d2a483d, 0x6f73c51e), TOBN(0xa4cb2412, 0xea0dc2dd),
-           TOBN(0x50663c41, 0x1eb917ff), TOBN(0x3d3a74cf, 0xeade299e)},
-          {TOBN(0x29b3990f, 0x4a7a9202), TOBN(0xa9bccf59, 0xa7b15c3d),
-           TOBN(0x66a3ccdc, 0xa5df9208), TOBN(0x48027c14, 0x43f2f929)}},
-         {{TOBN(0xd385377c, 0x40b557f0), TOBN(0xe001c366, 0xcd684660),
-           TOBN(0x1b18ed6b, 0xe2183a27), TOBN(0x879738d8, 0x63210329)},
-          {TOBN(0xa687c74b, 0xbda94882), TOBN(0xd1bbcc48, 0xa684b299),
-           TOBN(0xaf6f1112, 0x863b3724), TOBN(0x6943d1b4, 0x2c8ce9f8)}},
-         {{TOBN(0xe044a3bb, 0x098cafb4), TOBN(0x27ed2310, 0x60d48caf),
-           TOBN(0x542b5675, 0x3a31b84d), TOBN(0xcbf3dd50, 0xfcddbed7)},
-          {TOBN(0x25031f16, 0x41b1d830), TOBN(0xa7ec851d, 0xcb0c1e27),
-           TOBN(0xac1c8fe0, 0xb5ae75db), TOBN(0xb24c7557, 0x08c52120)}},
-         {{TOBN(0x57f811dc, 0x1d4636c3), TOBN(0xf8436526, 0x681a9939),
-           TOBN(0x1f6bc6d9, 0x9c81adb3), TOBN(0x840f8ac3, 0x5b7d80d4)},
-          {TOBN(0x731a9811, 0xf4387f1a), TOBN(0x7c501cd3, 0xb5156880),
-           TOBN(0xa5ca4a07, 0xdfe68867), TOBN(0xf123d8f0, 0x5fcea120)}},
-         {{TOBN(0x1fbb0e71, 0xd607039e), TOBN(0x2b70e215, 0xcd3a4546),
-           TOBN(0x32d2f01d, 0x53324091), TOBN(0xb796ff08, 0x180ab19b)},
-          {TOBN(0x32d87a86, 0x3c57c4aa), TOBN(0x2aed9caf, 0xb7c49a27),
-           TOBN(0x9fb35eac, 0x31630d98), TOBN(0x338e8cdf, 0x5c3e20a3)}},
-         {{TOBN(0x80f16182, 0x66cde8db), TOBN(0x4e159980, 0x2d72fd36),
-           TOBN(0xd7b8f13b, 0x9b6e5072), TOBN(0xf5213907, 0x3b7b5dc1)},
-          {TOBN(0x4d431f1d, 0x8ce4396e), TOBN(0x37a1a680, 0xa7ed2142),
-           TOBN(0xbf375696, 0xd01aaf6b), TOBN(0xaa1c0c54, 0xe63aab66)}},
-         {{TOBN(0x3014368b, 0x4ed80940), TOBN(0x67e6d056, 0x7a6fcedd),
-           TOBN(0x7c208c49, 0xca97579f), TOBN(0xfe3d7a81, 0xa23597f6)},
-          {TOBN(0x5e203202, 0x7e096ae2), TOBN(0xb1f3e1e7, 0x24b39366),
-           TOBN(0x26da26f3, 0x2fdcdffc), TOBN(0x79422f1d, 0x6097be83)}}},
-        {{{TOBN(0x263a2cfb, 0x9db3b381), TOBN(0x9c3a2dee, 0xd4df0a4b),
-           TOBN(0x728d06e9, 0x7d04e61f), TOBN(0x8b1adfbc, 0x42449325)},
-          {TOBN(0x6ec1d939, 0x7e053a1b), TOBN(0xee2be5c7, 0x66daf707),
-           TOBN(0x80ba1e14, 0x810ac7ab), TOBN(0xdd2ae778, 0xf530f174)}},
-         {{TOBN(0x0435d97a, 0x205b9d8b), TOBN(0x6eb8f064, 0x056756d4),
-           TOBN(0xd5e88a8b, 0xb6f8210e), TOBN(0x070ef12d, 0xec9fd9ea)},
-          {TOBN(0x4d849505, 0x3bcc876a), TOBN(0x12a75338, 0xa7404ce3),
-           TOBN(0xd22b49e1, 0xb8a1db5e), TOBN(0xec1f2051, 0x14bfa5ad)}},
-         {{TOBN(0xadbaeb79, 0xb6828f36), TOBN(0x9d7a0258, 0x01bd5b9e),
-           TOBN(0xeda01e0d, 0x1e844b0c), TOBN(0x4b625175, 0x887edfc9)},
-          {TOBN(0x14109fdd, 0x9669b621), TOBN(0x88a2ca56, 0xf6f87b98),
-           TOBN(0xfe2eb788, 0x170df6bc), TOBN(0x0cea06f4, 0xffa473f9)}},
-         {{TOBN(0x43ed81b5, 0xc4e83d33), TOBN(0xd9f35879, 0x5efd488b),
-           TOBN(0x164a620f, 0x9deb4d0f), TOBN(0xc6927bdb, 0xac6a7394)},
-          {TOBN(0x45c28df7, 0x9f9e0f03), TOBN(0x2868661e, 0xfcd7e1a9),
-           TOBN(0x7cf4e8d0, 0xffa348f1), TOBN(0x6bd4c284, 0x398538e0)}},
-         {{TOBN(0x2618a091, 0x289a8619), TOBN(0xef796e60, 0x6671b173),
-           TOBN(0x664e46e5, 0x9090c632), TOBN(0xa38062d4, 0x1e66f8fb)},
-          {TOBN(0x6c744a20, 0x0573274e), TOBN(0xd07b67e4, 0xa9271394),
-           TOBN(0x391223b2, 0x6bdc0e20), TOBN(0xbe2d93f1, 0xeb0a05a7)}},
-         {{TOBN(0xf23e2e53, 0x3f36d141), TOBN(0xe84bb3d4, 0x4dfca442),
-           TOBN(0xb804a48d, 0x6b7c023a), TOBN(0x1e16a8fa, 0x76431c3b)},
-          {TOBN(0x1b5452ad, 0xddd472e0), TOBN(0x7d405ee7, 0x0d1ee127),
-           TOBN(0x50fc6f1d, 0xffa27599), TOBN(0x351ac53c, 0xbf391b35)}},
-         {{TOBN(0x7efa14b8, 0x4444896b), TOBN(0x64974d2f, 0xf94027fb),
-           TOBN(0xefdcd0e8, 0xde84487d), TOBN(0x8c45b260, 0x2b48989b)},
-          {TOBN(0xa8fcbbc2, 0xd8463487), TOBN(0xd1b2b3f7, 0x3fbc476c),
-           TOBN(0x21d005b7, 0xc8f443c0), TOBN(0x518f2e67, 0x40c0139c)}},
-         {{TOBN(0x56036e8c, 0x06d75fc1), TOBN(0x2dcf7bb7, 0x3249a89f),
-           TOBN(0x81dd1d3d, 0xe245e7dd), TOBN(0xf578dc4b, 0xebd6e2a7)},
-          {TOBN(0x4c028903, 0xdf2ce7a0), TOBN(0xaee36288, 0x9c39afac),
-           TOBN(0xdc847c31, 0x146404ab), TOBN(0x6304c0d8, 0xa4e97818)}},
-         {{TOBN(0xae51dca2, 0xa91f6791), TOBN(0x2abe4190, 0x9baa9efc),
-           TOBN(0xd9d2e2f4, 0x559c7ac1), TOBN(0xe82f4b51, 0xfc9f773a)},
-          {TOBN(0xa7713027, 0x4073e81c), TOBN(0xc0276fac, 0xfbb596fc),
-           TOBN(0x1d819fc9, 0xa684f70c), TOBN(0x29b47fdd, 0xc9f7b1e0)}},
-         {{TOBN(0x358de103, 0x459b1940), TOBN(0xec881c59, 0x5b013e93),
-           TOBN(0x51574c93, 0x49532ad3), TOBN(0x2db1d445, 0xb37b46de)},
-          {TOBN(0xc6445b87, 0xdf239fd8), TOBN(0xc718af75, 0x151d24ee),
-           TOBN(0xaea1c4a4, 0xf43c6259), TOBN(0x40c0e5d7, 0x70be02f7)}},
-         {{TOBN(0x6a4590f4, 0x721b33f2), TOBN(0x2124f1fb, 0xfedf04ea),
-           TOBN(0xf8e53cde, 0x9745efe7), TOBN(0xe7e10432, 0x65f046d9)},
-          {TOBN(0xc3fca28e, 0xe4d0c7e6), TOBN(0x847e339a, 0x87253b1b),
-           TOBN(0x9b595348, 0x3743e643), TOBN(0xcb6a0a0b, 0x4fd12fc5)}},
-         {{TOBN(0xfb6836c3, 0x27d02dcc), TOBN(0x5ad00982, 0x7a68bcc2),
-           TOBN(0x1b24b44c, 0x005e912d), TOBN(0xcc83d20f, 0x811fdcfe)},
-          {TOBN(0x36527ec1, 0x666fba0c), TOBN(0x69948197, 0x14754635),
-           TOBN(0xfcdcb1a8, 0x556da9c2), TOBN(0xa5934267, 0x81a732b2)}},
-         {{TOBN(0xec1214ed, 0xa714181d), TOBN(0x609ac13b, 0x6067b341),
-           TOBN(0xff4b4c97, 0xa545df1f), TOBN(0xa1240501, 0x34d2076b)},
-          {TOBN(0x6efa0c23, 0x1409ca97), TOBN(0x254cc1a8, 0x20638c43),
-           TOBN(0xd4e363af, 0xdcfb46cd), TOBN(0x62c2adc3, 0x03942a27)}},
-         {{TOBN(0xc67b9df0, 0x56e46483), TOBN(0xa55abb20, 0x63736356),
-           TOBN(0xab93c098, 0xc551bc52), TOBN(0x382b49f9, 0xb15fe64b)},
-          {TOBN(0x9ec221ad, 0x4dff8d47), TOBN(0x79caf615, 0x437df4d6),
-           TOBN(0x5f13dc64, 0xbb456509), TOBN(0xe4c589d9, 0x191f0714)}},
-         {{TOBN(0x27b6a8ab, 0x3fd40e09), TOBN(0xe455842e, 0x77313ea9),
-           TOBN(0x8b51d1e2, 0x1f55988b), TOBN(0x5716dd73, 0x062bbbfc)},
-          {TOBN(0x633c11e5, 0x4e8bf3de), TOBN(0x9a0e77b6, 0x1b85be3b),
-           TOBN(0x56510729, 0x0911cca6), TOBN(0x27e76495, 0xefa6590f)}},
-         {{TOBN(0xe4ac8b33, 0x070d3aab), TOBN(0x2643672b, 0x9a2cd5e5),
-           TOBN(0x52eff79b, 0x1cfc9173), TOBN(0x665ca49b, 0x90a7c13f)},
-          {TOBN(0x5a8dda59, 0xb3efb998), TOBN(0x8a5b922d, 0x052f1341),
-           TOBN(0xae9ebbab, 0x3cf9a530), TOBN(0x35986e7b, 0xf56da4d7)}},
-         {{TOBN(0x3a636b5c, 0xff3513cc), TOBN(0xbb0cf8ba, 0x3198f7dd),
-           TOBN(0xb8d40522, 0x41f16f86), TOBN(0x760575d8, 0xde13a7bf)},
-          {TOBN(0x36f74e16, 0x9f7aa181), TOBN(0x163a3ecf, 0xf509ed1c),
-           TOBN(0x6aead61f, 0x3c40a491), TOBN(0x158c95fc, 0xdfe8fcaa)}},
-         {{TOBN(0xa3991b6e, 0x13cda46f), TOBN(0x79482415, 0x342faed0),
-           TOBN(0xf3ba5bde, 0x666b5970), TOBN(0x1d52e6bc, 0xb26ab6dd)},
-          {TOBN(0x768ba1e7, 0x8608dd3d), TOBN(0x4930db2a, 0xea076586),
-           TOBN(0xd9575714, 0xe7dc1afa), TOBN(0x1fc7bf7d, 0xf7c58817)}},
-         {{TOBN(0x6b47accd, 0xd9eee96c), TOBN(0x0ca277fb, 0xe58cec37),
-           TOBN(0x113fe413, 0xe702c42a), TOBN(0xdd1764ee, 0xc47cbe51)},
-          {TOBN(0x041e7cde, 0x7b3ed739), TOBN(0x50cb7459, 0x5ce9e1c0),
-           TOBN(0x35568513, 0x2925b212), TOBN(0x7cff95c4, 0x001b081c)}},
-         {{TOBN(0x63ee4cbd, 0x8088b454), TOBN(0xdb7f32f7, 0x9a9e0c8a),
-           TOBN(0xb377d418, 0x6b2447cb), TOBN(0xe3e982aa, 0xd370219b)},
-          {TOBN(0x06ccc1e4, 0xc2a2a593), TOBN(0x72c36865, 0x0773f24f),
-           TOBN(0xa13b4da7, 0x95859423), TOBN(0x8bbf1d33, 0x75040c8f)}},
-         {{TOBN(0x726f0973, 0xda50c991), TOBN(0x48afcd5b, 0x822d6ee2),
-           TOBN(0xe5fc718b, 0x20fd7771), TOBN(0xb9e8e77d, 0xfd0807a1)},
-          {TOBN(0x7f5e0f44, 0x99a7703d), TOBN(0x6972930e, 0x618e36f3),
-           TOBN(0x2b7c77b8, 0x23807bbe), TOBN(0xe5b82405, 0xcb27ff50)}},
-         {{TOBN(0xba8b8be3, 0xbd379062), TOBN(0xd64b7a1d, 0x2dce4a92),
-           TOBN(0x040a73c5, 0xb2952e37), TOBN(0x0a9e252e, 0xd438aeca)},
-          {TOBN(0xdd43956b, 0xc39d3bcb), TOBN(0x1a31ca00, 0xb32b2d63),
-           TOBN(0xd67133b8, 0x5c417a18), TOBN(0xd08e4790, 0x2ef442c8)}},
-         {{TOBN(0x98cb1ae9, 0x255c0980), TOBN(0x4bd86381, 0x2b4a739f),
-           TOBN(0x5a5c31e1, 0x1e4a45a1), TOBN(0x1e5d55fe, 0x9cb0db2f)},
-          {TOBN(0x74661b06, 0x8ff5cc29), TOBN(0x026b389f, 0x0eb8a4f4),
-           TOBN(0x536b21a4, 0x58848c24), TOBN(0x2e5bf8ec, 0x81dc72b0)}},
-         {{TOBN(0x03c187d0, 0xad886aac), TOBN(0x5c16878a, 0xb771b645),
-           TOBN(0xb07dfc6f, 0xc74045ab), TOBN(0x2c6360bf, 0x7800caed)},
-          {TOBN(0x24295bb5, 0xb9c972a3), TOBN(0xc9e6f88e, 0x7c9a6dba),
-           TOBN(0x90ffbf24, 0x92a79aa6), TOBN(0xde29d50a, 0x41c26ac2)}},
-         {{TOBN(0x9f0af483, 0xd309cbe6), TOBN(0x5b020d8a, 0xe0bced4f),
-           TOBN(0x606e986d, 0xb38023e3), TOBN(0xad8f2c9d, 0x1abc6933)},
-          {TOBN(0x19292e1d, 0xe7400e93), TOBN(0xfe3e18a9, 0x52be5e4d),
-           TOBN(0xe8e9771d, 0x2e0680bf), TOBN(0x8c5bec98, 0xc54db063)}},
-         {{TOBN(0x2af9662a, 0x74a55d1f), TOBN(0xe3fbf28f, 0x046f66d8),
-           TOBN(0xa3a72ab4, 0xd4dc4794), TOBN(0x09779f45, 0x5c7c2dd8)},
-          {TOBN(0xd893bdaf, 0xc3d19d8d), TOBN(0xd5a75094, 0x57d6a6df),
-           TOBN(0x8cf8fef9, 0x952e6255), TOBN(0x3da67cfb, 0xda9a8aff)}},
-         {{TOBN(0x4c23f62a, 0x2c160dcd), TOBN(0x34e6c5e3, 0x8f90eaef),
-           TOBN(0x35865519, 0xa9a65d5a), TOBN(0x07c48aae, 0x8fd38a3d)},
-          {TOBN(0xb7e7aeda, 0x50068527), TOBN(0x2c09ef23, 0x1c90936a),
-           TOBN(0x31ecfeb6, 0xe879324c), TOBN(0xa0871f6b, 0xfb0ec938)}},
-         {{TOBN(0xb1f0fb68, 0xd84d835d), TOBN(0xc90caf39, 0x861dc1e6),
-           TOBN(0x12e5b046, 0x7594f8d7), TOBN(0x26897ae2, 0x65012b92)},
-          {TOBN(0xbcf68a08, 0xa4d6755d), TOBN(0x403ee41c, 0x0991fbda),
-           TOBN(0x733e343e, 0x3bbf17e8), TOBN(0xd2c7980d, 0x679b3d65)}},
-         {{TOBN(0x33056232, 0xd2e11305), TOBN(0x966be492, 0xf3c07a6f),
-           TOBN(0x6a8878ff, 0xbb15509d), TOBN(0xff221101, 0x0a9b59a4)},
-          {TOBN(0x6c9f564a, 0xabe30129), TOBN(0xc6f2c940, 0x336e64cf),
-           TOBN(0x0fe75262, 0x8b0c8022), TOBN(0xbe0267e9, 0x6ae8db87)}},
-         {{TOBN(0x22e192f1, 0x93bc042b), TOBN(0xf085b534, 0xb237c458),
-           TOBN(0xa0d192bd, 0x832c4168), TOBN(0x7a76e9e3, 0xbdf6271d)},
-          {TOBN(0x52a882fa, 0xb88911b5), TOBN(0xc85345e4, 0xb4db0eb5),
-           TOBN(0xa3be02a6, 0x81a7c3ff), TOBN(0x51889c8c, 0xf0ec0469)}},
-         {{TOBN(0x9d031369, 0xa5e829e5), TOBN(0xcbb4c6fc, 0x1607aa41),
-           TOBN(0x75ac59a6, 0x241d84c1), TOBN(0xc043f2bf, 0x8829e0ee)},
-          {TOBN(0x82a38f75, 0x8ea5e185), TOBN(0x8bda40b9, 0xd87cbd9f),
-           TOBN(0x9e65e75e, 0x2d8fc601), TOBN(0x3d515f74, 0xa35690b3)}},
-         {{TOBN(0x534acf4f, 0xda79e5ac), TOBN(0x68b83b3a, 0x8630215f),
-           TOBN(0x5c748b2e, 0xd085756e), TOBN(0xb0317258, 0xe5d37cb2)},
-          {TOBN(0x6735841a, 0xc5ccc2c4), TOBN(0x7d7dc96b, 0x3d9d5069),
-           TOBN(0xa147e410, 0xfd1754bd), TOBN(0x65296e94, 0xd399ddd5)}},
-         {{TOBN(0xf6b5b2d0, 0xbc8fa5bc), TOBN(0x8a5ead67, 0x500c277b),
-           TOBN(0x214625e6, 0xdfa08a5d), TOBN(0x51fdfedc, 0x959cf047)},
-          {TOBN(0x6bc9430b, 0x289fca32), TOBN(0xe36ff0cf, 0x9d9bdc3f),
-           TOBN(0x2fe187cb, 0x58ea0ede), TOBN(0xed66af20, 0x5a900b3f)}},
-         {{TOBN(0x00e0968b, 0x5fa9f4d6), TOBN(0x2d4066ce, 0x37a362e7),
-           TOBN(0xa99a9748, 0xbd07e772), TOBN(0x710989c0, 0x06a4f1d0)},
-          {TOBN(0xd5dedf35, 0xce40cbd8), TOBN(0xab55c5f0, 0x1743293d),
-           TOBN(0x766f1144, 0x8aa24e2c), TOBN(0x94d874f8, 0x605fbcb4)}},
-         {{TOBN(0xa365f0e8, 0xa518001b), TOBN(0xee605eb6, 0x9d04ef0f),
-           TOBN(0x5a3915cd, 0xba8d4d25), TOBN(0x44c0e1b8, 0xb5113472)},
-          {TOBN(0xcbb024e8, 0x8b6740dc), TOBN(0x89087a53, 0xee1d4f0c),
-           TOBN(0xa88fa05c, 0x1fc4e372), TOBN(0x8bf395cb, 0xaf8b3af2)}},
-         {{TOBN(0x1e71c9a1, 0xdeb8568b), TOBN(0xa35daea0, 0x80fb3d32),
-           TOBN(0xe8b6f266, 0x2cf8fb81), TOBN(0x6d51afe8, 0x9490696a)},
-          {TOBN(0x81beac6e, 0x51803a19), TOBN(0xe3d24b7f, 0x86219080),
-           TOBN(0x727cfd9d, 0xdf6f463c), TOBN(0x8c6865ca, 0x72284ee8)}},
-         {{TOBN(0x32c88b7d, 0xb743f4ef), TOBN(0x3793909b, 0xe7d11dce),
-           TOBN(0xd398f922, 0x2ff2ebe8), TOBN(0x2c70ca44, 0xe5e49796)},
-          {TOBN(0xdf4d9929, 0xcb1131b1), TOBN(0x7826f298, 0x25888e79),
-           TOBN(0x4d3a112c, 0xf1d8740a), TOBN(0x00384cb6, 0x270afa8b)}},
-         {{TOBN(0xcb64125b, 0x3ab48095), TOBN(0x3451c256, 0x62d05106),
-           TOBN(0xd73d577d, 0xa4955845), TOBN(0x39570c16, 0xbf9f4433)},
-          {TOBN(0xd7dfaad3, 0xadecf263), TOBN(0xf1c3d8d1, 0xdc76e102),
-           TOBN(0x5e774a58, 0x54c6a836), TOBN(0xdad4b672, 0x3e92d47b)}},
-         {{TOBN(0xbe7e990f, 0xf0d796a0), TOBN(0x5fc62478, 0xdf0e8b02),
-           TOBN(0x8aae8bf4, 0x030c00ad), TOBN(0x3d2db93b, 0x9004ba0f)},
-          {TOBN(0xe48c8a79, 0xd85d5ddc), TOBN(0xe907caa7, 0x6bb07f34),
-           TOBN(0x58db343a, 0xa39eaed5), TOBN(0x0ea6e007, 0xadaf5724)}},
-         {{TOBN(0xe00df169, 0xd23233f3), TOBN(0x3e322796, 0x77cb637f),
-           TOBN(0x1f897c0e, 0x1da0cf6c), TOBN(0xa651f5d8, 0x31d6bbdd)},
-          {TOBN(0xdd61af19, 0x1a230c76), TOBN(0xbd527272, 0xcdaa5e4a),
-           TOBN(0xca753636, 0xd0abcd7e), TOBN(0x78bdd37c, 0x370bd8dc)}},
-         {{TOBN(0xc23916c2, 0x17cd93fe), TOBN(0x65b97a4d, 0xdadce6e2),
-           TOBN(0xe04ed4eb, 0x174e42f8), TOBN(0x1491ccaa, 0xbb21480a)},
-          {TOBN(0x145a8280, 0x23196332), TOBN(0x3c3862d7, 0x587b479a),
-           TOBN(0x9f4a88a3, 0x01dcd0ed), TOBN(0x4da2b7ef, 0x3ea12f1f)}},
-         {{TOBN(0xf8e7ae33, 0xb126e48e), TOBN(0x404a0b32, 0xf494e237),
-           TOBN(0x9beac474, 0xc55acadb), TOBN(0x4ee5cf3b, 0xcbec9fd9)},
-          {TOBN(0x336b33b9, 0x7df3c8c3), TOBN(0xbd905fe3, 0xb76808fd),
-           TOBN(0x8f436981, 0xaa45c16a), TOBN(0x255c5bfa, 0x3dd27b62)}},
-         {{TOBN(0x71965cbf, 0xc3dd9b4d), TOBN(0xce23edbf, 0xfc068a87),
-           TOBN(0xb78d4725, 0x745b029b), TOBN(0x74610713, 0xcefdd9bd)},
-          {TOBN(0x7116f75f, 0x1266bf52), TOBN(0x02046722, 0x18e49bb6),
-           TOBN(0xdf43df9f, 0x3d6f19e3), TOBN(0xef1bc7d0, 0xe685cb2f)}},
-         {{TOBN(0xcddb27c1, 0x7078c432), TOBN(0xe1961b9c, 0xb77fedb7),
-           TOBN(0x1edc2f5c, 0xc2290570), TOBN(0x2c3fefca, 0x19cbd886)},
-          {TOBN(0xcf880a36, 0xc2af389a), TOBN(0x96c610fd, 0xbda71cea),
-           TOBN(0xf03977a9, 0x32aa8463), TOBN(0x8eb7763f, 0x8586d90a)}},
-         {{TOBN(0x3f342454, 0x2a296e77), TOBN(0xc8718683, 0x42837a35),
-           TOBN(0x7dc71090, 0x6a09c731), TOBN(0x54778ffb, 0x51b816db)},
-          {TOBN(0x6b33bfec, 0xaf06defd), TOBN(0xfe3c105f, 0x8592b70b),
-           TOBN(0xf937fda4, 0x61da6114), TOBN(0x3c13e651, 0x4c266ad7)}},
-         {{TOBN(0xe363a829, 0x855938e8), TOBN(0x2eeb5d9e, 0x9de54b72),
-           TOBN(0xbeb93b0e, 0x20ccfab9), TOBN(0x3dffbb5f, 0x25e61a25)},
-          {TOBN(0x7f655e43, 0x1acc093d), TOBN(0x0cb6cc3d, 0x3964ce61),
-           TOBN(0x6ab283a1, 0xe5e9b460), TOBN(0x55d787c5, 0xa1c7e72d)}},
-         {{TOBN(0x4d2efd47, 0xdeadbf02), TOBN(0x11e80219, 0xac459068),
-           TOBN(0x810c7626, 0x71f311f0), TOBN(0xfa17ef8d, 0x4ab6ef53)},
-          {TOBN(0xaf47fd25, 0x93e43bff), TOBN(0x5cb5ff3f, 0x0be40632),
-           TOBN(0x54687106, 0x8ee61da3), TOBN(0x7764196e, 0xb08afd0f)}},
-         {{TOBN(0x831ab3ed, 0xf0290a8f), TOBN(0xcae81966, 0xcb47c387),
-           TOBN(0xaad7dece, 0x184efb4f), TOBN(0xdcfc53b3, 0x4749110e)},
-          {TOBN(0x6698f23c, 0x4cb632f9), TOBN(0xc42a1ad6, 0xb91f8067),
-           TOBN(0xb116a81d, 0x6284180a), TOBN(0xebedf5f8, 0xe901326f)}},
-         {{TOBN(0xf2274c9f, 0x97e3e044), TOBN(0x42018520, 0x11d09fc9),
-           TOBN(0x56a65f17, 0xd18e6e23), TOBN(0x2ea61e2a, 0x352b683c)},
-          {TOBN(0x27d291bc, 0x575eaa94), TOBN(0x9e7bc721, 0xb8ff522d),
-           TOBN(0x5f7268bf, 0xa7f04d6f), TOBN(0x5868c73f, 0xaba41748)}},
-         {{TOBN(0x9f85c2db, 0x7be0eead), TOBN(0x511e7842, 0xff719135),
-           TOBN(0x5a06b1e9, 0xc5ea90d7), TOBN(0x0c19e283, 0x26fab631)},
-          {TOBN(0x8af8f0cf, 0xe9206c55), TOBN(0x89389cb4, 0x3553c06a),
-           TOBN(0x39dbed97, 0xf65f8004), TOBN(0x0621b037, 0xc508991d)}},
-         {{TOBN(0x1c52e635, 0x96e78cc4), TOBN(0x5385c8b2, 0x0c06b4a8),
-           TOBN(0xd84ddfdb, 0xb0e87d03), TOBN(0xc49dfb66, 0x934bafad)},
-          {TOBN(0x7071e170, 0x59f70772), TOBN(0x3a073a84, 0x3a1db56b),
-           TOBN(0x03494903, 0x3b8af190), TOBN(0x7d882de3, 0xd32920f0)}},
-         {{TOBN(0x91633f0a, 0xb2cf8940), TOBN(0x72b0b178, 0x6f948f51),
-           TOBN(0x2d28dc30, 0x782653c8), TOBN(0x88829849, 0xdb903a05)},
-          {TOBN(0xb8095d0c, 0x6a19d2bb), TOBN(0x4b9e7f0c, 0x86f782cb),
-           TOBN(0x7af73988, 0x2d907064), TOBN(0xd12be0fe, 0x8b32643c)}},
-         {{TOBN(0x358ed23d, 0x0e165dc3), TOBN(0x3d47ce62, 0x4e2378ce),
-           TOBN(0x7e2bb0b9, 0xfeb8a087), TOBN(0x3246e8ae, 0xe29e10b9)},
-          {TOBN(0x459f4ec7, 0x03ce2b4d), TOBN(0xe9b4ca1b, 0xbbc077cf),
-           TOBN(0x2613b4f2, 0x0e9940c1), TOBN(0xfc598bb9, 0x047d1eb1)}},
-         {{TOBN(0x9744c62b, 0x45036099), TOBN(0xa9dee742, 0x167c65d8),
-           TOBN(0x0c511525, 0xdabe1943), TOBN(0xda110554, 0x93c6c624)},
-          {TOBN(0xae00a52c, 0x651a3be2), TOBN(0xcda5111d, 0x884449a6),
-           TOBN(0x063c06f4, 0xff33bed1), TOBN(0x73baaf9a, 0x0d3d76b4)}},
-         {{TOBN(0x52fb0c9d, 0x7fc63668), TOBN(0x6886c9dd, 0x0c039cde),
-           TOBN(0x602bd599, 0x55b22351), TOBN(0xb00cab02, 0x360c7c13)},
-          {TOBN(0x8cb616bc, 0x81b69442), TOBN(0x41486700, 0xb55c3cee),
-           TOBN(0x71093281, 0xf49ba278), TOBN(0xad956d9c, 0x64a50710)}},
-         {{TOBN(0x9561f28b, 0x638a7e81), TOBN(0x54155cdf, 0x5980ddc3),
-           TOBN(0xb2db4a96, 0xd26f247a), TOBN(0x9d774e4e, 0x4787d100)},
-          {TOBN(0x1a9e6e2e, 0x078637d2), TOBN(0x1c363e2d, 0x5e0ae06a),
-           TOBN(0x7493483e, 0xe9cfa354), TOBN(0x76843cb3, 0x7f74b98d)}},
-         {{TOBN(0xbaca6591, 0xd4b66947), TOBN(0xb452ce98, 0x04460a8c),
-           TOBN(0x6830d246, 0x43768f55), TOBN(0xf4197ed8, 0x7dff12df)},
-          {TOBN(0x6521b472, 0x400dd0f7), TOBN(0x59f5ca8f, 0x4b1e7093),
-           TOBN(0x6feff11b, 0x080338ae), TOBN(0x0ada31f6, 0xa29ca3c6)}},
-         {{TOBN(0x24794eb6, 0x94a2c215), TOBN(0xd83a43ab, 0x05a57ab4),
-           TOBN(0x264a543a, 0x2a6f89fe), TOBN(0x2c2a3868, 0xdd5ec7c2)},
-          {TOBN(0xd3373940, 0x8439d9b2), TOBN(0x715ea672, 0x0acd1f11),
-           TOBN(0x42c1d235, 0xe7e6cc19), TOBN(0x81ce6e96, 0xb990585c)}},
-         {{TOBN(0x04e5dfe0, 0xd809c7bd), TOBN(0xd7b2580c, 0x8f1050ab),
-           TOBN(0x6d91ad78, 0xd8a4176f), TOBN(0x0af556ee, 0x4e2e897c)},
-          {TOBN(0x162a8b73, 0x921de0ac), TOBN(0x52ac9c22, 0x7ea78400),
-           TOBN(0xee2a4eea, 0xefce2174), TOBN(0xbe61844e, 0x6d637f79)}},
-         {{TOBN(0x0491f1bc, 0x789a283b), TOBN(0x72d3ac3d, 0x880836f4),
-           TOBN(0xaa1c5ea3, 0x88e5402d), TOBN(0x1b192421, 0xd5cc473d)},
-          {TOBN(0x5c0b9998, 0x9dc84cac), TOBN(0xb0a8482d, 0x9c6e75b8),
-           TOBN(0x639961d0, 0x3a191ce2), TOBN(0xda3bc865, 0x6d837930)}},
-         {{TOBN(0xca990653, 0x056e6f8f), TOBN(0x84861c41, 0x64d133a7),
-           TOBN(0x8b403276, 0x746abe40), TOBN(0xb7b4d51a, 0xebf8e303)},
-          {TOBN(0x05b43211, 0x220a255d), TOBN(0xc997152c, 0x02419e6e),
-           TOBN(0x76ff47b6, 0x630c2fea), TOBN(0x50518677, 0x281fdade)}},
-         {{TOBN(0x3283b8ba, 0xcf902b0b), TOBN(0x8d4b4eb5, 0x37db303b),
-           TOBN(0xcc89f42d, 0x755011bc), TOBN(0xb43d74bb, 0xdd09d19b)},
-          {TOBN(0x65746bc9, 0x8adba350), TOBN(0x364eaf8c, 0xb51c1927),
-           TOBN(0x13c76596, 0x10ad72ec), TOBN(0x30045121, 0xf8d40c20)}},
-         {{TOBN(0x6d2d99b7, 0xea7b979b), TOBN(0xcd78cd74, 0xe6fb3bcd),
-           TOBN(0x11e45a9e, 0x86cffbfe), TOBN(0x78a61cf4, 0x637024f6)},
-          {TOBN(0xd06bc872, 0x3d502295), TOBN(0xf1376854, 0x458cb288),
-           TOBN(0xb9db26a1, 0x342f8586), TOBN(0xf33effcf, 0x4beee09e)}},
-         {{TOBN(0xd7e0c4cd, 0xb30cfb3a), TOBN(0x6d09b8c1, 0x6c9db4c8),
-           TOBN(0x40ba1a42, 0x07c8d9df), TOBN(0x6fd495f7, 0x1c52c66d)},
-          {TOBN(0xfb0e169f, 0x275264da), TOBN(0x80c2b746, 0xe57d8362),
-           TOBN(0xedd987f7, 0x49ad7222), TOBN(0xfdc229af, 0x4398ec7b)}}},
-        {{{TOBN(0xb0d1ed84, 0x52666a58), TOBN(0x4bcb6e00, 0xe6a9c3c2),
-           TOBN(0x3c57411c, 0x26906408), TOBN(0xcfc20755, 0x13556400)},
-          {TOBN(0xa08b1c50, 0x5294dba3), TOBN(0xa30ba286, 0x8b7dd31e),
-           TOBN(0xd70ba90e, 0x991eca74), TOBN(0x094e142c, 0xe762c2b9)}},
-         {{TOBN(0xb81d783e, 0x979f3925), TOBN(0x1efd130a, 0xaf4c89a7),
-           TOBN(0x525c2144, 0xfd1bf7fa), TOBN(0x4b296904, 0x1b265a9e)},
-          {TOBN(0xed8e9634, 0xb9db65b6), TOBN(0x35c82e32, 0x03599d8a),
-           TOBN(0xdaa7a54f, 0x403563f3), TOBN(0x9df088ad, 0x022c38ab)}},
-         {{TOBN(0xe5cfb066, 0xbb3fd30a), TOBN(0x429169da, 0xeff0354e),
-           TOBN(0x809cf852, 0x3524e36c), TOBN(0x136f4fb3, 0x0155be1d)},
-          {TOBN(0x4826af01, 0x1fbba712), TOBN(0x6ef0f0b4, 0x506ba1a1),
-           TOBN(0xd9928b31, 0x77aea73e), TOBN(0xe2bf6af2, 0x5eaa244e)}},
-         {{TOBN(0x8d084f12, 0x4237b64b), TOBN(0x688ebe99, 0xe3ecfd07),
-           TOBN(0x57b8a70c, 0xf6845dd8), TOBN(0x808fc59c, 0x5da4a325)},
-          {TOBN(0xa9032b2b, 0xa3585862), TOBN(0xb66825d5, 0xedf29386),
-           TOBN(0xb5a5a8db, 0x431ec29b), TOBN(0xbb143a98, 0x3a1e8dc8)}},
-         {{TOBN(0x35ee94ce, 0x12ae381b), TOBN(0x3a7f176c, 0x86ccda90),
-           TOBN(0xc63a657e, 0x4606eaca), TOBN(0x9ae5a380, 0x43cd04df)},
-          {TOBN(0x9bec8d15, 0xed251b46), TOBN(0x1f5d6d30, 0xcaca5e64),
-           TOBN(0x347b3b35, 0x9ff20f07), TOBN(0x4d65f034, 0xf7e4b286)}},
-         {{TOBN(0x9e93ba24, 0xf111661e), TOBN(0xedced484, 0xb105eb04),
-           TOBN(0x96dc9ba1, 0xf424b578), TOBN(0xbf8f66b7, 0xe83e9069)},
-          {TOBN(0x872d4df4, 0xd7ed8216), TOBN(0xbf07f377, 0x8e2cbecf),
-           TOBN(0x4281d899, 0x98e73754), TOBN(0xfec85fbb, 0x8aab8708)}},
-         {{TOBN(0x9a3c0dee, 0xa5ba5b0b), TOBN(0xe6a116ce, 0x42d05299),
-           TOBN(0xae9775fe, 0xe9b02d42), TOBN(0x72b05200, 0xa1545cb6)},
-          {TOBN(0xbc506f7d, 0x31a3b4ea), TOBN(0xe5893078, 0x8bbd9b32),
-           TOBN(0xc8bc5f37, 0xe4b12a97), TOBN(0x6b000c06, 0x4a73b671)}},
-         {{TOBN(0x13b5bf22, 0x765fa7d0), TOBN(0x59805bf0, 0x1d6a5370),
-           TOBN(0x67a5e29d, 0x4280db98), TOBN(0x4f53916f, 0x776b1ce3)},
-          {TOBN(0x714ff61f, 0x33ddf626), TOBN(0x4206238e, 0xa085d103),
-           TOBN(0x1c50d4b7, 0xe5809ee3), TOBN(0x999f450d, 0x85f8eb1d)}},
-         {{TOBN(0x658a6051, 0xe4c79e9b), TOBN(0x1394cb73, 0xc66a9fea),
-           TOBN(0x27f31ed5, 0xc6be7b23), TOBN(0xf4c88f36, 0x5aa6f8fe)},
-          {TOBN(0x0fb0721f, 0x4aaa499e), TOBN(0x68b3a7d5, 0xe3fb2a6b),
-           TOBN(0xa788097d, 0x3a92851d), TOBN(0x060e7f8a, 0xe96f4913)}},
-         {{TOBN(0x82eebe73, 0x1a3a93bc), TOBN(0x42bbf465, 0xa21adc1a),
-           TOBN(0xc10b6fa4, 0xef030efd), TOBN(0x247aa4c7, 0x87b097bb)},
-          {TOBN(0x8b8dc632, 0xf60c77da), TOBN(0x6ffbc26a, 0xc223523e),
-           TOBN(0xa4f6ff11, 0x344579cf), TOBN(0x5825653c, 0x980250f6)}},
-         {{TOBN(0xb2dd097e, 0xbc1aa2b9), TOBN(0x07889393, 0x37a0333a),
-           TOBN(0x1cf55e71, 0x37a0db38), TOBN(0x2648487f, 0x792c1613)},
-          {TOBN(0xdad01336, 0x3fcef261), TOBN(0x6239c81d, 0x0eabf129),
-           TOBN(0x8ee761de, 0x9d276be2), TOBN(0x406a7a34, 0x1eda6ad3)}},
-         {{TOBN(0x4bf367ba, 0x4a493b31), TOBN(0x54f20a52, 0x9bf7f026),
-           TOBN(0xb696e062, 0x9795914b), TOBN(0xcddab96d, 0x8bf236ac)},
-          {TOBN(0x4ff2c70a, 0xed25ea13), TOBN(0xfa1d09eb, 0x81cbbbe7),
-           TOBN(0x88fc8c87, 0x468544c5), TOBN(0x847a670d, 0x696b3317)}},
-         {{TOBN(0xf133421e, 0x64bcb626), TOBN(0xaea638c8, 0x26dee0b5),
-           TOBN(0xd6e7680b, 0xb310346c), TOBN(0xe06f4097, 0xd5d4ced3)},
-          {TOBN(0x09961452, 0x7512a30b), TOBN(0xf3d867fd, 0xe589a59a),
-           TOBN(0x2e73254f, 0x52d0c180), TOBN(0x9063d8a3, 0x333c74ac)}},
-         {{TOBN(0xeda6c595, 0xd314e7bc), TOBN(0x2ee7464b, 0x467899ed),
-           TOBN(0x1cef423c, 0x0a1ed5d3), TOBN(0x217e76ea, 0x69cc7613)},
-          {TOBN(0x27ccce1f, 0xe7cda917), TOBN(0x12d8016b, 0x8a893f16),
-           TOBN(0xbcd6de84, 0x9fc74f6b), TOBN(0xfa5817e2, 0xf3144e61)}},
-         {{TOBN(0x1f354164, 0x0821ee4c), TOBN(0x1583eab4, 0x0bc61992),
-           TOBN(0x7490caf6, 0x1d72879f), TOBN(0x998ad9f3, 0xf76ae7b2)},
-          {TOBN(0x1e181950, 0xa41157f7), TOBN(0xa9d7e1e6, 0xe8da3a7e),
-           TOBN(0x963784eb, 0x8426b95f), TOBN(0x0ee4ed6e, 0x542e2a10)}},
-         {{TOBN(0xb79d4cc5, 0xac751e7b), TOBN(0x93f96472, 0xfd4211bd),
-           TOBN(0x8c72d3d2, 0xc8de4fc6), TOBN(0x7b69cbf5, 0xdf44f064)},
-          {TOBN(0x3da90ca2, 0xf4bf94e1), TOBN(0x1a5325f8, 0xf12894e2),
-           TOBN(0x0a437f6c, 0x7917d60b), TOBN(0x9be70486, 0x96c9cb5d)}},
-         {{TOBN(0xb4d880bf, 0xe1dc5c05), TOBN(0xd738adda, 0xeebeeb57),
-           TOBN(0x6f0119d3, 0xdf0fe6a3), TOBN(0x5c686e55, 0x66eaaf5a)},
-          {TOBN(0x9cb10b50, 0xdfd0b7ec), TOBN(0xbdd0264b, 0x6a497c21),
-           TOBN(0xfc093514, 0x8c546c96), TOBN(0x58a947fa, 0x79dbf42a)}},
-         {{TOBN(0xc0b48d4e, 0x49ccd6d7), TOBN(0xff8fb02c, 0x88bd5580),
-           TOBN(0xc75235e9, 0x07d473b2), TOBN(0x4fab1ac5, 0xa2188af3)},
-          {TOBN(0x030fa3bc, 0x97576ec0), TOBN(0xe8c946e8, 0x0b7e7d2f),
-           TOBN(0x40a5c9cc, 0x70305600), TOBN(0x6d8260a9, 0xc8b013b4)}},
-         {{TOBN(0x0368304f, 0x70bba85c), TOBN(0xad090da1, 0xa4a0d311),
-           TOBN(0x7170e870, 0x2415eec1), TOBN(0xbfba35fe, 0x8461ea47)},
-          {TOBN(0x6279019a, 0xc1e91938), TOBN(0xa47638f3, 0x1afc415f),
-           TOBN(0x36c65cbb, 0xbcba0e0f), TOBN(0x02160efb, 0x034e2c48)}},
-         {{TOBN(0xe6c51073, 0x615cd9e4), TOBN(0x498ec047, 0xf1243c06),
-           TOBN(0x3e5a8809, 0xb17b3d8c), TOBN(0x5cd99e61, 0x0cc565f1)},
-          {TOBN(0x81e312df, 0x7851dafe), TOBN(0xf156f5ba, 0xa79061e2),
-           TOBN(0x80d62b71, 0x880c590e), TOBN(0xbec9746f, 0x0a39faa1)}},
-         {{TOBN(0x1d98a9c1, 0xc8ed1f7a), TOBN(0x09e43bb5, 0xa81d5ff2),
-           TOBN(0xd5f00f68, 0x0da0794a), TOBN(0x412050d9, 0x661aa836)},
-          {TOBN(0xa89f7c4e, 0x90747e40), TOBN(0x6dc05ebb, 0xb62a3686),
-           TOBN(0xdf4de847, 0x308e3353), TOBN(0x53868fbb, 0x9fb53bb9)}},
-         {{TOBN(0x2b09d2c3, 0xcfdcf7dd), TOBN(0x41a9fce3, 0x723fcab4),
-           TOBN(0x73d905f7, 0x07f57ca3), TOBN(0x080f9fb1, 0xac8e1555)},
-          {TOBN(0x7c088e84, 0x9ba7a531), TOBN(0x07d35586, 0xed9a147f),
-           TOBN(0x602846ab, 0xaf48c336), TOBN(0x7320fd32, 0x0ccf0e79)}},
-         {{TOBN(0xaa780798, 0xb18bd1ff), TOBN(0x52c2e300, 0xafdd2905),
-           TOBN(0xf27ea3d6, 0x434267cd), TOBN(0x8b96d16d, 0x15605b5f)},
-          {TOBN(0x7bb31049, 0x4b45706b), TOBN(0xe7f58b8e, 0x743d25f8),
-           TOBN(0xe9b5e45b, 0x87f30076), TOBN(0xd19448d6, 0x5d053d5a)}},
-         {{TOBN(0x1ecc8cb9, 0xd3210a04), TOBN(0x6bc7d463, 0xdafb5269),
-           TOBN(0x3e59b10a, 0x67c3489f), TOBN(0x1769788c, 0x65641e1b)},
-          {TOBN(0x8a53b82d, 0xbd6cb838), TOBN(0x7066d6e6, 0x236d5f22),
-           TOBN(0x03aa1c61, 0x6908536e), TOBN(0xc971da0d, 0x66ae9809)}},
-         {{TOBN(0x01b3a86b, 0xc49a2fac), TOBN(0x3b8420c0, 0x3092e77a),
-           TOBN(0x02057300, 0x7d6fb556), TOBN(0x6941b2a1, 0xbff40a87)},
-          {TOBN(0x140b6308, 0x0658ff2a), TOBN(0x87804363, 0x3424ab36),
-           TOBN(0x0253bd51, 0x5751e299), TOBN(0xc75bcd76, 0x449c3e3a)}},
-         {{TOBN(0x92eb4090, 0x7f8f875d), TOBN(0x9c9d754e, 0x56c26bbf),
-           TOBN(0x158cea61, 0x8110bbe7), TOBN(0x62a6b802, 0x745f91ea)},
-          {TOBN(0xa79c41aa, 0xc6e7394b), TOBN(0x445b6a83, 0xad57ef10),
-           TOBN(0x0c5277eb, 0x6ea6f40c), TOBN(0x319fe96b, 0x88633365)}},
-         {{TOBN(0x0b0fc61f, 0x385f63cb), TOBN(0x41250c84, 0x22bdd127),
-           TOBN(0x67d153f1, 0x09e942c2), TOBN(0x60920d08, 0xc021ad5d)},
-          {TOBN(0x229f5746, 0x724d81a5), TOBN(0xb7ffb892, 0x5bba3299),
-           TOBN(0x518c51a1, 0xde413032), TOBN(0x2a9bfe77, 0x3c2fd94c)}},
-         {{TOBN(0xcbcde239, 0x3191f4fd), TOBN(0x43093e16, 0xd3d6ada1),
-           TOBN(0x184579f3, 0x58769606), TOBN(0x2c94a8b3, 0xd236625c)},
-          {TOBN(0x6922b9c0, 0x5c437d8e), TOBN(0x3d4ae423, 0xd8d9f3c8),
-           TOBN(0xf72c31c1, 0x2e7090a2), TOBN(0x4ac3f5f3, 0xd76a55bd)}},
-         {{TOBN(0x342508fc, 0x6b6af991), TOBN(0x0d527100, 0x1b5cebbd),
-           TOBN(0xb84740d0, 0xdd440dd7), TOBN(0x748ef841, 0x780162fd)},
-          {TOBN(0xa8dbfe0e, 0xdfc6fafb), TOBN(0xeadfdf05, 0xf7300f27),
-           TOBN(0x7d06555f, 0xfeba4ec9), TOBN(0x12c56f83, 0x9e25fa97)}},
-         {{TOBN(0x77f84203, 0xd39b8c34), TOBN(0xed8b1be6, 0x3125eddb),
-           TOBN(0x5bbf2441, 0xf6e39dc5), TOBN(0xb00f6ee6, 0x6a5d678a)},
-          {TOBN(0xba456ecf, 0x57d0ea99), TOBN(0xdcae0f58, 0x17e06c43),
-           TOBN(0x01643de4, 0x0f5b4baa), TOBN(0x2c324341, 0xd161b9be)}},
-         {{TOBN(0x80177f55, 0xe126d468), TOBN(0xed325f1f, 0x76748e09),
-           TOBN(0x6116004a, 0xcfa9bdc2), TOBN(0x2d8607e6, 0x3a9fb468)},
-          {TOBN(0x0e573e27, 0x6009d660), TOBN(0x3a525d2e, 0x8d10c5a1),
-           TOBN(0xd26cb45c, 0x3b9009a0), TOBN(0xb6b0cdc0, 0xde9d7448)}},
-         {{TOBN(0x949c9976, 0xe1337c26), TOBN(0x6faadebd, 0xd73d68e5),
-           TOBN(0x9e158614, 0xf1b768d9), TOBN(0x22dfa557, 0x9cc4f069)},
-          {TOBN(0xccd6da17, 0xbe93c6d6), TOBN(0x24866c61, 0xa504f5b9),
-           TOBN(0x2121353c, 0x8d694da1), TOBN(0x1c6ca580, 0x0140b8c6)}},
-         {{TOBN(0xc245ad8c, 0xe964021e), TOBN(0xb83bffba, 0x032b82b3),
-           TOBN(0xfaa220c6, 0x47ef9898), TOBN(0x7e8d3ac6, 0x982c948a)},
-          {TOBN(0x1faa2091, 0xbc2d124a), TOBN(0xbd54c3dd, 0x05b15ff4),
-           TOBN(0x386bf3ab, 0xc87c6fb7), TOBN(0xfb2b0563, 0xfdeb6f66)}},
-         {{TOBN(0x4e77c557, 0x5b45afb4), TOBN(0xe9ded649, 0xefb8912d),
-           TOBN(0x7ec9bbf5, 0x42f6e557), TOBN(0x2570dfff, 0x62671f00)},
-          {TOBN(0x2b3bfb78, 0x88e084bd), TOBN(0xa024b238, 0xf37fe5b4),
-           TOBN(0x44e7dc04, 0x95649aee), TOBN(0x498ca255, 0x5e7ec1d8)}},
-         {{TOBN(0x3bc766ea, 0xaaa07e86), TOBN(0x0db6facb, 0xf3608586),
-           TOBN(0xbadd2549, 0xbdc259c8), TOBN(0x95af3c6e, 0x041c649f)},
-          {TOBN(0xb36a928c, 0x02e30afb), TOBN(0x9b5356ad, 0x008a88b8),
-           TOBN(0x4b67a5f1, 0xcf1d9e9d), TOBN(0xc6542e47, 0xa5d8d8ce)}},
-         {{TOBN(0x73061fe8, 0x7adfb6cc), TOBN(0xcc826fd3, 0x98678141),
-           TOBN(0x00e758b1, 0x3c80515a), TOBN(0x6afe3247, 0x41485083)},
-          {TOBN(0x0fcb08b9, 0xb6ae8a75), TOBN(0xb8cf388d, 0x4acf51e1),
-           TOBN(0x344a5560, 0x6961b9d6), TOBN(0x1a6778b8, 0x6a97fd0c)}},
-         {{TOBN(0xd840fdc1, 0xecc4c7e3), TOBN(0xde9fe47d, 0x16db68cc),
-           TOBN(0xe95f89de, 0xa3e216aa), TOBN(0x84f1a6a4, 0x9594a8be)},
-          {TOBN(0x7ddc7d72, 0x5a7b162b), TOBN(0xc5cfda19, 0xadc817a3),
-           TOBN(0x80a5d350, 0x78b58d46), TOBN(0x93365b13, 0x82978f19)}},
-         {{TOBN(0x2e44d225, 0x26a1fc90), TOBN(0x0d6d10d2, 0x4d70705d),
-           TOBN(0xd94b6b10, 0xd70c45f4), TOBN(0x0f201022, 0xb216c079)},
-          {TOBN(0xcec966c5, 0x658fde41), TOBN(0xa8d2bc7d, 0x7e27601d),
-           TOBN(0xbfcce3e1, 0xff230be7), TOBN(0x3394ff6b, 0x0033ffb5)}},
-         {{TOBN(0xd890c509, 0x8132c9af), TOBN(0xaac4b0eb, 0x361e7868),
-           TOBN(0x5194ded3, 0xe82d15aa), TOBN(0x4550bd2e, 0x23ae6b7d)},
-          {TOBN(0x3fda318e, 0xea5399d4), TOBN(0xd989bffa, 0x91638b80),
-           TOBN(0x5ea124d0, 0xa14aa12d), TOBN(0x1fb1b899, 0x3667b944)}},
-         {{TOBN(0x95ec7969, 0x44c44d6a), TOBN(0x91df144a, 0x57e86137),
-           TOBN(0x915fd620, 0x73adac44), TOBN(0x8f01732d, 0x59a83801)},
-          {TOBN(0xec579d25, 0x3aa0a633), TOBN(0x06de5e7c, 0xc9d6d59c),
-           TOBN(0xc132f958, 0xb1ef8010), TOBN(0x29476f96, 0xe65c1a02)}},
-         {{TOBN(0x336a77c0, 0xd34c3565), TOBN(0xef1105b2, 0x1b9f1e9e),
-           TOBN(0x63e6d08b, 0xf9e08002), TOBN(0x9aff2f21, 0xc613809e)},
-          {TOBN(0xb5754f85, 0x3a80e75d), TOBN(0xde71853e, 0x6bbda681),
-           TOBN(0x86f041df, 0x8197fd7a), TOBN(0x8b332e08, 0x127817fa)}},
-         {{TOBN(0x05d99be8, 0xb9c20cda), TOBN(0x89f7aad5, 0xd5cd0c98),
-           TOBN(0x7ef936fe, 0x5bb94183), TOBN(0x92ca0753, 0xb05cd7f2)},
-          {TOBN(0x9d65db11, 0x74a1e035), TOBN(0x02628cc8, 0x13eaea92),
-           TOBN(0xf2d9e242, 0x49e4fbf2), TOBN(0x94fdfd9b, 0xe384f8b7)}},
-         {{TOBN(0x65f56054, 0x63428c6b), TOBN(0x2f7205b2, 0x90b409a5),
-           TOBN(0xf778bb78, 0xff45ae11), TOBN(0xa13045be, 0xc5ee53b2)},
-          {TOBN(0xe00a14ff, 0x03ef77fe), TOBN(0x689cd59f, 0xffef8bef),
-           TOBN(0x3578f0ed, 0x1e9ade22), TOBN(0xe99f3ec0, 0x6268b6a8)}},
-         {{TOBN(0xa2057d91, 0xea1b3c3e), TOBN(0x2d1a7053, 0xb8823a4a),
-           TOBN(0xabbb336a, 0x2cca451e), TOBN(0xcd2466e3, 0x2218bb5d)},
-          {TOBN(0x3ac1f42f, 0xc8cb762d), TOBN(0x7e312aae, 0x7690211f),
-           TOBN(0xebb9bd73, 0x45d07450), TOBN(0x207c4b82, 0x46c2213f)}},
-         {{TOBN(0x99d425c1, 0x375913ec), TOBN(0x94e45e96, 0x67908220),
-           TOBN(0xc08f3087, 0xcd67dbf6), TOBN(0xa5670fbe, 0xc0887056)},
-          {TOBN(0x6717b64a, 0x66f5b8fc), TOBN(0xd5a56aea, 0x786fec28),
-           TOBN(0xa8c3f55f, 0xc0ff4952), TOBN(0xa77fefae, 0x457ac49b)}},
-         {{TOBN(0x29882d7c, 0x98379d44), TOBN(0xd000bdfb, 0x509edc8a),
-           TOBN(0xc6f95979, 0xe66fe464), TOBN(0x504a6115, 0xfa61bde0)},
-          {TOBN(0x56b3b871, 0xeffea31a), TOBN(0x2d3de26d, 0xf0c21a54),
-           TOBN(0x21dbff31, 0x834753bf), TOBN(0xe67ecf49, 0x69269d86)}},
-         {{TOBN(0x7a176952, 0x151fe690), TOBN(0x03515804, 0x7f2adb5f),
-           TOBN(0xee794b15, 0xd1b62a8d), TOBN(0xf004ceec, 0xaae454e6)},
-          {TOBN(0x0897ea7c, 0xf0386fac), TOBN(0x3b62ff12, 0xd1fca751),
-           TOBN(0x154181df, 0x1b7a04ec), TOBN(0x2008e04a, 0xfb5847ec)}},
-         {{TOBN(0xd147148e, 0x41dbd772), TOBN(0x2b419f73, 0x22942654),
-           TOBN(0x669f30d3, 0xe9c544f7), TOBN(0x52a2c223, 0xc8540149)},
-          {TOBN(0x5da9ee14, 0x634dfb02), TOBN(0x5f074ff0, 0xf47869f3),
-           TOBN(0x74ee878d, 0xa3933acc), TOBN(0xe6510651, 0x4fe35ed1)}},
-         {{TOBN(0xb3eb9482, 0xf1012e7a), TOBN(0x51013cc0, 0xa8a566ae),
-           TOBN(0xdd5e9243, 0x47c00d3b), TOBN(0x7fde089d, 0x946bb0e5)},
-          {TOBN(0x030754fe, 0xc731b4b3), TOBN(0x12a136a4, 0x99fda062),
-           TOBN(0x7c1064b8, 0x5a1a35bc), TOBN(0xbf1f5763, 0x446c84ef)}},
-         {{TOBN(0xed29a56d, 0xa16d4b34), TOBN(0x7fba9d09, 0xdca21c4f),
-           TOBN(0x66d7ac00, 0x6d8de486), TOBN(0x60061987, 0x73a2a5e1)},
-          {TOBN(0x8b400f86, 0x9da28ff0), TOBN(0x3133f708, 0x43c4599c),
-           TOBN(0x9911c9b8, 0xee28cb0d), TOBN(0xcd7e2874, 0x8e0af61d)}},
-         {{TOBN(0x5a85f0f2, 0x72ed91fc), TOBN(0x85214f31, 0x9cd4a373),
-           TOBN(0x881fe5be, 0x1925253c), TOBN(0xd8dc98e0, 0x91e8bc76)},
-          {TOBN(0x7120affe, 0x585cc3a2), TOBN(0x724952ed, 0x735bf97a),
-           TOBN(0x5581e7dc, 0x3eb34581), TOBN(0x5cbff4f2, 0xe52ee57d)}},
-         {{TOBN(0x8d320a0e, 0x87d8cc7b), TOBN(0x9beaa7f3, 0xf1d280d0),
-           TOBN(0x7a0b9571, 0x9beec704), TOBN(0x9126332e, 0x5b7f0057)},
-          {TOBN(0x01fbc1b4, 0x8ed3bd6d), TOBN(0x35bb2c12, 0xd945eb24),
-           TOBN(0x6404694e, 0x9a8ae255), TOBN(0xb6092eec, 0x8d6abfb3)}},
-         {{TOBN(0x4d76143f, 0xcc058865), TOBN(0x7b0a5af2, 0x6e249922),
-           TOBN(0x8aef9440, 0x6a50d353), TOBN(0xe11e4bcc, 0x64f0e07a)},
-          {TOBN(0x4472993a, 0xa14a90fa), TOBN(0x7706e20c, 0xba0c51d4),
-           TOBN(0xf403292f, 0x1532672d), TOBN(0x52573bfa, 0x21829382)}},
-         {{TOBN(0x6a7bb6a9, 0x3b5bdb83), TOBN(0x08da65c0, 0xa4a72318),
-           TOBN(0xc58d22aa, 0x63eb065f), TOBN(0x1717596c, 0x1b15d685)},
-          {TOBN(0x112df0d0, 0xb266d88b), TOBN(0xf688ae97, 0x5941945a),
-           TOBN(0x487386e3, 0x7c292cac), TOBN(0x42f3b50d, 0x57d6985c)}},
-         {{TOBN(0x6da4f998, 0x6a90fc34), TOBN(0xc8f257d3, 0x65ca8a8d),
-           TOBN(0xc2feabca, 0x6951f762), TOBN(0xe1bc81d0, 0x74c323ac)},
-          {TOBN(0x1bc68f67, 0x251a2a12), TOBN(0x10d86587, 0xbe8a70dc),
-           TOBN(0xd648af7f, 0xf0f84d2e), TOBN(0xf0aa9ebc, 0x6a43ac92)}},
-         {{TOBN(0x69e3be04, 0x27596893), TOBN(0xb6bb02a6, 0x45bf452b),
-           TOBN(0x0875c11a, 0xf4c698c8), TOBN(0x6652b5c7, 0xbece3794)},
-          {TOBN(0x7b3755fd, 0x4f5c0499), TOBN(0x6ea16558, 0xb5532b38),
-           TOBN(0xd1c69889, 0xa2e96ef7), TOBN(0x9c773c3a, 0x61ed8f48)}},
-         {{TOBN(0x2b653a40, 0x9b323abc), TOBN(0xe26605e1, 0xf0e1d791),
-           TOBN(0x45d41064, 0x4a87157a), TOBN(0x8f9a78b7, 0xcbbce616)},
-          {TOBN(0xcf1e44aa, 0xc407eddd), TOBN(0x81ddd1d8, 0xa35b964f),
-           TOBN(0x473e339e, 0xfd083999), TOBN(0x6c94bdde, 0x8e796802)}},
-         {{TOBN(0x5a304ada, 0x8545d185), TOBN(0x82ae44ea, 0x738bb8cb),
-           TOBN(0x628a35e3, 0xdf87e10e), TOBN(0xd3624f3d, 0xa15b9fe3)},
-          {TOBN(0xcc44209b, 0x14be4254), TOBN(0x7d0efcbc, 0xbdbc2ea5),
-           TOBN(0x1f603362, 0x04c37bbe), TOBN(0x21f363f5, 0x56a5852c)}},
-         {{TOBN(0xa1503d1c, 0xa8501550), TOBN(0x2251e0e1, 0xd8ab10bb),
-           TOBN(0xde129c96, 0x6961c51c), TOBN(0x1f7246a4, 0x81910f68)},
-          {TOBN(0x2eb744ee, 0x5f2591f2), TOBN(0x3c47d33f, 0x5e627157),
-           TOBN(0x4d6d62c9, 0x22f3bd68), TOBN(0x6120a64b, 0xcb8df856)}},
-         {{TOBN(0x3a9ac6c0, 0x7b5d07df), TOBN(0xa92b9558, 0x7ef39783),
-           TOBN(0xe128a134, 0xab3a9b4f), TOBN(0x41c18807, 0xb1252f05)},
-          {TOBN(0xfc7ed089, 0x80ba9b1c), TOBN(0xac8dc6de, 0xc532a9dd),
-           TOBN(0xbf829cef, 0x55246809), TOBN(0x101b784f, 0x5b4ee80f)}},
-         {{TOBN(0xc09945bb, 0xb6f11603), TOBN(0x57b09dbe, 0x41d2801e),
-           TOBN(0xfba5202f, 0xa97534a8), TOBN(0x7fd8ae5f, 0xc17b9614)},
-          {TOBN(0xa50ba666, 0x78308435), TOBN(0x9572f77c, 0xd3868c4d),
-           TOBN(0x0cef7bfd, 0x2dd7aab0), TOBN(0xe7958e08, 0x2c7c79ff)}},
-         {{TOBN(0x81262e42, 0x25346689), TOBN(0x716da290, 0xb07c7004),
-           TOBN(0x35f911ea, 0xb7950ee3), TOBN(0x6fd72969, 0x261d21b5)},
-          {TOBN(0x52389803, 0x08b640d3), TOBN(0x5b0026ee, 0x887f12a1),
-           TOBN(0x20e21660, 0x742e9311), TOBN(0x0ef6d541, 0x5ff77ff7)}},
-         {{TOBN(0x969127f0, 0xf9c41135), TOBN(0xf21d60c9, 0x68a64993),
-           TOBN(0x656e5d0c, 0xe541875c), TOBN(0xf1e0f84e, 0xa1d3c233)},
-          {TOBN(0x9bcca359, 0x06002d60), TOBN(0xbe2da60c, 0x06191552),
-           TOBN(0x5da8bbae, 0x61181ec3), TOBN(0x9f04b823, 0x65806f19)}},
-         {{TOBN(0xf1604a7d, 0xd4b79bb8), TOBN(0xaee806fb, 0x52c878c8),
-           TOBN(0x34144f11, 0x8d47b8e8), TOBN(0x72edf52b, 0x949f9054)},
-          {TOBN(0xebfca84e, 0x2127015a), TOBN(0x9051d0c0, 0x9cb7cef3),
-           TOBN(0x86e8fe58, 0x296deec8), TOBN(0x33b28188, 0x41010d74)}}},
-        {{{TOBN(0x01079383, 0x171b445f), TOBN(0x9bcf21e3, 0x8131ad4c),
-           TOBN(0x8cdfe205, 0xc93987e8), TOBN(0xe63f4152, 0xc92e8c8f)},
-          {TOBN(0x729462a9, 0x30add43d), TOBN(0x62ebb143, 0xc980f05a),
-           TOBN(0x4f3954e5, 0x3b06e968), TOBN(0xfe1d75ad, 0x242cf6b1)}},
-         {{TOBN(0x5f95c6c7, 0xaf8685c8), TOBN(0xd4c1c8ce, 0x2f8f01aa),
-           TOBN(0xc44bbe32, 0x2574692a), TOBN(0xb8003478, 0xd4a4a068)},
-          {TOBN(0x7c8fc6e5, 0x2eca3cdb), TOBN(0xea1db16b, 0xec04d399),
-           TOBN(0xb05bc82e, 0x8f2bc5cf), TOBN(0x763d517f, 0xf44793d2)}},
-         {{TOBN(0x4451c1b8, 0x08bd98d0), TOBN(0x644b1cd4, 0x6575f240),
-           TOBN(0x6907eb33, 0x7375d270), TOBN(0x56c8bebd, 0xfa2286bd)},
-          {TOBN(0xc713d2ac, 0xc4632b46), TOBN(0x17da427a, 0xafd60242),
-           TOBN(0x313065b7, 0xc95c7546), TOBN(0xf8239898, 0xbf17a3de)}},
-         {{TOBN(0xf3b7963f, 0x4c830320), TOBN(0x842c7aa0, 0x903203e3),
-           TOBN(0xaf22ca0a, 0xe7327afb), TOBN(0x38e13092, 0x967609b6)},
-          {TOBN(0x73b8fb62, 0x757558f1), TOBN(0x3cc3e831, 0xf7eca8c1),
-           TOBN(0xe4174474, 0xf6331627), TOBN(0xa77989ca, 0xc3c40234)}},
-         {{TOBN(0xe5fd17a1, 0x44a081e0), TOBN(0xd797fb7d, 0xb70e296a),
-           TOBN(0x2b472b30, 0x481f719c), TOBN(0x0e632a98, 0xfe6f8c52)},
-          {TOBN(0x89ccd116, 0xc5f0c284), TOBN(0xf51088af, 0x2d987c62),
-           TOBN(0x2a2bccda, 0x4c2de6cf), TOBN(0x810f9efe, 0xf679f0f9)}},
-         {{TOBN(0xb0f394b9, 0x7ffe4b3e), TOBN(0x0b691d21, 0xe5fa5d21),
-           TOBN(0xb0bd7747, 0x9dfbbc75), TOBN(0xd2830fda, 0xfaf78b00)},
-          {TOBN(0xf78c249c, 0x52434f57), TOBN(0x4b1f7545, 0x98096dab),
-           TOBN(0x73bf6f94, 0x8ff8c0b3), TOBN(0x34aef03d, 0x454e134c)}},
-         {{TOBN(0xf8d151f4, 0xb7ac7ec5), TOBN(0xd6ceb95a, 0xe50da7d5),
-           TOBN(0xa1b492b0, 0xdc3a0eb8), TOBN(0x75157b69, 0xb3dd2863)},
-          {TOBN(0xe2c4c74e, 0xc5413d62), TOBN(0xbe329ff7, 0xbc5fc4c7),
-           TOBN(0x835a2aea, 0x60fa9dda), TOBN(0xf117f5ad, 0x7445cb87)}},
-         {{TOBN(0xae8317f4, 0xb0166f7a), TOBN(0xfbd3e3f7, 0xceec74e6),
-           TOBN(0xfdb516ac, 0xe0874bfd), TOBN(0x3d846019, 0xc681f3a3)},
-          {TOBN(0x0b12ee5c, 0x7c1620b0), TOBN(0xba68b4dd, 0x2b63c501),
-           TOBN(0xac03cd32, 0x6668c51e), TOBN(0x2a6279f7, 0x4e0bcb5b)}},
-         {{TOBN(0x17bd69b0, 0x6ae85c10), TOBN(0x72946979, 0x1dfdd3a6),
-           TOBN(0xd9a03268, 0x2c078bec), TOBN(0x41c6a658, 0xbfd68a52)},
-          {TOBN(0xcdea1024, 0x0e023900), TOBN(0xbaeec121, 0xb10d144d),
-           TOBN(0x5a600e74, 0x058ab8dc), TOBN(0x1333af21, 0xbb89ccdd)}},
-         {{TOBN(0xdf25eae0, 0x3aaba1f1), TOBN(0x2cada16e, 0x3b7144cf),
-           TOBN(0x657ee27d, 0x71ab98bc), TOBN(0x99088b4c, 0x7a6fc96e)},
-          {TOBN(0x05d5c0a0, 0x3549dbd4), TOBN(0x42cbdf8f, 0xf158c3ac),
-           TOBN(0x3fb6b3b0, 0x87edd685), TOBN(0x22071cf6, 0x86f064d0)}},
-         {{TOBN(0xd2d6721f, 0xff2811e5), TOBN(0xdb81b703, 0xfe7fae8c),
-           TOBN(0x3cfb74ef, 0xd3f1f7bb), TOBN(0x0cdbcd76, 0x16cdeb5d)},
-          {TOBN(0x4f39642a, 0x566a808c), TOBN(0x02b74454, 0x340064d6),
-           TOBN(0xfabbadca, 0x0528fa6f), TOBN(0xe4c3074c, 0xd3fc0bb6)}},
-         {{TOBN(0xb32cb8b0, 0xb796d219), TOBN(0xc3e95f4f, 0x34741dd9),
-           TOBN(0x87212125, 0x68edf6f5), TOBN(0x7a03aee4, 0xa2b9cb8e)},
-          {TOBN(0x0cd3c376, 0xf53a89aa), TOBN(0x0d8af9b1, 0x948a28dc),
-           TOBN(0xcf86a3f4, 0x902ab04f), TOBN(0x8aacb62a, 0x7f42002d)}},
-         {{TOBN(0x106985eb, 0xf62ffd52), TOBN(0xe670b54e, 0x5797bf10),
-           TOBN(0x4b405209, 0xc5e30aef), TOBN(0x12c97a20, 0x4365b5e9)},
-          {TOBN(0x104646ce, 0x1fe32093), TOBN(0x13cb4ff6, 0x3907a8c9),
-           TOBN(0x8b9f30d1, 0xd46e726b), TOBN(0xe1985e21, 0xaba0f499)}},
-         {{TOBN(0xc573dea9, 0x10a230cd), TOBN(0x24f46a93, 0xcd30f947),
-           TOBN(0xf2623fcf, 0xabe2010a), TOBN(0x3f278cb2, 0x73f00e4f)},
-          {TOBN(0xed55c67d, 0x50b920eb), TOBN(0xf1cb9a2d, 0x8e760571),
-           TOBN(0x7c50d109, 0x0895b709), TOBN(0x4207cf07, 0x190d4369)}},
-         {{TOBN(0x3b027e81, 0xc4127fe1), TOBN(0xa9f8b9ad, 0x3ae9c566),
-           TOBN(0x5ab10851, 0xacbfbba5), TOBN(0xa747d648, 0x569556f5)},
-          {TOBN(0xcc172b5c, 0x2ba97bf7), TOBN(0x15e0f77d, 0xbcfa3324),
-           TOBN(0xa345b797, 0x7686279d), TOBN(0x5a723480, 0xe38003d3)}},
-         {{TOBN(0xfd8e139f, 0x8f5fcda8), TOBN(0xf3e558c4, 0xbdee5bfd),
-           TOBN(0xd76cbaf4, 0xe33f9f77), TOBN(0x3a4c97a4, 0x71771969)},
-          {TOBN(0xda27e84b, 0xf6dce6a7), TOBN(0xff373d96, 0x13e6c2d1),
-           TOBN(0xf115193c, 0xd759a6e9), TOBN(0x3f9b7025, 0x63d2262c)}},
-         {{TOBN(0xd9764a31, 0x317cd062), TOBN(0x30779d8e, 0x199f8332),
-           TOBN(0xd8074106, 0x16b11b0b), TOBN(0x7917ab9f, 0x78aeaed8)},
-          {TOBN(0xb67a9cbe, 0x28fb1d8e), TOBN(0x2e313563, 0x136eda33),
-           TOBN(0x010b7069, 0xa371a86c), TOBN(0x44d90fa2, 0x6744e6b7)}},
-         {{TOBN(0x68190867, 0xd6b3e243), TOBN(0x9fe6cd9d, 0x59048c48),
-           TOBN(0xb900b028, 0x95731538), TOBN(0xa012062f, 0x32cae04f)},
-          {TOBN(0x8107c8bc, 0x9399d082), TOBN(0x47e8c54a, 0x41df12e2),
-           TOBN(0x14ba5117, 0xb6ef3f73), TOBN(0x22260bea, 0x81362f0b)}},
-         {{TOBN(0x90ea261e, 0x1a18cc20), TOBN(0x2192999f, 0x2321d636),
-           TOBN(0xef64d314, 0xe311b6a0), TOBN(0xd7401e4c, 0x3b54a1f5)},
-          {TOBN(0x19019983, 0x6fbca2ba), TOBN(0x46ad3293, 0x8fbffc4b),
-           TOBN(0xa142d3f6, 0x3786bf40), TOBN(0xeb5cbc26, 0xb67039fc)}},
-         {{TOBN(0x9cb0ae6c, 0x252bd479), TOBN(0x05e0f88a, 0x12b5848f),
-           TOBN(0x78f6d2b2, 0xa5c97663), TOBN(0x6f6e149b, 0xc162225c)},
-          {TOBN(0xe602235c, 0xde601a89), TOBN(0xd17bbe98, 0xf373be1f),
-           TOBN(0xcaf49a5b, 0xa8471827), TOBN(0x7e1a0a85, 0x18aaa116)}},
-         {{TOBN(0x6c833196, 0x270580c3), TOBN(0x1e233839, 0xf1c98a14),
-           TOBN(0x67b2f7b4, 0xae34e0a5), TOBN(0x47ac8745, 0xd8ce7289)},
-          {TOBN(0x2b74779a, 0x100dd467), TOBN(0x274a4337, 0x4ee50d09),
-           TOBN(0x603dcf13, 0x83608bc9), TOBN(0xcd9da6c3, 0xc89e8388)}},
-         {{TOBN(0x2660199f, 0x355116ac), TOBN(0xcc38bb59, 0xb6d18eed),
-           TOBN(0x3075f31f, 0x2f4bc071), TOBN(0x9774457f, 0x265dc57e)},
-          {TOBN(0x06a6a9c8, 0xc6db88bb), TOBN(0x6429d07f, 0x4ec98e04),
-           TOBN(0x8d05e57b, 0x05ecaa8b), TOBN(0x20f140b1, 0x7872ea7b)}},
-         {{TOBN(0xdf8c0f09, 0xca494693), TOBN(0x48d3a020, 0xf252e909),
-           TOBN(0x4c5c29af, 0x57b14b12), TOBN(0x7e6fa37d, 0xbf47ad1c)},
-          {TOBN(0x66e7b506, 0x49a0c938), TOBN(0xb72c0d48, 0x6be5f41f),
-           TOBN(0x6a6242b8, 0xb2359412), TOBN(0xcd35c774, 0x8e859480)}},
-         {{TOBN(0x12536fea, 0x87baa627), TOBN(0x58c1fec1, 0xf72aa680),
-           TOBN(0x6c29b637, 0x601e5dc9), TOBN(0x9e3c3c1c, 0xde9e01b9)},
-          {TOBN(0xefc8127b, 0x2bcfe0b0), TOBN(0x35107102, 0x2a12f50d),
-           TOBN(0x6ccd6cb1, 0x4879b397), TOBN(0xf792f804, 0xf8a82f21)}},
-         {{TOBN(0x509d4804, 0xa9b46402), TOBN(0xedddf85d, 0xc10f0850),
-           TOBN(0x928410dc, 0x4b6208aa), TOBN(0xf6229c46, 0x391012dc)},
-          {TOBN(0xc5a7c41e, 0x7727b9b6), TOBN(0x289e4e4b, 0xaa444842),
-           TOBN(0x049ba1d9, 0xe9a947ea), TOBN(0x44f9e47f, 0x83c8debc)}},
-         {{TOBN(0xfa77a1fe, 0x611f8b8e), TOBN(0xfd2e416a, 0xf518f427),
-           TOBN(0xc5fffa70, 0x114ebac3), TOBN(0xfe57c4e9, 0x5d89697b)},
-          {TOBN(0xfdd053ac, 0xb1aaf613), TOBN(0x31df210f, 0xea585a45),
-           TOBN(0x318cc10e, 0x24985034), TOBN(0x1a38efd1, 0x5f1d6130)}},
-         {{TOBN(0xbf86f237, 0x0b1e9e21), TOBN(0xb258514d, 0x1dbe88aa),
-           TOBN(0x1e38a588, 0x90c1baf9), TOBN(0x2936a01e, 0xbdb9b692)},
-          {TOBN(0xd576de98, 0x6dd5b20c), TOBN(0xb586bf71, 0x70f98ecf),
-           TOBN(0xcccf0f12, 0xc42d2fd7), TOBN(0x8717e61c, 0xfb35bd7b)}},
-         {{TOBN(0x8b1e5722, 0x35e6fc06), TOBN(0x3477728f, 0x0b3e13d5),
-           TOBN(0x150c294d, 0xaa8a7372), TOBN(0xc0291d43, 0x3bfa528a)},
-          {TOBN(0xc6c8bc67, 0xcec5a196), TOBN(0xdeeb31e4, 0x5c2e8a7c),
-           TOBN(0xba93e244, 0xfb6e1c51), TOBN(0xb9f8b71b, 0x2e28e156)}},
-         {{TOBN(0xce65a287, 0x968a2ab9), TOBN(0xe3c5ce69, 0x46bbcb1f),
-           TOBN(0xf8c835b9, 0xe7ae3f30), TOBN(0x16bbee26, 0xff72b82b)},
-          {TOBN(0x665e2017, 0xfd42cd22), TOBN(0x1e139970, 0xf8b1d2a0),
-           TOBN(0x125cda29, 0x79204932), TOBN(0x7aee94a5, 0x49c3bee5)}},
-         {{TOBN(0x68c70160, 0x89821a66), TOBN(0xf7c37678, 0x8f981669),
-           TOBN(0xd90829fc, 0x48cc3645), TOBN(0x346af049, 0xd70addfc)},
-          {TOBN(0x2057b232, 0x370bf29c), TOBN(0xf90c73ce, 0x42e650ee),
-           TOBN(0xe03386ea, 0xa126ab90), TOBN(0x0e266e7e, 0x975a087b)}},
-         {{TOBN(0x80578eb9, 0x0fca65d9), TOBN(0x7e2989ea, 0x16af45b8),
-           TOBN(0x7438212d, 0xcac75a4e), TOBN(0x38c7ca39, 0x4fef36b8)},
-          {TOBN(0x8650c494, 0xd402676a), TOBN(0x26ab5a66, 0xf72c7c48),
-           TOBN(0x4e6cb426, 0xce3a464e), TOBN(0xf8f99896, 0x2b72f841)}},
-         {{TOBN(0x8c318491, 0x1a335cc8), TOBN(0x563459ba, 0x6a5913e4),
-           TOBN(0x1b920d61, 0xc7b32919), TOBN(0x805ab8b6, 0xa02425ad)},
-          {TOBN(0x2ac512da, 0x8d006086), TOBN(0x6ca4846a, 0xbcf5c0fd),
-           TOBN(0xafea51d8, 0xac2138d7), TOBN(0xcb647545, 0x344cd443)}},
-         {{TOBN(0x0429ee8f, 0xbd7d9040), TOBN(0xee66a2de, 0x819b9c96),
-           TOBN(0x54f9ec25, 0xdea7d744), TOBN(0x2ffea642, 0x671721bb)},
-          {TOBN(0x4f19dbd1, 0x114344ea), TOBN(0x04304536, 0xfd0dbc8b),
-           TOBN(0x014b50aa, 0x29ec7f91), TOBN(0xb5fc22fe, 0xbb06014d)}},
-         {{TOBN(0x60d963a9, 0x1ee682e0), TOBN(0xdf48abc0, 0xfe85c727),
-           TOBN(0x0cadba13, 0x2e707c2d), TOBN(0xde608d3a, 0xa645aeff)},
-          {TOBN(0x05f1c28b, 0xedafd883), TOBN(0x3c362ede, 0xbd94de1f),
-           TOBN(0x8dd0629d, 0x13593e41), TOBN(0x0a5e736f, 0x766d6eaf)}},
-         {{TOBN(0xbfa92311, 0xf68cf9d1), TOBN(0xa4f9ef87, 0xc1797556),
-           TOBN(0x10d75a1f, 0x5601c209), TOBN(0x651c374c, 0x09b07361)},
-          {TOBN(0x49950b58, 0x88b5cead), TOBN(0x0ef00058, 0x6fa9dbaa),
-           TOBN(0xf51ddc26, 0x4e15f33a), TOBN(0x1f8b5ca6, 0x2ef46140)}},
-         {{TOBN(0x343ac0a3, 0xee9523f0), TOBN(0xbb75eab2, 0x975ea978),
-           TOBN(0x1bccf332, 0x107387f4), TOBN(0x790f9259, 0x9ab0062e)},
-          {TOBN(0xf1a363ad, 0x1e4f6a5f), TOBN(0x06e08b84, 0x62519a50),
-           TOBN(0x60915187, 0x7265f1ee), TOBN(0x6a80ca34, 0x93ae985e)}},
-         {{TOBN(0x81b29768, 0xaaba4864), TOBN(0xb13cabf2, 0x8d52a7d6),
-           TOBN(0xb5c36348, 0x8ead03f1), TOBN(0xc932ad95, 0x81c7c1c0)},
-          {TOBN(0x5452708e, 0xcae1e27b), TOBN(0x9dac4269, 0x1b0df648),
-           TOBN(0x233e3f0c, 0xdfcdb8bc), TOBN(0xe6ceccdf, 0xec540174)}},
-         {{TOBN(0xbd0d845e, 0x95081181), TOBN(0xcc8a7920, 0x699355d5),
-           TOBN(0x111c0f6d, 0xc3b375a8), TOBN(0xfd95bc6b, 0xfd51e0dc)},
-          {TOBN(0x4a106a26, 0x6888523a), TOBN(0x4d142bd6, 0xcb01a06d),
-           TOBN(0x79bfd289, 0xadb9b397), TOBN(0x0bdbfb94, 0xe9863914)}},
-         {{TOBN(0x29d8a229, 0x1660f6a6), TOBN(0x7f6abcd6, 0x551c042d),
-           TOBN(0x13039deb, 0x0ac3ffe8), TOBN(0xa01be628, 0xec8523fb)},
-          {TOBN(0x6ea34103, 0x0ca1c328), TOBN(0xc74114bd, 0xb903928e),
-           TOBN(0x8aa4ff4e, 0x9e9144b0), TOBN(0x7064091f, 0x7f9a4b17)}},
-         {{TOBN(0xa3f4f521, 0xe447f2c4), TOBN(0x81b8da7a, 0x604291f0),
-           TOBN(0xd680bc46, 0x7d5926de), TOBN(0x84f21fd5, 0x34a1202f)},
-          {TOBN(0x1d1e3181, 0x4e9df3d8), TOBN(0x1ca4861a, 0x39ab8d34),
-           TOBN(0x809ddeec, 0x5b19aa4a), TOBN(0x59f72f7e, 0x4d329366)}},
-         {{TOBN(0xa2f93f41, 0x386d5087), TOBN(0x40bf739c, 0xdd67d64f),
-           TOBN(0xb4494205, 0x66702158), TOBN(0xc33c65be, 0x73b1e178)},
-          {TOBN(0xcdcd657c, 0x38ca6153), TOBN(0x97f4519a, 0xdc791976),
-           TOBN(0xcc7c7f29, 0xcd6e1f39), TOBN(0x38de9cfb, 0x7e3c3932)}},
-         {{TOBN(0xe448eba3, 0x7b793f85), TOBN(0xe9f8dbf9, 0xf067e914),
-           TOBN(0xc0390266, 0xf114ae87), TOBN(0x39ed75a7, 0xcd6a8e2a)},
-          {TOBN(0xadb14848, 0x7ffba390), TOBN(0x67f8cb8b, 0x6af9bc09),
-           TOBN(0x322c3848, 0x9c7476db), TOBN(0xa320fecf, 0x52a538d6)}},
-         {{TOBN(0xe0493002, 0xb2aced2b), TOBN(0xdfba1809, 0x616bd430),
-           TOBN(0x531c4644, 0xc331be70), TOBN(0xbc04d32e, 0x90d2e450)},
-          {TOBN(0x1805a0d1, 0x0f9f142d), TOBN(0x2c44a0c5, 0x47ee5a23),
-           TOBN(0x31875a43, 0x3989b4e3), TOBN(0x6b1949fd, 0x0c063481)}},
-         {{TOBN(0x2dfb9e08, 0xbe0f4492), TOBN(0x3ff0da03, 0xe9d5e517),
-           TOBN(0x03dbe9a1, 0xf79466a8), TOBN(0x0b87bcd0, 0x15ea9932)},
-          {TOBN(0xeb64fc83, 0xab1f58ab), TOBN(0x6d9598da, 0x817edc8a),
-           TOBN(0x699cff66, 0x1d3b67e5), TOBN(0x645c0f29, 0x92635853)}},
-         {{TOBN(0x253cdd82, 0xeabaf21c), TOBN(0x82b9602a, 0x2241659e),
-           TOBN(0x2cae07ec, 0x2d9f7091), TOBN(0xbe4c720c, 0x8b48cd9b)},
-          {TOBN(0x6ce5bc03, 0x6f08d6c9), TOBN(0x36e8a997, 0xaf10bf40),
-           TOBN(0x83422d21, 0x3e10ff12), TOBN(0x7b26d3eb, 0xbcc12494)}},
-         {{TOBN(0xb240d2d0, 0xc9469ad6), TOBN(0xc4a11b4d, 0x30afa05b),
-           TOBN(0x4b604ace, 0xdd6ba286), TOBN(0x18486600, 0x3ee2864c)},
-          {TOBN(0x5869d6ba, 0x8d9ce5be), TOBN(0x0d8f68c5, 0xff4bfb0d),
-           TOBN(0xb69f210b, 0x5700cf73), TOBN(0x61f6653a, 0x6d37c135)}},
-         {{TOBN(0xff3d432b, 0x5aff5a48), TOBN(0x0d81c4b9, 0x72ba3a69),
-           TOBN(0xee879ae9, 0xfa1899ef), TOBN(0xbac7e2a0, 0x2d6acafd)},
-          {TOBN(0xd6d93f6c, 0x1c664399), TOBN(0x4c288de1, 0x5bcb135d),
-           TOBN(0x83031dab, 0x9dab7cbf), TOBN(0xfe23feb0, 0x3abbf5f0)}},
-         {{TOBN(0x9f1b2466, 0xcdedca85), TOBN(0x140bb710, 0x1a09538c),
-           TOBN(0xac8ae851, 0x5e11115d), TOBN(0x0d63ff67, 0x6f03f59e)},
-          {TOBN(0x755e5551, 0x7d234afb), TOBN(0x61c2db4e, 0x7e208fc1),
-           TOBN(0xaa9859ce, 0xf28a4b5d), TOBN(0xbdd6d4fc, 0x34af030f)}},
-         {{TOBN(0xd1c4a26d, 0x3be01cb1), TOBN(0x9ba14ffc, 0x243aa07c),
-           TOBN(0xf95cd3a9, 0xb2503502), TOBN(0xe379bc06, 0x7d2a93ab)},
-          {TOBN(0x3efc18e9, 0xd4ca8d68), TOBN(0x083558ec, 0x80bb412a),
-           TOBN(0xd903b940, 0x9645a968), TOBN(0xa499f0b6, 0x9ba6054f)}},
-         {{TOBN(0x208b573c, 0xb8349abe), TOBN(0x3baab3e5, 0x30b4fc1c),
-           TOBN(0x87e978ba, 0xcb524990), TOBN(0x3524194e, 0xccdf0e80)},
-          {TOBN(0x62711725, 0x7d4bcc42), TOBN(0xe90a3d9b, 0xb90109ba),
-           TOBN(0x3b1bdd57, 0x1323e1e0), TOBN(0xb78e9bd5, 0x5eae1599)}},
-         {{TOBN(0x0794b746, 0x9e03d278), TOBN(0x80178605, 0xd70e6297),
-           TOBN(0x171792f8, 0x99c97855), TOBN(0x11b393ee, 0xf5a86b5c)},
-          {TOBN(0x48ef6582, 0xd8884f27), TOBN(0xbd44737a, 0xbf19ba5f),
-           TOBN(0x8698de4c, 0xa42062c6), TOBN(0x8975eb80, 0x61ce9c54)}},
-         {{TOBN(0xd50e57c7, 0xd7fe71f3), TOBN(0x15342190, 0xbc97ce38),
-           TOBN(0x51bda2de, 0x4df07b63), TOBN(0xba12aeae, 0x200eb87d)},
-          {TOBN(0xabe135d2, 0xa9b4f8f6), TOBN(0x04619d65, 0xfad6d99c),
-           TOBN(0x4a6683a7, 0x7994937c), TOBN(0x7a778c8b, 0x6f94f09a)}},
-         {{TOBN(0x8c508623, 0x20a71b89), TOBN(0x241a2aed, 0x1c229165),
-           TOBN(0x352be595, 0xaaf83a99), TOBN(0x9fbfee7f, 0x1562bac8)},
-          {TOBN(0xeaf658b9, 0x5c4017e3), TOBN(0x1dc7f9e0, 0x15120b86),
-           TOBN(0xd84f13dd, 0x4c034d6f), TOBN(0x283dd737, 0xeaea3038)}},
-         {{TOBN(0x197f2609, 0xcd85d6a2), TOBN(0x6ebbc345, 0xfae60177),
-           TOBN(0xb80f031b, 0x4e12fede), TOBN(0xde55d0c2, 0x07a2186b)},
-          {TOBN(0x1fb3e37f, 0x24dcdd5a), TOBN(0x8d602da5, 0x7ed191fb),
-           TOBN(0x108fb056, 0x76023e0d), TOBN(0x70178c71, 0x459c20c0)}},
-         {{TOBN(0xfad5a386, 0x3fe54cf0), TOBN(0xa4a3ec4f, 0x02bbb475),
-           TOBN(0x1aa5ec20, 0x919d94d7), TOBN(0x5d3b63b5, 0xa81e4ab3)},
-          {TOBN(0x7fa733d8, 0x5ad3d2af), TOBN(0xfbc586dd, 0xd1ac7a37),
-           TOBN(0x282925de, 0x40779614), TOBN(0xfe0ffffb, 0xe74a242a)}},
-         {{TOBN(0x3f39e67f, 0x906151e5), TOBN(0xcea27f5f, 0x55e10649),
-           TOBN(0xdca1d4e1, 0xc17cf7b7), TOBN(0x0c326d12, 0x2fe2362d)},
-          {TOBN(0x05f7ac33, 0x7dd35df3), TOBN(0x0c3b7639, 0xc396dbdf),
-           TOBN(0x0912f5ac, 0x03b7db1c), TOBN(0x9dea4b70, 0x5c9ed4a9)}},
-         {{TOBN(0x475e6e53, 0xaae3f639), TOBN(0xfaba0e7c, 0xfc278bac),
-           TOBN(0x16f9e221, 0x9490375f), TOBN(0xaebf9746, 0xa5a7ed0a)},
-          {TOBN(0x45f9af3f, 0xf41ad5d6), TOBN(0x03c4623c, 0xb2e99224),
-           TOBN(0x82c5bb5c, 0xb3cf56aa), TOBN(0x64311819, 0x34567ed3)}},
-         {{TOBN(0xec57f211, 0x8be489ac), TOBN(0x2821895d, 0xb9a1104b),
-           TOBN(0x610dc875, 0x6064e007), TOBN(0x8e526f3f, 0x5b20d0fe)},
-          {TOBN(0x6e71ca77, 0x5b645aee), TOBN(0x3d1dcb9f, 0x800e10ff),
-           TOBN(0x36b51162, 0x189cf6de), TOBN(0x2c5a3e30, 0x6bb17353)}},
-         {{TOBN(0xc186cd3e, 0x2a6c6fbf), TOBN(0xa74516fa, 0x4bf97906),
-           TOBN(0x5b4b8f4b, 0x279d6901), TOBN(0x0c4e57b4, 0x2b573743)},
-          {TOBN(0x75fdb229, 0xb6e386b6), TOBN(0xb46793fd, 0x99deac27),
-           TOBN(0xeeec47ea, 0xcf712629), TOBN(0xe965f3c4, 0xcbc3b2dd)}},
-         {{TOBN(0x8dd1fb83, 0x425c6559), TOBN(0x7fc00ee6, 0x0af06fda),
-           TOBN(0xe98c9225, 0x33d956df), TOBN(0x0f1ef335, 0x4fbdc8a2)},
-          {TOBN(0x2abb5145, 0xb79b8ea2), TOBN(0x40fd2945, 0xbdbff288),
-           TOBN(0x6a814ac4, 0xd7185db7), TOBN(0xc4329d6f, 0xc084609a)}},
-         {{TOBN(0xc9ba7b52, 0xed1be45d), TOBN(0x891dd20d, 0xe4cd2c74),
-           TOBN(0x5a4d4a7f, 0x824139b1), TOBN(0x66c17716, 0xb873c710)},
-          {TOBN(0x5e5bc141, 0x2843c4e0), TOBN(0xd5ac4817, 0xb97eb5bf),
-           TOBN(0xc0f8af54, 0x450c95c7), TOBN(0xc91b3fa0, 0x318406c5)}},
-         {{TOBN(0x360c340a, 0xab9d97f8), TOBN(0xfb57bd07, 0x90a2d611),
-           TOBN(0x4339ae3c, 0xa6a6f7e5), TOBN(0x9c1fcd2a, 0x2feb8a10)},
-          {TOBN(0x972bcca9, 0xc7ea7432), TOBN(0x1b0b924c, 0x308076f6),
-           TOBN(0x80b2814a, 0x2a5b4ca5), TOBN(0x2f78f55b, 0x61ef3b29)}},
-         {{TOBN(0xf838744a, 0xc18a414f), TOBN(0xc611eaae, 0x903d0a86),
-           TOBN(0x94dabc16, 0x2a453f55), TOBN(0xe6f2e3da, 0x14efb279)},
-          {TOBN(0x5b7a6017, 0x9320dc3c), TOBN(0x692e382f, 0x8df6b5a4),
-           TOBN(0x3f5e15e0, 0x2d40fa90), TOBN(0xc87883ae, 0x643dd318)}},
-         {{TOBN(0x511053e4, 0x53544774), TOBN(0x834d0ecc, 0x3adba2bc),
-           TOBN(0x4215d7f7, 0xbae371f5), TOBN(0xfcfd57bf, 0x6c8663bc)},
-          {TOBN(0xded2383d, 0xd6901b1d), TOBN(0x3b49fbb4, 0xb5587dc3),
-           TOBN(0xfd44a08d, 0x07625f62), TOBN(0x3ee4d65b, 0x9de9b762)}}},
-        {{{TOBN(0x64e5137d, 0x0d63d1fa), TOBN(0x658fc052, 0x02a9d89f),
-           TOBN(0x48894874, 0x50436309), TOBN(0xe9ae30f8, 0xd598da61)},
-          {TOBN(0x2ed710d1, 0x818baf91), TOBN(0xe27e9e06, 0x8b6a0c20),
-           TOBN(0x1e28dcfb, 0x1c1a6b44), TOBN(0x883acb64, 0xd6ac57dc)}},
-         {{TOBN(0x8735728d, 0xc2c6ff70), TOBN(0x79d6122f, 0xc5dc2235),
-           TOBN(0x23f5d003, 0x19e277f9), TOBN(0x7ee84e25, 0xdded8cc7)},
-          {TOBN(0x91a8afb0, 0x63cd880a), TOBN(0x3f3ea7c6, 0x3574af60),
-           TOBN(0x0cfcdc84, 0x02de7f42), TOBN(0x62d0792f, 0xb31aa152)}},
-         {{TOBN(0x8e1b4e43, 0x8a5807ce), TOBN(0xad283893, 0xe4109a7e),
-           TOBN(0xc30cc9cb, 0xafd59dda), TOBN(0xf65f36c6, 0x3d8d8093)},
-          {TOBN(0xdf31469e, 0xa60d32b2), TOBN(0xee93df4b, 0x3e8191c8),
-           TOBN(0x9c1017c5, 0x355bdeb5), TOBN(0xd2623185, 0x8616aa28)}},
-         {{TOBN(0xb02c83f9, 0xdec31a21), TOBN(0x988c8b23, 0x6ad9d573),
-           TOBN(0x53e983ae, 0xa57be365), TOBN(0xe968734d, 0x646f834e)},
-          {TOBN(0x9137ea8f, 0x5da6309b), TOBN(0x10f3a624, 0xc1f1ce16),
-           TOBN(0x782a9ea2, 0xca440921), TOBN(0xdf94739e, 0x5b46f1b5)}},
-         {{TOBN(0x9f9be006, 0xcce85c9b), TOBN(0x360e70d6, 0xa4c7c2d3),
-           TOBN(0x2cd5beea, 0xaefa1e60), TOBN(0x64cf63c0, 0x8c3d2b6d)},
-          {TOBN(0xfb107fa3, 0xe1cf6f90), TOBN(0xb7e937c6, 0xd5e044e6),
-           TOBN(0x74e8ca78, 0xce34db9f), TOBN(0x4f8b36c1, 0x3e210bd0)}},
-         {{TOBN(0x1df165a4, 0x34a35ea8), TOBN(0x3418e0f7, 0x4d4412f6),
-           TOBN(0x5af1f8af, 0x518836c3), TOBN(0x42ceef4d, 0x130e1965)},
-          {TOBN(0x5560ca0b, 0x543a1957), TOBN(0xc33761e5, 0x886cb123),
-           TOBN(0x66624b1f, 0xfe98ed30), TOBN(0xf772f4bf, 0x1090997d)}},
-         {{TOBN(0xf4e540bb, 0x4885d410), TOBN(0x7287f810, 0x9ba5f8d7),
-           TOBN(0x22d0d865, 0xde98dfb1), TOBN(0x49ff51a1, 0xbcfbb8a3)},
-          {TOBN(0xb6b6fa53, 0x6bc3012e), TOBN(0x3d31fd72, 0x170d541d),
-           TOBN(0x8018724f, 0x4b0f4966), TOBN(0x79e7399f, 0x87dbde07)}},
-         {{TOBN(0x56f8410e, 0xf4f8b16a), TOBN(0x97241afe, 0xc47b266a),
-           TOBN(0x0a406b8e, 0x6d9c87c1), TOBN(0x803f3e02, 0xcd42ab1b)},
-          {TOBN(0x7f0309a8, 0x04dbec69), TOBN(0xa83b85f7, 0x3bbad05f),
-           TOBN(0xc6097273, 0xad8e197f), TOBN(0xc097440e, 0x5067adc1)}},
-         {{TOBN(0x730eafb6, 0x3524ff16), TOBN(0xd7f9b51e, 0x823fc6ce),
-           TOBN(0x27bd0d32, 0x443e4ac0), TOBN(0x40c59ad9, 0x4d66f217)},
-          {TOBN(0x6c33136f, 0x17c387a4), TOBN(0x5043b8d5, 0xeb86804d),
-           TOBN(0x74970312, 0x675a73c9), TOBN(0x838fdb31, 0xf16669b6)}},
-         {{TOBN(0xc507b6dd, 0x418e7ddd), TOBN(0x39888d93, 0x472f19d6),
-           TOBN(0x7eae26be, 0x0c27eb4d), TOBN(0x17b53ed3, 0xfbabb884)},
-          {TOBN(0xfc27021b, 0x2b01ae4f), TOBN(0x88462e87, 0xcf488682),
-           TOBN(0xbee096ec, 0x215e2d87), TOBN(0xeb2fea9a, 0xd242e29b)}},
-         {{TOBN(0x5d985b5f, 0xb821fc28), TOBN(0x89d2e197, 0xdc1e2ad2),
-           TOBN(0x55b566b8, 0x9030ba62), TOBN(0xe3fd41b5, 0x4f41b1c6)},
-          {TOBN(0xb738ac2e, 0xb9a96d61), TOBN(0x7f8567ca, 0x369443f4),
-           TOBN(0x8698622d, 0xf803a440), TOBN(0x2b586236, 0x8fe2f4dc)}},
-         {{TOBN(0xbbcc00c7, 0x56b95bce), TOBN(0x5ec03906, 0x616da680),
-           TOBN(0x79162ee6, 0x72214252), TOBN(0x43132b63, 0x86a892d2)},
-          {TOBN(0x4bdd3ff2, 0x2f3263bf), TOBN(0xd5b3733c, 0x9cd0a142),
-           TOBN(0x592eaa82, 0x44415ccb), TOBN(0x663e8924, 0x8d5474ea)}},
-         {{TOBN(0x8058a25e, 0x5236344e), TOBN(0x82e8df9d, 0xbda76ee6),
-           TOBN(0xdcf6efd8, 0x11cc3d22), TOBN(0x00089cda, 0x3b4ab529)},
-          {TOBN(0x91d3a071, 0xbd38a3db), TOBN(0x4ea97fc0, 0xef72b925),
-           TOBN(0x0c9fc15b, 0xea3edf75), TOBN(0x5a6297cd, 0xa4348ed3)}},
-         {{TOBN(0x0d38ab35, 0xce7c42d4), TOBN(0x9fd493ef, 0x82feab10),
-           TOBN(0x46056b6d, 0x82111b45), TOBN(0xda11dae1, 0x73efc5c3)},
-          {TOBN(0xdc740278, 0x5545a7fb), TOBN(0xbdb2601c, 0x40d507e6),
-           TOBN(0x121dfeeb, 0x7066fa58), TOBN(0x214369a8, 0x39ae8c2a)}},
-         {{TOBN(0x195709cb, 0x06e0956c), TOBN(0x4c9d254f, 0x010cd34b),
-           TOBN(0xf51e13f7, 0x0471a532), TOBN(0xe19d6791, 0x1e73054d)},
-          {TOBN(0xf702a628, 0xdb5c7be3), TOBN(0xc7141218, 0xb24dde05),
-           TOBN(0xdc18233c, 0xf29b2e2e), TOBN(0x3a6bd1e8, 0x85342dba)}},
-         {{TOBN(0x3f747fa0, 0xb311898c), TOBN(0xe2a272e4, 0xcd0eac65),
-           TOBN(0x4bba5851, 0xf914d0bc), TOBN(0x7a1a9660, 0xc4a43ee3)},
-          {TOBN(0xe5a367ce, 0xa1c8cde9), TOBN(0x9d958ba9, 0x7271abe3),
-           TOBN(0xf3ff7eb6, 0x3d1615cd), TOBN(0xa2280dce, 0xf5ae20b0)}},
-         {{TOBN(0x56dba5c1, 0xcf640147), TOBN(0xea5a2e3d, 0x5e83d118),
-           TOBN(0x04cd6b6d, 0xda24c511), TOBN(0x1c0f4671, 0xe854d214)},
-          {TOBN(0x91a6b7a9, 0x69565381), TOBN(0xdc966240, 0xdecf1f5b),
-           TOBN(0x1b22d21c, 0xfcf5d009), TOBN(0x2a05f641, 0x9021dbd5)}},
-         {{TOBN(0x8c0ed566, 0xd4312483), TOBN(0x5179a95d, 0x643e216f),
-           TOBN(0xcc185fec, 0x17044493), TOBN(0xb3063339, 0x54991a21)},
-          {TOBN(0xd801ecdb, 0x0081a726), TOBN(0x0149b0c6, 0x4fa89bbb),
-           TOBN(0xafe9065a, 0x4391b6b9), TOBN(0xedc92786, 0xd633f3a3)}},
-         {{TOBN(0xe408c24a, 0xae6a8e13), TOBN(0x85833fde, 0x9f3897ab),
-           TOBN(0x43800e7e, 0xd81a0715), TOBN(0xde08e346, 0xb44ffc5f)},
-          {TOBN(0x7094184c, 0xcdeff2e0), TOBN(0x49f9387b, 0x165eaed1),
-           TOBN(0x635d6129, 0x777c468a), TOBN(0x8c0dcfd1, 0x538c2dd8)}},
-         {{TOBN(0xd6d9d9e3, 0x7a6a308b), TOBN(0x62375830, 0x4c2767d3),
-           TOBN(0x874a8bc6, 0xf38cbeb6), TOBN(0xd94d3f1a, 0xccb6fd9e)},
-          {TOBN(0x92a9735b, 0xba21f248), TOBN(0x272ad0e5, 0x6cd1efb0),
-           TOBN(0x7437b69c, 0x05b03284), TOBN(0xe7f04702, 0x6948c225)}},
-         {{TOBN(0x8a56c04a, 0xcba2ecec), TOBN(0x0c181270, 0xe3a73e41),
-           TOBN(0x6cb34e9d, 0x03e93725), TOBN(0xf77c8713, 0x496521a9)},
-          {TOBN(0x94569183, 0xfa7f9f90), TOBN(0xf2e7aa4c, 0x8c9707ad),
-           TOBN(0xced2c9ba, 0x26c1c9a3), TOBN(0x9109fe96, 0x40197507)}},
-         {{TOBN(0x9ae868a9, 0xe9adfe1c), TOBN(0x3984403d, 0x314e39bb),
-           TOBN(0xb5875720, 0xf2fe378f), TOBN(0x33f901e0, 0xba44a628)},
-          {TOBN(0xea1125fe, 0x3652438c), TOBN(0xae9ec4e6, 0x9dd1f20b),
-           TOBN(0x1e740d9e, 0xbebf7fbd), TOBN(0x6dbd3ddc, 0x42dbe79c)}},
-         {{TOBN(0x62082aec, 0xedd36776), TOBN(0xf612c478, 0xe9859039),
-           TOBN(0xa493b201, 0x032f7065), TOBN(0xebd4d8f2, 0x4ff9b211)},
-          {TOBN(0x3f23a0aa, 0xaac4cb32), TOBN(0xea3aadb7, 0x15ed4005),
-           TOBN(0xacf17ea4, 0xafa27e63), TOBN(0x56125c1a, 0xc11fd66c)}},
-         {{TOBN(0x266344a4, 0x3794f8dc), TOBN(0xdcca923a, 0x483c5c36),
-           TOBN(0x2d6b6bbf, 0x3f9d10a0), TOBN(0xb320c5ca, 0x81d9bdf3)},
-          {TOBN(0x620e28ff, 0x47b50a95), TOBN(0x933e3b01, 0xcef03371),
-           TOBN(0xf081bf85, 0x99100153), TOBN(0x183be9a0, 0xc3a8c8d6)}},
-         {{TOBN(0x4e3ddc5a, 0xd6bbe24d), TOBN(0xc6c74630, 0x53843795),
-           TOBN(0x78193dd7, 0x65ec2d4c), TOBN(0xb8df26cc, 0xcd3c89b2)},
-          {TOBN(0x98dbe399, 0x5a483f8d), TOBN(0x72d8a957, 0x7dd3313a),
-           TOBN(0x65087294, 0xab0bd375), TOBN(0xfcd89248, 0x7c259d16)}},
-         {{TOBN(0x8a9443d7, 0x7613aa81), TOBN(0x80100800, 0x85fe6584),
-           TOBN(0x70fc4dbc, 0x7fb10288), TOBN(0xf58280d3, 0xe86beee8)},
-          {TOBN(0x14fdd82f, 0x7c978c38), TOBN(0xdf1204c1, 0x0de44d7b),
-           TOBN(0xa08a1c84, 0x4160252f), TOBN(0x591554ca, 0xc17646a5)}},
-         {{TOBN(0x214a37d6, 0xa05bd525), TOBN(0x48d5f09b, 0x07957b3c),
-           TOBN(0x0247cdcb, 0xd7109bc9), TOBN(0x40f9e4bb, 0x30599ce7)},
-          {TOBN(0xc325fa03, 0xf46ad2ec), TOBN(0x00f766cf, 0xc3e3f9ee),
-           TOBN(0xab556668, 0xd43a4577), TOBN(0x68d30a61, 0x3ee03b93)}},
-         {{TOBN(0x7ddc81ea, 0x77b46a08), TOBN(0xcf5a6477, 0xc7480699),
-           TOBN(0x43a8cb34, 0x6633f683), TOBN(0x1b867e6b, 0x92363c60)},
-          {TOBN(0x43921114, 0x1f60558e), TOBN(0xcdbcdd63, 0x2f41450e),
-           TOBN(0x7fc04601, 0xcc630e8b), TOBN(0xea7c66d5, 0x97038b43)}},
-         {{TOBN(0x7259b8a5, 0x04e99fd8), TOBN(0x98a8dd12, 0x4785549a),
-           TOBN(0x0e459a7c, 0x840552e1), TOBN(0xcdfcf4d0, 0x4bb0909e)},
-          {TOBN(0x34a86db2, 0x53758da7), TOBN(0xe643bb83, 0xeac997e1),
-           TOBN(0x96400bd7, 0x530c5b7e), TOBN(0x9f97af87, 0xb41c8b52)}},
-         {{TOBN(0x34fc8820, 0xfbeee3f9), TOBN(0x93e53490, 0x49091afd),
-           TOBN(0x764b9be5, 0x9a31f35c), TOBN(0x71f37864, 0x57e3d924)},
-          {TOBN(0x02fb34e0, 0x943aa75e), TOBN(0xa18c9c58, 0xab8ff6e4),
-           TOBN(0x080f31b1, 0x33cf0d19), TOBN(0x5c9682db, 0x083518a7)}},
-         {{TOBN(0x873d4ca6, 0xb709c3de), TOBN(0x64a84262, 0x3575b8f0),
-           TOBN(0x6275da1f, 0x020154bb), TOBN(0x97678caa, 0xd17cf1ab)},
-          {TOBN(0x8779795f, 0x951a95c3), TOBN(0xdd35b163, 0x50fccc08),
-           TOBN(0x32709627, 0x33d8f031), TOBN(0x3c5ab10a, 0x498dd85c)}},
-         {{TOBN(0xb6c185c3, 0x41dca566), TOBN(0x7de7feda, 0xd8622aa3),
-           TOBN(0x99e84d92, 0x901b6dfb), TOBN(0x30a02b0e, 0x7c4ad288)},
-          {TOBN(0xc7c81daa, 0x2fd3cf36), TOBN(0xd1319547, 0xdf89e59f),
-           TOBN(0xb2be8184, 0xcd496733), TOBN(0xd5f449eb, 0x93d3412b)}},
-         {{TOBN(0x7ea41b1b, 0x25fe531d), TOBN(0xf9797432, 0x6a1d5646),
-           TOBN(0x86067f72, 0x2bde501a), TOBN(0xf91481c0, 0x0c85e89c)},
-          {TOBN(0xca8ee465, 0xf8b05bc6), TOBN(0x1844e1cf, 0x02e83cda),
-           TOBN(0xca82114a, 0xb4dbe33b), TOBN(0x0f9f8769, 0x4eabfde2)}},
-         {{TOBN(0x4936b1c0, 0x38b27fe2), TOBN(0x63b6359b, 0xaba402df),
-           TOBN(0x40c0ea2f, 0x656bdbab), TOBN(0x9c992a89, 0x6580c39c)},
-          {TOBN(0x600e8f15, 0x2a60aed1), TOBN(0xeb089ca4, 0xe0bf49df),
-           TOBN(0x9c233d7d, 0x2d42d99a), TOBN(0x648d3f95, 0x4c6bc2fa)}},
-         {{TOBN(0xdcc383a8, 0xe1add3f3), TOBN(0xf42c0c6a, 0x4f64a348),
-           TOBN(0x2abd176f, 0x0030dbdb), TOBN(0x4de501a3, 0x7d6c215e)},
-          {TOBN(0x4a107c1f, 0x4b9a64bc), TOBN(0xa77f0ad3, 0x2496cd59),
-           TOBN(0xfb78ac62, 0x7688dffb), TOBN(0x7025a2ca, 0x67937d8e)}},
-         {{TOBN(0xfde8b2d1, 0xd1a8f4e7), TOBN(0xf5b3da47, 0x7354927c),
-           TOBN(0xe48606a3, 0xd9205735), TOBN(0xac477cc6, 0xe177b917)},
-          {TOBN(0xfb1f73d2, 0xa883239a), TOBN(0xe12572f6, 0xcc8b8357),
-           TOBN(0x9d355e9c, 0xfb1f4f86), TOBN(0x89b795f8, 0xd9f3ec6e)}},
-         {{TOBN(0x27be56f1, 0xb54398dc), TOBN(0x1890efd7, 0x3fedeed5),
-           TOBN(0x62f77f1f, 0x9c6d0140), TOBN(0x7ef0e314, 0x596f0ee4)},
-          {TOBN(0x50ca6631, 0xcc61dab3), TOBN(0x4a39801d, 0xf4866e4f),
-           TOBN(0x66c8d032, 0xae363b39), TOBN(0x22c591e5, 0x2ead66aa)}},
-         {{TOBN(0x954ba308, 0xde02a53e), TOBN(0x2a6c060f, 0xd389f357),
-           TOBN(0xe6cfcde8, 0xfbf40b66), TOBN(0x8e02fc56, 0xc6340ce1)},
-          {TOBN(0xe4957795, 0x73adb4ba), TOBN(0x7b86122c, 0xa7b03805),
-           TOBN(0x63f83512, 0x0c8e6fa6), TOBN(0x83660ea0, 0x057d7804)}},
-         {{TOBN(0xbad79105, 0x21ba473c), TOBN(0xb6c50bee, 0xded5389d),
-           TOBN(0xee2caf4d, 0xaa7c9bc0), TOBN(0xd97b8de4, 0x8c4e98a7)},
-          {TOBN(0xa9f63e70, 0xab3bbddb), TOBN(0x3898aabf, 0x2597815a),
-           TOBN(0x7659af89, 0xac15b3d9), TOBN(0xedf7725b, 0x703ce784)}},
-         {{TOBN(0x25470fab, 0xe085116b), TOBN(0x04a43375, 0x87285310),
-           TOBN(0x4e39187e, 0xe2bfd52f), TOBN(0x36166b44, 0x7d9ebc74)},
-          {TOBN(0x92ad433c, 0xfd4b322c), TOBN(0x726aa817, 0xba79ab51),
-           TOBN(0xf96eacd8, 0xc1db15eb), TOBN(0xfaf71e91, 0x0476be63)}},
-         {{TOBN(0xdd69a640, 0x641fad98), TOBN(0xb7995918, 0x29622559),
-           TOBN(0x03c6daa5, 0xde4199dc), TOBN(0x92cadc97, 0xad545eb4)},
-          {TOBN(0x1028238b, 0x256534e4), TOBN(0x73e80ce6, 0x8595409a),
-           TOBN(0x690d4c66, 0xd05dc59b), TOBN(0xc95f7b8f, 0x981dee80)}},
-         {{TOBN(0xf4337014, 0xd856ac25), TOBN(0x441bd9dd, 0xac524dca),
-           TOBN(0x640b3d85, 0x5f0499f5), TOBN(0x39cf84a9, 0xd5fda182)},
-          {TOBN(0x04e7b055, 0xb2aa95a0), TOBN(0x29e33f0a, 0x0ddf1860),
-           TOBN(0x082e74b5, 0x423f6b43), TOBN(0x217edeb9, 0x0aaa2b0f)}},
-         {{TOBN(0x58b83f35, 0x83cbea55), TOBN(0xc485ee4d, 0xbc185d70),
-           TOBN(0x833ff03b, 0x1e5f6992), TOBN(0xb5b9b9cc, 0xcf0c0dd5)},
-          {TOBN(0x7caaee8e, 0x4e9e8a50), TOBN(0x462e907b, 0x6269dafd),
-           TOBN(0x6ed5cee9, 0xfbe791c6), TOBN(0x68ca3259, 0xed430790)}},
-         {{TOBN(0x2b72bdf2, 0x13b5ba88), TOBN(0x60294c8a, 0x35ef0ac4),
-           TOBN(0x9c3230ed, 0x19b99b08), TOBN(0x560fff17, 0x6c2589aa)},
-          {TOBN(0x552b8487, 0xd6770374), TOBN(0xa373202d, 0x9a56f685),
-           TOBN(0xd3e7f907, 0x45f175d9), TOBN(0x3c2f315f, 0xd080d810)}},
-         {{TOBN(0x1130e9dd, 0x7b9520e8), TOBN(0xc078f9e2, 0x0af037b5),
-           TOBN(0x38cd2ec7, 0x1e9c104c), TOBN(0x0f684368, 0xc472fe92)},
-          {TOBN(0xd3f1b5ed, 0x6247e7ef), TOBN(0xb32d33a9, 0x396dfe21),
-           TOBN(0x46f59cf4, 0x4a9aa2c2), TOBN(0x69cd5168, 0xff0f7e41)}},
-         {{TOBN(0x3f59da0f, 0x4b3234da), TOBN(0xcf0b0235, 0xb4579ebe),
-           TOBN(0x6d1cbb25, 0x6d2476c7), TOBN(0x4f0837e6, 0x9dc30f08)},
-          {TOBN(0x9a4075bb, 0x906f6e98), TOBN(0x253bb434, 0xc761e7d1),
-           TOBN(0xde2e645f, 0x6e73af10), TOBN(0xb89a4060, 0x0c5f131c)}},
-         {{TOBN(0xd12840c5, 0xb8cc037f), TOBN(0x3d093a5b, 0x7405bb47),
-           TOBN(0x6202c253, 0x206348b8), TOBN(0xbf5d57fc, 0xc55a3ca7)},
-          {TOBN(0x89f6c90c, 0x8c3bef48), TOBN(0x23ac7623, 0x5a0a960a),
-           TOBN(0xdfbd3d6b, 0x552b42ab), TOBN(0x3ef22458, 0x132061f6)}},
-         {{TOBN(0xd74e9bda, 0xc97e6516), TOBN(0x88779360, 0xc230f49e),
-           TOBN(0xa6ec1de3, 0x1e74ea49), TOBN(0x581dcee5, 0x3fb645a2)},
-          {TOBN(0xbaef2391, 0x8f483f14), TOBN(0x6d2dddfc, 0xd137d13b),
-           TOBN(0x54cde50e, 0xd2743a42), TOBN(0x89a34fc5, 0xe4d97e67)}},
-         {{TOBN(0x13f1f5b3, 0x12e08ce5), TOBN(0xa80540b8, 0xa7f0b2ca),
-           TOBN(0x854bcf77, 0x01982805), TOBN(0xb8653ffd, 0x233bea04)},
-          {TOBN(0x8e7b8787, 0x02b0b4c9), TOBN(0x2675261f, 0x9acb170a),
-           TOBN(0x061a9d90, 0x930c14e5), TOBN(0xb59b30e0, 0xdef0abea)}},
-         {{TOBN(0x1dc19ea6, 0x0200ec7d), TOBN(0xb6f4a3f9, 0x0bce132b),
-           TOBN(0xb8d5de90, 0xf13e27e0), TOBN(0xbaee5ef0, 0x1fade16f)},
-          {TOBN(0x6f406aaa, 0xe4c6cf38), TOBN(0xab4cfe06, 0xd1369815),
-           TOBN(0x0dcffe87, 0xefd550c6), TOBN(0x9d4f59c7, 0x75ff7d39)}},
-         {{TOBN(0xb02553b1, 0x51deb6ad), TOBN(0x812399a4, 0xb1877749),
-           TOBN(0xce90f71f, 0xca6006e1), TOBN(0xc32363a6, 0xb02b6e77)},
-          {TOBN(0x02284fbe, 0xdc36c64d), TOBN(0x86c81e31, 0xa7e1ae61),
-           TOBN(0x2576c7e5, 0xb909d94a), TOBN(0x8b6f7d02, 0x818b2bb0)}},
-         {{TOBN(0xeca3ed07, 0x56faa38a), TOBN(0xa3790e6c, 0x9305bb54),
-           TOBN(0xd784eeda, 0x7bc73061), TOBN(0xbd56d369, 0x6dd50614)},
-          {TOBN(0xd6575949, 0x229a8aa9), TOBN(0xdcca8f47, 0x4595ec28),
-           TOBN(0x814305c1, 0x06ab4fe6), TOBN(0xc8c39768, 0x24f43f16)}},
-         {{TOBN(0xe2a45f36, 0x523f2b36), TOBN(0x995c6493, 0x920d93bb),
-           TOBN(0xf8afdab7, 0x90f1632b), TOBN(0x79ebbecd, 0x1c295954)},
-          {TOBN(0xc7bb3ddb, 0x79592f48), TOBN(0x67216a7b, 0x5f88e998),
-           TOBN(0xd91f098b, 0xbc01193e), TOBN(0xf7d928a5, 0xb1db83fc)}},
-         {{TOBN(0x55e38417, 0xe991f600), TOBN(0x2a91113e, 0x2981a934),
-           TOBN(0xcbc9d648, 0x06b13bde), TOBN(0xb011b6ac, 0x0755ff44)},
-          {TOBN(0x6f4cb518, 0x045ec613), TOBN(0x522d2d31, 0xc2f5930a),
-           TOBN(0x5acae1af, 0x382e65de), TOBN(0x57643067, 0x27bc966f)}},
-         {{TOBN(0x5e12705d, 0x1c7193f0), TOBN(0xf0f32f47, 0x3be8858e),
-           TOBN(0x785c3d7d, 0x96c6dfc7), TOBN(0xd75b4a20, 0xbf31795d)},
-          {TOBN(0x91acf17b, 0x342659d4), TOBN(0xe596ea34, 0x44f0378f),
-           TOBN(0x4515708f, 0xce52129d), TOBN(0x17387e1e, 0x79f2f585)}},
-         {{TOBN(0x72cfd2e9, 0x49dee168), TOBN(0x1ae05223, 0x3e2af239),
-           TOBN(0x009e75be, 0x1d94066a), TOBN(0x6cca31c7, 0x38abf413)},
-          {TOBN(0xb50bd61d, 0x9bc49908), TOBN(0x4a9b4a8c, 0xf5e2bc1e),
-           TOBN(0xeb6cc5f7, 0x946f83ac), TOBN(0x27da93fc, 0xebffab28)}},
-         {{TOBN(0xea314c96, 0x4821c8c5), TOBN(0x8de49ded, 0xa83c15f4),
-           TOBN(0x7a64cf20, 0x7af33004), TOBN(0x45f1bfeb, 0xc9627e10)},
-          {TOBN(0x878b0626, 0x54b9df60), TOBN(0x5e4fdc3c, 0xa95c0b33),
-           TOBN(0xe54a37ca, 0xc2035d8e), TOBN(0x9087cda9, 0x80f20b8c)}},
-         {{TOBN(0x36f61c23, 0x8319ade4), TOBN(0x766f287a, 0xde8cfdf8),
-           TOBN(0x48821948, 0x346f3705), TOBN(0x49a7b853, 0x16e4f4a2)},
-          {TOBN(0xb9b3f8a7, 0x5cedadfd), TOBN(0x8f562815, 0x8db2a815),
-           TOBN(0xc0b7d554, 0x01f68f95), TOBN(0x12971e27, 0x688a208e)}},
-         {{TOBN(0xc9f8b696, 0xd0ff34fc), TOBN(0x20824de2, 0x1222718c),
-           TOBN(0x7213cf9f, 0x0c95284d), TOBN(0xe2ad741b, 0xdc158240)},
-          {TOBN(0x0ee3a6df, 0x54043ccf), TOBN(0x16ff479b, 0xd84412b3),
-           TOBN(0xf6c74ee0, 0xdfc98af0), TOBN(0xa78a169f, 0x52fcd2fb)}},
-         {{TOBN(0xd8ae8746, 0x99c930e9), TOBN(0x1d33e858, 0x49e117a5),
-           TOBN(0x7581fcb4, 0x6624759f), TOBN(0xde50644f, 0x5bedc01d)},
-          {TOBN(0xbeec5d00, 0xcaf3155e), TOBN(0x672d66ac, 0xbc73e75f),
-           TOBN(0x86b9d8c6, 0x270b01db), TOBN(0xd249ef83, 0x50f55b79)}},
-         {{TOBN(0x6131d6d4, 0x73978fe3), TOBN(0xcc4e4542, 0x754b00a1),
-           TOBN(0x4e05df05, 0x57dfcfe9), TOBN(0x94b29cdd, 0x51ef6bf0)},
-          {TOBN(0xe4530cff, 0x9bc7edf2), TOBN(0x8ac236fd, 0xd3da65f3),
-           TOBN(0x0faf7d5f, 0xc8eb0b48), TOBN(0x4d2de14c, 0x660eb039)}},
-         {{TOBN(0xc006bba7, 0x60430e54), TOBN(0x10a2d0d6, 0xda3289ab),
-           TOBN(0x9c037a5d, 0xd7979c59), TOBN(0x04d1f3d3, 0xa116d944)},
-          {TOBN(0x9ff22473, 0x8a0983cd), TOBN(0x28e25b38, 0xc883cabb),
-           TOBN(0xe968dba5, 0x47a58995), TOBN(0x2c80b505, 0x774eebdf)}},
-         {{TOBN(0xee763b71, 0x4a953beb), TOBN(0x502e223f, 0x1642e7f6),
-           TOBN(0x6fe4b641, 0x61d5e722), TOBN(0x9d37c5b0, 0xdbef5316)},
-          {TOBN(0x0115ed70, 0xf8330bc7), TOBN(0x139850e6, 0x75a72789),
-           TOBN(0x27d7faec, 0xffceccc2), TOBN(0x3016a860, 0x4fd9f7f6)}},
-         {{TOBN(0xc492ec64, 0x4cd8f64c), TOBN(0x58a2d790, 0x279d7b51),
-           TOBN(0x0ced1fc5, 0x1fc75256), TOBN(0x3e658aed, 0x8f433017)},
-          {TOBN(0x0b61942e, 0x05da59eb), TOBN(0xba3d60a3, 0x0ddc3722),
-           TOBN(0x7c311cd1, 0x742e7f87), TOBN(0x6473ffee, 0xf6b01b6e)}}},
-        {{{TOBN(0x8303604f, 0x692ac542), TOBN(0xf079ffe1, 0x227b91d3),
-           TOBN(0x19f63e63, 0x15aaf9bd), TOBN(0xf99ee565, 0xf1f344fb)},
-          {TOBN(0x8a1d661f, 0xd6219199), TOBN(0x8c883bc6, 0xd48ce41c),
-           TOBN(0x1065118f, 0x3c74d904), TOBN(0x713889ee, 0x0faf8b1b)}},
-         {{TOBN(0x972b3f8f, 0x81a1b3be), TOBN(0x4f3ce145, 0xce2764a0),
-           TOBN(0xe2d0f1cc, 0x28c4f5f7), TOBN(0xdeee0c0d, 0xc7f3985b)},
-          {TOBN(0x7df4adc0, 0xd39e25c3), TOBN(0x40619820, 0xc467a080),
-           TOBN(0x440ebc93, 0x61cf5a58), TOBN(0x527729a6, 0x422ad600)}},
-         {{TOBN(0xca6c0937, 0xb1b76ba6), TOBN(0x1a2eab85, 0x4d2026dc),
-           TOBN(0xb1715e15, 0x19d9ae0a), TOBN(0xf1ad9199, 0xbac4a026)},
-          {TOBN(0x35b3dfb8, 0x07ea7b0e), TOBN(0xedf5496f, 0x3ed9eb89),
-           TOBN(0x8932e5ff, 0x2d6d08ab), TOBN(0xf314874e, 0x25bd2731)}},
-         {{TOBN(0xefb26a75, 0x3f73f449), TOBN(0x1d1c94f8, 0x8d44fc79),
-           TOBN(0x49f0fbc5, 0x3bc0dc4d), TOBN(0xb747ea0b, 0x3698a0d0)},
-          {TOBN(0x5218c3fe, 0x228d291e), TOBN(0x35b804b5, 0x43c129d6),
-           TOBN(0xfac859b8, 0xd1acc516), TOBN(0x6c10697d, 0x95d6e668)}},
-         {{TOBN(0xc38e438f, 0x0876fd4e), TOBN(0x45f0c307, 0x83d2f383),
-           TOBN(0x203cc2ec, 0xb10934cb), TOBN(0x6a8f2439, 0x2c9d46ee)},
-          {TOBN(0xf16b431b, 0x65ccde7b), TOBN(0x41e2cd18, 0x27e76a6f),
-           TOBN(0xb9c8cf8f, 0x4e3484d7), TOBN(0x64426efd, 0x8315244a)}},
-         {{TOBN(0x1c0a8e44, 0xfc94dea3), TOBN(0x34c8cdbf, 0xdad6a0b0),
-           TOBN(0x919c3840, 0x04113cef), TOBN(0xfd32fba4, 0x15490ffa)},
-          {TOBN(0x58d190f6, 0x795dcfb7), TOBN(0xfef01b03, 0x83588baf),
-           TOBN(0x9e6d1d63, 0xca1fc1c0), TOBN(0x53173f96, 0xf0a41ac9)}},
-         {{TOBN(0x2b1d402a, 0xba16f73b), TOBN(0x2fb31014, 0x8cf9b9fc),
-           TOBN(0x2d51e60e, 0x446ef7bf), TOBN(0xc731021b, 0xb91e1745)},
-          {TOBN(0x9d3b4724, 0x4fee99d4), TOBN(0x4bca48b6, 0xfac5c1ea),
-           TOBN(0x70f5f514, 0xbbea9af7), TOBN(0x751f55a5, 0x974c283a)}},
-         {{TOBN(0x6e30251a, 0xcb452fdb), TOBN(0x31ee6965, 0x50f30650),
-           TOBN(0xb0b3e508, 0x933548d9), TOBN(0xb8949a4f, 0xf4b0ef5b)},
-          {TOBN(0x208b8326, 0x3c88f3bd), TOBN(0xab147c30, 0xdb1d9989),
-           TOBN(0xed6515fd, 0x44d4df03), TOBN(0x17a12f75, 0xe72eb0c5)}},
-         {{TOBN(0x3b59796d, 0x36cf69db), TOBN(0x1219eee9, 0x56670c18),
-           TOBN(0xfe3341f7, 0x7a070d8e), TOBN(0x9b70130b, 0xa327f90c)},
-          {TOBN(0x36a32462, 0x0ae18e0e), TOBN(0x2021a623, 0x46c0a638),
-           TOBN(0x251b5817, 0xc62eb0d4), TOBN(0x87bfbcdf, 0x4c762293)}},
-         {{TOBN(0xf78ab505, 0xcdd61d64), TOBN(0x8c7a53fc, 0xc8c18857),
-           TOBN(0xa653ce6f, 0x16147515), TOBN(0x9c923aa5, 0xea7d52d5)},
-          {TOBN(0xc24709cb, 0x5c18871f), TOBN(0x7d53bec8, 0x73b3cc74),
-           TOBN(0x59264aff, 0xfdd1d4c4), TOBN(0x5555917e, 0x240da582)}},
-         {{TOBN(0xcae8bbda, 0x548f5a0e), TOBN(0x1910eaba, 0x3bbfbbe1),
-           TOBN(0xae579685, 0x7677afc3), TOBN(0x49ea61f1, 0x73ff0b5c)},
-          {TOBN(0x78655478, 0x4f7c3922), TOBN(0x95d337cd, 0x20c68eef),
-           TOBN(0x68f1e1e5, 0xdf779ab9), TOBN(0x14b491b0, 0xb5cf69a8)}},
-         {{TOBN(0x7a6cbbe0, 0x28e3fe89), TOBN(0xe7e1fee4, 0xc5aac0eb),
-           TOBN(0x7f47eda5, 0x697e5140), TOBN(0x4f450137, 0xb454921f)},
-          {TOBN(0xdb625f84, 0x95cd8185), TOBN(0x74be0ba1, 0xcdb2e583),
-           TOBN(0xaee4fd7c, 0xdd5e6de4), TOBN(0x4251437d, 0xe8101739)}},
-         {{TOBN(0x686d72a0, 0xac620366), TOBN(0x4be3fb9c, 0xb6d59344),
-           TOBN(0x6e8b44e7, 0xa1eb75b9), TOBN(0x84e39da3, 0x91a5c10c)},
-          {TOBN(0x37cc1490, 0xb38f0409), TOBN(0x02951943, 0x2c2ade82),
-           TOBN(0x9b688783, 0x1190a2d8), TOBN(0x25627d14, 0x231182ba)}},
-         {{TOBN(0x6eb550aa, 0x658a6d87), TOBN(0x1405aaa7, 0xcf9c7325),
-           TOBN(0xd147142e, 0x5c8748c9), TOBN(0x7f637e4f, 0x53ede0e0)},
-          {TOBN(0xf8ca2776, 0x14ffad2c), TOBN(0xe58fb1bd, 0xbafb6791),
-           TOBN(0x17158c23, 0xbf8f93fc), TOBN(0x7f15b373, 0x0a4a4655)}},
-         {{TOBN(0x39d4add2, 0xd842ca72), TOBN(0xa71e4391, 0x3ed96305),
-           TOBN(0x5bb09cbe, 0x6700be14), TOBN(0x68d69d54, 0xd8befcf6)},
-          {TOBN(0xa45f5367, 0x37183bcf), TOBN(0x7152b7bb, 0x3370dff7),
-           TOBN(0xcf887baa, 0xbf12525b), TOBN(0xe7ac7bdd, 0xd6d1e3cd)}},
-         {{TOBN(0x25914f78, 0x81fdad90), TOBN(0xcf638f56, 0x0d2cf6ab),
-           TOBN(0xb90bc03f, 0xcc054de5), TOBN(0x932811a7, 0x18b06350)},
-          {TOBN(0x2f00b330, 0x9bbd11ff), TOBN(0x76108a6f, 0xb4044974),
-           TOBN(0x801bb9e0, 0xa851d266), TOBN(0x0dd099be, 0xbf8990c1)}},
-         {{TOBN(0x58c5aaaa, 0xabe32986), TOBN(0x0fe9dd2a, 0x50d59c27),
-           TOBN(0x84951ff4, 0x8d307305), TOBN(0x6c23f829, 0x86529b78)},
-          {TOBN(0x50bb2218, 0x0b136a79), TOBN(0x7e2174de, 0x77a20996),
-           TOBN(0x6f00a4b9, 0xc0bb4da6), TOBN(0x89a25a17, 0xefdde8da)}},
-         {{TOBN(0xf728a27e, 0xc11ee01d), TOBN(0xf900553a, 0xe5f10dfb),
-           TOBN(0x189a83c8, 0x02ec893c), TOBN(0x3ca5bdc1, 0x23f66d77)},
-          {TOBN(0x98781537, 0x97eada9f), TOBN(0x59c50ab3, 0x10256230),
-           TOBN(0x346042d9, 0x323c69b3), TOBN(0x1b715a6d, 0x2c460449)}},
-         {{TOBN(0xa41dd476, 0x6ae06e0b), TOBN(0xcdd7888e, 0x9d42e25f),
-           TOBN(0x0f395f74, 0x56b25a20), TOBN(0xeadfe0ae, 0x8700e27e)},
-          {TOBN(0xb09d52a9, 0x69950093), TOBN(0x3525d9cb, 0x327f8d40),
-           TOBN(0xb8235a94, 0x67df886a), TOBN(0x77e4b0dd, 0x035faec2)}},
-         {{TOBN(0x115eb20a, 0x517d7061), TOBN(0x77fe3433, 0x6c2df683),
-           TOBN(0x6870ddc7, 0xcdc6fc67), TOBN(0xb1610588, 0x0b87de83)},
-          {TOBN(0x343584ca, 0xd9c4ddbe), TOBN(0xb3164f1c, 0x3d754be2),
-           TOBN(0x0731ed3a, 0xc1e6c894), TOBN(0x26327dec, 0x4f6b904c)}},
-         {{TOBN(0x9d49c6de, 0x97b5cd32), TOBN(0x40835dae, 0xb5eceecd),
-           TOBN(0xc66350ed, 0xd9ded7fe), TOBN(0x8aeebb5c, 0x7a678804)},
-          {TOBN(0x51d42fb7, 0x5b8ee9ec), TOBN(0xd7a17bdd, 0x8e3ca118),
-           TOBN(0x40d7511a, 0x2ef4400e), TOBN(0xc48990ac, 0x875a66f4)}},
-         {{TOBN(0x8de07d2a, 0x2199e347), TOBN(0xbee75556, 0x2a39e051),
-           TOBN(0x56918786, 0x916e51dc), TOBN(0xeb191313, 0x4a2d89ec)},
-          {TOBN(0x6679610d, 0x37d341ed), TOBN(0x434fbb41, 0x56d51c2b),
-           TOBN(0xe54b7ee7, 0xd7492dba), TOBN(0xaa33a79a, 0x59021493)}},
-         {{TOBN(0x49fc5054, 0xe4bd6d3d), TOBN(0x09540f04, 0x5ab551d0),
-           TOBN(0x8acc9085, 0x4942d3a6), TOBN(0x231af02f, 0x2d28323b)},
-          {TOBN(0x93458cac, 0x0992c163), TOBN(0x1fef8e71, 0x888e3bb4),
-           TOBN(0x27578da5, 0xbe8c268c), TOBN(0xcc8be792, 0xe805ec00)}},
-         {{TOBN(0x29267bae, 0xc61c3855), TOBN(0xebff429d, 0x58c1fd3b),
-           TOBN(0x22d886c0, 0x8c0b93b8), TOBN(0xca5e00b2, 0x2ddb8953)},
-          {TOBN(0xcf330117, 0xc3fed8b7), TOBN(0xd49ac6fa, 0x819c01f6),
-           TOBN(0x6ddaa6bd, 0x3c0fbd54), TOBN(0x91743068, 0x8049a2cf)}},
-         {{TOBN(0xd67f981e, 0xaff2ef81), TOBN(0xc3654d35, 0x2818ae80),
-           TOBN(0x81d05044, 0x1b2aa892), TOBN(0x2db067bf, 0x3d099328)},
-          {TOBN(0xe7c79e86, 0x703dcc97), TOBN(0xe66f9b37, 0xe133e215),
-           TOBN(0xcdf119a6, 0xe39a7a5c), TOBN(0x47c60de3, 0x876f1b61)}},
-         {{TOBN(0x6e405939, 0xd860f1b2), TOBN(0x3e9a1dbc, 0xf5ed4d4a),
-           TOBN(0x3f23619e, 0xc9b6bcbd), TOBN(0x5ee790cf, 0x734e4497)},
-          {TOBN(0xf0a834b1, 0x5bdaf9bb), TOBN(0x02cedda7, 0x4ca295f0),
-           TOBN(0x4619aa2b, 0xcb8e378c), TOBN(0xe5613244, 0xcc987ea4)}},
-         {{TOBN(0x0bc022cc, 0x76b23a50), TOBN(0x4a2793ad, 0x0a6c21ce),
-           TOBN(0x38328780, 0x89cac3f5), TOBN(0x29176f1b, 0xcba26d56)},
-          {TOBN(0x06296187, 0x4f6f59eb), TOBN(0x86e9bca9, 0x8bdc658e),
-           TOBN(0x2ca9c4d3, 0x57e30402), TOBN(0x5438b216, 0x516a09bb)}},
-         {{TOBN(0x0a6a063c, 0x7672765a), TOBN(0x37a3ce64, 0x0547b9bf),
-           TOBN(0x42c099c8, 0x98b1a633), TOBN(0xb5ab800d, 0x05ee6961)},
-          {TOBN(0xf1963f59, 0x11a5acd6), TOBN(0xbaee6157, 0x46201063),
-           TOBN(0x36d9a649, 0xa596210a), TOBN(0xaed04363, 0x1ba7138c)}},
-         {{TOBN(0xcf817d1c, 0xa4a82b76), TOBN(0x5586960e, 0xf3806be9),
-           TOBN(0x7ab67c89, 0x09dc6bb5), TOBN(0x52ace7a0, 0x114fe7eb)},
-          {TOBN(0xcd987618, 0xcbbc9b70), TOBN(0x4f06fd5a, 0x604ca5e1),
-           TOBN(0x90af14ca, 0x6dbde133), TOBN(0x1afe4322, 0x948a3264)}},
-         {{TOBN(0xa70d2ca6, 0xc44b2c6c), TOBN(0xab726799, 0x0ef87dfe),
-           TOBN(0x310f64dc, 0x2e696377), TOBN(0x49b42e68, 0x4c8126a0)},
-          {TOBN(0x0ea444c3, 0xcea0b176), TOBN(0x53a8ddf7, 0xcb269182),
-           TOBN(0xf3e674eb, 0xbbba9dcb), TOBN(0x0d2878a8, 0xd8669d33)}},
-         {{TOBN(0x04b935d5, 0xd019b6a3), TOBN(0xbb5cf88e, 0x406f1e46),
-           TOBN(0xa1912d16, 0x5b57c111), TOBN(0x9803fc21, 0x19ebfd78)},
-          {TOBN(0x4f231c9e, 0xc07764a9), TOBN(0xd93286ee, 0xb75bd055),
-           TOBN(0x83a9457d, 0x8ee6c9de), TOBN(0x04695915, 0x6087ec90)}},
-         {{TOBN(0x14c6dd8a, 0x58d6cd46), TOBN(0x9cb633b5, 0x8e6634d2),
-           TOBN(0xc1305047, 0xf81bc328), TOBN(0x12ede0e2, 0x26a177e5)},
-          {TOBN(0x332cca62, 0x065a6f4f), TOBN(0xc3a47ecd, 0x67be487b),
-           TOBN(0x741eb187, 0x0f47ed1c), TOBN(0x99e66e58, 0xe7598b14)}},
-         {{TOBN(0x6f0544ca, 0x63d0ff12), TOBN(0xe5efc784, 0xb610a05f),
-           TOBN(0xf72917b1, 0x7cad7b47), TOBN(0x3ff6ea20, 0xf2cac0c0)},
-          {TOBN(0xcc23791b, 0xf21db8b7), TOBN(0x7dac70b1, 0xd7d93565),
-           TOBN(0x682cda1d, 0x694bdaad), TOBN(0xeb88bb8c, 0x1023516d)}},
-         {{TOBN(0xc4c634b4, 0xdfdbeb1b), TOBN(0x22f5ca72, 0xb4ee4dea),
-           TOBN(0x1045a368, 0xe6524821), TOBN(0xed9e8a3f, 0x052b18b2)},
-          {TOBN(0x9b7f2cb1, 0xb961f49a), TOBN(0x7fee2ec1, 0x7b009670),
-           TOBN(0x350d8754, 0x22507a6d), TOBN(0x561bd711, 0x4db55f1d)}},
-         {{TOBN(0x4c189ccc, 0x320bbcaf), TOBN(0x568434cf, 0xdf1de48c),
-           TOBN(0x6af1b00e, 0x0fa8f128), TOBN(0xf0ba9d02, 0x8907583c)},
-          {TOBN(0x735a4004, 0x32ff9f60), TOBN(0x3dd8e4b6, 0xc25dcf33),
-           TOBN(0xf2230f16, 0x42c74cef), TOBN(0xd8117623, 0x013fa8ad)}},
-         {{TOBN(0x36822876, 0xf51fe76e), TOBN(0x8a6811cc, 0x11d62589),
-           TOBN(0xc3fc7e65, 0x46225718), TOBN(0xb7df2c9f, 0xc82fdbcd)},
-          {TOBN(0x3b1d4e52, 0xdd7b205b), TOBN(0xb6959478, 0x47a2e414),
-           TOBN(0x05e4d793, 0xefa91148), TOBN(0xb47ed446, 0xfd2e9675)}},
-         {{TOBN(0x1a7098b9, 0x04c9d9bf), TOBN(0x661e2881, 0x1b793048),
-           TOBN(0xb1a16966, 0xb01ee461), TOBN(0xbc521308, 0x2954746f)},
-          {TOBN(0xc909a0fc, 0x2477de50), TOBN(0xd80bb41c, 0x7dbd51ef),
-           TOBN(0xa85be7ec, 0x53294905), TOBN(0x6d465b18, 0x83958f97)}},
-         {{TOBN(0x16f6f330, 0xfb6840fd), TOBN(0xfaaeb214, 0x3401e6c8),
-           TOBN(0xaf83d30f, 0xccb5b4f8), TOBN(0x22885739, 0x266dec4b)},
-          {TOBN(0x51b4367c, 0x7bc467df), TOBN(0x926562e3, 0xd842d27a),
-           TOBN(0xdfcb6614, 0x0fea14a6), TOBN(0xeb394dae, 0xf2734cd9)}},
-         {{TOBN(0x3eeae5d2, 0x11c0be98), TOBN(0xb1e6ed11, 0x814e8165),
-           TOBN(0x191086bc, 0xe52bce1c), TOBN(0x14b74cc6, 0xa75a04da)},
-          {TOBN(0x63cf1186, 0x8c060985), TOBN(0x071047de, 0x2dbd7f7c),
-           TOBN(0x4e433b8b, 0xce0942ca), TOBN(0xecbac447, 0xd8fec61d)}},
-         {{TOBN(0x8f0ed0e2, 0xebf3232f), TOBN(0xfff80f9e, 0xc52a2edd),
-           TOBN(0xad9ab433, 0x75b55fdb), TOBN(0x73ca7820, 0xe42e0c11)},
-          {TOBN(0x6dace0a0, 0xe6251b46), TOBN(0x89bc6b5c, 0x4c0d932d),
-           TOBN(0x3438cd77, 0x095da19a), TOBN(0x2f24a939, 0x8d48bdfb)}},
-         {{TOBN(0x99b47e46, 0x766561b7), TOBN(0x736600e6, 0x0ed0322a),
-           TOBN(0x06a47cb1, 0x638e1865), TOBN(0x927c1c2d, 0xcb136000)},
-          {TOBN(0x29542337, 0x0cc5df69), TOBN(0x99b37c02, 0x09d649a9),
-           TOBN(0xc5f0043c, 0x6aefdb27), TOBN(0x6cdd9987, 0x1be95c27)}},
-         {{TOBN(0x69850931, 0x390420d2), TOBN(0x299c40ac, 0x0983efa4),
-           TOBN(0x3a05e778, 0xaf39aead), TOBN(0x84274408, 0x43a45193)},
-          {TOBN(0x6bcd0fb9, 0x91a711a0), TOBN(0x461592c8, 0x9f52ab17),
-           TOBN(0xb49302b4, 0xda3c6ed6), TOBN(0xc51fddc7, 0x330d7067)}},
-         {{TOBN(0x94babeb6, 0xda50d531), TOBN(0x521b840d, 0xa6a7b9da),
-           TOBN(0x5305151e, 0x404bdc89), TOBN(0x1bcde201, 0xd0d07449)},
-          {TOBN(0xf427a78b, 0x3b76a59a), TOBN(0xf84841ce, 0x07791a1b),
-           TOBN(0xebd314be, 0xbf91ed1c), TOBN(0x8e61d34c, 0xbf172943)}},
-         {{TOBN(0x1d5dc451, 0x5541b892), TOBN(0xb186ee41, 0xfc9d9e54),
-           TOBN(0x9d9f345e, 0xd5bf610d), TOBN(0x3e7ba65d, 0xf6acca9f)},
-          {TOBN(0x9dda787a, 0xa8369486), TOBN(0x09f9dab7, 0x8eb5ba53),
-           TOBN(0x5afb2033, 0xd6481bc3), TOBN(0x76f4ce30, 0xafa62104)}},
-         {{TOBN(0xa8fa00cf, 0xf4f066b5), TOBN(0x89ab5143, 0x461dafc2),
-           TOBN(0x44339ed7, 0xa3389998), TOBN(0x2ff862f1, 0xbc214903)},
-          {TOBN(0x2c88f985, 0xb05556e3), TOBN(0xcd96058e, 0x3467081e),
-           TOBN(0x7d6a4176, 0xedc637ea), TOBN(0xe1743d09, 0x36a5acdc)}},
-         {{TOBN(0x66fd72e2, 0x7eb37726), TOBN(0xf7fa264e, 0x1481a037),
-           TOBN(0x9fbd3bde, 0x45f4aa79), TOBN(0xed1e0147, 0x767c3e22)},
-          {TOBN(0x7621f979, 0x82e7abe2), TOBN(0x19eedc72, 0x45f633f8),
-           TOBN(0xe69b155e, 0x6137bf3a), TOBN(0xa0ad13ce, 0x414ee94e)}},
-         {{TOBN(0x93e3d524, 0x1c0e651a), TOBN(0xab1a6e2a, 0x02ce227e),
-           TOBN(0xe7af1797, 0x4ab27eca), TOBN(0x245446de, 0xbd444f39)},
-          {TOBN(0x59e22a21, 0x56c07613), TOBN(0x43deafce, 0xf4275498),
-           TOBN(0x10834ccb, 0x67fd0946), TOBN(0xa75841e5, 0x47406edf)}},
-         {{TOBN(0xebd6a677, 0x7b0ac93d), TOBN(0xa6e37b0d, 0x78f5e0d7),
-           TOBN(0x2516c096, 0x76f5492b), TOBN(0x1e4bf888, 0x9ac05f3a)},
-          {TOBN(0xcdb42ce0, 0x4df0ba2b), TOBN(0x935d5cfd, 0x5062341b),
-           TOBN(0x8a303333, 0x82acac20), TOBN(0x429438c4, 0x5198b00e)}},
-         {{TOBN(0x1d083bc9, 0x049d33fa), TOBN(0x58b82dda, 0x946f67ff),
-           TOBN(0xac3e2db8, 0x67a1d6a3), TOBN(0x62e6bead, 0x1798aac8)},
-          {TOBN(0xfc85980f, 0xde46c58c), TOBN(0xa7f69379, 0x69c8d7be),
-           TOBN(0x23557927, 0x837b35ec), TOBN(0x06a933d8, 0xe0790c0c)}},
-         {{TOBN(0x827c0e9b, 0x077ff55d), TOBN(0x53977798, 0xbb26e680),
-           TOBN(0x59530874, 0x1d9cb54f), TOBN(0xcca3f449, 0x4aac53ef)},
-          {TOBN(0x11dc5c87, 0xa07eda0f), TOBN(0xc138bccf, 0xfd6400c8),
-           TOBN(0x549680d3, 0x13e5da72), TOBN(0xc93eed82, 0x4540617e)}},
-         {{TOBN(0xfd3db157, 0x4d0b75c0), TOBN(0x9716eb42, 0x6386075b),
-           TOBN(0x0639605c, 0x817b2c16), TOBN(0x09915109, 0xf1e4f201)},
-          {TOBN(0x35c9a928, 0x5cca6c3b), TOBN(0xb25f7d1a, 0x3505c900),
-           TOBN(0xeb9f7d20, 0x630480c4), TOBN(0xc3c7b8c6, 0x2a1a501c)}},
-         {{TOBN(0x3f99183c, 0x5a1f8e24), TOBN(0xfdb118fa, 0x9dd255f0),
-           TOBN(0xb9b18b90, 0xc27f62a6), TOBN(0xe8f732f7, 0x396ec191)},
-          {TOBN(0x524a2d91, 0x0be786ab), TOBN(0x5d32adef, 0x0ac5a0f5),
-           TOBN(0x9b53d4d6, 0x9725f694), TOBN(0x032a76c6, 0x0510ba89)}},
-         {{TOBN(0x840391a3, 0xebeb1544), TOBN(0x44b7b88c, 0x3ed73ac3),
-           TOBN(0xd24bae7a, 0x256cb8b3), TOBN(0x7ceb151a, 0xe394cb12)},
-          {TOBN(0xbd6b66d0, 0x5bc1e6a8), TOBN(0xec70cecb, 0x090f07bf),
-           TOBN(0x270644ed, 0x7d937589), TOBN(0xee9e1a3d, 0x5f1dccfe)}},
-         {{TOBN(0xb0d40a84, 0x745b98d2), TOBN(0xda429a21, 0x2556ed40),
-           TOBN(0xf676eced, 0x85148cb9), TOBN(0x5a22d40c, 0xded18936)},
-          {TOBN(0x3bc4b9e5, 0x70e8a4ce), TOBN(0xbfd1445b, 0x9eae0379),
-           TOBN(0xf23f2c0c, 0x1a0bd47e), TOBN(0xa9c0bb31, 0xe1845531)}},
-         {{TOBN(0x9ddc4d60, 0x0a4c3f6b), TOBN(0xbdfaad79, 0x2c15ef44),
-           TOBN(0xce55a236, 0x7f484acc), TOBN(0x08653ca7, 0x055b1f15)},
-          {TOBN(0x2efa8724, 0x538873a3), TOBN(0x09299e5d, 0xace1c7e7),
-           TOBN(0x07afab66, 0xade332ba), TOBN(0x9be1fdf6, 0x92dd71b7)}},
-         {{TOBN(0xa49b5d59, 0x5758b11c), TOBN(0x0b852893, 0xc8654f40),
-           TOBN(0xb63ef6f4, 0x52379447), TOBN(0xd4957d29, 0x105e690c)},
-          {TOBN(0x7d484363, 0x646559b0), TOBN(0xf4a8273c, 0x49788a8e),
-           TOBN(0xee406cb8, 0x34ce54a9), TOBN(0x1e1c260f, 0xf86fda9b)}},
-         {{TOBN(0xe150e228, 0xcf6a4a81), TOBN(0x1fa3b6a3, 0x1b488772),
-           TOBN(0x1e6ff110, 0xc5a9c15b), TOBN(0xc6133b91, 0x8ad6aa47)},
-          {TOBN(0x8ac5d55c, 0x9dffa978), TOBN(0xba1d1c1d, 0x5f3965f2),
-           TOBN(0xf969f4e0, 0x7732b52f), TOBN(0xfceecdb5, 0xa5172a07)}},
-         {{TOBN(0xb0120a5f, 0x10f2b8f5), TOBN(0xc83a6cdf, 0x5c4c2f63),
-           TOBN(0x4d47a491, 0xf8f9c213), TOBN(0xd9e1cce5, 0xd3f1bbd5)},
-          {TOBN(0x0d91bc7c, 0xaba7e372), TOBN(0xfcdc74c8, 0xdfd1a2db),
-           TOBN(0x05efa800, 0x374618e5), TOBN(0x11216969, 0x15a7925e)}},
-         {{TOBN(0xd4c89823, 0xf6021c5d), TOBN(0x880d5e84, 0xeff14423),
-           TOBN(0x6523bc5a, 0x6dcd1396), TOBN(0xd1acfdfc, 0x113c978b)},
-          {TOBN(0xb0c164e8, 0xbbb66840), TOBN(0xf7f4301e, 0x72b58459),
-           TOBN(0xc29ad4a6, 0xa638e8ec), TOBN(0xf5ab8961, 0x46b78699)}},
-         {{TOBN(0x9dbd7974, 0x0e954750), TOBN(0x0121de88, 0x64f9d2c6),
-           TOBN(0x2e597b42, 0xd985232e), TOBN(0x55b6c3c5, 0x53451777)},
-          {TOBN(0xbb53e547, 0x519cb9fb), TOBN(0xf134019f, 0x8428600d),
-           TOBN(0x5a473176, 0xe081791a), TOBN(0x2f3e2263, 0x35fb0c08)}},
-         {{TOBN(0xb28c3017, 0x73d273b0), TOBN(0xccd21076, 0x7721ef9a),
-           TOBN(0x054cc292, 0xb650dc39), TOBN(0x662246de, 0x6188045e)},
-          {TOBN(0x904b52fa, 0x6b83c0d1), TOBN(0xa72df267, 0x97e9cd46),
-           TOBN(0x886b43cd, 0x899725e4), TOBN(0x2b651688, 0xd849ff22)}},
-         {{TOBN(0x60479b79, 0x02f34533), TOBN(0x5e354c14, 0x0c77c148),
-           TOBN(0xb4bb7581, 0xa8537c78), TOBN(0x188043d7, 0xefe1495f)},
-          {TOBN(0x9ba12f42, 0x8c1d5026), TOBN(0x2e0c8a26, 0x93d4aaab),
-           TOBN(0xbdba7b8b, 0xaa57c450), TOBN(0x140c9ad6, 0x9bbdafef)}},
-         {{TOBN(0x2067aa42, 0x25ac0f18), TOBN(0xf7b1295b, 0x04d1fbf3),
-           TOBN(0x14829111, 0xa4b04824), TOBN(0x2ce3f192, 0x33bd5e91)},
-          {TOBN(0x9c7a1d55, 0x8f2e1b72), TOBN(0xfe932286, 0x302aa243),
-           TOBN(0x497ca7b4, 0xd4be9554), TOBN(0xb8e821b8, 0xe0547a6e)}},
-         {{TOBN(0xfb2838be, 0x67e573e0), TOBN(0x05891db9, 0x4084c44b),
-           TOBN(0x91311373, 0x96c1c2c5), TOBN(0x6aebfa3f, 0xd958444b)},
-          {TOBN(0xac9cdce9, 0xe56e55c1), TOBN(0x7148ced3, 0x2caa46d0),
-           TOBN(0x2e10c7ef, 0xb61fe8eb), TOBN(0x9fd835da, 0xff97cf4d)}}},
-        {{{TOBN(0xa36da109, 0x081e9387), TOBN(0xfb9780d7, 0x8c935828),
-           TOBN(0xd5940332, 0xe540b015), TOBN(0xc9d7b51b, 0xe0f466fa)},
-          {TOBN(0xfaadcd41, 0xd6d9f671), TOBN(0xba6c1e28, 0xb1a2ac17),
-           TOBN(0x066a7833, 0xed201e5f), TOBN(0x19d99719, 0xf90f462b)}},
-         {{TOBN(0xf431f462, 0x060b5f61), TOBN(0xa56f46b4, 0x7bd057c2),
-           TOBN(0x348dca6c, 0x47e1bf65), TOBN(0x9a38783e, 0x41bcf1ff)},
-          {TOBN(0x7a5d33a9, 0xda710718), TOBN(0x5a779987, 0x2e0aeaf6),
-           TOBN(0xca87314d, 0x2d29d187), TOBN(0xfa0edc3e, 0xc687d733)}},
-         {{TOBN(0x9df33621, 0x6a31e09b), TOBN(0xde89e44d, 0xc1350e35),
-           TOBN(0x29214871, 0x4ca0cf52), TOBN(0xdf379672, 0x0b88a538)},
-          {TOBN(0xc92a510a, 0x2591d61b), TOBN(0x79aa87d7, 0x585b447b),
-           TOBN(0xf67db604, 0xe5287f77), TOBN(0x1697c8bf, 0x5efe7a80)}},
-         {{TOBN(0x1c894849, 0xcb198ac7), TOBN(0xa884a93d, 0x0f264665),
-           TOBN(0x2da964ef, 0x9b200678), TOBN(0x3c351b87, 0x009834e6)},
-          {TOBN(0xafb2ef9f, 0xe2c4b44b), TOBN(0x580f6c47, 0x3326790c),
-           TOBN(0xb8480521, 0x0b02264a), TOBN(0x8ba6f9e2, 0x42a194e2)}},
-         {{TOBN(0xfc87975f, 0x8fb54738), TOBN(0x35160788, 0x27c3ead3),
-           TOBN(0x834116d2, 0xb74a085a), TOBN(0x53c99a73, 0xa62fe996)},
-          {TOBN(0x87585be0, 0x5b81c51b), TOBN(0x925bafa8, 0xbe0852b7),
-           TOBN(0x76a4fafd, 0xa84d19a7), TOBN(0x39a45982, 0x585206d4)}},
-         {{TOBN(0x499b6ab6, 0x5eb03c0e), TOBN(0xf19b7954, 0x72bc3fde),
-           TOBN(0xa86b5b9c, 0x6e3a80d2), TOBN(0xe4377508, 0x6d42819f)},
-          {TOBN(0xc1663650, 0xbb3ee8a3), TOBN(0x75eb14fc, 0xb132075f),
-           TOBN(0xa8ccc906, 0x7ad834f6), TOBN(0xea6a2474, 0xe6e92ffd)}},
-         {{TOBN(0x9d72fd95, 0x0f8d6758), TOBN(0xcb84e101, 0x408c07dd),
-           TOBN(0xb9114bfd, 0xa5e23221), TOBN(0x358b5fe2, 0xe94e742c)},
-          {TOBN(0x1c0577ec, 0x95f40e75), TOBN(0xf0155451, 0x3d73f3d6),
-           TOBN(0x9d55cd67, 0xbd1b9b66), TOBN(0x63e86e78, 0xaf8d63c7)}},
-         {{TOBN(0x39d934ab, 0xd3c095f1), TOBN(0x04b261be, 0xe4b76d71),
-           TOBN(0x1d2e6970, 0xe73e6984), TOBN(0x879fb23b, 0x5e5fcb11)},
-          {TOBN(0x11506c72, 0xdfd75490), TOBN(0x3a97d085, 0x61bcf1c1),
-           TOBN(0x43201d82, 0xbf5e7007), TOBN(0x7f0ac52f, 0x798232a7)}},
-         {{TOBN(0x2715cbc4, 0x6eb564d4), TOBN(0x8d6c752c, 0x9e570e29),
-           TOBN(0xf80247c8, 0x9ef5fd5d), TOBN(0xc3c66b46, 0xd53eb514)},
-          {TOBN(0x9666b401, 0x0f87de56), TOBN(0xce62c06f, 0xc6c603b5),
-           TOBN(0xae7b4c60, 0x7e4fc942), TOBN(0x38ac0b77, 0x663a9c19)}},
-         {{TOBN(0xcb4d20ee, 0x4b049136), TOBN(0x8b63bf12, 0x356a4613),
-           TOBN(0x1221aef6, 0x70e08128), TOBN(0xe62d8c51, 0x4acb6b16)},
-          {TOBN(0x71f64a67, 0x379e7896), TOBN(0xb25237a2, 0xcafd7fa5),
-           TOBN(0xf077bd98, 0x3841ba6a), TOBN(0xc4ac0244, 0x3cd16e7e)}},
-         {{TOBN(0x548ba869, 0x21fea4ca), TOBN(0xd36d0817, 0xf3dfdac1),
-           TOBN(0x09d8d71f, 0xf4685faf), TOBN(0x8eff66be, 0xc52c459a)},
-          {TOBN(0x182faee7, 0x0b57235e), TOBN(0xee3c39b1, 0x0106712b),
-           TOBN(0x5107331f, 0xc0fcdcb0), TOBN(0x669fb9dc, 0xa51054ba)}},
-         {{TOBN(0xb25101fb, 0x319d7682), TOBN(0xb0293129, 0x0a982fee),
-           TOBN(0x51c1c9b9, 0x0261b344), TOBN(0x0e008c5b, 0xbfd371fa)},
-          {TOBN(0xd866dd1c, 0x0278ca33), TOBN(0x666f76a6, 0xe5aa53b1),
-           TOBN(0xe5cfb779, 0x6013a2cf), TOBN(0x1d3a1aad, 0xa3521836)}},
-         {{TOBN(0xcedd2531, 0x73faa485), TOBN(0xc8ee6c4f, 0xc0a76878),
-           TOBN(0xddbccfc9, 0x2a11667d), TOBN(0x1a418ea9, 0x1c2f695a)},
-          {TOBN(0xdb11bd92, 0x51f73971), TOBN(0x3e4b3c82, 0xda2ed89f),
-           TOBN(0x9a44f3f4, 0xe73e0319), TOBN(0xd1e3de0f, 0x303431af)}},
-         {{TOBN(0x3c5604ff, 0x50f75f9c), TOBN(0x1d8eddf3, 0x7e752b22),
-           TOBN(0x0ef074dd, 0x3c9a1118), TOBN(0xd0ffc172, 0xccb86d7b)},
-          {TOBN(0xabd1ece3, 0x037d90f2), TOBN(0xe3f307d6, 0x6055856c),
-           TOBN(0x422f9328, 0x7e4c6daf), TOBN(0x902aac66, 0x334879a0)}},
-         {{TOBN(0xb6a1e7bf, 0x94cdfade), TOBN(0x6c97e1ed, 0x7fc6d634),
-           TOBN(0x662ad24d, 0xa2fb63f8), TOBN(0xf81be1b9, 0xa5928405)},
-          {TOBN(0x86d765e4, 0xd14b4206), TOBN(0xbecc2e0e, 0x8fa0db65),
-           TOBN(0xa28838e0, 0xb17fc76c), TOBN(0xe49a602a, 0xe37cf24e)}},
-         {{TOBN(0x76b4131a, 0x567193ec), TOBN(0xaf3c305a, 0xe5f6e70b),
-           TOBN(0x9587bd39, 0x031eebdd), TOBN(0x5709def8, 0x71bbe831)},
-          {TOBN(0x57059983, 0x0eb2b669), TOBN(0x4d80ce1b, 0x875b7029),
-           TOBN(0x838a7da8, 0x0364ac16), TOBN(0x2f431d23, 0xbe1c83ab)}},
-         {{TOBN(0xe56812a6, 0xf9294dd3), TOBN(0xb448d01f, 0x9b4b0d77),
-           TOBN(0xf3ae6061, 0x04e8305c), TOBN(0x2bead645, 0x94d8c63e)},
-          {TOBN(0x0a85434d, 0x84fd8b07), TOBN(0x537b983f, 0xf7a9dee5),
-           TOBN(0xedcc5f18, 0xef55bd85), TOBN(0x2041af62, 0x21c6cf8b)}},
-         {{TOBN(0x8e52874c, 0xb940c71e), TOBN(0x211935a9, 0xdb5f4b3a),
-           TOBN(0x94350492, 0x301b1dc3), TOBN(0x33d2646d, 0x29958620)},
-          {TOBN(0x16b0d64b, 0xef911404), TOBN(0x9d1f25ea, 0x9a3c5ef4),
-           TOBN(0x20f200eb, 0x4a352c78), TOBN(0x43929f2c, 0x4bd0b428)}},
-         {{TOBN(0xa5656667, 0xc7196e29), TOBN(0x7992c2f0, 0x9391be48),
-           TOBN(0xaaa97cbd, 0x9ee0cd6e), TOBN(0x51b0310c, 0x3dc8c9bf)},
-          {TOBN(0x237f8acf, 0xdd9f22cb), TOBN(0xbb1d81a1, 0xb585d584),
-           TOBN(0x8d5d85f5, 0x8c416388), TOBN(0x0d6e5a5a, 0x42fe474f)}},
-         {{TOBN(0xe7812766, 0x38235d4e), TOBN(0x1c62bd67, 0x496e3298),
-           TOBN(0x8378660c, 0x3f175bc8), TOBN(0x4d04e189, 0x17afdd4d)},
-          {TOBN(0x32a81601, 0x85a8068c), TOBN(0xdb58e4e1, 0x92b29a85),
-           TOBN(0xe8a65b86, 0xc70d8a3b), TOBN(0x5f0e6f4e, 0x98a0403b)}},
-         {{TOBN(0x08129684, 0x69ed2370), TOBN(0x34dc30bd, 0x0871ee26),
-           TOBN(0x3a5ce948, 0x7c9c5b05), TOBN(0x7d487b80, 0x43a90c87)},
-          {TOBN(0x4089ba37, 0xdd0e7179), TOBN(0x45f80191, 0xb4041811),
-           TOBN(0x1c3e1058, 0x98747ba5), TOBN(0x98c4e13a, 0x6e1ae592)}},
-         {{TOBN(0xd44636e6, 0xe82c9f9e), TOBN(0x711db87c, 0xc33a1043),
-           TOBN(0x6f431263, 0xaa8aec05), TOBN(0x43ff120d, 0x2744a4aa)},
-          {TOBN(0xd3bd892f, 0xae77779b), TOBN(0xf0fe0cc9, 0x8cdc9f82),
-           TOBN(0xca5f7fe6, 0xf1c5b1bc), TOBN(0xcc63a682, 0x44929a72)}},
-         {{TOBN(0xc7eaba0c, 0x09dbe19a), TOBN(0x2f3585ad, 0x6b5c73c2),
-           TOBN(0x8ab8924b, 0x0ae50c30), TOBN(0x17fcd27a, 0x638b30ba)},
-          {TOBN(0xaf414d34, 0x10b3d5a5), TOBN(0x09c107d2, 0x2a9accf1),
-           TOBN(0x15dac49f, 0x946a6242), TOBN(0xaec3df2a, 0xd707d642)}},
-         {{TOBN(0x2c2492b7, 0x3f894ae0), TOBN(0xf59df3e5, 0xb75f18ce),
-           TOBN(0x7cb740d2, 0x8f53cad0), TOBN(0x3eb585fb, 0xc4f01294)},
-          {TOBN(0x17da0c86, 0x32c7f717), TOBN(0xeb8c795b, 0xaf943f4c),
-           TOBN(0x4ee23fb5, 0xf67c51d2), TOBN(0xef187575, 0x68889949)}},
-         {{TOBN(0xa6b4bdb2, 0x0389168b), TOBN(0xc4ecd258, 0xea577d03),
-           TOBN(0x3a63782b, 0x55743082), TOBN(0x6f678f4c, 0xc72f08cd)},
-          {TOBN(0x553511cf, 0x65e58dd8), TOBN(0xd53b4e3e, 0xd402c0cd),
-           TOBN(0x37de3e29, 0xa037c14c), TOBN(0x86b6c516, 0xc05712aa)}},
-         {{TOBN(0x2834da3e, 0xb38dff6f), TOBN(0xbe012c52, 0xea636be8),
-           TOBN(0x292d238c, 0x61dd37f8), TOBN(0x0e54523f, 0x8f8142db)},
-          {TOBN(0xe31eb436, 0x036a05d8), TOBN(0x83e3cdff, 0x1e93c0ff),
-           TOBN(0x3fd2fe0f, 0x50821ddf), TOBN(0xc8e19b0d, 0xff9eb33b)}},
-         {{TOBN(0xc8cc943f, 0xb569a5fe), TOBN(0xad0090d4, 0xd4342d75),
-           TOBN(0x82090b4b, 0xcaeca000), TOBN(0xca39687f, 0x1bd410eb)},
-          {TOBN(0xe7bb0df7, 0x65959d77), TOBN(0x39d78218, 0x9c964999),
-           TOBN(0xd87f62e8, 0xb2415451), TOBN(0xe5efb774, 0xbed76108)}},
-         {{TOBN(0x3ea011a4, 0xe822f0d0), TOBN(0xbc647ad1, 0x5a8704f8),
-           TOBN(0xbb315b35, 0x50c6820f), TOBN(0x863dec3d, 0xb7e76bec)},
-          {TOBN(0x01ff5d3a, 0xf017bfc7), TOBN(0x20054439, 0x976b8229),
-           TOBN(0x067fca37, 0x0bbd0d3b), TOBN(0xf63dde64, 0x7f5e3d0f)}},
-         {{TOBN(0x22dbefb3, 0x2a4c94e9), TOBN(0xafbff0fe, 0x96f8278a),
-           TOBN(0x80aea0b1, 0x3503793d), TOBN(0xb2238029, 0x5f06cd29)},
-          {TOBN(0x65703e57, 0x8ec3feca), TOBN(0x06c38314, 0x393e7053),
-           TOBN(0xa0b751eb, 0x7c6734c4), TOBN(0xd2e8a435, 0xc59f0f1e)}},
-         {{TOBN(0x147d9052, 0x5e9ca895), TOBN(0x2f4dd31e, 0x972072df),
-           TOBN(0xa16fda8e, 0xe6c6755c), TOBN(0xc66826ff, 0xcf196558)},
-          {TOBN(0x1f1a76a3, 0x0cf43895), TOBN(0xa9d604e0, 0x83c3097b),
-           TOBN(0xe1908309, 0x66390e0e), TOBN(0xa50bf753, 0xb3c85eff)}},
-         {{TOBN(0x0696bdde, 0xf6a70251), TOBN(0x548b801b, 0x3c6ab16a),
-           TOBN(0x37fcf704, 0xa4d08762), TOBN(0x090b3def, 0xdff76c4e)},
-          {TOBN(0x87e8cb89, 0x69cb9158), TOBN(0x44a90744, 0x995ece43),
-           TOBN(0xf85395f4, 0x0ad9fbf5), TOBN(0x49b0f6c5, 0x4fb0c82d)}},
-         {{TOBN(0x75d9bc15, 0xadf7cccf), TOBN(0x81a3e5d6, 0xdfa1e1b0),
-           TOBN(0x8c39e444, 0x249bc17e), TOBN(0xf37dccb2, 0x8ea7fd43)},
-          {TOBN(0xda654873, 0x907fba12), TOBN(0x35daa6da, 0x4a372904),
-           TOBN(0x0564cfc6, 0x6283a6c5), TOBN(0xd09fa4f6, 0x4a9395bf)}},
-         {{TOBN(0x688e9ec9, 0xaeb19a36), TOBN(0xd913f1ce, 0xc7bfbfb4),
-           TOBN(0x797b9a3c, 0x61c2faa6), TOBN(0x2f979bec, 0x6a0a9c12)},
-          {TOBN(0xb5969d0f, 0x359679ec), TOBN(0xebcf523d, 0x079b0460),
-           TOBN(0xfd6b0008, 0x10fab870), TOBN(0x3f2edcda, 0x9373a39c)}},
-         {{TOBN(0x0d64f9a7, 0x6f568431), TOBN(0xf848c27c, 0x02f8898c),
-           TOBN(0xf418ade1, 0x260b5bd5), TOBN(0xc1f3e323, 0x6973dee8)},
-          {TOBN(0x46e9319c, 0x26c185dd), TOBN(0x6d85b7d8, 0x546f0ac4),
-           TOBN(0x427965f2, 0x247f9d57), TOBN(0xb519b636, 0xb0035f48)}},
-         {{TOBN(0x6b6163a9, 0xab87d59c), TOBN(0xff9f58c3, 0x39caaa11),
-           TOBN(0x4ac39cde, 0x3177387b), TOBN(0x5f6557c2, 0x873e77f9)},
-          {TOBN(0x67504006, 0x36a83041), TOBN(0x9b1c96ca, 0x75ef196c),
-           TOBN(0xf34283de, 0xb08c7940), TOBN(0x7ea09644, 0x1128c316)}},
-         {{TOBN(0xb510b3b5, 0x6aa39dff), TOBN(0x59b43da2, 0x9f8e4d8c),
-           TOBN(0xa8ce31fd, 0x9e4c4b9f), TOBN(0x0e20be26, 0xc1303c01)},
-          {TOBN(0x18187182, 0xe8ee47c9), TOBN(0xd9687cdb, 0x7db98101),
-           TOBN(0x7a520e4d, 0xa1e14ff6), TOBN(0x429808ba, 0x8836d572)}},
-         {{TOBN(0xa37ca60d, 0x4944b663), TOBN(0xf901f7a9, 0xa3f91ae5),
-           TOBN(0xe4e3e76e, 0x9e36e3b1), TOBN(0x9aa219cf, 0x29d93250)},
-          {TOBN(0x347fe275, 0x056a2512), TOBN(0xa4d643d9, 0xde65d95c),
-           TOBN(0x9669d396, 0x699fc3ed), TOBN(0xb598dee2, 0xcf8c6bbe)}},
-         {{TOBN(0x682ac1e5, 0xdda9e5c6), TOBN(0x4e0d3c72, 0xcaa9fc95),
-           TOBN(0x17faaade, 0x772bea44), TOBN(0x5ef8428c, 0xab0009c8)},
-          {TOBN(0xcc4ce47a, 0x460ff016), TOBN(0xda6d12bf, 0x725281cb),
-           TOBN(0x44c67848, 0x0223aad2), TOBN(0x6e342afa, 0x36256e28)}},
-         {{TOBN(0x1400bb0b, 0x93a37c04), TOBN(0x62b1bc9b, 0xdd10bd96),
-           TOBN(0x7251adeb, 0x0dac46b7), TOBN(0x7d33b92e, 0x7be4ef51)},
-          {TOBN(0x28b2a94b, 0xe61fa29a), TOBN(0x4b2be13f, 0x06422233),
-           TOBN(0x36d6d062, 0x330d8d37), TOBN(0x5ef80e1e, 0xb28ca005)}},
-         {{TOBN(0x174d4699, 0x6d16768e), TOBN(0x9fc4ff6a, 0x628bf217),
-           TOBN(0x77705a94, 0x154e490d), TOBN(0x9d96dd28, 0x8d2d997a)},
-          {TOBN(0x77e2d9d8, 0xce5d72c4), TOBN(0x9d06c5a4, 0xc11c714f),
-           TOBN(0x02aa5136, 0x79e4a03e), TOBN(0x1386b3c2, 0x030ff28b)}},
-         {{TOBN(0xfe82e8a6, 0xfb283f61), TOBN(0x7df203e5, 0xf3abc3fb),
-           TOBN(0xeec7c351, 0x3a4d3622), TOBN(0xf7d17dbf, 0xdf762761)},
-          {TOBN(0xc3956e44, 0x522055f0), TOBN(0xde3012db, 0x8fa748db),
-           TOBN(0xca9fcb63, 0xbf1dcc14), TOBN(0xa56d9dcf, 0xbe4e2f3a)}},
-         {{TOBN(0xb86186b6, 0x8bcec9c2), TOBN(0x7cf24df9, 0x680b9f06),
-           TOBN(0xc46b45ea, 0xc0d29281), TOBN(0xfff42bc5, 0x07b10e12)},
-          {TOBN(0x12263c40, 0x4d289427), TOBN(0x3d5f1899, 0xb4848ec4),
-           TOBN(0x11f97010, 0xd040800c), TOBN(0xb4c5f529, 0x300feb20)}},
-         {{TOBN(0xcc543f8f, 0xde94fdcb), TOBN(0xe96af739, 0xc7c2f05e),
-           TOBN(0xaa5e0036, 0x882692e1), TOBN(0x09c75b68, 0x950d4ae9)},
-          {TOBN(0x62f63df2, 0xb5932a7a), TOBN(0x2658252e, 0xde0979ad),
-           TOBN(0x2a19343f, 0xb5e69631), TOBN(0x718c7501, 0x525b666b)}},
-         {{TOBN(0x26a42d69, 0xea40dc3a), TOBN(0xdc84ad22, 0xaecc018f),
-           TOBN(0x25c36c7b, 0x3270f04a), TOBN(0x46ba6d47, 0x50fa72ed)},
-          {TOBN(0x6c37d1c5, 0x93e58a8e), TOBN(0xa2394731, 0x120c088c),
-           TOBN(0xc3be4263, 0xcb6e86da), TOBN(0x2c417d36, 0x7126d038)}},
-         {{TOBN(0x5b70f9c5, 0x8b6f8efa), TOBN(0x671a2faa, 0x37718536),
-           TOBN(0xd3ced3c6, 0xb539c92b), TOBN(0xe56f1bd9, 0xa31203c2)},
-          {TOBN(0x8b096ec4, 0x9ff3c8eb), TOBN(0x2deae432, 0x43491cea),
-           TOBN(0x2465c6eb, 0x17943794), TOBN(0x5d267e66, 0x20586843)}},
-         {{TOBN(0x9d3d116d, 0xb07159d0), TOBN(0xae07a67f, 0xc1896210),
-           TOBN(0x8fc84d87, 0xbb961579), TOBN(0x30009e49, 0x1c1f8dd6)},
-          {TOBN(0x8a8caf22, 0xe3132819), TOBN(0xcffa197c, 0xf23ab4ff),
-           TOBN(0x58103a44, 0x205dd687), TOBN(0x57b796c3, 0x0ded67a2)}},
-         {{TOBN(0x0b9c3a6c, 0xa1779ad7), TOBN(0xa33cfe2e, 0x357c09c5),
-           TOBN(0x2ea29315, 0x3db4a57e), TOBN(0x91959695, 0x8ebeb52e)},
-          {TOBN(0x118db9a6, 0xe546c879), TOBN(0x8e996df4, 0x6295c8d6),
-           TOBN(0xdd990484, 0x55ec806b), TOBN(0x24f291ca, 0x165c1035)}},
-         {{TOBN(0xcca523bb, 0x440e2229), TOBN(0x324673a2, 0x73ef4d04),
-           TOBN(0xaf3adf34, 0x3e11ec39), TOBN(0x6136d7f1, 0xdc5968d3)},
-          {TOBN(0x7a7b2899, 0xb053a927), TOBN(0x3eaa2661, 0xae067ecd),
-           TOBN(0x8549b9c8, 0x02779cd9), TOBN(0x061d7940, 0xc53385ea)}},
-         {{TOBN(0x3e0ba883, 0xf06d18bd), TOBN(0x4ba6de53, 0xb2700843),
-           TOBN(0xb966b668, 0x591a9e4d), TOBN(0x93f67567, 0x7f4fa0ed)},
-          {TOBN(0x5a02711b, 0x4347237b), TOBN(0xbc041e2f, 0xe794608e),
-           TOBN(0x55af10f5, 0x70f73d8c), TOBN(0xd2d4d4f7, 0xbb7564f7)}},
-         {{TOBN(0xd7d27a89, 0xb3e93ce7), TOBN(0xf7b5a875, 0x5d3a2c1b),
-           TOBN(0xb29e68a0, 0x255b218a), TOBN(0xb533837e, 0x8af76754)},
-          {TOBN(0xd1b05a73, 0x579fab2e), TOBN(0xb41055a1, 0xecd74385),
-           TOBN(0xb2369274, 0x445e9115), TOBN(0x2972a7c4, 0xf520274e)}},
-         {{TOBN(0x6c08334e, 0xf678e68a), TOBN(0x4e4160f0, 0x99b057ed),
-           TOBN(0x3cfe11b8, 0x52ccb69a), TOBN(0x2fd1823a, 0x21c8f772)},
-          {TOBN(0xdf7f072f, 0x3298f055), TOBN(0x8c0566f9, 0xfec74a6e),
-           TOBN(0xe549e019, 0x5bb4d041), TOBN(0x7c3930ba, 0x9208d850)}},
-         {{TOBN(0xe07141fc, 0xaaa2902b), TOBN(0x539ad799, 0xe4f69ad3),
-           TOBN(0xa6453f94, 0x813f9ffd), TOBN(0xc58d3c48, 0x375bc2f7)},
-          {TOBN(0xb3326fad, 0x5dc64e96), TOBN(0x3aafcaa9, 0xb240e354),
-           TOBN(0x1d1b0903, 0xaca1e7a9), TOBN(0x4ceb9767, 0x1211b8a0)}},
-         {{TOBN(0xeca83e49, 0xe32a858e), TOBN(0x4c32892e, 0xae907bad),
-           TOBN(0xd5b42ab6, 0x2eb9b494), TOBN(0x7fde3ee2, 0x1eabae1b)},
-          {TOBN(0x13b5ab09, 0xcaf54957), TOBN(0xbfb028be, 0xe5f5d5d5),
-           TOBN(0x928a0650, 0x2003e2c0), TOBN(0x90793aac, 0x67476843)}},
-         {{TOBN(0x5e942e79, 0xc81710a0), TOBN(0x557e4a36, 0x27ccadd4),
-           TOBN(0x72a2bc56, 0x4bcf6d0c), TOBN(0x09ee5f43, 0x26d7b80c)},
-          {TOBN(0x6b70dbe9, 0xd4292f19), TOBN(0x56f74c26, 0x63f16b18),
-           TOBN(0xc23db0f7, 0x35fbb42a), TOBN(0xb606bdf6, 0x6ae10040)}},
-         {{TOBN(0x1eb15d4d, 0x044573ac), TOBN(0x7dc3cf86, 0x556b0ba4),
-           TOBN(0x97af9a33, 0xc60df6f7), TOBN(0x0b1ef85c, 0xa716ce8c)},
-          {TOBN(0x2922f884, 0xc96958be), TOBN(0x7c32fa94, 0x35690963),
-           TOBN(0x2d7f667c, 0xeaa00061), TOBN(0xeaaf7c17, 0x3547365c)}},
-         {{TOBN(0x1eb4de46, 0x87032d58), TOBN(0xc54f3d83, 0x5e2c79e0),
-           TOBN(0x07818df4, 0x5d04ef23), TOBN(0x55faa9c8, 0x673d41b4)},
-          {TOBN(0xced64f6f, 0x89b95355), TOBN(0x4860d2ea, 0xb7415c84),
-           TOBN(0x5fdb9bd2, 0x050ebad3), TOBN(0xdb53e0cc, 0x6685a5bf)}},
-         {{TOBN(0xb830c031, 0x9feb6593), TOBN(0xdd87f310, 0x6accff17),
-           TOBN(0x2303ebab, 0x9f555c10), TOBN(0x94603695, 0x287e7065)},
-          {TOBN(0xf88311c3, 0x2e83358c), TOBN(0x508dd9b4, 0xeefb0178),
-           TOBN(0x7ca23706, 0x2dba8652), TOBN(0x62aac5a3, 0x0047abe5)}},
-         {{TOBN(0x9a61d2a0, 0x8b1ea7b3), TOBN(0xd495ab63, 0xae8b1485),
-           TOBN(0x38740f84, 0x87052f99), TOBN(0x178ebe5b, 0xb2974eea)},
-          {TOBN(0x030bbcca, 0x5b36d17f), TOBN(0xb5e4cce3, 0xaaf86eea),
-           TOBN(0xb51a0220, 0x68f8e9e0), TOBN(0xa4348796, 0x09eb3e75)}},
-         {{TOBN(0xbe592309, 0xeef1a752), TOBN(0x5d7162d7, 0x6f2aa1ed),
-           TOBN(0xaebfb5ed, 0x0f007dd2), TOBN(0x255e14b2, 0xc89edd22)},
-          {TOBN(0xba85e072, 0x0303b697), TOBN(0xc5d17e25, 0xf05720ff),
-           TOBN(0x02b58d6e, 0x5128ebb6), TOBN(0x2c80242d, 0xd754e113)}},
-         {{TOBN(0x919fca5f, 0xabfae1ca), TOBN(0x937afaac, 0x1a21459b),
-           TOBN(0x9e0ca91c, 0x1f66a4d2), TOBN(0x194cc7f3, 0x23ec1331)},
-          {TOBN(0xad25143a, 0x8aa11690), TOBN(0xbe40ad8d, 0x09b59e08),
-           TOBN(0x37d60d9b, 0xe750860a), TOBN(0x6c53b008, 0xc6bf434c)}},
-         {{TOBN(0xb572415d, 0x1356eb80), TOBN(0xb8bf9da3, 0x9578ded8),
-           TOBN(0x22658e36, 0x5e8fb38b), TOBN(0x9b70ce22, 0x5af8cb22)},
-          {TOBN(0x7c00018a, 0x829a8180), TOBN(0x84329f93, 0xb81ed295),
-           TOBN(0x7c343ea2, 0x5f3cea83), TOBN(0x38f8655f, 0x67586536)}},
-         {{TOBN(0xa661a0d0, 0x1d3ec517), TOBN(0x98744652, 0x512321ae),
-           TOBN(0x084ca591, 0xeca92598), TOBN(0xa9bb9dc9, 0x1dcb3feb)},
-          {TOBN(0x14c54355, 0x78b4c240), TOBN(0x5ed62a3b, 0x610cafdc),
-           TOBN(0x07512f37, 0x1b38846b), TOBN(0x571bb70a, 0xb0e38161)}},
-         {{TOBN(0xb556b95b, 0x2da705d2), TOBN(0x3ef8ada6, 0xb1a08f98),
-           TOBN(0x85302ca7, 0xddecfbe5), TOBN(0x0e530573, 0x943105cd)},
-          {TOBN(0x60554d55, 0x21a9255d), TOBN(0x63a32fa1, 0xf2f3802a),
-           TOBN(0x35c8c5b0, 0xcd477875), TOBN(0x97f458ea, 0x6ad42da1)}},
-         {{TOBN(0x832d7080, 0xeb6b242d), TOBN(0xd30bd023, 0x3b71e246),
-           TOBN(0x7027991b, 0xbe31139d), TOBN(0x68797e91, 0x462e4e53)},
-          {TOBN(0x423fe20a, 0x6b4e185a), TOBN(0x82f2c67e, 0x42d9b707),
-           TOBN(0x25c81768, 0x4cf7811b), TOBN(0xbd53005e, 0x045bb95d)}}},
-        {{{TOBN(0xe5f649be, 0x9d8e68fd), TOBN(0xdb0f0533, 0x1b044320),
-           TOBN(0xf6fde9b3, 0xe0c33398), TOBN(0x92f4209b, 0x66c8cfae)},
-          {TOBN(0xe9d1afcc, 0x1a739d4b), TOBN(0x09aea75f, 0xa28ab8de),
-           TOBN(0x14375fb5, 0xeac6f1d0), TOBN(0x6420b560, 0x708f7aa5)}},
-         {{TOBN(0x9eae499c, 0x6254dc41), TOBN(0x7e293924, 0x7a837e7e),
-           TOBN(0x74aec08c, 0x090524a7), TOBN(0xf82b9219, 0x8d6f55f2)},
-          {TOBN(0x493c962e, 0x1402cec5), TOBN(0x9f17ca17, 0xfa2f30e7),
-           TOBN(0xbcd783e8, 0xe9b879cb), TOBN(0xea3d8c14, 0x5a6f145f)}},
-         {{TOBN(0xdede15e7, 0x5e0dee6e), TOBN(0x74f24872, 0xdc628aa2),
-           TOBN(0xd3e9c4fe, 0x7861bb93), TOBN(0x56d4822a, 0x6187b2e0)},
-          {TOBN(0xb66417cf, 0xc59826f9), TOBN(0xca260969, 0x2408169e),
-           TOBN(0xedf69d06, 0xc79ef885), TOBN(0x00031f8a, 0xdc7d138f)}},
-         {{TOBN(0x103c46e6, 0x0ebcf726), TOBN(0x4482b831, 0x6231470e),
-           TOBN(0x6f6dfaca, 0x487c2109), TOBN(0x2e0ace97, 0x62e666ef)},
-          {TOBN(0x3246a9d3, 0x1f8d1f42), TOBN(0x1b1e83f1, 0x574944d2),
-           TOBN(0x13dfa63a, 0xa57f334b), TOBN(0x0cf8daed, 0x9f025d81)}},
-         {{TOBN(0x30d78ea8, 0x00ee11c1), TOBN(0xeb053cd4, 0xb5e3dd75),
-           TOBN(0x9b65b13e, 0xd58c43c5), TOBN(0xc3ad49bd, 0xbd151663)},
-          {TOBN(0x99fd8e41, 0xb6427990), TOBN(0x12cf15bd, 0x707eae1e),
-           TOBN(0x29ad4f1b, 0x1aabb71e), TOBN(0x5143e74d, 0x07545d0e)}},
-         {{TOBN(0x30266336, 0xc88bdee1), TOBN(0x25f29306, 0x5876767c),
-           TOBN(0x9c078571, 0xc6731996), TOBN(0xc88690b2, 0xed552951)},
-          {TOBN(0x274f2c2d, 0x852705b4), TOBN(0xb0bf8d44, 0x4e09552d),
-           TOBN(0x7628beeb, 0x986575d1), TOBN(0x407be238, 0x7f864651)}},
-         {{TOBN(0x0e5e3049, 0xa639fc6b), TOBN(0xe75c35d9, 0x86003625),
-           TOBN(0x0cf35bd8, 0x5dcc1646), TOBN(0x8bcaced2, 0x6c26273a)},
-          {TOBN(0xe22ecf1d, 0xb5536742), TOBN(0x013dd897, 0x1a9e068b),
-           TOBN(0x17f411cb, 0x8a7909c5), TOBN(0x5757ac98, 0x861dd506)}},
-         {{TOBN(0x85de1f0d, 0x1e935abb), TOBN(0xdefd10b4, 0x154de37a),
-           TOBN(0xb8d9e392, 0x369cebb5), TOBN(0x54d5ef9b, 0x761324be)},
-          {TOBN(0x4d6341ba, 0x74f17e26), TOBN(0xc0a0e3c8, 0x78c1dde4),
-           TOBN(0xa6d77581, 0x87d918fd), TOBN(0x66876015, 0x02ca3a13)}},
-         {{TOBN(0xc7313e9c, 0xf36658f0), TOBN(0xc433ef1c, 0x71f8057e),
-           TOBN(0x85326246, 0x1b6a835a), TOBN(0xc8f05398, 0x7c86394c)},
-          {TOBN(0xff398cdf, 0xe983c4a1), TOBN(0xbf5e8162, 0x03b7b931),
-           TOBN(0x93193c46, 0xb7b9045b), TOBN(0x1e4ebf5d, 0xa4a6e46b)}},
-         {{TOBN(0xf9942a60, 0x43a24fe7), TOBN(0x29c1191e, 0xffb3492b),
-           TOBN(0x9f662449, 0x902fde05), TOBN(0xc792a7ac, 0x6713c32d)},
-          {TOBN(0x2fd88ad8, 0xb737982c), TOBN(0x7e3a0319, 0xa21e60e3),
-           TOBN(0x09b0de44, 0x7383591a), TOBN(0x6df141ee, 0x8310a456)}},
-         {{TOBN(0xaec1a039, 0xe6d6f471), TOBN(0x14b2ba0f, 0x1198d12e),
-           TOBN(0xebc1a160, 0x3aeee5ac), TOBN(0x401f4836, 0xe0b964ce)},
-          {TOBN(0x2ee43796, 0x4fd03f66), TOBN(0x3fdb4e49, 0xdd8f3f12),
-           TOBN(0x6ef267f6, 0x29380f18), TOBN(0x3e8e9670, 0x8da64d16)}},
-         {{TOBN(0xbc19180c, 0x207674f1), TOBN(0x112e09a7, 0x33ae8fdb),
-           TOBN(0x99667554, 0x6aaeb71e), TOBN(0x79432af1, 0xe101b1c7)},
-          {TOBN(0xd5eb558f, 0xde2ddec6), TOBN(0x81392d1f, 0x5357753f),
-           TOBN(0xa7a76b97, 0x3ae1158a), TOBN(0x416fbbff, 0x4a899991)}},
-         {{TOBN(0x9e65fdfd, 0x0d4a9dcf), TOBN(0x7bc29e48, 0x944ddf12),
-           TOBN(0xbc1a92d9, 0x3c856866), TOBN(0x273c6905, 0x6e98dfe2)},
-          {TOBN(0x69fce418, 0xcdfaa6b8), TOBN(0x606bd823, 0x5061c69f),
-           TOBN(0x42d495a0, 0x6af75e27), TOBN(0x8ed3d505, 0x6d873a1f)}},
-         {{TOBN(0xaf552841, 0x6ab25b6a), TOBN(0xc6c0ffc7, 0x2b1a4523),
-           TOBN(0xab18827b, 0x21c99e03), TOBN(0x060e8648, 0x9034691b)},
-          {TOBN(0x5207f90f, 0x93c7f398), TOBN(0x9f4a96cb, 0x82f8d10b),
-           TOBN(0xdd71cd79, 0x3ad0f9e3), TOBN(0x84f435d2, 0xfc3a54f5)}},
-         {{TOBN(0x4b03c55b, 0x8e33787f), TOBN(0xef42f975, 0xa6384673),
-           TOBN(0xff7304f7, 0x5051b9f0), TOBN(0x18aca1dc, 0x741c87c2)},
-          {TOBN(0x56f120a7, 0x2d4bfe80), TOBN(0xfd823b3d, 0x053e732c),
-           TOBN(0x11bccfe4, 0x7537ca16), TOBN(0xdf6c9c74, 0x1b5a996b)}},
-         {{TOBN(0xee7332c7, 0x904fc3fa), TOBN(0x14a23f45, 0xc7e3636a),
-           TOBN(0xc38659c3, 0xf091d9aa), TOBN(0x4a995e5d, 0xb12d8540)},
-          {TOBN(0x20a53bec, 0xf3a5598a), TOBN(0x56534b17, 0xb1eaa995),
-           TOBN(0x9ed3dca4, 0xbf04e03c), TOBN(0x716c563a, 0xd8d56268)}},
-         {{TOBN(0x27ba77a4, 0x1d6178e7), TOBN(0xe4c80c40, 0x68a1ff8e),
-           TOBN(0x75011099, 0x0a13f63d), TOBN(0x7bf33521, 0xa61d46f3)},
-          {TOBN(0x0aff218e, 0x10b365bb), TOBN(0x81021804, 0x0fd7ea75),
-           TOBN(0x05a3fd8a, 0xa4b3a925), TOBN(0xb829e75f, 0x9b3db4e6)}},
-         {{TOBN(0x6bdc75a5, 0x4d53e5fb), TOBN(0x04a5dc02, 0xd52717e3),
-           TOBN(0x86af502f, 0xe9a42ec2), TOBN(0x8867e8fb, 0x2630e382)},
-          {TOBN(0xbf845c6e, 0xbec9889b), TOBN(0x54f491f2, 0xcb47c98d),
-           TOBN(0xa3091fba, 0x790c2a12), TOBN(0xd7f6fd78, 0xc20f708b)}},
-         {{TOBN(0xa569ac30, 0xacde5e17), TOBN(0xd0f996d0, 0x6852b4d7),
-           TOBN(0xe51d4bb5, 0x4609ae54), TOBN(0x3fa37d17, 0x0daed061)},
-          {TOBN(0x62a88684, 0x34b8fb41), TOBN(0x99a2acbd, 0x9efb64f1),
-           TOBN(0xb75c1a5e, 0x6448e1f2), TOBN(0xfa99951a, 0x42b5a069)}},
-         {{TOBN(0x6d956e89, 0x2f3b26e7), TOBN(0xf4709860, 0xda875247),
-           TOBN(0x3ad15179, 0x2482dda3), TOBN(0xd64110e3, 0x017d82f0)},
-          {TOBN(0x14928d2c, 0xfad414e4), TOBN(0x2b155f58, 0x2ed02b24),
-           TOBN(0x481a141b, 0xcb821bf1), TOBN(0x12e3c770, 0x4f81f5da)}},
-         {{TOBN(0xe49c5de5, 0x9fff8381), TOBN(0x11053232, 0x5bbec894),
-           TOBN(0xa0d051cc, 0x454d88c4), TOBN(0x4f6db89c, 0x1f8e531b)},
-          {TOBN(0x34fe3fd6, 0xca563a44), TOBN(0x7f5c2215, 0x58da8ab9),
-           TOBN(0x8445016d, 0x9474f0a1), TOBN(0x17d34d61, 0xcb7d8a0a)}},
-         {{TOBN(0x8e9d3910, 0x1c474019), TOBN(0xcaff2629, 0xd52ceefb),
-           TOBN(0xf9cf3e32, 0xc1622c2b), TOBN(0xd4b95e3c, 0xe9071a05)},
-          {TOBN(0xfbbca61f, 0x1594438c), TOBN(0x1eb6e6a6, 0x04aadedf),
-           TOBN(0x853027f4, 0x68e14940), TOBN(0x221d322a, 0xdfabda9c)}},
-         {{TOBN(0xed8ea9f6, 0xb7cb179a), TOBN(0xdc7b764d, 0xb7934dcc),
-           TOBN(0xfcb13940, 0x5e09180d), TOBN(0x6629a6bf, 0xb47dc2dd)},
-          {TOBN(0xbfc55e4e, 0x9f5a915e), TOBN(0xb1db9d37, 0x6204441e),
-           TOBN(0xf82d68cf, 0x930c5f53), TOBN(0x17d3a142, 0xcbb605b1)}},
-         {{TOBN(0xdd5944ea, 0x308780f2), TOBN(0xdc8de761, 0x3845f5e4),
-           TOBN(0x6beaba7d, 0x7624d7a3), TOBN(0x1e709afd, 0x304df11e)},
-          {TOBN(0x95364376, 0x02170456), TOBN(0xbf204b3a, 0xc8f94b64),
-           TOBN(0x4e53af7c, 0x5680ca68), TOBN(0x0526074a, 0xe0c67574)}},
-         {{TOBN(0x95d8cef8, 0xecd92af6), TOBN(0xe6b9fa7a, 0x6cd1745a),
-           TOBN(0x3d546d3d, 0xa325c3e4), TOBN(0x1f57691d, 0x9ae93aae)},
-          {TOBN(0xe891f3fe, 0x9d2e1a33), TOBN(0xd430093f, 0xac063d35),
-           TOBN(0xeda59b12, 0x5513a327), TOBN(0xdc2134f3, 0x5536f18f)}},
-         {{TOBN(0xaa51fe2c, 0x5c210286), TOBN(0x3f68aaee, 0x1cab658c),
-           TOBN(0x5a23a00b, 0xf9357292), TOBN(0x9a626f39, 0x7efdabed)},
-          {TOBN(0xfe2b3bf3, 0x199d78e3), TOBN(0xb7a2af77, 0x71bbc345),
-           TOBN(0x3d19827a, 0x1e59802c), TOBN(0x823bbc15, 0xb487a51c)}},
-         {{TOBN(0x856139f2, 0x99d0a422), TOBN(0x9ac3df65, 0xf456c6fb),
-           TOBN(0xaddf65c6, 0x701f8bd6), TOBN(0x149f321e, 0x3758df87)},
-          {TOBN(0xb1ecf714, 0x721b7eba), TOBN(0xe17df098, 0x31a3312a),
-           TOBN(0xdb2fd6ec, 0xd5c4d581), TOBN(0xfd02996f, 0x8fcea1b3)}},
-         {{TOBN(0xe29fa63e, 0x7882f14f), TOBN(0xc9f6dc35, 0x07c6cadc),
-           TOBN(0x46f22d6f, 0xb882bed0), TOBN(0x1a45755b, 0xd118e52c)},
-          {TOBN(0x9f2c7c27, 0x7c4608cf), TOBN(0x7ccbdf32, 0x568012c2),
-           TOBN(0xfcb0aedd, 0x61729b0e), TOBN(0x7ca2ca9e, 0xf7d75dbf)}},
-         {{TOBN(0xf58fecb1, 0x6f640f62), TOBN(0xe274b92b, 0x39f51946),
-           TOBN(0x7f4dfc04, 0x6288af44), TOBN(0x0a91f32a, 0xeac329e5)},
-          {TOBN(0x43ad274b, 0xd6aaba31), TOBN(0x719a1640, 0x0f6884f9),
-           TOBN(0x685d29f6, 0xdaf91e20), TOBN(0x5ec1cc33, 0x27e49d52)}},
-         {{TOBN(0x38f4de96, 0x3b54a059), TOBN(0x0e0015e5, 0xefbcfdb3),
-           TOBN(0x177d23d9, 0x4dbb8da6), TOBN(0x98724aa2, 0x97a617ad)},
-          {TOBN(0x30f0885b, 0xfdb6558e), TOBN(0xf9f7a28a, 0xc7899a96),
-           TOBN(0xd2ae8ac8, 0x872dc112), TOBN(0xfa0642ca, 0x73c3c459)}},
-         {{TOBN(0x15296981, 0xe7dfc8d6), TOBN(0x67cd4450, 0x1fb5b94a),
-           TOBN(0x0ec71cf1, 0x0eddfd37), TOBN(0xc7e5eeb3, 0x9a8eddc7)},
-          {TOBN(0x02ac8e3d, 0x81d95028), TOBN(0x0088f172, 0x70b0e35d),
-           TOBN(0xec041fab, 0xe1881fe3), TOBN(0x62cf71b8, 0xd99e7faa)}},
-         {{TOBN(0x5043dea7, 0xe0f222c2), TOBN(0x309d42ac, 0x72e65142),
-           TOBN(0x94fe9ddd, 0x9216cd30), TOBN(0xd6539c7d, 0x0f87feec)},
-          {TOBN(0x03c5a57c, 0x432ac7d7), TOBN(0x72692cf0, 0x327fda10),
-           TOBN(0xec28c85f, 0x280698de), TOBN(0x2331fb46, 0x7ec283b1)}},
-         {{TOBN(0xd34bfa32, 0x2867e633), TOBN(0x78709a82, 0x0a9cc815),
-           TOBN(0xb7fe6964, 0x875e2fa5), TOBN(0x25cc064f, 0x9e98bfb5)},
-          {TOBN(0x9eb0151c, 0x493a65c5), TOBN(0x5fb5d941, 0x53182464),
-           TOBN(0x69e6f130, 0xf04618e2), TOBN(0xa8ecec22, 0xf89c8ab6)}},
-         {{TOBN(0xcd6ac88b, 0xb96209bd), TOBN(0x65fa8cdb, 0xb3e1c9e0),
-           TOBN(0xa47d22f5, 0x4a8d8eac), TOBN(0x83895cdf, 0x8d33f963)},
-          {TOBN(0xa8adca59, 0xb56cd3d1), TOBN(0x10c8350b, 0xdaf38232),
-           TOBN(0x2b161fb3, 0xa5080a9f), TOBN(0xbe7f5c64, 0x3af65b3a)}},
-         {{TOBN(0x2c754039, 0x97403a11), TOBN(0x94626cf7, 0x121b96af),
-           TOBN(0x431de7c4, 0x6a983ec2), TOBN(0x3780dd3a, 0x52cc3df7)},
-          {TOBN(0xe28a0e46, 0x2baf8e3b), TOBN(0xabe68aad, 0x51d299ae),
-           TOBN(0x603eb8f9, 0x647a2408), TOBN(0x14c61ed6, 0x5c750981)}},
-         {{TOBN(0x88b34414, 0xc53352e7), TOBN(0x5a34889c, 0x1337d46e),
-           TOBN(0x612c1560, 0xf95f2bc8), TOBN(0x8a3f8441, 0xd4807a3a)},
-          {TOBN(0x680d9e97, 0x5224da68), TOBN(0x60cd6e88, 0xc3eb00e9),
-           TOBN(0x3875a98e, 0x9a6bc375), TOBN(0xdc80f924, 0x4fd554c2)}},
-         {{TOBN(0x6c4b3415, 0x6ac77407), TOBN(0xa1e5ea8f, 0x25420681),
-           TOBN(0x541bfa14, 0x4607a458), TOBN(0x5dbc7e7a, 0x96d7fbf9)},
-          {TOBN(0x646a851b, 0x31590a47), TOBN(0x039e85ba, 0x15ee6df8),
-           TOBN(0xd19fa231, 0xd7b43fc0), TOBN(0x84bc8be8, 0x299a0e04)}},
-         {{TOBN(0x2b9d2936, 0xf20df03a), TOBN(0x24054382, 0x8608d472),
-           TOBN(0x76b6ba04, 0x9149202a), TOBN(0xb21c3831, 0x3670e7b7)},
-          {TOBN(0xddd93059, 0xd6fdee10), TOBN(0x9da47ad3, 0x78488e71),
-           TOBN(0x99cc1dfd, 0xa0fcfb25), TOBN(0x42abde10, 0x64696954)}},
-         {{TOBN(0x14cc15fc, 0x17eab9fe), TOBN(0xd6e863e4, 0xd3e70972),
-           TOBN(0x29a7765c, 0x6432112c), TOBN(0x88660001, 0x5b0774d8)},
-          {TOBN(0x3729175a, 0x2c088eae), TOBN(0x13afbcae, 0x8230b8d4),
-           TOBN(0x44768151, 0x915f4379), TOBN(0xf086431a, 0xd8d22812)}},
-         {{TOBN(0x37461955, 0xc298b974), TOBN(0x905fb5f0, 0xf8711e04),
-           TOBN(0x787abf3a, 0xfe969d18), TOBN(0x392167c2, 0x6f6a494e)},
-          {TOBN(0xfc7a0d2d, 0x28c511da), TOBN(0xf127c7dc, 0xb66a262d),
-           TOBN(0xf9c4bb95, 0xfd63fdf0), TOBN(0x90016589, 0x3913ef46)}},
-         {{TOBN(0x74d2a73c, 0x11aa600d), TOBN(0x2f5379bd, 0x9fb5ab52),
-           TOBN(0xe49e53a4, 0x7fb70068), TOBN(0x68dd39e5, 0x404aa9a7)},
-          {TOBN(0xb9b0cf57, 0x2ecaa9c3), TOBN(0xba0e103b, 0xe824826b),
-           TOBN(0x60c2198b, 0x4631a3c4), TOBN(0xc5ff84ab, 0xfa8966a2)}},
-         {{TOBN(0x2d6ebe22, 0xac95aff8), TOBN(0x1c9bb6db, 0xb5a46d09),
-           TOBN(0x419062da, 0x53ee4f8d), TOBN(0x7b9042d0, 0xbb97efef)},
-          {TOBN(0x0f87f080, 0x830cf6bd), TOBN(0x4861d19a, 0x6ec8a6c6),
-           TOBN(0xd3a0daa1, 0x202f01aa), TOBN(0xb0111674, 0xf25afbd5)}},
-         {{TOBN(0x6d00d6cf, 0x1afb20d9), TOBN(0x13695000, 0x40671bc5),
-           TOBN(0x913ab0dc, 0x2485ea9b), TOBN(0x1f2bed06, 0x9eef61ac)},
-          {TOBN(0x850c8217, 0x6d799e20), TOBN(0x93415f37, 0x3271c2de),
-           TOBN(0x5afb06e9, 0x6c4f5910), TOBN(0x688a52df, 0xc4e9e421)}},
-         {{TOBN(0x30495ba3, 0xe2a9a6db), TOBN(0x4601303d, 0x58f9268b),
-           TOBN(0xbe3b0dad, 0x7eb0f04f), TOBN(0x4ea47250, 0x4456936d)},
-          {TOBN(0x8caf8798, 0xd33fd3e7), TOBN(0x1ccd8a89, 0xeb433708),
-           TOBN(0x9effe3e8, 0x87fd50ad), TOBN(0xbe240a56, 0x6b29c4df)}},
-         {{TOBN(0xec4ffd98, 0xca0e7ebd), TOBN(0xf586783a, 0xe748616e),
-           TOBN(0xa5b00d8f, 0xc77baa99), TOBN(0x0acada29, 0xb4f34c9c)},
-          {TOBN(0x36dad67d, 0x0fe723ac), TOBN(0x1d8e53a5, 0x39c36c1e),
-           TOBN(0xe4dd342d, 0x1f4bea41), TOBN(0x64fd5e35, 0xebc9e4e0)}},
-         {{TOBN(0x96f01f90, 0x57908805), TOBN(0xb5b9ea3d, 0x5ed480dd),
-           TOBN(0x366c5dc2, 0x3efd2dd0), TOBN(0xed2fe305, 0x6e9dfa27)},
-          {TOBN(0x4575e892, 0x6e9197e2), TOBN(0x11719c09, 0xab502a5d),
-           TOBN(0x264c7bec, 0xe81f213f), TOBN(0x741b9241, 0x55f5c457)}},
-         {{TOBN(0x78ac7b68, 0x49a5f4f4), TOBN(0xf91d70a2, 0x9fc45b7d),
-           TOBN(0x39b05544, 0xb0f5f355), TOBN(0x11f06bce, 0xeef930d9)},
-          {TOBN(0xdb84d25d, 0x038d05e1), TOBN(0x04838ee5, 0xbacc1d51),
-           TOBN(0x9da3ce86, 0x9e8ee00b), TOBN(0xc3412057, 0xc36eda1f)}},
-         {{TOBN(0xae80b913, 0x64d9c2f4), TOBN(0x7468bac3, 0xa010a8ff),
-           TOBN(0xdfd20037, 0x37359d41), TOBN(0x1a0f5ab8, 0x15efeacc)},
-          {TOBN(0x7c25ad2f, 0x659d0ce0), TOBN(0x4011bcbb, 0x6785cff1),
-           TOBN(0x128b9912, 0x7e2192c7), TOBN(0xa549d8e1, 0x13ccb0e8)}},
-         {{TOBN(0x805588d8, 0xc85438b1), TOBN(0x5680332d, 0xbc25cb27),
-           TOBN(0xdcd1bc96, 0x1a4bfdf4), TOBN(0x779ff428, 0x706f6566)},
-          {TOBN(0x8bbee998, 0xf059987a), TOBN(0xf6ce8cf2, 0xcc686de7),
-           TOBN(0xf8ad3c4a, 0x953cfdb2), TOBN(0xd1d426d9, 0x2205da36)}},
-         {{TOBN(0xb3c0f13f, 0xc781a241), TOBN(0x3e89360e, 0xd75362a8),
-           TOBN(0xccd05863, 0xc8a91184), TOBN(0x9bd0c9b7, 0xefa8a7f4)},
-          {TOBN(0x97ee4d53, 0x8a912a4b), TOBN(0xde5e15f8, 0xbcf518fd),
-           TOBN(0x6a055bf8, 0xc467e1e0), TOBN(0x10be4b4b, 0x1587e256)}},
-         {{TOBN(0xd90c14f2, 0x668621c9), TOBN(0xd5518f51, 0xab9c92c1),
-           TOBN(0x8e6a0100, 0xd6d47b3c), TOBN(0xcbe980dd, 0x66716175)},
-          {TOBN(0x500d3f10, 0xddd83683), TOBN(0x3b6cb35d, 0x99cac73c),
-           TOBN(0x53730c8b, 0x6083d550), TOBN(0xcf159767, 0xdf0a1987)}},
-         {{TOBN(0x84bfcf53, 0x43ad73b3), TOBN(0x1b528c20, 0x4f035a94),
-           TOBN(0x4294edf7, 0x33eeac69), TOBN(0xb6283e83, 0x817f3240)},
-          {TOBN(0xc3fdc959, 0x0a5f25b1), TOBN(0xefaf8aa5, 0x5844ee22),
-           TOBN(0xde269ba5, 0xdbdde4de), TOBN(0xe3347160, 0xc56133bf)}},
-         {{TOBN(0xc1184219, 0x8d9ea9f8), TOBN(0x090de5db, 0xf3fc1ab5),
-           TOBN(0x404c37b1, 0x0bf22cda), TOBN(0x7de20ec8, 0xf5618894)},
-          {TOBN(0x754c588e, 0xecdaecab), TOBN(0x6ca4b0ed, 0x88342743),
-           TOBN(0x76f08bdd, 0xf4a938ec), TOBN(0xd182de89, 0x91493ccb)}},
-         {{TOBN(0xd652c53e, 0xc8a4186a), TOBN(0xb3e878db, 0x946d8e33),
-           TOBN(0x088453c0, 0x5f37663c), TOBN(0x5cd9daaa, 0xb407748b)},
-          {TOBN(0xa1f5197f, 0x586d5e72), TOBN(0x47500be8, 0xc443ca59),
-           TOBN(0x78ef35b2, 0xe2652424), TOBN(0x09c5d26f, 0x6dd7767d)}},
-         {{TOBN(0x7175a79a, 0xa74d3f7b), TOBN(0x0428fd8d, 0xcf5ea459),
-           TOBN(0x511cb97c, 0xa5d1746d), TOBN(0x36363939, 0xe71d1278)},
-          {TOBN(0xcf2df955, 0x10350bf4), TOBN(0xb3817439, 0x60aae782),
-           TOBN(0xa748c0e4, 0x3e688809), TOBN(0x98021fbf, 0xd7a5a006)}},
-         {{TOBN(0x9076a70c, 0x0e367a98), TOBN(0xbea1bc15, 0x0f62b7c2),
-           TOBN(0x2645a68c, 0x30fe0343), TOBN(0xacaffa78, 0x699dc14f)},
-          {TOBN(0xf4469964, 0x457bf9c4), TOBN(0x0db6407b, 0x0d2ead83),
-           TOBN(0x68d56cad, 0xb2c6f3eb), TOBN(0x3b512e73, 0xf376356c)}},
-         {{TOBN(0xe43b0e1f, 0xfce10408), TOBN(0x89ddc003, 0x5a5e257d),
-           TOBN(0xb0ae0d12, 0x0362e5b3), TOBN(0x07f983c7, 0xb0519161)},
-          {TOBN(0xc2e94d15, 0x5d5231e7), TOBN(0xcff22aed, 0x0b4f9513),
-           TOBN(0xb02588dd, 0x6ad0b0b5), TOBN(0xb967d1ac, 0x11d0dcd5)}},
-         {{TOBN(0x8dac6bc6, 0xcf777b6c), TOBN(0x0062bdbd, 0x4c6d1959),
-           TOBN(0x53da71b5, 0x0ef5cc85), TOBN(0x07012c7d, 0x4006f14f)},
-          {TOBN(0x4617f962, 0xac47800d), TOBN(0x53365f2b, 0xc102ed75),
-           TOBN(0xb422efcb, 0x4ab8c9d3), TOBN(0x195cb26b, 0x34af31c9)}},
-         {{TOBN(0x3a926e29, 0x05f2c4ce), TOBN(0xbd2bdecb, 0x9856966c),
-           TOBN(0x5d16ab3a, 0x85527015), TOBN(0x9f81609e, 0x4486c231)},
-          {TOBN(0xd8b96b2c, 0xda350002), TOBN(0xbd054690, 0xfa1b7d36),
-           TOBN(0xdc90ebf5, 0xe71d79bc), TOBN(0xf241b6f9, 0x08964e4e)}},
-         {{TOBN(0x7c838643, 0x2fe3cd4c), TOBN(0xe0f33acb, 0xb4bc633c),
-           TOBN(0xb4a9ecec, 0x3d139f1f), TOBN(0x05ce69cd, 0xdc4a1f49)},
-          {TOBN(0xa19d1b16, 0xf5f98aaf), TOBN(0x45bb71d6, 0x6f23e0ef),
-           TOBN(0x33789fcd, 0x46cdfdd3), TOBN(0x9b8e2978, 0xcee040ca)}},
-         {{TOBN(0x9c69b246, 0xae0a6828), TOBN(0xba533d24, 0x7078d5aa),
-           TOBN(0x7a2e42c0, 0x7bb4fbdb), TOBN(0xcfb4879a, 0x7035385c)},
-          {TOBN(0x8c3dd30b, 0x3281705b), TOBN(0x7e361c6c, 0x404fe081),
-           TOBN(0x7b21649c, 0x3f604edf), TOBN(0x5dbf6a3f, 0xe52ffe47)}},
-         {{TOBN(0xc41b7c23, 0x4b54d9bf), TOBN(0x1374e681, 0x3511c3d9),
-           TOBN(0x1863bf16, 0xc1b2b758), TOBN(0x90e78507, 0x1e9e6a96)},
-          {TOBN(0xab4bf98d, 0x5d86f174), TOBN(0xd74e0bd3, 0x85e96fe4),
-           TOBN(0x8afde39f, 0xcac5d344), TOBN(0x90946dbc, 0xbd91b847)}},
-         {{TOBN(0xf5b42358, 0xfe1a838c), TOBN(0x05aae6c5, 0x620ac9d8),
-           TOBN(0x8e193bd8, 0xa1ce5a0b), TOBN(0x8f710571, 0x4dabfd72)},
-          {TOBN(0x8d8fdd48, 0x182caaac), TOBN(0x8c4aeefa, 0x040745cf),
-           TOBN(0x73c6c30a, 0xf3b93e6d), TOBN(0x991241f3, 0x16f42011)}},
-         {{TOBN(0xa0158eea, 0xe457a477), TOBN(0xd19857db, 0xee6ddc05),
-           TOBN(0xb3265224, 0x18c41671), TOBN(0x3ffdfc7e, 0x3c2c0d58)},
-          {TOBN(0x3a3a5254, 0x26ee7cda), TOBN(0x341b0869, 0xdf02c3a8),
-           TOBN(0xa023bf42, 0x723bbfc8), TOBN(0x3d15002a, 0x14452691)}}},
-        {{{TOBN(0x5ef7324c, 0x85edfa30), TOBN(0x25976554, 0x87d4f3da),
-           TOBN(0x352f5bc0, 0xdcb50c86), TOBN(0x8f6927b0, 0x4832a96c)},
-          {TOBN(0xd08ee1ba, 0x55f2f94c), TOBN(0x6a996f99, 0x344b45fa),
-           TOBN(0xe133cb8d, 0xa8aa455d), TOBN(0x5d0721ec, 0x758dc1f7)}},
-         {{TOBN(0x6ba7a920, 0x79e5fb67), TOBN(0xe1331feb, 0x70aa725e),
-           TOBN(0x5080ccf5, 0x7df5d837), TOBN(0xe4cae01d, 0x7ff72e21)},
-          {TOBN(0xd9243ee6, 0x0412a77d), TOBN(0x06ff7cac, 0xdf449025),
-           TOBN(0xbe75f7cd, 0x23ef5a31), TOBN(0xbc957822, 0x0ddef7a8)}},
-         {{TOBN(0x8cf7230c, 0xb0ce1c55), TOBN(0x5b534d05, 0x0bbfb607),
-           TOBN(0xee1ef113, 0x0e16363b), TOBN(0x27e0aa7a, 0xb4999e82)},
-          {TOBN(0xce1dac2d, 0x79362c41), TOBN(0x67920c90, 0x91bb6cb0),
-           TOBN(0x1e648d63, 0x2223df24), TOBN(0x0f7d9eef, 0xe32e8f28)}},
-         {{TOBN(0x6943f39a, 0xfa833834), TOBN(0x22951722, 0xa6328562),
-           TOBN(0x81d63dd5, 0x4170fc10), TOBN(0x9f5fa58f, 0xaecc2e6d)},
-          {TOBN(0xb66c8725, 0xe77d9a3b), TOBN(0x11235cea, 0x6384ebe0),
-           TOBN(0x06a8c118, 0x5845e24a), TOBN(0x0137b286, 0xebd093b1)}},
-         {{TOBN(0xc589e1ce, 0x44ace150), TOBN(0xe0f8d3d9, 0x4381e97c),
-           TOBN(0x59e99b11, 0x62c5a4b8), TOBN(0x90d262f7, 0xfd0ec9f9)},
-          {TOBN(0xfbc854c9, 0x283e13c9), TOBN(0x2d04fde7, 0xaedc7085),
-           TOBN(0x057d7765, 0x47dcbecb), TOBN(0x8dbdf591, 0x9a76fa5f)}},
-         {{TOBN(0xd0150695, 0x0de1e578), TOBN(0x2e1463e7, 0xe9f72bc6),
-           TOBN(0xffa68441, 0x1b39eca5), TOBN(0x673c8530, 0x7c037f2f)},
-          {TOBN(0xd0d6a600, 0x747f91da), TOBN(0xb08d43e1, 0xc9cb78e9),
-           TOBN(0x0fc0c644, 0x27b5cef5), TOBN(0x5c1d160a, 0xa60a2fd6)}},
-         {{TOBN(0xf98cae53, 0x28c8e13b), TOBN(0x375f10c4, 0xb2eddcd1),
-           TOBN(0xd4eb8b7f, 0x5cce06ad), TOBN(0xb4669f45, 0x80a2e1ef)},
-          {TOBN(0xd593f9d0, 0x5bbd8699), TOBN(0x5528a4c9, 0xe7976d13),
-           TOBN(0x3923e095, 0x1c7e28d3), TOBN(0xb9293790, 0x3f6bb577)}},
-         {{TOBN(0xdb567d6a, 0xc42bd6d2), TOBN(0x6df86468, 0xbb1f96ae),
-           TOBN(0x0efe5b1a, 0x4843b28e), TOBN(0x961bbb05, 0x6379b240)},
-          {TOBN(0xb6caf5f0, 0x70a6a26b), TOBN(0x70686c0d, 0x328e6e39),
-           TOBN(0x80da06cf, 0x895fc8d3), TOBN(0x804d8810, 0xb363fdc9)}},
-         {{TOBN(0xbe22877b, 0x207f1670), TOBN(0x9b0dd188, 0x4e615291),
-           TOBN(0x625ae8dc, 0x97a3c2bf), TOBN(0x08584ef7, 0x439b86e8)},
-          {TOBN(0xde7190a5, 0xdcd898ff), TOBN(0x26286c40, 0x2058ee3d),
-           TOBN(0x3db0b217, 0x5f87b1c1), TOBN(0xcc334771, 0x102a6db5)}},
-         {{TOBN(0xd99de954, 0x2f770fb1), TOBN(0x97c1c620, 0x4cd7535e),
-           TOBN(0xd3b6c448, 0x3f09cefc), TOBN(0xd725af15, 0x5a63b4f8)},
-          {TOBN(0x0c95d24f, 0xc01e20ec), TOBN(0xdfd37494, 0x9ae7121f),
-           TOBN(0x7d6ddb72, 0xec77b7ec), TOBN(0xfe079d3b, 0x0353a4ae)}},
-         {{TOBN(0x3066e70a, 0x2e6ac8d2), TOBN(0x9c6b5a43, 0x106e5c05),
-           TOBN(0x52d3c6f5, 0xede59b8c), TOBN(0x30d6a5c3, 0xfccec9ae)},
-          {TOBN(0xedec7c22, 0x4fc0a9ef), TOBN(0x190ff083, 0x95c16ced),
-           TOBN(0xbe12ec8f, 0x94de0fde), TOBN(0x0d131ab8, 0x852d3433)}},
-         {{TOBN(0x42ace07e, 0x85701291), TOBN(0x94793ed9, 0x194061a8),
-           TOBN(0x30e83ed6, 0xd7f4a485), TOBN(0x9eec7269, 0xf9eeff4d)},
-          {TOBN(0x90acba59, 0x0c9d8005), TOBN(0x5feca458, 0x1e79b9d1),
-           TOBN(0x8fbe5427, 0x1d506a1e), TOBN(0xa32b2c8e, 0x2439cfa7)}},
-         {{TOBN(0x1671c173, 0x73dd0b4e), TOBN(0x37a28214, 0x44a054c6),
-           TOBN(0x81760a1b, 0x4e8b53f1), TOBN(0xa6c04224, 0xf9f93b9e)},
-          {TOBN(0x18784b34, 0xcf671e3c), TOBN(0x81bbecd2, 0xcda9b994),
-           TOBN(0x38831979, 0xb2ab3848), TOBN(0xef54feb7, 0xf2e03c2d)}},
-         {{TOBN(0xcf197ca7, 0xfb8088fa), TOBN(0x01427247, 0x4ddc96c5),
-           TOBN(0xa2d2550a, 0x30777176), TOBN(0x53469898, 0x4d0cf71d)},
-          {TOBN(0x6ce937b8, 0x3a2aaac6), TOBN(0xe9f91dc3, 0x5af38d9b),
-           TOBN(0x2598ad83, 0xc8bf2899), TOBN(0x8e706ac9, 0xb5536c16)}},
-         {{TOBN(0x40dc7495, 0xf688dc98), TOBN(0x26490cd7, 0x124c4afc),
-           TOBN(0xe651ec84, 0x1f18775c), TOBN(0x393ea6c3, 0xb4fdaf4a)},
-          {TOBN(0x1e1f3343, 0x7f338e0d), TOBN(0x39fb832b, 0x6053e7b5),
-           TOBN(0x46e702da, 0x619e14d5), TOBN(0x859cacd1, 0xcdeef6e0)}},
-         {{TOBN(0x63b99ce7, 0x4462007d), TOBN(0xb8ab48a5, 0x4cb5f5b7),
-           TOBN(0x9ec673d2, 0xf55edde7), TOBN(0xd1567f74, 0x8cfaefda)},
-          {TOBN(0x46381b6b, 0x0887bcec), TOBN(0x694497ce, 0xe178f3c2),
-           TOBN(0x5e6525e3, 0x1e6266cb), TOBN(0x5931de26, 0x697d6413)}},
-         {{TOBN(0x87f8df7c, 0x0e58d493), TOBN(0xb1ae5ed0, 0x58b73f12),
-           TOBN(0xc368f784, 0xdea0c34d), TOBN(0x9bd0a120, 0x859a91a0)},
-          {TOBN(0xb00d88b7, 0xcc863c68), TOBN(0x3a1cc11e, 0x3d1f4d65),
-           TOBN(0xea38e0e7, 0x0aa85593), TOBN(0x37f13e98, 0x7dc4aee8)}},
-         {{TOBN(0x10d38667, 0xbc947bad), TOBN(0x738e07ce, 0x2a36ee2e),
-           TOBN(0xc93470cd, 0xc577fcac), TOBN(0xdee1b616, 0x2782470d)},
-          {TOBN(0x36a25e67, 0x2e793d12), TOBN(0xd6aa6cae, 0xe0f186da),
-           TOBN(0x474d0fd9, 0x80e07af7), TOBN(0xf7cdc47d, 0xba8a5cd4)}},
-         {{TOBN(0x28af6d9d, 0xab15247f), TOBN(0x7c789c10, 0x493a537f),
-           TOBN(0x7ac9b110, 0x23a334e7), TOBN(0x0236ac09, 0x12c9c277)},
-          {TOBN(0xa7e5bd25, 0x1d7a5144), TOBN(0x098b9c2a, 0xf13ec4ec),
-           TOBN(0x3639daca, 0xd3f0abca), TOBN(0x642da81a, 0xa23960f9)}},
-         {{TOBN(0x7d2e5c05, 0x4f7269b1), TOBN(0xfcf30777, 0xe287c385),
-           TOBN(0x10edc84f, 0xf2a46f21), TOBN(0x35441757, 0x4f43fa36)},
-          {TOBN(0xf1327899, 0xfd703431), TOBN(0xa438d7a6, 0x16dd587a),
-           TOBN(0x65c34c57, 0xe9c8352d), TOBN(0xa728edab, 0x5cc5a24e)}},
-         {{TOBN(0xaed78abc, 0x42531689), TOBN(0x0a51a0e8, 0x010963ef),
-           TOBN(0x5776fa0a, 0xd717d9b3), TOBN(0xf356c239, 0x7dd3428b)},
-          {TOBN(0x29903fff, 0x8d3a3dac), TOBN(0x409597fa, 0x3d94491f),
-           TOBN(0x4cd7a5ff, 0xbf4a56a4), TOBN(0xe5096474, 0x8adab462)}},
-         {{TOBN(0xa97b5126, 0x5c3427b0), TOBN(0x6401405c, 0xd282c9bd),
-           TOBN(0x3629f8d7, 0x222c5c45), TOBN(0xb1c02c16, 0xe8d50aed)},
-          {TOBN(0xbea2ed75, 0xd9635bc9), TOBN(0x226790c7, 0x6e24552f),
-           TOBN(0x3c33f2a3, 0x65f1d066), TOBN(0x2a43463e, 0x6dfccc2e)}},
-         {{TOBN(0x8cc3453a, 0xdb483761), TOBN(0xe7cc6085, 0x65d5672b),
-           TOBN(0x277ed6cb, 0xde3efc87), TOBN(0x19f2f368, 0x69234eaf)},
-          {TOBN(0x9aaf4317, 0x5c0b800b), TOBN(0x1f1e7c89, 0x8b6da6e2),
-           TOBN(0x6cfb4715, 0xb94ec75e), TOBN(0xd590dd5f, 0x453118c2)}},
-         {{TOBN(0x14e49da1, 0x1f17a34c), TOBN(0x5420ab39, 0x235a1456),
-           TOBN(0xb7637241, 0x2f50363b), TOBN(0x7b15d623, 0xc3fabb6e)},
-          {TOBN(0xa0ef40b1, 0xe274e49c), TOBN(0x5cf50744, 0x96b1860a),
-           TOBN(0xd6583fbf, 0x66afe5a4), TOBN(0x44240510, 0xf47e3e9a)}},
-         {{TOBN(0x99254343, 0x11b2d595), TOBN(0xf1367499, 0xeec8df57),
-           TOBN(0x3cb12c61, 0x3e73dd05), TOBN(0xd248c033, 0x7dac102a)},
-          {TOBN(0xcf154f13, 0xa77739f5), TOBN(0xbf4288cb, 0x23d2af42),
-           TOBN(0xaa64c9b6, 0x32e4a1cf), TOBN(0xee8c07a8, 0xc8a208f3)}},
-         {{TOBN(0xe10d4999, 0x6fe8393f), TOBN(0x0f809a3f, 0xe91f3a32),
-           TOBN(0x61096d1c, 0x802f63c8), TOBN(0x289e1462, 0x57750d3d)},
-          {TOBN(0xed06167e, 0x9889feea), TOBN(0xd5c9c0e2, 0xe0993909),
-           TOBN(0x46fca0d8, 0x56508ac6), TOBN(0x91826047, 0x4f1b8e83)}},
-         {{TOBN(0x4f2c877a, 0x9a4a2751), TOBN(0x71bd0072, 0xcae6fead),
-           TOBN(0x38df8dcc, 0x06aa1941), TOBN(0x5a074b4c, 0x63beeaa8)},
-          {TOBN(0xd6d65934, 0xc1cec8ed), TOBN(0xa6ecb49e, 0xaabc03bd),
-           TOBN(0xaade91c2, 0xde8a8415), TOBN(0xcfb0efdf, 0x691136e0)}},
-         {{TOBN(0x11af45ee, 0x23ab3495), TOBN(0xa132df88, 0x0b77463d),
-           TOBN(0x8923c15c, 0x815d06f4), TOBN(0xc3ceb3f5, 0x0d61a436)},
-          {TOBN(0xaf52291d, 0xe88fb1da), TOBN(0xea057974, 0x1da12179),
-           TOBN(0xb0d7218c, 0xd2fef720), TOBN(0x6c0899c9, 0x8e1d8845)}},
-         {{TOBN(0x98157504, 0x752ddad7), TOBN(0xd60bd74f, 0xa1a68a97),
-           TOBN(0x7047a3a9, 0xf658fb99), TOBN(0x1f5d86d6, 0x5f8511e4)},
-          {TOBN(0xb8a4bc42, 0x4b5a6d88), TOBN(0x69eb2c33, 0x1abefa7d),
-           TOBN(0x95bf39e8, 0x13c9c510), TOBN(0xf571960a, 0xd48aab43)}},
-         {{TOBN(0x7e8cfbcf, 0x704e23c6), TOBN(0xc71b7d22, 0x28aaa65b),
-           TOBN(0xa041b2bd, 0x245e3c83), TOBN(0x69b98834, 0xd21854ff)},
-          {TOBN(0x89d227a3, 0x963bfeec), TOBN(0x99947aaa, 0xde7da7cb),
-           TOBN(0x1d9ee9db, 0xee68a9b1), TOBN(0x0a08f003, 0x698ec368)}},
-         {{TOBN(0xe9ea4094, 0x78ef2487), TOBN(0xc8d2d415, 0x02cfec26),
-           TOBN(0xc52f9a6e, 0xb7dcf328), TOBN(0x0ed489e3, 0x85b6a937)},
-          {TOBN(0x9b94986b, 0xbef3366e), TOBN(0x0de59c70, 0xedddddb8),
-           TOBN(0xffdb748c, 0xeadddbe2), TOBN(0x9b9784bb, 0x8266ea40)}},
-         {{TOBN(0x142b5502, 0x1a93507a), TOBN(0xb4cd1187, 0x8d3c06cf),
-           TOBN(0xdf70e76a, 0x91ec3f40), TOBN(0x484e81ad, 0x4e7553c2)},
-          {TOBN(0x830f87b5, 0x272e9d6e), TOBN(0xea1c93e5, 0xc6ff514a),
-           TOBN(0x67cc2adc, 0xc4192a8e), TOBN(0xc77e27e2, 0x42f4535a)}},
-         {{TOBN(0x9cdbab36, 0xd2b713c5), TOBN(0x86274ea0, 0xcf7b0cd3),
-           TOBN(0x784680f3, 0x09af826b), TOBN(0xbfcc837a, 0x0c72dea3)},
-          {TOBN(0xa8bdfe9d, 0xd6529b73), TOBN(0x708aa228, 0x63a88002),
-           TOBN(0x6c7a9a54, 0xc91d45b9), TOBN(0xdf1a38bb, 0xfd004f56)}},
-         {{TOBN(0x2e8c9a26, 0xb8bad853), TOBN(0x2d52cea3, 0x3723eae7),
-           TOBN(0x054d6d81, 0x56ca2830), TOBN(0xa3317d14, 0x9a8dc411)},
-          {TOBN(0xa08662fe, 0xfd4ddeda), TOBN(0xed2a153a, 0xb55d792b),
-           TOBN(0x7035c16a, 0xbfc6e944), TOBN(0xb6bc5834, 0x00171cf3)}},
-         {{TOBN(0xe27152b3, 0x83d102b6), TOBN(0xfe695a47, 0x0646b848),
-           TOBN(0xa5bb09d8, 0x916e6d37), TOBN(0xb4269d64, 0x0d17015e)},
-          {TOBN(0x8d8156a1, 0x0a1d2285), TOBN(0xfeef6c51, 0x46d26d72),
-           TOBN(0x9dac57c8, 0x4c5434a7), TOBN(0x0282e5be, 0x59d39e31)}},
-         {{TOBN(0xedfff181, 0x721c486d), TOBN(0x301baf10, 0xbc58824e),
-           TOBN(0x8136a6aa, 0x00570031), TOBN(0x55aaf78c, 0x1cddde68)},
-          {TOBN(0x26829371, 0x59c63952), TOBN(0x3a3bd274, 0x8bc25baf),
-           TOBN(0xecdf8657, 0xb7e52dc3), TOBN(0x2dd8c087, 0xfd78e6c8)}},
-         {{TOBN(0x20553274, 0xf5531461), TOBN(0x8b4a1281, 0x5d95499b),
-           TOBN(0xe2c8763a, 0x1a80f9d2), TOBN(0xd1dbe32b, 0x4ddec758)},
-          {TOBN(0xaf12210d, 0x30c34169), TOBN(0xba74a953, 0x78baa533),
-           TOBN(0x3d133c6e, 0xa438f254), TOBN(0xa431531a, 0x201bef5b)}},
-         {{TOBN(0x15295e22, 0xf669d7ec), TOBN(0xca374f64, 0x357fb515),
-           TOBN(0x8a8406ff, 0xeaa3fdb3), TOBN(0x106ae448, 0xdf3f2da8)},
-          {TOBN(0x8f9b0a90, 0x33c8e9a1), TOBN(0x234645e2, 0x71ad5885),
-           TOBN(0x3d083224, 0x1c0aed14), TOBN(0xf10a7d3e, 0x7a942d46)}},
-         {{TOBN(0x7c11deee, 0x40d5c9be), TOBN(0xb2bae7ff, 0xba84ed98),
-           TOBN(0x93e97139, 0xaad58ddd), TOBN(0x3d872796, 0x3f6d1fa3)},
-          {TOBN(0x483aca81, 0x8569ff13), TOBN(0x8b89a5fb, 0x9a600f72),
-           TOBN(0x4cbc27c3, 0xc06f2b86), TOBN(0x22130713, 0x63ad9c0b)}},
-         {{TOBN(0xb5358b1e, 0x48ac2840), TOBN(0x18311294, 0xecba9477),
-           TOBN(0xda58f990, 0xa6946b43), TOBN(0x3098baf9, 0x9ab41819)},
-          {TOBN(0x66c4c158, 0x4198da52), TOBN(0xab4fc17c, 0x146bfd1b),
-           TOBN(0x2f0a4c3c, 0xbf36a908), TOBN(0x2ae9e34b, 0x58cf7838)}},
-         {{TOBN(0xf411529e, 0x3fa11b1f), TOBN(0x21e43677, 0x974af2b4),
-           TOBN(0x7c20958e, 0xc230793b), TOBN(0x710ea885, 0x16e840f3)},
-          {TOBN(0xfc0b21fc, 0xc5dc67cf), TOBN(0x08d51647, 0x88405718),
-           TOBN(0xd955c21f, 0xcfe49eb7), TOBN(0x9722a5d5, 0x56dd4a1f)}},
-         {{TOBN(0xc9ef50e2, 0xc861baa5), TOBN(0xc0c21a5d, 0x9505ac3e),
-           TOBN(0xaf6b9a33, 0x8b7c063f), TOBN(0xc6370339, 0x2f4779c1)},
-          {TOBN(0x22df99c7, 0x638167c3), TOBN(0xfe6ffe76, 0x795db30c),
-           TOBN(0x2b822d33, 0xa4854989), TOBN(0xfef031dd, 0x30563aa5)}},
-         {{TOBN(0x16b09f82, 0xd57c667f), TOBN(0xc70312ce, 0xcc0b76f1),
-           TOBN(0xbf04a9e6, 0xc9118aec), TOBN(0x82fcb419, 0x3409d133)},
-          {TOBN(0x1a8ab385, 0xab45d44d), TOBN(0xfba07222, 0x617b83a3),
-           TOBN(0xb05f50dd, 0x58e81b52), TOBN(0x1d8db553, 0x21ce5aff)}},
-         {{TOBN(0x3097b8d4, 0xe344a873), TOBN(0x7d8d116d, 0xfe36d53e),
-           TOBN(0x6db22f58, 0x7875e750), TOBN(0x2dc5e373, 0x43e144ea)},
-          {TOBN(0xc05f32e6, 0xe799eb95), TOBN(0xe9e5f4df, 0x6899e6ec),
-           TOBN(0xbdc3bd68, 0x1fab23d5), TOBN(0xb72b8ab7, 0x73af60e6)}},
-         {{TOBN(0x8db27ae0, 0x2cecc84a), TOBN(0x600016d8, 0x7bdb871c),
-           TOBN(0x42a44b13, 0xd7c46f58), TOBN(0xb8919727, 0xc3a77d39)},
-          {TOBN(0xcfc6bbbd, 0xdafd6088), TOBN(0x1a740146, 0x6bd20d39),
-           TOBN(0x8c747abd, 0x98c41072), TOBN(0x4c91e765, 0xbdf68ea1)}},
-         {{TOBN(0x7c95e5ca, 0x08819a78), TOBN(0xcf48b729, 0xc9587921),
-           TOBN(0x091c7c5f, 0xdebbcc7d), TOBN(0x6f287404, 0xf0e05149)},
-          {TOBN(0xf83b5ac2, 0x26cd44ec), TOBN(0x88ae32a6, 0xcfea250e),
-           TOBN(0x6ac5047a, 0x1d06ebc5), TOBN(0xc7e550b4, 0xd434f781)}},
-         {{TOBN(0x61ab1cf2, 0x5c727bd2), TOBN(0x2e4badb1, 0x1cf915b0),
-           TOBN(0x1b4dadec, 0xf69d3920), TOBN(0xe61b1ca6, 0xf14c1dfe)},
-          {TOBN(0x90b479cc, 0xbd6bd51f), TOBN(0x8024e401, 0x8045ec30),
-           TOBN(0xcab29ca3, 0x25ef0e62), TOBN(0x4f2e9416, 0x49e4ebc0)}},
-         {{TOBN(0x45eb40ec, 0x0ccced58), TOBN(0x25cd4b9c, 0x0da44f98),
-           TOBN(0x43e06458, 0x871812c6), TOBN(0x99f80d55, 0x16cef651)},
-          {TOBN(0x571340c9, 0xce6dc153), TOBN(0x138d5117, 0xd8665521),
-           TOBN(0xacdb45bc, 0x4e07014d), TOBN(0x2f34bb38, 0x84b60b91)}},
-         {{TOBN(0xf44a4fd2, 0x2ae8921e), TOBN(0xb039288e, 0x892ba1e2),
-           TOBN(0x9da50174, 0xb1c180b2), TOBN(0x6b70ab66, 0x1693dc87)},
-          {TOBN(0x7e9babc9, 0xe7057481), TOBN(0x4581ddef, 0x9c80dc41),
-           TOBN(0x0c890da9, 0x51294682), TOBN(0x0b5629d3, 0x3f4736e5)}},
-         {{TOBN(0x2340c79e, 0xb06f5b41), TOBN(0xa42e84ce, 0x4e243469),
-           TOBN(0xf9a20135, 0x045a71a9), TOBN(0xefbfb415, 0xd27b6fb6)},
-          {TOBN(0x25ebea23, 0x9d33cd6f), TOBN(0x9caedb88, 0xaa6c0af8),
-           TOBN(0x53dc7e9a, 0xd9ce6f96), TOBN(0x3897f9fd, 0x51e0b15a)}},
-         {{TOBN(0xf51cb1f8, 0x8e5d788e), TOBN(0x1aec7ba8, 0xe1d490ee),
-           TOBN(0x265991e0, 0xcc58cb3c), TOBN(0x9f306e8c, 0x9fc3ad31)},
-          {TOBN(0x5fed006e, 0x5040a0ac), TOBN(0xca9d5043, 0xfb476f2e),
-           TOBN(0xa19c06e8, 0xbeea7a23), TOBN(0xd2865801, 0x0edabb63)}},
-         {{TOBN(0xdb92293f, 0x6967469a), TOBN(0x2894d839, 0x8d8a8ed8),
-           TOBN(0x87c9e406, 0xbbc77122), TOBN(0x8671c6f1, 0x2ea3a26a)},
-          {TOBN(0xe42df8d6, 0xd7de9853), TOBN(0x2e3ce346, 0xb1f2bcc7),
-           TOBN(0xda601dfc, 0x899d50cf), TOBN(0xbfc913de, 0xfb1b598f)}},
-         {{TOBN(0x81c4909f, 0xe61f7908), TOBN(0x192e304f, 0x9bbc7b29),
-           TOBN(0xc3ed8738, 0xc104b338), TOBN(0xedbe9e47, 0x783f5d61)},
-          {TOBN(0x0c06e9be, 0x2db30660), TOBN(0xda3e613f, 0xc0eb7d8e),
-           TOBN(0xd8fa3e97, 0x322e096e), TOBN(0xfebd91e8, 0xd336e247)}},
-         {{TOBN(0x8f13ccc4, 0xdf655a49), TOBN(0xa9e00dfc, 0x5eb20210),
-           TOBN(0x84631d0f, 0xc656b6ea), TOBN(0x93a058cd, 0xd8c0d947)},
-          {TOBN(0x6846904a, 0x67bd3448), TOBN(0x4a3d4e1a, 0xf394fd5c),
-           TOBN(0xc102c1a5, 0xdb225f52), TOBN(0xe3455bba, 0xfc4f5e9a)}},
-         {{TOBN(0x6b36985b, 0x4b9ad1ce), TOBN(0xa9818536, 0x5bb7f793),
-           TOBN(0x6c25e1d0, 0x48b1a416), TOBN(0x1381dd53, 0x3c81bee7)},
-          {TOBN(0xd2a30d61, 0x7a4a7620), TOBN(0xc8412926, 0x39b8944c),
-           TOBN(0x3c1c6fbe, 0x7a97c33a), TOBN(0x941e541d, 0x938664e7)}},
-         {{TOBN(0x417499e8, 0x4a34f239), TOBN(0x15fdb83c, 0xb90402d5),
-           TOBN(0xb75f46bf, 0x433aa832), TOBN(0xb61e15af, 0x63215db1)},
-          {TOBN(0xaabe59d4, 0xa127f89a), TOBN(0x5d541e0c, 0x07e816da),
-           TOBN(0xaaba0659, 0xa618b692), TOBN(0x55327733, 0x17266026)}},
-         {{TOBN(0xaf53a0fc, 0x95f57552), TOBN(0x32947650, 0x6cacb0c9),
-           TOBN(0x253ff58d, 0xc821be01), TOBN(0xb0309531, 0xa06f1146)},
-          {TOBN(0x59bbbdf5, 0x05c2e54d), TOBN(0x158f27ad, 0x26e8dd22),
-           TOBN(0xcc5b7ffb, 0x397e1e53), TOBN(0xae03f65b, 0x7fc1e50d)}},
-         {{TOBN(0xa9784ebd, 0x9c95f0f9), TOBN(0x5ed9deb2, 0x24640771),
-           TOBN(0x31244af7, 0x035561c4), TOBN(0x87332f3a, 0x7ee857de)},
-          {TOBN(0x09e16e9e, 0x2b9e0d88), TOBN(0x52d910f4, 0x56a06049),
-           TOBN(0x507ed477, 0xa9592f48), TOBN(0x85cb917b, 0x2365d678)}},
-         {{TOBN(0xf8511c93, 0x4c8998d1), TOBN(0x2186a3f1, 0x730ea58f),
-           TOBN(0x50189626, 0xb2029db0), TOBN(0x9137a6d9, 0x02ceb75a)},
-          {TOBN(0x2fe17f37, 0x748bc82c), TOBN(0x87c2e931, 0x80469f8c),
-           TOBN(0x850f71cd, 0xbf891aa2), TOBN(0x0ca1b89b, 0x75ec3d8d)}},
-         {{TOBN(0x516c43aa, 0x5e1cd3cd), TOBN(0x89397808, 0x9a887c28),
-           TOBN(0x0059c699, 0xddea1f9f), TOBN(0x7737d6fa, 0x8e6868f7)},
-          {TOBN(0x6d93746a, 0x60f1524b), TOBN(0x36985e55, 0xba052aa7),
-           TOBN(0x41b1d322, 0xed923ea5), TOBN(0x3429759f, 0x25852a11)}},
-         {{TOBN(0xbeca6ec3, 0x092e9f41), TOBN(0x3a238c66, 0x62256bbd),
-           TOBN(0xd82958ea, 0x70ad487d), TOBN(0x4ac8aaf9, 0x65610d93)},
-          {TOBN(0x3fa101b1, 0x5e4ccab0), TOBN(0x9bf430f2, 0x9de14bfb),
-           TOBN(0xa10f5cc6, 0x6531899d), TOBN(0x590005fb, 0xea8ce17d)}},
-         {{TOBN(0xc437912f, 0x24544cb6), TOBN(0x9987b71a, 0xd79ac2e3),
-           TOBN(0x13e3d9dd, 0xc058a212), TOBN(0x00075aac, 0xd2de9606)},
-          {TOBN(0x80ab508b, 0x6cac8369), TOBN(0x87842be7, 0xf54f6c89),
-           TOBN(0xa7ad663d, 0x6bc532a4), TOBN(0x67813de7, 0x78a91bc8)}},
-         {{TOBN(0x5dcb61ce, 0xc3427239), TOBN(0x5f3c7cf0, 0xc56934d9),
-           TOBN(0xc079e0fb, 0xe3191591), TOBN(0xe40896bd, 0xb01aada7)},
-          {TOBN(0x8d466791, 0x0492d25f), TOBN(0x8aeb30c9, 0xe7408276),
-           TOBN(0xe9437495, 0x9287aacc), TOBN(0x23d4708d, 0x79fe03d4)}},
-         {{TOBN(0x8cda9cf2, 0xd0c05199), TOBN(0x502fbc22, 0xfae78454),
-           TOBN(0xc0bda9df, 0xf572a182), TOBN(0x5f9b71b8, 0x6158b372)},
-          {TOBN(0xe0f33a59, 0x2b82dd07), TOBN(0x76302735, 0x9523032e),
-           TOBN(0x7fe1a721, 0xc4505a32), TOBN(0x7b6e3e82, 0xf796409f)}}},
-        {{{TOBN(0xe3417bc0, 0x35d0b34a), TOBN(0x440b386b, 0x8327c0a7),
-           TOBN(0x8fb7262d, 0xac0362d1), TOBN(0x2c41114c, 0xe0cdf943)},
-          {TOBN(0x2ba5cef1, 0xad95a0b1), TOBN(0xc09b37a8, 0x67d54362),
-           TOBN(0x26d6cdd2, 0x01e486c9), TOBN(0x20477abf, 0x42ff9297)}},
-         {{TOBN(0xa004dcb3, 0x292a9287), TOBN(0xddc15cf6, 0x77b092c7),
-           TOBN(0x083a8464, 0x806c0605), TOBN(0x4a68df70, 0x3db997b0)},
-          {TOBN(0x9c134e45, 0x05bf7dd0), TOBN(0xa4e63d39, 0x8ccf7f8c),
-           TOBN(0xa6e6517f, 0x41b5f8af), TOBN(0xaa8b9342, 0xad7bc1cc)}},
-         {{TOBN(0x126f35b5, 0x1e706ad9), TOBN(0xb99cebb4, 0xc3a9ebdf),
-           TOBN(0xa75389af, 0xbf608d90), TOBN(0x76113c4f, 0xc6c89858)},
-          {TOBN(0x80de8eb0, 0x97e2b5aa), TOBN(0x7e1022cc, 0x63b91304),
-           TOBN(0x3bdab605, 0x6ccc066c), TOBN(0x33cbb144, 0xb2edf900)}},
-         {{TOBN(0xc4176471, 0x7af715d2), TOBN(0xe2f7f594, 0xd0134a96),
-           TOBN(0x2c1873ef, 0xa41ec956), TOBN(0xe4e7b4f6, 0x77821304)},
-          {TOBN(0xe5c8ff97, 0x88d5374a), TOBN(0x2b915e63, 0x80823d5b),
-           TOBN(0xea6bc755, 0xb2ee8fe2), TOBN(0x6657624c, 0xe7112651)}},
-         {{TOBN(0x157af101, 0xdace5aca), TOBN(0xc4fdbcf2, 0x11a6a267),
-           TOBN(0xdaddf340, 0xc49c8609), TOBN(0x97e49f52, 0xe9604a65)},
-          {TOBN(0x9be8e790, 0x937e2ad5), TOBN(0x846e2508, 0x326e17f1),
-           TOBN(0x3f38007a, 0x0bbbc0dc), TOBN(0xcf03603f, 0xb11e16d6)}},
-         {{TOBN(0xd6f800e0, 0x7442f1d5), TOBN(0x475607d1, 0x66e0e3ab),
-           TOBN(0x82807f16, 0xb7c64047), TOBN(0x8858e1e3, 0xa749883d)},
-          {TOBN(0x5859120b, 0x8231ee10), TOBN(0x1b80e7eb, 0x638a1ece),
-           TOBN(0xcb72525a, 0xc6aa73a4), TOBN(0xa7cdea3d, 0x844423ac)}},
-         {{TOBN(0x5ed0c007, 0xf8ae7c38), TOBN(0x6db07a5c, 0x3d740192),
-           TOBN(0xbe5e9c2a, 0x5fe36db3), TOBN(0xd5b9d57a, 0x76e95046)},
-          {TOBN(0x54ac32e7, 0x8eba20f2), TOBN(0xef11ca8f, 0x71b9a352),
-           TOBN(0x305e373e, 0xff98a658), TOBN(0xffe5a100, 0x823eb667)}},
-         {{TOBN(0x57477b11, 0xe51732d2), TOBN(0xdfd6eb28, 0x2538fc0e),
-           TOBN(0x5c43b0cc, 0x3b39eec5), TOBN(0x6af12778, 0xcb36cc57)},
-          {TOBN(0x70b0852d, 0x06c425ae), TOBN(0x6df92f8c, 0x5c221b9b),
-           TOBN(0x6c8d4f9e, 0xce826d9c), TOBN(0xf59aba7b, 0xb49359c3)}},
-         {{TOBN(0x5c8ed8d5, 0xda64309d), TOBN(0x61a6de56, 0x91b30704),
-           TOBN(0xd6b52f6a, 0x2f9b5808), TOBN(0x0eee4194, 0x98c958a7)},
-          {TOBN(0xcddd9aab, 0x771e4caa), TOBN(0x83965dfd, 0x78bc21be),
-           TOBN(0x02affce3, 0xb3b504f5), TOBN(0x30847a21, 0x561c8291)}},
-         {{TOBN(0xd2eb2cf1, 0x52bfda05), TOBN(0xe0e4c4e9, 0x6197b98c),
-           TOBN(0x1d35076c, 0xf8a1726f), TOBN(0x6c06085b, 0x2db11e3d)},
-          {TOBN(0x15c0c4d7, 0x4463ba14), TOBN(0x9d292f83, 0x0030238c),
-           TOBN(0x1311ee8b, 0x3727536d), TOBN(0xfeea86ef, 0xbeaedc1e)}},
-         {{TOBN(0xb9d18cd3, 0x66131e2e), TOBN(0xf31d974f, 0x80fe2682),
-           TOBN(0xb6e49e0f, 0xe4160289), TOBN(0x7c48ec0b, 0x08e92799)},
-          {TOBN(0x818111d8, 0xd1989aa7), TOBN(0xb34fa0aa, 0xebf926f9),
-           TOBN(0xdb5fe2f5, 0xa245474a), TOBN(0xf80a6ebb, 0x3c7ca756)}},
-         {{TOBN(0xa7f96054, 0xafa05dd8), TOBN(0x26dfcf21, 0xfcaf119e),
-           TOBN(0xe20ef2e3, 0x0564bb59), TOBN(0xef4dca50, 0x61cb02b8)},
-          {TOBN(0xcda7838a, 0x65d30672), TOBN(0x8b08d534, 0xfd657e86),
-           TOBN(0x4c5b4395, 0x46d595c8), TOBN(0x39b58725, 0x425cb836)}},
-         {{TOBN(0x8ea61059, 0x3de9abe3), TOBN(0x40434881, 0x9cdc03be),
-           TOBN(0x9b261245, 0xcfedce8c), TOBN(0x78c318b4, 0xcf5234a1)},
-          {TOBN(0x510bcf16, 0xfde24c99), TOBN(0x2a77cb75, 0xa2c2ff5d),
-           TOBN(0x9c895c2b, 0x27960fb4), TOBN(0xd30ce975, 0xb0eda42b)}},
-         {{TOBN(0xfda85393, 0x1a62cc26), TOBN(0x23c69b96, 0x50c0e052),
-           TOBN(0xa227df15, 0xbfc633f3), TOBN(0x2ac78848, 0x1bae7d48)},
-          {TOBN(0x487878f9, 0x187d073d), TOBN(0x6c2be919, 0x967f807d),
-           TOBN(0x765861d8, 0x336e6d8f), TOBN(0x88b8974c, 0xce528a43)}},
-         {{TOBN(0x09521177, 0xff57d051), TOBN(0x2ff38037, 0xfb6a1961),
-           TOBN(0xfc0aba74, 0xa3d76ad4), TOBN(0x7c764803, 0x25a7ec17)},
-          {TOBN(0x7532d75f, 0x48879bc8), TOBN(0xea7eacc0, 0x58ce6bc1),
-           TOBN(0xc82176b4, 0x8e896c16), TOBN(0x9a30e0b2, 0x2c750fed)}},
-         {{TOBN(0xc37e2c2e, 0x421d3aa4), TOBN(0xf926407c, 0xe84fa840),
-           TOBN(0x18abc03d, 0x1454e41c), TOBN(0x26605ecd, 0x3f7af644)},
-          {TOBN(0x242341a6, 0xd6a5eabf), TOBN(0x1edb84f4, 0x216b668e),
-           TOBN(0xd836edb8, 0x04010102), TOBN(0x5b337ce7, 0x945e1d8c)}},
-         {{TOBN(0xd2075c77, 0xc055dc14), TOBN(0x2a0ffa25, 0x81d89cdf),
-           TOBN(0x8ce815ea, 0x6ffdcbaf), TOBN(0xa3428878, 0xfb648867)},
-          {TOBN(0x277699cf, 0x884655fb), TOBN(0xfa5b5bd6, 0x364d3e41),
-           TOBN(0x01f680c6, 0x441e1cb7), TOBN(0x3fd61e66, 0xb70a7d67)}},
-         {{TOBN(0x666ba2dc, 0xcc78cf66), TOBN(0xb3018174, 0x6fdbff77),
-           TOBN(0x8d4dd0db, 0x168d4668), TOBN(0x259455d0, 0x1dab3a2a)},
-          {TOBN(0xf58564c5, 0xcde3acec), TOBN(0x77141925, 0x13adb276),
-           TOBN(0x527d725d, 0x8a303f65), TOBN(0x55deb6c9, 0xe6f38f7b)}},
-         {{TOBN(0xfd5bb657, 0xb1fa70fb), TOBN(0xfa07f50f, 0xd8073a00),
-           TOBN(0xf72e3aa7, 0xbca02500), TOBN(0xf68f895d, 0x9975740d)},
-          {TOBN(0x30112060, 0x5cae2a6a), TOBN(0x01bd7218, 0x02874842),
-           TOBN(0x3d423891, 0x7ce47bd3), TOBN(0xa66663c1, 0x789544f6)}},
-         {{TOBN(0x864d05d7, 0x3272d838), TOBN(0xe22924f9, 0xfa6295c5),
-           TOBN(0x8189593f, 0x6c2fda32), TOBN(0x330d7189, 0xb184b544)},
-          {TOBN(0x79efa62c, 0xbde1f714), TOBN(0x35771c94, 0xe5cb1a63),
-           TOBN(0x2f4826b8, 0x641c8332), TOBN(0x00a894fb, 0xc8cee854)}},
-         {{TOBN(0xb4b9a39b, 0x36194d40), TOBN(0xe857a7c5, 0x77612601),
-           TOBN(0xf4209dd2, 0x4ecf2f58), TOBN(0x82b9e66d, 0x5a033487)},
-          {TOBN(0xc1e36934, 0xe4e8b9dd), TOBN(0xd2372c9d, 0xa42377d7),
-           TOBN(0x51dc94c7, 0x0e3ae43b), TOBN(0x4c57761e, 0x04474f6f)}},
-         {{TOBN(0xdcdacd0a, 0x1058a318), TOBN(0x369cf3f5, 0x78053a9a),
-           TOBN(0xc6c3de50, 0x31c68de2), TOBN(0x4653a576, 0x3c4b6d9f)},
-          {TOBN(0x1688dd5a, 0xaa4e5c97), TOBN(0x5be80aa1, 0xb7ab3c74),
-           TOBN(0x70cefe7c, 0xbc65c283), TOBN(0x57f95f13, 0x06867091)}},
-         {{TOBN(0xa39114e2, 0x4415503b), TOBN(0xc08ff7c6, 0x4cbb17e9),
-           TOBN(0x1eff674d, 0xd7dec966), TOBN(0x6d4690af, 0x53376f63)},
-          {TOBN(0xff6fe32e, 0xea74237b), TOBN(0xc436d17e, 0xcd57508e),
-           TOBN(0x15aa28e1, 0xedcc40fe), TOBN(0x0d769c04, 0x581bbb44)}},
-         {{TOBN(0xc240b6de, 0x34eaacda), TOBN(0xd9e116e8, 0x2ba0f1de),
-           TOBN(0xcbe45ec7, 0x79438e55), TOBN(0x91787c9d, 0x96f752d7)},
-          {TOBN(0x897f532b, 0xf129ac2f), TOBN(0xd307b7c8, 0x5a36e22c),
-           TOBN(0x91940675, 0x749fb8f3), TOBN(0xd14f95d0, 0x157fdb28)}},
-         {{TOBN(0xfe51d029, 0x6ae55043), TOBN(0x8931e98f, 0x44a87de1),
-           TOBN(0xe57f1cc6, 0x09e4fee2), TOBN(0x0d063b67, 0x4e072d92)},
-          {TOBN(0x70a998b9, 0xed0e4316), TOBN(0xe74a736b, 0x306aca46),
-           TOBN(0xecf0fbf2, 0x4fda97c7), TOBN(0xa40f65cb, 0x3e178d93)}},
-         {{TOBN(0x16253604, 0x16df4285), TOBN(0xb0c9babb, 0xd0c56ae2),
-           TOBN(0x73032b19, 0xcfc5cfc3), TOBN(0xe497e5c3, 0x09752056)},
-          {TOBN(0x12096bb4, 0x164bda96), TOBN(0x1ee42419, 0xa0b74da1),
-           TOBN(0x8fc36243, 0x403826ba), TOBN(0x0c8f0069, 0xdc09e660)}},
-         {{TOBN(0x8667e981, 0xc27253c9), TOBN(0x05a6aefb, 0x92b36a45),
-           TOBN(0xa62c4b36, 0x9cb7bb46), TOBN(0x8394f375, 0x11f7027b)},
-          {TOBN(0x747bc79c, 0x5f109d0f), TOBN(0xcad88a76, 0x5b8cc60a),
-           TOBN(0x80c5a66b, 0x58f09e68), TOBN(0xe753d451, 0xf6127eac)}},
-         {{TOBN(0xc44b74a1, 0x5b0ec6f5), TOBN(0x47989fe4, 0x5289b2b8),
-           TOBN(0x745f8484, 0x58d6fc73), TOBN(0xec362a6f, 0xf61c70ab)},
-          {TOBN(0x070c98a7, 0xb3a8ad41), TOBN(0x73a20fc0, 0x7b63db51),
-           TOBN(0xed2c2173, 0xf44c35f4), TOBN(0x8a56149d, 0x9acc9dca)}},
-         {{TOBN(0x98f17881, 0x9ac6e0f4), TOBN(0x360fdeaf, 0xa413b5ed),
-           TOBN(0x0625b8f4, 0xa300b0fd), TOBN(0xf1f4d76a, 0x5b3222d3)},
-          {TOBN(0x9d6f5109, 0x587f76b8), TOBN(0x8b4ee08d, 0x2317fdb5),
-           TOBN(0x88089bb7, 0x8c68b095), TOBN(0x95570e9a, 0x5808d9b9)}},
-         {{TOBN(0xa395c36f, 0x35d33ae7), TOBN(0x200ea123, 0x50bb5a94),
-           TOBN(0x20c789bd, 0x0bafe84b), TOBN(0x243ef52d, 0x0919276a)},
-          {TOBN(0x3934c577, 0xe23ae233), TOBN(0xb93807af, 0xa460d1ec),
-           TOBN(0xb72a53b1, 0xf8fa76a4), TOBN(0xd8914cb0, 0xc3ca4491)}},
-         {{TOBN(0x2e128494, 0x3fb42622), TOBN(0x3b2700ac, 0x500907d5),
-           TOBN(0xf370fb09, 0x1a95ec63), TOBN(0xf8f30be2, 0x31b6dfbd)},
-          {TOBN(0xf2b2f8d2, 0x69e55f15), TOBN(0x1fead851, 0xcc1323e9),
-           TOBN(0xfa366010, 0xd9e5eef6), TOBN(0x64d487b0, 0xe316107e)}},
-         {{TOBN(0x4c076b86, 0xd23ddc82), TOBN(0x03fd344c, 0x7e0143f0),
-           TOBN(0xa95362ff, 0x317af2c5), TOBN(0x0add3db7, 0xe18b7a4f)},
-          {TOBN(0x9c673e3f, 0x8260e01b), TOBN(0xfbeb49e5, 0x54a1cc91),
-           TOBN(0x91351bf2, 0x92f2e433), TOBN(0xc755e7ec, 0x851141eb)}},
-         {{TOBN(0xc9a95139, 0x29607745), TOBN(0x0ca07420, 0xa26f2b28),
-           TOBN(0xcb2790e7, 0x4bc6f9dd), TOBN(0x345bbb58, 0xadcaffc0)},
-          {TOBN(0xc65ea38c, 0xbe0f27a2), TOBN(0x67c24d7c, 0x641fcb56),
-           TOBN(0x2c25f0a7, 0xa9e2c757), TOBN(0x93f5cdb0, 0x16f16c49)}},
-         {{TOBN(0x2ca5a9d7, 0xc5ee30a1), TOBN(0xd1593635, 0xb909b729),
-           TOBN(0x804ce9f3, 0xdadeff48), TOBN(0xec464751, 0xb07c30c3)},
-          {TOBN(0x89d65ff3, 0x9e49af6a), TOBN(0xf2d6238a, 0x6f3d01bc),
-           TOBN(0x1095561e, 0x0bced843), TOBN(0x51789e12, 0xc8a13fd8)}},
-         {{TOBN(0xd633f929, 0x763231df), TOBN(0x46df9f7d, 0xe7cbddef),
-           TOBN(0x01c889c0, 0xcb265da8), TOBN(0xfce1ad10, 0xaf4336d2)},
-          {TOBN(0x8d110df6, 0xfc6a0a7e), TOBN(0xdd431b98, 0x6da425dc),
-           TOBN(0xcdc4aeab, 0x1834aabe), TOBN(0x84deb124, 0x8439b7fc)}},
-         {{TOBN(0x8796f169, 0x3c2a5998), TOBN(0x9b9247b4, 0x7947190d),
-           TOBN(0x55b9d9a5, 0x11597014), TOBN(0x7e9dd70d, 0x7b1566ee)},
-          {TOBN(0x94ad78f7, 0xcbcd5e64), TOBN(0x0359ac17, 0x9bd4c032),
-           TOBN(0x3b11baaf, 0x7cc222ae), TOBN(0xa6a6e284, 0xba78e812)}},
-         {{TOBN(0x8392053f, 0x24cea1a0), TOBN(0xc97bce4a, 0x33621491),
-           TOBN(0x7eb1db34, 0x35399ee9), TOBN(0x473f78ef, 0xece81ad1)},
-          {TOBN(0x41d72fe0, 0xf63d3d0d), TOBN(0xe620b880, 0xafab62fc),
-           TOBN(0x92096bc9, 0x93158383), TOBN(0x41a21357, 0x8f896f6c)}},
-         {{TOBN(0x1b5ee2fa, 0xc7dcfcab), TOBN(0x650acfde, 0x9546e007),
-           TOBN(0xc081b749, 0xb1b02e07), TOBN(0xda9e41a0, 0xf9eca03d)},
-          {TOBN(0x013ba727, 0x175a54ab), TOBN(0xca0cd190, 0xea5d8d10),
-           TOBN(0x85ea52c0, 0x95fd96a9), TOBN(0x2c591b9f, 0xbc5c3940)}},
-         {{TOBN(0x6fb4d4e4, 0x2bad4d5f), TOBN(0xfa4c3590, 0xfef0059b),
-           TOBN(0x6a10218a, 0xf5122294), TOBN(0x9a78a81a, 0xa85751d1)},
-          {TOBN(0x04f20579, 0xa98e84e7), TOBN(0xfe1242c0, 0x4997e5b5),
-           TOBN(0xe77a273b, 0xca21e1e4), TOBN(0xfcc8b1ef, 0x9411939d)}},
-         {{TOBN(0xe20ea302, 0x92d0487a), TOBN(0x1442dbec, 0x294b91fe),
-           TOBN(0x1f7a4afe, 0xbb6b0e8f), TOBN(0x1700ef74, 0x6889c318)},
-          {TOBN(0xf5bbffc3, 0x70f1fc62), TOBN(0x3b31d4b6, 0x69c79cca),
-           TOBN(0xe8bc2aab, 0xa7f6340d), TOBN(0xb0b08ab4, 0xa725e10a)}},
-         {{TOBN(0x44f05701, 0xae340050), TOBN(0xba4b3016, 0x1cf0c569),
-           TOBN(0x5aa29f83, 0xfbe19a51), TOBN(0x1b9ed428, 0xb71d752e)},
-          {TOBN(0x1666e54e, 0xeb4819f5), TOBN(0x616cdfed, 0x9e18b75b),
-           TOBN(0x112ed5be, 0x3ee27b0b), TOBN(0xfbf28319, 0x44c7de4d)}},
-         {{TOBN(0xd685ec85, 0xe0e60d84), TOBN(0x68037e30, 0x1db7ee78),
-           TOBN(0x5b65bdcd, 0x003c4d6e), TOBN(0x33e7363a, 0x93e29a6a)},
-          {TOBN(0x995b3a61, 0x08d0756c), TOBN(0xd727f85c, 0x2faf134b),
-           TOBN(0xfac6edf7, 0x1d337823), TOBN(0x99b9aa50, 0x0439b8b4)}},
-         {{TOBN(0x722eb104, 0xe2b4e075), TOBN(0x49987295, 0x437c4926),
-           TOBN(0xb1e4c0e4, 0x46a9b82d), TOBN(0xd0cb3197, 0x57a006f5)},
-          {TOBN(0xf3de0f7d, 0xd7808c56), TOBN(0xb5c54d8f, 0x51f89772),
-           TOBN(0x500a114a, 0xadbd31aa), TOBN(0x9afaaaa6, 0x295f6cab)}},
-         {{TOBN(0x94705e21, 0x04cf667a), TOBN(0xfc2a811b, 0x9d3935d7),
-           TOBN(0x560b0280, 0x6d09267c), TOBN(0xf19ed119, 0xf780e53b)},
-          {TOBN(0xf0227c09, 0x067b6269), TOBN(0x967b8533, 0x5caef599),
-           TOBN(0x155b9243, 0x68efeebc), TOBN(0xcd6d34f5, 0xc497bae6)}},
-         {{TOBN(0x1dd8d5d3, 0x6cceb370), TOBN(0x2aeac579, 0xa78d7bf9),
-           TOBN(0x5d65017d, 0x70b67a62), TOBN(0x70c8e44f, 0x17c53f67)},
-          {TOBN(0xd1fc0950, 0x86a34d09), TOBN(0xe0fca256, 0xe7134907),
-           TOBN(0xe24fa29c, 0x80fdd315), TOBN(0x2c4acd03, 0xd87499ad)}},
-         {{TOBN(0xbaaf7517, 0x3b5a9ba6), TOBN(0xb9cbe1f6, 0x12e51a51),
-           TOBN(0xd88edae3, 0x5e154897), TOBN(0xe4309c3c, 0x77b66ca0)},
-          {TOBN(0xf5555805, 0xf67f3746), TOBN(0x85fc37ba, 0xa36401ff),
-           TOBN(0xdf86e2ca, 0xd9499a53), TOBN(0x6270b2a3, 0xecbc955b)}},
-         {{TOBN(0xafae64f5, 0x974ad33b), TOBN(0x04d85977, 0xfe7b2df1),
-           TOBN(0x2a3db3ff, 0x4ab03f73), TOBN(0x0b87878a, 0x8702740a)},
-          {TOBN(0x6d263f01, 0x5a061732), TOBN(0xc25430ce, 0xa32a1901),
-           TOBN(0xf7ebab3d, 0xdb155018), TOBN(0x3a86f693, 0x63a9b78e)}},
-         {{TOBN(0x349ae368, 0xda9f3804), TOBN(0x470f07fe, 0xa164349c),
-           TOBN(0xd52f4cc9, 0x8562baa5), TOBN(0xc74a9e86, 0x2b290df3)},
-          {TOBN(0xd3a1aa35, 0x43471a24), TOBN(0x239446be, 0xb8194511),
-           TOBN(0xbec2dd00, 0x81dcd44d), TOBN(0xca3d7f0f, 0xc42ac82d)}},
-         {{TOBN(0x1f3db085, 0xfdaf4520), TOBN(0xbb6d3e80, 0x4549daf2),
-           TOBN(0xf5969d8a, 0x19ad5c42), TOBN(0x7052b13d, 0xdbfd1511)},
-          {TOBN(0x11890d1b, 0x682b9060), TOBN(0xa71d3883, 0xac34452c),
-           TOBN(0xa438055b, 0x783805b4), TOBN(0x43241277, 0x4725b23e)}},
-         {{TOBN(0xf20cf96e, 0x4901bbed), TOBN(0x6419c710, 0xf432a2bb),
-           TOBN(0x57a0fbb9, 0xdfa9cd7d), TOBN(0x589111e4, 0x00daa249)},
-          {TOBN(0x19809a33, 0x7b60554e), TOBN(0xea5f8887, 0xede283a4),
-           TOBN(0x2d713802, 0x503bfd35), TOBN(0x151bb0af, 0x585d2a53)}},
-         {{TOBN(0x40b08f74, 0x43b30ca8), TOBN(0xe10b5bba, 0xd9934583),
-           TOBN(0xe8a546d6, 0xb51110ad), TOBN(0x1dd50e66, 0x28e0b6c5)},
-          {TOBN(0x292e9d54, 0xcff2b821), TOBN(0x3882555d, 0x47281760),
-           TOBN(0x134838f8, 0x3724d6e3), TOBN(0xf2c679e0, 0x22ddcda1)}},
-         {{TOBN(0x40ee8815, 0x6d2a5768), TOBN(0x7f227bd2, 0x1c1e7e2d),
-           TOBN(0x487ba134, 0xd04ff443), TOBN(0x76e2ff3d, 0xc614e54b)},
-          {TOBN(0x36b88d6f, 0xa3177ec7), TOBN(0xbf731d51, 0x2328fff5),
-           TOBN(0x758caea2, 0x49ba158e), TOBN(0x5ab8ff4c, 0x02938188)}},
-         {{TOBN(0x33e16056, 0x35edc56d), TOBN(0x5a69d349, 0x7e940d79),
-           TOBN(0x6c4fd001, 0x03866dcb), TOBN(0x20a38f57, 0x4893cdef)},
-          {TOBN(0xfbf3e790, 0xfac3a15b), TOBN(0x6ed7ea2e, 0x7a4f8e6b),
-           TOBN(0xa663eb4f, 0xbc3aca86), TOBN(0x22061ea5, 0x080d53f7)}},
-         {{TOBN(0x2480dfe6, 0xf546783f), TOBN(0xd38bc6da, 0x5a0a641e),
-           TOBN(0xfb093cd1, 0x2ede8965), TOBN(0x89654db4, 0xacb455cf)},
-          {TOBN(0x413cbf9a, 0x26e1adee), TOBN(0x291f3764, 0x373294d4),
-           TOBN(0x00797257, 0x648083fe), TOBN(0x25f504d3, 0x208cc341)}},
-         {{TOBN(0x635a8e5e, 0xc3a0ee43), TOBN(0x70aaebca, 0x679898ff),
-           TOBN(0x9ee9f547, 0x5dc63d56), TOBN(0xce987966, 0xffb34d00)},
-          {TOBN(0xf9f86b19, 0x5e26310a), TOBN(0x9e435484, 0x382a8ca8),
-           TOBN(0x253bcb81, 0xc2352fe4), TOBN(0xa4eac8b0, 0x4474b571)}},
-         {{TOBN(0xc1b97512, 0xc1ad8cf8), TOBN(0x193b4e9e, 0x99e0b697),
-           TOBN(0x939d2716, 0x01e85df0), TOBN(0x4fb265b3, 0xcd44eafd)},
-          {TOBN(0x321e7dcd, 0xe51e1ae2), TOBN(0x8e3a8ca6, 0xe3d8b096),
-           TOBN(0x8de46cb0, 0x52604998), TOBN(0x91099ad8, 0x39072aa7)}},
-         {{TOBN(0x2617f91c, 0x93aa96b8), TOBN(0x0fc8716b, 0x7fca2e13),
-           TOBN(0xa7106f5e, 0x95328723), TOBN(0xd1c9c40b, 0x262e6522)},
-          {TOBN(0xb9bafe86, 0x42b7c094), TOBN(0x1873439d, 0x1543c021),
-           TOBN(0xe1baa5de, 0x5cbefd5d), TOBN(0xa363fc5e, 0x521e8aff)}},
-         {{TOBN(0xefe6320d, 0xf862eaac), TOBN(0x14419c63, 0x22c647dc),
-           TOBN(0x0e06707c, 0x4e46d428), TOBN(0xcb6c834f, 0x4a178f8f)},
-          {TOBN(0x0f993a45, 0xd30f917c), TOBN(0xd4c4b049, 0x9879afee),
-           TOBN(0xb6142a1e, 0x70500063), TOBN(0x7c9b41c3, 0xa5d9d605)}},
-         {{TOBN(0xbc00fc2f, 0x2f8ba2c7), TOBN(0x0966eb2f, 0x7c67aa28),
-           TOBN(0x13f7b516, 0x5a786972), TOBN(0x3bfb7557, 0x8a2fbba0)},
-          {TOBN(0x131c4f23, 0x5a2b9620), TOBN(0xbff3ed27, 0x6faf46be),
-           TOBN(0x9b4473d1, 0x7e172323), TOBN(0x421e8878, 0x339f6246)}},
-         {{TOBN(0x0fa8587a, 0x25a41632), TOBN(0xc0814124, 0xa35b6c93),
-           TOBN(0x2b18a9f5, 0x59ebb8db), TOBN(0x264e3357, 0x76edb29c)},
-          {TOBN(0xaf245ccd, 0xc87c51e2), TOBN(0x16b3015b, 0x501e6214),
-           TOBN(0xbb31c560, 0x0a3882ce), TOBN(0x6961bb94, 0xfec11e04)}},
-         {{TOBN(0x3b825b8d, 0xeff7a3a0), TOBN(0xbec33738, 0xb1df7326),
-           TOBN(0x68ad747c, 0x99604a1f), TOBN(0xd154c934, 0x9a3bd499)},
-          {TOBN(0xac33506f, 0x1cc7a906), TOBN(0x73bb5392, 0x6c560e8f),
-           TOBN(0x6428fcbe, 0x263e3944), TOBN(0xc11828d5, 0x1c387434)}},
-         {{TOBN(0x3cd04be1, 0x3e4b12ff), TOBN(0xc3aad9f9, 0x2d88667c),
-           TOBN(0xc52ddcf8, 0x248120cf), TOBN(0x985a892e, 0x2a389532)},
-          {TOBN(0xfbb4b21b, 0x3bb85fa0), TOBN(0xf95375e0, 0x8dfc6269),
-           TOBN(0xfb4fb06c, 0x7ee2acea), TOBN(0x6785426e, 0x309c4d1f)}},
-         {{TOBN(0x659b17c8, 0xd8ceb147), TOBN(0x9b649eee, 0xb70a5554),
-           TOBN(0x6b7fa0b5, 0xac6bc634), TOBN(0xd99fe2c7, 0x1d6e732f)},
-          {TOBN(0x30e6e762, 0x8d3abba2), TOBN(0x18fee6e7, 0xa797b799),
-           TOBN(0x5c9d360d, 0xc696464d), TOBN(0xe3baeb48, 0x27bfde12)}},
-         {{TOBN(0x2bf5db47, 0xf23206d5), TOBN(0x2f6d3420, 0x1d260152),
-           TOBN(0x17b87653, 0x3f8ff89a), TOBN(0x5157c30c, 0x378fa458)},
-          {TOBN(0x7517c5c5, 0x2d4fb936), TOBN(0xef22f7ac, 0xe6518cdc),
-           TOBN(0xdeb483e6, 0xbf847a64), TOBN(0xf5084558, 0x92e0fa89)}}},
-        {{{TOBN(0xab9659d8, 0xdf7304d4), TOBN(0xb71bcf1b, 0xff210e8e),
-           TOBN(0xa9a2438b, 0xd73fbd60), TOBN(0x4595cd1f, 0x5d11b4de)},
-          {TOBN(0x9c0d329a, 0x4835859d), TOBN(0x4a0f0d2d, 0x7dbb6e56),
-           TOBN(0xc6038e5e, 0xdf928a4e), TOBN(0xc9429621, 0x8f5ad154)}},
-         {{TOBN(0x91213462, 0xf23f2d92), TOBN(0x6cab71bd, 0x60b94078),
-           TOBN(0x6bdd0a63, 0x176cde20), TOBN(0x54c9b20c, 0xee4d54bc)},
-          {TOBN(0x3cd2d8aa, 0x9f2ac02f), TOBN(0x03f8e617, 0x206eedb0),
-           TOBN(0xc7f68e16, 0x93086434), TOBN(0x831469c5, 0x92dd3db9)}},
-         {{TOBN(0x8521df24, 0x8f981354), TOBN(0x587e23ec, 0x3588a259),
-           TOBN(0xcbedf281, 0xd7a0992c), TOBN(0x06930a55, 0x38961407)},
-          {TOBN(0x09320deb, 0xbe5bbe21), TOBN(0xa7ffa5b5, 0x2491817f),
-           TOBN(0xe6c8b4d9, 0x09065160), TOBN(0xac4f3992, 0xfff6d2a9)}},
-         {{TOBN(0x7aa7a158, 0x3ae9c1bd), TOBN(0xe0af6d98, 0xe37ce240),
-           TOBN(0xe54342d9, 0x28ab38b4), TOBN(0xe8b75007, 0x0a1c98ca)},
-          {TOBN(0xefce86af, 0xe02358f2), TOBN(0x31b8b856, 0xea921228),
-           TOBN(0x052a1912, 0x0a1c67fc), TOBN(0xb4069ea4, 0xe3aead59)}},
-         {{TOBN(0x3232d6e2, 0x7fa03cb3), TOBN(0xdb938e5b, 0x0fdd7d88),
-           TOBN(0x04c1d2cd, 0x2ccbfc5d), TOBN(0xd2f45c12, 0xaf3a580f)},
-          {TOBN(0x592620b5, 0x7883e614), TOBN(0x5fd27e68, 0xbe7c5f26),
-           TOBN(0x139e45a9, 0x1567e1e3), TOBN(0x2cc71d2d, 0x44d8aaaf)}},
-         {{TOBN(0x4a9090cd, 0xe36d0757), TOBN(0xf722d7b1, 0xd9a29382),
-           TOBN(0xfb7fb04c, 0x04b48ddf), TOBN(0x628ad2a7, 0xebe16f43)},
-          {TOBN(0xcd3fbfb5, 0x20226040), TOBN(0x6c34ecb1, 0x5104b6c4),
-           TOBN(0x30c0754e, 0xc903c188), TOBN(0xec336b08, 0x2d23cab0)}},
-         {{TOBN(0x473d62a2, 0x1e206ee5), TOBN(0xf1e27480, 0x8c49a633),
-           TOBN(0x87ab956c, 0xe9f6b2c3), TOBN(0x61830b48, 0x62b606ea)},
-          {TOBN(0x67cd6846, 0xe78e815f), TOBN(0xfe40139f, 0x4c02082a),
-           TOBN(0x52bbbfcb, 0x952ec365), TOBN(0x74c11642, 0x6b9836ab)}},
-         {{TOBN(0x9f51439e, 0x558df019), TOBN(0x230da4ba, 0xac712b27),
-           TOBN(0x518919e3, 0x55185a24), TOBN(0x4dcefcdd, 0x84b78f50)},
-          {TOBN(0xa7d90fb2, 0xa47d4c5a), TOBN(0x55ac9abf, 0xb30e009e),
-           TOBN(0xfd2fc359, 0x74eed273), TOBN(0xb72d824c, 0xdbea8faf)}},
-         {{TOBN(0xce721a74, 0x4513e2ca), TOBN(0x0b418612, 0x38240b2c),
-           TOBN(0x05199968, 0xd5baa450), TOBN(0xeb1757ed, 0x2b0e8c25)},
-          {TOBN(0x6ebc3e28, 0x3dfac6d5), TOBN(0xb2431e2e, 0x48a237f5),
-           TOBN(0x2acb5e23, 0x52f61499), TOBN(0x5558a2a7, 0xe06c936b)}},
-         {{TOBN(0xd213f923, 0xcbb13d1b), TOBN(0x98799f42, 0x5bfb9bfe),
-           TOBN(0x1ae8ddc9, 0x701144a9), TOBN(0x0b8b3bb6, 0x4c5595ee)},
-          {TOBN(0x0ea9ef2e, 0x3ecebb21), TOBN(0x17cb6c4b, 0x3671f9a7),
-           TOBN(0x47ef464f, 0x726f1d1f), TOBN(0x171b9484, 0x6943a276)}},
-         {{TOBN(0x51a4ae2d, 0x7ef0329c), TOBN(0x08509222, 0x91c4402a),
-           TOBN(0x64a61d35, 0xafd45bbc), TOBN(0x38f096fe, 0x3035a851)},
-          {TOBN(0xc7468b74, 0xa1dec027), TOBN(0xe8cf10e7, 0x4fc7dcba),
-           TOBN(0xea35ff40, 0xf4a06353), TOBN(0x0b4c0dfa, 0x8b77dd66)}},
-         {{TOBN(0x779b8552, 0xde7e5c19), TOBN(0xfab28609, 0xc1c0256c),
-           TOBN(0x64f58eee, 0xabd4743d), TOBN(0x4e8ef838, 0x7b6cc93b)},
-          {TOBN(0xee650d26, 0x4cb1bf3d), TOBN(0x4c1f9d09, 0x73dedf61),
-           TOBN(0xaef7c9d7, 0xbfb70ced), TOBN(0x1ec0507e, 0x1641de1e)}},
-         {{TOBN(0xcd7e5cc7, 0xcde45079), TOBN(0xde173c9a, 0x516ac9e4),
-           TOBN(0x517a8494, 0xc170315c), TOBN(0x438fd905, 0x91d8e8fb)},
-          {TOBN(0x5145c506, 0xc7d9630b), TOBN(0x6457a87b, 0xf47d4d75),
-           TOBN(0xd31646bf, 0x0d9a80e8), TOBN(0x453add2b, 0xcef3aabe)}},
-         {{TOBN(0xc9941109, 0xa607419d), TOBN(0xfaa71e62, 0xbb6bca80),
-           TOBN(0x34158c13, 0x07c431f3), TOBN(0x594abebc, 0x992bc47a)},
-          {TOBN(0x6dfea691, 0xeb78399f), TOBN(0x48aafb35, 0x3f42cba4),
-           TOBN(0xedcd65af, 0x077c04f0), TOBN(0x1a29a366, 0xe884491a)}},
-         {{TOBN(0x023a40e5, 0x1c21f2bf), TOBN(0xf99a513c, 0xa5057aee),
-           TOBN(0xa3fe7e25, 0xbcab072e), TOBN(0x8568d2e1, 0x40e32bcf)},
-          {TOBN(0x904594eb, 0xd3f69d9f), TOBN(0x181a9733, 0x07affab1),
-           TOBN(0xe4d68d76, 0xb6e330f4), TOBN(0x87a6dafb, 0xc75a7fc1)}},
-         {{TOBN(0x549db2b5, 0xef7d9289), TOBN(0x2480d4a8, 0x197f015a),
-           TOBN(0x61d5590b, 0xc40493b6), TOBN(0x3a55b52e, 0x6f780331)},
-          {TOBN(0x40eb8115, 0x309eadb0), TOBN(0xdea7de5a, 0x92e5c625),
-           TOBN(0x64d631f0, 0xcc6a3d5a), TOBN(0x9d5e9d7c, 0x93e8dd61)}},
-         {{TOBN(0xf297bef5, 0x206d3ffc), TOBN(0x23d5e033, 0x7d808bd4),
-           TOBN(0x4a4f6912, 0xd24cf5ba), TOBN(0xe4d8163b, 0x09cdaa8a)},
-          {TOBN(0x0e0de9ef, 0xd3082e8e), TOBN(0x4fe1246c, 0x0192f360),
-           TOBN(0x1f900150, 0x4b8eee0a), TOBN(0x5219da81, 0xf1da391b)}},
-         {{TOBN(0x7bf6a5c1, 0xf7ea25aa), TOBN(0xd165e6bf, 0xfbb07d5f),
-           TOBN(0xe3539361, 0x89e78671), TOBN(0xa3fcac89, 0x2bac4219)},
-          {TOBN(0xdfab6fd4, 0xf0baa8ab), TOBN(0x5a4adac1, 0xe2c1c2e5),
-           TOBN(0x6cd75e31, 0x40d85849), TOBN(0xce263fea, 0x19b39181)}},
-         {{TOBN(0xcb6803d3, 0x07032c72), TOBN(0x7f40d5ce, 0x790968c8),
-           TOBN(0xa6de86bd, 0xdce978f0), TOBN(0x25547c4f, 0x368f751c)},
-          {TOBN(0xb1e685fd, 0x65fb2a9e), TOBN(0xce69336f, 0x1eb9179c),
-           TOBN(0xb15d1c27, 0x12504442), TOBN(0xb7df465c, 0xb911a06b)}},
-         {{TOBN(0xb8d804a3, 0x315980cd), TOBN(0x693bc492, 0xfa3bebf7),
-           TOBN(0x3578aeee, 0x2253c504), TOBN(0x158de498, 0xcd2474a2)},
-          {TOBN(0x1331f5c7, 0xcfda8368), TOBN(0xd2d7bbb3, 0x78d7177e),
-           TOBN(0xdf61133a, 0xf3c1e46e), TOBN(0x5836ce7d, 0xd30e7be8)}},
-         {{TOBN(0x83084f19, 0x94f834cb), TOBN(0xd35653d4, 0x429ed782),
-           TOBN(0xa542f16f, 0x59e58243), TOBN(0xc2b52f65, 0x0470a22d)},
-          {TOBN(0xe3b6221b, 0x18f23d96), TOBN(0xcb05abac, 0x3f5252b4),
-           TOBN(0xca00938b, 0x87d61402), TOBN(0x2f186cdd, 0x411933e4)}},
-         {{TOBN(0xe042ece5, 0x9a29a5c5), TOBN(0xb19b3c07, 0x3b6c8402),
-           TOBN(0xc97667c7, 0x19d92684), TOBN(0xb5624622, 0xebc66372)},
-          {TOBN(0x0cb96e65, 0x3c04fa02), TOBN(0x83a7176c, 0x8eaa39aa),
-           TOBN(0x2033561d, 0xeaa1633f), TOBN(0x45a9d086, 0x4533df73)}},
-         {{TOBN(0xe0542c1d, 0x3dc090bc), TOBN(0x82c996ef, 0xaa59c167),
-           TOBN(0xe3f735e8, 0x0ee7fc4d), TOBN(0x7b179393, 0x7c35db79)},
-          {TOBN(0xb6419e25, 0xf8c5dbfd), TOBN(0x4d9d7a1e, 0x1f327b04),
-           TOBN(0x979f6f9b, 0x298dfca8), TOBN(0xc7c5dff1, 0x8de9366a)}},
-         {{TOBN(0x1b7a588d, 0x04c82bdd), TOBN(0x68005534, 0xf8319dfd),
-           TOBN(0xde8a55b5, 0xd8eb9580), TOBN(0x5ea886da, 0x8d5bca81)},
-          {TOBN(0xe8530a01, 0x252a0b4d), TOBN(0x1bffb4fe, 0x35eaa0a1),
-           TOBN(0x2ad828b1, 0xd8e99563), TOBN(0x7de96ef5, 0x95f9cd87)}},
-         {{TOBN(0x4abb2d0c, 0xd77d970c), TOBN(0x03cfb933, 0xd33ef9cb),
-           TOBN(0xb0547c01, 0x8b211fe9), TOBN(0x2fe64809, 0xa56ed1c6)},
-          {TOBN(0xcb7d5624, 0xc2ac98cc), TOBN(0x2a1372c0, 0x1a393e33),
-           TOBN(0xc8d1ec1c, 0x29660521), TOBN(0xf3d31b04, 0xb37ac3e9)}},
-         {{TOBN(0xa29ae9df, 0x5ece6e7c), TOBN(0x0603ac8f, 0x0facfb55),
-           TOBN(0xcfe85b7a, 0xdda233a5), TOBN(0xe618919f, 0xbd75f0b8)},
-          {TOBN(0xf555a3d2, 0x99bf1603), TOBN(0x1f43afc9, 0xf184255a),
-           TOBN(0xdcdaf341, 0x319a3e02), TOBN(0xd3b117ef, 0x03903a39)}},
-         {{TOBN(0xe095da13, 0x65d1d131), TOBN(0x86f16367, 0xc37ad03e),
-           TOBN(0x5f37389e, 0x462cd8dd), TOBN(0xc103fa04, 0xd67a60e6)},
-          {TOBN(0x57c34344, 0xf4b478f0), TOBN(0xce91edd8, 0xe117c98d),
-           TOBN(0x001777b0, 0x231fc12e), TOBN(0x11ae47f2, 0xb207bccb)}},
-         {{TOBN(0xd983cf8d, 0x20f8a242), TOBN(0x7aff5b1d, 0xf22e1ad8),
-           TOBN(0x68fd11d0, 0x7fc4feb3), TOBN(0x5d53ae90, 0xb0f1c3e1)},
-          {TOBN(0x50fb7905, 0xec041803), TOBN(0x85e3c977, 0x14404888),
-           TOBN(0x0e67faed, 0xac628d8f), TOBN(0x2e865150, 0x6668532c)}},
-         {{TOBN(0x15acaaa4, 0x6a67a6b0), TOBN(0xf4cdee25, 0xb25cec41),
-           TOBN(0x49ee565a, 0xe4c6701e), TOBN(0x2a04ca66, 0xfc7d63d8)},
-          {TOBN(0xeb105018, 0xef0543fb), TOBN(0xf709a4f5, 0xd1b0d81d),
-           TOBN(0x5b906ee6, 0x2915d333), TOBN(0xf4a87412, 0x96f1f0ab)}},
-         {{TOBN(0xb6b82fa7, 0x4d82f4c2), TOBN(0x90725a60, 0x6804efb3),
-           TOBN(0xbc82ec46, 0xadc3425e), TOBN(0xb7b80581, 0x2787843e)},
-          {TOBN(0xdf46d91c, 0xdd1fc74c), TOBN(0xdc1c62cb, 0xe783a6c4),
-           TOBN(0x59d1b9f3, 0x1a04cbba), TOBN(0xd87f6f72, 0x95e40764)}},
-         {{TOBN(0x02b4cfc1, 0x317f4a76), TOBN(0x8d2703eb, 0x91036bce),
-           TOBN(0x98206cc6, 0xa5e72a56), TOBN(0x57be9ed1, 0xcf53fb0f)},
-          {TOBN(0x09374571, 0xef0b17ac), TOBN(0x74b2655e, 0xd9181b38),
-           TOBN(0xc8f80ea8, 0x89935d0e), TOBN(0xc0d9e942, 0x91529936)}},
-         {{TOBN(0x19686041, 0x1e84e0e5), TOBN(0xa5db84d3, 0xaea34c93),
-           TOBN(0xf9d5bb19, 0x7073a732), TOBN(0xb8d2fe56, 0x6bcfd7c0)},
-          {TOBN(0x45775f36, 0xf3eb82fa), TOBN(0x8cb20ccc, 0xfdff8b58),
-           TOBN(0x1659b65f, 0x8374c110), TOBN(0xb8b4a422, 0x330c789a)}},
-         {{TOBN(0x75e3c3ea, 0x6fe8208b), TOBN(0xbd74b9e4, 0x286e78fe),
-           TOBN(0x0be2e81b, 0xd7d93a1a), TOBN(0x7ed06e27, 0xdd0a5aae)},
-          {TOBN(0x721f5a58, 0x6be8b800), TOBN(0x428299d1, 0xd846db28),
-           TOBN(0x95cb8e6b, 0x5be88ed3), TOBN(0xc3186b23, 0x1c034e11)}},
-         {{TOBN(0xa6312c9e, 0x8977d99b), TOBN(0xbe944331, 0x83f531e7),
-           TOBN(0x8232c0c2, 0x18d3b1d4), TOBN(0x617aae8b, 0xe1247b73)},
-          {TOBN(0x40153fc4, 0x282aec3b), TOBN(0xc6063d2f, 0xf7b8f823),
-           TOBN(0x68f10e58, 0x3304f94c), TOBN(0x31efae74, 0xee676346)}},
-         {{TOBN(0xbadb6c6d, 0x40a9b97c), TOBN(0x14702c63, 0x4f666256),
-           TOBN(0xdeb954f1, 0x5184b2e3), TOBN(0x5184a526, 0x94b6ca40)},
-          {TOBN(0xfff05337, 0x003c32ea), TOBN(0x5aa374dd, 0x205974c7),
-           TOBN(0x9a763854, 0x4b0dd71a), TOBN(0x459cd27f, 0xdeb947ec)}},
-         {{TOBN(0xa6e28161, 0x459c2b92), TOBN(0x2f020fa8, 0x75ee8ef5),
-           TOBN(0xb132ec2d, 0x30b06310), TOBN(0xc3e15899, 0xbc6a4530)},
-          {TOBN(0xdc5f53fe, 0xaa3f451a), TOBN(0x3a3c7f23, 0xc2d9acac),
-           TOBN(0x2ec2f892, 0x6b27e58b), TOBN(0x68466ee7, 0xd742799f)}},
-         {{TOBN(0x98324dd4, 0x1fa26613), TOBN(0xa2dc6dab, 0xbdc29d63),
-           TOBN(0xf9675faa, 0xd712d657), TOBN(0x813994be, 0x21fd8d15)},
-          {TOBN(0x5ccbb722, 0xfd4f7553), TOBN(0x5135ff8b, 0xf3a36b20),
-           TOBN(0x44be28af, 0x69559df5), TOBN(0x40b65bed, 0x9d41bf30)}},
-         {{TOBN(0xd98bf2a4, 0x3734e520), TOBN(0x5e3abbe3, 0x209bdcba),
-           TOBN(0x77c76553, 0xbc945b35), TOBN(0x5331c093, 0xc6ef14aa)},
-          {TOBN(0x518ffe29, 0x76b60c80), TOBN(0x2285593b, 0x7ace16f8),
-           TOBN(0xab1f64cc, 0xbe2b9784), TOBN(0xe8f2c0d9, 0xab2421b6)}},
-         {{TOBN(0x617d7174, 0xc1df065c), TOBN(0xafeeb5ab, 0x5f6578fa),
-           TOBN(0x16ff1329, 0x263b54a8), TOBN(0x45c55808, 0xc990dce3)},
-          {TOBN(0x42eab6c0, 0xecc8c177), TOBN(0x799ea9b5, 0x5982ecaa),
-           TOBN(0xf65da244, 0xb607ef8e), TOBN(0x8ab226ce, 0x32a3fc2c)}},
-         {{TOBN(0x745741e5, 0x7ea973dc), TOBN(0x5c00ca70, 0x20888f2e),
-           TOBN(0x7cdce3cf, 0x45fd9cf1), TOBN(0x8a741ef1, 0x5507f872)},
-          {TOBN(0x47c51c2f, 0x196b4cec), TOBN(0x70d08e43, 0xc97ea618),
-           TOBN(0x930da15c, 0x15b18a2b), TOBN(0x33b6c678, 0x2f610514)}},
-         {{TOBN(0xc662e4f8, 0x07ac9794), TOBN(0x1eccf050, 0xba06cb79),
-           TOBN(0x1ff08623, 0xe7d954e5), TOBN(0x6ef2c5fb, 0x24cf71c3)},
-          {TOBN(0xb2c063d2, 0x67978453), TOBN(0xa0cf3796, 0x1d654af8),
-           TOBN(0x7cb242ea, 0x7ebdaa37), TOBN(0x206e0b10, 0xb86747e0)}},
-         {{TOBN(0x481dae5f, 0xd5ecfefc), TOBN(0x07084fd8, 0xc2bff8fc),
-           TOBN(0x8040a01a, 0xea324596), TOBN(0x4c646980, 0xd4de4036)},
-          {TOBN(0x9eb8ab4e, 0xd65abfc3), TOBN(0xe01cb91f, 0x13541ec7),
-           TOBN(0x8f029adb, 0xfd695012), TOBN(0x9ae28483, 0x3c7569ec)}},
-         {{TOBN(0xa5614c9e, 0xa66d80a1), TOBN(0x680a3e44, 0x75f5f911),
-           TOBN(0x0c07b14d, 0xceba4fc1), TOBN(0x891c285b, 0xa13071c1)},
-          {TOBN(0xcac67ceb, 0x799ece3c), TOBN(0x29b910a9, 0x41e07e27),
-           TOBN(0x66bdb409, 0xf2e43123), TOBN(0x06f8b137, 0x7ac9ecbe)}},
-         {{TOBN(0x5981fafd, 0x38547090), TOBN(0x19ab8b9f, 0x85e3415d),
-           TOBN(0xfc28c194, 0xc7e31b27), TOBN(0x843be0aa, 0x6fbcbb42)},
-          {TOBN(0xf3b1ed43, 0xa6db836c), TOBN(0x2a1330e4, 0x01a45c05),
-           TOBN(0x4f19f3c5, 0x95c1a377), TOBN(0xa85f39d0, 0x44b5ee33)}},
-         {{TOBN(0x3da18e6d, 0x4ae52834), TOBN(0x5a403b39, 0x7423dcb0),
-           TOBN(0xbb555e0a, 0xf2374aef), TOBN(0x2ad599c4, 0x1e8ca111)},
-          {TOBN(0x1b3a2fb9, 0x014b3bf8), TOBN(0x73092684, 0xf66d5007),
-           TOBN(0x079f1426, 0xc4340102), TOBN(0x1827cf81, 0x8fddf4de)}},
-         {{TOBN(0xc83605f6, 0xf10ff927), TOBN(0xd3871451, 0x23739fc6),
-           TOBN(0x6d163450, 0xcac1c2cc), TOBN(0x6b521296, 0xa2ec1ac5)},
-          {TOBN(0x0606c4f9, 0x6e3cb4a5), TOBN(0xe47d3f41, 0x778abff7),
-           TOBN(0x425a8d5e, 0xbe8e3a45), TOBN(0x53ea9e97, 0xa6102160)}},
-         {{TOBN(0x477a106e, 0x39cbb688), TOBN(0x532401d2, 0xf3386d32),
-           TOBN(0x8e564f64, 0xb1b9b421), TOBN(0xca9b8388, 0x81dad33f)},
-          {TOBN(0xb1422b4e, 0x2093913e), TOBN(0x533d2f92, 0x69bc8112),
-           TOBN(0x3fa017be, 0xebe7b2c7), TOBN(0xb2767c4a, 0xcaf197c6)}},
-         {{TOBN(0xc925ff87, 0xaedbae9f), TOBN(0x7daf0eb9, 0x36880a54),
-           TOBN(0x9284ddf5, 0x9c4d0e71), TOBN(0x1581cf93, 0x316f8cf5)},
-          {TOBN(0x3eeca887, 0x3ac1f452), TOBN(0xb417fce9, 0xfb6aeffe),
-           TOBN(0xa5918046, 0xeefb8dc3), TOBN(0x73d318ac, 0x02209400)}},
-         {{TOBN(0xe800400f, 0x728693e5), TOBN(0xe87d814b, 0x339927ed),
-           TOBN(0x93e94d3b, 0x57ea9910), TOBN(0xff8a35b6, 0x2245fb69)},
-          {TOBN(0x043853d7, 0x7f200d34), TOBN(0x470f1e68, 0x0f653ce1),
-           TOBN(0x81ac05bd, 0x59a06379), TOBN(0xa14052c2, 0x03930c29)}},
-         {{TOBN(0x6b72fab5, 0x26bc2797), TOBN(0x13670d16, 0x99f16771),
-           TOBN(0x00170052, 0x1e3e48d1), TOBN(0x978fe401, 0xb7adf678)},
-          {TOBN(0x55ecfb92, 0xd41c5dd4), TOBN(0x5ff8e247, 0xc7b27da5),
-           TOBN(0xe7518272, 0x013fb606), TOBN(0x5768d7e5, 0x2f547a3c)}},
-         {{TOBN(0xbb24eaa3, 0x60017a5f), TOBN(0x6b18e6e4, 0x9c64ce9b),
-           TOBN(0xc225c655, 0x103dde07), TOBN(0xfc3672ae, 0x7592f7ea)},
-          {TOBN(0x9606ad77, 0xd06283a1), TOBN(0x542fc650, 0xe4d59d99),
-           TOBN(0xabb57c49, 0x2a40e7c2), TOBN(0xac948f13, 0xa8db9f55)}},
-         {{TOBN(0x6d4c9682, 0xb04465c3), TOBN(0xe3d062fa, 0x6468bd15),
-           TOBN(0xa51729ac, 0x5f318d7e), TOBN(0x1fc87df6, 0x9eb6fc95)},
-          {TOBN(0x63d146a8, 0x0591f652), TOBN(0xa861b8f7, 0x589621aa),
-           TOBN(0x59f5f15a, 0xce31348c), TOBN(0x8f663391, 0x440da6da)}},
-         {{TOBN(0xcfa778ac, 0xb591ffa3), TOBN(0x027ca9c5, 0x4cdfebce),
-           TOBN(0xbe8e05a5, 0x444ea6b3), TOBN(0x8aab4e69, 0xa78d8254)},
-          {TOBN(0x2437f04f, 0xb474d6b8), TOBN(0x6597ffd4, 0x045b3855),
-           TOBN(0xbb0aea4e, 0xca47ecaa), TOBN(0x568aae83, 0x85c7ebfc)}},
-         {{TOBN(0x0e966e64, 0xc73b2383), TOBN(0x49eb3447, 0xd17d8762),
-           TOBN(0xde107821, 0x8da05dab), TOBN(0x443d8baa, 0x016b7236)},
-          {TOBN(0x163b63a5, 0xea7610d6), TOBN(0xe47e4185, 0xce1ca979),
-           TOBN(0xae648b65, 0x80baa132), TOBN(0xebf53de2, 0x0e0d5b64)}},
-         {{TOBN(0x8d3bfcb4, 0xd3c8c1ca), TOBN(0x0d914ef3, 0x5d04b309),
-           TOBN(0x55ef6415, 0x3de7d395), TOBN(0xbde1666f, 0x26b850e8)},
-          {TOBN(0xdbe1ca6e, 0xd449ab19), TOBN(0x8902b322, 0xe89a2672),
-           TOBN(0xb1674b7e, 0xdacb7a53), TOBN(0x8e9faf6e, 0xf52523ff)}},
-         {{TOBN(0x6ba535da, 0x9a85788b), TOBN(0xd21f03ae, 0xbd0626d4),
-           TOBN(0x099f8c47, 0xe873dc64), TOBN(0xcda8564d, 0x018ec97e)},
-          {TOBN(0x3e8d7a5c, 0xde92c68c), TOBN(0x78e035a1, 0x73323cc4),
-           TOBN(0x3ef26275, 0xf880ff7c), TOBN(0xa4ee3dff, 0x273eedaa)}},
-         {{TOBN(0x58823507, 0xaf4e18f8), TOBN(0x967ec9b5, 0x0672f328),
-           TOBN(0x9ded19d9, 0x559d3186), TOBN(0x5e2ab3de, 0x6cdce39c)},
-          {TOBN(0xabad6e4d, 0x11c226df), TOBN(0xf9783f43, 0x87723014),
-           TOBN(0x9a49a0cf, 0x1a885719), TOBN(0xfc0c1a5a, 0x90da9dbf)}},
-         {{TOBN(0x8bbaec49, 0x571d92ac), TOBN(0x569e85fe, 0x4692517f),
-           TOBN(0x8333b014, 0xa14ea4af), TOBN(0x32f2a62f, 0x12e5c5ad)},
-          {TOBN(0x98c2ce3a, 0x06d89b85), TOBN(0xb90741aa, 0x2ff77a08),
-           TOBN(0x2530defc, 0x01f795a2), TOBN(0xd6e5ba0b, 0x84b3c199)}},
-         {{TOBN(0x7d8e8451, 0x12e4c936), TOBN(0xae419f7d, 0xbd0be17b),
-           TOBN(0xa583fc8c, 0x22262bc9), TOBN(0x6b842ac7, 0x91bfe2bd)},
-          {TOBN(0x33cef4e9, 0x440d6827), TOBN(0x5f69f4de, 0xef81fb14),
-           TOBN(0xf16cf6f6, 0x234fbb92), TOBN(0x76ae3fc3, 0xd9e7e158)}},
-         {{TOBN(0x4e89f6c2, 0xe9740b33), TOBN(0x677bc85d, 0x4962d6a1),
-           TOBN(0x6c6d8a7f, 0x68d10d15), TOBN(0x5f9a7224, 0x0257b1cd)},
-          {TOBN(0x7096b916, 0x4ad85961), TOBN(0x5f8c47f7, 0xe657ab4a),
-           TOBN(0xde57d7d0, 0xf7461d7e), TOBN(0x7eb6094d, 0x80ce5ee2)}},
-         {{TOBN(0x0b1e1dfd, 0x34190547), TOBN(0x8a394f43, 0xf05dd150),
-           TOBN(0x0a9eb24d, 0x97df44e6), TOBN(0x78ca06bf, 0x87675719)},
-          {TOBN(0x6f0b3462, 0x6ffeec22), TOBN(0x9d91bcea, 0x36cdd8fb),
-           TOBN(0xac83363c, 0xa105be47), TOBN(0x81ba76c1, 0x069710e3)}},
-         {{TOBN(0x3d1b24cb, 0x28c682c6), TOBN(0x27f25228, 0x8612575b),
-           TOBN(0xb587c779, 0xe8e66e98), TOBN(0x7b0c03e9, 0x405eb1fe)},
-          {TOBN(0xfdf0d030, 0x15b548e7), TOBN(0xa8be76e0, 0x38b36af7),
-           TOBN(0x4cdab04a, 0x4f310c40), TOBN(0x6287223e, 0xf47ecaec)}},
-         {{TOBN(0x678e6055, 0x8b399320), TOBN(0x61fe3fa6, 0xc01e4646),
-           TOBN(0xc482866b, 0x03261a5e), TOBN(0xdfcf45b8, 0x5c2f244a)},
-          {TOBN(0x8fab9a51, 0x2f684b43), TOBN(0xf796c654, 0xc7220a66),
-           TOBN(0x1d90707e, 0xf5afa58f), TOBN(0x2c421d97, 0x4fdbe0de)}},
-         {{TOBN(0xc4f4cda3, 0xaf2ebc2f), TOBN(0xa0af843d, 0xcb4efe24),
-           TOBN(0x53b857c1, 0x9ccd10b1), TOBN(0xddc9d1eb, 0x914d3e04)},
-          {TOBN(0x7bdec8bb, 0x62771deb), TOBN(0x829277aa, 0x91c5aa81),
-           TOBN(0x7af18dd6, 0x832391ae), TOBN(0x1740f316, 0xc71a84ca)}}},
-        {{{TOBN(0x8928e99a, 0xeeaf8c49), TOBN(0xee7aa73d, 0x6e24d728),
-           TOBN(0x4c5007c2, 0xe72b156c), TOBN(0x5fcf57c5, 0xed408a1d)},
-          {TOBN(0x9f719e39, 0xb6057604), TOBN(0x7d343c01, 0xc2868bbf),
-           TOBN(0x2cca254b, 0x7e103e2d), TOBN(0xe6eb38a9, 0xf131bea2)}},
-         {{TOBN(0xb33e624f, 0x8be762b4), TOBN(0x2a9ee4d1, 0x058e3413),
-           TOBN(0x968e6369, 0x67d805fa), TOBN(0x9848949b, 0x7db8bfd7)},
-          {TOBN(0x5308d7e5, 0xd23a8417), TOBN(0x892f3b1d, 0xf3e29da5),
-           TOBN(0xc95c139e, 0x3dee471f), TOBN(0x8631594d, 0xd757e089)}},
-         {{TOBN(0xe0c82a3c, 0xde918dcc), TOBN(0x2e7b5994, 0x26fdcf4b),
-           TOBN(0x82c50249, 0x32cb1b2d), TOBN(0xea613a9d, 0x7657ae07)},
-          {TOBN(0xc2eb5f6c, 0xf1fdc9f7), TOBN(0xb6eae8b8, 0x879fe682),
-           TOBN(0x253dfee0, 0x591cbc7f), TOBN(0x000da713, 0x3e1290e6)}},
-         {{TOBN(0x1083e2ea, 0x1f095615), TOBN(0x0a28ad77, 0x14e68c33),
-           TOBN(0x6bfc0252, 0x3d8818be), TOBN(0xb585113a, 0xf35850cd)},
-          {TOBN(0x7d935f0b, 0x30df8aa1), TOBN(0xaddda07c, 0x4ab7e3ac),
-           TOBN(0x92c34299, 0x552f00cb), TOBN(0xc33ed1de, 0x2909df6c)}},
-         {{TOBN(0x22c2195d, 0x80e87766), TOBN(0x9e99e6d8, 0x9ddf4ac0),
-           TOBN(0x09642e4e, 0x65e74934), TOBN(0x2610ffa2, 0xff1ff241)},
-          {TOBN(0x4d1d47d4, 0x751c8159), TOBN(0x697b4985, 0xaf3a9363),
-           TOBN(0x0318ca46, 0x87477c33), TOBN(0xa90cb565, 0x9441eff3)}},
-         {{TOBN(0x58bb3848, 0x36f024cb), TOBN(0x85be1f77, 0x36016168),
-           TOBN(0x6c59587c, 0xdc7e07f1), TOBN(0x191be071, 0xaf1d8f02)},
-          {TOBN(0xbf169fa5, 0xcca5e55c), TOBN(0x3864ba3c, 0xf7d04eac),
-           TOBN(0x915e367f, 0x8d7d05db), TOBN(0xb48a876d, 0xa6549e5d)}},
-         {{TOBN(0xef89c656, 0x580e40a2), TOBN(0xf194ed8c, 0x728068bc),
-           TOBN(0x74528045, 0xa47990c9), TOBN(0xf53fc7d7, 0x5e1a4649)},
-          {TOBN(0xbec5ae9b, 0x78593e7d), TOBN(0x2cac4ee3, 0x41db65d7),
-           TOBN(0xa8c1eb24, 0x04a3d39b), TOBN(0x53b7d634, 0x03f8f3ef)}},
-         {{TOBN(0x2dc40d48, 0x3e07113c), TOBN(0x6e4a5d39, 0x7d8b63ae),
-           TOBN(0x5582a94b, 0x79684c2b), TOBN(0x932b33d4, 0x622da26c)},
-          {TOBN(0xf534f651, 0x0dbbf08d), TOBN(0x211d07c9, 0x64c23a52),
-           TOBN(0x0eeece0f, 0xee5bdc9b), TOBN(0xdf178168, 0xf7015558)}},
-         {{TOBN(0xd4294635, 0x0a712229), TOBN(0x93cbe448, 0x09273f8c),
-           TOBN(0x00b095ef, 0x8f13bc83), TOBN(0xbb741972, 0x8798978c)},
-          {TOBN(0x9d7309a2, 0x56dbe6e7), TOBN(0xe578ec56, 0x5a5d39ec),
-           TOBN(0x3961151b, 0x851f9a31), TOBN(0x2da7715d, 0xe5709eb4)}},
-         {{TOBN(0x867f3017, 0x53dfabf0), TOBN(0x728d2078, 0xb8e39259),
-           TOBN(0x5c75a0cd, 0x815d9958), TOBN(0xf84867a6, 0x16603be1)},
-          {TOBN(0xc865b13d, 0x70e35b1c), TOBN(0x02414468, 0x19b03e2c),
-           TOBN(0xe46041da, 0xac1f3121), TOBN(0x7c9017ad, 0x6f028a7c)}},
-         {{TOBN(0xabc96de9, 0x0a482873), TOBN(0x4265d6b1, 0xb77e54d4),
-           TOBN(0x68c38e79, 0xa57d88e7), TOBN(0xd461d766, 0x9ce82de3)},
-          {TOBN(0x817a9ec5, 0x64a7e489), TOBN(0xcc5675cd, 0xa0def5f2),
-           TOBN(0x9a00e785, 0x985d494e), TOBN(0xc626833f, 0x1b03514a)}},
-         {{TOBN(0xabe7905a, 0x83cdd60e), TOBN(0x50602fb5, 0xa1170184),
-           TOBN(0x689886cd, 0xb023642a), TOBN(0xd568d090, 0xa6e1fb00)},
-          {TOBN(0x5b1922c7, 0x0259217f), TOBN(0x93831cd9, 0xc43141e4),
-           TOBN(0xdfca3587, 0x0c95f86e), TOBN(0xdec2057a, 0x568ae828)}},
-         {{TOBN(0xc44ea599, 0xf98a759a), TOBN(0x55a0a7a2, 0xf7c23c1d),
-           TOBN(0xd5ffb6e6, 0x94c4f687), TOBN(0x3563cce2, 0x12848478)},
-          {TOBN(0x812b3517, 0xe7b1fbe1), TOBN(0x8a7dc979, 0x4f7338e0),
-           TOBN(0x211ecee9, 0x52d048db), TOBN(0x2eea4056, 0xc86ea3b8)}},
-         {{TOBN(0xd8cb68a7, 0xba772b34), TOBN(0xe16ed341, 0x5f4e2541),
-           TOBN(0x9b32f6a6, 0x0fec14db), TOBN(0xeee376f7, 0x391698be)},
-          {TOBN(0xe9a7aa17, 0x83674c02), TOBN(0x65832f97, 0x5843022a),
-           TOBN(0x29f3a8da, 0x5ba4990f), TOBN(0x79a59c3a, 0xfb8e3216)}},
-         {{TOBN(0x9cdc4d2e, 0xbd19bb16), TOBN(0xc6c7cfd0, 0xb3262d86),
-           TOBN(0xd4ce14d0, 0x969c0b47), TOBN(0x1fa352b7, 0x13e56128)},
-          {TOBN(0x383d55b8, 0x973db6d3), TOBN(0x71836850, 0xe8e5b7bf),
-           TOBN(0xc7714596, 0xe6bb571f), TOBN(0x259df31f, 0x2d5b2dd2)}},
-         {{TOBN(0x568f8925, 0x913cc16d), TOBN(0x18bc5b6d, 0xe1a26f5a),
-           TOBN(0xdfa413be, 0xf5f499ae), TOBN(0xf8835dec, 0xc3f0ae84)},
-          {TOBN(0xb6e60bd8, 0x65a40ab0), TOBN(0x65596439, 0x194b377e),
-           TOBN(0xbcd85625, 0x92084a69), TOBN(0x5ce433b9, 0x4f23ede0)}},
-         {{TOBN(0xe8e8f04f, 0x6ad65143), TOBN(0x11511827, 0xd6e14af6),
-           TOBN(0x3d390a10, 0x8295c0c7), TOBN(0x71e29ee4, 0x621eba16)},
-          {TOBN(0xa588fc09, 0x63717b46), TOBN(0x02be02fe, 0xe06ad4a2),
-           TOBN(0x931558c6, 0x04c22b22), TOBN(0xbb4d4bd6, 0x12f3c849)}},
-         {{TOBN(0x54a4f496, 0x20efd662), TOBN(0x92ba6d20, 0xc5952d14),
-           TOBN(0x2db8ea1e, 0xcc9784c2), TOBN(0x81cc10ca, 0x4b353644)},
-          {TOBN(0x40b570ad, 0x4b4d7f6c), TOBN(0x5c9f1d96, 0x84a1dcd2),
-           TOBN(0x01379f81, 0x3147e797), TOBN(0xe5c6097b, 0x2bd499f5)}},
-         {{TOBN(0x40dcafa6, 0x328e5e20), TOBN(0xf7b5244a, 0x54815550),
-           TOBN(0xb9a4f118, 0x47bfc978), TOBN(0x0ea0e79f, 0xd25825b1)},
-          {TOBN(0xa50f96eb, 0x646c7ecf), TOBN(0xeb811493, 0x446dea9d),
-           TOBN(0x2af04677, 0xdfabcf69), TOBN(0xbe3a068f, 0xc713f6e8)}},
-         {{TOBN(0x860d523d, 0x42e06189), TOBN(0xbf077941, 0x4e3aff13),
-           TOBN(0x0b616dca, 0xc1b20650), TOBN(0xe66dd6d1, 0x2131300d)},
-          {TOBN(0xd4a0fd67, 0xff99abde), TOBN(0xc9903550, 0xc7aac50d),
-           TOBN(0x022ecf8b, 0x7c46b2d7), TOBN(0x3333b1e8, 0x3abf92af)}},
-         {{TOBN(0x11cc113c, 0x6c491c14), TOBN(0x05976688, 0x80dd3f88),
-           TOBN(0xf5b4d9e7, 0x29d932ed), TOBN(0xe982aad8, 0xa2c38b6d)},
-          {TOBN(0x6f925347, 0x8be0dcf0), TOBN(0x700080ae, 0x65ca53f2),
-           TOBN(0xd8131156, 0x443ca77f), TOBN(0xe92d6942, 0xec51f984)}},
-         {{TOBN(0xd2a08af8, 0x85dfe9ae), TOBN(0xd825d9a5, 0x4d2a86ca),
-           TOBN(0x2c53988d, 0x39dff020), TOBN(0xf38b135a, 0x430cdc40)},
-          {TOBN(0x0c918ae0, 0x62a7150b), TOBN(0xf31fd8de, 0x0c340e9b),
-           TOBN(0xafa0e7ae, 0x4dbbf02e), TOBN(0x5847fb2a, 0x5eba6239)}},
-         {{TOBN(0x6b1647dc, 0xdccbac8b), TOBN(0xb642aa78, 0x06f485c8),
-           TOBN(0x873f3765, 0x7038ecdf), TOBN(0x2ce5e865, 0xfa49d3fe)},
-          {TOBN(0xea223788, 0xc98c4400), TOBN(0x8104a8cd, 0xf1fa5279),
-           TOBN(0xbcf7cc7a, 0x06becfd7), TOBN(0x49424316, 0xc8f974ae)}},
-         {{TOBN(0xc0da65e7, 0x84d6365d), TOBN(0xbcb7443f, 0x8f759fb8),
-           TOBN(0x35c712b1, 0x7ae81930), TOBN(0x80428dff, 0x4c6e08ab)},
-          {TOBN(0xf19dafef, 0xa4faf843), TOBN(0xced8538d, 0xffa9855f),
-           TOBN(0x20ac409c, 0xbe3ac7ce), TOBN(0x358c1fb6, 0x882da71e)}},
-         {{TOBN(0xafa9c0e5, 0xfd349961), TOBN(0x2b2cfa51, 0x8421c2fc),
-           TOBN(0x2a80db17, 0xf3a28d38), TOBN(0xa8aba539, 0x5d138e7e)},
-          {TOBN(0x52012d1d, 0x6e96eb8d), TOBN(0x65d8dea0, 0xcbaf9622),
-           TOBN(0x57735447, 0xb264f56c), TOBN(0xbeebef3f, 0x1b6c8da2)}},
-         {{TOBN(0xfc346d98, 0xce785254), TOBN(0xd50e8d72, 0xbb64a161),
-           TOBN(0xc03567c7, 0x49794add), TOBN(0x15a76065, 0x752c7ef6)},
-          {TOBN(0x59f3a222, 0x961f23d6), TOBN(0x378e4438, 0x73ecc0b0),
-           TOBN(0xc74be434, 0x5a82fde4), TOBN(0xae509af2, 0xd8b9cf34)}},
-         {{TOBN(0x4a61ee46, 0x577f44a1), TOBN(0xe09b748c, 0xb611deeb),
-           TOBN(0xc0481b2c, 0xf5f7b884), TOBN(0x35626678, 0x61acfa6b)},
-          {TOBN(0x37f4c518, 0xbf8d21e6), TOBN(0x22d96531, 0xb205a76d),
-           TOBN(0x37fb85e1, 0x954073c0), TOBN(0xbceafe4f, 0x65b3a567)}},
-         {{TOBN(0xefecdef7, 0xbe42a582), TOBN(0xd3fc6080, 0x65046be6),
-           TOBN(0xc9af13c8, 0x09e8dba9), TOBN(0x1e6c9847, 0x641491ff)},
-          {TOBN(0x3b574925, 0xd30c31f7), TOBN(0xb7eb72ba, 0xac2a2122),
-           TOBN(0x776a0dac, 0xef0859e7), TOBN(0x06fec314, 0x21900942)}},
-         {{TOBN(0x2464bc10, 0xf8c22049), TOBN(0x9bfbcce7, 0x875ebf69),
-           TOBN(0xd7a88e2a, 0x4336326b), TOBN(0xda05261c, 0x5bc2acfa)},
-          {TOBN(0xc29f5bdc, 0xeba7efc8), TOBN(0x471237ca, 0x25dbbf2e),
-           TOBN(0xa72773f2, 0x2975f127), TOBN(0xdc744e8e, 0x04d0b326)}},
-         {{TOBN(0x38a7ed16, 0xa56edb73), TOBN(0x64357e37, 0x2c007e70),
-           TOBN(0xa167d15b, 0x5080b400), TOBN(0x07b41164, 0x23de4be1)},
-          {TOBN(0xb2d91e32, 0x74c89883), TOBN(0x3c162821, 0x2882e7ed),
-           TOBN(0xad6b36ba, 0x7503e482), TOBN(0x48434e8e, 0x0ea34331)}},
-         {{TOBN(0x79f4f24f, 0x2c7ae0b9), TOBN(0xc46fbf81, 0x1939b44a),
-           TOBN(0x76fefae8, 0x56595eb1), TOBN(0x417b66ab, 0xcd5f29c7)},
-          {TOBN(0x5f2332b2, 0xc5ceec20), TOBN(0xd69661ff, 0xe1a1cae2),
-           TOBN(0x5ede7e52, 0x9b0286e6), TOBN(0x9d062529, 0xe276b993)}},
-         {{TOBN(0x324794b0, 0x7e50122b), TOBN(0xdd744f8b, 0x4af07ca5),
-           TOBN(0x30a12f08, 0xd63fc97b), TOBN(0x39650f1a, 0x76626d9d)},
-          {TOBN(0x101b47f7, 0x1fa38477), TOBN(0x3d815f19, 0xd4dc124f),
-           TOBN(0x1569ae95, 0xb26eb58a), TOBN(0xc3cde188, 0x95fb1887)}},
-         {{TOBN(0x54e9f37b, 0xf9539a48), TOBN(0xb0100e06, 0x7408c1a5),
-           TOBN(0x821d9811, 0xea580cbb), TOBN(0x8af52d35, 0x86e50c56)},
-          {TOBN(0xdfbd9d47, 0xdbbf698b), TOBN(0x2961a1ea, 0x03dc1c73),
-           TOBN(0x203d38f8, 0xe76a5df8), TOBN(0x08a53a68, 0x6def707a)}},
-         {{TOBN(0x26eefb48, 0x1bee45d4), TOBN(0xb3cee346, 0x3c688036),
-           TOBN(0x463c5315, 0xc42f2469), TOBN(0x19d84d2e, 0x81378162)},
-          {TOBN(0x22d7c3c5, 0x1c4d349f), TOBN(0x65965844, 0x163d59c5),
-           TOBN(0xcf198c56, 0xb8abceae), TOBN(0x6fb1fb1b, 0x628559d5)}},
-         {{TOBN(0x8bbffd06, 0x07bf8fe3), TOBN(0x46259c58, 0x3467734b),
-           TOBN(0xd8953cea, 0x35f7f0d3), TOBN(0x1f0bece2, 0xd65b0ff1)},
-          {TOBN(0xf7d5b4b3, 0xf3c72914), TOBN(0x29e8ea95, 0x3cb53389),
-           TOBN(0x4a365626, 0x836b6d46), TOBN(0xe849f910, 0xea174fde)}},
-         {{TOBN(0x7ec62fbb, 0xf4737f21), TOBN(0xd8dba5ab, 0x6209f5ac),
-           TOBN(0x24b5d7a9, 0xa5f9adbe), TOBN(0x707d28f7, 0xa61dc768)},
-          {TOBN(0x7711460b, 0xcaa999ea), TOBN(0xba7b174d, 0x1c92e4cc),
-           TOBN(0x3c4bab66, 0x18d4bf2d), TOBN(0xb8f0c980, 0xeb8bd279)}},
-         {{TOBN(0x024bea9a, 0x324b4737), TOBN(0xfba9e423, 0x32a83bca),
-           TOBN(0x6e635643, 0xa232dced), TOBN(0x99619367, 0x2571c8ba)},
-          {TOBN(0xe8c9f357, 0x54b7032b), TOBN(0xf936b3ba, 0x2442d54a),
-           TOBN(0x2263f0f0, 0x8290c65a), TOBN(0x48989780, 0xee2c7fdb)}},
-         {{TOBN(0xadc5d55a, 0x13d4f95e), TOBN(0x737cff85, 0xad9b8500),
-           TOBN(0x271c557b, 0x8a73f43d), TOBN(0xbed617a4, 0xe18bc476)},
-          {TOBN(0x66245401, 0x7dfd8ab2), TOBN(0xae7b89ae, 0x3a2870aa),
-           TOBN(0x1b555f53, 0x23a7e545), TOBN(0x6791e247, 0xbe057e4c)}},
-         {{TOBN(0x860136ad, 0x324fa34d), TOBN(0xea111447, 0x4cbeae28),
-           TOBN(0x023a4270, 0xbedd3299), TOBN(0x3d5c3a7f, 0xc1c35c34)},
-          {TOBN(0xb0f6db67, 0x8d0412d2), TOBN(0xd92625e2, 0xfcdc6b9a),
-           TOBN(0x92ae5ccc, 0x4e28a982), TOBN(0xea251c36, 0x47a3ce7e)}},
-         {{TOBN(0x9d658932, 0x790691bf), TOBN(0xed610589, 0x06b736ae),
-           TOBN(0x712c2f04, 0xc0d63b6e), TOBN(0x5cf06fd5, 0xc63d488f)},
-          {TOBN(0x97363fac, 0xd9588e41), TOBN(0x1f9bf762, 0x2b93257e),
-           TOBN(0xa9d1ffc4, 0x667acace), TOBN(0x1cf4a1aa, 0x0a061ecf)}},
-         {{TOBN(0x40e48a49, 0xdc1818d0), TOBN(0x0643ff39, 0xa3621ab0),
-           TOBN(0x5768640c, 0xe39ef639), TOBN(0x1fc099ea, 0x04d86854)},
-          {TOBN(0x9130b9c3, 0xeccd28fd), TOBN(0xd743cbd2, 0x7eec54ab),
-           TOBN(0x052b146f, 0xe5b475b6), TOBN(0x058d9a82, 0x900a7d1f)}},
-         {{TOBN(0x65e02292, 0x91262b72), TOBN(0x96f924f9, 0xbb0edf03),
-           TOBN(0x5cfa59c8, 0xfe206842), TOBN(0xf6037004, 0x5eafa720)},
-          {TOBN(0x5f30699e, 0x18d7dd96), TOBN(0x381e8782, 0xcbab2495),
-           TOBN(0x91669b46, 0xdd8be949), TOBN(0xb40606f5, 0x26aae8ef)}},
-         {{TOBN(0x2812b839, 0xfc6751a4), TOBN(0x16196214, 0xfba800ef),
-           TOBN(0x4398d5ca, 0x4c1a2875), TOBN(0x720c00ee, 0x653d8349)},
-          {TOBN(0xc2699eb0, 0xd820007c), TOBN(0x880ee660, 0xa39b5825),
-           TOBN(0x70694694, 0x471f6984), TOBN(0xf7d16ea8, 0xe3dda99a)}},
-         {{TOBN(0x28d675b2, 0xc0519a23), TOBN(0x9ebf94fe, 0x4f6952e3),
-           TOBN(0xf28bb767, 0xa2294a8a), TOBN(0x85512b4d, 0xfe0af3f5)},
-          {TOBN(0x18958ba8, 0x99b16a0d), TOBN(0x95c2430c, 0xba7548a7),
-           TOBN(0xb30d1b10, 0xa16be615), TOBN(0xe3ebbb97, 0x85bfb74c)}},
-         {{TOBN(0xa3273cfe, 0x18549fdb), TOBN(0xf6e200bf, 0x4fcdb792),
-           TOBN(0x54a76e18, 0x83aba56c), TOBN(0x73ec66f6, 0x89ef6aa2)},
-          {TOBN(0x8d17add7, 0xd1b9a305), TOBN(0xa959c5b9, 0xb7ae1b9d),
-           TOBN(0x88643522, 0x6bcc094a), TOBN(0xcc5616c4, 0xd7d429b9)}},
-         {{TOBN(0xa6dada01, 0xe6a33f7c), TOBN(0xc6217a07, 0x9d4e70ad),
-           TOBN(0xd619a818, 0x09c15b7c), TOBN(0xea06b329, 0x0e80c854)},
-          {TOBN(0x174811ce, 0xa5f5e7b9), TOBN(0x66dfc310, 0x787c65f4),
-           TOBN(0x4ea7bd69, 0x3316ab54), TOBN(0xc12c4acb, 0x1dcc0f70)}},
-         {{TOBN(0xe4308d1a, 0x1e407dd9), TOBN(0xe8a3587c, 0x91afa997),
-           TOBN(0xea296c12, 0xab77b7a5), TOBN(0xb5ad49e4, 0x673c0d52)},
-          {TOBN(0x40f9b2b2, 0x7006085a), TOBN(0xa88ff340, 0x87bf6ec2),
-           TOBN(0x978603b1, 0x4e3066a6), TOBN(0xb3f99fc2, 0xb5e486e2)}},
-         {{TOBN(0x07b53f5e, 0xb2e63645), TOBN(0xbe57e547, 0x84c84232),
-           TOBN(0xd779c216, 0x7214d5cf), TOBN(0x617969cd, 0x029a3aca)},
-          {TOBN(0xd17668cd, 0x8a7017a0), TOBN(0x77b4d19a, 0xbe9b7ee8),
-           TOBN(0x58fd0e93, 0x9c161776), TOBN(0xa8c4f4ef, 0xd5968a72)}},
-         {{TOBN(0x296071cc, 0x67b3de77), TOBN(0xae3c0b8e, 0x634f7905),
-           TOBN(0x67e440c2, 0x8a7100c9), TOBN(0xbb8c3c1b, 0xeb4b9b42)},
-          {TOBN(0x6d71e8ea, 0xc51b3583), TOBN(0x7591f5af, 0x9525e642),
-           TOBN(0xf73a2f7b, 0x13f509f3), TOBN(0x618487aa, 0x5619ac9b)}},
-         {{TOBN(0x3a72e5f7, 0x9d61718a), TOBN(0x00413bcc, 0x7592d28c),
-           TOBN(0x7d9b11d3, 0x963c35cf), TOBN(0x77623bcf, 0xb90a46ed)},
-          {TOBN(0xdeef273b, 0xdcdd2a50), TOBN(0x4a741f9b, 0x0601846e),
-           TOBN(0x33b89e51, 0x0ec6e929), TOBN(0xcb02319f, 0x8b7f22cd)}},
-         {{TOBN(0xbbe1500d, 0x084bae24), TOBN(0x2f0ae8d7, 0x343d2693),
-           TOBN(0xacffb5f2, 0x7cdef811), TOBN(0xaa0c030a, 0x263fb94f)},
-          {TOBN(0x6eef0d61, 0xa0f442de), TOBN(0xf92e1817, 0x27b139d3),
-           TOBN(0x1ae6deb7, 0x0ad8bc28), TOBN(0xa89e38dc, 0xc0514130)}},
-         {{TOBN(0x81eeb865, 0xd2fdca23), TOBN(0x5a15ee08, 0xcc8ef895),
-           TOBN(0x768fa10a, 0x01905614), TOBN(0xeff5b8ef, 0x880ee19b)},
-          {TOBN(0xf0c0cabb, 0xcb1c8a0e), TOBN(0x2e1ee9cd, 0xb8c838f9),
-           TOBN(0x0587d8b8, 0x8a4a14c0), TOBN(0xf6f27896, 0x2ff698e5)}},
-         {{TOBN(0xed38ef1c, 0x89ee6256), TOBN(0xf44ee1fe, 0x6b353b45),
-           TOBN(0x9115c0c7, 0x70e903b3), TOBN(0xc78ec0a1, 0x818f31df)},
-          {TOBN(0x6c003324, 0xb7dccbc6), TOBN(0xd96dd1f3, 0x163bbc25),
-           TOBN(0x33aa82dd, 0x5cedd805), TOBN(0x123aae4f, 0x7f7eb2f1)}},
-         {{TOBN(0x1723fcf5, 0xa26262cd), TOBN(0x1f7f4d5d, 0x0060ebd5),
-           TOBN(0xf19c5c01, 0xb2eaa3af), TOBN(0x2ccb9b14, 0x9790accf)},
-          {TOBN(0x1f9c1cad, 0x52324aa6), TOBN(0x63200526, 0x7247df54),
-           TOBN(0x5732fe42, 0xbac96f82), TOBN(0x52fe771f, 0x01a1c384)}},
-         {{TOBN(0x546ca13d, 0xb1001684), TOBN(0xb56b4eee, 0xa1709f75),
-           TOBN(0x266545a9, 0xd5db8672), TOBN(0xed971c90, 0x1e8f3cfb)},
-          {TOBN(0x4e7d8691, 0xe3a07b29), TOBN(0x7570d9ec, 0xe4b696b9),
-           TOBN(0xdc5fa067, 0x7bc7e9ae), TOBN(0x68b44caf, 0xc82c4844)}},
-         {{TOBN(0x519d34b3, 0xbf44da80), TOBN(0x283834f9, 0x5ab32e66),
-           TOBN(0x6e608797, 0x6278a000), TOBN(0x1e62960e, 0x627312f6)},
-          {TOBN(0x9b87b27b, 0xe6901c55), TOBN(0x80e78538, 0x24fdbc1f),
-           TOBN(0xbbbc0951, 0x2facc27d), TOBN(0x06394239, 0xac143b5a)}},
-         {{TOBN(0x35bb4a40, 0x376c1944), TOBN(0x7cb62694, 0x63da1511),
-           TOBN(0xafd29161, 0xb7148a3b), TOBN(0xa6f9d9ed, 0x4e2ea2ee)},
-          {TOBN(0x15dc2ca2, 0x880dd212), TOBN(0x903c3813, 0xa61139a9),
-           TOBN(0x2aa7b46d, 0x6c0f8785), TOBN(0x36ce2871, 0x901c60ff)}},
-         {{TOBN(0xc683b028, 0xe10d9c12), TOBN(0x7573baa2, 0x032f33d3),
-           TOBN(0x87a9b1f6, 0x67a31b58), TOBN(0xfd3ed11a, 0xf4ffae12)},
-          {TOBN(0x83dcaa9a, 0x0cb2748e), TOBN(0x8239f018, 0x5d6fdf16),
-           TOBN(0xba67b49c, 0x72753941), TOBN(0x2beec455, 0xc321cb36)}},
-         {{TOBN(0x88015606, 0x3f8b84ce), TOBN(0x76417083, 0x8d38c86f),
-           TOBN(0x054f1ca7, 0x598953dd), TOBN(0xc939e110, 0x4e8e7429)},
-          {TOBN(0x9b1ac2b3, 0x5a914f2f), TOBN(0x39e35ed3, 0xe74b8f9c),
-           TOBN(0xd0debdb2, 0x781b2fb0), TOBN(0x1585638f, 0x2d997ba2)}},
-         {{TOBN(0x9c4b646e, 0x9e2fce99), TOBN(0x68a21081, 0x1e80857f),
-           TOBN(0x06d54e44, 0x3643b52a), TOBN(0xde8d6d63, 0x0d8eb843)},
-          {TOBN(0x70321563, 0x42146a0a), TOBN(0x8ba826f2, 0x5eaa3622),
-           TOBN(0x227a58bd, 0x86138787), TOBN(0x43b6c03c, 0x10281d37)}},
-         {{TOBN(0x6326afbb, 0xb54dde39), TOBN(0x744e5e8a, 0xdb6f2d5f),
-           TOBN(0x48b2a99a, 0xcff158e1), TOBN(0xa93c8fa0, 0xef87918f)},
-          {TOBN(0x2182f956, 0xde058c5c), TOBN(0x216235d2, 0x936f9e7a),
-           TOBN(0xace0c0db, 0xd2e31e67), TOBN(0xc96449bf, 0xf23ac3e7)}},
-         {{TOBN(0x7e9a2874, 0x170693bd), TOBN(0xa28e14fd, 0xa45e6335),
-           TOBN(0x5757f6b3, 0x56427344), TOBN(0x822e4556, 0xacf8edf9)},
-          {TOBN(0x2b7a6ee2, 0xe6a285cd), TOBN(0x5866f211, 0xa9df3af0),
-           TOBN(0x40dde2dd, 0xf845b844), TOBN(0x986c3726, 0x110e5e49)}},
-         {{TOBN(0x73680c2a, 0xf7172277), TOBN(0x57b94f0f, 0x0cccb244),
-           TOBN(0xbdff7267, 0x2d438ca7), TOBN(0xbad1ce11, 0xcf4663fd)},
-          {TOBN(0x9813ed9d, 0xd8f71cae), TOBN(0xf43272a6, 0x961fdaa6),
-           TOBN(0xbeff0119, 0xbd6d1637), TOBN(0xfebc4f91, 0x30361978)}},
-         {{TOBN(0x02b37a95, 0x2f41deff), TOBN(0x0e44a59a, 0xe63b89b7),
-           TOBN(0x673257dc, 0x143ff951), TOBN(0x19c02205, 0xd752baf4)},
-          {TOBN(0x46c23069, 0xc4b7d692), TOBN(0x2e6392c3, 0xfd1502ac),
-           TOBN(0x6057b1a2, 0x1b220846), TOBN(0xe51ff946, 0x0c1b5b63)}}},
-        {{{TOBN(0x6e85cb51, 0x566c5c43), TOBN(0xcff9c919, 0x3597f046),
-           TOBN(0x9354e90c, 0x4994d94a), TOBN(0xe0a39332, 0x2147927d)},
-          {TOBN(0x8427fac1, 0x0dc1eb2b), TOBN(0x88cfd8c2, 0x2ff319fa),
-           TOBN(0xe2d4e684, 0x01965274), TOBN(0xfa2e067d, 0x67aaa746)}},
-         {{TOBN(0xb6d92a7f, 0x3e5f9f11), TOBN(0x9afe153a, 0xd6cb3b8e),
-           TOBN(0x4d1a6dd7, 0xddf800bd), TOBN(0xf6c13cc0, 0xcaf17e19)},
-          {TOBN(0x15f6c58e, 0x325fc3ee), TOBN(0x71095400, 0xa31dc3b2),
-           TOBN(0x168e7c07, 0xafa3d3e7), TOBN(0x3f8417a1, 0x94c7ae2d)}},
-         {{TOBN(0xec234772, 0x813b230d), TOBN(0x634d0f5f, 0x17344427),
-           TOBN(0x11548ab1, 0xd77fc56a), TOBN(0x7fab1750, 0xce06af77)},
-          {TOBN(0xb62c10a7, 0x4f7c4f83), TOBN(0xa7d2edc4, 0x220a67d9),
-           TOBN(0x1c404170, 0x921209a0), TOBN(0x0b9815a0, 0xface59f0)}},
-         {{TOBN(0x2842589b, 0x319540c3), TOBN(0x18490f59, 0xa283d6f8),
-           TOBN(0xa2731f84, 0xdaae9fcb), TOBN(0x3db6d960, 0xc3683ba0)},
-          {TOBN(0xc85c63bb, 0x14611069), TOBN(0xb19436af, 0x0788bf05),
-           TOBN(0x905459df, 0x347460d2), TOBN(0x73f6e094, 0xe11a7db1)}},
-         {{TOBN(0xdc7f938e, 0xb6357f37), TOBN(0xc5d00f79, 0x2bd8aa62),
-           TOBN(0xc878dcb9, 0x2ca979fc), TOBN(0x37e83ed9, 0xeb023a99)},
-          {TOBN(0x6b23e273, 0x1560bf3d), TOBN(0x1086e459, 0x1d0fae61),
-           TOBN(0x78248316, 0x9a9414bd), TOBN(0x1b956bc0, 0xf0ea9ea1)}},
-         {{TOBN(0x7b85bb91, 0xc31b9c38), TOBN(0x0c5aa90b, 0x48ef57b5),
-           TOBN(0xdedeb169, 0xaf3bab6f), TOBN(0xe610ad73, 0x2d373685)},
-          {TOBN(0xf13870df, 0x02ba8e15), TOBN(0x0337edb6, 0x8ca7f771),
-           TOBN(0xe4acf747, 0xb62c036c), TOBN(0xd921d576, 0xb6b94e81)}},
-         {{TOBN(0xdbc86439, 0x2c422f7a), TOBN(0xfb635362, 0xed348898),
-           TOBN(0x83084668, 0xc45bfcd1), TOBN(0xc357c9e3, 0x2b315e11)},
-          {TOBN(0xb173b540, 0x5b2e5b8c), TOBN(0x7e946931, 0xe102b9a4),
-           TOBN(0x17c890eb, 0x7b0fb199), TOBN(0xec225a83, 0xd61b662b)}},
-         {{TOBN(0xf306a3c8, 0xee3c76cb), TOBN(0x3cf11623, 0xd32a1f6e),
-           TOBN(0xe6d5ab64, 0x6863e956), TOBN(0x3b8a4cbe, 0x5c005c26)},
-          {TOBN(0xdcd529a5, 0x9ce6bb27), TOBN(0xc4afaa52, 0x04d4b16f),
-           TOBN(0xb0624a26, 0x7923798d), TOBN(0x85e56df6, 0x6b307fab)}},
-         {{TOBN(0x0281893c, 0x2bf29698), TOBN(0x91fc19a4, 0xd7ce7603),
-           TOBN(0x75a5dca3, 0xad9a558f), TOBN(0x40ceb3fa, 0x4d50bf77)},
-          {TOBN(0x1baf6060, 0xbc9ba369), TOBN(0x927e1037, 0x597888c2),
-           TOBN(0xd936bf19, 0x86a34c07), TOBN(0xd4cf10c1, 0xc34ae980)}},
-         {{TOBN(0x3a3e5334, 0x859dd614), TOBN(0x9c475b5b, 0x18d0c8ee),
-           TOBN(0x63080d1f, 0x07cd51d5), TOBN(0xc9c0d0a6, 0xb88b4326)},
-          {TOBN(0x1ac98691, 0xc234296f), TOBN(0x2a0a83a4, 0x94887fb6),
-           TOBN(0x56511427, 0x0cea9cf2), TOBN(0x5230a6e8, 0xa24802f5)}},
-         {{TOBN(0xf7a2bf0f, 0x72e3d5c1), TOBN(0x37717446, 0x4f21439e),
-           TOBN(0xfedcbf25, 0x9ce30334), TOBN(0xe0030a78, 0x7ce202f9)},
-          {TOBN(0x6f2d9ebf, 0x1202e9ca), TOBN(0xe79dde6c, 0x75e6e591),
-           TOBN(0xf52072af, 0xf1dac4f8), TOBN(0x6c8d087e, 0xbb9b404d)}},
-         {{TOBN(0xad0fc73d, 0xbce913af), TOBN(0x909e587b, 0x458a07cb),
-           TOBN(0x1300da84, 0xd4f00c8a), TOBN(0x425cd048, 0xb54466ac)},
-          {TOBN(0xb59cb9be, 0x90e9d8bf), TOBN(0x991616db, 0x3e431b0e),
-           TOBN(0xd3aa117a, 0x531aecff), TOBN(0x91af92d3, 0x59f4dc3b)}},
-         {{TOBN(0x9b1ec292, 0xe93fda29), TOBN(0x76bb6c17, 0xe97d91bc),
-           TOBN(0x7509d95f, 0xaface1e6), TOBN(0x3653fe47, 0xbe855ae3)},
-          {TOBN(0x73180b28, 0x0f680e75), TOBN(0x75eefd1b, 0xeeb6c26c),
-           TOBN(0xa4cdf29f, 0xb66d4236), TOBN(0x2d70a997, 0x6b5821d8)}},
-         {{TOBN(0x7a3ee207, 0x20445c36), TOBN(0x71d1ac82, 0x59877174),
-           TOBN(0x0fc539f7, 0x949f73e9), TOBN(0xd05cf3d7, 0x982e3081)},
-          {TOBN(0x8758e20b, 0x7b1c7129), TOBN(0xffadcc20, 0x569e61f2),
-           TOBN(0xb05d3a2f, 0x59544c2d), TOBN(0xbe16f5c1, 0x9fff5e53)}},
-         {{TOBN(0x73cf65b8, 0xaad58135), TOBN(0x622c2119, 0x037aa5be),
-           TOBN(0x79373b3f, 0x646fd6a0), TOBN(0x0e029db5, 0x0d3978cf)},
-          {TOBN(0x8bdfc437, 0x94fba037), TOBN(0xaefbd687, 0x620797a6),
-           TOBN(0x3fa5382b, 0xbd30d38e), TOBN(0x7627cfbf, 0x585d7464)}},
-         {{TOBN(0xb2330fef, 0x4e4ca463), TOBN(0xbcef7287, 0x3566cc63),
-           TOBN(0xd161d2ca, 0xcf780900), TOBN(0x135dc539, 0x5b54827d)},
-          {TOBN(0x638f052e, 0x27bf1bc6), TOBN(0x10a224f0, 0x07dfa06c),
-           TOBN(0xe973586d, 0x6d3321da), TOBN(0x8b0c5738, 0x26152c8f)}},
-         {{TOBN(0x07ef4f2a, 0x34606074), TOBN(0x80fe7fe8, 0xa0f7047a),
-           TOBN(0x3d1a8152, 0xe1a0e306), TOBN(0x32cf43d8, 0x88da5222)},
-          {TOBN(0xbf89a95f, 0x5f02ffe6), TOBN(0x3d9eb9a4, 0x806ad3ea),
-           TOBN(0x012c17bb, 0x79c8e55e), TOBN(0xfdcd1a74, 0x99c81dac)}},
-         {{TOBN(0x7043178b, 0xb9556098), TOBN(0x4090a1df, 0x801c3886),
-           TOBN(0x759800ff, 0x9b67b912), TOBN(0x3e5c0304, 0x232620c8)},
-          {TOBN(0x4b9d3c4b, 0x70dceeca), TOBN(0xbb2d3c15, 0x181f648e),
-           TOBN(0xf981d837, 0x6e33345c), TOBN(0xb626289b, 0x0cf2297a)}},
-         {{TOBN(0x766ac659, 0x8baebdcf), TOBN(0x1a28ae09, 0x75df01e5),
-           TOBN(0xb71283da, 0x375876d8), TOBN(0x4865a96d, 0x607b9800)},
-          {TOBN(0x25dd1bcd, 0x237936b2), TOBN(0x332f4f4b, 0x60417494),
-           TOBN(0xd0923d68, 0x370a2147), TOBN(0x497f5dfb, 0xdc842203)}},
-         {{TOBN(0x9dc74cbd, 0x32be5e0f), TOBN(0x7475bcb7, 0x17a01375),
-           TOBN(0x438477c9, 0x50d872b1), TOBN(0xcec67879, 0xffe1d63d)},
-          {TOBN(0x9b006014, 0xd8578c70), TOBN(0xc9ad99a8, 0x78bb6b8b),
-           TOBN(0x6799008e, 0x11fb3806), TOBN(0xcfe81435, 0xcd44cab3)}},
-         {{TOBN(0xa2ee1582, 0x2f4fb344), TOBN(0xb8823450, 0x483fa6eb),
-           TOBN(0x622d323d, 0x652c7749), TOBN(0xd8474a98, 0xbeb0a15b)},
-          {TOBN(0xe43c154d, 0x5d1c00d0), TOBN(0x7fd581d9, 0x0e3e7aac),
-           TOBN(0x2b44c619, 0x2525ddf8), TOBN(0x67a033eb, 0xb8ae9739)}},
-         {{TOBN(0x113ffec1, 0x9ef2d2e4), TOBN(0x1bf6767e, 0xd5a0ea7f),
-           TOBN(0x57fff75e, 0x03714c0a), TOBN(0xa23c422e, 0x0a23e9ee)},
-          {TOBN(0xdd5f6b2d, 0x540f83af), TOBN(0xc2c2c27e, 0x55ea46a7),
-           TOBN(0xeb6b4246, 0x672a1208), TOBN(0xd13599f7, 0xae634f7a)}},
-         {{TOBN(0xcf914b5c, 0xd7b32c6e), TOBN(0x61a5a640, 0xeaf61814),
-           TOBN(0x8dc3df8b, 0x208a1bbb), TOBN(0xef627fd6, 0xb6d79aa5)},
-          {TOBN(0x44232ffc, 0xc4c86bc8), TOBN(0xe6f9231b, 0x061539fe),
-           TOBN(0x1d04f25a, 0x958b9533), TOBN(0x180cf934, 0x49e8c885)}},
-         {{TOBN(0x89689595, 0x9884aaf7), TOBN(0xb1959be3, 0x07b348a6),
-           TOBN(0x96250e57, 0x3c147c87), TOBN(0xae0efb3a, 0xdd0c61f8)},
-          {TOBN(0xed00745e, 0xca8c325e), TOBN(0x3c911696, 0xecff3f70),
-           TOBN(0x73acbc65, 0x319ad41d), TOBN(0x7b01a020, 0xf0b1c7ef)}},
-         {{TOBN(0xea32b293, 0x63a1483f), TOBN(0x89eabe71, 0x7a248f96),
-           TOBN(0x9c6231d3, 0x343157e5), TOBN(0x93a375e5, 0xdf3c546d)},
-          {TOBN(0xe76e9343, 0x6a2afe69), TOBN(0xc4f89100, 0xe166c88e),
-           TOBN(0x248efd0d, 0x4f872093), TOBN(0xae0eb3ea, 0x8fe0ea61)}},
-         {{TOBN(0xaf89790d, 0x9d79046e), TOBN(0x4d650f2d, 0x6cee0976),
-           TOBN(0xa3935d9a, 0x43071eca), TOBN(0x66fcd2c9, 0x283b0bfe)},
-          {TOBN(0x0e665eb5, 0x696605f1), TOBN(0xe77e5d07, 0xa54cd38d),
-           TOBN(0x90ee050a, 0x43d950cf), TOBN(0x86ddebda, 0xd32e69b5)}},
-         {{TOBN(0x6ad94a3d, 0xfddf7415), TOBN(0xf7fa1309, 0x3f6e8d5a),
-           TOBN(0xc4831d1d, 0xe9957f75), TOBN(0x7de28501, 0xd5817447)},
-          {TOBN(0x6f1d7078, 0x9e2aeb6b), TOBN(0xba2b9ff4, 0xf67a53c2),
-           TOBN(0x36963767, 0xdf9defc3), TOBN(0x479deed3, 0x0d38022c)}},
-         {{TOBN(0xd2edb89b, 0x3a8631e8), TOBN(0x8de855de, 0x7a213746),
-           TOBN(0xb2056cb7, 0xb00c5f11), TOBN(0xdeaefbd0, 0x2c9b85e4)},
-          {TOBN(0x03f39a8d, 0xd150892d), TOBN(0x37b84686, 0x218b7985),
-           TOBN(0x36296dd8, 0xb7375f1a), TOBN(0x472cd4b1, 0xb78e898e)}},
-         {{TOBN(0x15dff651, 0xe9f05de9), TOBN(0xd4045069, 0x2ce98ba9),
-           TOBN(0x8466a7ae, 0x9b38024c), TOBN(0xb910e700, 0xe5a6b5ef)},
-          {TOBN(0xae1c56ea, 0xb3aa8f0d), TOBN(0xbab2a507, 0x7eee74a6),
-           TOBN(0x0dca11e2, 0x4b4c4620), TOBN(0xfd896e2e, 0x4c47d1f4)}},
-         {{TOBN(0xeb45ae53, 0x308fbd93), TOBN(0x46cd5a2e, 0x02c36fda),
-           TOBN(0x6a3d4e90, 0xbaa48385), TOBN(0xdd55e62e, 0x9dbe9960)},
-          {TOBN(0xa1406aa0, 0x2a81ede7), TOBN(0x6860dd14, 0xf9274ea7),
-           TOBN(0xcfdcb0c2, 0x80414f86), TOBN(0xff410b10, 0x22f94327)}},
-         {{TOBN(0x5a33cc38, 0x49ad467b), TOBN(0xefb48b6c, 0x0a7335f1),
-           TOBN(0x14fb54a4, 0xb153a360), TOBN(0x604aa9d2, 0xb52469cc)},
-          {TOBN(0x5e9dc486, 0x754e48e9), TOBN(0x693cb455, 0x37471e8e),
-           TOBN(0xfb2fd7cd, 0x8d3b37b6), TOBN(0x63345e16, 0xcf09ff07)}},
-         {{TOBN(0x9910ba6b, 0x23a5d896), TOBN(0x1fe19e35, 0x7fe4364e),
-           TOBN(0x6e1da8c3, 0x9a33c677), TOBN(0x15b4488b, 0x29fd9fd0)},
-          {TOBN(0x1f439254, 0x1a1f22bf), TOBN(0x920a8a70, 0xab8163e8),
-           TOBN(0x3fd1b249, 0x07e5658e), TOBN(0xf2c4f79c, 0xb6ec839b)}},
-         {{TOBN(0x1abbc3d0, 0x4aa38d1b), TOBN(0x3b0db35c, 0xb5d9510e),
-           TOBN(0x1754ac78, 0x3e60dec0), TOBN(0x53272fd7, 0xea099b33)},
-          {TOBN(0x5fb0494f, 0x07a8e107), TOBN(0x4a89e137, 0x6a8191fa),
-           TOBN(0xa113b7f6, 0x3c4ad544), TOBN(0x88a2e909, 0x6cb9897b)}},
-         {{TOBN(0x17d55de3, 0xb44a3f84), TOBN(0xacb2f344, 0x17c6c690),
-           TOBN(0x32088168, 0x10232390), TOBN(0xf2e8a61f, 0x6c733bf7)},
-          {TOBN(0xa774aab6, 0x9c2d7652), TOBN(0xfb5307e3, 0xed95c5bc),
-           TOBN(0xa05c73c2, 0x4981f110), TOBN(0x1baae31c, 0xa39458c9)}},
-         {{TOBN(0x1def185b, 0xcbea62e7), TOBN(0xe8ac9eae, 0xeaf63059),
-           TOBN(0x098a8cfd, 0x9921851c), TOBN(0xd959c3f1, 0x3abe2f5b)},
-          {TOBN(0xa4f19525, 0x20e40ae5), TOBN(0x320789e3, 0x07a24aa1),
-           TOBN(0x259e6927, 0x7392b2bc), TOBN(0x58f6c667, 0x1918668b)}},
-         {{TOBN(0xce1db2bb, 0xc55d2d8b), TOBN(0x41d58bb7, 0xf4f6ca56),
-           TOBN(0x7650b680, 0x8f877614), TOBN(0x905e16ba, 0xf4c349ed)},
-          {TOBN(0xed415140, 0xf661acac), TOBN(0x3b8784f0, 0xcb2270af),
-           TOBN(0x3bc280ac, 0x8a402cba), TOBN(0xd53f7146, 0x0937921a)}},
-         {{TOBN(0xc03c8ee5, 0xe5681e83), TOBN(0x62126105, 0xf6ac9e4a),
-           TOBN(0x9503a53f, 0x936b1a38), TOBN(0x3d45e2d4, 0x782fecbd)},
-          {TOBN(0x69a5c439, 0x76e8ae98), TOBN(0xb53b2eeb, 0xbfb4b00e),
-           TOBN(0xf1674712, 0x72386c89), TOBN(0x30ca34a2, 0x4268bce4)}},
-         {{TOBN(0x7f1ed86c, 0x78341730), TOBN(0x8ef5beb8, 0xb525e248),
-           TOBN(0xbbc489fd, 0xb74fbf38), TOBN(0x38a92a0e, 0x91a0b382)},
-          {TOBN(0x7a77ba3f, 0x22433ccf), TOBN(0xde8362d6, 0xa29f05a9),
-           TOBN(0x7f6a30ea, 0x61189afc), TOBN(0x693b5505, 0x59ef114f)}},
-         {{TOBN(0x50266bc0, 0xcd1797a1), TOBN(0xea17b47e, 0xf4b7af2d),
-           TOBN(0xd6c4025c, 0x3df9483e), TOBN(0x8cbb9d9f, 0xa37b18c9)},
-          {TOBN(0x91cbfd9c, 0x4d8424cf), TOBN(0xdb7048f1, 0xab1c3506),
-           TOBN(0x9eaf641f, 0x028206a3), TOBN(0xf986f3f9, 0x25bdf6ce)}},
-         {{TOBN(0x262143b5, 0x224c08dc), TOBN(0x2bbb09b4, 0x81b50c91),
-           TOBN(0xc16ed709, 0xaca8c84f), TOBN(0xa6210d9d, 0xb2850ca8)},
-          {TOBN(0x6d8df67a, 0x09cb54d6), TOBN(0x91eef6e0, 0x500919a4),
-           TOBN(0x90f61381, 0x0f132857), TOBN(0x9acede47, 0xf8d5028b)}},
-         {{TOBN(0x844d1b71, 0x90b771c3), TOBN(0x563b71e4, 0xba6426be),
-           TOBN(0x2efa2e83, 0xbdb802ff), TOBN(0x3410cbab, 0xab5b4a41)},
-          {TOBN(0x555b2d26, 0x30da84dd), TOBN(0xd0711ae9, 0xee1cc29a),
-           TOBN(0xcf3e8c60, 0x2f547792), TOBN(0x03d7d5de, 0xdc678b35)}},
-         {{TOBN(0x071a2fa8, 0xced806b8), TOBN(0x222e6134, 0x697f1478),
-           TOBN(0xdc16fd5d, 0xabfcdbbf), TOBN(0x44912ebf, 0x121b53b8)},
-          {TOBN(0xac943674, 0x2496c27c), TOBN(0x8ea3176c, 0x1ffc26b0),
-           TOBN(0xb6e224ac, 0x13debf2c), TOBN(0x524cc235, 0xf372a832)}},
-         {{TOBN(0xd706e1d8, 0x9f6f1b18), TOBN(0x2552f005, 0x44cce35b),
-           TOBN(0x8c8326c2, 0xa88e31fc), TOBN(0xb5468b2c, 0xf9552047)},
-          {TOBN(0xce683e88, 0x3ff90f2b), TOBN(0x77947bdf, 0x2f0a5423),
-           TOBN(0xd0a1b28b, 0xed56e328), TOBN(0xaee35253, 0xc20134ac)}},
-         {{TOBN(0x7e98367d, 0x3567962f), TOBN(0x379ed61f, 0x8188bffb),
-           TOBN(0x73bba348, 0xfaf130a1), TOBN(0x6c1f75e1, 0x904ed734)},
-          {TOBN(0x18956642, 0x3b4a79fc), TOBN(0xf20bc83d, 0x54ef4493),
-           TOBN(0x836d425d, 0x9111eca1), TOBN(0xe5b5c318, 0x009a8dcf)}},
-         {{TOBN(0x3360b25d, 0x13221bc5), TOBN(0x707baad2, 0x6b3eeaf7),
-           TOBN(0xd7279ed8, 0x743a95a1), TOBN(0x7450a875, 0x969e809f)},
-          {TOBN(0x32b6bd53, 0xe5d0338f), TOBN(0x1e77f7af, 0x2b883bbc),
-           TOBN(0x90da12cc, 0x1063ecd0), TOBN(0xe2697b58, 0xc315be47)}},
-         {{TOBN(0x2771a5bd, 0xda85d534), TOBN(0x53e78c1f, 0xff980eea),
-           TOBN(0xadf1cf84, 0x900385e7), TOBN(0x7d3b14f6, 0xc9387b62)},
-          {TOBN(0x170e74b0, 0xcb8f2bd2), TOBN(0x2d50b486, 0x827fa993),
-           TOBN(0xcdbe8c9a, 0xf6f32bab), TOBN(0x55e906b0, 0xc3b93ab8)}},
-         {{TOBN(0x747f22fc, 0x8fe280d1), TOBN(0xcd8e0de5, 0xb2e114ab),
-           TOBN(0x5ab7dbeb, 0xe10b68b0), TOBN(0x9dc63a9c, 0xa480d4b2)},
-          {TOBN(0x78d4bc3b, 0x4be1495f), TOBN(0x25eb3db8, 0x9359122d),
-           TOBN(0x3f8ac05b, 0x0809cbdc), TOBN(0xbf4187bb, 0xd37c702f)}},
-         {{TOBN(0x84cea069, 0x1416a6a5), TOBN(0x8f860c79, 0x43ef881c),
-           TOBN(0x41311f8a, 0x38038a5d), TOBN(0xe78c2ec0, 0xfc612067)},
-          {TOBN(0x494d2e81, 0x5ad73581), TOBN(0xb4cc9e00, 0x59604097),
-           TOBN(0xff558aec, 0xf3612cba), TOBN(0x35beef7a, 0x9e36c39e)}},
-         {{TOBN(0x1845c7cf, 0xdbcf41b9), TOBN(0x5703662a, 0xaea997c0),
-           TOBN(0x8b925afe, 0xe402f6d8), TOBN(0xd0a1b1ae, 0x4dd72162)},
-          {TOBN(0x9f47b375, 0x03c41c4b), TOBN(0xa023829b, 0x0391d042),
-           TOBN(0x5f5045c3, 0x503b8b0a), TOBN(0x123c2688, 0x98c010e5)}},
-         {{TOBN(0x324ec0cc, 0x36ba06ee), TOBN(0xface3115, 0x3dd2cc0c),
-           TOBN(0xb364f3be, 0xf333e91f), TOBN(0xef8aff73, 0x28e832b0)},
-          {TOBN(0x1e9bad04, 0x2d05841b), TOBN(0x42f0e3df, 0x356a21e2),
-           TOBN(0xa3270bcb, 0x4add627e), TOBN(0xb09a8158, 0xd322e711)}},
-         {{TOBN(0x86e326a1, 0x0fee104a), TOBN(0xad7788f8, 0x3703f65d),
-           TOBN(0x7e765430, 0x47bc4833), TOBN(0x6cee582b, 0x2b9b893a)},
-          {TOBN(0x9cd2a167, 0xe8f55a7b), TOBN(0xefbee3c6, 0xd9e4190d),
-           TOBN(0x33ee7185, 0xd40c2e9d), TOBN(0x844cc9c5, 0xa380b548)}},
-         {{TOBN(0x323f8ecd, 0x66926e04), TOBN(0x0001e38f, 0x8110c1ba),
-           TOBN(0x8dbcac12, 0xfc6a7f07), TOBN(0xd65e1d58, 0x0cec0827)},
-          {TOBN(0xd2cd4141, 0xbe76ca2d), TOBN(0x7895cf5c, 0xe892f33a),
-           TOBN(0x956d230d, 0x367139d2), TOBN(0xa91abd3e, 0xd012c4c1)}},
-         {{TOBN(0x34fa4883, 0x87eb36bf), TOBN(0xc5f07102, 0x914b8fb4),
-           TOBN(0x90f0e579, 0xadb9c95f), TOBN(0xfe6ea8cb, 0x28888195)},
-          {TOBN(0x7b9b5065, 0xedfa9284), TOBN(0x6c510bd2, 0x2b8c8d65),
-           TOBN(0xd7b8ebef, 0xcbe8aafd), TOBN(0xedb3af98, 0x96b1da07)}},
-         {{TOBN(0x28ff779d, 0x6295d426), TOBN(0x0c4f6ac7, 0x3fa3ad7b),
-           TOBN(0xec44d054, 0x8b8e2604), TOBN(0x9b32a66d, 0x8b0050e1)},
-          {TOBN(0x1f943366, 0xf0476ce2), TOBN(0x7554d953, 0xa602c7b4),
-           TOBN(0xbe35aca6, 0x524f2809), TOBN(0xb6881229, 0xfd4edbea)}},
-         {{TOBN(0xe8cd0c8f, 0x508efb63), TOBN(0x9eb5b5c8, 0x6abcefc7),
-           TOBN(0xf5621f5f, 0xb441ab4f), TOBN(0x79e6c046, 0xb76a2b22)},
-          {TOBN(0x74a4792c, 0xe37a1f69), TOBN(0xcbd252cb, 0x03542b60),
-           TOBN(0x785f65d5, 0xb3c20bd3), TOBN(0x8dea6143, 0x4fabc60c)}},
-         {{TOBN(0x45e21446, 0xde673629), TOBN(0x57f7aa1e, 0x703c2d21),
-           TOBN(0xa0e99b7f, 0x98c868c7), TOBN(0x4e42f66d, 0x8b641676)},
-          {TOBN(0x602884dc, 0x91077896), TOBN(0xa0d690cf, 0xc2c9885b),
-           TOBN(0xfeb4da33, 0x3b9a5187), TOBN(0x5f789598, 0x153c87ee)}},
-         {{TOBN(0x2192dd47, 0x52b16dba), TOBN(0xdeefc0e6, 0x3524c1b1),
-           TOBN(0x465ea76e, 0xe4383693), TOBN(0x79401711, 0x361b8d98)},
-          {TOBN(0xa5f9ace9, 0xf21a15cb), TOBN(0x73d26163, 0xefee9aeb),
-           TOBN(0xcca844b3, 0xe677016c), TOBN(0x6c122b07, 0x57eaee06)}},
-         {{TOBN(0xb782dce7, 0x15f09690), TOBN(0x508b9b12, 0x2dfc0fc9),
-           TOBN(0x9015ab4b, 0x65d89fc6), TOBN(0x5e79dab7, 0xd6d5bb0f)},
-          {TOBN(0x64f021f0, 0x6c775aa2), TOBN(0xdf09d8cc, 0x37c7eca1),
-           TOBN(0x9a761367, 0xef2fa506), TOBN(0xed4ca476, 0x5b81eec6)}},
-         {{TOBN(0x262ede36, 0x10bbb8b5), TOBN(0x0737ce83, 0x0641ada3),
-           TOBN(0x4c94288a, 0xe9831ccc), TOBN(0x487fc1ce, 0x8065e635)},
-          {TOBN(0xb13d7ab3, 0xb8bb3659), TOBN(0xdea5df3e, 0x855e4120),
-           TOBN(0xb9a18573, 0x85eb0244), TOBN(0x1a1b8ea3, 0xa7cfe0a3)}},
-         {{TOBN(0x3b837119, 0x67b0867c), TOBN(0x8d5e0d08, 0x9d364520),
-           TOBN(0x52dccc1e, 0xd930f0e3), TOBN(0xefbbcec7, 0xbf20bbaf)},
-          {TOBN(0x99cffcab, 0x0263ad10), TOBN(0xd8199e6d, 0xfcd18f8a),
-           TOBN(0x64e2773f, 0xe9f10617), TOBN(0x0079e8e1, 0x08704848)}},
-         {{TOBN(0x1169989f, 0x8a342283), TOBN(0x8097799c, 0xa83012e6),
-           TOBN(0xece966cb, 0x8a6a9001), TOBN(0x93b3afef, 0x072ac7fc)},
-          {TOBN(0xe6893a2a, 0x2db3d5ba), TOBN(0x263dc462, 0x89bf4fdc),
-           TOBN(0x8852dfc9, 0xe0396673), TOBN(0x7ac70895, 0x3af362b6)}},
-         {{TOBN(0xbb9cce4d, 0x5c2f342b), TOBN(0xbf80907a, 0xb52d7aae),
-           TOBN(0x97f3d3cd, 0x2161bcd0), TOBN(0xb25b0834, 0x0962744d)},
-          {TOBN(0xc5b18ea5, 0x6c3a1dda), TOBN(0xfe4ec7eb, 0x06c92317),
-           TOBN(0xb787b890, 0xad1c4afe), TOBN(0xdccd9a92, 0x0ede801a)}},
-         {{TOBN(0x9ac6ddda, 0xdb58da1f), TOBN(0x22bbc12f, 0xb8cae6ee),
-           TOBN(0xc6f8bced, 0x815c4a43), TOBN(0x8105a92c, 0xf96480c7)},
-          {TOBN(0x0dc3dbf3, 0x7a859d51), TOBN(0xe3ec7ce6, 0x3041196b),
-           TOBN(0xd9f64b25, 0x0d1067c9), TOBN(0xf2321321, 0x3d1f8dd8)}},
-         {{TOBN(0x8b5c619c, 0x76497ee8), TOBN(0x5d2b0ac6, 0xc717370e),
-           TOBN(0x98204cb6, 0x4fcf68e1), TOBN(0x0bdec211, 0x62bc6792)},
-          {TOBN(0x6973ccef, 0xa63b1011), TOBN(0xf9e3fa97, 0xe0de1ac5),
-           TOBN(0x5efb693e, 0x3d0e0c8b), TOBN(0x037248e9, 0xd2d4fcb4)}}},
-        {{{TOBN(0x80802dc9, 0x1ec34f9e), TOBN(0xd8772d35, 0x33810603),
-           TOBN(0x3f06d66c, 0x530cb4f3), TOBN(0x7be5ed0d, 0xc475c129)},
-          {TOBN(0xcb9e3c19, 0x31e82b10), TOBN(0xc63d2857, 0xc9ff6b4c),
-           TOBN(0xb92118c6, 0x92a1b45e), TOBN(0x0aec4414, 0x7285bbca)}},
-         {{TOBN(0xfc189ae7, 0x1e29a3ef), TOBN(0xcbe906f0, 0x4c93302e),
-           TOBN(0xd0107914, 0xceaae10e), TOBN(0xb7a23f34, 0xb68e19f8)},
-          {TOBN(0xe9d875c2, 0xefd2119d), TOBN(0x03198c6e, 0xfcadc9c8),
-           TOBN(0x65591bf6, 0x4da17113), TOBN(0x3cf0bbf8, 0x3d443038)}},
-         {{TOBN(0xae485bb7, 0x2b724759), TOBN(0x945353e1, 0xb2d4c63a),
-           TOBN(0x82159d07, 0xde7d6f2c), TOBN(0x389caef3, 0x4ec5b109)},
-          {TOBN(0x4a8ebb53, 0xdb65ef14), TOBN(0x2dc2cb7e, 0xdd99de43),
-           TOBN(0x816fa3ed, 0x83f2405f), TOBN(0x73429bb9, 0xc14208a3)}},
-         {{TOBN(0xb618d590, 0xb01e6e27), TOBN(0x047e2ccd, 0xe180b2dc),
-           TOBN(0xd1b299b5, 0x04aea4a9), TOBN(0x412c9e1e, 0x9fa403a4)},
-          {TOBN(0x88d28a36, 0x79407552), TOBN(0x49c50136, 0xf332b8e3),
-           TOBN(0x3a1b6fcc, 0xe668de19), TOBN(0x178851bc, 0x75122b97)}},
-         {{TOBN(0xb1e13752, 0xfb85fa4c), TOBN(0xd61257ce, 0x383c8ce9),
-           TOBN(0xd43da670, 0xd2f74dae), TOBN(0xa35aa23f, 0xbf846bbb)},
-          {TOBN(0x5e74235d, 0x4421fc83), TOBN(0xf6df8ee0, 0xc363473b),
-           TOBN(0x34d7f52a, 0x3c4aa158), TOBN(0x50d05aab, 0x9bc6d22e)}},
-         {{TOBN(0x8c56e735, 0xa64785f4), TOBN(0xbc56637b, 0x5f29cd07),
-           TOBN(0x53b2bb80, 0x3ee35067), TOBN(0x50235a0f, 0xdc919270)},
-          {TOBN(0x191ab6d8, 0xf2c4aa65), TOBN(0xc3475831, 0x8396023b),
-           TOBN(0x80400ba5, 0xf0f805ba), TOBN(0x8881065b, 0x5ec0f80f)}},
-         {{TOBN(0xc370e522, 0xcc1b5e83), TOBN(0xde2d4ad1, 0x860b8bfb),
-           TOBN(0xad364df0, 0x67b256df), TOBN(0x8f12502e, 0xe0138997)},
-          {TOBN(0x503fa0dc, 0x7783920a), TOBN(0xe80014ad, 0xc0bc866a),
-           TOBN(0x3f89b744, 0xd3064ba6), TOBN(0x03511dcd, 0xcba5dba5)}},
-         {{TOBN(0x197dd46d, 0x95a7b1a2), TOBN(0x9c4e7ad6, 0x3c6341fb),
-           TOBN(0x426eca29, 0x484c2ece), TOBN(0x9211e489, 0xde7f4f8a)},
-          {TOBN(0x14997f6e, 0xc78ef1f4), TOBN(0x2b2c0910, 0x06574586),
-           TOBN(0x17286a6e, 0x1c3eede8), TOBN(0x25f92e47, 0x0f60e018)}},
-         {{TOBN(0x805c5646, 0x31890a36), TOBN(0x703ef600, 0x57feea5b),
-           TOBN(0x389f747c, 0xaf3c3030), TOBN(0xe0e5daeb, 0x54dd3739)},
-          {TOBN(0xfe24a4c3, 0xc9c9f155), TOBN(0x7e4bf176, 0xb5393962),
-           TOBN(0x37183de2, 0xaf20bf29), TOBN(0x4a1bd7b5, 0xf95a8c3b)}},
-         {{TOBN(0xa83b9699, 0x46191d3d), TOBN(0x281fc8dd, 0x7b87f257),
-           TOBN(0xb18e2c13, 0x54107588), TOBN(0x6372def7, 0x9b2bafe8)},
-          {TOBN(0xdaf4bb48, 0x0d8972ca), TOBN(0x3f2dd4b7, 0x56167a3f),
-           TOBN(0x1eace32d, 0x84310cf4), TOBN(0xe3bcefaf, 0xe42700aa)}},
-         {{TOBN(0x5fe5691e, 0xd785e73d), TOBN(0xa5db5ab6, 0x2ea60467),
-           TOBN(0x02e23d41, 0xdfc6514a), TOBN(0x35e8048e, 0xe03c3665)},
-          {TOBN(0x3f8b118f, 0x1adaa0f8), TOBN(0x28ec3b45, 0x84ce1a5a),
-           TOBN(0xe8cacc6e, 0x2c6646b8), TOBN(0x1343d185, 0xdbd0e40f)}},
-         {{TOBN(0xe5d7f844, 0xcaaa358c), TOBN(0x1a1db7e4, 0x9924182a),
-           TOBN(0xd64cd42d, 0x9c875d9a), TOBN(0xb37b515f, 0x042eeec8)},
-          {TOBN(0x4d4dd409, 0x7b165fbe), TOBN(0xfc322ed9, 0xe206eff3),
-           TOBN(0x7dee4102, 0x59b7e17e), TOBN(0x55a481c0, 0x8236ca00)}},
-         {{TOBN(0x8c885312, 0xc23fc975), TOBN(0x15715806, 0x05d6297b),
-           TOBN(0xa078868e, 0xf78edd39), TOBN(0x956b31e0, 0x03c45e52)},
-          {TOBN(0x470275d5, 0xff7b33a6), TOBN(0xc8d5dc3a, 0x0c7e673f),
-           TOBN(0x419227b4, 0x7e2f2598), TOBN(0x8b37b634, 0x4c14a975)}},
-         {{TOBN(0xd0667ed6, 0x8b11888c), TOBN(0x5e0e8c3e, 0x803e25dc),
-           TOBN(0x34e5d0dc, 0xb987a24a), TOBN(0x9f40ac3b, 0xae920323)},
-          {TOBN(0x5463de95, 0x34e0f63a), TOBN(0xa128bf92, 0x6b6328f9),
-           TOBN(0x491ccd7c, 0xda64f1b7), TOBN(0x7ef1ec27, 0xc47bde35)}},
-         {{TOBN(0xa857240f, 0xa36a2737), TOBN(0x35dc1366, 0x63621bc1),
-           TOBN(0x7a3a6453, 0xd4fb6897), TOBN(0x80f1a439, 0xc929319d)},
-          {TOBN(0xfc18274b, 0xf8cb0ba0), TOBN(0xb0b53766, 0x8078c5eb),
-           TOBN(0xfb0d4924, 0x1e01d0ef), TOBN(0x50d7c67d, 0x372ab09c)}},
-         {{TOBN(0xb4e370af, 0x3aeac968), TOBN(0xe4f7fee9, 0xc4b63266),
-           TOBN(0xb4acd4c2, 0xe3ac5664), TOBN(0xf8910bd2, 0xceb38cbf)},
-          {TOBN(0x1c3ae50c, 0xc9c0726e), TOBN(0x15309569, 0xd97b40bf),
-           TOBN(0x70884b7f, 0xfd5a5a1b), TOBN(0x3890896a, 0xef8314cd)}},
-         {{TOBN(0x58e1515c, 0xa5618c93), TOBN(0xe665432b, 0x77d942d1),
-           TOBN(0xb32181bf, 0xb6f767a8), TOBN(0x753794e8, 0x3a604110)},
-          {TOBN(0x09afeb7c, 0xe8c0dbcc), TOBN(0x31e02613, 0x598673a3),
-           TOBN(0x5d98e557, 0x7d46db00), TOBN(0xfc21fb8c, 0x9d985b28)}},
-         {{TOBN(0xc9040116, 0xb0843e0b), TOBN(0x53b1b3a8, 0x69b04531),
-           TOBN(0xdd1649f0, 0x85d7d830), TOBN(0xbb3bcc87, 0xcb7427e8)},
-          {TOBN(0x77261100, 0xc93dce83), TOBN(0x7e79da61, 0xa1922a2a),
-           TOBN(0x587a2b02, 0xf3149ce8), TOBN(0x147e1384, 0xde92ec83)}},
-         {{TOBN(0x484c83d3, 0xaf077f30), TOBN(0xea78f844, 0x0658b53a),
-           TOBN(0x912076c2, 0x027aec53), TOBN(0xf34714e3, 0x93c8177d)},
-          {TOBN(0x37ef5d15, 0xc2376c84), TOBN(0x8315b659, 0x3d1aa783),
-           TOBN(0x3a75c484, 0xef852a90), TOBN(0x0ba0c58a, 0x16086bd4)}},
-         {{TOBN(0x29688d7a, 0x529a6d48), TOBN(0x9c7f250d, 0xc2f19203),
-           TOBN(0x123042fb, 0x682e2df9), TOBN(0x2b7587e7, 0xad8121bc)},
-          {TOBN(0x30fc0233, 0xe0182a65), TOBN(0xb82ecf87, 0xe3e1128a),
-           TOBN(0x71682861, 0x93fb098f), TOBN(0x043e21ae, 0x85e9e6a7)}},
-         {{TOBN(0xab5b49d6, 0x66c834ea), TOBN(0x3be43e18, 0x47414287),
-           TOBN(0xf40fb859, 0x219a2a47), TOBN(0x0e6559e9, 0xcc58df3c)},
-          {TOBN(0xfe1dfe8e, 0x0c6615b4), TOBN(0x14abc8fd, 0x56459d70),
-           TOBN(0x7be0fa8e, 0x05de0386), TOBN(0x8e63ef68, 0xe9035c7c)}},
-         {{TOBN(0x116401b4, 0x53b31e91), TOBN(0x0cba7ad4, 0x4436b4d8),
-           TOBN(0x9151f9a0, 0x107afd66), TOBN(0xafaca8d0, 0x1f0ee4c4)},
-          {TOBN(0x75fe5c1d, 0x9ee9761c), TOBN(0x3497a16b, 0xf0c0588f),
-           TOBN(0x3ee2bebd, 0x0304804c), TOBN(0xa8fb9a60, 0xc2c990b9)}},
-         {{TOBN(0xd14d32fe, 0x39251114), TOBN(0x36bf25bc, 0xcac73366),
-           TOBN(0xc9562c66, 0xdba7495c), TOBN(0x324d301b, 0x46ad348b)},
-          {TOBN(0x9f46620c, 0xd670407e), TOBN(0x0ea8d4f1, 0xe3733a01),
-           TOBN(0xd396d532, 0xb0c324e0), TOBN(0x5b211a0e, 0x03c317cd)}},
-         {{TOBN(0x090d7d20, 0x5ffe7b37), TOBN(0x3b7f3efb, 0x1747d2da),
-           TOBN(0xa2cb525f, 0xb54fc519), TOBN(0x6e220932, 0xf66a971e)},
-          {TOBN(0xddc160df, 0xb486d440), TOBN(0x7fcfec46, 0x3fe13465),
-           TOBN(0x83da7e4e, 0x76e4c151), TOBN(0xd6fa48a1, 0xd8d302b5)}},
-         {{TOBN(0xc6304f26, 0x5872cd88), TOBN(0x806c1d3c, 0x278b90a1),
-           TOBN(0x3553e725, 0xcaf0bc1c), TOBN(0xff59e603, 0xbb9d8d5c)},
-          {TOBN(0xa4550f32, 0x7a0b85dd), TOBN(0xdec5720a, 0x93ecc217),
-           TOBN(0x0b88b741, 0x69d62213), TOBN(0x7212f245, 0x5b365955)}},
-         {{TOBN(0x20764111, 0xb5cae787), TOBN(0x13cb7f58, 0x1dfd3124),
-           TOBN(0x2dca77da, 0x1175aefb), TOBN(0xeb75466b, 0xffaae775)},
-          {TOBN(0x74d76f3b, 0xdb6cff32), TOBN(0x7440f37a, 0x61fcda9a),
-           TOBN(0x1bb3ac92, 0xb525028b), TOBN(0x20fbf8f7, 0xa1975f29)}},
-         {{TOBN(0x982692e1, 0xdf83097f), TOBN(0x28738f6c, 0x554b0800),
-           TOBN(0xdc703717, 0xa2ce2f2f), TOBN(0x7913b93c, 0x40814194)},
-          {TOBN(0x04924593, 0x1fe89636), TOBN(0x7b98443f, 0xf78834a6),
-           TOBN(0x11c6ab01, 0x5114a5a1), TOBN(0x60deb383, 0xffba5f4c)}},
-         {{TOBN(0x4caa54c6, 0x01a982e6), TOBN(0x1dd35e11, 0x3491cd26),
-           TOBN(0x973c315f, 0x7cbd6b05), TOBN(0xcab00775, 0x52494724)},
-          {TOBN(0x04659b1f, 0x6565e15a), TOBN(0xbf30f529, 0x8c8fb026),
-           TOBN(0xfc21641b, 0xa8a0de37), TOBN(0xe9c7a366, 0xfa5e5114)}},
-         {{TOBN(0xdb849ca5, 0x52f03ad8), TOBN(0xc7e8dbe9, 0x024e35c0),
-           TOBN(0xa1a2bbac, 0xcfc3c789), TOBN(0xbf733e7d, 0x9c26f262)},
-          {TOBN(0x882ffbf5, 0xb8444823), TOBN(0xb7224e88, 0x6bf8483b),
-           TOBN(0x53023b8b, 0x65bef640), TOBN(0xaabfec91, 0xd4d5f8cd)}},
-         {{TOBN(0xa40e1510, 0x079ea1bd), TOBN(0x1ad9addc, 0xd05d5d26),
-           TOBN(0xdb3f2eab, 0x13e68d4f), TOBN(0x1cff1ae2, 0x640f803f)},
-          {TOBN(0xe0e7b749, 0xd4cee117), TOBN(0x8e9f275b, 0x4036d909),
-           TOBN(0xce34e31d, 0x8f4d4c38), TOBN(0x22b37f69, 0xd75130fc)}},
-         {{TOBN(0x83e0f1fd, 0xb4014604), TOBN(0xa8ce9919, 0x89415078),
-           TOBN(0x82375b75, 0x41792efe), TOBN(0x4f59bf5c, 0x97d4515b)},
-          {TOBN(0xac4f324f, 0x923a277d), TOBN(0xd9bc9b7d, 0x650f3406),
-           TOBN(0xc6fa87d1, 0x8a39bc51), TOBN(0x82588530, 0x5ccc108f)}},
-         {{TOBN(0x5ced3c9f, 0x82e4c634), TOBN(0x8efb8314, 0x3a4464f8),
-           TOBN(0xe706381b, 0x7a1dca25), TOBN(0x6cd15a3c, 0x5a2a412b)},
-          {TOBN(0x9347a8fd, 0xbfcd8fb5), TOBN(0x31db2eef, 0x6e54cd22),
-           TOBN(0xc4aeb11e, 0xf8d8932f), TOBN(0x11e7c1ed, 0x344411af)}},
-         {{TOBN(0x2653050c, 0xdc9a151e), TOBN(0x9edbfc08, 0x3bb0a859),
-           TOBN(0x926c81c7, 0xfd5691e7), TOBN(0x9c1b2342, 0x6f39019a)},
-          {TOBN(0x64a81c8b, 0x7f8474b9), TOBN(0x90657c07, 0x01761819),
-           TOBN(0x390b3331, 0x55e0375a), TOBN(0xc676c626, 0xb6ebc47d)}},
-         {{TOBN(0x51623247, 0xb7d6dee8), TOBN(0x0948d927, 0x79659313),
-           TOBN(0x99700161, 0xe9ab35ed), TOBN(0x06cc32b4, 0x8ddde408)},
-          {TOBN(0x6f2fd664, 0x061ef338), TOBN(0x1606fa02, 0xc202e9ed),
-           TOBN(0x55388bc1, 0x929ba99b), TOBN(0xc4428c5e, 0x1e81df69)}},
-         {{TOBN(0xce2028ae, 0xf91b0b2a), TOBN(0xce870a23, 0xf03dfd3f),
-           TOBN(0x66ec2c87, 0x0affe8ed), TOBN(0xb205fb46, 0x284d0c00)},
-          {TOBN(0xbf5dffe7, 0x44cefa48), TOBN(0xb6fc37a8, 0xa19876d7),
-           TOBN(0xbecfa84c, 0x08b72863), TOBN(0xd7205ff5, 0x2576374f)}},
-         {{TOBN(0x80330d32, 0x8887de41), TOBN(0x5de0df0c, 0x869ea534),
-           TOBN(0x13f42753, 0x3c56ea17), TOBN(0xeb1f6069, 0x452b1a78)},
-          {TOBN(0x50474396, 0xe30ea15c), TOBN(0x575816a1, 0xc1494125),
-           TOBN(0xbe1ce55b, 0xfe6bb38f), TOBN(0xb901a948, 0x96ae30f7)}},
-         {{TOBN(0xe5af0f08, 0xd8fc3548), TOBN(0x5010b5d0, 0xd73bfd08),
-           TOBN(0x993d2880, 0x53fe655a), TOBN(0x99f2630b, 0x1c1309fd)},
-          {TOBN(0xd8677baf, 0xb4e3b76f), TOBN(0x14e51ddc, 0xb840784b),
-           TOBN(0x326c750c, 0xbf0092ce), TOBN(0xc83d306b, 0xf528320f)}},
-         {{TOBN(0xc4456715, 0x77d4715c), TOBN(0xd30019f9, 0x6b703235),
-           TOBN(0x207ccb2e, 0xd669e986), TOBN(0x57c824af, 0xf6dbfc28)},
-          {TOBN(0xf0eb532f, 0xd8f92a23), TOBN(0x4a557fd4, 0x9bb98fd2),
-           TOBN(0xa57acea7, 0xc1e6199a), TOBN(0x0c663820, 0x8b94b1ed)}},
-         {{TOBN(0x9b42be8f, 0xf83a9266), TOBN(0xc7741c97, 0x0101bd45),
-           TOBN(0x95770c11, 0x07bd9ceb), TOBN(0x1f50250a, 0x8b2e0744)},
-          {TOBN(0xf762eec8, 0x1477b654), TOBN(0xc65b900e, 0x15efe59a),
-           TOBN(0x88c96148, 0x9546a897), TOBN(0x7e8025b3, 0xc30b4d7c)}},
-         {{TOBN(0xae4065ef, 0x12045cf9), TOBN(0x6fcb2caf, 0x9ccce8bd),
-           TOBN(0x1fa0ba4e, 0xf2cf6525), TOBN(0xf683125d, 0xcb72c312)},
-          {TOBN(0xa01da4ea, 0xe312410e), TOBN(0x67e28677, 0x6cd8e830),
-           TOBN(0xabd95752, 0x98fb3f07), TOBN(0x05f11e11, 0xeef649a5)}},
-         {{TOBN(0xba47faef, 0x9d3472c2), TOBN(0x3adff697, 0xc77d1345),
-           TOBN(0x4761fa04, 0xdd15afee), TOBN(0x64f1f61a, 0xb9e69462)},
-          {TOBN(0xfa691fab, 0x9bfb9093), TOBN(0x3df8ae8f, 0xa1133dfe),
-           TOBN(0xcd5f8967, 0x58cc710d), TOBN(0xfbb88d50, 0x16c7fe79)}},
-         {{TOBN(0x8e011b4c, 0xe88c50d1), TOBN(0x7532e807, 0xa8771c4f),
-           TOBN(0x64c78a48, 0xe2278ee4), TOBN(0x0b283e83, 0x3845072a)},
-          {TOBN(0x98a6f291, 0x49e69274), TOBN(0xb96e9668, 0x1868b21c),
-           TOBN(0x38f0adc2, 0xb1a8908e), TOBN(0x90afcff7, 0x1feb829d)}},
-         {{TOBN(0x9915a383, 0x210b0856), TOBN(0xa5a80602, 0xdef04889),
-           TOBN(0x800e9af9, 0x7c64d509), TOBN(0x81382d0b, 0xb8996f6f)},
-          {TOBN(0x490eba53, 0x81927e27), TOBN(0x46c63b32, 0x4af50182),
-           TOBN(0x784c5fd9, 0xd3ad62ce), TOBN(0xe4fa1870, 0xf8ae8736)}},
-         {{TOBN(0x4ec9d0bc, 0xd7466b25), TOBN(0x84ddbe1a, 0xdb235c65),
-           TOBN(0x5e2645ee, 0x163c1688), TOBN(0x570bd00e, 0x00eba747)},
-          {TOBN(0xfa51b629, 0x128bfa0f), TOBN(0x92fce1bd, 0x6c1d3b68),
-           TOBN(0x3e7361dc, 0xb66778b1), TOBN(0x9c7d249d, 0x5561d2bb)}},
-         {{TOBN(0xa40b28bf, 0x0bbc6229), TOBN(0x1c83c05e, 0xdfd91497),
-           TOBN(0x5f9f5154, 0xf083df05), TOBN(0xbac38b3c, 0xeee66c9d)},
-          {TOBN(0xf71db7e3, 0xec0dfcfd), TOBN(0xf2ecda8e, 0x8b0a8416),
-           TOBN(0x52fddd86, 0x7812aa66), TOBN(0x2896ef10, 0x4e6f4272)}},
-         {{TOBN(0xff27186a, 0x0fe9a745), TOBN(0x08249fcd, 0x49ca70db),
-           TOBN(0x7425a2e6, 0x441cac49), TOBN(0xf4a0885a, 0xece5ff57)},
-          {TOBN(0x6e2cb731, 0x7d7ead58), TOBN(0xf96cf7d6, 0x1898d104),
-           TOBN(0xafe67c9d, 0x4f2c9a89), TOBN(0x89895a50, 0x1c7bf5bc)}},
-         {{TOBN(0xdc7cb8e5, 0x573cecfa), TOBN(0x66497eae, 0xd15f03e6),
-           TOBN(0x6bc0de69, 0x3f084420), TOBN(0x323b9b36, 0xacd532b0)},
-          {TOBN(0xcfed390a, 0x0115a3c1), TOBN(0x9414c40b, 0x2d65ca0e),
-           TOBN(0x641406bd, 0x2f530c78), TOBN(0x29369a44, 0x833438f2)}},
-         {{TOBN(0x996884f5, 0x903fa271), TOBN(0xe6da0fd2, 0xb9da921e),
-           TOBN(0xa6f2f269, 0x5db01e54), TOBN(0x1ee3e9bd, 0x6876214e)},
-          {TOBN(0xa26e181c, 0xe27a9497), TOBN(0x36d254e4, 0x8e215e04),
-           TOBN(0x42f32a6c, 0x252cabca), TOBN(0x99481487, 0x80b57614)}},
-         {{TOBN(0x4c4dfe69, 0x40d9cae1), TOBN(0x05869580, 0x11a10f09),
-           TOBN(0xca287b57, 0x3491b64b), TOBN(0x77862d5d, 0x3fd4a53b)},
-          {TOBN(0xbf94856e, 0x50349126), TOBN(0x2be30bd1, 0x71c5268f),
-           TOBN(0x10393f19, 0xcbb650a6), TOBN(0x639531fe, 0x778cf9fd)}},
-         {{TOBN(0x02556a11, 0xb2935359), TOBN(0xda38aa96, 0xaf8c126e),
-           TOBN(0x47dbe6c2, 0x0960167f), TOBN(0x37bbabb6, 0x501901cd)},
-          {TOBN(0xb6e979e0, 0x2c947778), TOBN(0xd69a5175, 0x7a1a1dc6),
-           TOBN(0xc3ed5095, 0x9d9faf0c), TOBN(0x4dd9c096, 0x1d5fa5f0)}},
-         {{TOBN(0xa0c4304d, 0x64f16ea8), TOBN(0x8b1cac16, 0x7e718623),
-           TOBN(0x0b576546, 0x7c67f03e), TOBN(0x559cf5ad, 0xcbd88c01)},
-          {TOBN(0x074877bb, 0x0e2af19a), TOBN(0x1f717ec1, 0xa1228c92),
-           TOBN(0x70bcb800, 0x326e8920), TOBN(0xec6e2c5c, 0x4f312804)}},
-         {{TOBN(0x426aea7d, 0x3fca4752), TOBN(0xf12c0949, 0x2211f62a),
-           TOBN(0x24beecd8, 0x7be7b6b5), TOBN(0xb77eaf4c, 0x36d7a27d)},
-          {TOBN(0x154c2781, 0xfda78fd3), TOBN(0x848a83b0, 0x264eeabe),
-           TOBN(0x81287ef0, 0x4ffe2bc4), TOBN(0x7b6d88c6, 0xb6b6fc2a)}},
-         {{TOBN(0x805fb947, 0xce417d99), TOBN(0x4b93dcc3, 0x8b916cc4),
-           TOBN(0x72e65bb3, 0x21273323), TOBN(0xbcc1badd, 0x6ea9886e)},
-          {TOBN(0x0e223011, 0x4bc5ee85), TOBN(0xa561be74, 0xc18ee1e4),
-           TOBN(0x762fd2d4, 0xa6bcf1f1), TOBN(0x50e6a5a4, 0x95231489)}},
-         {{TOBN(0xca96001f, 0xa00b500b), TOBN(0x5c098cfc, 0x5d7dcdf5),
-           TOBN(0xa64e2d2e, 0x8c446a85), TOBN(0xbae9bcf1, 0x971f3c62)},
-          {TOBN(0x4ec22683, 0x8435a2c5), TOBN(0x8ceaed6c, 0x4bad4643),
-           TOBN(0xe9f8fb47, 0xccccf4e3), TOBN(0xbd4f3fa4, 0x1ce3b21e)}},
-         {{TOBN(0xd79fb110, 0xa3db3292), TOBN(0xe28a37da, 0xb536c66a),
-           TOBN(0x279ce87b, 0x8e49e6a9), TOBN(0x70ccfe8d, 0xfdcec8e3)},
-          {TOBN(0x2193e4e0, 0x3ba464b2), TOBN(0x0f39d60e, 0xaca9a398),
-           TOBN(0x7d7932af, 0xf82c12ab), TOBN(0xd8ff50ed, 0x91e7e0f7)}},
-         {{TOBN(0xea961058, 0xfa28a7e0), TOBN(0xc726cf25, 0x0bf5ec74),
-           TOBN(0xe74d55c8, 0xdb229666), TOBN(0x0bd9abbf, 0xa57f5799)},
-          {TOBN(0x7479ef07, 0x4dfc47b3), TOBN(0xd9c65fc3, 0x0c52f91d),
-           TOBN(0x8e0283fe, 0x36a8bde2), TOBN(0xa32a8b5e, 0x7d4b7280)}},
-         {{TOBN(0x6a677c61, 0x12e83233), TOBN(0x0fbb3512, 0xdcc9bf28),
-           TOBN(0x562e8ea5, 0x0d780f61), TOBN(0x0db8b22b, 0x1dc4e89c)},
-          {TOBN(0x0a6fd1fb, 0x89be0144), TOBN(0x8c77d246, 0xca57113b),
-           TOBN(0x4639075d, 0xff09c91c), TOBN(0x5b47b17f, 0x5060824c)}},
-         {{TOBN(0x58aea2b0, 0x16287b52), TOBN(0xa1343520, 0xd0cd8eb0),
-           TOBN(0x6148b4d0, 0xc5d58573), TOBN(0xdd2b6170, 0x291c68ae)},
-          {TOBN(0xa61b3929, 0x1da3b3b7), TOBN(0x5f946d79, 0x08c4ac10),
-           TOBN(0x4105d4a5, 0x7217d583), TOBN(0x5061da3d, 0x25e6de5e)}},
-         {{TOBN(0x3113940d, 0xec1b4991), TOBN(0xf12195e1, 0x36f485ae),
-           TOBN(0xa7507fb2, 0x731a2ee0), TOBN(0x95057a8e, 0x6e9e196e)},
-          {TOBN(0xa3c2c911, 0x2e130136), TOBN(0x97dfbb36, 0x33c60d15),
-           TOBN(0xcaf3c581, 0xb300ee2b), TOBN(0x77f25d90, 0xf4bac8b8)}},
-         {{TOBN(0xdb1c4f98, 0x6d840cd6), TOBN(0x471d62c0, 0xe634288c),
-           TOBN(0x8ec2f85e, 0xcec8a161), TOBN(0x41f37cbc, 0xfa6f4ae2)},
-          {TOBN(0x6793a20f, 0x4b709985), TOBN(0x7a7bd33b, 0xefa8985b),
-           TOBN(0x2c6a3fbd, 0x938e6446), TOBN(0x19042619, 0x2a8d47c1)}},
-         {{TOBN(0x16848667, 0xcc36975f), TOBN(0x02acf168, 0x9d5f1dfb),
-           TOBN(0x62d41ad4, 0x613baa94), TOBN(0xb56fbb92, 0x9f684670)},
-          {TOBN(0xce610d0d, 0xe9e40569), TOBN(0x7b99c65f, 0x35489fef),
-           TOBN(0x0c88ad1b, 0x3df18b97), TOBN(0x81b7d9be, 0x5d0e9edb)}},
-         {{TOBN(0xd85218c0, 0xc716cc0a), TOBN(0xf4b5ff90, 0x85691c49),
-           TOBN(0xa4fd666b, 0xce356ac6), TOBN(0x17c72895, 0x4b327a7a)},
-          {TOBN(0xf93d5085, 0xda6be7de), TOBN(0xff71530e, 0x3301d34e),
-           TOBN(0x4cd96442, 0xd8f448e8), TOBN(0x9283d331, 0x2ed18ffa)}},
-         {{TOBN(0x4d33dd99, 0x2a849870), TOBN(0xa716964b, 0x41576335),
-           TOBN(0xff5e3a9b, 0x179be0e5), TOBN(0x5b9d6b1b, 0x83b13632)},
-          {TOBN(0x3b8bd7d4, 0xa52f313b), TOBN(0xc9dd95a0, 0x637a4660),
-           TOBN(0x30035962, 0x0b3e218f), TOBN(0xce1481a3, 0xc7b28a3c)}},
-         {{TOBN(0xab41b43a, 0x43228d83), TOBN(0x24ae1c30, 0x4ad63f99),
-           TOBN(0x8e525f1a, 0x46a51229), TOBN(0x14af860f, 0xcd26d2b4)},
-          {TOBN(0xd6baef61, 0x3f714aa1), TOBN(0xf51865ad, 0xeb78795e),
-           TOBN(0xd3e21fce, 0xe6a9d694), TOBN(0x82ceb1dd, 0x8a37b527)}}}};
+    {{{TOBN(0x79e730d4, 0x18a9143c), TOBN(0x75ba95fc, 0x5fedb601),
+       TOBN(0x79fb732b, 0x77622510), TOBN(0x18905f76, 0xa53755c6)},
+      {TOBN(0xddf25357, 0xce95560a), TOBN(0x8b4ab8e4, 0xba19e45c),
+       TOBN(0xd2e88688, 0xdd21f325), TOBN(0x8571ff18, 0x25885d85)}},
+     {{TOBN(0x850046d4, 0x10ddd64d), TOBN(0xaa6ae3c1, 0xa433827d),
+       TOBN(0x73220503, 0x8d1490d9), TOBN(0xf6bb32e4, 0x3dcf3a3b)},
+      {TOBN(0x2f3648d3, 0x61bee1a5), TOBN(0x152cd7cb, 0xeb236ff8),
+       TOBN(0x19a8fb0e, 0x92042dbe), TOBN(0x78c57751, 0x0a5b8a3b)}},
+     {{TOBN(0xffac3f90, 0x4eebc127), TOBN(0xb027f84a, 0x087d81fb),
+       TOBN(0x66ad77dd, 0x87cbbc98), TOBN(0x26936a3f, 0xb6ff747e)},
+      {TOBN(0xb04c5c1f, 0xc983a7eb), TOBN(0x583e47ad, 0x0861fe1a),
+       TOBN(0x78820831, 0x1a2ee98e), TOBN(0xd5f06a29, 0xe587cc07)}},
+     {{TOBN(0x74b0b50d, 0x46918dcc), TOBN(0x4650a6ed, 0xc623c173),
+       TOBN(0x0cdaacac, 0xe8100af2), TOBN(0x577362f5, 0x41b0176b)},
+      {TOBN(0x2d96f24c, 0xe4cbaba6), TOBN(0x17628471, 0xfad6f447),
+       TOBN(0x6b6c36de, 0xe5ddd22e), TOBN(0x84b14c39, 0x4c5ab863)}},
+     {{TOBN(0xbe1b8aae, 0xc45c61f5), TOBN(0x90ec649a, 0x94b9537d),
+       TOBN(0x941cb5aa, 0xd076c20c), TOBN(0xc9079605, 0x890523c8)},
+      {TOBN(0xeb309b4a, 0xe7ba4f10), TOBN(0x73c568ef, 0xe5eb882b),
+       TOBN(0x3540a987, 0x7e7a1f68), TOBN(0x73a076bb, 0x2dd1e916)}},
+     {{TOBN(0x40394737, 0x3e77664a), TOBN(0x55ae744f, 0x346cee3e),
+       TOBN(0xd50a961a, 0x5b17a3ad), TOBN(0x13074b59, 0x54213673)},
+      {TOBN(0x93d36220, 0xd377e44b), TOBN(0x299c2b53, 0xadff14b5),
+       TOBN(0xf424d44c, 0xef639f11), TOBN(0xa4c9916d, 0x4a07f75f)}},
+     {{TOBN(0x0746354e, 0xa0173b4f), TOBN(0x2bd20213, 0xd23c00f7),
+       TOBN(0xf43eaab5, 0x0c23bb08), TOBN(0x13ba5119, 0xc3123e03)},
+      {TOBN(0x2847d030, 0x3f5b9d4d), TOBN(0x6742f2f2, 0x5da67bdd),
+       TOBN(0xef933bdc, 0x77c94195), TOBN(0xeaedd915, 0x6e240867)}},
+     {{TOBN(0x27f14cd1, 0x9499a78f), TOBN(0x462ab5c5, 0x6f9b3455),
+       TOBN(0x8f90f02a, 0xf02cfc6b), TOBN(0xb763891e, 0xb265230d)},
+      {TOBN(0xf59da3a9, 0x532d4977), TOBN(0x21e3327d, 0xcf9eba15),
+       TOBN(0x123c7b84, 0xbe60bbf0), TOBN(0x56ec12f2, 0x7706df76)}},
+     {{TOBN(0x75c96e8f, 0x264e20e8), TOBN(0xabe6bfed, 0x59a7a841),
+       TOBN(0x2cc09c04, 0x44c8eb00), TOBN(0xe05b3080, 0xf0c4e16b)},
+      {TOBN(0x1eb7777a, 0xa45f3314), TOBN(0x56af7bed, 0xce5d45e3),
+       TOBN(0x2b6e019a, 0x88b12f1a), TOBN(0x086659cd, 0xfd835f9b)}},
+     {{TOBN(0x2c18dbd1, 0x9dc21ec8), TOBN(0x98f9868a, 0x0fcf8139),
+       TOBN(0x737d2cd6, 0x48250b49), TOBN(0xcc61c947, 0x24b3428f)},
+      {TOBN(0x0c2b4078, 0x80dd9e76), TOBN(0xc43a8991, 0x383fbe08),
+       TOBN(0x5f7d2d65, 0x779be5d2), TOBN(0x78719a54, 0xeb3b4ab5)}},
+     {{TOBN(0xea7d260a, 0x6245e404), TOBN(0x9de40795, 0x6e7fdfe0),
+       TOBN(0x1ff3a415, 0x8dac1ab5), TOBN(0x3e7090f1, 0x649c9073)},
+      {TOBN(0x1a768561, 0x2b944e88), TOBN(0x250f939e, 0xe57f61c8),
+       TOBN(0x0c0daa89, 0x1ead643d), TOBN(0x68930023, 0xe125b88e)}},
+     {{TOBN(0x04b71aa7, 0xd2697768), TOBN(0xabdedef5, 0xca345a33),
+       TOBN(0x2409d29d, 0xee37385e), TOBN(0x4ee1df77, 0xcb83e156)},
+      {TOBN(0x0cac12d9, 0x1cbb5b43), TOBN(0x170ed2f6, 0xca895637),
+       TOBN(0x28228cfa, 0x8ade6d66), TOBN(0x7ff57c95, 0x53238aca)}},
+     {{TOBN(0xccc42563, 0x4b2ed709), TOBN(0x0e356769, 0x856fd30d),
+       TOBN(0xbcbcd43f, 0x559e9811), TOBN(0x738477ac, 0x5395b759)},
+      {TOBN(0x35752b90, 0xc00ee17f), TOBN(0x68748390, 0x742ed2e3),
+       TOBN(0x7cd06422, 0xbd1f5bc1), TOBN(0xfbc08769, 0xc9e7b797)}},
+     {{TOBN(0xa242a35b, 0xb0cf664a), TOBN(0x126e48f7, 0x7f9707e3),
+       TOBN(0x1717bf54, 0xc6832660), TOBN(0xfaae7332, 0xfd12c72e)},
+      {TOBN(0x27b52db7, 0x995d586b), TOBN(0xbe29569e, 0x832237c2),
+       TOBN(0xe8e4193e, 0x2a65e7db), TOBN(0x152706dc, 0x2eaa1bbb)}},
+     {{TOBN(0x72bcd8b7, 0xbc60055b), TOBN(0x03cc23ee, 0x56e27e4b),
+       TOBN(0xee337424, 0xe4819370), TOBN(0xe2aa0e43, 0x0ad3da09)},
+      {TOBN(0x40b8524f, 0x6383c45d), TOBN(0xd7663554, 0x42a41b25),
+       TOBN(0x64efa6de, 0x778a4797), TOBN(0x2042170a, 0x7079adf4)}},
+     {{TOBN(0x808b0b65, 0x0bc6fb80), TOBN(0x5882e075, 0x3ffe2e6b),
+       TOBN(0xd5ef2f7c, 0x2c83f549), TOBN(0x54d63c80, 0x9103b723)},
+      {TOBN(0xf2f11bd6, 0x52a23f9b), TOBN(0x3670c319, 0x4b0b6587),
+       TOBN(0x55c4623b, 0xb1580e9e), TOBN(0x64edf7b2, 0x01efe220)}},
+     {{TOBN(0x97091dcb, 0xd53c5c9d), TOBN(0xf17624b6, 0xac0a177b),
+       TOBN(0xb0f13975, 0x2cfe2dff), TOBN(0xc1a35c0a, 0x6c7a574e)},
+      {TOBN(0x227d3146, 0x93e79987), TOBN(0x0575bf30, 0xe89cb80e),
+       TOBN(0x2f4e247f, 0x0d1883bb), TOBN(0xebd51226, 0x3274c3d0)}},
+     {{TOBN(0x5f3e51c8, 0x56ada97a), TOBN(0x4afc964d, 0x8f8b403e),
+       TOBN(0xa6f247ab, 0x412e2979), TOBN(0x675abd1b, 0x6f80ebda)},
+      {TOBN(0x66a2bd72, 0x5e485a1d), TOBN(0x4b2a5caf, 0x8f4f0b3c),
+       TOBN(0x2626927f, 0x1b847bba), TOBN(0x6c6fc7d9, 0x0502394d)}},
+     {{TOBN(0xfea912ba, 0xa5659ae8), TOBN(0x68363aba, 0x25e1a16e),
+       TOBN(0xb8842277, 0x752c41ac), TOBN(0xfe545c28, 0x2897c3fc)},
+      {TOBN(0x2d36e9e7, 0xdc4c696b), TOBN(0x5806244a, 0xfba977c5),
+       TOBN(0x85665e9b, 0xe39508c1), TOBN(0xf720ee25, 0x6d12597b)}},
+     {{TOBN(0x8a979129, 0xd2337a31), TOBN(0x5916868f, 0x0f862bdc),
+       TOBN(0x048099d9, 0x5dd283ba), TOBN(0xe2d1eeb6, 0xfe5bfb4e)},
+      {TOBN(0x82ef1c41, 0x7884005d), TOBN(0xa2d4ec17, 0xffffcbae),
+       TOBN(0x9161c53f, 0x8aa95e66), TOBN(0x5ee104e1, 0xc5fee0d0)}},
+     {{TOBN(0x562e4cec, 0xc135b208), TOBN(0x74e1b265, 0x4783f47d),
+       TOBN(0x6d2a506c, 0x5a3f3b30), TOBN(0xecead9f4, 0xc16762fc)},
+      {TOBN(0xf29dd4b2, 0xe286e5b9), TOBN(0x1b0fadc0, 0x83bb3c61),
+       TOBN(0x7a75023e, 0x7fac29a4), TOBN(0xc086d5f1, 0xc9477fa3)}},
+     {{TOBN(0x0fc61135, 0x2f6f3076), TOBN(0xc99ffa23, 0xe3912a9a),
+       TOBN(0x6a0b0685, 0xd2f8ba3d), TOBN(0xfdc777e8, 0xe93358a4)},
+      {TOBN(0x94a787bb, 0x35415f04), TOBN(0x640c2d6a, 0x4d23fea4),
+       TOBN(0x9de917da, 0x153a35b5), TOBN(0x793e8d07, 0x5d5cd074)}},
+     {{TOBN(0xf4f87653, 0x2de45068), TOBN(0x37c7a7e8, 0x9e2e1f6e),
+       TOBN(0xd0825fa2, 0xa3584069), TOBN(0xaf2cea7c, 0x1727bf42)},
+      {TOBN(0x0360a4fb, 0x9e4785a9), TOBN(0xe5fda49c, 0x27299f4a),
+       TOBN(0x48068e13, 0x71ac2f71), TOBN(0x83d0687b, 0x9077666f)}},
+     {{TOBN(0x6d3883b2, 0x15d02819), TOBN(0x6d0d7550, 0x40dd9a35),
+       TOBN(0x61d7cbf9, 0x1d2b469f), TOBN(0xf97b232f, 0x2efc3115)},
+      {TOBN(0xa551d750, 0xb24bcbc7), TOBN(0x11ea4949, 0x88a1e356),
+       TOBN(0x7669f031, 0x93cb7501), TOBN(0x595dc55e, 0xca737b8a)}},
+     {{TOBN(0xa4a319ac, 0xd837879f), TOBN(0x6fc1b49e, 0xed6b67b0),
+       TOBN(0xe3959933, 0x32f1f3af), TOBN(0x966742eb, 0x65432a2e)},
+      {TOBN(0x4b8dc9fe, 0xb4966228), TOBN(0x96cc6312, 0x43f43950),
+       TOBN(0x12068859, 0xc9b731ee), TOBN(0x7b948dc3, 0x56f79968)}},
+     {{TOBN(0x61e4ad32, 0xed1f8008), TOBN(0xe6c9267a, 0xd8b17538),
+       TOBN(0x1ac7c5eb, 0x857ff6fb), TOBN(0x994baaa8, 0x55f2fb10)},
+      {TOBN(0x84cf14e1, 0x1d248018), TOBN(0x5a39898b, 0x628ac508),
+       TOBN(0x14fde97b, 0x5fa944f5), TOBN(0xed178030, 0xd12e5ac7)}},
+     {{TOBN(0x042c2af4, 0x97e2feb4), TOBN(0xd36a42d7, 0xaebf7313),
+       TOBN(0x49d2c9eb, 0x084ffdd7), TOBN(0x9f8aa54b, 0x2ef7c76a)},
+      {TOBN(0x9200b7ba, 0x09895e70), TOBN(0x3bd0c66f, 0xddb7fb58),
+       TOBN(0x2d97d108, 0x78eb4cbb), TOBN(0x2d431068, 0xd84bde31)}},
+     {{TOBN(0x4b523eb7, 0x172ccd1f), TOBN(0x7323cb28, 0x30a6a892),
+       TOBN(0x97082ec0, 0xcfe153eb), TOBN(0xe97f6b6a, 0xf2aadb97)},
+      {TOBN(0x1d3d393e, 0xd1a83da1), TOBN(0xa6a7f9c7, 0x804b2a68),
+       TOBN(0x4a688b48, 0x2d0cb71e), TOBN(0xa9b4cc5f, 0x40585278)}},
+     {{TOBN(0x5e5db46a, 0xcb66e132), TOBN(0xf1be963a, 0x0d925880),
+       TOBN(0x944a7027, 0x0317b9e2), TOBN(0xe266f959, 0x48603d48)},
+      {TOBN(0x98db6673, 0x5c208899), TOBN(0x90472447, 0xa2fb18a3),
+       TOBN(0x8a966939, 0x777c619f), TOBN(0x3798142a, 0x2a3be21b)}},
+     {{TOBN(0xb4241cb1, 0x3298b343), TOBN(0xa3a14e49, 0xb44f65a1),
+       TOBN(0xc5f4d6cd, 0x3ac77acd), TOBN(0xd0288cb5, 0x52b6fc3c)},
+      {TOBN(0xd5cc8c2f, 0x1c040abc), TOBN(0xb675511e, 0x06bf9b4a),
+       TOBN(0xd667da37, 0x9b3aa441), TOBN(0x460d45ce, 0x51601f72)}},
+     {{TOBN(0xe2f73c69, 0x6755ff89), TOBN(0xdd3cf7e7, 0x473017e6),
+       TOBN(0x8ef5689d, 0x3cf7600d), TOBN(0x948dc4f8, 0xb1fc87b4)},
+      {TOBN(0xd9e9fe81, 0x4ea53299), TOBN(0x2d921ca2, 0x98eb6028),
+       TOBN(0xfaecedfd, 0x0c9803fc), TOBN(0xf38ae891, 0x4d7b4745)}},
+     {{TOBN(0xd8c5fccf, 0xc5e3a3d8), TOBN(0xbefd904c, 0x4079dfbf),
+       TOBN(0xbc6d6a58, 0xfead0197), TOBN(0x39227077, 0x695532a4)},
+      {TOBN(0x09e23e6d, 0xdbef42f5), TOBN(0x7e449b64, 0x480a9908),
+       TOBN(0x7b969c1a, 0xad9a2e40), TOBN(0x6231d792, 0x9591c2a4)}},
+     {{TOBN(0x87151456, 0x0f664534), TOBN(0x85ceae7c, 0x4b68f103),
+       TOBN(0xac09c4ae, 0x65578ab9), TOBN(0x33ec6868, 0xf044b10c)},
+      {TOBN(0x6ac4832b, 0x3a8ec1f1), TOBN(0x5509d128, 0x5847d5ef),
+       TOBN(0xf909604f, 0x763f1574), TOBN(0xb16c4303, 0xc32f63c4)}},
+     {{TOBN(0xb6ab2014, 0x7ca23cd3), TOBN(0xcaa7a5c6, 0xa391849d),
+       TOBN(0x5b0673a3, 0x75678d94), TOBN(0xc982ddd4, 0xdd303e64)},
+      {TOBN(0xfd7b000b, 0x5db6f971), TOBN(0xbba2cb1f, 0x6f876f92),
+       TOBN(0xc77332a3, 0x3c569426), TOBN(0xa159100c, 0x570d74f8)}},
+     {{TOBN(0xfd16847f, 0xdec67ef5), TOBN(0x742ee464, 0x233e76b7),
+       TOBN(0x0b8e4134, 0xefc2b4c8), TOBN(0xca640b86, 0x42a3e521)},
+      {TOBN(0x653a0190, 0x8ceb6aa9), TOBN(0x313c300c, 0x547852d5),
+       TOBN(0x24e4ab12, 0x6b237af7), TOBN(0x2ba90162, 0x8bb47af8)}},
+     {{TOBN(0x3d5e58d6, 0xa8219bb7), TOBN(0xc691d0bd, 0x1b06c57f),
+       TOBN(0x0ae4cb10, 0xd257576e), TOBN(0x3569656c, 0xd54a3dc3)},
+      {TOBN(0xe5ebaebd, 0x94cda03a), TOBN(0x934e82d3, 0x162bfe13),
+       TOBN(0x450ac0ba, 0xe251a0c6), TOBN(0x480b9e11, 0xdd6da526)}},
+     {{TOBN(0x00467bc5, 0x8cce08b5), TOBN(0xb636458c, 0x7f178d55),
+       TOBN(0xc5748bae, 0xa677d806), TOBN(0x2763a387, 0xdfa394eb)},
+      {TOBN(0xa12b448a, 0x7d3cebb6), TOBN(0xe7adda3e, 0x6f20d850),
+       TOBN(0xf63ebce5, 0x1558462c), TOBN(0x58b36143, 0x620088a8)}},
+     {{TOBN(0x8a2cc3ca, 0x4d63c0ee), TOBN(0x51233117, 0x0fe948ce),
+       TOBN(0x7463fd85, 0x222ef33b), TOBN(0xadf0c7dc, 0x7c603d6c)},
+      {TOBN(0x0ec32d3b, 0xfe7765e5), TOBN(0xccaab359, 0xbf380409),
+       TOBN(0xbdaa84d6, 0x8e59319c), TOBN(0xd9a4c280, 0x9c80c34d)}},
+     {{TOBN(0xa9d89488, 0xa059c142), TOBN(0x6f5ae714, 0xff0b9346),
+       TOBN(0x068f237d, 0x16fb3664), TOBN(0x5853e4c4, 0x363186ac)},
+      {TOBN(0xe2d87d23, 0x63c52f98), TOBN(0x2ec4a766, 0x81828876),
+       TOBN(0x47b864fa, 0xe14e7b1c), TOBN(0x0c0bc0e5, 0x69192408)}},
+     {{TOBN(0xe4d7681d, 0xb82e9f3e), TOBN(0x83200f0b, 0xdf25e13c),
+       TOBN(0x8909984c, 0x66f27280), TOBN(0x462d7b00, 0x75f73227)},
+      {TOBN(0xd90ba188, 0xf2651798), TOBN(0x74c6e18c, 0x36ab1c34),
+       TOBN(0xab256ea3, 0x5ef54359), TOBN(0x03466612, 0xd1aa702f)}},
+     {{TOBN(0x624d6049, 0x2ed22e91), TOBN(0x6fdfe0b5, 0x6f072822),
+       TOBN(0xeeca1115, 0x39ce2271), TOBN(0x98100a4f, 0xdb01614f)},
+      {TOBN(0xb6b0daa2, 0xa35c628f), TOBN(0xb6f94d2e, 0xc87e9a47),
+       TOBN(0xc6773259, 0x1d57d9ce), TOBN(0xf70bfeec, 0x03884a7b)}},
+     {{TOBN(0x5fb35ccf, 0xed2bad01), TOBN(0xa155cbe3, 0x1da6a5c7),
+       TOBN(0xc2e2594c, 0x30a92f8f), TOBN(0x649c89ce, 0x5bfafe43)},
+      {TOBN(0xd158667d, 0xe9ff257a), TOBN(0x9b359611, 0xf32c50ae),
+       TOBN(0x4b00b20b, 0x906014cf), TOBN(0xf3a8cfe3, 0x89bc7d3d)}},
+     {{TOBN(0x4ff23ffd, 0x248a7d06), TOBN(0x80c5bfb4, 0x878873fa),
+       TOBN(0xb7d9ad90, 0x05745981), TOBN(0x179c85db, 0x3db01994)},
+      {TOBN(0xba41b062, 0x61a6966c), TOBN(0x4d82d052, 0xeadce5a8),
+       TOBN(0x9e91cd3b, 0xa5e6a318), TOBN(0x47795f4f, 0x95b2dda0)}},
+     {{TOBN(0xecfd7c1f, 0xd55a897c), TOBN(0x009194ab, 0xb29110fb),
+       TOBN(0x5f0e2046, 0xe381d3b0), TOBN(0x5f3425f6, 0xa98dd291)},
+      {TOBN(0xbfa06687, 0x730d50da), TOBN(0x0423446c, 0x4b083b7f),
+       TOBN(0x397a247d, 0xd69d3417), TOBN(0xeb629f90, 0x387ba42a)}},
+     {{TOBN(0x1ee426cc, 0xd5cd79bf), TOBN(0x0032940b, 0x946c6e18),
+       TOBN(0x1b1e8ae0, 0x57477f58), TOBN(0xe94f7d34, 0x6d823278)},
+      {TOBN(0xc747cb96, 0x782ba21a), TOBN(0xc5254469, 0xf72b33a5),
+       TOBN(0x772ef6de, 0xc7f80c81), TOBN(0xd73acbfe, 0x2cd9e6b5)}},
+     {{TOBN(0x4075b5b1, 0x49ee90d9), TOBN(0x785c339a, 0xa06e9eba),
+       TOBN(0xa1030d5b, 0xabf825e0), TOBN(0xcec684c3, 0xa42931dc)},
+      {TOBN(0x42ab62c9, 0xc1586e63), TOBN(0x45431d66, 0x5ab43f2b),
+       TOBN(0x57c8b2c0, 0x55f7835d), TOBN(0x033da338, 0xc1b7f865)}},
+     {{TOBN(0x283c7513, 0xcaa76097), TOBN(0x0a624fa9, 0x36c83906),
+       TOBN(0x6b20afec, 0x715af2c7), TOBN(0x4b969974, 0xeba78bfd)},
+      {TOBN(0x220755cc, 0xd921d60e), TOBN(0x9b944e10, 0x7baeca13),
+       TOBN(0x04819d51, 0x5ded93d4), TOBN(0x9bbff86e, 0x6dddfd27)}},
+     {{TOBN(0x6b344130, 0x77adc612), TOBN(0xa7496529, 0xbbd803a0),
+       TOBN(0x1a1baaa7, 0x6d8805bd), TOBN(0xc8403902, 0x470343ad)},
+      {TOBN(0x39f59f66, 0x175adff1), TOBN(0x0b26d7fb, 0xb7d8c5b7),
+       TOBN(0xa875f5ce, 0x529d75e3), TOBN(0x85efc7e9, 0x41325cc2)}},
+     {{TOBN(0x21950b42, 0x1ff6acd3), TOBN(0xffe70484, 0x53dc6909),
+       TOBN(0xff4cd0b2, 0x28766127), TOBN(0xabdbe608, 0x4fb7db2b)},
+      {TOBN(0x837c9228, 0x5e1109e8), TOBN(0x26147d27, 0xf4645b5a),
+       TOBN(0x4d78f592, 0xf7818ed8), TOBN(0xd394077e, 0xf247fa36)}},
+     {{TOBN(0x0fb9c2d0, 0x488c171a), TOBN(0xa78bfbaa, 0x13685278),
+       TOBN(0xedfbe268, 0xd5b1fa6a), TOBN(0x0dceb8db, 0x2b7eaba7)},
+      {TOBN(0xbf9e8089, 0x9ae2b710), TOBN(0xefde7ae6, 0xa4449c96),
+       TOBN(0x43b7716b, 0xcc143a46), TOBN(0xd7d34194, 0xc3628c13)}},
+     {{TOBN(0x508cec1c, 0x3b3f64c9), TOBN(0xe20bc0ba, 0x1e5edf3f),
+       TOBN(0xda1deb85, 0x2f4318d4), TOBN(0xd20ebe0d, 0x5c3fa443)},
+      {TOBN(0x370b4ea7, 0x73241ea3), TOBN(0x61f1511c, 0x5e1a5f65),
+       TOBN(0x99a5e23d, 0x82681c62), TOBN(0xd731e383, 0xa2f54c2d)}},
+     {{TOBN(0x2692f36e, 0x83445904), TOBN(0x2e0ec469, 0xaf45f9c0),
+       TOBN(0x905a3201, 0xc67528b7), TOBN(0x88f77f34, 0xd0e5e542)},
+      {TOBN(0xf67a8d29, 0x5864687c), TOBN(0x23b92eae, 0x22df3562),
+       TOBN(0x5c27014b, 0x9bbec39e), TOBN(0x7ef2f226, 0x9c0f0f8d)}},
+     {{TOBN(0x97359638, 0x546c4d8d), TOBN(0x5f9c3fc4, 0x92f24679),
+       TOBN(0x912e8bed, 0xa8c8acd9), TOBN(0xec3a318d, 0x306634b0)},
+      {TOBN(0x80167f41, 0xc31cb264), TOBN(0x3db82f6f, 0x522113f2),
+       TOBN(0xb155bcd2, 0xdcafe197), TOBN(0xfba1da59, 0x43465283)}},
+     {{TOBN(0xa0425b8e, 0xb212cf53), TOBN(0x4f2e512e, 0xf8557c5f),
+       TOBN(0xc1286ff9, 0x25c4d56c), TOBN(0xbb8a0fea, 0xee26c851)},
+      {TOBN(0xc28f70d2, 0xe7d6107e), TOBN(0x7ee0c444, 0xe76265aa),
+       TOBN(0x3df277a4, 0x1d1936b1), TOBN(0x1a556e3f, 0xea9595eb)}},
+     {{TOBN(0x258bbbf9, 0xe7305683), TOBN(0x31eea5bf, 0x07ef5be6),
+       TOBN(0x0deb0e4a, 0x46c814c1), TOBN(0x5cee8449, 0xa7b730dd)},
+      {TOBN(0xeab495c5, 0xa0182bde), TOBN(0xee759f87, 0x9e27a6b4),
+       TOBN(0xc2cf6a68, 0x80e518ca), TOBN(0x25e8013f, 0xf14cf3f4)}},
+     {{TOBN(0x8fc44140, 0x7e8d7a14), TOBN(0xbb1ff3ca, 0x9556f36a),
+       TOBN(0x6a844385, 0x14600044), TOBN(0xba3f0c4a, 0x7451ae63)},
+      {TOBN(0xdfcac25b, 0x1f9af32a), TOBN(0x01e0db86, 0xb1f2214b),
+       TOBN(0x4e9a5bc2, 0xa4b596ac), TOBN(0x83927681, 0x026c2c08)}},
+     {{TOBN(0x3ec832e7, 0x7acaca28), TOBN(0x1bfeea57, 0xc7385b29),
+       TOBN(0x068212e3, 0xfd1eaf38), TOBN(0xc1329830, 0x6acf8ccc)},
+      {TOBN(0xb909f2db, 0x2aac9e59), TOBN(0x5748060d, 0xb661782a),
+       TOBN(0xc5ab2632, 0xc79b7a01), TOBN(0xda44c6c6, 0x00017626)}},
+     {{TOBN(0xf26c00e8, 0xa7ea82f0), TOBN(0x99cac80d, 0xe4299aaf),
+       TOBN(0xd66fe3b6, 0x7ed78be1), TOBN(0x305f725f, 0x648d02cd)},
+      {TOBN(0x33ed1bc4, 0x623fb21b), TOBN(0xfa70533e, 0x7a6319ad),
+       TOBN(0x17ab562d, 0xbe5ffb3e), TOBN(0x06374994, 0x56674741)}},
+     {{TOBN(0x69d44ed6, 0x5c46aa8e), TOBN(0x2100d5d3, 0xa8d063d1),
+       TOBN(0xcb9727ea, 0xa2d17c36), TOBN(0x4c2bab1b, 0x8add53b7)},
+      {TOBN(0xa084e90c, 0x15426704), TOBN(0x778afcd3, 0xa837ebea),
+       TOBN(0x6651f701, 0x7ce477f8), TOBN(0xa0624998, 0x46fb7a8b)}},
+     {{TOBN(0xdc1e6828, 0xed8a6e19), TOBN(0x33fc2336, 0x4189d9c7),
+       TOBN(0x026f8fe2, 0x671c39bc), TOBN(0xd40c4ccd, 0xbc6f9915)},
+      {TOBN(0xafa135bb, 0xf80e75ca), TOBN(0x12c651a0, 0x22adff2c),
+       TOBN(0xc40a04bd, 0x4f51ad96), TOBN(0x04820109, 0xbbe4e832)}},
+     {{TOBN(0x3667eb1a, 0x7f4c04cc), TOBN(0x59556621, 0xa9404f84),
+       TOBN(0x71cdf653, 0x7eceb50a), TOBN(0x994a44a6, 0x9b8335fa)},
+      {TOBN(0xd7faf819, 0xdbeb9b69), TOBN(0x473c5680, 0xeed4350d),
+       TOBN(0xb6658466, 0xda44bba2), TOBN(0x0d1bc780, 0x872bdbf3)}},
+     {{TOBN(0xe535f175, 0xa1962f91), TOBN(0x6ed7e061, 0xed58f5a7),
+       TOBN(0x177aa4c0, 0x2089a233), TOBN(0x0dbcb03a, 0xe539b413)},
+      {TOBN(0xe3dc424e, 0xbb32e38e), TOBN(0x6472e5ef, 0x6806701e),
+       TOBN(0xdd47ff98, 0x814be9ee), TOBN(0x6b60cfff, 0x35ace009)}},
+     {{TOBN(0xb8d3d931, 0x9ff91fe5), TOBN(0x039c4800, 0xf0518eed),
+       TOBN(0x95c37632, 0x9182cb26), TOBN(0x0763a434, 0x82fc568d)},
+      {TOBN(0x707c04d5, 0x383e76ba), TOBN(0xac98b930, 0x824e8197),
+       TOBN(0x92bf7c8f, 0x91230de0), TOBN(0x90876a01, 0x40959b70)}},
+     {{TOBN(0xdb6d96f3, 0x05968b80), TOBN(0x380a0913, 0x089f73b9),
+       TOBN(0x7da70b83, 0xc2c61e01), TOBN(0x95fb8394, 0x569b38c7)},
+      {TOBN(0x9a3c6512, 0x80edfe2f), TOBN(0x8f726bb9, 0x8faeaf82),
+       TOBN(0x8010a4a0, 0x78424bf8), TOBN(0x29672044, 0x0e844970)}}},
+    {{{TOBN(0x63c5cb81, 0x7a2ad62a), TOBN(0x7ef2b6b9, 0xac62ff54),
+       TOBN(0x3749bba4, 0xb3ad9db5), TOBN(0xad311f2c, 0x46d5a617)},
+      {TOBN(0xb77a8087, 0xc2ff3b6d), TOBN(0xb46feaf3, 0x367834ff),
+       TOBN(0xf8aa266d, 0x75d6b138), TOBN(0xfa38d320, 0xec008188)}},
+     {{TOBN(0x486d8ffa, 0x696946fc), TOBN(0x50fbc6d8, 0xb9cba56d),
+       TOBN(0x7e3d423e, 0x90f35a15), TOBN(0x7c3da195, 0xc0dd962c)},
+      {TOBN(0xe673fdb0, 0x3cfd5d8b), TOBN(0x0704b7c2, 0x889dfca5),
+       TOBN(0xf6ce581f, 0xf52305aa), TOBN(0x399d49eb, 0x914d5e53)}},
+     {{TOBN(0x380a496d, 0x6ec293cd), TOBN(0x733dbda7, 0x8e7051f5),
+       TOBN(0x037e388d, 0xb849140a), TOBN(0xee4b32b0, 0x5946dbf6)},
+      {TOBN(0xb1c4fda9, 0xcae368d1), TOBN(0x5001a7b0, 0xfdb0b2f3),
+       TOBN(0x6df59374, 0x2e3ac46e), TOBN(0x4af675f2, 0x39b3e656)}},
+     {{TOBN(0x44e38110, 0x39949296), TOBN(0x5b63827b, 0x361db1b5),
+       TOBN(0x3e5323ed, 0x206eaff5), TOBN(0x942370d2, 0xc21f4290)},
+      {TOBN(0xf2caaf2e, 0xe0d985a1), TOBN(0x192cc64b, 0x7239846d),
+       TOBN(0x7c0b8f47, 0xae6312f8), TOBN(0x7dc61f91, 0x96620108)}},
+     {{TOBN(0xb830fb5b, 0xc2da7de9), TOBN(0xd0e643df, 0x0ff8d3be),
+       TOBN(0x31ee77ba, 0x188a9641), TOBN(0x4e8aa3aa, 0xbcf6d502)},
+      {TOBN(0xf9fb6532, 0x9a49110f), TOBN(0xd18317f6, 0x2dd6b220),
+       TOBN(0x7e3ced41, 0x52c3ea5a), TOBN(0x0d296a14, 0x7d579c4a)}},
+     {{TOBN(0x35d6a53e, 0xed4c3717), TOBN(0x9f8240cf, 0x3d0ed2a3),
+       TOBN(0x8c0d4d05, 0xe5543aa5), TOBN(0x45d5bbfb, 0xdd33b4b4)},
+      {TOBN(0xfa04cc73, 0x137fd28e), TOBN(0x862ac6ef, 0xc73b3ffd),
+       TOBN(0x403ff9f5, 0x31f51ef2), TOBN(0x34d5e0fc, 0xbc73f5a2)}},
+     {{TOBN(0xf2526820, 0x08913f4f), TOBN(0xea20ed61, 0xeac93d95),
+       TOBN(0x51ed38b4, 0x6ca6b26c), TOBN(0x8662dcbc, 0xea4327b0)},
+      {TOBN(0x6daf295c, 0x725d2aaa), TOBN(0xbad2752f, 0x8e52dcda),
+       TOBN(0x2210e721, 0x0b17dacc), TOBN(0xa37f7912, 0xd51e8232)}},
+     {{TOBN(0x4f7081e1, 0x44cc3add), TOBN(0xd5ffa1d6, 0x87be82cf),
+       TOBN(0x89890b6c, 0x0edd6472), TOBN(0xada26e1a, 0x3ed17863)},
+      {TOBN(0x276f2715, 0x63483caa), TOBN(0xe6924cd9, 0x2f6077fd),
+       TOBN(0x05a7fe98, 0x0a466e3c), TOBN(0xf1c794b0, 0xb1902d1f)}},
+     {{TOBN(0xe5213688, 0x82a8042c), TOBN(0xd931cfaf, 0xcd278298),
+       TOBN(0x069a0ae0, 0xf597a740), TOBN(0x0adbb3f3, 0xeb59107c)},
+      {TOBN(0x983e951e, 0x5eaa8eb8), TOBN(0xe663a8b5, 0x11b48e78),
+       TOBN(0x1631cc0d, 0x8a03f2c5), TOBN(0x7577c11e, 0x11e271e2)}},
+     {{TOBN(0x33b2385c, 0x08369a90), TOBN(0x2990c59b, 0x190eb4f8),
+       TOBN(0x819a6145, 0xc68eac80), TOBN(0x7a786d62, 0x2ec4a014)},
+      {TOBN(0x33faadbe, 0x20ac3a8d), TOBN(0x31a21781, 0x5aba2d30),
+       TOBN(0x209d2742, 0xdba4f565), TOBN(0xdb2ce9e3, 0x55aa0fbb)}},
+     {{TOBN(0x8cef334b, 0x168984df), TOBN(0xe81dce17, 0x33879638),
+       TOBN(0xf6e6949c, 0x263720f0), TOBN(0x5c56feaf, 0xf593cbec)},
+      {TOBN(0x8bff5601, 0xfde58c84), TOBN(0x74e24117, 0x2eccb314),
+       TOBN(0xbcf01b61, 0x4c9a8a78), TOBN(0xa233e35e, 0x544c9868)}},
+     {{TOBN(0xb3156bf3, 0x8bd7aff1), TOBN(0x1b5ee4cb, 0x1d81b146),
+       TOBN(0x7ba1ac41, 0xd628a915), TOBN(0x8f3a8f9c, 0xfd89699e)},
+      {TOBN(0x7329b9c9, 0xa0748be7), TOBN(0x1d391c95, 0xa92e621f),
+       TOBN(0xe51e6b21, 0x4d10a837), TOBN(0xd255f53a, 0x4947b435)}},
+     {{TOBN(0x07669e04, 0xf1788ee3), TOBN(0xc14f27af, 0xa86938a2),
+       TOBN(0x8b47a334, 0xe93a01c0), TOBN(0xff627438, 0xd9366808)},
+      {TOBN(0x7a0985d8, 0xca2a5965), TOBN(0x3d9a5542, 0xd6e9b9b3),
+       TOBN(0xc23eb80b, 0x4cf972e8), TOBN(0x5c1c33bb, 0x4fdf72fd)}},
+     {{TOBN(0x0c4a58d4, 0x74a86108), TOBN(0xf8048a8f, 0xee4c5d90),
+       TOBN(0xe3c7c924, 0xe86d4c80), TOBN(0x28c889de, 0x056a1e60)},
+      {TOBN(0x57e2662e, 0xb214a040), TOBN(0xe8c48e98, 0x37e10347),
+       TOBN(0x87742862, 0x80ac748a), TOBN(0xf1c24022, 0x186b06f2)}},
+     {{TOBN(0xac2dd4c3, 0x5f74040a), TOBN(0x409aeb71, 0xfceac957),
+       TOBN(0x4fbad782, 0x55c4ec23), TOBN(0xb359ed61, 0x8a7b76ec)},
+      {TOBN(0x12744926, 0xed6f4a60), TOBN(0xe21e8d7f, 0x4b912de3),
+       TOBN(0xe2575a59, 0xfc705a59), TOBN(0x72f1d4de, 0xed2dbc0e)}},
+     {{TOBN(0x3d2b24b9, 0xeb7926b8), TOBN(0xbff88cb3, 0xcdbe5509),
+       TOBN(0xd0f399af, 0xe4dd640b), TOBN(0x3c5fe130, 0x2f76ed45)},
+      {TOBN(0x6f3562f4, 0x3764fb3d), TOBN(0x7b5af318, 0x3151b62d),
+       TOBN(0xd5bd0bc7, 0xd79ce5f3), TOBN(0xfdaf6b20, 0xec66890f)}},
+     {{TOBN(0x735c67ec, 0x6063540c), TOBN(0x50b259c2, 0xe5f9cb8f),
+       TOBN(0xb8734f9a, 0x3f99c6ab), TOBN(0xf8cc13d5, 0xa3a7bc85)},
+      {TOBN(0x80c1b305, 0xc5217659), TOBN(0xfe5364d4, 0x4ec12a54),
+       TOBN(0xbd87045e, 0x681345fe), TOBN(0x7f8efeb1, 0x582f897f)}},
+     {{TOBN(0xe8cbf1e5, 0xd5923359), TOBN(0xdb0cea9d, 0x539b9fb0),
+       TOBN(0x0c5b34cf, 0x49859b98), TOBN(0x5e583c56, 0xa4403cc6)},
+      {TOBN(0x11fc1a2d, 0xd48185b7), TOBN(0xc93fbc7e, 0x6e521787),
+       TOBN(0x47e7a058, 0x05105b8b), TOBN(0x7b4d4d58, 0xdb8260c8)}},
+     {{TOBN(0xe33930b0, 0x46eb842a), TOBN(0x8e844a9a, 0x7bdae56d),
+       TOBN(0x34ef3a9e, 0x13f7fdfc), TOBN(0xb3768f82, 0x636ca176)},
+      {TOBN(0x2821f4e0, 0x4e09e61c), TOBN(0x414dc3a1, 0xa0c7cddc),
+       TOBN(0xd5379437, 0x54945fcd), TOBN(0x151b6eef, 0xb3555ff1)}},
+     {{TOBN(0xb31bd613, 0x6339c083), TOBN(0x39ff8155, 0xdfb64701),
+       TOBN(0x7c3388d2, 0xe29604ab), TOBN(0x1e19084b, 0xa6b10442)},
+      {TOBN(0x17cf54c0, 0xeccd47ef), TOBN(0x89693385, 0x4a5dfb30),
+       TOBN(0x69d023fb, 0x47daf9f6), TOBN(0x9222840b, 0x7d91d959)}},
+     {{TOBN(0x439108f5, 0x803bac62), TOBN(0x0b7dd91d, 0x379bd45f),
+       TOBN(0xd651e827, 0xca63c581), TOBN(0x5c5d75f6, 0x509c104f)},
+      {TOBN(0x7d5fc738, 0x1f2dc308), TOBN(0x20faa7bf, 0xd98454be),
+       TOBN(0x95374bee, 0xa517b031), TOBN(0xf036b9b1, 0x642692ac)}},
+     {{TOBN(0xc5106109, 0x39842194), TOBN(0xb7e2353e, 0x49d05295),
+       TOBN(0xfc8c1d5c, 0xefb42ee0), TOBN(0xe04884eb, 0x08ce811c)},
+      {TOBN(0xf1f75d81, 0x7419f40e), TOBN(0x5b0ac162, 0xa995c241),
+       TOBN(0x120921bb, 0xc4c55646), TOBN(0x713520c2, 0x8d33cf97)}},
+     {{TOBN(0xb4a65a5c, 0xe98c5100), TOBN(0x6cec871d, 0x2ddd0f5a),
+       TOBN(0x251f0b7f, 0x9ba2e78b), TOBN(0x224a8434, 0xce3a2a5f)},
+      {TOBN(0x26827f61, 0x25f5c46f), TOBN(0x6a22bedc, 0x48545ec0),
+       TOBN(0x25ae5fa0, 0xb1bb5cdc), TOBN(0xd693682f, 0xfcb9b98f)}},
+     {{TOBN(0x32027fe8, 0x91e5d7d3), TOBN(0xf14b7d17, 0x73a07678),
+       TOBN(0xf88497b3, 0xc0dfdd61), TOBN(0xf7c2eec0, 0x2a8c4f48)},
+      {TOBN(0xaa5573f4, 0x3756e621), TOBN(0xc013a240, 0x1825b948),
+       TOBN(0x1c03b345, 0x63878572), TOBN(0xa0472bea, 0x653a4184)}},
+     {{TOBN(0xf4222e27, 0x0ac69a80), TOBN(0x34096d25, 0xf51e54f6),
+       TOBN(0x00a648cb, 0x8fffa591), TOBN(0x4e87acdc, 0x69b6527f)},
+      {TOBN(0x0575e037, 0xe285ccb4), TOBN(0x188089e4, 0x50ddcf52),
+       TOBN(0xaa96c9a8, 0x870ff719), TOBN(0x74a56cd8, 0x1fc7e369)}},
+     {{TOBN(0x41d04ee2, 0x1726931a), TOBN(0x0bbbb2c8, 0x3660ecfd),
+       TOBN(0xa6ef6de5, 0x24818e18), TOBN(0xe421cc51, 0xe7d57887)},
+      {TOBN(0xf127d208, 0xbea87be6), TOBN(0x16a475d3, 0xb1cdd682),
+       TOBN(0x9db1b684, 0x439b63f7), TOBN(0x5359b3db, 0xf0f113b6)}},
+     {{TOBN(0xdfccf1de, 0x8bf06e31), TOBN(0x1fdf8f44, 0xdd383901),
+       TOBN(0x10775cad, 0x5017e7d2), TOBN(0xdfc3a597, 0x58d11eef)},
+      {TOBN(0x6ec9c8a0, 0xb1ecff10), TOBN(0xee6ed6cc, 0x28400549),
+       TOBN(0xb5ad7bae, 0x1b4f8d73), TOBN(0x61b4f11d, 0xe00aaab9)}},
+     {{TOBN(0x7b32d69b, 0xd4eff2d7), TOBN(0x88ae6771, 0x4288b60f),
+       TOBN(0x159461b4, 0x37a1e723), TOBN(0x1f3d4789, 0x570aae8c)},
+      {TOBN(0x869118c0, 0x7f9871da), TOBN(0x35fbda78, 0xf635e278),
+       TOBN(0x738f3641, 0xe1541dac), TOBN(0x6794b13a, 0xc0dae45f)}},
+     {{TOBN(0x065064ac, 0x09cc0917), TOBN(0x27c53729, 0xc68540fd),
+       TOBN(0x0d2d4c8e, 0xef227671), TOBN(0xd23a9f80, 0xa1785a04)},
+      {TOBN(0x98c59528, 0x52650359), TOBN(0xfa09ad01, 0x74a1acad),
+       TOBN(0x082d5a29, 0x0b55bf5c), TOBN(0xa40f1c67, 0x419b8084)}},
+     {{TOBN(0x3a5c752e, 0xdcc18770), TOBN(0x4baf1f2f, 0x8825c3a5),
+       TOBN(0xebd63f74, 0x21b153ed), TOBN(0xa2383e47, 0xb2f64723)},
+      {TOBN(0xe7bf620a, 0x2646d19a), TOBN(0x56cb44ec, 0x03c83ffd),
+       TOBN(0xaf7267c9, 0x4f6be9f1), TOBN(0x8b2dfd7b, 0xc06bb5e9)}},
+     {{TOBN(0xb87072f2, 0xa672c5c7), TOBN(0xeacb11c8, 0x0d53c5e2),
+       TOBN(0x22dac29d, 0xff435932), TOBN(0x37bdb99d, 0x4408693c)},
+      {TOBN(0xf6e62fb6, 0x2899c20f), TOBN(0x3535d512, 0x447ece24),
+       TOBN(0xfbdc6b88, 0xff577ce3), TOBN(0x726693bd, 0x190575f2)}},
+     {{TOBN(0x6772b0e5, 0xab4b35a2), TOBN(0x1d8b6001, 0xf5eeaacf),
+       TOBN(0x728f7ce4, 0x795b9580), TOBN(0x4a20ed2a, 0x41fb81da)},
+      {TOBN(0x9f685cd4, 0x4fec01e6), TOBN(0x3ed7ddcc, 0xa7ff50ad),
+       TOBN(0x460fd264, 0x0c2d97fd), TOBN(0x3a241426, 0xeb82f4f9)}},
+     {{TOBN(0x17d1df2c, 0x6a8ea820), TOBN(0xb2b50d3b, 0xf22cc254),
+       TOBN(0x03856cba, 0xb7291426), TOBN(0x87fd26ae, 0x04f5ee39)},
+      {TOBN(0x9cb696cc, 0x02bee4ba), TOBN(0x53121804, 0x06820fd6),
+       TOBN(0xa5dfc269, 0x0212e985), TOBN(0x666f7ffa, 0x160f9a09)}},
+     {{TOBN(0xc503cd33, 0xbccd9617), TOBN(0x365dede4, 0xba7730a3),
+       TOBN(0x798c6355, 0x5ddb0786), TOBN(0xa6c3200e, 0xfc9cd3bc)},
+      {TOBN(0x060ffb2c, 0xe5e35efd), TOBN(0x99a4e25b, 0x5555a1c1),
+       TOBN(0x11d95375, 0xf70b3751), TOBN(0x0a57354a, 0x160e1bf6)}},
+     {{TOBN(0xecb3ae4b, 0xf8e4b065), TOBN(0x07a834c4, 0x2e53022b),
+       TOBN(0x1cd300b3, 0x8692ed96), TOBN(0x16a6f792, 0x61ee14ec)},
+      {TOBN(0x8f1063c6, 0x6a8649ed), TOBN(0xfbcdfcfe, 0x869f3e14),
+       TOBN(0x2cfb97c1, 0x00a7b3ec), TOBN(0xcea49b3c, 0x7130c2f1)}},
+     {{TOBN(0x462d044f, 0xe9d96488), TOBN(0x4b53d52e, 0x8182a0c1),
+       TOBN(0x84b6ddd3, 0x0391e9e9), TOBN(0x80ab7b48, 0xb1741a09)},
+      {TOBN(0xec0e15d4, 0x27d3317f), TOBN(0x8dfc1ddb, 0x1a64671e),
+       TOBN(0x93cc5d5f, 0xd49c5b92), TOBN(0xc995d53d, 0x3674a331)}},
+     {{TOBN(0x302e41ec, 0x090090ae), TOBN(0x2278a0cc, 0xedb06830),
+       TOBN(0x1d025932, 0xfbc99690), TOBN(0x0c32fbd2, 0xb80d68da)},
+      {TOBN(0xd79146da, 0xf341a6c1), TOBN(0xae0ba139, 0x1bef68a0),
+       TOBN(0xc6b8a563, 0x8d774b3a), TOBN(0x1cf307bd, 0x880ba4d7)}},
+     {{TOBN(0xc033bdc7, 0x19803511), TOBN(0xa9f97b3b, 0x8888c3be),
+       TOBN(0x3d68aebc, 0x85c6d05e), TOBN(0xc3b88a9d, 0x193919eb)},
+      {TOBN(0x2d300748, 0xc48b0ee3), TOBN(0x7506bc7c, 0x07a746c1),
+       TOBN(0xfc48437c, 0x6e6d57f3), TOBN(0x5bd71587, 0xcfeaa91a)}},
+     {{TOBN(0xa4ed0408, 0xc1bc5225), TOBN(0xd0b946db, 0x2719226d),
+       TOBN(0x109ecd62, 0x758d2d43), TOBN(0x75c8485a, 0x2751759b)},
+      {TOBN(0xb0b75f49, 0x9ce4177a), TOBN(0x4fa61a1e, 0x79c10c3d),
+       TOBN(0xc062d300, 0xa167fcd7), TOBN(0x4df3874c, 0x750f0fa8)}},
+     {{TOBN(0x29ae2cf9, 0x83dfedc9), TOBN(0xf8437134, 0x8d87631a),
+       TOBN(0xaf571711, 0x7429c8d2), TOBN(0x18d15867, 0x146d9272)},
+      {TOBN(0x83053ecf, 0x69769bb7), TOBN(0xc55eb856, 0xc479ab82),
+       TOBN(0x5ef7791c, 0x21b0f4b2), TOBN(0xaa5956ba, 0x3d491525)}},
+     {{TOBN(0x407a96c2, 0x9fe20eba), TOBN(0xf27168bb, 0xe52a5ad3),
+       TOBN(0x43b60ab3, 0xbf1d9d89), TOBN(0xe45c51ef, 0x710e727a)},
+      {TOBN(0xdfca5276, 0x099b4221), TOBN(0x8dc6407c, 0x2557a159),
+       TOBN(0x0ead8335, 0x91035895), TOBN(0x0a9db957, 0x9c55dc32)}},
+     {{TOBN(0xe40736d3, 0xdf61bc76), TOBN(0x13a619c0, 0x3f778cdb),
+       TOBN(0x6dd921a4, 0xc56ea28f), TOBN(0x76a52433, 0x2fa647b4)},
+      {TOBN(0x23591891, 0xac5bdc5d), TOBN(0xff4a1a72, 0xbac7dc01),
+       TOBN(0x9905e261, 0x62df8453), TOBN(0x3ac045df, 0xe63b265f)}},
+     {{TOBN(0x8a3f341b, 0xad53dba7), TOBN(0x8ec269cc, 0x837b625a),
+       TOBN(0xd71a2782, 0x3ae31189), TOBN(0x8fb4f9a3, 0x55e96120)},
+      {TOBN(0x804af823, 0xff9875cf), TOBN(0x23224f57, 0x5d442a9b),
+       TOBN(0x1c4d3b9e, 0xecc62679), TOBN(0x91da22fb, 0xa0e7ddb1)}},
+     {{TOBN(0xa370324d, 0x6c04a661), TOBN(0x9710d3b6, 0x5e376d17),
+       TOBN(0xed8c98f0, 0x3044e357), TOBN(0xc364ebbe, 0x6422701c)},
+      {TOBN(0x347f5d51, 0x7733d61c), TOBN(0xd55644b9, 0xcea826c3),
+       TOBN(0x80c6e0ad, 0x55a25548), TOBN(0x0aa7641d, 0x844220a7)}},
+     {{TOBN(0x1438ec81, 0x31810660), TOBN(0x9dfa6507, 0xde4b4043),
+       TOBN(0x10b515d8, 0xcc3e0273), TOBN(0x1b6066dd, 0x28d8cfb2)},
+      {TOBN(0xd3b04591, 0x9c9efebd), TOBN(0x425d4bdf, 0xa21c1ff4),
+       TOBN(0x5fe5af19, 0xd57607d3), TOBN(0xbbf773f7, 0x54481084)}},
+     {{TOBN(0x8435bd69, 0x94b03ed1), TOBN(0xd9ad1de3, 0x634cc546),
+       TOBN(0x2cf423fc, 0x00e420ca), TOBN(0xeed26d80, 0xa03096dd)},
+      {TOBN(0xd7f60be7, 0xa4db09d2), TOBN(0xf47f569d, 0x960622f7),
+       TOBN(0xe5925fd7, 0x7296c729), TOBN(0xeff2db26, 0x26ca2715)}},
+     {{TOBN(0xa6fcd014, 0xb913e759), TOBN(0x53da4786, 0x8ff4de93),
+       TOBN(0x14616d79, 0xc32068e1), TOBN(0xb187d664, 0xccdf352e)},
+      {TOBN(0xf7afb650, 0x1dc90b59), TOBN(0x8170e943, 0x7daa1b26),
+       TOBN(0xc8e3bdd8, 0x700c0a84), TOBN(0x6e8d345f, 0x6482bdfa)}},
+     {{TOBN(0x84cfbfa1, 0xc5c5ea50), TOBN(0xd3baf14c, 0x67960681),
+       TOBN(0x26398403, 0x0dd50942), TOBN(0xe4b7839c, 0x4716a663)},
+      {TOBN(0xd5f1f794, 0xe7de6dc0), TOBN(0x5cd0f4d4, 0x622aa7ce),
+       TOBN(0x5295f3f1, 0x59acfeec), TOBN(0x8d933552, 0x953e0607)}},
+     {{TOBN(0xc7db8ec5, 0x776c5722), TOBN(0xdc467e62, 0x2b5f290c),
+       TOBN(0xd4297e70, 0x4ff425a9), TOBN(0x4be924c1, 0x0cf7bb72)},
+      {TOBN(0x0d5dc5ae, 0xa1892131), TOBN(0x8bf8a8e3, 0xa705c992),
+       TOBN(0x73a0b064, 0x7a305ac5), TOBN(0x00c9ca4e, 0x9a8c77a8)}},
+     {{TOBN(0x5dfee80f, 0x83774bdd), TOBN(0x63131602, 0x85734485),
+       TOBN(0xa1b524ae, 0x914a69a9), TOBN(0xebc2ffaf, 0xd4e300d7)},
+      {TOBN(0x52c93db7, 0x7cfa46a5), TOBN(0x71e6161f, 0x21653b50),
+       TOBN(0x3574fc57, 0xa4bc580a), TOBN(0xc09015dd, 0xe1bc1253)}},
+     {{TOBN(0x4b7b47b2, 0xd174d7aa), TOBN(0x4072d8e8, 0xf3a15d04),
+       TOBN(0xeeb7d47f, 0xd6fa07ed), TOBN(0x6f2b9ff9, 0xedbdafb1)},
+      {TOBN(0x18c51615, 0x3760fe8a), TOBN(0x7a96e6bf, 0xf06c6c13),
+       TOBN(0x4d7a0410, 0x0ea2d071), TOBN(0xa1914e9b, 0x0be2a5ce)}},
+     {{TOBN(0x5726e357, 0xd8a3c5cf), TOBN(0x1197ecc3, 0x2abb2b13),
+       TOBN(0x6c0d7f7f, 0x31ae88dd), TOBN(0x15b20d1a, 0xfdbb3efe)},
+      {TOBN(0xcd06aa26, 0x70584039), TOBN(0x2277c969, 0xa7dc9747),
+       TOBN(0xbca69587, 0x7855d815), TOBN(0x899ea238, 0x5188b32a)}},
+     {{TOBN(0x37d9228b, 0x760c1c9d), TOBN(0xc7efbb11, 0x9b5c18da),
+       TOBN(0x7f0d1bc8, 0x19f6dbc5), TOBN(0x4875384b, 0x07e6905b)},
+      {TOBN(0xc7c50baa, 0x3ba8cd86), TOBN(0xb0ce40fb, 0xc2905de0),
+       TOBN(0x70840673, 0x7a231952), TOBN(0xa912a262, 0xcf43de26)}},
+     {{TOBN(0x9c38ddcc, 0xeb5b76c1), TOBN(0x746f5285, 0x26fc0ab4),
+       TOBN(0x52a63a50, 0xd62c269f), TOBN(0x60049c55, 0x99458621)},
+      {TOBN(0xe7f48f82, 0x3c2f7c9e), TOBN(0x6bd99043, 0x917d5cf3),
+       TOBN(0xeb1317a8, 0x8701f469), TOBN(0xbd3fe2ed, 0x9a449fe0)}},
+     {{TOBN(0x421e79ca, 0x12ef3d36), TOBN(0x9ee3c36c, 0x3e7ea5de),
+       TOBN(0xe48198b5, 0xcdff36f7), TOBN(0xaff4f967, 0xc6b82228)},
+      {TOBN(0x15e19dd0, 0xc47adb7e), TOBN(0x45699b23, 0x032e7dfa),
+       TOBN(0x40680c8b, 0x1fae026a), TOBN(0x5a347a48, 0x550dbf4d)}},
+     {{TOBN(0xe652533b, 0x3cef0d7d), TOBN(0xd94f7b18, 0x2bbb4381),
+       TOBN(0x838752be, 0x0e80f500), TOBN(0x8e6e2488, 0x9e9c9bfb)},
+      {TOBN(0xc9751697, 0x16caca6a), TOBN(0x866c49d8, 0x38531ad9),
+       TOBN(0xc917e239, 0x7151ade1), TOBN(0x2d016ec1, 0x6037c407)}},
+     {{TOBN(0xa407ccc9, 0x00eac3f9), TOBN(0x835f6280, 0xe2ed4748),
+       TOBN(0xcc54c347, 0x1cc98e0d), TOBN(0x0e969937, 0xdcb572eb)},
+      {TOBN(0x1b16c8e8, 0x8f30c9cb), TOBN(0xa606ae75, 0x373c4661),
+       TOBN(0x47aa689b, 0x35502cab), TOBN(0xf89014ae, 0x4d9bb64f)}},
+     {{TOBN(0x202f6a9c, 0x31c71f7b), TOBN(0x01f95aa3, 0x296ffe5c),
+       TOBN(0x5fc06014, 0x53cec3a3), TOBN(0xeb991237, 0x5f498a45)},
+      {TOBN(0xae9a935e, 0x5d91ba87), TOBN(0xc6ac6281, 0x0b564a19),
+       TOBN(0x8a8fe81c, 0x3bd44e69), TOBN(0x7c8b467f, 0x9dd11d45)}},
+     {{TOBN(0xf772251f, 0xea5b8e69), TOBN(0xaeecb3bd, 0xc5b75fbc),
+       TOBN(0x1aca3331, 0x887ff0e5), TOBN(0xbe5d49ff, 0x19f0a131)},
+      {TOBN(0x582c13aa, 0xe5c8646f), TOBN(0xdbaa12e8, 0x20e19980),
+       TOBN(0x8f40f31a, 0xf7abbd94), TOBN(0x1f13f5a8, 0x1dfc7663)}},
+     {{TOBN(0x5d81f1ee, 0xaceb4fc0), TOBN(0x36256002, 0x5e6f0f42),
+       TOBN(0x4b67d6d7, 0x751370c8), TOBN(0x2608b698, 0x03e80589)},
+      {TOBN(0xcfc0d2fc, 0x05268301), TOBN(0xa6943d39, 0x40309212),
+       TOBN(0x192a90c2, 0x1fd0e1c2), TOBN(0xb209f113, 0x37f1dc76)}},
+     {{TOBN(0xefcc5e06, 0x97bf1298), TOBN(0xcbdb6730, 0x219d639e),
+       TOBN(0xd009c116, 0xb81e8c6f), TOBN(0xa3ffdde3, 0x1a7ce2e5)},
+      {TOBN(0xc53fbaaa, 0xa914d3ba), TOBN(0x836d500f, 0x88df85ee),
+       TOBN(0xd98dc71b, 0x66ee0751), TOBN(0x5a3d7005, 0x714516fd)}},
+     {{TOBN(0x21d3634d, 0x39eedbba), TOBN(0x35cd2e68, 0x0455a46d),
+       TOBN(0xc8cafe65, 0xf9d7eb0c), TOBN(0xbda3ce9e, 0x00cefb3e)},
+      {TOBN(0xddc17a60, 0x2c9cf7a4), TOBN(0x01572ee4, 0x7bcb8773),
+       TOBN(0xa92b2b01, 0x8c7548df), TOBN(0x732fd309, 0xa84600e3)}},
+     {{TOBN(0xe22109c7, 0x16543a40), TOBN(0x9acafd36, 0xfede3c6c),
+       TOBN(0xfb206852, 0x6824e614), TOBN(0x2a4544a9, 0xda25dca0)},
+      {TOBN(0x25985262, 0x91d60b06), TOBN(0x281b7be9, 0x28753545),
+       TOBN(0xec667b1a, 0x90f13b27), TOBN(0x33a83aff, 0x940e2eb4)}},
+     {{TOBN(0x80009862, 0xd5d721d5), TOBN(0x0c3357a3, 0x5bd3a182),
+       TOBN(0x27f3a83b, 0x7aa2cda4), TOBN(0xb58ae74e, 0xf6f83085)},
+      {TOBN(0x2a911a81, 0x2e6dad6b), TOBN(0xde286051, 0xf43d6c5b),
+       TOBN(0x4bdccc41, 0xf996c4d8), TOBN(0xe7312ec0, 0x0ae1e24e)}}},
+    {{{TOBN(0xf8d112e7, 0x6e6485b3), TOBN(0x4d3e24db, 0x771c52f8),
+       TOBN(0x48e3ee41, 0x684a2f6d), TOBN(0x7161957d, 0x21d95551)},
+      {TOBN(0x19631283, 0xcdb12a6c), TOBN(0xbf3fa882, 0x2e50e164),
+       TOBN(0xf6254b63, 0x3166cc73), TOBN(0x3aefa7ae, 0xaee8cc38)}},
+     {{TOBN(0x79b0fe62, 0x3b36f9fd), TOBN(0x26543b23, 0xfde19fc0),
+       TOBN(0x136e64a0, 0x958482ef), TOBN(0x23f63771, 0x9b095825)},
+      {TOBN(0x14cfd596, 0xb6a1142e), TOBN(0x5ea6aac6, 0x335aac0b),
+       TOBN(0x86a0e8bd, 0xf3081dd5), TOBN(0x5fb89d79, 0x003dc12a)}},
+     {{TOBN(0xf615c33a, 0xf72e34d4), TOBN(0x0bd9ea40, 0x110eec35),
+       TOBN(0x1c12bc5b, 0xc1dea34e), TOBN(0x686584c9, 0x49ae4699)},
+      {TOBN(0x13ad95d3, 0x8c97b942), TOBN(0x4609561a, 0x4e5c7562),
+       TOBN(0x9e94a4ae, 0xf2737f89), TOBN(0xf57594c6, 0x371c78b6)}},
+     {{TOBN(0x0f0165fc, 0xe3779ee3), TOBN(0xe00e7f9d, 0xbd495d9e),
+       TOBN(0x1fa4efa2, 0x20284e7a), TOBN(0x4564bade, 0x47ac6219)},
+      {TOBN(0x90e6312a, 0xc4708e8e), TOBN(0x4f5725fb, 0xa71e9adf),
+       TOBN(0xe95f55ae, 0x3d684b9f), TOBN(0x47f7ccb1, 0x1e94b415)}},
+     {{TOBN(0x7322851b, 0x8d946581), TOBN(0xf0d13133, 0xbdf4a012),
+       TOBN(0xa3510f69, 0x6584dae0), TOBN(0x03a7c171, 0x3c9f6c6d)},
+      {TOBN(0x5be97f38, 0xe475381a), TOBN(0xca1ba422, 0x85823334),
+       TOBN(0xf83cc5c7, 0x0be17dda), TOBN(0x158b1494, 0x0b918c0f)}},
+     {{TOBN(0xda3a77e5, 0x522e6b69), TOBN(0x69c908c3, 0xbbcd6c18),
+       TOBN(0x1f1b9e48, 0xd924fd56), TOBN(0x37c64e36, 0xaa4bb3f7)},
+      {TOBN(0x5a4fdbdf, 0xee478d7d), TOBN(0xba75c8bc, 0x0193f7a0),
+       TOBN(0x84bc1e84, 0x56cd16df), TOBN(0x1fb08f08, 0x46fad151)}},
+     {{TOBN(0x8a7cabf9, 0x842e9f30), TOBN(0xa331d4bf, 0x5eab83af),
+       TOBN(0xd272cfba, 0x017f2a6a), TOBN(0x27560abc, 0x83aba0e3)},
+      {TOBN(0x94b83387, 0x0e3a6b75), TOBN(0x25c6aea2, 0x6b9f50f5),
+       TOBN(0x803d691d, 0xb5fdf6d0), TOBN(0x03b77509, 0xe6333514)}},
+     {{TOBN(0x36178903, 0x61a341c1), TOBN(0x3604dc60, 0x0cfd6142),
+       TOBN(0x022295eb, 0x8533316c), TOBN(0x3dbde4ac, 0x44af2922)},
+      {TOBN(0x898afc5d, 0x1c7eef69), TOBN(0x58896805, 0xd14f4fa1),
+       TOBN(0x05002160, 0x203c21ca), TOBN(0x6f0d1f30, 0x40ef730b)}},
+     {{TOBN(0x8e8c44d4, 0x196224f8), TOBN(0x75a4ab95, 0x374d079d),
+       TOBN(0x79085ecc, 0x7d48f123), TOBN(0x56f04d31, 0x1bf65ad8)},
+      {TOBN(0xe220bf1c, 0xbda602b2), TOBN(0x73ee1742, 0xf9612c69),
+       TOBN(0x76008fc8, 0x084fd06b), TOBN(0x4000ef9f, 0xf11380d1)}},
+     {{TOBN(0x48201b4b, 0x12cfe297), TOBN(0x3eee129c, 0x292f74e5),
+       TOBN(0xe1fe114e, 0xc9e874e8), TOBN(0x899b055c, 0x92c5fc41)},
+      {TOBN(0x4e477a64, 0x3a39c8cf), TOBN(0x82f09efe, 0x78963cc9),
+       TOBN(0x6fd3fd8f, 0xd333f863), TOBN(0x85132b2a, 0xdc949c63)}},
+     {{TOBN(0x7e06a3ab, 0x516eb17b), TOBN(0x73bec06f, 0xd2c7372b),
+       TOBN(0xe4f74f55, 0xba896da6), TOBN(0xbb4afef8, 0x8e9eb40f)},
+      {TOBN(0x2d75bec8, 0xe61d66b0), TOBN(0x02bda4b4, 0xef29300b),
+       TOBN(0x8bbaa8de, 0x026baa5a), TOBN(0xff54befd, 0xa07f4440)}},
+     {{TOBN(0xbd9b8b1d, 0xbe7a2af3), TOBN(0xec51caa9, 0x4fb74a72),
+       TOBN(0xb9937a4b, 0x63879697), TOBN(0x7c9a9d20, 0xec2687d5)},
+      {TOBN(0x1773e44f, 0x6ef5f014), TOBN(0x8abcf412, 0xe90c6900),
+       TOBN(0x387bd022, 0x8142161e), TOBN(0x50393755, 0xfcb6ff2a)}},
+     {{TOBN(0x9813fd56, 0xed6def63), TOBN(0x53cf6482, 0x7d53106c),
+       TOBN(0x991a35bd, 0x431f7ac1), TOBN(0xf1e274dd, 0x63e65faf)},
+      {TOBN(0xf63ffa3c, 0x44cc7880), TOBN(0x411a426b, 0x7c256981),
+       TOBN(0xb698b9fd, 0x93a420e0), TOBN(0x89fdddc0, 0xae53f8fe)}},
+     {{TOBN(0x766e0722, 0x32398baa), TOBN(0x205fee42, 0x5cfca031),
+       TOBN(0xa49f5341, 0x7a029cf2), TOBN(0xa88c68b8, 0x4023890d)},
+      {TOBN(0xbc275041, 0x7337aaa8), TOBN(0x9ed364ad, 0x0eb384f4),
+       TOBN(0xe0816f85, 0x29aba92f), TOBN(0x2e9e1941, 0x04e38a88)}},
+     {{TOBN(0x57eef44a, 0x3dafd2d5), TOBN(0x35d1fae5, 0x97ed98d8),
+       TOBN(0x50628c09, 0x2307f9b1), TOBN(0x09d84aae, 0xd6cba5c6)},
+      {TOBN(0x67071bc7, 0x88aaa691), TOBN(0x2dea57a9, 0xafe6cb03),
+       TOBN(0xdfe11bb4, 0x3d78ac01), TOBN(0x7286418c, 0x7fd7aa51)}},
+     {{TOBN(0xfabf7709, 0x77f7195a), TOBN(0x8ec86167, 0xadeb838f),
+       TOBN(0xea1285a8, 0xbb4f012d), TOBN(0xd6883503, 0x9a3eab3f)},
+      {TOBN(0xee5d24f8, 0x309004c2), TOBN(0xa96e4b76, 0x13ffe95e),
+       TOBN(0x0cdffe12, 0xbd223ea4), TOBN(0x8f5c2ee5, 0xb6739a53)}},
+     {{TOBN(0x5cb4aaa5, 0xdd968198), TOBN(0xfa131c52, 0x72413a6c),
+       TOBN(0x53d46a90, 0x9536d903), TOBN(0xb270f0d3, 0x48606d8e)},
+      {TOBN(0x518c7564, 0xa053a3bc), TOBN(0x088254b7, 0x1a86caef),
+       TOBN(0xb3ba8cb4, 0x0ab5efd0), TOBN(0x5c59900e, 0x4605945d)}},
+     {{TOBN(0xecace1dd, 0xa1887395), TOBN(0x40960f36, 0x932a65de),
+       TOBN(0x9611ff5c, 0x3aa95529), TOBN(0xc58215b0, 0x7c1e5a36)},
+      {TOBN(0xd48c9b58, 0xf0e1a524), TOBN(0xb406856b, 0xf590dfb8),
+       TOBN(0xc7605e04, 0x9cd95662), TOBN(0x0dd036ee, 0xa33ecf82)}},
+     {{TOBN(0xa50171ac, 0xc33156b3), TOBN(0xf09d24ea, 0x4a80172e),
+       TOBN(0x4e1f72c6, 0x76dc8eef), TOBN(0xe60caadc, 0x5e3d44ee)},
+      {TOBN(0x006ef8a6, 0x979b1d8f), TOBN(0x60908a1c, 0x97788d26),
+       TOBN(0x6e08f95b, 0x266feec0), TOBN(0x618427c2, 0x22e8c94e)}},
+     {{TOBN(0x3d613339, 0x59145a65), TOBN(0xcd9bc368, 0xfa406337),
+       TOBN(0x82d11be3, 0x2d8a52a0), TOBN(0xf6877b27, 0x97a1c590)},
+      {TOBN(0x837a819b, 0xf5cbdb25), TOBN(0x2a4fd1d8, 0xde090249),
+       TOBN(0x622a7de7, 0x74990e5f), TOBN(0x840fa5a0, 0x7945511b)}},
+     {{TOBN(0x30b974be, 0x6558842d), TOBN(0x70df8c64, 0x17f3d0a6),
+       TOBN(0x7c803520, 0x7542e46d), TOBN(0x7251fe7f, 0xe4ecc823)},
+      {TOBN(0xe59134cb, 0x5e9aac9a), TOBN(0x11bb0934, 0xf0045d71),
+       TOBN(0x53e5d9b5, 0xdbcb1d4e), TOBN(0x8d97a905, 0x92defc91)}},
+     {{TOBN(0xfe289327, 0x7946d3f9), TOBN(0xe132bd24, 0x07472273),
+       TOBN(0xeeeb510c, 0x1eb6ae86), TOBN(0x777708c5, 0xf0595067)},
+      {TOBN(0x18e2c8cd, 0x1297029e), TOBN(0x2c61095c, 0xbbf9305e),
+       TOBN(0xe466c258, 0x6b85d6d9), TOBN(0x8ac06c36, 0xda1ea530)}},
+     {{TOBN(0xa365dc39, 0xa1304668), TOBN(0xe4a9c885, 0x07f89606),
+       TOBN(0x65a4898f, 0xacc7228d), TOBN(0x3e2347ff, 0x84ca8303)},
+      {TOBN(0xa5f6fb77, 0xea7d23a3), TOBN(0x2fac257d, 0x672a71cd),
+       TOBN(0x6908bef8, 0x7e6a44d3), TOBN(0x8ff87566, 0x891d3d7a)}},
+     {{TOBN(0xe58e90b3, 0x6b0cf82e), TOBN(0x6438d246, 0x2615b5e7),
+       TOBN(0x07b1f8fc, 0x669c145a), TOBN(0xb0d8b2da, 0x36f1e1cb)},
+      {TOBN(0x54d5dadb, 0xd9184c4d), TOBN(0x3dbb18d5, 0xf93d9976),
+       TOBN(0x0a3e0f56, 0xd1147d47), TOBN(0x2afa8c8d, 0xa0a48609)}},
+     {{TOBN(0x275353e8, 0xbc36742c), TOBN(0x898f427e, 0xeea0ed90),
+       TOBN(0x26f4947e, 0x3e477b00), TOBN(0x8ad8848a, 0x308741e3)},
+      {TOBN(0x6c703c38, 0xd74a2a46), TOBN(0x5e3e05a9, 0x9ba17ba2),
+       TOBN(0xc1fa6f66, 0x4ab9a9e4), TOBN(0x474a2d9a, 0x3841d6ec)}},
+     {{TOBN(0x871239ad, 0x653ae326), TOBN(0x14bcf72a, 0xa74cbb43),
+       TOBN(0x8737650e, 0x20d4c083), TOBN(0x3df86536, 0x110ed4af)},
+      {TOBN(0xd2d86fe7, 0xb53ca555), TOBN(0x688cb00d, 0xabd5d538),
+       TOBN(0xcf81bda3, 0x1ad38468), TOBN(0x7ccfe3cc, 0xf01167b6)}},
+     {{TOBN(0xcf4f47e0, 0x6c4c1fe6), TOBN(0x557e1f1a, 0x298bbb79),
+       TOBN(0xf93b974f, 0x30d45a14), TOBN(0x174a1d2d, 0x0baf97c4)},
+      {TOBN(0x7a003b30, 0xc51fbf53), TOBN(0xd8940991, 0xee68b225),
+       TOBN(0x5b0aa7b7, 0x1c0f4173), TOBN(0x975797c9, 0xa20a7153)}},
+     {{TOBN(0x26e08c07, 0xe3533d77), TOBN(0xd7222e6a, 0x2e341c99),
+       TOBN(0x9d60ec3d, 0x8d2dc4ed), TOBN(0xbdfe0d8f, 0x7c476cf8)},
+      {TOBN(0x1fe59ab6, 0x1d056605), TOBN(0xa9ea9df6, 0x86a8551f),
+       TOBN(0x8489941e, 0x47fb8d8c), TOBN(0xfeb874eb, 0x4a7f1b10)}},
+     {{TOBN(0xfe5fea86, 0x7ee0d98f), TOBN(0x201ad34b, 0xdbf61864),
+       TOBN(0x45d8fe47, 0x37c031d4), TOBN(0xd5f49fae, 0x795f0822)},
+      {TOBN(0xdb0fb291, 0xc7f4a40c), TOBN(0x2e69d9c1, 0x730ddd92),
+       TOBN(0x754e1054, 0x49d76987), TOBN(0x8a24911d, 0x7662db87)}},
+     {{TOBN(0x61fc1810, 0x60a71676), TOBN(0xe852d1a8, 0xf66a8ad1),
+       TOBN(0x172bbd65, 0x6417231e), TOBN(0x0d6de7bd, 0x3babb11f)},
+      {TOBN(0x6fde6f88, 0xc8e347f8), TOBN(0x1c587547, 0x9bd99cc3),
+       TOBN(0x78e54ed0, 0x34076950), TOBN(0x97f0f334, 0x796e83ba)}},
+     {{TOBN(0xe4dbe1ce, 0x4924867a), TOBN(0xbd5f51b0, 0x60b84917),
+       TOBN(0x37530040, 0x3cb09a79), TOBN(0xdb3fe0f8, 0xff1743d8)},
+      {TOBN(0xed7894d8, 0x556fa9db), TOBN(0xfa262169, 0x23412fbf),
+       TOBN(0x563be0db, 0xba7b9291), TOBN(0x6ca8b8c0, 0x0c9fb234)}},
+     {{TOBN(0xed406aa9, 0xbd763802), TOBN(0xc21486a0, 0x65303da1),
+       TOBN(0x61ae291e, 0xc7e62ec4), TOBN(0x622a0492, 0xdf99333e)},
+      {TOBN(0x7fd80c9d, 0xbb7a8ee0), TOBN(0xdc2ed3bc, 0x6c01aedb),
+       TOBN(0x35c35a12, 0x08be74ec), TOBN(0xd540cb1a, 0x469f671f)}},
+     {{TOBN(0xd16ced4e, 0xcf84f6c7), TOBN(0x8561fb9c, 0x2d090f43),
+       TOBN(0x7e693d79, 0x6f239db4), TOBN(0xa736f928, 0x77bd0d94)},
+      {TOBN(0x07b4d929, 0x2c1950ee), TOBN(0xda177543, 0x56dc11b3),
+       TOBN(0xa5dfbbaa, 0x7a6a878e), TOBN(0x1c70cb29, 0x4decb08a)}},
+     {{TOBN(0xfba28c8b, 0x6f0f7c50), TOBN(0xa8eba2b8, 0x854dcc6d),
+       TOBN(0x5ff8e89a, 0x36b78642), TOBN(0x070c1c8e, 0xf6873adf)},
+      {TOBN(0xbbd3c371, 0x6484d2e4), TOBN(0xfb78318f, 0x0d414129),
+       TOBN(0x2621a39c, 0x6ad93b0b), TOBN(0x979d74c2, 0xa9e917f7)}},
+     {{TOBN(0xfc195647, 0x61fb0428), TOBN(0x4d78954a, 0xbee624d4),
+       TOBN(0xb94896e0, 0xb8ae86fd), TOBN(0x6667ac0c, 0xc91c8b13)},
+      {TOBN(0x9f180512, 0x43bcf832), TOBN(0xfbadf8b7, 0xa0010137),
+       TOBN(0xc69b4089, 0xb3ba8aa7), TOBN(0xfac4bacd, 0xe687ce85)}},
+     {{TOBN(0x9164088d, 0x977eab40), TOBN(0x51f4c5b6, 0x2760b390),
+       TOBN(0xd238238f, 0x340dd553), TOBN(0x358566c3, 0xdb1d31c9)},
+      {TOBN(0x3a5ad69e, 0x5068f5ff), TOBN(0xf31435fc, 0xdaff6b06),
+       TOBN(0xae549a5b, 0xd6debff0), TOBN(0x59e5f0b7, 0x75e01331)}},
+     {{TOBN(0x5d492fb8, 0x98559acf), TOBN(0x96018c2e, 0x4db79b50),
+       TOBN(0x55f4a48f, 0x609f66aa), TOBN(0x1943b3af, 0x4900a14f)},
+      {TOBN(0xc22496df, 0x15a40d39), TOBN(0xb2a44684, 0x4c20f7c5),
+       TOBN(0x76a35afa, 0x3b98404c), TOBN(0xbec75725, 0xff5d1b77)}},
+     {{TOBN(0xb67aa163, 0xbea06444), TOBN(0x27e95bb2, 0xf724b6f2),
+       TOBN(0x3c20e3e9, 0xd238c8ab), TOBN(0x1213754e, 0xddd6ae17)},
+      {TOBN(0x8c431020, 0x716e0f74), TOBN(0x6679c82e, 0xffc095c2),
+       TOBN(0x2eb3adf4, 0xd0ac2932), TOBN(0x2cc970d3, 0x01bb7a76)}},
+     {{TOBN(0x70c71f2f, 0x740f0e66), TOBN(0x545c616b, 0x2b6b23cc),
+       TOBN(0x4528cfcb, 0xb40a8bd7), TOBN(0xff839633, 0x2ab27722)},
+      {TOBN(0x049127d9, 0x025ac99a), TOBN(0xd314d4a0, 0x2b63e33b),
+       TOBN(0xc8c310e7, 0x28d84519), TOBN(0x0fcb8983, 0xb3bc84ba)}},
+     {{TOBN(0x2cc52261, 0x38634818), TOBN(0x501814f4, 0xb44c2e0b),
+       TOBN(0xf7e181aa, 0x54dfdba3), TOBN(0xcfd58ff0, 0xe759718c)},
+      {TOBN(0xf90cdb14, 0xd3b507a8), TOBN(0x57bd478e, 0xc50bdad8),
+       TOBN(0x29c197e2, 0x50e5f9aa), TOBN(0x4db6eef8, 0xe40bc855)}},
+     {{TOBN(0x2cc8f21a, 0xd1fc0654), TOBN(0xc71cc963, 0x81269d73),
+       TOBN(0xecfbb204, 0x077f49f9), TOBN(0xdde92571, 0xca56b793)},
+      {TOBN(0x9abed6a3, 0xf97ad8f7), TOBN(0xe6c19d3f, 0x924de3bd),
+       TOBN(0x8dce92f4, 0xa140a800), TOBN(0x85f44d1e, 0x1337af07)}},
+     {{TOBN(0x5953c08b, 0x09d64c52), TOBN(0xa1b5e49f, 0xf5df9749),
+       TOBN(0x336a8fb8, 0x52735f7d), TOBN(0xb332b6db, 0x9add676b)},
+      {TOBN(0x558b88a0, 0xb4511aa4), TOBN(0x09788752, 0xdbd5cc55),
+       TOBN(0x16b43b9c, 0xd8cd52bd), TOBN(0x7f0bc5a0, 0xc2a2696b)}},
+     {{TOBN(0x146e12d4, 0xc11f61ef), TOBN(0x9ce10754, 0x3a83e79e),
+       TOBN(0x08ec73d9, 0x6cbfca15), TOBN(0x09ff29ad, 0x5b49653f)},
+      {TOBN(0xe31b72bd, 0xe7da946e), TOBN(0xebf9eb3b, 0xee80a4f2),
+       TOBN(0xd1aabd08, 0x17598ce4), TOBN(0x18b5fef4, 0x53f37e80)}},
+     {{TOBN(0xd5d5cdd3, 0x5958cd79), TOBN(0x3580a1b5, 0x1d373114),
+       TOBN(0xa36e4c91, 0xfa935726), TOBN(0xa38c534d, 0xef20d760)},
+      {TOBN(0x7088e40a, 0x2ff5845b), TOBN(0xe5bb40bd, 0xbd78177f),
+       TOBN(0x4f06a7a8, 0x857f9920), TOBN(0xe3cc3e50, 0xe968f05d)}},
+     {{TOBN(0x1d68b7fe, 0xe5682d26), TOBN(0x5206f76f, 0xaec7f87c),
+       TOBN(0x41110530, 0x041951ab), TOBN(0x58ec52c1, 0xd4b5a71a)},
+      {TOBN(0xf3488f99, 0x0f75cf9a), TOBN(0xf411951f, 0xba82d0d5),
+       TOBN(0x27ee75be, 0x618895ab), TOBN(0xeae060d4, 0x6d8aab14)}},
+     {{TOBN(0x9ae1df73, 0x7fb54dc2), TOBN(0x1f3e391b, 0x25963649),
+       TOBN(0x242ec32a, 0xfe055081), TOBN(0x5bd450ef, 0x8491c9bd)},
+      {TOBN(0x367efc67, 0x981eb389), TOBN(0xed7e1928, 0x3a0550d5),
+       TOBN(0x362e776b, 0xab3ce75c), TOBN(0xe890e308, 0x1f24c523)}},
+     {{TOBN(0xb961b682, 0xfeccef76), TOBN(0x8b8e11f5, 0x8bba6d92),
+       TOBN(0x8f2ccc4c, 0x2b2375c4), TOBN(0x0d7f7a52, 0xe2f86cfa)},
+      {TOBN(0xfd94d30a, 0x9efe5633), TOBN(0x2d8d246b, 0x5451f934),
+       TOBN(0x2234c6e3, 0x244e6a00), TOBN(0xde2b5b0d, 0xddec8c50)}},
+     {{TOBN(0x2ce53c5a, 0xbf776f5b), TOBN(0x6f724071, 0x60357b05),
+       TOBN(0xb2593717, 0x71bf3f7a), TOBN(0x87d2501c, 0x440c4a9f)},
+      {TOBN(0x440552e1, 0x87b05340), TOBN(0xb7bf7cc8, 0x21624c32),
+       TOBN(0x4155a6ce, 0x22facddb), TOBN(0x5a4228cb, 0x889837ef)}},
+     {{TOBN(0xef87d6d6, 0xfd4fd671), TOBN(0xa233687e, 0xc2daa10e),
+       TOBN(0x75622244, 0x03c0eb96), TOBN(0x7632d184, 0x8bf19be6)},
+      {TOBN(0x05d0f8e9, 0x40735ff4), TOBN(0x3a3e6e13, 0xc00931f1),
+       TOBN(0x31ccde6a, 0xdafe3f18), TOBN(0xf381366a, 0xcfe51207)}},
+     {{TOBN(0x24c222a9, 0x60167d92), TOBN(0x62f9d6f8, 0x7529f18c),
+       TOBN(0x412397c0, 0x0353b114), TOBN(0x334d89dc, 0xef808043)},
+      {TOBN(0xd9ec63ba, 0x2a4383ce), TOBN(0xcec8e937, 0x5cf92ba0),
+       TOBN(0xfb8b4288, 0xc8be74c0), TOBN(0x67d6912f, 0x105d4391)}},
+     {{TOBN(0x7b996c46, 0x1b913149), TOBN(0x36aae2ef, 0x3a4e02da),
+       TOBN(0xb68aa003, 0x972de594), TOBN(0x284ec70d, 0x4ec6d545)},
+      {TOBN(0xf3d2b2d0, 0x61391d54), TOBN(0x69c5d5d6, 0xfe114e92),
+       TOBN(0xbe0f00b5, 0xb4482dff), TOBN(0xe1596fa5, 0xf5bf33c5)}},
+     {{TOBN(0x10595b56, 0x96a71cba), TOBN(0x944938b2, 0xfdcadeb7),
+       TOBN(0xa282da4c, 0xfccd8471), TOBN(0x98ec05f3, 0x0d37bfe1)},
+      {TOBN(0xe171ce1b, 0x0698304a), TOBN(0x2d691444, 0x21bdf79b),
+       TOBN(0xd0cd3b74, 0x1b21dec1), TOBN(0x712ecd8b, 0x16a15f71)}},
+     {{TOBN(0x8d4c00a7, 0x00fd56e1), TOBN(0x02ec9692, 0xf9527c18),
+       TOBN(0x21c44937, 0x4a3e42e1), TOBN(0x9176fbab, 0x1392ae0a)},
+      {TOBN(0x8726f1ba, 0x44b7b618), TOBN(0xb4d7aae9, 0xf1de491c),
+       TOBN(0xf91df7b9, 0x07b582c0), TOBN(0x7e116c30, 0xef60aa3a)}},
+     {{TOBN(0x99270f81, 0x466265d7), TOBN(0xb15b6fe2, 0x4df7adf0),
+       TOBN(0xfe33b2d3, 0xf9738f7f), TOBN(0x48553ab9, 0xd6d70f95)},
+      {TOBN(0x2cc72ac8, 0xc21e94db), TOBN(0x795ac38d, 0xbdc0bbee),
+       TOBN(0x0a1be449, 0x2e40478f), TOBN(0x81bd3394, 0x052bde55)}},
+     {{TOBN(0x63c8dbe9, 0x56b3c4f2), TOBN(0x017a99cf, 0x904177cc),
+       TOBN(0x947bbddb, 0x4d010fc1), TOBN(0xacf9b00b, 0xbb2c9b21)},
+      {TOBN(0x2970bc8d, 0x47173611), TOBN(0x1a4cbe08, 0xac7d756f),
+       TOBN(0x06d9f4aa, 0x67d541a2), TOBN(0xa3e8b689, 0x59c2cf44)}},
+     {{TOBN(0xaad066da, 0x4d88f1dd), TOBN(0xc604f165, 0x7ad35dea),
+       TOBN(0x7edc0720, 0x4478ca67), TOBN(0xa10dfae0, 0xba02ce06)},
+      {TOBN(0xeceb1c76, 0xaf36f4e4), TOBN(0x994b2292, 0xaf3f8f48),
+       TOBN(0xbf9ed77b, 0x77c8a68c), TOBN(0x74f544ea, 0x51744c9d)}},
+     {{TOBN(0x82d05bb9, 0x8113a757), TOBN(0x4ef2d2b4, 0x8a9885e4),
+       TOBN(0x1e332be5, 0x1aa7865f), TOBN(0x22b76b18, 0x290d1a52)},
+      {TOBN(0x308a2310, 0x44351683), TOBN(0x9d861896, 0xa3f22840),
+       TOBN(0x5959ddcd, 0x841ed947), TOBN(0x0def0c94, 0x154b73bf)}},
+     {{TOBN(0xf0105417, 0x4c7c15e0), TOBN(0x539bfb02, 0x3a277c32),
+       TOBN(0xe699268e, 0xf9dccf5f), TOBN(0x9f5796a5, 0x0247a3bd)},
+      {TOBN(0x8b839de8, 0x4f157269), TOBN(0xc825c1e5, 0x7a30196b),
+       TOBN(0x6ef0aabc, 0xdc8a5a91), TOBN(0xf4a8ce6c, 0x498b7fe6)}},
+     {{TOBN(0x1cce35a7, 0x70cbac78), TOBN(0x83488e9b, 0xf6b23958),
+       TOBN(0x0341a070, 0xd76cb011), TOBN(0xda6c9d06, 0xae1b2658)},
+      {TOBN(0xb701fb30, 0xdd648c52), TOBN(0x994ca02c, 0x52fb9fd1),
+       TOBN(0x06933117, 0x6f563086), TOBN(0x3d2b8100, 0x17856bab)}},
+     {{TOBN(0xe89f48c8, 0x5963a46e), TOBN(0x658ab875, 0xa99e61c7),
+       TOBN(0x6e296f87, 0x4b8517b4), TOBN(0x36c4fcdc, 0xfc1bc656)},
+      {TOBN(0xde5227a1, 0xa3906def), TOBN(0x9fe95f57, 0x62418945),
+       TOBN(0x20c91e81, 0xfdd96cde), TOBN(0x5adbe47e, 0xda4480de)}},
+     {{TOBN(0xa009370f, 0x396de2b6), TOBN(0x98583d4b, 0xf0ecc7bd),
+       TOBN(0xf44f6b57, 0xe51d0672), TOBN(0x03d6b078, 0x556b1984)},
+      {TOBN(0x27dbdd93, 0xb0b64912), TOBN(0x9b3a3434, 0x15687b09),
+       TOBN(0x0dba6461, 0x51ec20a9), TOBN(0xec93db7f, 0xff28187c)}},
+     {{TOBN(0x00ff8c24, 0x66e48bdd), TOBN(0x2514f2f9, 0x11ccd78e),
+       TOBN(0xeba11f4f, 0xe1250603), TOBN(0x8a22cd41, 0x243fa156)},
+      {TOBN(0xa4e58df4, 0xb283e4c6), TOBN(0x78c29859, 0x8b39783f),
+       TOBN(0x5235aee2, 0xa5259809), TOBN(0xc16284b5, 0x0e0227dd)}},
+     {{TOBN(0xa5f57916, 0x1338830d), TOBN(0x6d4b8a6b, 0xd2123fca),
+       TOBN(0x236ea68a, 0xf9c546f8), TOBN(0xc1d36873, 0xfa608d36)},
+      {TOBN(0xcd76e495, 0x8d436d13), TOBN(0xd4d9c221, 0x8fb080af),
+       TOBN(0x665c1728, 0xe8ad3fb5), TOBN(0xcf1ebe4d, 0xb3d572e0)}},
+     {{TOBN(0xa7a8746a, 0x584c5e20), TOBN(0x267e4ea1, 0xb9dc7035),
+       TOBN(0x593a15cf, 0xb9548c9b), TOBN(0x5e6e2135, 0x4bd012f3)},
+      {TOBN(0xdf31cc6a, 0x8c8f936e), TOBN(0x8af84d04, 0xb5c241dc),
+       TOBN(0x63990a6f, 0x345efb86), TOBN(0x6fef4e61, 0xb9b962cb)}}},
+    {{{TOBN(0xf6368f09, 0x25722608), TOBN(0x131260db, 0x131cf5c6),
+       TOBN(0x40eb353b, 0xfab4f7ac), TOBN(0x85c78880, 0x37eee829)},
+      {TOBN(0x4c1581ff, 0xc3bdf24e), TOBN(0x5bff75cb, 0xf5c3c5a8),
+       TOBN(0x35e8c83f, 0xa14e6f40), TOBN(0xb81d1c0f, 0x0295e0ca)}},
+     {{TOBN(0xfcde7cc8, 0xf43a730f), TOBN(0xe89b6f3c, 0x33ab590e),
+       TOBN(0xc823f529, 0xad03240b), TOBN(0x82b79afe, 0x98bea5db)},
+      {TOBN(0x568f2856, 0x962fe5de), TOBN(0x0c590adb, 0x60c591f3),
+       TOBN(0x1fc74a14, 0x4a28a858), TOBN(0x3b662498, 0xb3203f4c)}},
+     {{TOBN(0x91e3cf0d, 0x6c39765a), TOBN(0xa2db3acd, 0xac3cca0b),
+       TOBN(0x288f2f08, 0xcb953b50), TOBN(0x2414582c, 0xcf43cf1a)},
+      {TOBN(0x8dec8bbc, 0x60eee9a8), TOBN(0x54c79f02, 0x729aa042),
+       TOBN(0xd81cd5ec, 0x6532f5d5), TOBN(0xa672303a, 0xcf82e15f)}},
+     {{TOBN(0x376aafa8, 0x719c0563), TOBN(0xcd8ad2dc, 0xbc5fc79f),
+       TOBN(0x303fdb9f, 0xcb750cd3), TOBN(0x14ff052f, 0x4418b08e)},
+      {TOBN(0xf75084cf, 0x3e2d6520), TOBN(0x7ebdf0f8, 0x144ed509),
+       TOBN(0xf43bf0f2, 0xd3f25b98), TOBN(0x86ad71cf, 0xa354d837)}},
+     {{TOBN(0xb827fe92, 0x26f43572), TOBN(0xdfd3ab5b, 0x5d824758),
+       TOBN(0x315dd23a, 0x539094c1), TOBN(0x85c0e37a, 0x66623d68)},
+      {TOBN(0x575c7972, 0x7be19ae0), TOBN(0x616a3396, 0xdf0d36b5),
+       TOBN(0xa1ebb3c8, 0x26b1ff7e), TOBN(0x635b9485, 0x140ad453)}},
+     {{TOBN(0x92bf3cda, 0xda430c0b), TOBN(0x4702850e, 0x3a96dac6),
+       TOBN(0xc91cf0a5, 0x15ac326a), TOBN(0x95de4f49, 0xab8c25e4)},
+      {TOBN(0xb01bad09, 0xe265c17c), TOBN(0x24e45464, 0x087b3881),
+       TOBN(0xd43e583c, 0xe1fac5ca), TOBN(0xe17cb318, 0x6ead97a6)}},
+     {{TOBN(0x6cc39243, 0x74dcec46), TOBN(0x33cfc02d, 0x54c2b73f),
+       TOBN(0x82917844, 0xf26cd99c), TOBN(0x8819dd95, 0xd1773f89)},
+      {TOBN(0x09572aa6, 0x0871f427), TOBN(0x8e0cf365, 0xf6f01c34),
+       TOBN(0x7fa52988, 0xbff1f5af), TOBN(0x4eb357ea, 0xe75e8e50)}},
+     {{TOBN(0xd9d0c8c4, 0x868af75d), TOBN(0xd7325cff, 0x45c8c7ea),
+       TOBN(0xab471996, 0xcc81ecb0), TOBN(0xff5d55f3, 0x611824ed)},
+      {TOBN(0xbe314541, 0x1977a0ee), TOBN(0x5085c4c5, 0x722038c6),
+       TOBN(0x2d5335bf, 0xf94bb495), TOBN(0x894ad8a6, 0xc8e2a082)}},
+     {{TOBN(0x5c3e2341, 0xada35438), TOBN(0xf4a9fc89, 0x049b8c4e),
+       TOBN(0xbeeb355a, 0x9f17cf34), TOBN(0x3f311e0e, 0x6c91fe10)},
+      {TOBN(0xc2d20038, 0x92ab9891), TOBN(0x257bdcc1, 0x3e8ce9a9),
+       TOBN(0x1b2d9789, 0x88c53bee), TOBN(0x927ce89a, 0xcdba143a)}},
+     {{TOBN(0xb0a32cca, 0x523db280), TOBN(0x5c889f8a, 0x50d43783),
+       TOBN(0x503e04b3, 0x4897d16f), TOBN(0x8cdb6e78, 0x08f5f2e8)},
+      {TOBN(0x6ab91cf0, 0x179c8e74), TOBN(0xd8874e52, 0x48211d60),
+       TOBN(0xf948d4d5, 0xea851200), TOBN(0x4076d41e, 0xe6f9840a)}},
+     {{TOBN(0xc20e263c, 0x47b517ea), TOBN(0x79a448fd, 0x30685e5e),
+       TOBN(0xe55f6f78, 0xf90631a0), TOBN(0x88a790b1, 0xa79e6346)},
+      {TOBN(0x62160c7d, 0x80969fe8), TOBN(0x54f92fd4, 0x41491bb9),
+       TOBN(0xa6645c23, 0x5c957526), TOBN(0xf44cc5ae, 0xbea3ce7b)}},
+     {{TOBN(0xf7628327, 0x8b1e68b7), TOBN(0xc731ad7a, 0x303f29d3),
+       TOBN(0xfe5a9ca9, 0x57d03ecb), TOBN(0x96c0d50c, 0x41bc97a7)},
+      {TOBN(0xc4669fe7, 0x9b4f7f24), TOBN(0xfdd781d8, 0x3d9967ef),
+       TOBN(0x7892c7c3, 0x5d2c208d), TOBN(0x8bf64f7c, 0xae545cb3)}},
+     {{TOBN(0xc01f862c, 0x467be912), TOBN(0xf4c85ee9, 0xc73d30cc),
+       TOBN(0x1fa6f4be, 0x6ab83ec7), TOBN(0xa07a3c1c, 0x4e3e3cf9)},
+      {TOBN(0x87f8ef45, 0x0c00beb3), TOBN(0x30e2c2b3, 0x000d4c3e),
+       TOBN(0x1aa00b94, 0xfe08bf5b), TOBN(0x32c133aa, 0x9224ef52)}},
+     {{TOBN(0x38df16bb, 0x32e5685d), TOBN(0x68a9e069, 0x58e6f544),
+       TOBN(0x495aaff7, 0xcdc5ebc6), TOBN(0xf894a645, 0x378b135f)},
+      {TOBN(0xf316350a, 0x09e27ecf), TOBN(0xeced201e, 0x58f7179d),
+       TOBN(0x2eec273c, 0xe97861ba), TOBN(0x47ec2cae, 0xd693be2e)}},
+     {{TOBN(0xfa4c97c4, 0xf68367ce), TOBN(0xe4f47d0b, 0xbe5a5755),
+       TOBN(0x17de815d, 0xb298a979), TOBN(0xd7eca659, 0xc177dc7d)},
+      {TOBN(0x20fdbb71, 0x49ded0a3), TOBN(0x4cb2aad4, 0xfb34d3c5),
+       TOBN(0x2cf31d28, 0x60858a33), TOBN(0x3b6873ef, 0xa24aa40f)}},
+     {{TOBN(0x540234b2, 0x2c11bb37), TOBN(0x2d0366dd, 0xed4c74a3),
+       TOBN(0xf9a968da, 0xeec5f25d), TOBN(0x36601068, 0x67b63142)},
+      {TOBN(0x07cd6d2c, 0x68d7b6d4), TOBN(0xa8f74f09, 0x0c842942),
+       TOBN(0xe2751404, 0x7768b1ee), TOBN(0x4b5f7e89, 0xfe62aee4)}},
+     {{TOBN(0xc6a77177, 0x89070d26), TOBN(0xa1f28e4e, 0xdd1c8bc7),
+       TOBN(0xea5f4f06, 0x469e1f17), TOBN(0x78fc242a, 0xfbdb78e0)},
+      {TOBN(0xc9c7c592, 0x8b0588f1), TOBN(0xb6b7a0fd, 0x1535921e),
+       TOBN(0xcc5bdb91, 0xbde5ae35), TOBN(0xb42c485e, 0x12ff1864)}},
+     {{TOBN(0xa1113e13, 0xdbab98aa), TOBN(0xde9d469b, 0xa17b1024),
+       TOBN(0x23f48b37, 0xc0462d3a), TOBN(0x3752e537, 0x7c5c078d)},
+      {TOBN(0xe3a86add, 0x15544eb9), TOBN(0xf013aea7, 0x80fba279),
+       TOBN(0x8b5bb76c, 0xf22001b5), TOBN(0xe617ba14, 0xf02891ab)}},
+     {{TOBN(0xd39182a6, 0x936219d3), TOBN(0x5ce1f194, 0xae51cb19),
+       TOBN(0xc78f8598, 0xbf07a74c), TOBN(0x6d7158f2, 0x22cbf1bc)},
+      {TOBN(0x3b846b21, 0xe300ce18), TOBN(0x35fba630, 0x2d11275d),
+       TOBN(0x5fe25c36, 0xa0239b9b), TOBN(0xd8beb35d, 0xdf05d940)}},
+     {{TOBN(0x4db02bb0, 0x1f7e320d), TOBN(0x0641c364, 0x6da320ea),
+       TOBN(0x6d95fa5d, 0x821389a3), TOBN(0x92699748, 0x8fcd8e3d)},
+      {TOBN(0x316fef17, 0xceb6c143), TOBN(0x67fcb841, 0xd933762b),
+       TOBN(0xbb837e35, 0x118b17f8), TOBN(0x4b92552f, 0x9fd24821)}},
+     {{TOBN(0xae6bc70e, 0x46aca793), TOBN(0x1cf0b0e4, 0xe579311b),
+       TOBN(0x8dc631be, 0x5802f716), TOBN(0x099bdc6f, 0xbddbee4d)},
+      {TOBN(0xcc352bb2, 0x0caf8b05), TOBN(0xf74d505a, 0x72d63df2),
+       TOBN(0xb9876d4b, 0x91c4f408), TOBN(0x1ce18473, 0x9e229b2d)}},
+     {{TOBN(0x49507597, 0x83abdb4a), TOBN(0x850fbcb6, 0xdee84b18),
+       TOBN(0x6325236e, 0x609e67dc), TOBN(0x04d831d9, 0x9336c6d8)},
+      {TOBN(0x8deaae3b, 0xfa12d45d), TOBN(0xe425f8ce, 0x4746e246),
+       TOBN(0x8004c175, 0x24f5f31e), TOBN(0xaca16d8f, 0xad62c3b7)}},
+     {{TOBN(0x0dc15a6a, 0x9152f934), TOBN(0xf1235e5d, 0xed0e12c1),
+       TOBN(0xc33c06ec, 0xda477dac), TOBN(0x76be8732, 0xb2ea0006)},
+      {TOBN(0xcf3f7831, 0x0c0cd313), TOBN(0x3c524553, 0xa614260d),
+       TOBN(0x31a756f8, 0xcab22d15), TOBN(0x03ee10d1, 0x77827a20)}},
+     {{TOBN(0xd1e059b2, 0x1994ef20), TOBN(0x2a653b69, 0x638ae318),
+       TOBN(0x70d5eb58, 0x2f699010), TOBN(0x279739f7, 0x09f5f84a)},
+      {TOBN(0x5da4663c, 0x8b799336), TOBN(0xfdfdf14d, 0x203c37eb),
+       TOBN(0x32d8a9dc, 0xa1dbfb2d), TOBN(0xab40cff0, 0x77d48f9b)}},
+     {{TOBN(0xc018b383, 0xd20b42d5), TOBN(0xf9a810ef, 0x9f78845f),
+       TOBN(0x40af3753, 0xbdba9df0), TOBN(0xb90bdcfc, 0x131dfdf9)},
+      {TOBN(0x18720591, 0xf01ab782), TOBN(0xc823f211, 0x6af12a88),
+       TOBN(0xa51b80f3, 0x0dc14401), TOBN(0xde248f77, 0xfb2dfbe3)}},
+     {{TOBN(0xef5a44e5, 0x0cafe751), TOBN(0x73997c9c, 0xd4dcd221),
+       TOBN(0x32fd86d1, 0xde854024), TOBN(0xd5b53adc, 0xa09b84bb)},
+      {TOBN(0x008d7a11, 0xdcedd8d1), TOBN(0x406bd1c8, 0x74b32c84),
+       TOBN(0x5d4472ff, 0x05dde8b1), TOBN(0x2e25f2cd, 0xfce2b32f)}},
+     {{TOBN(0xbec0dd5e, 0x29dfc254), TOBN(0x4455fcf6, 0x2b98b267),
+       TOBN(0x0b4d43a5, 0xc72df2ad), TOBN(0xea70e6be, 0x48a75397)},
+      {TOBN(0x2aad6169, 0x5820f3bf), TOBN(0xf410d2dd, 0x9e37f68f),
+       TOBN(0x70fb7dba, 0x7be5ac83), TOBN(0x636bb645, 0x36ec3eec)}},
+     {{TOBN(0x27104ea3, 0x9754e21c), TOBN(0xbc87a3e6, 0x8d63c373),
+       TOBN(0x483351d7, 0x4109db9a), TOBN(0x0fa724e3, 0x60134da7)},
+      {TOBN(0x9ff44c29, 0xb0720b16), TOBN(0x2dd0cf13, 0x06aceead),
+       TOBN(0x5942758c, 0xe26929a6), TOBN(0x96c5db92, 0xb766a92b)}},
+     {{TOBN(0xcec7d4c0, 0x5f18395e), TOBN(0xd3f22744, 0x1f80d032),
+       TOBN(0x7a68b37a, 0xcb86075b), TOBN(0x074764dd, 0xafef92db)},
+      {TOBN(0xded1e950, 0x7bc7f389), TOBN(0xc580c850, 0xb9756460),
+       TOBN(0xaeeec2a4, 0x7da48157), TOBN(0x3f0b4e7f, 0x82c587b3)}},
+     {{TOBN(0x231c6de8, 0xa9f19c53), TOBN(0x5717bd73, 0x6974e34e),
+       TOBN(0xd9e1d216, 0xf1508fa9), TOBN(0x9f112361, 0xdadaa124)},
+      {TOBN(0x80145e31, 0x823b7348), TOBN(0x4dd8f0d5, 0xac634069),
+       TOBN(0xe3d82fc7, 0x2297c258), TOBN(0x276fcfee, 0x9cee7431)}},
+     {{TOBN(0x8eb61b5e, 0x2bc0aea9), TOBN(0x4f668fd5, 0xde329431),
+       TOBN(0x03a32ab1, 0x38e4b87e), TOBN(0xe1374517, 0x73d0ef0b)},
+      {TOBN(0x1a46f7e6, 0x853ac983), TOBN(0xc3bdf42e, 0x68e78a57),
+       TOBN(0xacf20785, 0x2ea96dd1), TOBN(0xa10649b9, 0xf1638460)}},
+     {{TOBN(0xf2369f0b, 0x879fbbed), TOBN(0x0ff0ae86, 0xda9d1869),
+       TOBN(0x5251d759, 0x56766f45), TOBN(0x4984d8c0, 0x2be8d0fc)},
+      {TOBN(0x7ecc95a6, 0xd21008f0), TOBN(0x29bd54a0, 0x3a1a1c49),
+       TOBN(0xab9828c5, 0xd26c50f3), TOBN(0x32c0087c, 0x51d0d251)}},
+     {{TOBN(0x9bac3ce6, 0x0c1cdb26), TOBN(0xcd94d947, 0x557ca205),
+       TOBN(0x1b1bd598, 0x9db1fdcd), TOBN(0x0eda0108, 0xa3d8b149)},
+      {TOBN(0x95066610, 0x56152fcc), TOBN(0xc2f037e6, 0xe7192b33),
+       TOBN(0xdeffb41a, 0xc92e05a4), TOBN(0x1105f6c2, 0xc2f6c62e)}},
+     {{TOBN(0x68e73500, 0x8733913c), TOBN(0xcce86163, 0x3f3adc40),
+       TOBN(0xf407a942, 0x38a278e9), TOBN(0xd13c1b9d, 0x2ab21292)},
+      {TOBN(0x93ed7ec7, 0x1c74cf5c), TOBN(0x8887dc48, 0xf1a4c1b4),
+       TOBN(0x3830ff30, 0x4b3a11f1), TOBN(0x358c5a3c, 0x58937cb6)}},
+     {{TOBN(0x027dc404, 0x89022829), TOBN(0x40e93977, 0x3b798f79),
+       TOBN(0x90ad3337, 0x38be6ead), TOBN(0x9c23f6bc, 0xf34c0a5d)},
+      {TOBN(0xd1711a35, 0xfbffd8bb), TOBN(0x60fcfb49, 0x1949d3dd),
+       TOBN(0x09c8ef4b, 0x7825d93a), TOBN(0x24233cff, 0xa0a8c968)}},
+     {{TOBN(0x67ade46c, 0xe6d982af), TOBN(0xebb6bf3e, 0xe7544d7c),
+       TOBN(0xd6b9ba76, 0x3d8bd087), TOBN(0x46fe382d, 0x4dc61280)},
+      {TOBN(0xbd39a7e8, 0xb5bdbd75), TOBN(0xab381331, 0xb8f228fe),
+       TOBN(0x0709a77c, 0xce1c4300), TOBN(0x6a247e56, 0xf337ceac)}},
+     {{TOBN(0x8f34f21b, 0x636288be), TOBN(0x9dfdca74, 0xc8a7c305),
+       TOBN(0x6decfd1b, 0xea919e04), TOBN(0xcdf2688d, 0x8e1991f8)},
+      {TOBN(0xe607df44, 0xd0f8a67e), TOBN(0xd985df4b, 0x0b58d010),
+       TOBN(0x57f834c5, 0x0c24f8f4), TOBN(0xe976ef56, 0xa0bf01ae)}},
+     {{TOBN(0x536395ac, 0xa1c32373), TOBN(0x351027aa, 0x734c0a13),
+       TOBN(0xd2f1b5d6, 0x5e6bd5bc), TOBN(0x2b539e24, 0x223debed)},
+      {TOBN(0xd4994cec, 0x0eaa1d71), TOBN(0x2a83381d, 0x661dcf65),
+       TOBN(0x5f1aed2f, 0x7b54c740), TOBN(0x0bea3fa5, 0xd6dda5ee)}},
+     {{TOBN(0x9d4fb684, 0x36cc6134), TOBN(0x8eb9bbf3, 0xc0a443dd),
+       TOBN(0xfc500e2e, 0x383b7d2a), TOBN(0x7aad621c, 0x5b775257)},
+      {TOBN(0x69284d74, 0x0a8f7cc0), TOBN(0xe820c2ce, 0x07562d65),
+       TOBN(0xbf9531b9, 0x499758ee), TOBN(0x73e95ca5, 0x6ee0cc2d)}},
+     {{TOBN(0xf61790ab, 0xfbaf50a5), TOBN(0xdf55e76b, 0x684e0750),
+       TOBN(0xec516da7, 0xf176b005), TOBN(0x575553bb, 0x7a2dddc7)},
+      {TOBN(0x37c87ca3, 0x553afa73), TOBN(0x315f3ffc, 0x4d55c251),
+       TOBN(0xe846442a, 0xaf3e5d35), TOBN(0x61b91149, 0x6495ff28)}},
+     {{TOBN(0x23cc95d3, 0xfa326dc3), TOBN(0x1df4da1f, 0x18fc2cea),
+       TOBN(0x24bf9adc, 0xd0a37d59), TOBN(0xb6710053, 0x320d6e1e)},
+      {TOBN(0x96f9667e, 0x618344d1), TOBN(0xcc7ce042, 0xa06445af),
+       TOBN(0xa02d8514, 0xd68dbc3a), TOBN(0x4ea109e4, 0x280b5a5b)}},
+     {{TOBN(0x5741a7ac, 0xb40961bf), TOBN(0x4ada5937, 0x6aa56bfa),
+       TOBN(0x7feb9145, 0x02b765d1), TOBN(0x561e97be, 0xe6ad1582)},
+      {TOBN(0xbbc4a5b6, 0xda3982f5), TOBN(0x0c2659ed, 0xb546f468),
+       TOBN(0xb8e7e6aa, 0x59612d20), TOBN(0xd83dfe20, 0xac19e8e0)}},
+     {{TOBN(0x8530c45f, 0xb835398c), TOBN(0x6106a8bf, 0xb38a41c2),
+       TOBN(0x21e8f9a6, 0x35f5dcdb), TOBN(0x39707137, 0xcae498ed)},
+      {TOBN(0x70c23834, 0xd8249f00), TOBN(0x9f14b58f, 0xab2537a0),
+       TOBN(0xd043c365, 0x5f61c0c2), TOBN(0xdc5926d6, 0x09a194a7)}},
+     {{TOBN(0xddec0339, 0x8e77738a), TOBN(0xd07a63ef, 0xfba46426),
+       TOBN(0x2e58e79c, 0xee7f6e86), TOBN(0xe59b0459, 0xff32d241)},
+      {TOBN(0xc5ec84e5, 0x20fa0338), TOBN(0x97939ac8, 0xeaff5ace),
+       TOBN(0x0310a4e3, 0xb4a38313), TOBN(0x9115fba2, 0x8f9d9885)}},
+     {{TOBN(0x8dd710c2, 0x5fadf8c3), TOBN(0x66be38a2, 0xce19c0e2),
+       TOBN(0xd42a279c, 0x4cfe5022), TOBN(0x597bb530, 0x0e24e1b8)},
+      {TOBN(0x3cde86b7, 0xc153ca7f), TOBN(0xa8d30fb3, 0x707d63bd),
+       TOBN(0xac905f92, 0xbd60d21e), TOBN(0x98e7ffb6, 0x7b9a54ab)}},
+     {{TOBN(0xd7147df8, 0xe9726a30), TOBN(0xb5e216ff, 0xafce3533),
+       TOBN(0xb550b799, 0x2ff1ec40), TOBN(0x6b613b87, 0xa1e953fd)},
+      {TOBN(0x87b88dba, 0x792d5610), TOBN(0x2ee1270a, 0xa190fbe1),
+       TOBN(0x02f4e2dc, 0x2ef581da), TOBN(0x016530e4, 0xeff82a95)}},
+     {{TOBN(0xcbb93dfd, 0x8fd6ee89), TOBN(0x16d3d986, 0x46848fff),
+       TOBN(0x600eff24, 0x1da47adf), TOBN(0x1b9754a0, 0x0ad47a71)},
+      {TOBN(0x8f9266df, 0x70c33b98), TOBN(0xaadc87ae, 0xdf34186e),
+       TOBN(0x0d2ce8e1, 0x4ad24132), TOBN(0x8a47cbfc, 0x19946eba)}},
+     {{TOBN(0x47feeb66, 0x62b5f3af), TOBN(0xcefab561, 0x0abb3734),
+       TOBN(0x449de60e, 0x19f35cb1), TOBN(0x39f8db14, 0x157f0eb9)},
+      {TOBN(0xffaecc5b, 0x3c61bfd6), TOBN(0xa5a4d41d, 0x41216703),
+       TOBN(0x7f8fabed, 0x224e1cc2), TOBN(0x0d5a8186, 0x871ad953)}},
+     {{TOBN(0xf10774f7, 0xd22da9a9), TOBN(0x45b8a678, 0xcc8a9b0d),
+       TOBN(0xd9c2e722, 0xbdc32cff), TOBN(0xbf71b5f5, 0x337202a5)},
+      {TOBN(0x95c57f2f, 0x69fc4db9), TOBN(0xb6dad34c, 0x765d01e1),
+       TOBN(0x7e0bd13f, 0xcb904635), TOBN(0x61751253, 0x763a588c)}},
+     {{TOBN(0xd85c2997, 0x81af2c2d), TOBN(0xc0f7d9c4, 0x81b9d7da),
+       TOBN(0x838a34ae, 0x08533e8d), TOBN(0x15c4cb08, 0x311d8311)},
+      {TOBN(0x97f83285, 0x8e121e14), TOBN(0xeea7dc1e, 0x85000a5f),
+       TOBN(0x0c6059b6, 0x5d256274), TOBN(0xec9beace, 0xb95075c0)}},
+     {{TOBN(0x173daad7, 0x1df97828), TOBN(0xbf851cb5, 0xa8937877),
+       TOBN(0xb083c594, 0x01646f3c), TOBN(0x3bad30cf, 0x50c6d352)},
+      {TOBN(0xfeb2b202, 0x496bbcea), TOBN(0x3cf9fd4f, 0x18a1e8ba),
+       TOBN(0xd26de7ff, 0x1c066029), TOBN(0x39c81e9e, 0x4e9ed4f8)}},
+     {{TOBN(0xd8be0cb9, 0x7b390d35), TOBN(0x01df2bbd, 0x964aab27),
+       TOBN(0x3e8c1a65, 0xc3ef64f8), TOBN(0x567291d1, 0x716ed1dd)},
+      {TOBN(0x95499c6c, 0x5f5406d3), TOBN(0x71fdda39, 0x5ba8e23f),
+       TOBN(0xcfeb320e, 0xd5096ece), TOBN(0xbe7ba92b, 0xca66dd16)}},
+     {{TOBN(0x4608d36b, 0xc6fb5a7d), TOBN(0xe3eea15a, 0x6d2dd0e0),
+       TOBN(0x75b0a3eb, 0x8f97a36a), TOBN(0xf59814cc, 0x1c83de1e)},
+      {TOBN(0x56c9c5b0, 0x1c33c23f), TOBN(0xa96c1da4, 0x6faa4136),
+       TOBN(0x46bf2074, 0xde316551), TOBN(0x3b866e7b, 0x1f756c8f)}},
+     {{TOBN(0x727727d8, 0x1495ed6b), TOBN(0xb2394243, 0xb682dce7),
+       TOBN(0x8ab8454e, 0x758610f3), TOBN(0xc243ce84, 0x857d72a4)},
+      {TOBN(0x7b320d71, 0xdbbf370f), TOBN(0xff9afa37, 0x78e0f7ca),
+       TOBN(0x0119d1e0, 0xea7b523f), TOBN(0xb997f8cb, 0x058c7d42)}},
+     {{TOBN(0x285bcd2a, 0x37bbb184), TOBN(0x51dcec49, 0xa45d1fa6),
+       TOBN(0x6ade3b64, 0xe29634cb), TOBN(0x080c94a7, 0x26b86ef1)},
+      {TOBN(0xba583db1, 0x2283fbe3), TOBN(0x902bddc8, 0x5a9315ed),
+       TOBN(0x07c1ccb3, 0x86964bec), TOBN(0x78f4eacf, 0xb6258301)}},
+     {{TOBN(0x4bdf3a49, 0x56f90823), TOBN(0xba0f5080, 0x741d777b),
+       TOBN(0x091d71c3, 0xf38bf760), TOBN(0x9633d50f, 0x9b625b02)},
+      {TOBN(0x03ecb743, 0xb8c9de61), TOBN(0xb4751254, 0x5de74720),
+       TOBN(0x9f9defc9, 0x74ce1cb2), TOBN(0x774a4f6a, 0x00bd32ef)}},
+     {{TOBN(0xaca385f7, 0x73848f22), TOBN(0x53dad716, 0xf3f8558e),
+       TOBN(0xab7b34b0, 0x93c471f9), TOBN(0xf530e069, 0x19644bc7)},
+      {TOBN(0x3d9fb1ff, 0xdd59d31a), TOBN(0x4382e0df, 0x08daa795),
+       TOBN(0x165c6f4b, 0xd5cc88d7), TOBN(0xeaa392d5, 0x4a18c900)}},
+     {{TOBN(0x94203c67, 0x648024ee), TOBN(0x188763f2, 0x8c2fabcd),
+       TOBN(0xa80f87ac, 0xbbaec835), TOBN(0x632c96e0, 0xf29d8d54)},
+      {TOBN(0x29b0a60e, 0x4c00a95e), TOBN(0x2ef17f40, 0xe011e9fa),
+       TOBN(0xf6c0e1d1, 0x15b77223), TOBN(0xaaec2c62, 0x14b04e32)}},
+     {{TOBN(0xd35688d8, 0x3d84e58c), TOBN(0x2af5094c, 0x958571db),
+       TOBN(0x4fff7e19, 0x760682a6), TOBN(0x4cb27077, 0xe39a407c)},
+      {TOBN(0x0f59c547, 0x4ff0e321), TOBN(0x169f34a6, 0x1b34c8ff),
+       TOBN(0x2bff1096, 0x52bc1ba7), TOBN(0xa25423b7, 0x83583544)}},
+     {{TOBN(0x5d55d5d5, 0x0ac8b782), TOBN(0xff6622ec, 0x2db3c892),
+       TOBN(0x48fce741, 0x6b8bb642), TOBN(0x31d6998c, 0x69d7e3dc)},
+      {TOBN(0xdbaf8004, 0xcadcaed0), TOBN(0x801b0142, 0xd81d053c),
+       TOBN(0x94b189fc, 0x59630ec6), TOBN(0x120e9934, 0xaf762c8e)}},
+     {{TOBN(0x53a29aa4, 0xfdc6a404), TOBN(0x19d8e01e, 0xa1909948),
+       TOBN(0x3cfcabf1, 0xd7e89681), TOBN(0x3321a50d, 0x4e132d37)},
+      {TOBN(0xd0496863, 0xe9a86111), TOBN(0x8c0cde61, 0x06a3bc65),
+       TOBN(0xaf866c49, 0xfc9f8eef), TOBN(0x2066350e, 0xff7f5141)}},
+     {{TOBN(0x4f8a4689, 0xe56ddfbd), TOBN(0xea1b0c07, 0xfe32983a),
+       TOBN(0x2b317462, 0x873cb8cb), TOBN(0x658deddc, 0x2d93229f)},
+      {TOBN(0x65efaf4d, 0x0f64ef58), TOBN(0xfe43287d, 0x730cc7a8),
+       TOBN(0xaebc0c72, 0x3d047d70), TOBN(0x92efa539, 0xd92d26c9)}},
+     {{TOBN(0x06e78457, 0x94b56526), TOBN(0x415cb80f, 0x0961002d),
+       TOBN(0x89e5c565, 0x76dcb10f), TOBN(0x8bbb6982, 0xff9259fe)},
+      {TOBN(0x4fe8795b, 0x9abc2668), TOBN(0xb5d4f534, 0x1e678fb1),
+       TOBN(0x6601f3be, 0x7b7da2b9), TOBN(0x98da59e2, 0xa13d6805)}},
+     {{TOBN(0x190d8ea6, 0x01799a52), TOBN(0xa20cec41, 0xb86d2952),
+       TOBN(0x3062ffb2, 0x7fff2a7c), TOBN(0x741b32e5, 0x79f19d37)},
+      {TOBN(0xf80d8181, 0x4eb57d47), TOBN(0x7a2d0ed4, 0x16aef06b),
+       TOBN(0x09735fb0, 0x1cecb588), TOBN(0x1641caaa, 0xc6061f5b)}}},
+    {{{TOBN(0x7f99824f, 0x20151427), TOBN(0x206828b6, 0x92430206),
+       TOBN(0xaa9097d7, 0xe1112357), TOBN(0xacf9a2f2, 0x09e414ec)},
+      {TOBN(0xdbdac9da, 0x27915356), TOBN(0x7e0734b7, 0x001efee3),
+       TOBN(0x54fab5bb, 0xd2b288e2), TOBN(0x4c630fc4, 0xf62dd09c)}},
+     {{TOBN(0x8537107a, 0x1ac2703b), TOBN(0xb49258d8, 0x6bc857b5),
+       TOBN(0x57df14de, 0xbcdaccd1), TOBN(0x24ab68d7, 0xc4ae8529)},
+      {TOBN(0x7ed8b5d4, 0x734e59d0), TOBN(0x5f8740c8, 0xc495cc80),
+       TOBN(0x84aedd5a, 0x291db9b3), TOBN(0x80b360f8, 0x4fb995be)}},
+     {{TOBN(0xae915f5d, 0x5fa067d1), TOBN(0x4134b57f, 0x9668960c),
+       TOBN(0xbd3656d6, 0xa48edaac), TOBN(0xdac1e3e4, 0xfc1d7436)},
+      {TOBN(0x674ff869, 0xd81fbb26), TOBN(0x449ed3ec, 0xb26c33d4),
+       TOBN(0x85138705, 0xd94203e8), TOBN(0xccde538b, 0xbeeb6f4a)}},
+     {{TOBN(0x55d5c68d, 0xa61a76fa), TOBN(0x598b441d, 0xca1554dc),
+       TOBN(0xd39923b9, 0x773b279c), TOBN(0x33331d3c, 0x36bf9efc)},
+      {TOBN(0x2d4c848e, 0x298de399), TOBN(0xcfdb8e77, 0xa1a27f56),
+       TOBN(0x94c855ea, 0x57b8ab70), TOBN(0xdcdb9dae, 0x6f7879ba)}},
+     {{TOBN(0x7bdff8c2, 0x019f2a59), TOBN(0xb3ce5bb3, 0xcb4fbc74),
+       TOBN(0xea907f68, 0x8a9173dd), TOBN(0x6cd3d0d3, 0x95a75439)},
+      {TOBN(0x92ecc4d6, 0xefed021c), TOBN(0x09a9f9b0, 0x6a77339a),
+       TOBN(0x87ca6b15, 0x7188c64a), TOBN(0x10c29968, 0x44899158)}},
+     {{TOBN(0x5859a229, 0xed6e82ef), TOBN(0x16f338e3, 0x65ebaf4e),
+       TOBN(0x0cd31387, 0x5ead67ae), TOBN(0x1c73d228, 0x54ef0bb4)},
+      {TOBN(0x4cb55131, 0x74a5c8c7), TOBN(0x01cd2970, 0x7f69ad6a),
+       TOBN(0xa04d00dd, 0xe966f87e), TOBN(0xd96fe447, 0x0b7b0321)}},
+     {{TOBN(0x342ac06e, 0x88fbd381), TOBN(0x02cd4a84, 0x5c35a493),
+       TOBN(0xe8fa89de, 0x54f1bbcd), TOBN(0x341d6367, 0x2575ed4c)},
+      {TOBN(0xebe357fb, 0xd238202b), TOBN(0x600b4d1a, 0xa984ead9),
+       TOBN(0xc35c9f44, 0x52436ea0), TOBN(0x96fe0a39, 0xa370751b)}},
+     {{TOBN(0x4c4f0736, 0x7f636a38), TOBN(0x9f943fb7, 0x0e76d5cb),
+       TOBN(0xb03510ba, 0xa8b68b8b), TOBN(0xc246780a, 0x9ed07a1f)},
+      {TOBN(0x3c051415, 0x6d549fc2), TOBN(0xc2953f31, 0x607781ca),
+       TOBN(0x955e2c69, 0xd8d95413), TOBN(0xb300fadc, 0x7bd282e3)}},
+     {{TOBN(0x81fe7b50, 0x87e9189f), TOBN(0xdb17375c, 0xf42dda27),
+       TOBN(0x22f7d896, 0xcf0a5904), TOBN(0xa0e57c5a, 0xebe348e6)},
+      {TOBN(0xa61011d3, 0xf40e3c80), TOBN(0xb1189321, 0x8db705c5),
+       TOBN(0x4ed9309e, 0x50fedec3), TOBN(0xdcf14a10, 0x4d6d5c1d)}},
+     {{TOBN(0x056c265b, 0x55691342), TOBN(0xe8e08504, 0x91049dc7),
+       TOBN(0x131329f5, 0xc9bae20a), TOBN(0x96c8b3e8, 0xd9dccdb4)},
+      {TOBN(0x8c5ff838, 0xfb4ee6b4), TOBN(0xfc5a9aeb, 0x41e8ccf0),
+       TOBN(0x7417b764, 0xfae050c6), TOBN(0x0953c3d7, 0x00452080)}},
+     {{TOBN(0x21372682, 0x38dfe7e8), TOBN(0xea417e15, 0x2bb79d4b),
+       TOBN(0x59641f1c, 0x76e7cf2d), TOBN(0x271e3059, 0xea0bcfcc)},
+      {TOBN(0x624c7dfd, 0x7253ecbd), TOBN(0x2f552e25, 0x4fca6186),
+       TOBN(0xcbf84ecd, 0x4d866e9c), TOBN(0x73967709, 0xf68d4610)}},
+     {{TOBN(0xa14b1163, 0xc27901b4), TOBN(0xfd9236e0, 0x899b8bf3),
+       TOBN(0x42b091ec, 0xcbc6da0a), TOBN(0xbb1dac6f, 0x5ad1d297)},
+      {TOBN(0x80e61d53, 0xa91cf76e), TOBN(0x4110a412, 0xd31f1ee7),
+       TOBN(0x2d87c3ba, 0x13efcf77), TOBN(0x1f374bb4, 0xdf450d76)}},
+     {{TOBN(0x5e78e2f2, 0x0d188dab), TOBN(0xe3968ed0, 0xf4b885ef),
+       TOBN(0x46c0568e, 0x7314570f), TOBN(0x31616338, 0x01170521)},
+      {TOBN(0x18e1e7e2, 0x4f0c8afe), TOBN(0x4caa75ff, 0xdeea78da),
+       TOBN(0x82db67f2, 0x7c5d8a51), TOBN(0x36a44d86, 0x6f505370)}},
+     {{TOBN(0xd72c5bda, 0x0333974f), TOBN(0x5db516ae, 0x27a70146),
+       TOBN(0x34705281, 0x210ef921), TOBN(0xbff17a8f, 0x0c9c38e5)},
+      {TOBN(0x78f4814e, 0x12476da1), TOBN(0xc1e16613, 0x33c16980),
+       TOBN(0x9e5b386f, 0x424d4bca), TOBN(0x4c274e87, 0xc85740de)}},
+     {{TOBN(0xb6a9b88d, 0x6c2f5226), TOBN(0x14d1b944, 0x550d7ca8),
+       TOBN(0x580c85fc, 0x1fc41709), TOBN(0xc1da368b, 0x54c6d519)},
+      {TOBN(0x2b0785ce, 0xd5113cf7), TOBN(0x0670f633, 0x5a34708f),
+       TOBN(0x46e23767, 0x15cc3f88), TOBN(0x1b480cfa, 0x50c72c8f)}},
+     {{TOBN(0x20288602, 0x4147519a), TOBN(0xd0981eac, 0x26b372f0),
+       TOBN(0xa9d4a7ca, 0xa785ebc8), TOBN(0xd953c50d, 0xdbdf58e9)},
+      {TOBN(0x9d6361cc, 0xfd590f8f), TOBN(0x72e9626b, 0x44e6c917),
+       TOBN(0x7fd96110, 0x22eb64cf), TOBN(0x863ebb7e, 0x9eb288f3)}},
+     {{TOBN(0x6e6ab761, 0x6aca8ee7), TOBN(0x97d10b39, 0xd7b40358),
+       TOBN(0x1687d377, 0x1e5feb0d), TOBN(0xc83e50e4, 0x8265a27a)},
+      {TOBN(0x8f75a9fe, 0xc954b313), TOBN(0xcc2e8f47, 0x310d1f61),
+       TOBN(0xf5ba81c5, 0x6557d0e0), TOBN(0x25f9680c, 0x3eaf6207)}},
+     {{TOBN(0xf95c6609, 0x4354080b), TOBN(0x5225bfa5, 0x7bf2fe1c),
+       TOBN(0xc5c004e2, 0x5c7d98fa), TOBN(0x3561bf1c, 0x019aaf60)},
+      {TOBN(0x5e6f9f17, 0xba151474), TOBN(0xdec2f934, 0xb04f6eca),
+       TOBN(0x64e368a1, 0x269acb1e), TOBN(0x1332d9e4, 0x0cdda493)}},
+     {{TOBN(0x60d6cf69, 0xdf23de05), TOBN(0x66d17da2, 0x009339a0),
+       TOBN(0x9fcac985, 0x0a693923), TOBN(0xbcf057fc, 0xed7c6a6d)},
+      {TOBN(0xc3c5c8c5, 0xf0b5662c), TOBN(0x25318dd8, 0xdcba4f24),
+       TOBN(0x60e8cb75, 0x082b69ff), TOBN(0x7c23b3ee, 0x1e728c01)}},
+     {{TOBN(0x15e10a0a, 0x097e4403), TOBN(0xcb3d0a86, 0x19854665),
+       TOBN(0x88d8e211, 0xd67d4826), TOBN(0xb39af66e, 0x0b9d2839)},
+      {TOBN(0xa5f94588, 0xbd475ca8), TOBN(0xe06b7966, 0xc077b80b),
+       TOBN(0xfedb1485, 0xda27c26c), TOBN(0xd290d33a, 0xfe0fd5e0)}},
+     {{TOBN(0xa40bcc47, 0xf34fb0fa), TOBN(0xb4760cc8, 0x1fb1ab09),
+       TOBN(0x8fca0993, 0xa273bfe3), TOBN(0x13e4fe07, 0xf70b213c)},
+      {TOBN(0x3bcdb992, 0xfdb05163), TOBN(0x8c484b11, 0x0c2b19b6),
+       TOBN(0x1acb815f, 0xaaf2e3e2), TOBN(0xc6905935, 0xb89ff1b4)}},
+     {{TOBN(0xb2ad6f9d, 0x586e74e1), TOBN(0x488883ad, 0x67b80484),
+       TOBN(0x758aa2c7, 0x369c3ddb), TOBN(0x8ab74e69, 0x9f9afd31)},
+      {TOBN(0x10fc2d28, 0x5e21beb1), TOBN(0x3484518a, 0x318c42f9),
+       TOBN(0x377427dc, 0x53cf40c3), TOBN(0x9de0781a, 0x391bc1d9)}},
+     {{TOBN(0x8faee858, 0x693807e1), TOBN(0xa3865327, 0x4e81ccc7),
+       TOBN(0x02c30ff2, 0x6f835b84), TOBN(0xb604437b, 0x0d3d38d4)},
+      {TOBN(0xb3fc8a98, 0x5ca1823d), TOBN(0xb82f7ec9, 0x03be0324),
+       TOBN(0xee36d761, 0xcf684a33), TOBN(0x5a01df0e, 0x9f29bf7d)}},
+     {{TOBN(0x686202f3, 0x1306583d), TOBN(0x05b10da0, 0x437c622e),
+       TOBN(0xbf9aaa0f, 0x076a7bc8), TOBN(0x25e94efb, 0x8f8f4e43)},
+      {TOBN(0x8a35c9b7, 0xfa3dc26d), TOBN(0xe0e5fb93, 0x96ff03c5),
+       TOBN(0xa77e3843, 0xebc394ce), TOBN(0xcede6595, 0x8361de60)}},
+     {{TOBN(0xd27c22f6, 0xa1993545), TOBN(0xab01cc36, 0x24d671ba),
+       TOBN(0x63fa2877, 0xa169c28e), TOBN(0x925ef904, 0x2eb08376)},
+      {TOBN(0x3b2fa3cf, 0x53aa0b32), TOBN(0xb27beb5b, 0x71c49d7a),
+       TOBN(0xb60e1834, 0xd105e27f), TOBN(0xd6089788, 0x4f68570d)}},
+     {{TOBN(0x23094ce0, 0xd6fbc2ac), TOBN(0x738037a1, 0x815ff551),
+       TOBN(0xda73b1bb, 0x6bef119c), TOBN(0xdcf6c430, 0xeef506ba)},
+      {TOBN(0x00e4fe7b, 0xe3ef104a), TOBN(0xebdd9a2c, 0x0a065628),
+       TOBN(0x853a81c3, 0x8792043e), TOBN(0x22ad6ece, 0xb3b59108)}},
+     {{TOBN(0x9fb813c0, 0x39cd297d), TOBN(0x8ec7e16e, 0x05bda5d9),
+       TOBN(0x2834797c, 0x0d104b96), TOBN(0xcc11a2e7, 0x7c511510)},
+      {TOBN(0x96ca5a53, 0x96ee6380), TOBN(0x054c8655, 0xcea38742),
+       TOBN(0xb5946852, 0xd54dfa7d), TOBN(0x97c422e7, 0x1f4ab207)}},
+     {{TOBN(0xbf907509, 0x0c22b540), TOBN(0x2cde42aa, 0xb7c267d4),
+       TOBN(0xba18f9ed, 0x5ab0d693), TOBN(0x3ba62aa6, 0x6e4660d9)},
+      {TOBN(0xb24bf97b, 0xab9ea96a), TOBN(0x5d039642, 0xe3b60e32),
+       TOBN(0x4e6a4506, 0x7c4d9bd5), TOBN(0x666c5b9e, 0x7ed4a6a4)}},
+     {{TOBN(0xfa3fdcd9, 0x8edbd7cc), TOBN(0x4660bb87, 0xc6ccd753),
+       TOBN(0x9ae90820, 0x21e6b64f), TOBN(0x8a56a713, 0xb36bfb3f)},
+      {TOBN(0xabfce096, 0x5726d47f), TOBN(0x9eed01b2, 0x0b1a9a7f),
+       TOBN(0x30e9cad4, 0x4eb74a37), TOBN(0x7b2524cc, 0x53e9666d)}},
+     {{TOBN(0x6a29683b, 0x8f4b002f), TOBN(0xc2200d7a, 0x41f4fc20),
+       TOBN(0xcf3af47a, 0x3a338acc), TOBN(0x6539a4fb, 0xe7128975)},
+      {TOBN(0xcec31c14, 0xc33c7fcf), TOBN(0x7eb6799b, 0xc7be322b),
+       TOBN(0x119ef4e9, 0x6646f623), TOBN(0x7b7a26a5, 0x54d7299b)}},
+     {{TOBN(0xcb37f08d, 0x403f46f2), TOBN(0x94b8fc43, 0x1a0ec0c7),
+       TOBN(0xbb8514e3, 0xc332142f), TOBN(0xf3ed2c33, 0xe80d2a7a)},
+      {TOBN(0x8d2080af, 0xb639126c), TOBN(0xf7b6be60, 0xe3553ade),
+       TOBN(0x3950aa9f, 0x1c7e2b09), TOBN(0x847ff958, 0x6410f02b)}},
+     {{TOBN(0x877b7cf5, 0x678a31b0), TOBN(0xd50301ae, 0x3998b620),
+       TOBN(0x734257c5, 0xc00fb396), TOBN(0xf9fb18a0, 0x04e672a6)},
+      {TOBN(0xff8bd8eb, 0xe8758851), TOBN(0x1e64e4c6, 0x5d99ba44),
+       TOBN(0x4b8eaedf, 0x7dfd93b7), TOBN(0xba2f2a98, 0x04e76b8c)}},
+     {{TOBN(0x7d790cba, 0xe8053433), TOBN(0xc8e725a0, 0x3d2c9585),
+       TOBN(0x58c5c476, 0xcdd8f5ed), TOBN(0xd106b952, 0xefa9fe1d)},
+      {TOBN(0x3c5c775b, 0x0eff13a9), TOBN(0x242442ba, 0xe057b930),
+       TOBN(0xe9f458d4, 0xc9b70cbd), TOBN(0x69b71448, 0xa3cdb89a)}},
+     {{TOBN(0x41ee46f6, 0x0e2ed742), TOBN(0x573f1045, 0x40067493),
+       TOBN(0xb1e154ff, 0x9d54c304), TOBN(0x2ad0436a, 0x8d3a7502)},
+      {TOBN(0xee4aaa2d, 0x431a8121), TOBN(0xcd38b3ab, 0x886f11ed),
+       TOBN(0x57d49ea6, 0x034a0eb7), TOBN(0xd2b773bd, 0xf7e85e58)}},
+     {{TOBN(0x4a559ac4, 0x9b5c1f14), TOBN(0xc444be1a, 0x3e54df2b),
+       TOBN(0x13aad704, 0xeda41891), TOBN(0xcd927bec, 0x5eb5c788)},
+      {TOBN(0xeb3c8516, 0xe48c8a34), TOBN(0x1b7ac812, 0x4b546669),
+       TOBN(0x1815f896, 0x594df8ec), TOBN(0x87c6a79c, 0x79227865)}},
+     {{TOBN(0xae02a2f0, 0x9b56ddbd), TOBN(0x1339b5ac, 0x8a2f1cf3),
+       TOBN(0xf2b569c7, 0x839dff0d), TOBN(0xb0b9e864, 0xfee9a43d)},
+      {TOBN(0x4ff8ca41, 0x77bb064e), TOBN(0x145a2812, 0xfd249f63),
+       TOBN(0x3ab7beac, 0xf86f689a), TOBN(0x9bafec27, 0x01d35f5e)}},
+     {{TOBN(0x28054c65, 0x4265aa91), TOBN(0xa4b18304, 0x035efe42),
+       TOBN(0x6887b0e6, 0x9639dec7), TOBN(0xf4b8f6ad, 0x3d52aea5)},
+      {TOBN(0xfb9293cc, 0x971a8a13), TOBN(0x3f159e5d, 0x4c934d07),
+       TOBN(0x2c50e9b1, 0x09acbc29), TOBN(0x08eb65e6, 0x7154d129)}},
+     {{TOBN(0x4feff589, 0x30b75c3e), TOBN(0x0bb82fe2, 0x94491c93),
+       TOBN(0xd8ac377a, 0x89af62bb), TOBN(0xd7b51490, 0x9685e49f)},
+      {TOBN(0xabca9a7b, 0x04497f19), TOBN(0x1b35ed0a, 0x1a7ad13f),
+       TOBN(0x6b601e21, 0x3ec86ed6), TOBN(0xda91fcb9, 0xce0c76f1)}},
+     {{TOBN(0x9e28507b, 0xd7ab27e1), TOBN(0x7c19a555, 0x63945b7b),
+       TOBN(0x6b43f0a1, 0xaafc9827), TOBN(0x443b4fbd, 0x3aa55b91)},
+      {TOBN(0x962b2e65, 0x6962c88f), TOBN(0x139da8d4, 0xce0db0ca),
+       TOBN(0xb93f05dd, 0x1b8d6c4f), TOBN(0x779cdff7, 0x180b9824)}},
+     {{TOBN(0xbba23fdd, 0xae57c7b7), TOBN(0x345342f2, 0x1b932522),
+       TOBN(0xfd9c80fe, 0x556d4aa3), TOBN(0xa03907ba, 0x6525bb61)},
+      {TOBN(0x38b010e1, 0xff218933), TOBN(0xc066b654, 0xaa52117b),
+       TOBN(0x8e141920, 0x94f2e6ea), TOBN(0x66a27dca, 0x0d32f2b2)}},
+     {{TOBN(0x69c7f993, 0x048b3717), TOBN(0xbf5a989a, 0xb178ae1c),
+       TOBN(0x49fa9058, 0x564f1d6b), TOBN(0x27ec6e15, 0xd31fde4e)},
+      {TOBN(0x4cce0373, 0x7276e7fc), TOBN(0x64086d79, 0x89d6bf02),
+       TOBN(0x5a72f046, 0x4ccdd979), TOBN(0x909c3566, 0x47775631)}},
+     {{TOBN(0x1c07bc6b, 0x75dd7125), TOBN(0xb4c6bc97, 0x87a0428d),
+       TOBN(0x507ece52, 0xfdeb6b9d), TOBN(0xfca56512, 0xb2c95432)},
+      {TOBN(0x15d97181, 0xd0e8bd06), TOBN(0x384dd317, 0xc6bb46ea),
+       TOBN(0x5441ea20, 0x3952b624), TOBN(0xbcf70dee, 0x4e7dc2fb)}},
+     {{TOBN(0x372b016e, 0x6628e8c3), TOBN(0x07a0d667, 0xb60a7522),
+       TOBN(0xcf05751b, 0x0a344ee2), TOBN(0x0ec09a48, 0x118bdeec)},
+      {TOBN(0x6e4b3d4e, 0xd83dce46), TOBN(0x43a6316d, 0x99d2fc6e),
+       TOBN(0xa99d8989, 0x56cf044c), TOBN(0x7c7f4454, 0xae3e5fb7)}},
+     {{TOBN(0xb2e6b121, 0xfbabbe92), TOBN(0x281850fb, 0xe1330076),
+       TOBN(0x093581ec, 0x97890015), TOBN(0x69b1dded, 0x75ff77f5)},
+      {TOBN(0x7cf0b18f, 0xab105105), TOBN(0x953ced31, 0xa89ccfef),
+       TOBN(0x3151f85f, 0xeb914009), TOBN(0x3c9f1b87, 0x88ed48ad)}},
+     {{TOBN(0xc9aba1a1, 0x4a7eadcb), TOBN(0x928e7501, 0x522e71cf),
+       TOBN(0xeaede727, 0x3a2e4f83), TOBN(0x467e10d1, 0x1ce3bbd3)},
+      {TOBN(0xf3442ac3, 0xb955dcf0), TOBN(0xba96307d, 0xd3d5e527),
+       TOBN(0xf763a10e, 0xfd77f474), TOBN(0x5d744bd0, 0x6a6e1ff0)}},
+     {{TOBN(0xd287282a, 0xa777899e), TOBN(0xe20eda8f, 0xd03f3cde),
+       TOBN(0x6a7e75bb, 0x50b07d31), TOBN(0x0b7e2a94, 0x6f379de4)},
+      {TOBN(0x31cb64ad, 0x19f593cf), TOBN(0x7b1a9e4f, 0x1e76ef1d),
+       TOBN(0xe18c9c9d, 0xb62d609c), TOBN(0x439bad6d, 0xe779a650)}},
+     {{TOBN(0x219d9066, 0xe032f144), TOBN(0x1db632b8, 0xe8b2ec6a),
+       TOBN(0xff0d0fd4, 0xfda12f78), TOBN(0x56fb4c2d, 0x2a25d265)},
+      {TOBN(0x5f4e2ee1, 0x255a03f1), TOBN(0x61cd6af2, 0xe96af176),
+       TOBN(0xe0317ba8, 0xd068bc97), TOBN(0x927d6bab, 0x264b988e)}},
+     {{TOBN(0xa18f07e0, 0xe90fb21e), TOBN(0x00fd2b80, 0xbba7fca1),
+       TOBN(0x20387f27, 0x95cd67b5), TOBN(0x5b89a4e7, 0xd39707f7)},
+      {TOBN(0x8f83ad3f, 0x894407ce), TOBN(0xa0025b94, 0x6c226132),
+       TOBN(0xc79563c7, 0xf906c13b), TOBN(0x5f548f31, 0x4e7bb025)}},
+     {{TOBN(0x2b4c6b8f, 0xeac6d113), TOBN(0xa67e3f9c, 0x0e813c76),
+       TOBN(0x3982717c, 0x3fe1f4b9), TOBN(0x58865819, 0x26d8050e)},
+      {TOBN(0x99f3640c, 0xf7f06f20), TOBN(0xdc610216, 0x2a66ebc2),
+       TOBN(0x52f2c175, 0x767a1e08), TOBN(0x05660e1a, 0x5999871b)}},
+     {{TOBN(0x6b0f1762, 0x6d3c4693), TOBN(0xf0e7d627, 0x37ed7bea),
+       TOBN(0xc51758c7, 0xb75b226d), TOBN(0x40a88628, 0x1f91613b)},
+      {TOBN(0x889dbaa7, 0xbbb38ce0), TOBN(0xe0404b65, 0xbddcad81),
+       TOBN(0xfebccd3a, 0x8bc9671f), TOBN(0xfbf9a357, 0xee1f5375)}},
+     {{TOBN(0x5dc169b0, 0x28f33398), TOBN(0xb07ec11d, 0x72e90f65),
+       TOBN(0xae7f3b4a, 0xfaab1eb1), TOBN(0xd970195e, 0x5f17538a)},
+      {TOBN(0x52b05cbe, 0x0181e640), TOBN(0xf5debd62, 0x2643313d),
+       TOBN(0x76148154, 0x5df31f82), TOBN(0x23e03b33, 0x3a9e13c5)}},
+     {{TOBN(0xff758949, 0x4fde0c1f), TOBN(0xbf8a1abe, 0xe5b6ec20),
+       TOBN(0x702278fb, 0x87e1db6c), TOBN(0xc447ad7a, 0x35ed658f)},
+      {TOBN(0x48d4aa38, 0x03d0ccf2), TOBN(0x80acb338, 0x819a7c03),
+       TOBN(0x9bc7c89e, 0x6e17cecc), TOBN(0x46736b8b, 0x03be1d82)}},
+     {{TOBN(0xd65d7b60, 0xc0432f96), TOBN(0xddebe7a3, 0xdeb5442f),
+       TOBN(0x79a25307, 0x7dff69a2), TOBN(0x37a56d94, 0x02cf3122)},
+      {TOBN(0x8bab8aed, 0xf2350d0a), TOBN(0x13c3f276, 0x037b0d9a),
+       TOBN(0xc664957c, 0x44c65cae), TOBN(0x88b44089, 0xc2e71a88)}},
+     {{TOBN(0xdb88e5a3, 0x5cb02664), TOBN(0x5d4c0bf1, 0x8686c72e),
+       TOBN(0xea3d9b62, 0xa682d53e), TOBN(0x9b605ef4, 0x0b2ad431)},
+      {TOBN(0x71bac202, 0xc69645d0), TOBN(0xa115f03a, 0x6a1b66e7),
+       TOBN(0xfe2c563a, 0x158f4dc4), TOBN(0xf715b3a0, 0x4d12a78c)}},
+     {{TOBN(0x8f7f0a48, 0xd413213a), TOBN(0x2035806d, 0xc04becdb),
+       TOBN(0xecd34a99, 0x5d8587f5), TOBN(0x4d8c3079, 0x9f6d3a71)},
+      {TOBN(0x1b2a2a67, 0x8d95a8f6), TOBN(0xc58c9d7d, 0xf2110d0d),
+       TOBN(0xdeee81d5, 0xcf8fba3f), TOBN(0xa42be3c0, 0x0c7cdf68)}},
+     {{TOBN(0x2126f742, 0xd43b5eaa), TOBN(0x054a0766, 0xdfa59b85),
+       TOBN(0x9d0d5e36, 0x126bfd45), TOBN(0xa1f8fbd7, 0x384f8a8f)},
+      {TOBN(0x317680f5, 0xd563fccc), TOBN(0x48ca5055, 0xf280a928),
+       TOBN(0xe00b81b2, 0x27b578cf), TOBN(0x10aad918, 0x2994a514)}},
+     {{TOBN(0xd9e07b62, 0xb7bdc953), TOBN(0x9f0f6ff2, 0x5bc086dd),
+       TOBN(0x09d1ccff, 0x655eee77), TOBN(0x45475f79, 0x5bef7df1)},
+      {TOBN(0x3faa28fa, 0x86f702cc), TOBN(0x92e60905, 0x0f021f07),
+       TOBN(0xe9e62968, 0x7f8fa8c6), TOBN(0xbd71419a, 0xf036ea2c)}},
+     {{TOBN(0x171ee1cc, 0x6028da9a), TOBN(0x5352fe1a, 0xc251f573),
+       TOBN(0xf8ff236e, 0x3fa997f4), TOBN(0xd831b6c9, 0xa5749d5f)},
+      {TOBN(0x7c872e1d, 0xe350e2c2), TOBN(0xc56240d9, 0x1e0ce403),
+       TOBN(0xf9deb077, 0x6974f5cb), TOBN(0x7d50ba87, 0x961c3728)}},
+     {{TOBN(0xd6f89426, 0x5a3a2518), TOBN(0xcf817799, 0xc6303d43),
+       TOBN(0x510a0471, 0x619e5696), TOBN(0xab049ff6, 0x3a5e307b)},
+      {TOBN(0xe4cdf9b0, 0xfeb13ec7), TOBN(0xd5e97117, 0x9d8ff90c),
+       TOBN(0xf6f64d06, 0x9afa96af), TOBN(0x00d0bf5e, 0x9d2012a2)}},
+     {{TOBN(0xe63f301f, 0x358bcdc0), TOBN(0x07689e99, 0x0a9d47f8),
+       TOBN(0x1f689e2f, 0x4f43d43a), TOBN(0x4d542a16, 0x90920904)},
+      {TOBN(0xaea293d5, 0x9ca0a707), TOBN(0xd061fe45, 0x8ac68065),
+       TOBN(0x1033bf1b, 0x0090008c), TOBN(0x29749558, 0xc08a6db6)}},
+     {{TOBN(0x74b5fc59, 0xc1d5d034), TOBN(0xf712e9f6, 0x67e215e0),
+       TOBN(0xfd520cbd, 0x860200e6), TOBN(0x0229acb4, 0x3ea22588)},
+      {TOBN(0x9cd1e14c, 0xfff0c82e), TOBN(0x87684b62, 0x59c69e73),
+       TOBN(0xda85e61c, 0x96ccb989), TOBN(0x2d5dbb02, 0xa3d06493)}},
+     {{TOBN(0xf22ad33a, 0xe86b173c), TOBN(0xe8e41ea5, 0xa79ff0e3),
+       TOBN(0x01d2d725, 0xdd0d0c10), TOBN(0x31f39088, 0x032d28f9)},
+      {TOBN(0x7b3f71e1, 0x7829839e), TOBN(0x0cf691b4, 0x4502ae58),
+       TOBN(0xef658dbd, 0xbefc6115), TOBN(0xa5cd6ee5, 0xb3ab5314)}},
+     {{TOBN(0x206c8d7b, 0x5f1d2347), TOBN(0x794645ba, 0x4cc2253a),
+       TOBN(0xd517d8ff, 0x58389e08), TOBN(0x4fa20dee, 0x9f847288)},
+      {TOBN(0xeba072d8, 0xd797770a), TOBN(0x7360c91d, 0xbf429e26),
+       TOBN(0x7200a3b3, 0x80af8279), TOBN(0x6a1c9150, 0x82dadce3)}},
+     {{TOBN(0x0ee6d3a7, 0xc35d8794), TOBN(0x042e6558, 0x0356bae5),
+       TOBN(0x9f59698d, 0x643322fd), TOBN(0x9379ae15, 0x50a61967)},
+      {TOBN(0x64b9ae62, 0xfcc9981e), TOBN(0xaed3d631, 0x6d2934c6),
+       TOBN(0x2454b302, 0x5e4e65eb), TOBN(0xab09f647, 0xf9950428)}}},
+    {{{TOBN(0xb2083a12, 0x22248acc), TOBN(0x1f6ec0ef, 0x3264e366),
+       TOBN(0x5659b704, 0x5afdee28), TOBN(0x7a823a40, 0xe6430bb5)},
+      {TOBN(0x24592a04, 0xe1900a79), TOBN(0xcde09d4a, 0xc9ee6576),
+       TOBN(0x52b6463f, 0x4b5ea54a), TOBN(0x1efe9ed3, 0xd3ca65a7)}},
+     {{TOBN(0xe27a6dbe, 0x305406dd), TOBN(0x8eb7dc7f, 0xdd5d1957),
+       TOBN(0xf54a6876, 0x387d4d8f), TOBN(0x9c479409, 0xc7762de4)},
+      {TOBN(0xbe4d5b5d, 0x99b30778), TOBN(0x25380c56, 0x6e793682),
+       TOBN(0x602d37f3, 0xdac740e3), TOBN(0x140deabe, 0x1566e4ae)}},
+     {{TOBN(0x4481d067, 0xafd32acf), TOBN(0xd8f0fcca, 0xe1f71ccf),
+       TOBN(0xd208dd0c, 0xb596f2da), TOBN(0xd049d730, 0x9aad93f9)},
+      {TOBN(0xc79f263d, 0x42ab580e), TOBN(0x09411bb1, 0x23f707b4),
+       TOBN(0x8cfde1ff, 0x835e0eda), TOBN(0x72707490, 0x90f03402)}},
+     {{TOBN(0xeaee6126, 0xc49a861e), TOBN(0x024f3b65, 0xe14f0d06),
+       TOBN(0x51a3f1e8, 0xc69bfc17), TOBN(0xc3c3a8e9, 0xa7686381)},
+      {TOBN(0x3400752c, 0xb103d4c8), TOBN(0x02bc4613, 0x9218b36b),
+       TOBN(0xc67f75eb, 0x7651504a), TOBN(0xd6848b56, 0xd02aebfa)}},
+     {{TOBN(0xbd9802e6, 0xc30fa92b), TOBN(0x5a70d96d, 0x9a552784),
+       TOBN(0x9085c4ea, 0x3f83169b), TOBN(0xfa9423bb, 0x06908228)},
+      {TOBN(0x2ffebe12, 0xfe97a5b9), TOBN(0x85da6049, 0x71b99118),
+       TOBN(0x9cbc2f7f, 0x63178846), TOBN(0xfd96bc70, 0x9153218e)}},
+     {{TOBN(0x958381db, 0x1782269b), TOBN(0xae34bf79, 0x2597e550),
+       TOBN(0xbb5c6064, 0x5f385153), TOBN(0x6f0e96af, 0xe3088048)},
+      {TOBN(0xbf6a0215, 0x77884456), TOBN(0xb3b5688c, 0x69310ea7),
+       TOBN(0x17c94295, 0x04fad2de), TOBN(0xe020f0e5, 0x17896d4d)}},
+     {{TOBN(0x730ba0ab, 0x0976505f), TOBN(0x567f6813, 0x095e2ec5),
+       TOBN(0x47062010, 0x6331ab71), TOBN(0x72cfa977, 0x41d22b9f)},
+      {TOBN(0x33e55ead, 0x8a2373da), TOBN(0xa8d0d5f4, 0x7ba45a68),
+       TOBN(0xba1d8f9c, 0x03029d15), TOBN(0x8f34f1cc, 0xfc55b9f3)}},
+     {{TOBN(0xcca4428d, 0xbbe5a1a9), TOBN(0x8187fd5f, 0x3126bd67),
+       TOBN(0x0036973a, 0x48105826), TOBN(0xa39b6663, 0xb8bd61a0)},
+      {TOBN(0x6d42deef, 0x2d65a808), TOBN(0x4969044f, 0x94636b19),
+       TOBN(0xf611ee47, 0xdd5d564c), TOBN(0x7b2f3a49, 0xd2873077)}},
+     {{TOBN(0x94157d45, 0x300eb294), TOBN(0x2b2a656e, 0x169c1494),
+       TOBN(0xc000dd76, 0xd3a47aa9), TOBN(0xa2864e4f, 0xa6243ea4)},
+      {TOBN(0x82716c47, 0xdb89842e), TOBN(0x12dfd7d7, 0x61479fb7),
+       TOBN(0x3b9a2c56, 0xe0b2f6dc), TOBN(0x46be862a, 0xd7f85d67)}},
+     {{TOBN(0x03b0d8dd, 0x0f82b214), TOBN(0x460c34f9, 0xf103cbc6),
+       TOBN(0xf32e5c03, 0x18d79e19), TOBN(0x8b8888ba, 0xa84117f8)},
+      {TOBN(0x8f3c37dc, 0xc0722677), TOBN(0x10d21be9, 0x1c1c0f27),
+       TOBN(0xd47c8468, 0xe0f7a0c6), TOBN(0x9bf02213, 0xadecc0e0)}},
+     {{TOBN(0x0baa7d12, 0x42b48b99), TOBN(0x1bcb665d, 0x48424096),
+       TOBN(0x8b847cd6, 0xebfb5cfb), TOBN(0x87c2ae56, 0x9ad4d10d)},
+      {TOBN(0xf1cbb122, 0x0de36726), TOBN(0xe7043c68, 0x3fdfbd21),
+       TOBN(0x4bd0826a, 0x4e79d460), TOBN(0x11f5e598, 0x4bd1a2cb)}},
+     {{TOBN(0x97554160, 0xb7fe7b6e), TOBN(0x7d16189a, 0x400a3fb2),
+       TOBN(0xd73e9bea, 0xe328ca1e), TOBN(0x0dd04b97, 0xe793d8cc)},
+      {TOBN(0xa9c83c9b, 0x506db8cc), TOBN(0x5cd47aae, 0xcf38814c),
+       TOBN(0x26fc430d, 0xb64b45e6), TOBN(0x079b5499, 0xd818ea84)}},
+     {{TOBN(0xebb01102, 0xc1c24a3b), TOBN(0xca24e568, 0x1c161c1a),
+       TOBN(0x103eea69, 0x36f00a4a), TOBN(0x9ad76ee8, 0x76176c7b)},
+      {TOBN(0x97451fc2, 0x538e0ff7), TOBN(0x94f89809, 0x6604b3b0),
+       TOBN(0x6311436e, 0x3249cfd7), TOBN(0x27b4a7bd, 0x41224f69)}},
+     {{TOBN(0x03b5d21a, 0xe0ac2941), TOBN(0x279b0254, 0xc2d31937),
+       TOBN(0x3307c052, 0xcac992d0), TOBN(0x6aa7cb92, 0xefa8b1f3)},
+      {TOBN(0x5a182580, 0x0d37c7a5), TOBN(0x13380c37, 0x342d5422),
+       TOBN(0x92ac2d66, 0xd5d2ef92), TOBN(0x035a70c9, 0x030c63c6)}},
+     {{TOBN(0xc16025dd, 0x4ce4f152), TOBN(0x1f419a71, 0xf9df7c06),
+       TOBN(0x6d5b2214, 0x91e4bb14), TOBN(0xfc43c6cc, 0x839fb4ce)},
+      {TOBN(0x49f06591, 0x925d6b2d), TOBN(0x4b37d9d3, 0x62186598),
+       TOBN(0x8c54a971, 0xd01b1629), TOBN(0xe1a9c29f, 0x51d50e05)}},
+     {{TOBN(0x5109b785, 0x71ba1861), TOBN(0x48b22d5c, 0xd0c8f93d),
+       TOBN(0xe8fa84a7, 0x8633bb93), TOBN(0x53fba6ba, 0x5aebbd08)},
+      {TOBN(0x7ff27df3, 0xe5eea7d8), TOBN(0x521c8796, 0x68ca7158),
+       TOBN(0xb9d5133b, 0xce6f1a05), TOBN(0x2d50cd53, 0xfd0ebee4)}},
+     {{TOBN(0xc82115d6, 0xc5a3ef16), TOBN(0x993eff9d, 0xba079221),
+       TOBN(0xe4da2c5e, 0x4b5da81c), TOBN(0x9a89dbdb, 0x8033fd85)},
+      {TOBN(0x60819ebf, 0x2b892891), TOBN(0x53902b21, 0x5d14a4d5),
+       TOBN(0x6ac35051, 0xd7fda421), TOBN(0xcc6ab885, 0x61c83284)}},
+     {{TOBN(0x14eba133, 0xf74cff17), TOBN(0x240aaa03, 0xecb813f2),
+       TOBN(0xcfbb6540, 0x6f665bee), TOBN(0x084b1fe4, 0xa425ad73)},
+      {TOBN(0x009d5d16, 0xd081f6a6), TOBN(0x35304fe8, 0xeef82c90),
+       TOBN(0xf20346d5, 0xaa9eaa22), TOBN(0x0ada9f07, 0xac1c91e3)}},
+     {{TOBN(0xa6e21678, 0x968a6144), TOBN(0x54c1f77c, 0x07b31a1e),
+       TOBN(0xd6bb787e, 0x5781fbe1), TOBN(0x61bd2ee0, 0xe31f1c4a)},
+      {TOBN(0xf25aa1e9, 0x781105fc), TOBN(0x9cf2971f, 0x7b2f8e80),
+       TOBN(0x26d15412, 0xcdff919b), TOBN(0x01db4ebe, 0x34bc896e)}},
+     {{TOBN(0x7d9b3e23, 0xb40df1cf), TOBN(0x59337373, 0x94e971b4),
+       TOBN(0xbf57bd14, 0x669cf921), TOBN(0x865daedf, 0x0c1a1064)},
+      {TOBN(0x3eb70bd3, 0x83279125), TOBN(0xbc3d5b9f, 0x34ecdaab),
+       TOBN(0x91e3ed7e, 0x5f755caf), TOBN(0x49699f54, 0xd41e6f02)}},
+     {{TOBN(0x185770e1, 0xd4a7a15b), TOBN(0x08f3587a, 0xeaac87e7),
+       TOBN(0x352018db, 0x473133ea), TOBN(0x674ce719, 0x04fd30fc)},
+      {TOBN(0x7b8d9835, 0x088b3e0e), TOBN(0x7a0356a9, 0x5d0d47a1),
+       TOBN(0x9d9e7659, 0x6474a3c4), TOBN(0x61ea48a7, 0xff66966c)}},
+     {{TOBN(0x30417758, 0x0f3e4834), TOBN(0xfdbb21c2, 0x17a9afcb),
+       TOBN(0x756fa17f, 0x2f9a67b3), TOBN(0x2a6b2421, 0xa245c1a8)},
+      {TOBN(0x64be2794, 0x4af02291), TOBN(0xade465c6, 0x2a5804fe),
+       TOBN(0x8dffbd39, 0xa6f08fd7), TOBN(0xc4efa84c, 0xaa14403b)}},
+     {{TOBN(0xa1b91b2a, 0x442b0f5c), TOBN(0xb748e317, 0xcf997736),
+       TOBN(0x8d1b62bf, 0xcee90e16), TOBN(0x907ae271, 0x0b2078c0)},
+      {TOBN(0xdf31534b, 0x0c9bcddd), TOBN(0x043fb054, 0x39adce83),
+       TOBN(0x99031043, 0xd826846a), TOBN(0x61a9c0d6, 0xb144f393)}},
+     {{TOBN(0xdab48046, 0x47718427), TOBN(0xdf17ff9b, 0x6e830f8b),
+       TOBN(0x408d7ee8, 0xe49a1347), TOBN(0x6ac71e23, 0x91c1d4ae)},
+      {TOBN(0xc8cbb9fd, 0x1defd73c), TOBN(0x19840657, 0xbbbbfec5),
+       TOBN(0x39db1cb5, 0x9e7ef8ea), TOBN(0x78aa8296, 0x64105f30)}},
+     {{TOBN(0xa3d9b7f0, 0xa3738c29), TOBN(0x0a2f235a, 0xbc3250a3),
+       TOBN(0x55e506f6, 0x445e4caf), TOBN(0x0974f73d, 0x33475f7a)},
+      {TOBN(0xd37dbba3, 0x5ba2f5a8), TOBN(0x542c6e63, 0x6af40066),
+       TOBN(0x26d99b53, 0xc5d73e2c), TOBN(0x06060d7d, 0x6c3ca33e)}},
+     {{TOBN(0xcdbef1c2, 0x065fef4a), TOBN(0x77e60f7d, 0xfd5b92e3),
+       TOBN(0xd7c549f0, 0x26708350), TOBN(0x201b3ad0, 0x34f121bf)},
+      {TOBN(0x5fcac2a1, 0x0334fc14), TOBN(0x8a9a9e09, 0x344552f6),
+       TOBN(0x7dd8a1d3, 0x97653082), TOBN(0x5fc0738f, 0x79d4f289)}},
+     {{TOBN(0x787d244d, 0x17d2d8c3), TOBN(0xeffc6345, 0x70830684),
+       TOBN(0x5ddb96dd, 0xe4f73ae5), TOBN(0x8efb14b1, 0x172549a5)},
+      {TOBN(0x6eb73eee, 0x2245ae7a), TOBN(0xbca4061e, 0xea11f13e),
+       TOBN(0xb577421d, 0x30b01f5d), TOBN(0xaa688b24, 0x782e152c)}},
+     {{TOBN(0x67608e71, 0xbd3502ba), TOBN(0x4ef41f24, 0xb4de75a0),
+       TOBN(0xb08dde5e, 0xfd6125e5), TOBN(0xde484825, 0xa409543f)},
+      {TOBN(0x1f198d98, 0x65cc2295), TOBN(0x428a3771, 0x6e0edfa2),
+       TOBN(0x4f9697a2, 0xadf35fc7), TOBN(0x01a43c79, 0xf7cac3c7)}},
+     {{TOBN(0xb05d7059, 0x0fd3659a), TOBN(0x8927f30c, 0xbb7f2d9a),
+       TOBN(0x4023d1ac, 0x8cf984d3), TOBN(0x32125ed3, 0x02897a45)},
+      {TOBN(0xfb572dad, 0x3d414205), TOBN(0x73000ef2, 0xe3fa82a9),
+       TOBN(0x4c0868e9, 0xf10a5581), TOBN(0x5b61fc67, 0x6b0b3ca5)}},
+     {{TOBN(0xc1258d5b, 0x7cae440c), TOBN(0x21c08b41, 0x402b7531),
+       TOBN(0xf61a8955, 0xde932321), TOBN(0x3568faf8, 0x2d1408af)},
+      {TOBN(0x71b15e99, 0x9ecf965b), TOBN(0xf14ed248, 0xe917276f),
+       TOBN(0xc6f4caa1, 0x820cf9e2), TOBN(0x681b20b2, 0x18d83c7e)}},
+     {{TOBN(0x6cde738d, 0xc6c01120), TOBN(0x71db0813, 0xae70e0db),
+       TOBN(0x95fc0644, 0x74afe18c), TOBN(0x34619053, 0x129e2be7)},
+      {TOBN(0x80615cea, 0xdb2a3b15), TOBN(0x0a49a19e, 0xdb4c7073),
+       TOBN(0x0e1b84c8, 0x8fd2d367), TOBN(0xd74bf462, 0x033fb8aa)}},
+     {{TOBN(0x889f6d65, 0x533ef217), TOBN(0x7158c7e4, 0xc3ca2e87),
+       TOBN(0xfb670dfb, 0xdc2b4167), TOBN(0x75910a01, 0x844c257f)},
+      {TOBN(0xf336bf07, 0xcf88577d), TOBN(0x22245250, 0xe45e2ace),
+       TOBN(0x2ed92e8d, 0x7ca23d85), TOBN(0x29f8be4c, 0x2b812f58)}},
+     {{TOBN(0xdd9ebaa7, 0x076fe12b), TOBN(0x3f2400cb, 0xae1537f9),
+       TOBN(0x1aa93528, 0x17bdfb46), TOBN(0xc0f98430, 0x67883b41)},
+      {TOBN(0x5590ede1, 0x0170911d), TOBN(0x7562f5bb, 0x34d4b17f),
+       TOBN(0xe1fa1df2, 0x1826b8d2), TOBN(0xb40b796a, 0x6bd80d59)}},
+     {{TOBN(0xd65bf197, 0x3467ba92), TOBN(0x8c9b46db, 0xf70954b0),
+       TOBN(0x97c8a0f3, 0x0e78f15d), TOBN(0xa8f3a69a, 0x85a4c961)},
+      {TOBN(0x4242660f, 0x61e4ce9b), TOBN(0xbf06aab3, 0x6ea6790c),
+       TOBN(0xc6706f8e, 0xec986416), TOBN(0x9e56dec1, 0x9a9fc225)}},
+     {{TOBN(0x527c46f4, 0x9a9898d9), TOBN(0xd799e77b, 0x5633cdef),
+       TOBN(0x24eacc16, 0x7d9e4297), TOBN(0xabb61cea, 0x6b1cb734)},
+      {TOBN(0xbee2e8a7, 0xf778443c), TOBN(0x3bb42bf1, 0x29de2fe6),
+       TOBN(0xcbed86a1, 0x3003bb6f), TOBN(0xd3918e6c, 0xd781cdf6)}},
+     {{TOBN(0x4bee3271, 0x9a5103f1), TOBN(0x5243efc6, 0xf50eac06),
+       TOBN(0xb8e122cb, 0x6adcc119), TOBN(0x1b7faa84, 0xc0b80a08)},
+      {TOBN(0x32c3d1bd, 0x6dfcd08c), TOBN(0x129dec4e, 0x0be427de),
+       TOBN(0x98ab679c, 0x1d263c83), TOBN(0xafc83cb7, 0xcef64eff)}},
+     {{TOBN(0x85eb6088, 0x2fa6be76), TOBN(0x892585fb, 0x1328cbfe),
+       TOBN(0xc154d3ed, 0xcf618dda), TOBN(0xc44f601b, 0x3abaf26e)},
+      {TOBN(0x7bf57d0b, 0x2be1fdfd), TOBN(0xa833bd2d, 0x21137fee),
+       TOBN(0x9353af36, 0x2db591a8), TOBN(0xc76f26dc, 0x5562a056)}},
+     {{TOBN(0x1d87e47d, 0x3fdf5a51), TOBN(0x7afb5f93, 0x55c9cab0),
+       TOBN(0x91bbf58f, 0x89e0586e), TOBN(0x7c72c018, 0x0d843709)},
+      {TOBN(0xa9a5aafb, 0x99b5c3dc), TOBN(0xa48a0f1d, 0x3844aeb0),
+       TOBN(0x7178b7dd, 0xb667e482), TOBN(0x453985e9, 0x6e23a59a)}},
+     {{TOBN(0x4a54c860, 0x01b25dd8), TOBN(0x0dd37f48, 0xfb897c8a),
+       TOBN(0x5f8aa610, 0x0ea90cd9), TOBN(0xc8892c68, 0x16d5830d)},
+      {TOBN(0xeb4befc0, 0xef514ca5), TOBN(0x478eb679, 0xe72c9ee6),
+       TOBN(0x9bca20da, 0xdbc40d5f), TOBN(0xf015de21, 0xdde4f64a)}},
+     {{TOBN(0xaa6a4de0, 0xeaf4b8a5), TOBN(0x68cfd9ca, 0x4bc60e32),
+       TOBN(0x668a4b01, 0x7fd15e70), TOBN(0xd9f0694a, 0xf27dc09d)},
+      {TOBN(0xf6c3cad5, 0xba708bcd), TOBN(0x5cd2ba69, 0x5bb95c2a),
+       TOBN(0xaa28c1d3, 0x33c0a58f), TOBN(0x23e274e3, 0xabc77870)}},
+     {{TOBN(0x44c3692d, 0xdfd20a4a), TOBN(0x091c5fd3, 0x81a66653),
+       TOBN(0x6c0bb691, 0x09a0757d), TOBN(0x9072e8b9, 0x667343ea)},
+      {TOBN(0x31d40eb0, 0x80848bec), TOBN(0x95bd480a, 0x79fd36cc),
+       TOBN(0x01a77c61, 0x65ed43f5), TOBN(0xafccd127, 0x2e0d40bf)}},
+     {{TOBN(0xeccfc82d, 0x1cc1884b), TOBN(0xc85ac201, 0x5d4753b4),
+       TOBN(0xc7a6caac, 0x658e099f), TOBN(0xcf46369e, 0x04b27390)},
+      {TOBN(0xe2e7d049, 0x506467ea), TOBN(0x481b63a2, 0x37cdeccc),
+       TOBN(0x4029abd8, 0xed80143a), TOBN(0x28bfe3c7, 0xbcb00b88)}},
+     {{TOBN(0x3bec1009, 0x0643d84a), TOBN(0x885f3668, 0xabd11041),
+       TOBN(0xdb02432c, 0xf83a34d6), TOBN(0x32f7b360, 0x719ceebe)},
+      {TOBN(0xf06c7837, 0xdad1fe7a), TOBN(0x60a157a9, 0x5441a0b0),
+       TOBN(0x704970e9, 0xe2d47550), TOBN(0xcd2bd553, 0x271b9020)}},
+     {{TOBN(0xff57f82f, 0x33e24a0b), TOBN(0x9cbee23f, 0xf2565079),
+       TOBN(0x16353427, 0xeb5f5825), TOBN(0x276feec4, 0xe948d662)},
+      {TOBN(0xd1b62bc6, 0xda10032b), TOBN(0x718351dd, 0xf0e72a53),
+       TOBN(0x93452076, 0x2420e7ba), TOBN(0x96368fff, 0x3a00118d)}},
+     {{TOBN(0x00ce2d26, 0x150a49e4), TOBN(0x0c28b636, 0x3f04706b),
+       TOBN(0xbad65a46, 0x58b196d0), TOBN(0x6c8455fc, 0xec9f8b7c)},
+      {TOBN(0xe90c895f, 0x2d71867e), TOBN(0x5c0be31b, 0xedf9f38c),
+       TOBN(0x2a37a15e, 0xd8f6ec04), TOBN(0x239639e7, 0x8cd85251)}},
+     {{TOBN(0xd8975315, 0x9c7c4c6b), TOBN(0x603aa3c0, 0xd7409af7),
+       TOBN(0xb8d53d0c, 0x007132fb), TOBN(0x68d12af7, 0xa6849238)},
+      {TOBN(0xbe0607e7, 0xbf5d9279), TOBN(0x9aa50055, 0xaada74ce),
+       TOBN(0xe81079cb, 0xba7e8ccb), TOBN(0x610c71d1, 0xa5f4ff5e)}},
+     {{TOBN(0x9e2ee1a7, 0x5aa07093), TOBN(0xca84004b, 0xa75da47c),
+       TOBN(0x074d3951, 0x3de75401), TOBN(0xf938f756, 0xbb311592)},
+      {TOBN(0x96197618, 0x00a43421), TOBN(0x39a25362, 0x07bc78c8),
+       TOBN(0x278f710a, 0x0a171276), TOBN(0xb28446ea, 0x8d1a8f08)}},
+     {{TOBN(0x184781bf, 0xe3b6a661), TOBN(0x7751cb1d, 0xe6d279f7),
+       TOBN(0xf8ff95d6, 0xc59eb662), TOBN(0x186d90b7, 0x58d3dea7)},
+      {TOBN(0x0e4bb6c1, 0xdfb4f754), TOBN(0x5c5cf56b, 0x2b2801dc),
+       TOBN(0xc561e452, 0x1f54564d), TOBN(0xb4fb8c60, 0xf0dd7f13)}},
+     {{TOBN(0xf8849630, 0x33ff98c7), TOBN(0x9619fffa, 0xcf17769c),
+       TOBN(0xf8090bf6, 0x1bfdd80a), TOBN(0x14d9a149, 0x422cfe63)},
+      {TOBN(0xb354c360, 0x6f6df9ea), TOBN(0xdbcf770d, 0x218f17ea),
+       TOBN(0x207db7c8, 0x79eb3480), TOBN(0x213dbda8, 0x559b6a26)}},
+     {{TOBN(0xac4c200b, 0x29fc81b3), TOBN(0xebc3e09f, 0x171d87c1),
+       TOBN(0x91799530, 0x1481aa9e), TOBN(0x051b92e1, 0x92e114fa)},
+      {TOBN(0xdf8f92e9, 0xecb5537f), TOBN(0x44b1b2cc, 0x290c7483),
+       TOBN(0xa711455a, 0x2adeb016), TOBN(0x964b6856, 0x81a10c2c)}},
+     {{TOBN(0x4f159d99, 0xcec03623), TOBN(0x05532225, 0xef3271ea),
+       TOBN(0xb231bea3, 0xc5ee4849), TOBN(0x57a54f50, 0x7094f103)},
+      {TOBN(0x3e2d421d, 0x9598b352), TOBN(0xe865a49c, 0x67412ab4),
+       TOBN(0xd2998a25, 0x1cc3a912), TOBN(0x5d092808, 0x0c74d65d)}},
+     {{TOBN(0x73f45908, 0x4088567a), TOBN(0xeb6b280e, 0x1f214a61),
+       TOBN(0x8c9adc34, 0xcaf0c13d), TOBN(0x39d12938, 0xf561fb80)},
+      {TOBN(0xb2dc3a5e, 0xbc6edfb4), TOBN(0x7485b1b1, 0xfe4d210e),
+       TOBN(0x062e0400, 0xe186ae72), TOBN(0x91e32d5c, 0x6eeb3b88)}},
+     {{TOBN(0x6df574d7, 0x4be59224), TOBN(0xebc88ccc, 0x716d55f3),
+       TOBN(0x26c2e6d0, 0xcad6ed33), TOBN(0xc6e21e7d, 0x0d3e8b10)},
+      {TOBN(0x2cc5840e, 0x5bcc36bb), TOBN(0x9292445e, 0x7da74f69),
+       TOBN(0x8be8d321, 0x4e5193a8), TOBN(0x3ec23629, 0x8df06413)}},
+     {{TOBN(0xc7e9ae85, 0xb134defa), TOBN(0x6073b1d0, 0x1bb2d475),
+       TOBN(0xb9ad615e, 0x2863c00d), TOBN(0x9e29493d, 0x525f4ac4)},
+      {TOBN(0xc32b1dea, 0x4e9acf4f), TOBN(0x3e1f01c8, 0xa50db88d),
+       TOBN(0xb05d70ea, 0x04da916c), TOBN(0x714b0d0a, 0xd865803e)}},
+     {{TOBN(0x4bd493fc, 0x9920cb5e), TOBN(0x5b44b1f7, 0x92c7a3ac),
+       TOBN(0xa2a77293, 0xbcec9235), TOBN(0x5ee06e87, 0xcd378553)},
+      {TOBN(0xceff8173, 0xda621607), TOBN(0x2bb03e4c, 0x99f5d290),
+       TOBN(0x2945106a, 0xa6f734ac), TOBN(0xb5056604, 0xd25c4732)}},
+     {{TOBN(0x5945920c, 0xe079afee), TOBN(0x686e17a0, 0x6789831f),
+       TOBN(0x5966bee8, 0xb74a5ae5), TOBN(0x38a673a2, 0x1e258d46)},
+      {TOBN(0xbd1cc1f2, 0x83141c95), TOBN(0x3b2ecf4f, 0x0e96e486),
+       TOBN(0xcd3aa896, 0x74e5fc78), TOBN(0x415ec10c, 0x2482fa7a)}},
+     {{TOBN(0x15234419, 0x80503380), TOBN(0x513d917a, 0xd314b392),
+       TOBN(0xb0b52f4e, 0x63caecae), TOBN(0x07bf22ad, 0x2dc7780b)},
+      {TOBN(0xe761e8a1, 0xe4306839), TOBN(0x1b3be962, 0x5dd7feaa),
+       TOBN(0x4fe728de, 0x74c778f1), TOBN(0xf1fa0bda, 0x5e0070f6)}},
+     {{TOBN(0x85205a31, 0x6ec3f510), TOBN(0x2c7e4a14, 0xd2980475),
+       TOBN(0xde3c19c0, 0x6f30ebfd), TOBN(0xdb1c1f38, 0xd4b7e644)},
+      {TOBN(0xfe291a75, 0x5dce364a), TOBN(0xb7b22a3c, 0x058f5be3),
+       TOBN(0x2cd2c302, 0x37fea38c), TOBN(0x2930967a, 0x2e17be17)}},
+     {{TOBN(0x87f009de, 0x0c061c65), TOBN(0xcb014aac, 0xedc6ed44),
+       TOBN(0x49bd1cb4, 0x3bafb1eb), TOBN(0x81bd8b5c, 0x282d3688)},
+      {TOBN(0x1cdab87e, 0xf01a17af), TOBN(0x21f37ac4, 0xe710063b),
+       TOBN(0x5a6c5676, 0x42fc8193), TOBN(0xf4753e70, 0x56a6015c)}},
+     {{TOBN(0x020f795e, 0xa15b0a44), TOBN(0x8f37c8d7, 0x8958a958),
+       TOBN(0x63b7e89b, 0xa4b675b5), TOBN(0xb4fb0c0c, 0x0fc31aea)},
+      {TOBN(0xed95e639, 0xa7ff1f2e), TOBN(0x9880f5a3, 0x619614fb),
+       TOBN(0xdeb6ff02, 0x947151ab), TOBN(0x5bc5118c, 0xa868dcdb)}},
+     {{TOBN(0xd8da2055, 0x4c20cea5), TOBN(0xcac2776e, 0x14c4d69a),
+       TOBN(0xcccb22c1, 0x622d599b), TOBN(0xa4ddb653, 0x68a9bb50)},
+      {TOBN(0x2c4ff151, 0x1b4941b4), TOBN(0xe1ff19b4, 0x6efba588),
+       TOBN(0x35034363, 0xc48345e0), TOBN(0x45542e3d, 0x1e29dfc4)}},
+     {{TOBN(0xf197cb91, 0x349f7aed), TOBN(0x3b2b5a00, 0x8fca8420),
+       TOBN(0x7c175ee8, 0x23aaf6d8), TOBN(0x54dcf421, 0x35af32b6)},
+      {TOBN(0x0ba14307, 0x27d6561e), TOBN(0x879d5ee4, 0xd175b1e2),
+       TOBN(0xc7c43673, 0x99807db5), TOBN(0x77a54455, 0x9cd55bcd)}},
+     {{TOBN(0xe6c2ff13, 0x0105c072), TOBN(0x18f7a99f, 0x8dda7da4),
+       TOBN(0x4c301820, 0x0e2d35c1), TOBN(0x06a53ca0, 0xd9cc6c82)},
+      {TOBN(0xaa21cc1e, 0xf1aa1d9e), TOBN(0x32414334, 0x4a75b1e8),
+       TOBN(0x2a6d1328, 0x0ebe9fdc), TOBN(0x16bd173f, 0x98a4755a)}},
+     {{TOBN(0xfbb9b245, 0x2133ffd9), TOBN(0x39a8b2f1, 0x830f1a20),
+       TOBN(0x484bc97d, 0xd5a1f52a), TOBN(0xd6aebf56, 0xa40eddf8)},
+      {TOBN(0x32257acb, 0x76ccdac6), TOBN(0xaf4d36ec, 0x1586ff27),
+       TOBN(0x8eaa8863, 0xf8de7dd1), TOBN(0x0045d5cf, 0x88647c16)}}},
+    {{{TOBN(0xa6f3d574, 0xc005979d), TOBN(0xc2072b42, 0x6a40e350),
+       TOBN(0xfca5c156, 0x8de2ecf9), TOBN(0xa8c8bf5b, 0xa515344e)},
+      {TOBN(0x97aee555, 0x114df14a), TOBN(0xd4374a4d, 0xfdc5ec6b),
+       TOBN(0x754cc28f, 0x2ca85418), TOBN(0x71cb9e27, 0xd3c41f78)}},
+     {{TOBN(0x89105079, 0x03605c39), TOBN(0xf0843d9e, 0xa142c96c),
+       TOBN(0xf3744934, 0x16923684), TOBN(0x732caa2f, 0xfa0a2893)},
+      {TOBN(0xb2e8c270, 0x61160170), TOBN(0xc32788cc, 0x437fbaa3),
+       TOBN(0x39cd818e, 0xa6eda3ac), TOBN(0xe2e94239, 0x9e2b2e07)}},
+     {{TOBN(0x6967d39b, 0x0260e52a), TOBN(0xd42585cc, 0x90653325),
+       TOBN(0x0d9bd605, 0x21ca7954), TOBN(0x4fa20877, 0x81ed57b3)},
+      {TOBN(0x60c1eff8, 0xe34a0bbe), TOBN(0x56b0040c, 0x84f6ef64),
+       TOBN(0x28be2b24, 0xb1af8483), TOBN(0xb2278163, 0xf5531614)}},
+     {{TOBN(0x8df27545, 0x5922ac1c), TOBN(0xa7b3ef5c, 0xa52b3f63),
+       TOBN(0x8e77b214, 0x71de57c4), TOBN(0x31682c10, 0x834c008b)},
+      {TOBN(0xc76824f0, 0x4bd55d31), TOBN(0xb6d1c086, 0x17b61c71),
+       TOBN(0x31db0903, 0xc2a5089d), TOBN(0x9c092172, 0x184e5d3f)}},
+     {{TOBN(0xdd7ced5b, 0xc00cc638), TOBN(0x1a2015eb, 0x61278fc2),
+       TOBN(0x2e8e5288, 0x6a37f8d6), TOBN(0xc457786f, 0xe79933ad)},
+      {TOBN(0xb3fe4cce, 0x2c51211a), TOBN(0xad9b10b2, 0x24c20498),
+       TOBN(0x90d87a4f, 0xd28db5e5), TOBN(0x698cd105, 0x3aca2fc3)}},
+     {{TOBN(0x4f112d07, 0xe91b536d), TOBN(0xceb982f2, 0x9eba09d6),
+       TOBN(0x3c157b2c, 0x197c396f), TOBN(0xe23c2d41, 0x7b66eb24)},
+      {TOBN(0x480c57d9, 0x3f330d37), TOBN(0xb3a4c8a1, 0x79108deb),
+       TOBN(0x702388de, 0xcb199ce5), TOBN(0x0b019211, 0xb944a8d4)}},
+     {{TOBN(0x24f2a692, 0x840bb336), TOBN(0x7c353bdc, 0xa669fa7b),
+       TOBN(0xda20d6fc, 0xdec9c300), TOBN(0x625fbe2f, 0xa13a4f17)},
+      {TOBN(0xa2b1b61a, 0xdbc17328), TOBN(0x008965bf, 0xa9515621),
+       TOBN(0x49690939, 0xc620ff46), TOBN(0x182dd27d, 0x8717e91c)}},
+     {{TOBN(0x5ace5035, 0xea6c3997), TOBN(0x54259aaa, 0xc2610bef),
+       TOBN(0xef18bb3f, 0x3c80dd39), TOBN(0x6910b95b, 0x5fc3fa39)},
+      {TOBN(0xfce2f510, 0x43e09aee), TOBN(0xced56c9f, 0xa7675665),
+       TOBN(0x10e265ac, 0xd872db61), TOBN(0x6982812e, 0xae9fce69)}},
+     {{TOBN(0x29be11c6, 0xce800998), TOBN(0x72bb1752, 0xb90360d9),
+       TOBN(0x2c193197, 0x5a4ad590), TOBN(0x2ba2f548, 0x9fc1dbc0)},
+      {TOBN(0x7fe4eebb, 0xe490ebe0), TOBN(0x12a0a4cd, 0x7fae11c0),
+       TOBN(0x7197cf81, 0xe903ba37), TOBN(0xcf7d4aa8, 0xde1c6dd8)}},
+     {{TOBN(0x92af6bf4, 0x3fd5684c), TOBN(0x2b26eecf, 0x80360aa1),
+       TOBN(0xbd960f30, 0x00546a82), TOBN(0x407b3c43, 0xf59ad8fe)},
+      {TOBN(0x86cae5fe, 0x249c82ba), TOBN(0x9e0faec7, 0x2463744c),
+       TOBN(0x87f551e8, 0x94916272), TOBN(0x033f9344, 0x6ceb0615)}},
+     {{TOBN(0x1e5eb0d1, 0x8be82e84), TOBN(0x89967f0e, 0x7a582fef),
+       TOBN(0xbcf687d5, 0xa6e921fa), TOBN(0xdfee4cf3, 0xd37a09ba)},
+      {TOBN(0x94f06965, 0xb493c465), TOBN(0x638b9a1c, 0x7635c030),
+       TOBN(0x76667864, 0x66f05e9f), TOBN(0xccaf6808, 0xc04da725)}},
+     {{TOBN(0xca2eb690, 0x768fccfc), TOBN(0xf402d37d, 0xb835b362),
+       TOBN(0x0efac0d0, 0xe2fdfcce), TOBN(0xefc9cdef, 0xb638d990)},
+      {TOBN(0x2af12b72, 0xd1669a8b), TOBN(0x33c536bc, 0x5774ccbd),
+       TOBN(0x30b21909, 0xfb34870e), TOBN(0xc38fa2f7, 0x7df25aca)}},
+     {{TOBN(0x74c5f02b, 0xbf81f3f5), TOBN(0x0525a5ae, 0xaf7e4581),
+       TOBN(0x88d2aaba, 0x433c54ae), TOBN(0xed9775db, 0x806a56c5)},
+      {TOBN(0xd320738a, 0xc0edb37d), TOBN(0x25fdb6ee, 0x66cc1f51),
+       TOBN(0xac661d17, 0x10600d76), TOBN(0x931ec1f3, 0xbdd1ed76)}},
+     {{TOBN(0x65c11d62, 0x19ee43f1), TOBN(0x5cd57c3e, 0x60829d97),
+       TOBN(0xd26c91a3, 0x984be6e8), TOBN(0xf08d9309, 0x8b0c53bd)},
+      {TOBN(0x94bc9e5b, 0xc016e4ea), TOBN(0xd3916839, 0x11d43d2b),
+       TOBN(0x886c5ad7, 0x73701155), TOBN(0xe0377626, 0x20b00715)}},
+     {{TOBN(0x7f01c9ec, 0xaa80ba59), TOBN(0x3083411a, 0x68538e51),
+       TOBN(0x970370f1, 0xe88128af), TOBN(0x625cc3db, 0x91dec14b)},
+      {TOBN(0xfef9666c, 0x01ac3107), TOBN(0xb2a8d577, 0xd5057ac3),
+       TOBN(0xb0f26299, 0x92be5df7), TOBN(0xf579c8e5, 0x00353924)}},
+     {{TOBN(0xb8fa3d93, 0x1341ed7a), TOBN(0x4223272c, 0xa7b59d49),
+       TOBN(0x3dcb1947, 0x83b8c4a4), TOBN(0x4e413c01, 0xed1302e4)},
+      {TOBN(0x6d999127, 0xe17e44ce), TOBN(0xee86bf75, 0x33b3adfb),
+       TOBN(0xf6902fe6, 0x25aa96ca), TOBN(0xb73540e4, 0xe5aae47d)}},
+     {{TOBN(0x32801d7b, 0x1b4a158c), TOBN(0xe571c99e, 0x27e2a369),
+       TOBN(0x40cb76c0, 0x10d9f197), TOBN(0xc308c289, 0x3167c0ae)},
+      {TOBN(0xa6ef9dd3, 0xeb7958f2), TOBN(0xa7226dfc, 0x300879b1),
+       TOBN(0x6cd0b362, 0x7edf0636), TOBN(0x4efbce6c, 0x7bc37eed)}},
+     {{TOBN(0x75f92a05, 0x8d699021), TOBN(0x586d4c79, 0x772566e3),
+       TOBN(0x378ca5f1, 0x761ad23a), TOBN(0x650d86fc, 0x1465a8ac)},
+      {TOBN(0x7a4ed457, 0x842ba251), TOBN(0x6b65e3e6, 0x42234933),
+       TOBN(0xaf1543b7, 0x31aad657), TOBN(0xa4cefe98, 0xcbfec369)}},
+     {{TOBN(0xb587da90, 0x9f47befb), TOBN(0x6562e9fb, 0x41312d13),
+       TOBN(0xa691ea59, 0xeff1cefe), TOBN(0xcc30477a, 0x05fc4cf6)},
+      {TOBN(0xa1632461, 0x0b0ffd3d), TOBN(0xa1f16f3b, 0x5b355956),
+       TOBN(0x5b148d53, 0x4224ec24), TOBN(0xdc834e7b, 0xf977012a)}},
+     {{TOBN(0x7bfc5e75, 0xb2c69dbc), TOBN(0x3aa77a29, 0x03c3da6c),
+       TOBN(0xde0df03c, 0xca910271), TOBN(0xcbd5ca4a, 0x7806dc55)},
+      {TOBN(0xe1ca5807, 0x6db476cb), TOBN(0xfde15d62, 0x5f37a31e),
+       TOBN(0xf49af520, 0xf41af416), TOBN(0x96c5c5b1, 0x7d342db5)}},
+     {{TOBN(0x155c43b7, 0xeb4ceb9b), TOBN(0x2e993010, 0x4e77371a),
+       TOBN(0x1d2987da, 0x675d43af), TOBN(0xef2bc1c0, 0x8599fd72)},
+      {TOBN(0x96894b7b, 0x9342f6b2), TOBN(0x201eadf2, 0x7c8e71f0),
+       TOBN(0xf3479d9f, 0x4a1f3efc), TOBN(0xe0f8a742, 0x702a9704)}},
+     {{TOBN(0xeafd44b6, 0xb3eba40c), TOBN(0xf9739f29, 0xc1c1e0d0),
+       TOBN(0x0091471a, 0x619d505e), TOBN(0xc15f9c96, 0x9d7c263e)},
+      {TOBN(0x5be47285, 0x83afbe33), TOBN(0xa3b6d6af, 0x04f1e092),
+       TOBN(0xe76526b9, 0x751a9d11), TOBN(0x2ec5b26d, 0x9a4ae4d2)}},
+     {{TOBN(0xeb66f4d9, 0x02f6fb8d), TOBN(0x4063c561, 0x96912164),
+       TOBN(0xeb7050c1, 0x80ef3000), TOBN(0x288d1c33, 0xeaa5b3f0)},
+      {TOBN(0xe87c68d6, 0x07806fd8), TOBN(0xb2f7f9d5, 0x4bbbf50f),
+       TOBN(0x25972f3a, 0xac8d6627), TOBN(0xf8547774, 0x10e8c13b)}},
+     {{TOBN(0xcc50ef6c, 0x872b4a60), TOBN(0xab2a34a4, 0x4613521b),
+       TOBN(0x39c5c190, 0x983e15d1), TOBN(0x61dde5df, 0x59905512)},
+      {TOBN(0xe417f621, 0x9f2275f3), TOBN(0x0750c8b6, 0x451d894b),
+       TOBN(0x75b04ab9, 0x78b0bdaa), TOBN(0x3bfd9fd4, 0x458589bd)}},
+     {{TOBN(0xf1013e30, 0xee9120b6), TOBN(0x2b51af93, 0x23a4743e),
+       TOBN(0xea96ffae, 0x48d14d9e), TOBN(0x71dc0dbe, 0x698a1d32)},
+      {TOBN(0x914962d2, 0x0180cca4), TOBN(0x1ae60677, 0xc3568963),
+       TOBN(0x8cf227b1, 0x437bc444), TOBN(0xc650c83b, 0xc9962c7a)}},
+     {{TOBN(0x23c2c7dd, 0xfe7ccfc4), TOBN(0xf925c89d, 0x1b929d48),
+       TOBN(0x4460f74b, 0x06783c33), TOBN(0xac2c8d49, 0xa590475a)},
+      {TOBN(0xfb40b407, 0xb807bba0), TOBN(0x9d1e362d, 0x69ff8f3a),
+       TOBN(0xa33e9681, 0xcbef64a4), TOBN(0x67ece5fa, 0x332fb4b2)}},
+     {{TOBN(0x6900a99b, 0x739f10e3), TOBN(0xc3341ca9, 0xff525925),
+       TOBN(0xee18a626, 0xa9e2d041), TOBN(0xa5a83685, 0x29580ddd)},
+      {TOBN(0xf3470c81, 0x9d7de3cd), TOBN(0xedf02586, 0x2062cf9c),
+       TOBN(0xf43522fa, 0xc010edb0), TOBN(0x30314135, 0x13a4b1ae)}},
+     {{TOBN(0xc792e02a, 0xdb22b94b), TOBN(0x993d8ae9, 0xa1eaa45b),
+       TOBN(0x8aad6cd3, 0xcd1e1c63), TOBN(0x89529ca7, 0xc5ce688a)},
+      {TOBN(0x2ccee3aa, 0xe572a253), TOBN(0xe02b6438, 0x02a21efb),
+       TOBN(0xa7091b6e, 0xc9430358), TOBN(0x06d1b1fa, 0x9d7db504)}},
+     {{TOBN(0x58846d32, 0xc4744733), TOBN(0x40517c71, 0x379f9e34),
+       TOBN(0x2f65655f, 0x130ef6ca), TOBN(0x526e4488, 0xf1f3503f)},
+      {TOBN(0x8467bd17, 0x7ee4a976), TOBN(0x1d9dc913, 0x921363d1),
+       TOBN(0xd8d24c33, 0xb069e041), TOBN(0x5eb5da0a, 0x2cdf7f51)}},
+     {{TOBN(0x1c0f3cb1, 0x197b994f), TOBN(0x3c95a6c5, 0x2843eae9),
+       TOBN(0x7766ffc9, 0xa6097ea5), TOBN(0x7bea4093, 0xd723b867)},
+      {TOBN(0xb48e1f73, 0x4db378f9), TOBN(0x70025b00, 0xe37b77ac),
+       TOBN(0x943dc8e7, 0xaf24ad46), TOBN(0xb98a15ac, 0x16d00a85)}},
+     {{TOBN(0x3adc38ba, 0x2743b004), TOBN(0xb1c7f4f7, 0x334415ee),
+       TOBN(0xea43df8f, 0x1e62d05a), TOBN(0x32618905, 0x9d76a3b6)},
+      {TOBN(0x2fbd0bb5, 0xa23a0f46), TOBN(0x5bc971db, 0x6a01918c),
+       TOBN(0x7801d94a, 0xb4743f94), TOBN(0xb94df65e, 0x676ae22b)}},
+     {{TOBN(0xaafcbfab, 0xaf95894c), TOBN(0x7b9bdc07, 0x276b2241),
+       TOBN(0xeaf98362, 0x5bdda48b), TOBN(0x5977faf2, 0xa3fcb4df)},
+      {TOBN(0xbed042ef, 0x052c4b5b), TOBN(0x9fe87f71, 0x067591f0),
+       TOBN(0xc89c73ca, 0x22f24ec7), TOBN(0x7d37fa9e, 0xe64a9f1b)}},
+     {{TOBN(0x2710841a, 0x15562627), TOBN(0x2c01a613, 0xc243b034),
+       TOBN(0x1d135c56, 0x2bc68609), TOBN(0xc2ca1715, 0x8b03f1f6)},
+      {TOBN(0xc9966c2d, 0x3eb81d82), TOBN(0xc02abf4a, 0x8f6df13e),
+       TOBN(0x77b34bd7, 0x8f72b43b), TOBN(0xaff6218f, 0x360c82b0)}},
+     {{TOBN(0x0aa5726c, 0x8d55b9d2), TOBN(0xdc0adbe9, 0x99e9bffb),
+       TOBN(0x9097549c, 0xefb9e72a), TOBN(0x16755712, 0x9dfb3111)},
+      {TOBN(0xdd8bf984, 0xf26847f9), TOBN(0xbcb8e387, 0xdfb30cb7),
+       TOBN(0xc1fd32a7, 0x5171ef9c), TOBN(0x977f3fc7, 0x389b363f)}},
+     {{TOBN(0x116eaf2b, 0xf4babda0), TOBN(0xfeab68bd, 0xf7113c8e),
+       TOBN(0xd1e3f064, 0xb7def526), TOBN(0x1ac30885, 0xe0b3fa02)},
+      {TOBN(0x1c5a6e7b, 0x40142d9d), TOBN(0x839b5603, 0x30921c0b),
+       TOBN(0x48f301fa, 0x36a116a3), TOBN(0x380e1107, 0xcfd9ee6d)}},
+     {{TOBN(0x7945ead8, 0x58854be1), TOBN(0x4111c12e, 0xcbd4d49d),
+       TOBN(0xece3b1ec, 0x3a29c2ef), TOBN(0x6356d404, 0x8d3616f5)},
+      {TOBN(0x9f0d6a8f, 0x594d320e), TOBN(0x0989316d, 0xf651ccd2),
+       TOBN(0x6c32117a, 0x0f8fdde4), TOBN(0x9abe5cc5, 0xa26a9bbc)}},
+     {{TOBN(0xcff560fb, 0x9723f671), TOBN(0x21b2a12d, 0x7f3d593c),
+       TOBN(0xe4cb18da, 0x24ba0696), TOBN(0x186e2220, 0xc3543384)},
+      {TOBN(0x722f64e0, 0x88312c29), TOBN(0x94282a99, 0x17dc7752),
+       TOBN(0x62467bbf, 0x5a85ee89), TOBN(0xf435c650, 0xf10076a0)}},
+     {{TOBN(0xc9ff1539, 0x43b3a50b), TOBN(0x7132130c, 0x1a53efbc),
+       TOBN(0x31bfe063, 0xf7b0c5b7), TOBN(0xb0179a7d, 0x4ea994cc)},
+      {TOBN(0x12d064b3, 0xc85f455b), TOBN(0x47259328, 0x8f6e0062),
+       TOBN(0xf64e590b, 0xb875d6d9), TOBN(0x22dd6225, 0xad92bcc7)}},
+     {{TOBN(0xb658038e, 0xb9c3bd6d), TOBN(0x00cdb0d6, 0xfbba27c8),
+       TOBN(0x0c681337, 0x1062c45d), TOBN(0xd8515b8c, 0x2d33407d)},
+      {TOBN(0xcb8f699e, 0x8cbb5ecf), TOBN(0x8c4347f8, 0xc608d7d8),
+       TOBN(0x2c11850a, 0xbb3e00db), TOBN(0x20a8dafd, 0xecb49d19)}},
+     {{TOBN(0xbd781480, 0x45ee2f40), TOBN(0x75e354af, 0x416b60cf),
+       TOBN(0xde0b58a1, 0x8d49a8c4), TOBN(0xe40e94e2, 0xfa359536)},
+      {TOBN(0xbd4fa59f, 0x62accd76), TOBN(0x05cf466a, 0x8c762837),
+       TOBN(0xb5abda99, 0x448c277b), TOBN(0x5a9e01bf, 0x48b13740)}},
+     {{TOBN(0x9d457798, 0x326aad8d), TOBN(0xbdef4954, 0xc396f7e7),
+       TOBN(0x6fb274a2, 0xc253e292), TOBN(0x2800bf0a, 0x1cfe53e7)},
+      {TOBN(0x22426d31, 0x44438fd4), TOBN(0xef233923, 0x5e259f9a),
+       TOBN(0x4188503c, 0x03f66264), TOBN(0x9e5e7f13, 0x7f9fdfab)}},
+     {{TOBN(0x565eb76c, 0x5fcc1aba), TOBN(0xea632548, 0x59b5bff8),
+       TOBN(0x5587c087, 0xaab6d3fa), TOBN(0x92b639ea, 0x6ce39c1b)},
+      {TOBN(0x0706e782, 0x953b135c), TOBN(0x7308912e, 0x425268ef),
+       TOBN(0x599e92c7, 0x090e7469), TOBN(0x83b90f52, 0x9bc35e75)}},
+     {{TOBN(0x4750b3d0, 0x244975b3), TOBN(0xf3a44358, 0x11965d72),
+       TOBN(0x179c6774, 0x9c8dc751), TOBN(0xff18cdfe, 0xd23d9ff0)},
+      {TOBN(0xc4013833, 0x2028e247), TOBN(0x96e280e2, 0xf3bfbc79),
+       TOBN(0xf60417bd, 0xd0880a84), TOBN(0x263c9f3d, 0x2a568151)}},
+     {{TOBN(0x36be15b3, 0x2d2ce811), TOBN(0x846dc0c2, 0xf8291d21),
+       TOBN(0x5cfa0ecb, 0x789fcfdb), TOBN(0x45a0beed, 0xd7535b9a)},
+      {TOBN(0xec8e9f07, 0x96d69af1), TOBN(0x31a7c5b8, 0x599ab6dc),
+       TOBN(0xd36d45ef, 0xf9e2e09f), TOBN(0x3cf49ef1, 0xdcee954b)}},
+     {{TOBN(0x6be34cf3, 0x086cff9b), TOBN(0x88dbd491, 0x39a3360f),
+       TOBN(0x1e96b8cc, 0x0dbfbd1d), TOBN(0xc1e5f7bf, 0xcb7e2552)},
+      {TOBN(0x0547b214, 0x28819d98), TOBN(0xc770dd9c, 0x7aea9dcb),
+       TOBN(0xaef0d4c7, 0x041d68c8), TOBN(0xcc2b9818, 0x13cb9ba8)}},
+     {{TOBN(0x7fc7bc76, 0xfe86c607), TOBN(0x6b7b9337, 0x502a9a95),
+       TOBN(0x1948dc27, 0xd14dab63), TOBN(0x249dd198, 0xdae047be)},
+      {TOBN(0xe8356584, 0xa981a202), TOBN(0x3531dd18, 0x3a893387),
+       TOBN(0x1be11f90, 0xc85c7209), TOBN(0x93d2fe1e, 0xe2a52b5a)}},
+     {{TOBN(0x8225bfe2, 0xec6d6b97), TOBN(0x9cf6d6f4, 0xbd0aa5de),
+       TOBN(0x911459cb, 0x54779f5f), TOBN(0x5649cddb, 0x86aeb1f3)},
+      {TOBN(0x32133579, 0x3f26ce5a), TOBN(0xc289a102, 0x550f431e),
+       TOBN(0x559dcfda, 0x73b84c6f), TOBN(0x84973819, 0xee3ac4d7)}},
+     {{TOBN(0xb51e55e6, 0xf2606a82), TOBN(0xe25f7061, 0x90f2fb57),
+       TOBN(0xacef6c2a, 0xb1a4e37c), TOBN(0x864e359d, 0x5dcf2706)},
+      {TOBN(0x479e6b18, 0x7ce57316), TOBN(0x2cab2500, 0x3a96b23d),
+       TOBN(0xed489862, 0x8ef16df7), TOBN(0x2056538c, 0xef3758b5)}},
+     {{TOBN(0xa7df865e, 0xf15d3101), TOBN(0x80c5533a, 0x61b553d7),
+       TOBN(0x366e1997, 0x4ed14294), TOBN(0x6620741f, 0xb3c0bcd6)},
+      {TOBN(0x21d1d9c4, 0xedc45418), TOBN(0x005b859e, 0xc1cc4a9d),
+       TOBN(0xdf01f630, 0xa1c462f0), TOBN(0x15d06cf3, 0xf26820c7)}},
+     {{TOBN(0x9f7f24ee, 0x3484be47), TOBN(0x2ff33e96, 0x4a0c902f),
+       TOBN(0x00bdf457, 0x5a0bc453), TOBN(0x2378dfaf, 0x1aa238db)},
+      {TOBN(0x272420ec, 0x856720f2), TOBN(0x2ad9d95b, 0x96797291),
+       TOBN(0xd1242cc6, 0x768a1558), TOBN(0x2e287f8b, 0x5cc86aa8)}},
+     {{TOBN(0x796873d0, 0x990cecaa), TOBN(0xade55f81, 0x675d4080),
+       TOBN(0x2645eea3, 0x21f0cd84), TOBN(0x7a1efa0f, 0xb4e17d02)},
+      {TOBN(0xf6858420, 0x037cc061), TOBN(0x682e05f0, 0xd5d43e12),
+       TOBN(0x59c36994, 0x27218710), TOBN(0x85cbba4d, 0x3f7cd2fc)}},
+     {{TOBN(0x726f9729, 0x7a3cd22a), TOBN(0x9f8cd5dc, 0x4a628397),
+       TOBN(0x17b93ab9, 0xc23165ed), TOBN(0xff5f5dbf, 0x122823d4)},
+      {TOBN(0xc1e4e4b5, 0x654a446d), TOBN(0xd1a9496f, 0x677257ba),
+       TOBN(0x6387ba94, 0xde766a56), TOBN(0x23608bc8, 0x521ec74a)}},
+     {{TOBN(0x16a522d7, 0x6688c4d4), TOBN(0x9d6b4282, 0x07373abd),
+       TOBN(0xa62f07ac, 0xb42efaa3), TOBN(0xf73e00f7, 0xe3b90180)},
+      {TOBN(0x36175fec, 0x49421c3e), TOBN(0xc4e44f9b, 0x3dcf2678),
+       TOBN(0x76df436b, 0x7220f09f), TOBN(0x172755fb, 0x3aa8b6cf)}},
+     {{TOBN(0xbab89d57, 0x446139cc), TOBN(0x0a0a6e02, 0x5fe0208f),
+       TOBN(0xcdbb63e2, 0x11e5d399), TOBN(0x33ecaa12, 0xa8977f0b)},
+      {TOBN(0x59598b21, 0xf7c42664), TOBN(0xb3e91b32, 0xab65d08a),
+       TOBN(0x035822ee, 0xf4502526), TOBN(0x1dcf0176, 0x720a82a9)}},
+     {{TOBN(0x50f8598f, 0x3d589e02), TOBN(0xdf0478ff, 0xb1d63d2c),
+       TOBN(0x8b8068bd, 0x1571cd07), TOBN(0x30c3aa4f, 0xd79670cd)},
+      {TOBN(0x25e8fd4b, 0x941ade7f), TOBN(0x3d1debdc, 0x32790011),
+       TOBN(0x65b6dcbd, 0x3a3f9ff0), TOBN(0x282736a4, 0x793de69c)}},
+     {{TOBN(0xef69a0c3, 0xd41d3bd3), TOBN(0xb533b8c9, 0x07a26bde),
+       TOBN(0xe2801d97, 0xdb2edf9f), TOBN(0xdc4a8269, 0xe1877af0)},
+      {TOBN(0x6c1c5851, 0x3d590dbe), TOBN(0x84632f6b, 0xee4e9357),
+       TOBN(0xd36d36b7, 0x79b33374), TOBN(0xb46833e3, 0x9bbca2e6)}},
+     {{TOBN(0x37893913, 0xf7fc0586), TOBN(0x385315f7, 0x66bf4719),
+       TOBN(0x72c56293, 0xb31855dc), TOBN(0xd1416d4e, 0x849061fe)},
+      {TOBN(0xbeb3ab78, 0x51047213), TOBN(0x447f6e61, 0xf040c996),
+       TOBN(0xd06d310d, 0x638b1d0c), TOBN(0xe28a413f, 0xbad1522e)}},
+     {{TOBN(0x685a76cb, 0x82003f86), TOBN(0x610d07f7, 0x0bcdbca3),
+       TOBN(0x6ff66021, 0x9ca4c455), TOBN(0x7df39b87, 0xcea10eec)},
+      {TOBN(0xb9255f96, 0xe22db218), TOBN(0x8cc6d9eb, 0x08a34c44),
+       TOBN(0xcd4ffb86, 0x859f9276), TOBN(0x8fa15eb2, 0x50d07335)}},
+     {{TOBN(0xdf553845, 0xcf2c24b5), TOBN(0x89f66a9f, 0x52f9c3ba),
+       TOBN(0x8f22b5b9, 0xe4a7ceb3), TOBN(0xaffef809, 0x0e134686)},
+      {TOBN(0x3e53e1c6, 0x8eb8fac2), TOBN(0x93c1e4eb, 0x28aec98e),
+       TOBN(0xb6b91ec5, 0x32a43bcb), TOBN(0x2dbfa947, 0xb2d74a51)}},
+     {{TOBN(0xe065d190, 0xca84bad7), TOBN(0xfb13919f, 0xad58e65c),
+       TOBN(0x3c41718b, 0xf1cb6e31), TOBN(0x688969f0, 0x06d05c3f)},
+      {TOBN(0xd4f94ce7, 0x21264d45), TOBN(0xfdfb65e9, 0x7367532b),
+       TOBN(0x5b1be8b1, 0x0945a39d), TOBN(0x229f789c, 0x2b8baf3b)}},
+     {{TOBN(0xd8f41f3e, 0x6f49f15d), TOBN(0x678ce828, 0x907f0792),
+       TOBN(0xc69ace82, 0xfca6e867), TOBN(0x106451ae, 0xd01dcc89)},
+      {TOBN(0x1bb4f7f0, 0x19fc32d2), TOBN(0x64633dfc, 0xb00c52d2),
+       TOBN(0x8f13549a, 0xad9ea445), TOBN(0x99a3bf50, 0xfb323705)}},
+     {{TOBN(0x0c9625a2, 0x534d4dbc), TOBN(0x45b8f1d1, 0xc2a2fea3),
+       TOBN(0x76ec21a1, 0xa530fc1a), TOBN(0x4bac9c2a, 0x9e5bd734)},
+      {TOBN(0x5996d76a, 0x7b4e3587), TOBN(0x0045cdee, 0x1182d9e3),
+       TOBN(0x1aee24b9, 0x1207f13d), TOBN(0x66452e97, 0x97345a41)}},
+     {{TOBN(0x16e5b054, 0x9f950cd0), TOBN(0x9cc72fb1, 0xd7fdd075),
+       TOBN(0x6edd61e7, 0x66249663), TOBN(0xde4caa4d, 0xf043cccb)},
+      {TOBN(0x11b1f57a, 0x55c7ac17), TOBN(0x779cbd44, 0x1a85e24d),
+       TOBN(0x78030f86, 0xe46081e7), TOBN(0xfd4a6032, 0x8e20f643)}},
+     {{TOBN(0xcc7a6488, 0x0a750c0f), TOBN(0x39bacfe3, 0x4e548e83),
+       TOBN(0x3d418c76, 0x0c110f05), TOBN(0x3e4daa4c, 0xb1f11588)},
+      {TOBN(0x2733e7b5, 0x5ffc69ff), TOBN(0x46f147bc, 0x92053127),
+       TOBN(0x885b2434, 0xd722df94), TOBN(0x6a444f65, 0xe6fc6b7c)}}},
+    {{{TOBN(0x7a1a465a, 0xc3f16ea8), TOBN(0x115a461d, 0xb2f1d11c),
+       TOBN(0x4767dd95, 0x6c68a172), TOBN(0x3392f2eb, 0xd13a4698)},
+      {TOBN(0xc7a99ccd, 0xe526cdc7), TOBN(0x8e537fdc, 0x22292b81),
+       TOBN(0x76d8cf69, 0xa6d39198), TOBN(0xffc5ff43, 0x2446852d)}},
+     {{TOBN(0x97b14f7e, 0xa90567e6), TOBN(0x513257b7, 0xb6ae5cb7),
+       TOBN(0x85454a3c, 0x9f10903d), TOBN(0xd8d2c9ad, 0x69bc3724)},
+      {TOBN(0x38da9324, 0x6b29cb44), TOBN(0xb540a21d, 0x77c8cbac),
+       TOBN(0x9bbfe435, 0x01918e42), TOBN(0xfffa707a, 0x56c3614e)}},
+     {{TOBN(0x0ce4e3f1, 0xd4e353b7), TOBN(0x062d8a14, 0xef46b0a0),
+       TOBN(0x6408d5ab, 0x574b73fd), TOBN(0xbc41d1c9, 0xd3273ffd)},
+      {TOBN(0x3538e1e7, 0x6be77800), TOBN(0x71fe8b37, 0xc5655031),
+       TOBN(0x1cd91621, 0x6b9b331a), TOBN(0xad825d0b, 0xbb388f73)}},
+     {{TOBN(0x56c2e05b, 0x1cb76219), TOBN(0x0ec0bf91, 0x71567e7e),
+       TOBN(0xe7076f86, 0x61c4c910), TOBN(0xd67b085b, 0xbabc04d9)},
+      {TOBN(0x9fb90459, 0x5e93a96a), TOBN(0x7526c1ea, 0xfbdc249a),
+       TOBN(0x0d44d367, 0xecdd0bb7), TOBN(0x95399917, 0x9dc0d695)}},
+     {{TOBN(0x61360ee9, 0x9e240d18), TOBN(0x057cdcac, 0xb4b94466),
+       TOBN(0xe7667cd1, 0x2fe5325c), TOBN(0x1fa297b5, 0x21974e3b)},
+      {TOBN(0xfa4081e7, 0xdb083d76), TOBN(0x31993be6, 0xf206bd15),
+       TOBN(0x8949269b, 0x14c19f8c), TOBN(0x21468d72, 0xa9d92357)}},
+     {{TOBN(0x2ccbc583, 0xa4c506ec), TOBN(0x957ed188, 0xd1acfe97),
+       TOBN(0x8baed833, 0x12f1aea2), TOBN(0xef2a6cb4, 0x8325362d)},
+      {TOBN(0x130dde42, 0x8e195c43), TOBN(0xc842025a, 0x0e6050c6),
+       TOBN(0x2da972a7, 0x08686a5d), TOBN(0xb52999a1, 0xe508b4a8)}},
+     {{TOBN(0xd9f090b9, 0x10a5a8bd), TOBN(0xca91d249, 0x096864da),
+       TOBN(0x8e6a93be, 0x3f67dbc1), TOBN(0xacae6fba, 0xf5f4764c)},
+      {TOBN(0x1563c6e0, 0xd21411a0), TOBN(0x28fa787f, 0xda0a4ad8),
+       TOBN(0xd524491c, 0x908c8030), TOBN(0x1257ba0e, 0x4c795f07)}},
+     {{TOBN(0x83f49167, 0xceca9754), TOBN(0x426d2cf6, 0x4b7939a0),
+       TOBN(0x2555e355, 0x723fd0bf), TOBN(0xa96e6d06, 0xc4f144e2)},
+      {TOBN(0x4768a8dd, 0x87880e61), TOBN(0x15543815, 0xe508e4d5),
+       TOBN(0x09d7e772, 0xb1b65e15), TOBN(0x63439dd6, 0xac302fa0)}},
+     {{TOBN(0xb93f802f, 0xc14e35c2), TOBN(0x71735b7c, 0x4341333c),
+       TOBN(0x03a25104, 0x16d4f362), TOBN(0x3f4d069b, 0xbf433c8e)},
+      {TOBN(0x0d83ae01, 0xf78f5a7c), TOBN(0x50a8ffbe, 0x7c4eed07),
+       TOBN(0xc74f8906, 0x76e10f83), TOBN(0x7d080966, 0x9ddaf8e1)}},
+     {{TOBN(0xb11df8e1, 0x698e04cc), TOBN(0x877be203, 0x169005c8),
+       TOBN(0x32749e8c, 0x4f3c6179), TOBN(0x2dbc9d0a, 0x7853fc05)},
+      {TOBN(0x187d4f93, 0x9454d937), TOBN(0xe682ce9d, 0xb4800e1b),
+       TOBN(0xa9129ad8, 0x165e68e8), TOBN(0x0fe29735, 0xbe7f785b)}},
+     {{TOBN(0x5303f40c, 0x5b9e02b7), TOBN(0xa37c9692, 0x35ee04e8),
+       TOBN(0x5f46cc20, 0x34d6632b), TOBN(0x55ef72b2, 0x96ac545b)},
+      {TOBN(0xabec5c1f, 0x7b91b062), TOBN(0x0a79e1c7, 0xbb33e821),
+       TOBN(0xbb04b428, 0x3a9f4117), TOBN(0x0de1f28f, 0xfd2a475a)}},
+     {{TOBN(0x31019ccf, 0x3a4434b4), TOBN(0xa3458111, 0x1a7954dc),
+       TOBN(0xa9dac80d, 0xe34972a7), TOBN(0xb043d054, 0x74f6b8dd)},
+      {TOBN(0x021c319e, 0x11137b1a), TOBN(0x00a754ce, 0xed5cc03f),
+       TOBN(0x0aa2c794, 0xcbea5ad4), TOBN(0x093e67f4, 0x70c015b6)}},
+     {{TOBN(0x72cdfee9, 0xc97e3f6b), TOBN(0xc10bcab4, 0xb6da7461),
+       TOBN(0x3b02d2fc, 0xb59806b9), TOBN(0x85185e89, 0xa1de6f47)},
+      {TOBN(0x39e6931f, 0x0eb6c4d4), TOBN(0x4d4440bd, 0xd4fa5b04),
+       TOBN(0x5418786e, 0x34be7eb8), TOBN(0x6380e521, 0x9d7259bc)}},
+     {{TOBN(0x20ac0351, 0xd598d710), TOBN(0x272c4166, 0xcb3a4da4),
+       TOBN(0xdb82fe1a, 0xca71de1f), TOBN(0x746e79f2, 0xd8f54b0f)},
+      {TOBN(0x6e7fc736, 0x4b573e9b), TOBN(0x75d03f46, 0xfd4b5040),
+       TOBN(0x5c1cc36d, 0x0b98d87b), TOBN(0x513ba3f1, 0x1f472da1)}},
+     {{TOBN(0x79d0af26, 0xabb177dd), TOBN(0xf82ab568, 0x7891d564),
+       TOBN(0x2b6768a9, 0x72232173), TOBN(0xefbb3bb0, 0x8c1f6619)},
+      {TOBN(0xb29c11db, 0xa6d18358), TOBN(0x519e2797, 0xb0916d3a),
+       TOBN(0xd4dc18f0, 0x9188e290), TOBN(0x648e86e3, 0x98b0ca7f)}},
+     {{TOBN(0x859d3145, 0x983c38b5), TOBN(0xb14f176c, 0x637abc8b),
+       TOBN(0x2793fb9d, 0xcaff7be6), TOBN(0xebe5a55f, 0x35a66a5a)},
+      {TOBN(0x7cec1dcd, 0x9f87dc59), TOBN(0x7c595cd3, 0xfbdbf560),
+       TOBN(0x5b543b22, 0x26eb3257), TOBN(0x69080646, 0xc4c935fd)}},
+     {{TOBN(0x7f2e4403, 0x81e9ede3), TOBN(0x243c3894, 0xcaf6df0a),
+       TOBN(0x7c605bb1, 0x1c073b11), TOBN(0xcd06a541, 0xba6a4a62)},
+      {TOBN(0x29168949, 0x49d4e2e5), TOBN(0x33649d07, 0x4af66880),
+       TOBN(0xbfc0c885, 0xe9a85035), TOBN(0xb4e52113, 0xfc410f4b)}},
+     {{TOBN(0xdca3b706, 0x78a6513b), TOBN(0x92ea4a2a, 0x9edb1943),
+       TOBN(0x02642216, 0xdb6e2dd8), TOBN(0x9b45d0b4, 0x9fd57894)},
+      {TOBN(0x114e70db, 0xc69d11ae), TOBN(0x1477dd19, 0x4c57595f),
+       TOBN(0xbc2208b4, 0xec77c272), TOBN(0x95c5b4d7, 0xdb68f59c)}},
+     {{TOBN(0xb8c4fc63, 0x42e532b7), TOBN(0x386ba422, 0x9ae35290),
+       TOBN(0xfb5dda42, 0xd201ecbc), TOBN(0x2353dc8b, 0xa0e38fd6)},
+      {TOBN(0x9a0b85ea, 0x68f7e978), TOBN(0x96ec5682, 0x2ad6d11f),
+       TOBN(0x5e279d6c, 0xe5f6886d), TOBN(0xd3fe03cd, 0x3cb1914d)}},
+     {{TOBN(0xfe541fa4, 0x7ea67c77), TOBN(0x952bd2af, 0xe3ea810c),
+       TOBN(0x791fef56, 0x8d01d374), TOBN(0xa3a1c621, 0x0f11336e)},
+      {TOBN(0x5ad0d5a9, 0xc7ec6d79), TOBN(0xff7038af, 0x3225c342),
+       TOBN(0x003c6689, 0xbc69601b), TOBN(0x25059bc7, 0x45e8747d)}},
+     {{TOBN(0xfa4965b2, 0xf2086fbf), TOBN(0xf6840ea6, 0x86916078),
+       TOBN(0xd7ac7620, 0x70081d6c), TOBN(0xe600da31, 0xb5328645)},
+      {TOBN(0x01916f63, 0x529b8a80), TOBN(0xe80e4858, 0x2d7d6f3e),
+       TOBN(0x29eb0fe8, 0xd664ca7c), TOBN(0xf017637b, 0xe7b43b0c)}},
+     {{TOBN(0x9a75c806, 0x76cb2566), TOBN(0x8f76acb1, 0xb24892d9),
+       TOBN(0x7ae7b9cc, 0x1f08fe45), TOBN(0x19ef7329, 0x6a4907d8)},
+      {TOBN(0x2db4ab71, 0x5f228bf0), TOBN(0xf3cdea39, 0x817032d7),
+       TOBN(0x0b1f482e, 0xdcabe3c0), TOBN(0x3baf76b4, 0xbb86325c)}},
+     {{TOBN(0xd49065e0, 0x10089465), TOBN(0x3bab5d29, 0x8e77c596),
+       TOBN(0x7636c3a6, 0x193dbd95), TOBN(0xdef5d294, 0xb246e499)},
+      {TOBN(0xb22c58b9, 0x286b2475), TOBN(0xa0b93939, 0xcd80862b),
+       TOBN(0x3002c83a, 0xf0992388), TOBN(0x6de01f9b, 0xeacbe14c)}},
+     {{TOBN(0x6aac688e, 0xadd70482), TOBN(0x708de92a, 0x7b4a4e8a),
+       TOBN(0x75b6dd73, 0x758a6eef), TOBN(0xea4bf352, 0x725b3c43)},
+      {TOBN(0x10041f2c, 0x87912868), TOBN(0xb1b1be95, 0xef09297a),
+       TOBN(0x19ae23c5, 0xa9f3860a), TOBN(0xc4f0f839, 0x515dcf4b)}},
+     {{TOBN(0x3c7ecca3, 0x97f6306a), TOBN(0x744c44ae, 0x68a3a4b0),
+       TOBN(0x69cd13a0, 0xb3a1d8a2), TOBN(0x7cad0a1e, 0x5256b578)},
+      {TOBN(0xea653fcd, 0x33791d9e), TOBN(0x9cc2a05d, 0x74b2e05f),
+       TOBN(0x73b391dc, 0xfd7affa2), TOBN(0xddb7091e, 0xb6b05442)}},
+     {{TOBN(0xc71e27bf, 0x8538a5c6), TOBN(0x195c63dd, 0x89abff17),
+       TOBN(0xfd315285, 0x1b71e3da), TOBN(0x9cbdfda7, 0xfa680fa0)},
+      {TOBN(0x9db876ca, 0x849d7eab), TOBN(0xebe2764b, 0x3c273271),
+       TOBN(0x663357e3, 0xf208dcea), TOBN(0x8c5bd833, 0x565b1b70)}},
+     {{TOBN(0xccc3b4f5, 0x9837fc0d), TOBN(0x9b641ba8, 0xa79cf00f),
+       TOBN(0x7428243d, 0xdfdf3990), TOBN(0x83a594c4, 0x020786b1)},
+      {TOBN(0xb712451a, 0x526c4502), TOBN(0x9d39438e, 0x6adb3f93),
+       TOBN(0xfdb261e3, 0xe9ff0ccd), TOBN(0x80344e3c, 0xe07af4c3)}},
+     {{TOBN(0x75900d7c, 0x2fa4f126), TOBN(0x08a3b865, 0x5c99a232),
+       TOBN(0x2478b6bf, 0xdb25e0c3), TOBN(0x482cc2c2, 0x71db2edf)},
+      {TOBN(0x37df7e64, 0x5f321bb8), TOBN(0x8a93821b, 0x9a8005b4),
+       TOBN(0x3fa2f10c, 0xcc8c1958), TOBN(0x0d332218, 0x2c269d0a)}},
+     {{TOBN(0x20ab8119, 0xe246b0e6), TOBN(0xb39781e4, 0xd349fd17),
+       TOBN(0xd293231e, 0xb31aa100), TOBN(0x4b779c97, 0xbb032168)},
+      {TOBN(0x4b3f19e1, 0xc8470500), TOBN(0x45b7efe9, 0x0c4c869d),
+       TOBN(0xdb84f38a, 0xa1a6bbcc), TOBN(0x3b59cb15, 0xb2fddbc1)}},
+     {{TOBN(0xba5514df, 0x3fd165e8), TOBN(0x499fd6a9, 0x061f8811),
+       TOBN(0x72cd1fe0, 0xbfef9f00), TOBN(0x120a4bb9, 0x79ad7e8a)},
+      {TOBN(0xf2ffd095, 0x5f4a5ac5), TOBN(0xcfd174f1, 0x95a7a2f0),
+       TOBN(0xd42301ba, 0x9d17baf1), TOBN(0xd2fa487a, 0x77f22089)}},
+     {{TOBN(0x9cb09efe, 0xb1dc77e1), TOBN(0xe9566939, 0x21c99682),
+       TOBN(0x8c546901, 0x6c6067bb), TOBN(0xfd378574, 0x61c24456)},
+      {TOBN(0x2b6a6cbe, 0x81796b33), TOBN(0x62d550f6, 0x58e87f8b),
+       TOBN(0x1b763e1c, 0x7f1b01b4), TOBN(0x4b93cfea, 0x1b1b5e12)}},
+     {{TOBN(0xb9345238, 0x1d531696), TOBN(0x57201c00, 0x88cdde69),
+       TOBN(0xdde92251, 0x9a86afc7), TOBN(0xe3043895, 0xbd35cea8)},
+      {TOBN(0x7608c1e1, 0x8555970d), TOBN(0x8267dfa9, 0x2535935e),
+       TOBN(0xd4c60a57, 0x322ea38b), TOBN(0xe0bf7977, 0x804ef8b5)}},
+     {{TOBN(0x1a0dab28, 0xc06fece4), TOBN(0xd405991e, 0x94e7b49d),
+       TOBN(0xc542b6d2, 0x706dab28), TOBN(0xcb228da3, 0xa91618fb)},
+      {TOBN(0x224e4164, 0x107d1cea), TOBN(0xeb9fdab3, 0xd0f5d8f1),
+       TOBN(0xc02ba386, 0x0d6e41cd), TOBN(0x676a72c5, 0x9b1f7146)}},
+     {{TOBN(0xffd6dd98, 0x4d6cb00b), TOBN(0xcef9c5ca, 0xde2e8d7c),
+       TOBN(0xa1bbf5d7, 0x641c7936), TOBN(0x1b95b230, 0xee8f772e)},
+      {TOBN(0xf765a92e, 0xe8ac25b1), TOBN(0xceb04cfc, 0x3a18b7c6),
+       TOBN(0x27944cef, 0x0acc8966), TOBN(0xcbb3c957, 0x434c1004)}},
+     {{TOBN(0x9c9971a1, 0xa43ff93c), TOBN(0x5bc2db17, 0xa1e358a9),
+       TOBN(0x45b4862e, 0xa8d9bc82), TOBN(0x70ebfbfb, 0x2201e052)},
+      {TOBN(0xafdf64c7, 0x92871591), TOBN(0xea5bcae6, 0xb42d0219),
+       TOBN(0xde536c55, 0x2ad8f03c), TOBN(0xcd6c3f4d, 0xa76aa33c)}},
+     {{TOBN(0xbeb5f623, 0x0bca6de3), TOBN(0xdd20dd99, 0xb1e706fd),
+       TOBN(0x90b3ff9d, 0xac9059d4), TOBN(0x2d7b2902, 0x7ccccc4e)},
+      {TOBN(0x8a090a59, 0xce98840f), TOBN(0xa5d947e0, 0x8410680a),
+       TOBN(0x49ae346a, 0x923379a5), TOBN(0x7dbc84f9, 0xb28a3156)}},
+     {{TOBN(0xfd40d916, 0x54a1aff2), TOBN(0xabf318ba, 0x3a78fb9b),
+       TOBN(0x50152ed8, 0x3029f95e), TOBN(0x9fc1dd77, 0xc58ad7fa)},
+      {TOBN(0x5fa57915, 0x13595c17), TOBN(0xb9504668, 0x8f62b3a9),
+       TOBN(0x907b5b24, 0xff3055b0), TOBN(0x2e995e35, 0x9a84f125)}},
+     {{TOBN(0x87dacf69, 0x7e9bbcfb), TOBN(0x95d0c1d6, 0xe86d96e3),
+       TOBN(0x65726e3c, 0x2d95a75c), TOBN(0x2c3c9001, 0xacd27f21)},
+      {TOBN(0x1deab561, 0x6c973f57), TOBN(0x108b7e2c, 0xa5221643),
+       TOBN(0x5fee9859, 0xc4ef79d4), TOBN(0xbd62b88a, 0x40d4b8c6)}},
+     {{TOBN(0xb4dd29c4, 0x197c75d6), TOBN(0x266a6df2, 0xb7076feb),
+       TOBN(0x9512d0ea, 0x4bf2df11), TOBN(0x1320c24f, 0x6b0cc9ec)},
+      {TOBN(0x6bb1e0e1, 0x01a59596), TOBN(0x8317c5bb, 0xeff9aaac),
+       TOBN(0x65bb405e, 0x385aa6c9), TOBN(0x613439c1, 0x8f07988f)}},
+     {{TOBN(0xd730049f, 0x16a66e91), TOBN(0xe97f2820, 0xfa1b0e0d),
+       TOBN(0x4131e003, 0x304c28ea), TOBN(0x820ab732, 0x526bac62)},
+      {TOBN(0xb2ac9ef9, 0x28714423), TOBN(0x54ecfffa, 0xadb10cb2),
+       TOBN(0x8781476e, 0xf886a4cc), TOBN(0x4b2c87b5, 0xdb2f8d49)}},
+     {{TOBN(0xe857cd20, 0x0a44295d), TOBN(0x707d7d21, 0x58c6b044),
+       TOBN(0xae8521f9, 0xf596757c), TOBN(0x87448f03, 0x67b2b714)},
+      {TOBN(0x13a9bc45, 0x5ebcd58d), TOBN(0x79bcced9, 0x9122d3c1),
+       TOBN(0x3c644247, 0x9e076642), TOBN(0x0cf22778, 0x2df4767d)}},
+     {{TOBN(0x5e61aee4, 0x71d444b6), TOBN(0x211236bf, 0xc5084a1d),
+       TOBN(0x7e15bc9a, 0x4fd3eaf6), TOBN(0x68df2c34, 0xab622bf5)},
+      {TOBN(0x9e674f0f, 0x59bf4f36), TOBN(0xf883669b, 0xd7f34d73),
+       TOBN(0xc48ac1b8, 0x31497b1d), TOBN(0x323b925d, 0x5106703b)}},
+     {{TOBN(0x22156f42, 0x74082008), TOBN(0xeffc521a, 0xc8482bcb),
+       TOBN(0x5c6831bf, 0x12173479), TOBN(0xcaa2528f, 0xc4739490)},
+      {TOBN(0x84d2102a, 0x8f1b3c4d), TOBN(0xcf64dfc1, 0x2d9bec0d),
+       TOBN(0x433febad, 0x78a546ef), TOBN(0x1f621ec3, 0x7b73cef1)}},
+     {{TOBN(0x6aecd627, 0x37338615), TOBN(0x162082ab, 0x01d8edf6),
+       TOBN(0x833a8119, 0x19e86b66), TOBN(0x6023a251, 0xd299b5db)},
+      {TOBN(0xf5bb0c3a, 0xbbf04b89), TOBN(0x6735eb69, 0xae749a44),
+       TOBN(0xd0e058c5, 0x4713de3b), TOBN(0xfdf2593e, 0x2c3d4ccd)}},
+     {{TOBN(0x1b8f414e, 0xfdd23667), TOBN(0xdd52aaca, 0xfa2015ee),
+       TOBN(0x3e31b517, 0xbd9625ff), TOBN(0x5ec9322d, 0x8db5918c)},
+      {TOBN(0xbc73ac85, 0xa96f5294), TOBN(0x82aa5bf3, 0x61a0666a),
+       TOBN(0x49755810, 0xbf08ac42), TOBN(0xd21cdfd5, 0x891cedfc)}},
+     {{TOBN(0x918cb57b, 0x67f8be10), TOBN(0x365d1a7c, 0x56ffa726),
+       TOBN(0x2435c504, 0x6532de93), TOBN(0xc0fc5e10, 0x2674cd02)},
+      {TOBN(0x6e51fcf8, 0x9cbbb142), TOBN(0x1d436e5a, 0xafc50692),
+       TOBN(0x766bffff, 0x3fbcae22), TOBN(0x3148c2fd, 0xfd55d3b8)}},
+     {{TOBN(0x52c7fdc9, 0x233222fa), TOBN(0x89ff1092, 0xe419fb6b),
+       TOBN(0x3cd6db99, 0x25254977), TOBN(0x2e85a161, 0x1cf12ca7)},
+      {TOBN(0xadd2547c, 0xdc810bc9), TOBN(0xea3f458f, 0x9d257c22),
+       TOBN(0x642c1fbe, 0x27d6b19b), TOBN(0xed07e6b5, 0x140481a6)}},
+     {{TOBN(0x6ada1d42, 0x86d2e0f8), TOBN(0xe5920122, 0x0e8a9fd5),
+       TOBN(0x02c936af, 0x708c1b49), TOBN(0x60f30fee, 0x2b4bfaff)},
+      {TOBN(0x6637ad06, 0x858e6a61), TOBN(0xce4c7767, 0x3fd374d0),
+       TOBN(0x39d54b2d, 0x7188defb), TOBN(0xa8c9d250, 0xf56a6b66)}},
+     {{TOBN(0x58fc0f5e, 0xb24fe1dc), TOBN(0x9eaf9dee, 0x6b73f24c),
+       TOBN(0xa90d588b, 0x33650705), TOBN(0xde5b62c5, 0xaf2ec729)},
+      {TOBN(0x5c72cfae, 0xd3c2b36e), TOBN(0x868c19d5, 0x034435da),
+       TOBN(0x88605f93, 0xe17ee145), TOBN(0xaa60c4ee, 0x77a5d5b1)}},
+     {{TOBN(0xbcf5bfd2, 0x3b60c472), TOBN(0xaf4ef13c, 0xeb1d3049),
+       TOBN(0x373f44fc, 0xe13895c9), TOBN(0xf29b382f, 0x0cbc9822)},
+      {TOBN(0x1bfcb853, 0x73efaef6), TOBN(0xcf56ac9c, 0xa8c96f40),
+       TOBN(0xd7adf109, 0x7a191e24), TOBN(0x98035f44, 0xbf8a8dc2)}},
+     {{TOBN(0xf40a71b9, 0x1e750c84), TOBN(0xc57f7b0c, 0x5dc6c469),
+       TOBN(0x49a0e79c, 0x6fbc19c1), TOBN(0x6b0f5889, 0xa48ebdb8)},
+      {TOBN(0x5d3fd084, 0xa07c4e9f), TOBN(0xc3830111, 0xab27de14),
+       TOBN(0x0e4929fe, 0x33e08dcc), TOBN(0xf4a5ad24, 0x40bb73a3)}},
+     {{TOBN(0xde86c2bf, 0x490f97ca), TOBN(0x288f09c6, 0x67a1ce18),
+       TOBN(0x364bb886, 0x1844478d), TOBN(0x7840fa42, 0xceedb040)},
+      {TOBN(0x1269fdd2, 0x5a631b37), TOBN(0x94761f1e, 0xa47c8b7d),
+       TOBN(0xfc0c2e17, 0x481c6266), TOBN(0x85e16ea2, 0x3daa5fa7)}},
+     {{TOBN(0xccd86033, 0x92491048), TOBN(0x0c2f6963, 0xf4d402d7),
+       TOBN(0x6336f7df, 0xdf6a865c), TOBN(0x0a2a463c, 0xb5c02a87)},
+      {TOBN(0xb0e29be7, 0xbf2f12ee), TOBN(0xf0a22002, 0x66bad988),
+       TOBN(0x27f87e03, 0x9123c1d7), TOBN(0x21669c55, 0x328a8c98)}},
+     {{TOBN(0x186b9803, 0x92f14529), TOBN(0xd3d056cc, 0x63954df3),
+       TOBN(0x2f03fd58, 0x175a46f6), TOBN(0x63e34ebe, 0x11558558)},
+      {TOBN(0xe13fedee, 0x5b80cfa5), TOBN(0xe872a120, 0xd401dbd1),
+       TOBN(0x52657616, 0xe8a9d667), TOBN(0xbc8da4b6, 0xe08d6693)}},
+     {{TOBN(0x370fb9bb, 0x1b703e75), TOBN(0x6773b186, 0xd4338363),
+       TOBN(0x18dad378, 0xecef7bff), TOBN(0xaac787ed, 0x995677da)},
+      {TOBN(0x4801ea8b, 0x0437164b), TOBN(0xf430ad20, 0x73fe795e),
+       TOBN(0xb164154d, 0x8ee5eb73), TOBN(0x0884ecd8, 0x108f7c0e)}},
+     {{TOBN(0x0e6ec096, 0x5f520698), TOBN(0x640631fe, 0x44f7b8d9),
+       TOBN(0x92fd34fc, 0xa35a68b9), TOBN(0x9c5a4b66, 0x4d40cf4e)},
+      {TOBN(0x949454bf, 0x80b6783d), TOBN(0x80e701fe, 0x3a320a10),
+       TOBN(0x8d1a564a, 0x1a0a39b2), TOBN(0x1436d53d, 0x320587db)}},
+     {{TOBN(0xf5096e6d, 0x6556c362), TOBN(0xbc23a3c0, 0xe2455d7e),
+       TOBN(0x3a7aee54, 0x807230f9), TOBN(0x9ba1cfa6, 0x22ae82fd)},
+      {TOBN(0x833a057a, 0x99c5d706), TOBN(0x8be85f4b, 0x842315c9),
+       TOBN(0xd083179a, 0x66a72f12), TOBN(0x2fc77d5d, 0xcdcc73cd)}},
+     {{TOBN(0x22b88a80, 0x5616ee30), TOBN(0xfb09548f, 0xe7ab1083),
+       TOBN(0x8ad6ab0d, 0x511270cd), TOBN(0x61f6c57a, 0x6924d9ab)},
+      {TOBN(0xa0f7bf72, 0x90aecb08), TOBN(0x849f87c9, 0x0df784a4),
+       TOBN(0x27c79c15, 0xcfaf1d03), TOBN(0xbbf9f675, 0xc463face)}},
+     {{TOBN(0x91502c65, 0x765ba543), TOBN(0x18ce3cac, 0x42ea60dd),
+       TOBN(0xe5cee6ac, 0x6e43ecb3), TOBN(0x63e4e910, 0x68f2aeeb)},
+      {TOBN(0x26234fa3, 0xc85932ee), TOBN(0x96883e8b, 0x4c90c44d),
+       TOBN(0x29b9e738, 0xa18a50f6), TOBN(0xbfc62b2a, 0x3f0420df)}},
+     {{TOBN(0xd22a7d90, 0x6d3e1fa9), TOBN(0x17115618, 0xfe05b8a3),
+       TOBN(0x2a0c9926, 0xbb2b9c01), TOBN(0xc739fcc6, 0xe07e76a2)},
+      {TOBN(0x540e9157, 0x165e439a), TOBN(0x06353a62, 0x6a9063d8),
+       TOBN(0x84d95594, 0x61e927a3), TOBN(0x013b9b26, 0xe2e0be7f)}},
+     {{TOBN(0x4feaec3b, 0x973497f1), TOBN(0x15c0f94e, 0x093ebc2d),
+       TOBN(0x6af5f227, 0x33af0583), TOBN(0x0c2af206, 0xc61f3340)},
+      {TOBN(0xd25dbdf1, 0x4457397c), TOBN(0x2e8ed017, 0xcabcbae0),
+       TOBN(0xe3010938, 0xc2815306), TOBN(0xbaa99337, 0xe8c6cd68)}},
+     {{TOBN(0x08513182, 0x3b0ec7de), TOBN(0x1e1b822b, 0x58df05df),
+       TOBN(0x5c14842f, 0xa5c3b683), TOBN(0x98fe977e, 0x3eba34ce)},
+      {TOBN(0xfd2316c2, 0x0d5e8873), TOBN(0xe48d839a, 0xbd0d427d),
+       TOBN(0x495b2218, 0x623fc961), TOBN(0x24ee56e7, 0xb46fba5e)}},
+     {{TOBN(0x9184a55b, 0x91e4de58), TOBN(0xa7488ca5, 0xdfdea288),
+       TOBN(0xa723862e, 0xa8dcc943), TOBN(0x92d762b2, 0x849dc0fc)},
+      {TOBN(0x3c444a12, 0x091ff4a9), TOBN(0x581113fa, 0x0cada274),
+       TOBN(0xb9de0a45, 0x30d8eae2), TOBN(0x5e0fcd85, 0xdf6b41ea)}},
+     {{TOBN(0x6233ea68, 0xc094dbb5), TOBN(0xb77d062e, 0xd968d410),
+       TOBN(0x3e719bbc, 0x58b3002d), TOBN(0x68e7dd3d, 0x3dc49d58)},
+      {TOBN(0x8d825740, 0x013a5e58), TOBN(0x21311747, 0x3c9e3c1b),
+       TOBN(0x0cb0a2a7, 0x7c99b6ab), TOBN(0x5c48a3b3, 0xc2f888f2)}}},
+    {{{TOBN(0xc7913e91, 0x991724f3), TOBN(0x5eda799c, 0x39cbd686),
+       TOBN(0xddb595c7, 0x63d4fc1e), TOBN(0x6b63b80b, 0xac4fed54)},
+      {TOBN(0x6ea0fc69, 0x7e5fb516), TOBN(0x737708ba, 0xd0f1c964),
+       TOBN(0x9628745f, 0x11a92ca5), TOBN(0x61f37958, 0x9a86967a)}},
+     {{TOBN(0x9af39b2c, 0xaa665072), TOBN(0x78322fa4, 0xefd324ef),
+       TOBN(0x3d153394, 0xc327bd31), TOBN(0x81d5f271, 0x3129dab0)},
+      {TOBN(0xc72e0c42, 0xf48027f5), TOBN(0xaa40cdbc, 0x8536e717),
+       TOBN(0xf45a657a, 0x2d369d0f), TOBN(0xb03bbfc4, 0xea7f74e6)}},
+     {{TOBN(0x46a8c418, 0x0d738ded), TOBN(0x6f1a5bb0, 0xe0de5729),
+       TOBN(0xf10230b9, 0x8ba81675), TOBN(0x32c6f30c, 0x112b33d4)},
+      {TOBN(0x7559129d, 0xd8fffb62), TOBN(0x6a281b47, 0xb459bf05),
+       TOBN(0x77c1bd3a, 0xfa3b6776), TOBN(0x0709b380, 0x7829973a)}},
+     {{TOBN(0x8c26b232, 0xa3326505), TOBN(0x38d69272, 0xee1d41bf),
+       TOBN(0x0459453e, 0xffe32afa), TOBN(0xce8143ad, 0x7cb3ea87)},
+      {TOBN(0x932ec1fa, 0x7e6ab666), TOBN(0x6cd2d230, 0x22286264),
+       TOBN(0x459a46fe, 0x6736f8ed), TOBN(0x50bf0d00, 0x9eca85bb)}},
+     {{TOBN(0x0b825852, 0x877a21ec), TOBN(0x300414a7, 0x0f537a94),
+       TOBN(0x3f1cba40, 0x21a9a6a2), TOBN(0x50824eee, 0x76943c00)},
+      {TOBN(0xa0dbfcec, 0xf83cba5d), TOBN(0xf9538148, 0x93b4f3c0),
+       TOBN(0x61744162, 0x48f24dd7), TOBN(0x5322d64d, 0xe4fb09dd)}},
+     {{TOBN(0x57447384, 0x3d9325f3), TOBN(0xa9bef2d0, 0xf371cb84),
+       TOBN(0x77d2188b, 0xa61e36c5), TOBN(0xbbd6a7d7, 0xc602df72)},
+      {TOBN(0xba3aa902, 0x8f61bc0b), TOBN(0xf49085ed, 0x6ed0b6a1),
+       TOBN(0x8bc625d6, 0xae6e8298), TOBN(0x832b0b1d, 0xa2e9c01d)}},
+     {{TOBN(0xa337c447, 0xf1f0ced1), TOBN(0x800cc793, 0x9492dd2b),
+       TOBN(0x4b93151d, 0xbea08efa), TOBN(0x820cf3f8, 0xde0a741e)},
+      {TOBN(0xff1982dc, 0x1c0f7d13), TOBN(0xef921960, 0x84dde6ca),
+       TOBN(0x1ad7d972, 0x45f96ee3), TOBN(0x319c8dbe, 0x29dea0c7)}},
+     {{TOBN(0xd3ea3871, 0x7b82b99b), TOBN(0x75922d4d, 0x470eb624),
+       TOBN(0x8f66ec54, 0x3b95d466), TOBN(0x66e673cc, 0xbee1e346)},
+      {TOBN(0x6afe67c4, 0xb5f2b89a), TOBN(0x3de9c1e6, 0x290e5cd3),
+       TOBN(0x8c278bb6, 0x310a2ada), TOBN(0x420fa384, 0x0bdb323b)}},
+     {{TOBN(0x0ae1d63b, 0x0eb919b0), TOBN(0xd74ee51d, 0xa74b9620),
+       TOBN(0x395458d0, 0xa674290c), TOBN(0x324c930f, 0x4620a510)},
+      {TOBN(0x2d1f4d19, 0xfbac27d4), TOBN(0x4086e8ca, 0x9bedeeac),
+       TOBN(0x0cdd211b, 0x9b679ab8), TOBN(0x5970167d, 0x7090fec4)}},
+     {{TOBN(0x3420f2c9, 0xfaf1fc63), TOBN(0x616d333a, 0x328c8bb4),
+       TOBN(0x7d65364c, 0x57f1fe4a), TOBN(0x9343e877, 0x55e5c73a)},
+      {TOBN(0x5795176b, 0xe970e78c), TOBN(0xa36ccebf, 0x60533627),
+       TOBN(0xfc7c7380, 0x09cdfc1b), TOBN(0xb39a2afe, 0xb3fec326)}},
+     {{TOBN(0xb7ff1ba1, 0x6224408a), TOBN(0xcc856e92, 0x247cfc5e),
+       TOBN(0x01f102e7, 0xc18bc493), TOBN(0x4613ab74, 0x2091c727)},
+      {TOBN(0xaa25e89c, 0xc420bf2b), TOBN(0x00a53176, 0x90337ec2),
+       TOBN(0xd2be9f43, 0x7d025fc7), TOBN(0x3316fb85, 0x6e6fe3dc)}},
+     {{TOBN(0x27520af5, 0x9ac50814), TOBN(0xfdf95e78, 0x9a8e4223),
+       TOBN(0xb7e7df2a, 0x56bec5a0), TOBN(0xf7022f7d, 0xdf159e5d)},
+      {TOBN(0x93eeeab1, 0xcac1fe8f), TOBN(0x8040188c, 0x37451168),
+       TOBN(0x7ee8aa8a, 0xd967dce6), TOBN(0xfa0e79e7, 0x3abc9299)}},
+     {{TOBN(0x67332cfc, 0x2064cfd1), TOBN(0x339c31de, 0xb0651934),
+       TOBN(0x719b28d5, 0x2a3bcbea), TOBN(0xee74c82b, 0x9d6ae5c6)},
+      {TOBN(0x0927d05e, 0xbaf28ee6), TOBN(0x82cecf2c, 0x9d719028),
+       TOBN(0x0b0d353e, 0xddb30289), TOBN(0xfe4bb977, 0xfddb2e29)}},
+     {{TOBN(0xbb5bb990, 0x640bfd9e), TOBN(0xd226e277, 0x82f62108),
+       TOBN(0x4bf00985, 0x02ffdd56), TOBN(0x7756758a, 0x2ca1b1b5)},
+      {TOBN(0xc32b62a3, 0x5285fe91), TOBN(0xedbc546a, 0x8c9cd140),
+       TOBN(0x1e47a013, 0xaf5cb008), TOBN(0xbca7e720, 0x073ce8f2)}},
+     {{TOBN(0xe10b2ab8, 0x17a91cae), TOBN(0xb89aab65, 0x08e27f63),
+       TOBN(0x7b3074a7, 0xdba3ddf9), TOBN(0x1c20ce09, 0x330c2972)},
+      {TOBN(0x6b9917b4, 0x5fcf7e33), TOBN(0xe6793743, 0x945ceb42),
+       TOBN(0x18fc2215, 0x5c633d19), TOBN(0xad1adb3c, 0xc7485474)}},
+     {{TOBN(0x646f9679, 0x6424c49b), TOBN(0xf888dfe8, 0x67c241c9),
+       TOBN(0xe12d4b93, 0x24f68b49), TOBN(0x9a6b62d8, 0xa571df20)},
+      {TOBN(0x81b4b26d, 0x179483cb), TOBN(0x666f9632, 0x9511fae2),
+       TOBN(0xd281b3e4, 0xd53aa51f), TOBN(0x7f96a765, 0x7f3dbd16)}},
+     {{TOBN(0xa7f8b5bf, 0x074a30ce), TOBN(0xd7f52107, 0x005a32e6),
+       TOBN(0x6f9e0907, 0x50237ed4), TOBN(0x2f21da47, 0x8096fa2b)},
+      {TOBN(0xf3e19cb4, 0xeec863a0), TOBN(0xd18f77fd, 0x9527620a),
+       TOBN(0x9505c81c, 0x407c1cf8), TOBN(0x9998db4e, 0x1b6ec284)}},
+     {{TOBN(0x7e3389e5, 0xc247d44d), TOBN(0x12507141, 0x3f4f3d80),
+       TOBN(0xd4ba0110, 0x4a78a6c7), TOBN(0x312874a0, 0x767720be)},
+      {TOBN(0xded059a6, 0x75944370), TOBN(0xd6123d90, 0x3b2c0bdd),
+       TOBN(0xa56b717b, 0x51c108e3), TOBN(0x9bb7940e, 0x070623e9)}},
+     {{TOBN(0x794e2d59, 0x84ac066c), TOBN(0xf5954a92, 0xe68c69a0),
+       TOBN(0x28c52458, 0x4fd99dcc), TOBN(0x60e639fc, 0xb1012517)},
+      {TOBN(0xc2e60125, 0x7de79248), TOBN(0xe9ef6404, 0xf12fc6d7),
+       TOBN(0x4c4f2808, 0x2a3b5d32), TOBN(0x865ad32e, 0xc768eb8a)}},
+     {{TOBN(0xac02331b, 0x13fb70b6), TOBN(0x037b44c1, 0x95599b27),
+       TOBN(0x1a860fc4, 0x60bd082c), TOBN(0xa2e25745, 0xc980cd01)},
+      {TOBN(0xee3387a8, 0x1da0263e), TOBN(0x931bfb95, 0x2d10f3d6),
+       TOBN(0x5b687270, 0xa1f24a32), TOBN(0xf140e65d, 0xca494b86)}},
+     {{TOBN(0x4f4ddf91, 0xb2f1ac7a), TOBN(0xf99eaabb, 0x760fee27),
+       TOBN(0x57f4008a, 0x49c228e5), TOBN(0x090be440, 0x1cf713bb)},
+      {TOBN(0xac91fbe4, 0x5004f022), TOBN(0xd838c2c2, 0x569e1af6),
+       TOBN(0xd6c7d20b, 0x0f1daaa5), TOBN(0xaa063ac1, 0x1bbb02c0)}},
+     {{TOBN(0x0938a422, 0x59558a78), TOBN(0x5343c669, 0x8435da2f),
+       TOBN(0x96f67b18, 0x034410dc), TOBN(0x7cc1e424, 0x84510804)},
+      {TOBN(0x86a1543f, 0x16dfbb7d), TOBN(0x921fa942, 0x5b5bd592),
+       TOBN(0x9dcccb6e, 0xb33dd03c), TOBN(0x8581ddd9, 0xb843f51e)}},
+     {{TOBN(0x54935fcb, 0x81d73c9e), TOBN(0x6d07e979, 0x0a5e97ab),
+       TOBN(0x4dc7b30a, 0xcf3a6bab), TOBN(0x147ab1f3, 0x170bee11)},
+      {TOBN(0x0aaf8e3d, 0x9fafdee4), TOBN(0xfab3dbcb, 0x538a8b95),
+       TOBN(0x405df4b3, 0x6ef13871), TOBN(0xf1f4e9cb, 0x088d5a49)}},
+     {{TOBN(0x9bcd24d3, 0x66b33f1d), TOBN(0x3b97b820, 0x5ce445c0),
+       TOBN(0xe2926549, 0xba93ff61), TOBN(0xd9c341ce, 0x4dafe616)},
+      {TOBN(0xfb30a76e, 0x16efb6f3), TOBN(0xdf24b8ca, 0x605b953c),
+       TOBN(0x8bd52afe, 0xc2fffb9f), TOBN(0xbbac5ff7, 0xe19d0b96)}},
+     {{TOBN(0x43c01b87, 0x459afccd), TOBN(0x6bd45143, 0xb7432652),
+       TOBN(0x84734530, 0x55b5d78e), TOBN(0x81088fdb, 0x1554ba7d)},
+      {TOBN(0xada0a52c, 0x1e269375), TOBN(0xf9f037c4, 0x2dc5ec10),
+       TOBN(0xc0660607, 0x94bfbc11), TOBN(0xc0a630bb, 0xc9c40d2f)}},
+     {{TOBN(0x5efc797e, 0xab64c31e), TOBN(0xffdb1dab, 0x74507144),
+       TOBN(0xf6124287, 0x1ca6790c), TOBN(0xe9609d81, 0xe69bf1bf)},
+      {TOBN(0xdb898595, 0x00d24fc9), TOBN(0x9c750333, 0xe51fb417),
+       TOBN(0x51830a91, 0xfef7bbde), TOBN(0x0ce67dc8, 0x945f585c)}},
+     {{TOBN(0x9a730ed4, 0x4763eb50), TOBN(0x24a0e221, 0xc1ab0d66),
+       TOBN(0x643b6393, 0x648748f3), TOBN(0x1982daa1, 0x6d3c6291)},
+      {TOBN(0x6f00a9f7, 0x8bbc5549), TOBN(0x7a1783e1, 0x7f36384e),
+       TOBN(0xe8346323, 0xde977f50), TOBN(0x91ab688d, 0xb245502a)}},
+     {{TOBN(0x331ab6b5, 0x6d0bdd66), TOBN(0x0a6ef32e, 0x64b71229),
+       TOBN(0x1028150e, 0xfe7c352f), TOBN(0x27e04350, 0xce7b39d3)},
+      {TOBN(0x2a3c8acd, 0xc1070c82), TOBN(0xfb2034d3, 0x80c9feef),
+       TOBN(0x2d729621, 0x709f3729), TOBN(0x8df290bf, 0x62cb4549)}},
+     {{TOBN(0x02f99f33, 0xfc2e4326), TOBN(0x3b30076d, 0x5eddf032),
+       TOBN(0xbb21f8cf, 0x0c652fb5), TOBN(0x314fb49e, 0xed91cf7b)},
+      {TOBN(0xa013eca5, 0x2f700750), TOBN(0x2b9e3c23, 0x712a4575),
+       TOBN(0xe5355557, 0xaf30fbb0), TOBN(0x1ada3516, 0x7c77e771)}},
+     {{TOBN(0x45f6ecb2, 0x7b135670), TOBN(0xe85d19df, 0x7cfc202e),
+       TOBN(0x0f1b50c7, 0x58d1be9f), TOBN(0x5ebf2c0a, 0xead2e344)},
+      {TOBN(0x1531fe4e, 0xabc199c9), TOBN(0xc7032592, 0x56bab0ae),
+       TOBN(0x16ab2e48, 0x6c1fec54), TOBN(0x0f87fda8, 0x04280188)}},
+     {{TOBN(0xdc9f46fc, 0x609e4a74), TOBN(0x2a44a143, 0xba667f91),
+       TOBN(0xbc3d8b95, 0xb4d83436), TOBN(0xa01e4bd0, 0xc7bd2958)},
+      {TOBN(0x7b182932, 0x73483c90), TOBN(0xa79c6aa1, 0xa7c7b598),
+       TOBN(0xbf3983c6, 0xeaaac07e), TOBN(0x8f18181e, 0x96e0d4e6)}},
+     {{TOBN(0x8553d37c, 0x051af62b), TOBN(0xe9a998eb, 0x0bf94496),
+       TOBN(0xe0844f9f, 0xb0d59aa1), TOBN(0x983fd558, 0xe6afb813)},
+      {TOBN(0x9670c0ca, 0x65d69804), TOBN(0x732b22de, 0x6ea5ff2d),
+       TOBN(0xd7640ba9, 0x5fd8623b), TOBN(0x9f619163, 0xa6351782)}},
+     {{TOBN(0x0bfc27ee, 0xacee5043), TOBN(0xae419e73, 0x2eb10f02),
+       TOBN(0x19c028d1, 0x8943fb05), TOBN(0x71f01cf7, 0xff13aa2a)},
+      {TOBN(0x7790737e, 0x8887a132), TOBN(0x67513309, 0x66318410),
+       TOBN(0x9819e8a3, 0x7ddb795e), TOBN(0xfecb8ef5, 0xdad100b2)}},
+     {{TOBN(0x59f74a22, 0x3021926a), TOBN(0xb7c28a49, 0x6f9b4c1c),
+       TOBN(0xed1a733f, 0x912ad0ab), TOBN(0x42a910af, 0x01a5659c)},
+      {TOBN(0x3842c6e0, 0x7bd68cab), TOBN(0x2b57fa38, 0x76d70ac8),
+       TOBN(0x8a6707a8, 0x3c53aaeb), TOBN(0x62c1c510, 0x65b4db18)}},
+     {{TOBN(0x8de2c1fb, 0xb2d09dc7), TOBN(0xc3dfed12, 0x266bd23b),
+       TOBN(0x927d039b, 0xd5b27db6), TOBN(0x2fb2f0f1, 0x103243da)},
+      {TOBN(0xf855a07b, 0x80be7399), TOBN(0xed9327ce, 0x1f9f27a8),
+       TOBN(0xa0bd99c7, 0x729bdef7), TOBN(0x2b67125e, 0x28250d88)}},
+     {{TOBN(0x784b26e8, 0x8670ced7), TOBN(0xe3dfe41f, 0xc31bd3b4),
+       TOBN(0x9e353a06, 0xbcc85cbc), TOBN(0x302e2909, 0x60178a9d)},
+      {TOBN(0x860abf11, 0xa6eac16e), TOBN(0x76447000, 0xaa2b3aac),
+       TOBN(0x46ff9d19, 0x850afdab), TOBN(0x35bdd6a5, 0xfdb2d4c1)}},
+     {{TOBN(0xe82594b0, 0x7e5c9ce9), TOBN(0x0f379e53, 0x20af346e),
+       TOBN(0x608b31e3, 0xbc65ad4a), TOBN(0x710c6b12, 0x267c4826)},
+      {TOBN(0x51c966f9, 0x71954cf1), TOBN(0xb1cec793, 0x0d0aa215),
+       TOBN(0x1f155989, 0x86bd23a8), TOBN(0xae2ff99c, 0xf9452e86)}},
+     {{TOBN(0xd8dd953c, 0x340ceaa2), TOBN(0x26355275, 0x2e2e9333),
+       TOBN(0x15d4e5f9, 0x8586f06d), TOBN(0xd6bf94a8, 0xf7cab546)},
+      {TOBN(0x33c59a0a, 0xb76a9af0), TOBN(0x52740ab3, 0xba095af7),
+       TOBN(0xc444de8a, 0x24389ca0), TOBN(0xcc6f9863, 0x706da0cb)}},
+     {{TOBN(0xb5a741a7, 0x6b2515cf), TOBN(0x71c41601, 0x9585c749),
+       TOBN(0x78350d4f, 0xe683de97), TOBN(0x31d61524, 0x63d0b5f5)},
+      {TOBN(0x7a0cc5e1, 0xfbce090b), TOBN(0xaac927ed, 0xfbcb2a5b),
+       TOBN(0xe920de49, 0x20d84c35), TOBN(0x8c06a0b6, 0x22b4de26)}},
+     {{TOBN(0xd34dd58b, 0xafe7ddf3), TOBN(0x55851fed, 0xc1e6e55b),
+       TOBN(0xd1395616, 0x960696e7), TOBN(0x940304b2, 0x5f22705f)},
+      {TOBN(0x6f43f861, 0xb0a2a860), TOBN(0xcf121282, 0x0e7cc981),
+       TOBN(0x12186212, 0x0ab64a96), TOBN(0x09215b9a, 0xb789383c)}},
+     {{TOBN(0x311eb305, 0x37387c09), TOBN(0xc5832fce, 0xf03ee760),
+       TOBN(0x30358f58, 0x32f7ea19), TOBN(0xe01d3c34, 0x91d53551)},
+      {TOBN(0x1ca5ee41, 0xda48ea80), TOBN(0x34e71e8e, 0xcf4fa4c1),
+       TOBN(0x312abd25, 0x7af1e1c7), TOBN(0xe3afcdeb, 0x2153f4a5)}},
+     {{TOBN(0x9d5c84d7, 0x00235e9a), TOBN(0x0308d3f4, 0x8c4c836f),
+       TOBN(0xc0a66b04, 0x89332de5), TOBN(0x610dd399, 0x89e566ef)},
+      {TOBN(0xf8eea460, 0xd1ac1635), TOBN(0x84cbb3fb, 0x20a2c0df),
+       TOBN(0x40afb488, 0xe74a48c5), TOBN(0x29738198, 0xd326b150)}},
+     {{TOBN(0x2a17747f, 0xa6d74081), TOBN(0x60ea4c05, 0x55a26214),
+       TOBN(0x53514bb4, 0x1f88c5fe), TOBN(0xedd64567, 0x7e83426c)},
+      {TOBN(0xd5d6cbec, 0x96460b25), TOBN(0xa12fd0ce, 0x68dc115e),
+       TOBN(0xc5bc3ed2, 0x697840ea), TOBN(0x969876a8, 0xa6331e31)}},
+     {{TOBN(0x60c36217, 0x472ff580), TOBN(0xf4229705, 0x4ad41393),
+       TOBN(0x4bd99ef0, 0xa03b8b92), TOBN(0x501c7317, 0xc144f4f6)},
+      {TOBN(0x159009b3, 0x18464945), TOBN(0x6d5e594c, 0x74c5c6be),
+       TOBN(0x2d587011, 0x321a3660), TOBN(0xd1e184b1, 0x3898d022)}},
+     {{TOBN(0x5ba04752, 0x4c6a7e04), TOBN(0x47fa1e2b, 0x45550b65),
+       TOBN(0x9419daf0, 0x48c0a9a5), TOBN(0x66362953, 0x7c243236)},
+      {TOBN(0xcd0744b1, 0x5cb12a88), TOBN(0x561b6f9a, 0x2b646188),
+       TOBN(0x599415a5, 0x66c2c0c0), TOBN(0xbe3f0859, 0x0f83f09a)}},
+     {{TOBN(0x9141c5be, 0xb92041b8), TOBN(0x01ae38c7, 0x26477d0d),
+       TOBN(0xca8b71f3, 0xd12c7a94), TOBN(0xfab5b31f, 0x765c70db)},
+      {TOBN(0x76ae7492, 0x487443e9), TOBN(0x8595a310, 0x990d1349),
+       TOBN(0xf8dbeda8, 0x7d460a37), TOBN(0x7f7ad082, 0x1e45a38f)}},
+     {{TOBN(0xed1d4db6, 0x1059705a), TOBN(0xa3dd492a, 0xe6b9c697),
+       TOBN(0x4b92ee3a, 0x6eb38bd5), TOBN(0xbab2609d, 0x67cc0bb7)},
+      {TOBN(0x7fc4fe89, 0x6e70ee82), TOBN(0xeff2c56e, 0x13e6b7e3),
+       TOBN(0x9b18959e, 0x34d26fca), TOBN(0x2517ab66, 0x889d6b45)}},
+     {{TOBN(0xf167b4e0, 0xbdefdd4f), TOBN(0x69958465, 0xf366e401),
+       TOBN(0x5aa368ab, 0xa73bbec0), TOBN(0x12148709, 0x7b240c21)},
+      {TOBN(0x378c3233, 0x18969006), TOBN(0xcb4d73ce, 0xe1fe53d1),
+       TOBN(0x5f50a80e, 0x130c4361), TOBN(0xd67f5951, 0x7ef5212b)}},
+     {{TOBN(0xf145e21e, 0x9e70c72e), TOBN(0xb2e52e29, 0x5566d2fb),
+       TOBN(0x44eaba4a, 0x032397f5), TOBN(0x5e56937b, 0x7e31a7de)},
+      {TOBN(0x68dcf517, 0x456c61e1), TOBN(0xbc2e954a, 0xa8b0a388),
+       TOBN(0xe3552fa7, 0x60a8b755), TOBN(0x03442dae, 0x73ad0cde)}},
+     {{TOBN(0x37ffe747, 0xceb26210), TOBN(0x983545e8, 0x787baef9),
+       TOBN(0x8b8c8535, 0x86a3de31), TOBN(0xc621dbcb, 0xfacd46db)},
+      {TOBN(0x82e442e9, 0x59266fbb), TOBN(0xa3514c37, 0x339d471c),
+       TOBN(0x3a11b771, 0x62cdad96), TOBN(0xf0cb3b3c, 0xecf9bdf0)}},
+     {{TOBN(0x3fcbdbce, 0x478e2135), TOBN(0x7547b5cf, 0xbda35342),
+       TOBN(0xa97e81f1, 0x8a677af6), TOBN(0xc8c2bf83, 0x28817987)},
+      {TOBN(0xdf07eaaf, 0x45580985), TOBN(0xc68d1f05, 0xc93b45cb),
+       TOBN(0x106aa2fe, 0xc77b4cac), TOBN(0x4c1d8afc, 0x04a7ae86)}},
+     {{TOBN(0xdb41c3fd, 0x9eb45ab2), TOBN(0x5b234b5b, 0xd4b22e74),
+       TOBN(0xda253dec, 0xf215958a), TOBN(0x67e0606e, 0xa04edfa0)},
+      {TOBN(0xabbbf070, 0xef751b11), TOBN(0xf352f175, 0xf6f06dce),
+       TOBN(0xdfc4b6af, 0x6839f6b4), TOBN(0x53ddf9a8, 0x9959848e)}},
+     {{TOBN(0xda49c379, 0xc21520b0), TOBN(0x90864ff0, 0xdbd5d1b6),
+       TOBN(0x2f055d23, 0x5f49c7f7), TOBN(0xe51e4e6a, 0xa796b2d8)},
+      {TOBN(0xc361a67f, 0x5c9dc340), TOBN(0x5ad53c37, 0xbca7c620),
+       TOBN(0xda1d6588, 0x32c756d0), TOBN(0xad60d911, 0x8bb67e13)}},
+     {{TOBN(0xd6c47bdf, 0x0eeec8c6), TOBN(0x4a27fec1, 0x078a1821),
+       TOBN(0x081f7415, 0xc3099524), TOBN(0x8effdf0b, 0x82cd8060)},
+      {TOBN(0xdb70ec1c, 0x65842df8), TOBN(0x8821b358, 0xd319a901),
+       TOBN(0x72ee56ee, 0xde42b529), TOBN(0x5bb39592, 0x236e4286)}},
+     {{TOBN(0xd1183316, 0xfd6f7140), TOBN(0xf9fadb5b, 0xbd8e81f7),
+       TOBN(0x701d5e0c, 0x5a02d962), TOBN(0xfdee4dbf, 0x1b601324)},
+      {TOBN(0xbed17407, 0x35d7620e), TOBN(0x04e3c2c3, 0xf48c0012),
+       TOBN(0x9ee29da7, 0x3455449a), TOBN(0x562cdef4, 0x91a836c4)}},
+     {{TOBN(0x8f682a5f, 0x47701097), TOBN(0x617125d8, 0xff88d0c2),
+       TOBN(0x948fda24, 0x57bb86dd), TOBN(0x348abb8f, 0x289f7286)},
+      {TOBN(0xeb10eab5, 0x99d94bbd), TOBN(0xd51ba28e, 0x4684d160),
+       TOBN(0xabe0e51c, 0x30c8f41a), TOBN(0x66588b45, 0x13254f4a)}},
+     {{TOBN(0x147ebf01, 0xfad097a5), TOBN(0x49883ea8, 0x610e815d),
+       TOBN(0xe44d60ba, 0x8a11de56), TOBN(0xa970de6e, 0x827a7a6d)},
+      {TOBN(0x2be41424, 0x5e17fc19), TOBN(0xd833c657, 0x01214057),
+       TOBN(0x1375813b, 0x363e723f), TOBN(0x6820bb88, 0xe6a52e9b)}},
+     {{TOBN(0x7e7f6970, 0xd875d56a), TOBN(0xd6a0a9ac, 0x51fbf6bf),
+       TOBN(0x54ba8790, 0xa3083c12), TOBN(0xebaeb23d, 0x6ae7eb64)},
+      {TOBN(0xa8685c3a, 0xb99a907a), TOBN(0xf1e74550, 0x026bf40b),
+       TOBN(0x7b73a027, 0xc802cd9e), TOBN(0x9a8a927c, 0x4fef4635)}},
+     {{TOBN(0xe1b6f60c, 0x08191224), TOBN(0xc4126ebb, 0xde4ec091),
+       TOBN(0xe1dff4dc, 0x4ae38d84), TOBN(0xde3f57db, 0x4f2ef985)},
+      {TOBN(0x34964337, 0xd446a1dd), TOBN(0x7bf217a0, 0x859e77f6),
+       TOBN(0x8ff10527, 0x8e1d13f5), TOBN(0xa304ef03, 0x74eeae27)}},
+     {{TOBN(0xfc6f5e47, 0xd19dfa5a), TOBN(0xdb007de3, 0x7fad982b),
+       TOBN(0x28205ad1, 0x613715f5), TOBN(0x251e6729, 0x7889529e)},
+      {TOBN(0x72705184, 0x1ae98e78), TOBN(0xf818537d, 0x271cac32),
+       TOBN(0xc8a15b7e, 0xb7f410f5), TOBN(0xc474356f, 0x81f62393)}},
+     {{TOBN(0x92dbdc5a, 0xc242316b), TOBN(0xabe060ac, 0xdbf4aff5),
+       TOBN(0x6e8c38fe, 0x909a8ec6), TOBN(0x43e514e5, 0x6116cb94)},
+      {TOBN(0x2078fa38, 0x07d784f9), TOBN(0x1161a880, 0xf4b5b357),
+       TOBN(0x5283ce79, 0x13adea3d), TOBN(0x0756c3e6, 0xcc6a910b)}},
+     {{TOBN(0x60bcfe01, 0xaaa79697), TOBN(0x04a73b29, 0x56391db1),
+       TOBN(0xdd8dad47, 0x189b45a0), TOBN(0xbfac0dd0, 0x48d5b8d9)},
+      {TOBN(0x34ab3af5, 0x7d3d2ec2), TOBN(0x6fa2fc2d, 0x207bd3af),
+       TOBN(0x9ff40092, 0x66550ded), TOBN(0x719b3e87, 0x1fd5b913)}},
+     {{TOBN(0xa573a496, 0x6d17fbc7), TOBN(0x0cd1a70a, 0x73d2b24e),
+       TOBN(0x34e2c5ca, 0xb2676937), TOBN(0xe7050b06, 0xbf669f21)},
+      {TOBN(0xfbe948b6, 0x1ede9046), TOBN(0xa0530051, 0x97662659),
+       TOBN(0x58cbd4ed, 0xf10124c5), TOBN(0xde2646e4, 0xdd6c06c8)}},
+     {{TOBN(0x332f8108, 0x8cad38c0), TOBN(0x471b7e90, 0x6bd68ae2),
+       TOBN(0x56ac3fb2, 0x0d8e27a3), TOBN(0xb54660db, 0x136b4b0d)},
+      {TOBN(0x123a1e11, 0xa6fd8de4), TOBN(0x44dbffea, 0xa37799ef),
+       TOBN(0x4540b977, 0xce6ac17c), TOBN(0x495173a8, 0xaf60acef)}}},
+    {{{TOBN(0x9ebb284d, 0x391c2a82), TOBN(0xbcdd4863, 0x158308e8),
+       TOBN(0x006f16ec, 0x83f1edca), TOBN(0xa13e2c37, 0x695dc6c8)},
+      {TOBN(0x2ab756f0, 0x4a057a87), TOBN(0xa8765500, 0xa6b48f98),
+       TOBN(0x4252face, 0x68651c44), TOBN(0xa52b540b, 0xe1765e02)}},
+     {{TOBN(0x4f922fc5, 0x16a0d2bb), TOBN(0x0d5cc16c, 0x1a623499),
+       TOBN(0x9241cf3a, 0x57c62c8b), TOBN(0x2f5e6961, 0xfd1b667f)},
+      {TOBN(0x5c15c70b, 0xf5a01797), TOBN(0x3d20b44d, 0x60956192),
+       TOBN(0x04911b37, 0x071fdb52), TOBN(0xf648f916, 0x8d6f0f7b)}},
+     {{TOBN(0x6dc1acaf, 0xe60b7cf7), TOBN(0x25860a50, 0x84a9d869),
+       TOBN(0x56fc6f09, 0xe7ba8ac4), TOBN(0x828c5bd0, 0x6148d29e)},
+      {TOBN(0xac6b435e, 0xdc55ae5f), TOBN(0xa527f56c, 0xc0117411),
+       TOBN(0x94d5045e, 0xfd24342c), TOBN(0x2c4c0a35, 0x70b67c0d)}},
+     {{TOBN(0x027cc8b8, 0xfac61d9a), TOBN(0x7d25e062, 0xe3c6fe8a),
+       TOBN(0xe08805bf, 0xe5bff503), TOBN(0x13271e6c, 0x6ff632f7)},
+      {TOBN(0x55dca6c0, 0x232f76a5), TOBN(0x8957c32d, 0x701ef426),
+       TOBN(0xee728bcb, 0xa10a5178), TOBN(0x5ea60411, 0xb62c5173)}},
+     {{TOBN(0xfc4e964e, 0xd0b8892b), TOBN(0x9ea17683, 0x9301bb74),
+       TOBN(0x6265c5ae, 0xfcc48626), TOBN(0xe60cf82e, 0xbb3e9102)},
+      {TOBN(0x57adf797, 0xd4df5531), TOBN(0x235b59a1, 0x8deeefe2),
+       TOBN(0x60adcf58, 0x3f306eb1), TOBN(0x105c2753, 0x3d09492d)}},
+     {{TOBN(0x4090914b, 0xb5def996), TOBN(0x1cb69c83, 0x233dd1e7),
+       TOBN(0xc1e9c1d3, 0x9b3d5e76), TOBN(0x1f3338ed, 0xfccf6012)},
+      {TOBN(0xb1e95d0d, 0x2f5378a8), TOBN(0xacf4c2c7, 0x2f00cd21),
+       TOBN(0x6e984240, 0xeb5fe290), TOBN(0xd66c038d, 0x248088ae)}},
+     {{TOBN(0x804d264a, 0xf94d70cf), TOBN(0xbdb802ef, 0x7314bf7e),
+       TOBN(0x8fb54de2, 0x4333ed02), TOBN(0x740461e0, 0x285635d9)},
+      {TOBN(0x4113b2c8, 0x365e9383), TOBN(0xea762c83, 0x3fdef652),
+       TOBN(0x4eec6e2e, 0x47b956c1), TOBN(0xa3d814be, 0x65620fa4)}},
+     {{TOBN(0x9ad5462b, 0xb4d8bc50), TOBN(0x181c0b16, 0xa9195770),
+       TOBN(0xebd4fe1c, 0x78412a68), TOBN(0xae0341bc, 0xc0dff48c)},
+      {TOBN(0xb6bc45cf, 0x7003e866), TOBN(0xf11a6dea, 0x8a24a41b),
+       TOBN(0x5407151a, 0xd04c24c2), TOBN(0x62c9d27d, 0xda5b7b68)}},
+     {{TOBN(0x2e964235, 0x88cceff6), TOBN(0x8594c54f, 0x8b07ed69),
+       TOBN(0x1578e73c, 0xc84d0d0d), TOBN(0x7b4e1055, 0xff532868)},
+      {TOBN(0xa348c0d5, 0xb5ec995a), TOBN(0xbf4b9d55, 0x14289a54),
+       TOBN(0x9ba155a6, 0x58fbd777), TOBN(0x186ed7a8, 0x1a84491d)}},
+     {{TOBN(0xd4992b30, 0x614c0900), TOBN(0xda98d121, 0xbd00c24b),
+       TOBN(0x7f534dc8, 0x7ec4bfa1), TOBN(0x4a5ff674, 0x37dc34bc)},
+      {TOBN(0x68c196b8, 0x1d7ea1d7), TOBN(0x38cf2893, 0x80a6d208),
+       TOBN(0xfd56cd09, 0xe3cbbd6e), TOBN(0xec72e27e, 0x4205a5b6)}},
+     {{TOBN(0x15ea68f5, 0xa44f77f7), TOBN(0x7aa5f9fd, 0xb43c52bc),
+       TOBN(0x86ff676f, 0x94f0e609), TOBN(0xa4cde963, 0x2e2d432b)},
+      {TOBN(0x8cafa0c0, 0xeee470af), TOBN(0x84137d0e, 0x8a3f5ec8),
+       TOBN(0xebb40411, 0xfaa31231), TOBN(0xa239c13f, 0x6f7f7ccf)}},
+     {{TOBN(0x32865719, 0xa8afd30b), TOBN(0x86798328, 0x8a826dce),
+       TOBN(0xdf04e891, 0xc4a8fbe0), TOBN(0xbb6b6e1b, 0xebf56ad3)},
+      {TOBN(0x0a695b11, 0x471f1ff0), TOBN(0xd76c3389, 0xbe15baf0),
+       TOBN(0x018edb95, 0xbe96c43e), TOBN(0xf2beaaf4, 0x90794158)}},
+     {{TOBN(0x152db09e, 0xc3076a27), TOBN(0x5e82908e, 0xe416545d),
+       TOBN(0xa2c41272, 0x356d6f2e), TOBN(0xdc9c9642, 0x31fd74e1)},
+      {TOBN(0x66ceb88d, 0x519bf615), TOBN(0xe29ecd76, 0x05a2274e),
+       TOBN(0x3a0473c4, 0xbf5e2fa0), TOBN(0x6b6eb671, 0x64284e67)}},
+     {{TOBN(0xe8b97932, 0xb88756dd), TOBN(0xed4e8652, 0xf17e3e61),
+       TOBN(0xc2dd1499, 0x3ee1c4a4), TOBN(0xc0aaee17, 0x597f8c0e)},
+      {TOBN(0x15c4edb9, 0x6c168af3), TOBN(0x6563c7bf, 0xb39ae875),
+       TOBN(0xadfadb6f, 0x20adb436), TOBN(0xad55e8c9, 0x9a042ac0)}},
+     {{TOBN(0x975a1ed8, 0xb76da1f5), TOBN(0x10dfa466, 0xa58acb94),
+       TOBN(0x8dd7f7e3, 0xac060282), TOBN(0x6813e66a, 0x572a051e)},
+      {TOBN(0xb4ccae1e, 0x350cb901), TOBN(0xb653d656, 0x50cb7822),
+       TOBN(0x42484710, 0xdfab3b87), TOBN(0xcd7ee537, 0x9b670fd0)}},
+     {{TOBN(0x0a50b12e, 0x523b8bf6), TOBN(0x8009eb5b, 0x8f910c1b),
+       TOBN(0xf535af82, 0x4a167588), TOBN(0x0f835f9c, 0xfb2a2abd)},
+      {TOBN(0xf59b2931, 0x2afceb62), TOBN(0xc797df2a, 0x169d383f),
+       TOBN(0xeb3f5fb0, 0x66ac02b0), TOBN(0x029d4c6f, 0xdaa2d0ca)}},
+     {{TOBN(0xd4059bc1, 0xafab4bc5), TOBN(0x833f5c6f, 0x56783247),
+       TOBN(0xb5346630, 0x8d2d3605), TOBN(0x83387891, 0xd34d8433)},
+      {TOBN(0xd973b30f, 0xadd9419a), TOBN(0xbcca1099, 0xafe3fce8),
+       TOBN(0x08178315, 0x0809aac6), TOBN(0x01b7f21a, 0x540f0f11)}},
+     {{TOBN(0x65c29219, 0x909523c8), TOBN(0xa62f648f, 0xa3a1c741),
+       TOBN(0x88598d4f, 0x60c9e55a), TOBN(0xbce9141b, 0x0e4f347a)},
+      {TOBN(0x9af97d84, 0x35f9b988), TOBN(0x0210da62, 0x320475b6),
+       TOBN(0x3c076e22, 0x9191476c), TOBN(0x7520dbd9, 0x44fc7834)}},
+     {{TOBN(0x6a6b2cfe, 0xc1ab1bbd), TOBN(0xef8a65be, 0xdc650938),
+       TOBN(0x72855540, 0x805d7bc4), TOBN(0xda389396, 0xed11fdfd)},
+      {TOBN(0xa9d5bd36, 0x74660876), TOBN(0x11d67c54, 0xb45dff35),
+       TOBN(0x6af7d148, 0xa4f5da94), TOBN(0xbb8d4c3f, 0xc0bbeb31)}},
+     {{TOBN(0x87a7ebd1, 0xe0a1b12a), TOBN(0x1e4ef88d, 0x770ba95f),
+       TOBN(0x8c33345c, 0xdc2ae9cb), TOBN(0xcecf1276, 0x01cc8403)},
+      {TOBN(0x687c012e, 0x1b39b80f), TOBN(0xfd90d0ad, 0x35c33ba4),
+       TOBN(0xa3ef5a67, 0x5c9661c2), TOBN(0x368fc88e, 0xe017429e)}},
+     {{TOBN(0xd30c6761, 0x196a2fa2), TOBN(0x931b9817, 0xbd5b312e),
+       TOBN(0xba01000c, 0x72f54a31), TOBN(0xa203d2c8, 0x66eaa541)},
+      {TOBN(0xf2abdee0, 0x98939db3), TOBN(0xe37d6c2c, 0x3e606c02),
+       TOBN(0xf2921574, 0x521ff643), TOBN(0x2781b3c4, 0xd7e2fca3)}},
+     {{TOBN(0x664300b0, 0x7850ec06), TOBN(0xac5a38b9, 0x7d3a10cf),
+       TOBN(0x9233188d, 0xe34ab39d), TOBN(0xe77057e4, 0x5072cbb9)},
+      {TOBN(0xbcf0c042, 0xb59e78df), TOBN(0x4cfc91e8, 0x1d97de52),
+       TOBN(0x4661a26c, 0x3ee0ca4a), TOBN(0x5620a4c1, 0xfb8507bc)}},
+     {{TOBN(0x4b44d4aa, 0x049f842c), TOBN(0xceabc5d5, 0x1540e82b),
+       TOBN(0x306710fd, 0x15c6f156), TOBN(0xbe5ae52b, 0x63db1d72)},
+      {TOBN(0x06f1e7e6, 0x334957f1), TOBN(0x57e388f0, 0x31144a70),
+       TOBN(0xfb69bb2f, 0xdf96447b), TOBN(0x0f78ebd3, 0x73e38a12)}},
+     {{TOBN(0xb8222605, 0x2b7ce542), TOBN(0xe6d4ce99, 0x7472bde1),
+       TOBN(0x53e16ebe, 0x09d2f4da), TOBN(0x180ff42e, 0x53b92b2e)},
+      {TOBN(0xc59bcc02, 0x2c34a1c6), TOBN(0x3803d6f9, 0x422c46c2),
+       TOBN(0x18aff74f, 0x5c14a8a2), TOBN(0x55aebf80, 0x10a08b28)}},
+     {{TOBN(0x66097d58, 0x7135593f), TOBN(0x32e6eff7, 0x2be570cd),
+       TOBN(0x584e6a10, 0x2a8c860d), TOBN(0xcd185890, 0xa2eb4163)},
+      {TOBN(0x7ceae99d, 0x6d97e134), TOBN(0xd42c6b70, 0xdd8447ce),
+       TOBN(0x59ddbb4a, 0xb8c50273), TOBN(0x03c612df, 0x3cf34e1e)}},
+     {{TOBN(0x84b9ca15, 0x04b6c5a0), TOBN(0x35216f39, 0x18f0e3a3),
+       TOBN(0x3ec2d2bc, 0xbd986c00), TOBN(0x8bf546d9, 0xd19228fe)},
+      {TOBN(0xd1c655a4, 0x4cd623c3), TOBN(0x366ce718, 0x502b8e5a),
+       TOBN(0x2cfc84b4, 0xeea0bfe7), TOBN(0xe01d5cee, 0xcf443e8e)}},
+     {{TOBN(0x8ec045d9, 0x036520f8), TOBN(0xdfb3c3d1, 0x92d40e98),
+       TOBN(0x0bac4cce, 0xcc559a04), TOBN(0x35eccae5, 0x240ea6b1)},
+      {TOBN(0x180b32db, 0xf8a5a0ac), TOBN(0x547972a5, 0xeb699700),
+       TOBN(0xa3765801, 0xca26bca0), TOBN(0x57e09d0e, 0xa647f25a)}},
+     {{TOBN(0xb956970e, 0x2fdd23cc), TOBN(0xb80288bc, 0x5682e971),
+       TOBN(0xe6e6d91e, 0x9ae86ebc), TOBN(0x0564c83f, 0x8c9f1939)},
+      {TOBN(0x551932a2, 0x39560368), TOBN(0xe893752b, 0x049c28e2),
+       TOBN(0x0b03cee5, 0xa6a158c3), TOBN(0xe12d656b, 0x04964263)}},
+     {{TOBN(0x4b47554e, 0x63e3bc1d), TOBN(0xc719b6a2, 0x45044ff7),
+       TOBN(0x4f24d30a, 0xe48daa07), TOBN(0xa3f37556, 0xc8c1edc3)},
+      {TOBN(0x9a47bf76, 0x0700d360), TOBN(0xbb1a1824, 0x822ae4e2),
+       TOBN(0x22e275a3, 0x89f1fb4c), TOBN(0x72b1aa23, 0x9968c5f5)}},
+     {{TOBN(0xa75feaca, 0xbe063f64), TOBN(0x9b392f43, 0xbce47a09),
+       TOBN(0xd4241509, 0x1ad07aca), TOBN(0x4b0c591b, 0x8d26cd0f)},
+      {TOBN(0x2d42ddfd, 0x92f1169a), TOBN(0x63aeb1ac, 0x4cbf2392),
+       TOBN(0x1de9e877, 0x0691a2af), TOBN(0xebe79af7, 0xd98021da)}},
+     {{TOBN(0xcfdf2a4e, 0x40e50acf), TOBN(0xf0a98ad7, 0xaf01d665),
+       TOBN(0xefb640bf, 0x1831be1f), TOBN(0x6fe8bd2f, 0x80e9ada0)},
+      {TOBN(0x94c103a1, 0x6cafbc91), TOBN(0x170f8759, 0x8308e08c),
+       TOBN(0x5de2d2ab, 0x9780ff4f), TOBN(0x666466bc, 0x45b201f2)}},
+     {{TOBN(0x58af2010, 0xf5b343bc), TOBN(0x0f2e400a, 0xf2f142fe),
+       TOBN(0x3483bfde, 0xa85f4bdf), TOBN(0xf0b1d093, 0x03bfeaa9)},
+      {TOBN(0x2ea01b95, 0xc7081603), TOBN(0xe943e4c9, 0x3dba1097),
+       TOBN(0x47be92ad, 0xb438f3a6), TOBN(0x00bb7742, 0xe5bf6636)}},
+     {{TOBN(0x136b7083, 0x824297b4), TOBN(0x9d0e5580, 0x5584455f),
+       TOBN(0xab48cedc, 0xf1c7d69e), TOBN(0x53a9e481, 0x2a256e76)},
+      {TOBN(0x0402b0e0, 0x65eb2413), TOBN(0xdadbbb84, 0x8fc407a7),
+       TOBN(0xa65cd5a4, 0x8d7f5492), TOBN(0x21d44293, 0x74bae294)}},
+     {{TOBN(0x66917ce6, 0x3b5f1cc4), TOBN(0x37ae52ea, 0xce872e62),
+       TOBN(0xbb087b72, 0x2905f244), TOBN(0x12077086, 0x1e6af74f)},
+      {TOBN(0x4b644e49, 0x1058edea), TOBN(0x827510e3, 0xb638ca1d),
+       TOBN(0x8cf2b704, 0x6038591c), TOBN(0xffc8b47a, 0xfe635063)}},
+     {{TOBN(0x3ae220e6, 0x1b4d5e63), TOBN(0xbd864742, 0x9d961b4b),
+       TOBN(0x610c107e, 0x9bd16bed), TOBN(0x4270352a, 0x1127147b)},
+      {TOBN(0x7d17ffe6, 0x64cfc50e), TOBN(0x50dee01a, 0x1e36cb42),
+       TOBN(0x068a7622, 0x35dc5f9a), TOBN(0x9a08d536, 0xdf53f62c)}},
+     {{TOBN(0x4ed71457, 0x6be5f7de), TOBN(0xd93006f8, 0xc2263c9e),
+       TOBN(0xe073694c, 0xcacacb36), TOBN(0x2ff7a5b4, 0x3ae118ab)},
+      {TOBN(0x3cce53f1, 0xcd871236), TOBN(0xf156a39d, 0xc2aa6d52),
+       TOBN(0x9cc5f271, 0xb198d76d), TOBN(0xbc615b6f, 0x81383d39)}},
+     {{TOBN(0xa54538e8, 0xde3eee6b), TOBN(0x58c77538, 0xab910d91),
+       TOBN(0x31e5bdbc, 0x58d278bd), TOBN(0x3cde4adf, 0xb963acae)},
+      {TOBN(0xb1881fd2, 0x5302169c), TOBN(0x8ca60fa0, 0xa989ed8b),
+       TOBN(0xa1999458, 0xff96a0ee), TOBN(0xc1141f03, 0xac6c283d)}},
+     {{TOBN(0x7677408d, 0x6dfafed3), TOBN(0x33a01653, 0x39661588),
+       TOBN(0x3c9c15ec, 0x0b726fa0), TOBN(0x090cfd93, 0x6c9b56da)},
+      {TOBN(0xe34f4bae, 0xa3c40af5), TOBN(0x3469eadb, 0xd21129f1),
+       TOBN(0xcc51674a, 0x1e207ce8), TOBN(0x1e293b24, 0xc83b1ef9)}},
+     {{TOBN(0x17173d13, 0x1e6c0bb4), TOBN(0x19004695, 0x90776d35),
+       TOBN(0xe7980e34, 0x6de6f922), TOBN(0x873554cb, 0xf4dd9a22)},
+      {TOBN(0x0316c627, 0xcbf18a51), TOBN(0x4d93651b, 0x3032c081),
+       TOBN(0x207f2771, 0x3946834d), TOBN(0x2c08d7b4, 0x30cdbf80)}},
+     {{TOBN(0x137a4fb4, 0x86df2a61), TOBN(0xa1ed9c07, 0xecf7b4a2),
+       TOBN(0xb2e460e2, 0x7bd042ff), TOBN(0xb7f5e2fa, 0x5f62f5ec)},
+      {TOBN(0x7aa6ec6b, 0xcc2423b7), TOBN(0x75ce0a7f, 0xba63eea7),
+       TOBN(0x67a45fb1, 0xf250a6e1), TOBN(0x93bc919c, 0xe53cdc9f)}},
+     {{TOBN(0x9271f56f, 0x871942df), TOBN(0x2372ff6f, 0x7859ad66),
+       TOBN(0x5f4c2b96, 0x33cb1a78), TOBN(0xe3e29101, 0x5838aa83)},
+      {TOBN(0xa7ed1611, 0xe4e8110c), TOBN(0x2a2d70d5, 0x330198ce),
+       TOBN(0xbdf132e8, 0x6720efe0), TOBN(0xe61a8962, 0x66a471bf)}},
+     {{TOBN(0x796d3a85, 0x825808bd), TOBN(0x51dc3cb7, 0x3fd6e902),
+       TOBN(0x643c768a, 0x916219d1), TOBN(0x36cd7685, 0xa2ad7d32)},
+      {TOBN(0xe3db9d05, 0xb22922a4), TOBN(0x6494c87e, 0xdba29660),
+       TOBN(0xf0ac91df, 0xbcd2ebc7), TOBN(0x4deb57a0, 0x45107f8d)}},
+     {{TOBN(0x42271f59, 0xc3d12a73), TOBN(0x5f71687c, 0xa5c2c51d),
+       TOBN(0xcb1f50c6, 0x05797bcb), TOBN(0x29ed0ed9, 0xd6d34eb0)},
+      {TOBN(0xe5fe5b47, 0x4683c2eb), TOBN(0x4956eeb5, 0x97447c46),
+       TOBN(0x5b163a43, 0x71207167), TOBN(0x93fa2fed, 0x0248c5ef)}},
+     {{TOBN(0x67930af2, 0x31f63950), TOBN(0xa77797c1, 0x14caa2c9),
+       TOBN(0x526e80ee, 0x27ac7e62), TOBN(0xe1e6e626, 0x58b28aec)},
+      {TOBN(0x636178b0, 0xb3c9fef0), TOBN(0xaf7752e0, 0x6d5f90be),
+       TOBN(0x94ecaf18, 0xeece51cf), TOBN(0x2864d0ed, 0xca806e1f)}},
+     {{TOBN(0x6de2e383, 0x97c69134), TOBN(0x5a42c316, 0xeb291293),
+       TOBN(0xc7779219, 0x6a60bae0), TOBN(0xa24de346, 0x6b7599d1)},
+      {TOBN(0x49d374aa, 0xb75d4941), TOBN(0x98900586, 0x2d501ff0),
+       TOBN(0x9f16d40e, 0xeb7974cf), TOBN(0x1033860b, 0xcdd8c115)}},
+     {{TOBN(0xb6c69ac8, 0x2094cec3), TOBN(0x9976fb88, 0x403b770c),
+       TOBN(0x1dea026c, 0x4859590d), TOBN(0xb6acbb46, 0x8562d1fd)},
+      {TOBN(0x7cd6c461, 0x44569d85), TOBN(0xc3190a36, 0x97f0891d),
+       TOBN(0xc6f53195, 0x48d5a17d), TOBN(0x7d919966, 0xd749abc8)}},
+     {{TOBN(0x65104837, 0xdd1c8a20), TOBN(0x7e5410c8, 0x2f683419),
+       TOBN(0x958c3ca8, 0xbe94022e), TOBN(0x605c3197, 0x6145dac2)},
+      {TOBN(0x3fc07501, 0x01683d54), TOBN(0x1d7127c5, 0x595b1234),
+       TOBN(0x10b8f87c, 0x9481277f), TOBN(0x677db2a8, 0xe65a1adb)}},
+     {{TOBN(0xec2fccaa, 0xddce3345), TOBN(0x2a6811b7, 0x012a4350),
+       TOBN(0x96760ff1, 0xac598bdc), TOBN(0x054d652a, 0xd1bf4128)},
+      {TOBN(0x0a1151d4, 0x92a21005), TOBN(0xad7f3971, 0x33110fdf),
+       TOBN(0x8c95928c, 0x1960100f), TOBN(0x6c91c825, 0x7bf03362)}},
+     {{TOBN(0xc8c8b2a2, 0xce309f06), TOBN(0xfdb27b59, 0xca27204b),
+       TOBN(0xd223eaa5, 0x0848e32e), TOBN(0xb93e4b2e, 0xe7bfaf1e)},
+      {TOBN(0xc5308ae6, 0x44aa3ded), TOBN(0x317a666a, 0xc015d573),
+       TOBN(0xc888ce23, 0x1a979707), TOBN(0xf141c1e6, 0x0d5c4958)}},
+     {{TOBN(0xb53b7de5, 0x61906373), TOBN(0x858dbade, 0xeb999595),
+       TOBN(0x8cbb47b2, 0xa59e5c36), TOBN(0x660318b3, 0xdcf4e842)},
+      {TOBN(0xbd161ccd, 0x12ba4b7a), TOBN(0xf399daab, 0xf8c8282a),
+       TOBN(0x1587633a, 0xeeb2130d), TOBN(0xa465311a, 0xda38dd7d)}},
+     {{TOBN(0x5f75eec8, 0x64d3779b), TOBN(0x3c5d0476, 0xad64c171),
+       TOBN(0x87410371, 0x2a914428), TOBN(0x8096a891, 0x90e2fc29)},
+      {TOBN(0xd3d2ae9d, 0x23b3ebc2), TOBN(0x90bdd6db, 0xa580cfd6),
+       TOBN(0x52dbb7f3, 0xc5b01f6c), TOBN(0xe68eded4, 0xe102a2dc)}},
+     {{TOBN(0x17785b77, 0x99eb6df0), TOBN(0x26c3cc51, 0x7386b779),
+       TOBN(0x345ed988, 0x6417a48e), TOBN(0xe990b4e4, 0x07d6ef31)},
+      {TOBN(0x0f456b7e, 0x2586abba), TOBN(0x239ca6a5, 0x59c96e9a),
+       TOBN(0xe327459c, 0xe2eb4206), TOBN(0x3a4c3313, 0xa002b90a)}},
+     {{TOBN(0x2a114806, 0xf6a3f6fb), TOBN(0xad5cad2f, 0x85c251dd),
+       TOBN(0x92c1f613, 0xf5a784d3), TOBN(0xec7bfacf, 0x349766d5)},
+      {TOBN(0x04b3cd33, 0x3e23cb3b), TOBN(0x3979fe84, 0xc5a64b2d),
+       TOBN(0x192e2720, 0x7e589106), TOBN(0xa60c43d1, 0xa15b527f)}},
+     {{TOBN(0x2dae9082, 0xbe7cf3a6), TOBN(0xcc86ba92, 0xbc967274),
+       TOBN(0xf28a2ce8, 0xaea0a8a9), TOBN(0x404ca6d9, 0x6ee988b3)},
+      {TOBN(0xfd7e9c5d, 0x005921b8), TOBN(0xf56297f1, 0x44e79bf9),
+       TOBN(0xa163b460, 0x0d75ddc2), TOBN(0x30b23616, 0xa1f2be87)}},
+     {{TOBN(0x4b070d21, 0xbfe50e2b), TOBN(0x7ef8cfd0, 0xe1bfede1),
+       TOBN(0xadba0011, 0x2aac4ae0), TOBN(0x2a3e7d01, 0xb9ebd033)},
+      {TOBN(0x995277ec, 0xe38d9d1c), TOBN(0xb500249e, 0x9c5d2de3),
+       TOBN(0x8912b820, 0xf13ca8c9), TOBN(0xc8798114, 0x877793af)}},
+     {{TOBN(0x19e6125d, 0xec3f1dec), TOBN(0x07b1f040, 0x911178da),
+       TOBN(0xd93ededa, 0x904a6738), TOBN(0x55187a5a, 0x0bebedcd)},
+      {TOBN(0xf7d04722, 0xeb329d41), TOBN(0xf449099e, 0xf170b391),
+       TOBN(0xfd317a69, 0xca99f828), TOBN(0x50c3db2b, 0x34a4976d)}},
+     {{TOBN(0xe9ba7784, 0x3757b392), TOBN(0x326caefd, 0xaa3ca05a),
+       TOBN(0x78e5293b, 0xf1e593d4), TOBN(0x7842a937, 0x0d98fd13)},
+      {TOBN(0xe694bf96, 0x5f96b10d), TOBN(0x373a9df6, 0x06a8cd05),
+       TOBN(0x997d1e51, 0xe8f0c7fc), TOBN(0x1d019790, 0x63fd972e)}},
+     {{TOBN(0x0064d858, 0x5499fb32), TOBN(0x7b67bad9, 0x77a8aeb7),
+       TOBN(0x1d3eb977, 0x2d08eec5), TOBN(0x5fc047a6, 0xcbabae1d)},
+      {TOBN(0x0577d159, 0xe54a64bb), TOBN(0x8862201b, 0xc43497e4),
+       TOBN(0xad6b4e28, 0x2ce0608d), TOBN(0x8b687b7d, 0x0b167aac)}},
+     {{TOBN(0x6ed4d367, 0x8b2ecfa9), TOBN(0x24dfe62d, 0xa90c3c38),
+       TOBN(0xa1862e10, 0x3fe5c42b), TOBN(0x1ca73dca, 0xd5732a9f)},
+      {TOBN(0x35f038b7, 0x76bb87ad), TOBN(0x674976ab, 0xf242b81f),
+       TOBN(0x4f2bde7e, 0xb0fd90cd), TOBN(0x6efc172e, 0xa7fdf092)}},
+     {{TOBN(0x3806b69b, 0x92222f1f), TOBN(0x5a2459ca, 0x6cf7ae70),
+       TOBN(0x6789f69c, 0xa85217ee), TOBN(0x5f232b5e, 0xe3dc85ac)},
+      {TOBN(0x660e3ec5, 0x48e9e516), TOBN(0x124b4e47, 0x3197eb31),
+       TOBN(0x10a0cb13, 0xaafcca23), TOBN(0x7bd63ba4, 0x8213224f)}},
+     {{TOBN(0xaffad7cc, 0x290a7f4f), TOBN(0x6b409c9e, 0x0286b461),
+       TOBN(0x58ab809f, 0xffa407af), TOBN(0xc3122eed, 0xc68ac073)},
+      {TOBN(0x17bf9e50, 0x4ef24d7e), TOBN(0x5d929794, 0x3e2a5811),
+       TOBN(0x519bc867, 0x02902e01), TOBN(0x76bba5da, 0x39c8a851)}},
+     {{TOBN(0xe9f9669c, 0xda94951e), TOBN(0x4b6af58d, 0x66b8d418),
+       TOBN(0xfa321074, 0x17d426a4), TOBN(0xc78e66a9, 0x9dde6027)},
+      {TOBN(0x0516c083, 0x4a53b964), TOBN(0xfc659d38, 0xff602330),
+       TOBN(0x0ab55e5c, 0x58c5c897), TOBN(0x985099b2, 0x838bc5df)}},
+     {{TOBN(0x061d9efc, 0xc52fc238), TOBN(0x712b2728, 0x6ac1da3f),
+       TOBN(0xfb658149, 0x9283fe08), TOBN(0x4954ac94, 0xb8aaa2f7)},
+      {TOBN(0x85c0ada4, 0x7fb2e74f), TOBN(0xee8ba98e, 0xb89926b0),
+       TOBN(0xe4f9d37d, 0x23d1af5b), TOBN(0x14ccdbf9, 0xba9b015e)}},
+     {{TOBN(0xb674481b, 0x7bfe7178), TOBN(0x4e1debae, 0x65405868),
+       TOBN(0x061b2821, 0xc48c867d), TOBN(0x69c15b35, 0x513b30ea)},
+      {TOBN(0x3b4a1666, 0x36871088), TOBN(0xe5e29f5d, 0x1220b1ff),
+       TOBN(0x4b82bb35, 0x233d9f4d), TOBN(0x4e076333, 0x18cdc675)}}},
+    {{{TOBN(0x0d53f5c7, 0xa3e6fced), TOBN(0xe8cbbdd5, 0xf45fbdeb),
+       TOBN(0xf85c01df, 0x13339a70), TOBN(0x0ff71880, 0x142ceb81)},
+      {TOBN(0x4c4e8774, 0xbd70437a), TOBN(0x5fb32891, 0xba0bda6a),
+       TOBN(0x1cdbebd2, 0xf18bd26e), TOBN(0x2f9526f1, 0x03a9d522)}},
+     {{TOBN(0x40ce3051, 0x92c4d684), TOBN(0x8b04d725, 0x7612efcd),
+       TOBN(0xb9dcda36, 0x6f9cae20), TOBN(0x0edc4d24, 0xf058856c)},
+      {TOBN(0x64f2e6bf, 0x85427900), TOBN(0x3de81295, 0xdc09dfea),
+       TOBN(0xd41b4487, 0x379bf26c), TOBN(0x50b62c6d, 0x6df135a9)}},
+     {{TOBN(0xd4f8e3b4, 0xc72dfe67), TOBN(0xc416b0f6, 0x90e19fdf),
+       TOBN(0x18b9098d, 0x4c13bd35), TOBN(0xac11118a, 0x15b8cb9e)},
+      {TOBN(0xf598a318, 0xf0062841), TOBN(0xbfe0602f, 0x89f356f4),
+       TOBN(0x7ae3637e, 0x30177a0c), TOBN(0x34097747, 0x61136537)}},
+     {{TOBN(0x0db2fb5e, 0xd005832a), TOBN(0x5f5efd3b, 0x91042e4f),
+       TOBN(0x8c4ffdc6, 0xed70f8ca), TOBN(0xe4645d0b, 0xb52da9cc)},
+      {TOBN(0x9596f58b, 0xc9001d1f), TOBN(0x52c8f0bc, 0x4e117205),
+       TOBN(0xfd4aa0d2, 0xe398a084), TOBN(0x815bfe3a, 0x104f49de)}},
+     {{TOBN(0x97e5443f, 0x23885e5f), TOBN(0xf72f8f99, 0xe8433aab),
+       TOBN(0xbd00b154, 0xe4d4e604), TOBN(0xd0b35e6a, 0xe5e173ff)},
+      {TOBN(0x57b2a048, 0x9164722d), TOBN(0x3e3c665b, 0x88761ec8),
+       TOBN(0x6bdd1397, 0x3da83832), TOBN(0x3c8b1a1e, 0x73dafe3b)}},
+     {{TOBN(0x4497ace6, 0x54317cac), TOBN(0xbe600ab9, 0x521771b3),
+       TOBN(0xb42e409e, 0xb0dfe8b8), TOBN(0x386a67d7, 0x3942310f)},
+      {TOBN(0x25548d8d, 0x4431cc28), TOBN(0xa7cff142, 0x985dc524),
+       TOBN(0x4d60f5a1, 0x93c4be32), TOBN(0x83ebd5c8, 0xd071c6e1)}},
+     {{TOBN(0xba3a80a7, 0xb1fd2b0b), TOBN(0x9b3ad396, 0x5bec33e8),
+       TOBN(0xb3868d61, 0x79743fb3), TOBN(0xcfd169fc, 0xfdb462fa)},
+      {TOBN(0xd3b499d7, 0x9ce0a6af), TOBN(0x55dc1cf1, 0xe42d3ff8),
+       TOBN(0x04fb9e6c, 0xc6c3e1b2), TOBN(0x47e6961d, 0x6f69a474)}},
+     {{TOBN(0x54eb3acc, 0xe548b37b), TOBN(0xb38e7542, 0x84d40549),
+       TOBN(0x8c3daa51, 0x7b341b4f), TOBN(0x2f6928ec, 0x690bf7fa)},
+      {TOBN(0x0496b323, 0x86ce6c41), TOBN(0x01be1c55, 0x10adadcd),
+       TOBN(0xc04e67e7, 0x4bb5faf9), TOBN(0x3cbaf678, 0xe15c9985)}},
+     {{TOBN(0x8cd12145, 0x50ca4247), TOBN(0xba1aa47a, 0xe7dd30aa),
+       TOBN(0x2f81ddf1, 0xe58fee24), TOBN(0x03452936, 0xeec9b0e8)},
+      {TOBN(0x8bdc3b81, 0x243aea96), TOBN(0x9a2919af, 0x15c3d0e5),
+       TOBN(0x9ea640ec, 0x10948361), TOBN(0x5ac86d5b, 0x6e0bcccf)}},
+     {{TOBN(0xf892d918, 0xc36cf440), TOBN(0xaed3e837, 0xc939719c),
+       TOBN(0xb07b08d2, 0xc0218b64), TOBN(0x6f1bcbba, 0xce9790dd)},
+      {TOBN(0x4a84d6ed, 0x60919b8e), TOBN(0xd8900791, 0x8ac1f9eb),
+       TOBN(0xf84941aa, 0x0dd5daef), TOBN(0xb22fe40a, 0x67fd62c5)}},
+     {{TOBN(0x97e15ba2, 0x157f2db3), TOBN(0xbda2fc8f, 0x8e28ca9c),
+       TOBN(0x5d050da4, 0x37b9f454), TOBN(0x3d57eb57, 0x2379d72e)},
+      {TOBN(0xe9b5eba2, 0xfb5ee997), TOBN(0x01648ca2, 0xe11538ca),
+       TOBN(0x32bb76f6, 0xf6327974), TOBN(0x338f14b8, 0xff3f4bb7)}},
+     {{TOBN(0x524d226a, 0xd7ab9a2d), TOBN(0x9c00090d, 0x7dfae958),
+       TOBN(0x0ba5f539, 0x8751d8c2), TOBN(0x8afcbcdd, 0x3ab8262d)},
+      {TOBN(0x57392729, 0xe99d043b), TOBN(0xef51263b, 0xaebc943a),
+       TOBN(0x9feace93, 0x20862935), TOBN(0x639efc03, 0xb06c817b)}},
+     {{TOBN(0x1fe054b3, 0x66b4be7a), TOBN(0x3f25a9de, 0x84a37a1e),
+       TOBN(0xf39ef1ad, 0x78d75cd9), TOBN(0xd7b58f49, 0x5062c1b5)},
+      {TOBN(0x6f74f9a9, 0xff563436), TOBN(0xf718ff29, 0xe8af51e7),
+       TOBN(0x5234d313, 0x15e97fec), TOBN(0xb6a8e2b1, 0x292f1c0a)}},
+     {{TOBN(0xa7f53aa8, 0x327720c1), TOBN(0x956ca322, 0xba092cc8),
+       TOBN(0x8f03d64a, 0x28746c4d), TOBN(0x51fe1782, 0x66d0d392)},
+      {TOBN(0xd19b34db, 0x3c832c80), TOBN(0x60dccc5c, 0x6da2e3b4),
+       TOBN(0x245dd62e, 0x0a104ccc), TOBN(0xa7ab1de1, 0x620b21fd)}},
+     {{TOBN(0xb293ae0b, 0x3893d123), TOBN(0xf7b75783, 0xb15ee71c),
+       TOBN(0x5aa3c614, 0x42a9468b), TOBN(0xd686123c, 0xdb15d744)},
+      {TOBN(0x8c616891, 0xa7ab4116), TOBN(0x6fcd72c8, 0xa4e6a459),
+       TOBN(0xac219110, 0x77e5fad7), TOBN(0xfb6a20e7, 0x704fa46b)}},
+     {{TOBN(0xe839be7d, 0x341d81dc), TOBN(0xcddb6889, 0x32148379),
+       TOBN(0xda6211a1, 0xf7026ead), TOBN(0xf3b2575f, 0xf4d1cc5e)},
+      {TOBN(0x40cfc8f6, 0xa7a73ae6), TOBN(0x83879a5e, 0x61d5b483),
+       TOBN(0xc5acb1ed, 0x41a50ebc), TOBN(0x59a60cc8, 0x3c07d8fa)}},
+     {{TOBN(0x1b73bdce, 0xb1876262), TOBN(0x2b0d79f0, 0x12af4ee9),
+       TOBN(0x8bcf3b0b, 0xd46e1d07), TOBN(0x17d6af9d, 0xe45d152f)},
+      {TOBN(0x73520461, 0x6d736451), TOBN(0x43cbbd97, 0x56b0bf5a),
+       TOBN(0xb0833a5b, 0xd5999b9d), TOBN(0x702614f0, 0xeb72e398)}},
+     {{TOBN(0x0aadf01a, 0x59c3e9f8), TOBN(0x40200e77, 0xce6b3d16),
+       TOBN(0xda22bdd3, 0xdeddafad), TOBN(0x76dedaf4, 0x310d72e1)},
+      {TOBN(0x49ef807c, 0x4bc2e88f), TOBN(0x6ba81291, 0x146dd5a5),
+       TOBN(0xa1a4077a, 0x7d8d59e9), TOBN(0x87b6a2e7, 0x802db349)}},
+     {{TOBN(0xd5679997, 0x1b4e598e), TOBN(0xf499ef1f, 0x06fe4b1d),
+       TOBN(0x3978d3ae, 0xfcb267c5), TOBN(0xb582b557, 0x235786d0)},
+      {TOBN(0x32b3b2ca, 0x1715cb07), TOBN(0x4c3de6a2, 0x8480241d),
+       TOBN(0x63b5ffed, 0xcb571ecd), TOBN(0xeaf53900, 0xed2fe9a9)}},
+     {{TOBN(0xdec98d4a, 0xc3b81990), TOBN(0x1cb83722, 0x9e0cc8fe),
+       TOBN(0xfe0b0491, 0xd2b427b9), TOBN(0x0f2386ac, 0xe983a66c)},
+      {TOBN(0x930c4d1e, 0xb3291213), TOBN(0xa2f82b2e, 0x59a62ae4),
+       TOBN(0x77233853, 0xf93e89e3), TOBN(0x7f8063ac, 0x11777c7f)}},
+     {{TOBN(0xff0eb567, 0x59ad2877), TOBN(0x6f454642, 0x9865c754),
+       TOBN(0xe6fe701a, 0x236e9a84), TOBN(0xc586ef16, 0x06e40fc3)},
+      {TOBN(0x3f62b6e0, 0x24bafad9), TOBN(0xc8b42bd2, 0x64da906a),
+       TOBN(0xc98e1eb4, 0xda3276a0), TOBN(0x30d0e5fc, 0x06cbf852)}},
+     {{TOBN(0x1b6b2ae1, 0xe8b4dfd4), TOBN(0xd754d5c7, 0x8301cbac),
+       TOBN(0x66097629, 0x112a39ac), TOBN(0xf86b5999, 0x93ba4ab9)},
+      {TOBN(0x26c9dea7, 0x99f9d581), TOBN(0x0473b1a8, 0xc2fafeaa),
+       TOBN(0x1469af55, 0x3b2505a5), TOBN(0x227d16d7, 0xd6a43323)}},
+     {{TOBN(0x3316f73c, 0xad3d97f9), TOBN(0x52bf3bb5, 0x1f137455),
+       TOBN(0x953eafeb, 0x09954e7c), TOBN(0xa721dfed, 0xdd732411)},
+      {TOBN(0xb4929821, 0x141d4579), TOBN(0x3411321c, 0xaa3bd435),
+       TOBN(0xafb355aa, 0x17fa6015), TOBN(0xb4e7ef4a, 0x18e42f0e)}},
+     {{TOBN(0x604ac97c, 0x59371000), TOBN(0xe1c48c70, 0x7f759c18),
+       TOBN(0x3f62ecc5, 0xa5db6b65), TOBN(0x0a78b173, 0x38a21495)},
+      {TOBN(0x6be1819d, 0xbcc8ad94), TOBN(0x70dc04f6, 0xd89c3400),
+       TOBN(0x462557b4, 0xa6b4840a), TOBN(0x544c6ade, 0x60bd21c0)}},
+     {{TOBN(0x6a00f24e, 0x907a544b), TOBN(0xa7520dcb, 0x313da210),
+       TOBN(0xfe939b75, 0x11e4994b), TOBN(0x918b6ba6, 0xbc275d70)},
+      {TOBN(0xd3e5e0fc, 0x644be892), TOBN(0x707a9816, 0xfdaf6c42),
+       TOBN(0x60145567, 0xf15c13fe), TOBN(0x4818ebaa, 0xe130a54a)}},
+     {{TOBN(0x28aad3ad, 0x58d2f767), TOBN(0xdc5267fd, 0xd7e7c773),
+       TOBN(0x4919cc88, 0xc3afcc98), TOBN(0xaa2e6ab0, 0x2db8cd4b)},
+      {TOBN(0xd46fec04, 0xd0c63eaa), TOBN(0xa1cb92c5, 0x19ffa832),
+       TOBN(0x678dd178, 0xe43a631f), TOBN(0xfb5ae1cd, 0x3dc788b3)}},
+     {{TOBN(0x68b4fb90, 0x6e77de04), TOBN(0x7992bcf0, 0xf06dbb97),
+       TOBN(0x896e6a13, 0xc417c01d), TOBN(0x8d96332c, 0xb956be01)},
+      {TOBN(0x902fc93a, 0x413aa2b9), TOBN(0x99a4d915, 0xfc98c8a5),
+       TOBN(0x52c29407, 0x565f1137), TOBN(0x4072690f, 0x21e4f281)}},
+     {{TOBN(0x36e607cf, 0x02ff6072), TOBN(0xa47d2ca9, 0x8ad98cdc),
+       TOBN(0xbf471d1e, 0xf5f56609), TOBN(0xbcf86623, 0xf264ada0)},
+      {TOBN(0xb70c0687, 0xaa9e5cb6), TOBN(0xc98124f2, 0x17401c6c),
+       TOBN(0x8189635f, 0xd4a61435), TOBN(0xd28fb8af, 0xa9d98ea6)}},
+     {{TOBN(0xb9a67c2a, 0x40c251f8), TOBN(0x88cd5d87, 0xa2da44be),
+       TOBN(0x437deb96, 0xe09b5423), TOBN(0x150467db, 0x64287dc1)},
+      {TOBN(0xe161debb, 0xcdabb839), TOBN(0xa79e9742, 0xf1839a3e),
+       TOBN(0xbb8dd3c2, 0x652d202b), TOBN(0x7b3e67f7, 0xe9f97d96)}},
+     {{TOBN(0x5aa5d78f, 0xb1cb6ac9), TOBN(0xffa13e8e, 0xca1d0d45),
+       TOBN(0x369295dd, 0x2ba5bf95), TOBN(0xd68bd1f8, 0x39aff05e)},
+      {TOBN(0xaf0d86f9, 0x26d783f2), TOBN(0x543a59b3, 0xfc3aafc1),
+       TOBN(0x3fcf81d2, 0x7b7da97c), TOBN(0xc990a056, 0xd25dee46)}},
+     {{TOBN(0x3e6775b8, 0x519cce2c), TOBN(0xfc9af71f, 0xae13d863),
+       TOBN(0x774a4a6f, 0x47c1605c), TOBN(0x46ba4245, 0x2fd205e8)},
+      {TOBN(0xa06feea4, 0xd3fd524d), TOBN(0x1e724641, 0x6de1acc2),
+       TOBN(0xf53816f1, 0x334e2b42), TOBN(0x49e5918e, 0x922f0024)}},
+     {{TOBN(0x439530b6, 0x65c7322d), TOBN(0xcf12cc01, 0xb3c1b3fb),
+       TOBN(0xc70b0186, 0x0172f685), TOBN(0xb915ee22, 0x1b58391d)},
+      {TOBN(0x9afdf03b, 0xa317db24), TOBN(0x87dec659, 0x17b8ffc4),
+       TOBN(0x7f46597b, 0xe4d3d050), TOBN(0x80a1c1ed, 0x006500e7)}},
+     {{TOBN(0x84902a96, 0x78bf030e), TOBN(0xfb5e9c9a, 0x50560148),
+       TOBN(0x6dae0a92, 0x63362426), TOBN(0xdcaeecf4, 0xa9e30c40)},
+      {TOBN(0xc0d887bb, 0x518d0c6b), TOBN(0x99181152, 0xcb985b9d),
+       TOBN(0xad186898, 0xef7bc381), TOBN(0x18168ffb, 0x9ee46201)}},
+     {{TOBN(0x9a04cdaa, 0x2502753c), TOBN(0xbb279e26, 0x51407c41),
+       TOBN(0xeacb03aa, 0xf23564e5), TOBN(0x18336582, 0x71e61016)},
+      {TOBN(0x8684b8c4, 0xeb809877), TOBN(0xb336e18d, 0xea0e672e),
+       TOBN(0xefb601f0, 0x34ee5867), TOBN(0x2733edbe, 0x1341cfd1)}},
+     {{TOBN(0xb15e809a, 0x26025c3c), TOBN(0xe6e981a6, 0x9350df88),
+       TOBN(0x92376237, 0x8502fd8e), TOBN(0x4791f216, 0x0c12be9b)},
+      {TOBN(0xb7256789, 0x25f02425), TOBN(0xec863194, 0x7a974443),
+       TOBN(0x7c0ce882, 0xfb41cc52), TOBN(0xc266ff7e, 0xf25c07f2)}},
+     {{TOBN(0x3d4da8c3, 0x017025f3), TOBN(0xefcf628c, 0xfb9579b4),
+       TOBN(0x5c4d0016, 0x1f3716ec), TOBN(0x9c27ebc4, 0x6801116e)},
+      {TOBN(0x5eba0ea1, 0x1da1767e), TOBN(0xfe151452, 0x47004c57),
+       TOBN(0x3ace6df6, 0x8c2373b7), TOBN(0x75c3dffe, 0x5dbc37ac)}},
+     {{TOBN(0x3dc32a73, 0xddc925fc), TOBN(0xb679c841, 0x2f65ee0b),
+       TOBN(0x715a3295, 0x451cbfeb), TOBN(0xd9889768, 0xf76e9a29)},
+      {TOBN(0xec20ce7f, 0xb28ad247), TOBN(0xe99146c4, 0x00894d79),
+       TOBN(0x71457d7c, 0x9f5e3ea7), TOBN(0x097b2662, 0x38030031)}},
+     {{TOBN(0xdb7f6ae6, 0xcf9f82a8), TOBN(0x319decb9, 0x438f473a),
+       TOBN(0xa63ab386, 0x283856c3), TOBN(0x13e3172f, 0xb06a361b)},
+      {TOBN(0x2959f8dc, 0x7d5a006c), TOBN(0x2dbc27c6, 0x75fba752),
+       TOBN(0xc1227ab2, 0x87c22c9e), TOBN(0x06f61f75, 0x71a268b2)}},
+     {{TOBN(0x1b6bb971, 0x04779ce2), TOBN(0xaca83812, 0x0aadcb1d),
+       TOBN(0x297ae0bc, 0xaeaab2d5), TOBN(0xa5c14ee7, 0x5bfb9f13)},
+      {TOBN(0xaa00c583, 0xf17a62c7), TOBN(0x39eb962c, 0x173759f6),
+       TOBN(0x1eeba1d4, 0x86c9a88f), TOBN(0x0ab6c37a, 0xdf016c5e)}},
+     {{TOBN(0xa2a147db, 0xa28a0749), TOBN(0x246c20d6, 0xee519165),
+       TOBN(0x5068d1b1, 0xd3810715), TOBN(0xb1e7018c, 0x748160b9)},
+      {TOBN(0x03f5b1fa, 0xf380ff62), TOBN(0xef7fb1dd, 0xf3cb2c1e),
+       TOBN(0xeab539a8, 0xfc91a7da), TOBN(0x83ddb707, 0xf3f9b561)}},
+     {{TOBN(0xc550e211, 0xfe7df7a4), TOBN(0xa7cd07f2, 0x063f6f40),
+       TOBN(0xb0de3635, 0x2976879c), TOBN(0xb5f83f85, 0xe55741da)},
+      {TOBN(0x4ea9d25e, 0xf3d8ac3d), TOBN(0x6fe2066f, 0x62819f02),
+       TOBN(0x4ab2b9c2, 0xcef4a564), TOBN(0x1e155d96, 0x5ffa2de3)}},
+     {{TOBN(0x0eb0a19b, 0xc3a72d00), TOBN(0x4037665b, 0x8513c31b),
+       TOBN(0x2fb2b6bf, 0x04c64637), TOBN(0x45c34d6e, 0x08cdc639)},
+      {TOBN(0x56f1e10f, 0xf01fd796), TOBN(0x4dfb8101, 0xfe3667b8),
+       TOBN(0xe0eda253, 0x9021d0c0), TOBN(0x7a94e9ff, 0x8a06c6ab)}},
+     {{TOBN(0x2d3bb0d9, 0xbb9aa882), TOBN(0xea20e4e5, 0xec05fd10),
+       TOBN(0xed7eeb5f, 0x1a1ca64e), TOBN(0x2fa6b43c, 0xc6327cbd)},
+      {TOBN(0xb577e3cf, 0x3aa91121), TOBN(0x8c6bd5ea, 0x3a34079b),
+       TOBN(0xd7e5ba39, 0x60e02fc0), TOBN(0xf16dd2c3, 0x90141bf8)}},
+     {{TOBN(0xb57276d9, 0x80101b98), TOBN(0x760883fd, 0xb82f0f66),
+       TOBN(0x89d7de75, 0x4bc3eff3), TOBN(0x03b60643, 0x5dc2ab40)},
+      {TOBN(0xcd6e53df, 0xe05beeac), TOBN(0xf2f1e862, 0xbc3325cd),
+       TOBN(0xdd0f7921, 0x774f03c3), TOBN(0x97ca7221, 0x4552cc1b)}},
+     {{TOBN(0x5a0d6afe, 0x1cd19f72), TOBN(0xa20915dc, 0xf183fbeb),
+       TOBN(0x9fda4b40, 0x832c403c), TOBN(0x32738edd, 0xbe425442)},
+      {TOBN(0x469a1df6, 0xb5eccf1a), TOBN(0x4b5aff42, 0x28bbe1f0),
+       TOBN(0x31359d7f, 0x570dfc93), TOBN(0xa18be235, 0xf0088628)}},
+     {{TOBN(0xa5b30fba, 0xb00ed3a9), TOBN(0x34c61374, 0x73cdf8be),
+       TOBN(0x2c5c5f46, 0xabc56797), TOBN(0x5cecf93d, 0xb82a8ae2)},
+      {TOBN(0x7d3dbe41, 0xa968fbf0), TOBN(0xd23d4583, 0x1a5c7f3d),
+       TOBN(0xf28f69a0, 0xc087a9c7), TOBN(0xc2d75471, 0x474471ca)}},
+     {{TOBN(0x36ec9f4a, 0x4eb732ec), TOBN(0x6c943bbd, 0xb1ca6bed),
+       TOBN(0xd64535e1, 0xf2457892), TOBN(0x8b84a8ea, 0xf7e2ac06)},
+      {TOBN(0xe0936cd3, 0x2499dd5f), TOBN(0x12053d7e, 0x0ed04e57),
+       TOBN(0x4bdd0076, 0xe4305d9d), TOBN(0x34a527b9, 0x1f67f0a2)}},
+     {{TOBN(0xe79a4af0, 0x9cec46ea), TOBN(0xb15347a1, 0x658b9bc7),
+       TOBN(0x6bd2796f, 0x35af2f75), TOBN(0xac957990, 0x4051c435)},
+      {TOBN(0x2669dda3, 0xc33a655d), TOBN(0x5d503c2e, 0x88514aa3),
+       TOBN(0xdfa11337, 0x3753dd41), TOBN(0x3f054673, 0x0b754f78)}},
+     {{TOBN(0xbf185677, 0x496125bd), TOBN(0xfb0023c8, 0x3775006c),
+       TOBN(0xfa0f072f, 0x3a037899), TOBN(0x4222b6eb, 0x0e4aea57)},
+      {TOBN(0x3dde5e76, 0x7866d25a), TOBN(0xb6eb04f8, 0x4837aa6f),
+       TOBN(0x5315591a, 0x2cf1cdb8), TOBN(0x6dfb4f41, 0x2d4e683c)}},
+     {{TOBN(0x7e923ea4, 0x48ee1f3a), TOBN(0x9604d9f7, 0x05a2afd5),
+       TOBN(0xbe1d4a33, 0x40ea4948), TOBN(0x5b45f1f4, 0xb44cbd2f)},
+      {TOBN(0x5faf8376, 0x4acc757e), TOBN(0xa7cf9ab8, 0x63d68ff7),
+       TOBN(0x8ad62f69, 0xdf0e404b), TOBN(0xd65f33c2, 0x12bdafdf)}},
+     {{TOBN(0xc365de15, 0xa377b14e), TOBN(0x6bf5463b, 0x8e39f60c),
+       TOBN(0x62030d2d, 0x2ce68148), TOBN(0xd95867ef, 0xe6f843a8)},
+      {TOBN(0xd39a0244, 0xef5ab017), TOBN(0x0bd2d8c1, 0x4ab55d12),
+       TOBN(0xc9503db3, 0x41639169), TOBN(0x2d4e25b0, 0xf7660c8a)}},
+     {{TOBN(0x760cb3b5, 0xe224c5d7), TOBN(0xfa3baf8c, 0x68616919),
+       TOBN(0x9fbca113, 0x8d142552), TOBN(0x1ab18bf1, 0x7669ebf5)},
+      {TOBN(0x55e6f53e, 0x9bdf25dd), TOBN(0x04cc0bf3, 0xcb6cd154),
+       TOBN(0x595bef49, 0x95e89080), TOBN(0xfe9459a8, 0x104a9ac1)}},
+     {{TOBN(0xad2d89ca, 0xcce9bb32), TOBN(0xddea65e1, 0xf7de8285),
+       TOBN(0x62ed8c35, 0xb351bd4b), TOBN(0x4150ff36, 0x0c0e19a7)},
+      {TOBN(0x86e3c801, 0x345f4e47), TOBN(0x3bf21f71, 0x203a266c),
+       TOBN(0x7ae110d4, 0x855b1f13), TOBN(0x5d6aaf6a, 0x07262517)}},
+     {{TOBN(0x1e0f12e1, 0x813d28f1), TOBN(0x6000e11d, 0x7ad7a523),
+       TOBN(0xc7d8deef, 0xc744a17b), TOBN(0x1e990b48, 0x14c05a00)},
+      {TOBN(0x68fddaee, 0x93e976d5), TOBN(0x696241d1, 0x46610d63),
+       TOBN(0xb204e7c3, 0x893dda88), TOBN(0x8bccfa65, 0x6a3a6946)}},
+     {{TOBN(0xb59425b4, 0xc5cd1411), TOBN(0x701b4042, 0xff3658b1),
+       TOBN(0xe3e56bca, 0x4784cf93), TOBN(0x27de5f15, 0x8fe68d60)},
+      {TOBN(0x4ab9cfce, 0xf8d53f19), TOBN(0xddb10311, 0xa40a730d),
+       TOBN(0x6fa73cd1, 0x4eee0a8a), TOBN(0xfd548748, 0x5249719d)}},
+     {{TOBN(0x49d66316, 0xa8123ef0), TOBN(0x73c32db4, 0xe7f95438),
+       TOBN(0x2e2ed209, 0x0d9e7854), TOBN(0xf98a9329, 0x9d9f0507)},
+      {TOBN(0xc5d33cf6, 0x0c6aa20a), TOBN(0x9a32ba14, 0x75279bb2),
+       TOBN(0x7e3202cb, 0x774a7307), TOBN(0x64ed4bc4, 0xe8c42dbd)}},
+     {{TOBN(0xc20f1a06, 0xd4caed0d), TOBN(0xb8021407, 0x171d22b3),
+       TOBN(0xd426ca04, 0xd13268d7), TOBN(0x92377007, 0x25f4d126)},
+      {TOBN(0x4204cbc3, 0x71f21a85), TOBN(0x18461b7a, 0xf82369ba),
+       TOBN(0xc0c07d31, 0x3fc858f9), TOBN(0x5deb5a50, 0xe2bab569)}},
+     {{TOBN(0xd5959d46, 0xd5eea89e), TOBN(0xfdff8424, 0x08437f4b),
+       TOBN(0xf21071e4, 0x3cfe254f), TOBN(0x72417696, 0x95468321)},
+      {TOBN(0x5d8288b9, 0x102cae3e), TOBN(0x2d143e3d, 0xf1965dff),
+       TOBN(0x00c9a376, 0xa078d847), TOBN(0x6fc0da31, 0x26028731)}},
+     {{TOBN(0xa2baeadf, 0xe45083a2), TOBN(0x66bc7218, 0x5e5b4bcd),
+       TOBN(0x2c826442, 0xd04b8e7f), TOBN(0xc19f5451, 0x6c4b586b)},
+      {TOBN(0x60182c49, 0x5b7eeed5), TOBN(0xd9954ecd, 0x7aa9dfa1),
+       TOBN(0xa403a8ec, 0xc73884ad), TOBN(0x7fb17de2, 0x9bb39041)}},
+     {{TOBN(0x694b64c5, 0xabb020e8), TOBN(0x3d18c184, 0x19c4eec7),
+       TOBN(0x9c4673ef, 0x1c4793e5), TOBN(0xc7b8aeb5, 0x056092e6)},
+      {TOBN(0x3aa1ca43, 0xf0f8c16b), TOBN(0x224ed5ec, 0xd679b2f6),
+       TOBN(0x0d56eeaf, 0x55a205c9), TOBN(0xbfe115ba, 0x4b8e028b)}},
+     {{TOBN(0x97e60849, 0x3927f4fe), TOBN(0xf91fbf94, 0x759aa7c5),
+       TOBN(0x985af769, 0x6be90a51), TOBN(0xc1277b78, 0x78ccb823)},
+      {TOBN(0x395b656e, 0xe7a75952), TOBN(0x00df7de0, 0x928da5f5),
+       TOBN(0x09c23175, 0x4ca4454f), TOBN(0x4ec971f4, 0x7aa2d3c1)}},
+     {{TOBN(0x45c3c507, 0xe75d9ccc), TOBN(0x63b7be8a, 0x3dc90306),
+       TOBN(0x37e09c66, 0x5db44bdc), TOBN(0x50d60da1, 0x6841c6a2)},
+      {TOBN(0x6f9b65ee, 0x08df1b12), TOBN(0x38734879, 0x7ff089df),
+       TOBN(0x9c331a66, 0x3fe8013d), TOBN(0x017f5de9, 0x5f42fcc8)}},
+     {{TOBN(0x43077866, 0xe8e57567), TOBN(0xc9f781ce, 0xf9fcdb18),
+       TOBN(0x38131dda, 0x9b12e174), TOBN(0x25d84aa3, 0x8a03752a)},
+      {TOBN(0x45e09e09, 0x4d0c0ce2), TOBN(0x1564008b, 0x92bebba5),
+       TOBN(0xf7e8ad31, 0xa87284c7), TOBN(0xb7c4b46c, 0x97e7bbaa)}},
+     {{TOBN(0x3e22a7b3, 0x97acf4ec), TOBN(0x0426c400, 0x5ea8b640),
+       TOBN(0x5e3295a6, 0x4e969285), TOBN(0x22aabc59, 0xa6a45670)},
+      {TOBN(0xb929714c, 0x5f5942bc), TOBN(0x9a6168bd, 0xfa3182ed),
+       TOBN(0x2216a665, 0x104152ba), TOBN(0x46908d03, 0xb6926368)}}},
+    {{{TOBN(0xa9f5d874, 0x5a1251fb), TOBN(0x967747a8, 0xc72725c7),
+       TOBN(0x195c33e5, 0x31ffe89e), TOBN(0x609d210f, 0xe964935e)},
+      {TOBN(0xcafd6ca8, 0x2fe12227), TOBN(0xaf9b5b96, 0x0426469d),
+       TOBN(0x2e9ee04c, 0x5693183c), TOBN(0x1084a333, 0xc8146fef)}},
+     {{TOBN(0x96649933, 0xaed1d1f7), TOBN(0x566eaff3, 0x50563090),
+       TOBN(0x345057f0, 0xad2e39cf), TOBN(0x148ff65b, 0x1f832124)},
+      {TOBN(0x042e89d4, 0xcf94cf0d), TOBN(0x319bec84, 0x520c58b3),
+       TOBN(0x2a267626, 0x5361aa0d), TOBN(0xc86fa302, 0x8fbc87ad)}},
+     {{TOBN(0xfc83d2ab, 0x5c8b06d5), TOBN(0xb1a785a2, 0xfe4eac46),
+       TOBN(0xb99315bc, 0x846f7779), TOBN(0xcf31d816, 0xef9ea505)},
+      {TOBN(0x2391fe6a, 0x15d7dc85), TOBN(0x2f132b04, 0xb4016b33),
+       TOBN(0x29547fe3, 0x181cb4c7), TOBN(0xdb66d8a6, 0x650155a1)}},
+     {{TOBN(0x6b66d7e1, 0xadc1696f), TOBN(0x98ebe593, 0x0acd72d0),
+       TOBN(0x65f24550, 0xcc1b7435), TOBN(0xce231393, 0xb4b9a5ec)},
+      {TOBN(0x234a22d4, 0xdb067df9), TOBN(0x98dda095, 0xcaff9b00),
+       TOBN(0x1bbc75a0, 0x6100c9c1), TOBN(0x1560a9c8, 0x939cf695)}},
+     {{TOBN(0xcf006d3e, 0x99e0925f), TOBN(0x2dd74a96, 0x6322375a),
+       TOBN(0xc58b446a, 0xb56af5ba), TOBN(0x50292683, 0xe0b9b4f1)},
+      {TOBN(0xe2c34cb4, 0x1aeaffa3), TOBN(0x8b17203f, 0x9b9587c1),
+       TOBN(0x6d559207, 0xead1350c), TOBN(0x2b66a215, 0xfb7f9604)}},
+     {{TOBN(0x0850325e, 0xfe51bf74), TOBN(0x9c4f579e, 0x5e460094),
+       TOBN(0x5c87b92a, 0x76da2f25), TOBN(0x889de4e0, 0x6febef33)},
+      {TOBN(0x6900ec06, 0x646083ce), TOBN(0xbe2a0335, 0xbfe12773),
+       TOBN(0xadd1da35, 0xc5344110), TOBN(0x757568b7, 0xb802cd20)}},
+     {{TOBN(0x75559779, 0x00f7e6c8), TOBN(0x38e8b94f, 0x0facd2f0),
+       TOBN(0xfea1f3af, 0x03fde375), TOBN(0x5e11a1d8, 0x75881dfc)},
+      {TOBN(0xb3a6b02e, 0xc1e2f2ef), TOBN(0x193d2bbb, 0xc605a6c5),
+       TOBN(0x325ffeee, 0x339a0b2d), TOBN(0x27b6a724, 0x9e0c8846)}},
+     {{TOBN(0xe4050f1c, 0xf1c367ca), TOBN(0x9bc85a9b, 0xc90fbc7d),
+       TOBN(0xa373c4a2, 0xe1a11032), TOBN(0xb64232b7, 0xad0393a9)},
+      {TOBN(0xf5577eb0, 0x167dad29), TOBN(0x1604f301, 0x94b78ab2),
+       TOBN(0x0baa94af, 0xe829348b), TOBN(0x77fbd8dd, 0x41654342)}},
+     {{TOBN(0xdab50ea5, 0xb964e39a), TOBN(0xd4c29e3c, 0xd0d3c76e),
+       TOBN(0x80dae67c, 0x56d11964), TOBN(0x7307a8bf, 0xe5ffcc2f)},
+      {TOBN(0x65bbc1aa, 0x91708c3b), TOBN(0xa151e62c, 0x28bf0eeb),
+       TOBN(0x6cb53381, 0x6fa34db7), TOBN(0x5139e05c, 0xa29403a8)}},
+     {{TOBN(0x6ff651b4, 0x94a7cd2e), TOBN(0x5671ffd1, 0x0699336c),
+       TOBN(0x6f5fd2cc, 0x979a896a), TOBN(0x11e893a8, 0xd8148cef)},
+      {TOBN(0x988906a1, 0x65cf7b10), TOBN(0x81b67178, 0xc50d8485),
+       TOBN(0x7c0deb35, 0x8a35b3de), TOBN(0x423ac855, 0xc1d29799)}},
+     {{TOBN(0xaf580d87, 0xdac50b74), TOBN(0x28b2b89f, 0x5869734c),
+       TOBN(0x99a3b936, 0x874e28fb), TOBN(0xbb2c9190, 0x25f3f73a)},
+      {TOBN(0x199f6918, 0x84a9d5b7), TOBN(0x7ebe2325, 0x7e770374),
+       TOBN(0xf442e107, 0x0738efe2), TOBN(0xcf9f3f56, 0xcf9082d2)}},
+     {{TOBN(0x719f69e1, 0x09618708), TOBN(0xcc9e8364, 0xc183f9b1),
+       TOBN(0xec203a95, 0x366a21af), TOBN(0x6aec5d6d, 0x068b141f)},
+      {TOBN(0xee2df78a, 0x994f04e9), TOBN(0xb39ccae8, 0x271245b0),
+       TOBN(0xb875a4a9, 0x97e43f4f), TOBN(0x507dfe11, 0xdb2cea98)}},
+     {{TOBN(0x4fbf81cb, 0x489b03e9), TOBN(0xdb86ec5b, 0x6ec414fa),
+       TOBN(0xfad444f9, 0xf51b3ae5), TOBN(0xca7d33d6, 0x1914e3fe)},
+      {TOBN(0xa9c32f5c, 0x0ae6c4d0), TOBN(0xa9ca1d1e, 0x73969568),
+       TOBN(0x98043c31, 0x1aa7467e), TOBN(0xe832e75c, 0xe21b5ac6)}},
+     {{TOBN(0x314b7aea, 0x5232123d), TOBN(0x08307c8c, 0x65ae86db),
+       TOBN(0x06e7165c, 0xaa4668ed), TOBN(0xb170458b, 0xb4d3ec39)},
+      {TOBN(0x4d2e3ec6, 0xc19bb986), TOBN(0xc5f34846, 0xae0304ed),
+       TOBN(0x917695a0, 0x6c9f9722), TOBN(0x6c7f7317, 0x4cab1c0a)}},
+     {{TOBN(0x6295940e, 0x9d6d2e8b), TOBN(0xd318b8c1, 0x549f7c97),
+       TOBN(0x22453204, 0x97713885), TOBN(0x468d834b, 0xa8a440fe)},
+      {TOBN(0xd81fe5b2, 0xbfba796e), TOBN(0x152364db, 0x6d71f116),
+       TOBN(0xbb8c7c59, 0xb5b66e53), TOBN(0x0b12c61b, 0x2641a192)}},
+     {{TOBN(0x31f14802, 0xfcf0a7fd), TOBN(0x42fd0789, 0x5488b01e),
+       TOBN(0x71d78d6d, 0x9952b498), TOBN(0x8eb572d9, 0x07ac5201)},
+      {TOBN(0xe0a2a44c, 0x4d194a88), TOBN(0xd2b63fd9, 0xba017e66),
+       TOBN(0x78efc6c8, 0xf888aefc), TOBN(0xb76f6bda, 0x4a881a11)}},
+     {{TOBN(0x187f314b, 0xb46c2397), TOBN(0x004cf566, 0x5ded2819),
+       TOBN(0xa9ea5704, 0x38764d34), TOBN(0xbba45217, 0x78084709)},
+      {TOBN(0x06474571, 0x1171121e), TOBN(0xad7b7eb1, 0xe7c9b671),
+       TOBN(0xdacfbc40, 0x730f7507), TOBN(0x178cd8c6, 0xc7ad7bd1)}},
+     {{TOBN(0xbf0be101, 0xb2a67238), TOBN(0x3556d367, 0xaf9c14f2),
+       TOBN(0x104b7831, 0xa5662075), TOBN(0x58ca59bb, 0x79d9e60a)},
+      {TOBN(0x4bc45392, 0xa569a73b), TOBN(0x517a52e8, 0x5698f6c9),
+       TOBN(0x85643da5, 0xaeadd755), TOBN(0x1aed0cd5, 0x2a581b84)}},
+     {{TOBN(0xb9b4ff84, 0x80af1372), TOBN(0x244c3113, 0xf1ba5d1f),
+       TOBN(0x2a5dacbe, 0xf5f98d31), TOBN(0x2c3323e8, 0x4375bc2a)},
+      {TOBN(0x17a3ab4a, 0x5594b1dd), TOBN(0xa1928bfb, 0xceb4797e),
+       TOBN(0xe83af245, 0xe4886a19), TOBN(0x8979d546, 0x72b5a74a)}},
+     {{TOBN(0xa0f726bc, 0x19f9e967), TOBN(0xd9d03152, 0xe8fbbf4e),
+       TOBN(0xcfd6f51d, 0xb7707d40), TOBN(0x633084d9, 0x63f6e6e0)},
+      {TOBN(0xedcd9cdc, 0x55667eaf), TOBN(0x73b7f92b, 0x2e44d56f),
+       TOBN(0xfb2e39b6, 0x4e962b14), TOBN(0x7d408f6e, 0xf671fcbf)}},
+     {{TOBN(0xcc634ddc, 0x164a89bb), TOBN(0x74a42bb2, 0x3ef3bd05),
+       TOBN(0x1280dbb2, 0x428decbb), TOBN(0x6103f6bb, 0x402c8596)},
+      {TOBN(0xfa2bf581, 0x355a5752), TOBN(0x562f96a8, 0x00946674),
+       TOBN(0x4e4ca16d, 0x6da0223b), TOBN(0xfe47819f, 0x28d3aa25)}},
+     {{TOBN(0x9eea3075, 0xf8dfcf8a), TOBN(0xa284f0aa, 0x95669825),
+       TOBN(0xb3fca250, 0x867d3fd8), TOBN(0x20757b5f, 0x269d691e)},
+      {TOBN(0xf2c24020, 0x93b8a5de), TOBN(0xd3f93359, 0xebc06da6),
+       TOBN(0x1178293e, 0xb2739c33), TOBN(0xd2a3e770, 0xbcd686e5)}},
+     {{TOBN(0xa76f49f4, 0xcd941534), TOBN(0x0d37406b, 0xe3c71c0e),
+       TOBN(0x172d9397, 0x3b97f7e3), TOBN(0xec17e239, 0xbd7fd0de)},
+      {TOBN(0xe3290551, 0x6f496ba2), TOBN(0x6a693172, 0x36ad50e7),
+       TOBN(0xc4e539a2, 0x83e7eff5), TOBN(0x752737e7, 0x18e1b4cf)}},
+     {{TOBN(0xa2f7932c, 0x68af43ee), TOBN(0x5502468e, 0x703d00bd),
+       TOBN(0xe5dc978f, 0x2fb061f5), TOBN(0xc9a1904a, 0x28c815ad)},
+      {TOBN(0xd3af538d, 0x470c56a4), TOBN(0x159abc5f, 0x193d8ced),
+       TOBN(0x2a37245f, 0x20108ef3), TOBN(0xfa17081e, 0x223f7178)}},
+     {{TOBN(0x27b0fb2b, 0x10c8c0f5), TOBN(0x2102c3ea, 0x40650547),
+       TOBN(0x594564df, 0x8ac3bfa7), TOBN(0x98102033, 0x509dad96)},
+      {TOBN(0x6989643f, 0xf1d18a13), TOBN(0x35eebd91, 0xd7fc5af0),
+       TOBN(0x078d096a, 0xfaeaafd8), TOBN(0xb7a89341, 0xdef3de98)}},
+     {{TOBN(0x2a206e8d, 0xecf2a73a), TOBN(0x066a6397, 0x8e551994),
+       TOBN(0x3a6a088a, 0xb98d53a2), TOBN(0x0ce7c67c, 0x2d1124aa)},
+      {TOBN(0x48cec671, 0x759a113c), TOBN(0xe3b373d3, 0x4f6f67fa),
+       TOBN(0x5455d479, 0xfd36727b), TOBN(0xe5a428ee, 0xa13c0d81)}},
+     {{TOBN(0xb853dbc8, 0x1c86682b), TOBN(0xb78d2727, 0xb8d02b2a),
+       TOBN(0xaaf69bed, 0x8ebc329a), TOBN(0xdb6b40b3, 0x293b2148)},
+      {TOBN(0xe42ea77d, 0xb8c4961f), TOBN(0xb1a12f7c, 0x20e5e0ab),
+       TOBN(0xa0ec5274, 0x79e8b05e), TOBN(0x68027391, 0xfab60a80)}},
+     {{TOBN(0x6bfeea5f, 0x16b1bd5e), TOBN(0xf957e420, 0x4de30ad3),
+       TOBN(0xcbaf664e, 0x6a353b9e), TOBN(0x5c873312, 0x26d14feb)},
+      {TOBN(0x4e87f98c, 0xb65f57cb), TOBN(0xdb60a621, 0x5e0cdd41),
+       TOBN(0x67c16865, 0xa6881440), TOBN(0x1093ef1a, 0x46ab52aa)}},
+     {{TOBN(0xc095afb5, 0x3f4ece64), TOBN(0x6a6bb02e, 0x7604551a),
+       TOBN(0x55d44b4e, 0x0b26b8cd), TOBN(0xe5f9a999, 0xf971268a)},
+      {TOBN(0xc08ec425, 0x11a7de84), TOBN(0x83568095, 0xfda469dd),
+       TOBN(0x737bfba1, 0x6c6c90a2), TOBN(0x1cb9c4a0, 0xbe229831)}},
+     {{TOBN(0x93bccbba, 0xbb2eec64), TOBN(0xa0c23b64, 0xda03adbe),
+       TOBN(0x5f7aa00a, 0xe0e86ac4), TOBN(0x470b941e, 0xfc1401e6)},
+      {TOBN(0x5ad8d679, 0x9df43574), TOBN(0x4ccfb8a9, 0x0f65d810),
+       TOBN(0x1bce80e3, 0xaa7fbd81), TOBN(0x273291ad, 0x9508d20a)}},
+     {{TOBN(0xf5c4b46b, 0x42a92806), TOBN(0x810684ec, 0xa86ab44a),
+       TOBN(0x4591640b, 0xca0bc9f8), TOBN(0xb5efcdfc, 0x5c4b6054)},
+      {TOBN(0x16fc8907, 0x6e9edd12), TOBN(0xe29d0b50, 0xd4d792f9),
+       TOBN(0xa45fd01c, 0x9b03116d), TOBN(0x85035235, 0xc81765a4)}},
+     {{TOBN(0x1fe2a9b2, 0xb4b4b67c), TOBN(0xc1d10df0, 0xe8020604),
+       TOBN(0x9d64abfc, 0xbc8058d8), TOBN(0x8943b9b2, 0x712a0fbb)},
+      {TOBN(0x90eed914, 0x3b3def04), TOBN(0x85ab3aa2, 0x4ce775ff),
+       TOBN(0x605fd4ca, 0x7bbc9040), TOBN(0x8b34a564, 0xe2c75dfb)}},
+     {{TOBN(0x41ffc94a, 0x10358560), TOBN(0x2d8a5072, 0x9e5c28aa),
+       TOBN(0xe915a0fc, 0x4cc7eb15), TOBN(0xe9efab05, 0x8f6d0f5d)},
+      {TOBN(0xdbab47a9, 0xd19e9b91), TOBN(0x8cfed745, 0x0276154c),
+       TOBN(0x154357ae, 0x2cfede0d), TOBN(0x520630df, 0x19f5a4ef)}},
+     {{TOBN(0x25759f7c, 0xe382360f), TOBN(0xb6db05c9, 0x88bf5857),
+       TOBN(0x2917d61d, 0x6c58d46c), TOBN(0x14f8e491, 0xfd20cb7a)},
+      {TOBN(0xb68a727a, 0x11c20340), TOBN(0x0386f86f, 0xaf7ccbb6),
+       TOBN(0x5c8bc6cc, 0xfee09a20), TOBN(0x7d76ff4a, 0xbb7eea35)}},
+     {{TOBN(0xa7bdebe7, 0xdb15be7a), TOBN(0x67a08054, 0xd89f0302),
+       TOBN(0x56bf0ea9, 0xc1193364), TOBN(0xc8244467, 0x62837ebe)},
+      {TOBN(0x32bd8e8b, 0x20d841b8), TOBN(0x127a0548, 0xdbb8a54f),
+       TOBN(0x83dd4ca6, 0x63b20236), TOBN(0x87714718, 0x203491fa)}},
+     {{TOBN(0x4dabcaaa, 0xaa8a5288), TOBN(0x91cc0c8a, 0xaf23a1c9),
+       TOBN(0x34c72c6a, 0x3f220e0c), TOBN(0xbcc20bdf, 0x1232144a)},
+      {TOBN(0x6e2f42da, 0xa20ede1b), TOBN(0xc441f00c, 0x74a00515),
+       TOBN(0xbf46a5b6, 0x734b8c4b), TOBN(0x57409503, 0x7b56c9a4)}},
+     {{TOBN(0x9f735261, 0xe4585d45), TOBN(0x9231faed, 0x6734e642),
+       TOBN(0x1158a176, 0xbe70ee6c), TOBN(0x35f1068d, 0x7c3501bf)},
+      {TOBN(0x6beef900, 0xa2d26115), TOBN(0x649406f2, 0xef0afee3),
+       TOBN(0x3f43a60a, 0xbc2420a1), TOBN(0x509002a7, 0xd5aee4ac)}},
+     {{TOBN(0xb46836a5, 0x3ff3571b), TOBN(0x24f98b78, 0x837927c1),
+       TOBN(0x6254256a, 0x4533c716), TOBN(0xf27abb0b, 0xd07ee196)},
+      {TOBN(0xd7cf64fc, 0x5c6d5bfd), TOBN(0x6915c751, 0xf0cd7a77),
+       TOBN(0xd9f59012, 0x8798f534), TOBN(0x772b0da8, 0xf81d8b5f)}},
+     {{TOBN(0x1244260c, 0x2e03fa69), TOBN(0x36cf0e3a, 0x3be1a374),
+       TOBN(0x6e7c1633, 0xef06b960), TOBN(0xa71a4c55, 0x671f90f6)},
+      {TOBN(0x7a941251, 0x33c673db), TOBN(0xc0bea510, 0x73e8c131),
+       TOBN(0x61a8a699, 0xd4f6c734), TOBN(0x25e78c88, 0x341ed001)}},
+     {{TOBN(0x5c18acf8, 0x8e2f7d90), TOBN(0xfdbf33d7, 0x77be32cd),
+       TOBN(0x0a085cd7, 0xd2eb5ee9), TOBN(0x2d702cfb, 0xb3201115)},
+      {TOBN(0xb6e0ebdb, 0x85c88ce8), TOBN(0x23a3ce3c, 0x1e01d617),
+       TOBN(0x3041618e, 0x567333ac), TOBN(0x9dd0fd8f, 0x157edb6b)}},
+     {{TOBN(0x27f74702, 0xb57872b8), TOBN(0x2ef26b4f, 0x657d5fe1),
+       TOBN(0x95426f0a, 0x57cf3d40), TOBN(0x847e2ad1, 0x65a6067a)},
+      {TOBN(0xd474d9a0, 0x09996a74), TOBN(0x16a56acd, 0x2a26115c),
+       TOBN(0x02a615c3, 0xd16f4d43), TOBN(0xcc3fc965, 0xaadb85b7)}},
+     {{TOBN(0x386bda73, 0xce07d1b0), TOBN(0xd82910c2, 0x58ad4178),
+       TOBN(0x124f82cf, 0xcd2617f4), TOBN(0xcc2f5e8d, 0xef691770)},
+      {TOBN(0x82702550, 0xb8c30ccc), TOBN(0x7b856aea, 0x1a8e575a),
+       TOBN(0xbb822fef, 0xb1ab9459), TOBN(0x085928bc, 0xec24e38e)}},
+     {{TOBN(0x5d0402ec, 0xba8f4b4d), TOBN(0xc07cd4ba, 0x00b4d58b),
+       TOBN(0x5d8dffd5, 0x29227e7a), TOBN(0x61d44d0c, 0x31bf386f)},
+      {TOBN(0xe486dc2b, 0x135e6f4d), TOBN(0x680962eb, 0xe79410ef),
+       TOBN(0xa61bd343, 0xf10088b5), TOBN(0x6aa76076, 0xe2e28686)}},
+     {{TOBN(0x80463d11, 0x8fb98871), TOBN(0xcb26f5c3, 0xbbc76aff),
+       TOBN(0xd4ab8edd, 0xfbe03614), TOBN(0xc8eb579b, 0xc0cf2dee)},
+      {TOBN(0xcc004c15, 0xc93bae41), TOBN(0x46fbae5d, 0x3aeca3b2),
+       TOBN(0x671235cf, 0x0f1e9ab1), TOBN(0xadfba934, 0x9ec285c1)}},
+     {{TOBN(0x88ded013, 0xf216c980), TOBN(0xc8ac4fb8, 0xf79e0bc1),
+       TOBN(0xa29b89c6, 0xfb97a237), TOBN(0xb697b780, 0x9922d8e7)},
+      {TOBN(0x3142c639, 0xddb945b5), TOBN(0x447b06c7, 0xe094c3a9),
+       TOBN(0xcdcb3642, 0x72266c90), TOBN(0x633aad08, 0xa9385046)}},
+     {{TOBN(0xa36c936b, 0xb57c6477), TOBN(0x871f8b64, 0xe94dbcc6),
+       TOBN(0x28d0fb62, 0xa591a67b), TOBN(0x9d40e081, 0xc1d926f5)},
+      {TOBN(0x3111eaf6, 0xf2d84b5a), TOBN(0x228993f9, 0xa565b644),
+       TOBN(0x0ccbf592, 0x2c83188b), TOBN(0xf87b30ab, 0x3df3e197)}},
+     {{TOBN(0xb8658b31, 0x7642bca8), TOBN(0x1a032d7f, 0x52800f17),
+       TOBN(0x051dcae5, 0x79bf9445), TOBN(0xeba6b8ee, 0x54a2e253)},
+      {TOBN(0x5c8b9cad, 0xd4485692), TOBN(0x84bda40e, 0x8986e9be),
+       TOBN(0xd16d16a4, 0x2f0db448), TOBN(0x8ec80050, 0xa14d4188)}},
+     {{TOBN(0xb2b26107, 0x98fa7aaa), TOBN(0x41209ee4, 0xf073aa4e),
+       TOBN(0xf1570359, 0xf2d6b19b), TOBN(0xcbe6868c, 0xfc577caf)},
+      {TOBN(0x186c4bdc, 0x32c04dd3), TOBN(0xa6c35fae, 0xcfeee397),
+       TOBN(0xb4a1b312, 0xf086c0cf), TOBN(0xe0a5ccc6, 0xd9461fe2)}},
+     {{TOBN(0xc32278aa, 0x1536189f), TOBN(0x1126c55f, 0xba6df571),
+       TOBN(0x0f71a602, 0xb194560e), TOBN(0x8b2d7405, 0x324bd6e1)},
+      {TOBN(0x8481939e, 0x3738be71), TOBN(0xb5090b1a, 0x1a4d97a9),
+       TOBN(0x116c65a3, 0xf05ba915), TOBN(0x21863ad3, 0xaae448aa)}},
+     {{TOBN(0xd24e2679, 0xa7aae5d3), TOBN(0x7076013d, 0x0de5c1c4),
+       TOBN(0x2d50f8ba, 0xbb05b629), TOBN(0x73c1abe2, 0x6e66efbb)},
+      {TOBN(0xefd4b422, 0xf2488af7), TOBN(0xe4105d02, 0x663ba575),
+       TOBN(0x7eb60a8b, 0x53a69457), TOBN(0x62210008, 0xc945973b)}},
+     {{TOBN(0xfb255478, 0x77a50ec6), TOBN(0xbf0392f7, 0x0a37a72c),
+       TOBN(0xa0a7a19c, 0x4be18e7a), TOBN(0x90d8ea16, 0x25b1e0af)},
+      {TOBN(0x7582a293, 0xef953f57), TOBN(0x90a64d05, 0xbdc5465a),
+       TOBN(0xca79c497, 0xe2510717), TOBN(0x560dbb7c, 0x18cb641f)}},
+     {{TOBN(0x1d8e3286, 0x4b66abfb), TOBN(0xd26f52e5, 0x59030900),
+       TOBN(0x1ee3f643, 0x5584941a), TOBN(0x6d3b3730, 0x569f5958)},
+      {TOBN(0x9ff2a62f, 0x4789dba5), TOBN(0x91fcb815, 0x72b5c9b7),
+       TOBN(0xf446cb7d, 0x6c8f9a0e), TOBN(0x48f625c1, 0x39b7ecb5)}},
+     {{TOBN(0xbabae801, 0x1c6219b8), TOBN(0xe7a562d9, 0x28ac2f23),
+       TOBN(0xe1b48732, 0x26e20588), TOBN(0x06ee1cad, 0x775af051)},
+      {TOBN(0xda29ae43, 0xfaff79f7), TOBN(0xc141a412, 0x652ee9e0),
+       TOBN(0x1e127f6f, 0x195f4bd0), TOBN(0x29c6ab4f, 0x072f34f8)}},
+     {{TOBN(0x7b7c1477, 0x30448112), TOBN(0x82b51af1, 0xe4a38656),
+       TOBN(0x2bf2028a, 0x2f315010), TOBN(0xc9a4a01f, 0x6ea88cd4)},
+      {TOBN(0xf63e95d8, 0x257e5818), TOBN(0xdd8efa10, 0xb4519b16),
+       TOBN(0xed8973e0, 0x0da910bf), TOBN(0xed49d077, 0x5c0fe4a9)}},
+     {{TOBN(0xac3aac5e, 0xb7caee1e), TOBN(0x1033898d, 0xa7f4da57),
+       TOBN(0x42145c0e, 0x5c6669b9), TOBN(0x42daa688, 0xc1aa2aa0)},
+      {TOBN(0x629cc15c, 0x1a1d885a), TOBN(0x25572ec0, 0xf4b76817),
+       TOBN(0x8312e435, 0x9c8f8f28), TOBN(0x8107f8cd, 0x81965490)}},
+     {{TOBN(0x516ff3a3, 0x6fa6110c), TOBN(0x74fb1eb1, 0xfb93561f),
+       TOBN(0x6c0c9047, 0x8457522b), TOBN(0xcfd32104, 0x6bb8bdc6)},
+      {TOBN(0x2d6884a2, 0xcc80ad57), TOBN(0x7c27fc35, 0x86a9b637),
+       TOBN(0x3461baed, 0xadf4e8cd), TOBN(0x1d56251a, 0x617242f0)}},
+     {{TOBN(0x0b80d209, 0xc955bef4), TOBN(0xdf02cad2, 0x06adb047),
+       TOBN(0xf0d7cb91, 0x5ec74fee), TOBN(0xd2503375, 0x1111ba44)},
+      {TOBN(0x9671755e, 0xdf53cb36), TOBN(0x54dcb612, 0x3368551b),
+       TOBN(0x66d69aac, 0xc8a025a4), TOBN(0x6be946c6, 0xe77ef445)}},
+     {{TOBN(0x719946d1, 0xa995e094), TOBN(0x65e848f6, 0xe51e04d8),
+       TOBN(0xe62f3300, 0x6a1e3113), TOBN(0x1541c7c1, 0x501de503)},
+      {TOBN(0x4daac9fa, 0xf4acfade), TOBN(0x0e585897, 0x44cd0b71),
+       TOBN(0x544fd869, 0x0a51cd77), TOBN(0x60fc20ed, 0x0031016d)}},
+     {{TOBN(0x58b404ec, 0xa4276867), TOBN(0x46f6c3cc, 0x34f34993),
+       TOBN(0x477ca007, 0xc636e5bd), TOBN(0x8018f5e5, 0x7c458b47)},
+      {TOBN(0xa1202270, 0xe47b668f), TOBN(0xcef48ccd, 0xee14f203),
+       TOBN(0x23f98bae, 0x62ff9b4d), TOBN(0x55acc035, 0xc589eddd)}},
+     {{TOBN(0x3fe712af, 0x64db4444), TOBN(0x19e9d634, 0xbecdd480),
+       TOBN(0xe08bc047, 0xa930978a), TOBN(0x2dbf24ec, 0xa1280733)},
+      {TOBN(0x3c0ae38c, 0x2cd706b2), TOBN(0x5b012a5b, 0x359017b9),
+       TOBN(0x3943c38c, 0x72e0f5ae), TOBN(0x786167ea, 0x57176fa3)}},
+     {{TOBN(0xe5f9897d, 0x594881dc), TOBN(0x6b5efad8, 0xcfb820c1),
+       TOBN(0xb2179093, 0xd55018de), TOBN(0x39ad7d32, 0x0bac56ce)},
+      {TOBN(0xb55122e0, 0x2cfc0e81), TOBN(0x117c4661, 0xf6d89daa),
+       TOBN(0x362d01e1, 0xcb64fa09), TOBN(0x6a309b4e, 0x3e9c4ddd)}},
+     {{TOBN(0xfa979fb7, 0xabea49b1), TOBN(0xb4b1d27d, 0x10e2c6c5),
+       TOBN(0xbd61c2c4, 0x23afde7a), TOBN(0xeb6614f8, 0x9786d358)},
+      {TOBN(0x4a5d816b, 0x7f6f7459), TOBN(0xe431a44f, 0x09360e7b),
+       TOBN(0x8c27a032, 0xc309914c), TOBN(0xcea5d68a, 0xcaede3d8)}},
+     {{TOBN(0x3668f665, 0x3a0a3f95), TOBN(0x89369416, 0x7ceba27b),
+       TOBN(0x89981fad, 0xe4728fe9), TOBN(0x7102c8a0, 0x8a093562)},
+      {TOBN(0xbb80310e, 0x235d21c8), TOBN(0x505e55d1, 0xbefb7f7b),
+       TOBN(0xa0a90811, 0x12958a67), TOBN(0xd67e106a, 0x4d851fef)}},
+     {{TOBN(0xb84011a9, 0x431dd80e), TOBN(0xeb7c7cca, 0x73306cd9),
+       TOBN(0x20fadd29, 0xd1b3b730), TOBN(0x83858b5b, 0xfe37b3d3)},
+      {TOBN(0xbf4cd193, 0xb6251d5c), TOBN(0x1cca1fd3, 0x1352d952),
+       TOBN(0xc66157a4, 0x90fbc051), TOBN(0x7990a638, 0x89b98636)}}},
+    {{{TOBN(0xe5aa692a, 0x87dec0e1), TOBN(0x010ded8d, 0xf7b39d00),
+       TOBN(0x7b1b80c8, 0x54cfa0b5), TOBN(0x66beb876, 0xa0f8ea28)},
+      {TOBN(0x50d7f531, 0x3476cd0e), TOBN(0xa63d0e65, 0xb08d3949),
+       TOBN(0x1a09eea9, 0x53479fc6), TOBN(0x82ae9891, 0xf499e742)}},
+     {{TOBN(0xab58b910, 0x5ca7d866), TOBN(0x582967e2, 0x3adb3b34),
+       TOBN(0x89ae4447, 0xcceac0bc), TOBN(0x919c667c, 0x7bf56af5)},
+      {TOBN(0x9aec17b1, 0x60f5dcd7), TOBN(0xec697b9f, 0xddcaadbc),
+       TOBN(0x0b98f341, 0x463467f5), TOBN(0xb187f1f7, 0xa967132f)}},
+     {{TOBN(0x90fe7a1d, 0x214aeb18), TOBN(0x1506af3c, 0x741432f7),
+       TOBN(0xbb5565f9, 0xe591a0c4), TOBN(0x10d41a77, 0xb44f1bc3)},
+      {TOBN(0xa09d65e4, 0xa84bde96), TOBN(0x42f060d8, 0xf20a6a1c),
+       TOBN(0x652a3bfd, 0xf27f9ce7), TOBN(0xb6bdb65c, 0x3b3d739f)}},
+     {{TOBN(0xeb5ddcb6, 0xec7fae9f), TOBN(0x995f2714, 0xefb66e5a),
+       TOBN(0xdee95d8e, 0x69445d52), TOBN(0x1b6c2d46, 0x09e27620)},
+      {TOBN(0x32621c31, 0x8129d716), TOBN(0xb03909f1, 0x0958c1aa),
+       TOBN(0x8c468ef9, 0x1af4af63), TOBN(0x162c429f, 0xfba5cdf6)}},
+     {{TOBN(0x2f682343, 0x753b9371), TOBN(0x29cab45a, 0x5f1f9cd7),
+       TOBN(0x571623ab, 0xb245db96), TOBN(0xc507db09, 0x3fd79999)},
+      {TOBN(0x4e2ef652, 0xaf036c32), TOBN(0x86f0cc78, 0x05018e5c),
+       TOBN(0xc10a73d4, 0xab8be350), TOBN(0x6519b397, 0x7e826327)}},
+     {{TOBN(0xe8cb5eef, 0x9c053df7), TOBN(0x8de25b37, 0xb300ea6f),
+       TOBN(0xdb03fa92, 0xc849cffb), TOBN(0x242e43a7, 0xe84169bb)},
+      {TOBN(0xe4fa51f4, 0xdd6f958e), TOBN(0x6925a77f, 0xf4445a8d),
+       TOBN(0xe6e72a50, 0xe90d8949), TOBN(0xc66648e3, 0x2b1f6390)}},
+     {{TOBN(0xb2ab1957, 0x173e460c), TOBN(0x1bbbce75, 0x30704590),
+       TOBN(0xc0a90dbd, 0xdb1c7162), TOBN(0x505e399e, 0x15cdd65d)},
+      {TOBN(0x68434dcb, 0x57797ab7), TOBN(0x60ad35ba, 0x6a2ca8e8),
+       TOBN(0x4bfdb1e0, 0xde3336c1), TOBN(0xbbef99eb, 0xd8b39015)}},
+     {{TOBN(0x6c3b96f3, 0x1711ebec), TOBN(0x2da40f1f, 0xce98fdc4),
+       TOBN(0xb99774d3, 0x57b4411f), TOBN(0x87c8bdf4, 0x15b65bb6)},
+      {TOBN(0xda3a89e3, 0xc2eef12d), TOBN(0xde95bb9b, 0x3c7471f3),
+       TOBN(0x600f225b, 0xd812c594), TOBN(0x54907c5d, 0x2b75a56b)}},
+     {{TOBN(0xa93cc5f0, 0x8db60e35), TOBN(0x743e3cd6, 0xfa833319),
+       TOBN(0x7dad5c41, 0xf81683c9), TOBN(0x70c1e7d9, 0x9c34107e)},
+      {TOBN(0x0edc4a39, 0xa6be0907), TOBN(0x36d47035, 0x86d0b7d3),
+       TOBN(0x8c76da03, 0x272bfa60), TOBN(0x0b4a07ea, 0x0f08a414)}},
+     {{TOBN(0x699e4d29, 0x45c1dd53), TOBN(0xcadc5898, 0x231debb5),
+       TOBN(0xdf49fcc7, 0xa77f00e0), TOBN(0x93057bbf, 0xa73e5a0e)},
+      {TOBN(0x2f8b7ecd, 0x027a4cd1), TOBN(0x114734b3, 0xc614011a),
+       TOBN(0xe7a01db7, 0x67677c68), TOBN(0x89d9be5e, 0x7e273f4f)}},
+     {{TOBN(0xd225cb2e, 0x089808ef), TOBN(0xf1f7a27d, 0xd59e4107),
+       TOBN(0x53afc761, 0x8211b9c9), TOBN(0x0361bc67, 0xe6819159)},
+      {TOBN(0x2a865d0b, 0x7f071426), TOBN(0x6a3c1810, 0xe7072567),
+       TOBN(0x3e3bca1e, 0x0d6bcabd), TOBN(0xa1b02bc1, 0x408591bc)}},
+     {{TOBN(0xe0deee59, 0x31fba239), TOBN(0xf47424d3, 0x98bd91d1),
+       TOBN(0x0f8886f4, 0x071a3c1d), TOBN(0x3f7d41e8, 0xa819233b)},
+      {TOBN(0x708623c2, 0xcf6eb998), TOBN(0x86bb49af, 0x609a287f),
+       TOBN(0x942bb249, 0x63c90762), TOBN(0x0ef6eea5, 0x55a9654b)}},
+     {{TOBN(0x5f6d2d72, 0x36f5defe), TOBN(0xfa9922dc, 0x56f99176),
+       TOBN(0x6c8c5ece, 0xf78ce0c7), TOBN(0x7b44589d, 0xbe09b55e)},
+      {TOBN(0xe11b3bca, 0x9ea83770), TOBN(0xd7fa2c7f, 0x2ab71547),
+       TOBN(0x2a3dd6fa, 0x2a1ddcc0), TOBN(0x09acb430, 0x5a7b7707)}},
+     {{TOBN(0x4add4a2e, 0x649d4e57), TOBN(0xcd53a2b0, 0x1917526e),
+       TOBN(0xc5262330, 0x20b44ac4), TOBN(0x4028746a, 0xbaa2c31d)},
+      {TOBN(0x51318390, 0x64291d4c), TOBN(0xbf48f151, 0xee5ad909),
+       TOBN(0xcce57f59, 0x7b185681), TOBN(0x7c3ac1b0, 0x4854d442)}},
+     {{TOBN(0x65587dc3, 0xc093c171), TOBN(0xae7acb24, 0x24f42b65),
+       TOBN(0x5a338adb, 0x955996cb), TOBN(0xc8e65675, 0x6051f91b)},
+      {TOBN(0x66711fba, 0x28b8d0b1), TOBN(0x15d74137, 0xb6c10a90),
+       TOBN(0x70cdd7eb, 0x3a232a80), TOBN(0xc9e2f07f, 0x6191ed24)}},
+     {{TOBN(0xa80d1db6, 0xf79588c0), TOBN(0xfa52fc69, 0xb55768cc),
+       TOBN(0x0b4df1ae, 0x7f54438a), TOBN(0x0cadd1a7, 0xf9b46a4f)},
+      {TOBN(0xb40ea6b3, 0x1803dd6f), TOBN(0x488e4fa5, 0x55eaae35),
+       TOBN(0x9f047d55, 0x382e4e16), TOBN(0xc9b5b7e0, 0x2f6e0c98)}},
+     {{TOBN(0x6b1bd2d3, 0x95762649), TOBN(0xa9604ee7, 0xc7aea3f6),
+       TOBN(0x3646ff27, 0x6dc6f896), TOBN(0x9bf0e7f5, 0x2860bad1)},
+      {TOBN(0x2d92c821, 0x7cb44b92), TOBN(0xa2f5ce63, 0xaea9c182),
+       TOBN(0xd0a2afb1, 0x9154a5fd), TOBN(0x482e474c, 0x95801da6)}},
+     {{TOBN(0xc19972d0, 0xb611c24b), TOBN(0x1d468e65, 0x60a8f351),
+       TOBN(0xeb758069, 0x7bcf6421), TOBN(0xec9dd0ee, 0x88fbc491)},
+      {TOBN(0x5b59d2bf, 0x956c2e32), TOBN(0x73dc6864, 0xdcddf94e),
+       TOBN(0xfd5e2321, 0xbcee7665), TOBN(0xa7b4f8ef, 0x5e9a06c4)}},
+     {{TOBN(0xfba918dd, 0x7280f855), TOBN(0xbbaac260, 0x8baec688),
+       TOBN(0xa3b3f00f, 0x33400f42), TOBN(0x3d2dba29, 0x66f2e6e4)},
+      {TOBN(0xb6f71a94, 0x98509375), TOBN(0x8f33031f, 0xcea423cc),
+       TOBN(0x009b8dd0, 0x4807e6fb), TOBN(0x5163cfe5, 0x5cdb954c)}},
+     {{TOBN(0x03cc8f17, 0xcf41c6e8), TOBN(0xf1f03c2a, 0x037b925c),
+       TOBN(0xc39c19cc, 0x66d2427c), TOBN(0x823d24ba, 0x7b6c18e4)},
+      {TOBN(0x32ef9013, 0x901f0b4f), TOBN(0x684360f1, 0xf8941c2e),
+       TOBN(0x0ebaff52, 0x2c28092e), TOBN(0x7891e4e3, 0x256c932f)}},
+     {{TOBN(0x51264319, 0xac445e3d), TOBN(0x553432e7, 0x8ea74381),
+       TOBN(0xe6eeaa69, 0x67e9c50a), TOBN(0x27ced284, 0x62e628c7)},
+      {TOBN(0x3f96d375, 0x7a4afa57), TOBN(0xde0a14c3, 0xe484c150),
+       TOBN(0x364a24eb, 0x38bd9923), TOBN(0x1df18da0, 0xe5177422)}},
+     {{TOBN(0x174e8f82, 0xd8d38a9b), TOBN(0x2e97c600, 0xe7de1391),
+       TOBN(0xc5709850, 0xa1c175dd), TOBN(0x969041a0, 0x32ae5035)},
+      {TOBN(0xcbfd533b, 0x76a2086b), TOBN(0xd6bba71b, 0xd7c2e8fe),
+       TOBN(0xb2d58ee6, 0x099dfb67), TOBN(0x3a8b342d, 0x064a85d9)}},
+     {{TOBN(0x3bc07649, 0x522f9be3), TOBN(0x690c075b, 0xdf1f49a8),
+       TOBN(0x80e1aee8, 0x3854ec42), TOBN(0x2a7dbf44, 0x17689dc7)},
+      {TOBN(0xc004fc0e, 0x3faf4078), TOBN(0xb2f02e9e, 0xdf11862c),
+       TOBN(0xf10a5e0f, 0xa0a1b7b3), TOBN(0x30aca623, 0x8936ec80)}},
+     {{TOBN(0xf83cbf05, 0x02f40d9a), TOBN(0x4681c468, 0x2c318a4d),
+       TOBN(0x98575618, 0x0e9c2674), TOBN(0xbe79d046, 0x1847092e)},
+      {TOBN(0xaf1e480a, 0x78bd01e0), TOBN(0x6dd359e4, 0x72a51db9),
+       TOBN(0x62ce3821, 0xe3afbab6), TOBN(0xc5cee5b6, 0x17733199)}},
+     {{TOBN(0xe08b30d4, 0x6ffd9fbb), TOBN(0x6e5bc699, 0x36c610b7),
+       TOBN(0xf343cff2, 0x9ce262cf), TOBN(0xca2e4e35, 0x68b914c1)},
+      {TOBN(0x011d64c0, 0x16de36c5), TOBN(0xe0b10fdd, 0x42e2b829),
+       TOBN(0x78942981, 0x6685aaf8), TOBN(0xe7511708, 0x230ede97)}},
+     {{TOBN(0x671ed8fc, 0x3b922bf8), TOBN(0xe4d8c0a0, 0x4c29b133),
+       TOBN(0x87eb1239, 0x3b6e99c4), TOBN(0xaff3974c, 0x8793beba)},
+      {TOBN(0x03749405, 0x2c18df9b), TOBN(0xc5c3a293, 0x91007139),
+       TOBN(0x6a77234f, 0xe37a0b95), TOBN(0x02c29a21, 0xb661c96b)}},
+     {{TOBN(0xc3aaf1d6, 0x141ecf61), TOBN(0x9195509e, 0x3bb22f53),
+       TOBN(0x29597404, 0x22d51357), TOBN(0x1b083822, 0x537bed60)},
+      {TOBN(0xcd7d6e35, 0xe07289f0), TOBN(0x1f94c48c, 0x6dd86eff),
+       TOBN(0xc8bb1f82, 0xeb0f9cfa), TOBN(0x9ee0b7e6, 0x1b2eb97d)}},
+     {{TOBN(0x5a52fe2e, 0x34d74e31), TOBN(0xa352c310, 0x3bf79ab6),
+       TOBN(0x97ff6c5a, 0xabfeeb8f), TOBN(0xbfbe8fef, 0xf5c97305)},
+      {TOBN(0xd6081ce6, 0xa7904608), TOBN(0x1f812f3a, 0xc4fca249),
+       TOBN(0x9b24bc9a, 0xb9e5e200), TOBN(0x91022c67, 0x38012ee8)}},
+     {{TOBN(0xe83d9c5d, 0x30a713a1), TOBN(0x4876e3f0, 0x84ef0f93),
+       TOBN(0xc9777029, 0xc1fbf928), TOBN(0xef7a6bb3, 0xbce7d2a4)},
+      {TOBN(0xb8067228, 0xdfa2a659), TOBN(0xd5cd3398, 0xd877a48f),
+       TOBN(0xbea4fd8f, 0x025d0f3f), TOBN(0xd67d2e35, 0x2eae7c2b)}},
+     {{TOBN(0x184de7d7, 0xcc5f4394), TOBN(0xb5551b5c, 0x4536e142),
+       TOBN(0x2e89b212, 0xd34aa60a), TOBN(0x14a96fea, 0xf50051d5)},
+      {TOBN(0x4e21ef74, 0x0d12bb0b), TOBN(0xc522f020, 0x60b9677e),
+       TOBN(0x8b12e467, 0x2df7731d), TOBN(0x39f80382, 0x7b326d31)}},
+     {{TOBN(0xdfb8630c, 0x39024a94), TOBN(0xaacb96a8, 0x97319452),
+       TOBN(0xd68a3961, 0xeda3867c), TOBN(0x0c58e2b0, 0x77c4ffca)},
+      {TOBN(0x3d545d63, 0x4da919fa), TOBN(0xef79b69a, 0xf15e2289),
+       TOBN(0x54bc3d3d, 0x808bab10), TOBN(0xc8ab3007, 0x45f82c37)}},
+     {{TOBN(0xc12738b6, 0x7c4a658a), TOBN(0xb3c47639, 0x40e72182),
+       TOBN(0x3b77be46, 0x8798e44f), TOBN(0xdc047df2, 0x17a7f85f)},
+      {TOBN(0x2439d4c5, 0x5e59d92d), TOBN(0xcedca475, 0xe8e64d8d),
+       TOBN(0xa724cd0d, 0x87ca9b16), TOBN(0x35e4fd59, 0xa5540dfe)}},
+     {{TOBN(0xf8c1ff18, 0xe4bcf6b1), TOBN(0x856d6285, 0x295018fa),
+       TOBN(0x433f665c, 0x3263c949), TOBN(0xa6a76dd6, 0xa1f21409)},
+      {TOBN(0x17d32334, 0xcc7b4f79), TOBN(0xa1d03122, 0x06720e4a),
+       TOBN(0xadb6661d, 0x81d9bed5), TOBN(0xf0d6fb02, 0x11db15d1)}},
+     {{TOBN(0x7fd11ad5, 0x1fb747d2), TOBN(0xab50f959, 0x3033762b),
+       TOBN(0x2a7e711b, 0xfbefaf5a), TOBN(0xc7393278, 0x3fef2bbf)},
+      {TOBN(0xe29fa244, 0x0df6f9be), TOBN(0x9092757b, 0x71efd215),
+       TOBN(0xee60e311, 0x4f3d6fd9), TOBN(0x338542d4, 0x0acfb78b)}},
+     {{TOBN(0x44a23f08, 0x38961a0f), TOBN(0x1426eade, 0x986987ca),
+       TOBN(0x36e6ee2e, 0x4a863cc6), TOBN(0x48059420, 0x628b8b79)},
+      {TOBN(0x30303ad8, 0x7396e1de), TOBN(0x5c8bdc48, 0x38c5aad1),
+       TOBN(0x3e40e11f, 0x5c8f5066), TOBN(0xabd6e768, 0x8d246bbd)}},
+     {{TOBN(0x68aa40bb, 0x23330a01), TOBN(0xd23f5ee4, 0xc34eafa0),
+       TOBN(0x3bbee315, 0x5de02c21), TOBN(0x18dd4397, 0xd1d8dd06)},
+      {TOBN(0x3ba1939a, 0x122d7b44), TOBN(0xe6d3b40a, 0xa33870d6),
+       TOBN(0x8e620f70, 0x1c4fe3f8), TOBN(0xf6bba1a5, 0xd3a50cbf)}},
+     {{TOBN(0x4a78bde5, 0xcfc0aee0), TOBN(0x847edc46, 0xc08c50bd),
+       TOBN(0xbaa2439c, 0xad63c9b2), TOBN(0xceb4a728, 0x10fc2acb)},
+      {TOBN(0xa419e40e, 0x26da033d), TOBN(0x6cc3889d, 0x03e02683),
+       TOBN(0x1cd28559, 0xfdccf725), TOBN(0x0fd7e0f1, 0x8d13d208)}},
+     {{TOBN(0x01b9733b, 0x1f0df9d4), TOBN(0x8cc2c5f3, 0xa2b5e4f3),
+       TOBN(0x43053bfa, 0x3a304fd4), TOBN(0x8e87665c, 0x0a9f1aa7)},
+      {TOBN(0x087f29ec, 0xd73dc965), TOBN(0x15ace455, 0x3e9023db),
+       TOBN(0x2370e309, 0x2bce28b4), TOBN(0xf9723442, 0xb6b1e84a)}},
+     {{TOBN(0xbeee662e, 0xb72d9f26), TOBN(0xb19396de, 0xf0e47109),
+       TOBN(0x85b1fa73, 0xe13289d0), TOBN(0x436cf77e, 0x54e58e32)},
+      {TOBN(0x0ec833b3, 0xe990ef77), TOBN(0x7373e3ed, 0x1b11fc25),
+       TOBN(0xbe0eda87, 0x0fc332ce), TOBN(0xced04970, 0x8d7ea856)}},
+     {{TOBN(0xf85ff785, 0x7e977ca0), TOBN(0xb66ee8da, 0xdfdd5d2b),
+       TOBN(0xf5e37950, 0x905af461), TOBN(0x587b9090, 0x966d487c)},
+      {TOBN(0x6a198a1b, 0x32ba0127), TOBN(0xa7720e07, 0x141615ac),
+       TOBN(0xa23f3499, 0x996ef2f2), TOBN(0xef5f64b4, 0x470bcb3d)}},
+     {{TOBN(0xa526a962, 0x92b8c559), TOBN(0x0c14aac0, 0x69740a0f),
+       TOBN(0x0d41a9e3, 0xa6bdc0a5), TOBN(0x97d52106, 0x9c48aef4)},
+      {TOBN(0xcf16bd30, 0x3e7c253b), TOBN(0xcc834b1a, 0x47fdedc1),
+       TOBN(0x7362c6e5, 0x373aab2e), TOBN(0x264ed85e, 0xc5f590ff)}},
+     {{TOBN(0x7a46d9c0, 0x66d41870), TOBN(0xa50c20b1, 0x4787ba09),
+       TOBN(0x185e7e51, 0xe3d44635), TOBN(0xb3b3e080, 0x31e2d8dc)},
+      {TOBN(0xbed1e558, 0xa179e9d9), TOBN(0x2daa3f79, 0x74a76781),
+       TOBN(0x4372baf2, 0x3a40864f), TOBN(0x46900c54, 0x4fe75cb5)}},
+     {{TOBN(0xb95f171e, 0xf76765d0), TOBN(0x4ad726d2, 0x95c87502),
+       TOBN(0x2ec769da, 0x4d7c99bd), TOBN(0x5e2ddd19, 0xc36cdfa8)},
+      {TOBN(0xc22117fc, 0xa93e6dea), TOBN(0xe8a2583b, 0x93771123),
+       TOBN(0xbe2f6089, 0xfa08a3a2), TOBN(0x4809d5ed, 0x8f0e1112)}},
+     {{TOBN(0x3b414aa3, 0xda7a095e), TOBN(0x9049acf1, 0x26f5aadd),
+       TOBN(0x78d46a4d, 0x6be8b84a), TOBN(0xd66b1963, 0xb732b9b3)},
+      {TOBN(0x5c2ac2a0, 0xde6e9555), TOBN(0xcf52d098, 0xb5bd8770),
+       TOBN(0x15a15fa6, 0x0fd28921), TOBN(0x56ccb81e, 0x8b27536d)}},
+     {{TOBN(0x0f0d8ab8, 0x9f4ccbb8), TOBN(0xed5f44d2, 0xdb221729),
+       TOBN(0x43141988, 0x00bed10c), TOBN(0xc94348a4, 0x1d735b8b)},
+      {TOBN(0x79f3e9c4, 0x29ef8479), TOBN(0x4c13a4e3, 0x614c693f),
+       TOBN(0x32c9af56, 0x8e143a14), TOBN(0xbc517799, 0xe29ac5c4)}},
+     {{TOBN(0x05e17992, 0x2774856f), TOBN(0x6e52fb05, 0x6c1bf55f),
+       TOBN(0xaeda4225, 0xe4f19e16), TOBN(0x70f4728a, 0xaf5ccb26)},
+      {TOBN(0x5d2118d1, 0xb2947f22), TOBN(0xc827ea16, 0x281d6fb9),
+       TOBN(0x8412328d, 0x8cf0eabd), TOBN(0x45ee9fb2, 0x03ef9dcf)}},
+     {{TOBN(0x8e700421, 0xbb937d63), TOBN(0xdf8ff2d5, 0xcc4b37a6),
+       TOBN(0xa4c0d5b2, 0x5ced7b68), TOBN(0x6537c1ef, 0xc7308f59)},
+      {TOBN(0x25ce6a26, 0x3b37f8e8), TOBN(0x170e9a9b, 0xdeebc6ce),
+       TOBN(0xdd037952, 0x8728d72c), TOBN(0x445b0e55, 0x850154bc)}},
+     {{TOBN(0x4b7d0e06, 0x83a7337b), TOBN(0x1e3416d4, 0xffecf249),
+       TOBN(0x24840eff, 0x66a2b71f), TOBN(0xd0d9a50a, 0xb37cc26d)},
+      {TOBN(0xe2198150, 0x6fe28ef7), TOBN(0x3cc5ef16, 0x23324c7f),
+       TOBN(0x220f3455, 0x769b5263), TOBN(0xe2ade2f1, 0xa10bf475)}},
+     {{TOBN(0x28cd20fa, 0x458d3671), TOBN(0x1549722c, 0x2dc4847b),
+       TOBN(0x6dd01e55, 0x591941e3), TOBN(0x0e6fbcea, 0x27128ccb)},
+      {TOBN(0xae1a1e6b, 0x3bef0262), TOBN(0xfa8c472c, 0x8f54e103),
+       TOBN(0x7539c0a8, 0x72c052ec), TOBN(0xd7b27369, 0x5a3490e9)}},
+     {{TOBN(0x143fe1f1, 0x71684349), TOBN(0x36b4722e, 0x32e19b97),
+       TOBN(0xdc059227, 0x90980aff), TOBN(0x175c9c88, 0x9e13d674)},
+      {TOBN(0xa7de5b22, 0x6e6bfdb1), TOBN(0x5ea5b7b2, 0xbedb4b46),
+       TOBN(0xd5570191, 0xd34a6e44), TOBN(0xfcf60d2e, 0xa24ff7e6)}},
+     {{TOBN(0x614a392d, 0x677819e1), TOBN(0x7be74c7e, 0xaa5a29e8),
+       TOBN(0xab50fece, 0x63c85f3f), TOBN(0xaca2e2a9, 0x46cab337)},
+      {TOBN(0x7f700388, 0x122a6fe3), TOBN(0xdb69f703, 0x882a04a8),
+       TOBN(0x9a77935d, 0xcf7aed57), TOBN(0xdf16207c, 0x8d91c86f)}},
+     {{TOBN(0x2fca49ab, 0x63ed9998), TOBN(0xa3125c44, 0xa77ddf96),
+       TOBN(0x05dd8a86, 0x24344072), TOBN(0xa023dda2, 0xfec3fb56)},
+      {TOBN(0x421b41fc, 0x0c743032), TOBN(0x4f2120c1, 0x5e438639),
+       TOBN(0xfb7cae51, 0xc83c1b07), TOBN(0xb2370caa, 0xcac2171a)}},
+     {{TOBN(0x2eb2d962, 0x6cc820fb), TOBN(0x59feee5c, 0xb85a44bf),
+       TOBN(0x94620fca, 0x5b6598f0), TOBN(0x6b922cae, 0x7e314051)},
+      {TOBN(0xff8745ad, 0x106bed4e), TOBN(0x546e71f5, 0xdfa1e9ab),
+       TOBN(0x935c1e48, 0x1ec29487), TOBN(0x9509216c, 0x4d936530)}},
+     {{TOBN(0xc7ca3067, 0x85c9a2db), TOBN(0xd6ae5152, 0x6be8606f),
+       TOBN(0x09dbcae6, 0xe14c651d), TOBN(0xc9536e23, 0x9bc32f96)},
+      {TOBN(0xa90535a9, 0x34521b03), TOBN(0xf39c526c, 0x878756ff),
+       TOBN(0x383172ec, 0x8aedf03c), TOBN(0x20a8075e, 0xefe0c034)}},
+     {{TOBN(0xf22f9c62, 0x64026422), TOBN(0x8dd10780, 0x24b9d076),
+       TOBN(0x944c742a, 0x3bef2950), TOBN(0x55b9502e, 0x88a2b00b)},
+      {TOBN(0xa59e14b4, 0x86a09817), TOBN(0xa39dd3ac, 0x47bb4071),
+       TOBN(0x55137f66, 0x3be0592f), TOBN(0x07fcafd4, 0xc9e63f5b)}},
+     {{TOBN(0x963652ee, 0x346eb226), TOBN(0x7dfab085, 0xec2facb7),
+       TOBN(0x273bf2b8, 0x691add26), TOBN(0x30d74540, 0xf2b46c44)},
+      {TOBN(0x05e8e73e, 0xf2c2d065), TOBN(0xff9b8a00, 0xd42eeac9),
+       TOBN(0x2fcbd205, 0x97209d22), TOBN(0xeb740ffa, 0xde14ea2c)}},
+     {{TOBN(0xc71ff913, 0xa8aef518), TOBN(0x7bfc74bb, 0xfff4cfa2),
+       TOBN(0x1716680c, 0xb6b36048), TOBN(0x121b2cce, 0x9ef79af1)},
+      {TOBN(0xbff3c836, 0xa01eb3d3), TOBN(0x50eb1c6a, 0x5f79077b),
+       TOBN(0xa48c32d6, 0xa004bbcf), TOBN(0x47a59316, 0x7d64f61d)}},
+     {{TOBN(0x6068147f, 0x93102016), TOBN(0x12c5f654, 0x94d12576),
+       TOBN(0xefb071a7, 0xc9bc6b91), TOBN(0x7c2da0c5, 0x6e23ea95)},
+      {TOBN(0xf4fd45b6, 0xd4a1dd5d), TOBN(0x3e7ad9b6, 0x9122b13c),
+       TOBN(0x342ca118, 0xe6f57a48), TOBN(0x1c2e94a7, 0x06f8288f)}},
+     {{TOBN(0x99e68f07, 0x5a97d231), TOBN(0x7c80de97, 0x4d838758),
+       TOBN(0xbce0f5d0, 0x05872727), TOBN(0xbe5d95c2, 0x19c4d016)},
+      {TOBN(0x921d5cb1, 0x9c2492ee), TOBN(0x42192dc1, 0x404d6fb3),
+       TOBN(0x4c84dcd1, 0x32f988d3), TOBN(0xde26d61f, 0xa17b8e85)}},
+     {{TOBN(0xc466dcb6, 0x137c7408), TOBN(0x9a38d7b6, 0x36a266da),
+       TOBN(0x7ef5cb06, 0x83bebf1b), TOBN(0xe5cdcbbf, 0x0fd014e3)},
+      {TOBN(0x30aa376d, 0xf65965a0), TOBN(0x60fe88c2, 0xebb3e95e),
+       TOBN(0x33fd0b61, 0x66ee6f20), TOBN(0x8827dcdb, 0x3f41f0a0)}},
+     {{TOBN(0xbf8a9d24, 0x0c56c690), TOBN(0x40265dad, 0xddb7641d),
+       TOBN(0x522b05bf, 0x3a6b662b), TOBN(0x466d1dfe, 0xb1478c9b)},
+      {TOBN(0xaa616962, 0x1484469b), TOBN(0x0db60549, 0x02df8f9f),
+       TOBN(0xc37bca02, 0x3cb8bf51), TOBN(0x5effe346, 0x21371ce8)}},
+     {{TOBN(0xe8f65264, 0xff112c32), TOBN(0x8a9c736d, 0x7b971fb2),
+       TOBN(0xa4f19470, 0x7b75080d), TOBN(0xfc3f2c5a, 0x8839c59b)},
+      {TOBN(0x1d6c777e, 0x5aeb49c2), TOBN(0xf3db034d, 0xda1addfe),
+       TOBN(0xd76fee5a, 0x5535affc), TOBN(0x0853ac70, 0xb92251fd)}},
+     {{TOBN(0x37e3d594, 0x8b2a29d5), TOBN(0x28f1f457, 0x4de00ddb),
+       TOBN(0x8083c1b5, 0xf42c328b), TOBN(0xd8ef1d8f, 0xe493c73b)},
+      {TOBN(0x96fb6260, 0x41dc61bd), TOBN(0xf74e8a9d, 0x27ee2f8a),
+       TOBN(0x7c605a80, 0x2c946a5d), TOBN(0xeed48d65, 0x3839ccfd)}},
+     {{TOBN(0x9894344f, 0x3a29467a), TOBN(0xde81e949, 0xc51eba6d),
+       TOBN(0xdaea066b, 0xa5e5c2f2), TOBN(0x3fc8a614, 0x08c8c7b3)},
+      {TOBN(0x7adff88f, 0x06d0de9f), TOBN(0xbbc11cf5, 0x3b75ce0a),
+       TOBN(0x9fbb7acc, 0xfbbc87d5), TOBN(0xa1458e26, 0x7badfde2)}}},
+    {{{TOBN(0x1cb43668, 0xe039c256), TOBN(0x5f26fb8b, 0x7c17fd5d),
+       TOBN(0xeee426af, 0x79aa062b), TOBN(0x072002d0, 0xd78fbf04)},
+      {TOBN(0x4c9ca237, 0xe84fb7e3), TOBN(0xb401d8a1, 0x0c82133d),
+       TOBN(0xaaa52592, 0x6d7e4181), TOBN(0xe9430833, 0x73dbb152)}},
+     {{TOBN(0xf92dda31, 0xbe24319a), TOBN(0x03f7d28b, 0xe095a8e7),
+       TOBN(0xa52fe840, 0x98782185), TOBN(0x276ddafe, 0x29c24dbc)},
+      {TOBN(0x80cd5496, 0x1d7a64eb), TOBN(0xe4360889, 0x7f1dbe42),
+       TOBN(0x2f81a877, 0x8438d2d5), TOBN(0x7e4d52a8, 0x85169036)}},
+     {{TOBN(0x19e3d5b1, 0x1d59715d), TOBN(0xc7eaa762, 0xd788983e),
+       TOBN(0xe5a730b0, 0xabf1f248), TOBN(0xfbab8084, 0xfae3fd83)},
+      {TOBN(0x65e50d21, 0x53765b2f), TOBN(0xbdd4e083, 0xfa127f3d),
+       TOBN(0x9cf3c074, 0x397b1b10), TOBN(0x59f8090c, 0xb1b59fd3)}},
+     {{TOBN(0x7b15fd9d, 0x615faa8f), TOBN(0x8fa1eb40, 0x968554ed),
+       TOBN(0x7bb4447e, 0x7aa44882), TOBN(0x2bb2d0d1, 0x029fff32)},
+      {TOBN(0x075e2a64, 0x6caa6d2f), TOBN(0x8eb879de, 0x22e7351b),
+       TOBN(0xbcd5624e, 0x9a506c62), TOBN(0x218eaef0, 0xa87e24dc)}},
+     {{TOBN(0x37e56847, 0x44ddfa35), TOBN(0x9ccfc5c5, 0xdab3f747),
+       TOBN(0x9ac1df3f, 0x1ee96cf4), TOBN(0x0c0571a1, 0x3b480b8f)},
+      {TOBN(0x2fbeb3d5, 0x4b3a7b3c), TOBN(0x35c03669, 0x5dcdbb99),
+       TOBN(0x52a0f5dc, 0xb2415b3a), TOBN(0xd57759b4, 0x4413ed9a)}},
+     {{TOBN(0x1fe647d8, 0x3d30a2c5), TOBN(0x0857f77e, 0xf78a81dc),
+       TOBN(0x11d5a334, 0x131a4a9b), TOBN(0xc0a94af9, 0x29d393f5)},
+      {TOBN(0xbc3a5c0b, 0xdaa6ec1a), TOBN(0xba9fe493, 0x88d2d7ed),
+       TOBN(0xbb4335b4, 0xbb614797), TOBN(0x991c4d68, 0x72f83533)}},
+     {{TOBN(0x53258c28, 0xd2f01cb3), TOBN(0x93d6eaa3, 0xd75db0b1),
+       TOBN(0x419a2b0d, 0xe87d0db4), TOBN(0xa1e48f03, 0xd8fe8493)},
+      {TOBN(0xf747faf6, 0xc508b23a), TOBN(0xf137571a, 0x35d53549),
+       TOBN(0x9f5e58e2, 0xfcf9b838), TOBN(0xc7186cee, 0xa7fd3cf5)}},
+     {{TOBN(0x77b868ce, 0xe978a1d3), TOBN(0xe3a68b33, 0x7ab92d04),
+       TOBN(0x51029794, 0x87a5b862), TOBN(0x5f0606c3, 0x3a61d41d)},
+      {TOBN(0x2814be27, 0x6f9326f1), TOBN(0x2f521c14, 0xc6fe3c2e),
+       TOBN(0x17464d7d, 0xacdf7351), TOBN(0x10f5f9d3, 0x777f7e44)}},
+     {{TOBN(0xce8e616b, 0x269fb37d), TOBN(0xaaf73804, 0x7de62de5),
+       TOBN(0xaba11175, 0x4fdd4153), TOBN(0x515759ba, 0x3770b49b)},
+      {TOBN(0x8b09ebf8, 0xaa423a61), TOBN(0x592245a1, 0xcd41fb92),
+       TOBN(0x1cba8ec1, 0x9b4c8936), TOBN(0xa87e91e3, 0xaf36710e)}},
+     {{TOBN(0x1fd84ce4, 0x3d34a2e3), TOBN(0xee3759ce, 0xb43b5d61),
+       TOBN(0x895bc78c, 0x619186c7), TOBN(0xf19c3809, 0xcbb9725a)},
+      {TOBN(0xc0be21aa, 0xde744b1f), TOBN(0xa7d222b0, 0x60f8056b),
+       TOBN(0x74be6157, 0xb23efe11), TOBN(0x6fab2b4f, 0x0cd68253)}},
+     {{TOBN(0xad33ea5f, 0x4bf1d725), TOBN(0x9c1d8ee2, 0x4f6c950f),
+       TOBN(0x544ee78a, 0xa377af06), TOBN(0x54f489bb, 0x94a113e1)},
+      {TOBN(0x8f11d634, 0x992fb7e8), TOBN(0x0169a7aa, 0xa2a44347),
+       TOBN(0x1d49d4af, 0x95020e00), TOBN(0x95945722, 0xe08e120b)}},
+     {{TOBN(0xb6e33878, 0xa4d32282), TOBN(0xe36e029d, 0x48020ae7),
+       TOBN(0xe05847fb, 0x37a9b750), TOBN(0xf876812c, 0xb29e3819)},
+      {TOBN(0x84ad138e, 0xd23a17f0), TOBN(0x6d7b4480, 0xf0b3950e),
+       TOBN(0xdfa8aef4, 0x2fd67ae0), TOBN(0x8d3eea24, 0x52333af6)}},
+     {{TOBN(0x0d052075, 0xb15d5acc), TOBN(0xc6d9c79f, 0xbd815bc4),
+       TOBN(0x8dcafd88, 0xdfa36cf2), TOBN(0x908ccbe2, 0x38aa9070)},
+      {TOBN(0x638722c4, 0xba35afce), TOBN(0x5a3da8b0, 0xfd6abf0b),
+       TOBN(0x2dce252c, 0xc9c335c1), TOBN(0x84e7f0de, 0x65aa799b)}},
+     {{TOBN(0x2101a522, 0xb99a72cb), TOBN(0x06de6e67, 0x87618016),
+       TOBN(0x5ff8c7cd, 0xe6f3653e), TOBN(0x0a821ab5, 0xc7a6754a)},
+      {TOBN(0x7e3fa52b, 0x7cb0b5a2), TOBN(0xa7fb121c, 0xc9048790),
+       TOBN(0x1a725020, 0x06ce053a), TOBN(0xb490a31f, 0x04e929b0)}},
+     {{TOBN(0xe17be47d, 0x62dd61ad), TOBN(0x781a961c, 0x6be01371),
+       TOBN(0x1063bfd3, 0xdae3cbba), TOBN(0x35647406, 0x7f73c9ba)},
+      {TOBN(0xf50e957b, 0x2736a129), TOBN(0xa6313702, 0xed13f256),
+       TOBN(0x9436ee65, 0x3a19fcc5), TOBN(0xcf2bdb29, 0xe7a4c8b6)}},
+     {{TOBN(0xb06b1244, 0xc5f95cd8), TOBN(0xda8c8af0, 0xf4ab95f4),
+       TOBN(0x1bae59c2, 0xb9e5836d), TOBN(0x07d51e7e, 0x3acffffc)},
+      {TOBN(0x01e15e6a, 0xc2ccbcda), TOBN(0x3bc1923f, 0x8528c3e0),
+       TOBN(0x43324577, 0xa49fead4), TOBN(0x61a1b884, 0x2aa7a711)}},
+     {{TOBN(0xf9a86e08, 0x700230ef), TOBN(0x0af585a1, 0xbd19adf8),
+       TOBN(0x7645f361, 0xf55ad8f2), TOBN(0x6e676223, 0x46c3614c)},
+      {TOBN(0x23cb257c, 0x4e774d3f), TOBN(0x82a38513, 0xac102d1b),
+       TOBN(0x9bcddd88, 0x7b126aa5), TOBN(0xe716998b, 0xeefd3ee4)}},
+     {{TOBN(0x4239d571, 0xfb167583), TOBN(0xdd011c78, 0xd16c8f8a),
+       TOBN(0x271c2895, 0x69a27519), TOBN(0x9ce0a3b7, 0xd2d64b6a)},
+      {TOBN(0x8c977289, 0xd5ec6738), TOBN(0xa3b49f9a, 0x8840ef6b),
+       TOBN(0x808c14c9, 0x9a453419), TOBN(0x5c00295b, 0x0cf0a2d5)}},
+     {{TOBN(0x524414fb, 0x1d4bcc76), TOBN(0xb07691d2, 0x459a88f1),
+       TOBN(0x77f43263, 0xf70d110f), TOBN(0x64ada5e0, 0xb7abf9f3)},
+      {TOBN(0xafd0f94e, 0x5b544cf5), TOBN(0xb4a13a15, 0xfd2713fe),
+       TOBN(0xb99b7d6e, 0x250c74f4), TOBN(0x097f2f73, 0x20324e45)}},
+     {{TOBN(0x994b37d8, 0xaffa8208), TOBN(0xc3c31b0b, 0xdc29aafc),
+       TOBN(0x3da74651, 0x7a3a607f), TOBN(0xd8e1b8c1, 0xfe6955d6)},
+      {TOBN(0x716e1815, 0xc8418682), TOBN(0x541d487f, 0x7dc91d97),
+       TOBN(0x48a04669, 0xc6996982), TOBN(0xf39cab15, 0x83a6502e)}},
+     {{TOBN(0x025801a0, 0xe68db055), TOBN(0xf3569758, 0xba3338d5),
+       TOBN(0xb0c8c0aa, 0xee2afa84), TOBN(0x4f6985d3, 0xfb6562d1)},
+      {TOBN(0x351f1f15, 0x132ed17a), TOBN(0x510ed0b4, 0xc04365fe),
+       TOBN(0xa3f98138, 0xe5b1f066), TOBN(0xbc9d95d6, 0x32df03dc)}},
+     {{TOBN(0xa83ccf6e, 0x19abd09e), TOBN(0x0b4097c1, 0x4ff17edb),
+       TOBN(0x58a5c478, 0xd64a06ce), TOBN(0x2ddcc3fd, 0x544a58fd)},
+      {TOBN(0xd449503d, 0x9e8153b8), TOBN(0x3324fd02, 0x7774179b),
+       TOBN(0xaf5d47c8, 0xdbd9120c), TOBN(0xeb860162, 0x34fa94db)}},
+     {{TOBN(0x5817bdd1, 0x972f07f4), TOBN(0xe5579e2e, 0xd27bbceb),
+       TOBN(0x86847a1f, 0x5f11e5a6), TOBN(0xb39ed255, 0x7c3cf048)},
+      {TOBN(0xe1076417, 0xa2f62e55), TOBN(0x6b9ab38f, 0x1bcf82a2),
+       TOBN(0x4bb7c319, 0x7aeb29f9), TOBN(0xf6d17da3, 0x17227a46)}},
+     {{TOBN(0xab53ddbd, 0x0f968c00), TOBN(0xa03da7ec, 0x000c880b),
+       TOBN(0x7b239624, 0x6a9ad24d), TOBN(0x612c0401, 0x01ec60d0)},
+      {TOBN(0x70d10493, 0x109f5df1), TOBN(0xfbda4030, 0x80af7550),
+       TOBN(0x30b93f95, 0xc6b9a9b3), TOBN(0x0c74ec71, 0x007d9418)}},
+     {{TOBN(0x94175564, 0x6edb951f), TOBN(0x5f4a9d78, 0x7f22c282),
+       TOBN(0xb7870895, 0xb38d1196), TOBN(0xbc593df3, 0xa228ce7c)},
+      {TOBN(0xc78c5bd4, 0x6af3641a), TOBN(0x7802200b, 0x3d9b3dcc),
+       TOBN(0x0dc73f32, 0x8be33304), TOBN(0x847ed87d, 0x61ffb79a)}},
+     {{TOBN(0xf85c974e, 0x6d671192), TOBN(0x1e14100a, 0xde16f60f),
+       TOBN(0x45cb0d5a, 0x95c38797), TOBN(0x18923bba, 0x9b022da4)},
+      {TOBN(0xef2be899, 0xbbe7e86e), TOBN(0x4a1510ee, 0x216067bf),
+       TOBN(0xd98c8154, 0x84d5ce3e), TOBN(0x1af777f0, 0xf92a2b90)}},
+     {{TOBN(0x9fbcb400, 0x4ef65724), TOBN(0x3e04a4c9, 0x3c0ca6fe),
+       TOBN(0xfb3e2cb5, 0x55002994), TOBN(0x1f3a93c5, 0x5363ecab)},
+      {TOBN(0x1fe00efe, 0x3923555b), TOBN(0x744bedd9, 0x1e1751ea),
+       TOBN(0x3fb2db59, 0x6ab69357), TOBN(0x8dbd7365, 0xf5e6618b)}},
+     {{TOBN(0x99d53099, 0xdf1ea40e), TOBN(0xb3f24a0b, 0x57d61e64),
+       TOBN(0xd088a198, 0x596eb812), TOBN(0x22c8361b, 0x5762940b)},
+      {TOBN(0x66f01f97, 0xf9c0d95c), TOBN(0x88461172, 0x8e43cdae),
+       TOBN(0x11599a7f, 0xb72b15c3), TOBN(0x135a7536, 0x420d95cc)}},
+     {{TOBN(0x2dcdf0f7, 0x5f7ae2f6), TOBN(0x15fc6e1d, 0xd7fa6da2),
+       TOBN(0x81ca829a, 0xd1d441b6), TOBN(0x84c10cf8, 0x04a106b6)},
+      {TOBN(0xa9b26c95, 0xa73fbbd0), TOBN(0x7f24e0cb, 0x4d8f6ee8),
+       TOBN(0x48b45937, 0x1e25a043), TOBN(0xf8a74fca, 0x036f3dfe)}},
+     {{TOBN(0x1ed46585, 0xc9f84296), TOBN(0x7fbaa8fb, 0x3bc278b0),
+       TOBN(0xa8e96cd4, 0x6c4fcbd0), TOBN(0x940a1202, 0x73b60a5f)},
+      {TOBN(0x34aae120, 0x55a4aec8), TOBN(0x550e9a74, 0xdbd742f0),
+       TOBN(0x794456d7, 0x228c68ab), TOBN(0x492f8868, 0xa4e25ec6)}},
+     {{TOBN(0x682915ad, 0xb2d8f398), TOBN(0xf13b51cc, 0x5b84c953),
+       TOBN(0xcda90ab8, 0x5bb917d6), TOBN(0x4b615560, 0x4ea3dee1)},
+      {TOBN(0x578b4e85, 0x0a52c1c8), TOBN(0xeab1a695, 0x20b75fc4),
+       TOBN(0x60c14f3c, 0xaa0bb3c6), TOBN(0x220f448a, 0xb8216094)}},
+     {{TOBN(0x4fe7ee31, 0xb0e63d34), TOBN(0xf4600572, 0xa9e54fab),
+       TOBN(0xc0493334, 0xd5e7b5a4), TOBN(0x8589fb92, 0x06d54831)},
+      {TOBN(0xaa70f5cc, 0x6583553a), TOBN(0x0879094a, 0xe25649e5),
+       TOBN(0xcc904507, 0x10044652), TOBN(0xebb0696d, 0x02541c4f)}},
+     {{TOBN(0x5a171fde, 0xb9718710), TOBN(0x38f1bed8, 0xf374a9f5),
+       TOBN(0xc8c582e1, 0xba39bdc1), TOBN(0xfc457b0a, 0x908cc0ce)},
+      {TOBN(0x9a187fd4, 0x883841e2), TOBN(0x8ec25b39, 0x38725381),
+       TOBN(0x2553ed05, 0x96f84395), TOBN(0x095c7661, 0x6f6c6897)}},
+     {{TOBN(0x917ac85c, 0x4bdc5610), TOBN(0xb2885fe4, 0x179eb301),
+       TOBN(0x5fc65547, 0x8b78bdcc), TOBN(0x4a9fc893, 0xe59e4699)},
+      {TOBN(0xbb7ff0cd, 0x3ce299af), TOBN(0x195be9b3, 0xadf38b20),
+       TOBN(0x6a929c87, 0xd38ddb8f), TOBN(0x55fcc99c, 0xb21a51b9)}},
+     {{TOBN(0x2b695b4c, 0x721a4593), TOBN(0xed1e9a15, 0x768eaac2),
+       TOBN(0xfb63d71c, 0x7489f914), TOBN(0xf98ba31c, 0x78118910)},
+      {TOBN(0x80291373, 0x9b128eb4), TOBN(0x7801214e, 0xd448af4a),
+       TOBN(0xdbd2e22b, 0x55418dd3), TOBN(0xeffb3c0d, 0xd3998242)}},
+     {{TOBN(0xdfa6077c, 0xc7bf3827), TOBN(0xf2165bcb, 0x47f8238f),
+       TOBN(0xfe37cf68, 0x8564d554), TOBN(0xe5f825c4, 0x0a81fb98)},
+      {TOBN(0x43cc4f67, 0xffed4d6f), TOBN(0xbc609578, 0xb50a34b0),
+       TOBN(0x8aa8fcf9, 0x5041faf1), TOBN(0x5659f053, 0x651773b6)}},
+     {{TOBN(0xe87582c3, 0x6044d63b), TOBN(0xa6089409, 0x0cdb0ca0),
+       TOBN(0x8c993e0f, 0xbfb2bcf6), TOBN(0xfc64a719, 0x45985cfc)},
+      {TOBN(0x15c4da80, 0x83dbedba), TOBN(0x804ae112, 0x2be67df7),
+       TOBN(0xda4c9658, 0xa23defde), TOBN(0x12002ddd, 0x5156e0d3)}},
+     {{TOBN(0xe68eae89, 0x5dd21b96), TOBN(0x8b99f28b, 0xcf44624d),
+       TOBN(0x0ae00808, 0x1ec8897a), TOBN(0xdd0a9303, 0x6712f76e)},
+      {TOBN(0x96237522, 0x4e233de4), TOBN(0x192445b1, 0x2b36a8a5),
+       TOBN(0xabf9ff74, 0x023993d9), TOBN(0x21f37bf4, 0x2aad4a8f)}},
+     {{TOBN(0x340a4349, 0xf8bd2bbd), TOBN(0x1d902cd9, 0x4868195d),
+       TOBN(0x3d27bbf1, 0xe5fdb6f1), TOBN(0x7a5ab088, 0x124f9f1c)},
+      {TOBN(0xc466ab06, 0xf7a09e03), TOBN(0x2f8a1977, 0x31f2c123),
+       TOBN(0xda355dc7, 0x041b6657), TOBN(0xcb840d12, 0x8ece2a7c)}},
+     {{TOBN(0xb600ad9f, 0x7db32675), TOBN(0x78fea133, 0x07a06f1b),
+       TOBN(0x5d032269, 0xb31f6094), TOBN(0x07753ef5, 0x83ec37aa)},
+      {TOBN(0x03485aed, 0x9c0bea78), TOBN(0x41bb3989, 0xbc3f4524),
+       TOBN(0x09403761, 0x697f726d), TOBN(0x6109beb3, 0xdf394820)}},
+     {{TOBN(0x804111ea, 0x3b6d1145), TOBN(0xb6271ea9, 0xa8582654),
+       TOBN(0x619615e6, 0x24e66562), TOBN(0xa2554945, 0xd7b6ad9c)},
+      {TOBN(0xd9c4985e, 0x99bfe35f), TOBN(0x9770ccc0, 0x7b51cdf6),
+       TOBN(0x7c327013, 0x92881832), TOBN(0x8777d45f, 0x286b26d1)}},
+     {{TOBN(0x9bbeda22, 0xd847999d), TOBN(0x03aa33b6, 0xc3525d32),
+       TOBN(0x4b7b96d4, 0x28a959a1), TOBN(0xbb3786e5, 0x31e5d234)},
+      {TOBN(0xaeb5d3ce, 0x6961f247), TOBN(0x20aa85af, 0x02f93d3f),
+       TOBN(0x9cd1ad3d, 0xd7a7ae4f), TOBN(0xbf6688f0, 0x781adaa8)}},
+     {{TOBN(0xb1b40e86, 0x7469cead), TOBN(0x1904c524, 0x309fca48),
+       TOBN(0x9b7312af, 0x4b54bbc7), TOBN(0xbe24bf8f, 0x593affa2)},
+      {TOBN(0xbe5e0790, 0xbd98764b), TOBN(0xa0f45f17, 0xa26e299e),
+       TOBN(0x4af0d2c2, 0x6b8fe4c7), TOBN(0xef170db1, 0x8ae8a3e6)}},
+     {{TOBN(0x0e8d61a0, 0x29e0ccc1), TOBN(0xcd53e87e, 0x60ad36ca),
+       TOBN(0x328c6623, 0xc8173822), TOBN(0x7ee1767d, 0xa496be55)},
+      {TOBN(0x89f13259, 0x648945af), TOBN(0x9e45a5fd, 0x25c8009c),
+       TOBN(0xaf2febd9, 0x1f61ab8c), TOBN(0x43f6bc86, 0x8a275385)}},
+     {{TOBN(0x87792348, 0xf2142e79), TOBN(0x17d89259, 0xc6e6238a),
+       TOBN(0x7536d2f6, 0x4a839d9b), TOBN(0x1f428fce, 0x76a1fbdc)},
+      {TOBN(0x1c109601, 0x0db06dfe), TOBN(0xbfc16bc1, 0x50a3a3cc),
+       TOBN(0xf9cbd9ec, 0x9b30f41b), TOBN(0x5b5da0d6, 0x00138cce)}},
+     {{TOBN(0xec1d0a48, 0x56ef96a7), TOBN(0xb47eb848, 0x982bf842),
+       TOBN(0x66deae32, 0xec3f700d), TOBN(0x4e43c42c, 0xaa1181e0)},
+      {TOBN(0xa1d72a31, 0xd1a4aa2a), TOBN(0x440d4668, 0xc004f3ce),
+       TOBN(0x0d6a2d3b, 0x45fe8a7a), TOBN(0x820e52e2, 0xfb128365)}},
+     {{TOBN(0x29ac5fcf, 0x25e51b09), TOBN(0x180cd2bf, 0x2023d159),
+       TOBN(0xa9892171, 0xa1ebf90e), TOBN(0xf97c4c87, 0x7c132181)},
+      {TOBN(0x9f1dc724, 0xc03dbb7e), TOBN(0xae043765, 0x018cbbe4),
+       TOBN(0xfb0b2a36, 0x0767d153), TOBN(0xa8e2f4d6, 0x249cbaeb)}},
+     {{TOBN(0x172a5247, 0xd95ea168), TOBN(0x1758fada, 0x2970764a),
+       TOBN(0xac803a51, 0x1d978169), TOBN(0x299cfe2e, 0xde77e01b)},
+      {TOBN(0x652a1e17, 0xb0a98927), TOBN(0x2e26e1d1, 0x20014495),
+       TOBN(0x7ae0af9f, 0x7175b56a), TOBN(0xc2e22a80, 0xd64b9f95)}},
+     {{TOBN(0x4d0ff9fb, 0xd90a060a), TOBN(0x496a27db, 0xbaf38085),
+       TOBN(0x32305401, 0xda776bcf), TOBN(0xb8cdcef6, 0x725f209e)},
+      {TOBN(0x61ba0f37, 0x436a0bba), TOBN(0x263fa108, 0x76860049),
+       TOBN(0x92beb98e, 0xda3542cf), TOBN(0xa2d4d14a, 0xd5849538)}},
+     {{TOBN(0x989b9d68, 0x12e9a1bc), TOBN(0x61d9075c, 0x5f6e3268),
+       TOBN(0x352c6aa9, 0x99ace638), TOBN(0xde4e4a55, 0x920f43ff)},
+      {TOBN(0xe5e4144a, 0xd673c017), TOBN(0x667417ae, 0x6f6e05ea),
+       TOBN(0x613416ae, 0xdcd1bd56), TOBN(0x5eb36201, 0x86693711)}},
+     {{TOBN(0x2d7bc504, 0x3a1aa914), TOBN(0x175a1299, 0x76dc5975),
+       TOBN(0xe900e0f2, 0x3fc8125c), TOBN(0x569ef68c, 0x11198875)},
+      {TOBN(0x9012db63, 0x63a113b4), TOBN(0xe3bd3f56, 0x98835766),
+       TOBN(0xa5c94a52, 0x76412dea), TOBN(0xad9e2a09, 0xaa735e5c)}},
+     {{TOBN(0x405a984c, 0x508b65e9), TOBN(0xbde4a1d1, 0x6df1a0d1),
+       TOBN(0x1a9433a1, 0xdfba80da), TOBN(0xe9192ff9, 0x9440ad2e)},
+      {TOBN(0x9f649696, 0x5099fe92), TOBN(0x25ddb65c, 0x0b27a54a),
+       TOBN(0x178279dd, 0xc590da61), TOBN(0x5479a999, 0xfbde681a)}},
+     {{TOBN(0xd0e84e05, 0x013fe162), TOBN(0xbe11dc92, 0x632d471b),
+       TOBN(0xdf0b0c45, 0xfc0e089f), TOBN(0x04fb15b0, 0x4c144025)},
+      {TOBN(0xa61d5fc2, 0x13c99927), TOBN(0xa033e9e0, 0x3de2eb35),
+       TOBN(0xf8185d5c, 0xb8dacbb4), TOBN(0x9a88e265, 0x8644549d)}},
+     {{TOBN(0xf717af62, 0x54671ff6), TOBN(0x4bd4241b, 0x5fa58603),
+       TOBN(0x06fba40b, 0xe67773c0), TOBN(0xc1d933d2, 0x6a2847e9)},
+      {TOBN(0xf4f5acf3, 0x689e2c70), TOBN(0x92aab0e7, 0x46bafd31),
+       TOBN(0x798d76aa, 0x3473f6e5), TOBN(0xcc6641db, 0x93141934)}},
+     {{TOBN(0xcae27757, 0xd31e535e), TOBN(0x04cc43b6, 0x87c2ee11),
+       TOBN(0x8d1f9675, 0x2e029ffa), TOBN(0xc2150672, 0xe4cc7a2c)},
+      {TOBN(0x3b03c1e0, 0x8d68b013), TOBN(0xa9d6816f, 0xedf298f3),
+       TOBN(0x1bfbb529, 0xa2804464), TOBN(0x95a52fae, 0x5db22125)}},
+     {{TOBN(0x55b32160, 0x0e1cb64e), TOBN(0x004828f6, 0x7e7fc9fe),
+       TOBN(0x13394b82, 0x1bb0fb93), TOBN(0xb6293a2d, 0x35f1a920)},
+      {TOBN(0xde35ef21, 0xd145d2d9), TOBN(0xbe6225b3, 0xbb8fa603),
+       TOBN(0x00fc8f6b, 0x32cf252d), TOBN(0xa28e52e6, 0x117cf8c2)}},
+     {{TOBN(0x9d1dc89b, 0x4c371e6d), TOBN(0xcebe0675, 0x36ef0f28),
+       TOBN(0x5de05d09, 0xa4292f81), TOBN(0xa8303593, 0x353e3083)},
+      {TOBN(0xa1715b0a, 0x7e37a9bb), TOBN(0x8c56f61e, 0x2b8faec3),
+       TOBN(0x52507431, 0x33c9b102), TOBN(0x0130cefc, 0xa44431f0)}},
+     {{TOBN(0x56039fa0, 0xbd865cfb), TOBN(0x4b03e578, 0xbc5f1dd7),
+       TOBN(0x40edf2e4, 0xbabe7224), TOBN(0xc752496d, 0x3a1988f6)},
+      {TOBN(0xd1572d3b, 0x564beb6b), TOBN(0x0db1d110, 0x39a1c608),
+       TOBN(0x568d1934, 0x16f60126), TOBN(0x05ae9668, 0xf354af33)}},
+     {{TOBN(0x19de6d37, 0xc92544f2), TOBN(0xcc084353, 0xa35837d5),
+       TOBN(0xcbb6869c, 0x1a514ece), TOBN(0xb633e728, 0x2e1d1066)},
+      {TOBN(0xf15dd69f, 0x936c581c), TOBN(0x96e7b8ce, 0x7439c4f9),
+       TOBN(0x5e676f48, 0x2e448a5b), TOBN(0xb2ca7d5b, 0xfd916bbb)}},
+     {{TOBN(0xd55a2541, 0xf5024025), TOBN(0x47bc5769, 0xe4c2d937),
+       TOBN(0x7d31b92a, 0x0362189f), TOBN(0x83f3086e, 0xef7816f9)},
+      {TOBN(0xf9f46d94, 0xb587579a), TOBN(0xec2d22d8, 0x30e76c5f),
+       TOBN(0x27d57461, 0xb000ffcf), TOBN(0xbb7e65f9, 0x364ffc2c)}},
+     {{TOBN(0x7c7c9477, 0x6652a220), TOBN(0x61618f89, 0xd696c981),
+       TOBN(0x5021701d, 0x89effff3), TOBN(0xf2c8ff8e, 0x7c314163)},
+      {TOBN(0x2da413ad, 0x8efb4d3e), TOBN(0x937b5adf, 0xce176d95),
+       TOBN(0x22867d34, 0x2a67d51c), TOBN(0x262b9b10, 0x18eb3ac9)}},
+     {{TOBN(0x4e314fe4, 0xc43ff28b), TOBN(0x76476627, 0x6a664e7a),
+       TOBN(0x3e90e40b, 0xb7a565c2), TOBN(0x8588993a, 0xc1acf831)},
+      {TOBN(0xd7b501d6, 0x8f938829), TOBN(0x996627ee, 0x3edd7d4c),
+       TOBN(0x37d44a62, 0x90cd34c7), TOBN(0xa8327499, 0xf3833e8d)}},
+     {{TOBN(0x2e18917d, 0x4bf50353), TOBN(0x85dd726b, 0x556765fb),
+       TOBN(0x54fe65d6, 0x93d5ab66), TOBN(0x3ddbaced, 0x915c25fe)},
+      {TOBN(0xa799d9a4, 0x12f22e85), TOBN(0xe2a24867, 0x6d06f6bc),
+       TOBN(0xf4f1ee56, 0x43ca1637), TOBN(0xfda2828b, 0x61ece30a)}},
+     {{TOBN(0x758c1a3e, 0xa2dee7a6), TOBN(0xdcde2f3c, 0x734b2284),
+       TOBN(0xaba445d2, 0x4eaba6ad), TOBN(0x35aaf668, 0x76cee0a7)},
+      {TOBN(0x7e0b04a9, 0xe5aa049a), TOBN(0xe74083ad, 0x91103e84),
+       TOBN(0xbeb183ce, 0x40afecc3), TOBN(0x6b89de9f, 0xea043f7a)}}},
+    {{{TOBN(0x0e299d23, 0xfe67ba66), TOBN(0x91450760, 0x93cf2f34),
+       TOBN(0xf45b5ea9, 0x97fcf913), TOBN(0x5be00843, 0x8bd7ddda)},
+      {TOBN(0x358c3e05, 0xd53ff04d), TOBN(0xbf7ccdc3, 0x5de91ef7),
+       TOBN(0xad684dbf, 0xb69ec1a0), TOBN(0x367e7cf2, 0x801fd997)}},
+     {{TOBN(0x0ca1f3b7, 0xb0dc8595), TOBN(0x27de4608, 0x9f1d9f2e),
+       TOBN(0x1af3bf39, 0xbadd82a7), TOBN(0x79356a79, 0x65862448)},
+      {TOBN(0xc0602345, 0xf5f9a052), TOBN(0x1a8b0f89, 0x139a42f9),
+       TOBN(0xb53eee42, 0x844d40fc), TOBN(0x93b0bfe5, 0x4e5b6368)}},
+     {{TOBN(0x5434dd02, 0xc024789c), TOBN(0x90dca9ea, 0x41b57bfc),
+       TOBN(0x8aa898e2, 0x243398df), TOBN(0xf607c834, 0x894a94bb)},
+      {TOBN(0xbb07be97, 0xc2c99b76), TOBN(0x6576ba67, 0x18c29302),
+       TOBN(0x3d79efcc, 0xe703a88c), TOBN(0xf259ced7, 0xb6a0d106)}},
+     {{TOBN(0x0f893a5d, 0xc8de610b), TOBN(0xe8c515fb, 0x67e223ce),
+       TOBN(0x7774bfa6, 0x4ead6dc5), TOBN(0x89d20f95, 0x925c728f)},
+      {TOBN(0x7a1e0966, 0x098583ce), TOBN(0xa2eedb94, 0x93f2a7d7),
+       TOBN(0x1b282097, 0x4c304d4a), TOBN(0x0842e3da, 0xc077282d)}},
+     {{TOBN(0xe4d972a3, 0x3b9e2d7b), TOBN(0x7cc60b27, 0xc48218ff),
+       TOBN(0x8fc70838, 0x84149d91), TOBN(0x5c04346f, 0x2f461ecc)},
+      {TOBN(0xebe9fdf2, 0x614650a9), TOBN(0x5e35b537, 0xc1f666ac),
+       TOBN(0x645613d1, 0x88babc83), TOBN(0x88cace3a, 0xc5e1c93e)}},
+     {{TOBN(0x209ca375, 0x3de92e23), TOBN(0xccb03cc8, 0x5fbbb6e3),
+       TOBN(0xccb90f03, 0xd7b1487e), TOBN(0xfa9c2a38, 0xc710941f)},
+      {TOBN(0x756c3823, 0x6724ceed), TOBN(0x3a902258, 0x192d0323),
+       TOBN(0xb150e519, 0xea5e038e), TOBN(0xdcba2865, 0xc7427591)}},
+     {{TOBN(0xe549237f, 0x78890732), TOBN(0xc443bef9, 0x53fcb4d9),
+       TOBN(0x9884d8a6, 0xeb3480d6), TOBN(0x8a35b6a1, 0x3048b186)},
+      {TOBN(0xb4e44716, 0x65e9a90a), TOBN(0x45bf380d, 0x653006c0),
+       TOBN(0x8f3f820d, 0x4fe9ae3b), TOBN(0x244a35a0, 0x979a3b71)}},
+     {{TOBN(0xa1010e9d, 0x74cd06ff), TOBN(0x9c17c7df, 0xaca3eeac),
+       TOBN(0x74c86cd3, 0x8063aa2b), TOBN(0x8595c4b3, 0x734614ff)},
+      {TOBN(0xa3de00ca, 0x990f62cc), TOBN(0xd9bed213, 0xca0c3be5),
+       TOBN(0x7886078a, 0xdf8ce9f5), TOBN(0xddb27ce3, 0x5cd44444)}},
+     {{TOBN(0xed374a66, 0x58926ddd), TOBN(0x138b2d49, 0x908015b8),
+       TOBN(0x886c6579, 0xde1f7ab8), TOBN(0x888b9aa0, 0xc3020b7a)},
+      {TOBN(0xd3ec034e, 0x3a96e355), TOBN(0xba65b0b8, 0xf30fbe9a),
+       TOBN(0x064c8e50, 0xff21367a), TOBN(0x1f508ea4, 0x0b04b46e)}},
+     {{TOBN(0x98561a49, 0x747c866c), TOBN(0xbbb1e5fe, 0x0518a062),
+       TOBN(0x20ff4e8b, 0xecdc3608), TOBN(0x7f55cded, 0x20184027)},
+      {TOBN(0x8d73ec95, 0xf38c85f0), TOBN(0x5b589fdf, 0x8bc3b8c3),
+       TOBN(0xbe95dd98, 0x0f12b66f), TOBN(0xf5bd1a09, 0x0e338e01)}},
+     {{TOBN(0x65163ae5, 0x5e915918), TOBN(0x6158d6d9, 0x86f8a46b),
+       TOBN(0x8466b538, 0xeeebf99c), TOBN(0xca8761f6, 0xbca477ef)},
+      {TOBN(0xaf3449c2, 0x9ebbc601), TOBN(0xef3b0f41, 0xe0c3ae2f),
+       TOBN(0xaa6c577d, 0x5de63752), TOBN(0xe9166601, 0x64682a51)}},
+     {{TOBN(0x5a3097be, 0xfc15aa1e), TOBN(0x40d12548, 0xb54b0745),
+       TOBN(0x5bad4706, 0x519a5f12), TOBN(0xed03f717, 0xa439dee6)},
+      {TOBN(0x0794bb6c, 0x4a02c499), TOBN(0xf725083d, 0xcffe71d2),
+       TOBN(0x2cad7519, 0x0f3adcaf), TOBN(0x7f68ea1c, 0x43729310)}},
+     {{TOBN(0xe747c8c7, 0xb7ffd977), TOBN(0xec104c35, 0x80761a22),
+       TOBN(0x8395ebaf, 0x5a3ffb83), TOBN(0xfb3261f4, 0xe4b63db7)},
+      {TOBN(0x53544960, 0xd883e544), TOBN(0x13520d70, 0x8cc2eeb8),
+       TOBN(0x08f6337b, 0xd3d65f99), TOBN(0x83997db2, 0x781cf95b)}},
+     {{TOBN(0xce6ff106, 0x0dbd2c01), TOBN(0x4f8eea6b, 0x1f9ce934),
+       TOBN(0x546f7c4b, 0x0e993921), TOBN(0x6236a324, 0x5e753fc7)},
+      {TOBN(0x65a41f84, 0xa16022e9), TOBN(0x0c18d878, 0x43d1dbb2),
+       TOBN(0x73c55640, 0x2d4cef9c), TOBN(0xa0428108, 0x70444c74)}},
+     {{TOBN(0x68e4f15e, 0x9afdfb3c), TOBN(0x49a56143, 0x5bdfb6df),
+       TOBN(0xa9bc1bd4, 0x5f823d97), TOBN(0xbceb5970, 0xea111c2a)},
+      {TOBN(0x366b455f, 0xb269bbc4), TOBN(0x7cd85e1e, 0xe9bc5d62),
+       TOBN(0xc743c41c, 0x4f18b086), TOBN(0xa4b40990, 0x95294fb9)}},
+     {{TOBN(0x9c7c581d, 0x26ee8382), TOBN(0xcf17dcc5, 0x359d638e),
+       TOBN(0xee8273ab, 0xb728ae3d), TOBN(0x1d112926, 0xf821f047)},
+      {TOBN(0x11498477, 0x50491a74), TOBN(0x687fa761, 0xfde0dfb9),
+       TOBN(0x2c258022, 0x7ea435ab), TOBN(0x6b8bdb94, 0x91ce7e3f)}},
+     {{TOBN(0x4c5b5dc9, 0x3bf834aa), TOBN(0x04371819, 0x4f6c7e4b),
+       TOBN(0xc284e00a, 0x3736bcad), TOBN(0x0d881118, 0x21ae8f8d)},
+      {TOBN(0xf9cf0f82, 0xf48c8e33), TOBN(0xa11fd075, 0xa1bf40db),
+       TOBN(0xdceab0de, 0xdc2733e5), TOBN(0xc560a8b5, 0x8e986bd7)}},
+     {{TOBN(0x48dd1fe2, 0x3929d097), TOBN(0x3885b290, 0x92f188f1),
+       TOBN(0x0f2ae613, 0xda6fcdac), TOBN(0x9054303e, 0xb662a46c)},
+      {TOBN(0xb6871e44, 0x0738042a), TOBN(0x98e6a977, 0xbdaf6449),
+       TOBN(0xd8bc0650, 0xd1c9df1b), TOBN(0xef3d6451, 0x36e098f9)}},
+     {{TOBN(0x03fbae82, 0xb6d72d28), TOBN(0x77ca9db1, 0xf5d84080),
+       TOBN(0x8a112cff, 0xa58efc1c), TOBN(0x518d761c, 0xc564cb4a)},
+      {TOBN(0x69b5740e, 0xf0d1b5ce), TOBN(0x717039cc, 0xe9eb1785),
+       TOBN(0x3fe29f90, 0x22f53382), TOBN(0x8e54ba56, 0x6bc7c95c)}},
+     {{TOBN(0x9c806d8a, 0xf7f91d0f), TOBN(0x3b61b0f1, 0xa82a5728),
+       TOBN(0x4640032d, 0x94d76754), TOBN(0x273eb5de, 0x47d834c6)},
+      {TOBN(0x2988abf7, 0x7b4e4d53), TOBN(0xb7ce66bf, 0xde401777),
+       TOBN(0x9fba6b32, 0x715071b3), TOBN(0x82413c24, 0xad3a1a98)}},
+     {{TOBN(0x5b7fc8c4, 0xe0e8ad93), TOBN(0xb5679aee, 0x5fab868d),
+       TOBN(0xb1f9d2fa, 0x2b3946f3), TOBN(0x458897dc, 0x5685b50a)},
+      {TOBN(0x1e98c930, 0x89d0caf3), TOBN(0x39564c5f, 0x78642e92),
+       TOBN(0x1b77729a, 0x0dbdaf18), TOBN(0xf9170722, 0x579e82e6)}},
+     {{TOBN(0x680c0317, 0xe4515fa5), TOBN(0xf85cff84, 0xfb0c790f),
+       TOBN(0xc7a82aab, 0x6d2e0765), TOBN(0x7446bca9, 0x35c82b32)},
+      {TOBN(0x5de607aa, 0x6d63184f), TOBN(0x7c1a46a8, 0x262803a6),
+       TOBN(0xd218313d, 0xaebe8035), TOBN(0x92113ffd, 0xc73c51f8)}},
+     {{TOBN(0x4b38e083, 0x12e7e46c), TOBN(0x69d0a37a, 0x56126bd5),
+       TOBN(0xfb3f324b, 0x73c07e04), TOBN(0xa0c22f67, 0x8fda7267)},
+      {TOBN(0x8f2c0051, 0x4d2c7d8f), TOBN(0xbc45ced3, 0xcbe2cae5),
+       TOBN(0xe1c6cf07, 0xa8f0f277), TOBN(0xbc392312, 0x1eb99a98)}},
+     {{TOBN(0x75537b7e, 0x3cc8ac85), TOBN(0x8d725f57, 0xdd02753b),
+       TOBN(0xfd05ff64, 0xb737df2f), TOBN(0x55fe8712, 0xf6d2531d)},
+      {TOBN(0x57ce04a9, 0x6ab6b01c), TOBN(0x69a02a89, 0x7cd93724),
+       TOBN(0x4f82ac35, 0xcf86699b), TOBN(0x8242d3ad, 0x9cb4b232)}},
+     {{TOBN(0x713d0f65, 0xd62105e5), TOBN(0xbb222bfa, 0x2d29be61),
+       TOBN(0xf2f9a79e, 0x6cfbef09), TOBN(0xfc24d8d3, 0xd5d6782f)},
+      {TOBN(0x5db77085, 0xd4129967), TOBN(0xdb81c3cc, 0xdc3c2a43),
+       TOBN(0x9d655fc0, 0x05d8d9a3), TOBN(0x3f5d057a, 0x54298026)}},
+     {{TOBN(0x1157f56d, 0x88c54694), TOBN(0xb26baba5, 0x9b09573e),
+       TOBN(0x2cab03b0, 0x22adffd1), TOBN(0x60a412c8, 0xdd69f383)},
+      {TOBN(0xed76e98b, 0x54b25039), TOBN(0xd4ee67d3, 0x687e714d),
+       TOBN(0x87739648, 0x7b00b594), TOBN(0xce419775, 0xc9ef709b)}},
+     {{TOBN(0x40f76f85, 0x1c203a40), TOBN(0x30d352d6, 0xeafd8f91),
+       TOBN(0xaf196d3d, 0x95578dd2), TOBN(0xea4bb3d7, 0x77cc3f3d)},
+      {TOBN(0x42a5bd03, 0xb98e782b), TOBN(0xac958c40, 0x0624920d),
+       TOBN(0xb838134c, 0xfc56fcc8), TOBN(0x86ec4ccf, 0x89572e5e)}},
+     {{TOBN(0x69c43526, 0x9be47be0), TOBN(0x323b7dd8, 0xcb28fea1),
+       TOBN(0xfa5538ba, 0x3a6c67e5), TOBN(0xef921d70, 0x1d378e46)},
+      {TOBN(0xf92961fc, 0x3c4b880e), TOBN(0x3f6f914e, 0x98940a67),
+       TOBN(0xa990eb0a, 0xfef0ff39), TOBN(0xa6c2920f, 0xf0eeff9c)}},
+     {{TOBN(0xca804166, 0x51b8d9a3), TOBN(0x42531bc9, 0x0ffb0db1),
+       TOBN(0x72ce4718, 0xaa82e7ce), TOBN(0x6e199913, 0xdf574741)},
+      {TOBN(0xd5f1b13d, 0xd5d36946), TOBN(0x8255dc65, 0xf68f0194),
+       TOBN(0xdc9df4cd, 0x8710d230), TOBN(0x3453c20f, 0x138c1988)}},
+     {{TOBN(0x9af98dc0, 0x89a6ef01), TOBN(0x4dbcc3f0, 0x9857df85),
+       TOBN(0x34805601, 0x5c1ad924), TOBN(0x40448da5, 0xd0493046)},
+      {TOBN(0xf629926d, 0x4ee343e2), TOBN(0x6343f1bd, 0x90e8a301),
+       TOBN(0xefc93491, 0x40815b3f), TOBN(0xf882a423, 0xde8f66fb)}},
+     {{TOBN(0x3a12d5f4, 0xe7db9f57), TOBN(0x7dfba38a, 0x3c384c27),
+       TOBN(0x7a904bfd, 0x6fc660b1), TOBN(0xeb6c5db3, 0x2773b21c)},
+      {TOBN(0xc350ee66, 0x1cdfe049), TOBN(0x9baac0ce, 0x44540f29),
+       TOBN(0xbc57b6ab, 0xa5ec6aad), TOBN(0x167ce8c3, 0x0a7c1baa)}},
+     {{TOBN(0xb23a03a5, 0x53fb2b56), TOBN(0x6ce141e7, 0x4e057f78),
+       TOBN(0x796525c3, 0x89e490d9), TOBN(0x0bc95725, 0xa31a7e75)},
+      {TOBN(0x1ec56791, 0x1220fd06), TOBN(0x716e3a3c, 0x408b0bd6),
+       TOBN(0x31cd6bf7, 0xe8ebeba9), TOBN(0xa7326ca6, 0xbee6b670)}},
+     {{TOBN(0x3d9f851c, 0xcd090c43), TOBN(0x561e8f13, 0xf12c3988),
+       TOBN(0x50490b6a, 0x904b7be4), TOBN(0x61690ce1, 0x0410737b)},
+      {TOBN(0x299e9a37, 0x0f009052), TOBN(0x258758f0, 0xf026092e),
+       TOBN(0x9fa255f3, 0xfdfcdc0f), TOBN(0xdbc9fb1f, 0xc0e1bcd2)}},
+     {{TOBN(0x35f9dd6e, 0x24651840), TOBN(0xdca45a84, 0xa5c59abc),
+       TOBN(0x103d396f, 0xecca4938), TOBN(0x4532da0a, 0xb97b3f29)},
+      {TOBN(0xc4135ea5, 0x1999a6bf), TOBN(0x3aa9505a, 0x5e6bf2ee),
+       TOBN(0xf77cef06, 0x3f5be093), TOBN(0x97d1a0f8, 0xa943152e)}},
+     {{TOBN(0x2cb0ebba, 0x2e1c21dd), TOBN(0xf41b29fc, 0x2c6797c4),
+       TOBN(0xc6e17321, 0xb300101f), TOBN(0x4422b0e9, 0xd0d79a89)},
+      {TOBN(0x49e4901c, 0x92f1bfc4), TOBN(0x06ab1f8f, 0xe1e10ed9),
+       TOBN(0x84d35577, 0xdb2926b8), TOBN(0xca349d39, 0x356e8ec2)}},
+     {{TOBN(0x70b63d32, 0x343bf1a9), TOBN(0x8fd3bd28, 0x37d1a6b1),
+       TOBN(0x0454879c, 0x316865b4), TOBN(0xee959ff6, 0xc458efa2)},
+      {TOBN(0x0461dcf8, 0x9706dc3f), TOBN(0x737db0e2, 0x164e4b2e),
+       TOBN(0x09262680, 0x2f8843c8), TOBN(0x54498bbc, 0x7745e6f6)}},
+     {{TOBN(0x359473fa, 0xa29e24af), TOBN(0xfcc3c454, 0x70aa87a1),
+       TOBN(0xfd2c4bf5, 0x00573ace), TOBN(0xb65b514e, 0x28dd1965)},
+      {TOBN(0xe46ae7cf, 0x2193e393), TOBN(0x60e9a4e1, 0xf5444d97),
+       TOBN(0xe7594e96, 0x00ff38ed), TOBN(0x43d84d2f, 0x0a0e0f02)}},
+     {{TOBN(0x8b6db141, 0xee398a21), TOBN(0xb88a56ae, 0xe3bcc5be),
+       TOBN(0x0a1aa52f, 0x373460ea), TOBN(0x20da1a56, 0x160bb19b)},
+      {TOBN(0xfb54999d, 0x65bf0384), TOBN(0x71a14d24, 0x5d5a180e),
+       TOBN(0xbc44db7b, 0x21737b04), TOBN(0xd84fcb18, 0x01dd8e92)}},
+     {{TOBN(0x80de937b, 0xfa44b479), TOBN(0x53505499, 0x5c98fd4f),
+       TOBN(0x1edb12ab, 0x28f08727), TOBN(0x4c58b582, 0xa5f3ef53)},
+      {TOBN(0xbfb236d8, 0x8327f246), TOBN(0xc3a3bfaa, 0x4d7df320),
+       TOBN(0xecd96c59, 0xb96024f2), TOBN(0xfc293a53, 0x7f4e0433)}},
+     {{TOBN(0x5341352b, 0x5acf6e10), TOBN(0xc50343fd, 0xafe652c3),
+       TOBN(0x4af3792d, 0x18577a7f), TOBN(0xe1a4c617, 0xaf16823d)},
+      {TOBN(0x9b26d0cd, 0x33425d0a), TOBN(0x306399ed, 0x9b7bc47f),
+       TOBN(0x2a792f33, 0x706bb20b), TOBN(0x31219614, 0x98111055)}},
+     {{TOBN(0x864ec064, 0x87f5d28b), TOBN(0x11392d91, 0x962277fd),
+       TOBN(0xb5aa7942, 0xbb6aed5f), TOBN(0x080094dc, 0x47e799d9)},
+      {TOBN(0x4afa588c, 0x208ba19b), TOBN(0xd3e7570f, 0x8512f284),
+       TOBN(0xcbae64e6, 0x02f5799a), TOBN(0xdeebe7ef, 0x514b9492)}},
+     {{TOBN(0x30300f98, 0xe5c298ff), TOBN(0x17f561be, 0x3678361f),
+       TOBN(0xf52ff312, 0x98cb9a16), TOBN(0x6233c3bc, 0x5562d490)},
+      {TOBN(0x7bfa15a1, 0x92e3a2cb), TOBN(0x961bcfd1, 0xe6365119),
+       TOBN(0x3bdd29bf, 0x2c8c53b1), TOBN(0x739704df, 0x822844ba)}},
+     {{TOBN(0x7dacfb58, 0x7e7b754b), TOBN(0x23360791, 0xa806c9b9),
+       TOBN(0xe7eb88c9, 0x23504452), TOBN(0x2983e996, 0x852c1783)},
+      {TOBN(0xdd4ae529, 0x958d881d), TOBN(0x026bae03, 0x262c7b3c),
+       TOBN(0x3a6f9193, 0x960b52d1), TOBN(0xd0980f90, 0x92696cfb)}},
+     {{TOBN(0x4c1f428c, 0xd5f30851), TOBN(0x94dfed27, 0x2a4f6630),
+       TOBN(0x4df53772, 0xfc5d48a4), TOBN(0xdd2d5a2f, 0x933260ce)},
+      {TOBN(0x574115bd, 0xd44cc7a5), TOBN(0x4ba6b20d, 0xbd12533a),
+       TOBN(0x30e93cb8, 0x243057c9), TOBN(0x794c486a, 0x14de320e)}},
+     {{TOBN(0xe925d4ce, 0xf21496e4), TOBN(0xf951d198, 0xec696331),
+       TOBN(0x9810e2de, 0x3e8d812f), TOBN(0xd0a47259, 0x389294ab)},
+      {TOBN(0x513ba2b5, 0x0e3bab66), TOBN(0x462caff5, 0xabad306f),
+       TOBN(0xe2dc6d59, 0xaf04c49e), TOBN(0x1aeb8750, 0xe0b84b0b)}},
+     {{TOBN(0xc034f12f, 0x2f7d0ca2), TOBN(0x6d2e8128, 0xe06acf2f),
+       TOBN(0x801f4f83, 0x21facc2f), TOBN(0xa1170c03, 0xf40ef607)},
+      {TOBN(0xfe0a1d4f, 0x7805a99c), TOBN(0xbde56a36, 0xcc26aba5),
+       TOBN(0x5b1629d0, 0x35531f40), TOBN(0xac212c2b, 0x9afa6108)}},
+     {{TOBN(0x30a06bf3, 0x15697be5), TOBN(0x6f0545dc, 0x2c63c7c1),
+       TOBN(0x5d8cb842, 0x7ccdadaf), TOBN(0xd52e379b, 0xac7015bb)},
+      {TOBN(0xc4f56147, 0xf462c23e), TOBN(0xd44a4298, 0x46bc24b0),
+       TOBN(0xbc73d23a, 0xe2856d4f), TOBN(0x61cedd8c, 0x0832bcdf)}},
+     {{TOBN(0x60953556, 0x99f241d7), TOBN(0xee4adbd7, 0x001a349d),
+       TOBN(0x0b35bf6a, 0xaa89e491), TOBN(0x7f0076f4, 0x136f7546)},
+      {TOBN(0xd19a18ba, 0x9264da3d), TOBN(0x6eb2d2cd, 0x62a7a28b),
+       TOBN(0xcdba941f, 0x8761c971), TOBN(0x1550518b, 0xa3be4a5d)}},
+     {{TOBN(0xd0e8e2f0, 0x57d0b70c), TOBN(0xeea8612e, 0xcd133ba3),
+       TOBN(0x814670f0, 0x44416aec), TOBN(0x424db6c3, 0x30775061)},
+      {TOBN(0xd96039d1, 0x16213fd1), TOBN(0xc61e7fa5, 0x18a3478f),
+       TOBN(0xa805bdcc, 0xcb0c5021), TOBN(0xbdd6f3a8, 0x0cc616dd)}},
+     {{TOBN(0x06009667, 0x5d97f7e2), TOBN(0x31db0fc1, 0xaf0bf4b6),
+       TOBN(0x23680ed4, 0x5491627a), TOBN(0xb99a3c66, 0x7d741fb1)},
+      {TOBN(0xe9bb5f55, 0x36b1ff92), TOBN(0x29738577, 0x512b388d),
+       TOBN(0xdb8a2ce7, 0x50fcf263), TOBN(0x385346d4, 0x6c4f7b47)}},
+     {{TOBN(0xbe86c5ef, 0x31631f9e), TOBN(0xbf91da21, 0x03a57a29),
+       TOBN(0xc3b1f796, 0x7b23f821), TOBN(0x0f7d00d2, 0x770db354)},
+      {TOBN(0x8ffc6c3b, 0xd8fe79da), TOBN(0xcc5e8c40, 0xd525c996),
+       TOBN(0x4640991d, 0xcfff632a), TOBN(0x64d97e8c, 0x67112528)}},
+     {{TOBN(0xc232d973, 0x02f1cd1e), TOBN(0xce87eacb, 0x1dd212a4),
+       TOBN(0x6e4c8c73, 0xe69802f7), TOBN(0x12ef0290, 0x1fffddbd)},
+      {TOBN(0x941ec74e, 0x1bcea6e2), TOBN(0xd0b54024, 0x3cb92cbb),
+       TOBN(0x809fb9d4, 0x7e8f9d05), TOBN(0x3bf16159, 0xf2992aae)}},
+     {{TOBN(0xad40f279, 0xf8a7a838), TOBN(0x11aea631, 0x05615660),
+       TOBN(0xbf52e6f1, 0xa01f6fa1), TOBN(0xef046995, 0x3dc2aec9)},
+      {TOBN(0x785dbec9, 0xd8080711), TOBN(0xe1aec60a, 0x9fdedf76),
+       TOBN(0xece797b5, 0xfa21c126), TOBN(0xc66e898f, 0x05e52732)}},
+     {{TOBN(0x39bb69c4, 0x08811fdb), TOBN(0x8bfe1ef8, 0x2fc7f082),
+       TOBN(0xc8e7a393, 0x174f4138), TOBN(0xfba8ad1d, 0xd58d1f98)},
+      {TOBN(0xbc21d0ce, 0xbfd2fd5b), TOBN(0x0b839a82, 0x6ee60d61),
+       TOBN(0xaacf7658, 0xafd22253), TOBN(0xb526bed8, 0xaae396b3)}},
+     {{TOBN(0xccc1bbc2, 0x38564464), TOBN(0x9e3ff947, 0x8c45bc73),
+       TOBN(0xcde9bca3, 0x58188a78), TOBN(0x138b8ee0, 0xd73bf8f7)},
+      {TOBN(0x5c7e234c, 0x4123c489), TOBN(0x66e69368, 0xfa643297),
+       TOBN(0x0629eeee, 0x39a15fa3), TOBN(0x95fab881, 0xa9e2a927)}},
+     {{TOBN(0xb2497007, 0xeafbb1e1), TOBN(0xd75c9ce6, 0xe75b7a93),
+       TOBN(0x3558352d, 0xefb68d78), TOBN(0xa2f26699, 0x223f6396)},
+      {TOBN(0xeb911ecf, 0xe469b17a), TOBN(0x62545779, 0xe72d3ec2),
+       TOBN(0x8ea47de7, 0x82cb113f), TOBN(0xebe4b086, 0x4e1fa98d)}},
+     {{TOBN(0xec2d5ed7, 0x8cdfedb1), TOBN(0xa535c077, 0xfe211a74),
+       TOBN(0x9678109b, 0x11d244c5), TOBN(0xf17c8bfb, 0xbe299a76)},
+      {TOBN(0xb651412e, 0xfb11fbc4), TOBN(0xea0b5482, 0x94ab3f65),
+       TOBN(0xd8dffd95, 0x0cf78243), TOBN(0x2e719e57, 0xce0361d4)}},
+     {{TOBN(0x9007f085, 0x304ddc5b), TOBN(0x095e8c6d, 0x4daba2ea),
+       TOBN(0x5a33cdb4, 0x3f9d28a9), TOBN(0x85b95cd8, 0xe2283003)},
+      {TOBN(0xbcd6c819, 0xb9744733), TOBN(0x29c5f538, 0xfc7f5783),
+       TOBN(0x6c49b2fa, 0xd59038e4), TOBN(0x68349cc1, 0x3bbe1018)}},
+     {{TOBN(0xcc490c1d, 0x21830ee5), TOBN(0x36f9c4ee, 0xe9bfa297),
+       TOBN(0x58fd7294, 0x48de1a94), TOBN(0xaadb13a8, 0x4e8f2cdc)},
+      {TOBN(0x515eaaa0, 0x81313dba), TOBN(0xc76bb468, 0xc2152dd8),
+       TOBN(0x357f8d75, 0xa653dbf8), TOBN(0xe4d8c4d1, 0xb14ac143)}},
+     {{TOBN(0xbdb8e675, 0xb055cb40), TOBN(0x898f8e7b, 0x977b5167),
+       TOBN(0xecc65651, 0xb82fb863), TOBN(0x56544814, 0x6d88f01f)},
+      {TOBN(0xb0928e95, 0x263a75a9), TOBN(0xcfb6836f, 0x1a22fcda),
+       TOBN(0x651d14db, 0x3f3bd37c), TOBN(0x1d3837fb, 0xb6ad4664)}},
+     {{TOBN(0x7c5fb538, 0xff4f94ab), TOBN(0x7243c712, 0x6d7fb8f2),
+       TOBN(0xef13d60c, 0xa85c5287), TOBN(0x18cfb7c7, 0x4bb8dd1b)},
+      {TOBN(0x82f9bfe6, 0x72908219), TOBN(0x35c4592b, 0x9d5144ab),
+       TOBN(0x52734f37, 0x9cf4b42f), TOBN(0x6bac55e7, 0x8c60ddc4)}},
+     {{TOBN(0xb5cd811e, 0x94dea0f6), TOBN(0x259ecae4, 0xe18cc1a3),
+       TOBN(0x6a0e836e, 0x15e660f8), TOBN(0x6c639ea6, 0x0e02bff2)},
+      {TOBN(0x8721b8cb, 0x7e1026fd), TOBN(0x9e73b50b, 0x63261942),
+       TOBN(0xb8c70974, 0x77f01da3), TOBN(0x1839e6a6, 0x8268f57f)}},
+     {{TOBN(0x571b9415, 0x5150b805), TOBN(0x1892389e, 0xf92c7097),
+       TOBN(0x8d69c18e, 0x4a084b95), TOBN(0x7014c512, 0xbe5b495c)},
+      {TOBN(0x4780db36, 0x1b07523c), TOBN(0x2f6219ce, 0x2c1c64fa),
+       TOBN(0xc38b81b0, 0x602c105a), TOBN(0xab4f4f20, 0x5dc8e360)}},
+     {{TOBN(0x20d3c982, 0xcf7d62d2), TOBN(0x1f36e29d, 0x23ba8150),
+       TOBN(0x48ae0bf0, 0x92763f9e), TOBN(0x7a527e6b, 0x1d3a7007)},
+      {TOBN(0xb4a89097, 0x581a85e3), TOBN(0x1f1a520f, 0xdc158be5),
+       TOBN(0xf98db37d, 0x167d726e), TOBN(0x8802786e, 0x1113e862)}}},
+    {{{TOBN(0xefb2149e, 0x36f09ab0), TOBN(0x03f163ca, 0x4a10bb5b),
+       TOBN(0xd0297045, 0x06e20998), TOBN(0x56f0af00, 0x1b5a3bab)},
+      {TOBN(0x7af4cfec, 0x70880e0d), TOBN(0x7332a66f, 0xbe3d913f),
+       TOBN(0x32e6c84a, 0x7eceb4bd), TOBN(0xedc4a79a, 0x9c228f55)}},
+     {{TOBN(0xc37c7dd0, 0xc55c4496), TOBN(0xa6a96357, 0x25bbabd2),
+       TOBN(0x5b7e63f2, 0xadd7f363), TOBN(0x9dce3782, 0x2e73f1df)},
+      {TOBN(0xe1e5a16a, 0xb2b91f71), TOBN(0xe4489823, 0x5ba0163c),
+       TOBN(0xf2759c32, 0xf6e515ad), TOBN(0xa5e2f1f8, 0x8615eecf)}},
+     {{TOBN(0x74519be7, 0xabded551), TOBN(0x03d358b8, 0xc8b74410),
+       TOBN(0x4d00b10b, 0x0e10d9a9), TOBN(0x6392b0b1, 0x28da52b7)},
+      {TOBN(0x6744a298, 0x0b75c904), TOBN(0xc305b0ae, 0xa8f7f96c),
+       TOBN(0x042e421d, 0x182cf932), TOBN(0xf6fc5d50, 0x9e4636ca)}},
+     {{TOBN(0x795847c9, 0xd64cc78c), TOBN(0x6c50621b, 0x9b6cb27b),
+       TOBN(0x07099bf8, 0xdf8022ab), TOBN(0x48f862eb, 0xc04eda1d)},
+      {TOBN(0xd12732ed, 0xe1603c16), TOBN(0x19a80e0f, 0x5c9a9450),
+       TOBN(0xe2257f54, 0xb429b4fc), TOBN(0x66d3b2c6, 0x45460515)}},
+     {{TOBN(0x6ca4f87e, 0x822e37be), TOBN(0x73f237b4, 0x253bda4e),
+       TOBN(0xf747f3a2, 0x41190aeb), TOBN(0xf06fa36f, 0x804cf284)},
+      {TOBN(0x0a6bbb6e, 0xfc621c12), TOBN(0x5d624b64, 0x40b80ec6),
+       TOBN(0x4b072425, 0x7ba556f3), TOBN(0x7fa0c354, 0x3e2d20a8)}},
+     {{TOBN(0xe921fa31, 0xe3229d41), TOBN(0xa929c652, 0x94531bd4),
+       TOBN(0x84156027, 0xa6d38209), TOBN(0xf3d69f73, 0x6bdb97bd)},
+      {TOBN(0x8906d19a, 0x16833631), TOBN(0x68a34c2e, 0x03d51be3),
+       TOBN(0xcb59583b, 0x0e511cd8), TOBN(0x99ce6bfd, 0xfdc132a8)}},
+     {{TOBN(0x3facdaaa, 0xffcdb463), TOBN(0x658bbc1a, 0x34a38b08),
+       TOBN(0x12a801f8, 0xf1a9078d), TOBN(0x1567bcf9, 0x6ab855de)},
+      {TOBN(0xe08498e0, 0x3572359b), TOBN(0xcf0353e5, 0x8659e68b),
+       TOBN(0xbb86e9c8, 0x7d23807c), TOBN(0xbc08728d, 0x2198e8a2)}},
+     {{TOBN(0x8de2b7bc, 0x453cadd6), TOBN(0x203900a7, 0xbc0bc1f8),
+       TOBN(0xbcd86e47, 0xa6abd3af), TOBN(0x911cac12, 0x8502effb)},
+      {TOBN(0x2d550242, 0xec965469), TOBN(0x0e9f7692, 0x29e0017e),
+       TOBN(0x633f078f, 0x65979885), TOBN(0xfb87d449, 0x4cf751ef)}},
+     {{TOBN(0xe1790e4b, 0xfc25419a), TOBN(0x36467203, 0x4bff3cfd),
+       TOBN(0xc8db6386, 0x25b6e83f), TOBN(0x6cc69f23, 0x6cad6fd2)},
+      {TOBN(0x0219e45a, 0x6bc68bb9), TOBN(0xe43d79b6, 0x297f7334),
+       TOBN(0x7d445368, 0x465dc97c), TOBN(0x4b9eea32, 0x2a0b949a)}},
+     {{TOBN(0x1b96c6ba, 0x6102d021), TOBN(0xeaafac78, 0x2f4461ea),
+       TOBN(0xd4b85c41, 0xc49f19a8), TOBN(0x275c28e4, 0xcf538875)},
+      {TOBN(0x35451a9d, 0xdd2e54e0), TOBN(0x6991adb5, 0x0605618b),
+       TOBN(0x5b8b4bcd, 0x7b36cd24), TOBN(0x372a4f8c, 0x56f37216)}},
+     {{TOBN(0xc890bd73, 0xa6a5da60), TOBN(0x6f083da0, 0xdc4c9ff0),
+       TOBN(0xf4e14d94, 0xf0536e57), TOBN(0xf9ee1eda, 0xaaec8243)},
+      {TOBN(0x571241ec, 0x8bdcf8e7), TOBN(0xa5db8271, 0x0b041e26),
+       TOBN(0x9a0b9a99, 0xe3fff040), TOBN(0xcaaf21dd, 0x7c271202)}},
+     {{TOBN(0xb4e2b2e1, 0x4f0dd2e8), TOBN(0xe77e7c4f, 0x0a377ac7),
+       TOBN(0x69202c3f, 0x0d7a2198), TOBN(0xf759b7ff, 0x28200eb8)},
+      {TOBN(0xc87526ed, 0xdcfe314e), TOBN(0xeb84c524, 0x53d5cf99),
+       TOBN(0xb1b52ace, 0x515138b6), TOBN(0x5aa7ff8c, 0x23fca3f4)}},
+     {{TOBN(0xff0b13c3, 0xb9791a26), TOBN(0x960022da, 0xcdd58b16),
+       TOBN(0xdbd55c92, 0x57aad2de), TOBN(0x3baaaaa3, 0xf30fe619)},
+      {TOBN(0x9a4b2346, 0x0d881efd), TOBN(0x506416c0, 0x46325e2a),
+       TOBN(0x91381e76, 0x035c18d4), TOBN(0xb3bb68be, 0xf27817b0)}},
+     {{TOBN(0x15bfb8bf, 0x5116f937), TOBN(0x7c64a586, 0xc1268943),
+       TOBN(0x71e25cc3, 0x8419a2c8), TOBN(0x9fd6b0c4, 0x8335f463)},
+      {TOBN(0x4bf0ba3c, 0xe8ee0e0e), TOBN(0x6f6fba60, 0x298c21fa),
+       TOBN(0x57d57b39, 0xae66bee0), TOBN(0x292d5130, 0x22672544)}},
+     {{TOBN(0xf451105d, 0xbab093b3), TOBN(0x012f59b9, 0x02839986),
+       TOBN(0x8a915802, 0x3474a89c), TOBN(0x048c919c, 0x2de03e97)},
+      {TOBN(0xc476a2b5, 0x91071cd5), TOBN(0x791ed89a, 0x034970a5),
+       TOBN(0x89bd9042, 0xe1b7994b), TOBN(0x8eaf5179, 0xa1057ffd)}},
+     {{TOBN(0x6066e2a2, 0xd551ee10), TOBN(0x87a8f1d8, 0x727e09a6),
+       TOBN(0x00d08bab, 0x2c01148d), TOBN(0x6da8e4f1, 0x424f33fe)},
+      {TOBN(0x466d17f0, 0xcf9a4e71), TOBN(0xff502010, 0x3bf5cb19),
+       TOBN(0xdccf97d8, 0xd062ecc0), TOBN(0x80c0d9af, 0x81d80ac4)}},
+     {{TOBN(0xe87771d8, 0x033f2876), TOBN(0xb0186ec6, 0x7d5cc3db),
+       TOBN(0x58e8bb80, 0x3bc9bc1d), TOBN(0x4d1395cc, 0x6f6ef60e)},
+      {TOBN(0xa73c62d6, 0x186244a0), TOBN(0x918e5f23, 0x110a5b53),
+       TOBN(0xed4878ca, 0x741b7eab), TOBN(0x3038d71a, 0xdbe03e51)}},
+     {{TOBN(0x840204b7, 0xa93c3246), TOBN(0x21ab6069, 0xa0b9b4cd),
+       TOBN(0xf5fa6e2b, 0xb1d64218), TOBN(0x1de6ad0e, 0xf3d56191)},
+      {TOBN(0x570aaa88, 0xff1929c7), TOBN(0xc6df4c6b, 0x640e87b5),
+       TOBN(0xde8a74f2, 0xc65f0ccc), TOBN(0x8b972fd5, 0xe6f6cc01)}},
+     {{TOBN(0x3fff36b6, 0x0b846531), TOBN(0xba7e45e6, 0x10a5e475),
+       TOBN(0x84a1d10e, 0x4145b6c5), TOBN(0xf1f7f91a, 0x5e046d9d)},
+      {TOBN(0x0317a692, 0x44de90d7), TOBN(0x951a1d4a, 0xf199c15e),
+       TOBN(0x91f78046, 0xc9d73deb), TOBN(0x74c82828, 0xfab8224f)}},
+     {{TOBN(0xaa6778fc, 0xe7560b90), TOBN(0xb4073e61, 0xa7e824ce),
+       TOBN(0xff0d693c, 0xd642eba8), TOBN(0x7ce2e57a, 0x5dccef38)},
+      {TOBN(0x89c2c789, 0x1df1ad46), TOBN(0x83a06922, 0x098346fd),
+       TOBN(0x2d715d72, 0xda2fc177), TOBN(0x7b6dd71d, 0x85b6cf1d)}},
+     {{TOBN(0xc60a6d0a, 0x73fa9cb0), TOBN(0xedd3992e, 0x328bf5a9),
+       TOBN(0xc380ddd0, 0x832c8c82), TOBN(0xd182d410, 0xa2a0bf50)},
+      {TOBN(0x7d9d7438, 0xd9a528db), TOBN(0xe8b1a0e9, 0xcaf53994),
+       TOBN(0xddd6e5fe, 0x0e19987c), TOBN(0xacb8df03, 0x190b059d)}},
+     {{TOBN(0x53703a32, 0x8300129f), TOBN(0x1f637662, 0x68c43bfd),
+       TOBN(0xbcbd1913, 0x00e54051), TOBN(0x812fcc62, 0x7bf5a8c5)},
+      {TOBN(0x3f969d5f, 0x29fb85da), TOBN(0x72f4e00a, 0x694759e8),
+       TOBN(0x426b6e52, 0x790726b7), TOBN(0x617bbc87, 0x3bdbb209)}},
+     {{TOBN(0x511f8bb9, 0x97aee317), TOBN(0x812a4096, 0xe81536a8),
+       TOBN(0x137dfe59, 0x3ac09b9b), TOBN(0x0682238f, 0xba8c9a7a)},
+      {TOBN(0x7072ead6, 0xaeccb4bd), TOBN(0x6a34e9aa, 0x692ba633),
+       TOBN(0xc82eaec2, 0x6fff9d33), TOBN(0xfb753512, 0x1d4d2b62)}},
+     {{TOBN(0x1a0445ff, 0x1d7aadab), TOBN(0x65d38260, 0xd5f6a67c),
+       TOBN(0x6e62fb08, 0x91cfb26f), TOBN(0xef1e0fa5, 0x5c7d91d6)},
+      {TOBN(0x47e7c7ba, 0x33db72cd), TOBN(0x017cbc09, 0xfa7c74b2),
+       TOBN(0x3c931590, 0xf50a503c), TOBN(0xcac54f60, 0x616baa42)}},
+     {{TOBN(0x9b6cd380, 0xb2369f0f), TOBN(0x97d3a70d, 0x23c76151),
+       TOBN(0x5f9dd6fc, 0x9862a9c6), TOBN(0x044c4ab2, 0x12312f51)},
+      {TOBN(0x035ea0fd, 0x834a2ddc), TOBN(0x49e6b862, 0xcc7b826d),
+       TOBN(0xb03d6883, 0x62fce490), TOBN(0x62f2497a, 0xb37e36e9)}},
+     {{TOBN(0x04b005b6, 0xc6458293), TOBN(0x36bb5276, 0xe8d10af7),
+       TOBN(0xacf2dc13, 0x8ee617b8), TOBN(0x470d2d35, 0xb004b3d4)},
+      {TOBN(0x06790832, 0xfeeb1b77), TOBN(0x2bb75c39, 0x85657f9c),
+       TOBN(0xd70bd4ed, 0xc0f60004), TOBN(0xfe797ecc, 0x219b018b)}},
+     {{TOBN(0x9b5bec2a, 0x753aebcc), TOBN(0xdaf9f3dc, 0xc939eca5),
+       TOBN(0xd6bc6833, 0xd095ad09), TOBN(0x98abdd51, 0xdaa4d2fc)},
+      {TOBN(0xd9840a31, 0x8d168be5), TOBN(0xcf7c10e0, 0x2325a23c),
+       TOBN(0xa5c02aa0, 0x7e6ecfaf), TOBN(0x2462e7e6, 0xb5bfdf18)}},
+     {{TOBN(0xab2d8a8b, 0xa0cc3f12), TOBN(0x68dd485d, 0xbc672a29),
+       TOBN(0x72039752, 0x596f2cd3), TOBN(0x5d3eea67, 0xa0cf3d8d)},
+      {TOBN(0x810a1a81, 0xe6602671), TOBN(0x8f144a40, 0x14026c0c),
+       TOBN(0xbc753a6d, 0x76b50f85), TOBN(0xc4dc21e8, 0x645cd4a4)}},
+     {{TOBN(0xc5262dea, 0x521d0378), TOBN(0x802b8e0e, 0x05011c6f),
+       TOBN(0x1ba19cbb, 0x0b4c19ea), TOBN(0x21db64b5, 0xebf0aaec)},
+      {TOBN(0x1f394ee9, 0x70342f9d), TOBN(0x93a10aee, 0x1bc44a14),
+       TOBN(0xa7eed31b, 0x3efd0baa), TOBN(0x6e7c824e, 0x1d154e65)}},
+     {{TOBN(0xee23fa81, 0x9966e7ee), TOBN(0x64ec4aa8, 0x05b7920d),
+       TOBN(0x2d44462d, 0x2d90aad4), TOBN(0xf44dd195, 0xdf277ad5)},
+      {TOBN(0x8d6471f1, 0xbb46b6a1), TOBN(0x1e65d313, 0xfd885090),
+       TOBN(0x33a800f5, 0x13a977b4), TOBN(0xaca9d721, 0x0797e1ef)}},
+     {{TOBN(0x9a5a85a0, 0xfcff6a17), TOBN(0x9970a3f3, 0x1eca7cee),
+       TOBN(0xbb9f0d6b, 0xc9504be3), TOBN(0xe0c504be, 0xadd24ee2)},
+      {TOBN(0x7e09d956, 0x77fcc2f4), TOBN(0xef1a5227, 0x65bb5fc4),
+       TOBN(0x145d4fb1, 0x8b9286aa), TOBN(0x66fd0c5d, 0x6649028b)}},
+     {{TOBN(0x98857ceb, 0x1bf4581c), TOBN(0xe635e186, 0xaca7b166),
+       TOBN(0x278ddd22, 0x659722ac), TOBN(0xa0903c4c, 0x1db68007)},
+      {TOBN(0x366e4589, 0x48f21402), TOBN(0x31b49c14, 0xb96abda2),
+       TOBN(0x329c4b09, 0xe0403190), TOBN(0x97197ca3, 0xd29f43fe)}},
+     {{TOBN(0x8073dd1e, 0x274983d8), TOBN(0xda1a3bde, 0x55717c8f),
+       TOBN(0xfd3d4da2, 0x0361f9d1), TOBN(0x1332d081, 0x4c7de1ce)},
+      {TOBN(0x9b7ef7a3, 0xaa6d0e10), TOBN(0x17db2e73, 0xf54f1c4a),
+       TOBN(0xaf3dffae, 0x4cd35567), TOBN(0xaaa2f406, 0xe56f4e71)}},
+     {{TOBN(0x8966759e, 0x7ace3fc7), TOBN(0x9594eacf, 0x45a8d8c6),
+       TOBN(0x8de3bd8b, 0x91834e0e), TOBN(0xafe4ca53, 0x548c0421)},
+      {TOBN(0xfdd7e856, 0xe6ee81c6), TOBN(0x8f671beb, 0x6b891a3a),
+       TOBN(0xf7a58f2b, 0xfae63829), TOBN(0x9ab186fb, 0x9c11ac9f)}},
+     {{TOBN(0x8d6eb369, 0x10b5be76), TOBN(0x046b7739, 0xfb040bcd),
+       TOBN(0xccb4529f, 0xcb73de88), TOBN(0x1df0fefc, 0xcf26be03)},
+      {TOBN(0xad7757a6, 0xbcfcd027), TOBN(0xa8786c75, 0xbb3165ca),
+       TOBN(0xe9db1e34, 0x7e99a4d9), TOBN(0x99ee86df, 0xb06c504b)}},
+     {{TOBN(0x5b7c2ddd, 0xc15c9f0a), TOBN(0xdf87a734, 0x4295989e),
+       TOBN(0x59ece47c, 0x03d08fda), TOBN(0xb074d3dd, 0xad5fc702)},
+      {TOBN(0x20407903, 0x51a03776), TOBN(0x2bb1f77b, 0x2a608007),
+       TOBN(0x25c58f4f, 0xe1153185), TOBN(0xe6df62f6, 0x766e6447)}},
+     {{TOBN(0xefb3d1be, 0xed51275a), TOBN(0x5de47dc7, 0x2f0f483f),
+       TOBN(0x7932d98e, 0x97c2bedf), TOBN(0xd5c11927, 0x0219f8a1)},
+      {TOBN(0x9d751200, 0xa73a294e), TOBN(0x5f88434a, 0x9dc20172),
+       TOBN(0xd28d9fd3, 0xa26f506a), TOBN(0xa890cd31, 0x9d1dcd48)}},
+     {{TOBN(0x0aebaec1, 0x70f4d3b4), TOBN(0xfd1a1369, 0x0ffc8d00),
+       TOBN(0xb9d9c240, 0x57d57838), TOBN(0x45929d26, 0x68bac361)},
+      {TOBN(0x5a2cd060, 0x25b15ca6), TOBN(0x4b3c83e1, 0x6e474446),
+       TOBN(0x1aac7578, 0xee1e5134), TOBN(0xa418f5d6, 0xc91e2f41)}},
+     {{TOBN(0x6936fc8a, 0x213ed68b), TOBN(0x860ae7ed, 0x510a5224),
+       TOBN(0x63660335, 0xdef09b53), TOBN(0x641b2897, 0xcd79c98d)},
+      {TOBN(0x29bd38e1, 0x01110f35), TOBN(0x79c26f42, 0x648b1937),
+       TOBN(0x64dae519, 0x9d9164f4), TOBN(0xd85a2310, 0x0265c273)}},
+     {{TOBN(0x7173dd5d, 0x4b07e2b1), TOBN(0xd144c4cb, 0x8d9ea221),
+       TOBN(0xe8b04ea4, 0x1105ab14), TOBN(0x92dda542, 0xfe80d8f1)},
+      {TOBN(0xe9982fa8, 0xcf03dce6), TOBN(0x8b5ea965, 0x1a22cffc),
+       TOBN(0xf7f4ea7f, 0x3fad88c4), TOBN(0x62db773e, 0x6a5ba95c)}},
+     {{TOBN(0xd20f02fb, 0x93f24567), TOBN(0xfd46c69a, 0x315257ca),
+       TOBN(0x0ac74cc7, 0x8bcab987), TOBN(0x46f31c01, 0x5ceca2f5)},
+      {TOBN(0x40aedb59, 0x888b219e), TOBN(0xe50ecc37, 0xe1fccd02),
+       TOBN(0x1bcd9dad, 0x911f816c), TOBN(0x583cc1ec, 0x8db9b00c)}},
+     {{TOBN(0xf3cd2e66, 0xa483bf11), TOBN(0xfa08a6f5, 0xb1b2c169),
+       TOBN(0xf375e245, 0x4be9fa28), TOBN(0x99a7ffec, 0x5b6d011f)},
+      {TOBN(0x6a3ebddb, 0xc4ae62da), TOBN(0x6cea00ae, 0x374aef5d),
+       TOBN(0xab5fb98d, 0x9d4d05bc), TOBN(0x7cba1423, 0xd560f252)}},
+     {{TOBN(0x49b2cc21, 0x208490de), TOBN(0x1ca66ec3, 0xbcfb2879),
+       TOBN(0x7f1166b7, 0x1b6fb16f), TOBN(0xfff63e08, 0x65fe5db3)},
+      {TOBN(0xb8345abe, 0x8b2610be), TOBN(0xb732ed80, 0x39de3df4),
+       TOBN(0x0e24ed50, 0x211c32b4), TOBN(0xd10d8a69, 0x848ff27d)}},
+     {{TOBN(0xc1074398, 0xed4de248), TOBN(0xd7cedace, 0x10488927),
+       TOBN(0xa4aa6bf8, 0x85673e13), TOBN(0xb46bae91, 0x6daf30af)},
+      {TOBN(0x07088472, 0xfcef7ad8), TOBN(0x61151608, 0xd4b35e97),
+       TOBN(0xbcfe8f26, 0xdde29986), TOBN(0xeb84c4c7, 0xd5a34c79)}},
+     {{TOBN(0xc1eec55c, 0x164e1214), TOBN(0x891be86d, 0xa147bb03),
+       TOBN(0x9fab4d10, 0x0ba96835), TOBN(0xbf01e9b8, 0xa5c1ae9f)},
+      {TOBN(0x6b4de139, 0xb186ebc0), TOBN(0xd5c74c26, 0x85b91bca),
+       TOBN(0x5086a99c, 0xc2d93854), TOBN(0xeed62a7b, 0xa7a9dfbc)}},
+     {{TOBN(0x8778ed6f, 0x76b7618a), TOBN(0xbff750a5, 0x03b66062),
+       TOBN(0x4cb7be22, 0xb65186db), TOBN(0x369dfbf0, 0xcc3a6d13)},
+      {TOBN(0xc7dab26c, 0x7191a321), TOBN(0x9edac3f9, 0x40ed718e),
+       TOBN(0xbc142b36, 0xd0cfd183), TOBN(0xc8af82f6, 0x7c991693)}},
+     {{TOBN(0xb3d1e4d8, 0x97ce0b2a), TOBN(0xe6d7c87f, 0xc3a55cdf),
+       TOBN(0x35846b95, 0x68b81afe), TOBN(0x018d12af, 0xd3c239d8)},
+      {TOBN(0x2b2c6208, 0x01206e15), TOBN(0xe0e42453, 0xa3b882c6),
+       TOBN(0x854470a3, 0xa50162d5), TOBN(0x08157478, 0x7017a62a)}},
+     {{TOBN(0x18bd3fb4, 0x820357c7), TOBN(0x992039ae, 0x6f1458ad),
+       TOBN(0x9a1df3c5, 0x25b44aa1), TOBN(0x2d780357, 0xed3d5281)},
+      {TOBN(0x58cf7e4d, 0xc77ad4d4), TOBN(0xd49a7998, 0xf9df4fc4),
+       TOBN(0x4465a8b5, 0x1d71205e), TOBN(0xa0ee0ea6, 0x649254aa)}},
+     {{TOBN(0x4b5eeecf, 0xab7bd771), TOBN(0x6c873073, 0x35c262b9),
+       TOBN(0xdc5bd648, 0x3c9d61e7), TOBN(0x233d6d54, 0x321460d2)},
+      {TOBN(0xd20c5626, 0xfc195bcc), TOBN(0x25445958, 0x04d78b63),
+       TOBN(0xe03fcb3d, 0x17ec8ef3), TOBN(0x54b690d1, 0x46b8f781)}},
+     {{TOBN(0x82fa2c8a, 0x21230646), TOBN(0xf51aabb9, 0x084f418c),
+       TOBN(0xff4fbec1, 0x1a30ba43), TOBN(0x6a5acf73, 0x743c9df7)},
+      {TOBN(0x1da2b357, 0xd635b4d5), TOBN(0xc3de68dd, 0xecd5c1da),
+       TOBN(0xa689080b, 0xd61af0dd), TOBN(0xdea5938a, 0xd665bf99)}},
+     {{TOBN(0x0231d71a, 0xfe637294), TOBN(0x01968aa6, 0xa5a81cd8),
+       TOBN(0x11252d50, 0x048e63b5), TOBN(0xc446bc52, 0x6ca007e9)},
+      {TOBN(0xef8c50a6, 0x96d6134b), TOBN(0x9361fbf5, 0x9e09a05c),
+       TOBN(0xf17f85a6, 0xdca3291a), TOBN(0xb178d548, 0xff251a21)}},
+     {{TOBN(0x87f6374b, 0xa4df3915), TOBN(0x566ce1bf, 0x2fd5d608),
+       TOBN(0x425cba4d, 0x7de35102), TOBN(0x6b745f8f, 0x58c5d5e2)},
+      {TOBN(0x88402af6, 0x63122edf), TOBN(0x3190f9ed, 0x3b989a89),
+       TOBN(0x4ad3d387, 0xebba3156), TOBN(0xef385ad9, 0xc7c469a5)}},
+     {{TOBN(0xb08281de, 0x3f642c29), TOBN(0x20be0888, 0x910ffb88),
+       TOBN(0xf353dd4a, 0xd5292546), TOBN(0x3f1627de, 0x8377a262)},
+      {TOBN(0xa5faa013, 0xeefcd638), TOBN(0x8f3bf626, 0x74cc77c3),
+       TOBN(0x32618f65, 0xa348f55e), TOBN(0x5787c0dc, 0x9fefeb9e)}},
+     {{TOBN(0xf1673aa2, 0xd9a23e44), TOBN(0x88dfa993, 0x4e10690d),
+       TOBN(0x1ced1b36, 0x2bf91108), TOBN(0x9193ceca, 0x3af48649)},
+      {TOBN(0xfb34327d, 0x2d738fc5), TOBN(0x6697b037, 0x975fee6c),
+       TOBN(0x2f485da0, 0xc04079a5), TOBN(0x2cdf5735, 0x2feaa1ac)}},
+     {{TOBN(0x76944420, 0xbd55659e), TOBN(0x7973e32b, 0x4376090c),
+       TOBN(0x86bb4fe1, 0x163b591a), TOBN(0x10441aed, 0xc196f0ca)},
+      {TOBN(0x3b431f4a, 0x045ad915), TOBN(0x6c11b437, 0xa4afacb1),
+       TOBN(0x30b0c7db, 0x71fdbbd8), TOBN(0xb642931f, 0xeda65acd)}},
+     {{TOBN(0x4baae6e8, 0x9c92b235), TOBN(0xa73bbd0e, 0x6b3993a1),
+       TOBN(0xd06d60ec, 0x693dd031), TOBN(0x03cab91b, 0x7156881c)},
+      {TOBN(0xd615862f, 0x1db3574b), TOBN(0x485b0185, 0x64bb061a),
+       TOBN(0x27434988, 0xa0181e06), TOBN(0x2cd61ad4, 0xc1c0c757)}},
+     {{TOBN(0x3effed5a, 0x2ff9f403), TOBN(0x8dc98d8b, 0x62239029),
+       TOBN(0x2206021e, 0x1f17b70d), TOBN(0xafbec0ca, 0xbf510015)},
+      {TOBN(0x9fed7164, 0x80130dfa), TOBN(0x306dc2b5, 0x8a02dcf5),
+       TOBN(0x48f06620, 0xfeb10fc0), TOBN(0x78d1e1d5, 0x5a57cf51)}},
+     {{TOBN(0xadef8c5a, 0x192ef710), TOBN(0x88afbd4b, 0x3b7431f9),
+       TOBN(0x7e1f7407, 0x64250c9e), TOBN(0x6e31318d, 0xb58bec07)},
+      {TOBN(0xfd4fc4b8, 0x24f89b4e), TOBN(0x65a5dd88, 0x48c36a2a),
+       TOBN(0x4f1eccff, 0xf024baa7), TOBN(0x22a21cf2, 0xcba94650)}},
+     {{TOBN(0x95d29dee, 0x42a554f7), TOBN(0x828983a5, 0x002ec4ba),
+       TOBN(0x8112a1f7, 0x8badb73d), TOBN(0x79ea8897, 0xa27c1839)},
+      {TOBN(0x8969a5a7, 0xd065fd83), TOBN(0xf49af791, 0xb262a0bc),
+       TOBN(0xfcdea8b6, 0xaf2b5127), TOBN(0x10e913e1, 0x564c2dbc)}},
+     {{TOBN(0x51239d14, 0xbc21ef51), TOBN(0xe51c3ceb, 0x4ce57292),
+       TOBN(0x795ff068, 0x47bbcc3b), TOBN(0x86b46e1e, 0xbd7e11e6)},
+      {TOBN(0x0ea6ba23, 0x80041ef4), TOBN(0xd72fe505, 0x6262342e),
+       TOBN(0x8abc6dfd, 0x31d294d4), TOBN(0xbbe017a2, 0x1278c2c9)}},
+     {{TOBN(0xb1fcfa09, 0xb389328a), TOBN(0x322fbc62, 0xd01771b5),
+       TOBN(0x04c0d063, 0x60b045bf), TOBN(0xdb652edc, 0x10e52d01)},
+      {TOBN(0x50ef932c, 0x03ec6627), TOBN(0xde1b3b2d, 0xc1ee50e3),
+       TOBN(0x5ab7bdc5, 0xdc37a90d), TOBN(0xfea67213, 0x31e33a96)}},
+     {{TOBN(0x6482b5cb, 0x4f2999aa), TOBN(0x38476cc6, 0xb8cbf0dd),
+       TOBN(0x93ebfacb, 0x173405bb), TOBN(0x15cdafe7, 0xe52369ec)},
+      {TOBN(0xd42d5ba4, 0xd935b7db), TOBN(0x648b6004, 0x1c99a4cd),
+       TOBN(0x785101bd, 0xa3b5545b), TOBN(0x4bf2c38a, 0x9dd67faf)}},
+     {{TOBN(0xb1aadc63, 0x4442449c), TOBN(0xe0e9921a, 0x33ad4fb8),
+       TOBN(0x5c552313, 0xaa686d82), TOBN(0xdee635fa, 0x465d866c)},
+      {TOBN(0xbc3c224a, 0x18ee6e8a), TOBN(0xeed748a6, 0xed42e02f),
+       TOBN(0xe70f930a, 0xd474cd08), TOBN(0x774ea6ec, 0xfff24adf)}},
+     {{TOBN(0x03e2de1c, 0xf3480d4a), TOBN(0xf0d8edc7, 0xbc8acf1a),
+       TOBN(0xf23e3303, 0x68295a9c), TOBN(0xfadd5f68, 0xc546a97d)},
+      {TOBN(0x895597ad, 0x96f8acb1), TOBN(0xbddd49d5, 0x671bdae2),
+       TOBN(0x16fcd528, 0x21dd43f4), TOBN(0xa5a45412, 0x6619141a)}}},
+    {{{TOBN(0x8ce9b6bf, 0xc360e25a), TOBN(0xe6425195, 0x075a1a78),
+       TOBN(0x9dc756a8, 0x481732f4), TOBN(0x83c0440f, 0x5432b57a)},
+      {TOBN(0xc670b3f1, 0xd720281f), TOBN(0x2205910e, 0xd135e051),
+       TOBN(0xded14b0e, 0xdb052be7), TOBN(0x697b3d27, 0xc568ea39)}},
+     {{TOBN(0x2e599b9a, 0xfb3ff9ed), TOBN(0x28c2e0ab, 0x17f6515c),
+       TOBN(0x1cbee4fd, 0x474da449), TOBN(0x071279a4, 0x4f364452)},
+      {TOBN(0x97abff66, 0x01fbe855), TOBN(0x3ee394e8, 0x5fda51c4),
+       TOBN(0x190385f6, 0x67597c0b), TOBN(0x6e9fccc6, 0xa27ee34b)}},
+     {{TOBN(0x0b89de93, 0x14092ebb), TOBN(0xf17256bd, 0x428e240c),
+       TOBN(0xcf89a7f3, 0x93d2f064), TOBN(0x4f57841e, 0xe1ed3b14)},
+      {TOBN(0x4ee14405, 0xe708d855), TOBN(0x856aae72, 0x03f1c3d0),
+       TOBN(0xc8e5424f, 0xbdd7eed5), TOBN(0x3333e4ef, 0x73ab4270)}},
+     {{TOBN(0x3bc77ade, 0xdda492f8), TOBN(0xc11a3aea, 0x78297205),
+       TOBN(0x5e89a3e7, 0x34931b4c), TOBN(0x17512e2e, 0x9f5694bb)},
+      {TOBN(0x5dc349f3, 0x177bf8b6), TOBN(0x232ea4ba, 0x08c7ff3e),
+       TOBN(0x9c4f9d16, 0xf511145d), TOBN(0xccf109a3, 0x33b379c3)}},
+     {{TOBN(0xe75e7a88, 0xa1f25897), TOBN(0x7ac6961f, 0xa1b5d4d8),
+       TOBN(0xe3e10773, 0x08f3ed5c), TOBN(0x208a54ec, 0x0a892dfb)},
+      {TOBN(0xbe826e19, 0x78660710), TOBN(0x0cf70a97, 0x237df2c8),
+       TOBN(0x418a7340, 0xed704da5), TOBN(0xa3eeb9a9, 0x08ca33fd)}},
+     {{TOBN(0x49d96233, 0x169bca96), TOBN(0x04d286d4, 0x2da6aafb),
+       TOBN(0xc09606ec, 0xa0c2fa94), TOBN(0x8869d0d5, 0x23ff0fb3)},
+      {TOBN(0xa99937e5, 0xd0150d65), TOBN(0xa92e2503, 0x240c14c9),
+       TOBN(0x656bf945, 0x108e2d49), TOBN(0x152a733a, 0xa2f59e2b)}},
+     {{TOBN(0xb4323d58, 0x8434a920), TOBN(0xc0af8e93, 0x622103c5),
+       TOBN(0x667518ef, 0x938dbf9a), TOBN(0xa1843073, 0x83a9cdf2)},
+      {TOBN(0x350a94aa, 0x5447ab80), TOBN(0xe5e5a325, 0xc75a3d61),
+       TOBN(0x74ba507f, 0x68411a9e), TOBN(0x10581fc1, 0x594f70c5)}},
+     {{TOBN(0x60e28570, 0x80eb24a9), TOBN(0x7bedfb4d, 0x488e0cfd),
+       TOBN(0x721ebbd7, 0xc259cdb8), TOBN(0x0b0da855, 0xbc6390a9)},
+      {TOBN(0x2b4d04db, 0xde314c70), TOBN(0xcdbf1fbc, 0x6c32e846),
+       TOBN(0x33833eab, 0xb162fc9e), TOBN(0x9939b48b, 0xb0dd3ab7)}},
+     {{TOBN(0x5aaa98a7, 0xcb0c9c8c), TOBN(0x75105f30, 0x81c4375c),
+       TOBN(0xceee5057, 0x5ef1c90f), TOBN(0xb31e065f, 0xc23a17bf)},
+      {TOBN(0x5364d275, 0xd4b6d45a), TOBN(0xd363f3ad, 0x62ec8996),
+       TOBN(0xb5d21239, 0x4391c65b), TOBN(0x84564765, 0xebb41b47)}},
+     {{TOBN(0x20d18ecc, 0x37107c78), TOBN(0xacff3b6b, 0x570c2a66),
+       TOBN(0x22f975d9, 0x9bd0d845), TOBN(0xef0a0c46, 0xba178fa0)},
+      {TOBN(0x1a419651, 0x76b6028e), TOBN(0xc49ec674, 0x248612d4),
+       TOBN(0x5b6ac4f2, 0x7338af55), TOBN(0x06145e62, 0x7bee5a36)}},
+     {{TOBN(0x33e95d07, 0xe75746b5), TOBN(0x1c1e1f6d, 0xc40c78be),
+       TOBN(0x967833ef, 0x222ff8e2), TOBN(0x4bedcf6a, 0xb49180ad)},
+      {TOBN(0x6b37e9c1, 0x3d7a4c8a), TOBN(0x2748887c, 0x6ddfe760),
+       TOBN(0xf7055123, 0xaa3a5bbc), TOBN(0x954ff225, 0x7bbb8e74)}},
+     {{TOBN(0xc42b8ab1, 0x97c3dfb9), TOBN(0x55a549b0, 0xcf168154),
+       TOBN(0xad6748e7, 0xc1b50692), TOBN(0x2775780f, 0x6fc5cbcb)},
+      {TOBN(0x4eab80b8, 0xe1c9d7c8), TOBN(0x8c69dae1, 0x3fdbcd56),
+       TOBN(0x47e6b4fb, 0x9969eace), TOBN(0x002f1085, 0xa705cb5a)}},
+     {{TOBN(0x4e23ca44, 0x6d3fea55), TOBN(0xb4ae9c86, 0xf4810568),
+       TOBN(0x47bfb91b, 0x2a62f27d), TOBN(0x60deb4c9, 0xd9bac28c)},
+      {TOBN(0xa892d894, 0x7de6c34c), TOBN(0x4ee68259, 0x4494587d),
+       TOBN(0x914ee14e, 0x1a3f8a5b), TOBN(0xbb113eaa, 0x28700385)}},
+     {{TOBN(0x81ca03b9, 0x2115b4c9), TOBN(0x7c163d38, 0x8908cad1),
+       TOBN(0xc912a118, 0xaa18179a), TOBN(0xe09ed750, 0x886e3081)},
+      {TOBN(0xa676e3fa, 0x26f516ca), TOBN(0x753cacf7, 0x8e732f91),
+       TOBN(0x51592aea, 0x833da8b4), TOBN(0xc626f42f, 0x4cbea8aa)}},
+     {{TOBN(0xef9dc899, 0xa7b56eaf), TOBN(0x00c0e52c, 0x34ef7316),
+       TOBN(0x5b1e4e24, 0xfe818a86), TOBN(0x9d31e20d, 0xc538be47)},
+      {TOBN(0x22eb932d, 0x3ed68974), TOBN(0xe44bbc08, 0x7c4e87c4),
+       TOBN(0x4121086e, 0x0dde9aef), TOBN(0x8e6b9cff, 0x134f4345)}},
+     {{TOBN(0x96892c1f, 0x711b0eb9), TOBN(0xb905f2c8, 0x780ab954),
+       TOBN(0xace26309, 0xa20792db), TOBN(0xec8ac9b3, 0x0684e126)},
+      {TOBN(0x486ad8b6, 0xb40a2447), TOBN(0x60121fc1, 0x9fe3fb24),
+       TOBN(0x5626fccf, 0x1a8e3b3f), TOBN(0x4e568622, 0x6ad1f394)}},
+     {{TOBN(0xda7aae0d, 0x196aa5a1), TOBN(0xe0df8c77, 0x1041b5fb),
+       TOBN(0x451465d9, 0x26b318b7), TOBN(0xc29b6e55, 0x7ab136e9)},
+      {TOBN(0x2c2ab48b, 0x71148463), TOBN(0xb5738de3, 0x64454a76),
+       TOBN(0x54ccf9a0, 0x5a03abe4), TOBN(0x377c0296, 0x0427d58e)}},
+     {{TOBN(0x73f5f0b9, 0x2bb39c1f), TOBN(0x14373f2c, 0xe608d8c5),
+       TOBN(0xdcbfd314, 0x00fbb805), TOBN(0xdf18fb20, 0x83afdcfb)},
+      {TOBN(0x81a57f42, 0x42b3523f), TOBN(0xe958532d, 0x87f650fb),
+       TOBN(0xaa8dc8b6, 0x8b0a7d7c), TOBN(0x1b75dfb7, 0x150166be)}},
+     {{TOBN(0x90e4f7c9, 0x2d7d1413), TOBN(0x67e2d6b5, 0x9834f597),
+       TOBN(0x4fd4f4f9, 0xa808c3e8), TOBN(0xaf8237e0, 0xd5281ec1)},
+      {TOBN(0x25ab5fdc, 0x84687cee), TOBN(0xc5ded6b1, 0xa5b26c09),
+       TOBN(0x8e4a5aec, 0xc8ea7650), TOBN(0x23b73e5c, 0x14cc417f)}},
+     {{TOBN(0x2bfb4318, 0x3037bf52), TOBN(0xb61e6db5, 0x78c725d7),
+       TOBN(0x8efd4060, 0xbbb3e5d7), TOBN(0x2e014701, 0xdbac488e)},
+      {TOBN(0xac75cf9a, 0x360aa449), TOBN(0xb70cfd05, 0x79634d08),
+       TOBN(0xa591536d, 0xfffb15ef), TOBN(0xb2c37582, 0xd07c106c)}},
+     {{TOBN(0xb4293fdc, 0xf50225f9), TOBN(0xc52e175c, 0xb0e12b03),
+       TOBN(0xf649c3ba, 0xd0a8bf64), TOBN(0x745a8fef, 0xeb8ae3c6)},
+      {TOBN(0x30d7e5a3, 0x58321bc3), TOBN(0xb1732be7, 0x0bc4df48),
+       TOBN(0x1f217993, 0xe9ea5058), TOBN(0xf7a71cde, 0x3e4fd745)}},
+     {{TOBN(0x86cc533e, 0x894c5bbb), TOBN(0x6915c7d9, 0x69d83082),
+       TOBN(0xa6aa2d05, 0x5815c244), TOBN(0xaeeee592, 0x49b22ce5)},
+      {TOBN(0x89e39d13, 0x78135486), TOBN(0x3a275c1f, 0x16b76f2f),
+       TOBN(0xdb6bcc1b, 0xe036e8f5), TOBN(0x4df69b21, 0x5e4709f5)}},
+     {{TOBN(0xa188b250, 0x2d0f39aa), TOBN(0x622118bb, 0x15a85947),
+       TOBN(0x2ebf520f, 0xfde0f4fa), TOBN(0xa40e9f29, 0x4860e539)},
+      {TOBN(0x7b6a51eb, 0x22b57f0f), TOBN(0x849a33b9, 0x7e80644a),
+       TOBN(0x50e5d16f, 0x1cf095fe), TOBN(0xd754b54e, 0xec55f002)}},
+     {{TOBN(0x5cfbbb22, 0x236f4a98), TOBN(0x0b0c59e9, 0x066800bb),
+       TOBN(0x4ac69a8f, 0x5a9a7774), TOBN(0x2b33f804, 0xd6bec948)},
+      {TOBN(0xb3729295, 0x32e6c466), TOBN(0x68956d0f, 0x4e599c73),
+       TOBN(0xa47a249f, 0x155c31cc), TOBN(0x24d80f0d, 0xe1ce284e)}},
+     {{TOBN(0xcd821dfb, 0x988baf01), TOBN(0xe6331a7d, 0xdbb16647),
+       TOBN(0x1eb8ad33, 0x094cb960), TOBN(0x593cca38, 0xc91bbca5)},
+      {TOBN(0x384aac8d, 0x26567456), TOBN(0x40fa0309, 0xc04b6490),
+       TOBN(0x97834cd6, 0xdab6c8f6), TOBN(0x68a7318d, 0x3f91e55f)}},
+     {{TOBN(0xa00fd04e, 0xfc4d3157), TOBN(0xb56f8ab2, 0x2bf3bdea),
+       TOBN(0x014f5648, 0x4fa57172), TOBN(0x948c5860, 0x450abdb3)},
+      {TOBN(0x342b5df0, 0x0ebd4f08), TOBN(0x3e5168cd, 0x0e82938e),
+       TOBN(0x7aedc1ce, 0xb0df5dd0), TOBN(0x6bbbc6d9, 0xe5732516)}},
+     {{TOBN(0xc7bfd486, 0x605daaa6), TOBN(0x46fd72b7, 0xbb9a6c9e),
+       TOBN(0xe4847fb1, 0xa124fb89), TOBN(0x75959cbd, 0xa2d8ffbc)},
+      {TOBN(0x42579f65, 0xc8a588ee), TOBN(0x368c92e6, 0xb80b499d),
+       TOBN(0xea4ef6cd, 0x999a5df1), TOBN(0xaa73bb7f, 0x936fe604)}},
+     {{TOBN(0xf347a70d, 0x6457d188), TOBN(0x86eda86b, 0x8b7a388b),
+       TOBN(0xb7cdff06, 0x0ccd6013), TOBN(0xbeb1b6c7, 0xd0053fb2)},
+      {TOBN(0x0b022387, 0x99240a9f), TOBN(0x1bbb384f, 0x776189b2),
+       TOBN(0x8695e71e, 0x9066193a), TOBN(0x2eb50097, 0x06ffac7e)}},
+     {{TOBN(0x0654a9c0, 0x4a7d2caa), TOBN(0x6f3fb3d1, 0xa5aaa290),
+       TOBN(0x835db041, 0xff476e8f), TOBN(0x540b8b0b, 0xc42295e4)},
+      {TOBN(0xa5c73ac9, 0x05e214f5), TOBN(0x9a74075a, 0x56a0b638),
+       TOBN(0x2e4b1090, 0xce9e680b), TOBN(0x57a5b479, 0x6b8d9afa)}},
+     {{TOBN(0x0dca48e7, 0x26bfe65c), TOBN(0x097e391c, 0x7290c307),
+       TOBN(0x683c462e, 0x6669e72e), TOBN(0xf505be1e, 0x062559ac)},
+      {TOBN(0x5fbe3ea1, 0xe3a3035a), TOBN(0x6431ebf6, 0x9cd50da8),
+       TOBN(0xfd169d5c, 0x1f6407f2), TOBN(0x8d838a95, 0x60fce6b8)}},
+     {{TOBN(0x2a2bfa7f, 0x650006f0), TOBN(0xdfd7dad3, 0x50c0fbb2),
+       TOBN(0x92452495, 0xccf9ad96), TOBN(0x183bf494, 0xd95635f9)},
+      {TOBN(0x02d5df43, 0x4a7bd989), TOBN(0x505385cc, 0xa5431095),
+       TOBN(0xdd98e67d, 0xfd43f53e), TOBN(0xd61e1a6c, 0x500c34a9)}},
+     {{TOBN(0x5a4b46c6, 0x4a8a3d62), TOBN(0x8469c4d0, 0x247743d2),
+       TOBN(0x2bb3a13d, 0x88f7e433), TOBN(0x62b23a10, 0x01be5849)},
+      {TOBN(0xe83596b4, 0xa63d1a4c), TOBN(0x454e7fea, 0x7d183f3e),
+       TOBN(0x643fce61, 0x17afb01c), TOBN(0x4e65e5e6, 0x1c4c3638)}},
+     {{TOBN(0x41d85ea1, 0xef74c45b), TOBN(0x2cfbfa66, 0xae328506),
+       TOBN(0x98b078f5, 0x3ada7da9), TOBN(0xd985fe37, 0xec752fbb)},
+      {TOBN(0xeece68fe, 0x5a0148b4), TOBN(0x6f9a55c7, 0x2d78136d),
+       TOBN(0x232dccc4, 0xd2b729ce), TOBN(0xa27e0dfd, 0x90aafbc4)}},
+     {{TOBN(0x96474452, 0x12b4603e), TOBN(0xa876c551, 0x6b706d14),
+       TOBN(0xdf145fcf, 0x69a9d412), TOBN(0xe2ab75b7, 0x2d479c34)},
+      {TOBN(0x12df9a76, 0x1a23ff97), TOBN(0xc6138992, 0x5d359d10),
+       TOBN(0x6e51c7ae, 0xfa835f22), TOBN(0x69a79cb1, 0xc0fcc4d9)}},
+     {{TOBN(0xf57f350d, 0x594cc7e1), TOBN(0x3079ca63, 0x3350ab79),
+       TOBN(0x226fb614, 0x9aff594a), TOBN(0x35afec02, 0x6d59a62b)},
+      {TOBN(0x9bee46f4, 0x06ed2c6e), TOBN(0x58da1735, 0x7d939a57),
+       TOBN(0x44c50402, 0x8fd1797e), TOBN(0xd8853e7c, 0x5ccea6ca)}},
+     {{TOBN(0x4065508d, 0xa35fcd5f), TOBN(0x8965df8c, 0x495ccaeb),
+       TOBN(0x0f2da850, 0x12e1a962), TOBN(0xee471b94, 0xc1cf1cc4)},
+      {TOBN(0xcef19bc8, 0x0a08fb75), TOBN(0x704958f5, 0x81de3591),
+       TOBN(0x2867f8b2, 0x3aef4f88), TOBN(0x8d749384, 0xea9f9a5f)}},
+     {{TOBN(0x1b385537, 0x8c9049f4), TOBN(0x5be948f3, 0x7b92d8b6),
+       TOBN(0xd96f725d, 0xb6e2bd6b), TOBN(0x37a222bc, 0x958c454d)},
+      {TOBN(0xe7c61abb, 0x8809bf61), TOBN(0x46f07fbc, 0x1346f18d),
+       TOBN(0xfb567a7a, 0xe87c0d1c), TOBN(0x84a461c8, 0x7ef3d07a)}},
+     {{TOBN(0x0a5adce6, 0xd9278d98), TOBN(0x24d94813, 0x9dfc73e1),
+       TOBN(0x4f3528b6, 0x054321c3), TOBN(0x2e03fdde, 0x692ea706)},
+      {TOBN(0x10e60619, 0x47b533c0), TOBN(0x1a8bc73f, 0x2ca3c055),
+       TOBN(0xae58d4b2, 0x1bb62b8f), TOBN(0xb2045a73, 0x584a24e3)}},
+     {{TOBN(0x3ab3d5af, 0xbd76e195), TOBN(0x478dd1ad, 0x6938a810),
+       TOBN(0x6ffab393, 0x6ee3d5cb), TOBN(0xdfb693db, 0x22b361e4)},
+      {TOBN(0xf9694496, 0x51dbf1a7), TOBN(0xcab4b4ef, 0x08a2e762),
+       TOBN(0xe8c92f25, 0xd39bba9a), TOBN(0x850e61bc, 0xf1464d96)}},
+     {{TOBN(0xb7e830e3, 0xdc09508b), TOBN(0xfaf6d2cf, 0x74317655),
+       TOBN(0x72606ceb, 0xdf690355), TOBN(0x48bb92b3, 0xd0c3ded6)},
+      {TOBN(0x65b75484, 0x5c7cf892), TOBN(0xf6cd7ac9, 0xd5d5f01f),
+       TOBN(0xc2c30a59, 0x96401d69), TOBN(0x91268650, 0xed921878)}},
+     {{TOBN(0x380bf913, 0xb78c558f), TOBN(0x43c0baeb, 0xc8afdaa9),
+       TOBN(0x377f61d5, 0x54f169d3), TOBN(0xf8da07e3, 0xae5ff20b)},
+      {TOBN(0xb676c49d, 0xa8a90ea8), TOBN(0x81c1ff2b, 0x83a29b21),
+       TOBN(0x383297ac, 0x2ad8d276), TOBN(0x3001122f, 0xba89f982)}},
+     {{TOBN(0xe1d794be, 0x6718e448), TOBN(0x246c1482, 0x7c3e6e13),
+       TOBN(0x56646ef8, 0x5d26b5ef), TOBN(0x80f5091e, 0x88069cdd)},
+      {TOBN(0xc5992e2f, 0x724bdd38), TOBN(0x02e915b4, 0x8471e8c7),
+       TOBN(0x96ff320a, 0x0d0ff2a9), TOBN(0xbf886487, 0x4384d1a0)}},
+     {{TOBN(0xbbe1e6a6, 0xc93f72d6), TOBN(0xd5f75d12, 0xcad800ea),
+       TOBN(0xfa40a09f, 0xe7acf117), TOBN(0x32c8cdd5, 0x7581a355)},
+      {TOBN(0x74221992, 0x7023c499), TOBN(0xa8afe5d7, 0x38ec3901),
+       TOBN(0x5691afcb, 0xa90e83f0), TOBN(0x41bcaa03, 0x0b8f8eac)}},
+     {{TOBN(0xe38b5ff9, 0x8d2668d5), TOBN(0x0715281a, 0x7ad81965),
+       TOBN(0x1bc8fc7c, 0x03c6ce11), TOBN(0xcbbee6e2, 0x8b650436)},
+      {TOBN(0x06b00fe8, 0x0cdb9808), TOBN(0x17d6e066, 0xfe3ed315),
+       TOBN(0x2e9d38c6, 0x4d0b5018), TOBN(0xab8bfd56, 0x844dcaef)}},
+     {{TOBN(0x42894a59, 0x513aed8b), TOBN(0xf77f3b6d, 0x314bd07a),
+       TOBN(0xbbdecb8f, 0x8e42b582), TOBN(0xf10e2fa8, 0xd2390fe6)},
+      {TOBN(0xefb95022, 0x62a2f201), TOBN(0x4d59ea50, 0x50ee32b0),
+       TOBN(0xd87f7728, 0x6da789a8), TOBN(0xcf98a2cf, 0xf79492c4)}},
+     {{TOBN(0xf9577239, 0x720943c2), TOBN(0xba044cf5, 0x3990b9d0),
+       TOBN(0x5aa8e823, 0x95f2884a), TOBN(0x834de6ed, 0x0278a0af)},
+      {TOBN(0xc8e1ee9a, 0x5f25bd12), TOBN(0x9259ceaa, 0x6f7ab271),
+       TOBN(0x7e6d97a2, 0x77d00b76), TOBN(0x5c0c6eea, 0xa437832a)}},
+     {{TOBN(0x5232c20f, 0x5606b81d), TOBN(0xabd7b375, 0x0d991ee5),
+       TOBN(0x4d2bfe35, 0x8632d951), TOBN(0x78f85146, 0x98ed9364)},
+      {TOBN(0x951873f0, 0xf30c3282), TOBN(0x0da8ac80, 0xa789230b),
+       TOBN(0x3ac7789c, 0x5398967f), TOBN(0xa69b8f7f, 0xbdda0fb5)}},
+     {{TOBN(0xe5db7717, 0x6add8545), TOBN(0x1b71cb66, 0x72c49b66),
+       TOBN(0xd8560739, 0x68421d77), TOBN(0x03840fe8, 0x83e3afea)},
+      {TOBN(0xb391dad5, 0x1ec69977), TOBN(0xae243fb9, 0x307f6726),
+       TOBN(0xc88ac87b, 0xe8ca160c), TOBN(0x5174cced, 0x4ce355f4)}},
+     {{TOBN(0x98a35966, 0xe58ba37d), TOBN(0xfdcc8da2, 0x7817335d),
+       TOBN(0x5b752830, 0x83fbc7bf), TOBN(0x68e419d4, 0xd9c96984)},
+      {TOBN(0x409a39f4, 0x02a40380), TOBN(0x88940faf, 0x1fe977bc),
+       TOBN(0xc640a94b, 0x8f8edea6), TOBN(0x1e22cd17, 0xed11547d)}},
+     {{TOBN(0xe28568ce, 0x59ffc3e2), TOBN(0x60aa1b55, 0xc1dee4e7),
+       TOBN(0xc67497c8, 0x837cb363), TOBN(0x06fb438a, 0x105a2bf2)},
+      {TOBN(0x30357ec4, 0x500d8e20), TOBN(0x1ad9095d, 0x0670db10),
+       TOBN(0x7f589a05, 0xc73b7cfd), TOBN(0xf544607d, 0x880d6d28)}},
+     {{TOBN(0x17ba93b1, 0xa20ef103), TOBN(0xad859130, 0x6ba6577b),
+       TOBN(0x65c91cf6, 0x6fa214a0), TOBN(0xd7d49c6c, 0x27990da5)},
+      {TOBN(0xecd9ec8d, 0x20bb569d), TOBN(0xbd4b2502, 0xeeffbc33),
+       TOBN(0x2056ca5a, 0x6bed0467), TOBN(0x7916a1f7, 0x5b63728c)}},
+     {{TOBN(0xd4f9497d, 0x53a4f566), TOBN(0x89734664, 0x97b56810),
+       TOBN(0xf8e1da74, 0x0494a621), TOBN(0x82546a93, 0x8d011c68)},
+      {TOBN(0x1f3acb19, 0xc61ac162), TOBN(0x52f8fa9c, 0xabad0d3e),
+       TOBN(0x15356523, 0xb4b7ea43), TOBN(0x5a16ad61, 0xae608125)}},
+     {{TOBN(0xb0bcb87f, 0x4faed184), TOBN(0x5f236b1d, 0x5029f45f),
+       TOBN(0xd42c7607, 0x0bc6b1fc), TOBN(0xc644324e, 0x68aefce3)},
+      {TOBN(0x8e191d59, 0x5c5d8446), TOBN(0xc0208077, 0x13ae1979),
+       TOBN(0xadcaee55, 0x3ba59cc7), TOBN(0x20ed6d6b, 0xa2cb81ba)}},
+     {{TOBN(0x0952ba19, 0xb6efcffc), TOBN(0x60f12d68, 0x97c0b87c),
+       TOBN(0x4ee2c7c4, 0x9caa30bc), TOBN(0x767238b7, 0x97fbff4e)},
+      {TOBN(0xebc73921, 0x501b5d92), TOBN(0x3279e3df, 0xc2a37737),
+       TOBN(0x9fc12bc8, 0x6d197543), TOBN(0xfa94dc6f, 0x0a40db4e)}},
+     {{TOBN(0x7392b41a, 0x530ccbbd), TOBN(0x87c82146, 0xea823525),
+       TOBN(0xa52f984c, 0x05d98d0c), TOBN(0x2ae57d73, 0x5ef6974c)},
+      {TOBN(0x9377f7bf, 0x3042a6dd), TOBN(0xb1a007c0, 0x19647a64),
+       TOBN(0xfaa9079a, 0x0cca9767), TOBN(0x3d81a25b, 0xf68f72d5)}},
+     {{TOBN(0x752067f8, 0xff81578e), TOBN(0x78622150, 0x9045447d),
+       TOBN(0xc0c22fcf, 0x0505aa6f), TOBN(0x1030f0a6, 0x6bed1c77)},
+      {TOBN(0x31f29f15, 0x1f0bd739), TOBN(0x2d7989c7, 0xe6debe85),
+       TOBN(0x5c070e72, 0x8e677e98), TOBN(0x0a817bd3, 0x06e81fd5)}},
+     {{TOBN(0xc110d830, 0xb0f2ac95), TOBN(0x48d0995a, 0xab20e64e),
+       TOBN(0x0f3e00e1, 0x7729cd9a), TOBN(0x2a570c20, 0xdd556946)},
+      {TOBN(0x912dbcfd, 0x4e86214d), TOBN(0x2d014ee2, 0xcf615498),
+       TOBN(0x55e2b1e6, 0x3530d76e), TOBN(0xc5135ae4, 0xfd0fd6d1)}},
+     {{TOBN(0x0066273a, 0xd4f3049f), TOBN(0xbb8e9893, 0xe7087477),
+       TOBN(0x2dba1ddb, 0x14c6e5fd), TOBN(0xdba37886, 0x51f57e6c)},
+      {TOBN(0x5aaee0a6, 0x5a72f2cf), TOBN(0x1208bfbf, 0x7bea5642),
+       TOBN(0xf5c6aa3b, 0x67872c37), TOBN(0xd726e083, 0x43f93224)}},
+     {{TOBN(0x1854daa5, 0x061f1658), TOBN(0xc0016df1, 0xdf0cd2b3),
+       TOBN(0xc2a3f23e, 0x833d50de), TOBN(0x73b681d2, 0xbbbd3017)},
+      {TOBN(0x2f046dc4, 0x3ac343c0), TOBN(0x9c847e7d, 0x85716421),
+       TOBN(0xe1e13c91, 0x0917eed4), TOBN(0x3fc9eebd, 0x63a1b9c6)}},
+     {{TOBN(0x0f816a72, 0x7fe02299), TOBN(0x6335ccc2, 0x294f3319),
+       TOBN(0x3820179f, 0x4745c5be), TOBN(0xe647b782, 0x922f066e)},
+      {TOBN(0xc22e49de, 0x02cafb8a), TOBN(0x299bc2ff, 0xfcc2eccc),
+       TOBN(0x9a8feea2, 0x6e0e8282), TOBN(0xa627278b, 0xfe893205)}},
+     {{TOBN(0xa7e19733, 0x7933e47b), TOBN(0xf4ff6b13, 0x2e766402),
+       TOBN(0xa4d8be0a, 0x98440d9f), TOBN(0x658f5c2f, 0x38938808)},
+      {TOBN(0x90b75677, 0xc95b3b3e), TOBN(0xfa044269, 0x3137b6ff),
+       TOBN(0x077b039b, 0x43c47c29), TOBN(0xcca95dd3, 0x8a6445b2)}},
+     {{TOBN(0x0b498ba4, 0x2333fc4c), TOBN(0x274f8e68, 0xf736a1b1),
+       TOBN(0x6ca348fd, 0x5f1d4b2e), TOBN(0x24d3be78, 0xa8f10199)},
+      {TOBN(0x8535f858, 0xca14f530), TOBN(0xa6e7f163, 0x5b982e51),
+       TOBN(0x847c8512, 0x36e1bf62), TOBN(0xf6a7c58e, 0x03448418)}},
+     {{TOBN(0x583f3703, 0xf9374ab6), TOBN(0x864f9195, 0x6e564145),
+       TOBN(0x33bc3f48, 0x22526d50), TOBN(0x9f323c80, 0x1262a496)},
+      {TOBN(0xaa97a7ae, 0x3f046a9a), TOBN(0x70da183e, 0xdf8a039a),
+       TOBN(0x5b68f71c, 0x52aa0ba6), TOBN(0x9be0fe51, 0x21459c2d)}},
+     {{TOBN(0xc1e17eb6, 0xcbc613e5), TOBN(0x33131d55, 0x497ea61c),
+       TOBN(0x2f69d39e, 0xaf7eded5), TOBN(0x73c2f434, 0xde6af11b)},
+      {TOBN(0x4ca52493, 0xa4a375fa), TOBN(0x5f06787c, 0xb833c5c2),
+       TOBN(0x814e091f, 0x3e6e71cf), TOBN(0x76451f57, 0x8b746666)}}},
+    {{{TOBN(0x80f9bdef, 0x694db7e0), TOBN(0xedca8787, 0xb9fcddc6),
+       TOBN(0x51981c34, 0x03b8dce1), TOBN(0x4274dcf1, 0x70e10ba1)},
+      {TOBN(0xf72743b8, 0x6def6d1a), TOBN(0xd25b1670, 0xebdb1866),
+       TOBN(0xc4491e8c, 0x050c6f58), TOBN(0x2be2b2ab, 0x87fbd7f5)}},
+     {{TOBN(0x3e0e5c9d, 0xd111f8ec), TOBN(0xbcc33f8d, 0xb7c4e760),
+       TOBN(0x702f9a91, 0xbd392a51), TOBN(0x7da4a795, 0xc132e92d)},
+      {TOBN(0x1a0b0ae3, 0x0bb1151b), TOBN(0x54febac8, 0x02e32251),
+       TOBN(0xea3a5082, 0x694e9e78), TOBN(0xe58ffec1, 0xe4fe40b8)}},
+     {{TOBN(0xf85592fc, 0xd1e0cf9e), TOBN(0xdea75f0d, 0xc0e7b2e8),
+       TOBN(0xc04215cf, 0xc135584e), TOBN(0x174fc727, 0x2f57092a)},
+      {TOBN(0xe7277877, 0xeb930bea), TOBN(0x504caccb, 0x5eb02a5a),
+       TOBN(0xf9fe08f7, 0xf5241b9b), TOBN(0xe7fb62f4, 0x8d5ca954)}},
+     {{TOBN(0xfbb8349d, 0x29c4120b), TOBN(0x9f94391f, 0xc0d0d915),
+       TOBN(0xc4074fa7, 0x5410ba51), TOBN(0xa66adbf6, 0x150a5911)},
+      {TOBN(0xc164543c, 0x34bfca38), TOBN(0xe0f27560, 0xb9e1ccfc),
+       TOBN(0x99da0f53, 0xe820219c), TOBN(0xe8234498, 0xc6b4997a)}},
+     {{TOBN(0xcfb88b76, 0x9d4c5423), TOBN(0x9e56eb10, 0xb0521c49),
+       TOBN(0x418e0b5e, 0xbe8700a1), TOBN(0x00cbaad6, 0xf93cb58a)},
+      {TOBN(0xe923fbde, 0xd92a5e67), TOBN(0xca4979ac, 0x1f347f11),
+       TOBN(0x89162d85, 0x6bc0585b), TOBN(0xdd6254af, 0xac3c70e3)}},
+     {{TOBN(0x7b23c513, 0x516e19e4), TOBN(0x56e2e847, 0xc5c4d593),
+       TOBN(0x9f727d73, 0x5ce71ef6), TOBN(0x5b6304a6, 0xf79a44c5)},
+      {TOBN(0x6638a736, 0x3ab7e433), TOBN(0x1adea470, 0xfe742f83),
+       TOBN(0xe054b854, 0x5b7fc19f), TOBN(0xf935381a, 0xba1d0698)}},
+     {{TOBN(0x546eab2d, 0x799e9a74), TOBN(0x96239e0e, 0xa949f729),
+       TOBN(0xca274c6b, 0x7090055a), TOBN(0x835142c3, 0x9020c9b0)},
+      {TOBN(0xa405667a, 0xa2e8807f), TOBN(0x29f2c085, 0x1aa3d39e),
+       TOBN(0xcc555d64, 0x42fc72f5), TOBN(0xe856e0e7, 0xfbeacb3c)}},
+     {{TOBN(0xb5504f9d, 0x918e4936), TOBN(0x65035ef6, 0xb2513982),
+       TOBN(0x0553a0c2, 0x6f4d9cb9), TOBN(0x6cb10d56, 0xbea85509)},
+      {TOBN(0x48d957b7, 0xa242da11), TOBN(0x16a4d3dd, 0x672b7268),
+       TOBN(0x3d7e637c, 0x8502a96b), TOBN(0x27c7032b, 0x730d463b)}},
+     {{TOBN(0xbdc02b18, 0xe4136a14), TOBN(0xbacf969d, 0x678e32bf),
+       TOBN(0xc98d89a3, 0xdd9c3c03), TOBN(0x7b92420a, 0x23becc4f)},
+      {TOBN(0xd4b41f78, 0xc64d565c), TOBN(0x9f969d00, 0x10f28295),
+       TOBN(0xec7f7f76, 0xb13d051a), TOBN(0x08945e1e, 0xa92da585)}},
+     {{TOBN(0x55366b7d, 0x5846426f), TOBN(0xe7d09e89, 0x247d441d),
+       TOBN(0x510b404d, 0x736fbf48), TOBN(0x7fa003d0, 0xe784bd7d)},
+      {TOBN(0x25f7614f, 0x17fd9596), TOBN(0x49e0e0a1, 0x35cb98db),
+       TOBN(0x2c65957b, 0x2e83a76a), TOBN(0x5d40da8d, 0xcddbe0f8)}},
+     {{TOBN(0xf2b8c405, 0x050bad24), TOBN(0x8918426d, 0xc2aa4823),
+       TOBN(0x2aeab3dd, 0xa38365a7), TOBN(0x72031717, 0x7c91b690)},
+      {TOBN(0x8b00d699, 0x60a94120), TOBN(0x478a255d, 0xe99eaeec),
+       TOBN(0xbf656a5f, 0x6f60aafd), TOBN(0xdfd7cb75, 0x5dee77b3)}},
+     {{TOBN(0x37f68bb4, 0xa595939d), TOBN(0x03556479, 0x28740217),
+       TOBN(0x8e740e7c, 0x84ad7612), TOBN(0xd89bc843, 0x9044695f)},
+      {TOBN(0xf7f3da5d, 0x85a9184d), TOBN(0x562563bb, 0x9fc0b074),
+       TOBN(0x06d2e6aa, 0xf88a888e), TOBN(0x612d8643, 0x161fbe7c)}},
+     {{TOBN(0x465edba7, 0xf64085e7), TOBN(0xb230f304, 0x29aa8511),
+       TOBN(0x53388426, 0xcda2d188), TOBN(0x90885735, 0x4b666649)},
+      {TOBN(0x6f02ff9a, 0x652f54f6), TOBN(0x65c82294, 0x5fae2bf0),
+       TOBN(0x7816ade0, 0x62f5eee3), TOBN(0xdcdbdf43, 0xfcc56d70)}},
+     {{TOBN(0x9fb3bba3, 0x54530bb2), TOBN(0xbde3ef77, 0xcb0869ea),
+       TOBN(0x89bc9046, 0x0b431163), TOBN(0x4d03d7d2, 0xe4819a35)},
+      {TOBN(0x33ae4f9e, 0x43b6a782), TOBN(0x216db307, 0x9c88a686),
+       TOBN(0x91dd88e0, 0x00ffedd9), TOBN(0xb280da9f, 0x12bd4840)}},
+     {{TOBN(0x32a7cb8a, 0x1635e741), TOBN(0xfe14008a, 0x78be02a7),
+       TOBN(0x3fafb334, 0x1b7ae030), TOBN(0x7fd508e7, 0x5add0ce9)},
+      {TOBN(0x72c83219, 0xd607ad51), TOBN(0x0f229c0a, 0x8d40964a),
+       TOBN(0x1be2c336, 0x1c878da2), TOBN(0xe0c96742, 0xeab2ab86)}},
+     {{TOBN(0x458f8691, 0x3e538cd7), TOBN(0xa7001f6c, 0x8e08ad53),
+       TOBN(0x52b8c6e6, 0xbf5d15ff), TOBN(0x548234a4, 0x011215dd)},
+      {TOBN(0xff5a9d2d, 0x3d5b4045), TOBN(0xb0ffeeb6, 0x4a904190),
+       TOBN(0x55a3aca4, 0x48607f8b), TOBN(0x8cbd665c, 0x30a0672a)}},
+     {{TOBN(0x87f834e0, 0x42583068), TOBN(0x02da2aeb, 0xf3f6e683),
+       TOBN(0x6b763e5d, 0x05c12248), TOBN(0x7230378f, 0x65a8aefc)},
+      {TOBN(0x93bd80b5, 0x71e8e5ca), TOBN(0x53ab041c, 0xb3b62524),
+       TOBN(0x1b860513, 0x6c9c552e), TOBN(0xe84d402c, 0xd5524e66)}},
+     {{TOBN(0xa37f3573, 0xf37f5937), TOBN(0xeb0f6c7d, 0xd1e4fca5),
+       TOBN(0x2965a554, 0xac8ab0fc), TOBN(0x17fbf56c, 0x274676ac)},
+      {TOBN(0x2e2f6bd9, 0xacf7d720), TOBN(0x41fc8f88, 0x10224766),
+       TOBN(0x517a14b3, 0x85d53bef), TOBN(0xdae327a5, 0x7d76a7d1)}},
+     {{TOBN(0x6ad0a065, 0xc4818267), TOBN(0x33aa189b, 0x37c1bbc1),
+       TOBN(0x64970b52, 0x27392a92), TOBN(0x21699a1c, 0x2d1535ea)},
+      {TOBN(0xcd20779c, 0xc2d7a7fd), TOBN(0xe3186059, 0x99c83cf2),
+       TOBN(0x9b69440b, 0x72c0b8c7), TOBN(0xa81497d7, 0x7b9e0e4d)}},
+     {{TOBN(0x515d5c89, 0x1f5f82dc), TOBN(0x9a7f67d7, 0x6361079e),
+       TOBN(0xa8da81e3, 0x11a35330), TOBN(0xe44990c4, 0x4b18be1b)},
+      {TOBN(0xc7d5ed95, 0xaf103e59), TOBN(0xece8aba7, 0x8dac9261),
+       TOBN(0xbe82b099, 0x9394b8d3), TOBN(0x6830f09a, 0x16adfe83)}},
+     {{TOBN(0x250a29b4, 0x88172d01), TOBN(0x8b20bd65, 0xcaff9e02),
+       TOBN(0xb8a7661e, 0xe8a6329a), TOBN(0x4520304d, 0xd3fce920)},
+      {TOBN(0xae45da1f, 0x2b47f7ef), TOBN(0xe07f5288, 0x5bffc540),
+       TOBN(0xf7997009, 0x3464f874), TOBN(0x2244c2cd, 0xa6fa1f38)}},
+     {{TOBN(0x43c41ac1, 0x94d7d9b1), TOBN(0x5bafdd82, 0xc82e7f17),
+       TOBN(0xdf0614c1, 0x5fda0fca), TOBN(0x74b043a7, 0xa8ae37ad)},
+      {TOBN(0x3ba6afa1, 0x9e71734c), TOBN(0x15d5437e, 0x9c450f2e),
+       TOBN(0x4a5883fe, 0x67e242b1), TOBN(0x5143bdc2, 0x2c1953c2)}},
+     {{TOBN(0x542b8b53, 0xfc5e8920), TOBN(0x363bf9a8, 0x9a9cee08),
+       TOBN(0x02375f10, 0xc3486e08), TOBN(0x2037543b, 0x8c5e70d2)},
+      {TOBN(0x7109bccc, 0x625640b4), TOBN(0xcbc1051e, 0x8bc62c3b),
+       TOBN(0xf8455fed, 0x803f26ea), TOBN(0x6badceab, 0xeb372424)}},
+     {{TOBN(0xa2a9ce7c, 0x6b53f5f9), TOBN(0x64246595, 0x1b176d99),
+       TOBN(0xb1298d36, 0xb95c081b), TOBN(0x53505bb8, 0x1d9a9ee6)},
+      {TOBN(0x3f6f9e61, 0xf2ba70b0), TOBN(0xd07e16c9, 0x8afad453),
+       TOBN(0x9f1694bb, 0xe7eb4a6a), TOBN(0xdfebced9, 0x3cb0bc8e)}},
+     {{TOBN(0x92d3dcdc, 0x53868c8b), TOBN(0x174311a2, 0x386107a6),
+       TOBN(0x4109e07c, 0x689b4e64), TOBN(0x30e4587f, 0x2df3dcb6)},
+      {TOBN(0x841aea31, 0x0811b3b2), TOBN(0x6144d41d, 0x0cce43ea),
+       TOBN(0x464c4581, 0x2a9a7803), TOBN(0xd03d371f, 0x3e158930)}},
+     {{TOBN(0xc676d7f2, 0xb1f3390b), TOBN(0x9f7a1b8c, 0xa5b61272),
+       TOBN(0x4ebebfc9, 0xc2e127a9), TOBN(0x4602500c, 0x5dd997bf)},
+      {TOBN(0x7f09771c, 0x4711230f), TOBN(0x058eb37c, 0x020f09c1),
+       TOBN(0xab693d4b, 0xfee5e38b), TOBN(0x9289eb1f, 0x4653cbc0)}},
+     {{TOBN(0xbecf46ab, 0xd51b9cf5), TOBN(0xd2aa9c02, 0x9f0121af),
+       TOBN(0x36aaf7d2, 0xe90dc274), TOBN(0x909e4ea0, 0x48b95a3c)},
+      {TOBN(0xe6b70496, 0x6f32dbdb), TOBN(0x672188a0, 0x8b030b3e),
+       TOBN(0xeeffe5b3, 0xcfb617e2), TOBN(0x87e947de, 0x7c82709e)}},
+     {{TOBN(0xa44d2b39, 0x1770f5a7), TOBN(0xe4d4d791, 0x0e44eb82),
+       TOBN(0x42e69d1e, 0x3f69712a), TOBN(0xbf11c4d6, 0xac6a820e)},
+      {TOBN(0xb5e7f3e5, 0x42c4224c), TOBN(0xd6b4e81c, 0x449d941c),
+       TOBN(0x5d72bd16, 0x5450e878), TOBN(0x6a61e28a, 0xee25ac54)}},
+     {{TOBN(0x33272094, 0xe6f1cd95), TOBN(0x7512f30d, 0x0d18673f),
+       TOBN(0x32f7a4ca, 0x5afc1464), TOBN(0x2f095656, 0x6bbb977b)},
+      {TOBN(0x586f47ca, 0xa8226200), TOBN(0x02c868ad, 0x1ac07369),
+       TOBN(0x4ef2b845, 0xc613acbe), TOBN(0x43d7563e, 0x0386054c)}},
+     {{TOBN(0x54da9dc7, 0xab952578), TOBN(0xb5423df2, 0x26e84d0b),
+       TOBN(0xa8b64eeb, 0x9b872042), TOBN(0xac205782, 0x5990f6df)},
+      {TOBN(0x4ff696eb, 0x21f4c77a), TOBN(0x1a79c3e4, 0xaab273af),
+       TOBN(0x29bc922e, 0x9436b3f1), TOBN(0xff807ef8, 0xd6d9a27a)}},
+     {{TOBN(0x82acea3d, 0x778f22a0), TOBN(0xfb10b2e8, 0x5b5e7469),
+       TOBN(0xc0b16980, 0x2818ee7d), TOBN(0x011afff4, 0xc91c1a2f)},
+      {TOBN(0x95a6d126, 0xad124418), TOBN(0x31c081a5, 0xe72e295f),
+       TOBN(0x36bb283a, 0xf2f4db75), TOBN(0xd115540f, 0x7acef462)}},
+     {{TOBN(0xc7f3a8f8, 0x33f6746c), TOBN(0x21e46f65, 0xfea990ca),
+       TOBN(0x915fd5c5, 0xcaddb0a9), TOBN(0xbd41f016, 0x78614555)},
+      {TOBN(0x346f4434, 0x426ffb58), TOBN(0x80559436, 0x14dbc204),
+       TOBN(0xf3dd20fe, 0x5a969b7f), TOBN(0x9d59e956, 0xe899a39a)}},
+     {{TOBN(0xf1b0971c, 0x8ad4cf4b), TOBN(0x03448860, 0x2ffb8fb8),
+       TOBN(0xf071ac3c, 0x65340ba4), TOBN(0x408d0596, 0xb27fd758)},
+      {TOBN(0xe7c78ea4, 0x98c364b0), TOBN(0xa4aac4a5, 0x051e8ab5),
+       TOBN(0xb9e1d560, 0x485d9002), TOBN(0x9acd518a, 0x88844455)}},
+     {{TOBN(0xe4ca688f, 0xd06f56c0), TOBN(0xa48af70d, 0xdf027972),
+       TOBN(0x691f0f04, 0x5e9a609d), TOBN(0xa9dd82cd, 0xee61270e)},
+      {TOBN(0x8903ca63, 0xa0ef18d3), TOBN(0x9fb7ee35, 0x3d6ca3bd),
+       TOBN(0xa7b4a09c, 0xabf47d03), TOBN(0x4cdada01, 0x1c67de8e)}},
+     {{TOBN(0x52003749, 0x9355a244), TOBN(0xe77fd2b6, 0x4f2151a9),
+       TOBN(0x695d6cf6, 0x66b4efcb), TOBN(0xc5a0cacf, 0xda2cfe25)},
+      {TOBN(0x104efe5c, 0xef811865), TOBN(0xf52813e8, 0x9ea5cc3d),
+       TOBN(0x855683dc, 0x40b58dbc), TOBN(0x0338ecde, 0x175fcb11)}},
+     {{TOBN(0xf9a05637, 0x74921592), TOBN(0xb4f1261d, 0xb9bb9d31),
+       TOBN(0x551429b7, 0x4e9c5459), TOBN(0xbe182e6f, 0x6ea71f53)},
+      {TOBN(0xd3a3b07c, 0xdfc50573), TOBN(0x9ba1afda, 0x62be8d44),
+       TOBN(0x9bcfd2cb, 0x52ab65d3), TOBN(0xdf11d547, 0xa9571802)}},
+     {{TOBN(0x099403ee, 0x02a2404a), TOBN(0x497406f4, 0x21088a71),
+       TOBN(0x99479409, 0x5004ae71), TOBN(0xbdb42078, 0xa812c362)},
+      {TOBN(0x2b72a30f, 0xd8828442), TOBN(0x283add27, 0xfcb5ed1c),
+       TOBN(0xf7c0e200, 0x66a40015), TOBN(0x3e3be641, 0x08b295ef)}},
+     {{TOBN(0xac127dc1, 0xe038a675), TOBN(0x729deff3, 0x8c5c6320),
+       TOBN(0xb7df8fd4, 0xa90d2c53), TOBN(0x9b74b0ec, 0x681e7cd3)},
+      {TOBN(0x5cb5a623, 0xdab407e5), TOBN(0xcdbd3615, 0x76b340c6),
+       TOBN(0xa184415a, 0x7d28392c), TOBN(0xc184c1d8, 0xe96f7830)}},
+     {{TOBN(0xc3204f19, 0x81d3a80f), TOBN(0xfde0c841, 0xc8e02432),
+       TOBN(0x78203b3e, 0x8149e0c1), TOBN(0x5904bdbb, 0x08053a73)},
+      {TOBN(0x30fc1dd1, 0x101b6805), TOBN(0x43c223bc, 0x49aa6d49),
+       TOBN(0x9ed67141, 0x7a174087), TOBN(0x311469a0, 0xd5997008)}},
+     {{TOBN(0xb189b684, 0x5e43fc61), TOBN(0xf3282375, 0xe0d3ab57),
+       TOBN(0x4fa34b67, 0xb1181da8), TOBN(0x621ed0b2, 0x99ee52b8)},
+      {TOBN(0x9b178de1, 0xad990676), TOBN(0xd51de67b, 0x56d54065),
+       TOBN(0x2a2c27c4, 0x7538c201), TOBN(0x33856ec8, 0x38a40f5c)}},
+     {{TOBN(0x2522fc15, 0xbe6cdcde), TOBN(0x1e603f33, 0x9f0c6f89),
+       TOBN(0x7994edc3, 0x103e30a6), TOBN(0x033a00db, 0x220c853e)},
+      {TOBN(0xd3cfa409, 0xf7bb7fd7), TOBN(0x70f8781e, 0x462d18f6),
+       TOBN(0xbbd82980, 0x687fe295), TOBN(0x6eef4c32, 0x595669f3)}},
+     {{TOBN(0x86a9303b, 0x2f7e85c3), TOBN(0x5fce4621, 0x71988f9b),
+       TOBN(0x5b935bf6, 0xc138acb5), TOBN(0x30ea7d67, 0x25661212)},
+      {TOBN(0xef1eb5f4, 0xe51ab9a2), TOBN(0x0587c98a, 0xae067c78),
+       TOBN(0xb3ce1b3c, 0x77ca9ca6), TOBN(0x2a553d4d, 0x54b5f057)}},
+     {{TOBN(0xc7898236, 0x4da29ec2), TOBN(0xdbdd5d13, 0xb9c57316),
+       TOBN(0xc57d6e6b, 0x2cd80d47), TOBN(0x80b460cf, 0xfe9e7391)},
+      {TOBN(0x98648cab, 0xf963c31e), TOBN(0x67f9f633, 0xcc4d32fd),
+       TOBN(0x0af42a9d, 0xfdf7c687), TOBN(0x55f292a3, 0x0b015ea7)}},
+     {{TOBN(0x89e468b2, 0xcd21ab3d), TOBN(0xe504f022, 0xc393d392),
+       TOBN(0xab21e1d4, 0xa5013af9), TOBN(0xe3283f78, 0xc2c28acb)},
+      {TOBN(0xf38b35f6, 0x226bf99f), TOBN(0xe8354274, 0x0e291e69),
+       TOBN(0x61673a15, 0xb20c162d), TOBN(0xc101dc75, 0xb04fbdbe)}},
+     {{TOBN(0x8323b4c2, 0x255bd617), TOBN(0x6c969693, 0x6c2a9154),
+       TOBN(0xc6e65860, 0x62679387), TOBN(0x8e01db0c, 0xb8c88e23)},
+      {TOBN(0x33c42873, 0x893a5559), TOBN(0x7630f04b, 0x47a3e149),
+       TOBN(0xb5d80805, 0xddcf35f8), TOBN(0x582ca080, 0x77dfe732)}},
+     {{TOBN(0x2c7156e1, 0x0b1894a0), TOBN(0x92034001, 0xd81c68c0),
+       TOBN(0xed225d00, 0xc8b115b5), TOBN(0x237f9c22, 0x83b907f2)},
+      {TOBN(0x0ea2f32f, 0x4470e2c0), TOBN(0xb725f7c1, 0x58be4e95),
+       TOBN(0x0f1dcafa, 0xb1ae5463), TOBN(0x59ed5187, 0x1ba2fc04)}},
+     {{TOBN(0xf6e0f316, 0xd0115d4d), TOBN(0x5180b12f, 0xd3691599),
+       TOBN(0x157e32c9, 0x527f0a41), TOBN(0x7b0b081d, 0xa8e0ecc0)},
+      {TOBN(0x6dbaaa8a, 0xbf4f0dd0), TOBN(0x99b289c7, 0x4d252696),
+       TOBN(0x79b7755e, 0xdbf864fe), TOBN(0x6974e2b1, 0x76cad3ab)}},
+     {{TOBN(0x35dbbee2, 0x06ddd657), TOBN(0xe7cbdd11, 0x2ff3a96d),
+       TOBN(0x88381968, 0x076be758), TOBN(0x2d737e72, 0x08c91f5d)},
+      {TOBN(0x5f83ab62, 0x86ec3776), TOBN(0x98aa649d, 0x945fa7a1),
+       TOBN(0xf477ec37, 0x72ef0933), TOBN(0x66f52b1e, 0x098c17b1)}},
+     {{TOBN(0x9eec58fb, 0xd803738b), TOBN(0x91aaade7, 0xe4e86aa4),
+       TOBN(0x6b1ae617, 0xa5b51492), TOBN(0x63272121, 0xbbc45974)},
+      {TOBN(0x7e0e28f0, 0x862c5129), TOBN(0x0a8f79a9, 0x3321a4a0),
+       TOBN(0xe26d1664, 0x5041c88f), TOBN(0x0571b805, 0x53233e3a)}},
+     {{TOBN(0xd1b0ccde, 0xc9520711), TOBN(0x55a9e4ed, 0x3c8b84bf),
+       TOBN(0x9426bd39, 0xa1fef314), TOBN(0x4f5f638e, 0x6eb93f2b)},
+      {TOBN(0xba2a1ed3, 0x2bf9341b), TOBN(0xd63c1321, 0x4d42d5a9),
+       TOBN(0xd2964a89, 0x316dc7c5), TOBN(0xd1759606, 0xca511851)}},
+     {{TOBN(0xd8a9201f, 0xf9e6ed35), TOBN(0xb7b5ee45, 0x6736925a),
+       TOBN(0x0a83fbbc, 0x99581af7), TOBN(0x3076bc40, 0x64eeb051)},
+      {TOBN(0x5511c98c, 0x02dec312), TOBN(0x270de898, 0x238dcb78),
+       TOBN(0x2cf4cf9c, 0x539c08c9), TOBN(0xa70cb65e, 0x38d3b06e)}},
+     {{TOBN(0xb12ec10e, 0xcfe57bbd), TOBN(0x82c7b656, 0x35a0c2b5),
+       TOBN(0xddc7d5cd, 0x161c67bd), TOBN(0xe32e8985, 0xae3a32cc)},
+      {TOBN(0x7aba9444, 0xd11a5529), TOBN(0xe964ed02, 0x2427fa1a),
+       TOBN(0x1528392d, 0x24a1770a), TOBN(0xa152ce2c, 0x12c72fcd)}},
+     {{TOBN(0x714553a4, 0x8ec07649), TOBN(0x18b4c290, 0x459dd453),
+       TOBN(0xea32b714, 0x7b64b110), TOBN(0xb871bfa5, 0x2e6f07a2)},
+      {TOBN(0xb67112e5, 0x9e2e3c9b), TOBN(0xfbf250e5, 0x44aa90f6),
+       TOBN(0xf77aedb8, 0xbd539006), TOBN(0x3b0cdf9a, 0xd172a66f)}},
+     {{TOBN(0xedf69fea, 0xf8c51187), TOBN(0x05bb67ec, 0x741e4da7),
+       TOBN(0x47df0f32, 0x08114345), TOBN(0x56facb07, 0xbb9792b1)},
+      {TOBN(0xf3e007e9, 0x8f6229e4), TOBN(0x62d103f4, 0x526fba0f),
+       TOBN(0x4f33bef7, 0xb0339d79), TOBN(0x9841357b, 0xb59bfec1)}},
+     {{TOBN(0xfa8dbb59, 0xc34e6705), TOBN(0xc3c7180b, 0x7fdaa84c),
+       TOBN(0xf95872fc, 0xa4108537), TOBN(0x8750cc3b, 0x932a3e5a)},
+      {TOBN(0xb61cc69d, 0xb7275d7d), TOBN(0xffa0168b, 0x2e59b2e9),
+       TOBN(0xca032abc, 0x6ecbb493), TOBN(0x1d86dbd3, 0x2c9082d8)}},
+     {{TOBN(0xae1e0b67, 0xe28ef5ba), TOBN(0x2c9a4699, 0xcb18e169),
+       TOBN(0x0ecd0e33, 0x1e6bbd20), TOBN(0x571b360e, 0xaf5e81d2)},
+      {TOBN(0xcd9fea58, 0x101c1d45), TOBN(0x6651788e, 0x18880452),
+       TOBN(0xa9972635, 0x1f8dd446), TOBN(0x44bed022, 0xe37281d0)}},
+     {{TOBN(0x094b2b2d, 0x33da525d), TOBN(0xf193678e, 0x13144fd8),
+       TOBN(0xb8ab5ba4, 0xf4c1061d), TOBN(0x4343b5fa, 0xdccbe0f4)},
+      {TOBN(0xa8702371, 0x63812713), TOBN(0x47bf6d2d, 0xf7611d93),
+       TOBN(0x46729b8c, 0xbd21e1d7), TOBN(0x7484d4e0, 0xd629e77d)}},
+     {{TOBN(0x830e6eea, 0x60dbac1f), TOBN(0x23d8c484, 0xda06a2f7),
+       TOBN(0x896714b0, 0x50ca535b), TOBN(0xdc8d3644, 0xebd97a9b)},
+      {TOBN(0x106ef9fa, 0xb12177b4), TOBN(0xf79bf464, 0x534d5d9c),
+       TOBN(0x2537a349, 0xa6ab360b), TOBN(0xc7c54253, 0xa00c744f)}},
+     {{TOBN(0xb3c7a047, 0xe5911a76), TOBN(0x61ffa5c8, 0x647f1ee7),
+       TOBN(0x15aed36f, 0x8f56ab42), TOBN(0x6a0d41b0, 0xa3ff9ac9)},
+      {TOBN(0x68f469f5, 0xcc30d357), TOBN(0xbe9adf81, 0x6b72be96),
+       TOBN(0x1cd926fe, 0x903ad461), TOBN(0x7e89e38f, 0xcaca441b)}},
+     {{TOBN(0xf0f82de5, 0xfacf69d4), TOBN(0x363b7e76, 0x4775344c),
+       TOBN(0x6894f312, 0xb2e36d04), TOBN(0x3c6cb4fe, 0x11d1c9a5)},
+      {TOBN(0x85d9c339, 0x4008e1f2), TOBN(0x5e9a85ea, 0x249f326c),
+       TOBN(0xdc35c60a, 0x678c5e06), TOBN(0xc08b944f, 0x9f86fba9)}},
+     {{TOBN(0xde40c02c, 0x89f71f0f), TOBN(0xad8f3e31, 0xff3da3c0),
+       TOBN(0x3ea5096b, 0x42125ded), TOBN(0x13879cbf, 0xa7379183)},
+      {TOBN(0x6f4714a5, 0x6b306a0b), TOBN(0x359c2ea6, 0x67646c5e),
+       TOBN(0xfacf8943, 0x07726368), TOBN(0x07a58935, 0x65ff431e)}},
+     {{TOBN(0x24d661d1, 0x68754ab0), TOBN(0x801fce1d, 0x6f429a76),
+       TOBN(0xc068a85f, 0xa58ce769), TOBN(0xedc35c54, 0x5d5eca2b)},
+      {TOBN(0xea31276f, 0xa3f660d1), TOBN(0xa0184ebe, 0xb8fc7167),
+       TOBN(0x0f20f21a, 0x1d8db0ae), TOBN(0xd96d095f, 0x56c35e12)}},
+     {{TOBN(0xedf402b5, 0xf8c2a25b), TOBN(0x1bb772b9, 0x059204b6),
+       TOBN(0x50cbeae2, 0x19b4e34c), TOBN(0x93109d80, 0x3fa0845a)},
+      {TOBN(0x54f7ccf7, 0x8ef59fb5), TOBN(0x3b438fe2, 0x88070963),
+       TOBN(0x9e28c659, 0x31f3ba9b), TOBN(0x9cc31b46, 0xead9da92)}},
+     {{TOBN(0x3c2f0ba9, 0xb733aa5f), TOBN(0xdece47cb, 0xf05af235),
+       TOBN(0xf8e3f715, 0xa2ac82a5), TOBN(0xc97ba641, 0x2203f18a)},
+      {TOBN(0xc3af5504, 0x09c11060), TOBN(0x56ea2c05, 0x46af512d),
+       TOBN(0xfac28daf, 0xf3f28146), TOBN(0x87fab43a, 0x959ef494)}}},
+    {{{TOBN(0x09891641, 0xd4c5105f), TOBN(0x1ae80f8e, 0x6d7fbd65),
+       TOBN(0x9d67225f, 0xbee6bdb0), TOBN(0x3b433b59, 0x7fc4d860)},
+      {TOBN(0x44e66db6, 0x93e85638), TOBN(0xf7b59252, 0xe3e9862f),
+       TOBN(0xdb785157, 0x665c32ec), TOBN(0x702fefd7, 0xae362f50)}},
+     {{TOBN(0x3754475d, 0x0fefb0c3), TOBN(0xd48fb56b, 0x46d7c35d),
+       TOBN(0xa070b633, 0x363798a4), TOBN(0xae89f3d2, 0x8fdb98e6)},
+      {TOBN(0x970b89c8, 0x6363d14c), TOBN(0x89817521, 0x67abd27d),
+       TOBN(0x9bf7d474, 0x44d5a021), TOBN(0xb3083baf, 0xcac72aee)}},
+     {{TOBN(0x389741de, 0xbe949a44), TOBN(0x638e9388, 0x546a4fa5),
+       TOBN(0x3fe6419c, 0xa0047bdc), TOBN(0x7047f648, 0xaaea57ca)},
+      {TOBN(0x54e48a90, 0x41fbab17), TOBN(0xda8e0b28, 0x576bdba2),
+       TOBN(0xe807eebc, 0xc72afddc), TOBN(0x07d3336d, 0xf42577bf)}},
+     {{TOBN(0x62a8c244, 0xbfe20925), TOBN(0x91c19ac3, 0x8fdce867),
+       TOBN(0x5a96a5d5, 0xdd387063), TOBN(0x61d587d4, 0x21d324f6)},
+      {TOBN(0xe87673a2, 0xa37173ea), TOBN(0x23848008, 0x53778b65),
+       TOBN(0x10f8441e, 0x05bab43e), TOBN(0xfa11fe12, 0x4621efbe)}},
+     {{TOBN(0x047b772e, 0x81685d7b), TOBN(0x23f27d81, 0xbf34a976),
+       TOBN(0xc27608e2, 0x915f48ef), TOBN(0x3b0b43fa, 0xa521d5c3)},
+      {TOBN(0x7613fb26, 0x63ca7284), TOBN(0x7f5729b4, 0x1d4db837),
+       TOBN(0x87b14898, 0x583b526b), TOBN(0x00b732a6, 0xbbadd3d1)}},
+     {{TOBN(0x8e02f426, 0x2048e396), TOBN(0x436b50b6, 0x383d9de4),
+       TOBN(0xf78d3481, 0x471e85ad), TOBN(0x8b01ea6a, 0xd005c8d6)},
+      {TOBN(0xd3c7afee, 0x97015c07), TOBN(0x46cdf1a9, 0x4e3ba2ae),
+       TOBN(0x7a42e501, 0x83d3a1d2), TOBN(0xd54b5268, 0xb541dff4)}},
+     {{TOBN(0x3f24cf30, 0x4e23e9bc), TOBN(0x4387f816, 0x126e3624),
+       TOBN(0x26a46a03, 0x3b0b6d61), TOBN(0xaf1bc845, 0x8b2d777c)},
+      {TOBN(0x25c401ba, 0x527de79c), TOBN(0x0e1346d4, 0x4261bbb6),
+       TOBN(0x4b96c44b, 0x287b4bc7), TOBN(0x658493c7, 0x5254562f)}},
+     {{TOBN(0x23f949fe, 0xb8a24a20), TOBN(0x17ebfed1, 0xf52ca53f),
+       TOBN(0x9b691bbe, 0xbcfb4853), TOBN(0x5617ff6b, 0x6278a05d)},
+      {TOBN(0x241b34c5, 0xe3c99ebd), TOBN(0xfc64242e, 0x1784156a),
+       TOBN(0x4206482f, 0x695d67df), TOBN(0xb967ce0e, 0xee27c011)}},
+     {{TOBN(0x65db3751, 0x21c80b5d), TOBN(0x2e7a563c, 0xa31ecca0),
+       TOBN(0xe56ffc4e, 0x5238a07e), TOBN(0x3d6c2966, 0x32ced854)},
+      {TOBN(0xe99d7d1a, 0xaf70b885), TOBN(0xafc3bad9, 0x2d686459),
+       TOBN(0x9c78bf46, 0x0cc8ba5b), TOBN(0x5a439519, 0x18955aa3)}},
+     {{TOBN(0xf8b517a8, 0x5fe4e314), TOBN(0xe60234d0, 0xfcb8906f),
+       TOBN(0xffe542ac, 0xf2061b23), TOBN(0x287e191f, 0x6b4cb59c)},
+      {TOBN(0x21857ddc, 0x09d877d8), TOBN(0x1c23478c, 0x14678941),
+       TOBN(0xbbf0c056, 0xb6e05ea4), TOBN(0x82da4b53, 0xb01594fe)}},
+     {{TOBN(0xf7526791, 0xfadb8608), TOBN(0x049e832d, 0x7b74cdf6),
+       TOBN(0xa43581cc, 0xc2b90a34), TOBN(0x73639eb8, 0x9360b10c)},
+      {TOBN(0x4fba331f, 0xe1e4a71b), TOBN(0x6ffd6b93, 0x8072f919),
+       TOBN(0x6e53271c, 0x65679032), TOBN(0x67206444, 0xf14272ce)}},
+     {{TOBN(0xc0f734a3, 0xb2335834), TOBN(0x9526205a, 0x90ef6860),
+       TOBN(0xcb8be717, 0x04e2bb0d), TOBN(0x2418871e, 0x02f383fa)},
+      {TOBN(0xd7177681, 0x4082c157), TOBN(0xcc914ad0, 0x29c20073),
+       TOBN(0xf186c1eb, 0xe587e728), TOBN(0x6fdb3c22, 0x61bcd5fd)}},
+     {{TOBN(0x30d014a6, 0xf2f9f8e9), TOBN(0x963ece23, 0x4fec49d2),
+       TOBN(0x862025c5, 0x9605a8d9), TOBN(0x39874445, 0x19f8929a)},
+      {TOBN(0x01b6ff65, 0x12bf476a), TOBN(0x598a64d8, 0x09cf7d91),
+       TOBN(0xd7ec7749, 0x93be56ca), TOBN(0x10899785, 0xcbb33615)}},
+     {{TOBN(0xb8a092fd, 0x02eee3ad), TOBN(0xa86b3d35, 0x30145270),
+       TOBN(0x323d98c6, 0x8512b675), TOBN(0x4b8bc785, 0x62ebb40f)},
+      {TOBN(0x7d301f54, 0x413f9cde), TOBN(0xa5e4fb4f, 0x2bab5664),
+       TOBN(0x1d2b252d, 0x1cbfec23), TOBN(0xfcd576bb, 0xe177120d)}},
+     {{TOBN(0x04427d3e, 0x83731a34), TOBN(0x2bb9028e, 0xed836e8e),
+       TOBN(0xb36acff8, 0xb612ca7c), TOBN(0xb88fe5ef, 0xd3d9c73a)},
+      {TOBN(0xbe2a6bc6, 0xedea4eb3), TOBN(0x43b93133, 0x488eec77),
+       TOBN(0xf41ff566, 0xb17106e1), TOBN(0x469e9172, 0x654efa32)}},
+     {{TOBN(0xb4480f04, 0x41c23fa3), TOBN(0xb4712eb0, 0xc1989a2e),
+       TOBN(0x3ccbba0f, 0x93a29ca7), TOBN(0x6e205c14, 0xd619428c)},
+      {TOBN(0x90db7957, 0xb3641686), TOBN(0x0432691d, 0x45ac8b4e),
+       TOBN(0x07a759ac, 0xf64e0350), TOBN(0x0514d89c, 0x9c972517)}},
+     {{TOBN(0x1701147f, 0xa8e67fc3), TOBN(0x9e2e0b8b, 0xab2085be),
+       TOBN(0xd5651824, 0xac284e57), TOBN(0x890d4325, 0x74893664)},
+      {TOBN(0x8a7c5e6e, 0xc55e68a3), TOBN(0xbf12e90b, 0x4339c85a),
+       TOBN(0x31846b85, 0xf922b655), TOBN(0x9a54ce4d, 0x0bf4d700)}},
+     {{TOBN(0xd7f4e83a, 0xf1a14295), TOBN(0x916f955c, 0xb285d4f9),
+       TOBN(0xe57bb0e0, 0x99ffdaba), TOBN(0x28a43034, 0xeab0d152)},
+      {TOBN(0x0a36ffa2, 0xb8a9cef8), TOBN(0x5517407e, 0xb9ec051a),
+       TOBN(0x9c796096, 0xea68e672), TOBN(0x853db5fb, 0xfb3c77fb)}},
+     {{TOBN(0x21474ba9, 0xe864a51a), TOBN(0x6c267699, 0x6e8a1b8b),
+       TOBN(0x7c823626, 0x94120a28), TOBN(0xe61e9a48, 0x8383a5db)},
+      {TOBN(0x7dd75003, 0x9f84216d), TOBN(0xab020d07, 0xad43cd85),
+       TOBN(0x9437ae48, 0xda12c659), TOBN(0x6449c2eb, 0xe65452ad)}},
+     {{TOBN(0xcc7c4c1c, 0x2cf9d7c1), TOBN(0x1320886a, 0xee95e5ab),
+       TOBN(0xbb7b9056, 0xbeae170c), TOBN(0xc8a5b250, 0xdbc0d662)},
+      {TOBN(0x4ed81432, 0xc11d2303), TOBN(0x7da66912, 0x1f03769f),
+       TOBN(0x3ac7a5fd, 0x84539828), TOBN(0x14dada94, 0x3bccdd02)}},
+     {{TOBN(0x8b84c321, 0x7ef6b0d1), TOBN(0x52a9477a, 0x7c933f22),
+       TOBN(0x5ef6728a, 0xfd440b82), TOBN(0x5c3bd859, 0x6ce4bd5e)},
+      {TOBN(0x918b80f5, 0xf22c2d3e), TOBN(0x368d5040, 0xb7bb6cc5),
+       TOBN(0xb66142a1, 0x2695a11c), TOBN(0x60ac583a, 0xeb19ea70)}},
+     {{TOBN(0x317cbb98, 0x0eab2437), TOBN(0x8cc08c55, 0x5e2654c8),
+       TOBN(0xfe2d6520, 0xe6d8307f), TOBN(0xe9f147f3, 0x57428993)},
+      {TOBN(0x5f9c7d14, 0xd2fd6cf1), TOBN(0xa3ecd064, 0x2d4fcbb0),
+       TOBN(0xad83fef0, 0x8e7341f7), TOBN(0x643f23a0, 0x3a63115c)}},
+     {{TOBN(0xd38a78ab, 0xe65ab743), TOBN(0xbf7c75b1, 0x35edc89c),
+       TOBN(0x3dd8752e, 0x530df568), TOBN(0xf85c4a76, 0xe308c682)},
+      {TOBN(0x4c9955b2, 0xe68acf37), TOBN(0xa544df3d, 0xab32af85),
+       TOBN(0x4b8ec3f5, 0xa25cf493), TOBN(0x4d8f2764, 0x1a622feb)}},
+     {{TOBN(0x7bb4f7aa, 0xf0dcbc49), TOBN(0x7de551f9, 0x70bbb45b),
+       TOBN(0xcfd0f3e4, 0x9f2ca2e5), TOBN(0xece58709, 0x1f5c76ef)},
+      {TOBN(0x32920edd, 0x167d79ae), TOBN(0x039df8a2, 0xfa7d7ec1),
+       TOBN(0xf46206c0, 0xbb30af91), TOBN(0x1ff5e2f5, 0x22676b59)}},
+     {{TOBN(0x11f4a039, 0x6ea51d66), TOBN(0x506c1445, 0x807d7a26),
+       TOBN(0x60da5705, 0x755a9b24), TOBN(0x8fc8cc32, 0x1f1a319e)},
+      {TOBN(0x83642d4d, 0x9433d67d), TOBN(0x7fa5cb8f, 0x6a7dd296),
+       TOBN(0x576591db, 0x9b7bde07), TOBN(0x13173d25, 0x419716fb)}},
+     {{TOBN(0xea30599d, 0xd5b340ff), TOBN(0xfc6b5297, 0xb0fe76c5),
+       TOBN(0x1c6968c8, 0xab8f5adc), TOBN(0xf723c7f5, 0x901c928d)},
+      {TOBN(0x4203c321, 0x9773d402), TOBN(0xdf7c6aa3, 0x1b51dd47),
+       TOBN(0x3d49e37a, 0x552be23c), TOBN(0x57febee8, 0x0b5a6e87)}},
+     {{TOBN(0xc5ecbee4, 0x7bd8e739), TOBN(0x79d44994, 0xae63bf75),
+       TOBN(0x168bd00f, 0x38fb8923), TOBN(0x75d48ee4, 0xd0533130)},
+      {TOBN(0x554f77aa, 0xdb5cdf33), TOBN(0x3396e896, 0x3c696769),
+       TOBN(0x2fdddbf2, 0xd3fd674e), TOBN(0xbbb8f6ee, 0x99d0e3e5)}},
+     {{TOBN(0x51b90651, 0xcbae2f70), TOBN(0xefc4bc05, 0x93aaa8eb),
+       TOBN(0x8ecd8689, 0xdd1df499), TOBN(0x1aee99a8, 0x22f367a5)},
+      {TOBN(0x95d485b9, 0xae8274c5), TOBN(0x6c14d445, 0x7d30b39c),
+       TOBN(0xbafea90b, 0xbcc1ef81), TOBN(0x7c5f317a, 0xa459a2ed)}},
+     {{TOBN(0x01211075, 0x4ef44227), TOBN(0xa17bed6e, 0xdc20f496),
+       TOBN(0x0cdfe424, 0x819853cd), TOBN(0x13793298, 0xf71e2ce7)},
+      {TOBN(0x3c1f3078, 0xdbbe307b), TOBN(0x6dd1c20e, 0x76ee9936),
+       TOBN(0x23ee4b57, 0x423caa20), TOBN(0x4ac3793b, 0x8efb840e)}},
+     {{TOBN(0x934438eb, 0xed1f8ca0), TOBN(0x3e546658, 0x4ebb25a2),
+       TOBN(0xc415af0e, 0xc069896f), TOBN(0xc13eddb0, 0x9a5aa43d)},
+      {TOBN(0x7a04204f, 0xd49eb8f6), TOBN(0xd0d5bdfc, 0xd74f1670),
+       TOBN(0x3697e286, 0x56fc0558), TOBN(0x10207371, 0x01cebade)}},
+     {{TOBN(0x5f87e690, 0x0647a82b), TOBN(0x908e0ed4, 0x8f40054f),
+       TOBN(0xa9f633d4, 0x79853803), TOBN(0x8ed13c9a, 0x4a28b252)},
+      {TOBN(0x3e2ef676, 0x1f460f64), TOBN(0x53930b9b, 0x36d06336),
+       TOBN(0x347073ac, 0x8fc4979b), TOBN(0x84380e0e, 0x5ecd5597)}},
+     {{TOBN(0xe3b22c6b, 0xc4fe3c39), TOBN(0xba4a8153, 0x6c7bebdf),
+       TOBN(0xf23ab6b7, 0x25693459), TOBN(0x53bc3770, 0x14922b11)},
+      {TOBN(0x4645c8ab, 0x5afc60db), TOBN(0xaa022355, 0x20b9f2a3),
+       TOBN(0x52a2954c, 0xce0fc507), TOBN(0x8c2731bb, 0x7ce1c2e7)}},
+     {{TOBN(0xf39608ab, 0x18a0339d), TOBN(0xac7a658d, 0x3735436c),
+       TOBN(0xb22c2b07, 0xcd992b4f), TOBN(0x4e83daec, 0xf40dcfd4)},
+      {TOBN(0x8a34c7be, 0x2f39ea3e), TOBN(0xef0c005f, 0xb0a56d2e),
+       TOBN(0x62731f6a, 0x6edd8038), TOBN(0x5721d740, 0x4e3cb075)}},
+     {{TOBN(0x1ea41511, 0xfbeeee1b), TOBN(0xd1ef5e73, 0xef1d0c05),
+       TOBN(0x42feefd1, 0x73c07d35), TOBN(0xe530a00a, 0x8a329493)},
+      {TOBN(0x5d55b7fe, 0xf15ebfb0), TOBN(0x549de03c, 0xd322491a),
+       TOBN(0xf7b5f602, 0x745b3237), TOBN(0x3632a3a2, 0x1ab6e2b6)}},
+     {{TOBN(0x0d3bba89, 0x0ef59f78), TOBN(0x0dfc6443, 0xc9e52b9a),
+       TOBN(0x1dc79699, 0x72631447), TOBN(0xef033917, 0xb3be20b1)},
+      {TOBN(0x0c92735d, 0xb1383948), TOBN(0xc1fc29a2, 0xc0dd7d7d),
+       TOBN(0x6485b697, 0x403ed068), TOBN(0x13bfaab3, 0xaac93bdc)}},
+     {{TOBN(0x410dc6a9, 0x0deeaf52), TOBN(0xb003fb02, 0x4c641c15),
+       TOBN(0x1384978c, 0x5bc504c4), TOBN(0x37640487, 0x864a6a77)},
+      {TOBN(0x05991bc6, 0x222a77da), TOBN(0x62260a57, 0x5e47eb11),
+       TOBN(0xc7af6613, 0xf21b432c), TOBN(0x22f3acc9, 0xab4953e9)}},
+     {{TOBN(0x52934922, 0x8e41d155), TOBN(0x4d024568, 0x3ac059ef),
+       TOBN(0xb0201755, 0x4d884411), TOBN(0xce8055cf, 0xa59a178f)},
+      {TOBN(0xcd77d1af, 0xf6204549), TOBN(0xa0a00a3e, 0xc7066759),
+       TOBN(0x471071ef, 0x0272c229), TOBN(0x009bcf6b, 0xd3c4b6b0)}},
+     {{TOBN(0x2a2638a8, 0x22305177), TOBN(0xd51d59df, 0x41645bbf),
+       TOBN(0xa81142fd, 0xc0a7a3c0), TOBN(0xa17eca6d, 0x4c7063ee)},
+      {TOBN(0x0bb887ed, 0x60d9dcec), TOBN(0xd6d28e51, 0x20ad2455),
+       TOBN(0xebed6308, 0xa67102ba), TOBN(0x042c3114, 0x8bffa408)}},
+     {{TOBN(0xfd099ac5, 0x8aa68e30), TOBN(0x7a6a3d7c, 0x1483513e),
+       TOBN(0xffcc6b75, 0xba2d8f0c), TOBN(0x54dacf96, 0x1e78b954)},
+      {TOBN(0xf645696f, 0xa4a9af89), TOBN(0x3a411940, 0x06ac98ec),
+       TOBN(0x41b8b3f6, 0x22a67a20), TOBN(0x2d0b1e0f, 0x99dec626)}},
+     {{TOBN(0x27c89192, 0x40be34e8), TOBN(0xc7162b37, 0x91907f35),
+       TOBN(0x90188ec1, 0xa956702b), TOBN(0xca132f7d, 0xdf93769c)},
+      {TOBN(0x3ece44f9, 0x0e2025b4), TOBN(0x67aaec69, 0x0c62f14c),
+       TOBN(0xad741418, 0x22e3cc11), TOBN(0xcf9b75c3, 0x7ff9a50e)}},
+     {{TOBN(0x02fa2b16, 0x4d348272), TOBN(0xbd99d61a, 0x9959d56d),
+       TOBN(0xbc4f19db, 0x18762916), TOBN(0xcc7cce50, 0x49c1ac80)},
+      {TOBN(0x4d59ebaa, 0xd846bd83), TOBN(0x8775a9dc, 0xa9202849),
+       TOBN(0x07ec4ae1, 0x6e1f4ca9), TOBN(0x27eb5875, 0xba893f11)}},
+     {{TOBN(0x00284d51, 0x662cc565), TOBN(0x82353a6b, 0x0db4138d),
+       TOBN(0xd9c7aaaa, 0xaa32a594), TOBN(0xf5528b5e, 0xa5669c47)},
+      {TOBN(0xf3220231, 0x2f23c5ff), TOBN(0xe3e8147a, 0x6affa3a1),
+       TOBN(0xfb423d5c, 0x202ddda0), TOBN(0x3d6414ac, 0x6b871bd4)}},
+     {{TOBN(0x586f82e1, 0xa51a168a), TOBN(0xb712c671, 0x48ae5448),
+       TOBN(0x9a2e4bd1, 0x76233eb8), TOBN(0x0188223a, 0x78811ca9)},
+      {TOBN(0x553c5e21, 0xf7c18de1), TOBN(0x7682e451, 0xb27bb286),
+       TOBN(0x3ed036b3, 0x0e51e929), TOBN(0xf487211b, 0xec9cb34f)}},
+     {{TOBN(0x0d094277, 0x0c24efc8), TOBN(0x0349fd04, 0xbef737a4),
+       TOBN(0x6d1c9dd2, 0x514cdd28), TOBN(0x29c135ff, 0x30da9521)},
+      {TOBN(0xea6e4508, 0xf78b0b6f), TOBN(0x176f5dd2, 0x678c143c),
+       TOBN(0x08148418, 0x4be21e65), TOBN(0x27f7525c, 0xe7df38c4)}},
+     {{TOBN(0x1fb70e09, 0x748ab1a4), TOBN(0x9cba50a0, 0x5efe4433),
+       TOBN(0x7846c7a6, 0x15f75af2), TOBN(0x2a7c2c57, 0x5ee73ea8)},
+      {TOBN(0x42e566a4, 0x3f0a449a), TOBN(0x45474c3b, 0xad90fc3d),
+       TOBN(0x7447be3d, 0x8b61d057), TOBN(0x3e9d1cf1, 0x3a4ec092)}},
+     {{TOBN(0x1603e453, 0xf380a6e6), TOBN(0x0b86e431, 0x9b1437c2),
+       TOBN(0x7a4173f2, 0xef29610a), TOBN(0x8fa729a7, 0xf03d57f7)},
+      {TOBN(0x3e186f6e, 0x6c9c217e), TOBN(0xbe1d3079, 0x91919524),
+       TOBN(0x92a62a70, 0x153d4fb1), TOBN(0x32ed3e34, 0xd68c2f71)}},
+     {{TOBN(0xd785027f, 0x9eb1a8b7), TOBN(0xbc37eb77, 0xc5b22fe8),
+       TOBN(0x466b34f0, 0xb9d6a191), TOBN(0x008a89af, 0x9a05f816)},
+      {TOBN(0x19b028fb, 0x7d42c10a), TOBN(0x7fe8c92f, 0x49b3f6b8),
+       TOBN(0x58907cc0, 0xa5a0ade3), TOBN(0xb3154f51, 0x559d1a7c)}},
+     {{TOBN(0x5066efb6, 0xd9790ed6), TOBN(0xa77a0cbc, 0xa6aa793b),
+       TOBN(0x1a915f3c, 0x223e042e), TOBN(0x1c5def04, 0x69c5874b)},
+      {TOBN(0x0e830078, 0x73b6c1da), TOBN(0x55cf85d2, 0xfcd8557a),
+       TOBN(0x0f7c7c76, 0x0460f3b1), TOBN(0x87052acb, 0x46e58063)}},
+     {{TOBN(0x09212b80, 0x907eae66), TOBN(0x3cb068e0, 0x4d721c89),
+       TOBN(0xa87941ae, 0xdd45ac1c), TOBN(0xde8d5c0d, 0x0daa0dbb)},
+      {TOBN(0xda421fdc, 0xe3502e6e), TOBN(0xc8944201, 0x4d89a084),
+       TOBN(0x7307ba5e, 0xf0c24bfb), TOBN(0xda212beb, 0x20bde0ef)}},
+     {{TOBN(0xea2da24b, 0xf82ce682), TOBN(0x058d3816, 0x07f71fe4),
+       TOBN(0x35a02462, 0x5ffad8de), TOBN(0xcd7b05dc, 0xaadcefab)},
+      {TOBN(0xd442f8ed, 0x1d9f54ec), TOBN(0x8be3d618, 0xb2d3b5ca),
+       TOBN(0xe2220ed0, 0xe06b2ce2), TOBN(0x82699a5f, 0x1b0da4c0)}},
+     {{TOBN(0x3ff106f5, 0x71c0c3a7), TOBN(0x8f580f5a, 0x0d34180c),
+       TOBN(0x4ebb120e, 0x22d7d375), TOBN(0x5e5782cc, 0xe9513675)},
+      {TOBN(0x2275580c, 0x99c82a70), TOBN(0xe8359fbf, 0x15ea8c4c),
+       TOBN(0x53b48db8, 0x7b415e70), TOBN(0xaacf2240, 0x100c6014)}},
+     {{TOBN(0x9faaccf5, 0xe4652f1d), TOBN(0xbd6fdd2a, 0xd56157b2),
+       TOBN(0xa4f4fb1f, 0x6261ec50), TOBN(0x244e55ad, 0x476bcd52)},
+      {TOBN(0x881c9305, 0x047d320b), TOBN(0x1ca983d5, 0x6181263f),
+       TOBN(0x354e9a44, 0x278fb8ee), TOBN(0xad2dbc0f, 0x396e4964)}},
+     {{TOBN(0x723f3aa2, 0x9268b3de), TOBN(0x0d1ca29a, 0xe6e0609a),
+       TOBN(0x794866aa, 0x6cf44252), TOBN(0x0b59f3e3, 0x01af87ed)},
+      {TOBN(0xe234e5ff, 0x7f4a6c51), TOBN(0xa8768fd2, 0x61dc2f7e),
+       TOBN(0xdafc7332, 0x0a94d81f), TOBN(0xd7f84282, 0x06938ce1)}},
+     {{TOBN(0xae0b3c0e, 0x0546063e), TOBN(0x7fbadcb2, 0x5d61abc6),
+       TOBN(0xd5d7a2c9, 0x369ac400), TOBN(0xa5978d09, 0xae67d10c)},
+      {TOBN(0x290f211e, 0x4f85eaac), TOBN(0xe61e2ad1, 0xfacac681),
+       TOBN(0xae125225, 0x388384cd), TOBN(0xa7fb68e9, 0xccfde30f)}},
+     {{TOBN(0x7a59b936, 0x3daed4c2), TOBN(0x80a9aa40, 0x2606f789),
+       TOBN(0xb40c1ea5, 0xf6a6d90a), TOBN(0x948364d3, 0x514d5885)},
+      {TOBN(0x062ebc60, 0x70985182), TOBN(0xa6db5b0e, 0x33310895),
+       TOBN(0x64a12175, 0xe329c2f5), TOBN(0xc5f25bd2, 0x90ea237e)}},
+     {{TOBN(0x7915c524, 0x2d0a4c23), TOBN(0xeb5d26e4, 0x6bb3cc52),
+       TOBN(0x369a9116, 0xc09e2c92), TOBN(0x0c527f92, 0xcf182cf8)},
+      {TOBN(0x9e591938, 0x2aede0ac), TOBN(0xb2922208, 0x6cc34939),
+       TOBN(0x3c9d8962, 0x99a34361), TOBN(0x3c81836d, 0xc1905fe6)}},
+     {{TOBN(0x4bfeb57f, 0xa001ec5a), TOBN(0xe993f5bb, 0xa0dc5dba),
+       TOBN(0x47884109, 0x724a1380), TOBN(0x8a0369ab, 0x32fe9a04)},
+      {TOBN(0xea068d60, 0x8c927db8), TOBN(0xbf5f37cf, 0x94655741),
+       TOBN(0x47d402a2, 0x04b6c7ea), TOBN(0x4551c295, 0x6af259cb)}},
+     {{TOBN(0x698b71e7, 0xed77ee8b), TOBN(0xbddf7bd0, 0xf309d5c7),
+       TOBN(0x6201c22c, 0x34e780ca), TOBN(0xab04f7d8, 0x4c295ef4)},
+      {TOBN(0x1c947294, 0x4313a8ce), TOBN(0xe532e4ac, 0x92ca4cfe),
+       TOBN(0x89738f80, 0xd0a7a97a), TOBN(0xec088c88, 0xa580fd5b)}},
+     {{TOBN(0x612b1ecc, 0x42ce9e51), TOBN(0x8f9840fd, 0xb25fdd2a),
+       TOBN(0x3cda78c0, 0x01e7f839), TOBN(0x546b3d3a, 0xece05480)},
+      {TOBN(0x271719a9, 0x80d30916), TOBN(0x45497107, 0x584c20c4),
+       TOBN(0xaf8f9478, 0x5bc78608), TOBN(0x28c7d484, 0x277e2a4c)}},
+     {{TOBN(0xfce01767, 0x88a2ffe4), TOBN(0xdc506a35, 0x28e169a5),
+       TOBN(0x0ea10861, 0x7af9c93a), TOBN(0x1ed24361, 0x03fa0e08)},
+      {TOBN(0x96eaaa92, 0xa3d694e7), TOBN(0xc0f43b4d, 0xef50bc74),
+       TOBN(0xce6aa58c, 0x64114db4), TOBN(0x8218e8ea, 0x7c000fd4)}},
+     {{TOBN(0xac815dfb, 0x185f8844), TOBN(0xcd7e90cb, 0x1557abfb),
+       TOBN(0x23d16655, 0xafbfecdf), TOBN(0x80f3271f, 0x085cac4a)},
+      {TOBN(0x7fc39aa7, 0xd0e62f47), TOBN(0x88d519d1, 0x460a48e5),
+       TOBN(0x59559ac4, 0xd28f101e), TOBN(0x7981d9e9, 0xca9ae816)}},
+     {{TOBN(0x5c38652c, 0x9ac38203), TOBN(0x86eaf87f, 0x57657fe5),
+       TOBN(0x568fc472, 0xe21f5416), TOBN(0x2afff39c, 0xe7e597b5)},
+      {TOBN(0x3adbbb07, 0x256d4eab), TOBN(0x22598692, 0x8285ab89),
+       TOBN(0x35f8112a, 0x041caefe), TOBN(0x95df02e3, 0xa5064c8b)}},
+     {{TOBN(0x4d63356e, 0xc7004bf3), TOBN(0x230a08f4, 0xdb83c7de),
+       TOBN(0xca27b270, 0x8709a7b7), TOBN(0x0d1c4cc4, 0xcb9abd2d)},
+      {TOBN(0x8a0bc66e, 0x7550fee8), TOBN(0x369cd4c7, 0x9cf7247e),
+       TOBN(0x75562e84, 0x92b5b7e7), TOBN(0x8fed0da0, 0x5802af7b)}},
+     {{TOBN(0x6a7091c2, 0xe48fb889), TOBN(0x26882c13, 0x7b8a9d06),
+       TOBN(0xa2498663, 0x1b82a0e2), TOBN(0x844ed736, 0x3518152d)},
+      {TOBN(0x282f476f, 0xd86e27c7), TOBN(0xa04edaca, 0x04afefdc),
+       TOBN(0x8b256ebc, 0x6119e34d), TOBN(0x56a413e9, 0x0787d78b)}}},
+    {{{TOBN(0x82ee061d, 0x5a74be50), TOBN(0xe41781c4, 0xdea16ff5),
+       TOBN(0xe0b0c81e, 0x99bfc8a2), TOBN(0x624f4d69, 0x0b547e2d)},
+      {TOBN(0x3a83545d, 0xbdcc9ae4), TOBN(0x2573dbb6, 0x409b1e8e),
+       TOBN(0x482960c4, 0xa6c93539), TOBN(0xf01059ad, 0x5ae18798)}},
+     {{TOBN(0x715c9f97, 0x3112795f), TOBN(0xe8244437, 0x984e6ee1),
+       TOBN(0x55cb4858, 0xecb66bcd), TOBN(0x7c136735, 0xabaffbee)},
+      {TOBN(0x54661595, 0x5dbec38e), TOBN(0x51c0782c, 0x388ad153),
+       TOBN(0x9ba4c53a, 0xc6e0952f), TOBN(0x27e6782a, 0x1b21dfa8)}},
+     {{TOBN(0x682f903d, 0x4ed2dbc2), TOBN(0x0eba59c8, 0x7c3b2d83),
+       TOBN(0x8e9dc84d, 0x9c7e9335), TOBN(0x5f9b21b0, 0x0eb226d7)},
+      {TOBN(0xe33bd394, 0xaf267bae), TOBN(0xaa86cc25, 0xbe2e15ae),
+       TOBN(0x4f0bf67d, 0x6a8ec500), TOBN(0x5846aa44, 0xf9630658)}},
+     {{TOBN(0xfeb09740, 0xe2c2bf15), TOBN(0x627a2205, 0xa9e99704),
+       TOBN(0xec8d73d0, 0xc2fbc565), TOBN(0x223eed8f, 0xc20c8de8)},
+      {TOBN(0x1ee32583, 0xa8363b49), TOBN(0x1a0b6cb9, 0xc9c2b0a6),
+       TOBN(0x49f7c3d2, 0x90dbc85c), TOBN(0xa8dfbb97, 0x1ef4c1ac)}},
+     {{TOBN(0xafb34d4c, 0x65c7c2ab), TOBN(0x1d4610e7, 0xe2c5ea84),
+       TOBN(0x893f6d1b, 0x973c4ab5), TOBN(0xa3cdd7e9, 0x945ba5c4)},
+      {TOBN(0x60514983, 0x064417ee), TOBN(0x1459b23c, 0xad6bdf2b),
+       TOBN(0x23b2c341, 0x5cf726c3), TOBN(0x3a829635, 0x32d6354a)}},
+     {{TOBN(0x294f901f, 0xab192c18), TOBN(0xec5fcbfe, 0x7030164f),
+       TOBN(0xe2e2fcb7, 0xe2246ba6), TOBN(0x1e7c88b3, 0x221a1a0c)},
+      {TOBN(0x72c7dd93, 0xc92d88c5), TOBN(0x41c2148e, 0x1106fb59),
+       TOBN(0x547dd4f5, 0xa0f60f14), TOBN(0xed9b52b2, 0x63960f31)}},
+     {{TOBN(0x6c8349eb, 0xb0a5b358), TOBN(0xb154c5c2, 0x9e7e2ed6),
+       TOBN(0xcad5eccf, 0xeda462db), TOBN(0xf2d6dbe4, 0x2de66b69)},
+      {TOBN(0x426aedf3, 0x8665e5b2), TOBN(0x488a8513, 0x7b7f5723),
+       TOBN(0x15cc43b3, 0x8bcbb386), TOBN(0x27ad0af3, 0xd791d879)}},
+     {{TOBN(0xc16c236e, 0x846e364f), TOBN(0x7f33527c, 0xdea50ca0),
+       TOBN(0xc4810775, 0x0926b86d), TOBN(0x6c2a3609, 0x0598e70c)},
+      {TOBN(0xa6755e52, 0xf024e924), TOBN(0xe0fa07a4, 0x9db4afca),
+       TOBN(0x15c3ce7d, 0x66831790), TOBN(0x5b4ef350, 0xa6cbb0d6)}},
+     {{TOBN(0x2c4aafc4, 0xb6205969), TOBN(0x42563f02, 0xf6c7854f),
+       TOBN(0x016aced5, 0x1d983b48), TOBN(0xfeb356d8, 0x99949755)},
+      {TOBN(0x8c2a2c81, 0xd1a39bd7), TOBN(0x8f44340f, 0xe6934ae9),
+       TOBN(0x148cf91c, 0x447904da), TOBN(0x7340185f, 0x0f51a926)}},
+     {{TOBN(0x2f8f00fb, 0x7409ab46), TOBN(0x057e78e6, 0x80e289b2),
+       TOBN(0x03e5022c, 0xa888e5d1), TOBN(0x3c87111a, 0x9dede4e2)},
+      {TOBN(0x5b9b0e1c, 0x7809460b), TOBN(0xe751c852, 0x71c9abc7),
+       TOBN(0x8b944e28, 0xc7cc1dc9), TOBN(0x4f201ffa, 0x1d3cfa08)}},
+     {{TOBN(0x02fc905c, 0x3e6721ce), TOBN(0xd52d70da, 0xd0b3674c),
+       TOBN(0x5dc2e5ca, 0x18810da4), TOBN(0xa984b273, 0x5c69dd99)},
+      {TOBN(0x63b92527, 0x84de5ca4), TOBN(0x2f1c9872, 0xc852dec4),
+       TOBN(0x18b03593, 0xc2e3de09), TOBN(0x19d70b01, 0x9813dc2f)}},
+     {{TOBN(0x42806b2d, 0xa6dc1d29), TOBN(0xd3030009, 0xf871e144),
+       TOBN(0xa1feb333, 0xaaf49276), TOBN(0xb5583b9e, 0xc70bc04b)},
+      {TOBN(0x1db0be78, 0x95695f20), TOBN(0xfc841811, 0x89d012b5),
+       TOBN(0x6409f272, 0x05f61643), TOBN(0x40d34174, 0xd5883128)}},
+     {{TOBN(0xd79196f5, 0x67419833), TOBN(0x6059e252, 0x863b7b08),
+       TOBN(0x84da1817, 0x1c56700c), TOBN(0x5758ee56, 0xb28d3ec4)},
+      {TOBN(0x7da2771d, 0x013b0ea6), TOBN(0xfddf524b, 0x54c5e9b9),
+       TOBN(0x7df4faf8, 0x24305d80), TOBN(0x58f5c1bf, 0x3a97763f)}},
+     {{TOBN(0xa5af37f1, 0x7c696042), TOBN(0xd4cba22c, 0x4a2538de),
+       TOBN(0x211cb995, 0x9ea42600), TOBN(0xcd105f41, 0x7b069889)},
+      {TOBN(0xb1e1cf19, 0xddb81e74), TOBN(0x472f2d89, 0x5157b8ca),
+       TOBN(0x086fb008, 0xee9db885), TOBN(0x365cd570, 0x0f26d131)}},
+     {{TOBN(0x284b02bb, 0xa2be7053), TOBN(0xdcbbf7c6, 0x7ab9a6d6),
+       TOBN(0x4425559c, 0x20f7a530), TOBN(0x961f2dfa, 0x188767c8)},
+      {TOBN(0xe2fd9435, 0x70dc80c4), TOBN(0x104d6b63, 0xf0784120),
+       TOBN(0x7f592bc1, 0x53567122), TOBN(0xf6bc1246, 0xf688ad77)}},
+     {{TOBN(0x05214c05, 0x0f15dde9), TOBN(0xa47a76a8, 0x0d5f2b82),
+       TOBN(0xbb254d30, 0x62e82b62), TOBN(0x11a05fe0, 0x3ec955ee)},
+      {TOBN(0x7eaff46e, 0x9d529b36), TOBN(0x55ab1301, 0x8f9e3df6),
+       TOBN(0xc463e371, 0x99317698), TOBN(0xfd251438, 0xccda47ad)}},
+     {{TOBN(0xca9c3547, 0x23d695ea), TOBN(0x48ce626e, 0x16e589b5),
+       TOBN(0x6b5b64c7, 0xb187d086), TOBN(0xd02e1794, 0xb2207948)},
+      {TOBN(0x8b58e98f, 0x7198111d), TOBN(0x90ca6305, 0xdcf9c3cc),
+       TOBN(0x5691fe72, 0xf34089b0), TOBN(0x60941af1, 0xfc7c80ff)}},
+     {{TOBN(0xa09bc0a2, 0x22eb51e5), TOBN(0xc0bb7244, 0xaa9cf09a),
+       TOBN(0x36a8077f, 0x80159f06), TOBN(0x8b5c989e, 0xdddc560e)},
+      {TOBN(0x19d2f316, 0x512e1f43), TOBN(0x02eac554, 0xad08ff62),
+       TOBN(0x012ab84c, 0x07d20b4e), TOBN(0x37d1e115, 0xd6d4e4e1)}},
+     {{TOBN(0xb6443e1a, 0xab7b19a8), TOBN(0xf08d067e, 0xdef8cd45),
+       TOBN(0x63adf3e9, 0x685e03da), TOBN(0xcf15a10e, 0x4792b916)},
+      {TOBN(0xf44bcce5, 0xb738a425), TOBN(0xebe131d5, 0x9636b2fd),
+       TOBN(0x94068841, 0x7850d605), TOBN(0x09684eaa, 0xb40d749d)}},
+     {{TOBN(0x8c3c669c, 0x72ba075b), TOBN(0x89f78b55, 0xba469015),
+       TOBN(0x5706aade, 0x3e9f8ba8), TOBN(0x6d8bd565, 0xb32d7ed7)},
+      {TOBN(0x25f4e63b, 0x805f08d6), TOBN(0x7f48200d, 0xc3bcc1b5),
+       TOBN(0x4e801968, 0xb025d847), TOBN(0x74afac04, 0x87cbe0a8)}},
+     {{TOBN(0x43ed2c2b, 0x7e63d690), TOBN(0xefb6bbf0, 0x0223cdb8),
+       TOBN(0x4fec3cae, 0x2884d3fe), TOBN(0x065ecce6, 0xd75e25a4)},
+      {TOBN(0x6c2294ce, 0x69f79071), TOBN(0x0d9a8e5f, 0x044b8666),
+       TOBN(0x5009f238, 0x17b69d8f), TOBN(0x3c29f8fe, 0xc5dfdaf7)}},
+     {{TOBN(0x9067528f, 0xebae68c4), TOBN(0x5b385632, 0x30c5ba21),
+       TOBN(0x540df119, 0x1fdd1aec), TOBN(0xcf37825b, 0xcfba4c78)},
+      {TOBN(0x77eff980, 0xbeb11454), TOBN(0x40a1a991, 0x60c1b066),
+       TOBN(0xe8018980, 0xf889a1c7), TOBN(0xb9c52ae9, 0x76c24be0)}},
+     {{TOBN(0x05fbbcce, 0x45650ef4), TOBN(0xae000f10, 0x8aa29ac7),
+       TOBN(0x884b7172, 0x4f04c470), TOBN(0x7cd4fde2, 0x19bb5c25)},
+      {TOBN(0x6477b22a, 0xe8840869), TOBN(0xa8868859, 0x5fbd0686),
+       TOBN(0xf23cc02e, 0x1116dfba), TOBN(0x76cd563f, 0xd87d7776)}},
+     {{TOBN(0xe2a37598, 0xa9d82abf), TOBN(0x5f188ccb, 0xe6c170f5),
+       TOBN(0x81682200, 0x5066b087), TOBN(0xda22c212, 0xc7155ada)},
+      {TOBN(0x151e5d3a, 0xfbddb479), TOBN(0x4b606b84, 0x6d715b99),
+       TOBN(0x4a73b54b, 0xf997cb2e), TOBN(0x9a1bfe43, 0x3ecd8b66)}},
+     {{TOBN(0x1c312809, 0x2a67d48a), TOBN(0xcd6a671e, 0x031fa9e2),
+       TOBN(0xbec3312a, 0x0e43a34a), TOBN(0x1d935639, 0x55ef47d3)},
+      {TOBN(0x5ea02489, 0x8fea73ea), TOBN(0x8247b364, 0xa035afb2),
+       TOBN(0xb58300a6, 0x5265b54c), TOBN(0x3286662f, 0x722c7148)}},
+     {{TOBN(0xb77fd76b, 0xb4ec4c20), TOBN(0xf0a12fa7, 0x0f3fe3fd),
+       TOBN(0xf845bbf5, 0x41d8c7e8), TOBN(0xe4d969ca, 0x5ec10aa8)},
+      {TOBN(0x4c0053b7, 0x43e232a3), TOBN(0xdc7a3fac, 0x37f8a45a),
+       TOBN(0x3c4261c5, 0x20d81c8f), TOBN(0xfd4b3453, 0xb00eab00)}},
+     {{TOBN(0x76d48f86, 0xd36e3062), TOBN(0x626c5277, 0xa143ff02),
+       TOBN(0x538174de, 0xaf76f42e), TOBN(0x2267aa86, 0x6407ceac)},
+      {TOBN(0xfad76351, 0x72e572d5), TOBN(0xab861af7, 0xba7330eb),
+       TOBN(0xa0a1c8c7, 0x418d8657), TOBN(0x988821cb, 0x20289a52)}},
+     {{TOBN(0x79732522, 0xcccc18ad), TOBN(0xaadf3f8d, 0xf1a6e027),
+       TOBN(0xf7382c93, 0x17c2354d), TOBN(0x5ce1680c, 0xd818b689)},
+      {TOBN(0x359ebbfc, 0xd9ecbee9), TOBN(0x4330689c, 0x1cae62ac),
+       TOBN(0xb55ce5b4, 0xc51ac38a), TOBN(0x7921dfea, 0xfe238ee8)}},
+     {{TOBN(0x3972bef8, 0x271d1ca5), TOBN(0x3e423bc7, 0xe8aabd18),
+       TOBN(0x57b09f3f, 0x44a3e5e3), TOBN(0x5da886ae, 0x7b444d66)},
+      {TOBN(0x68206634, 0xa9964375), TOBN(0x356a2fa3, 0x699cd0ff),
+       TOBN(0xaf0faa24, 0xdba515e9), TOBN(0x536e1f5c, 0xb321d79a)}},
+     {{TOBN(0xd3b9913a, 0x5c04e4ea), TOBN(0xd549dcfe, 0xd6f11513),
+       TOBN(0xee227bf5, 0x79fd1d94), TOBN(0x9f35afee, 0xb43f2c67)},
+      {TOBN(0xd2638d24, 0xf1314f53), TOBN(0x62baf948, 0xcabcd822),
+       TOBN(0x5542de29, 0x4ef48db0), TOBN(0xb3eb6a04, 0xfc5f6bb2)}},
+     {{TOBN(0x23c110ae, 0x1208e16a), TOBN(0x1a4d15b5, 0xf8363e24),
+       TOBN(0x30716844, 0x164be00b), TOBN(0xa8e24824, 0xf6f4690d)},
+      {TOBN(0x548773a2, 0x90b170cf), TOBN(0xa1bef331, 0x42f191f4),
+       TOBN(0x70f418d0, 0x9247aa97), TOBN(0xea06028e, 0x48be9147)}},
+     {{TOBN(0xe13122f3, 0xdbfb894e), TOBN(0xbe9b79f6, 0xce274b18),
+       TOBN(0x85a49de5, 0xca58aadf), TOBN(0x24957758, 0x11487351)},
+      {TOBN(0x111def61, 0xbb939099), TOBN(0x1d6a974a, 0x26d13694),
+       TOBN(0x4474b4ce, 0xd3fc253b), TOBN(0x3a1485e6, 0x4c5db15e)}},
+     {{TOBN(0xe79667b4, 0x147c15b4), TOBN(0xe34f553b, 0x7bc61301),
+       TOBN(0x032b80f8, 0x17094381), TOBN(0x55d8bafd, 0x723eaa21)},
+      {TOBN(0x5a987995, 0xf1c0e74e), TOBN(0x5a9b292e, 0xebba289c),
+       TOBN(0x413cd4b2, 0xeb4c8251), TOBN(0x98b5d243, 0xd162db0a)}},
+     {{TOBN(0xbb47bf66, 0x68342520), TOBN(0x08d68949, 0xbaa862d1),
+       TOBN(0x11f349c7, 0xe906abcd), TOBN(0x454ce985, 0xed7bf00e)},
+      {TOBN(0xacab5c9e, 0xb55b803b), TOBN(0xb03468ea, 0x31e3c16d),
+       TOBN(0x5c24213d, 0xd273bf12), TOBN(0x211538eb, 0x71587887)}},
+     {{TOBN(0x198e4a2f, 0x731dea2d), TOBN(0xd5856cf2, 0x74ed7b2a),
+       TOBN(0x86a632eb, 0x13a664fe), TOBN(0x932cd909, 0xbda41291)},
+      {TOBN(0x850e95d4, 0xc0c4ddc0), TOBN(0xc0f422f8, 0x347fc2c9),
+       TOBN(0xe68cbec4, 0x86076bcb), TOBN(0xf9e7c0c0, 0xcd6cd286)}},
+     {{TOBN(0x65994ddb, 0x0f5f27ca), TOBN(0xe85461fb, 0xa80d59ff),
+       TOBN(0xff05481a, 0x66601023), TOBN(0xc665427a, 0xfc9ebbfb)},
+      {TOBN(0xb0571a69, 0x7587fd52), TOBN(0x935289f8, 0x8d49efce),
+       TOBN(0x61becc60, 0xea420688), TOBN(0xb22639d9, 0x13a786af)}},
+     {{TOBN(0x1a8e6220, 0x361ecf90), TOBN(0x001f23e0, 0x25506463),
+       TOBN(0xe4ae9b5d, 0x0a5c2b79), TOBN(0xebc9cdad, 0xd8149db5)},
+      {TOBN(0xb33164a1, 0x934aa728), TOBN(0x750eb00e, 0xae9b60f3),
+       TOBN(0x5a91615b, 0x9b9cfbfd), TOBN(0x97015cbf, 0xef45f7f6)}},
+     {{TOBN(0xb462c4a5, 0xbf5151df), TOBN(0x21adcc41, 0xb07118f2),
+       TOBN(0xd60c545b, 0x043fa42c), TOBN(0xfc21aa54, 0xe96be1ab)},
+      {TOBN(0xe84bc32f, 0x4e51ea80), TOBN(0x3dae45f0, 0x259b5d8d),
+       TOBN(0xbb73c7eb, 0xc38f1b5e), TOBN(0xe405a74a, 0xe8ae617d)}},
+     {{TOBN(0xbb1ae9c6, 0x9f1c56bd), TOBN(0x8c176b98, 0x49f196a4),
+       TOBN(0xc448f311, 0x6875092b), TOBN(0xb5afe3de, 0x9f976033)},
+      {TOBN(0xa8dafd49, 0x145813e5), TOBN(0x687fc4d9, 0xe2b34226),
+       TOBN(0xf2dfc92d, 0x4c7ff57f), TOBN(0x004e3fc1, 0x401f1b46)}},
+     {{TOBN(0x5afddab6, 0x1430c9ab), TOBN(0x0bdd41d3, 0x2238e997),
+       TOBN(0xf0947430, 0x418042ae), TOBN(0x71f9adda, 0xcdddc4cb)},
+      {TOBN(0x7090c016, 0xc52dd907), TOBN(0xd9bdf44d, 0x29e2047f),
+       TOBN(0xe6f1fe80, 0x1b1011a6), TOBN(0xb63accbc, 0xd9acdc78)}},
+     {{TOBN(0xcfc7e235, 0x1272a95b), TOBN(0x0c667717, 0xa6276ac8),
+       TOBN(0x3c0d3709, 0xe2d7eef7), TOBN(0x5add2b06, 0x9a685b3e)},
+      {TOBN(0x363ad32d, 0x14ea5d65), TOBN(0xf8e01f06, 0x8d7dd506),
+       TOBN(0xc9ea2213, 0x75b4aac6), TOBN(0xed2a2bf9, 0x0d353466)}},
+     {{TOBN(0x439d79b5, 0xe9d3a7c3), TOBN(0x8e0ee5a6, 0x81b7f34b),
+       TOBN(0xcf3dacf5, 0x1dc4ba75), TOBN(0x1d3d1773, 0xeb3310c7)},
+      {TOBN(0xa8e67112, 0x7747ae83), TOBN(0x31f43160, 0x197d6b40),
+       TOBN(0x0521ccee, 0xcd961400), TOBN(0x67246f11, 0xf6535768)}},
+     {{TOBN(0x702fcc5a, 0xef0c3133), TOBN(0x247cc45d, 0x7e16693b),
+       TOBN(0xfd484e49, 0xc729b749), TOBN(0x522cef7d, 0xb218320f)},
+      {TOBN(0xe56ef405, 0x59ab93b3), TOBN(0x225fba11, 0x9f181071),
+       TOBN(0x33bd6595, 0x15330ed0), TOBN(0xc4be69d5, 0x1ddb32f7)}},
+     {{TOBN(0x264c7668, 0x0448087c), TOBN(0xac30903f, 0x71432dae),
+       TOBN(0x3851b266, 0x00f9bf47), TOBN(0x400ed311, 0x6cdd6d03)},
+      {TOBN(0x045e79fe, 0xf8fd2424), TOBN(0xfdfd974a, 0xfa6da98b),
+       TOBN(0x45c9f641, 0x0c1e673a), TOBN(0x76f2e733, 0x5b2c5168)}},
+     {{TOBN(0x1adaebb5, 0x2a601753), TOBN(0xb286514c, 0xc57c2d49),
+       TOBN(0xd8769670, 0x1e0bfd24), TOBN(0x950c547e, 0x04478922)},
+      {TOBN(0xd1d41969, 0xe5d32bfe), TOBN(0x30bc1472, 0x750d6c3e),
+       TOBN(0x8f3679fe, 0xe0e27f3a), TOBN(0x8f64a7dc, 0xa4a6ee0c)}},
+     {{TOBN(0x2fe59937, 0x633dfb1f), TOBN(0xea82c395, 0x977f2547),
+       TOBN(0xcbdfdf1a, 0x661ea646), TOBN(0xc7ccc591, 0xb9085451)},
+      {TOBN(0x82177962, 0x81761e13), TOBN(0xda57596f, 0x9196885c),
+       TOBN(0xbc17e849, 0x28ffbd70), TOBN(0x1e6e0a41, 0x2671d36f)}},
+     {{TOBN(0x61ae872c, 0x4152fcf5), TOBN(0x441c87b0, 0x9e77e754),
+       TOBN(0xd0799dd5, 0xa34dff09), TOBN(0x766b4e44, 0x88a6b171)},
+      {TOBN(0xdc06a512, 0x11f1c792), TOBN(0xea02ae93, 0x4be35c3e),
+       TOBN(0xe5ca4d6d, 0xe90c469e), TOBN(0x4df4368e, 0x56e4ff5c)}},
+     {{TOBN(0x7817acab, 0x4baef62e), TOBN(0x9f5a2202, 0xa85b91e8),
+       TOBN(0x9666ebe6, 0x6ce57610), TOBN(0x32ad31f3, 0xf73bfe03)},
+      {TOBN(0x628330a4, 0x25bcf4d6), TOBN(0xea950593, 0x515056e6),
+       TOBN(0x59811c89, 0xe1332156), TOBN(0xc89cf1fe, 0x8c11b2d7)}},
+     {{TOBN(0x75b63913, 0x04e60cc0), TOBN(0xce811e8d, 0x4625d375),
+       TOBN(0x030e43fc, 0x2d26e562), TOBN(0xfbb30b4b, 0x608d36a0)},
+      {TOBN(0x634ff82c, 0x48528118), TOBN(0x7c6fe085, 0xcd285911),
+       TOBN(0x7f2830c0, 0x99358f28), TOBN(0x2e60a95e, 0x665e6c09)}},
+     {{TOBN(0x08407d3d, 0x9b785dbf), TOBN(0x530889ab, 0xa759bce7),
+       TOBN(0xf228e0e6, 0x52f61239), TOBN(0x2b6d1461, 0x6879be3c)},
+      {TOBN(0xe6902c04, 0x51a7bbf7), TOBN(0x30ad99f0, 0x76f24a64),
+       TOBN(0x66d9317a, 0x98bc6da0), TOBN(0xf4f877f3, 0xcb596ac0)}},
+     {{TOBN(0xb05ff62d, 0x4c44f119), TOBN(0x4555f536, 0xe9b77416),
+       TOBN(0xc7c0d059, 0x8caed63b), TOBN(0x0cd2b7ce, 0xc358b2a9)},
+      {TOBN(0x3f33287b, 0x46945fa3), TOBN(0xf8785b20, 0xd67c8791),
+       TOBN(0xc54a7a61, 0x9637bd08), TOBN(0x54d4598c, 0x18be79d7)}},
+     {{TOBN(0x889e5acb, 0xc46d7ce1), TOBN(0x9a515bb7, 0x8b085877),
+       TOBN(0xfac1a03d, 0x0b7a5050), TOBN(0x7d3e738a, 0xf2926035)},
+      {TOBN(0x861cc2ce, 0x2a6cb0eb), TOBN(0x6f2e2955, 0x8f7adc79),
+       TOBN(0x61c4d451, 0x33016376), TOBN(0xd9fd2c80, 0x5ad59090)}},
+     {{TOBN(0xe5a83738, 0xb2b836a1), TOBN(0x855b41a0, 0x7c0d6622),
+       TOBN(0x186fe317, 0x7cc19af1), TOBN(0x6465c1ff, 0xfdd99acb)},
+      {TOBN(0x46e5c23f, 0x6974b99e), TOBN(0x75a7cf8b, 0xa2717cbe),
+       TOBN(0x4d2ebc3f, 0x062be658), TOBN(0x094b4447, 0x5f209c98)}},
+     {{TOBN(0x4af285ed, 0xb940cb5a), TOBN(0x6706d792, 0x7cc82f10),
+       TOBN(0xc8c8776c, 0x030526fa), TOBN(0xfa8e6f76, 0xa0da9140)},
+      {TOBN(0x77ea9d34, 0x591ee4f0), TOBN(0x5f46e337, 0x40274166),
+       TOBN(0x1bdf98bb, 0xea671457), TOBN(0xd7c08b46, 0x862a1fe2)}},
+     {{TOBN(0x46cc303c, 0x1c08ad63), TOBN(0x99543440, 0x4c845e7b),
+       TOBN(0x1b8fbdb5, 0x48f36bf7), TOBN(0x5b82c392, 0x8c8273a7)},
+      {TOBN(0x08f712c4, 0x928435d5), TOBN(0x071cf0f1, 0x79330380),
+       TOBN(0xc74c2d24, 0xa8da054a), TOBN(0xcb0e7201, 0x43c46b5c)}},
+     {{TOBN(0x0ad7337a, 0xc0b7eff3), TOBN(0x8552225e, 0xc5e48b3c),
+       TOBN(0xe6f78b0c, 0x73f13a5f), TOBN(0x5e70062e, 0x82349cbe)},
+      {TOBN(0x6b8d5048, 0xe7073969), TOBN(0x392d2a29, 0xc33cb3d2),
+       TOBN(0xee4f727c, 0x4ecaa20f), TOBN(0xa068c99e, 0x2ccde707)}},
+     {{TOBN(0xfcd5651f, 0xb87a2913), TOBN(0xea3e3c15, 0x3cc252f0),
+       TOBN(0x777d92df, 0x3b6cd3e4), TOBN(0x7a414143, 0xc5a732e7)},
+      {TOBN(0xa895951a, 0xa71ff493), TOBN(0xfe980c92, 0xbbd37cf6),
+       TOBN(0x45bd5e64, 0xdecfeeff), TOBN(0x910dc2a9, 0xa44c43e9)}},
+     {{TOBN(0xcb403f26, 0xcca9f54d), TOBN(0x928bbdfb, 0x9303f6db),
+       TOBN(0x3c37951e, 0xa9eee67c), TOBN(0x3bd61a52, 0xf79961c3)},
+      {TOBN(0x09a238e6, 0x395c9a79), TOBN(0x6940ca2d, 0x61eb352d),
+       TOBN(0x7d1e5c5e, 0xc1875631), TOBN(0x1e19742c, 0x1e1b20d1)}},
+     {{TOBN(0x4633d908, 0x23fc2e6e), TOBN(0xa76e29a9, 0x08959149),
+       TOBN(0x61069d9c, 0x84ed7da5), TOBN(0x0baa11cf, 0x5dbcad51)},
+      {TOBN(0xd01eec64, 0x961849da), TOBN(0x93b75f1f, 0xaf3d8c28),
+       TOBN(0x57bc4f9f, 0x1ca2ee44), TOBN(0x5a26322d, 0x00e00558)}},
+     {{TOBN(0x1888d658, 0x61a023ef), TOBN(0x1d72aab4, 0xb9e5246e),
+       TOBN(0xa9a26348, 0xe5563ec0), TOBN(0xa0971963, 0xc3439a43)},
+      {TOBN(0x567dd54b, 0xadb9b5b7), TOBN(0x73fac1a1, 0xc45a524b),
+       TOBN(0x8fe97ef7, 0xfe38e608), TOBN(0x608748d2, 0x3f384f48)}},
+     {{TOBN(0xb0571794, 0xc486094f), TOBN(0x869254a3, 0x8bf3a8d6),
+       TOBN(0x148a8dd1, 0x310b0e25), TOBN(0x99ab9f3f, 0x9aa3f7d8)},
+      {TOBN(0x0927c68a, 0x6706c02e), TOBN(0x22b5e76c, 0x69790e6c),
+       TOBN(0x6c325260, 0x6c71376c), TOBN(0x53a57690, 0x09ef6657)}},
+     {{TOBN(0x8d63f852, 0xedffcf3a), TOBN(0xb4d2ed04, 0x3c0a6f55),
+       TOBN(0xdb3aa8de, 0x12519b9e), TOBN(0x5d38e9c4, 0x1e0a569a)},
+      {TOBN(0x871528bf, 0x303747e2), TOBN(0xa208e77c, 0xf5b5c18d),
+       TOBN(0x9d129c88, 0xca6bf923), TOBN(0xbcbf197f, 0xbf02839f)}},
+     {{TOBN(0x9b9bf030, 0x27323194), TOBN(0x3b055a8b, 0x339ca59d),
+       TOBN(0xb46b2312, 0x0f669520), TOBN(0x19789f1f, 0x497e5f24)},
+      {TOBN(0x9c499468, 0xaaf01801), TOBN(0x72ee1190, 0x8b69d59c),
+       TOBN(0x8bd39595, 0xacf4c079), TOBN(0x3ee11ece, 0x8e0cd048)}},
+     {{TOBN(0xebde86ec, 0x1ed66f18), TOBN(0x225d906b, 0xd61fce43),
+       TOBN(0x5cab07d6, 0xe8bed74d), TOBN(0x16e4617f, 0x27855ab7)},
+      {TOBN(0x6568aadd, 0xb2fbc3dd), TOBN(0xedb5484f, 0x8aeddf5b),
+       TOBN(0x878f20e8, 0x6dcf2fad), TOBN(0x3516497c, 0x615f5699)}}},
+    {{{TOBN(0xef0a3fec, 0xfa181e69), TOBN(0x9ea02f81, 0x30d69a98),
+       TOBN(0xb2e9cf8e, 0x66eab95d), TOBN(0x520f2beb, 0x24720021)},
+      {TOBN(0x621c540a, 0x1df84361), TOBN(0x12037721, 0x71fa6d5d),
+       TOBN(0x6e3c7b51, 0x0ff5f6ff), TOBN(0x817a069b, 0xabb2bef3)}},
+     {{TOBN(0x83572fb6, 0xb294cda6), TOBN(0x6ce9bf75, 0xb9039f34),
+       TOBN(0x20e012f0, 0x095cbb21), TOBN(0xa0aecc1b, 0xd063f0da)},
+      {TOBN(0x57c21c3a, 0xf02909e5), TOBN(0xc7d59ecf, 0x48ce9cdc),
+       TOBN(0x2732b844, 0x8ae336f8), TOBN(0x056e3723, 0x3f4f85f4)}},
+     {{TOBN(0x8a10b531, 0x89e800ca), TOBN(0x50fe0c17, 0x145208fd),
+       TOBN(0x9e43c0d3, 0xb714ba37), TOBN(0x427d200e, 0x34189acc)},
+      {TOBN(0x05dee24f, 0xe616e2c0), TOBN(0x9c25f4c8, 0xee1854c1),
+       TOBN(0x4d3222a5, 0x8f342a73), TOBN(0x0807804f, 0xa027c952)}},
+     {{TOBN(0xc222653a, 0x4f0d56f3), TOBN(0x961e4047, 0xca28b805),
+       TOBN(0x2c03f8b0, 0x4a73434b), TOBN(0x4c966787, 0xab712a19)},
+      {TOBN(0xcc196c42, 0x864fee42), TOBN(0xc1be93da, 0x5b0ece5c),
+       TOBN(0xa87d9f22, 0xc131c159), TOBN(0x2bb6d593, 0xdce45655)}},
+     {{TOBN(0x22c49ec9, 0xb809b7ce), TOBN(0x8a41486b, 0xe2c72c2c),
+       TOBN(0x813b9420, 0xfea0bf36), TOBN(0xb3d36ee9, 0xa66dac69)},
+      {TOBN(0x6fddc08a, 0x328cc987), TOBN(0x0a3bcd2c, 0x3a326461),
+       TOBN(0x7103c49d, 0xd810dbba), TOBN(0xf9d81a28, 0x4b78a4c4)}},
+     {{TOBN(0x3de865ad, 0xe4d55941), TOBN(0xdedafa5e, 0x30384087),
+       TOBN(0x6f414abb, 0x4ef18b9b), TOBN(0x9ee9ea42, 0xfaee5268)},
+      {TOBN(0x260faa16, 0x37a55a4a), TOBN(0xeb19a514, 0x015f93b9),
+       TOBN(0x51d7ebd2, 0x9e9c3598), TOBN(0x523fc56d, 0x1932178e)}},
+     {{TOBN(0x501d070c, 0xb98fe684), TOBN(0xd60fbe9a, 0x124a1458),
+       TOBN(0xa45761c8, 0x92bc6b3f), TOBN(0xf5384858, 0xfe6f27cb)},
+      {TOBN(0x4b0271f7, 0xb59e763b), TOBN(0x3d4606a9, 0x5b5a8e5e),
+       TOBN(0x1eda5d9b, 0x05a48292), TOBN(0xda7731d0, 0xe6fec446)}},
+     {{TOBN(0xa3e33693, 0x90d45871), TOBN(0xe9764040, 0x06166d8d),
+       TOBN(0xb5c33682, 0x89a90403), TOBN(0x4bd17983, 0x72f1d637)},
+      {TOBN(0xa616679e, 0xd5d2c53a), TOBN(0x5ec4bcd8, 0xfdcf3b87),
+       TOBN(0xae6d7613, 0xb66a694e), TOBN(0x7460fc76, 0xe3fc27e5)}},
+     {{TOBN(0x70469b82, 0x95caabee), TOBN(0xde024ca5, 0x889501e3),
+       TOBN(0x6bdadc06, 0x076ed265), TOBN(0x0cb1236b, 0x5a0ef8b2)},
+      {TOBN(0x4065ddbf, 0x0972ebf9), TOBN(0xf1dd3875, 0x22aca432),
+       TOBN(0xa88b97cf, 0x744aff76), TOBN(0xd1359afd, 0xfe8e3d24)}},
+     {{TOBN(0x52a3ba2b, 0x91502cf3), TOBN(0x2c3832a8, 0x084db75d),
+       TOBN(0x04a12ddd, 0xde30b1c9), TOBN(0x7802eabc, 0xe31fd60c)},
+      {TOBN(0x33707327, 0xa37fddab), TOBN(0x65d6f2ab, 0xfaafa973),
+       TOBN(0x3525c5b8, 0x11e6f91a), TOBN(0x76aeb0c9, 0x5f46530b)}},
+     {{TOBN(0xe8815ff6, 0x2f93a675), TOBN(0xa6ec9684, 0x05f48679),
+       TOBN(0x6dcbb556, 0x358ae884), TOBN(0x0af61472, 0xe19e3873)},
+      {TOBN(0x72334372, 0xa5f696be), TOBN(0xc65e57ea, 0x6f22fb70),
+       TOBN(0x268da30c, 0x946cea90), TOBN(0x136a8a87, 0x65681b2a)}},
+     {{TOBN(0xad5e81dc, 0x0f9f44d4), TOBN(0xf09a6960, 0x2c46585a),
+       TOBN(0xd1649164, 0xc447d1b1), TOBN(0x3b4b36c8, 0x879dc8b1)},
+      {TOBN(0x20d4177b, 0x3b6b234c), TOBN(0x096a2505, 0x1730d9d0),
+       TOBN(0x0611b9b8, 0xef80531d), TOBN(0xba904b3b, 0x64bb495d)}},
+     {{TOBN(0x1192d9d4, 0x93a3147a), TOBN(0x9f30a5dc, 0x9a565545),
+       TOBN(0x90b1f9cb, 0x6ef07212), TOBN(0x29958546, 0x0d87fc13)},
+      {TOBN(0xd3323eff, 0xc17db9ba), TOBN(0xcb18548c, 0xcb1644a8),
+       TOBN(0x18a306d4, 0x4f49ffbc), TOBN(0x28d658f1, 0x4c2e8684)}},
+     {{TOBN(0x44ba60cd, 0xa99f8c71), TOBN(0x67b7abdb, 0x4bf742ff),
+       TOBN(0x66310f9c, 0x914b3f99), TOBN(0xae430a32, 0xf412c161)},
+      {TOBN(0x1e6776d3, 0x88ace52f), TOBN(0x4bc0fa24, 0x52d7067d),
+       TOBN(0x03c286aa, 0x8f07cd1b), TOBN(0x4cb8f38c, 0xa985b2c1)}},
+     {{TOBN(0x83ccbe80, 0x8c3bff36), TOBN(0x005a0bd2, 0x5263e575),
+       TOBN(0x460d7dda, 0x259bdcd1), TOBN(0x4a1c5642, 0xfa5cab6b)},
+      {TOBN(0x2b7bdbb9, 0x9fe4fc88), TOBN(0x09418e28, 0xcc97bbb5),
+       TOBN(0xd8274fb4, 0xa12321ae), TOBN(0xb137007d, 0x5c87b64e)}},
+     {{TOBN(0x80531fe1, 0xc63c4962), TOBN(0x50541e89, 0x981fdb25),
+       TOBN(0xdc1291a1, 0xfd4c2b6b), TOBN(0xc0693a17, 0xa6df4fca)},
+      {TOBN(0xb2c4604e, 0x0117f203), TOBN(0x245f1963, 0x0a99b8d0),
+       TOBN(0xaedc20aa, 0xc6212c44), TOBN(0xb1ed4e56, 0x520f52a8)}},
+     {{TOBN(0xfe48f575, 0xf8547be3), TOBN(0x0a7033cd, 0xa9e45f98),
+       TOBN(0x4b45d3a9, 0x18c50100), TOBN(0xb2a6cd6a, 0xa61d41da)},
+      {TOBN(0x60bbb4f5, 0x57933c6b), TOBN(0xa7538ebd, 0x2b0d7ffc),
+       TOBN(0x9ea3ab8d, 0x8cd626b6), TOBN(0x8273a484, 0x3601625a)}},
+     {{TOBN(0x88859845, 0x0168e508), TOBN(0x8cbc9bb2, 0x99a94abd),
+       TOBN(0x713ac792, 0xfab0a671), TOBN(0xa3995b19, 0x6c9ebffc)},
+      {TOBN(0xe711668e, 0x1239e152), TOBN(0x56892558, 0xbbb8dff4),
+       TOBN(0x8bfc7dab, 0xdbf17963), TOBN(0x5b59fe5a, 0xb3de1253)}},
+     {{TOBN(0x7e3320eb, 0x34a9f7ae), TOBN(0xe5e8cf72, 0xd751efe4),
+       TOBN(0x7ea003bc, 0xd9be2f37), TOBN(0xc0f551a0, 0xb6c08ef7)},
+      {TOBN(0x56606268, 0x038f6725), TOBN(0x1dd38e35, 0x6d92d3b6),
+       TOBN(0x07dfce7c, 0xc3cbd686), TOBN(0x4e549e04, 0x651c5da8)}},
+     {{TOBN(0x4058f93b, 0x08b19340), TOBN(0xc2fae6f4, 0xcac6d89d),
+       TOBN(0x4bad8a8c, 0x8f159cc7), TOBN(0x0ddba4b3, 0xcb0b601c)},
+      {TOBN(0xda4fc7b5, 0x1dd95f8c), TOBN(0x1d163cd7, 0xcea5c255),
+       TOBN(0x30707d06, 0x274a8c4c), TOBN(0x79d9e008, 0x2802e9ce)}},
+     {{TOBN(0x02a29ebf, 0xe6ddd505), TOBN(0x37064e74, 0xb50bed1a),
+       TOBN(0x3f6bae65, 0xa7327d57), TOBN(0x3846f5f1, 0xf83920bc)},
+      {TOBN(0x87c37491, 0x60df1b9b), TOBN(0x4cfb2895, 0x2d1da29f),
+       TOBN(0x10a478ca, 0x4ed1743c), TOBN(0x390c6030, 0x3edd47c6)}},
+     {{TOBN(0x8f3e5312, 0x8c0a78de), TOBN(0xccd02bda, 0x1e85df70),
+       TOBN(0xd6c75c03, 0xa61b6582), TOBN(0x0762921c, 0xfc0eebd1)},
+      {TOBN(0xd34d0823, 0xd85010c0), TOBN(0xd73aaacb, 0x0044cf1f),
+       TOBN(0xfb4159bb, 0xa3b5e78a), TOBN(0x2287c7f7, 0xe5826f3f)}},
+     {{TOBN(0x4aeaf742, 0x580b1a01), TOBN(0xf080415d, 0x60423b79),
+       TOBN(0xe12622cd, 0xa7dea144), TOBN(0x49ea4996, 0x59d62472)},
+      {TOBN(0xb42991ef, 0x571f3913), TOBN(0x0610f214, 0xf5b25a8a),
+       TOBN(0x47adc585, 0x30b79e8f), TOBN(0xf90e3df6, 0x07a065a2)}},
+     {{TOBN(0x5d0a5deb, 0x43e2e034), TOBN(0x53fb5a34, 0x444024aa),
+       TOBN(0xa8628c68, 0x6b0c9f7f), TOBN(0x9c69c29c, 0xac563656)},
+      {TOBN(0x5a231feb, 0xbace47b6), TOBN(0xbdce0289, 0x9ea5a2ec),
+       TOBN(0x05da1fac, 0x9463853e), TOBN(0x96812c52, 0x509e78aa)}},
+     {{TOBN(0xd3fb5771, 0x57151692), TOBN(0xeb2721f8, 0xd98e1c44),
+       TOBN(0xc0506087, 0x32399be1), TOBN(0xda5a5511, 0xd979d8b8)},
+      {TOBN(0x737ed55d, 0xc6f56780), TOBN(0xe20d3004, 0x0dc7a7f4),
+       TOBN(0x02ce7301, 0xf5941a03), TOBN(0x91ef5215, 0xed30f83a)}},
+     {{TOBN(0x28727fc1, 0x4092d85f), TOBN(0x72d223c6, 0x5c49e41a),
+       TOBN(0xa7cf30a2, 0xba6a4d81), TOBN(0x7c086209, 0xb030d87d)},
+      {TOBN(0x04844c7d, 0xfc588b09), TOBN(0x728cd499, 0x5874bbb0),
+       TOBN(0xcc1281ee, 0xe84c0495), TOBN(0x0769b5ba, 0xec31958f)}},
+     {{TOBN(0x665c228b, 0xf99c2471), TOBN(0xf2d8a11b, 0x191eb110),
+       TOBN(0x4594f494, 0xd36d7024), TOBN(0x482ded8b, 0xcdcb25a1)},
+      {TOBN(0xc958a9d8, 0xdadd4885), TOBN(0x7004477e, 0xf1d2b547),
+       TOBN(0x0a45f6ef, 0x2a0af550), TOBN(0x4fc739d6, 0x2f8d6351)}},
+     {{TOBN(0x75cdaf27, 0x786f08a9), TOBN(0x8700bb26, 0x42c2737f),
+       TOBN(0x855a7141, 0x1c4e2670), TOBN(0x810188c1, 0x15076fef)},
+      {TOBN(0xc251d0c9, 0xabcd3297), TOBN(0xae4c8967, 0xf48108eb),
+       TOBN(0xbd146de7, 0x18ceed30), TOBN(0xf9d4f07a, 0xc986bced)}},
+     {{TOBN(0x5ad98ed5, 0x83fa1e08), TOBN(0x7780d33e, 0xbeabd1fb),
+       TOBN(0xe330513c, 0x903b1196), TOBN(0xba11de9e, 0xa47bc8c4)},
+      {TOBN(0x684334da, 0x02c2d064), TOBN(0x7ecf360d, 0xa48de23b),
+       TOBN(0x57a1b474, 0x0a9089d8), TOBN(0xf28fa439, 0xff36734c)}},
+     {{TOBN(0xf2a482cb, 0xea4570b3), TOBN(0xee65d68b, 0xa5ebcee9),
+       TOBN(0x988d0036, 0xb9694cd5), TOBN(0x53edd0e9, 0x37885d32)},
+      {TOBN(0xe37e3307, 0xbeb9bc6d), TOBN(0xe9abb907, 0x9f5c6768),
+       TOBN(0x4396ccd5, 0x51f2160f), TOBN(0x2500888c, 0x47336da6)}},
+     {{TOBN(0x383f9ed9, 0x926fce43), TOBN(0x809dd1c7, 0x04da2930),
+       TOBN(0x30f6f596, 0x8a4cb227), TOBN(0x0d700c7f, 0x73a56b38)},
+      {TOBN(0x1825ea33, 0xab64a065), TOBN(0xaab9b735, 0x1338df80),
+       TOBN(0x1516100d, 0x9b63f57f), TOBN(0x2574395a, 0x27a6a634)}},
+     {{TOBN(0xb5560fb6, 0x700a1acd), TOBN(0xe823fd73, 0xfd999681),
+       TOBN(0xda915d1f, 0x6cb4e1ba), TOBN(0x0d030118, 0x6ebe00a3)},
+      {TOBN(0x744fb0c9, 0x89fca8cd), TOBN(0x970d01db, 0xf9da0e0b),
+       TOBN(0x0ad8c564, 0x7931d76f), TOBN(0xb15737bf, 0xf659b96a)}},
+     {{TOBN(0xdc9933e8, 0xa8b484e7), TOBN(0xb2fdbdf9, 0x7a26dec7),
+       TOBN(0x2349e9a4, 0x9f1f0136), TOBN(0x7860368e, 0x70fddddb)},
+      {TOBN(0xd93d2c1c, 0xf9ad3e18), TOBN(0x6d6c5f17, 0x689f4e79),
+       TOBN(0x7a544d91, 0xb24ff1b6), TOBN(0x3e12a5eb, 0xfe16cd8c)}},
+     {{TOBN(0x543574e9, 0xa56b872f), TOBN(0xa1ad550c, 0xfcf68ea2),
+       TOBN(0x689e37d2, 0x3f560ef7), TOBN(0x8c54b9ca, 0xc9d47a8b)},
+      {TOBN(0x46d40a4a, 0x088ac342), TOBN(0xec450c7c, 0x1576c6d0),
+       TOBN(0xb589e31c, 0x1f9689e9), TOBN(0xdacf2602, 0xb8781718)}},
+     {{TOBN(0xa89237c6, 0xc8cb6b42), TOBN(0x1326fc93, 0xb96ef381),
+       TOBN(0x55d56c6d, 0xb5f07825), TOBN(0xacba2eea, 0x7449e22d)},
+      {TOBN(0x74e0887a, 0x633c3000), TOBN(0xcb6cd172, 0xd7cbcf71),
+       TOBN(0x309e81de, 0xc36cf1be), TOBN(0x07a18a6d, 0x60ae399b)}},
+     {{TOBN(0xb36c2679, 0x9edce57e), TOBN(0x52b892f4, 0xdf001d41),
+       TOBN(0xd884ae5d, 0x16a1f2c6), TOBN(0x9b329424, 0xefcc370a)},
+      {TOBN(0x3120daf2, 0xbd2e21df), TOBN(0x55298d2d, 0x02470a99),
+       TOBN(0x0b78af6c, 0xa05db32e), TOBN(0x5c76a331, 0x601f5636)}},
+     {{TOBN(0xaae861ff, 0xf8a4f29c), TOBN(0x70dc9240, 0xd68f8d49),
+       TOBN(0x960e649f, 0x81b1321c), TOBN(0x3d2c801b, 0x8792e4ce)},
+      {TOBN(0xf479f772, 0x42521876), TOBN(0x0bed93bc, 0x416c79b1),
+       TOBN(0xa67fbc05, 0x263e5bc9), TOBN(0x01e8e630, 0x521db049)}},
+     {{TOBN(0x76f26738, 0xc6f3431e), TOBN(0xe609cb02, 0xe3267541),
+       TOBN(0xb10cff2d, 0x818c877c), TOBN(0x1f0e75ce, 0x786a13cb)},
+      {TOBN(0xf4fdca64, 0x1158544d), TOBN(0x5d777e89, 0x6cb71ed0),
+       TOBN(0x3c233737, 0xa9aa4755), TOBN(0x7b453192, 0xe527ab40)}},
+     {{TOBN(0xdb59f688, 0x39f05ffe), TOBN(0x8f4f4be0, 0x6d82574e),
+       TOBN(0xcce3450c, 0xee292d1b), TOBN(0xaa448a12, 0x61ccd086)},
+      {TOBN(0xabce91b3, 0xf7914967), TOBN(0x4537f09b, 0x1908a5ed),
+       TOBN(0xa812421e, 0xf51042e7), TOBN(0xfaf5cebc, 0xec0b3a34)}},
+     {{TOBN(0x730ffd87, 0x4ca6b39a), TOBN(0x70fb72ed, 0x02efd342),
+       TOBN(0xeb4735f9, 0xd75c8edb), TOBN(0xc11f2157, 0xc278aa51)},
+      {TOBN(0xc459f635, 0xbf3bfebf), TOBN(0x3a1ff0b4, 0x6bd9601f),
+       TOBN(0xc9d12823, 0xc420cb73), TOBN(0x3e9af3e2, 0x3c2915a3)}},
+     {{TOBN(0xe0c82c72, 0xb41c3440), TOBN(0x175239e5, 0xe3039a5f),
+       TOBN(0xe1084b8a, 0x558795a3), TOBN(0x328d0a1d, 0xd01e5c60)},
+      {TOBN(0x0a495f2e, 0xd3788a04), TOBN(0x25d8ff16, 0x66c11a9f),
+       TOBN(0xf5155f05, 0x9ed692d6), TOBN(0x954fa107, 0x4f425fe4)}},
+     {{TOBN(0xd16aabf2, 0xe98aaa99), TOBN(0x90cd8ba0, 0x96b0f88a),
+       TOBN(0x957f4782, 0xc154026a), TOBN(0x54ee0734, 0x52af56d2)},
+      {TOBN(0xbcf89e54, 0x45b4147a), TOBN(0x3d102f21, 0x9a52816c),
+       TOBN(0x6808517e, 0x39b62e77), TOBN(0x92e25421, 0x69169ad8)}},
+     {{TOBN(0xd721d871, 0xbb608558), TOBN(0x60e4ebae, 0xf6d4ff9b),
+       TOBN(0x0ba10819, 0x41f2763e), TOBN(0xca2e45be, 0x51ee3247)},
+      {TOBN(0x66d172ec, 0x2bfd7a5f), TOBN(0x528a8f2f, 0x74d0b12d),
+       TOBN(0xe17f1e38, 0xdabe70dc), TOBN(0x1d5d7316, 0x9f93983c)}},
+     {{TOBN(0x51b2184a, 0xdf423e31), TOBN(0xcb417291, 0xaedb1a10),
+       TOBN(0x2054ca93, 0x625bcab9), TOBN(0x54396860, 0xa98998f0)},
+      {TOBN(0x4e53f6c4, 0xa54ae57e), TOBN(0x0ffeb590, 0xee648e9d),
+       TOBN(0xfbbdaadc, 0x6afaf6bc), TOBN(0xf88ae796, 0xaa3bfb8a)}},
+     {{TOBN(0x209f1d44, 0xd2359ed9), TOBN(0xac68dd03, 0xf3544ce2),
+       TOBN(0xf378da47, 0xfd51e569), TOBN(0xe1abd860, 0x2cc80097)},
+      {TOBN(0x23ca18d9, 0x343b6e3a), TOBN(0x480797e8, 0xb40a1bae),
+       TOBN(0xd1f0c717, 0x533f3e67), TOBN(0x44896970, 0x06e6cdfc)}},
+     {{TOBN(0x8ca21055, 0x52a82e8d), TOBN(0xb2caf785, 0x78460cdc),
+       TOBN(0x4c1b7b62, 0xe9037178), TOBN(0xefc09d2c, 0xdb514b58)},
+      {TOBN(0x5f2df9ee, 0x9113be5c), TOBN(0x2fbda78f, 0xb3f9271c),
+       TOBN(0xe09a81af, 0x8f83fc54), TOBN(0x06b13866, 0x8afb5141)}},
+     {{TOBN(0x38f6480f, 0x43e3865d), TOBN(0x72dd77a8, 0x1ddf47d9),
+       TOBN(0xf2a8e971, 0x4c205ff7), TOBN(0x46d449d8, 0x9d088ad8)},
+      {TOBN(0x926619ea, 0x185d706f), TOBN(0xe47e02eb, 0xc7dd7f62),
+       TOBN(0xe7f120a7, 0x8cbc2031), TOBN(0xc18bef00, 0x998d4ac9)}},
+     {{TOBN(0x18f37a9c, 0x6bdf22da), TOBN(0xefbc432f, 0x90dc82df),
+       TOBN(0xc52cef8e, 0x5d703651), TOBN(0x82887ba0, 0xd99881a5)},
+      {TOBN(0x7cec9dda, 0xb920ec1d), TOBN(0xd0d7e8c3, 0xec3e8d3b),
+       TOBN(0x445bc395, 0x4ca88747), TOBN(0xedeaa2e0, 0x9fd53535)}},
+     {{TOBN(0x461b1d93, 0x6cc87475), TOBN(0xd92a52e2, 0x6d2383bd),
+       TOBN(0xfabccb59, 0xd7903546), TOBN(0x6111a761, 0x3d14b112)},
+      {TOBN(0x0ae584fe, 0xb3d5f612), TOBN(0x5ea69b8d, 0x60e828ec),
+       TOBN(0x6c078985, 0x54087030), TOBN(0x649cab04, 0xac4821fe)}},
+     {{TOBN(0x25ecedcf, 0x8bdce214), TOBN(0xb5622f72, 0x86af7361),
+       TOBN(0x0e1227aa, 0x7038b9e2), TOBN(0xd0efb273, 0xac20fa77)},
+      {TOBN(0x817ff88b, 0x79df975b), TOBN(0x856bf286, 0x1999503e),
+       TOBN(0xb4d5351f, 0x5038ec46), TOBN(0x740a52c5, 0xfc42af6e)}},
+     {{TOBN(0x2e38bb15, 0x2cbb1a3f), TOBN(0xc3eb99fe, 0x17a83429),
+       TOBN(0xca4fcbf1, 0xdd66bb74), TOBN(0x880784d6, 0xcde5e8fc)},
+      {TOBN(0xddc84c1c, 0xb4e7a0be), TOBN(0x8780510d, 0xbd15a72f),
+       TOBN(0x44bcf1af, 0x81ec30e1), TOBN(0x141e50a8, 0x0a61073e)}},
+     {{TOBN(0x0d955718, 0x47be87ae), TOBN(0x68a61417, 0xf76a4372),
+       TOBN(0xf57e7e87, 0xc607c3d3), TOBN(0x043afaf8, 0x5252f332)},
+      {TOBN(0xcc14e121, 0x1552a4d2), TOBN(0xb6dee692, 0xbb4d4ab4),
+       TOBN(0xb6ab74c8, 0xa03816a4), TOBN(0x84001ae4, 0x6f394a29)}},
+     {{TOBN(0x5bed8344, 0xd795fb45), TOBN(0x57326e7d, 0xb79f55a5),
+       TOBN(0xc9533ce0, 0x4accdffc), TOBN(0x53473caf, 0x3993fa04)},
+      {TOBN(0x7906eb93, 0xa13df4c8), TOBN(0xa73e51f6, 0x97cbe46f),
+       TOBN(0xd1ab3ae1, 0x0ae4ccf8), TOBN(0x25614508, 0x8a5b3dbc)}},
+     {{TOBN(0x61eff962, 0x11a71b27), TOBN(0xdf71412b, 0x6bb7fa39),
+       TOBN(0xb31ba6b8, 0x2bd7f3ef), TOBN(0xb0b9c415, 0x69180d29)},
+      {TOBN(0xeec14552, 0x014cdde5), TOBN(0x702c624b, 0x227b4bbb),
+       TOBN(0x2b15e8c2, 0xd3e988f3), TOBN(0xee3bcc6d, 0xa4f7fd04)}},
+     {{TOBN(0x9d00822a, 0x42ac6c85), TOBN(0x2db0cea6, 0x1df9f2b7),
+       TOBN(0xd7cad2ab, 0x42de1e58), TOBN(0x346ed526, 0x2d6fbb61)},
+      {TOBN(0xb3962995, 0x1a2faf09), TOBN(0x2fa8a580, 0x7c25612e),
+       TOBN(0x30ae04da, 0x7cf56490), TOBN(0x75662908, 0x0eea3961)}},
+     {{TOBN(0x3609f5c5, 0x3d080847), TOBN(0xcb081d39, 0x5241d4f6),
+       TOBN(0xb4fb3810, 0x77961a63), TOBN(0xc20c5984, 0x2abb66fc)},
+      {TOBN(0x3d40aa7c, 0xf902f245), TOBN(0x9cb12736, 0x4e536b1e),
+       TOBN(0x5eda24da, 0x99b3134f), TOBN(0xafbd9c69, 0x5cd011af)}},
+     {{TOBN(0x9a16e30a, 0xc7088c7d), TOBN(0x5ab65710, 0x3207389f),
+       TOBN(0x1b09547f, 0xe7407a53), TOBN(0x2322f9d7, 0x4fdc6eab)},
+      {TOBN(0xc0f2f22d, 0x7430de4d), TOBN(0x19382696, 0xe68ca9a9),
+       TOBN(0x17f1eff1, 0x918e5868), TOBN(0xe3b5b635, 0x586f4204)}},
+     {{TOBN(0x146ef980, 0x3fbc4341), TOBN(0x359f2c80, 0x5b5eed4e),
+       TOBN(0x9f35744e, 0x7482e41d), TOBN(0x9a9ac3ec, 0xf3b224c2)},
+      {TOBN(0x9161a6fe, 0x91fc50ae), TOBN(0x89ccc66b, 0xc613fa7c),
+       TOBN(0x89268b14, 0xc732f15a), TOBN(0x7cd6f4e2, 0xb467ed03)}},
+     {{TOBN(0xfbf79869, 0xce56b40e), TOBN(0xf93e094c, 0xc02dde98),
+       TOBN(0xefe0c3a8, 0xedee2cd7), TOBN(0x90f3ffc0, 0xb268fd42)},
+      {TOBN(0x81a7fd56, 0x08241aed), TOBN(0x95ab7ad8, 0x00b1afe8),
+       TOBN(0x40127056, 0x3e310d52), TOBN(0xd3ffdeb1, 0x09d9fc43)}},
+     {{TOBN(0xc8f85c91, 0xd11a8594), TOBN(0x2e74d258, 0x31cf6db8),
+       TOBN(0x829c7ca3, 0x02b5dfd0), TOBN(0xe389cfbe, 0x69143c86)},
+      {TOBN(0xd01b6405, 0x941768d8), TOBN(0x45103995, 0x03bf825d),
+       TOBN(0xcc4ee166, 0x56cd17e2), TOBN(0xbea3c283, 0xba037e79)}},
+     {{TOBN(0x4e1ac06e, 0xd9a47520), TOBN(0xfbfe18aa, 0xaf852404),
+       TOBN(0x5615f8e2, 0x8087648a), TOBN(0x7301e47e, 0xb9d150d9)},
+      {TOBN(0x79f9f9dd, 0xb299b977), TOBN(0x76697a7b, 0xa5b78314),
+       TOBN(0x10d67468, 0x7d7c90e7), TOBN(0x7afffe03, 0x937210b5)}},
+     {{TOBN(0x5aef3e4b, 0x28c22cee), TOBN(0xefb0ecd8, 0x09fd55ae),
+       TOBN(0x4cea7132, 0x0d2a5d6a), TOBN(0x9cfb5fa1, 0x01db6357)},
+      {TOBN(0x395e0b57, 0xf36e1ac5), TOBN(0x008fa9ad, 0x36cafb7d),
+       TOBN(0x8f6cdf70, 0x5308c4db), TOBN(0x51527a37, 0x95ed2477)}},
+     {{TOBN(0xba0dee30, 0x5bd21311), TOBN(0x6ed41b22, 0x909c90d7),
+       TOBN(0xc5f6b758, 0x7c8696d3), TOBN(0x0db8eaa8, 0x3ce83a80)},
+      {TOBN(0xd297fe37, 0xb24b4b6f), TOBN(0xfe58afe8, 0x522d1f0d),
+       TOBN(0x97358736, 0x8c98dbd9), TOBN(0x6bc226ca, 0x9454a527)}},
+     {{TOBN(0xa12b384e, 0xce53c2d0), TOBN(0x779d897d, 0x5e4606da),
+       TOBN(0xa53e47b0, 0x73ec12b0), TOBN(0x462dbbba, 0x5756f1ad)},
+      {TOBN(0x69fe09f2, 0xcafe37b6), TOBN(0x273d1ebf, 0xecce2e17),
+       TOBN(0x8ac1d538, 0x3cf607fd), TOBN(0x8035f7ff, 0x12e10c25)}}},
+    {{{TOBN(0x854d34c7, 0x7e6c5520), TOBN(0xc27df9ef, 0xdcb9ea58),
+       TOBN(0x405f2369, 0xd686666d), TOBN(0x29d1febf, 0x0417aa85)},
+      {TOBN(0x9846819e, 0x93470afe), TOBN(0x3e6a9669, 0xe2a27f9e),
+       TOBN(0x24d008a2, 0xe31e6504), TOBN(0xdba7cecf, 0x9cb7680a)}},
+     {{TOBN(0xecaff541, 0x338d6e43), TOBN(0x56f7dd73, 0x4541d5cc),
+       TOBN(0xb5d426de, 0x96bc88ca), TOBN(0x48d94f6b, 0x9ed3a2c3)},
+      {TOBN(0x6354a3bb, 0x2ef8279c), TOBN(0xd575465b, 0x0b1867f2),
+       TOBN(0xef99b0ff, 0x95225151), TOBN(0xf3e19d88, 0xf94500d8)}},
+     {{TOBN(0x92a83268, 0xe32dd620), TOBN(0x913ec99f, 0x627849a2),
+       TOBN(0xedd8fdfa, 0x2c378882), TOBN(0xaf96f33e, 0xee6f8cfe)},
+      {TOBN(0xc06737e5, 0xdc3fa8a5), TOBN(0x236bb531, 0xb0b03a1d),
+       TOBN(0x33e59f29, 0x89f037b0), TOBN(0x13f9b5a7, 0xd9a12a53)}},
+     {{TOBN(0x0d0df6ce, 0x51efb310), TOBN(0xcb5b2eb4, 0x958df5be),
+       TOBN(0xd6459e29, 0x36158e59), TOBN(0x82aae2b9, 0x1466e336)},
+      {TOBN(0xfb658a39, 0x411aa636), TOBN(0x7152ecc5, 0xd4c0a933),
+       TOBN(0xf10c758a, 0x49f026b7), TOBN(0xf4837f97, 0xcb09311f)}},
+     {{TOBN(0xddfb02c4, 0xc753c45f), TOBN(0x18ca81b6, 0xf9c840fe),
+       TOBN(0x846fd09a, 0xb0f8a3e6), TOBN(0xb1162add, 0xe7733dbc)},
+      {TOBN(0x7070ad20, 0x236e3ab6), TOBN(0xf88cdaf5, 0xb2a56326),
+       TOBN(0x05fc8719, 0x997cbc7a), TOBN(0x442cd452, 0x4b665272)}},
+     {{TOBN(0x7807f364, 0xb71698f5), TOBN(0x6ba418d2, 0x9f7b605e),
+       TOBN(0xfd20b00f, 0xa03b2cbb), TOBN(0x883eca37, 0xda54386f)},
+      {TOBN(0xff0be43f, 0xf3437f24), TOBN(0xe910b432, 0xa48bb33c),
+       TOBN(0x4963a128, 0x329df765), TOBN(0xac1dd556, 0xbe2fe6f7)}},
+     {{TOBN(0x557610f9, 0x24a0a3fc), TOBN(0x38e17bf4, 0xe881c3f9),
+       TOBN(0x6ba84faf, 0xed0dac99), TOBN(0xd4a222c3, 0x59eeb918)},
+      {TOBN(0xc79c1dbe, 0x13f542b6), TOBN(0x1fc65e0d, 0xe425d457),
+       TOBN(0xeffb754f, 0x1debb779), TOBN(0x638d8fd0, 0x9e08af60)}},
+     {{TOBN(0x994f523a, 0x626332d5), TOBN(0x7bc38833, 0x5561bb44),
+       TOBN(0x005ed4b0, 0x3d845ea2), TOBN(0xd39d3ee1, 0xc2a1f08a)},
+      {TOBN(0x6561fdd3, 0xe7676b0d), TOBN(0x620e35ff, 0xfb706017),
+       TOBN(0x36ce424f, 0xf264f9a8), TOBN(0xc4c3419f, 0xda2681f7)}},
+     {{TOBN(0xfb6afd2f, 0x69beb6e8), TOBN(0x3a50b993, 0x6d700d03),
+       TOBN(0xc840b2ad, 0x0c83a14f), TOBN(0x573207be, 0x54085bef)},
+      {TOBN(0x5af882e3, 0x09fe7e5b), TOBN(0x957678a4, 0x3b40a7e1),
+       TOBN(0x172d4bdd, 0x543056e2), TOBN(0x9c1b26b4, 0x0df13c0a)}},
+     {{TOBN(0x1c30861c, 0xf405ff06), TOBN(0xebac86bd, 0x486e828b),
+       TOBN(0xe791a971, 0x636933fc), TOBN(0x50e7c2be, 0x7aeee947)},
+      {TOBN(0xc3d4a095, 0xfa90d767), TOBN(0xae60eb7b, 0xe670ab7b),
+       TOBN(0x17633a64, 0x397b056d), TOBN(0x93a21f33, 0x105012aa)}},
+     {{TOBN(0x663c370b, 0xabb88643), TOBN(0x91df36d7, 0x22e21599),
+       TOBN(0x183ba835, 0x8b761671), TOBN(0x381eea1d, 0x728f3bf1)},
+      {TOBN(0xb9b2f1ba, 0x39966e6c), TOBN(0x7c464a28, 0xe7295492),
+       TOBN(0x0fd5f70a, 0x09b26b7f), TOBN(0xa9aba1f9, 0xfbe009df)}},
+     {{TOBN(0x857c1f22, 0x369b87ad), TOBN(0x3c00e5d9, 0x32fca556),
+       TOBN(0x1ad74cab, 0x90b06466), TOBN(0xa7112386, 0x550faaf2)},
+      {TOBN(0x7435e198, 0x6d9bd5f5), TOBN(0x2dcc7e38, 0x59c3463f),
+       TOBN(0xdc7df748, 0xca7bd4b2), TOBN(0x13cd4c08, 0x9dec2f31)}},
+     {{TOBN(0x0d3b5df8, 0xe3237710), TOBN(0x0dadb26e, 0xcbd2f7b0),
+       TOBN(0x9f5966ab, 0xe4aa082b), TOBN(0x666ec8de, 0x350e966e)},
+      {TOBN(0x1bfd1ed5, 0xee524216), TOBN(0xcd93c59b, 0x41dab0b6),
+       TOBN(0x658a8435, 0xd186d6ba), TOBN(0x1b7d34d2, 0x159d1195)}},
+     {{TOBN(0x5936e460, 0x22caf46b), TOBN(0x6a45dd8f, 0x9a96fe4f),
+       TOBN(0xf7925434, 0xb98f474e), TOBN(0x41410412, 0x0053ef15)},
+      {TOBN(0x71cf8d12, 0x41de97bf), TOBN(0xb8547b61, 0xbd80bef4),
+       TOBN(0xb47d3970, 0xc4db0037), TOBN(0xf1bcd328, 0xfef20dff)}},
+     {{TOBN(0x31a92e09, 0x10caad67), TOBN(0x1f591960, 0x5531a1e1),
+       TOBN(0x3bb852e0, 0x5f4fc840), TOBN(0x63e297ca, 0x93a72c6c)},
+      {TOBN(0x3c2b0b2e, 0x49abad67), TOBN(0x6ec405fc, 0xed3db0d9),
+       TOBN(0xdc14a530, 0x7fef1d40), TOBN(0xccd19846, 0x280896fc)}},
+     {{TOBN(0x00f83176, 0x9bb81648), TOBN(0xd69eb485, 0x653120d0),
+       TOBN(0xd17d75f4, 0x4ccabc62), TOBN(0x34a07f82, 0xb749fcb1)},
+      {TOBN(0x2c3af787, 0xbbfb5554), TOBN(0xb06ed4d0, 0x62e283f8),
+       TOBN(0x5722889f, 0xa19213a0), TOBN(0x162b085e, 0xdcf3c7b4)}},
+     {{TOBN(0xbcaecb31, 0xe0dd3eca), TOBN(0xc6237fbc, 0xe52f13a5),
+       TOBN(0xcc2b6b03, 0x27bac297), TOBN(0x2ae1cac5, 0xb917f54a)},
+      {TOBN(0x474807d4, 0x7845ae4f), TOBN(0xfec7dd92, 0xce5972e0),
+       TOBN(0xc3bd2541, 0x1d7915bb), TOBN(0x66f85dc4, 0xd94907ca)}},
+     {{TOBN(0xd981b888, 0xbdbcf0ca), TOBN(0xd75f5da6, 0xdf279e9f),
+       TOBN(0x128bbf24, 0x7054e934), TOBN(0x3c6ff6e5, 0x81db134b)},
+      {TOBN(0x795b7cf4, 0x047d26e4), TOBN(0xf370f7b8, 0x5049ec37),
+       TOBN(0xc6712d4d, 0xced945af), TOBN(0xdf30b5ec, 0x095642bc)}},
+     {{TOBN(0x9b034c62, 0x4896246e), TOBN(0x5652c016, 0xee90bbd1),
+       TOBN(0xeb38636f, 0x87fedb73), TOBN(0x5e32f847, 0x0135a613)},
+      {TOBN(0x0703b312, 0xcf933c83), TOBN(0xd05bb76e, 0x1a7f47e6),
+       TOBN(0x825e4f0c, 0x949c2415), TOBN(0x569e5622, 0x7250d6f8)}},
+     {{TOBN(0xbbe9eb3a, 0x6568013e), TOBN(0x8dbd203f, 0x22f243fc),
+       TOBN(0x9dbd7694, 0xb342734a), TOBN(0x8f6d12f8, 0x46afa984)},
+      {TOBN(0xb98610a2, 0xc9eade29), TOBN(0xbab4f323, 0x47dd0f18),
+       TOBN(0x5779737b, 0x671c0d46), TOBN(0x10b6a7c6, 0xd3e0a42a)}},
+     {{TOBN(0xfb19ddf3, 0x3035b41c), TOBN(0xd336343f, 0x99c45895),
+       TOBN(0x61fe4938, 0x54c857e5), TOBN(0xc4d506be, 0xae4e57d5)},
+      {TOBN(0x3cd8c8cb, 0xbbc33f75), TOBN(0x7281f08a, 0x9262c77d),
+       TOBN(0x083f4ea6, 0xf11a2823), TOBN(0x8895041e, 0x9fba2e33)}},
+     {{TOBN(0xfcdfea49, 0x9c438edf), TOBN(0x7678dcc3, 0x91edba44),
+       TOBN(0xf07b3b87, 0xe2ba50f0), TOBN(0xc13888ef, 0x43948c1b)},
+      {TOBN(0xc2135ad4, 0x1140af42), TOBN(0x8e5104f3, 0x926ed1a7),
+       TOBN(0xf24430cb, 0x88f6695f), TOBN(0x0ce0637b, 0x6d73c120)}},
+     {{TOBN(0xb2db01e6, 0xfe631e8f), TOBN(0x1c5563d7, 0xd7bdd24b),
+       TOBN(0x8daea3ba, 0x369ad44f), TOBN(0x000c81b6, 0x8187a9f9)},
+      {TOBN(0x5f48a951, 0xaae1fd9a), TOBN(0xe35626c7, 0x8d5aed8a),
+       TOBN(0x20952763, 0x0498c622), TOBN(0x76d17634, 0x773aa504)}},
+     {{TOBN(0x36d90dda, 0xeb300f7a), TOBN(0x9dcf7dfc, 0xedb5e801),
+       TOBN(0x645cb268, 0x74d5244c), TOBN(0xa127ee79, 0x348e3aa2)},
+      {TOBN(0x488acc53, 0x575f1dbb), TOBN(0x95037e85, 0x80e6161e),
+       TOBN(0x57e59283, 0x292650d0), TOBN(0xabe67d99, 0x14938216)}},
+     {{TOBN(0x3c7f944b, 0x3f8e1065), TOBN(0xed908cb6, 0x330e8924),
+       TOBN(0x08ee8fd5, 0x6f530136), TOBN(0x2227b7d5, 0xd7ffc169)},
+      {TOBN(0x4f55c893, 0xb5cd6dd5), TOBN(0x82225e11, 0xa62796e8),
+       TOBN(0x5c6cead1, 0xcb18e12c), TOBN(0x4381ae0c, 0x84f5a51a)}},
+     {{TOBN(0x345913d3, 0x7fafa4c8), TOBN(0x3d918082, 0x0491aac0),
+       TOBN(0x9347871f, 0x3e69264c), TOBN(0xbea9dd3c, 0xb4f4f0cd)},
+      {TOBN(0xbda5d067, 0x3eadd3e7), TOBN(0x0033c1b8, 0x0573bcd8),
+       TOBN(0x25589379, 0x5da2486c), TOBN(0xcb89ee5b, 0x86abbee7)}},
+     {{TOBN(0x8fe0a8f3, 0x22532e5d), TOBN(0xb6410ff0, 0x727dfc4c),
+       TOBN(0x619b9d58, 0x226726db), TOBN(0x5ec25669, 0x7a2b2dc7)},
+      {TOBN(0xaf4d2e06, 0x4c3beb01), TOBN(0x852123d0, 0x7acea556),
+       TOBN(0x0e9470fa, 0xf783487a), TOBN(0x75a7ea04, 0x5664b3eb)}},
+     {{TOBN(0x4ad78f35, 0x6798e4ba), TOBN(0x9214e6e5, 0xc7d0e091),
+       TOBN(0xc420b488, 0xb1290403), TOBN(0x64049e0a, 0xfc295749)},
+      {TOBN(0x03ef5af1, 0x3ae9841f), TOBN(0xdbe4ca19, 0xb0b662a6),
+       TOBN(0x46845c5f, 0xfa453458), TOBN(0xf8dabf19, 0x10b66722)}},
+     {{TOBN(0xb650f0aa, 0xcce2793b), TOBN(0x71db851e, 0xc5ec47c1),
+       TOBN(0x3eb78f3e, 0x3b234fa9), TOBN(0xb0c60f35, 0xfc0106ce)},
+      {TOBN(0x05427121, 0x774eadbd), TOBN(0x25367faf, 0xce323863),
+       TOBN(0x7541b5c9, 0xcd086976), TOBN(0x4ff069e2, 0xdc507ad1)}},
+     {{TOBN(0x74145256, 0x8776e667), TOBN(0x6e76142c, 0xb23c6bb5),
+       TOBN(0xdbf30712, 0x1b3a8a87), TOBN(0x60e7363e, 0x98450836)},
+      {TOBN(0x5741450e, 0xb7366d80), TOBN(0xe4ee14ca, 0x4837dbdf),
+       TOBN(0xa765eb9b, 0x69d4316f), TOBN(0x04548dca, 0x8ef43825)}},
+     {{TOBN(0x9c9f4e4c, 0x5ae888eb), TOBN(0x733abb51, 0x56e9ac99),
+       TOBN(0xdaad3c20, 0xba6ac029), TOBN(0x9b8dd3d3, 0x2ba3e38e)},
+      {TOBN(0xa9bb4c92, 0x0bc5d11a), TOBN(0xf20127a7, 0x9c5f88a3),
+       TOBN(0x4f52b06e, 0x161d3cb8), TOBN(0x26c1ff09, 0x6afaf0a6)}},
+     {{TOBN(0x32670d2f, 0x7189e71f), TOBN(0xc6438748, 0x5ecf91e7),
+       TOBN(0x15758e57, 0xdb757a21), TOBN(0x427d09f8, 0x290a9ce5)},
+      {TOBN(0x846a308f, 0x38384a7a), TOBN(0xaac3acb4, 0xb0732b99),
+       TOBN(0x9e941009, 0x17845819), TOBN(0x95cba111, 0xa7ce5e03)}},
+     {{TOBN(0x6f3d4f7f, 0xb00009c4), TOBN(0xb8396c27, 0x8ff28b5f),
+       TOBN(0xb1a9ae43, 0x1c97975d), TOBN(0x9d7ba8af, 0xe5d9fed5)},
+      {TOBN(0x338cf09f, 0x34f485b6), TOBN(0xbc0ddacc, 0x64122516),
+       TOBN(0xa450da12, 0x05d471fe), TOBN(0x4c3a6250, 0x628dd8c9)}},
+     {{TOBN(0x69c7d103, 0xd1295837), TOBN(0xa2893e50, 0x3807eb2f),
+       TOBN(0xd6e1e1de, 0xbdb41491), TOBN(0xc630745b, 0x5e138235)},
+      {TOBN(0xc892109e, 0x48661ae1), TOBN(0x8d17e7eb, 0xea2b2674),
+       TOBN(0x00ec0f87, 0xc328d6b5), TOBN(0x6d858645, 0xf079ff9e)}},
+     {{TOBN(0x6cdf243e, 0x19115ead), TOBN(0x1ce1393e, 0x4bac4fcf),
+       TOBN(0x2c960ed0, 0x9c29f25b), TOBN(0x59be4d8e, 0x9d388a05)},
+      {TOBN(0x0d46e06c, 0xd0def72b), TOBN(0xb923db5d, 0xe0342748),
+       TOBN(0xf7d3aacd, 0x936d4a3d), TOBN(0x558519cc, 0x0b0b099e)}},
+     {{TOBN(0x3ea8ebf8, 0x827097ef), TOBN(0x259353db, 0xd054f55d),
+       TOBN(0x84c89abc, 0x6d2ed089), TOBN(0x5c548b69, 0x8e096a7c)},
+      {TOBN(0xd587f616, 0x994b995d), TOBN(0x4d1531f6, 0xa5845601),
+       TOBN(0x792ab31e, 0x451fd9f0), TOBN(0xc8b57bb2, 0x65adf6ca)}},
+     {{TOBN(0x68440fcb, 0x1cd5ad73), TOBN(0xb9c860e6, 0x6144da4f),
+       TOBN(0x2ab286aa, 0x8462beb8), TOBN(0xcc6b8fff, 0xef46797f)},
+      {TOBN(0xac820da4, 0x20c8a471), TOBN(0x69ae05a1, 0x77ff7faf),
+       TOBN(0xb9163f39, 0xbfb5da77), TOBN(0xbd03e590, 0x2c73ab7a)}},
+     {{TOBN(0x7e862b5e, 0xb2940d9e), TOBN(0x3c663d86, 0x4b9af564),
+       TOBN(0xd8309031, 0xbde3033d), TOBN(0x298231b2, 0xd42c5bc6)},
+      {TOBN(0x42090d2c, 0x552ad093), TOBN(0xa4799d1c, 0xff854695),
+       TOBN(0x0a88b5d6, 0xd31f0d00), TOBN(0xf8b40825, 0xa2f26b46)}},
+     {{TOBN(0xec29b1ed, 0xf1bd7218), TOBN(0xd491c53b, 0x4b24c86e),
+       TOBN(0xd2fe588f, 0x3395ea65), TOBN(0x6f3764f7, 0x4456ef15)},
+      {TOBN(0xdb43116d, 0xcdc34800), TOBN(0xcdbcd456, 0xc1e33955),
+       TOBN(0xefdb5540, 0x74ab286b), TOBN(0x948c7a51, 0xd18c5d7c)}},
+     {{TOBN(0xeb81aa37, 0x7378058e), TOBN(0x41c746a1, 0x04411154),
+       TOBN(0xa10c73bc, 0xfb828ac7), TOBN(0x6439be91, 0x9d972b29)},
+      {TOBN(0x4bf3b4b0, 0x43a2fbad), TOBN(0x39e6dadf, 0x82b5e840),
+       TOBN(0x4f716408, 0x6397bd4c), TOBN(0x0f7de568, 0x7f1eeccb)}},
+     {{TOBN(0x5865c5a1, 0xd2ffbfc1), TOBN(0xf74211fa, 0x4ccb6451),
+       TOBN(0x66368a88, 0xc0b32558), TOBN(0x5b539dc2, 0x9ad7812e)},
+      {TOBN(0x579483d0, 0x2f3af6f6), TOBN(0x52132078, 0x99934ece),
+       TOBN(0x50b9650f, 0xdcc9e983), TOBN(0xca989ec9, 0xaee42b8a)}},
+     {{TOBN(0x6a44c829, 0xd6f62f99), TOBN(0x8f06a309, 0x4c2a7c0c),
+       TOBN(0x4ea2b3a0, 0x98a0cb0a), TOBN(0x5c547b70, 0xbeee8364)},
+      {TOBN(0x461d40e1, 0x682afe11), TOBN(0x9e0fc77a, 0x7b41c0a8),
+       TOBN(0x79e4aefd, 0xe20d5d36), TOBN(0x2916e520, 0x32dd9f63)}},
+     {{TOBN(0xf59e52e8, 0x3f883faf), TOBN(0x396f9639, 0x2b868d35),
+       TOBN(0xc902a9df, 0x4ca19881), TOBN(0x0fc96822, 0xdb2401a6)},
+      {TOBN(0x41237587, 0x66f1c68d), TOBN(0x10fc6de3, 0xfb476c0d),
+       TOBN(0xf8b6b579, 0x841f5d90), TOBN(0x2ba8446c, 0xfa24f44a)}},
+     {{TOBN(0xa237b920, 0xef4a9975), TOBN(0x60bb6004, 0x2330435f),
+       TOBN(0xd6f4ab5a, 0xcfb7e7b5), TOBN(0xb2ac5097, 0x83435391)},
+      {TOBN(0xf036ee2f, 0xb0d1ea67), TOBN(0xae779a6a, 0x74c56230),
+       TOBN(0x59bff8c8, 0xab838ae6), TOBN(0xcd83ca99, 0x9b38e6f0)}},
+     {{TOBN(0xbb27bef5, 0xe33deed3), TOBN(0xe6356f6f, 0x001892a8),
+       TOBN(0xbf3be6cc, 0x7adfbd3e), TOBN(0xaecbc81c, 0x33d1ac9d)},
+      {TOBN(0xe4feb909, 0xe6e861dc), TOBN(0x90a247a4, 0x53f5f801),
+       TOBN(0x01c50acb, 0x27346e57), TOBN(0xce29242e, 0x461acc1b)}},
+     {{TOBN(0x04dd214a, 0x2f998a91), TOBN(0x271ee9b1, 0xd4baf27b),
+       TOBN(0x7e3027d1, 0xe8c26722), TOBN(0x21d1645c, 0x1820dce5)},
+      {TOBN(0x086f242c, 0x7501779c), TOBN(0xf0061407, 0xfa0e8009),
+       TOBN(0xf23ce477, 0x60187129), TOBN(0x05bbdedb, 0x0fde9bd0)}},
+     {{TOBN(0x682f4832, 0x25d98473), TOBN(0xf207fe85, 0x5c658427),
+       TOBN(0xb6fdd7ba, 0x4166ffa1), TOBN(0x0c314056, 0x9eed799d)},
+      {TOBN(0x0db8048f, 0x4107e28f), TOBN(0x74ed3871, 0x41216840),
+       TOBN(0x74489f8f, 0x56a3c06e), TOBN(0x1e1c005b, 0x12777134)}},
+     {{TOBN(0xdb332a73, 0xf37ec3c3), TOBN(0xc65259bd, 0xdd59eba0),
+       TOBN(0x2291709c, 0xdb4d3257), TOBN(0x9a793b25, 0xbd389390)},
+      {TOBN(0xf39fe34b, 0xe43756f0), TOBN(0x2f76bdce, 0x9afb56c9),
+       TOBN(0x9f37867a, 0x61208b27), TOBN(0xea1d4307, 0x089972c3)}},
+     {{TOBN(0x8c595330, 0x8bdf623a), TOBN(0x5f5accda, 0x8441fb7d),
+       TOBN(0xfafa9418, 0x32ddfd95), TOBN(0x6ad40c5a, 0x0fde9be7)},
+      {TOBN(0x43faba89, 0xaeca8709), TOBN(0xc64a7cf1, 0x2c248a9d),
+       TOBN(0x16620252, 0x72637a76), TOBN(0xaee1c791, 0x22b8d1bb)}},
+     {{TOBN(0xf0f798fd, 0x21a843b2), TOBN(0x56e4ed4d, 0x8d005cb1),
+       TOBN(0x355f7780, 0x1f0d8abe), TOBN(0x197b04cf, 0x34522326)},
+      {TOBN(0x41f9b31f, 0xfd42c13f), TOBN(0x5ef7feb2, 0xb40f933d),
+       TOBN(0x27326f42, 0x5d60bad4), TOBN(0x027ecdb2, 0x8c92cf89)}},
+     {{TOBN(0x04aae4d1, 0x4e3352fe), TOBN(0x08414d2f, 0x73591b90),
+       TOBN(0x5ed6124e, 0xb7da7d60), TOBN(0xb985b931, 0x4d13d4ec)},
+      {TOBN(0xa592d3ab, 0x96bf36f9), TOBN(0x012dbed5, 0xbbdf51df),
+       TOBN(0xa57963c0, 0xdf6c177d), TOBN(0x010ec869, 0x87ca29cf)}},
+     {{TOBN(0xba1700f6, 0xbf926dff), TOBN(0x7c9fdbd1, 0xf4bf6bc2),
+       TOBN(0xdc18dc8f, 0x64da11f5), TOBN(0xa6074b7a, 0xd938ae75)},
+      {TOBN(0x14270066, 0xe84f44a4), TOBN(0x99998d38, 0xd27b954e),
+       TOBN(0xc1be8ab2, 0xb4f38e9a), TOBN(0x8bb55bbf, 0x15c01016)}},
+     {{TOBN(0xf73472b4, 0x0ea2ab30), TOBN(0xd365a340, 0xf73d68dd),
+       TOBN(0xc01a7168, 0x19c2e1eb), TOBN(0x32f49e37, 0x34061719)},
+      {TOBN(0xb73c57f1, 0x01d8b4d6), TOBN(0x03c8423c, 0x26b47700),
+       TOBN(0x321d0bc8, 0xa4d8826a), TOBN(0x6004213c, 0x4bc0e638)}},
+     {{TOBN(0xf78c64a1, 0xc1c06681), TOBN(0x16e0a16f, 0xef018e50),
+       TOBN(0x31cbdf91, 0xdb42b2b3), TOBN(0xf8f4ffce, 0xe0d36f58)},
+      {TOBN(0xcdcc71cd, 0x4cc5e3e0), TOBN(0xd55c7cfa, 0xa129e3e0),
+       TOBN(0xccdb6ba0, 0x0fb2cbf1), TOBN(0x6aba0005, 0xc4bce3cb)}},
+     {{TOBN(0x501cdb30, 0xd232cfc4), TOBN(0x9ddcf12e, 0xd58a3cef),
+       TOBN(0x02d2cf9c, 0x87e09149), TOBN(0xdc5d7ec7, 0x2c976257)},
+      {TOBN(0x6447986e, 0x0b50d7dd), TOBN(0x88fdbaf7, 0x807f112a),
+       TOBN(0x58c9822a, 0xb00ae9f6), TOBN(0x6abfb950, 0x6d3d27e0)}},
+     {{TOBN(0xd0a74487, 0x8a429f4f), TOBN(0x0649712b, 0xdb516609),
+       TOBN(0xb826ba57, 0xe769b5df), TOBN(0x82335df2, 0x1fc7aaf2)},
+      {TOBN(0x2389f067, 0x5c93d995), TOBN(0x59ac367a, 0x68677be6),
+       TOBN(0xa77985ff, 0x21d9951b), TOBN(0x038956fb, 0x85011cce)}},
+     {{TOBN(0x608e48cb, 0xbb734e37), TOBN(0xc08c0bf2, 0x2be5b26f),
+       TOBN(0x17bbdd3b, 0xf9b1a0d9), TOBN(0xeac7d898, 0x10483319)},
+      {TOBN(0xc95c4baf, 0xbc1a6dea), TOBN(0xfdd0e2bf, 0x172aafdb),
+       TOBN(0x40373cbc, 0x8235c41a), TOBN(0x14303f21, 0xfb6f41d5)}},
+     {{TOBN(0xba063621, 0x0408f237), TOBN(0xcad3b09a, 0xecd2d1ed),
+       TOBN(0x4667855a, 0x52abb6a2), TOBN(0xba9157dc, 0xaa8b417b)},
+      {TOBN(0xfe7f3507, 0x4f013efb), TOBN(0x1b112c4b, 0xaa38c4a2),
+       TOBN(0xa1406a60, 0x9ba64345), TOBN(0xe53cba33, 0x6993c80b)}},
+     {{TOBN(0x45466063, 0xded40d23), TOBN(0x3d5f1f4d, 0x54908e25),
+       TOBN(0x9ebefe62, 0x403c3c31), TOBN(0x274ea0b5, 0x0672a624)},
+      {TOBN(0xff818d99, 0x451d1b71), TOBN(0x80e82643, 0x8f79cf79),
+       TOBN(0xa165df13, 0x73ce37f5), TOBN(0xa744ef4f, 0xfe3a21fd)}},
+     {{TOBN(0x73f1e7f5, 0xcf551396), TOBN(0xc616898e, 0x868c676b),
+       TOBN(0x671c28c7, 0x8c442c36), TOBN(0xcfe5e558, 0x5e0a317d)},
+      {TOBN(0x1242d818, 0x7051f476), TOBN(0x56fad2a6, 0x14f03442),
+       TOBN(0x262068bc, 0x0a44d0f6), TOBN(0xdfa2cd6e, 0xce6edf4e)}},
+     {{TOBN(0x0f43813a, 0xd15d1517), TOBN(0x61214cb2, 0x377d44f5),
+       TOBN(0xd399aa29, 0xc639b35f), TOBN(0x42136d71, 0x54c51c19)},
+      {TOBN(0x9774711b, 0x08417221), TOBN(0x0a5546b3, 0x52545a57),
+       TOBN(0x80624c41, 0x1150582d), TOBN(0x9ec5c418, 0xfbc555bc)}},
+     {{TOBN(0x2c87dcad, 0x771849f1), TOBN(0xb0c932c5, 0x01d7bf6f),
+       TOBN(0x6aa5cd3e, 0x89116eb2), TOBN(0xd378c25a, 0x51ca7bd3)},
+      {TOBN(0xc612a0da, 0x9e6e3e31), TOBN(0x0417a54d, 0xb68ad5d0),
+       TOBN(0x00451e4a, 0x22c6edb8), TOBN(0x9fbfe019, 0xb42827ce)}},
+     {{TOBN(0x2fa92505, 0xba9384a2), TOBN(0x21b8596e, 0x64ad69c1),
+       TOBN(0x8f4fcc49, 0x983b35a6), TOBN(0xde093760, 0x72754672)},
+      {TOBN(0x2f14ccc8, 0xf7bffe6d), TOBN(0x27566bff, 0x5d94263d),
+       TOBN(0xb5b4e9c6, 0x2df3ec30), TOBN(0x94f1d7d5, 0x3e6ea6ba)}},
+     {{TOBN(0x97b7851a, 0xaaca5e9b), TOBN(0x518aa521, 0x56713b97),
+       TOBN(0x3357e8c7, 0x150a61f6), TOBN(0x7842e7e2, 0xec2c2b69)},
+      {TOBN(0x8dffaf65, 0x6868a548), TOBN(0xd963bd82, 0xe068fc81),
+       TOBN(0x64da5c8b, 0x65917733), TOBN(0x927090ff, 0x7b247328)}}},
+    {{{TOBN(0x214bc9a7, 0xd298c241), TOBN(0xe3b697ba, 0x56807cfd),
+       TOBN(0xef1c7802, 0x4564eadb), TOBN(0xdde8cdcf, 0xb48149c5)},
+      {TOBN(0x946bf0a7, 0x5a4d2604), TOBN(0x27154d7f, 0x6c1538af),
+       TOBN(0x95cc9230, 0xde5b1fcc), TOBN(0xd88519e9, 0x66864f82)}},
+     {{TOBN(0xb828dd1a, 0x7cb1282c), TOBN(0xa08d7626, 0xbe46973a),
+       TOBN(0x6baf8d40, 0xe708d6b2), TOBN(0x72571fa1, 0x4daeb3f3)},
+      {TOBN(0x85b1732f, 0xf22dfd98), TOBN(0x87ab01a7, 0x0087108d),
+       TOBN(0xaaaafea8, 0x5988207a), TOBN(0xccc832f8, 0x69f00755)}},
+     {{TOBN(0x964d950e, 0x36ff3bf0), TOBN(0x8ad20f6f, 0xf0b34638),
+       TOBN(0x4d9177b3, 0xb5d7585f), TOBN(0xcf839760, 0xef3f019f)},
+      {TOBN(0x582fc5b3, 0x8288c545), TOBN(0x2f8e4e9b, 0x13116bd1),
+       TOBN(0xf91e1b2f, 0x332120ef), TOBN(0xcf568724, 0x2a17dd23)}},
+     {{TOBN(0x488f1185, 0xca8d9d1a), TOBN(0xadf2c77d, 0xd987ded2),
+       TOBN(0x5f3039f0, 0x60c46124), TOBN(0xe5d70b75, 0x71e095f4)},
+      {TOBN(0x82d58650, 0x6260e70f), TOBN(0x39d75ea7, 0xf750d105),
+       TOBN(0x8cf3d0b1, 0x75bac364), TOBN(0xf3a7564d, 0x21d01329)}},
+     {{TOBN(0x182f04cd, 0x2f52d2a7), TOBN(0x4fde149a, 0xe2df565a),
+       TOBN(0xb80c5eec, 0xa79fb2f7), TOBN(0xab491d7b, 0x22ddc897)},
+      {TOBN(0x99d76c18, 0xc6312c7f), TOBN(0xca0d5f3d, 0x6aa41a57),
+       TOBN(0x71207325, 0xd15363a0), TOBN(0xe82aa265, 0xbeb252c2)}},
+     {{TOBN(0x94ab4700, 0xec3128c2), TOBN(0x6c76d862, 0x8e383f49),
+       TOBN(0xdc36b150, 0xc03024eb), TOBN(0xfb439477, 0x53daac69)},
+      {TOBN(0xfc68764a, 0x8dc79623), TOBN(0x5b86995d, 0xb440fbb2),
+       TOBN(0xd66879bf, 0xccc5ee0d), TOBN(0x05228942, 0x95aa8bd3)}},
+     {{TOBN(0xb51a40a5, 0x1e6a75c1), TOBN(0x24327c76, 0x0ea7d817),
+       TOBN(0x06630182, 0x07774597), TOBN(0xd6fdbec3, 0x97fa7164)},
+      {TOBN(0x20c99dfb, 0x13c90f48), TOBN(0xd6ac5273, 0x686ef263),
+       TOBN(0xc6a50bdc, 0xfef64eeb), TOBN(0xcd87b281, 0x86fdfc32)}},
+     {{TOBN(0xb24aa43e, 0x3fcd3efc), TOBN(0xdd26c034, 0xb8088e9a),
+       TOBN(0xa5ef4dc9, 0xbd3d46ea), TOBN(0xa2f99d58, 0x8a4c6a6f)},
+      {TOBN(0xddabd355, 0x2f1da46c), TOBN(0x72c3f8ce, 0x1afacdd1),
+       TOBN(0xd90c4eee, 0x92d40578), TOBN(0xd28bb41f, 0xca623b94)}},
+     {{TOBN(0x50fc0711, 0x745edc11), TOBN(0x9dd9ad7d, 0x3dc87558),
+       TOBN(0xce6931fb, 0xb49d1e64), TOBN(0x6c77a0a2, 0xc98bd0f9)},
+      {TOBN(0x62b9a629, 0x6baf7cb1), TOBN(0xcf065f91, 0xccf72d22),
+       TOBN(0x7203cce9, 0x79639071), TOBN(0x09ae4885, 0xf9cb732f)}},
+     {{TOBN(0x5e7c3bec, 0xee8314f3), TOBN(0x1c068aed, 0xdbea298f),
+       TOBN(0x08d381f1, 0x7c80acec), TOBN(0x03b56be8, 0xe330495b)},
+      {TOBN(0xaeffb8f2, 0x9222882d), TOBN(0x95ff38f6, 0xc4af8bf7),
+       TOBN(0x50e32d35, 0x1fc57d8c), TOBN(0x6635be52, 0x17b444f0)}},
+     {{TOBN(0x04d15276, 0xa5177900), TOBN(0x4e1dbb47, 0xf6858752),
+       TOBN(0x5b475622, 0xc615796c), TOBN(0xa6fa0387, 0x691867bf)},
+      {TOBN(0xed7f5d56, 0x2844c6d0), TOBN(0xc633cf9b, 0x03a2477d),
+       TOBN(0xf6be5c40, 0x2d3721d6), TOBN(0xaf312eb7, 0xe9fd68e6)}},
+     {{TOBN(0x242792d2, 0xe7417ce1), TOBN(0xff42bc71, 0x970ee7f5),
+       TOBN(0x1ff4dc6d, 0x5c67a41e), TOBN(0x77709b7b, 0x20882a58)},
+      {TOBN(0x3554731d, 0xbe217f2c), TOBN(0x2af2a8cd, 0x5bb72177),
+       TOBN(0x58eee769, 0x591dd059), TOBN(0xbb2930c9, 0x4bba6477)}},
+     {{TOBN(0x863ee047, 0x7d930cfc), TOBN(0x4c262ad1, 0x396fd1f4),
+       TOBN(0xf4765bc8, 0x039af7e1), TOBN(0x2519834b, 0x5ba104f6)},
+      {TOBN(0x7cd61b4c, 0xd105f961), TOBN(0xa5415da5, 0xd63bca54),
+       TOBN(0x778280a0, 0x88a1f17c), TOBN(0xc4968949, 0x2329512c)}},
+     {{TOBN(0x174a9126, 0xcecdaa7a), TOBN(0xfc8c7e0e, 0x0b13247b),
+       TOBN(0x29c110d2, 0x3484c1c4), TOBN(0xf8eb8757, 0x831dfc3b)},
+      {TOBN(0x022f0212, 0xc0067452), TOBN(0x3f6f69ee, 0x7b9b926c),
+       TOBN(0x09032da0, 0xef42daf4), TOBN(0x79f00ade, 0x83f80de4)}},
+     {{TOBN(0x6210db71, 0x81236c97), TOBN(0x74f7685b, 0x3ee0781f),
+       TOBN(0x4df7da7b, 0xa3e41372), TOBN(0x2aae38b1, 0xb1a1553e)},
+      {TOBN(0x1688e222, 0xf6dd9d1b), TOBN(0x57695448, 0x5b8b6487),
+       TOBN(0x478d2127, 0x4b2edeaa), TOBN(0xb2818fa5, 0x1e85956a)}},
+     {{TOBN(0x1e6addda, 0xf176f2c0), TOBN(0x01ca4604, 0xe2572658),
+       TOBN(0x0a404ded, 0x85342ffb), TOBN(0x8cf60f96, 0x441838d6)},
+      {TOBN(0x9bbc691c, 0xc9071c4a), TOBN(0xfd588744, 0x34442803),
+       TOBN(0x97101c85, 0x809c0d81), TOBN(0xa7fb754c, 0x8c456f7f)}},
+     {{TOBN(0xc95f3c5c, 0xd51805e1), TOBN(0xab4ccd39, 0xb299dca8),
+       TOBN(0x3e03d20b, 0x47eaf500), TOBN(0xfa3165c1, 0xd7b80893)},
+      {TOBN(0x005e8b54, 0xe160e552), TOBN(0xdc4972ba, 0x9019d11f),
+       TOBN(0x21a6972e, 0x0c9a4a7a), TOBN(0xa52c258f, 0x37840fd7)}},
+     {{TOBN(0xf8559ff4, 0xc1e99d81), TOBN(0x08e1a7d6, 0xa3c617c0),
+       TOBN(0xb398fd43, 0x248c6ba7), TOBN(0x6ffedd91, 0xd1283794)},
+      {TOBN(0x8a6a59d2, 0xd629d208), TOBN(0xa9d141d5, 0x3490530e),
+       TOBN(0x42f6fc18, 0x38505989), TOBN(0x09bf250d, 0x479d94ee)}},
+     {{TOBN(0x223ad3b1, 0xb3822790), TOBN(0x6c5926c0, 0x93b8971c),
+       TOBN(0x609efc7e, 0x75f7fa62), TOBN(0x45d66a6d, 0x1ec2d989)},
+      {TOBN(0x4422d663, 0x987d2792), TOBN(0x4a73caad, 0x3eb31d2b),
+       TOBN(0xf06c2ac1, 0xa32cb9e6), TOBN(0xd9445c5f, 0x91aeba84)}},
+     {{TOBN(0x6af7a1d5, 0xaf71013f), TOBN(0xe68216e5, 0x0bedc946),
+       TOBN(0xf4cba30b, 0xd27370a0), TOBN(0x7981afbf, 0x870421cc)},
+      {TOBN(0x02496a67, 0x9449f0e1), TOBN(0x86cfc4be, 0x0a47edae),
+       TOBN(0x3073c936, 0xb1feca22), TOBN(0xf5694612, 0x03f8f8fb)}},
+     {{TOBN(0xd063b723, 0x901515ea), TOBN(0x4c6c77a5, 0x749cf038),
+       TOBN(0x6361e360, 0xab9e5059), TOBN(0x596cf171, 0xa76a37c0)},
+      {TOBN(0x800f53fa, 0x6530ae7a), TOBN(0x0f5e631e, 0x0792a7a6),
+       TOBN(0x5cc29c24, 0xefdb81c9), TOBN(0xa269e868, 0x3f9c40ba)}},
+     {{TOBN(0xec14f9e1, 0x2cb7191e), TOBN(0x78ea1bd8, 0xe5b08ea6),
+       TOBN(0x3c65aa9b, 0x46332bb9), TOBN(0x84cc22b3, 0xbf80ce25)},
+      {TOBN(0x0098e9e9, 0xd49d5bf1), TOBN(0xcd4ec1c6, 0x19087da4),
+       TOBN(0x3c9d07c5, 0xaef6e357), TOBN(0x839a0268, 0x9f8f64b8)}},
+     {{TOBN(0xc5e9eb62, 0xc6d8607f), TOBN(0x759689f5, 0x6aa995e4),
+       TOBN(0x70464669, 0xbbb48317), TOBN(0x921474bf, 0xe402417d)},
+      {TOBN(0xcabe135b, 0x2a354c8c), TOBN(0xd51e52d2, 0x812fa4b5),
+       TOBN(0xec741096, 0x53311fe8), TOBN(0x4f774535, 0xb864514b)}},
+     {{TOBN(0xbcadd671, 0x5bde48f8), TOBN(0xc9703873, 0x2189bc7d),
+       TOBN(0x5d45299e, 0xc709ee8a), TOBN(0xd1287ee2, 0x845aaff8)},
+      {TOBN(0x7d1f8874, 0xdb1dbf1f), TOBN(0xea46588b, 0x990c88d6),
+       TOBN(0x60ba649a, 0x84368313), TOBN(0xd5fdcbce, 0x60d543ae)}},
+     {{TOBN(0x90b46d43, 0x810d5ab0), TOBN(0x6739d8f9, 0x04d7e5cc),
+       TOBN(0x021c1a58, 0x0d337c33), TOBN(0x00a61162, 0x68e67c40)},
+      {TOBN(0x95ef413b, 0x379f0a1f), TOBN(0xfe126605, 0xe9e2ab95),
+       TOBN(0x67578b85, 0x2f5f199c), TOBN(0xf5c00329, 0x2cb84913)}},
+     {{TOBN(0xf7956430, 0x37577dd8), TOBN(0x83b82af4, 0x29c5fe88),
+       TOBN(0x9c1bea26, 0xcdbdc132), TOBN(0x589fa086, 0x9c04339e)},
+      {TOBN(0x033e9538, 0xb13799df), TOBN(0x85fa8b21, 0xd295d034),
+       TOBN(0xdf17f73f, 0xbd9ddcca), TOBN(0xf32bd122, 0xddb66334)}},
+     {{TOBN(0x55ef88a7, 0x858b044c), TOBN(0x1f0d69c2, 0x5aa9e397),
+       TOBN(0x55fd9cc3, 0x40d85559), TOBN(0xc774df72, 0x7785ddb2)},
+      {TOBN(0x5dcce9f6, 0xd3bd2e1c), TOBN(0xeb30da20, 0xa85dfed0),
+       TOBN(0x5ed7f5bb, 0xd3ed09c4), TOBN(0x7d42a35c, 0x82a9c1bd)}},
+     {{TOBN(0xcf3de995, 0x9890272d), TOBN(0x75f3432a, 0x3e713a10),
+       TOBN(0x5e13479f, 0xe28227b8), TOBN(0xb8561ea9, 0xfefacdc8)},
+      {TOBN(0xa6a297a0, 0x8332aafd), TOBN(0x9b0d8bb5, 0x73809b62),
+       TOBN(0xd2fa1cfd, 0x0c63036f), TOBN(0x7a16eb55, 0xbd64bda8)}},
+     {{TOBN(0x3f5cf5f6, 0x78e62ddc), TOBN(0x2267c454, 0x07fd752b),
+       TOBN(0x5e361b6b, 0x5e437bbe), TOBN(0x95c59501, 0x8354e075)},
+      {TOBN(0xec725f85, 0xf2b254d9), TOBN(0x844b617d, 0x2cb52b4e),
+       TOBN(0xed8554f5, 0xcf425fb5), TOBN(0xab67703e, 0x2af9f312)}},
+     {{TOBN(0x4cc34ec1, 0x3cf48283), TOBN(0xb09daa25, 0x9c8a705e),
+       TOBN(0xd1e9d0d0, 0x5b7d4f84), TOBN(0x4df6ef64, 0xdb38929d)},
+      {TOBN(0xe16b0763, 0xaa21ba46), TOBN(0xc6b1d178, 0xa293f8fb),
+       TOBN(0x0ff5b602, 0xd520aabf), TOBN(0x94d671bd, 0xc339397a)}},
+     {{TOBN(0x7c7d98cf, 0x4f5792fa), TOBN(0x7c5e0d67, 0x11215261),
+       TOBN(0x9b19a631, 0xa7c5a6d4), TOBN(0xc8511a62, 0x7a45274d)},
+      {TOBN(0x0c16621c, 0xa5a60d99), TOBN(0xf7fbab88, 0xcf5e48cb),
+       TOBN(0xab1e6ca2, 0xf7ddee08), TOBN(0x83bd08ce, 0xe7867f3c)}},
+     {{TOBN(0xf7e48e8a, 0x2ac13e27), TOBN(0x4494f6df, 0x4eb1a9f5),
+       TOBN(0xedbf84eb, 0x981f0a62), TOBN(0x49badc32, 0x536438f0)},
+      {TOBN(0x50bea541, 0x004f7571), TOBN(0xbac67d10, 0xdf1c94ee),
+       TOBN(0x253d73a1, 0xb727bc31), TOBN(0xb3d01cf2, 0x30686e28)}},
+     {{TOBN(0x51b77b1b, 0x55fd0b8b), TOBN(0xa099d183, 0xfeec3173),
+       TOBN(0x202b1fb7, 0x670e72b7), TOBN(0xadc88b33, 0xa8e1635f)},
+      {TOBN(0x34e8216a, 0xf989d905), TOBN(0xc2e68d20, 0x29b58d01),
+       TOBN(0x11f81c92, 0x6fe55a93), TOBN(0x15f1462a, 0x8f296f40)}},
+     {{TOBN(0x1915d375, 0xea3d62f2), TOBN(0xa17765a3, 0x01c8977d),
+       TOBN(0x7559710a, 0xe47b26f6), TOBN(0xe0bd29c8, 0x535077a5)},
+      {TOBN(0x615f976d, 0x08d84858), TOBN(0x370dfe85, 0x69ced5c1),
+       TOBN(0xbbc7503c, 0xa734fa56), TOBN(0xfbb9f1ec, 0x91ac4574)}},
+     {{TOBN(0x95d7ec53, 0x060dd7ef), TOBN(0xeef2dacd, 0x6e657979),
+       TOBN(0x54511af3, 0xe2a08235), TOBN(0x1e324aa4, 0x1f4aea3d)},
+      {TOBN(0x550e7e71, 0xe6e67671), TOBN(0xbccd5190, 0xbf52faf7),
+       TOBN(0xf880d316, 0x223cc62a), TOBN(0x0d402c7e, 0x2b32eb5d)}},
+     {{TOBN(0xa40bc039, 0x306a5a3b), TOBN(0x4e0a41fd, 0x96783a1b),
+       TOBN(0xa1e8d39a, 0x0253cdd4), TOBN(0x6480be26, 0xc7388638)},
+      {TOBN(0xee365e1d, 0x2285f382), TOBN(0x188d8d8f, 0xec0b5c36),
+       TOBN(0x34ef1a48, 0x1f0f4d82), TOBN(0x1a8f43e1, 0xa487d29a)}},
+     {{TOBN(0x8168226d, 0x77aefb3a), TOBN(0xf69a751e, 0x1e72c253),
+       TOBN(0x8e04359a, 0xe9594df1), TOBN(0x475ffd7d, 0xd14c0467)},
+      {TOBN(0xb5a2c2b1, 0x3844e95c), TOBN(0x85caf647, 0xdd12ef94),
+       TOBN(0x1ecd2a9f, 0xf1063d00), TOBN(0x1dd2e229, 0x23843311)}},
+     {{TOBN(0x38f0e09d, 0x73d17244), TOBN(0x3ede7746, 0x8fc653f1),
+       TOBN(0xae4459f5, 0xdc20e21c), TOBN(0x00db2ffa, 0x6a8599ea)},
+      {TOBN(0x11682c39, 0x30cfd905), TOBN(0x4934d074, 0xa5c112a6),
+       TOBN(0xbdf063c5, 0x568bfe95), TOBN(0x779a440a, 0x016c441a)}},
+     {{TOBN(0x0c23f218, 0x97d6fbdc), TOBN(0xd3a5cd87, 0xe0776aac),
+       TOBN(0xcee37f72, 0xd712e8db), TOBN(0xfb28c70d, 0x26f74e8d)},
+      {TOBN(0xffe0c728, 0xb61301a0), TOBN(0xa6282168, 0xd3724354),
+       TOBN(0x7ff4cb00, 0x768ffedc), TOBN(0xc51b3088, 0x03b02de9)}},
+     {{TOBN(0xa5a8147c, 0x3902dda5), TOBN(0x35d2f706, 0xfe6973b4),
+       TOBN(0x5ac2efcf, 0xc257457e), TOBN(0x933f48d4, 0x8700611b)},
+      {TOBN(0xc365af88, 0x4912beb2), TOBN(0x7f5a4de6, 0x162edf94),
+       TOBN(0xc646ba7c, 0x0c32f34b), TOBN(0x632c6af3, 0xb2091074)}},
+     {{TOBN(0x58d4f2e3, 0x753e43a9), TOBN(0x70e1d217, 0x24d4e23f),
+       TOBN(0xb24bf729, 0xafede6a6), TOBN(0x7f4a94d8, 0x710c8b60)},
+      {TOBN(0xaad90a96, 0x8d4faa6a), TOBN(0xd9ed0b32, 0xb066b690),
+       TOBN(0x52fcd37b, 0x78b6dbfd), TOBN(0x0b64615e, 0x8bd2b431)}},
+     {{TOBN(0x228e2048, 0xcfb9fad5), TOBN(0xbeaa386d, 0x240b76bd),
+       TOBN(0x2d6681c8, 0x90dad7bc), TOBN(0x3e553fc3, 0x06d38f5e)},
+      {TOBN(0xf27cdb9b, 0x9d5f9750), TOBN(0x3e85c52a, 0xd28c5b0e),
+       TOBN(0x190795af, 0x5247c39b), TOBN(0x547831eb, 0xbddd6828)}},
+     {{TOBN(0xf327a227, 0x4a82f424), TOBN(0x36919c78, 0x7e47f89d),
+       TOBN(0xe4783919, 0x43c7392c), TOBN(0xf101b9aa, 0x2316fefe)},
+      {TOBN(0xbcdc9e9c, 0x1c5009d2), TOBN(0xfb55ea13, 0x9cd18345),
+       TOBN(0xf5b5e231, 0xa3ce77c7), TOBN(0xde6b4527, 0xd2f2cb3d)}},
+     {{TOBN(0x10f6a333, 0x9bb26f5f), TOBN(0x1e85db8e, 0x044d85b6),
+       TOBN(0xc3697a08, 0x94197e54), TOBN(0x65e18cc0, 0xa7cb4ea8)},
+      {TOBN(0xa38c4f50, 0xa471fe6e), TOBN(0xf031747a, 0x2f13439c),
+       TOBN(0x53c4a6ba, 0xc007318b), TOBN(0xa8da3ee5, 0x1deccb3d)}},
+     {{TOBN(0x0555b31c, 0x558216b1), TOBN(0x90c7810c, 0x2f79e6c2),
+       TOBN(0x9b669f4d, 0xfe8eed3c), TOBN(0x70398ec8, 0xe0fac126)},
+      {TOBN(0xa96a449e, 0xf701b235), TOBN(0x0ceecdb3, 0xeb94f395),
+       TOBN(0x285fc368, 0xd0cb7431), TOBN(0x0d37bb52, 0x16a18c64)}},
+     {{TOBN(0x05110d38, 0xb880d2dd), TOBN(0xa60f177b, 0x65930d57),
+       TOBN(0x7da34a67, 0xf36235f5), TOBN(0x47f5e17c, 0x183816b9)},
+      {TOBN(0xc7664b57, 0xdb394af4), TOBN(0x39ba215d, 0x7036f789),
+       TOBN(0x46d2ca0e, 0x2f27b472), TOBN(0xc42647ee, 0xf73a84b7)}},
+     {{TOBN(0x44bc7545, 0x64488f1d), TOBN(0xaa922708, 0xf4cf85d5),
+       TOBN(0x721a01d5, 0x53e4df63), TOBN(0x649c0c51, 0x5db46ced)},
+      {TOBN(0x6bf0d64e, 0x3cffcb6c), TOBN(0xe3bf93fe, 0x50f71d96),
+       TOBN(0x75044558, 0xbcc194a0), TOBN(0x16ae3372, 0x6afdc554)}},
+     {{TOBN(0xbfc01adf, 0x5ca48f3f), TOBN(0x64352f06, 0xe22a9b84),
+       TOBN(0xcee54da1, 0xc1099e4a), TOBN(0xbbda54e8, 0xfa1b89c0)},
+      {TOBN(0x166a3df5, 0x6f6e55fb), TOBN(0x1ca44a24, 0x20176f88),
+       TOBN(0x936afd88, 0xdfb7b5ff), TOBN(0xe34c2437, 0x8611d4a0)}},
+     {{TOBN(0x7effbb75, 0x86142103), TOBN(0x6704ba1b, 0x1f34fc4d),
+       TOBN(0x7c2a468f, 0x10c1b122), TOBN(0x36b3a610, 0x8c6aace9)},
+      {TOBN(0xabfcc0a7, 0x75a0d050), TOBN(0x066f9197, 0x3ce33e32),
+       TOBN(0xce905ef4, 0x29fe09be), TOBN(0x89ee25ba, 0xa8376351)}},
+     {{TOBN(0x2a3ede22, 0xfd29dc76), TOBN(0x7fd32ed9, 0x36f17260),
+       TOBN(0x0cadcf68, 0x284b4126), TOBN(0x63422f08, 0xa7951fc8)},
+      {TOBN(0x562b24f4, 0x0807e199), TOBN(0xfe9ce5d1, 0x22ad4490),
+       TOBN(0xc2f51b10, 0x0db2b1b4), TOBN(0xeb3613ff, 0xe4541d0d)}},
+     {{TOBN(0xbd2c4a05, 0x2680813b), TOBN(0x527aa55d, 0x561b08d6),
+       TOBN(0xa9f8a40e, 0xa7205558), TOBN(0xe3eea56f, 0x243d0bec)},
+      {TOBN(0x7b853817, 0xa0ff58b3), TOBN(0xb67d3f65, 0x1a69e627),
+       TOBN(0x0b76bbb9, 0xa869b5d6), TOBN(0xa3afeb82, 0x546723ed)}},
+     {{TOBN(0x5f24416d, 0x3e554892), TOBN(0x8413b53d, 0x430e2a45),
+       TOBN(0x99c56aee, 0x9032a2a0), TOBN(0x09432bf6, 0xeec367b1)},
+      {TOBN(0x552850c6, 0xdaf0ecc1), TOBN(0x49ebce55, 0x5bc92048),
+       TOBN(0xdfb66ba6, 0x54811307), TOBN(0x1b84f797, 0x6f298597)}},
+     {{TOBN(0x79590481, 0x8d1d7a0d), TOBN(0xd9fabe03, 0x3a6fa556),
+       TOBN(0xa40f9c59, 0xba9e5d35), TOBN(0xcb1771c1, 0xf6247577)},
+      {TOBN(0x542a47ca, 0xe9a6312b), TOBN(0xa34b3560, 0x552dd8c5),
+       TOBN(0xfdf94de0, 0x0d794716), TOBN(0xd46124a9, 0x9c623094)}},
+     {{TOBN(0x56b7435d, 0x68afe8b4), TOBN(0x27f20540, 0x6c0d8ea1),
+       TOBN(0x12b77e14, 0x73186898), TOBN(0xdbc3dd46, 0x7479490f)},
+      {TOBN(0x951a9842, 0xc03b0c05), TOBN(0x8b1b3bb3, 0x7921bc96),
+       TOBN(0xa573b346, 0x2b202e0a), TOBN(0x77e4665d, 0x47254d56)}},
+     {{TOBN(0x08b70dfc, 0xd23e3984), TOBN(0xab86e8bc, 0xebd14236),
+       TOBN(0xaa3e07f8, 0x57114ba7), TOBN(0x5ac71689, 0xab0ef4f2)},
+      {TOBN(0x88fca384, 0x0139d9af), TOBN(0x72733f88, 0x76644af0),
+       TOBN(0xf122f72a, 0x65d74f4a), TOBN(0x13931577, 0xa5626c7a)}},
+     {{TOBN(0xd5b5d9eb, 0x70f8d5a4), TOBN(0x375adde7, 0xd7bbb228),
+       TOBN(0x31e88b86, 0x0c1c0b32), TOBN(0xd1f568c4, 0x173edbaa)},
+      {TOBN(0x1592fc83, 0x5459df02), TOBN(0x2beac0fb, 0x0fcd9a7e),
+       TOBN(0xb0a6fdb8, 0x1b473b0a), TOBN(0xe3224c6f, 0x0fe8fc48)}},
+     {{TOBN(0x680bd00e, 0xe87edf5b), TOBN(0x30385f02, 0x20e77cf5),
+       TOBN(0xe9ab98c0, 0x4d42d1b2), TOBN(0x72d191d2, 0xd3816d77)},
+      {TOBN(0x1564daca, 0x0917d9e5), TOBN(0x394eab59, 0x1f8fed7f),
+       TOBN(0xa209aa8d, 0x7fbb3896), TOBN(0x5564f3b9, 0xbe6ac98e)}},
+     {{TOBN(0xead21d05, 0xd73654ef), TOBN(0x68d1a9c4, 0x13d78d74),
+       TOBN(0x61e01708, 0x6d4973a0), TOBN(0x83da3500, 0x46e6d32a)},
+      {TOBN(0x6a3dfca4, 0x68ae0118), TOBN(0xa1b9a4c9, 0xd02da069),
+       TOBN(0x0b2ff9c7, 0xebab8302), TOBN(0x98af07c3, 0x944ba436)}},
+     {{TOBN(0x85997326, 0x995f0f9f), TOBN(0x467fade0, 0x71b58bc6),
+       TOBN(0x47e4495a, 0xbd625a2b), TOBN(0xfdd2d01d, 0x33c3b8cd)},
+      {TOBN(0x2c38ae28, 0xc693f9fa), TOBN(0x48622329, 0x348f7999),
+       TOBN(0x97bf738e, 0x2161f583), TOBN(0x15ee2fa7, 0x565e8cc9)}},
+     {{TOBN(0xa1a5c845, 0x5777e189), TOBN(0xcc10bee0, 0x456f2829),
+       TOBN(0x8ad95c56, 0xda762bd5), TOBN(0x152e2214, 0xe9d91da8)},
+      {TOBN(0x975b0e72, 0x7cb23c74), TOBN(0xfd5d7670, 0xa90c66df),
+       TOBN(0xb5b5b8ad, 0x225ffc53), TOBN(0xab6dff73, 0xfaded2ae)}},
+     {{TOBN(0xebd56781, 0x6f4cbe9d), TOBN(0x0ed8b249, 0x6a574bd7),
+       TOBN(0x41c246fe, 0x81a881fa), TOBN(0x91564805, 0xc3db9c70)},
+      {TOBN(0xd7c12b08, 0x5b862809), TOBN(0x1facd1f1, 0x55858d7b),
+       TOBN(0x7693747c, 0xaf09e92a), TOBN(0x3b69dcba, 0x189a425f)}},
+     {{TOBN(0x0be28e9f, 0x967365ef), TOBN(0x57300eb2, 0xe801f5c9),
+       TOBN(0x93b8ac6a, 0xd583352f), TOBN(0xa2cf1f89, 0xcd05b2b7)},
+      {TOBN(0x7c0c9b74, 0x4dcc40cc), TOBN(0xfee38c45, 0xada523fb),
+       TOBN(0xb49a4dec, 0x1099cc4d), TOBN(0x325c377f, 0x69f069c6)}},
+     {{TOBN(0xe12458ce, 0x476cc9ff), TOBN(0x580e0b6c, 0xc6d4cb63),
+       TOBN(0xd561c8b7, 0x9072289b), TOBN(0x0377f264, 0xa619e6da)},
+      {TOBN(0x26685362, 0x88e591a5), TOBN(0xa453a7bd, 0x7523ca2b),
+       TOBN(0x8a9536d2, 0xc1df4533), TOBN(0xc8e50f2f, 0xbe972f79)}},
+     {{TOBN(0xd433e50f, 0x6d3549cf), TOBN(0x6f33696f, 0xfacd665e),
+       TOBN(0x695bfdac, 0xce11fcb4), TOBN(0x810ee252, 0xaf7c9860)},
+      {TOBN(0x65450fe1, 0x7159bb2c), TOBN(0xf7dfbebe, 0x758b357b),
+       TOBN(0x2b057e74, 0xd69fea72), TOBN(0xd485717a, 0x92731745)}}},
+    {{{TOBN(0x896c42e8, 0xee36860c), TOBN(0xdaf04dfd, 0x4113c22d),
+       TOBN(0x1adbb7b7, 0x44104213), TOBN(0xe5fd5fa1, 0x1fd394ea)},
+      {TOBN(0x68235d94, 0x1a4e0551), TOBN(0x6772cfbe, 0x18d10151),
+       TOBN(0x276071e3, 0x09984523), TOBN(0xe4e879de, 0x5a56ba98)}},
+     {{TOBN(0xaaafafb0, 0x285b9491), TOBN(0x01a0be88, 0x1e4c705e),
+       TOBN(0xff1d4f5d, 0x2ad9caab), TOBN(0x6e349a4a, 0xc37a233f)},
+      {TOBN(0xcf1c1246, 0x4a1c6a16), TOBN(0xd99e6b66, 0x29383260),
+       TOBN(0xea3d4366, 0x5f6d5471), TOBN(0x36974d04, 0xff8cc89b)}},
+     {{TOBN(0xc26c49a1, 0xcfe89d80), TOBN(0xb42c026d, 0xda9c8371),
+       TOBN(0xca6c013a, 0xdad066d2), TOBN(0xfb8f7228, 0x56a4f3ee)},
+      {TOBN(0x08b579ec, 0xd850935b), TOBN(0x34c1a74c, 0xd631e1b3),
+       TOBN(0xcb5fe596, 0xac198534), TOBN(0x39ff21f6, 0xe1f24f25)}},
+     {{TOBN(0x27f29e14, 0x8f929057), TOBN(0x7a64ae06, 0xc0c853df),
+       TOBN(0x256cd183, 0x58e9c5ce), TOBN(0x9d9cce82, 0xded092a5)},
+      {TOBN(0xcc6e5979, 0x6e93b7c7), TOBN(0xe1e47092, 0x31bb9e27),
+       TOBN(0xb70b3083, 0xaa9e29a0), TOBN(0xbf181a75, 0x3785e644)}},
+     {{TOBN(0xf53f2c65, 0x8ead09f7), TOBN(0x1335e1d5, 0x9780d14d),
+       TOBN(0x69cc20e0, 0xcd1b66bc), TOBN(0x9b670a37, 0xbbe0bfc8)},
+      {TOBN(0xce53dc81, 0x28efbeed), TOBN(0x0c74e77c, 0x8326a6e5),
+       TOBN(0x3604e0d2, 0xb88e9a63), TOBN(0xbab38fca, 0x13dc2248)}},
+     {{TOBN(0x8ed6e8c8, 0x5c0a3f1e), TOBN(0xbcad2492, 0x7c87c37f),
+       TOBN(0xfdfb62bb, 0x9ee3b78d), TOBN(0xeba8e477, 0xcbceba46)},
+      {TOBN(0x37d38cb0, 0xeeaede4b), TOBN(0x0bc498e8, 0x7976deb6),
+       TOBN(0xb2944c04, 0x6b6147fb), TOBN(0x8b123f35, 0xf71f9609)}},
+     {{TOBN(0xa155dcc7, 0xde79dc24), TOBN(0xf1168a32, 0x558f69cd),
+       TOBN(0xbac21595, 0x0d1850df), TOBN(0x15c8295b, 0xb204c848)},
+      {TOBN(0xf661aa36, 0x7d8184ff), TOBN(0xc396228e, 0x30447bdb),
+       TOBN(0x11cd5143, 0xbde4a59e), TOBN(0xe3a26e3b, 0x6beab5e6)}},
+     {{TOBN(0xd3b3a13f, 0x1402b9d0), TOBN(0x573441c3, 0x2c7bc863),
+       TOBN(0x4b301ec4, 0x578c3e6e), TOBN(0xc26fc9c4, 0x0adaf57e)},
+      {TOBN(0x96e71bfd, 0x7493cea3), TOBN(0xd05d4b3f, 0x1af81456),
+       TOBN(0xdaca2a8a, 0x6a8c608f), TOBN(0x53ef07f6, 0x0725b276)}},
+     {{TOBN(0x07a5fbd2, 0x7824fc56), TOBN(0x34675218, 0x13289077),
+       TOBN(0x5bf69fd5, 0xe0c48349), TOBN(0xa613ddd3, 0xb6aa7875)},
+      {TOBN(0x7f78c19c, 0x5450d866), TOBN(0x46f4409c, 0x8f84a481),
+       TOBN(0x9f1d1928, 0x90fce239), TOBN(0x016c4168, 0xb2ce44b9)}},
+     {{TOBN(0xbae023f0, 0xc7435978), TOBN(0xb152c888, 0x20e30e19),
+       TOBN(0x9c241645, 0xe3fa6faf), TOBN(0x735d95c1, 0x84823e60)},
+      {TOBN(0x03197573, 0x03955317), TOBN(0x0b4b02a9, 0xf03b4995),
+       TOBN(0x076bf559, 0x70274600), TOBN(0x32c5cc53, 0xaaf57508)}},
+     {{TOBN(0xe8af6d1f, 0x60624129), TOBN(0xb7bc5d64, 0x9a5e2b5e),
+       TOBN(0x3814b048, 0x5f082d72), TOBN(0x76f267f2, 0xce19677a)},
+      {TOBN(0x626c630f, 0xb36eed93), TOBN(0x55230cd7, 0x3bf56803),
+       TOBN(0x78837949, 0xce2736a0), TOBN(0x0d792d60, 0xaa6c55f1)}},
+     {{TOBN(0x0318dbfd, 0xd5c7c5d2), TOBN(0xb38f8da7, 0x072b342d),
+       TOBN(0x3569bddc, 0x7b8de38a), TOBN(0xf25b5887, 0xa1c94842)},
+      {TOBN(0xb2d5b284, 0x2946ad60), TOBN(0x854f29ad, 0xe9d1707e),
+       TOBN(0xaa5159dc, 0x2c6a4509), TOBN(0x899f94c0, 0x57189837)}},
+     {{TOBN(0xcf6adc51, 0xf4a55b03), TOBN(0x261762de, 0x35e3b2d5),
+       TOBN(0x4cc43012, 0x04827b51), TOBN(0xcd22a113, 0xc6021442)},
+      {TOBN(0xce2fd61a, 0x247c9569), TOBN(0x59a50973, 0xd152beca),
+       TOBN(0x6c835a11, 0x63a716d4), TOBN(0xc26455ed, 0x187dedcf)}},
+     {{TOBN(0x27f536e0, 0x49ce89e7), TOBN(0x18908539, 0xcc890cb5),
+       TOBN(0x308909ab, 0xd83c2aa1), TOBN(0xecd3142b, 0x1ab73bd3)},
+      {TOBN(0x6a85bf59, 0xb3f5ab84), TOBN(0x3c320a68, 0xf2bea4c6),
+       TOBN(0xad8dc538, 0x6da4541f), TOBN(0xeaf34eb0, 0xb7c41186)}},
+     {{TOBN(0x1c780129, 0x977c97c4), TOBN(0x5ff9beeb, 0xc57eb9fa),
+       TOBN(0xa24d0524, 0xc822c478), TOBN(0xfd8eec2a, 0x461cd415)},
+      {TOBN(0xfbde194e, 0xf027458c), TOBN(0xb4ff5319, 0x1d1be115),
+       TOBN(0x63f874d9, 0x4866d6f4), TOBN(0x35c75015, 0xb21ad0c9)}},
+     {{TOBN(0xa6b5c9d6, 0x46ac49d2), TOBN(0x42c77c0b, 0x83137aa9),
+       TOBN(0x24d000fc, 0x68225a38), TOBN(0x0f63cfc8, 0x2fe1e907)},
+      {TOBN(0x22d1b01b, 0xc6441f95), TOBN(0x7d38f719, 0xec8e448f),
+       TOBN(0x9b33fa5f, 0x787fb1ba), TOBN(0x94dcfda1, 0x190158df)}},
+     {{TOBN(0xc47cb339, 0x5f6d4a09), TOBN(0x6b4f355c, 0xee52b826),
+       TOBN(0x3d100f5d, 0xf51b930a), TOBN(0xf4512fac, 0x9f668f69)},
+      {TOBN(0x546781d5, 0x206c4c74), TOBN(0xd021d4d4, 0xcb4d2e48),
+       TOBN(0x494a54c2, 0xca085c2d), TOBN(0xf1dbaca4, 0x520850a8)}},
+     {{TOBN(0x63c79326, 0x490a1aca), TOBN(0xcb64dd9c, 0x41526b02),
+       TOBN(0xbb772591, 0xa2979258), TOBN(0x3f582970, 0x48d97846)},
+      {TOBN(0xd66b70d1, 0x7c213ba7), TOBN(0xc28febb5, 0xe8a0ced4),
+       TOBN(0x6b911831, 0xc10338c1), TOBN(0x0d54e389, 0xbf0126f3)}},
+     {{TOBN(0x7048d460, 0x4af206ee), TOBN(0x786c88f6, 0x77e97cb9),
+       TOBN(0xd4375ae1, 0xac64802e), TOBN(0x469bcfe1, 0xd53ec11c)},
+      {TOBN(0xfc9b340d, 0x47062230), TOBN(0xe743bb57, 0xc5b4a3ac),
+       TOBN(0xfe00b4aa, 0x59ef45ac), TOBN(0x29a4ef23, 0x59edf188)}},
+     {{TOBN(0x40242efe, 0xb483689b), TOBN(0x2575d3f6, 0x513ac262),
+       TOBN(0xf30037c8, 0x0ca6db72), TOBN(0xc9fcce82, 0x98864be2)},
+      {TOBN(0x84a112ff, 0x0149362d), TOBN(0x95e57582, 0x1c4ae971),
+       TOBN(0x1fa4b1a8, 0x945cf86c), TOBN(0x4525a734, 0x0b024a2f)}},
+     {{TOBN(0xe76c8b62, 0x8f338360), TOBN(0x483ff593, 0x28edf32b),
+       TOBN(0x67e8e90a, 0x298b1aec), TOBN(0x9caab338, 0x736d9a21)},
+      {TOBN(0x5c09d2fd, 0x66892709), TOBN(0x2496b4dc, 0xb55a1d41),
+       TOBN(0x93f5fb1a, 0xe24a4394), TOBN(0x08c75049, 0x6fa8f6c1)}},
+     {{TOBN(0xcaead1c2, 0xc905d85f), TOBN(0xe9d7f790, 0x0733ae57),
+       TOBN(0x24c9a65c, 0xf07cdd94), TOBN(0x7389359c, 0xa4b55931)},
+      {TOBN(0xf58709b7, 0x367e45f7), TOBN(0x1f203067, 0xcb7e7adc),
+       TOBN(0x82444bff, 0xc7b72818), TOBN(0x07303b35, 0xbaac8033)}},
+     {{TOBN(0x1e1ee4e4, 0xd13b7ea1), TOBN(0xe6489b24, 0xe0e74180),
+       TOBN(0xa5f2c610, 0x7e70ef70), TOBN(0xa1655412, 0xbdd10894)},
+      {TOBN(0x555ebefb, 0x7af4194e), TOBN(0x533c1c3c, 0x8e89bd9c),
+       TOBN(0x735b9b57, 0x89895856), TOBN(0x15fb3cd2, 0x567f5c15)}},
+     {{TOBN(0x057fed45, 0x526f09fd), TOBN(0xe8a4f10c, 0x8128240a),
+       TOBN(0x9332efc4, 0xff2bfd8d), TOBN(0x214e77a0, 0xbd35aa31)},
+      {TOBN(0x32896d73, 0x14faa40e), TOBN(0x767867ec, 0x01e5f186),
+       TOBN(0xc9adf8f1, 0x17a1813e), TOBN(0xcb6cda78, 0x54741795)}},
+     {{TOBN(0xb7521b6d, 0x349d51aa), TOBN(0xf56b5a9e, 0xe3c7b8e9),
+       TOBN(0xc6f1e5c9, 0x32a096df), TOBN(0x083667c4, 0xa3635024)},
+      {TOBN(0x365ea135, 0x18087f2f), TOBN(0xf1b8eaac, 0xd136e45d),
+       TOBN(0xc8a0e484, 0x73aec989), TOBN(0xd75a324b, 0x142c9259)}},
+     {{TOBN(0xb7b4d001, 0x01dae185), TOBN(0x45434e0b, 0x9b7a94bc),
+       TOBN(0xf54339af, 0xfbd8cb0b), TOBN(0xdcc4569e, 0xe98ef49e)},
+      {TOBN(0x7789318a, 0x09a51299), TOBN(0x81b4d206, 0xb2b025d8),
+       TOBN(0xf64aa418, 0xfae85792), TOBN(0x3e50258f, 0xacd7baf7)}},
+     {{TOBN(0xdce84cdb, 0x2996864b), TOBN(0xa2e67089, 0x1f485fa4),
+       TOBN(0xb28b2bb6, 0x534c6a5a), TOBN(0x31a7ec6b, 0xc94b9d39)},
+      {TOBN(0x1d217766, 0xd6bc20da), TOBN(0x4acdb5ec, 0x86761190),
+       TOBN(0x68726328, 0x73701063), TOBN(0x4d24ee7c, 0x2128c29b)}},
+     {{TOBN(0xc072ebd3, 0xa19fd868), TOBN(0x612e481c, 0xdb8ddd3b),
+       TOBN(0xb4e1d754, 0x1a64d852), TOBN(0x00ef95ac, 0xc4c6c4ab)},
+      {TOBN(0x1536d2ed, 0xaa0a6c46), TOBN(0x61294086, 0x43774790),
+       TOBN(0x54af25e8, 0x343fda10), TOBN(0x9ff9d98d, 0xfd25d6f2)}},
+     {{TOBN(0x0746af7c, 0x468b8835), TOBN(0x977a31cb, 0x730ecea7),
+       TOBN(0xa5096b80, 0xc2cf4a81), TOBN(0xaa986833, 0x6458c37a)},
+      {TOBN(0x6af29bf3, 0xa6bd9d34), TOBN(0x6a62fe9b, 0x33c5d854),
+       TOBN(0x50e6c304, 0xb7133b5e), TOBN(0x04b60159, 0x7d6e6848)}},
+     {{TOBN(0x4cd296df, 0x5579bea4), TOBN(0x10e35ac8, 0x5ceedaf1),
+       TOBN(0x04c4c5fd, 0xe3bcc5b1), TOBN(0x95f9ee8a, 0x89412cf9)},
+      {TOBN(0x2c9459ee, 0x82b6eb0f), TOBN(0x2e845765, 0x95c2aadd),
+       TOBN(0x774a84ae, 0xd327fcfe), TOBN(0xd8c93722, 0x0368d476)}},
+     {{TOBN(0x0dbd5748, 0xf83e8a3b), TOBN(0xa579aa96, 0x8d2495f3),
+       TOBN(0x535996a0, 0xae496e9b), TOBN(0x07afbfe9, 0xb7f9bcc2)},
+      {TOBN(0x3ac1dc6d, 0x5b7bd293), TOBN(0x3b592cff, 0x7022323d),
+       TOBN(0xba0deb98, 0x9c0a3e76), TOBN(0x18e78e9f, 0x4b197acb)}},
+     {{TOBN(0x211cde10, 0x296c36ef), TOBN(0x7ee89672, 0x82c4da77),
+       TOBN(0xb617d270, 0xa57836da), TOBN(0xf0cd9c31, 0x9cb7560b)},
+      {TOBN(0x01fdcbf7, 0xe455fe90), TOBN(0x3fb53cbb, 0x7e7334f3),
+       TOBN(0x781e2ea4, 0x4e7de4ec), TOBN(0x8adab3ad, 0x0b384fd0)}},
+     {{TOBN(0x129eee2f, 0x53d64829), TOBN(0x7a471e17, 0xa261492b),
+       TOBN(0xe4f9adb9, 0xe4cb4a2c), TOBN(0x3d359f6f, 0x97ba2c2d)},
+      {TOBN(0x346c6786, 0x0aacd697), TOBN(0x92b444c3, 0x75c2f8a8),
+       TOBN(0xc79fa117, 0xd85df44e), TOBN(0x56782372, 0x398ddf31)}},
+     {{TOBN(0x60e690f2, 0xbbbab3b8), TOBN(0x4851f8ae, 0x8b04816b),
+       TOBN(0xc72046ab, 0x9c92e4d2), TOBN(0x518c74a1, 0x7cf3136b)},
+      {TOBN(0xff4eb50a, 0xf9877d4c), TOBN(0x14578d90, 0xa919cabb),
+       TOBN(0x8218f8c4, 0xac5eb2b6), TOBN(0xa3ccc547, 0x542016e4)}},
+     {{TOBN(0x025bf48e, 0x327f8349), TOBN(0xf3e97346, 0xf43cb641),
+       TOBN(0xdc2bafdf, 0x500f1085), TOBN(0x57167876, 0x2f063055)},
+      {TOBN(0x5bd914b9, 0x411925a6), TOBN(0x7c078d48, 0xa1123de5),
+       TOBN(0xee6bf835, 0x182b165d), TOBN(0xb11b5e5b, 0xba519727)}},
+     {{TOBN(0xe33ea76c, 0x1eea7b85), TOBN(0x2352b461, 0x92d4f85e),
+       TOBN(0xf101d334, 0xafe115bb), TOBN(0xfabc1294, 0x889175a3)},
+      {TOBN(0x7f6bcdc0, 0x5233f925), TOBN(0xe0a802db, 0xe77fec55),
+       TOBN(0xbdb47b75, 0x8069b659), TOBN(0x1c5e12de, 0xf98fbd74)}},
+     {{TOBN(0x869c58c6, 0x4b8457ee), TOBN(0xa5360f69, 0x4f7ea9f7),
+       TOBN(0xe576c09f, 0xf460b38f), TOBN(0x6b70d548, 0x22b7fb36)},
+      {TOBN(0x3fd237f1, 0x3bfae315), TOBN(0x33797852, 0xcbdff369),
+       TOBN(0x97df25f5, 0x25b516f9), TOBN(0x46f388f2, 0xba38ad2d)}},
+     {{TOBN(0x656c4658, 0x89d8ddbb), TOBN(0x8830b26e, 0x70f38ee8),
+       TOBN(0x4320fd5c, 0xde1212b0), TOBN(0xc34f30cf, 0xe4a2edb2)},
+      {TOBN(0xabb131a3, 0x56ab64b8), TOBN(0x7f77f0cc, 0xd99c5d26),
+       TOBN(0x66856a37, 0xbf981d94), TOBN(0x19e76d09, 0x738bd76e)}},
+     {{TOBN(0xe76c8ac3, 0x96238f39), TOBN(0xc0a482be, 0xa830b366),
+       TOBN(0xb7b8eaff, 0x0b4eb499), TOBN(0x8ecd83bc, 0x4bfb4865)},
+      {TOBN(0x971b2cb7, 0xa2f3776f), TOBN(0xb42176a4, 0xf4b88adf),
+       TOBN(0xb9617df5, 0xbe1fa446), TOBN(0x8b32d508, 0xcd031bd2)}},
+     {{TOBN(0x1c6bd47d, 0x53b618c0), TOBN(0xc424f46c, 0x6a227923),
+       TOBN(0x7303ffde, 0xdd92d964), TOBN(0xe9712878, 0x71b5abf2)},
+      {TOBN(0x8f48a632, 0xf815561d), TOBN(0x85f48ff5, 0xd3c055d1),
+       TOBN(0x222a1427, 0x7525684f), TOBN(0xd0d841a0, 0x67360cc3)}},
+     {{TOBN(0x4245a926, 0x0b9267c6), TOBN(0xc78913f1, 0xcf07f863),
+       TOBN(0xaa844c8e, 0x4d0d9e24), TOBN(0xa42ad522, 0x3d5f9017)},
+      {TOBN(0xbd371749, 0xa2c989d5), TOBN(0x928292df, 0xe1f5e78e),
+       TOBN(0x493b383e, 0x0a1ea6da), TOBN(0x5136fd8d, 0x13aee529)}},
+     {{TOBN(0x860c44b1, 0xf2c34a99), TOBN(0x3b00aca4, 0xbf5855ac),
+       TOBN(0xabf6aaa0, 0xfaaf37be), TOBN(0x65f43682, 0x2a53ec08)},
+      {TOBN(0x1d9a5801, 0xa11b12e1), TOBN(0x78a7ab2c, 0xe20ed475),
+       TOBN(0x0de1067e, 0x9a41e0d5), TOBN(0x30473f5f, 0x305023ea)}},
+     {{TOBN(0xdd3ae09d, 0x169c7d97), TOBN(0x5cd5baa4, 0xcfaef9cd),
+       TOBN(0x5cd7440b, 0x65a44803), TOBN(0xdc13966a, 0x47f364de)},
+      {TOBN(0x077b2be8, 0x2b8357c1), TOBN(0x0cb1b4c5, 0xe9d57c2a),
+       TOBN(0x7a4ceb32, 0x05ff363e), TOBN(0xf310fa4d, 0xca35a9ef)}},
+     {{TOBN(0xdbb7b352, 0xf97f68c6), TOBN(0x0c773b50, 0x0b02cf58),
+       TOBN(0xea2e4821, 0x3c1f96d9), TOBN(0xffb357b0, 0xeee01815)},
+      {TOBN(0xb9c924cd, 0xe0f28039), TOBN(0x0b36c95a, 0x46a3fbe4),
+       TOBN(0x1faaaea4, 0x5e46db6c), TOBN(0xcae575c3, 0x1928aaff)}},
+     {{TOBN(0x7f671302, 0xa70dab86), TOBN(0xfcbd12a9, 0x71c58cfc),
+       TOBN(0xcbef9acf, 0xbee0cb92), TOBN(0x573da0b9, 0xf8c1b583)},
+      {TOBN(0x4752fcfe, 0x0d41d550), TOBN(0xe7eec0e3, 0x2155cffe),
+       TOBN(0x0fc39fcb, 0x545ae248), TOBN(0x522cb8d1, 0x8065f44e)}},
+     {{TOBN(0x263c962a, 0x70cbb96c), TOBN(0xe034362a, 0xbcd124a9),
+       TOBN(0xf120db28, 0x3c2ae58d), TOBN(0xb9a38d49, 0xfef6d507)},
+      {TOBN(0xb1fd2a82, 0x1ff140fd), TOBN(0xbd162f30, 0x20aee7e0),
+       TOBN(0x4e17a5d4, 0xcb251949), TOBN(0x2aebcb83, 0x4f7e1c3d)}},
+     {{TOBN(0x608eb25f, 0x937b0527), TOBN(0xf42e1e47, 0xeb7d9997),
+       TOBN(0xeba699c4, 0xb8a53a29), TOBN(0x1f921c71, 0xe091b536)},
+      {TOBN(0xcce29e7b, 0x5b26bbd5), TOBN(0x7a8ef5ed, 0x3b61a680),
+       TOBN(0xe5ef8043, 0xba1f1c7e), TOBN(0x16ea8217, 0x18158dda)}},
+     {{TOBN(0x01778a2b, 0x599ff0f9), TOBN(0x68a923d7, 0x8104fc6b),
+       TOBN(0x5bfa44df, 0xda694ff3), TOBN(0x4f7199db, 0xf7667f12)},
+      {TOBN(0xc06d8ff6, 0xe46f2a79), TOBN(0x08b5dead, 0xe9f8131d),
+       TOBN(0x02519a59, 0xabb4ce7c), TOBN(0xc4f710bc, 0xb42aec3e)}},
+     {{TOBN(0x3d77b057, 0x78bde41a), TOBN(0x6474bf80, 0xb4186b5a),
+       TOBN(0x048b3f67, 0x88c65741), TOBN(0xc64519de, 0x03c7c154)},
+      {TOBN(0xdf073846, 0x0edfcc4f), TOBN(0x319aa737, 0x48f1aa6b),
+       TOBN(0x8b9f8a02, 0xca909f77), TOBN(0x90258139, 0x7580bfef)}},
+     {{TOBN(0xd8bfd3ca, 0xc0c22719), TOBN(0xc60209e4, 0xc9ca151e),
+       TOBN(0x7a744ab5, 0xd9a1a69c), TOBN(0x6de5048b, 0x14937f8f)},
+      {TOBN(0x171938d8, 0xe115ac04), TOBN(0x7df70940, 0x1c6b16d2),
+       TOBN(0xa6aeb663, 0x7f8e94e7), TOBN(0xc130388e, 0x2a2cf094)}},
+     {{TOBN(0x1850be84, 0x77f54e6e), TOBN(0x9f258a72, 0x65d60fe5),
+       TOBN(0xff7ff0c0, 0x6c9146d6), TOBN(0x039aaf90, 0xe63a830b)},
+      {TOBN(0x38f27a73, 0x9460342f), TOBN(0x4703148c, 0x3f795f8a),
+       TOBN(0x1bb5467b, 0x9681a97e), TOBN(0x00931ba5, 0xecaeb594)}},
+     {{TOBN(0xcdb6719d, 0x786f337c), TOBN(0xd9c01cd2, 0xe704397d),
+       TOBN(0x0f4a3f20, 0x555c2fef), TOBN(0x00452509, 0x7c0af223)},
+      {TOBN(0x54a58047, 0x84db8e76), TOBN(0x3bacf1aa, 0x93c8aa06),
+       TOBN(0x11ca957c, 0xf7919422), TOBN(0x50641053, 0x78cdaa40)}},
+     {{TOBN(0x7a303874, 0x9f7144ae), TOBN(0x170c963f, 0x43d4acfd),
+       TOBN(0x5e148149, 0x58ddd3ef), TOBN(0xa7bde582, 0x9e72dba8)},
+      {TOBN(0x0769da8b, 0x6fa68750), TOBN(0xfa64e532, 0x572e0249),
+       TOBN(0xfcaadf9d, 0x2619ad31), TOBN(0x87882daa, 0xa7b349cd)}},
+     {{TOBN(0x9f6eb731, 0x6c67a775), TOBN(0xcb10471a, 0xefc5d0b1),
+       TOBN(0xb433750c, 0xe1b806b2), TOBN(0x19c5714d, 0x57b1ae7e)},
+      {TOBN(0xc0dc8b7b, 0xed03fd3f), TOBN(0xdd03344f, 0x31bc194e),
+       TOBN(0xa66c52a7, 0x8c6320b5), TOBN(0x8bc82ce3, 0xd0b6fd93)}},
+     {{TOBN(0xf8e13501, 0xb35f1341), TOBN(0xe53156dd, 0x25a43e42),
+       TOBN(0xd3adf27e, 0x4daeb85c), TOBN(0xb81d8379, 0xbbeddeb5)},
+      {TOBN(0x1b0b546e, 0x2e435867), TOBN(0x9020eb94, 0xeba5dd60),
+       TOBN(0x37d91161, 0x8210cb9d), TOBN(0x4c596b31, 0x5c91f1cf)}},
+     {{TOBN(0xb228a90f, 0x0e0b040d), TOBN(0xbaf02d82, 0x45ff897f),
+       TOBN(0x2aac79e6, 0x00fa6122), TOBN(0x24828817, 0x8e36f557)},
+      {TOBN(0xb9521d31, 0x113ec356), TOBN(0x9e48861e, 0x15eff1f8),
+       TOBN(0x2aa1d412, 0xe0d41715), TOBN(0x71f86203, 0x53f131b8)}},
+     {{TOBN(0xf60da8da, 0x3fd19408), TOBN(0x4aa716dc, 0x278d9d99),
+       TOBN(0x394531f7, 0xa8c51c90), TOBN(0xb560b0e8, 0xf59db51c)},
+      {TOBN(0xa28fc992, 0xfa34bdad), TOBN(0xf024fa14, 0x9cd4f8bd),
+       TOBN(0x5cf530f7, 0x23a9d0d3), TOBN(0x615ca193, 0xe28c9b56)}},
+     {{TOBN(0x6d2a483d, 0x6f73c51e), TOBN(0xa4cb2412, 0xea0dc2dd),
+       TOBN(0x50663c41, 0x1eb917ff), TOBN(0x3d3a74cf, 0xeade299e)},
+      {TOBN(0x29b3990f, 0x4a7a9202), TOBN(0xa9bccf59, 0xa7b15c3d),
+       TOBN(0x66a3ccdc, 0xa5df9208), TOBN(0x48027c14, 0x43f2f929)}},
+     {{TOBN(0xd385377c, 0x40b557f0), TOBN(0xe001c366, 0xcd684660),
+       TOBN(0x1b18ed6b, 0xe2183a27), TOBN(0x879738d8, 0x63210329)},
+      {TOBN(0xa687c74b, 0xbda94882), TOBN(0xd1bbcc48, 0xa684b299),
+       TOBN(0xaf6f1112, 0x863b3724), TOBN(0x6943d1b4, 0x2c8ce9f8)}},
+     {{TOBN(0xe044a3bb, 0x098cafb4), TOBN(0x27ed2310, 0x60d48caf),
+       TOBN(0x542b5675, 0x3a31b84d), TOBN(0xcbf3dd50, 0xfcddbed7)},
+      {TOBN(0x25031f16, 0x41b1d830), TOBN(0xa7ec851d, 0xcb0c1e27),
+       TOBN(0xac1c8fe0, 0xb5ae75db), TOBN(0xb24c7557, 0x08c52120)}},
+     {{TOBN(0x57f811dc, 0x1d4636c3), TOBN(0xf8436526, 0x681a9939),
+       TOBN(0x1f6bc6d9, 0x9c81adb3), TOBN(0x840f8ac3, 0x5b7d80d4)},
+      {TOBN(0x731a9811, 0xf4387f1a), TOBN(0x7c501cd3, 0xb5156880),
+       TOBN(0xa5ca4a07, 0xdfe68867), TOBN(0xf123d8f0, 0x5fcea120)}},
+     {{TOBN(0x1fbb0e71, 0xd607039e), TOBN(0x2b70e215, 0xcd3a4546),
+       TOBN(0x32d2f01d, 0x53324091), TOBN(0xb796ff08, 0x180ab19b)},
+      {TOBN(0x32d87a86, 0x3c57c4aa), TOBN(0x2aed9caf, 0xb7c49a27),
+       TOBN(0x9fb35eac, 0x31630d98), TOBN(0x338e8cdf, 0x5c3e20a3)}},
+     {{TOBN(0x80f16182, 0x66cde8db), TOBN(0x4e159980, 0x2d72fd36),
+       TOBN(0xd7b8f13b, 0x9b6e5072), TOBN(0xf5213907, 0x3b7b5dc1)},
+      {TOBN(0x4d431f1d, 0x8ce4396e), TOBN(0x37a1a680, 0xa7ed2142),
+       TOBN(0xbf375696, 0xd01aaf6b), TOBN(0xaa1c0c54, 0xe63aab66)}},
+     {{TOBN(0x3014368b, 0x4ed80940), TOBN(0x67e6d056, 0x7a6fcedd),
+       TOBN(0x7c208c49, 0xca97579f), TOBN(0xfe3d7a81, 0xa23597f6)},
+      {TOBN(0x5e203202, 0x7e096ae2), TOBN(0xb1f3e1e7, 0x24b39366),
+       TOBN(0x26da26f3, 0x2fdcdffc), TOBN(0x79422f1d, 0x6097be83)}}},
+    {{{TOBN(0x263a2cfb, 0x9db3b381), TOBN(0x9c3a2dee, 0xd4df0a4b),
+       TOBN(0x728d06e9, 0x7d04e61f), TOBN(0x8b1adfbc, 0x42449325)},
+      {TOBN(0x6ec1d939, 0x7e053a1b), TOBN(0xee2be5c7, 0x66daf707),
+       TOBN(0x80ba1e14, 0x810ac7ab), TOBN(0xdd2ae778, 0xf530f174)}},
+     {{TOBN(0x0435d97a, 0x205b9d8b), TOBN(0x6eb8f064, 0x056756d4),
+       TOBN(0xd5e88a8b, 0xb6f8210e), TOBN(0x070ef12d, 0xec9fd9ea)},
+      {TOBN(0x4d849505, 0x3bcc876a), TOBN(0x12a75338, 0xa7404ce3),
+       TOBN(0xd22b49e1, 0xb8a1db5e), TOBN(0xec1f2051, 0x14bfa5ad)}},
+     {{TOBN(0xadbaeb79, 0xb6828f36), TOBN(0x9d7a0258, 0x01bd5b9e),
+       TOBN(0xeda01e0d, 0x1e844b0c), TOBN(0x4b625175, 0x887edfc9)},
+      {TOBN(0x14109fdd, 0x9669b621), TOBN(0x88a2ca56, 0xf6f87b98),
+       TOBN(0xfe2eb788, 0x170df6bc), TOBN(0x0cea06f4, 0xffa473f9)}},
+     {{TOBN(0x43ed81b5, 0xc4e83d33), TOBN(0xd9f35879, 0x5efd488b),
+       TOBN(0x164a620f, 0x9deb4d0f), TOBN(0xc6927bdb, 0xac6a7394)},
+      {TOBN(0x45c28df7, 0x9f9e0f03), TOBN(0x2868661e, 0xfcd7e1a9),
+       TOBN(0x7cf4e8d0, 0xffa348f1), TOBN(0x6bd4c284, 0x398538e0)}},
+     {{TOBN(0x2618a091, 0x289a8619), TOBN(0xef796e60, 0x6671b173),
+       TOBN(0x664e46e5, 0x9090c632), TOBN(0xa38062d4, 0x1e66f8fb)},
+      {TOBN(0x6c744a20, 0x0573274e), TOBN(0xd07b67e4, 0xa9271394),
+       TOBN(0x391223b2, 0x6bdc0e20), TOBN(0xbe2d93f1, 0xeb0a05a7)}},
+     {{TOBN(0xf23e2e53, 0x3f36d141), TOBN(0xe84bb3d4, 0x4dfca442),
+       TOBN(0xb804a48d, 0x6b7c023a), TOBN(0x1e16a8fa, 0x76431c3b)},
+      {TOBN(0x1b5452ad, 0xddd472e0), TOBN(0x7d405ee7, 0x0d1ee127),
+       TOBN(0x50fc6f1d, 0xffa27599), TOBN(0x351ac53c, 0xbf391b35)}},
+     {{TOBN(0x7efa14b8, 0x4444896b), TOBN(0x64974d2f, 0xf94027fb),
+       TOBN(0xefdcd0e8, 0xde84487d), TOBN(0x8c45b260, 0x2b48989b)},
+      {TOBN(0xa8fcbbc2, 0xd8463487), TOBN(0xd1b2b3f7, 0x3fbc476c),
+       TOBN(0x21d005b7, 0xc8f443c0), TOBN(0x518f2e67, 0x40c0139c)}},
+     {{TOBN(0x56036e8c, 0x06d75fc1), TOBN(0x2dcf7bb7, 0x3249a89f),
+       TOBN(0x81dd1d3d, 0xe245e7dd), TOBN(0xf578dc4b, 0xebd6e2a7)},
+      {TOBN(0x4c028903, 0xdf2ce7a0), TOBN(0xaee36288, 0x9c39afac),
+       TOBN(0xdc847c31, 0x146404ab), TOBN(0x6304c0d8, 0xa4e97818)}},
+     {{TOBN(0xae51dca2, 0xa91f6791), TOBN(0x2abe4190, 0x9baa9efc),
+       TOBN(0xd9d2e2f4, 0x559c7ac1), TOBN(0xe82f4b51, 0xfc9f773a)},
+      {TOBN(0xa7713027, 0x4073e81c), TOBN(0xc0276fac, 0xfbb596fc),
+       TOBN(0x1d819fc9, 0xa684f70c), TOBN(0x29b47fdd, 0xc9f7b1e0)}},
+     {{TOBN(0x358de103, 0x459b1940), TOBN(0xec881c59, 0x5b013e93),
+       TOBN(0x51574c93, 0x49532ad3), TOBN(0x2db1d445, 0xb37b46de)},
+      {TOBN(0xc6445b87, 0xdf239fd8), TOBN(0xc718af75, 0x151d24ee),
+       TOBN(0xaea1c4a4, 0xf43c6259), TOBN(0x40c0e5d7, 0x70be02f7)}},
+     {{TOBN(0x6a4590f4, 0x721b33f2), TOBN(0x2124f1fb, 0xfedf04ea),
+       TOBN(0xf8e53cde, 0x9745efe7), TOBN(0xe7e10432, 0x65f046d9)},
+      {TOBN(0xc3fca28e, 0xe4d0c7e6), TOBN(0x847e339a, 0x87253b1b),
+       TOBN(0x9b595348, 0x3743e643), TOBN(0xcb6a0a0b, 0x4fd12fc5)}},
+     {{TOBN(0xfb6836c3, 0x27d02dcc), TOBN(0x5ad00982, 0x7a68bcc2),
+       TOBN(0x1b24b44c, 0x005e912d), TOBN(0xcc83d20f, 0x811fdcfe)},
+      {TOBN(0x36527ec1, 0x666fba0c), TOBN(0x69948197, 0x14754635),
+       TOBN(0xfcdcb1a8, 0x556da9c2), TOBN(0xa5934267, 0x81a732b2)}},
+     {{TOBN(0xec1214ed, 0xa714181d), TOBN(0x609ac13b, 0x6067b341),
+       TOBN(0xff4b4c97, 0xa545df1f), TOBN(0xa1240501, 0x34d2076b)},
+      {TOBN(0x6efa0c23, 0x1409ca97), TOBN(0x254cc1a8, 0x20638c43),
+       TOBN(0xd4e363af, 0xdcfb46cd), TOBN(0x62c2adc3, 0x03942a27)}},
+     {{TOBN(0xc67b9df0, 0x56e46483), TOBN(0xa55abb20, 0x63736356),
+       TOBN(0xab93c098, 0xc551bc52), TOBN(0x382b49f9, 0xb15fe64b)},
+      {TOBN(0x9ec221ad, 0x4dff8d47), TOBN(0x79caf615, 0x437df4d6),
+       TOBN(0x5f13dc64, 0xbb456509), TOBN(0xe4c589d9, 0x191f0714)}},
+     {{TOBN(0x27b6a8ab, 0x3fd40e09), TOBN(0xe455842e, 0x77313ea9),
+       TOBN(0x8b51d1e2, 0x1f55988b), TOBN(0x5716dd73, 0x062bbbfc)},
+      {TOBN(0x633c11e5, 0x4e8bf3de), TOBN(0x9a0e77b6, 0x1b85be3b),
+       TOBN(0x56510729, 0x0911cca6), TOBN(0x27e76495, 0xefa6590f)}},
+     {{TOBN(0xe4ac8b33, 0x070d3aab), TOBN(0x2643672b, 0x9a2cd5e5),
+       TOBN(0x52eff79b, 0x1cfc9173), TOBN(0x665ca49b, 0x90a7c13f)},
+      {TOBN(0x5a8dda59, 0xb3efb998), TOBN(0x8a5b922d, 0x052f1341),
+       TOBN(0xae9ebbab, 0x3cf9a530), TOBN(0x35986e7b, 0xf56da4d7)}},
+     {{TOBN(0x3a636b5c, 0xff3513cc), TOBN(0xbb0cf8ba, 0x3198f7dd),
+       TOBN(0xb8d40522, 0x41f16f86), TOBN(0x760575d8, 0xde13a7bf)},
+      {TOBN(0x36f74e16, 0x9f7aa181), TOBN(0x163a3ecf, 0xf509ed1c),
+       TOBN(0x6aead61f, 0x3c40a491), TOBN(0x158c95fc, 0xdfe8fcaa)}},
+     {{TOBN(0xa3991b6e, 0x13cda46f), TOBN(0x79482415, 0x342faed0),
+       TOBN(0xf3ba5bde, 0x666b5970), TOBN(0x1d52e6bc, 0xb26ab6dd)},
+      {TOBN(0x768ba1e7, 0x8608dd3d), TOBN(0x4930db2a, 0xea076586),
+       TOBN(0xd9575714, 0xe7dc1afa), TOBN(0x1fc7bf7d, 0xf7c58817)}},
+     {{TOBN(0x6b47accd, 0xd9eee96c), TOBN(0x0ca277fb, 0xe58cec37),
+       TOBN(0x113fe413, 0xe702c42a), TOBN(0xdd1764ee, 0xc47cbe51)},
+      {TOBN(0x041e7cde, 0x7b3ed739), TOBN(0x50cb7459, 0x5ce9e1c0),
+       TOBN(0x35568513, 0x2925b212), TOBN(0x7cff95c4, 0x001b081c)}},
+     {{TOBN(0x63ee4cbd, 0x8088b454), TOBN(0xdb7f32f7, 0x9a9e0c8a),
+       TOBN(0xb377d418, 0x6b2447cb), TOBN(0xe3e982aa, 0xd370219b)},
+      {TOBN(0x06ccc1e4, 0xc2a2a593), TOBN(0x72c36865, 0x0773f24f),
+       TOBN(0xa13b4da7, 0x95859423), TOBN(0x8bbf1d33, 0x75040c8f)}},
+     {{TOBN(0x726f0973, 0xda50c991), TOBN(0x48afcd5b, 0x822d6ee2),
+       TOBN(0xe5fc718b, 0x20fd7771), TOBN(0xb9e8e77d, 0xfd0807a1)},
+      {TOBN(0x7f5e0f44, 0x99a7703d), TOBN(0x6972930e, 0x618e36f3),
+       TOBN(0x2b7c77b8, 0x23807bbe), TOBN(0xe5b82405, 0xcb27ff50)}},
+     {{TOBN(0xba8b8be3, 0xbd379062), TOBN(0xd64b7a1d, 0x2dce4a92),
+       TOBN(0x040a73c5, 0xb2952e37), TOBN(0x0a9e252e, 0xd438aeca)},
+      {TOBN(0xdd43956b, 0xc39d3bcb), TOBN(0x1a31ca00, 0xb32b2d63),
+       TOBN(0xd67133b8, 0x5c417a18), TOBN(0xd08e4790, 0x2ef442c8)}},
+     {{TOBN(0x98cb1ae9, 0x255c0980), TOBN(0x4bd86381, 0x2b4a739f),
+       TOBN(0x5a5c31e1, 0x1e4a45a1), TOBN(0x1e5d55fe, 0x9cb0db2f)},
+      {TOBN(0x74661b06, 0x8ff5cc29), TOBN(0x026b389f, 0x0eb8a4f4),
+       TOBN(0x536b21a4, 0x58848c24), TOBN(0x2e5bf8ec, 0x81dc72b0)}},
+     {{TOBN(0x03c187d0, 0xad886aac), TOBN(0x5c16878a, 0xb771b645),
+       TOBN(0xb07dfc6f, 0xc74045ab), TOBN(0x2c6360bf, 0x7800caed)},
+      {TOBN(0x24295bb5, 0xb9c972a3), TOBN(0xc9e6f88e, 0x7c9a6dba),
+       TOBN(0x90ffbf24, 0x92a79aa6), TOBN(0xde29d50a, 0x41c26ac2)}},
+     {{TOBN(0x9f0af483, 0xd309cbe6), TOBN(0x5b020d8a, 0xe0bced4f),
+       TOBN(0x606e986d, 0xb38023e3), TOBN(0xad8f2c9d, 0x1abc6933)},
+      {TOBN(0x19292e1d, 0xe7400e93), TOBN(0xfe3e18a9, 0x52be5e4d),
+       TOBN(0xe8e9771d, 0x2e0680bf), TOBN(0x8c5bec98, 0xc54db063)}},
+     {{TOBN(0x2af9662a, 0x74a55d1f), TOBN(0xe3fbf28f, 0x046f66d8),
+       TOBN(0xa3a72ab4, 0xd4dc4794), TOBN(0x09779f45, 0x5c7c2dd8)},
+      {TOBN(0xd893bdaf, 0xc3d19d8d), TOBN(0xd5a75094, 0x57d6a6df),
+       TOBN(0x8cf8fef9, 0x952e6255), TOBN(0x3da67cfb, 0xda9a8aff)}},
+     {{TOBN(0x4c23f62a, 0x2c160dcd), TOBN(0x34e6c5e3, 0x8f90eaef),
+       TOBN(0x35865519, 0xa9a65d5a), TOBN(0x07c48aae, 0x8fd38a3d)},
+      {TOBN(0xb7e7aeda, 0x50068527), TOBN(0x2c09ef23, 0x1c90936a),
+       TOBN(0x31ecfeb6, 0xe879324c), TOBN(0xa0871f6b, 0xfb0ec938)}},
+     {{TOBN(0xb1f0fb68, 0xd84d835d), TOBN(0xc90caf39, 0x861dc1e6),
+       TOBN(0x12e5b046, 0x7594f8d7), TOBN(0x26897ae2, 0x65012b92)},
+      {TOBN(0xbcf68a08, 0xa4d6755d), TOBN(0x403ee41c, 0x0991fbda),
+       TOBN(0x733e343e, 0x3bbf17e8), TOBN(0xd2c7980d, 0x679b3d65)}},
+     {{TOBN(0x33056232, 0xd2e11305), TOBN(0x966be492, 0xf3c07a6f),
+       TOBN(0x6a8878ff, 0xbb15509d), TOBN(0xff221101, 0x0a9b59a4)},
+      {TOBN(0x6c9f564a, 0xabe30129), TOBN(0xc6f2c940, 0x336e64cf),
+       TOBN(0x0fe75262, 0x8b0c8022), TOBN(0xbe0267e9, 0x6ae8db87)}},
+     {{TOBN(0x22e192f1, 0x93bc042b), TOBN(0xf085b534, 0xb237c458),
+       TOBN(0xa0d192bd, 0x832c4168), TOBN(0x7a76e9e3, 0xbdf6271d)},
+      {TOBN(0x52a882fa, 0xb88911b5), TOBN(0xc85345e4, 0xb4db0eb5),
+       TOBN(0xa3be02a6, 0x81a7c3ff), TOBN(0x51889c8c, 0xf0ec0469)}},
+     {{TOBN(0x9d031369, 0xa5e829e5), TOBN(0xcbb4c6fc, 0x1607aa41),
+       TOBN(0x75ac59a6, 0x241d84c1), TOBN(0xc043f2bf, 0x8829e0ee)},
+      {TOBN(0x82a38f75, 0x8ea5e185), TOBN(0x8bda40b9, 0xd87cbd9f),
+       TOBN(0x9e65e75e, 0x2d8fc601), TOBN(0x3d515f74, 0xa35690b3)}},
+     {{TOBN(0x534acf4f, 0xda79e5ac), TOBN(0x68b83b3a, 0x8630215f),
+       TOBN(0x5c748b2e, 0xd085756e), TOBN(0xb0317258, 0xe5d37cb2)},
+      {TOBN(0x6735841a, 0xc5ccc2c4), TOBN(0x7d7dc96b, 0x3d9d5069),
+       TOBN(0xa147e410, 0xfd1754bd), TOBN(0x65296e94, 0xd399ddd5)}},
+     {{TOBN(0xf6b5b2d0, 0xbc8fa5bc), TOBN(0x8a5ead67, 0x500c277b),
+       TOBN(0x214625e6, 0xdfa08a5d), TOBN(0x51fdfedc, 0x959cf047)},
+      {TOBN(0x6bc9430b, 0x289fca32), TOBN(0xe36ff0cf, 0x9d9bdc3f),
+       TOBN(0x2fe187cb, 0x58ea0ede), TOBN(0xed66af20, 0x5a900b3f)}},
+     {{TOBN(0x00e0968b, 0x5fa9f4d6), TOBN(0x2d4066ce, 0x37a362e7),
+       TOBN(0xa99a9748, 0xbd07e772), TOBN(0x710989c0, 0x06a4f1d0)},
+      {TOBN(0xd5dedf35, 0xce40cbd8), TOBN(0xab55c5f0, 0x1743293d),
+       TOBN(0x766f1144, 0x8aa24e2c), TOBN(0x94d874f8, 0x605fbcb4)}},
+     {{TOBN(0xa365f0e8, 0xa518001b), TOBN(0xee605eb6, 0x9d04ef0f),
+       TOBN(0x5a3915cd, 0xba8d4d25), TOBN(0x44c0e1b8, 0xb5113472)},
+      {TOBN(0xcbb024e8, 0x8b6740dc), TOBN(0x89087a53, 0xee1d4f0c),
+       TOBN(0xa88fa05c, 0x1fc4e372), TOBN(0x8bf395cb, 0xaf8b3af2)}},
+     {{TOBN(0x1e71c9a1, 0xdeb8568b), TOBN(0xa35daea0, 0x80fb3d32),
+       TOBN(0xe8b6f266, 0x2cf8fb81), TOBN(0x6d51afe8, 0x9490696a)},
+      {TOBN(0x81beac6e, 0x51803a19), TOBN(0xe3d24b7f, 0x86219080),
+       TOBN(0x727cfd9d, 0xdf6f463c), TOBN(0x8c6865ca, 0x72284ee8)}},
+     {{TOBN(0x32c88b7d, 0xb743f4ef), TOBN(0x3793909b, 0xe7d11dce),
+       TOBN(0xd398f922, 0x2ff2ebe8), TOBN(0x2c70ca44, 0xe5e49796)},
+      {TOBN(0xdf4d9929, 0xcb1131b1), TOBN(0x7826f298, 0x25888e79),
+       TOBN(0x4d3a112c, 0xf1d8740a), TOBN(0x00384cb6, 0x270afa8b)}},
+     {{TOBN(0xcb64125b, 0x3ab48095), TOBN(0x3451c256, 0x62d05106),
+       TOBN(0xd73d577d, 0xa4955845), TOBN(0x39570c16, 0xbf9f4433)},
+      {TOBN(0xd7dfaad3, 0xadecf263), TOBN(0xf1c3d8d1, 0xdc76e102),
+       TOBN(0x5e774a58, 0x54c6a836), TOBN(0xdad4b672, 0x3e92d47b)}},
+     {{TOBN(0xbe7e990f, 0xf0d796a0), TOBN(0x5fc62478, 0xdf0e8b02),
+       TOBN(0x8aae8bf4, 0x030c00ad), TOBN(0x3d2db93b, 0x9004ba0f)},
+      {TOBN(0xe48c8a79, 0xd85d5ddc), TOBN(0xe907caa7, 0x6bb07f34),
+       TOBN(0x58db343a, 0xa39eaed5), TOBN(0x0ea6e007, 0xadaf5724)}},
+     {{TOBN(0xe00df169, 0xd23233f3), TOBN(0x3e322796, 0x77cb637f),
+       TOBN(0x1f897c0e, 0x1da0cf6c), TOBN(0xa651f5d8, 0x31d6bbdd)},
+      {TOBN(0xdd61af19, 0x1a230c76), TOBN(0xbd527272, 0xcdaa5e4a),
+       TOBN(0xca753636, 0xd0abcd7e), TOBN(0x78bdd37c, 0x370bd8dc)}},
+     {{TOBN(0xc23916c2, 0x17cd93fe), TOBN(0x65b97a4d, 0xdadce6e2),
+       TOBN(0xe04ed4eb, 0x174e42f8), TOBN(0x1491ccaa, 0xbb21480a)},
+      {TOBN(0x145a8280, 0x23196332), TOBN(0x3c3862d7, 0x587b479a),
+       TOBN(0x9f4a88a3, 0x01dcd0ed), TOBN(0x4da2b7ef, 0x3ea12f1f)}},
+     {{TOBN(0xf8e7ae33, 0xb126e48e), TOBN(0x404a0b32, 0xf494e237),
+       TOBN(0x9beac474, 0xc55acadb), TOBN(0x4ee5cf3b, 0xcbec9fd9)},
+      {TOBN(0x336b33b9, 0x7df3c8c3), TOBN(0xbd905fe3, 0xb76808fd),
+       TOBN(0x8f436981, 0xaa45c16a), TOBN(0x255c5bfa, 0x3dd27b62)}},
+     {{TOBN(0x71965cbf, 0xc3dd9b4d), TOBN(0xce23edbf, 0xfc068a87),
+       TOBN(0xb78d4725, 0x745b029b), TOBN(0x74610713, 0xcefdd9bd)},
+      {TOBN(0x7116f75f, 0x1266bf52), TOBN(0x02046722, 0x18e49bb6),
+       TOBN(0xdf43df9f, 0x3d6f19e3), TOBN(0xef1bc7d0, 0xe685cb2f)}},
+     {{TOBN(0xcddb27c1, 0x7078c432), TOBN(0xe1961b9c, 0xb77fedb7),
+       TOBN(0x1edc2f5c, 0xc2290570), TOBN(0x2c3fefca, 0x19cbd886)},
+      {TOBN(0xcf880a36, 0xc2af389a), TOBN(0x96c610fd, 0xbda71cea),
+       TOBN(0xf03977a9, 0x32aa8463), TOBN(0x8eb7763f, 0x8586d90a)}},
+     {{TOBN(0x3f342454, 0x2a296e77), TOBN(0xc8718683, 0x42837a35),
+       TOBN(0x7dc71090, 0x6a09c731), TOBN(0x54778ffb, 0x51b816db)},
+      {TOBN(0x6b33bfec, 0xaf06defd), TOBN(0xfe3c105f, 0x8592b70b),
+       TOBN(0xf937fda4, 0x61da6114), TOBN(0x3c13e651, 0x4c266ad7)}},
+     {{TOBN(0xe363a829, 0x855938e8), TOBN(0x2eeb5d9e, 0x9de54b72),
+       TOBN(0xbeb93b0e, 0x20ccfab9), TOBN(0x3dffbb5f, 0x25e61a25)},
+      {TOBN(0x7f655e43, 0x1acc093d), TOBN(0x0cb6cc3d, 0x3964ce61),
+       TOBN(0x6ab283a1, 0xe5e9b460), TOBN(0x55d787c5, 0xa1c7e72d)}},
+     {{TOBN(0x4d2efd47, 0xdeadbf02), TOBN(0x11e80219, 0xac459068),
+       TOBN(0x810c7626, 0x71f311f0), TOBN(0xfa17ef8d, 0x4ab6ef53)},
+      {TOBN(0xaf47fd25, 0x93e43bff), TOBN(0x5cb5ff3f, 0x0be40632),
+       TOBN(0x54687106, 0x8ee61da3), TOBN(0x7764196e, 0xb08afd0f)}},
+     {{TOBN(0x831ab3ed, 0xf0290a8f), TOBN(0xcae81966, 0xcb47c387),
+       TOBN(0xaad7dece, 0x184efb4f), TOBN(0xdcfc53b3, 0x4749110e)},
+      {TOBN(0x6698f23c, 0x4cb632f9), TOBN(0xc42a1ad6, 0xb91f8067),
+       TOBN(0xb116a81d, 0x6284180a), TOBN(0xebedf5f8, 0xe901326f)}},
+     {{TOBN(0xf2274c9f, 0x97e3e044), TOBN(0x42018520, 0x11d09fc9),
+       TOBN(0x56a65f17, 0xd18e6e23), TOBN(0x2ea61e2a, 0x352b683c)},
+      {TOBN(0x27d291bc, 0x575eaa94), TOBN(0x9e7bc721, 0xb8ff522d),
+       TOBN(0x5f7268bf, 0xa7f04d6f), TOBN(0x5868c73f, 0xaba41748)}},
+     {{TOBN(0x9f85c2db, 0x7be0eead), TOBN(0x511e7842, 0xff719135),
+       TOBN(0x5a06b1e9, 0xc5ea90d7), TOBN(0x0c19e283, 0x26fab631)},
+      {TOBN(0x8af8f0cf, 0xe9206c55), TOBN(0x89389cb4, 0x3553c06a),
+       TOBN(0x39dbed97, 0xf65f8004), TOBN(0x0621b037, 0xc508991d)}},
+     {{TOBN(0x1c52e635, 0x96e78cc4), TOBN(0x5385c8b2, 0x0c06b4a8),
+       TOBN(0xd84ddfdb, 0xb0e87d03), TOBN(0xc49dfb66, 0x934bafad)},
+      {TOBN(0x7071e170, 0x59f70772), TOBN(0x3a073a84, 0x3a1db56b),
+       TOBN(0x03494903, 0x3b8af190), TOBN(0x7d882de3, 0xd32920f0)}},
+     {{TOBN(0x91633f0a, 0xb2cf8940), TOBN(0x72b0b178, 0x6f948f51),
+       TOBN(0x2d28dc30, 0x782653c8), TOBN(0x88829849, 0xdb903a05)},
+      {TOBN(0xb8095d0c, 0x6a19d2bb), TOBN(0x4b9e7f0c, 0x86f782cb),
+       TOBN(0x7af73988, 0x2d907064), TOBN(0xd12be0fe, 0x8b32643c)}},
+     {{TOBN(0x358ed23d, 0x0e165dc3), TOBN(0x3d47ce62, 0x4e2378ce),
+       TOBN(0x7e2bb0b9, 0xfeb8a087), TOBN(0x3246e8ae, 0xe29e10b9)},
+      {TOBN(0x459f4ec7, 0x03ce2b4d), TOBN(0xe9b4ca1b, 0xbbc077cf),
+       TOBN(0x2613b4f2, 0x0e9940c1), TOBN(0xfc598bb9, 0x047d1eb1)}},
+     {{TOBN(0x9744c62b, 0x45036099), TOBN(0xa9dee742, 0x167c65d8),
+       TOBN(0x0c511525, 0xdabe1943), TOBN(0xda110554, 0x93c6c624)},
+      {TOBN(0xae00a52c, 0x651a3be2), TOBN(0xcda5111d, 0x884449a6),
+       TOBN(0x063c06f4, 0xff33bed1), TOBN(0x73baaf9a, 0x0d3d76b4)}},
+     {{TOBN(0x52fb0c9d, 0x7fc63668), TOBN(0x6886c9dd, 0x0c039cde),
+       TOBN(0x602bd599, 0x55b22351), TOBN(0xb00cab02, 0x360c7c13)},
+      {TOBN(0x8cb616bc, 0x81b69442), TOBN(0x41486700, 0xb55c3cee),
+       TOBN(0x71093281, 0xf49ba278), TOBN(0xad956d9c, 0x64a50710)}},
+     {{TOBN(0x9561f28b, 0x638a7e81), TOBN(0x54155cdf, 0x5980ddc3),
+       TOBN(0xb2db4a96, 0xd26f247a), TOBN(0x9d774e4e, 0x4787d100)},
+      {TOBN(0x1a9e6e2e, 0x078637d2), TOBN(0x1c363e2d, 0x5e0ae06a),
+       TOBN(0x7493483e, 0xe9cfa354), TOBN(0x76843cb3, 0x7f74b98d)}},
+     {{TOBN(0xbaca6591, 0xd4b66947), TOBN(0xb452ce98, 0x04460a8c),
+       TOBN(0x6830d246, 0x43768f55), TOBN(0xf4197ed8, 0x7dff12df)},
+      {TOBN(0x6521b472, 0x400dd0f7), TOBN(0x59f5ca8f, 0x4b1e7093),
+       TOBN(0x6feff11b, 0x080338ae), TOBN(0x0ada31f6, 0xa29ca3c6)}},
+     {{TOBN(0x24794eb6, 0x94a2c215), TOBN(0xd83a43ab, 0x05a57ab4),
+       TOBN(0x264a543a, 0x2a6f89fe), TOBN(0x2c2a3868, 0xdd5ec7c2)},
+      {TOBN(0xd3373940, 0x8439d9b2), TOBN(0x715ea672, 0x0acd1f11),
+       TOBN(0x42c1d235, 0xe7e6cc19), TOBN(0x81ce6e96, 0xb990585c)}},
+     {{TOBN(0x04e5dfe0, 0xd809c7bd), TOBN(0xd7b2580c, 0x8f1050ab),
+       TOBN(0x6d91ad78, 0xd8a4176f), TOBN(0x0af556ee, 0x4e2e897c)},
+      {TOBN(0x162a8b73, 0x921de0ac), TOBN(0x52ac9c22, 0x7ea78400),
+       TOBN(0xee2a4eea, 0xefce2174), TOBN(0xbe61844e, 0x6d637f79)}},
+     {{TOBN(0x0491f1bc, 0x789a283b), TOBN(0x72d3ac3d, 0x880836f4),
+       TOBN(0xaa1c5ea3, 0x88e5402d), TOBN(0x1b192421, 0xd5cc473d)},
+      {TOBN(0x5c0b9998, 0x9dc84cac), TOBN(0xb0a8482d, 0x9c6e75b8),
+       TOBN(0x639961d0, 0x3a191ce2), TOBN(0xda3bc865, 0x6d837930)}},
+     {{TOBN(0xca990653, 0x056e6f8f), TOBN(0x84861c41, 0x64d133a7),
+       TOBN(0x8b403276, 0x746abe40), TOBN(0xb7b4d51a, 0xebf8e303)},
+      {TOBN(0x05b43211, 0x220a255d), TOBN(0xc997152c, 0x02419e6e),
+       TOBN(0x76ff47b6, 0x630c2fea), TOBN(0x50518677, 0x281fdade)}},
+     {{TOBN(0x3283b8ba, 0xcf902b0b), TOBN(0x8d4b4eb5, 0x37db303b),
+       TOBN(0xcc89f42d, 0x755011bc), TOBN(0xb43d74bb, 0xdd09d19b)},
+      {TOBN(0x65746bc9, 0x8adba350), TOBN(0x364eaf8c, 0xb51c1927),
+       TOBN(0x13c76596, 0x10ad72ec), TOBN(0x30045121, 0xf8d40c20)}},
+     {{TOBN(0x6d2d99b7, 0xea7b979b), TOBN(0xcd78cd74, 0xe6fb3bcd),
+       TOBN(0x11e45a9e, 0x86cffbfe), TOBN(0x78a61cf4, 0x637024f6)},
+      {TOBN(0xd06bc872, 0x3d502295), TOBN(0xf1376854, 0x458cb288),
+       TOBN(0xb9db26a1, 0x342f8586), TOBN(0xf33effcf, 0x4beee09e)}},
+     {{TOBN(0xd7e0c4cd, 0xb30cfb3a), TOBN(0x6d09b8c1, 0x6c9db4c8),
+       TOBN(0x40ba1a42, 0x07c8d9df), TOBN(0x6fd495f7, 0x1c52c66d)},
+      {TOBN(0xfb0e169f, 0x275264da), TOBN(0x80c2b746, 0xe57d8362),
+       TOBN(0xedd987f7, 0x49ad7222), TOBN(0xfdc229af, 0x4398ec7b)}}},
+    {{{TOBN(0xb0d1ed84, 0x52666a58), TOBN(0x4bcb6e00, 0xe6a9c3c2),
+       TOBN(0x3c57411c, 0x26906408), TOBN(0xcfc20755, 0x13556400)},
+      {TOBN(0xa08b1c50, 0x5294dba3), TOBN(0xa30ba286, 0x8b7dd31e),
+       TOBN(0xd70ba90e, 0x991eca74), TOBN(0x094e142c, 0xe762c2b9)}},
+     {{TOBN(0xb81d783e, 0x979f3925), TOBN(0x1efd130a, 0xaf4c89a7),
+       TOBN(0x525c2144, 0xfd1bf7fa), TOBN(0x4b296904, 0x1b265a9e)},
+      {TOBN(0xed8e9634, 0xb9db65b6), TOBN(0x35c82e32, 0x03599d8a),
+       TOBN(0xdaa7a54f, 0x403563f3), TOBN(0x9df088ad, 0x022c38ab)}},
+     {{TOBN(0xe5cfb066, 0xbb3fd30a), TOBN(0x429169da, 0xeff0354e),
+       TOBN(0x809cf852, 0x3524e36c), TOBN(0x136f4fb3, 0x0155be1d)},
+      {TOBN(0x4826af01, 0x1fbba712), TOBN(0x6ef0f0b4, 0x506ba1a1),
+       TOBN(0xd9928b31, 0x77aea73e), TOBN(0xe2bf6af2, 0x5eaa244e)}},
+     {{TOBN(0x8d084f12, 0x4237b64b), TOBN(0x688ebe99, 0xe3ecfd07),
+       TOBN(0x57b8a70c, 0xf6845dd8), TOBN(0x808fc59c, 0x5da4a325)},
+      {TOBN(0xa9032b2b, 0xa3585862), TOBN(0xb66825d5, 0xedf29386),
+       TOBN(0xb5a5a8db, 0x431ec29b), TOBN(0xbb143a98, 0x3a1e8dc8)}},
+     {{TOBN(0x35ee94ce, 0x12ae381b), TOBN(0x3a7f176c, 0x86ccda90),
+       TOBN(0xc63a657e, 0x4606eaca), TOBN(0x9ae5a380, 0x43cd04df)},
+      {TOBN(0x9bec8d15, 0xed251b46), TOBN(0x1f5d6d30, 0xcaca5e64),
+       TOBN(0x347b3b35, 0x9ff20f07), TOBN(0x4d65f034, 0xf7e4b286)}},
+     {{TOBN(0x9e93ba24, 0xf111661e), TOBN(0xedced484, 0xb105eb04),
+       TOBN(0x96dc9ba1, 0xf424b578), TOBN(0xbf8f66b7, 0xe83e9069)},
+      {TOBN(0x872d4df4, 0xd7ed8216), TOBN(0xbf07f377, 0x8e2cbecf),
+       TOBN(0x4281d899, 0x98e73754), TOBN(0xfec85fbb, 0x8aab8708)}},
+     {{TOBN(0x9a3c0dee, 0xa5ba5b0b), TOBN(0xe6a116ce, 0x42d05299),
+       TOBN(0xae9775fe, 0xe9b02d42), TOBN(0x72b05200, 0xa1545cb6)},
+      {TOBN(0xbc506f7d, 0x31a3b4ea), TOBN(0xe5893078, 0x8bbd9b32),
+       TOBN(0xc8bc5f37, 0xe4b12a97), TOBN(0x6b000c06, 0x4a73b671)}},
+     {{TOBN(0x13b5bf22, 0x765fa7d0), TOBN(0x59805bf0, 0x1d6a5370),
+       TOBN(0x67a5e29d, 0x4280db98), TOBN(0x4f53916f, 0x776b1ce3)},
+      {TOBN(0x714ff61f, 0x33ddf626), TOBN(0x4206238e, 0xa085d103),
+       TOBN(0x1c50d4b7, 0xe5809ee3), TOBN(0x999f450d, 0x85f8eb1d)}},
+     {{TOBN(0x658a6051, 0xe4c79e9b), TOBN(0x1394cb73, 0xc66a9fea),
+       TOBN(0x27f31ed5, 0xc6be7b23), TOBN(0xf4c88f36, 0x5aa6f8fe)},
+      {TOBN(0x0fb0721f, 0x4aaa499e), TOBN(0x68b3a7d5, 0xe3fb2a6b),
+       TOBN(0xa788097d, 0x3a92851d), TOBN(0x060e7f8a, 0xe96f4913)}},
+     {{TOBN(0x82eebe73, 0x1a3a93bc), TOBN(0x42bbf465, 0xa21adc1a),
+       TOBN(0xc10b6fa4, 0xef030efd), TOBN(0x247aa4c7, 0x87b097bb)},
+      {TOBN(0x8b8dc632, 0xf60c77da), TOBN(0x6ffbc26a, 0xc223523e),
+       TOBN(0xa4f6ff11, 0x344579cf), TOBN(0x5825653c, 0x980250f6)}},
+     {{TOBN(0xb2dd097e, 0xbc1aa2b9), TOBN(0x07889393, 0x37a0333a),
+       TOBN(0x1cf55e71, 0x37a0db38), TOBN(0x2648487f, 0x792c1613)},
+      {TOBN(0xdad01336, 0x3fcef261), TOBN(0x6239c81d, 0x0eabf129),
+       TOBN(0x8ee761de, 0x9d276be2), TOBN(0x406a7a34, 0x1eda6ad3)}},
+     {{TOBN(0x4bf367ba, 0x4a493b31), TOBN(0x54f20a52, 0x9bf7f026),
+       TOBN(0xb696e062, 0x9795914b), TOBN(0xcddab96d, 0x8bf236ac)},
+      {TOBN(0x4ff2c70a, 0xed25ea13), TOBN(0xfa1d09eb, 0x81cbbbe7),
+       TOBN(0x88fc8c87, 0x468544c5), TOBN(0x847a670d, 0x696b3317)}},
+     {{TOBN(0xf133421e, 0x64bcb626), TOBN(0xaea638c8, 0x26dee0b5),
+       TOBN(0xd6e7680b, 0xb310346c), TOBN(0xe06f4097, 0xd5d4ced3)},
+      {TOBN(0x09961452, 0x7512a30b), TOBN(0xf3d867fd, 0xe589a59a),
+       TOBN(0x2e73254f, 0x52d0c180), TOBN(0x9063d8a3, 0x333c74ac)}},
+     {{TOBN(0xeda6c595, 0xd314e7bc), TOBN(0x2ee7464b, 0x467899ed),
+       TOBN(0x1cef423c, 0x0a1ed5d3), TOBN(0x217e76ea, 0x69cc7613)},
+      {TOBN(0x27ccce1f, 0xe7cda917), TOBN(0x12d8016b, 0x8a893f16),
+       TOBN(0xbcd6de84, 0x9fc74f6b), TOBN(0xfa5817e2, 0xf3144e61)}},
+     {{TOBN(0x1f354164, 0x0821ee4c), TOBN(0x1583eab4, 0x0bc61992),
+       TOBN(0x7490caf6, 0x1d72879f), TOBN(0x998ad9f3, 0xf76ae7b2)},
+      {TOBN(0x1e181950, 0xa41157f7), TOBN(0xa9d7e1e6, 0xe8da3a7e),
+       TOBN(0x963784eb, 0x8426b95f), TOBN(0x0ee4ed6e, 0x542e2a10)}},
+     {{TOBN(0xb79d4cc5, 0xac751e7b), TOBN(0x93f96472, 0xfd4211bd),
+       TOBN(0x8c72d3d2, 0xc8de4fc6), TOBN(0x7b69cbf5, 0xdf44f064)},
+      {TOBN(0x3da90ca2, 0xf4bf94e1), TOBN(0x1a5325f8, 0xf12894e2),
+       TOBN(0x0a437f6c, 0x7917d60b), TOBN(0x9be70486, 0x96c9cb5d)}},
+     {{TOBN(0xb4d880bf, 0xe1dc5c05), TOBN(0xd738adda, 0xeebeeb57),
+       TOBN(0x6f0119d3, 0xdf0fe6a3), TOBN(0x5c686e55, 0x66eaaf5a)},
+      {TOBN(0x9cb10b50, 0xdfd0b7ec), TOBN(0xbdd0264b, 0x6a497c21),
+       TOBN(0xfc093514, 0x8c546c96), TOBN(0x58a947fa, 0x79dbf42a)}},
+     {{TOBN(0xc0b48d4e, 0x49ccd6d7), TOBN(0xff8fb02c, 0x88bd5580),
+       TOBN(0xc75235e9, 0x07d473b2), TOBN(0x4fab1ac5, 0xa2188af3)},
+      {TOBN(0x030fa3bc, 0x97576ec0), TOBN(0xe8c946e8, 0x0b7e7d2f),
+       TOBN(0x40a5c9cc, 0x70305600), TOBN(0x6d8260a9, 0xc8b013b4)}},
+     {{TOBN(0x0368304f, 0x70bba85c), TOBN(0xad090da1, 0xa4a0d311),
+       TOBN(0x7170e870, 0x2415eec1), TOBN(0xbfba35fe, 0x8461ea47)},
+      {TOBN(0x6279019a, 0xc1e91938), TOBN(0xa47638f3, 0x1afc415f),
+       TOBN(0x36c65cbb, 0xbcba0e0f), TOBN(0x02160efb, 0x034e2c48)}},
+     {{TOBN(0xe6c51073, 0x615cd9e4), TOBN(0x498ec047, 0xf1243c06),
+       TOBN(0x3e5a8809, 0xb17b3d8c), TOBN(0x5cd99e61, 0x0cc565f1)},
+      {TOBN(0x81e312df, 0x7851dafe), TOBN(0xf156f5ba, 0xa79061e2),
+       TOBN(0x80d62b71, 0x880c590e), TOBN(0xbec9746f, 0x0a39faa1)}},
+     {{TOBN(0x1d98a9c1, 0xc8ed1f7a), TOBN(0x09e43bb5, 0xa81d5ff2),
+       TOBN(0xd5f00f68, 0x0da0794a), TOBN(0x412050d9, 0x661aa836)},
+      {TOBN(0xa89f7c4e, 0x90747e40), TOBN(0x6dc05ebb, 0xb62a3686),
+       TOBN(0xdf4de847, 0x308e3353), TOBN(0x53868fbb, 0x9fb53bb9)}},
+     {{TOBN(0x2b09d2c3, 0xcfdcf7dd), TOBN(0x41a9fce3, 0x723fcab4),
+       TOBN(0x73d905f7, 0x07f57ca3), TOBN(0x080f9fb1, 0xac8e1555)},
+      {TOBN(0x7c088e84, 0x9ba7a531), TOBN(0x07d35586, 0xed9a147f),
+       TOBN(0x602846ab, 0xaf48c336), TOBN(0x7320fd32, 0x0ccf0e79)}},
+     {{TOBN(0xaa780798, 0xb18bd1ff), TOBN(0x52c2e300, 0xafdd2905),
+       TOBN(0xf27ea3d6, 0x434267cd), TOBN(0x8b96d16d, 0x15605b5f)},
+      {TOBN(0x7bb31049, 0x4b45706b), TOBN(0xe7f58b8e, 0x743d25f8),
+       TOBN(0xe9b5e45b, 0x87f30076), TOBN(0xd19448d6, 0x5d053d5a)}},
+     {{TOBN(0x1ecc8cb9, 0xd3210a04), TOBN(0x6bc7d463, 0xdafb5269),
+       TOBN(0x3e59b10a, 0x67c3489f), TOBN(0x1769788c, 0x65641e1b)},
+      {TOBN(0x8a53b82d, 0xbd6cb838), TOBN(0x7066d6e6, 0x236d5f22),
+       TOBN(0x03aa1c61, 0x6908536e), TOBN(0xc971da0d, 0x66ae9809)}},
+     {{TOBN(0x01b3a86b, 0xc49a2fac), TOBN(0x3b8420c0, 0x3092e77a),
+       TOBN(0x02057300, 0x7d6fb556), TOBN(0x6941b2a1, 0xbff40a87)},
+      {TOBN(0x140b6308, 0x0658ff2a), TOBN(0x87804363, 0x3424ab36),
+       TOBN(0x0253bd51, 0x5751e299), TOBN(0xc75bcd76, 0x449c3e3a)}},
+     {{TOBN(0x92eb4090, 0x7f8f875d), TOBN(0x9c9d754e, 0x56c26bbf),
+       TOBN(0x158cea61, 0x8110bbe7), TOBN(0x62a6b802, 0x745f91ea)},
+      {TOBN(0xa79c41aa, 0xc6e7394b), TOBN(0x445b6a83, 0xad57ef10),
+       TOBN(0x0c5277eb, 0x6ea6f40c), TOBN(0x319fe96b, 0x88633365)}},
+     {{TOBN(0x0b0fc61f, 0x385f63cb), TOBN(0x41250c84, 0x22bdd127),
+       TOBN(0x67d153f1, 0x09e942c2), TOBN(0x60920d08, 0xc021ad5d)},
+      {TOBN(0x229f5746, 0x724d81a5), TOBN(0xb7ffb892, 0x5bba3299),
+       TOBN(0x518c51a1, 0xde413032), TOBN(0x2a9bfe77, 0x3c2fd94c)}},
+     {{TOBN(0xcbcde239, 0x3191f4fd), TOBN(0x43093e16, 0xd3d6ada1),
+       TOBN(0x184579f3, 0x58769606), TOBN(0x2c94a8b3, 0xd236625c)},
+      {TOBN(0x6922b9c0, 0x5c437d8e), TOBN(0x3d4ae423, 0xd8d9f3c8),
+       TOBN(0xf72c31c1, 0x2e7090a2), TOBN(0x4ac3f5f3, 0xd76a55bd)}},
+     {{TOBN(0x342508fc, 0x6b6af991), TOBN(0x0d527100, 0x1b5cebbd),
+       TOBN(0xb84740d0, 0xdd440dd7), TOBN(0x748ef841, 0x780162fd)},
+      {TOBN(0xa8dbfe0e, 0xdfc6fafb), TOBN(0xeadfdf05, 0xf7300f27),
+       TOBN(0x7d06555f, 0xfeba4ec9), TOBN(0x12c56f83, 0x9e25fa97)}},
+     {{TOBN(0x77f84203, 0xd39b8c34), TOBN(0xed8b1be6, 0x3125eddb),
+       TOBN(0x5bbf2441, 0xf6e39dc5), TOBN(0xb00f6ee6, 0x6a5d678a)},
+      {TOBN(0xba456ecf, 0x57d0ea99), TOBN(0xdcae0f58, 0x17e06c43),
+       TOBN(0x01643de4, 0x0f5b4baa), TOBN(0x2c324341, 0xd161b9be)}},
+     {{TOBN(0x80177f55, 0xe126d468), TOBN(0xed325f1f, 0x76748e09),
+       TOBN(0x6116004a, 0xcfa9bdc2), TOBN(0x2d8607e6, 0x3a9fb468)},
+      {TOBN(0x0e573e27, 0x6009d660), TOBN(0x3a525d2e, 0x8d10c5a1),
+       TOBN(0xd26cb45c, 0x3b9009a0), TOBN(0xb6b0cdc0, 0xde9d7448)}},
+     {{TOBN(0x949c9976, 0xe1337c26), TOBN(0x6faadebd, 0xd73d68e5),
+       TOBN(0x9e158614, 0xf1b768d9), TOBN(0x22dfa557, 0x9cc4f069)},
+      {TOBN(0xccd6da17, 0xbe93c6d6), TOBN(0x24866c61, 0xa504f5b9),
+       TOBN(0x2121353c, 0x8d694da1), TOBN(0x1c6ca580, 0x0140b8c6)}},
+     {{TOBN(0xc245ad8c, 0xe964021e), TOBN(0xb83bffba, 0x032b82b3),
+       TOBN(0xfaa220c6, 0x47ef9898), TOBN(0x7e8d3ac6, 0x982c948a)},
+      {TOBN(0x1faa2091, 0xbc2d124a), TOBN(0xbd54c3dd, 0x05b15ff4),
+       TOBN(0x386bf3ab, 0xc87c6fb7), TOBN(0xfb2b0563, 0xfdeb6f66)}},
+     {{TOBN(0x4e77c557, 0x5b45afb4), TOBN(0xe9ded649, 0xefb8912d),
+       TOBN(0x7ec9bbf5, 0x42f6e557), TOBN(0x2570dfff, 0x62671f00)},
+      {TOBN(0x2b3bfb78, 0x88e084bd), TOBN(0xa024b238, 0xf37fe5b4),
+       TOBN(0x44e7dc04, 0x95649aee), TOBN(0x498ca255, 0x5e7ec1d8)}},
+     {{TOBN(0x3bc766ea, 0xaaa07e86), TOBN(0x0db6facb, 0xf3608586),
+       TOBN(0xbadd2549, 0xbdc259c8), TOBN(0x95af3c6e, 0x041c649f)},
+      {TOBN(0xb36a928c, 0x02e30afb), TOBN(0x9b5356ad, 0x008a88b8),
+       TOBN(0x4b67a5f1, 0xcf1d9e9d), TOBN(0xc6542e47, 0xa5d8d8ce)}},
+     {{TOBN(0x73061fe8, 0x7adfb6cc), TOBN(0xcc826fd3, 0x98678141),
+       TOBN(0x00e758b1, 0x3c80515a), TOBN(0x6afe3247, 0x41485083)},
+      {TOBN(0x0fcb08b9, 0xb6ae8a75), TOBN(0xb8cf388d, 0x4acf51e1),
+       TOBN(0x344a5560, 0x6961b9d6), TOBN(0x1a6778b8, 0x6a97fd0c)}},
+     {{TOBN(0xd840fdc1, 0xecc4c7e3), TOBN(0xde9fe47d, 0x16db68cc),
+       TOBN(0xe95f89de, 0xa3e216aa), TOBN(0x84f1a6a4, 0x9594a8be)},
+      {TOBN(0x7ddc7d72, 0x5a7b162b), TOBN(0xc5cfda19, 0xadc817a3),
+       TOBN(0x80a5d350, 0x78b58d46), TOBN(0x93365b13, 0x82978f19)}},
+     {{TOBN(0x2e44d225, 0x26a1fc90), TOBN(0x0d6d10d2, 0x4d70705d),
+       TOBN(0xd94b6b10, 0xd70c45f4), TOBN(0x0f201022, 0xb216c079)},
+      {TOBN(0xcec966c5, 0x658fde41), TOBN(0xa8d2bc7d, 0x7e27601d),
+       TOBN(0xbfcce3e1, 0xff230be7), TOBN(0x3394ff6b, 0x0033ffb5)}},
+     {{TOBN(0xd890c509, 0x8132c9af), TOBN(0xaac4b0eb, 0x361e7868),
+       TOBN(0x5194ded3, 0xe82d15aa), TOBN(0x4550bd2e, 0x23ae6b7d)},
+      {TOBN(0x3fda318e, 0xea5399d4), TOBN(0xd989bffa, 0x91638b80),
+       TOBN(0x5ea124d0, 0xa14aa12d), TOBN(0x1fb1b899, 0x3667b944)}},
+     {{TOBN(0x95ec7969, 0x44c44d6a), TOBN(0x91df144a, 0x57e86137),
+       TOBN(0x915fd620, 0x73adac44), TOBN(0x8f01732d, 0x59a83801)},
+      {TOBN(0xec579d25, 0x3aa0a633), TOBN(0x06de5e7c, 0xc9d6d59c),
+       TOBN(0xc132f958, 0xb1ef8010), TOBN(0x29476f96, 0xe65c1a02)}},
+     {{TOBN(0x336a77c0, 0xd34c3565), TOBN(0xef1105b2, 0x1b9f1e9e),
+       TOBN(0x63e6d08b, 0xf9e08002), TOBN(0x9aff2f21, 0xc613809e)},
+      {TOBN(0xb5754f85, 0x3a80e75d), TOBN(0xde71853e, 0x6bbda681),
+       TOBN(0x86f041df, 0x8197fd7a), TOBN(0x8b332e08, 0x127817fa)}},
+     {{TOBN(0x05d99be8, 0xb9c20cda), TOBN(0x89f7aad5, 0xd5cd0c98),
+       TOBN(0x7ef936fe, 0x5bb94183), TOBN(0x92ca0753, 0xb05cd7f2)},
+      {TOBN(0x9d65db11, 0x74a1e035), TOBN(0x02628cc8, 0x13eaea92),
+       TOBN(0xf2d9e242, 0x49e4fbf2), TOBN(0x94fdfd9b, 0xe384f8b7)}},
+     {{TOBN(0x65f56054, 0x63428c6b), TOBN(0x2f7205b2, 0x90b409a5),
+       TOBN(0xf778bb78, 0xff45ae11), TOBN(0xa13045be, 0xc5ee53b2)},
+      {TOBN(0xe00a14ff, 0x03ef77fe), TOBN(0x689cd59f, 0xffef8bef),
+       TOBN(0x3578f0ed, 0x1e9ade22), TOBN(0xe99f3ec0, 0x6268b6a8)}},
+     {{TOBN(0xa2057d91, 0xea1b3c3e), TOBN(0x2d1a7053, 0xb8823a4a),
+       TOBN(0xabbb336a, 0x2cca451e), TOBN(0xcd2466e3, 0x2218bb5d)},
+      {TOBN(0x3ac1f42f, 0xc8cb762d), TOBN(0x7e312aae, 0x7690211f),
+       TOBN(0xebb9bd73, 0x45d07450), TOBN(0x207c4b82, 0x46c2213f)}},
+     {{TOBN(0x99d425c1, 0x375913ec), TOBN(0x94e45e96, 0x67908220),
+       TOBN(0xc08f3087, 0xcd67dbf6), TOBN(0xa5670fbe, 0xc0887056)},
+      {TOBN(0x6717b64a, 0x66f5b8fc), TOBN(0xd5a56aea, 0x786fec28),
+       TOBN(0xa8c3f55f, 0xc0ff4952), TOBN(0xa77fefae, 0x457ac49b)}},
+     {{TOBN(0x29882d7c, 0x98379d44), TOBN(0xd000bdfb, 0x509edc8a),
+       TOBN(0xc6f95979, 0xe66fe464), TOBN(0x504a6115, 0xfa61bde0)},
+      {TOBN(0x56b3b871, 0xeffea31a), TOBN(0x2d3de26d, 0xf0c21a54),
+       TOBN(0x21dbff31, 0x834753bf), TOBN(0xe67ecf49, 0x69269d86)}},
+     {{TOBN(0x7a176952, 0x151fe690), TOBN(0x03515804, 0x7f2adb5f),
+       TOBN(0xee794b15, 0xd1b62a8d), TOBN(0xf004ceec, 0xaae454e6)},
+      {TOBN(0x0897ea7c, 0xf0386fac), TOBN(0x3b62ff12, 0xd1fca751),
+       TOBN(0x154181df, 0x1b7a04ec), TOBN(0x2008e04a, 0xfb5847ec)}},
+     {{TOBN(0xd147148e, 0x41dbd772), TOBN(0x2b419f73, 0x22942654),
+       TOBN(0x669f30d3, 0xe9c544f7), TOBN(0x52a2c223, 0xc8540149)},
+      {TOBN(0x5da9ee14, 0x634dfb02), TOBN(0x5f074ff0, 0xf47869f3),
+       TOBN(0x74ee878d, 0xa3933acc), TOBN(0xe6510651, 0x4fe35ed1)}},
+     {{TOBN(0xb3eb9482, 0xf1012e7a), TOBN(0x51013cc0, 0xa8a566ae),
+       TOBN(0xdd5e9243, 0x47c00d3b), TOBN(0x7fde089d, 0x946bb0e5)},
+      {TOBN(0x030754fe, 0xc731b4b3), TOBN(0x12a136a4, 0x99fda062),
+       TOBN(0x7c1064b8, 0x5a1a35bc), TOBN(0xbf1f5763, 0x446c84ef)}},
+     {{TOBN(0xed29a56d, 0xa16d4b34), TOBN(0x7fba9d09, 0xdca21c4f),
+       TOBN(0x66d7ac00, 0x6d8de486), TOBN(0x60061987, 0x73a2a5e1)},
+      {TOBN(0x8b400f86, 0x9da28ff0), TOBN(0x3133f708, 0x43c4599c),
+       TOBN(0x9911c9b8, 0xee28cb0d), TOBN(0xcd7e2874, 0x8e0af61d)}},
+     {{TOBN(0x5a85f0f2, 0x72ed91fc), TOBN(0x85214f31, 0x9cd4a373),
+       TOBN(0x881fe5be, 0x1925253c), TOBN(0xd8dc98e0, 0x91e8bc76)},
+      {TOBN(0x7120affe, 0x585cc3a2), TOBN(0x724952ed, 0x735bf97a),
+       TOBN(0x5581e7dc, 0x3eb34581), TOBN(0x5cbff4f2, 0xe52ee57d)}},
+     {{TOBN(0x8d320a0e, 0x87d8cc7b), TOBN(0x9beaa7f3, 0xf1d280d0),
+       TOBN(0x7a0b9571, 0x9beec704), TOBN(0x9126332e, 0x5b7f0057)},
+      {TOBN(0x01fbc1b4, 0x8ed3bd6d), TOBN(0x35bb2c12, 0xd945eb24),
+       TOBN(0x6404694e, 0x9a8ae255), TOBN(0xb6092eec, 0x8d6abfb3)}},
+     {{TOBN(0x4d76143f, 0xcc058865), TOBN(0x7b0a5af2, 0x6e249922),
+       TOBN(0x8aef9440, 0x6a50d353), TOBN(0xe11e4bcc, 0x64f0e07a)},
+      {TOBN(0x4472993a, 0xa14a90fa), TOBN(0x7706e20c, 0xba0c51d4),
+       TOBN(0xf403292f, 0x1532672d), TOBN(0x52573bfa, 0x21829382)}},
+     {{TOBN(0x6a7bb6a9, 0x3b5bdb83), TOBN(0x08da65c0, 0xa4a72318),
+       TOBN(0xc58d22aa, 0x63eb065f), TOBN(0x1717596c, 0x1b15d685)},
+      {TOBN(0x112df0d0, 0xb266d88b), TOBN(0xf688ae97, 0x5941945a),
+       TOBN(0x487386e3, 0x7c292cac), TOBN(0x42f3b50d, 0x57d6985c)}},
+     {{TOBN(0x6da4f998, 0x6a90fc34), TOBN(0xc8f257d3, 0x65ca8a8d),
+       TOBN(0xc2feabca, 0x6951f762), TOBN(0xe1bc81d0, 0x74c323ac)},
+      {TOBN(0x1bc68f67, 0x251a2a12), TOBN(0x10d86587, 0xbe8a70dc),
+       TOBN(0xd648af7f, 0xf0f84d2e), TOBN(0xf0aa9ebc, 0x6a43ac92)}},
+     {{TOBN(0x69e3be04, 0x27596893), TOBN(0xb6bb02a6, 0x45bf452b),
+       TOBN(0x0875c11a, 0xf4c698c8), TOBN(0x6652b5c7, 0xbece3794)},
+      {TOBN(0x7b3755fd, 0x4f5c0499), TOBN(0x6ea16558, 0xb5532b38),
+       TOBN(0xd1c69889, 0xa2e96ef7), TOBN(0x9c773c3a, 0x61ed8f48)}},
+     {{TOBN(0x2b653a40, 0x9b323abc), TOBN(0xe26605e1, 0xf0e1d791),
+       TOBN(0x45d41064, 0x4a87157a), TOBN(0x8f9a78b7, 0xcbbce616)},
+      {TOBN(0xcf1e44aa, 0xc407eddd), TOBN(0x81ddd1d8, 0xa35b964f),
+       TOBN(0x473e339e, 0xfd083999), TOBN(0x6c94bdde, 0x8e796802)}},
+     {{TOBN(0x5a304ada, 0x8545d185), TOBN(0x82ae44ea, 0x738bb8cb),
+       TOBN(0x628a35e3, 0xdf87e10e), TOBN(0xd3624f3d, 0xa15b9fe3)},
+      {TOBN(0xcc44209b, 0x14be4254), TOBN(0x7d0efcbc, 0xbdbc2ea5),
+       TOBN(0x1f603362, 0x04c37bbe), TOBN(0x21f363f5, 0x56a5852c)}},
+     {{TOBN(0xa1503d1c, 0xa8501550), TOBN(0x2251e0e1, 0xd8ab10bb),
+       TOBN(0xde129c96, 0x6961c51c), TOBN(0x1f7246a4, 0x81910f68)},
+      {TOBN(0x2eb744ee, 0x5f2591f2), TOBN(0x3c47d33f, 0x5e627157),
+       TOBN(0x4d6d62c9, 0x22f3bd68), TOBN(0x6120a64b, 0xcb8df856)}},
+     {{TOBN(0x3a9ac6c0, 0x7b5d07df), TOBN(0xa92b9558, 0x7ef39783),
+       TOBN(0xe128a134, 0xab3a9b4f), TOBN(0x41c18807, 0xb1252f05)},
+      {TOBN(0xfc7ed089, 0x80ba9b1c), TOBN(0xac8dc6de, 0xc532a9dd),
+       TOBN(0xbf829cef, 0x55246809), TOBN(0x101b784f, 0x5b4ee80f)}},
+     {{TOBN(0xc09945bb, 0xb6f11603), TOBN(0x57b09dbe, 0x41d2801e),
+       TOBN(0xfba5202f, 0xa97534a8), TOBN(0x7fd8ae5f, 0xc17b9614)},
+      {TOBN(0xa50ba666, 0x78308435), TOBN(0x9572f77c, 0xd3868c4d),
+       TOBN(0x0cef7bfd, 0x2dd7aab0), TOBN(0xe7958e08, 0x2c7c79ff)}},
+     {{TOBN(0x81262e42, 0x25346689), TOBN(0x716da290, 0xb07c7004),
+       TOBN(0x35f911ea, 0xb7950ee3), TOBN(0x6fd72969, 0x261d21b5)},
+      {TOBN(0x52389803, 0x08b640d3), TOBN(0x5b0026ee, 0x887f12a1),
+       TOBN(0x20e21660, 0x742e9311), TOBN(0x0ef6d541, 0x5ff77ff7)}},
+     {{TOBN(0x969127f0, 0xf9c41135), TOBN(0xf21d60c9, 0x68a64993),
+       TOBN(0x656e5d0c, 0xe541875c), TOBN(0xf1e0f84e, 0xa1d3c233)},
+      {TOBN(0x9bcca359, 0x06002d60), TOBN(0xbe2da60c, 0x06191552),
+       TOBN(0x5da8bbae, 0x61181ec3), TOBN(0x9f04b823, 0x65806f19)}},
+     {{TOBN(0xf1604a7d, 0xd4b79bb8), TOBN(0xaee806fb, 0x52c878c8),
+       TOBN(0x34144f11, 0x8d47b8e8), TOBN(0x72edf52b, 0x949f9054)},
+      {TOBN(0xebfca84e, 0x2127015a), TOBN(0x9051d0c0, 0x9cb7cef3),
+       TOBN(0x86e8fe58, 0x296deec8), TOBN(0x33b28188, 0x41010d74)}}},
+    {{{TOBN(0x01079383, 0x171b445f), TOBN(0x9bcf21e3, 0x8131ad4c),
+       TOBN(0x8cdfe205, 0xc93987e8), TOBN(0xe63f4152, 0xc92e8c8f)},
+      {TOBN(0x729462a9, 0x30add43d), TOBN(0x62ebb143, 0xc980f05a),
+       TOBN(0x4f3954e5, 0x3b06e968), TOBN(0xfe1d75ad, 0x242cf6b1)}},
+     {{TOBN(0x5f95c6c7, 0xaf8685c8), TOBN(0xd4c1c8ce, 0x2f8f01aa),
+       TOBN(0xc44bbe32, 0x2574692a), TOBN(0xb8003478, 0xd4a4a068)},
+      {TOBN(0x7c8fc6e5, 0x2eca3cdb), TOBN(0xea1db16b, 0xec04d399),
+       TOBN(0xb05bc82e, 0x8f2bc5cf), TOBN(0x763d517f, 0xf44793d2)}},
+     {{TOBN(0x4451c1b8, 0x08bd98d0), TOBN(0x644b1cd4, 0x6575f240),
+       TOBN(0x6907eb33, 0x7375d270), TOBN(0x56c8bebd, 0xfa2286bd)},
+      {TOBN(0xc713d2ac, 0xc4632b46), TOBN(0x17da427a, 0xafd60242),
+       TOBN(0x313065b7, 0xc95c7546), TOBN(0xf8239898, 0xbf17a3de)}},
+     {{TOBN(0xf3b7963f, 0x4c830320), TOBN(0x842c7aa0, 0x903203e3),
+       TOBN(0xaf22ca0a, 0xe7327afb), TOBN(0x38e13092, 0x967609b6)},
+      {TOBN(0x73b8fb62, 0x757558f1), TOBN(0x3cc3e831, 0xf7eca8c1),
+       TOBN(0xe4174474, 0xf6331627), TOBN(0xa77989ca, 0xc3c40234)}},
+     {{TOBN(0xe5fd17a1, 0x44a081e0), TOBN(0xd797fb7d, 0xb70e296a),
+       TOBN(0x2b472b30, 0x481f719c), TOBN(0x0e632a98, 0xfe6f8c52)},
+      {TOBN(0x89ccd116, 0xc5f0c284), TOBN(0xf51088af, 0x2d987c62),
+       TOBN(0x2a2bccda, 0x4c2de6cf), TOBN(0x810f9efe, 0xf679f0f9)}},
+     {{TOBN(0xb0f394b9, 0x7ffe4b3e), TOBN(0x0b691d21, 0xe5fa5d21),
+       TOBN(0xb0bd7747, 0x9dfbbc75), TOBN(0xd2830fda, 0xfaf78b00)},
+      {TOBN(0xf78c249c, 0x52434f57), TOBN(0x4b1f7545, 0x98096dab),
+       TOBN(0x73bf6f94, 0x8ff8c0b3), TOBN(0x34aef03d, 0x454e134c)}},
+     {{TOBN(0xf8d151f4, 0xb7ac7ec5), TOBN(0xd6ceb95a, 0xe50da7d5),
+       TOBN(0xa1b492b0, 0xdc3a0eb8), TOBN(0x75157b69, 0xb3dd2863)},
+      {TOBN(0xe2c4c74e, 0xc5413d62), TOBN(0xbe329ff7, 0xbc5fc4c7),
+       TOBN(0x835a2aea, 0x60fa9dda), TOBN(0xf117f5ad, 0x7445cb87)}},
+     {{TOBN(0xae8317f4, 0xb0166f7a), TOBN(0xfbd3e3f7, 0xceec74e6),
+       TOBN(0xfdb516ac, 0xe0874bfd), TOBN(0x3d846019, 0xc681f3a3)},
+      {TOBN(0x0b12ee5c, 0x7c1620b0), TOBN(0xba68b4dd, 0x2b63c501),
+       TOBN(0xac03cd32, 0x6668c51e), TOBN(0x2a6279f7, 0x4e0bcb5b)}},
+     {{TOBN(0x17bd69b0, 0x6ae85c10), TOBN(0x72946979, 0x1dfdd3a6),
+       TOBN(0xd9a03268, 0x2c078bec), TOBN(0x41c6a658, 0xbfd68a52)},
+      {TOBN(0xcdea1024, 0x0e023900), TOBN(0xbaeec121, 0xb10d144d),
+       TOBN(0x5a600e74, 0x058ab8dc), TOBN(0x1333af21, 0xbb89ccdd)}},
+     {{TOBN(0xdf25eae0, 0x3aaba1f1), TOBN(0x2cada16e, 0x3b7144cf),
+       TOBN(0x657ee27d, 0x71ab98bc), TOBN(0x99088b4c, 0x7a6fc96e)},
+      {TOBN(0x05d5c0a0, 0x3549dbd4), TOBN(0x42cbdf8f, 0xf158c3ac),
+       TOBN(0x3fb6b3b0, 0x87edd685), TOBN(0x22071cf6, 0x86f064d0)}},
+     {{TOBN(0xd2d6721f, 0xff2811e5), TOBN(0xdb81b703, 0xfe7fae8c),
+       TOBN(0x3cfb74ef, 0xd3f1f7bb), TOBN(0x0cdbcd76, 0x16cdeb5d)},
+      {TOBN(0x4f39642a, 0x566a808c), TOBN(0x02b74454, 0x340064d6),
+       TOBN(0xfabbadca, 0x0528fa6f), TOBN(0xe4c3074c, 0xd3fc0bb6)}},
+     {{TOBN(0xb32cb8b0, 0xb796d219), TOBN(0xc3e95f4f, 0x34741dd9),
+       TOBN(0x87212125, 0x68edf6f5), TOBN(0x7a03aee4, 0xa2b9cb8e)},
+      {TOBN(0x0cd3c376, 0xf53a89aa), TOBN(0x0d8af9b1, 0x948a28dc),
+       TOBN(0xcf86a3f4, 0x902ab04f), TOBN(0x8aacb62a, 0x7f42002d)}},
+     {{TOBN(0x106985eb, 0xf62ffd52), TOBN(0xe670b54e, 0x5797bf10),
+       TOBN(0x4b405209, 0xc5e30aef), TOBN(0x12c97a20, 0x4365b5e9)},
+      {TOBN(0x104646ce, 0x1fe32093), TOBN(0x13cb4ff6, 0x3907a8c9),
+       TOBN(0x8b9f30d1, 0xd46e726b), TOBN(0xe1985e21, 0xaba0f499)}},
+     {{TOBN(0xc573dea9, 0x10a230cd), TOBN(0x24f46a93, 0xcd30f947),
+       TOBN(0xf2623fcf, 0xabe2010a), TOBN(0x3f278cb2, 0x73f00e4f)},
+      {TOBN(0xed55c67d, 0x50b920eb), TOBN(0xf1cb9a2d, 0x8e760571),
+       TOBN(0x7c50d109, 0x0895b709), TOBN(0x4207cf07, 0x190d4369)}},
+     {{TOBN(0x3b027e81, 0xc4127fe1), TOBN(0xa9f8b9ad, 0x3ae9c566),
+       TOBN(0x5ab10851, 0xacbfbba5), TOBN(0xa747d648, 0x569556f5)},
+      {TOBN(0xcc172b5c, 0x2ba97bf7), TOBN(0x15e0f77d, 0xbcfa3324),
+       TOBN(0xa345b797, 0x7686279d), TOBN(0x5a723480, 0xe38003d3)}},
+     {{TOBN(0xfd8e139f, 0x8f5fcda8), TOBN(0xf3e558c4, 0xbdee5bfd),
+       TOBN(0xd76cbaf4, 0xe33f9f77), TOBN(0x3a4c97a4, 0x71771969)},
+      {TOBN(0xda27e84b, 0xf6dce6a7), TOBN(0xff373d96, 0x13e6c2d1),
+       TOBN(0xf115193c, 0xd759a6e9), TOBN(0x3f9b7025, 0x63d2262c)}},
+     {{TOBN(0xd9764a31, 0x317cd062), TOBN(0x30779d8e, 0x199f8332),
+       TOBN(0xd8074106, 0x16b11b0b), TOBN(0x7917ab9f, 0x78aeaed8)},
+      {TOBN(0xb67a9cbe, 0x28fb1d8e), TOBN(0x2e313563, 0x136eda33),
+       TOBN(0x010b7069, 0xa371a86c), TOBN(0x44d90fa2, 0x6744e6b7)}},
+     {{TOBN(0x68190867, 0xd6b3e243), TOBN(0x9fe6cd9d, 0x59048c48),
+       TOBN(0xb900b028, 0x95731538), TOBN(0xa012062f, 0x32cae04f)},
+      {TOBN(0x8107c8bc, 0x9399d082), TOBN(0x47e8c54a, 0x41df12e2),
+       TOBN(0x14ba5117, 0xb6ef3f73), TOBN(0x22260bea, 0x81362f0b)}},
+     {{TOBN(0x90ea261e, 0x1a18cc20), TOBN(0x2192999f, 0x2321d636),
+       TOBN(0xef64d314, 0xe311b6a0), TOBN(0xd7401e4c, 0x3b54a1f5)},
+      {TOBN(0x19019983, 0x6fbca2ba), TOBN(0x46ad3293, 0x8fbffc4b),
+       TOBN(0xa142d3f6, 0x3786bf40), TOBN(0xeb5cbc26, 0xb67039fc)}},
+     {{TOBN(0x9cb0ae6c, 0x252bd479), TOBN(0x05e0f88a, 0x12b5848f),
+       TOBN(0x78f6d2b2, 0xa5c97663), TOBN(0x6f6e149b, 0xc162225c)},
+      {TOBN(0xe602235c, 0xde601a89), TOBN(0xd17bbe98, 0xf373be1f),
+       TOBN(0xcaf49a5b, 0xa8471827), TOBN(0x7e1a0a85, 0x18aaa116)}},
+     {{TOBN(0x6c833196, 0x270580c3), TOBN(0x1e233839, 0xf1c98a14),
+       TOBN(0x67b2f7b4, 0xae34e0a5), TOBN(0x47ac8745, 0xd8ce7289)},
+      {TOBN(0x2b74779a, 0x100dd467), TOBN(0x274a4337, 0x4ee50d09),
+       TOBN(0x603dcf13, 0x83608bc9), TOBN(0xcd9da6c3, 0xc89e8388)}},
+     {{TOBN(0x2660199f, 0x355116ac), TOBN(0xcc38bb59, 0xb6d18eed),
+       TOBN(0x3075f31f, 0x2f4bc071), TOBN(0x9774457f, 0x265dc57e)},
+      {TOBN(0x06a6a9c8, 0xc6db88bb), TOBN(0x6429d07f, 0x4ec98e04),
+       TOBN(0x8d05e57b, 0x05ecaa8b), TOBN(0x20f140b1, 0x7872ea7b)}},
+     {{TOBN(0xdf8c0f09, 0xca494693), TOBN(0x48d3a020, 0xf252e909),
+       TOBN(0x4c5c29af, 0x57b14b12), TOBN(0x7e6fa37d, 0xbf47ad1c)},
+      {TOBN(0x66e7b506, 0x49a0c938), TOBN(0xb72c0d48, 0x6be5f41f),
+       TOBN(0x6a6242b8, 0xb2359412), TOBN(0xcd35c774, 0x8e859480)}},
+     {{TOBN(0x12536fea, 0x87baa627), TOBN(0x58c1fec1, 0xf72aa680),
+       TOBN(0x6c29b637, 0x601e5dc9), TOBN(0x9e3c3c1c, 0xde9e01b9)},
+      {TOBN(0xefc8127b, 0x2bcfe0b0), TOBN(0x35107102, 0x2a12f50d),
+       TOBN(0x6ccd6cb1, 0x4879b397), TOBN(0xf792f804, 0xf8a82f21)}},
+     {{TOBN(0x509d4804, 0xa9b46402), TOBN(0xedddf85d, 0xc10f0850),
+       TOBN(0x928410dc, 0x4b6208aa), TOBN(0xf6229c46, 0x391012dc)},
+      {TOBN(0xc5a7c41e, 0x7727b9b6), TOBN(0x289e4e4b, 0xaa444842),
+       TOBN(0x049ba1d9, 0xe9a947ea), TOBN(0x44f9e47f, 0x83c8debc)}},
+     {{TOBN(0xfa77a1fe, 0x611f8b8e), TOBN(0xfd2e416a, 0xf518f427),
+       TOBN(0xc5fffa70, 0x114ebac3), TOBN(0xfe57c4e9, 0x5d89697b)},
+      {TOBN(0xfdd053ac, 0xb1aaf613), TOBN(0x31df210f, 0xea585a45),
+       TOBN(0x318cc10e, 0x24985034), TOBN(0x1a38efd1, 0x5f1d6130)}},
+     {{TOBN(0xbf86f237, 0x0b1e9e21), TOBN(0xb258514d, 0x1dbe88aa),
+       TOBN(0x1e38a588, 0x90c1baf9), TOBN(0x2936a01e, 0xbdb9b692)},
+      {TOBN(0xd576de98, 0x6dd5b20c), TOBN(0xb586bf71, 0x70f98ecf),
+       TOBN(0xcccf0f12, 0xc42d2fd7), TOBN(0x8717e61c, 0xfb35bd7b)}},
+     {{TOBN(0x8b1e5722, 0x35e6fc06), TOBN(0x3477728f, 0x0b3e13d5),
+       TOBN(0x150c294d, 0xaa8a7372), TOBN(0xc0291d43, 0x3bfa528a)},
+      {TOBN(0xc6c8bc67, 0xcec5a196), TOBN(0xdeeb31e4, 0x5c2e8a7c),
+       TOBN(0xba93e244, 0xfb6e1c51), TOBN(0xb9f8b71b, 0x2e28e156)}},
+     {{TOBN(0xce65a287, 0x968a2ab9), TOBN(0xe3c5ce69, 0x46bbcb1f),
+       TOBN(0xf8c835b9, 0xe7ae3f30), TOBN(0x16bbee26, 0xff72b82b)},
+      {TOBN(0x665e2017, 0xfd42cd22), TOBN(0x1e139970, 0xf8b1d2a0),
+       TOBN(0x125cda29, 0x79204932), TOBN(0x7aee94a5, 0x49c3bee5)}},
+     {{TOBN(0x68c70160, 0x89821a66), TOBN(0xf7c37678, 0x8f981669),
+       TOBN(0xd90829fc, 0x48cc3645), TOBN(0x346af049, 0xd70addfc)},
+      {TOBN(0x2057b232, 0x370bf29c), TOBN(0xf90c73ce, 0x42e650ee),
+       TOBN(0xe03386ea, 0xa126ab90), TOBN(0x0e266e7e, 0x975a087b)}},
+     {{TOBN(0x80578eb9, 0x0fca65d9), TOBN(0x7e2989ea, 0x16af45b8),
+       TOBN(0x7438212d, 0xcac75a4e), TOBN(0x38c7ca39, 0x4fef36b8)},
+      {TOBN(0x8650c494, 0xd402676a), TOBN(0x26ab5a66, 0xf72c7c48),
+       TOBN(0x4e6cb426, 0xce3a464e), TOBN(0xf8f99896, 0x2b72f841)}},
+     {{TOBN(0x8c318491, 0x1a335cc8), TOBN(0x563459ba, 0x6a5913e4),
+       TOBN(0x1b920d61, 0xc7b32919), TOBN(0x805ab8b6, 0xa02425ad)},
+      {TOBN(0x2ac512da, 0x8d006086), TOBN(0x6ca4846a, 0xbcf5c0fd),
+       TOBN(0xafea51d8, 0xac2138d7), TOBN(0xcb647545, 0x344cd443)}},
+     {{TOBN(0x0429ee8f, 0xbd7d9040), TOBN(0xee66a2de, 0x819b9c96),
+       TOBN(0x54f9ec25, 0xdea7d744), TOBN(0x2ffea642, 0x671721bb)},
+      {TOBN(0x4f19dbd1, 0x114344ea), TOBN(0x04304536, 0xfd0dbc8b),
+       TOBN(0x014b50aa, 0x29ec7f91), TOBN(0xb5fc22fe, 0xbb06014d)}},
+     {{TOBN(0x60d963a9, 0x1ee682e0), TOBN(0xdf48abc0, 0xfe85c727),
+       TOBN(0x0cadba13, 0x2e707c2d), TOBN(0xde608d3a, 0xa645aeff)},
+      {TOBN(0x05f1c28b, 0xedafd883), TOBN(0x3c362ede, 0xbd94de1f),
+       TOBN(0x8dd0629d, 0x13593e41), TOBN(0x0a5e736f, 0x766d6eaf)}},
+     {{TOBN(0xbfa92311, 0xf68cf9d1), TOBN(0xa4f9ef87, 0xc1797556),
+       TOBN(0x10d75a1f, 0x5601c209), TOBN(0x651c374c, 0x09b07361)},
+      {TOBN(0x49950b58, 0x88b5cead), TOBN(0x0ef00058, 0x6fa9dbaa),
+       TOBN(0xf51ddc26, 0x4e15f33a), TOBN(0x1f8b5ca6, 0x2ef46140)}},
+     {{TOBN(0x343ac0a3, 0xee9523f0), TOBN(0xbb75eab2, 0x975ea978),
+       TOBN(0x1bccf332, 0x107387f4), TOBN(0x790f9259, 0x9ab0062e)},
+      {TOBN(0xf1a363ad, 0x1e4f6a5f), TOBN(0x06e08b84, 0x62519a50),
+       TOBN(0x60915187, 0x7265f1ee), TOBN(0x6a80ca34, 0x93ae985e)}},
+     {{TOBN(0x81b29768, 0xaaba4864), TOBN(0xb13cabf2, 0x8d52a7d6),
+       TOBN(0xb5c36348, 0x8ead03f1), TOBN(0xc932ad95, 0x81c7c1c0)},
+      {TOBN(0x5452708e, 0xcae1e27b), TOBN(0x9dac4269, 0x1b0df648),
+       TOBN(0x233e3f0c, 0xdfcdb8bc), TOBN(0xe6ceccdf, 0xec540174)}},
+     {{TOBN(0xbd0d845e, 0x95081181), TOBN(0xcc8a7920, 0x699355d5),
+       TOBN(0x111c0f6d, 0xc3b375a8), TOBN(0xfd95bc6b, 0xfd51e0dc)},
+      {TOBN(0x4a106a26, 0x6888523a), TOBN(0x4d142bd6, 0xcb01a06d),
+       TOBN(0x79bfd289, 0xadb9b397), TOBN(0x0bdbfb94, 0xe9863914)}},
+     {{TOBN(0x29d8a229, 0x1660f6a6), TOBN(0x7f6abcd6, 0x551c042d),
+       TOBN(0x13039deb, 0x0ac3ffe8), TOBN(0xa01be628, 0xec8523fb)},
+      {TOBN(0x6ea34103, 0x0ca1c328), TOBN(0xc74114bd, 0xb903928e),
+       TOBN(0x8aa4ff4e, 0x9e9144b0), TOBN(0x7064091f, 0x7f9a4b17)}},
+     {{TOBN(0xa3f4f521, 0xe447f2c4), TOBN(0x81b8da7a, 0x604291f0),
+       TOBN(0xd680bc46, 0x7d5926de), TOBN(0x84f21fd5, 0x34a1202f)},
+      {TOBN(0x1d1e3181, 0x4e9df3d8), TOBN(0x1ca4861a, 0x39ab8d34),
+       TOBN(0x809ddeec, 0x5b19aa4a), TOBN(0x59f72f7e, 0x4d329366)}},
+     {{TOBN(0xa2f93f41, 0x386d5087), TOBN(0x40bf739c, 0xdd67d64f),
+       TOBN(0xb4494205, 0x66702158), TOBN(0xc33c65be, 0x73b1e178)},
+      {TOBN(0xcdcd657c, 0x38ca6153), TOBN(0x97f4519a, 0xdc791976),
+       TOBN(0xcc7c7f29, 0xcd6e1f39), TOBN(0x38de9cfb, 0x7e3c3932)}},
+     {{TOBN(0xe448eba3, 0x7b793f85), TOBN(0xe9f8dbf9, 0xf067e914),
+       TOBN(0xc0390266, 0xf114ae87), TOBN(0x39ed75a7, 0xcd6a8e2a)},
+      {TOBN(0xadb14848, 0x7ffba390), TOBN(0x67f8cb8b, 0x6af9bc09),
+       TOBN(0x322c3848, 0x9c7476db), TOBN(0xa320fecf, 0x52a538d6)}},
+     {{TOBN(0xe0493002, 0xb2aced2b), TOBN(0xdfba1809, 0x616bd430),
+       TOBN(0x531c4644, 0xc331be70), TOBN(0xbc04d32e, 0x90d2e450)},
+      {TOBN(0x1805a0d1, 0x0f9f142d), TOBN(0x2c44a0c5, 0x47ee5a23),
+       TOBN(0x31875a43, 0x3989b4e3), TOBN(0x6b1949fd, 0x0c063481)}},
+     {{TOBN(0x2dfb9e08, 0xbe0f4492), TOBN(0x3ff0da03, 0xe9d5e517),
+       TOBN(0x03dbe9a1, 0xf79466a8), TOBN(0x0b87bcd0, 0x15ea9932)},
+      {TOBN(0xeb64fc83, 0xab1f58ab), TOBN(0x6d9598da, 0x817edc8a),
+       TOBN(0x699cff66, 0x1d3b67e5), TOBN(0x645c0f29, 0x92635853)}},
+     {{TOBN(0x253cdd82, 0xeabaf21c), TOBN(0x82b9602a, 0x2241659e),
+       TOBN(0x2cae07ec, 0x2d9f7091), TOBN(0xbe4c720c, 0x8b48cd9b)},
+      {TOBN(0x6ce5bc03, 0x6f08d6c9), TOBN(0x36e8a997, 0xaf10bf40),
+       TOBN(0x83422d21, 0x3e10ff12), TOBN(0x7b26d3eb, 0xbcc12494)}},
+     {{TOBN(0xb240d2d0, 0xc9469ad6), TOBN(0xc4a11b4d, 0x30afa05b),
+       TOBN(0x4b604ace, 0xdd6ba286), TOBN(0x18486600, 0x3ee2864c)},
+      {TOBN(0x5869d6ba, 0x8d9ce5be), TOBN(0x0d8f68c5, 0xff4bfb0d),
+       TOBN(0xb69f210b, 0x5700cf73), TOBN(0x61f6653a, 0x6d37c135)}},
+     {{TOBN(0xff3d432b, 0x5aff5a48), TOBN(0x0d81c4b9, 0x72ba3a69),
+       TOBN(0xee879ae9, 0xfa1899ef), TOBN(0xbac7e2a0, 0x2d6acafd)},
+      {TOBN(0xd6d93f6c, 0x1c664399), TOBN(0x4c288de1, 0x5bcb135d),
+       TOBN(0x83031dab, 0x9dab7cbf), TOBN(0xfe23feb0, 0x3abbf5f0)}},
+     {{TOBN(0x9f1b2466, 0xcdedca85), TOBN(0x140bb710, 0x1a09538c),
+       TOBN(0xac8ae851, 0x5e11115d), TOBN(0x0d63ff67, 0x6f03f59e)},
+      {TOBN(0x755e5551, 0x7d234afb), TOBN(0x61c2db4e, 0x7e208fc1),
+       TOBN(0xaa9859ce, 0xf28a4b5d), TOBN(0xbdd6d4fc, 0x34af030f)}},
+     {{TOBN(0xd1c4a26d, 0x3be01cb1), TOBN(0x9ba14ffc, 0x243aa07c),
+       TOBN(0xf95cd3a9, 0xb2503502), TOBN(0xe379bc06, 0x7d2a93ab)},
+      {TOBN(0x3efc18e9, 0xd4ca8d68), TOBN(0x083558ec, 0x80bb412a),
+       TOBN(0xd903b940, 0x9645a968), TOBN(0xa499f0b6, 0x9ba6054f)}},
+     {{TOBN(0x208b573c, 0xb8349abe), TOBN(0x3baab3e5, 0x30b4fc1c),
+       TOBN(0x87e978ba, 0xcb524990), TOBN(0x3524194e, 0xccdf0e80)},
+      {TOBN(0x62711725, 0x7d4bcc42), TOBN(0xe90a3d9b, 0xb90109ba),
+       TOBN(0x3b1bdd57, 0x1323e1e0), TOBN(0xb78e9bd5, 0x5eae1599)}},
+     {{TOBN(0x0794b746, 0x9e03d278), TOBN(0x80178605, 0xd70e6297),
+       TOBN(0x171792f8, 0x99c97855), TOBN(0x11b393ee, 0xf5a86b5c)},
+      {TOBN(0x48ef6582, 0xd8884f27), TOBN(0xbd44737a, 0xbf19ba5f),
+       TOBN(0x8698de4c, 0xa42062c6), TOBN(0x8975eb80, 0x61ce9c54)}},
+     {{TOBN(0xd50e57c7, 0xd7fe71f3), TOBN(0x15342190, 0xbc97ce38),
+       TOBN(0x51bda2de, 0x4df07b63), TOBN(0xba12aeae, 0x200eb87d)},
+      {TOBN(0xabe135d2, 0xa9b4f8f6), TOBN(0x04619d65, 0xfad6d99c),
+       TOBN(0x4a6683a7, 0x7994937c), TOBN(0x7a778c8b, 0x6f94f09a)}},
+     {{TOBN(0x8c508623, 0x20a71b89), TOBN(0x241a2aed, 0x1c229165),
+       TOBN(0x352be595, 0xaaf83a99), TOBN(0x9fbfee7f, 0x1562bac8)},
+      {TOBN(0xeaf658b9, 0x5c4017e3), TOBN(0x1dc7f9e0, 0x15120b86),
+       TOBN(0xd84f13dd, 0x4c034d6f), TOBN(0x283dd737, 0xeaea3038)}},
+     {{TOBN(0x197f2609, 0xcd85d6a2), TOBN(0x6ebbc345, 0xfae60177),
+       TOBN(0xb80f031b, 0x4e12fede), TOBN(0xde55d0c2, 0x07a2186b)},
+      {TOBN(0x1fb3e37f, 0x24dcdd5a), TOBN(0x8d602da5, 0x7ed191fb),
+       TOBN(0x108fb056, 0x76023e0d), TOBN(0x70178c71, 0x459c20c0)}},
+     {{TOBN(0xfad5a386, 0x3fe54cf0), TOBN(0xa4a3ec4f, 0x02bbb475),
+       TOBN(0x1aa5ec20, 0x919d94d7), TOBN(0x5d3b63b5, 0xa81e4ab3)},
+      {TOBN(0x7fa733d8, 0x5ad3d2af), TOBN(0xfbc586dd, 0xd1ac7a37),
+       TOBN(0x282925de, 0x40779614), TOBN(0xfe0ffffb, 0xe74a242a)}},
+     {{TOBN(0x3f39e67f, 0x906151e5), TOBN(0xcea27f5f, 0x55e10649),
+       TOBN(0xdca1d4e1, 0xc17cf7b7), TOBN(0x0c326d12, 0x2fe2362d)},
+      {TOBN(0x05f7ac33, 0x7dd35df3), TOBN(0x0c3b7639, 0xc396dbdf),
+       TOBN(0x0912f5ac, 0x03b7db1c), TOBN(0x9dea4b70, 0x5c9ed4a9)}},
+     {{TOBN(0x475e6e53, 0xaae3f639), TOBN(0xfaba0e7c, 0xfc278bac),
+       TOBN(0x16f9e221, 0x9490375f), TOBN(0xaebf9746, 0xa5a7ed0a)},
+      {TOBN(0x45f9af3f, 0xf41ad5d6), TOBN(0x03c4623c, 0xb2e99224),
+       TOBN(0x82c5bb5c, 0xb3cf56aa), TOBN(0x64311819, 0x34567ed3)}},
+     {{TOBN(0xec57f211, 0x8be489ac), TOBN(0x2821895d, 0xb9a1104b),
+       TOBN(0x610dc875, 0x6064e007), TOBN(0x8e526f3f, 0x5b20d0fe)},
+      {TOBN(0x6e71ca77, 0x5b645aee), TOBN(0x3d1dcb9f, 0x800e10ff),
+       TOBN(0x36b51162, 0x189cf6de), TOBN(0x2c5a3e30, 0x6bb17353)}},
+     {{TOBN(0xc186cd3e, 0x2a6c6fbf), TOBN(0xa74516fa, 0x4bf97906),
+       TOBN(0x5b4b8f4b, 0x279d6901), TOBN(0x0c4e57b4, 0x2b573743)},
+      {TOBN(0x75fdb229, 0xb6e386b6), TOBN(0xb46793fd, 0x99deac27),
+       TOBN(0xeeec47ea, 0xcf712629), TOBN(0xe965f3c4, 0xcbc3b2dd)}},
+     {{TOBN(0x8dd1fb83, 0x425c6559), TOBN(0x7fc00ee6, 0x0af06fda),
+       TOBN(0xe98c9225, 0x33d956df), TOBN(0x0f1ef335, 0x4fbdc8a2)},
+      {TOBN(0x2abb5145, 0xb79b8ea2), TOBN(0x40fd2945, 0xbdbff288),
+       TOBN(0x6a814ac4, 0xd7185db7), TOBN(0xc4329d6f, 0xc084609a)}},
+     {{TOBN(0xc9ba7b52, 0xed1be45d), TOBN(0x891dd20d, 0xe4cd2c74),
+       TOBN(0x5a4d4a7f, 0x824139b1), TOBN(0x66c17716, 0xb873c710)},
+      {TOBN(0x5e5bc141, 0x2843c4e0), TOBN(0xd5ac4817, 0xb97eb5bf),
+       TOBN(0xc0f8af54, 0x450c95c7), TOBN(0xc91b3fa0, 0x318406c5)}},
+     {{TOBN(0x360c340a, 0xab9d97f8), TOBN(0xfb57bd07, 0x90a2d611),
+       TOBN(0x4339ae3c, 0xa6a6f7e5), TOBN(0x9c1fcd2a, 0x2feb8a10)},
+      {TOBN(0x972bcca9, 0xc7ea7432), TOBN(0x1b0b924c, 0x308076f6),
+       TOBN(0x80b2814a, 0x2a5b4ca5), TOBN(0x2f78f55b, 0x61ef3b29)}},
+     {{TOBN(0xf838744a, 0xc18a414f), TOBN(0xc611eaae, 0x903d0a86),
+       TOBN(0x94dabc16, 0x2a453f55), TOBN(0xe6f2e3da, 0x14efb279)},
+      {TOBN(0x5b7a6017, 0x9320dc3c), TOBN(0x692e382f, 0x8df6b5a4),
+       TOBN(0x3f5e15e0, 0x2d40fa90), TOBN(0xc87883ae, 0x643dd318)}},
+     {{TOBN(0x511053e4, 0x53544774), TOBN(0x834d0ecc, 0x3adba2bc),
+       TOBN(0x4215d7f7, 0xbae371f5), TOBN(0xfcfd57bf, 0x6c8663bc)},
+      {TOBN(0xded2383d, 0xd6901b1d), TOBN(0x3b49fbb4, 0xb5587dc3),
+       TOBN(0xfd44a08d, 0x07625f62), TOBN(0x3ee4d65b, 0x9de9b762)}}},
+    {{{TOBN(0x64e5137d, 0x0d63d1fa), TOBN(0x658fc052, 0x02a9d89f),
+       TOBN(0x48894874, 0x50436309), TOBN(0xe9ae30f8, 0xd598da61)},
+      {TOBN(0x2ed710d1, 0x818baf91), TOBN(0xe27e9e06, 0x8b6a0c20),
+       TOBN(0x1e28dcfb, 0x1c1a6b44), TOBN(0x883acb64, 0xd6ac57dc)}},
+     {{TOBN(0x8735728d, 0xc2c6ff70), TOBN(0x79d6122f, 0xc5dc2235),
+       TOBN(0x23f5d003, 0x19e277f9), TOBN(0x7ee84e25, 0xdded8cc7)},
+      {TOBN(0x91a8afb0, 0x63cd880a), TOBN(0x3f3ea7c6, 0x3574af60),
+       TOBN(0x0cfcdc84, 0x02de7f42), TOBN(0x62d0792f, 0xb31aa152)}},
+     {{TOBN(0x8e1b4e43, 0x8a5807ce), TOBN(0xad283893, 0xe4109a7e),
+       TOBN(0xc30cc9cb, 0xafd59dda), TOBN(0xf65f36c6, 0x3d8d8093)},
+      {TOBN(0xdf31469e, 0xa60d32b2), TOBN(0xee93df4b, 0x3e8191c8),
+       TOBN(0x9c1017c5, 0x355bdeb5), TOBN(0xd2623185, 0x8616aa28)}},
+     {{TOBN(0xb02c83f9, 0xdec31a21), TOBN(0x988c8b23, 0x6ad9d573),
+       TOBN(0x53e983ae, 0xa57be365), TOBN(0xe968734d, 0x646f834e)},
+      {TOBN(0x9137ea8f, 0x5da6309b), TOBN(0x10f3a624, 0xc1f1ce16),
+       TOBN(0x782a9ea2, 0xca440921), TOBN(0xdf94739e, 0x5b46f1b5)}},
+     {{TOBN(0x9f9be006, 0xcce85c9b), TOBN(0x360e70d6, 0xa4c7c2d3),
+       TOBN(0x2cd5beea, 0xaefa1e60), TOBN(0x64cf63c0, 0x8c3d2b6d)},
+      {TOBN(0xfb107fa3, 0xe1cf6f90), TOBN(0xb7e937c6, 0xd5e044e6),
+       TOBN(0x74e8ca78, 0xce34db9f), TOBN(0x4f8b36c1, 0x3e210bd0)}},
+     {{TOBN(0x1df165a4, 0x34a35ea8), TOBN(0x3418e0f7, 0x4d4412f6),
+       TOBN(0x5af1f8af, 0x518836c3), TOBN(0x42ceef4d, 0x130e1965)},
+      {TOBN(0x5560ca0b, 0x543a1957), TOBN(0xc33761e5, 0x886cb123),
+       TOBN(0x66624b1f, 0xfe98ed30), TOBN(0xf772f4bf, 0x1090997d)}},
+     {{TOBN(0xf4e540bb, 0x4885d410), TOBN(0x7287f810, 0x9ba5f8d7),
+       TOBN(0x22d0d865, 0xde98dfb1), TOBN(0x49ff51a1, 0xbcfbb8a3)},
+      {TOBN(0xb6b6fa53, 0x6bc3012e), TOBN(0x3d31fd72, 0x170d541d),
+       TOBN(0x8018724f, 0x4b0f4966), TOBN(0x79e7399f, 0x87dbde07)}},
+     {{TOBN(0x56f8410e, 0xf4f8b16a), TOBN(0x97241afe, 0xc47b266a),
+       TOBN(0x0a406b8e, 0x6d9c87c1), TOBN(0x803f3e02, 0xcd42ab1b)},
+      {TOBN(0x7f0309a8, 0x04dbec69), TOBN(0xa83b85f7, 0x3bbad05f),
+       TOBN(0xc6097273, 0xad8e197f), TOBN(0xc097440e, 0x5067adc1)}},
+     {{TOBN(0x730eafb6, 0x3524ff16), TOBN(0xd7f9b51e, 0x823fc6ce),
+       TOBN(0x27bd0d32, 0x443e4ac0), TOBN(0x40c59ad9, 0x4d66f217)},
+      {TOBN(0x6c33136f, 0x17c387a4), TOBN(0x5043b8d5, 0xeb86804d),
+       TOBN(0x74970312, 0x675a73c9), TOBN(0x838fdb31, 0xf16669b6)}},
+     {{TOBN(0xc507b6dd, 0x418e7ddd), TOBN(0x39888d93, 0x472f19d6),
+       TOBN(0x7eae26be, 0x0c27eb4d), TOBN(0x17b53ed3, 0xfbabb884)},
+      {TOBN(0xfc27021b, 0x2b01ae4f), TOBN(0x88462e87, 0xcf488682),
+       TOBN(0xbee096ec, 0x215e2d87), TOBN(0xeb2fea9a, 0xd242e29b)}},
+     {{TOBN(0x5d985b5f, 0xb821fc28), TOBN(0x89d2e197, 0xdc1e2ad2),
+       TOBN(0x55b566b8, 0x9030ba62), TOBN(0xe3fd41b5, 0x4f41b1c6)},
+      {TOBN(0xb738ac2e, 0xb9a96d61), TOBN(0x7f8567ca, 0x369443f4),
+       TOBN(0x8698622d, 0xf803a440), TOBN(0x2b586236, 0x8fe2f4dc)}},
+     {{TOBN(0xbbcc00c7, 0x56b95bce), TOBN(0x5ec03906, 0x616da680),
+       TOBN(0x79162ee6, 0x72214252), TOBN(0x43132b63, 0x86a892d2)},
+      {TOBN(0x4bdd3ff2, 0x2f3263bf), TOBN(0xd5b3733c, 0x9cd0a142),
+       TOBN(0x592eaa82, 0x44415ccb), TOBN(0x663e8924, 0x8d5474ea)}},
+     {{TOBN(0x8058a25e, 0x5236344e), TOBN(0x82e8df9d, 0xbda76ee6),
+       TOBN(0xdcf6efd8, 0x11cc3d22), TOBN(0x00089cda, 0x3b4ab529)},
+      {TOBN(0x91d3a071, 0xbd38a3db), TOBN(0x4ea97fc0, 0xef72b925),
+       TOBN(0x0c9fc15b, 0xea3edf75), TOBN(0x5a6297cd, 0xa4348ed3)}},
+     {{TOBN(0x0d38ab35, 0xce7c42d4), TOBN(0x9fd493ef, 0x82feab10),
+       TOBN(0x46056b6d, 0x82111b45), TOBN(0xda11dae1, 0x73efc5c3)},
+      {TOBN(0xdc740278, 0x5545a7fb), TOBN(0xbdb2601c, 0x40d507e6),
+       TOBN(0x121dfeeb, 0x7066fa58), TOBN(0x214369a8, 0x39ae8c2a)}},
+     {{TOBN(0x195709cb, 0x06e0956c), TOBN(0x4c9d254f, 0x010cd34b),
+       TOBN(0xf51e13f7, 0x0471a532), TOBN(0xe19d6791, 0x1e73054d)},
+      {TOBN(0xf702a628, 0xdb5c7be3), TOBN(0xc7141218, 0xb24dde05),
+       TOBN(0xdc18233c, 0xf29b2e2e), TOBN(0x3a6bd1e8, 0x85342dba)}},
+     {{TOBN(0x3f747fa0, 0xb311898c), TOBN(0xe2a272e4, 0xcd0eac65),
+       TOBN(0x4bba5851, 0xf914d0bc), TOBN(0x7a1a9660, 0xc4a43ee3)},
+      {TOBN(0xe5a367ce, 0xa1c8cde9), TOBN(0x9d958ba9, 0x7271abe3),
+       TOBN(0xf3ff7eb6, 0x3d1615cd), TOBN(0xa2280dce, 0xf5ae20b0)}},
+     {{TOBN(0x56dba5c1, 0xcf640147), TOBN(0xea5a2e3d, 0x5e83d118),
+       TOBN(0x04cd6b6d, 0xda24c511), TOBN(0x1c0f4671, 0xe854d214)},
+      {TOBN(0x91a6b7a9, 0x69565381), TOBN(0xdc966240, 0xdecf1f5b),
+       TOBN(0x1b22d21c, 0xfcf5d009), TOBN(0x2a05f641, 0x9021dbd5)}},
+     {{TOBN(0x8c0ed566, 0xd4312483), TOBN(0x5179a95d, 0x643e216f),
+       TOBN(0xcc185fec, 0x17044493), TOBN(0xb3063339, 0x54991a21)},
+      {TOBN(0xd801ecdb, 0x0081a726), TOBN(0x0149b0c6, 0x4fa89bbb),
+       TOBN(0xafe9065a, 0x4391b6b9), TOBN(0xedc92786, 0xd633f3a3)}},
+     {{TOBN(0xe408c24a, 0xae6a8e13), TOBN(0x85833fde, 0x9f3897ab),
+       TOBN(0x43800e7e, 0xd81a0715), TOBN(0xde08e346, 0xb44ffc5f)},
+      {TOBN(0x7094184c, 0xcdeff2e0), TOBN(0x49f9387b, 0x165eaed1),
+       TOBN(0x635d6129, 0x777c468a), TOBN(0x8c0dcfd1, 0x538c2dd8)}},
+     {{TOBN(0xd6d9d9e3, 0x7a6a308b), TOBN(0x62375830, 0x4c2767d3),
+       TOBN(0x874a8bc6, 0xf38cbeb6), TOBN(0xd94d3f1a, 0xccb6fd9e)},
+      {TOBN(0x92a9735b, 0xba21f248), TOBN(0x272ad0e5, 0x6cd1efb0),
+       TOBN(0x7437b69c, 0x05b03284), TOBN(0xe7f04702, 0x6948c225)}},
+     {{TOBN(0x8a56c04a, 0xcba2ecec), TOBN(0x0c181270, 0xe3a73e41),
+       TOBN(0x6cb34e9d, 0x03e93725), TOBN(0xf77c8713, 0x496521a9)},
+      {TOBN(0x94569183, 0xfa7f9f90), TOBN(0xf2e7aa4c, 0x8c9707ad),
+       TOBN(0xced2c9ba, 0x26c1c9a3), TOBN(0x9109fe96, 0x40197507)}},
+     {{TOBN(0x9ae868a9, 0xe9adfe1c), TOBN(0x3984403d, 0x314e39bb),
+       TOBN(0xb5875720, 0xf2fe378f), TOBN(0x33f901e0, 0xba44a628)},
+      {TOBN(0xea1125fe, 0x3652438c), TOBN(0xae9ec4e6, 0x9dd1f20b),
+       TOBN(0x1e740d9e, 0xbebf7fbd), TOBN(0x6dbd3ddc, 0x42dbe79c)}},
+     {{TOBN(0x62082aec, 0xedd36776), TOBN(0xf612c478, 0xe9859039),
+       TOBN(0xa493b201, 0x032f7065), TOBN(0xebd4d8f2, 0x4ff9b211)},
+      {TOBN(0x3f23a0aa, 0xaac4cb32), TOBN(0xea3aadb7, 0x15ed4005),
+       TOBN(0xacf17ea4, 0xafa27e63), TOBN(0x56125c1a, 0xc11fd66c)}},
+     {{TOBN(0x266344a4, 0x3794f8dc), TOBN(0xdcca923a, 0x483c5c36),
+       TOBN(0x2d6b6bbf, 0x3f9d10a0), TOBN(0xb320c5ca, 0x81d9bdf3)},
+      {TOBN(0x620e28ff, 0x47b50a95), TOBN(0x933e3b01, 0xcef03371),
+       TOBN(0xf081bf85, 0x99100153), TOBN(0x183be9a0, 0xc3a8c8d6)}},
+     {{TOBN(0x4e3ddc5a, 0xd6bbe24d), TOBN(0xc6c74630, 0x53843795),
+       TOBN(0x78193dd7, 0x65ec2d4c), TOBN(0xb8df26cc, 0xcd3c89b2)},
+      {TOBN(0x98dbe399, 0x5a483f8d), TOBN(0x72d8a957, 0x7dd3313a),
+       TOBN(0x65087294, 0xab0bd375), TOBN(0xfcd89248, 0x7c259d16)}},
+     {{TOBN(0x8a9443d7, 0x7613aa81), TOBN(0x80100800, 0x85fe6584),
+       TOBN(0x70fc4dbc, 0x7fb10288), TOBN(0xf58280d3, 0xe86beee8)},
+      {TOBN(0x14fdd82f, 0x7c978c38), TOBN(0xdf1204c1, 0x0de44d7b),
+       TOBN(0xa08a1c84, 0x4160252f), TOBN(0x591554ca, 0xc17646a5)}},
+     {{TOBN(0x214a37d6, 0xa05bd525), TOBN(0x48d5f09b, 0x07957b3c),
+       TOBN(0x0247cdcb, 0xd7109bc9), TOBN(0x40f9e4bb, 0x30599ce7)},
+      {TOBN(0xc325fa03, 0xf46ad2ec), TOBN(0x00f766cf, 0xc3e3f9ee),
+       TOBN(0xab556668, 0xd43a4577), TOBN(0x68d30a61, 0x3ee03b93)}},
+     {{TOBN(0x7ddc81ea, 0x77b46a08), TOBN(0xcf5a6477, 0xc7480699),
+       TOBN(0x43a8cb34, 0x6633f683), TOBN(0x1b867e6b, 0x92363c60)},
+      {TOBN(0x43921114, 0x1f60558e), TOBN(0xcdbcdd63, 0x2f41450e),
+       TOBN(0x7fc04601, 0xcc630e8b), TOBN(0xea7c66d5, 0x97038b43)}},
+     {{TOBN(0x7259b8a5, 0x04e99fd8), TOBN(0x98a8dd12, 0x4785549a),
+       TOBN(0x0e459a7c, 0x840552e1), TOBN(0xcdfcf4d0, 0x4bb0909e)},
+      {TOBN(0x34a86db2, 0x53758da7), TOBN(0xe643bb83, 0xeac997e1),
+       TOBN(0x96400bd7, 0x530c5b7e), TOBN(0x9f97af87, 0xb41c8b52)}},
+     {{TOBN(0x34fc8820, 0xfbeee3f9), TOBN(0x93e53490, 0x49091afd),
+       TOBN(0x764b9be5, 0x9a31f35c), TOBN(0x71f37864, 0x57e3d924)},
+      {TOBN(0x02fb34e0, 0x943aa75e), TOBN(0xa18c9c58, 0xab8ff6e4),
+       TOBN(0x080f31b1, 0x33cf0d19), TOBN(0x5c9682db, 0x083518a7)}},
+     {{TOBN(0x873d4ca6, 0xb709c3de), TOBN(0x64a84262, 0x3575b8f0),
+       TOBN(0x6275da1f, 0x020154bb), TOBN(0x97678caa, 0xd17cf1ab)},
+      {TOBN(0x8779795f, 0x951a95c3), TOBN(0xdd35b163, 0x50fccc08),
+       TOBN(0x32709627, 0x33d8f031), TOBN(0x3c5ab10a, 0x498dd85c)}},
+     {{TOBN(0xb6c185c3, 0x41dca566), TOBN(0x7de7feda, 0xd8622aa3),
+       TOBN(0x99e84d92, 0x901b6dfb), TOBN(0x30a02b0e, 0x7c4ad288)},
+      {TOBN(0xc7c81daa, 0x2fd3cf36), TOBN(0xd1319547, 0xdf89e59f),
+       TOBN(0xb2be8184, 0xcd496733), TOBN(0xd5f449eb, 0x93d3412b)}},
+     {{TOBN(0x7ea41b1b, 0x25fe531d), TOBN(0xf9797432, 0x6a1d5646),
+       TOBN(0x86067f72, 0x2bde501a), TOBN(0xf91481c0, 0x0c85e89c)},
+      {TOBN(0xca8ee465, 0xf8b05bc6), TOBN(0x1844e1cf, 0x02e83cda),
+       TOBN(0xca82114a, 0xb4dbe33b), TOBN(0x0f9f8769, 0x4eabfde2)}},
+     {{TOBN(0x4936b1c0, 0x38b27fe2), TOBN(0x63b6359b, 0xaba402df),
+       TOBN(0x40c0ea2f, 0x656bdbab), TOBN(0x9c992a89, 0x6580c39c)},
+      {TOBN(0x600e8f15, 0x2a60aed1), TOBN(0xeb089ca4, 0xe0bf49df),
+       TOBN(0x9c233d7d, 0x2d42d99a), TOBN(0x648d3f95, 0x4c6bc2fa)}},
+     {{TOBN(0xdcc383a8, 0xe1add3f3), TOBN(0xf42c0c6a, 0x4f64a348),
+       TOBN(0x2abd176f, 0x0030dbdb), TOBN(0x4de501a3, 0x7d6c215e)},
+      {TOBN(0x4a107c1f, 0x4b9a64bc), TOBN(0xa77f0ad3, 0x2496cd59),
+       TOBN(0xfb78ac62, 0x7688dffb), TOBN(0x7025a2ca, 0x67937d8e)}},
+     {{TOBN(0xfde8b2d1, 0xd1a8f4e7), TOBN(0xf5b3da47, 0x7354927c),
+       TOBN(0xe48606a3, 0xd9205735), TOBN(0xac477cc6, 0xe177b917)},
+      {TOBN(0xfb1f73d2, 0xa883239a), TOBN(0xe12572f6, 0xcc8b8357),
+       TOBN(0x9d355e9c, 0xfb1f4f86), TOBN(0x89b795f8, 0xd9f3ec6e)}},
+     {{TOBN(0x27be56f1, 0xb54398dc), TOBN(0x1890efd7, 0x3fedeed5),
+       TOBN(0x62f77f1f, 0x9c6d0140), TOBN(0x7ef0e314, 0x596f0ee4)},
+      {TOBN(0x50ca6631, 0xcc61dab3), TOBN(0x4a39801d, 0xf4866e4f),
+       TOBN(0x66c8d032, 0xae363b39), TOBN(0x22c591e5, 0x2ead66aa)}},
+     {{TOBN(0x954ba308, 0xde02a53e), TOBN(0x2a6c060f, 0xd389f357),
+       TOBN(0xe6cfcde8, 0xfbf40b66), TOBN(0x8e02fc56, 0xc6340ce1)},
+      {TOBN(0xe4957795, 0x73adb4ba), TOBN(0x7b86122c, 0xa7b03805),
+       TOBN(0x63f83512, 0x0c8e6fa6), TOBN(0x83660ea0, 0x057d7804)}},
+     {{TOBN(0xbad79105, 0x21ba473c), TOBN(0xb6c50bee, 0xded5389d),
+       TOBN(0xee2caf4d, 0xaa7c9bc0), TOBN(0xd97b8de4, 0x8c4e98a7)},
+      {TOBN(0xa9f63e70, 0xab3bbddb), TOBN(0x3898aabf, 0x2597815a),
+       TOBN(0x7659af89, 0xac15b3d9), TOBN(0xedf7725b, 0x703ce784)}},
+     {{TOBN(0x25470fab, 0xe085116b), TOBN(0x04a43375, 0x87285310),
+       TOBN(0x4e39187e, 0xe2bfd52f), TOBN(0x36166b44, 0x7d9ebc74)},
+      {TOBN(0x92ad433c, 0xfd4b322c), TOBN(0x726aa817, 0xba79ab51),
+       TOBN(0xf96eacd8, 0xc1db15eb), TOBN(0xfaf71e91, 0x0476be63)}},
+     {{TOBN(0xdd69a640, 0x641fad98), TOBN(0xb7995918, 0x29622559),
+       TOBN(0x03c6daa5, 0xde4199dc), TOBN(0x92cadc97, 0xad545eb4)},
+      {TOBN(0x1028238b, 0x256534e4), TOBN(0x73e80ce6, 0x8595409a),
+       TOBN(0x690d4c66, 0xd05dc59b), TOBN(0xc95f7b8f, 0x981dee80)}},
+     {{TOBN(0xf4337014, 0xd856ac25), TOBN(0x441bd9dd, 0xac524dca),
+       TOBN(0x640b3d85, 0x5f0499f5), TOBN(0x39cf84a9, 0xd5fda182)},
+      {TOBN(0x04e7b055, 0xb2aa95a0), TOBN(0x29e33f0a, 0x0ddf1860),
+       TOBN(0x082e74b5, 0x423f6b43), TOBN(0x217edeb9, 0x0aaa2b0f)}},
+     {{TOBN(0x58b83f35, 0x83cbea55), TOBN(0xc485ee4d, 0xbc185d70),
+       TOBN(0x833ff03b, 0x1e5f6992), TOBN(0xb5b9b9cc, 0xcf0c0dd5)},
+      {TOBN(0x7caaee8e, 0x4e9e8a50), TOBN(0x462e907b, 0x6269dafd),
+       TOBN(0x6ed5cee9, 0xfbe791c6), TOBN(0x68ca3259, 0xed430790)}},
+     {{TOBN(0x2b72bdf2, 0x13b5ba88), TOBN(0x60294c8a, 0x35ef0ac4),
+       TOBN(0x9c3230ed, 0x19b99b08), TOBN(0x560fff17, 0x6c2589aa)},
+      {TOBN(0x552b8487, 0xd6770374), TOBN(0xa373202d, 0x9a56f685),
+       TOBN(0xd3e7f907, 0x45f175d9), TOBN(0x3c2f315f, 0xd080d810)}},
+     {{TOBN(0x1130e9dd, 0x7b9520e8), TOBN(0xc078f9e2, 0x0af037b5),
+       TOBN(0x38cd2ec7, 0x1e9c104c), TOBN(0x0f684368, 0xc472fe92)},
+      {TOBN(0xd3f1b5ed, 0x6247e7ef), TOBN(0xb32d33a9, 0x396dfe21),
+       TOBN(0x46f59cf4, 0x4a9aa2c2), TOBN(0x69cd5168, 0xff0f7e41)}},
+     {{TOBN(0x3f59da0f, 0x4b3234da), TOBN(0xcf0b0235, 0xb4579ebe),
+       TOBN(0x6d1cbb25, 0x6d2476c7), TOBN(0x4f0837e6, 0x9dc30f08)},
+      {TOBN(0x9a4075bb, 0x906f6e98), TOBN(0x253bb434, 0xc761e7d1),
+       TOBN(0xde2e645f, 0x6e73af10), TOBN(0xb89a4060, 0x0c5f131c)}},
+     {{TOBN(0xd12840c5, 0xb8cc037f), TOBN(0x3d093a5b, 0x7405bb47),
+       TOBN(0x6202c253, 0x206348b8), TOBN(0xbf5d57fc, 0xc55a3ca7)},
+      {TOBN(0x89f6c90c, 0x8c3bef48), TOBN(0x23ac7623, 0x5a0a960a),
+       TOBN(0xdfbd3d6b, 0x552b42ab), TOBN(0x3ef22458, 0x132061f6)}},
+     {{TOBN(0xd74e9bda, 0xc97e6516), TOBN(0x88779360, 0xc230f49e),
+       TOBN(0xa6ec1de3, 0x1e74ea49), TOBN(0x581dcee5, 0x3fb645a2)},
+      {TOBN(0xbaef2391, 0x8f483f14), TOBN(0x6d2dddfc, 0xd137d13b),
+       TOBN(0x54cde50e, 0xd2743a42), TOBN(0x89a34fc5, 0xe4d97e67)}},
+     {{TOBN(0x13f1f5b3, 0x12e08ce5), TOBN(0xa80540b8, 0xa7f0b2ca),
+       TOBN(0x854bcf77, 0x01982805), TOBN(0xb8653ffd, 0x233bea04)},
+      {TOBN(0x8e7b8787, 0x02b0b4c9), TOBN(0x2675261f, 0x9acb170a),
+       TOBN(0x061a9d90, 0x930c14e5), TOBN(0xb59b30e0, 0xdef0abea)}},
+     {{TOBN(0x1dc19ea6, 0x0200ec7d), TOBN(0xb6f4a3f9, 0x0bce132b),
+       TOBN(0xb8d5de90, 0xf13e27e0), TOBN(0xbaee5ef0, 0x1fade16f)},
+      {TOBN(0x6f406aaa, 0xe4c6cf38), TOBN(0xab4cfe06, 0xd1369815),
+       TOBN(0x0dcffe87, 0xefd550c6), TOBN(0x9d4f59c7, 0x75ff7d39)}},
+     {{TOBN(0xb02553b1, 0x51deb6ad), TOBN(0x812399a4, 0xb1877749),
+       TOBN(0xce90f71f, 0xca6006e1), TOBN(0xc32363a6, 0xb02b6e77)},
+      {TOBN(0x02284fbe, 0xdc36c64d), TOBN(0x86c81e31, 0xa7e1ae61),
+       TOBN(0x2576c7e5, 0xb909d94a), TOBN(0x8b6f7d02, 0x818b2bb0)}},
+     {{TOBN(0xeca3ed07, 0x56faa38a), TOBN(0xa3790e6c, 0x9305bb54),
+       TOBN(0xd784eeda, 0x7bc73061), TOBN(0xbd56d369, 0x6dd50614)},
+      {TOBN(0xd6575949, 0x229a8aa9), TOBN(0xdcca8f47, 0x4595ec28),
+       TOBN(0x814305c1, 0x06ab4fe6), TOBN(0xc8c39768, 0x24f43f16)}},
+     {{TOBN(0xe2a45f36, 0x523f2b36), TOBN(0x995c6493, 0x920d93bb),
+       TOBN(0xf8afdab7, 0x90f1632b), TOBN(0x79ebbecd, 0x1c295954)},
+      {TOBN(0xc7bb3ddb, 0x79592f48), TOBN(0x67216a7b, 0x5f88e998),
+       TOBN(0xd91f098b, 0xbc01193e), TOBN(0xf7d928a5, 0xb1db83fc)}},
+     {{TOBN(0x55e38417, 0xe991f600), TOBN(0x2a91113e, 0x2981a934),
+       TOBN(0xcbc9d648, 0x06b13bde), TOBN(0xb011b6ac, 0x0755ff44)},
+      {TOBN(0x6f4cb518, 0x045ec613), TOBN(0x522d2d31, 0xc2f5930a),
+       TOBN(0x5acae1af, 0x382e65de), TOBN(0x57643067, 0x27bc966f)}},
+     {{TOBN(0x5e12705d, 0x1c7193f0), TOBN(0xf0f32f47, 0x3be8858e),
+       TOBN(0x785c3d7d, 0x96c6dfc7), TOBN(0xd75b4a20, 0xbf31795d)},
+      {TOBN(0x91acf17b, 0x342659d4), TOBN(0xe596ea34, 0x44f0378f),
+       TOBN(0x4515708f, 0xce52129d), TOBN(0x17387e1e, 0x79f2f585)}},
+     {{TOBN(0x72cfd2e9, 0x49dee168), TOBN(0x1ae05223, 0x3e2af239),
+       TOBN(0x009e75be, 0x1d94066a), TOBN(0x6cca31c7, 0x38abf413)},
+      {TOBN(0xb50bd61d, 0x9bc49908), TOBN(0x4a9b4a8c, 0xf5e2bc1e),
+       TOBN(0xeb6cc5f7, 0x946f83ac), TOBN(0x27da93fc, 0xebffab28)}},
+     {{TOBN(0xea314c96, 0x4821c8c5), TOBN(0x8de49ded, 0xa83c15f4),
+       TOBN(0x7a64cf20, 0x7af33004), TOBN(0x45f1bfeb, 0xc9627e10)},
+      {TOBN(0x878b0626, 0x54b9df60), TOBN(0x5e4fdc3c, 0xa95c0b33),
+       TOBN(0xe54a37ca, 0xc2035d8e), TOBN(0x9087cda9, 0x80f20b8c)}},
+     {{TOBN(0x36f61c23, 0x8319ade4), TOBN(0x766f287a, 0xde8cfdf8),
+       TOBN(0x48821948, 0x346f3705), TOBN(0x49a7b853, 0x16e4f4a2)},
+      {TOBN(0xb9b3f8a7, 0x5cedadfd), TOBN(0x8f562815, 0x8db2a815),
+       TOBN(0xc0b7d554, 0x01f68f95), TOBN(0x12971e27, 0x688a208e)}},
+     {{TOBN(0xc9f8b696, 0xd0ff34fc), TOBN(0x20824de2, 0x1222718c),
+       TOBN(0x7213cf9f, 0x0c95284d), TOBN(0xe2ad741b, 0xdc158240)},
+      {TOBN(0x0ee3a6df, 0x54043ccf), TOBN(0x16ff479b, 0xd84412b3),
+       TOBN(0xf6c74ee0, 0xdfc98af0), TOBN(0xa78a169f, 0x52fcd2fb)}},
+     {{TOBN(0xd8ae8746, 0x99c930e9), TOBN(0x1d33e858, 0x49e117a5),
+       TOBN(0x7581fcb4, 0x6624759f), TOBN(0xde50644f, 0x5bedc01d)},
+      {TOBN(0xbeec5d00, 0xcaf3155e), TOBN(0x672d66ac, 0xbc73e75f),
+       TOBN(0x86b9d8c6, 0x270b01db), TOBN(0xd249ef83, 0x50f55b79)}},
+     {{TOBN(0x6131d6d4, 0x73978fe3), TOBN(0xcc4e4542, 0x754b00a1),
+       TOBN(0x4e05df05, 0x57dfcfe9), TOBN(0x94b29cdd, 0x51ef6bf0)},
+      {TOBN(0xe4530cff, 0x9bc7edf2), TOBN(0x8ac236fd, 0xd3da65f3),
+       TOBN(0x0faf7d5f, 0xc8eb0b48), TOBN(0x4d2de14c, 0x660eb039)}},
+     {{TOBN(0xc006bba7, 0x60430e54), TOBN(0x10a2d0d6, 0xda3289ab),
+       TOBN(0x9c037a5d, 0xd7979c59), TOBN(0x04d1f3d3, 0xa116d944)},
+      {TOBN(0x9ff22473, 0x8a0983cd), TOBN(0x28e25b38, 0xc883cabb),
+       TOBN(0xe968dba5, 0x47a58995), TOBN(0x2c80b505, 0x774eebdf)}},
+     {{TOBN(0xee763b71, 0x4a953beb), TOBN(0x502e223f, 0x1642e7f6),
+       TOBN(0x6fe4b641, 0x61d5e722), TOBN(0x9d37c5b0, 0xdbef5316)},
+      {TOBN(0x0115ed70, 0xf8330bc7), TOBN(0x139850e6, 0x75a72789),
+       TOBN(0x27d7faec, 0xffceccc2), TOBN(0x3016a860, 0x4fd9f7f6)}},
+     {{TOBN(0xc492ec64, 0x4cd8f64c), TOBN(0x58a2d790, 0x279d7b51),
+       TOBN(0x0ced1fc5, 0x1fc75256), TOBN(0x3e658aed, 0x8f433017)},
+      {TOBN(0x0b61942e, 0x05da59eb), TOBN(0xba3d60a3, 0x0ddc3722),
+       TOBN(0x7c311cd1, 0x742e7f87), TOBN(0x6473ffee, 0xf6b01b6e)}}},
+    {{{TOBN(0x8303604f, 0x692ac542), TOBN(0xf079ffe1, 0x227b91d3),
+       TOBN(0x19f63e63, 0x15aaf9bd), TOBN(0xf99ee565, 0xf1f344fb)},
+      {TOBN(0x8a1d661f, 0xd6219199), TOBN(0x8c883bc6, 0xd48ce41c),
+       TOBN(0x1065118f, 0x3c74d904), TOBN(0x713889ee, 0x0faf8b1b)}},
+     {{TOBN(0x972b3f8f, 0x81a1b3be), TOBN(0x4f3ce145, 0xce2764a0),
+       TOBN(0xe2d0f1cc, 0x28c4f5f7), TOBN(0xdeee0c0d, 0xc7f3985b)},
+      {TOBN(0x7df4adc0, 0xd39e25c3), TOBN(0x40619820, 0xc467a080),
+       TOBN(0x440ebc93, 0x61cf5a58), TOBN(0x527729a6, 0x422ad600)}},
+     {{TOBN(0xca6c0937, 0xb1b76ba6), TOBN(0x1a2eab85, 0x4d2026dc),
+       TOBN(0xb1715e15, 0x19d9ae0a), TOBN(0xf1ad9199, 0xbac4a026)},
+      {TOBN(0x35b3dfb8, 0x07ea7b0e), TOBN(0xedf5496f, 0x3ed9eb89),
+       TOBN(0x8932e5ff, 0x2d6d08ab), TOBN(0xf314874e, 0x25bd2731)}},
+     {{TOBN(0xefb26a75, 0x3f73f449), TOBN(0x1d1c94f8, 0x8d44fc79),
+       TOBN(0x49f0fbc5, 0x3bc0dc4d), TOBN(0xb747ea0b, 0x3698a0d0)},
+      {TOBN(0x5218c3fe, 0x228d291e), TOBN(0x35b804b5, 0x43c129d6),
+       TOBN(0xfac859b8, 0xd1acc516), TOBN(0x6c10697d, 0x95d6e668)}},
+     {{TOBN(0xc38e438f, 0x0876fd4e), TOBN(0x45f0c307, 0x83d2f383),
+       TOBN(0x203cc2ec, 0xb10934cb), TOBN(0x6a8f2439, 0x2c9d46ee)},
+      {TOBN(0xf16b431b, 0x65ccde7b), TOBN(0x41e2cd18, 0x27e76a6f),
+       TOBN(0xb9c8cf8f, 0x4e3484d7), TOBN(0x64426efd, 0x8315244a)}},
+     {{TOBN(0x1c0a8e44, 0xfc94dea3), TOBN(0x34c8cdbf, 0xdad6a0b0),
+       TOBN(0x919c3840, 0x04113cef), TOBN(0xfd32fba4, 0x15490ffa)},
+      {TOBN(0x58d190f6, 0x795dcfb7), TOBN(0xfef01b03, 0x83588baf),
+       TOBN(0x9e6d1d63, 0xca1fc1c0), TOBN(0x53173f96, 0xf0a41ac9)}},
+     {{TOBN(0x2b1d402a, 0xba16f73b), TOBN(0x2fb31014, 0x8cf9b9fc),
+       TOBN(0x2d51e60e, 0x446ef7bf), TOBN(0xc731021b, 0xb91e1745)},
+      {TOBN(0x9d3b4724, 0x4fee99d4), TOBN(0x4bca48b6, 0xfac5c1ea),
+       TOBN(0x70f5f514, 0xbbea9af7), TOBN(0x751f55a5, 0x974c283a)}},
+     {{TOBN(0x6e30251a, 0xcb452fdb), TOBN(0x31ee6965, 0x50f30650),
+       TOBN(0xb0b3e508, 0x933548d9), TOBN(0xb8949a4f, 0xf4b0ef5b)},
+      {TOBN(0x208b8326, 0x3c88f3bd), TOBN(0xab147c30, 0xdb1d9989),
+       TOBN(0xed6515fd, 0x44d4df03), TOBN(0x17a12f75, 0xe72eb0c5)}},
+     {{TOBN(0x3b59796d, 0x36cf69db), TOBN(0x1219eee9, 0x56670c18),
+       TOBN(0xfe3341f7, 0x7a070d8e), TOBN(0x9b70130b, 0xa327f90c)},
+      {TOBN(0x36a32462, 0x0ae18e0e), TOBN(0x2021a623, 0x46c0a638),
+       TOBN(0x251b5817, 0xc62eb0d4), TOBN(0x87bfbcdf, 0x4c762293)}},
+     {{TOBN(0xf78ab505, 0xcdd61d64), TOBN(0x8c7a53fc, 0xc8c18857),
+       TOBN(0xa653ce6f, 0x16147515), TOBN(0x9c923aa5, 0xea7d52d5)},
+      {TOBN(0xc24709cb, 0x5c18871f), TOBN(0x7d53bec8, 0x73b3cc74),
+       TOBN(0x59264aff, 0xfdd1d4c4), TOBN(0x5555917e, 0x240da582)}},
+     {{TOBN(0xcae8bbda, 0x548f5a0e), TOBN(0x1910eaba, 0x3bbfbbe1),
+       TOBN(0xae579685, 0x7677afc3), TOBN(0x49ea61f1, 0x73ff0b5c)},
+      {TOBN(0x78655478, 0x4f7c3922), TOBN(0x95d337cd, 0x20c68eef),
+       TOBN(0x68f1e1e5, 0xdf779ab9), TOBN(0x14b491b0, 0xb5cf69a8)}},
+     {{TOBN(0x7a6cbbe0, 0x28e3fe89), TOBN(0xe7e1fee4, 0xc5aac0eb),
+       TOBN(0x7f47eda5, 0x697e5140), TOBN(0x4f450137, 0xb454921f)},
+      {TOBN(0xdb625f84, 0x95cd8185), TOBN(0x74be0ba1, 0xcdb2e583),
+       TOBN(0xaee4fd7c, 0xdd5e6de4), TOBN(0x4251437d, 0xe8101739)}},
+     {{TOBN(0x686d72a0, 0xac620366), TOBN(0x4be3fb9c, 0xb6d59344),
+       TOBN(0x6e8b44e7, 0xa1eb75b9), TOBN(0x84e39da3, 0x91a5c10c)},
+      {TOBN(0x37cc1490, 0xb38f0409), TOBN(0x02951943, 0x2c2ade82),
+       TOBN(0x9b688783, 0x1190a2d8), TOBN(0x25627d14, 0x231182ba)}},
+     {{TOBN(0x6eb550aa, 0x658a6d87), TOBN(0x1405aaa7, 0xcf9c7325),
+       TOBN(0xd147142e, 0x5c8748c9), TOBN(0x7f637e4f, 0x53ede0e0)},
+      {TOBN(0xf8ca2776, 0x14ffad2c), TOBN(0xe58fb1bd, 0xbafb6791),
+       TOBN(0x17158c23, 0xbf8f93fc), TOBN(0x7f15b373, 0x0a4a4655)}},
+     {{TOBN(0x39d4add2, 0xd842ca72), TOBN(0xa71e4391, 0x3ed96305),
+       TOBN(0x5bb09cbe, 0x6700be14), TOBN(0x68d69d54, 0xd8befcf6)},
+      {TOBN(0xa45f5367, 0x37183bcf), TOBN(0x7152b7bb, 0x3370dff7),
+       TOBN(0xcf887baa, 0xbf12525b), TOBN(0xe7ac7bdd, 0xd6d1e3cd)}},
+     {{TOBN(0x25914f78, 0x81fdad90), TOBN(0xcf638f56, 0x0d2cf6ab),
+       TOBN(0xb90bc03f, 0xcc054de5), TOBN(0x932811a7, 0x18b06350)},
+      {TOBN(0x2f00b330, 0x9bbd11ff), TOBN(0x76108a6f, 0xb4044974),
+       TOBN(0x801bb9e0, 0xa851d266), TOBN(0x0dd099be, 0xbf8990c1)}},
+     {{TOBN(0x58c5aaaa, 0xabe32986), TOBN(0x0fe9dd2a, 0x50d59c27),
+       TOBN(0x84951ff4, 0x8d307305), TOBN(0x6c23f829, 0x86529b78)},
+      {TOBN(0x50bb2218, 0x0b136a79), TOBN(0x7e2174de, 0x77a20996),
+       TOBN(0x6f00a4b9, 0xc0bb4da6), TOBN(0x89a25a17, 0xefdde8da)}},
+     {{TOBN(0xf728a27e, 0xc11ee01d), TOBN(0xf900553a, 0xe5f10dfb),
+       TOBN(0x189a83c8, 0x02ec893c), TOBN(0x3ca5bdc1, 0x23f66d77)},
+      {TOBN(0x98781537, 0x97eada9f), TOBN(0x59c50ab3, 0x10256230),
+       TOBN(0x346042d9, 0x323c69b3), TOBN(0x1b715a6d, 0x2c460449)}},
+     {{TOBN(0xa41dd476, 0x6ae06e0b), TOBN(0xcdd7888e, 0x9d42e25f),
+       TOBN(0x0f395f74, 0x56b25a20), TOBN(0xeadfe0ae, 0x8700e27e)},
+      {TOBN(0xb09d52a9, 0x69950093), TOBN(0x3525d9cb, 0x327f8d40),
+       TOBN(0xb8235a94, 0x67df886a), TOBN(0x77e4b0dd, 0x035faec2)}},
+     {{TOBN(0x115eb20a, 0x517d7061), TOBN(0x77fe3433, 0x6c2df683),
+       TOBN(0x6870ddc7, 0xcdc6fc67), TOBN(0xb1610588, 0x0b87de83)},
+      {TOBN(0x343584ca, 0xd9c4ddbe), TOBN(0xb3164f1c, 0x3d754be2),
+       TOBN(0x0731ed3a, 0xc1e6c894), TOBN(0x26327dec, 0x4f6b904c)}},
+     {{TOBN(0x9d49c6de, 0x97b5cd32), TOBN(0x40835dae, 0xb5eceecd),
+       TOBN(0xc66350ed, 0xd9ded7fe), TOBN(0x8aeebb5c, 0x7a678804)},
+      {TOBN(0x51d42fb7, 0x5b8ee9ec), TOBN(0xd7a17bdd, 0x8e3ca118),
+       TOBN(0x40d7511a, 0x2ef4400e), TOBN(0xc48990ac, 0x875a66f4)}},
+     {{TOBN(0x8de07d2a, 0x2199e347), TOBN(0xbee75556, 0x2a39e051),
+       TOBN(0x56918786, 0x916e51dc), TOBN(0xeb191313, 0x4a2d89ec)},
+      {TOBN(0x6679610d, 0x37d341ed), TOBN(0x434fbb41, 0x56d51c2b),
+       TOBN(0xe54b7ee7, 0xd7492dba), TOBN(0xaa33a79a, 0x59021493)}},
+     {{TOBN(0x49fc5054, 0xe4bd6d3d), TOBN(0x09540f04, 0x5ab551d0),
+       TOBN(0x8acc9085, 0x4942d3a6), TOBN(0x231af02f, 0x2d28323b)},
+      {TOBN(0x93458cac, 0x0992c163), TOBN(0x1fef8e71, 0x888e3bb4),
+       TOBN(0x27578da5, 0xbe8c268c), TOBN(0xcc8be792, 0xe805ec00)}},
+     {{TOBN(0x29267bae, 0xc61c3855), TOBN(0xebff429d, 0x58c1fd3b),
+       TOBN(0x22d886c0, 0x8c0b93b8), TOBN(0xca5e00b2, 0x2ddb8953)},
+      {TOBN(0xcf330117, 0xc3fed8b7), TOBN(0xd49ac6fa, 0x819c01f6),
+       TOBN(0x6ddaa6bd, 0x3c0fbd54), TOBN(0x91743068, 0x8049a2cf)}},
+     {{TOBN(0xd67f981e, 0xaff2ef81), TOBN(0xc3654d35, 0x2818ae80),
+       TOBN(0x81d05044, 0x1b2aa892), TOBN(0x2db067bf, 0x3d099328)},
+      {TOBN(0xe7c79e86, 0x703dcc97), TOBN(0xe66f9b37, 0xe133e215),
+       TOBN(0xcdf119a6, 0xe39a7a5c), TOBN(0x47c60de3, 0x876f1b61)}},
+     {{TOBN(0x6e405939, 0xd860f1b2), TOBN(0x3e9a1dbc, 0xf5ed4d4a),
+       TOBN(0x3f23619e, 0xc9b6bcbd), TOBN(0x5ee790cf, 0x734e4497)},
+      {TOBN(0xf0a834b1, 0x5bdaf9bb), TOBN(0x02cedda7, 0x4ca295f0),
+       TOBN(0x4619aa2b, 0xcb8e378c), TOBN(0xe5613244, 0xcc987ea4)}},
+     {{TOBN(0x0bc022cc, 0x76b23a50), TOBN(0x4a2793ad, 0x0a6c21ce),
+       TOBN(0x38328780, 0x89cac3f5), TOBN(0x29176f1b, 0xcba26d56)},
+      {TOBN(0x06296187, 0x4f6f59eb), TOBN(0x86e9bca9, 0x8bdc658e),
+       TOBN(0x2ca9c4d3, 0x57e30402), TOBN(0x5438b216, 0x516a09bb)}},
+     {{TOBN(0x0a6a063c, 0x7672765a), TOBN(0x37a3ce64, 0x0547b9bf),
+       TOBN(0x42c099c8, 0x98b1a633), TOBN(0xb5ab800d, 0x05ee6961)},
+      {TOBN(0xf1963f59, 0x11a5acd6), TOBN(0xbaee6157, 0x46201063),
+       TOBN(0x36d9a649, 0xa596210a), TOBN(0xaed04363, 0x1ba7138c)}},
+     {{TOBN(0xcf817d1c, 0xa4a82b76), TOBN(0x5586960e, 0xf3806be9),
+       TOBN(0x7ab67c89, 0x09dc6bb5), TOBN(0x52ace7a0, 0x114fe7eb)},
+      {TOBN(0xcd987618, 0xcbbc9b70), TOBN(0x4f06fd5a, 0x604ca5e1),
+       TOBN(0x90af14ca, 0x6dbde133), TOBN(0x1afe4322, 0x948a3264)}},
+     {{TOBN(0xa70d2ca6, 0xc44b2c6c), TOBN(0xab726799, 0x0ef87dfe),
+       TOBN(0x310f64dc, 0x2e696377), TOBN(0x49b42e68, 0x4c8126a0)},
+      {TOBN(0x0ea444c3, 0xcea0b176), TOBN(0x53a8ddf7, 0xcb269182),
+       TOBN(0xf3e674eb, 0xbbba9dcb), TOBN(0x0d2878a8, 0xd8669d33)}},
+     {{TOBN(0x04b935d5, 0xd019b6a3), TOBN(0xbb5cf88e, 0x406f1e46),
+       TOBN(0xa1912d16, 0x5b57c111), TOBN(0x9803fc21, 0x19ebfd78)},
+      {TOBN(0x4f231c9e, 0xc07764a9), TOBN(0xd93286ee, 0xb75bd055),
+       TOBN(0x83a9457d, 0x8ee6c9de), TOBN(0x04695915, 0x6087ec90)}},
+     {{TOBN(0x14c6dd8a, 0x58d6cd46), TOBN(0x9cb633b5, 0x8e6634d2),
+       TOBN(0xc1305047, 0xf81bc328), TOBN(0x12ede0e2, 0x26a177e5)},
+      {TOBN(0x332cca62, 0x065a6f4f), TOBN(0xc3a47ecd, 0x67be487b),
+       TOBN(0x741eb187, 0x0f47ed1c), TOBN(0x99e66e58, 0xe7598b14)}},
+     {{TOBN(0x6f0544ca, 0x63d0ff12), TOBN(0xe5efc784, 0xb610a05f),
+       TOBN(0xf72917b1, 0x7cad7b47), TOBN(0x3ff6ea20, 0xf2cac0c0)},
+      {TOBN(0xcc23791b, 0xf21db8b7), TOBN(0x7dac70b1, 0xd7d93565),
+       TOBN(0x682cda1d, 0x694bdaad), TOBN(0xeb88bb8c, 0x1023516d)}},
+     {{TOBN(0xc4c634b4, 0xdfdbeb1b), TOBN(0x22f5ca72, 0xb4ee4dea),
+       TOBN(0x1045a368, 0xe6524821), TOBN(0xed9e8a3f, 0x052b18b2)},
+      {TOBN(0x9b7f2cb1, 0xb961f49a), TOBN(0x7fee2ec1, 0x7b009670),
+       TOBN(0x350d8754, 0x22507a6d), TOBN(0x561bd711, 0x4db55f1d)}},
+     {{TOBN(0x4c189ccc, 0x320bbcaf), TOBN(0x568434cf, 0xdf1de48c),
+       TOBN(0x6af1b00e, 0x0fa8f128), TOBN(0xf0ba9d02, 0x8907583c)},
+      {TOBN(0x735a4004, 0x32ff9f60), TOBN(0x3dd8e4b6, 0xc25dcf33),
+       TOBN(0xf2230f16, 0x42c74cef), TOBN(0xd8117623, 0x013fa8ad)}},
+     {{TOBN(0x36822876, 0xf51fe76e), TOBN(0x8a6811cc, 0x11d62589),
+       TOBN(0xc3fc7e65, 0x46225718), TOBN(0xb7df2c9f, 0xc82fdbcd)},
+      {TOBN(0x3b1d4e52, 0xdd7b205b), TOBN(0xb6959478, 0x47a2e414),
+       TOBN(0x05e4d793, 0xefa91148), TOBN(0xb47ed446, 0xfd2e9675)}},
+     {{TOBN(0x1a7098b9, 0x04c9d9bf), TOBN(0x661e2881, 0x1b793048),
+       TOBN(0xb1a16966, 0xb01ee461), TOBN(0xbc521308, 0x2954746f)},
+      {TOBN(0xc909a0fc, 0x2477de50), TOBN(0xd80bb41c, 0x7dbd51ef),
+       TOBN(0xa85be7ec, 0x53294905), TOBN(0x6d465b18, 0x83958f97)}},
+     {{TOBN(0x16f6f330, 0xfb6840fd), TOBN(0xfaaeb214, 0x3401e6c8),
+       TOBN(0xaf83d30f, 0xccb5b4f8), TOBN(0x22885739, 0x266dec4b)},
+      {TOBN(0x51b4367c, 0x7bc467df), TOBN(0x926562e3, 0xd842d27a),
+       TOBN(0xdfcb6614, 0x0fea14a6), TOBN(0xeb394dae, 0xf2734cd9)}},
+     {{TOBN(0x3eeae5d2, 0x11c0be98), TOBN(0xb1e6ed11, 0x814e8165),
+       TOBN(0x191086bc, 0xe52bce1c), TOBN(0x14b74cc6, 0xa75a04da)},
+      {TOBN(0x63cf1186, 0x8c060985), TOBN(0x071047de, 0x2dbd7f7c),
+       TOBN(0x4e433b8b, 0xce0942ca), TOBN(0xecbac447, 0xd8fec61d)}},
+     {{TOBN(0x8f0ed0e2, 0xebf3232f), TOBN(0xfff80f9e, 0xc52a2edd),
+       TOBN(0xad9ab433, 0x75b55fdb), TOBN(0x73ca7820, 0xe42e0c11)},
+      {TOBN(0x6dace0a0, 0xe6251b46), TOBN(0x89bc6b5c, 0x4c0d932d),
+       TOBN(0x3438cd77, 0x095da19a), TOBN(0x2f24a939, 0x8d48bdfb)}},
+     {{TOBN(0x99b47e46, 0x766561b7), TOBN(0x736600e6, 0x0ed0322a),
+       TOBN(0x06a47cb1, 0x638e1865), TOBN(0x927c1c2d, 0xcb136000)},
+      {TOBN(0x29542337, 0x0cc5df69), TOBN(0x99b37c02, 0x09d649a9),
+       TOBN(0xc5f0043c, 0x6aefdb27), TOBN(0x6cdd9987, 0x1be95c27)}},
+     {{TOBN(0x69850931, 0x390420d2), TOBN(0x299c40ac, 0x0983efa4),
+       TOBN(0x3a05e778, 0xaf39aead), TOBN(0x84274408, 0x43a45193)},
+      {TOBN(0x6bcd0fb9, 0x91a711a0), TOBN(0x461592c8, 0x9f52ab17),
+       TOBN(0xb49302b4, 0xda3c6ed6), TOBN(0xc51fddc7, 0x330d7067)}},
+     {{TOBN(0x94babeb6, 0xda50d531), TOBN(0x521b840d, 0xa6a7b9da),
+       TOBN(0x5305151e, 0x404bdc89), TOBN(0x1bcde201, 0xd0d07449)},
+      {TOBN(0xf427a78b, 0x3b76a59a), TOBN(0xf84841ce, 0x07791a1b),
+       TOBN(0xebd314be, 0xbf91ed1c), TOBN(0x8e61d34c, 0xbf172943)}},
+     {{TOBN(0x1d5dc451, 0x5541b892), TOBN(0xb186ee41, 0xfc9d9e54),
+       TOBN(0x9d9f345e, 0xd5bf610d), TOBN(0x3e7ba65d, 0xf6acca9f)},
+      {TOBN(0x9dda787a, 0xa8369486), TOBN(0x09f9dab7, 0x8eb5ba53),
+       TOBN(0x5afb2033, 0xd6481bc3), TOBN(0x76f4ce30, 0xafa62104)}},
+     {{TOBN(0xa8fa00cf, 0xf4f066b5), TOBN(0x89ab5143, 0x461dafc2),
+       TOBN(0x44339ed7, 0xa3389998), TOBN(0x2ff862f1, 0xbc214903)},
+      {TOBN(0x2c88f985, 0xb05556e3), TOBN(0xcd96058e, 0x3467081e),
+       TOBN(0x7d6a4176, 0xedc637ea), TOBN(0xe1743d09, 0x36a5acdc)}},
+     {{TOBN(0x66fd72e2, 0x7eb37726), TOBN(0xf7fa264e, 0x1481a037),
+       TOBN(0x9fbd3bde, 0x45f4aa79), TOBN(0xed1e0147, 0x767c3e22)},
+      {TOBN(0x7621f979, 0x82e7abe2), TOBN(0x19eedc72, 0x45f633f8),
+       TOBN(0xe69b155e, 0x6137bf3a), TOBN(0xa0ad13ce, 0x414ee94e)}},
+     {{TOBN(0x93e3d524, 0x1c0e651a), TOBN(0xab1a6e2a, 0x02ce227e),
+       TOBN(0xe7af1797, 0x4ab27eca), TOBN(0x245446de, 0xbd444f39)},
+      {TOBN(0x59e22a21, 0x56c07613), TOBN(0x43deafce, 0xf4275498),
+       TOBN(0x10834ccb, 0x67fd0946), TOBN(0xa75841e5, 0x47406edf)}},
+     {{TOBN(0xebd6a677, 0x7b0ac93d), TOBN(0xa6e37b0d, 0x78f5e0d7),
+       TOBN(0x2516c096, 0x76f5492b), TOBN(0x1e4bf888, 0x9ac05f3a)},
+      {TOBN(0xcdb42ce0, 0x4df0ba2b), TOBN(0x935d5cfd, 0x5062341b),
+       TOBN(0x8a303333, 0x82acac20), TOBN(0x429438c4, 0x5198b00e)}},
+     {{TOBN(0x1d083bc9, 0x049d33fa), TOBN(0x58b82dda, 0x946f67ff),
+       TOBN(0xac3e2db8, 0x67a1d6a3), TOBN(0x62e6bead, 0x1798aac8)},
+      {TOBN(0xfc85980f, 0xde46c58c), TOBN(0xa7f69379, 0x69c8d7be),
+       TOBN(0x23557927, 0x837b35ec), TOBN(0x06a933d8, 0xe0790c0c)}},
+     {{TOBN(0x827c0e9b, 0x077ff55d), TOBN(0x53977798, 0xbb26e680),
+       TOBN(0x59530874, 0x1d9cb54f), TOBN(0xcca3f449, 0x4aac53ef)},
+      {TOBN(0x11dc5c87, 0xa07eda0f), TOBN(0xc138bccf, 0xfd6400c8),
+       TOBN(0x549680d3, 0x13e5da72), TOBN(0xc93eed82, 0x4540617e)}},
+     {{TOBN(0xfd3db157, 0x4d0b75c0), TOBN(0x9716eb42, 0x6386075b),
+       TOBN(0x0639605c, 0x817b2c16), TOBN(0x09915109, 0xf1e4f201)},
+      {TOBN(0x35c9a928, 0x5cca6c3b), TOBN(0xb25f7d1a, 0x3505c900),
+       TOBN(0xeb9f7d20, 0x630480c4), TOBN(0xc3c7b8c6, 0x2a1a501c)}},
+     {{TOBN(0x3f99183c, 0x5a1f8e24), TOBN(0xfdb118fa, 0x9dd255f0),
+       TOBN(0xb9b18b90, 0xc27f62a6), TOBN(0xe8f732f7, 0x396ec191)},
+      {TOBN(0x524a2d91, 0x0be786ab), TOBN(0x5d32adef, 0x0ac5a0f5),
+       TOBN(0x9b53d4d6, 0x9725f694), TOBN(0x032a76c6, 0x0510ba89)}},
+     {{TOBN(0x840391a3, 0xebeb1544), TOBN(0x44b7b88c, 0x3ed73ac3),
+       TOBN(0xd24bae7a, 0x256cb8b3), TOBN(0x7ceb151a, 0xe394cb12)},
+      {TOBN(0xbd6b66d0, 0x5bc1e6a8), TOBN(0xec70cecb, 0x090f07bf),
+       TOBN(0x270644ed, 0x7d937589), TOBN(0xee9e1a3d, 0x5f1dccfe)}},
+     {{TOBN(0xb0d40a84, 0x745b98d2), TOBN(0xda429a21, 0x2556ed40),
+       TOBN(0xf676eced, 0x85148cb9), TOBN(0x5a22d40c, 0xded18936)},
+      {TOBN(0x3bc4b9e5, 0x70e8a4ce), TOBN(0xbfd1445b, 0x9eae0379),
+       TOBN(0xf23f2c0c, 0x1a0bd47e), TOBN(0xa9c0bb31, 0xe1845531)}},
+     {{TOBN(0x9ddc4d60, 0x0a4c3f6b), TOBN(0xbdfaad79, 0x2c15ef44),
+       TOBN(0xce55a236, 0x7f484acc), TOBN(0x08653ca7, 0x055b1f15)},
+      {TOBN(0x2efa8724, 0x538873a3), TOBN(0x09299e5d, 0xace1c7e7),
+       TOBN(0x07afab66, 0xade332ba), TOBN(0x9be1fdf6, 0x92dd71b7)}},
+     {{TOBN(0xa49b5d59, 0x5758b11c), TOBN(0x0b852893, 0xc8654f40),
+       TOBN(0xb63ef6f4, 0x52379447), TOBN(0xd4957d29, 0x105e690c)},
+      {TOBN(0x7d484363, 0x646559b0), TOBN(0xf4a8273c, 0x49788a8e),
+       TOBN(0xee406cb8, 0x34ce54a9), TOBN(0x1e1c260f, 0xf86fda9b)}},
+     {{TOBN(0xe150e228, 0xcf6a4a81), TOBN(0x1fa3b6a3, 0x1b488772),
+       TOBN(0x1e6ff110, 0xc5a9c15b), TOBN(0xc6133b91, 0x8ad6aa47)},
+      {TOBN(0x8ac5d55c, 0x9dffa978), TOBN(0xba1d1c1d, 0x5f3965f2),
+       TOBN(0xf969f4e0, 0x7732b52f), TOBN(0xfceecdb5, 0xa5172a07)}},
+     {{TOBN(0xb0120a5f, 0x10f2b8f5), TOBN(0xc83a6cdf, 0x5c4c2f63),
+       TOBN(0x4d47a491, 0xf8f9c213), TOBN(0xd9e1cce5, 0xd3f1bbd5)},
+      {TOBN(0x0d91bc7c, 0xaba7e372), TOBN(0xfcdc74c8, 0xdfd1a2db),
+       TOBN(0x05efa800, 0x374618e5), TOBN(0x11216969, 0x15a7925e)}},
+     {{TOBN(0xd4c89823, 0xf6021c5d), TOBN(0x880d5e84, 0xeff14423),
+       TOBN(0x6523bc5a, 0x6dcd1396), TOBN(0xd1acfdfc, 0x113c978b)},
+      {TOBN(0xb0c164e8, 0xbbb66840), TOBN(0xf7f4301e, 0x72b58459),
+       TOBN(0xc29ad4a6, 0xa638e8ec), TOBN(0xf5ab8961, 0x46b78699)}},
+     {{TOBN(0x9dbd7974, 0x0e954750), TOBN(0x0121de88, 0x64f9d2c6),
+       TOBN(0x2e597b42, 0xd985232e), TOBN(0x55b6c3c5, 0x53451777)},
+      {TOBN(0xbb53e547, 0x519cb9fb), TOBN(0xf134019f, 0x8428600d),
+       TOBN(0x5a473176, 0xe081791a), TOBN(0x2f3e2263, 0x35fb0c08)}},
+     {{TOBN(0xb28c3017, 0x73d273b0), TOBN(0xccd21076, 0x7721ef9a),
+       TOBN(0x054cc292, 0xb650dc39), TOBN(0x662246de, 0x6188045e)},
+      {TOBN(0x904b52fa, 0x6b83c0d1), TOBN(0xa72df267, 0x97e9cd46),
+       TOBN(0x886b43cd, 0x899725e4), TOBN(0x2b651688, 0xd849ff22)}},
+     {{TOBN(0x60479b79, 0x02f34533), TOBN(0x5e354c14, 0x0c77c148),
+       TOBN(0xb4bb7581, 0xa8537c78), TOBN(0x188043d7, 0xefe1495f)},
+      {TOBN(0x9ba12f42, 0x8c1d5026), TOBN(0x2e0c8a26, 0x93d4aaab),
+       TOBN(0xbdba7b8b, 0xaa57c450), TOBN(0x140c9ad6, 0x9bbdafef)}},
+     {{TOBN(0x2067aa42, 0x25ac0f18), TOBN(0xf7b1295b, 0x04d1fbf3),
+       TOBN(0x14829111, 0xa4b04824), TOBN(0x2ce3f192, 0x33bd5e91)},
+      {TOBN(0x9c7a1d55, 0x8f2e1b72), TOBN(0xfe932286, 0x302aa243),
+       TOBN(0x497ca7b4, 0xd4be9554), TOBN(0xb8e821b8, 0xe0547a6e)}},
+     {{TOBN(0xfb2838be, 0x67e573e0), TOBN(0x05891db9, 0x4084c44b),
+       TOBN(0x91311373, 0x96c1c2c5), TOBN(0x6aebfa3f, 0xd958444b)},
+      {TOBN(0xac9cdce9, 0xe56e55c1), TOBN(0x7148ced3, 0x2caa46d0),
+       TOBN(0x2e10c7ef, 0xb61fe8eb), TOBN(0x9fd835da, 0xff97cf4d)}}},
+    {{{TOBN(0xa36da109, 0x081e9387), TOBN(0xfb9780d7, 0x8c935828),
+       TOBN(0xd5940332, 0xe540b015), TOBN(0xc9d7b51b, 0xe0f466fa)},
+      {TOBN(0xfaadcd41, 0xd6d9f671), TOBN(0xba6c1e28, 0xb1a2ac17),
+       TOBN(0x066a7833, 0xed201e5f), TOBN(0x19d99719, 0xf90f462b)}},
+     {{TOBN(0xf431f462, 0x060b5f61), TOBN(0xa56f46b4, 0x7bd057c2),
+       TOBN(0x348dca6c, 0x47e1bf65), TOBN(0x9a38783e, 0x41bcf1ff)},
+      {TOBN(0x7a5d33a9, 0xda710718), TOBN(0x5a779987, 0x2e0aeaf6),
+       TOBN(0xca87314d, 0x2d29d187), TOBN(0xfa0edc3e, 0xc687d733)}},
+     {{TOBN(0x9df33621, 0x6a31e09b), TOBN(0xde89e44d, 0xc1350e35),
+       TOBN(0x29214871, 0x4ca0cf52), TOBN(0xdf379672, 0x0b88a538)},
+      {TOBN(0xc92a510a, 0x2591d61b), TOBN(0x79aa87d7, 0x585b447b),
+       TOBN(0xf67db604, 0xe5287f77), TOBN(0x1697c8bf, 0x5efe7a80)}},
+     {{TOBN(0x1c894849, 0xcb198ac7), TOBN(0xa884a93d, 0x0f264665),
+       TOBN(0x2da964ef, 0x9b200678), TOBN(0x3c351b87, 0x009834e6)},
+      {TOBN(0xafb2ef9f, 0xe2c4b44b), TOBN(0x580f6c47, 0x3326790c),
+       TOBN(0xb8480521, 0x0b02264a), TOBN(0x8ba6f9e2, 0x42a194e2)}},
+     {{TOBN(0xfc87975f, 0x8fb54738), TOBN(0x35160788, 0x27c3ead3),
+       TOBN(0x834116d2, 0xb74a085a), TOBN(0x53c99a73, 0xa62fe996)},
+      {TOBN(0x87585be0, 0x5b81c51b), TOBN(0x925bafa8, 0xbe0852b7),
+       TOBN(0x76a4fafd, 0xa84d19a7), TOBN(0x39a45982, 0x585206d4)}},
+     {{TOBN(0x499b6ab6, 0x5eb03c0e), TOBN(0xf19b7954, 0x72bc3fde),
+       TOBN(0xa86b5b9c, 0x6e3a80d2), TOBN(0xe4377508, 0x6d42819f)},
+      {TOBN(0xc1663650, 0xbb3ee8a3), TOBN(0x75eb14fc, 0xb132075f),
+       TOBN(0xa8ccc906, 0x7ad834f6), TOBN(0xea6a2474, 0xe6e92ffd)}},
+     {{TOBN(0x9d72fd95, 0x0f8d6758), TOBN(0xcb84e101, 0x408c07dd),
+       TOBN(0xb9114bfd, 0xa5e23221), TOBN(0x358b5fe2, 0xe94e742c)},
+      {TOBN(0x1c0577ec, 0x95f40e75), TOBN(0xf0155451, 0x3d73f3d6),
+       TOBN(0x9d55cd67, 0xbd1b9b66), TOBN(0x63e86e78, 0xaf8d63c7)}},
+     {{TOBN(0x39d934ab, 0xd3c095f1), TOBN(0x04b261be, 0xe4b76d71),
+       TOBN(0x1d2e6970, 0xe73e6984), TOBN(0x879fb23b, 0x5e5fcb11)},
+      {TOBN(0x11506c72, 0xdfd75490), TOBN(0x3a97d085, 0x61bcf1c1),
+       TOBN(0x43201d82, 0xbf5e7007), TOBN(0x7f0ac52f, 0x798232a7)}},
+     {{TOBN(0x2715cbc4, 0x6eb564d4), TOBN(0x8d6c752c, 0x9e570e29),
+       TOBN(0xf80247c8, 0x9ef5fd5d), TOBN(0xc3c66b46, 0xd53eb514)},
+      {TOBN(0x9666b401, 0x0f87de56), TOBN(0xce62c06f, 0xc6c603b5),
+       TOBN(0xae7b4c60, 0x7e4fc942), TOBN(0x38ac0b77, 0x663a9c19)}},
+     {{TOBN(0xcb4d20ee, 0x4b049136), TOBN(0x8b63bf12, 0x356a4613),
+       TOBN(0x1221aef6, 0x70e08128), TOBN(0xe62d8c51, 0x4acb6b16)},
+      {TOBN(0x71f64a67, 0x379e7896), TOBN(0xb25237a2, 0xcafd7fa5),
+       TOBN(0xf077bd98, 0x3841ba6a), TOBN(0xc4ac0244, 0x3cd16e7e)}},
+     {{TOBN(0x548ba869, 0x21fea4ca), TOBN(0xd36d0817, 0xf3dfdac1),
+       TOBN(0x09d8d71f, 0xf4685faf), TOBN(0x8eff66be, 0xc52c459a)},
+      {TOBN(0x182faee7, 0x0b57235e), TOBN(0xee3c39b1, 0x0106712b),
+       TOBN(0x5107331f, 0xc0fcdcb0), TOBN(0x669fb9dc, 0xa51054ba)}},
+     {{TOBN(0xb25101fb, 0x319d7682), TOBN(0xb0293129, 0x0a982fee),
+       TOBN(0x51c1c9b9, 0x0261b344), TOBN(0x0e008c5b, 0xbfd371fa)},
+      {TOBN(0xd866dd1c, 0x0278ca33), TOBN(0x666f76a6, 0xe5aa53b1),
+       TOBN(0xe5cfb779, 0x6013a2cf), TOBN(0x1d3a1aad, 0xa3521836)}},
+     {{TOBN(0xcedd2531, 0x73faa485), TOBN(0xc8ee6c4f, 0xc0a76878),
+       TOBN(0xddbccfc9, 0x2a11667d), TOBN(0x1a418ea9, 0x1c2f695a)},
+      {TOBN(0xdb11bd92, 0x51f73971), TOBN(0x3e4b3c82, 0xda2ed89f),
+       TOBN(0x9a44f3f4, 0xe73e0319), TOBN(0xd1e3de0f, 0x303431af)}},
+     {{TOBN(0x3c5604ff, 0x50f75f9c), TOBN(0x1d8eddf3, 0x7e752b22),
+       TOBN(0x0ef074dd, 0x3c9a1118), TOBN(0xd0ffc172, 0xccb86d7b)},
+      {TOBN(0xabd1ece3, 0x037d90f2), TOBN(0xe3f307d6, 0x6055856c),
+       TOBN(0x422f9328, 0x7e4c6daf), TOBN(0x902aac66, 0x334879a0)}},
+     {{TOBN(0xb6a1e7bf, 0x94cdfade), TOBN(0x6c97e1ed, 0x7fc6d634),
+       TOBN(0x662ad24d, 0xa2fb63f8), TOBN(0xf81be1b9, 0xa5928405)},
+      {TOBN(0x86d765e4, 0xd14b4206), TOBN(0xbecc2e0e, 0x8fa0db65),
+       TOBN(0xa28838e0, 0xb17fc76c), TOBN(0xe49a602a, 0xe37cf24e)}},
+     {{TOBN(0x76b4131a, 0x567193ec), TOBN(0xaf3c305a, 0xe5f6e70b),
+       TOBN(0x9587bd39, 0x031eebdd), TOBN(0x5709def8, 0x71bbe831)},
+      {TOBN(0x57059983, 0x0eb2b669), TOBN(0x4d80ce1b, 0x875b7029),
+       TOBN(0x838a7da8, 0x0364ac16), TOBN(0x2f431d23, 0xbe1c83ab)}},
+     {{TOBN(0xe56812a6, 0xf9294dd3), TOBN(0xb448d01f, 0x9b4b0d77),
+       TOBN(0xf3ae6061, 0x04e8305c), TOBN(0x2bead645, 0x94d8c63e)},
+      {TOBN(0x0a85434d, 0x84fd8b07), TOBN(0x537b983f, 0xf7a9dee5),
+       TOBN(0xedcc5f18, 0xef55bd85), TOBN(0x2041af62, 0x21c6cf8b)}},
+     {{TOBN(0x8e52874c, 0xb940c71e), TOBN(0x211935a9, 0xdb5f4b3a),
+       TOBN(0x94350492, 0x301b1dc3), TOBN(0x33d2646d, 0x29958620)},
+      {TOBN(0x16b0d64b, 0xef911404), TOBN(0x9d1f25ea, 0x9a3c5ef4),
+       TOBN(0x20f200eb, 0x4a352c78), TOBN(0x43929f2c, 0x4bd0b428)}},
+     {{TOBN(0xa5656667, 0xc7196e29), TOBN(0x7992c2f0, 0x9391be48),
+       TOBN(0xaaa97cbd, 0x9ee0cd6e), TOBN(0x51b0310c, 0x3dc8c9bf)},
+      {TOBN(0x237f8acf, 0xdd9f22cb), TOBN(0xbb1d81a1, 0xb585d584),
+       TOBN(0x8d5d85f5, 0x8c416388), TOBN(0x0d6e5a5a, 0x42fe474f)}},
+     {{TOBN(0xe7812766, 0x38235d4e), TOBN(0x1c62bd67, 0x496e3298),
+       TOBN(0x8378660c, 0x3f175bc8), TOBN(0x4d04e189, 0x17afdd4d)},
+      {TOBN(0x32a81601, 0x85a8068c), TOBN(0xdb58e4e1, 0x92b29a85),
+       TOBN(0xe8a65b86, 0xc70d8a3b), TOBN(0x5f0e6f4e, 0x98a0403b)}},
+     {{TOBN(0x08129684, 0x69ed2370), TOBN(0x34dc30bd, 0x0871ee26),
+       TOBN(0x3a5ce948, 0x7c9c5b05), TOBN(0x7d487b80, 0x43a90c87)},
+      {TOBN(0x4089ba37, 0xdd0e7179), TOBN(0x45f80191, 0xb4041811),
+       TOBN(0x1c3e1058, 0x98747ba5), TOBN(0x98c4e13a, 0x6e1ae592)}},
+     {{TOBN(0xd44636e6, 0xe82c9f9e), TOBN(0x711db87c, 0xc33a1043),
+       TOBN(0x6f431263, 0xaa8aec05), TOBN(0x43ff120d, 0x2744a4aa)},
+      {TOBN(0xd3bd892f, 0xae77779b), TOBN(0xf0fe0cc9, 0x8cdc9f82),
+       TOBN(0xca5f7fe6, 0xf1c5b1bc), TOBN(0xcc63a682, 0x44929a72)}},
+     {{TOBN(0xc7eaba0c, 0x09dbe19a), TOBN(0x2f3585ad, 0x6b5c73c2),
+       TOBN(0x8ab8924b, 0x0ae50c30), TOBN(0x17fcd27a, 0x638b30ba)},
+      {TOBN(0xaf414d34, 0x10b3d5a5), TOBN(0x09c107d2, 0x2a9accf1),
+       TOBN(0x15dac49f, 0x946a6242), TOBN(0xaec3df2a, 0xd707d642)}},
+     {{TOBN(0x2c2492b7, 0x3f894ae0), TOBN(0xf59df3e5, 0xb75f18ce),
+       TOBN(0x7cb740d2, 0x8f53cad0), TOBN(0x3eb585fb, 0xc4f01294)},
+      {TOBN(0x17da0c86, 0x32c7f717), TOBN(0xeb8c795b, 0xaf943f4c),
+       TOBN(0x4ee23fb5, 0xf67c51d2), TOBN(0xef187575, 0x68889949)}},
+     {{TOBN(0xa6b4bdb2, 0x0389168b), TOBN(0xc4ecd258, 0xea577d03),
+       TOBN(0x3a63782b, 0x55743082), TOBN(0x6f678f4c, 0xc72f08cd)},
+      {TOBN(0x553511cf, 0x65e58dd8), TOBN(0xd53b4e3e, 0xd402c0cd),
+       TOBN(0x37de3e29, 0xa037c14c), TOBN(0x86b6c516, 0xc05712aa)}},
+     {{TOBN(0x2834da3e, 0xb38dff6f), TOBN(0xbe012c52, 0xea636be8),
+       TOBN(0x292d238c, 0x61dd37f8), TOBN(0x0e54523f, 0x8f8142db)},
+      {TOBN(0xe31eb436, 0x036a05d8), TOBN(0x83e3cdff, 0x1e93c0ff),
+       TOBN(0x3fd2fe0f, 0x50821ddf), TOBN(0xc8e19b0d, 0xff9eb33b)}},
+     {{TOBN(0xc8cc943f, 0xb569a5fe), TOBN(0xad0090d4, 0xd4342d75),
+       TOBN(0x82090b4b, 0xcaeca000), TOBN(0xca39687f, 0x1bd410eb)},
+      {TOBN(0xe7bb0df7, 0x65959d77), TOBN(0x39d78218, 0x9c964999),
+       TOBN(0xd87f62e8, 0xb2415451), TOBN(0xe5efb774, 0xbed76108)}},
+     {{TOBN(0x3ea011a4, 0xe822f0d0), TOBN(0xbc647ad1, 0x5a8704f8),
+       TOBN(0xbb315b35, 0x50c6820f), TOBN(0x863dec3d, 0xb7e76bec)},
+      {TOBN(0x01ff5d3a, 0xf017bfc7), TOBN(0x20054439, 0x976b8229),
+       TOBN(0x067fca37, 0x0bbd0d3b), TOBN(0xf63dde64, 0x7f5e3d0f)}},
+     {{TOBN(0x22dbefb3, 0x2a4c94e9), TOBN(0xafbff0fe, 0x96f8278a),
+       TOBN(0x80aea0b1, 0x3503793d), TOBN(0xb2238029, 0x5f06cd29)},
+      {TOBN(0x65703e57, 0x8ec3feca), TOBN(0x06c38314, 0x393e7053),
+       TOBN(0xa0b751eb, 0x7c6734c4), TOBN(0xd2e8a435, 0xc59f0f1e)}},
+     {{TOBN(0x147d9052, 0x5e9ca895), TOBN(0x2f4dd31e, 0x972072df),
+       TOBN(0xa16fda8e, 0xe6c6755c), TOBN(0xc66826ff, 0xcf196558)},
+      {TOBN(0x1f1a76a3, 0x0cf43895), TOBN(0xa9d604e0, 0x83c3097b),
+       TOBN(0xe1908309, 0x66390e0e), TOBN(0xa50bf753, 0xb3c85eff)}},
+     {{TOBN(0x0696bdde, 0xf6a70251), TOBN(0x548b801b, 0x3c6ab16a),
+       TOBN(0x37fcf704, 0xa4d08762), TOBN(0x090b3def, 0xdff76c4e)},
+      {TOBN(0x87e8cb89, 0x69cb9158), TOBN(0x44a90744, 0x995ece43),
+       TOBN(0xf85395f4, 0x0ad9fbf5), TOBN(0x49b0f6c5, 0x4fb0c82d)}},
+     {{TOBN(0x75d9bc15, 0xadf7cccf), TOBN(0x81a3e5d6, 0xdfa1e1b0),
+       TOBN(0x8c39e444, 0x249bc17e), TOBN(0xf37dccb2, 0x8ea7fd43)},
+      {TOBN(0xda654873, 0x907fba12), TOBN(0x35daa6da, 0x4a372904),
+       TOBN(0x0564cfc6, 0x6283a6c5), TOBN(0xd09fa4f6, 0x4a9395bf)}},
+     {{TOBN(0x688e9ec9, 0xaeb19a36), TOBN(0xd913f1ce, 0xc7bfbfb4),
+       TOBN(0x797b9a3c, 0x61c2faa6), TOBN(0x2f979bec, 0x6a0a9c12)},
+      {TOBN(0xb5969d0f, 0x359679ec), TOBN(0xebcf523d, 0x079b0460),
+       TOBN(0xfd6b0008, 0x10fab870), TOBN(0x3f2edcda, 0x9373a39c)}},
+     {{TOBN(0x0d64f9a7, 0x6f568431), TOBN(0xf848c27c, 0x02f8898c),
+       TOBN(0xf418ade1, 0x260b5bd5), TOBN(0xc1f3e323, 0x6973dee8)},
+      {TOBN(0x46e9319c, 0x26c185dd), TOBN(0x6d85b7d8, 0x546f0ac4),
+       TOBN(0x427965f2, 0x247f9d57), TOBN(0xb519b636, 0xb0035f48)}},
+     {{TOBN(0x6b6163a9, 0xab87d59c), TOBN(0xff9f58c3, 0x39caaa11),
+       TOBN(0x4ac39cde, 0x3177387b), TOBN(0x5f6557c2, 0x873e77f9)},
+      {TOBN(0x67504006, 0x36a83041), TOBN(0x9b1c96ca, 0x75ef196c),
+       TOBN(0xf34283de, 0xb08c7940), TOBN(0x7ea09644, 0x1128c316)}},
+     {{TOBN(0xb510b3b5, 0x6aa39dff), TOBN(0x59b43da2, 0x9f8e4d8c),
+       TOBN(0xa8ce31fd, 0x9e4c4b9f), TOBN(0x0e20be26, 0xc1303c01)},
+      {TOBN(0x18187182, 0xe8ee47c9), TOBN(0xd9687cdb, 0x7db98101),
+       TOBN(0x7a520e4d, 0xa1e14ff6), TOBN(0x429808ba, 0x8836d572)}},
+     {{TOBN(0xa37ca60d, 0x4944b663), TOBN(0xf901f7a9, 0xa3f91ae5),
+       TOBN(0xe4e3e76e, 0x9e36e3b1), TOBN(0x9aa219cf, 0x29d93250)},
+      {TOBN(0x347fe275, 0x056a2512), TOBN(0xa4d643d9, 0xde65d95c),
+       TOBN(0x9669d396, 0x699fc3ed), TOBN(0xb598dee2, 0xcf8c6bbe)}},
+     {{TOBN(0x682ac1e5, 0xdda9e5c6), TOBN(0x4e0d3c72, 0xcaa9fc95),
+       TOBN(0x17faaade, 0x772bea44), TOBN(0x5ef8428c, 0xab0009c8)},
+      {TOBN(0xcc4ce47a, 0x460ff016), TOBN(0xda6d12bf, 0x725281cb),
+       TOBN(0x44c67848, 0x0223aad2), TOBN(0x6e342afa, 0x36256e28)}},
+     {{TOBN(0x1400bb0b, 0x93a37c04), TOBN(0x62b1bc9b, 0xdd10bd96),
+       TOBN(0x7251adeb, 0x0dac46b7), TOBN(0x7d33b92e, 0x7be4ef51)},
+      {TOBN(0x28b2a94b, 0xe61fa29a), TOBN(0x4b2be13f, 0x06422233),
+       TOBN(0x36d6d062, 0x330d8d37), TOBN(0x5ef80e1e, 0xb28ca005)}},
+     {{TOBN(0x174d4699, 0x6d16768e), TOBN(0x9fc4ff6a, 0x628bf217),
+       TOBN(0x77705a94, 0x154e490d), TOBN(0x9d96dd28, 0x8d2d997a)},
+      {TOBN(0x77e2d9d8, 0xce5d72c4), TOBN(0x9d06c5a4, 0xc11c714f),
+       TOBN(0x02aa5136, 0x79e4a03e), TOBN(0x1386b3c2, 0x030ff28b)}},
+     {{TOBN(0xfe82e8a6, 0xfb283f61), TOBN(0x7df203e5, 0xf3abc3fb),
+       TOBN(0xeec7c351, 0x3a4d3622), TOBN(0xf7d17dbf, 0xdf762761)},
+      {TOBN(0xc3956e44, 0x522055f0), TOBN(0xde3012db, 0x8fa748db),
+       TOBN(0xca9fcb63, 0xbf1dcc14), TOBN(0xa56d9dcf, 0xbe4e2f3a)}},
+     {{TOBN(0xb86186b6, 0x8bcec9c2), TOBN(0x7cf24df9, 0x680b9f06),
+       TOBN(0xc46b45ea, 0xc0d29281), TOBN(0xfff42bc5, 0x07b10e12)},
+      {TOBN(0x12263c40, 0x4d289427), TOBN(0x3d5f1899, 0xb4848ec4),
+       TOBN(0x11f97010, 0xd040800c), TOBN(0xb4c5f529, 0x300feb20)}},
+     {{TOBN(0xcc543f8f, 0xde94fdcb), TOBN(0xe96af739, 0xc7c2f05e),
+       TOBN(0xaa5e0036, 0x882692e1), TOBN(0x09c75b68, 0x950d4ae9)},
+      {TOBN(0x62f63df2, 0xb5932a7a), TOBN(0x2658252e, 0xde0979ad),
+       TOBN(0x2a19343f, 0xb5e69631), TOBN(0x718c7501, 0x525b666b)}},
+     {{TOBN(0x26a42d69, 0xea40dc3a), TOBN(0xdc84ad22, 0xaecc018f),
+       TOBN(0x25c36c7b, 0x3270f04a), TOBN(0x46ba6d47, 0x50fa72ed)},
+      {TOBN(0x6c37d1c5, 0x93e58a8e), TOBN(0xa2394731, 0x120c088c),
+       TOBN(0xc3be4263, 0xcb6e86da), TOBN(0x2c417d36, 0x7126d038)}},
+     {{TOBN(0x5b70f9c5, 0x8b6f8efa), TOBN(0x671a2faa, 0x37718536),
+       TOBN(0xd3ced3c6, 0xb539c92b), TOBN(0xe56f1bd9, 0xa31203c2)},
+      {TOBN(0x8b096ec4, 0x9ff3c8eb), TOBN(0x2deae432, 0x43491cea),
+       TOBN(0x2465c6eb, 0x17943794), TOBN(0x5d267e66, 0x20586843)}},
+     {{TOBN(0x9d3d116d, 0xb07159d0), TOBN(0xae07a67f, 0xc1896210),
+       TOBN(0x8fc84d87, 0xbb961579), TOBN(0x30009e49, 0x1c1f8dd6)},
+      {TOBN(0x8a8caf22, 0xe3132819), TOBN(0xcffa197c, 0xf23ab4ff),
+       TOBN(0x58103a44, 0x205dd687), TOBN(0x57b796c3, 0x0ded67a2)}},
+     {{TOBN(0x0b9c3a6c, 0xa1779ad7), TOBN(0xa33cfe2e, 0x357c09c5),
+       TOBN(0x2ea29315, 0x3db4a57e), TOBN(0x91959695, 0x8ebeb52e)},
+      {TOBN(0x118db9a6, 0xe546c879), TOBN(0x8e996df4, 0x6295c8d6),
+       TOBN(0xdd990484, 0x55ec806b), TOBN(0x24f291ca, 0x165c1035)}},
+     {{TOBN(0xcca523bb, 0x440e2229), TOBN(0x324673a2, 0x73ef4d04),
+       TOBN(0xaf3adf34, 0x3e11ec39), TOBN(0x6136d7f1, 0xdc5968d3)},
+      {TOBN(0x7a7b2899, 0xb053a927), TOBN(0x3eaa2661, 0xae067ecd),
+       TOBN(0x8549b9c8, 0x02779cd9), TOBN(0x061d7940, 0xc53385ea)}},
+     {{TOBN(0x3e0ba883, 0xf06d18bd), TOBN(0x4ba6de53, 0xb2700843),
+       TOBN(0xb966b668, 0x591a9e4d), TOBN(0x93f67567, 0x7f4fa0ed)},
+      {TOBN(0x5a02711b, 0x4347237b), TOBN(0xbc041e2f, 0xe794608e),
+       TOBN(0x55af10f5, 0x70f73d8c), TOBN(0xd2d4d4f7, 0xbb7564f7)}},
+     {{TOBN(0xd7d27a89, 0xb3e93ce7), TOBN(0xf7b5a875, 0x5d3a2c1b),
+       TOBN(0xb29e68a0, 0x255b218a), TOBN(0xb533837e, 0x8af76754)},
+      {TOBN(0xd1b05a73, 0x579fab2e), TOBN(0xb41055a1, 0xecd74385),
+       TOBN(0xb2369274, 0x445e9115), TOBN(0x2972a7c4, 0xf520274e)}},
+     {{TOBN(0x6c08334e, 0xf678e68a), TOBN(0x4e4160f0, 0x99b057ed),
+       TOBN(0x3cfe11b8, 0x52ccb69a), TOBN(0x2fd1823a, 0x21c8f772)},
+      {TOBN(0xdf7f072f, 0x3298f055), TOBN(0x8c0566f9, 0xfec74a6e),
+       TOBN(0xe549e019, 0x5bb4d041), TOBN(0x7c3930ba, 0x9208d850)}},
+     {{TOBN(0xe07141fc, 0xaaa2902b), TOBN(0x539ad799, 0xe4f69ad3),
+       TOBN(0xa6453f94, 0x813f9ffd), TOBN(0xc58d3c48, 0x375bc2f7)},
+      {TOBN(0xb3326fad, 0x5dc64e96), TOBN(0x3aafcaa9, 0xb240e354),
+       TOBN(0x1d1b0903, 0xaca1e7a9), TOBN(0x4ceb9767, 0x1211b8a0)}},
+     {{TOBN(0xeca83e49, 0xe32a858e), TOBN(0x4c32892e, 0xae907bad),
+       TOBN(0xd5b42ab6, 0x2eb9b494), TOBN(0x7fde3ee2, 0x1eabae1b)},
+      {TOBN(0x13b5ab09, 0xcaf54957), TOBN(0xbfb028be, 0xe5f5d5d5),
+       TOBN(0x928a0650, 0x2003e2c0), TOBN(0x90793aac, 0x67476843)}},
+     {{TOBN(0x5e942e79, 0xc81710a0), TOBN(0x557e4a36, 0x27ccadd4),
+       TOBN(0x72a2bc56, 0x4bcf6d0c), TOBN(0x09ee5f43, 0x26d7b80c)},
+      {TOBN(0x6b70dbe9, 0xd4292f19), TOBN(0x56f74c26, 0x63f16b18),
+       TOBN(0xc23db0f7, 0x35fbb42a), TOBN(0xb606bdf6, 0x6ae10040)}},
+     {{TOBN(0x1eb15d4d, 0x044573ac), TOBN(0x7dc3cf86, 0x556b0ba4),
+       TOBN(0x97af9a33, 0xc60df6f7), TOBN(0x0b1ef85c, 0xa716ce8c)},
+      {TOBN(0x2922f884, 0xc96958be), TOBN(0x7c32fa94, 0x35690963),
+       TOBN(0x2d7f667c, 0xeaa00061), TOBN(0xeaaf7c17, 0x3547365c)}},
+     {{TOBN(0x1eb4de46, 0x87032d58), TOBN(0xc54f3d83, 0x5e2c79e0),
+       TOBN(0x07818df4, 0x5d04ef23), TOBN(0x55faa9c8, 0x673d41b4)},
+      {TOBN(0xced64f6f, 0x89b95355), TOBN(0x4860d2ea, 0xb7415c84),
+       TOBN(0x5fdb9bd2, 0x050ebad3), TOBN(0xdb53e0cc, 0x6685a5bf)}},
+     {{TOBN(0xb830c031, 0x9feb6593), TOBN(0xdd87f310, 0x6accff17),
+       TOBN(0x2303ebab, 0x9f555c10), TOBN(0x94603695, 0x287e7065)},
+      {TOBN(0xf88311c3, 0x2e83358c), TOBN(0x508dd9b4, 0xeefb0178),
+       TOBN(0x7ca23706, 0x2dba8652), TOBN(0x62aac5a3, 0x0047abe5)}},
+     {{TOBN(0x9a61d2a0, 0x8b1ea7b3), TOBN(0xd495ab63, 0xae8b1485),
+       TOBN(0x38740f84, 0x87052f99), TOBN(0x178ebe5b, 0xb2974eea)},
+      {TOBN(0x030bbcca, 0x5b36d17f), TOBN(0xb5e4cce3, 0xaaf86eea),
+       TOBN(0xb51a0220, 0x68f8e9e0), TOBN(0xa4348796, 0x09eb3e75)}},
+     {{TOBN(0xbe592309, 0xeef1a752), TOBN(0x5d7162d7, 0x6f2aa1ed),
+       TOBN(0xaebfb5ed, 0x0f007dd2), TOBN(0x255e14b2, 0xc89edd22)},
+      {TOBN(0xba85e072, 0x0303b697), TOBN(0xc5d17e25, 0xf05720ff),
+       TOBN(0x02b58d6e, 0x5128ebb6), TOBN(0x2c80242d, 0xd754e113)}},
+     {{TOBN(0x919fca5f, 0xabfae1ca), TOBN(0x937afaac, 0x1a21459b),
+       TOBN(0x9e0ca91c, 0x1f66a4d2), TOBN(0x194cc7f3, 0x23ec1331)},
+      {TOBN(0xad25143a, 0x8aa11690), TOBN(0xbe40ad8d, 0x09b59e08),
+       TOBN(0x37d60d9b, 0xe750860a), TOBN(0x6c53b008, 0xc6bf434c)}},
+     {{TOBN(0xb572415d, 0x1356eb80), TOBN(0xb8bf9da3, 0x9578ded8),
+       TOBN(0x22658e36, 0x5e8fb38b), TOBN(0x9b70ce22, 0x5af8cb22)},
+      {TOBN(0x7c00018a, 0x829a8180), TOBN(0x84329f93, 0xb81ed295),
+       TOBN(0x7c343ea2, 0x5f3cea83), TOBN(0x38f8655f, 0x67586536)}},
+     {{TOBN(0xa661a0d0, 0x1d3ec517), TOBN(0x98744652, 0x512321ae),
+       TOBN(0x084ca591, 0xeca92598), TOBN(0xa9bb9dc9, 0x1dcb3feb)},
+      {TOBN(0x14c54355, 0x78b4c240), TOBN(0x5ed62a3b, 0x610cafdc),
+       TOBN(0x07512f37, 0x1b38846b), TOBN(0x571bb70a, 0xb0e38161)}},
+     {{TOBN(0xb556b95b, 0x2da705d2), TOBN(0x3ef8ada6, 0xb1a08f98),
+       TOBN(0x85302ca7, 0xddecfbe5), TOBN(0x0e530573, 0x943105cd)},
+      {TOBN(0x60554d55, 0x21a9255d), TOBN(0x63a32fa1, 0xf2f3802a),
+       TOBN(0x35c8c5b0, 0xcd477875), TOBN(0x97f458ea, 0x6ad42da1)}},
+     {{TOBN(0x832d7080, 0xeb6b242d), TOBN(0xd30bd023, 0x3b71e246),
+       TOBN(0x7027991b, 0xbe31139d), TOBN(0x68797e91, 0x462e4e53)},
+      {TOBN(0x423fe20a, 0x6b4e185a), TOBN(0x82f2c67e, 0x42d9b707),
+       TOBN(0x25c81768, 0x4cf7811b), TOBN(0xbd53005e, 0x045bb95d)}}},
+    {{{TOBN(0xe5f649be, 0x9d8e68fd), TOBN(0xdb0f0533, 0x1b044320),
+       TOBN(0xf6fde9b3, 0xe0c33398), TOBN(0x92f4209b, 0x66c8cfae)},
+      {TOBN(0xe9d1afcc, 0x1a739d4b), TOBN(0x09aea75f, 0xa28ab8de),
+       TOBN(0x14375fb5, 0xeac6f1d0), TOBN(0x6420b560, 0x708f7aa5)}},
+     {{TOBN(0x9eae499c, 0x6254dc41), TOBN(0x7e293924, 0x7a837e7e),
+       TOBN(0x74aec08c, 0x090524a7), TOBN(0xf82b9219, 0x8d6f55f2)},
+      {TOBN(0x493c962e, 0x1402cec5), TOBN(0x9f17ca17, 0xfa2f30e7),
+       TOBN(0xbcd783e8, 0xe9b879cb), TOBN(0xea3d8c14, 0x5a6f145f)}},
+     {{TOBN(0xdede15e7, 0x5e0dee6e), TOBN(0x74f24872, 0xdc628aa2),
+       TOBN(0xd3e9c4fe, 0x7861bb93), TOBN(0x56d4822a, 0x6187b2e0)},
+      {TOBN(0xb66417cf, 0xc59826f9), TOBN(0xca260969, 0x2408169e),
+       TOBN(0xedf69d06, 0xc79ef885), TOBN(0x00031f8a, 0xdc7d138f)}},
+     {{TOBN(0x103c46e6, 0x0ebcf726), TOBN(0x4482b831, 0x6231470e),
+       TOBN(0x6f6dfaca, 0x487c2109), TOBN(0x2e0ace97, 0x62e666ef)},
+      {TOBN(0x3246a9d3, 0x1f8d1f42), TOBN(0x1b1e83f1, 0x574944d2),
+       TOBN(0x13dfa63a, 0xa57f334b), TOBN(0x0cf8daed, 0x9f025d81)}},
+     {{TOBN(0x30d78ea8, 0x00ee11c1), TOBN(0xeb053cd4, 0xb5e3dd75),
+       TOBN(0x9b65b13e, 0xd58c43c5), TOBN(0xc3ad49bd, 0xbd151663)},
+      {TOBN(0x99fd8e41, 0xb6427990), TOBN(0x12cf15bd, 0x707eae1e),
+       TOBN(0x29ad4f1b, 0x1aabb71e), TOBN(0x5143e74d, 0x07545d0e)}},
+     {{TOBN(0x30266336, 0xc88bdee1), TOBN(0x25f29306, 0x5876767c),
+       TOBN(0x9c078571, 0xc6731996), TOBN(0xc88690b2, 0xed552951)},
+      {TOBN(0x274f2c2d, 0x852705b4), TOBN(0xb0bf8d44, 0x4e09552d),
+       TOBN(0x7628beeb, 0x986575d1), TOBN(0x407be238, 0x7f864651)}},
+     {{TOBN(0x0e5e3049, 0xa639fc6b), TOBN(0xe75c35d9, 0x86003625),
+       TOBN(0x0cf35bd8, 0x5dcc1646), TOBN(0x8bcaced2, 0x6c26273a)},
+      {TOBN(0xe22ecf1d, 0xb5536742), TOBN(0x013dd897, 0x1a9e068b),
+       TOBN(0x17f411cb, 0x8a7909c5), TOBN(0x5757ac98, 0x861dd506)}},
+     {{TOBN(0x85de1f0d, 0x1e935abb), TOBN(0xdefd10b4, 0x154de37a),
+       TOBN(0xb8d9e392, 0x369cebb5), TOBN(0x54d5ef9b, 0x761324be)},
+      {TOBN(0x4d6341ba, 0x74f17e26), TOBN(0xc0a0e3c8, 0x78c1dde4),
+       TOBN(0xa6d77581, 0x87d918fd), TOBN(0x66876015, 0x02ca3a13)}},
+     {{TOBN(0xc7313e9c, 0xf36658f0), TOBN(0xc433ef1c, 0x71f8057e),
+       TOBN(0x85326246, 0x1b6a835a), TOBN(0xc8f05398, 0x7c86394c)},
+      {TOBN(0xff398cdf, 0xe983c4a1), TOBN(0xbf5e8162, 0x03b7b931),
+       TOBN(0x93193c46, 0xb7b9045b), TOBN(0x1e4ebf5d, 0xa4a6e46b)}},
+     {{TOBN(0xf9942a60, 0x43a24fe7), TOBN(0x29c1191e, 0xffb3492b),
+       TOBN(0x9f662449, 0x902fde05), TOBN(0xc792a7ac, 0x6713c32d)},
+      {TOBN(0x2fd88ad8, 0xb737982c), TOBN(0x7e3a0319, 0xa21e60e3),
+       TOBN(0x09b0de44, 0x7383591a), TOBN(0x6df141ee, 0x8310a456)}},
+     {{TOBN(0xaec1a039, 0xe6d6f471), TOBN(0x14b2ba0f, 0x1198d12e),
+       TOBN(0xebc1a160, 0x3aeee5ac), TOBN(0x401f4836, 0xe0b964ce)},
+      {TOBN(0x2ee43796, 0x4fd03f66), TOBN(0x3fdb4e49, 0xdd8f3f12),
+       TOBN(0x6ef267f6, 0x29380f18), TOBN(0x3e8e9670, 0x8da64d16)}},
+     {{TOBN(0xbc19180c, 0x207674f1), TOBN(0x112e09a7, 0x33ae8fdb),
+       TOBN(0x99667554, 0x6aaeb71e), TOBN(0x79432af1, 0xe101b1c7)},
+      {TOBN(0xd5eb558f, 0xde2ddec6), TOBN(0x81392d1f, 0x5357753f),
+       TOBN(0xa7a76b97, 0x3ae1158a), TOBN(0x416fbbff, 0x4a899991)}},
+     {{TOBN(0x9e65fdfd, 0x0d4a9dcf), TOBN(0x7bc29e48, 0x944ddf12),
+       TOBN(0xbc1a92d9, 0x3c856866), TOBN(0x273c6905, 0x6e98dfe2)},
+      {TOBN(0x69fce418, 0xcdfaa6b8), TOBN(0x606bd823, 0x5061c69f),
+       TOBN(0x42d495a0, 0x6af75e27), TOBN(0x8ed3d505, 0x6d873a1f)}},
+     {{TOBN(0xaf552841, 0x6ab25b6a), TOBN(0xc6c0ffc7, 0x2b1a4523),
+       TOBN(0xab18827b, 0x21c99e03), TOBN(0x060e8648, 0x9034691b)},
+      {TOBN(0x5207f90f, 0x93c7f398), TOBN(0x9f4a96cb, 0x82f8d10b),
+       TOBN(0xdd71cd79, 0x3ad0f9e3), TOBN(0x84f435d2, 0xfc3a54f5)}},
+     {{TOBN(0x4b03c55b, 0x8e33787f), TOBN(0xef42f975, 0xa6384673),
+       TOBN(0xff7304f7, 0x5051b9f0), TOBN(0x18aca1dc, 0x741c87c2)},
+      {TOBN(0x56f120a7, 0x2d4bfe80), TOBN(0xfd823b3d, 0x053e732c),
+       TOBN(0x11bccfe4, 0x7537ca16), TOBN(0xdf6c9c74, 0x1b5a996b)}},
+     {{TOBN(0xee7332c7, 0x904fc3fa), TOBN(0x14a23f45, 0xc7e3636a),
+       TOBN(0xc38659c3, 0xf091d9aa), TOBN(0x4a995e5d, 0xb12d8540)},
+      {TOBN(0x20a53bec, 0xf3a5598a), TOBN(0x56534b17, 0xb1eaa995),
+       TOBN(0x9ed3dca4, 0xbf04e03c), TOBN(0x716c563a, 0xd8d56268)}},
+     {{TOBN(0x27ba77a4, 0x1d6178e7), TOBN(0xe4c80c40, 0x68a1ff8e),
+       TOBN(0x75011099, 0x0a13f63d), TOBN(0x7bf33521, 0xa61d46f3)},
+      {TOBN(0x0aff218e, 0x10b365bb), TOBN(0x81021804, 0x0fd7ea75),
+       TOBN(0x05a3fd8a, 0xa4b3a925), TOBN(0xb829e75f, 0x9b3db4e6)}},
+     {{TOBN(0x6bdc75a5, 0x4d53e5fb), TOBN(0x04a5dc02, 0xd52717e3),
+       TOBN(0x86af502f, 0xe9a42ec2), TOBN(0x8867e8fb, 0x2630e382)},
+      {TOBN(0xbf845c6e, 0xbec9889b), TOBN(0x54f491f2, 0xcb47c98d),
+       TOBN(0xa3091fba, 0x790c2a12), TOBN(0xd7f6fd78, 0xc20f708b)}},
+     {{TOBN(0xa569ac30, 0xacde5e17), TOBN(0xd0f996d0, 0x6852b4d7),
+       TOBN(0xe51d4bb5, 0x4609ae54), TOBN(0x3fa37d17, 0x0daed061)},
+      {TOBN(0x62a88684, 0x34b8fb41), TOBN(0x99a2acbd, 0x9efb64f1),
+       TOBN(0xb75c1a5e, 0x6448e1f2), TOBN(0xfa99951a, 0x42b5a069)}},
+     {{TOBN(0x6d956e89, 0x2f3b26e7), TOBN(0xf4709860, 0xda875247),
+       TOBN(0x3ad15179, 0x2482dda3), TOBN(0xd64110e3, 0x017d82f0)},
+      {TOBN(0x14928d2c, 0xfad414e4), TOBN(0x2b155f58, 0x2ed02b24),
+       TOBN(0x481a141b, 0xcb821bf1), TOBN(0x12e3c770, 0x4f81f5da)}},
+     {{TOBN(0xe49c5de5, 0x9fff8381), TOBN(0x11053232, 0x5bbec894),
+       TOBN(0xa0d051cc, 0x454d88c4), TOBN(0x4f6db89c, 0x1f8e531b)},
+      {TOBN(0x34fe3fd6, 0xca563a44), TOBN(0x7f5c2215, 0x58da8ab9),
+       TOBN(0x8445016d, 0x9474f0a1), TOBN(0x17d34d61, 0xcb7d8a0a)}},
+     {{TOBN(0x8e9d3910, 0x1c474019), TOBN(0xcaff2629, 0xd52ceefb),
+       TOBN(0xf9cf3e32, 0xc1622c2b), TOBN(0xd4b95e3c, 0xe9071a05)},
+      {TOBN(0xfbbca61f, 0x1594438c), TOBN(0x1eb6e6a6, 0x04aadedf),
+       TOBN(0x853027f4, 0x68e14940), TOBN(0x221d322a, 0xdfabda9c)}},
+     {{TOBN(0xed8ea9f6, 0xb7cb179a), TOBN(0xdc7b764d, 0xb7934dcc),
+       TOBN(0xfcb13940, 0x5e09180d), TOBN(0x6629a6bf, 0xb47dc2dd)},
+      {TOBN(0xbfc55e4e, 0x9f5a915e), TOBN(0xb1db9d37, 0x6204441e),
+       TOBN(0xf82d68cf, 0x930c5f53), TOBN(0x17d3a142, 0xcbb605b1)}},
+     {{TOBN(0xdd5944ea, 0x308780f2), TOBN(0xdc8de761, 0x3845f5e4),
+       TOBN(0x6beaba7d, 0x7624d7a3), TOBN(0x1e709afd, 0x304df11e)},
+      {TOBN(0x95364376, 0x02170456), TOBN(0xbf204b3a, 0xc8f94b64),
+       TOBN(0x4e53af7c, 0x5680ca68), TOBN(0x0526074a, 0xe0c67574)}},
+     {{TOBN(0x95d8cef8, 0xecd92af6), TOBN(0xe6b9fa7a, 0x6cd1745a),
+       TOBN(0x3d546d3d, 0xa325c3e4), TOBN(0x1f57691d, 0x9ae93aae)},
+      {TOBN(0xe891f3fe, 0x9d2e1a33), TOBN(0xd430093f, 0xac063d35),
+       TOBN(0xeda59b12, 0x5513a327), TOBN(0xdc2134f3, 0x5536f18f)}},
+     {{TOBN(0xaa51fe2c, 0x5c210286), TOBN(0x3f68aaee, 0x1cab658c),
+       TOBN(0x5a23a00b, 0xf9357292), TOBN(0x9a626f39, 0x7efdabed)},
+      {TOBN(0xfe2b3bf3, 0x199d78e3), TOBN(0xb7a2af77, 0x71bbc345),
+       TOBN(0x3d19827a, 0x1e59802c), TOBN(0x823bbc15, 0xb487a51c)}},
+     {{TOBN(0x856139f2, 0x99d0a422), TOBN(0x9ac3df65, 0xf456c6fb),
+       TOBN(0xaddf65c6, 0x701f8bd6), TOBN(0x149f321e, 0x3758df87)},
+      {TOBN(0xb1ecf714, 0x721b7eba), TOBN(0xe17df098, 0x31a3312a),
+       TOBN(0xdb2fd6ec, 0xd5c4d581), TOBN(0xfd02996f, 0x8fcea1b3)}},
+     {{TOBN(0xe29fa63e, 0x7882f14f), TOBN(0xc9f6dc35, 0x07c6cadc),
+       TOBN(0x46f22d6f, 0xb882bed0), TOBN(0x1a45755b, 0xd118e52c)},
+      {TOBN(0x9f2c7c27, 0x7c4608cf), TOBN(0x7ccbdf32, 0x568012c2),
+       TOBN(0xfcb0aedd, 0x61729b0e), TOBN(0x7ca2ca9e, 0xf7d75dbf)}},
+     {{TOBN(0xf58fecb1, 0x6f640f62), TOBN(0xe274b92b, 0x39f51946),
+       TOBN(0x7f4dfc04, 0x6288af44), TOBN(0x0a91f32a, 0xeac329e5)},
+      {TOBN(0x43ad274b, 0xd6aaba31), TOBN(0x719a1640, 0x0f6884f9),
+       TOBN(0x685d29f6, 0xdaf91e20), TOBN(0x5ec1cc33, 0x27e49d52)}},
+     {{TOBN(0x38f4de96, 0x3b54a059), TOBN(0x0e0015e5, 0xefbcfdb3),
+       TOBN(0x177d23d9, 0x4dbb8da6), TOBN(0x98724aa2, 0x97a617ad)},
+      {TOBN(0x30f0885b, 0xfdb6558e), TOBN(0xf9f7a28a, 0xc7899a96),
+       TOBN(0xd2ae8ac8, 0x872dc112), TOBN(0xfa0642ca, 0x73c3c459)}},
+     {{TOBN(0x15296981, 0xe7dfc8d6), TOBN(0x67cd4450, 0x1fb5b94a),
+       TOBN(0x0ec71cf1, 0x0eddfd37), TOBN(0xc7e5eeb3, 0x9a8eddc7)},
+      {TOBN(0x02ac8e3d, 0x81d95028), TOBN(0x0088f172, 0x70b0e35d),
+       TOBN(0xec041fab, 0xe1881fe3), TOBN(0x62cf71b8, 0xd99e7faa)}},
+     {{TOBN(0x5043dea7, 0xe0f222c2), TOBN(0x309d42ac, 0x72e65142),
+       TOBN(0x94fe9ddd, 0x9216cd30), TOBN(0xd6539c7d, 0x0f87feec)},
+      {TOBN(0x03c5a57c, 0x432ac7d7), TOBN(0x72692cf0, 0x327fda10),
+       TOBN(0xec28c85f, 0x280698de), TOBN(0x2331fb46, 0x7ec283b1)}},
+     {{TOBN(0xd34bfa32, 0x2867e633), TOBN(0x78709a82, 0x0a9cc815),
+       TOBN(0xb7fe6964, 0x875e2fa5), TOBN(0x25cc064f, 0x9e98bfb5)},
+      {TOBN(0x9eb0151c, 0x493a65c5), TOBN(0x5fb5d941, 0x53182464),
+       TOBN(0x69e6f130, 0xf04618e2), TOBN(0xa8ecec22, 0xf89c8ab6)}},
+     {{TOBN(0xcd6ac88b, 0xb96209bd), TOBN(0x65fa8cdb, 0xb3e1c9e0),
+       TOBN(0xa47d22f5, 0x4a8d8eac), TOBN(0x83895cdf, 0x8d33f963)},
+      {TOBN(0xa8adca59, 0xb56cd3d1), TOBN(0x10c8350b, 0xdaf38232),
+       TOBN(0x2b161fb3, 0xa5080a9f), TOBN(0xbe7f5c64, 0x3af65b3a)}},
+     {{TOBN(0x2c754039, 0x97403a11), TOBN(0x94626cf7, 0x121b96af),
+       TOBN(0x431de7c4, 0x6a983ec2), TOBN(0x3780dd3a, 0x52cc3df7)},
+      {TOBN(0xe28a0e46, 0x2baf8e3b), TOBN(0xabe68aad, 0x51d299ae),
+       TOBN(0x603eb8f9, 0x647a2408), TOBN(0x14c61ed6, 0x5c750981)}},
+     {{TOBN(0x88b34414, 0xc53352e7), TOBN(0x5a34889c, 0x1337d46e),
+       TOBN(0x612c1560, 0xf95f2bc8), TOBN(0x8a3f8441, 0xd4807a3a)},
+      {TOBN(0x680d9e97, 0x5224da68), TOBN(0x60cd6e88, 0xc3eb00e9),
+       TOBN(0x3875a98e, 0x9a6bc375), TOBN(0xdc80f924, 0x4fd554c2)}},
+     {{TOBN(0x6c4b3415, 0x6ac77407), TOBN(0xa1e5ea8f, 0x25420681),
+       TOBN(0x541bfa14, 0x4607a458), TOBN(0x5dbc7e7a, 0x96d7fbf9)},
+      {TOBN(0x646a851b, 0x31590a47), TOBN(0x039e85ba, 0x15ee6df8),
+       TOBN(0xd19fa231, 0xd7b43fc0), TOBN(0x84bc8be8, 0x299a0e04)}},
+     {{TOBN(0x2b9d2936, 0xf20df03a), TOBN(0x24054382, 0x8608d472),
+       TOBN(0x76b6ba04, 0x9149202a), TOBN(0xb21c3831, 0x3670e7b7)},
+      {TOBN(0xddd93059, 0xd6fdee10), TOBN(0x9da47ad3, 0x78488e71),
+       TOBN(0x99cc1dfd, 0xa0fcfb25), TOBN(0x42abde10, 0x64696954)}},
+     {{TOBN(0x14cc15fc, 0x17eab9fe), TOBN(0xd6e863e4, 0xd3e70972),
+       TOBN(0x29a7765c, 0x6432112c), TOBN(0x88660001, 0x5b0774d8)},
+      {TOBN(0x3729175a, 0x2c088eae), TOBN(0x13afbcae, 0x8230b8d4),
+       TOBN(0x44768151, 0x915f4379), TOBN(0xf086431a, 0xd8d22812)}},
+     {{TOBN(0x37461955, 0xc298b974), TOBN(0x905fb5f0, 0xf8711e04),
+       TOBN(0x787abf3a, 0xfe969d18), TOBN(0x392167c2, 0x6f6a494e)},
+      {TOBN(0xfc7a0d2d, 0x28c511da), TOBN(0xf127c7dc, 0xb66a262d),
+       TOBN(0xf9c4bb95, 0xfd63fdf0), TOBN(0x90016589, 0x3913ef46)}},
+     {{TOBN(0x74d2a73c, 0x11aa600d), TOBN(0x2f5379bd, 0x9fb5ab52),
+       TOBN(0xe49e53a4, 0x7fb70068), TOBN(0x68dd39e5, 0x404aa9a7)},
+      {TOBN(0xb9b0cf57, 0x2ecaa9c3), TOBN(0xba0e103b, 0xe824826b),
+       TOBN(0x60c2198b, 0x4631a3c4), TOBN(0xc5ff84ab, 0xfa8966a2)}},
+     {{TOBN(0x2d6ebe22, 0xac95aff8), TOBN(0x1c9bb6db, 0xb5a46d09),
+       TOBN(0x419062da, 0x53ee4f8d), TOBN(0x7b9042d0, 0xbb97efef)},
+      {TOBN(0x0f87f080, 0x830cf6bd), TOBN(0x4861d19a, 0x6ec8a6c6),
+       TOBN(0xd3a0daa1, 0x202f01aa), TOBN(0xb0111674, 0xf25afbd5)}},
+     {{TOBN(0x6d00d6cf, 0x1afb20d9), TOBN(0x13695000, 0x40671bc5),
+       TOBN(0x913ab0dc, 0x2485ea9b), TOBN(0x1f2bed06, 0x9eef61ac)},
+      {TOBN(0x850c8217, 0x6d799e20), TOBN(0x93415f37, 0x3271c2de),
+       TOBN(0x5afb06e9, 0x6c4f5910), TOBN(0x688a52df, 0xc4e9e421)}},
+     {{TOBN(0x30495ba3, 0xe2a9a6db), TOBN(0x4601303d, 0x58f9268b),
+       TOBN(0xbe3b0dad, 0x7eb0f04f), TOBN(0x4ea47250, 0x4456936d)},
+      {TOBN(0x8caf8798, 0xd33fd3e7), TOBN(0x1ccd8a89, 0xeb433708),
+       TOBN(0x9effe3e8, 0x87fd50ad), TOBN(0xbe240a56, 0x6b29c4df)}},
+     {{TOBN(0xec4ffd98, 0xca0e7ebd), TOBN(0xf586783a, 0xe748616e),
+       TOBN(0xa5b00d8f, 0xc77baa99), TOBN(0x0acada29, 0xb4f34c9c)},
+      {TOBN(0x36dad67d, 0x0fe723ac), TOBN(0x1d8e53a5, 0x39c36c1e),
+       TOBN(0xe4dd342d, 0x1f4bea41), TOBN(0x64fd5e35, 0xebc9e4e0)}},
+     {{TOBN(0x96f01f90, 0x57908805), TOBN(0xb5b9ea3d, 0x5ed480dd),
+       TOBN(0x366c5dc2, 0x3efd2dd0), TOBN(0xed2fe305, 0x6e9dfa27)},
+      {TOBN(0x4575e892, 0x6e9197e2), TOBN(0x11719c09, 0xab502a5d),
+       TOBN(0x264c7bec, 0xe81f213f), TOBN(0x741b9241, 0x55f5c457)}},
+     {{TOBN(0x78ac7b68, 0x49a5f4f4), TOBN(0xf91d70a2, 0x9fc45b7d),
+       TOBN(0x39b05544, 0xb0f5f355), TOBN(0x11f06bce, 0xeef930d9)},
+      {TOBN(0xdb84d25d, 0x038d05e1), TOBN(0x04838ee5, 0xbacc1d51),
+       TOBN(0x9da3ce86, 0x9e8ee00b), TOBN(0xc3412057, 0xc36eda1f)}},
+     {{TOBN(0xae80b913, 0x64d9c2f4), TOBN(0x7468bac3, 0xa010a8ff),
+       TOBN(0xdfd20037, 0x37359d41), TOBN(0x1a0f5ab8, 0x15efeacc)},
+      {TOBN(0x7c25ad2f, 0x659d0ce0), TOBN(0x4011bcbb, 0x6785cff1),
+       TOBN(0x128b9912, 0x7e2192c7), TOBN(0xa549d8e1, 0x13ccb0e8)}},
+     {{TOBN(0x805588d8, 0xc85438b1), TOBN(0x5680332d, 0xbc25cb27),
+       TOBN(0xdcd1bc96, 0x1a4bfdf4), TOBN(0x779ff428, 0x706f6566)},
+      {TOBN(0x8bbee998, 0xf059987a), TOBN(0xf6ce8cf2, 0xcc686de7),
+       TOBN(0xf8ad3c4a, 0x953cfdb2), TOBN(0xd1d426d9, 0x2205da36)}},
+     {{TOBN(0xb3c0f13f, 0xc781a241), TOBN(0x3e89360e, 0xd75362a8),
+       TOBN(0xccd05863, 0xc8a91184), TOBN(0x9bd0c9b7, 0xefa8a7f4)},
+      {TOBN(0x97ee4d53, 0x8a912a4b), TOBN(0xde5e15f8, 0xbcf518fd),
+       TOBN(0x6a055bf8, 0xc467e1e0), TOBN(0x10be4b4b, 0x1587e256)}},
+     {{TOBN(0xd90c14f2, 0x668621c9), TOBN(0xd5518f51, 0xab9c92c1),
+       TOBN(0x8e6a0100, 0xd6d47b3c), TOBN(0xcbe980dd, 0x66716175)},
+      {TOBN(0x500d3f10, 0xddd83683), TOBN(0x3b6cb35d, 0x99cac73c),
+       TOBN(0x53730c8b, 0x6083d550), TOBN(0xcf159767, 0xdf0a1987)}},
+     {{TOBN(0x84bfcf53, 0x43ad73b3), TOBN(0x1b528c20, 0x4f035a94),
+       TOBN(0x4294edf7, 0x33eeac69), TOBN(0xb6283e83, 0x817f3240)},
+      {TOBN(0xc3fdc959, 0x0a5f25b1), TOBN(0xefaf8aa5, 0x5844ee22),
+       TOBN(0xde269ba5, 0xdbdde4de), TOBN(0xe3347160, 0xc56133bf)}},
+     {{TOBN(0xc1184219, 0x8d9ea9f8), TOBN(0x090de5db, 0xf3fc1ab5),
+       TOBN(0x404c37b1, 0x0bf22cda), TOBN(0x7de20ec8, 0xf5618894)},
+      {TOBN(0x754c588e, 0xecdaecab), TOBN(0x6ca4b0ed, 0x88342743),
+       TOBN(0x76f08bdd, 0xf4a938ec), TOBN(0xd182de89, 0x91493ccb)}},
+     {{TOBN(0xd652c53e, 0xc8a4186a), TOBN(0xb3e878db, 0x946d8e33),
+       TOBN(0x088453c0, 0x5f37663c), TOBN(0x5cd9daaa, 0xb407748b)},
+      {TOBN(0xa1f5197f, 0x586d5e72), TOBN(0x47500be8, 0xc443ca59),
+       TOBN(0x78ef35b2, 0xe2652424), TOBN(0x09c5d26f, 0x6dd7767d)}},
+     {{TOBN(0x7175a79a, 0xa74d3f7b), TOBN(0x0428fd8d, 0xcf5ea459),
+       TOBN(0x511cb97c, 0xa5d1746d), TOBN(0x36363939, 0xe71d1278)},
+      {TOBN(0xcf2df955, 0x10350bf4), TOBN(0xb3817439, 0x60aae782),
+       TOBN(0xa748c0e4, 0x3e688809), TOBN(0x98021fbf, 0xd7a5a006)}},
+     {{TOBN(0x9076a70c, 0x0e367a98), TOBN(0xbea1bc15, 0x0f62b7c2),
+       TOBN(0x2645a68c, 0x30fe0343), TOBN(0xacaffa78, 0x699dc14f)},
+      {TOBN(0xf4469964, 0x457bf9c4), TOBN(0x0db6407b, 0x0d2ead83),
+       TOBN(0x68d56cad, 0xb2c6f3eb), TOBN(0x3b512e73, 0xf376356c)}},
+     {{TOBN(0xe43b0e1f, 0xfce10408), TOBN(0x89ddc003, 0x5a5e257d),
+       TOBN(0xb0ae0d12, 0x0362e5b3), TOBN(0x07f983c7, 0xb0519161)},
+      {TOBN(0xc2e94d15, 0x5d5231e7), TOBN(0xcff22aed, 0x0b4f9513),
+       TOBN(0xb02588dd, 0x6ad0b0b5), TOBN(0xb967d1ac, 0x11d0dcd5)}},
+     {{TOBN(0x8dac6bc6, 0xcf777b6c), TOBN(0x0062bdbd, 0x4c6d1959),
+       TOBN(0x53da71b5, 0x0ef5cc85), TOBN(0x07012c7d, 0x4006f14f)},
+      {TOBN(0x4617f962, 0xac47800d), TOBN(0x53365f2b, 0xc102ed75),
+       TOBN(0xb422efcb, 0x4ab8c9d3), TOBN(0x195cb26b, 0x34af31c9)}},
+     {{TOBN(0x3a926e29, 0x05f2c4ce), TOBN(0xbd2bdecb, 0x9856966c),
+       TOBN(0x5d16ab3a, 0x85527015), TOBN(0x9f81609e, 0x4486c231)},
+      {TOBN(0xd8b96b2c, 0xda350002), TOBN(0xbd054690, 0xfa1b7d36),
+       TOBN(0xdc90ebf5, 0xe71d79bc), TOBN(0xf241b6f9, 0x08964e4e)}},
+     {{TOBN(0x7c838643, 0x2fe3cd4c), TOBN(0xe0f33acb, 0xb4bc633c),
+       TOBN(0xb4a9ecec, 0x3d139f1f), TOBN(0x05ce69cd, 0xdc4a1f49)},
+      {TOBN(0xa19d1b16, 0xf5f98aaf), TOBN(0x45bb71d6, 0x6f23e0ef),
+       TOBN(0x33789fcd, 0x46cdfdd3), TOBN(0x9b8e2978, 0xcee040ca)}},
+     {{TOBN(0x9c69b246, 0xae0a6828), TOBN(0xba533d24, 0x7078d5aa),
+       TOBN(0x7a2e42c0, 0x7bb4fbdb), TOBN(0xcfb4879a, 0x7035385c)},
+      {TOBN(0x8c3dd30b, 0x3281705b), TOBN(0x7e361c6c, 0x404fe081),
+       TOBN(0x7b21649c, 0x3f604edf), TOBN(0x5dbf6a3f, 0xe52ffe47)}},
+     {{TOBN(0xc41b7c23, 0x4b54d9bf), TOBN(0x1374e681, 0x3511c3d9),
+       TOBN(0x1863bf16, 0xc1b2b758), TOBN(0x90e78507, 0x1e9e6a96)},
+      {TOBN(0xab4bf98d, 0x5d86f174), TOBN(0xd74e0bd3, 0x85e96fe4),
+       TOBN(0x8afde39f, 0xcac5d344), TOBN(0x90946dbc, 0xbd91b847)}},
+     {{TOBN(0xf5b42358, 0xfe1a838c), TOBN(0x05aae6c5, 0x620ac9d8),
+       TOBN(0x8e193bd8, 0xa1ce5a0b), TOBN(0x8f710571, 0x4dabfd72)},
+      {TOBN(0x8d8fdd48, 0x182caaac), TOBN(0x8c4aeefa, 0x040745cf),
+       TOBN(0x73c6c30a, 0xf3b93e6d), TOBN(0x991241f3, 0x16f42011)}},
+     {{TOBN(0xa0158eea, 0xe457a477), TOBN(0xd19857db, 0xee6ddc05),
+       TOBN(0xb3265224, 0x18c41671), TOBN(0x3ffdfc7e, 0x3c2c0d58)},
+      {TOBN(0x3a3a5254, 0x26ee7cda), TOBN(0x341b0869, 0xdf02c3a8),
+       TOBN(0xa023bf42, 0x723bbfc8), TOBN(0x3d15002a, 0x14452691)}}},
+    {{{TOBN(0x5ef7324c, 0x85edfa30), TOBN(0x25976554, 0x87d4f3da),
+       TOBN(0x352f5bc0, 0xdcb50c86), TOBN(0x8f6927b0, 0x4832a96c)},
+      {TOBN(0xd08ee1ba, 0x55f2f94c), TOBN(0x6a996f99, 0x344b45fa),
+       TOBN(0xe133cb8d, 0xa8aa455d), TOBN(0x5d0721ec, 0x758dc1f7)}},
+     {{TOBN(0x6ba7a920, 0x79e5fb67), TOBN(0xe1331feb, 0x70aa725e),
+       TOBN(0x5080ccf5, 0x7df5d837), TOBN(0xe4cae01d, 0x7ff72e21)},
+      {TOBN(0xd9243ee6, 0x0412a77d), TOBN(0x06ff7cac, 0xdf449025),
+       TOBN(0xbe75f7cd, 0x23ef5a31), TOBN(0xbc957822, 0x0ddef7a8)}},
+     {{TOBN(0x8cf7230c, 0xb0ce1c55), TOBN(0x5b534d05, 0x0bbfb607),
+       TOBN(0xee1ef113, 0x0e16363b), TOBN(0x27e0aa7a, 0xb4999e82)},
+      {TOBN(0xce1dac2d, 0x79362c41), TOBN(0x67920c90, 0x91bb6cb0),
+       TOBN(0x1e648d63, 0x2223df24), TOBN(0x0f7d9eef, 0xe32e8f28)}},
+     {{TOBN(0x6943f39a, 0xfa833834), TOBN(0x22951722, 0xa6328562),
+       TOBN(0x81d63dd5, 0x4170fc10), TOBN(0x9f5fa58f, 0xaecc2e6d)},
+      {TOBN(0xb66c8725, 0xe77d9a3b), TOBN(0x11235cea, 0x6384ebe0),
+       TOBN(0x06a8c118, 0x5845e24a), TOBN(0x0137b286, 0xebd093b1)}},
+     {{TOBN(0xc589e1ce, 0x44ace150), TOBN(0xe0f8d3d9, 0x4381e97c),
+       TOBN(0x59e99b11, 0x62c5a4b8), TOBN(0x90d262f7, 0xfd0ec9f9)},
+      {TOBN(0xfbc854c9, 0x283e13c9), TOBN(0x2d04fde7, 0xaedc7085),
+       TOBN(0x057d7765, 0x47dcbecb), TOBN(0x8dbdf591, 0x9a76fa5f)}},
+     {{TOBN(0xd0150695, 0x0de1e578), TOBN(0x2e1463e7, 0xe9f72bc6),
+       TOBN(0xffa68441, 0x1b39eca5), TOBN(0x673c8530, 0x7c037f2f)},
+      {TOBN(0xd0d6a600, 0x747f91da), TOBN(0xb08d43e1, 0xc9cb78e9),
+       TOBN(0x0fc0c644, 0x27b5cef5), TOBN(0x5c1d160a, 0xa60a2fd6)}},
+     {{TOBN(0xf98cae53, 0x28c8e13b), TOBN(0x375f10c4, 0xb2eddcd1),
+       TOBN(0xd4eb8b7f, 0x5cce06ad), TOBN(0xb4669f45, 0x80a2e1ef)},
+      {TOBN(0xd593f9d0, 0x5bbd8699), TOBN(0x5528a4c9, 0xe7976d13),
+       TOBN(0x3923e095, 0x1c7e28d3), TOBN(0xb9293790, 0x3f6bb577)}},
+     {{TOBN(0xdb567d6a, 0xc42bd6d2), TOBN(0x6df86468, 0xbb1f96ae),
+       TOBN(0x0efe5b1a, 0x4843b28e), TOBN(0x961bbb05, 0x6379b240)},
+      {TOBN(0xb6caf5f0, 0x70a6a26b), TOBN(0x70686c0d, 0x328e6e39),
+       TOBN(0x80da06cf, 0x895fc8d3), TOBN(0x804d8810, 0xb363fdc9)}},
+     {{TOBN(0xbe22877b, 0x207f1670), TOBN(0x9b0dd188, 0x4e615291),
+       TOBN(0x625ae8dc, 0x97a3c2bf), TOBN(0x08584ef7, 0x439b86e8)},
+      {TOBN(0xde7190a5, 0xdcd898ff), TOBN(0x26286c40, 0x2058ee3d),
+       TOBN(0x3db0b217, 0x5f87b1c1), TOBN(0xcc334771, 0x102a6db5)}},
+     {{TOBN(0xd99de954, 0x2f770fb1), TOBN(0x97c1c620, 0x4cd7535e),
+       TOBN(0xd3b6c448, 0x3f09cefc), TOBN(0xd725af15, 0x5a63b4f8)},
+      {TOBN(0x0c95d24f, 0xc01e20ec), TOBN(0xdfd37494, 0x9ae7121f),
+       TOBN(0x7d6ddb72, 0xec77b7ec), TOBN(0xfe079d3b, 0x0353a4ae)}},
+     {{TOBN(0x3066e70a, 0x2e6ac8d2), TOBN(0x9c6b5a43, 0x106e5c05),
+       TOBN(0x52d3c6f5, 0xede59b8c), TOBN(0x30d6a5c3, 0xfccec9ae)},
+      {TOBN(0xedec7c22, 0x4fc0a9ef), TOBN(0x190ff083, 0x95c16ced),
+       TOBN(0xbe12ec8f, 0x94de0fde), TOBN(0x0d131ab8, 0x852d3433)}},
+     {{TOBN(0x42ace07e, 0x85701291), TOBN(0x94793ed9, 0x194061a8),
+       TOBN(0x30e83ed6, 0xd7f4a485), TOBN(0x9eec7269, 0xf9eeff4d)},
+      {TOBN(0x90acba59, 0x0c9d8005), TOBN(0x5feca458, 0x1e79b9d1),
+       TOBN(0x8fbe5427, 0x1d506a1e), TOBN(0xa32b2c8e, 0x2439cfa7)}},
+     {{TOBN(0x1671c173, 0x73dd0b4e), TOBN(0x37a28214, 0x44a054c6),
+       TOBN(0x81760a1b, 0x4e8b53f1), TOBN(0xa6c04224, 0xf9f93b9e)},
+      {TOBN(0x18784b34, 0xcf671e3c), TOBN(0x81bbecd2, 0xcda9b994),
+       TOBN(0x38831979, 0xb2ab3848), TOBN(0xef54feb7, 0xf2e03c2d)}},
+     {{TOBN(0xcf197ca7, 0xfb8088fa), TOBN(0x01427247, 0x4ddc96c5),
+       TOBN(0xa2d2550a, 0x30777176), TOBN(0x53469898, 0x4d0cf71d)},
+      {TOBN(0x6ce937b8, 0x3a2aaac6), TOBN(0xe9f91dc3, 0x5af38d9b),
+       TOBN(0x2598ad83, 0xc8bf2899), TOBN(0x8e706ac9, 0xb5536c16)}},
+     {{TOBN(0x40dc7495, 0xf688dc98), TOBN(0x26490cd7, 0x124c4afc),
+       TOBN(0xe651ec84, 0x1f18775c), TOBN(0x393ea6c3, 0xb4fdaf4a)},
+      {TOBN(0x1e1f3343, 0x7f338e0d), TOBN(0x39fb832b, 0x6053e7b5),
+       TOBN(0x46e702da, 0x619e14d5), TOBN(0x859cacd1, 0xcdeef6e0)}},
+     {{TOBN(0x63b99ce7, 0x4462007d), TOBN(0xb8ab48a5, 0x4cb5f5b7),
+       TOBN(0x9ec673d2, 0xf55edde7), TOBN(0xd1567f74, 0x8cfaefda)},
+      {TOBN(0x46381b6b, 0x0887bcec), TOBN(0x694497ce, 0xe178f3c2),
+       TOBN(0x5e6525e3, 0x1e6266cb), TOBN(0x5931de26, 0x697d6413)}},
+     {{TOBN(0x87f8df7c, 0x0e58d493), TOBN(0xb1ae5ed0, 0x58b73f12),
+       TOBN(0xc368f784, 0xdea0c34d), TOBN(0x9bd0a120, 0x859a91a0)},
+      {TOBN(0xb00d88b7, 0xcc863c68), TOBN(0x3a1cc11e, 0x3d1f4d65),
+       TOBN(0xea38e0e7, 0x0aa85593), TOBN(0x37f13e98, 0x7dc4aee8)}},
+     {{TOBN(0x10d38667, 0xbc947bad), TOBN(0x738e07ce, 0x2a36ee2e),
+       TOBN(0xc93470cd, 0xc577fcac), TOBN(0xdee1b616, 0x2782470d)},
+      {TOBN(0x36a25e67, 0x2e793d12), TOBN(0xd6aa6cae, 0xe0f186da),
+       TOBN(0x474d0fd9, 0x80e07af7), TOBN(0xf7cdc47d, 0xba8a5cd4)}},
+     {{TOBN(0x28af6d9d, 0xab15247f), TOBN(0x7c789c10, 0x493a537f),
+       TOBN(0x7ac9b110, 0x23a334e7), TOBN(0x0236ac09, 0x12c9c277)},
+      {TOBN(0xa7e5bd25, 0x1d7a5144), TOBN(0x098b9c2a, 0xf13ec4ec),
+       TOBN(0x3639daca, 0xd3f0abca), TOBN(0x642da81a, 0xa23960f9)}},
+     {{TOBN(0x7d2e5c05, 0x4f7269b1), TOBN(0xfcf30777, 0xe287c385),
+       TOBN(0x10edc84f, 0xf2a46f21), TOBN(0x35441757, 0x4f43fa36)},
+      {TOBN(0xf1327899, 0xfd703431), TOBN(0xa438d7a6, 0x16dd587a),
+       TOBN(0x65c34c57, 0xe9c8352d), TOBN(0xa728edab, 0x5cc5a24e)}},
+     {{TOBN(0xaed78abc, 0x42531689), TOBN(0x0a51a0e8, 0x010963ef),
+       TOBN(0x5776fa0a, 0xd717d9b3), TOBN(0xf356c239, 0x7dd3428b)},
+      {TOBN(0x29903fff, 0x8d3a3dac), TOBN(0x409597fa, 0x3d94491f),
+       TOBN(0x4cd7a5ff, 0xbf4a56a4), TOBN(0xe5096474, 0x8adab462)}},
+     {{TOBN(0xa97b5126, 0x5c3427b0), TOBN(0x6401405c, 0xd282c9bd),
+       TOBN(0x3629f8d7, 0x222c5c45), TOBN(0xb1c02c16, 0xe8d50aed)},
+      {TOBN(0xbea2ed75, 0xd9635bc9), TOBN(0x226790c7, 0x6e24552f),
+       TOBN(0x3c33f2a3, 0x65f1d066), TOBN(0x2a43463e, 0x6dfccc2e)}},
+     {{TOBN(0x8cc3453a, 0xdb483761), TOBN(0xe7cc6085, 0x65d5672b),
+       TOBN(0x277ed6cb, 0xde3efc87), TOBN(0x19f2f368, 0x69234eaf)},
+      {TOBN(0x9aaf4317, 0x5c0b800b), TOBN(0x1f1e7c89, 0x8b6da6e2),
+       TOBN(0x6cfb4715, 0xb94ec75e), TOBN(0xd590dd5f, 0x453118c2)}},
+     {{TOBN(0x14e49da1, 0x1f17a34c), TOBN(0x5420ab39, 0x235a1456),
+       TOBN(0xb7637241, 0x2f50363b), TOBN(0x7b15d623, 0xc3fabb6e)},
+      {TOBN(0xa0ef40b1, 0xe274e49c), TOBN(0x5cf50744, 0x96b1860a),
+       TOBN(0xd6583fbf, 0x66afe5a4), TOBN(0x44240510, 0xf47e3e9a)}},
+     {{TOBN(0x99254343, 0x11b2d595), TOBN(0xf1367499, 0xeec8df57),
+       TOBN(0x3cb12c61, 0x3e73dd05), TOBN(0xd248c033, 0x7dac102a)},
+      {TOBN(0xcf154f13, 0xa77739f5), TOBN(0xbf4288cb, 0x23d2af42),
+       TOBN(0xaa64c9b6, 0x32e4a1cf), TOBN(0xee8c07a8, 0xc8a208f3)}},
+     {{TOBN(0xe10d4999, 0x6fe8393f), TOBN(0x0f809a3f, 0xe91f3a32),
+       TOBN(0x61096d1c, 0x802f63c8), TOBN(0x289e1462, 0x57750d3d)},
+      {TOBN(0xed06167e, 0x9889feea), TOBN(0xd5c9c0e2, 0xe0993909),
+       TOBN(0x46fca0d8, 0x56508ac6), TOBN(0x91826047, 0x4f1b8e83)}},
+     {{TOBN(0x4f2c877a, 0x9a4a2751), TOBN(0x71bd0072, 0xcae6fead),
+       TOBN(0x38df8dcc, 0x06aa1941), TOBN(0x5a074b4c, 0x63beeaa8)},
+      {TOBN(0xd6d65934, 0xc1cec8ed), TOBN(0xa6ecb49e, 0xaabc03bd),
+       TOBN(0xaade91c2, 0xde8a8415), TOBN(0xcfb0efdf, 0x691136e0)}},
+     {{TOBN(0x11af45ee, 0x23ab3495), TOBN(0xa132df88, 0x0b77463d),
+       TOBN(0x8923c15c, 0x815d06f4), TOBN(0xc3ceb3f5, 0x0d61a436)},
+      {TOBN(0xaf52291d, 0xe88fb1da), TOBN(0xea057974, 0x1da12179),
+       TOBN(0xb0d7218c, 0xd2fef720), TOBN(0x6c0899c9, 0x8e1d8845)}},
+     {{TOBN(0x98157504, 0x752ddad7), TOBN(0xd60bd74f, 0xa1a68a97),
+       TOBN(0x7047a3a9, 0xf658fb99), TOBN(0x1f5d86d6, 0x5f8511e4)},
+      {TOBN(0xb8a4bc42, 0x4b5a6d88), TOBN(0x69eb2c33, 0x1abefa7d),
+       TOBN(0x95bf39e8, 0x13c9c510), TOBN(0xf571960a, 0xd48aab43)}},
+     {{TOBN(0x7e8cfbcf, 0x704e23c6), TOBN(0xc71b7d22, 0x28aaa65b),
+       TOBN(0xa041b2bd, 0x245e3c83), TOBN(0x69b98834, 0xd21854ff)},
+      {TOBN(0x89d227a3, 0x963bfeec), TOBN(0x99947aaa, 0xde7da7cb),
+       TOBN(0x1d9ee9db, 0xee68a9b1), TOBN(0x0a08f003, 0x698ec368)}},
+     {{TOBN(0xe9ea4094, 0x78ef2487), TOBN(0xc8d2d415, 0x02cfec26),
+       TOBN(0xc52f9a6e, 0xb7dcf328), TOBN(0x0ed489e3, 0x85b6a937)},
+      {TOBN(0x9b94986b, 0xbef3366e), TOBN(0x0de59c70, 0xedddddb8),
+       TOBN(0xffdb748c, 0xeadddbe2), TOBN(0x9b9784bb, 0x8266ea40)}},
+     {{TOBN(0x142b5502, 0x1a93507a), TOBN(0xb4cd1187, 0x8d3c06cf),
+       TOBN(0xdf70e76a, 0x91ec3f40), TOBN(0x484e81ad, 0x4e7553c2)},
+      {TOBN(0x830f87b5, 0x272e9d6e), TOBN(0xea1c93e5, 0xc6ff514a),
+       TOBN(0x67cc2adc, 0xc4192a8e), TOBN(0xc77e27e2, 0x42f4535a)}},
+     {{TOBN(0x9cdbab36, 0xd2b713c5), TOBN(0x86274ea0, 0xcf7b0cd3),
+       TOBN(0x784680f3, 0x09af826b), TOBN(0xbfcc837a, 0x0c72dea3)},
+      {TOBN(0xa8bdfe9d, 0xd6529b73), TOBN(0x708aa228, 0x63a88002),
+       TOBN(0x6c7a9a54, 0xc91d45b9), TOBN(0xdf1a38bb, 0xfd004f56)}},
+     {{TOBN(0x2e8c9a26, 0xb8bad853), TOBN(0x2d52cea3, 0x3723eae7),
+       TOBN(0x054d6d81, 0x56ca2830), TOBN(0xa3317d14, 0x9a8dc411)},
+      {TOBN(0xa08662fe, 0xfd4ddeda), TOBN(0xed2a153a, 0xb55d792b),
+       TOBN(0x7035c16a, 0xbfc6e944), TOBN(0xb6bc5834, 0x00171cf3)}},
+     {{TOBN(0xe27152b3, 0x83d102b6), TOBN(0xfe695a47, 0x0646b848),
+       TOBN(0xa5bb09d8, 0x916e6d37), TOBN(0xb4269d64, 0x0d17015e)},
+      {TOBN(0x8d8156a1, 0x0a1d2285), TOBN(0xfeef6c51, 0x46d26d72),
+       TOBN(0x9dac57c8, 0x4c5434a7), TOBN(0x0282e5be, 0x59d39e31)}},
+     {{TOBN(0xedfff181, 0x721c486d), TOBN(0x301baf10, 0xbc58824e),
+       TOBN(0x8136a6aa, 0x00570031), TOBN(0x55aaf78c, 0x1cddde68)},
+      {TOBN(0x26829371, 0x59c63952), TOBN(0x3a3bd274, 0x8bc25baf),
+       TOBN(0xecdf8657, 0xb7e52dc3), TOBN(0x2dd8c087, 0xfd78e6c8)}},
+     {{TOBN(0x20553274, 0xf5531461), TOBN(0x8b4a1281, 0x5d95499b),
+       TOBN(0xe2c8763a, 0x1a80f9d2), TOBN(0xd1dbe32b, 0x4ddec758)},
+      {TOBN(0xaf12210d, 0x30c34169), TOBN(0xba74a953, 0x78baa533),
+       TOBN(0x3d133c6e, 0xa438f254), TOBN(0xa431531a, 0x201bef5b)}},
+     {{TOBN(0x15295e22, 0xf669d7ec), TOBN(0xca374f64, 0x357fb515),
+       TOBN(0x8a8406ff, 0xeaa3fdb3), TOBN(0x106ae448, 0xdf3f2da8)},
+      {TOBN(0x8f9b0a90, 0x33c8e9a1), TOBN(0x234645e2, 0x71ad5885),
+       TOBN(0x3d083224, 0x1c0aed14), TOBN(0xf10a7d3e, 0x7a942d46)}},
+     {{TOBN(0x7c11deee, 0x40d5c9be), TOBN(0xb2bae7ff, 0xba84ed98),
+       TOBN(0x93e97139, 0xaad58ddd), TOBN(0x3d872796, 0x3f6d1fa3)},
+      {TOBN(0x483aca81, 0x8569ff13), TOBN(0x8b89a5fb, 0x9a600f72),
+       TOBN(0x4cbc27c3, 0xc06f2b86), TOBN(0x22130713, 0x63ad9c0b)}},
+     {{TOBN(0xb5358b1e, 0x48ac2840), TOBN(0x18311294, 0xecba9477),
+       TOBN(0xda58f990, 0xa6946b43), TOBN(0x3098baf9, 0x9ab41819)},
+      {TOBN(0x66c4c158, 0x4198da52), TOBN(0xab4fc17c, 0x146bfd1b),
+       TOBN(0x2f0a4c3c, 0xbf36a908), TOBN(0x2ae9e34b, 0x58cf7838)}},
+     {{TOBN(0xf411529e, 0x3fa11b1f), TOBN(0x21e43677, 0x974af2b4),
+       TOBN(0x7c20958e, 0xc230793b), TOBN(0x710ea885, 0x16e840f3)},
+      {TOBN(0xfc0b21fc, 0xc5dc67cf), TOBN(0x08d51647, 0x88405718),
+       TOBN(0xd955c21f, 0xcfe49eb7), TOBN(0x9722a5d5, 0x56dd4a1f)}},
+     {{TOBN(0xc9ef50e2, 0xc861baa5), TOBN(0xc0c21a5d, 0x9505ac3e),
+       TOBN(0xaf6b9a33, 0x8b7c063f), TOBN(0xc6370339, 0x2f4779c1)},
+      {TOBN(0x22df99c7, 0x638167c3), TOBN(0xfe6ffe76, 0x795db30c),
+       TOBN(0x2b822d33, 0xa4854989), TOBN(0xfef031dd, 0x30563aa5)}},
+     {{TOBN(0x16b09f82, 0xd57c667f), TOBN(0xc70312ce, 0xcc0b76f1),
+       TOBN(0xbf04a9e6, 0xc9118aec), TOBN(0x82fcb419, 0x3409d133)},
+      {TOBN(0x1a8ab385, 0xab45d44d), TOBN(0xfba07222, 0x617b83a3),
+       TOBN(0xb05f50dd, 0x58e81b52), TOBN(0x1d8db553, 0x21ce5aff)}},
+     {{TOBN(0x3097b8d4, 0xe344a873), TOBN(0x7d8d116d, 0xfe36d53e),
+       TOBN(0x6db22f58, 0x7875e750), TOBN(0x2dc5e373, 0x43e144ea)},
+      {TOBN(0xc05f32e6, 0xe799eb95), TOBN(0xe9e5f4df, 0x6899e6ec),
+       TOBN(0xbdc3bd68, 0x1fab23d5), TOBN(0xb72b8ab7, 0x73af60e6)}},
+     {{TOBN(0x8db27ae0, 0x2cecc84a), TOBN(0x600016d8, 0x7bdb871c),
+       TOBN(0x42a44b13, 0xd7c46f58), TOBN(0xb8919727, 0xc3a77d39)},
+      {TOBN(0xcfc6bbbd, 0xdafd6088), TOBN(0x1a740146, 0x6bd20d39),
+       TOBN(0x8c747abd, 0x98c41072), TOBN(0x4c91e765, 0xbdf68ea1)}},
+     {{TOBN(0x7c95e5ca, 0x08819a78), TOBN(0xcf48b729, 0xc9587921),
+       TOBN(0x091c7c5f, 0xdebbcc7d), TOBN(0x6f287404, 0xf0e05149)},
+      {TOBN(0xf83b5ac2, 0x26cd44ec), TOBN(0x88ae32a6, 0xcfea250e),
+       TOBN(0x6ac5047a, 0x1d06ebc5), TOBN(0xc7e550b4, 0xd434f781)}},
+     {{TOBN(0x61ab1cf2, 0x5c727bd2), TOBN(0x2e4badb1, 0x1cf915b0),
+       TOBN(0x1b4dadec, 0xf69d3920), TOBN(0xe61b1ca6, 0xf14c1dfe)},
+      {TOBN(0x90b479cc, 0xbd6bd51f), TOBN(0x8024e401, 0x8045ec30),
+       TOBN(0xcab29ca3, 0x25ef0e62), TOBN(0x4f2e9416, 0x49e4ebc0)}},
+     {{TOBN(0x45eb40ec, 0x0ccced58), TOBN(0x25cd4b9c, 0x0da44f98),
+       TOBN(0x43e06458, 0x871812c6), TOBN(0x99f80d55, 0x16cef651)},
+      {TOBN(0x571340c9, 0xce6dc153), TOBN(0x138d5117, 0xd8665521),
+       TOBN(0xacdb45bc, 0x4e07014d), TOBN(0x2f34bb38, 0x84b60b91)}},
+     {{TOBN(0xf44a4fd2, 0x2ae8921e), TOBN(0xb039288e, 0x892ba1e2),
+       TOBN(0x9da50174, 0xb1c180b2), TOBN(0x6b70ab66, 0x1693dc87)},
+      {TOBN(0x7e9babc9, 0xe7057481), TOBN(0x4581ddef, 0x9c80dc41),
+       TOBN(0x0c890da9, 0x51294682), TOBN(0x0b5629d3, 0x3f4736e5)}},
+     {{TOBN(0x2340c79e, 0xb06f5b41), TOBN(0xa42e84ce, 0x4e243469),
+       TOBN(0xf9a20135, 0x045a71a9), TOBN(0xefbfb415, 0xd27b6fb6)},
+      {TOBN(0x25ebea23, 0x9d33cd6f), TOBN(0x9caedb88, 0xaa6c0af8),
+       TOBN(0x53dc7e9a, 0xd9ce6f96), TOBN(0x3897f9fd, 0x51e0b15a)}},
+     {{TOBN(0xf51cb1f8, 0x8e5d788e), TOBN(0x1aec7ba8, 0xe1d490ee),
+       TOBN(0x265991e0, 0xcc58cb3c), TOBN(0x9f306e8c, 0x9fc3ad31)},
+      {TOBN(0x5fed006e, 0x5040a0ac), TOBN(0xca9d5043, 0xfb476f2e),
+       TOBN(0xa19c06e8, 0xbeea7a23), TOBN(0xd2865801, 0x0edabb63)}},
+     {{TOBN(0xdb92293f, 0x6967469a), TOBN(0x2894d839, 0x8d8a8ed8),
+       TOBN(0x87c9e406, 0xbbc77122), TOBN(0x8671c6f1, 0x2ea3a26a)},
+      {TOBN(0xe42df8d6, 0xd7de9853), TOBN(0x2e3ce346, 0xb1f2bcc7),
+       TOBN(0xda601dfc, 0x899d50cf), TOBN(0xbfc913de, 0xfb1b598f)}},
+     {{TOBN(0x81c4909f, 0xe61f7908), TOBN(0x192e304f, 0x9bbc7b29),
+       TOBN(0xc3ed8738, 0xc104b338), TOBN(0xedbe9e47, 0x783f5d61)},
+      {TOBN(0x0c06e9be, 0x2db30660), TOBN(0xda3e613f, 0xc0eb7d8e),
+       TOBN(0xd8fa3e97, 0x322e096e), TOBN(0xfebd91e8, 0xd336e247)}},
+     {{TOBN(0x8f13ccc4, 0xdf655a49), TOBN(0xa9e00dfc, 0x5eb20210),
+       TOBN(0x84631d0f, 0xc656b6ea), TOBN(0x93a058cd, 0xd8c0d947)},
+      {TOBN(0x6846904a, 0x67bd3448), TOBN(0x4a3d4e1a, 0xf394fd5c),
+       TOBN(0xc102c1a5, 0xdb225f52), TOBN(0xe3455bba, 0xfc4f5e9a)}},
+     {{TOBN(0x6b36985b, 0x4b9ad1ce), TOBN(0xa9818536, 0x5bb7f793),
+       TOBN(0x6c25e1d0, 0x48b1a416), TOBN(0x1381dd53, 0x3c81bee7)},
+      {TOBN(0xd2a30d61, 0x7a4a7620), TOBN(0xc8412926, 0x39b8944c),
+       TOBN(0x3c1c6fbe, 0x7a97c33a), TOBN(0x941e541d, 0x938664e7)}},
+     {{TOBN(0x417499e8, 0x4a34f239), TOBN(0x15fdb83c, 0xb90402d5),
+       TOBN(0xb75f46bf, 0x433aa832), TOBN(0xb61e15af, 0x63215db1)},
+      {TOBN(0xaabe59d4, 0xa127f89a), TOBN(0x5d541e0c, 0x07e816da),
+       TOBN(0xaaba0659, 0xa618b692), TOBN(0x55327733, 0x17266026)}},
+     {{TOBN(0xaf53a0fc, 0x95f57552), TOBN(0x32947650, 0x6cacb0c9),
+       TOBN(0x253ff58d, 0xc821be01), TOBN(0xb0309531, 0xa06f1146)},
+      {TOBN(0x59bbbdf5, 0x05c2e54d), TOBN(0x158f27ad, 0x26e8dd22),
+       TOBN(0xcc5b7ffb, 0x397e1e53), TOBN(0xae03f65b, 0x7fc1e50d)}},
+     {{TOBN(0xa9784ebd, 0x9c95f0f9), TOBN(0x5ed9deb2, 0x24640771),
+       TOBN(0x31244af7, 0x035561c4), TOBN(0x87332f3a, 0x7ee857de)},
+      {TOBN(0x09e16e9e, 0x2b9e0d88), TOBN(0x52d910f4, 0x56a06049),
+       TOBN(0x507ed477, 0xa9592f48), TOBN(0x85cb917b, 0x2365d678)}},
+     {{TOBN(0xf8511c93, 0x4c8998d1), TOBN(0x2186a3f1, 0x730ea58f),
+       TOBN(0x50189626, 0xb2029db0), TOBN(0x9137a6d9, 0x02ceb75a)},
+      {TOBN(0x2fe17f37, 0x748bc82c), TOBN(0x87c2e931, 0x80469f8c),
+       TOBN(0x850f71cd, 0xbf891aa2), TOBN(0x0ca1b89b, 0x75ec3d8d)}},
+     {{TOBN(0x516c43aa, 0x5e1cd3cd), TOBN(0x89397808, 0x9a887c28),
+       TOBN(0x0059c699, 0xddea1f9f), TOBN(0x7737d6fa, 0x8e6868f7)},
+      {TOBN(0x6d93746a, 0x60f1524b), TOBN(0x36985e55, 0xba052aa7),
+       TOBN(0x41b1d322, 0xed923ea5), TOBN(0x3429759f, 0x25852a11)}},
+     {{TOBN(0xbeca6ec3, 0x092e9f41), TOBN(0x3a238c66, 0x62256bbd),
+       TOBN(0xd82958ea, 0x70ad487d), TOBN(0x4ac8aaf9, 0x65610d93)},
+      {TOBN(0x3fa101b1, 0x5e4ccab0), TOBN(0x9bf430f2, 0x9de14bfb),
+       TOBN(0xa10f5cc6, 0x6531899d), TOBN(0x590005fb, 0xea8ce17d)}},
+     {{TOBN(0xc437912f, 0x24544cb6), TOBN(0x9987b71a, 0xd79ac2e3),
+       TOBN(0x13e3d9dd, 0xc058a212), TOBN(0x00075aac, 0xd2de9606)},
+      {TOBN(0x80ab508b, 0x6cac8369), TOBN(0x87842be7, 0xf54f6c89),
+       TOBN(0xa7ad663d, 0x6bc532a4), TOBN(0x67813de7, 0x78a91bc8)}},
+     {{TOBN(0x5dcb61ce, 0xc3427239), TOBN(0x5f3c7cf0, 0xc56934d9),
+       TOBN(0xc079e0fb, 0xe3191591), TOBN(0xe40896bd, 0xb01aada7)},
+      {TOBN(0x8d466791, 0x0492d25f), TOBN(0x8aeb30c9, 0xe7408276),
+       TOBN(0xe9437495, 0x9287aacc), TOBN(0x23d4708d, 0x79fe03d4)}},
+     {{TOBN(0x8cda9cf2, 0xd0c05199), TOBN(0x502fbc22, 0xfae78454),
+       TOBN(0xc0bda9df, 0xf572a182), TOBN(0x5f9b71b8, 0x6158b372)},
+      {TOBN(0xe0f33a59, 0x2b82dd07), TOBN(0x76302735, 0x9523032e),
+       TOBN(0x7fe1a721, 0xc4505a32), TOBN(0x7b6e3e82, 0xf796409f)}}},
+    {{{TOBN(0xe3417bc0, 0x35d0b34a), TOBN(0x440b386b, 0x8327c0a7),
+       TOBN(0x8fb7262d, 0xac0362d1), TOBN(0x2c41114c, 0xe0cdf943)},
+      {TOBN(0x2ba5cef1, 0xad95a0b1), TOBN(0xc09b37a8, 0x67d54362),
+       TOBN(0x26d6cdd2, 0x01e486c9), TOBN(0x20477abf, 0x42ff9297)}},
+     {{TOBN(0xa004dcb3, 0x292a9287), TOBN(0xddc15cf6, 0x77b092c7),
+       TOBN(0x083a8464, 0x806c0605), TOBN(0x4a68df70, 0x3db997b0)},
+      {TOBN(0x9c134e45, 0x05bf7dd0), TOBN(0xa4e63d39, 0x8ccf7f8c),
+       TOBN(0xa6e6517f, 0x41b5f8af), TOBN(0xaa8b9342, 0xad7bc1cc)}},
+     {{TOBN(0x126f35b5, 0x1e706ad9), TOBN(0xb99cebb4, 0xc3a9ebdf),
+       TOBN(0xa75389af, 0xbf608d90), TOBN(0x76113c4f, 0xc6c89858)},
+      {TOBN(0x80de8eb0, 0x97e2b5aa), TOBN(0x7e1022cc, 0x63b91304),
+       TOBN(0x3bdab605, 0x6ccc066c), TOBN(0x33cbb144, 0xb2edf900)}},
+     {{TOBN(0xc4176471, 0x7af715d2), TOBN(0xe2f7f594, 0xd0134a96),
+       TOBN(0x2c1873ef, 0xa41ec956), TOBN(0xe4e7b4f6, 0x77821304)},
+      {TOBN(0xe5c8ff97, 0x88d5374a), TOBN(0x2b915e63, 0x80823d5b),
+       TOBN(0xea6bc755, 0xb2ee8fe2), TOBN(0x6657624c, 0xe7112651)}},
+     {{TOBN(0x157af101, 0xdace5aca), TOBN(0xc4fdbcf2, 0x11a6a267),
+       TOBN(0xdaddf340, 0xc49c8609), TOBN(0x97e49f52, 0xe9604a65)},
+      {TOBN(0x9be8e790, 0x937e2ad5), TOBN(0x846e2508, 0x326e17f1),
+       TOBN(0x3f38007a, 0x0bbbc0dc), TOBN(0xcf03603f, 0xb11e16d6)}},
+     {{TOBN(0xd6f800e0, 0x7442f1d5), TOBN(0x475607d1, 0x66e0e3ab),
+       TOBN(0x82807f16, 0xb7c64047), TOBN(0x8858e1e3, 0xa749883d)},
+      {TOBN(0x5859120b, 0x8231ee10), TOBN(0x1b80e7eb, 0x638a1ece),
+       TOBN(0xcb72525a, 0xc6aa73a4), TOBN(0xa7cdea3d, 0x844423ac)}},
+     {{TOBN(0x5ed0c007, 0xf8ae7c38), TOBN(0x6db07a5c, 0x3d740192),
+       TOBN(0xbe5e9c2a, 0x5fe36db3), TOBN(0xd5b9d57a, 0x76e95046)},
+      {TOBN(0x54ac32e7, 0x8eba20f2), TOBN(0xef11ca8f, 0x71b9a352),
+       TOBN(0x305e373e, 0xff98a658), TOBN(0xffe5a100, 0x823eb667)}},
+     {{TOBN(0x57477b11, 0xe51732d2), TOBN(0xdfd6eb28, 0x2538fc0e),
+       TOBN(0x5c43b0cc, 0x3b39eec5), TOBN(0x6af12778, 0xcb36cc57)},
+      {TOBN(0x70b0852d, 0x06c425ae), TOBN(0x6df92f8c, 0x5c221b9b),
+       TOBN(0x6c8d4f9e, 0xce826d9c), TOBN(0xf59aba7b, 0xb49359c3)}},
+     {{TOBN(0x5c8ed8d5, 0xda64309d), TOBN(0x61a6de56, 0x91b30704),
+       TOBN(0xd6b52f6a, 0x2f9b5808), TOBN(0x0eee4194, 0x98c958a7)},
+      {TOBN(0xcddd9aab, 0x771e4caa), TOBN(0x83965dfd, 0x78bc21be),
+       TOBN(0x02affce3, 0xb3b504f5), TOBN(0x30847a21, 0x561c8291)}},
+     {{TOBN(0xd2eb2cf1, 0x52bfda05), TOBN(0xe0e4c4e9, 0x6197b98c),
+       TOBN(0x1d35076c, 0xf8a1726f), TOBN(0x6c06085b, 0x2db11e3d)},
+      {TOBN(0x15c0c4d7, 0x4463ba14), TOBN(0x9d292f83, 0x0030238c),
+       TOBN(0x1311ee8b, 0x3727536d), TOBN(0xfeea86ef, 0xbeaedc1e)}},
+     {{TOBN(0xb9d18cd3, 0x66131e2e), TOBN(0xf31d974f, 0x80fe2682),
+       TOBN(0xb6e49e0f, 0xe4160289), TOBN(0x7c48ec0b, 0x08e92799)},
+      {TOBN(0x818111d8, 0xd1989aa7), TOBN(0xb34fa0aa, 0xebf926f9),
+       TOBN(0xdb5fe2f5, 0xa245474a), TOBN(0xf80a6ebb, 0x3c7ca756)}},
+     {{TOBN(0xa7f96054, 0xafa05dd8), TOBN(0x26dfcf21, 0xfcaf119e),
+       TOBN(0xe20ef2e3, 0x0564bb59), TOBN(0xef4dca50, 0x61cb02b8)},
+      {TOBN(0xcda7838a, 0x65d30672), TOBN(0x8b08d534, 0xfd657e86),
+       TOBN(0x4c5b4395, 0x46d595c8), TOBN(0x39b58725, 0x425cb836)}},
+     {{TOBN(0x8ea61059, 0x3de9abe3), TOBN(0x40434881, 0x9cdc03be),
+       TOBN(0x9b261245, 0xcfedce8c), TOBN(0x78c318b4, 0xcf5234a1)},
+      {TOBN(0x510bcf16, 0xfde24c99), TOBN(0x2a77cb75, 0xa2c2ff5d),
+       TOBN(0x9c895c2b, 0x27960fb4), TOBN(0xd30ce975, 0xb0eda42b)}},
+     {{TOBN(0xfda85393, 0x1a62cc26), TOBN(0x23c69b96, 0x50c0e052),
+       TOBN(0xa227df15, 0xbfc633f3), TOBN(0x2ac78848, 0x1bae7d48)},
+      {TOBN(0x487878f9, 0x187d073d), TOBN(0x6c2be919, 0x967f807d),
+       TOBN(0x765861d8, 0x336e6d8f), TOBN(0x88b8974c, 0xce528a43)}},
+     {{TOBN(0x09521177, 0xff57d051), TOBN(0x2ff38037, 0xfb6a1961),
+       TOBN(0xfc0aba74, 0xa3d76ad4), TOBN(0x7c764803, 0x25a7ec17)},
+      {TOBN(0x7532d75f, 0x48879bc8), TOBN(0xea7eacc0, 0x58ce6bc1),
+       TOBN(0xc82176b4, 0x8e896c16), TOBN(0x9a30e0b2, 0x2c750fed)}},
+     {{TOBN(0xc37e2c2e, 0x421d3aa4), TOBN(0xf926407c, 0xe84fa840),
+       TOBN(0x18abc03d, 0x1454e41c), TOBN(0x26605ecd, 0x3f7af644)},
+      {TOBN(0x242341a6, 0xd6a5eabf), TOBN(0x1edb84f4, 0x216b668e),
+       TOBN(0xd836edb8, 0x04010102), TOBN(0x5b337ce7, 0x945e1d8c)}},
+     {{TOBN(0xd2075c77, 0xc055dc14), TOBN(0x2a0ffa25, 0x81d89cdf),
+       TOBN(0x8ce815ea, 0x6ffdcbaf), TOBN(0xa3428878, 0xfb648867)},
+      {TOBN(0x277699cf, 0x884655fb), TOBN(0xfa5b5bd6, 0x364d3e41),
+       TOBN(0x01f680c6, 0x441e1cb7), TOBN(0x3fd61e66, 0xb70a7d67)}},
+     {{TOBN(0x666ba2dc, 0xcc78cf66), TOBN(0xb3018174, 0x6fdbff77),
+       TOBN(0x8d4dd0db, 0x168d4668), TOBN(0x259455d0, 0x1dab3a2a)},
+      {TOBN(0xf58564c5, 0xcde3acec), TOBN(0x77141925, 0x13adb276),
+       TOBN(0x527d725d, 0x8a303f65), TOBN(0x55deb6c9, 0xe6f38f7b)}},
+     {{TOBN(0xfd5bb657, 0xb1fa70fb), TOBN(0xfa07f50f, 0xd8073a00),
+       TOBN(0xf72e3aa7, 0xbca02500), TOBN(0xf68f895d, 0x9975740d)},
+      {TOBN(0x30112060, 0x5cae2a6a), TOBN(0x01bd7218, 0x02874842),
+       TOBN(0x3d423891, 0x7ce47bd3), TOBN(0xa66663c1, 0x789544f6)}},
+     {{TOBN(0x864d05d7, 0x3272d838), TOBN(0xe22924f9, 0xfa6295c5),
+       TOBN(0x8189593f, 0x6c2fda32), TOBN(0x330d7189, 0xb184b544)},
+      {TOBN(0x79efa62c, 0xbde1f714), TOBN(0x35771c94, 0xe5cb1a63),
+       TOBN(0x2f4826b8, 0x641c8332), TOBN(0x00a894fb, 0xc8cee854)}},
+     {{TOBN(0xb4b9a39b, 0x36194d40), TOBN(0xe857a7c5, 0x77612601),
+       TOBN(0xf4209dd2, 0x4ecf2f58), TOBN(0x82b9e66d, 0x5a033487)},
+      {TOBN(0xc1e36934, 0xe4e8b9dd), TOBN(0xd2372c9d, 0xa42377d7),
+       TOBN(0x51dc94c7, 0x0e3ae43b), TOBN(0x4c57761e, 0x04474f6f)}},
+     {{TOBN(0xdcdacd0a, 0x1058a318), TOBN(0x369cf3f5, 0x78053a9a),
+       TOBN(0xc6c3de50, 0x31c68de2), TOBN(0x4653a576, 0x3c4b6d9f)},
+      {TOBN(0x1688dd5a, 0xaa4e5c97), TOBN(0x5be80aa1, 0xb7ab3c74),
+       TOBN(0x70cefe7c, 0xbc65c283), TOBN(0x57f95f13, 0x06867091)}},
+     {{TOBN(0xa39114e2, 0x4415503b), TOBN(0xc08ff7c6, 0x4cbb17e9),
+       TOBN(0x1eff674d, 0xd7dec966), TOBN(0x6d4690af, 0x53376f63)},
+      {TOBN(0xff6fe32e, 0xea74237b), TOBN(0xc436d17e, 0xcd57508e),
+       TOBN(0x15aa28e1, 0xedcc40fe), TOBN(0x0d769c04, 0x581bbb44)}},
+     {{TOBN(0xc240b6de, 0x34eaacda), TOBN(0xd9e116e8, 0x2ba0f1de),
+       TOBN(0xcbe45ec7, 0x79438e55), TOBN(0x91787c9d, 0x96f752d7)},
+      {TOBN(0x897f532b, 0xf129ac2f), TOBN(0xd307b7c8, 0x5a36e22c),
+       TOBN(0x91940675, 0x749fb8f3), TOBN(0xd14f95d0, 0x157fdb28)}},
+     {{TOBN(0xfe51d029, 0x6ae55043), TOBN(0x8931e98f, 0x44a87de1),
+       TOBN(0xe57f1cc6, 0x09e4fee2), TOBN(0x0d063b67, 0x4e072d92)},
+      {TOBN(0x70a998b9, 0xed0e4316), TOBN(0xe74a736b, 0x306aca46),
+       TOBN(0xecf0fbf2, 0x4fda97c7), TOBN(0xa40f65cb, 0x3e178d93)}},
+     {{TOBN(0x16253604, 0x16df4285), TOBN(0xb0c9babb, 0xd0c56ae2),
+       TOBN(0x73032b19, 0xcfc5cfc3), TOBN(0xe497e5c3, 0x09752056)},
+      {TOBN(0x12096bb4, 0x164bda96), TOBN(0x1ee42419, 0xa0b74da1),
+       TOBN(0x8fc36243, 0x403826ba), TOBN(0x0c8f0069, 0xdc09e660)}},
+     {{TOBN(0x8667e981, 0xc27253c9), TOBN(0x05a6aefb, 0x92b36a45),
+       TOBN(0xa62c4b36, 0x9cb7bb46), TOBN(0x8394f375, 0x11f7027b)},
+      {TOBN(0x747bc79c, 0x5f109d0f), TOBN(0xcad88a76, 0x5b8cc60a),
+       TOBN(0x80c5a66b, 0x58f09e68), TOBN(0xe753d451, 0xf6127eac)}},
+     {{TOBN(0xc44b74a1, 0x5b0ec6f5), TOBN(0x47989fe4, 0x5289b2b8),
+       TOBN(0x745f8484, 0x58d6fc73), TOBN(0xec362a6f, 0xf61c70ab)},
+      {TOBN(0x070c98a7, 0xb3a8ad41), TOBN(0x73a20fc0, 0x7b63db51),
+       TOBN(0xed2c2173, 0xf44c35f4), TOBN(0x8a56149d, 0x9acc9dca)}},
+     {{TOBN(0x98f17881, 0x9ac6e0f4), TOBN(0x360fdeaf, 0xa413b5ed),
+       TOBN(0x0625b8f4, 0xa300b0fd), TOBN(0xf1f4d76a, 0x5b3222d3)},
+      {TOBN(0x9d6f5109, 0x587f76b8), TOBN(0x8b4ee08d, 0x2317fdb5),
+       TOBN(0x88089bb7, 0x8c68b095), TOBN(0x95570e9a, 0x5808d9b9)}},
+     {{TOBN(0xa395c36f, 0x35d33ae7), TOBN(0x200ea123, 0x50bb5a94),
+       TOBN(0x20c789bd, 0x0bafe84b), TOBN(0x243ef52d, 0x0919276a)},
+      {TOBN(0x3934c577, 0xe23ae233), TOBN(0xb93807af, 0xa460d1ec),
+       TOBN(0xb72a53b1, 0xf8fa76a4), TOBN(0xd8914cb0, 0xc3ca4491)}},
+     {{TOBN(0x2e128494, 0x3fb42622), TOBN(0x3b2700ac, 0x500907d5),
+       TOBN(0xf370fb09, 0x1a95ec63), TOBN(0xf8f30be2, 0x31b6dfbd)},
+      {TOBN(0xf2b2f8d2, 0x69e55f15), TOBN(0x1fead851, 0xcc1323e9),
+       TOBN(0xfa366010, 0xd9e5eef6), TOBN(0x64d487b0, 0xe316107e)}},
+     {{TOBN(0x4c076b86, 0xd23ddc82), TOBN(0x03fd344c, 0x7e0143f0),
+       TOBN(0xa95362ff, 0x317af2c5), TOBN(0x0add3db7, 0xe18b7a4f)},
+      {TOBN(0x9c673e3f, 0x8260e01b), TOBN(0xfbeb49e5, 0x54a1cc91),
+       TOBN(0x91351bf2, 0x92f2e433), TOBN(0xc755e7ec, 0x851141eb)}},
+     {{TOBN(0xc9a95139, 0x29607745), TOBN(0x0ca07420, 0xa26f2b28),
+       TOBN(0xcb2790e7, 0x4bc6f9dd), TOBN(0x345bbb58, 0xadcaffc0)},
+      {TOBN(0xc65ea38c, 0xbe0f27a2), TOBN(0x67c24d7c, 0x641fcb56),
+       TOBN(0x2c25f0a7, 0xa9e2c757), TOBN(0x93f5cdb0, 0x16f16c49)}},
+     {{TOBN(0x2ca5a9d7, 0xc5ee30a1), TOBN(0xd1593635, 0xb909b729),
+       TOBN(0x804ce9f3, 0xdadeff48), TOBN(0xec464751, 0xb07c30c3)},
+      {TOBN(0x89d65ff3, 0x9e49af6a), TOBN(0xf2d6238a, 0x6f3d01bc),
+       TOBN(0x1095561e, 0x0bced843), TOBN(0x51789e12, 0xc8a13fd8)}},
+     {{TOBN(0xd633f929, 0x763231df), TOBN(0x46df9f7d, 0xe7cbddef),
+       TOBN(0x01c889c0, 0xcb265da8), TOBN(0xfce1ad10, 0xaf4336d2)},
+      {TOBN(0x8d110df6, 0xfc6a0a7e), TOBN(0xdd431b98, 0x6da425dc),
+       TOBN(0xcdc4aeab, 0x1834aabe), TOBN(0x84deb124, 0x8439b7fc)}},
+     {{TOBN(0x8796f169, 0x3c2a5998), TOBN(0x9b9247b4, 0x7947190d),
+       TOBN(0x55b9d9a5, 0x11597014), TOBN(0x7e9dd70d, 0x7b1566ee)},
+      {TOBN(0x94ad78f7, 0xcbcd5e64), TOBN(0x0359ac17, 0x9bd4c032),
+       TOBN(0x3b11baaf, 0x7cc222ae), TOBN(0xa6a6e284, 0xba78e812)}},
+     {{TOBN(0x8392053f, 0x24cea1a0), TOBN(0xc97bce4a, 0x33621491),
+       TOBN(0x7eb1db34, 0x35399ee9), TOBN(0x473f78ef, 0xece81ad1)},
+      {TOBN(0x41d72fe0, 0xf63d3d0d), TOBN(0xe620b880, 0xafab62fc),
+       TOBN(0x92096bc9, 0x93158383), TOBN(0x41a21357, 0x8f896f6c)}},
+     {{TOBN(0x1b5ee2fa, 0xc7dcfcab), TOBN(0x650acfde, 0x9546e007),
+       TOBN(0xc081b749, 0xb1b02e07), TOBN(0xda9e41a0, 0xf9eca03d)},
+      {TOBN(0x013ba727, 0x175a54ab), TOBN(0xca0cd190, 0xea5d8d10),
+       TOBN(0x85ea52c0, 0x95fd96a9), TOBN(0x2c591b9f, 0xbc5c3940)}},
+     {{TOBN(0x6fb4d4e4, 0x2bad4d5f), TOBN(0xfa4c3590, 0xfef0059b),
+       TOBN(0x6a10218a, 0xf5122294), TOBN(0x9a78a81a, 0xa85751d1)},
+      {TOBN(0x04f20579, 0xa98e84e7), TOBN(0xfe1242c0, 0x4997e5b5),
+       TOBN(0xe77a273b, 0xca21e1e4), TOBN(0xfcc8b1ef, 0x9411939d)}},
+     {{TOBN(0xe20ea302, 0x92d0487a), TOBN(0x1442dbec, 0x294b91fe),
+       TOBN(0x1f7a4afe, 0xbb6b0e8f), TOBN(0x1700ef74, 0x6889c318)},
+      {TOBN(0xf5bbffc3, 0x70f1fc62), TOBN(0x3b31d4b6, 0x69c79cca),
+       TOBN(0xe8bc2aab, 0xa7f6340d), TOBN(0xb0b08ab4, 0xa725e10a)}},
+     {{TOBN(0x44f05701, 0xae340050), TOBN(0xba4b3016, 0x1cf0c569),
+       TOBN(0x5aa29f83, 0xfbe19a51), TOBN(0x1b9ed428, 0xb71d752e)},
+      {TOBN(0x1666e54e, 0xeb4819f5), TOBN(0x616cdfed, 0x9e18b75b),
+       TOBN(0x112ed5be, 0x3ee27b0b), TOBN(0xfbf28319, 0x44c7de4d)}},
+     {{TOBN(0xd685ec85, 0xe0e60d84), TOBN(0x68037e30, 0x1db7ee78),
+       TOBN(0x5b65bdcd, 0x003c4d6e), TOBN(0x33e7363a, 0x93e29a6a)},
+      {TOBN(0x995b3a61, 0x08d0756c), TOBN(0xd727f85c, 0x2faf134b),
+       TOBN(0xfac6edf7, 0x1d337823), TOBN(0x99b9aa50, 0x0439b8b4)}},
+     {{TOBN(0x722eb104, 0xe2b4e075), TOBN(0x49987295, 0x437c4926),
+       TOBN(0xb1e4c0e4, 0x46a9b82d), TOBN(0xd0cb3197, 0x57a006f5)},
+      {TOBN(0xf3de0f7d, 0xd7808c56), TOBN(0xb5c54d8f, 0x51f89772),
+       TOBN(0x500a114a, 0xadbd31aa), TOBN(0x9afaaaa6, 0x295f6cab)}},
+     {{TOBN(0x94705e21, 0x04cf667a), TOBN(0xfc2a811b, 0x9d3935d7),
+       TOBN(0x560b0280, 0x6d09267c), TOBN(0xf19ed119, 0xf780e53b)},
+      {TOBN(0xf0227c09, 0x067b6269), TOBN(0x967b8533, 0x5caef599),
+       TOBN(0x155b9243, 0x68efeebc), TOBN(0xcd6d34f5, 0xc497bae6)}},
+     {{TOBN(0x1dd8d5d3, 0x6cceb370), TOBN(0x2aeac579, 0xa78d7bf9),
+       TOBN(0x5d65017d, 0x70b67a62), TOBN(0x70c8e44f, 0x17c53f67)},
+      {TOBN(0xd1fc0950, 0x86a34d09), TOBN(0xe0fca256, 0xe7134907),
+       TOBN(0xe24fa29c, 0x80fdd315), TOBN(0x2c4acd03, 0xd87499ad)}},
+     {{TOBN(0xbaaf7517, 0x3b5a9ba6), TOBN(0xb9cbe1f6, 0x12e51a51),
+       TOBN(0xd88edae3, 0x5e154897), TOBN(0xe4309c3c, 0x77b66ca0)},
+      {TOBN(0xf5555805, 0xf67f3746), TOBN(0x85fc37ba, 0xa36401ff),
+       TOBN(0xdf86e2ca, 0xd9499a53), TOBN(0x6270b2a3, 0xecbc955b)}},
+     {{TOBN(0xafae64f5, 0x974ad33b), TOBN(0x04d85977, 0xfe7b2df1),
+       TOBN(0x2a3db3ff, 0x4ab03f73), TOBN(0x0b87878a, 0x8702740a)},
+      {TOBN(0x6d263f01, 0x5a061732), TOBN(0xc25430ce, 0xa32a1901),
+       TOBN(0xf7ebab3d, 0xdb155018), TOBN(0x3a86f693, 0x63a9b78e)}},
+     {{TOBN(0x349ae368, 0xda9f3804), TOBN(0x470f07fe, 0xa164349c),
+       TOBN(0xd52f4cc9, 0x8562baa5), TOBN(0xc74a9e86, 0x2b290df3)},
+      {TOBN(0xd3a1aa35, 0x43471a24), TOBN(0x239446be, 0xb8194511),
+       TOBN(0xbec2dd00, 0x81dcd44d), TOBN(0xca3d7f0f, 0xc42ac82d)}},
+     {{TOBN(0x1f3db085, 0xfdaf4520), TOBN(0xbb6d3e80, 0x4549daf2),
+       TOBN(0xf5969d8a, 0x19ad5c42), TOBN(0x7052b13d, 0xdbfd1511)},
+      {TOBN(0x11890d1b, 0x682b9060), TOBN(0xa71d3883, 0xac34452c),
+       TOBN(0xa438055b, 0x783805b4), TOBN(0x43241277, 0x4725b23e)}},
+     {{TOBN(0xf20cf96e, 0x4901bbed), TOBN(0x6419c710, 0xf432a2bb),
+       TOBN(0x57a0fbb9, 0xdfa9cd7d), TOBN(0x589111e4, 0x00daa249)},
+      {TOBN(0x19809a33, 0x7b60554e), TOBN(0xea5f8887, 0xede283a4),
+       TOBN(0x2d713802, 0x503bfd35), TOBN(0x151bb0af, 0x585d2a53)}},
+     {{TOBN(0x40b08f74, 0x43b30ca8), TOBN(0xe10b5bba, 0xd9934583),
+       TOBN(0xe8a546d6, 0xb51110ad), TOBN(0x1dd50e66, 0x28e0b6c5)},
+      {TOBN(0x292e9d54, 0xcff2b821), TOBN(0x3882555d, 0x47281760),
+       TOBN(0x134838f8, 0x3724d6e3), TOBN(0xf2c679e0, 0x22ddcda1)}},
+     {{TOBN(0x40ee8815, 0x6d2a5768), TOBN(0x7f227bd2, 0x1c1e7e2d),
+       TOBN(0x487ba134, 0xd04ff443), TOBN(0x76e2ff3d, 0xc614e54b)},
+      {TOBN(0x36b88d6f, 0xa3177ec7), TOBN(0xbf731d51, 0x2328fff5),
+       TOBN(0x758caea2, 0x49ba158e), TOBN(0x5ab8ff4c, 0x02938188)}},
+     {{TOBN(0x33e16056, 0x35edc56d), TOBN(0x5a69d349, 0x7e940d79),
+       TOBN(0x6c4fd001, 0x03866dcb), TOBN(0x20a38f57, 0x4893cdef)},
+      {TOBN(0xfbf3e790, 0xfac3a15b), TOBN(0x6ed7ea2e, 0x7a4f8e6b),
+       TOBN(0xa663eb4f, 0xbc3aca86), TOBN(0x22061ea5, 0x080d53f7)}},
+     {{TOBN(0x2480dfe6, 0xf546783f), TOBN(0xd38bc6da, 0x5a0a641e),
+       TOBN(0xfb093cd1, 0x2ede8965), TOBN(0x89654db4, 0xacb455cf)},
+      {TOBN(0x413cbf9a, 0x26e1adee), TOBN(0x291f3764, 0x373294d4),
+       TOBN(0x00797257, 0x648083fe), TOBN(0x25f504d3, 0x208cc341)}},
+     {{TOBN(0x635a8e5e, 0xc3a0ee43), TOBN(0x70aaebca, 0x679898ff),
+       TOBN(0x9ee9f547, 0x5dc63d56), TOBN(0xce987966, 0xffb34d00)},
+      {TOBN(0xf9f86b19, 0x5e26310a), TOBN(0x9e435484, 0x382a8ca8),
+       TOBN(0x253bcb81, 0xc2352fe4), TOBN(0xa4eac8b0, 0x4474b571)}},
+     {{TOBN(0xc1b97512, 0xc1ad8cf8), TOBN(0x193b4e9e, 0x99e0b697),
+       TOBN(0x939d2716, 0x01e85df0), TOBN(0x4fb265b3, 0xcd44eafd)},
+      {TOBN(0x321e7dcd, 0xe51e1ae2), TOBN(0x8e3a8ca6, 0xe3d8b096),
+       TOBN(0x8de46cb0, 0x52604998), TOBN(0x91099ad8, 0x39072aa7)}},
+     {{TOBN(0x2617f91c, 0x93aa96b8), TOBN(0x0fc8716b, 0x7fca2e13),
+       TOBN(0xa7106f5e, 0x95328723), TOBN(0xd1c9c40b, 0x262e6522)},
+      {TOBN(0xb9bafe86, 0x42b7c094), TOBN(0x1873439d, 0x1543c021),
+       TOBN(0xe1baa5de, 0x5cbefd5d), TOBN(0xa363fc5e, 0x521e8aff)}},
+     {{TOBN(0xefe6320d, 0xf862eaac), TOBN(0x14419c63, 0x22c647dc),
+       TOBN(0x0e06707c, 0x4e46d428), TOBN(0xcb6c834f, 0x4a178f8f)},
+      {TOBN(0x0f993a45, 0xd30f917c), TOBN(0xd4c4b049, 0x9879afee),
+       TOBN(0xb6142a1e, 0x70500063), TOBN(0x7c9b41c3, 0xa5d9d605)}},
+     {{TOBN(0xbc00fc2f, 0x2f8ba2c7), TOBN(0x0966eb2f, 0x7c67aa28),
+       TOBN(0x13f7b516, 0x5a786972), TOBN(0x3bfb7557, 0x8a2fbba0)},
+      {TOBN(0x131c4f23, 0x5a2b9620), TOBN(0xbff3ed27, 0x6faf46be),
+       TOBN(0x9b4473d1, 0x7e172323), TOBN(0x421e8878, 0x339f6246)}},
+     {{TOBN(0x0fa8587a, 0x25a41632), TOBN(0xc0814124, 0xa35b6c93),
+       TOBN(0x2b18a9f5, 0x59ebb8db), TOBN(0x264e3357, 0x76edb29c)},
+      {TOBN(0xaf245ccd, 0xc87c51e2), TOBN(0x16b3015b, 0x501e6214),
+       TOBN(0xbb31c560, 0x0a3882ce), TOBN(0x6961bb94, 0xfec11e04)}},
+     {{TOBN(0x3b825b8d, 0xeff7a3a0), TOBN(0xbec33738, 0xb1df7326),
+       TOBN(0x68ad747c, 0x99604a1f), TOBN(0xd154c934, 0x9a3bd499)},
+      {TOBN(0xac33506f, 0x1cc7a906), TOBN(0x73bb5392, 0x6c560e8f),
+       TOBN(0x6428fcbe, 0x263e3944), TOBN(0xc11828d5, 0x1c387434)}},
+     {{TOBN(0x3cd04be1, 0x3e4b12ff), TOBN(0xc3aad9f9, 0x2d88667c),
+       TOBN(0xc52ddcf8, 0x248120cf), TOBN(0x985a892e, 0x2a389532)},
+      {TOBN(0xfbb4b21b, 0x3bb85fa0), TOBN(0xf95375e0, 0x8dfc6269),
+       TOBN(0xfb4fb06c, 0x7ee2acea), TOBN(0x6785426e, 0x309c4d1f)}},
+     {{TOBN(0x659b17c8, 0xd8ceb147), TOBN(0x9b649eee, 0xb70a5554),
+       TOBN(0x6b7fa0b5, 0xac6bc634), TOBN(0xd99fe2c7, 0x1d6e732f)},
+      {TOBN(0x30e6e762, 0x8d3abba2), TOBN(0x18fee6e7, 0xa797b799),
+       TOBN(0x5c9d360d, 0xc696464d), TOBN(0xe3baeb48, 0x27bfde12)}},
+     {{TOBN(0x2bf5db47, 0xf23206d5), TOBN(0x2f6d3420, 0x1d260152),
+       TOBN(0x17b87653, 0x3f8ff89a), TOBN(0x5157c30c, 0x378fa458)},
+      {TOBN(0x7517c5c5, 0x2d4fb936), TOBN(0xef22f7ac, 0xe6518cdc),
+       TOBN(0xdeb483e6, 0xbf847a64), TOBN(0xf5084558, 0x92e0fa89)}}},
+    {{{TOBN(0xab9659d8, 0xdf7304d4), TOBN(0xb71bcf1b, 0xff210e8e),
+       TOBN(0xa9a2438b, 0xd73fbd60), TOBN(0x4595cd1f, 0x5d11b4de)},
+      {TOBN(0x9c0d329a, 0x4835859d), TOBN(0x4a0f0d2d, 0x7dbb6e56),
+       TOBN(0xc6038e5e, 0xdf928a4e), TOBN(0xc9429621, 0x8f5ad154)}},
+     {{TOBN(0x91213462, 0xf23f2d92), TOBN(0x6cab71bd, 0x60b94078),
+       TOBN(0x6bdd0a63, 0x176cde20), TOBN(0x54c9b20c, 0xee4d54bc)},
+      {TOBN(0x3cd2d8aa, 0x9f2ac02f), TOBN(0x03f8e617, 0x206eedb0),
+       TOBN(0xc7f68e16, 0x93086434), TOBN(0x831469c5, 0x92dd3db9)}},
+     {{TOBN(0x8521df24, 0x8f981354), TOBN(0x587e23ec, 0x3588a259),
+       TOBN(0xcbedf281, 0xd7a0992c), TOBN(0x06930a55, 0x38961407)},
+      {TOBN(0x09320deb, 0xbe5bbe21), TOBN(0xa7ffa5b5, 0x2491817f),
+       TOBN(0xe6c8b4d9, 0x09065160), TOBN(0xac4f3992, 0xfff6d2a9)}},
+     {{TOBN(0x7aa7a158, 0x3ae9c1bd), TOBN(0xe0af6d98, 0xe37ce240),
+       TOBN(0xe54342d9, 0x28ab38b4), TOBN(0xe8b75007, 0x0a1c98ca)},
+      {TOBN(0xefce86af, 0xe02358f2), TOBN(0x31b8b856, 0xea921228),
+       TOBN(0x052a1912, 0x0a1c67fc), TOBN(0xb4069ea4, 0xe3aead59)}},
+     {{TOBN(0x3232d6e2, 0x7fa03cb3), TOBN(0xdb938e5b, 0x0fdd7d88),
+       TOBN(0x04c1d2cd, 0x2ccbfc5d), TOBN(0xd2f45c12, 0xaf3a580f)},
+      {TOBN(0x592620b5, 0x7883e614), TOBN(0x5fd27e68, 0xbe7c5f26),
+       TOBN(0x139e45a9, 0x1567e1e3), TOBN(0x2cc71d2d, 0x44d8aaaf)}},
+     {{TOBN(0x4a9090cd, 0xe36d0757), TOBN(0xf722d7b1, 0xd9a29382),
+       TOBN(0xfb7fb04c, 0x04b48ddf), TOBN(0x628ad2a7, 0xebe16f43)},
+      {TOBN(0xcd3fbfb5, 0x20226040), TOBN(0x6c34ecb1, 0x5104b6c4),
+       TOBN(0x30c0754e, 0xc903c188), TOBN(0xec336b08, 0x2d23cab0)}},
+     {{TOBN(0x473d62a2, 0x1e206ee5), TOBN(0xf1e27480, 0x8c49a633),
+       TOBN(0x87ab956c, 0xe9f6b2c3), TOBN(0x61830b48, 0x62b606ea)},
+      {TOBN(0x67cd6846, 0xe78e815f), TOBN(0xfe40139f, 0x4c02082a),
+       TOBN(0x52bbbfcb, 0x952ec365), TOBN(0x74c11642, 0x6b9836ab)}},
+     {{TOBN(0x9f51439e, 0x558df019), TOBN(0x230da4ba, 0xac712b27),
+       TOBN(0x518919e3, 0x55185a24), TOBN(0x4dcefcdd, 0x84b78f50)},
+      {TOBN(0xa7d90fb2, 0xa47d4c5a), TOBN(0x55ac9abf, 0xb30e009e),
+       TOBN(0xfd2fc359, 0x74eed273), TOBN(0xb72d824c, 0xdbea8faf)}},
+     {{TOBN(0xce721a74, 0x4513e2ca), TOBN(0x0b418612, 0x38240b2c),
+       TOBN(0x05199968, 0xd5baa450), TOBN(0xeb1757ed, 0x2b0e8c25)},
+      {TOBN(0x6ebc3e28, 0x3dfac6d5), TOBN(0xb2431e2e, 0x48a237f5),
+       TOBN(0x2acb5e23, 0x52f61499), TOBN(0x5558a2a7, 0xe06c936b)}},
+     {{TOBN(0xd213f923, 0xcbb13d1b), TOBN(0x98799f42, 0x5bfb9bfe),
+       TOBN(0x1ae8ddc9, 0x701144a9), TOBN(0x0b8b3bb6, 0x4c5595ee)},
+      {TOBN(0x0ea9ef2e, 0x3ecebb21), TOBN(0x17cb6c4b, 0x3671f9a7),
+       TOBN(0x47ef464f, 0x726f1d1f), TOBN(0x171b9484, 0x6943a276)}},
+     {{TOBN(0x51a4ae2d, 0x7ef0329c), TOBN(0x08509222, 0x91c4402a),
+       TOBN(0x64a61d35, 0xafd45bbc), TOBN(0x38f096fe, 0x3035a851)},
+      {TOBN(0xc7468b74, 0xa1dec027), TOBN(0xe8cf10e7, 0x4fc7dcba),
+       TOBN(0xea35ff40, 0xf4a06353), TOBN(0x0b4c0dfa, 0x8b77dd66)}},
+     {{TOBN(0x779b8552, 0xde7e5c19), TOBN(0xfab28609, 0xc1c0256c),
+       TOBN(0x64f58eee, 0xabd4743d), TOBN(0x4e8ef838, 0x7b6cc93b)},
+      {TOBN(0xee650d26, 0x4cb1bf3d), TOBN(0x4c1f9d09, 0x73dedf61),
+       TOBN(0xaef7c9d7, 0xbfb70ced), TOBN(0x1ec0507e, 0x1641de1e)}},
+     {{TOBN(0xcd7e5cc7, 0xcde45079), TOBN(0xde173c9a, 0x516ac9e4),
+       TOBN(0x517a8494, 0xc170315c), TOBN(0x438fd905, 0x91d8e8fb)},
+      {TOBN(0x5145c506, 0xc7d9630b), TOBN(0x6457a87b, 0xf47d4d75),
+       TOBN(0xd31646bf, 0x0d9a80e8), TOBN(0x453add2b, 0xcef3aabe)}},
+     {{TOBN(0xc9941109, 0xa607419d), TOBN(0xfaa71e62, 0xbb6bca80),
+       TOBN(0x34158c13, 0x07c431f3), TOBN(0x594abebc, 0x992bc47a)},
+      {TOBN(0x6dfea691, 0xeb78399f), TOBN(0x48aafb35, 0x3f42cba4),
+       TOBN(0xedcd65af, 0x077c04f0), TOBN(0x1a29a366, 0xe884491a)}},
+     {{TOBN(0x023a40e5, 0x1c21f2bf), TOBN(0xf99a513c, 0xa5057aee),
+       TOBN(0xa3fe7e25, 0xbcab072e), TOBN(0x8568d2e1, 0x40e32bcf)},
+      {TOBN(0x904594eb, 0xd3f69d9f), TOBN(0x181a9733, 0x07affab1),
+       TOBN(0xe4d68d76, 0xb6e330f4), TOBN(0x87a6dafb, 0xc75a7fc1)}},
+     {{TOBN(0x549db2b5, 0xef7d9289), TOBN(0x2480d4a8, 0x197f015a),
+       TOBN(0x61d5590b, 0xc40493b6), TOBN(0x3a55b52e, 0x6f780331)},
+      {TOBN(0x40eb8115, 0x309eadb0), TOBN(0xdea7de5a, 0x92e5c625),
+       TOBN(0x64d631f0, 0xcc6a3d5a), TOBN(0x9d5e9d7c, 0x93e8dd61)}},
+     {{TOBN(0xf297bef5, 0x206d3ffc), TOBN(0x23d5e033, 0x7d808bd4),
+       TOBN(0x4a4f6912, 0xd24cf5ba), TOBN(0xe4d8163b, 0x09cdaa8a)},
+      {TOBN(0x0e0de9ef, 0xd3082e8e), TOBN(0x4fe1246c, 0x0192f360),
+       TOBN(0x1f900150, 0x4b8eee0a), TOBN(0x5219da81, 0xf1da391b)}},
+     {{TOBN(0x7bf6a5c1, 0xf7ea25aa), TOBN(0xd165e6bf, 0xfbb07d5f),
+       TOBN(0xe3539361, 0x89e78671), TOBN(0xa3fcac89, 0x2bac4219)},
+      {TOBN(0xdfab6fd4, 0xf0baa8ab), TOBN(0x5a4adac1, 0xe2c1c2e5),
+       TOBN(0x6cd75e31, 0x40d85849), TOBN(0xce263fea, 0x19b39181)}},
+     {{TOBN(0xcb6803d3, 0x07032c72), TOBN(0x7f40d5ce, 0x790968c8),
+       TOBN(0xa6de86bd, 0xdce978f0), TOBN(0x25547c4f, 0x368f751c)},
+      {TOBN(0xb1e685fd, 0x65fb2a9e), TOBN(0xce69336f, 0x1eb9179c),
+       TOBN(0xb15d1c27, 0x12504442), TOBN(0xb7df465c, 0xb911a06b)}},
+     {{TOBN(0xb8d804a3, 0x315980cd), TOBN(0x693bc492, 0xfa3bebf7),
+       TOBN(0x3578aeee, 0x2253c504), TOBN(0x158de498, 0xcd2474a2)},
+      {TOBN(0x1331f5c7, 0xcfda8368), TOBN(0xd2d7bbb3, 0x78d7177e),
+       TOBN(0xdf61133a, 0xf3c1e46e), TOBN(0x5836ce7d, 0xd30e7be8)}},
+     {{TOBN(0x83084f19, 0x94f834cb), TOBN(0xd35653d4, 0x429ed782),
+       TOBN(0xa542f16f, 0x59e58243), TOBN(0xc2b52f65, 0x0470a22d)},
+      {TOBN(0xe3b6221b, 0x18f23d96), TOBN(0xcb05abac, 0x3f5252b4),
+       TOBN(0xca00938b, 0x87d61402), TOBN(0x2f186cdd, 0x411933e4)}},
+     {{TOBN(0xe042ece5, 0x9a29a5c5), TOBN(0xb19b3c07, 0x3b6c8402),
+       TOBN(0xc97667c7, 0x19d92684), TOBN(0xb5624622, 0xebc66372)},
+      {TOBN(0x0cb96e65, 0x3c04fa02), TOBN(0x83a7176c, 0x8eaa39aa),
+       TOBN(0x2033561d, 0xeaa1633f), TOBN(0x45a9d086, 0x4533df73)}},
+     {{TOBN(0xe0542c1d, 0x3dc090bc), TOBN(0x82c996ef, 0xaa59c167),
+       TOBN(0xe3f735e8, 0x0ee7fc4d), TOBN(0x7b179393, 0x7c35db79)},
+      {TOBN(0xb6419e25, 0xf8c5dbfd), TOBN(0x4d9d7a1e, 0x1f327b04),
+       TOBN(0x979f6f9b, 0x298dfca8), TOBN(0xc7c5dff1, 0x8de9366a)}},
+     {{TOBN(0x1b7a588d, 0x04c82bdd), TOBN(0x68005534, 0xf8319dfd),
+       TOBN(0xde8a55b5, 0xd8eb9580), TOBN(0x5ea886da, 0x8d5bca81)},
+      {TOBN(0xe8530a01, 0x252a0b4d), TOBN(0x1bffb4fe, 0x35eaa0a1),
+       TOBN(0x2ad828b1, 0xd8e99563), TOBN(0x7de96ef5, 0x95f9cd87)}},
+     {{TOBN(0x4abb2d0c, 0xd77d970c), TOBN(0x03cfb933, 0xd33ef9cb),
+       TOBN(0xb0547c01, 0x8b211fe9), TOBN(0x2fe64809, 0xa56ed1c6)},
+      {TOBN(0xcb7d5624, 0xc2ac98cc), TOBN(0x2a1372c0, 0x1a393e33),
+       TOBN(0xc8d1ec1c, 0x29660521), TOBN(0xf3d31b04, 0xb37ac3e9)}},
+     {{TOBN(0xa29ae9df, 0x5ece6e7c), TOBN(0x0603ac8f, 0x0facfb55),
+       TOBN(0xcfe85b7a, 0xdda233a5), TOBN(0xe618919f, 0xbd75f0b8)},
+      {TOBN(0xf555a3d2, 0x99bf1603), TOBN(0x1f43afc9, 0xf184255a),
+       TOBN(0xdcdaf341, 0x319a3e02), TOBN(0xd3b117ef, 0x03903a39)}},
+     {{TOBN(0xe095da13, 0x65d1d131), TOBN(0x86f16367, 0xc37ad03e),
+       TOBN(0x5f37389e, 0x462cd8dd), TOBN(0xc103fa04, 0xd67a60e6)},
+      {TOBN(0x57c34344, 0xf4b478f0), TOBN(0xce91edd8, 0xe117c98d),
+       TOBN(0x001777b0, 0x231fc12e), TOBN(0x11ae47f2, 0xb207bccb)}},
+     {{TOBN(0xd983cf8d, 0x20f8a242), TOBN(0x7aff5b1d, 0xf22e1ad8),
+       TOBN(0x68fd11d0, 0x7fc4feb3), TOBN(0x5d53ae90, 0xb0f1c3e1)},
+      {TOBN(0x50fb7905, 0xec041803), TOBN(0x85e3c977, 0x14404888),
+       TOBN(0x0e67faed, 0xac628d8f), TOBN(0x2e865150, 0x6668532c)}},
+     {{TOBN(0x15acaaa4, 0x6a67a6b0), TOBN(0xf4cdee25, 0xb25cec41),
+       TOBN(0x49ee565a, 0xe4c6701e), TOBN(0x2a04ca66, 0xfc7d63d8)},
+      {TOBN(0xeb105018, 0xef0543fb), TOBN(0xf709a4f5, 0xd1b0d81d),
+       TOBN(0x5b906ee6, 0x2915d333), TOBN(0xf4a87412, 0x96f1f0ab)}},
+     {{TOBN(0xb6b82fa7, 0x4d82f4c2), TOBN(0x90725a60, 0x6804efb3),
+       TOBN(0xbc82ec46, 0xadc3425e), TOBN(0xb7b80581, 0x2787843e)},
+      {TOBN(0xdf46d91c, 0xdd1fc74c), TOBN(0xdc1c62cb, 0xe783a6c4),
+       TOBN(0x59d1b9f3, 0x1a04cbba), TOBN(0xd87f6f72, 0x95e40764)}},
+     {{TOBN(0x02b4cfc1, 0x317f4a76), TOBN(0x8d2703eb, 0x91036bce),
+       TOBN(0x98206cc6, 0xa5e72a56), TOBN(0x57be9ed1, 0xcf53fb0f)},
+      {TOBN(0x09374571, 0xef0b17ac), TOBN(0x74b2655e, 0xd9181b38),
+       TOBN(0xc8f80ea8, 0x89935d0e), TOBN(0xc0d9e942, 0x91529936)}},
+     {{TOBN(0x19686041, 0x1e84e0e5), TOBN(0xa5db84d3, 0xaea34c93),
+       TOBN(0xf9d5bb19, 0x7073a732), TOBN(0xb8d2fe56, 0x6bcfd7c0)},
+      {TOBN(0x45775f36, 0xf3eb82fa), TOBN(0x8cb20ccc, 0xfdff8b58),
+       TOBN(0x1659b65f, 0x8374c110), TOBN(0xb8b4a422, 0x330c789a)}},
+     {{TOBN(0x75e3c3ea, 0x6fe8208b), TOBN(0xbd74b9e4, 0x286e78fe),
+       TOBN(0x0be2e81b, 0xd7d93a1a), TOBN(0x7ed06e27, 0xdd0a5aae)},
+      {TOBN(0x721f5a58, 0x6be8b800), TOBN(0x428299d1, 0xd846db28),
+       TOBN(0x95cb8e6b, 0x5be88ed3), TOBN(0xc3186b23, 0x1c034e11)}},
+     {{TOBN(0xa6312c9e, 0x8977d99b), TOBN(0xbe944331, 0x83f531e7),
+       TOBN(0x8232c0c2, 0x18d3b1d4), TOBN(0x617aae8b, 0xe1247b73)},
+      {TOBN(0x40153fc4, 0x282aec3b), TOBN(0xc6063d2f, 0xf7b8f823),
+       TOBN(0x68f10e58, 0x3304f94c), TOBN(0x31efae74, 0xee676346)}},
+     {{TOBN(0xbadb6c6d, 0x40a9b97c), TOBN(0x14702c63, 0x4f666256),
+       TOBN(0xdeb954f1, 0x5184b2e3), TOBN(0x5184a526, 0x94b6ca40)},
+      {TOBN(0xfff05337, 0x003c32ea), TOBN(0x5aa374dd, 0x205974c7),
+       TOBN(0x9a763854, 0x4b0dd71a), TOBN(0x459cd27f, 0xdeb947ec)}},
+     {{TOBN(0xa6e28161, 0x459c2b92), TOBN(0x2f020fa8, 0x75ee8ef5),
+       TOBN(0xb132ec2d, 0x30b06310), TOBN(0xc3e15899, 0xbc6a4530)},
+      {TOBN(0xdc5f53fe, 0xaa3f451a), TOBN(0x3a3c7f23, 0xc2d9acac),
+       TOBN(0x2ec2f892, 0x6b27e58b), TOBN(0x68466ee7, 0xd742799f)}},
+     {{TOBN(0x98324dd4, 0x1fa26613), TOBN(0xa2dc6dab, 0xbdc29d63),
+       TOBN(0xf9675faa, 0xd712d657), TOBN(0x813994be, 0x21fd8d15)},
+      {TOBN(0x5ccbb722, 0xfd4f7553), TOBN(0x5135ff8b, 0xf3a36b20),
+       TOBN(0x44be28af, 0x69559df5), TOBN(0x40b65bed, 0x9d41bf30)}},
+     {{TOBN(0xd98bf2a4, 0x3734e520), TOBN(0x5e3abbe3, 0x209bdcba),
+       TOBN(0x77c76553, 0xbc945b35), TOBN(0x5331c093, 0xc6ef14aa)},
+      {TOBN(0x518ffe29, 0x76b60c80), TOBN(0x2285593b, 0x7ace16f8),
+       TOBN(0xab1f64cc, 0xbe2b9784), TOBN(0xe8f2c0d9, 0xab2421b6)}},
+     {{TOBN(0x617d7174, 0xc1df065c), TOBN(0xafeeb5ab, 0x5f6578fa),
+       TOBN(0x16ff1329, 0x263b54a8), TOBN(0x45c55808, 0xc990dce3)},
+      {TOBN(0x42eab6c0, 0xecc8c177), TOBN(0x799ea9b5, 0x5982ecaa),
+       TOBN(0xf65da244, 0xb607ef8e), TOBN(0x8ab226ce, 0x32a3fc2c)}},
+     {{TOBN(0x745741e5, 0x7ea973dc), TOBN(0x5c00ca70, 0x20888f2e),
+       TOBN(0x7cdce3cf, 0x45fd9cf1), TOBN(0x8a741ef1, 0x5507f872)},
+      {TOBN(0x47c51c2f, 0x196b4cec), TOBN(0x70d08e43, 0xc97ea618),
+       TOBN(0x930da15c, 0x15b18a2b), TOBN(0x33b6c678, 0x2f610514)}},
+     {{TOBN(0xc662e4f8, 0x07ac9794), TOBN(0x1eccf050, 0xba06cb79),
+       TOBN(0x1ff08623, 0xe7d954e5), TOBN(0x6ef2c5fb, 0x24cf71c3)},
+      {TOBN(0xb2c063d2, 0x67978453), TOBN(0xa0cf3796, 0x1d654af8),
+       TOBN(0x7cb242ea, 0x7ebdaa37), TOBN(0x206e0b10, 0xb86747e0)}},
+     {{TOBN(0x481dae5f, 0xd5ecfefc), TOBN(0x07084fd8, 0xc2bff8fc),
+       TOBN(0x8040a01a, 0xea324596), TOBN(0x4c646980, 0xd4de4036)},
+      {TOBN(0x9eb8ab4e, 0xd65abfc3), TOBN(0xe01cb91f, 0x13541ec7),
+       TOBN(0x8f029adb, 0xfd695012), TOBN(0x9ae28483, 0x3c7569ec)}},
+     {{TOBN(0xa5614c9e, 0xa66d80a1), TOBN(0x680a3e44, 0x75f5f911),
+       TOBN(0x0c07b14d, 0xceba4fc1), TOBN(0x891c285b, 0xa13071c1)},
+      {TOBN(0xcac67ceb, 0x799ece3c), TOBN(0x29b910a9, 0x41e07e27),
+       TOBN(0x66bdb409, 0xf2e43123), TOBN(0x06f8b137, 0x7ac9ecbe)}},
+     {{TOBN(0x5981fafd, 0x38547090), TOBN(0x19ab8b9f, 0x85e3415d),
+       TOBN(0xfc28c194, 0xc7e31b27), TOBN(0x843be0aa, 0x6fbcbb42)},
+      {TOBN(0xf3b1ed43, 0xa6db836c), TOBN(0x2a1330e4, 0x01a45c05),
+       TOBN(0x4f19f3c5, 0x95c1a377), TOBN(0xa85f39d0, 0x44b5ee33)}},
+     {{TOBN(0x3da18e6d, 0x4ae52834), TOBN(0x5a403b39, 0x7423dcb0),
+       TOBN(0xbb555e0a, 0xf2374aef), TOBN(0x2ad599c4, 0x1e8ca111)},
+      {TOBN(0x1b3a2fb9, 0x014b3bf8), TOBN(0x73092684, 0xf66d5007),
+       TOBN(0x079f1426, 0xc4340102), TOBN(0x1827cf81, 0x8fddf4de)}},
+     {{TOBN(0xc83605f6, 0xf10ff927), TOBN(0xd3871451, 0x23739fc6),
+       TOBN(0x6d163450, 0xcac1c2cc), TOBN(0x6b521296, 0xa2ec1ac5)},
+      {TOBN(0x0606c4f9, 0x6e3cb4a5), TOBN(0xe47d3f41, 0x778abff7),
+       TOBN(0x425a8d5e, 0xbe8e3a45), TOBN(0x53ea9e97, 0xa6102160)}},
+     {{TOBN(0x477a106e, 0x39cbb688), TOBN(0x532401d2, 0xf3386d32),
+       TOBN(0x8e564f64, 0xb1b9b421), TOBN(0xca9b8388, 0x81dad33f)},
+      {TOBN(0xb1422b4e, 0x2093913e), TOBN(0x533d2f92, 0x69bc8112),
+       TOBN(0x3fa017be, 0xebe7b2c7), TOBN(0xb2767c4a, 0xcaf197c6)}},
+     {{TOBN(0xc925ff87, 0xaedbae9f), TOBN(0x7daf0eb9, 0x36880a54),
+       TOBN(0x9284ddf5, 0x9c4d0e71), TOBN(0x1581cf93, 0x316f8cf5)},
+      {TOBN(0x3eeca887, 0x3ac1f452), TOBN(0xb417fce9, 0xfb6aeffe),
+       TOBN(0xa5918046, 0xeefb8dc3), TOBN(0x73d318ac, 0x02209400)}},
+     {{TOBN(0xe800400f, 0x728693e5), TOBN(0xe87d814b, 0x339927ed),
+       TOBN(0x93e94d3b, 0x57ea9910), TOBN(0xff8a35b6, 0x2245fb69)},
+      {TOBN(0x043853d7, 0x7f200d34), TOBN(0x470f1e68, 0x0f653ce1),
+       TOBN(0x81ac05bd, 0x59a06379), TOBN(0xa14052c2, 0x03930c29)}},
+     {{TOBN(0x6b72fab5, 0x26bc2797), TOBN(0x13670d16, 0x99f16771),
+       TOBN(0x00170052, 0x1e3e48d1), TOBN(0x978fe401, 0xb7adf678)},
+      {TOBN(0x55ecfb92, 0xd41c5dd4), TOBN(0x5ff8e247, 0xc7b27da5),
+       TOBN(0xe7518272, 0x013fb606), TOBN(0x5768d7e5, 0x2f547a3c)}},
+     {{TOBN(0xbb24eaa3, 0x60017a5f), TOBN(0x6b18e6e4, 0x9c64ce9b),
+       TOBN(0xc225c655, 0x103dde07), TOBN(0xfc3672ae, 0x7592f7ea)},
+      {TOBN(0x9606ad77, 0xd06283a1), TOBN(0x542fc650, 0xe4d59d99),
+       TOBN(0xabb57c49, 0x2a40e7c2), TOBN(0xac948f13, 0xa8db9f55)}},
+     {{TOBN(0x6d4c9682, 0xb04465c3), TOBN(0xe3d062fa, 0x6468bd15),
+       TOBN(0xa51729ac, 0x5f318d7e), TOBN(0x1fc87df6, 0x9eb6fc95)},
+      {TOBN(0x63d146a8, 0x0591f652), TOBN(0xa861b8f7, 0x589621aa),
+       TOBN(0x59f5f15a, 0xce31348c), TOBN(0x8f663391, 0x440da6da)}},
+     {{TOBN(0xcfa778ac, 0xb591ffa3), TOBN(0x027ca9c5, 0x4cdfebce),
+       TOBN(0xbe8e05a5, 0x444ea6b3), TOBN(0x8aab4e69, 0xa78d8254)},
+      {TOBN(0x2437f04f, 0xb474d6b8), TOBN(0x6597ffd4, 0x045b3855),
+       TOBN(0xbb0aea4e, 0xca47ecaa), TOBN(0x568aae83, 0x85c7ebfc)}},
+     {{TOBN(0x0e966e64, 0xc73b2383), TOBN(0x49eb3447, 0xd17d8762),
+       TOBN(0xde107821, 0x8da05dab), TOBN(0x443d8baa, 0x016b7236)},
+      {TOBN(0x163b63a5, 0xea7610d6), TOBN(0xe47e4185, 0xce1ca979),
+       TOBN(0xae648b65, 0x80baa132), TOBN(0xebf53de2, 0x0e0d5b64)}},
+     {{TOBN(0x8d3bfcb4, 0xd3c8c1ca), TOBN(0x0d914ef3, 0x5d04b309),
+       TOBN(0x55ef6415, 0x3de7d395), TOBN(0xbde1666f, 0x26b850e8)},
+      {TOBN(0xdbe1ca6e, 0xd449ab19), TOBN(0x8902b322, 0xe89a2672),
+       TOBN(0xb1674b7e, 0xdacb7a53), TOBN(0x8e9faf6e, 0xf52523ff)}},
+     {{TOBN(0x6ba535da, 0x9a85788b), TOBN(0xd21f03ae, 0xbd0626d4),
+       TOBN(0x099f8c47, 0xe873dc64), TOBN(0xcda8564d, 0x018ec97e)},
+      {TOBN(0x3e8d7a5c, 0xde92c68c), TOBN(0x78e035a1, 0x73323cc4),
+       TOBN(0x3ef26275, 0xf880ff7c), TOBN(0xa4ee3dff, 0x273eedaa)}},
+     {{TOBN(0x58823507, 0xaf4e18f8), TOBN(0x967ec9b5, 0x0672f328),
+       TOBN(0x9ded19d9, 0x559d3186), TOBN(0x5e2ab3de, 0x6cdce39c)},
+      {TOBN(0xabad6e4d, 0x11c226df), TOBN(0xf9783f43, 0x87723014),
+       TOBN(0x9a49a0cf, 0x1a885719), TOBN(0xfc0c1a5a, 0x90da9dbf)}},
+     {{TOBN(0x8bbaec49, 0x571d92ac), TOBN(0x569e85fe, 0x4692517f),
+       TOBN(0x8333b014, 0xa14ea4af), TOBN(0x32f2a62f, 0x12e5c5ad)},
+      {TOBN(0x98c2ce3a, 0x06d89b85), TOBN(0xb90741aa, 0x2ff77a08),
+       TOBN(0x2530defc, 0x01f795a2), TOBN(0xd6e5ba0b, 0x84b3c199)}},
+     {{TOBN(0x7d8e8451, 0x12e4c936), TOBN(0xae419f7d, 0xbd0be17b),
+       TOBN(0xa583fc8c, 0x22262bc9), TOBN(0x6b842ac7, 0x91bfe2bd)},
+      {TOBN(0x33cef4e9, 0x440d6827), TOBN(0x5f69f4de, 0xef81fb14),
+       TOBN(0xf16cf6f6, 0x234fbb92), TOBN(0x76ae3fc3, 0xd9e7e158)}},
+     {{TOBN(0x4e89f6c2, 0xe9740b33), TOBN(0x677bc85d, 0x4962d6a1),
+       TOBN(0x6c6d8a7f, 0x68d10d15), TOBN(0x5f9a7224, 0x0257b1cd)},
+      {TOBN(0x7096b916, 0x4ad85961), TOBN(0x5f8c47f7, 0xe657ab4a),
+       TOBN(0xde57d7d0, 0xf7461d7e), TOBN(0x7eb6094d, 0x80ce5ee2)}},
+     {{TOBN(0x0b1e1dfd, 0x34190547), TOBN(0x8a394f43, 0xf05dd150),
+       TOBN(0x0a9eb24d, 0x97df44e6), TOBN(0x78ca06bf, 0x87675719)},
+      {TOBN(0x6f0b3462, 0x6ffeec22), TOBN(0x9d91bcea, 0x36cdd8fb),
+       TOBN(0xac83363c, 0xa105be47), TOBN(0x81ba76c1, 0x069710e3)}},
+     {{TOBN(0x3d1b24cb, 0x28c682c6), TOBN(0x27f25228, 0x8612575b),
+       TOBN(0xb587c779, 0xe8e66e98), TOBN(0x7b0c03e9, 0x405eb1fe)},
+      {TOBN(0xfdf0d030, 0x15b548e7), TOBN(0xa8be76e0, 0x38b36af7),
+       TOBN(0x4cdab04a, 0x4f310c40), TOBN(0x6287223e, 0xf47ecaec)}},
+     {{TOBN(0x678e6055, 0x8b399320), TOBN(0x61fe3fa6, 0xc01e4646),
+       TOBN(0xc482866b, 0x03261a5e), TOBN(0xdfcf45b8, 0x5c2f244a)},
+      {TOBN(0x8fab9a51, 0x2f684b43), TOBN(0xf796c654, 0xc7220a66),
+       TOBN(0x1d90707e, 0xf5afa58f), TOBN(0x2c421d97, 0x4fdbe0de)}},
+     {{TOBN(0xc4f4cda3, 0xaf2ebc2f), TOBN(0xa0af843d, 0xcb4efe24),
+       TOBN(0x53b857c1, 0x9ccd10b1), TOBN(0xddc9d1eb, 0x914d3e04)},
+      {TOBN(0x7bdec8bb, 0x62771deb), TOBN(0x829277aa, 0x91c5aa81),
+       TOBN(0x7af18dd6, 0x832391ae), TOBN(0x1740f316, 0xc71a84ca)}}},
+    {{{TOBN(0x8928e99a, 0xeeaf8c49), TOBN(0xee7aa73d, 0x6e24d728),
+       TOBN(0x4c5007c2, 0xe72b156c), TOBN(0x5fcf57c5, 0xed408a1d)},
+      {TOBN(0x9f719e39, 0xb6057604), TOBN(0x7d343c01, 0xc2868bbf),
+       TOBN(0x2cca254b, 0x7e103e2d), TOBN(0xe6eb38a9, 0xf131bea2)}},
+     {{TOBN(0xb33e624f, 0x8be762b4), TOBN(0x2a9ee4d1, 0x058e3413),
+       TOBN(0x968e6369, 0x67d805fa), TOBN(0x9848949b, 0x7db8bfd7)},
+      {TOBN(0x5308d7e5, 0xd23a8417), TOBN(0x892f3b1d, 0xf3e29da5),
+       TOBN(0xc95c139e, 0x3dee471f), TOBN(0x8631594d, 0xd757e089)}},
+     {{TOBN(0xe0c82a3c, 0xde918dcc), TOBN(0x2e7b5994, 0x26fdcf4b),
+       TOBN(0x82c50249, 0x32cb1b2d), TOBN(0xea613a9d, 0x7657ae07)},
+      {TOBN(0xc2eb5f6c, 0xf1fdc9f7), TOBN(0xb6eae8b8, 0x879fe682),
+       TOBN(0x253dfee0, 0x591cbc7f), TOBN(0x000da713, 0x3e1290e6)}},
+     {{TOBN(0x1083e2ea, 0x1f095615), TOBN(0x0a28ad77, 0x14e68c33),
+       TOBN(0x6bfc0252, 0x3d8818be), TOBN(0xb585113a, 0xf35850cd)},
+      {TOBN(0x7d935f0b, 0x30df8aa1), TOBN(0xaddda07c, 0x4ab7e3ac),
+       TOBN(0x92c34299, 0x552f00cb), TOBN(0xc33ed1de, 0x2909df6c)}},
+     {{TOBN(0x22c2195d, 0x80e87766), TOBN(0x9e99e6d8, 0x9ddf4ac0),
+       TOBN(0x09642e4e, 0x65e74934), TOBN(0x2610ffa2, 0xff1ff241)},
+      {TOBN(0x4d1d47d4, 0x751c8159), TOBN(0x697b4985, 0xaf3a9363),
+       TOBN(0x0318ca46, 0x87477c33), TOBN(0xa90cb565, 0x9441eff3)}},
+     {{TOBN(0x58bb3848, 0x36f024cb), TOBN(0x85be1f77, 0x36016168),
+       TOBN(0x6c59587c, 0xdc7e07f1), TOBN(0x191be071, 0xaf1d8f02)},
+      {TOBN(0xbf169fa5, 0xcca5e55c), TOBN(0x3864ba3c, 0xf7d04eac),
+       TOBN(0x915e367f, 0x8d7d05db), TOBN(0xb48a876d, 0xa6549e5d)}},
+     {{TOBN(0xef89c656, 0x580e40a2), TOBN(0xf194ed8c, 0x728068bc),
+       TOBN(0x74528045, 0xa47990c9), TOBN(0xf53fc7d7, 0x5e1a4649)},
+      {TOBN(0xbec5ae9b, 0x78593e7d), TOBN(0x2cac4ee3, 0x41db65d7),
+       TOBN(0xa8c1eb24, 0x04a3d39b), TOBN(0x53b7d634, 0x03f8f3ef)}},
+     {{TOBN(0x2dc40d48, 0x3e07113c), TOBN(0x6e4a5d39, 0x7d8b63ae),
+       TOBN(0x5582a94b, 0x79684c2b), TOBN(0x932b33d4, 0x622da26c)},
+      {TOBN(0xf534f651, 0x0dbbf08d), TOBN(0x211d07c9, 0x64c23a52),
+       TOBN(0x0eeece0f, 0xee5bdc9b), TOBN(0xdf178168, 0xf7015558)}},
+     {{TOBN(0xd4294635, 0x0a712229), TOBN(0x93cbe448, 0x09273f8c),
+       TOBN(0x00b095ef, 0x8f13bc83), TOBN(0xbb741972, 0x8798978c)},
+      {TOBN(0x9d7309a2, 0x56dbe6e7), TOBN(0xe578ec56, 0x5a5d39ec),
+       TOBN(0x3961151b, 0x851f9a31), TOBN(0x2da7715d, 0xe5709eb4)}},
+     {{TOBN(0x867f3017, 0x53dfabf0), TOBN(0x728d2078, 0xb8e39259),
+       TOBN(0x5c75a0cd, 0x815d9958), TOBN(0xf84867a6, 0x16603be1)},
+      {TOBN(0xc865b13d, 0x70e35b1c), TOBN(0x02414468, 0x19b03e2c),
+       TOBN(0xe46041da, 0xac1f3121), TOBN(0x7c9017ad, 0x6f028a7c)}},
+     {{TOBN(0xabc96de9, 0x0a482873), TOBN(0x4265d6b1, 0xb77e54d4),
+       TOBN(0x68c38e79, 0xa57d88e7), TOBN(0xd461d766, 0x9ce82de3)},
+      {TOBN(0x817a9ec5, 0x64a7e489), TOBN(0xcc5675cd, 0xa0def5f2),
+       TOBN(0x9a00e785, 0x985d494e), TOBN(0xc626833f, 0x1b03514a)}},
+     {{TOBN(0xabe7905a, 0x83cdd60e), TOBN(0x50602fb5, 0xa1170184),
+       TOBN(0x689886cd, 0xb023642a), TOBN(0xd568d090, 0xa6e1fb00)},
+      {TOBN(0x5b1922c7, 0x0259217f), TOBN(0x93831cd9, 0xc43141e4),
+       TOBN(0xdfca3587, 0x0c95f86e), TOBN(0xdec2057a, 0x568ae828)}},
+     {{TOBN(0xc44ea599, 0xf98a759a), TOBN(0x55a0a7a2, 0xf7c23c1d),
+       TOBN(0xd5ffb6e6, 0x94c4f687), TOBN(0x3563cce2, 0x12848478)},
+      {TOBN(0x812b3517, 0xe7b1fbe1), TOBN(0x8a7dc979, 0x4f7338e0),
+       TOBN(0x211ecee9, 0x52d048db), TOBN(0x2eea4056, 0xc86ea3b8)}},
+     {{TOBN(0xd8cb68a7, 0xba772b34), TOBN(0xe16ed341, 0x5f4e2541),
+       TOBN(0x9b32f6a6, 0x0fec14db), TOBN(0xeee376f7, 0x391698be)},
+      {TOBN(0xe9a7aa17, 0x83674c02), TOBN(0x65832f97, 0x5843022a),
+       TOBN(0x29f3a8da, 0x5ba4990f), TOBN(0x79a59c3a, 0xfb8e3216)}},
+     {{TOBN(0x9cdc4d2e, 0xbd19bb16), TOBN(0xc6c7cfd0, 0xb3262d86),
+       TOBN(0xd4ce14d0, 0x969c0b47), TOBN(0x1fa352b7, 0x13e56128)},
+      {TOBN(0x383d55b8, 0x973db6d3), TOBN(0x71836850, 0xe8e5b7bf),
+       TOBN(0xc7714596, 0xe6bb571f), TOBN(0x259df31f, 0x2d5b2dd2)}},
+     {{TOBN(0x568f8925, 0x913cc16d), TOBN(0x18bc5b6d, 0xe1a26f5a),
+       TOBN(0xdfa413be, 0xf5f499ae), TOBN(0xf8835dec, 0xc3f0ae84)},
+      {TOBN(0xb6e60bd8, 0x65a40ab0), TOBN(0x65596439, 0x194b377e),
+       TOBN(0xbcd85625, 0x92084a69), TOBN(0x5ce433b9, 0x4f23ede0)}},
+     {{TOBN(0xe8e8f04f, 0x6ad65143), TOBN(0x11511827, 0xd6e14af6),
+       TOBN(0x3d390a10, 0x8295c0c7), TOBN(0x71e29ee4, 0x621eba16)},
+      {TOBN(0xa588fc09, 0x63717b46), TOBN(0x02be02fe, 0xe06ad4a2),
+       TOBN(0x931558c6, 0x04c22b22), TOBN(0xbb4d4bd6, 0x12f3c849)}},
+     {{TOBN(0x54a4f496, 0x20efd662), TOBN(0x92ba6d20, 0xc5952d14),
+       TOBN(0x2db8ea1e, 0xcc9784c2), TOBN(0x81cc10ca, 0x4b353644)},
+      {TOBN(0x40b570ad, 0x4b4d7f6c), TOBN(0x5c9f1d96, 0x84a1dcd2),
+       TOBN(0x01379f81, 0x3147e797), TOBN(0xe5c6097b, 0x2bd499f5)}},
+     {{TOBN(0x40dcafa6, 0x328e5e20), TOBN(0xf7b5244a, 0x54815550),
+       TOBN(0xb9a4f118, 0x47bfc978), TOBN(0x0ea0e79f, 0xd25825b1)},
+      {TOBN(0xa50f96eb, 0x646c7ecf), TOBN(0xeb811493, 0x446dea9d),
+       TOBN(0x2af04677, 0xdfabcf69), TOBN(0xbe3a068f, 0xc713f6e8)}},
+     {{TOBN(0x860d523d, 0x42e06189), TOBN(0xbf077941, 0x4e3aff13),
+       TOBN(0x0b616dca, 0xc1b20650), TOBN(0xe66dd6d1, 0x2131300d)},
+      {TOBN(0xd4a0fd67, 0xff99abde), TOBN(0xc9903550, 0xc7aac50d),
+       TOBN(0x022ecf8b, 0x7c46b2d7), TOBN(0x3333b1e8, 0x3abf92af)}},
+     {{TOBN(0x11cc113c, 0x6c491c14), TOBN(0x05976688, 0x80dd3f88),
+       TOBN(0xf5b4d9e7, 0x29d932ed), TOBN(0xe982aad8, 0xa2c38b6d)},
+      {TOBN(0x6f925347, 0x8be0dcf0), TOBN(0x700080ae, 0x65ca53f2),
+       TOBN(0xd8131156, 0x443ca77f), TOBN(0xe92d6942, 0xec51f984)}},
+     {{TOBN(0xd2a08af8, 0x85dfe9ae), TOBN(0xd825d9a5, 0x4d2a86ca),
+       TOBN(0x2c53988d, 0x39dff020), TOBN(0xf38b135a, 0x430cdc40)},
+      {TOBN(0x0c918ae0, 0x62a7150b), TOBN(0xf31fd8de, 0x0c340e9b),
+       TOBN(0xafa0e7ae, 0x4dbbf02e), TOBN(0x5847fb2a, 0x5eba6239)}},
+     {{TOBN(0x6b1647dc, 0xdccbac8b), TOBN(0xb642aa78, 0x06f485c8),
+       TOBN(0x873f3765, 0x7038ecdf), TOBN(0x2ce5e865, 0xfa49d3fe)},
+      {TOBN(0xea223788, 0xc98c4400), TOBN(0x8104a8cd, 0xf1fa5279),
+       TOBN(0xbcf7cc7a, 0x06becfd7), TOBN(0x49424316, 0xc8f974ae)}},
+     {{TOBN(0xc0da65e7, 0x84d6365d), TOBN(0xbcb7443f, 0x8f759fb8),
+       TOBN(0x35c712b1, 0x7ae81930), TOBN(0x80428dff, 0x4c6e08ab)},
+      {TOBN(0xf19dafef, 0xa4faf843), TOBN(0xced8538d, 0xffa9855f),
+       TOBN(0x20ac409c, 0xbe3ac7ce), TOBN(0x358c1fb6, 0x882da71e)}},
+     {{TOBN(0xafa9c0e5, 0xfd349961), TOBN(0x2b2cfa51, 0x8421c2fc),
+       TOBN(0x2a80db17, 0xf3a28d38), TOBN(0xa8aba539, 0x5d138e7e)},
+      {TOBN(0x52012d1d, 0x6e96eb8d), TOBN(0x65d8dea0, 0xcbaf9622),
+       TOBN(0x57735447, 0xb264f56c), TOBN(0xbeebef3f, 0x1b6c8da2)}},
+     {{TOBN(0xfc346d98, 0xce785254), TOBN(0xd50e8d72, 0xbb64a161),
+       TOBN(0xc03567c7, 0x49794add), TOBN(0x15a76065, 0x752c7ef6)},
+      {TOBN(0x59f3a222, 0x961f23d6), TOBN(0x378e4438, 0x73ecc0b0),
+       TOBN(0xc74be434, 0x5a82fde4), TOBN(0xae509af2, 0xd8b9cf34)}},
+     {{TOBN(0x4a61ee46, 0x577f44a1), TOBN(0xe09b748c, 0xb611deeb),
+       TOBN(0xc0481b2c, 0xf5f7b884), TOBN(0x35626678, 0x61acfa6b)},
+      {TOBN(0x37f4c518, 0xbf8d21e6), TOBN(0x22d96531, 0xb205a76d),
+       TOBN(0x37fb85e1, 0x954073c0), TOBN(0xbceafe4f, 0x65b3a567)}},
+     {{TOBN(0xefecdef7, 0xbe42a582), TOBN(0xd3fc6080, 0x65046be6),
+       TOBN(0xc9af13c8, 0x09e8dba9), TOBN(0x1e6c9847, 0x641491ff)},
+      {TOBN(0x3b574925, 0xd30c31f7), TOBN(0xb7eb72ba, 0xac2a2122),
+       TOBN(0x776a0dac, 0xef0859e7), TOBN(0x06fec314, 0x21900942)}},
+     {{TOBN(0x2464bc10, 0xf8c22049), TOBN(0x9bfbcce7, 0x875ebf69),
+       TOBN(0xd7a88e2a, 0x4336326b), TOBN(0xda05261c, 0x5bc2acfa)},
+      {TOBN(0xc29f5bdc, 0xeba7efc8), TOBN(0x471237ca, 0x25dbbf2e),
+       TOBN(0xa72773f2, 0x2975f127), TOBN(0xdc744e8e, 0x04d0b326)}},
+     {{TOBN(0x38a7ed16, 0xa56edb73), TOBN(0x64357e37, 0x2c007e70),
+       TOBN(0xa167d15b, 0x5080b400), TOBN(0x07b41164, 0x23de4be1)},
+      {TOBN(0xb2d91e32, 0x74c89883), TOBN(0x3c162821, 0x2882e7ed),
+       TOBN(0xad6b36ba, 0x7503e482), TOBN(0x48434e8e, 0x0ea34331)}},
+     {{TOBN(0x79f4f24f, 0x2c7ae0b9), TOBN(0xc46fbf81, 0x1939b44a),
+       TOBN(0x76fefae8, 0x56595eb1), TOBN(0x417b66ab, 0xcd5f29c7)},
+      {TOBN(0x5f2332b2, 0xc5ceec20), TOBN(0xd69661ff, 0xe1a1cae2),
+       TOBN(0x5ede7e52, 0x9b0286e6), TOBN(0x9d062529, 0xe276b993)}},
+     {{TOBN(0x324794b0, 0x7e50122b), TOBN(0xdd744f8b, 0x4af07ca5),
+       TOBN(0x30a12f08, 0xd63fc97b), TOBN(0x39650f1a, 0x76626d9d)},
+      {TOBN(0x101b47f7, 0x1fa38477), TOBN(0x3d815f19, 0xd4dc124f),
+       TOBN(0x1569ae95, 0xb26eb58a), TOBN(0xc3cde188, 0x95fb1887)}},
+     {{TOBN(0x54e9f37b, 0xf9539a48), TOBN(0xb0100e06, 0x7408c1a5),
+       TOBN(0x821d9811, 0xea580cbb), TOBN(0x8af52d35, 0x86e50c56)},
+      {TOBN(0xdfbd9d47, 0xdbbf698b), TOBN(0x2961a1ea, 0x03dc1c73),
+       TOBN(0x203d38f8, 0xe76a5df8), TOBN(0x08a53a68, 0x6def707a)}},
+     {{TOBN(0x26eefb48, 0x1bee45d4), TOBN(0xb3cee346, 0x3c688036),
+       TOBN(0x463c5315, 0xc42f2469), TOBN(0x19d84d2e, 0x81378162)},
+      {TOBN(0x22d7c3c5, 0x1c4d349f), TOBN(0x65965844, 0x163d59c5),
+       TOBN(0xcf198c56, 0xb8abceae), TOBN(0x6fb1fb1b, 0x628559d5)}},
+     {{TOBN(0x8bbffd06, 0x07bf8fe3), TOBN(0x46259c58, 0x3467734b),
+       TOBN(0xd8953cea, 0x35f7f0d3), TOBN(0x1f0bece2, 0xd65b0ff1)},
+      {TOBN(0xf7d5b4b3, 0xf3c72914), TOBN(0x29e8ea95, 0x3cb53389),
+       TOBN(0x4a365626, 0x836b6d46), TOBN(0xe849f910, 0xea174fde)}},
+     {{TOBN(0x7ec62fbb, 0xf4737f21), TOBN(0xd8dba5ab, 0x6209f5ac),
+       TOBN(0x24b5d7a9, 0xa5f9adbe), TOBN(0x707d28f7, 0xa61dc768)},
+      {TOBN(0x7711460b, 0xcaa999ea), TOBN(0xba7b174d, 0x1c92e4cc),
+       TOBN(0x3c4bab66, 0x18d4bf2d), TOBN(0xb8f0c980, 0xeb8bd279)}},
+     {{TOBN(0x024bea9a, 0x324b4737), TOBN(0xfba9e423, 0x32a83bca),
+       TOBN(0x6e635643, 0xa232dced), TOBN(0x99619367, 0x2571c8ba)},
+      {TOBN(0xe8c9f357, 0x54b7032b), TOBN(0xf936b3ba, 0x2442d54a),
+       TOBN(0x2263f0f0, 0x8290c65a), TOBN(0x48989780, 0xee2c7fdb)}},
+     {{TOBN(0xadc5d55a, 0x13d4f95e), TOBN(0x737cff85, 0xad9b8500),
+       TOBN(0x271c557b, 0x8a73f43d), TOBN(0xbed617a4, 0xe18bc476)},
+      {TOBN(0x66245401, 0x7dfd8ab2), TOBN(0xae7b89ae, 0x3a2870aa),
+       TOBN(0x1b555f53, 0x23a7e545), TOBN(0x6791e247, 0xbe057e4c)}},
+     {{TOBN(0x860136ad, 0x324fa34d), TOBN(0xea111447, 0x4cbeae28),
+       TOBN(0x023a4270, 0xbedd3299), TOBN(0x3d5c3a7f, 0xc1c35c34)},
+      {TOBN(0xb0f6db67, 0x8d0412d2), TOBN(0xd92625e2, 0xfcdc6b9a),
+       TOBN(0x92ae5ccc, 0x4e28a982), TOBN(0xea251c36, 0x47a3ce7e)}},
+     {{TOBN(0x9d658932, 0x790691bf), TOBN(0xed610589, 0x06b736ae),
+       TOBN(0x712c2f04, 0xc0d63b6e), TOBN(0x5cf06fd5, 0xc63d488f)},
+      {TOBN(0x97363fac, 0xd9588e41), TOBN(0x1f9bf762, 0x2b93257e),
+       TOBN(0xa9d1ffc4, 0x667acace), TOBN(0x1cf4a1aa, 0x0a061ecf)}},
+     {{TOBN(0x40e48a49, 0xdc1818d0), TOBN(0x0643ff39, 0xa3621ab0),
+       TOBN(0x5768640c, 0xe39ef639), TOBN(0x1fc099ea, 0x04d86854)},
+      {TOBN(0x9130b9c3, 0xeccd28fd), TOBN(0xd743cbd2, 0x7eec54ab),
+       TOBN(0x052b146f, 0xe5b475b6), TOBN(0x058d9a82, 0x900a7d1f)}},
+     {{TOBN(0x65e02292, 0x91262b72), TOBN(0x96f924f9, 0xbb0edf03),
+       TOBN(0x5cfa59c8, 0xfe206842), TOBN(0xf6037004, 0x5eafa720)},
+      {TOBN(0x5f30699e, 0x18d7dd96), TOBN(0x381e8782, 0xcbab2495),
+       TOBN(0x91669b46, 0xdd8be949), TOBN(0xb40606f5, 0x26aae8ef)}},
+     {{TOBN(0x2812b839, 0xfc6751a4), TOBN(0x16196214, 0xfba800ef),
+       TOBN(0x4398d5ca, 0x4c1a2875), TOBN(0x720c00ee, 0x653d8349)},
+      {TOBN(0xc2699eb0, 0xd820007c), TOBN(0x880ee660, 0xa39b5825),
+       TOBN(0x70694694, 0x471f6984), TOBN(0xf7d16ea8, 0xe3dda99a)}},
+     {{TOBN(0x28d675b2, 0xc0519a23), TOBN(0x9ebf94fe, 0x4f6952e3),
+       TOBN(0xf28bb767, 0xa2294a8a), TOBN(0x85512b4d, 0xfe0af3f5)},
+      {TOBN(0x18958ba8, 0x99b16a0d), TOBN(0x95c2430c, 0xba7548a7),
+       TOBN(0xb30d1b10, 0xa16be615), TOBN(0xe3ebbb97, 0x85bfb74c)}},
+     {{TOBN(0xa3273cfe, 0x18549fdb), TOBN(0xf6e200bf, 0x4fcdb792),
+       TOBN(0x54a76e18, 0x83aba56c), TOBN(0x73ec66f6, 0x89ef6aa2)},
+      {TOBN(0x8d17add7, 0xd1b9a305), TOBN(0xa959c5b9, 0xb7ae1b9d),
+       TOBN(0x88643522, 0x6bcc094a), TOBN(0xcc5616c4, 0xd7d429b9)}},
+     {{TOBN(0xa6dada01, 0xe6a33f7c), TOBN(0xc6217a07, 0x9d4e70ad),
+       TOBN(0xd619a818, 0x09c15b7c), TOBN(0xea06b329, 0x0e80c854)},
+      {TOBN(0x174811ce, 0xa5f5e7b9), TOBN(0x66dfc310, 0x787c65f4),
+       TOBN(0x4ea7bd69, 0x3316ab54), TOBN(0xc12c4acb, 0x1dcc0f70)}},
+     {{TOBN(0xe4308d1a, 0x1e407dd9), TOBN(0xe8a3587c, 0x91afa997),
+       TOBN(0xea296c12, 0xab77b7a5), TOBN(0xb5ad49e4, 0x673c0d52)},
+      {TOBN(0x40f9b2b2, 0x7006085a), TOBN(0xa88ff340, 0x87bf6ec2),
+       TOBN(0x978603b1, 0x4e3066a6), TOBN(0xb3f99fc2, 0xb5e486e2)}},
+     {{TOBN(0x07b53f5e, 0xb2e63645), TOBN(0xbe57e547, 0x84c84232),
+       TOBN(0xd779c216, 0x7214d5cf), TOBN(0x617969cd, 0x029a3aca)},
+      {TOBN(0xd17668cd, 0x8a7017a0), TOBN(0x77b4d19a, 0xbe9b7ee8),
+       TOBN(0x58fd0e93, 0x9c161776), TOBN(0xa8c4f4ef, 0xd5968a72)}},
+     {{TOBN(0x296071cc, 0x67b3de77), TOBN(0xae3c0b8e, 0x634f7905),
+       TOBN(0x67e440c2, 0x8a7100c9), TOBN(0xbb8c3c1b, 0xeb4b9b42)},
+      {TOBN(0x6d71e8ea, 0xc51b3583), TOBN(0x7591f5af, 0x9525e642),
+       TOBN(0xf73a2f7b, 0x13f509f3), TOBN(0x618487aa, 0x5619ac9b)}},
+     {{TOBN(0x3a72e5f7, 0x9d61718a), TOBN(0x00413bcc, 0x7592d28c),
+       TOBN(0x7d9b11d3, 0x963c35cf), TOBN(0x77623bcf, 0xb90a46ed)},
+      {TOBN(0xdeef273b, 0xdcdd2a50), TOBN(0x4a741f9b, 0x0601846e),
+       TOBN(0x33b89e51, 0x0ec6e929), TOBN(0xcb02319f, 0x8b7f22cd)}},
+     {{TOBN(0xbbe1500d, 0x084bae24), TOBN(0x2f0ae8d7, 0x343d2693),
+       TOBN(0xacffb5f2, 0x7cdef811), TOBN(0xaa0c030a, 0x263fb94f)},
+      {TOBN(0x6eef0d61, 0xa0f442de), TOBN(0xf92e1817, 0x27b139d3),
+       TOBN(0x1ae6deb7, 0x0ad8bc28), TOBN(0xa89e38dc, 0xc0514130)}},
+     {{TOBN(0x81eeb865, 0xd2fdca23), TOBN(0x5a15ee08, 0xcc8ef895),
+       TOBN(0x768fa10a, 0x01905614), TOBN(0xeff5b8ef, 0x880ee19b)},
+      {TOBN(0xf0c0cabb, 0xcb1c8a0e), TOBN(0x2e1ee9cd, 0xb8c838f9),
+       TOBN(0x0587d8b8, 0x8a4a14c0), TOBN(0xf6f27896, 0x2ff698e5)}},
+     {{TOBN(0xed38ef1c, 0x89ee6256), TOBN(0xf44ee1fe, 0x6b353b45),
+       TOBN(0x9115c0c7, 0x70e903b3), TOBN(0xc78ec0a1, 0x818f31df)},
+      {TOBN(0x6c003324, 0xb7dccbc6), TOBN(0xd96dd1f3, 0x163bbc25),
+       TOBN(0x33aa82dd, 0x5cedd805), TOBN(0x123aae4f, 0x7f7eb2f1)}},
+     {{TOBN(0x1723fcf5, 0xa26262cd), TOBN(0x1f7f4d5d, 0x0060ebd5),
+       TOBN(0xf19c5c01, 0xb2eaa3af), TOBN(0x2ccb9b14, 0x9790accf)},
+      {TOBN(0x1f9c1cad, 0x52324aa6), TOBN(0x63200526, 0x7247df54),
+       TOBN(0x5732fe42, 0xbac96f82), TOBN(0x52fe771f, 0x01a1c384)}},
+     {{TOBN(0x546ca13d, 0xb1001684), TOBN(0xb56b4eee, 0xa1709f75),
+       TOBN(0x266545a9, 0xd5db8672), TOBN(0xed971c90, 0x1e8f3cfb)},
+      {TOBN(0x4e7d8691, 0xe3a07b29), TOBN(0x7570d9ec, 0xe4b696b9),
+       TOBN(0xdc5fa067, 0x7bc7e9ae), TOBN(0x68b44caf, 0xc82c4844)}},
+     {{TOBN(0x519d34b3, 0xbf44da80), TOBN(0x283834f9, 0x5ab32e66),
+       TOBN(0x6e608797, 0x6278a000), TOBN(0x1e62960e, 0x627312f6)},
+      {TOBN(0x9b87b27b, 0xe6901c55), TOBN(0x80e78538, 0x24fdbc1f),
+       TOBN(0xbbbc0951, 0x2facc27d), TOBN(0x06394239, 0xac143b5a)}},
+     {{TOBN(0x35bb4a40, 0x376c1944), TOBN(0x7cb62694, 0x63da1511),
+       TOBN(0xafd29161, 0xb7148a3b), TOBN(0xa6f9d9ed, 0x4e2ea2ee)},
+      {TOBN(0x15dc2ca2, 0x880dd212), TOBN(0x903c3813, 0xa61139a9),
+       TOBN(0x2aa7b46d, 0x6c0f8785), TOBN(0x36ce2871, 0x901c60ff)}},
+     {{TOBN(0xc683b028, 0xe10d9c12), TOBN(0x7573baa2, 0x032f33d3),
+       TOBN(0x87a9b1f6, 0x67a31b58), TOBN(0xfd3ed11a, 0xf4ffae12)},
+      {TOBN(0x83dcaa9a, 0x0cb2748e), TOBN(0x8239f018, 0x5d6fdf16),
+       TOBN(0xba67b49c, 0x72753941), TOBN(0x2beec455, 0xc321cb36)}},
+     {{TOBN(0x88015606, 0x3f8b84ce), TOBN(0x76417083, 0x8d38c86f),
+       TOBN(0x054f1ca7, 0x598953dd), TOBN(0xc939e110, 0x4e8e7429)},
+      {TOBN(0x9b1ac2b3, 0x5a914f2f), TOBN(0x39e35ed3, 0xe74b8f9c),
+       TOBN(0xd0debdb2, 0x781b2fb0), TOBN(0x1585638f, 0x2d997ba2)}},
+     {{TOBN(0x9c4b646e, 0x9e2fce99), TOBN(0x68a21081, 0x1e80857f),
+       TOBN(0x06d54e44, 0x3643b52a), TOBN(0xde8d6d63, 0x0d8eb843)},
+      {TOBN(0x70321563, 0x42146a0a), TOBN(0x8ba826f2, 0x5eaa3622),
+       TOBN(0x227a58bd, 0x86138787), TOBN(0x43b6c03c, 0x10281d37)}},
+     {{TOBN(0x6326afbb, 0xb54dde39), TOBN(0x744e5e8a, 0xdb6f2d5f),
+       TOBN(0x48b2a99a, 0xcff158e1), TOBN(0xa93c8fa0, 0xef87918f)},
+      {TOBN(0x2182f956, 0xde058c5c), TOBN(0x216235d2, 0x936f9e7a),
+       TOBN(0xace0c0db, 0xd2e31e67), TOBN(0xc96449bf, 0xf23ac3e7)}},
+     {{TOBN(0x7e9a2874, 0x170693bd), TOBN(0xa28e14fd, 0xa45e6335),
+       TOBN(0x5757f6b3, 0x56427344), TOBN(0x822e4556, 0xacf8edf9)},
+      {TOBN(0x2b7a6ee2, 0xe6a285cd), TOBN(0x5866f211, 0xa9df3af0),
+       TOBN(0x40dde2dd, 0xf845b844), TOBN(0x986c3726, 0x110e5e49)}},
+     {{TOBN(0x73680c2a, 0xf7172277), TOBN(0x57b94f0f, 0x0cccb244),
+       TOBN(0xbdff7267, 0x2d438ca7), TOBN(0xbad1ce11, 0xcf4663fd)},
+      {TOBN(0x9813ed9d, 0xd8f71cae), TOBN(0xf43272a6, 0x961fdaa6),
+       TOBN(0xbeff0119, 0xbd6d1637), TOBN(0xfebc4f91, 0x30361978)}},
+     {{TOBN(0x02b37a95, 0x2f41deff), TOBN(0x0e44a59a, 0xe63b89b7),
+       TOBN(0x673257dc, 0x143ff951), TOBN(0x19c02205, 0xd752baf4)},
+      {TOBN(0x46c23069, 0xc4b7d692), TOBN(0x2e6392c3, 0xfd1502ac),
+       TOBN(0x6057b1a2, 0x1b220846), TOBN(0xe51ff946, 0x0c1b5b63)}}},
+    {{{TOBN(0x6e85cb51, 0x566c5c43), TOBN(0xcff9c919, 0x3597f046),
+       TOBN(0x9354e90c, 0x4994d94a), TOBN(0xe0a39332, 0x2147927d)},
+      {TOBN(0x8427fac1, 0x0dc1eb2b), TOBN(0x88cfd8c2, 0x2ff319fa),
+       TOBN(0xe2d4e684, 0x01965274), TOBN(0xfa2e067d, 0x67aaa746)}},
+     {{TOBN(0xb6d92a7f, 0x3e5f9f11), TOBN(0x9afe153a, 0xd6cb3b8e),
+       TOBN(0x4d1a6dd7, 0xddf800bd), TOBN(0xf6c13cc0, 0xcaf17e19)},
+      {TOBN(0x15f6c58e, 0x325fc3ee), TOBN(0x71095400, 0xa31dc3b2),
+       TOBN(0x168e7c07, 0xafa3d3e7), TOBN(0x3f8417a1, 0x94c7ae2d)}},
+     {{TOBN(0xec234772, 0x813b230d), TOBN(0x634d0f5f, 0x17344427),
+       TOBN(0x11548ab1, 0xd77fc56a), TOBN(0x7fab1750, 0xce06af77)},
+      {TOBN(0xb62c10a7, 0x4f7c4f83), TOBN(0xa7d2edc4, 0x220a67d9),
+       TOBN(0x1c404170, 0x921209a0), TOBN(0x0b9815a0, 0xface59f0)}},
+     {{TOBN(0x2842589b, 0x319540c3), TOBN(0x18490f59, 0xa283d6f8),
+       TOBN(0xa2731f84, 0xdaae9fcb), TOBN(0x3db6d960, 0xc3683ba0)},
+      {TOBN(0xc85c63bb, 0x14611069), TOBN(0xb19436af, 0x0788bf05),
+       TOBN(0x905459df, 0x347460d2), TOBN(0x73f6e094, 0xe11a7db1)}},
+     {{TOBN(0xdc7f938e, 0xb6357f37), TOBN(0xc5d00f79, 0x2bd8aa62),
+       TOBN(0xc878dcb9, 0x2ca979fc), TOBN(0x37e83ed9, 0xeb023a99)},
+      {TOBN(0x6b23e273, 0x1560bf3d), TOBN(0x1086e459, 0x1d0fae61),
+       TOBN(0x78248316, 0x9a9414bd), TOBN(0x1b956bc0, 0xf0ea9ea1)}},
+     {{TOBN(0x7b85bb91, 0xc31b9c38), TOBN(0x0c5aa90b, 0x48ef57b5),
+       TOBN(0xdedeb169, 0xaf3bab6f), TOBN(0xe610ad73, 0x2d373685)},
+      {TOBN(0xf13870df, 0x02ba8e15), TOBN(0x0337edb6, 0x8ca7f771),
+       TOBN(0xe4acf747, 0xb62c036c), TOBN(0xd921d576, 0xb6b94e81)}},
+     {{TOBN(0xdbc86439, 0x2c422f7a), TOBN(0xfb635362, 0xed348898),
+       TOBN(0x83084668, 0xc45bfcd1), TOBN(0xc357c9e3, 0x2b315e11)},
+      {TOBN(0xb173b540, 0x5b2e5b8c), TOBN(0x7e946931, 0xe102b9a4),
+       TOBN(0x17c890eb, 0x7b0fb199), TOBN(0xec225a83, 0xd61b662b)}},
+     {{TOBN(0xf306a3c8, 0xee3c76cb), TOBN(0x3cf11623, 0xd32a1f6e),
+       TOBN(0xe6d5ab64, 0x6863e956), TOBN(0x3b8a4cbe, 0x5c005c26)},
+      {TOBN(0xdcd529a5, 0x9ce6bb27), TOBN(0xc4afaa52, 0x04d4b16f),
+       TOBN(0xb0624a26, 0x7923798d), TOBN(0x85e56df6, 0x6b307fab)}},
+     {{TOBN(0x0281893c, 0x2bf29698), TOBN(0x91fc19a4, 0xd7ce7603),
+       TOBN(0x75a5dca3, 0xad9a558f), TOBN(0x40ceb3fa, 0x4d50bf77)},
+      {TOBN(0x1baf6060, 0xbc9ba369), TOBN(0x927e1037, 0x597888c2),
+       TOBN(0xd936bf19, 0x86a34c07), TOBN(0xd4cf10c1, 0xc34ae980)}},
+     {{TOBN(0x3a3e5334, 0x859dd614), TOBN(0x9c475b5b, 0x18d0c8ee),
+       TOBN(0x63080d1f, 0x07cd51d5), TOBN(0xc9c0d0a6, 0xb88b4326)},
+      {TOBN(0x1ac98691, 0xc234296f), TOBN(0x2a0a83a4, 0x94887fb6),
+       TOBN(0x56511427, 0x0cea9cf2), TOBN(0x5230a6e8, 0xa24802f5)}},
+     {{TOBN(0xf7a2bf0f, 0x72e3d5c1), TOBN(0x37717446, 0x4f21439e),
+       TOBN(0xfedcbf25, 0x9ce30334), TOBN(0xe0030a78, 0x7ce202f9)},
+      {TOBN(0x6f2d9ebf, 0x1202e9ca), TOBN(0xe79dde6c, 0x75e6e591),
+       TOBN(0xf52072af, 0xf1dac4f8), TOBN(0x6c8d087e, 0xbb9b404d)}},
+     {{TOBN(0xad0fc73d, 0xbce913af), TOBN(0x909e587b, 0x458a07cb),
+       TOBN(0x1300da84, 0xd4f00c8a), TOBN(0x425cd048, 0xb54466ac)},
+      {TOBN(0xb59cb9be, 0x90e9d8bf), TOBN(0x991616db, 0x3e431b0e),
+       TOBN(0xd3aa117a, 0x531aecff), TOBN(0x91af92d3, 0x59f4dc3b)}},
+     {{TOBN(0x9b1ec292, 0xe93fda29), TOBN(0x76bb6c17, 0xe97d91bc),
+       TOBN(0x7509d95f, 0xaface1e6), TOBN(0x3653fe47, 0xbe855ae3)},
+      {TOBN(0x73180b28, 0x0f680e75), TOBN(0x75eefd1b, 0xeeb6c26c),
+       TOBN(0xa4cdf29f, 0xb66d4236), TOBN(0x2d70a997, 0x6b5821d8)}},
+     {{TOBN(0x7a3ee207, 0x20445c36), TOBN(0x71d1ac82, 0x59877174),
+       TOBN(0x0fc539f7, 0x949f73e9), TOBN(0xd05cf3d7, 0x982e3081)},
+      {TOBN(0x8758e20b, 0x7b1c7129), TOBN(0xffadcc20, 0x569e61f2),
+       TOBN(0xb05d3a2f, 0x59544c2d), TOBN(0xbe16f5c1, 0x9fff5e53)}},
+     {{TOBN(0x73cf65b8, 0xaad58135), TOBN(0x622c2119, 0x037aa5be),
+       TOBN(0x79373b3f, 0x646fd6a0), TOBN(0x0e029db5, 0x0d3978cf)},
+      {TOBN(0x8bdfc437, 0x94fba037), TOBN(0xaefbd687, 0x620797a6),
+       TOBN(0x3fa5382b, 0xbd30d38e), TOBN(0x7627cfbf, 0x585d7464)}},
+     {{TOBN(0xb2330fef, 0x4e4ca463), TOBN(0xbcef7287, 0x3566cc63),
+       TOBN(0xd161d2ca, 0xcf780900), TOBN(0x135dc539, 0x5b54827d)},
+      {TOBN(0x638f052e, 0x27bf1bc6), TOBN(0x10a224f0, 0x07dfa06c),
+       TOBN(0xe973586d, 0x6d3321da), TOBN(0x8b0c5738, 0x26152c8f)}},
+     {{TOBN(0x07ef4f2a, 0x34606074), TOBN(0x80fe7fe8, 0xa0f7047a),
+       TOBN(0x3d1a8152, 0xe1a0e306), TOBN(0x32cf43d8, 0x88da5222)},
+      {TOBN(0xbf89a95f, 0x5f02ffe6), TOBN(0x3d9eb9a4, 0x806ad3ea),
+       TOBN(0x012c17bb, 0x79c8e55e), TOBN(0xfdcd1a74, 0x99c81dac)}},
+     {{TOBN(0x7043178b, 0xb9556098), TOBN(0x4090a1df, 0x801c3886),
+       TOBN(0x759800ff, 0x9b67b912), TOBN(0x3e5c0304, 0x232620c8)},
+      {TOBN(0x4b9d3c4b, 0x70dceeca), TOBN(0xbb2d3c15, 0x181f648e),
+       TOBN(0xf981d837, 0x6e33345c), TOBN(0xb626289b, 0x0cf2297a)}},
+     {{TOBN(0x766ac659, 0x8baebdcf), TOBN(0x1a28ae09, 0x75df01e5),
+       TOBN(0xb71283da, 0x375876d8), TOBN(0x4865a96d, 0x607b9800)},
+      {TOBN(0x25dd1bcd, 0x237936b2), TOBN(0x332f4f4b, 0x60417494),
+       TOBN(0xd0923d68, 0x370a2147), TOBN(0x497f5dfb, 0xdc842203)}},
+     {{TOBN(0x9dc74cbd, 0x32be5e0f), TOBN(0x7475bcb7, 0x17a01375),
+       TOBN(0x438477c9, 0x50d872b1), TOBN(0xcec67879, 0xffe1d63d)},
+      {TOBN(0x9b006014, 0xd8578c70), TOBN(0xc9ad99a8, 0x78bb6b8b),
+       TOBN(0x6799008e, 0x11fb3806), TOBN(0xcfe81435, 0xcd44cab3)}},
+     {{TOBN(0xa2ee1582, 0x2f4fb344), TOBN(0xb8823450, 0x483fa6eb),
+       TOBN(0x622d323d, 0x652c7749), TOBN(0xd8474a98, 0xbeb0a15b)},
+      {TOBN(0xe43c154d, 0x5d1c00d0), TOBN(0x7fd581d9, 0x0e3e7aac),
+       TOBN(0x2b44c619, 0x2525ddf8), TOBN(0x67a033eb, 0xb8ae9739)}},
+     {{TOBN(0x113ffec1, 0x9ef2d2e4), TOBN(0x1bf6767e, 0xd5a0ea7f),
+       TOBN(0x57fff75e, 0x03714c0a), TOBN(0xa23c422e, 0x0a23e9ee)},
+      {TOBN(0xdd5f6b2d, 0x540f83af), TOBN(0xc2c2c27e, 0x55ea46a7),
+       TOBN(0xeb6b4246, 0x672a1208), TOBN(0xd13599f7, 0xae634f7a)}},
+     {{TOBN(0xcf914b5c, 0xd7b32c6e), TOBN(0x61a5a640, 0xeaf61814),
+       TOBN(0x8dc3df8b, 0x208a1bbb), TOBN(0xef627fd6, 0xb6d79aa5)},
+      {TOBN(0x44232ffc, 0xc4c86bc8), TOBN(0xe6f9231b, 0x061539fe),
+       TOBN(0x1d04f25a, 0x958b9533), TOBN(0x180cf934, 0x49e8c885)}},
+     {{TOBN(0x89689595, 0x9884aaf7), TOBN(0xb1959be3, 0x07b348a6),
+       TOBN(0x96250e57, 0x3c147c87), TOBN(0xae0efb3a, 0xdd0c61f8)},
+      {TOBN(0xed00745e, 0xca8c325e), TOBN(0x3c911696, 0xecff3f70),
+       TOBN(0x73acbc65, 0x319ad41d), TOBN(0x7b01a020, 0xf0b1c7ef)}},
+     {{TOBN(0xea32b293, 0x63a1483f), TOBN(0x89eabe71, 0x7a248f96),
+       TOBN(0x9c6231d3, 0x343157e5), TOBN(0x93a375e5, 0xdf3c546d)},
+      {TOBN(0xe76e9343, 0x6a2afe69), TOBN(0xc4f89100, 0xe166c88e),
+       TOBN(0x248efd0d, 0x4f872093), TOBN(0xae0eb3ea, 0x8fe0ea61)}},
+     {{TOBN(0xaf89790d, 0x9d79046e), TOBN(0x4d650f2d, 0x6cee0976),
+       TOBN(0xa3935d9a, 0x43071eca), TOBN(0x66fcd2c9, 0x283b0bfe)},
+      {TOBN(0x0e665eb5, 0x696605f1), TOBN(0xe77e5d07, 0xa54cd38d),
+       TOBN(0x90ee050a, 0x43d950cf), TOBN(0x86ddebda, 0xd32e69b5)}},
+     {{TOBN(0x6ad94a3d, 0xfddf7415), TOBN(0xf7fa1309, 0x3f6e8d5a),
+       TOBN(0xc4831d1d, 0xe9957f75), TOBN(0x7de28501, 0xd5817447)},
+      {TOBN(0x6f1d7078, 0x9e2aeb6b), TOBN(0xba2b9ff4, 0xf67a53c2),
+       TOBN(0x36963767, 0xdf9defc3), TOBN(0x479deed3, 0x0d38022c)}},
+     {{TOBN(0xd2edb89b, 0x3a8631e8), TOBN(0x8de855de, 0x7a213746),
+       TOBN(0xb2056cb7, 0xb00c5f11), TOBN(0xdeaefbd0, 0x2c9b85e4)},
+      {TOBN(0x03f39a8d, 0xd150892d), TOBN(0x37b84686, 0x218b7985),
+       TOBN(0x36296dd8, 0xb7375f1a), TOBN(0x472cd4b1, 0xb78e898e)}},
+     {{TOBN(0x15dff651, 0xe9f05de9), TOBN(0xd4045069, 0x2ce98ba9),
+       TOBN(0x8466a7ae, 0x9b38024c), TOBN(0xb910e700, 0xe5a6b5ef)},
+      {TOBN(0xae1c56ea, 0xb3aa8f0d), TOBN(0xbab2a507, 0x7eee74a6),
+       TOBN(0x0dca11e2, 0x4b4c4620), TOBN(0xfd896e2e, 0x4c47d1f4)}},
+     {{TOBN(0xeb45ae53, 0x308fbd93), TOBN(0x46cd5a2e, 0x02c36fda),
+       TOBN(0x6a3d4e90, 0xbaa48385), TOBN(0xdd55e62e, 0x9dbe9960)},
+      {TOBN(0xa1406aa0, 0x2a81ede7), TOBN(0x6860dd14, 0xf9274ea7),
+       TOBN(0xcfdcb0c2, 0x80414f86), TOBN(0xff410b10, 0x22f94327)}},
+     {{TOBN(0x5a33cc38, 0x49ad467b), TOBN(0xefb48b6c, 0x0a7335f1),
+       TOBN(0x14fb54a4, 0xb153a360), TOBN(0x604aa9d2, 0xb52469cc)},
+      {TOBN(0x5e9dc486, 0x754e48e9), TOBN(0x693cb455, 0x37471e8e),
+       TOBN(0xfb2fd7cd, 0x8d3b37b6), TOBN(0x63345e16, 0xcf09ff07)}},
+     {{TOBN(0x9910ba6b, 0x23a5d896), TOBN(0x1fe19e35, 0x7fe4364e),
+       TOBN(0x6e1da8c3, 0x9a33c677), TOBN(0x15b4488b, 0x29fd9fd0)},
+      {TOBN(0x1f439254, 0x1a1f22bf), TOBN(0x920a8a70, 0xab8163e8),
+       TOBN(0x3fd1b249, 0x07e5658e), TOBN(0xf2c4f79c, 0xb6ec839b)}},
+     {{TOBN(0x1abbc3d0, 0x4aa38d1b), TOBN(0x3b0db35c, 0xb5d9510e),
+       TOBN(0x1754ac78, 0x3e60dec0), TOBN(0x53272fd7, 0xea099b33)},
+      {TOBN(0x5fb0494f, 0x07a8e107), TOBN(0x4a89e137, 0x6a8191fa),
+       TOBN(0xa113b7f6, 0x3c4ad544), TOBN(0x88a2e909, 0x6cb9897b)}},
+     {{TOBN(0x17d55de3, 0xb44a3f84), TOBN(0xacb2f344, 0x17c6c690),
+       TOBN(0x32088168, 0x10232390), TOBN(0xf2e8a61f, 0x6c733bf7)},
+      {TOBN(0xa774aab6, 0x9c2d7652), TOBN(0xfb5307e3, 0xed95c5bc),
+       TOBN(0xa05c73c2, 0x4981f110), TOBN(0x1baae31c, 0xa39458c9)}},
+     {{TOBN(0x1def185b, 0xcbea62e7), TOBN(0xe8ac9eae, 0xeaf63059),
+       TOBN(0x098a8cfd, 0x9921851c), TOBN(0xd959c3f1, 0x3abe2f5b)},
+      {TOBN(0xa4f19525, 0x20e40ae5), TOBN(0x320789e3, 0x07a24aa1),
+       TOBN(0x259e6927, 0x7392b2bc), TOBN(0x58f6c667, 0x1918668b)}},
+     {{TOBN(0xce1db2bb, 0xc55d2d8b), TOBN(0x41d58bb7, 0xf4f6ca56),
+       TOBN(0x7650b680, 0x8f877614), TOBN(0x905e16ba, 0xf4c349ed)},
+      {TOBN(0xed415140, 0xf661acac), TOBN(0x3b8784f0, 0xcb2270af),
+       TOBN(0x3bc280ac, 0x8a402cba), TOBN(0xd53f7146, 0x0937921a)}},
+     {{TOBN(0xc03c8ee5, 0xe5681e83), TOBN(0x62126105, 0xf6ac9e4a),
+       TOBN(0x9503a53f, 0x936b1a38), TOBN(0x3d45e2d4, 0x782fecbd)},
+      {TOBN(0x69a5c439, 0x76e8ae98), TOBN(0xb53b2eeb, 0xbfb4b00e),
+       TOBN(0xf1674712, 0x72386c89), TOBN(0x30ca34a2, 0x4268bce4)}},
+     {{TOBN(0x7f1ed86c, 0x78341730), TOBN(0x8ef5beb8, 0xb525e248),
+       TOBN(0xbbc489fd, 0xb74fbf38), TOBN(0x38a92a0e, 0x91a0b382)},
+      {TOBN(0x7a77ba3f, 0x22433ccf), TOBN(0xde8362d6, 0xa29f05a9),
+       TOBN(0x7f6a30ea, 0x61189afc), TOBN(0x693b5505, 0x59ef114f)}},
+     {{TOBN(0x50266bc0, 0xcd1797a1), TOBN(0xea17b47e, 0xf4b7af2d),
+       TOBN(0xd6c4025c, 0x3df9483e), TOBN(0x8cbb9d9f, 0xa37b18c9)},
+      {TOBN(0x91cbfd9c, 0x4d8424cf), TOBN(0xdb7048f1, 0xab1c3506),
+       TOBN(0x9eaf641f, 0x028206a3), TOBN(0xf986f3f9, 0x25bdf6ce)}},
+     {{TOBN(0x262143b5, 0x224c08dc), TOBN(0x2bbb09b4, 0x81b50c91),
+       TOBN(0xc16ed709, 0xaca8c84f), TOBN(0xa6210d9d, 0xb2850ca8)},
+      {TOBN(0x6d8df67a, 0x09cb54d6), TOBN(0x91eef6e0, 0x500919a4),
+       TOBN(0x90f61381, 0x0f132857), TOBN(0x9acede47, 0xf8d5028b)}},
+     {{TOBN(0x844d1b71, 0x90b771c3), TOBN(0x563b71e4, 0xba6426be),
+       TOBN(0x2efa2e83, 0xbdb802ff), TOBN(0x3410cbab, 0xab5b4a41)},
+      {TOBN(0x555b2d26, 0x30da84dd), TOBN(0xd0711ae9, 0xee1cc29a),
+       TOBN(0xcf3e8c60, 0x2f547792), TOBN(0x03d7d5de, 0xdc678b35)}},
+     {{TOBN(0x071a2fa8, 0xced806b8), TOBN(0x222e6134, 0x697f1478),
+       TOBN(0xdc16fd5d, 0xabfcdbbf), TOBN(0x44912ebf, 0x121b53b8)},
+      {TOBN(0xac943674, 0x2496c27c), TOBN(0x8ea3176c, 0x1ffc26b0),
+       TOBN(0xb6e224ac, 0x13debf2c), TOBN(0x524cc235, 0xf372a832)}},
+     {{TOBN(0xd706e1d8, 0x9f6f1b18), TOBN(0x2552f005, 0x44cce35b),
+       TOBN(0x8c8326c2, 0xa88e31fc), TOBN(0xb5468b2c, 0xf9552047)},
+      {TOBN(0xce683e88, 0x3ff90f2b), TOBN(0x77947bdf, 0x2f0a5423),
+       TOBN(0xd0a1b28b, 0xed56e328), TOBN(0xaee35253, 0xc20134ac)}},
+     {{TOBN(0x7e98367d, 0x3567962f), TOBN(0x379ed61f, 0x8188bffb),
+       TOBN(0x73bba348, 0xfaf130a1), TOBN(0x6c1f75e1, 0x904ed734)},
+      {TOBN(0x18956642, 0x3b4a79fc), TOBN(0xf20bc83d, 0x54ef4493),
+       TOBN(0x836d425d, 0x9111eca1), TOBN(0xe5b5c318, 0x009a8dcf)}},
+     {{TOBN(0x3360b25d, 0x13221bc5), TOBN(0x707baad2, 0x6b3eeaf7),
+       TOBN(0xd7279ed8, 0x743a95a1), TOBN(0x7450a875, 0x969e809f)},
+      {TOBN(0x32b6bd53, 0xe5d0338f), TOBN(0x1e77f7af, 0x2b883bbc),
+       TOBN(0x90da12cc, 0x1063ecd0), TOBN(0xe2697b58, 0xc315be47)}},
+     {{TOBN(0x2771a5bd, 0xda85d534), TOBN(0x53e78c1f, 0xff980eea),
+       TOBN(0xadf1cf84, 0x900385e7), TOBN(0x7d3b14f6, 0xc9387b62)},
+      {TOBN(0x170e74b0, 0xcb8f2bd2), TOBN(0x2d50b486, 0x827fa993),
+       TOBN(0xcdbe8c9a, 0xf6f32bab), TOBN(0x55e906b0, 0xc3b93ab8)}},
+     {{TOBN(0x747f22fc, 0x8fe280d1), TOBN(0xcd8e0de5, 0xb2e114ab),
+       TOBN(0x5ab7dbeb, 0xe10b68b0), TOBN(0x9dc63a9c, 0xa480d4b2)},
+      {TOBN(0x78d4bc3b, 0x4be1495f), TOBN(0x25eb3db8, 0x9359122d),
+       TOBN(0x3f8ac05b, 0x0809cbdc), TOBN(0xbf4187bb, 0xd37c702f)}},
+     {{TOBN(0x84cea069, 0x1416a6a5), TOBN(0x8f860c79, 0x43ef881c),
+       TOBN(0x41311f8a, 0x38038a5d), TOBN(0xe78c2ec0, 0xfc612067)},
+      {TOBN(0x494d2e81, 0x5ad73581), TOBN(0xb4cc9e00, 0x59604097),
+       TOBN(0xff558aec, 0xf3612cba), TOBN(0x35beef7a, 0x9e36c39e)}},
+     {{TOBN(0x1845c7cf, 0xdbcf41b9), TOBN(0x5703662a, 0xaea997c0),
+       TOBN(0x8b925afe, 0xe402f6d8), TOBN(0xd0a1b1ae, 0x4dd72162)},
+      {TOBN(0x9f47b375, 0x03c41c4b), TOBN(0xa023829b, 0x0391d042),
+       TOBN(0x5f5045c3, 0x503b8b0a), TOBN(0x123c2688, 0x98c010e5)}},
+     {{TOBN(0x324ec0cc, 0x36ba06ee), TOBN(0xface3115, 0x3dd2cc0c),
+       TOBN(0xb364f3be, 0xf333e91f), TOBN(0xef8aff73, 0x28e832b0)},
+      {TOBN(0x1e9bad04, 0x2d05841b), TOBN(0x42f0e3df, 0x356a21e2),
+       TOBN(0xa3270bcb, 0x4add627e), TOBN(0xb09a8158, 0xd322e711)}},
+     {{TOBN(0x86e326a1, 0x0fee104a), TOBN(0xad7788f8, 0x3703f65d),
+       TOBN(0x7e765430, 0x47bc4833), TOBN(0x6cee582b, 0x2b9b893a)},
+      {TOBN(0x9cd2a167, 0xe8f55a7b), TOBN(0xefbee3c6, 0xd9e4190d),
+       TOBN(0x33ee7185, 0xd40c2e9d), TOBN(0x844cc9c5, 0xa380b548)}},
+     {{TOBN(0x323f8ecd, 0x66926e04), TOBN(0x0001e38f, 0x8110c1ba),
+       TOBN(0x8dbcac12, 0xfc6a7f07), TOBN(0xd65e1d58, 0x0cec0827)},
+      {TOBN(0xd2cd4141, 0xbe76ca2d), TOBN(0x7895cf5c, 0xe892f33a),
+       TOBN(0x956d230d, 0x367139d2), TOBN(0xa91abd3e, 0xd012c4c1)}},
+     {{TOBN(0x34fa4883, 0x87eb36bf), TOBN(0xc5f07102, 0x914b8fb4),
+       TOBN(0x90f0e579, 0xadb9c95f), TOBN(0xfe6ea8cb, 0x28888195)},
+      {TOBN(0x7b9b5065, 0xedfa9284), TOBN(0x6c510bd2, 0x2b8c8d65),
+       TOBN(0xd7b8ebef, 0xcbe8aafd), TOBN(0xedb3af98, 0x96b1da07)}},
+     {{TOBN(0x28ff779d, 0x6295d426), TOBN(0x0c4f6ac7, 0x3fa3ad7b),
+       TOBN(0xec44d054, 0x8b8e2604), TOBN(0x9b32a66d, 0x8b0050e1)},
+      {TOBN(0x1f943366, 0xf0476ce2), TOBN(0x7554d953, 0xa602c7b4),
+       TOBN(0xbe35aca6, 0x524f2809), TOBN(0xb6881229, 0xfd4edbea)}},
+     {{TOBN(0xe8cd0c8f, 0x508efb63), TOBN(0x9eb5b5c8, 0x6abcefc7),
+       TOBN(0xf5621f5f, 0xb441ab4f), TOBN(0x79e6c046, 0xb76a2b22)},
+      {TOBN(0x74a4792c, 0xe37a1f69), TOBN(0xcbd252cb, 0x03542b60),
+       TOBN(0x785f65d5, 0xb3c20bd3), TOBN(0x8dea6143, 0x4fabc60c)}},
+     {{TOBN(0x45e21446, 0xde673629), TOBN(0x57f7aa1e, 0x703c2d21),
+       TOBN(0xa0e99b7f, 0x98c868c7), TOBN(0x4e42f66d, 0x8b641676)},
+      {TOBN(0x602884dc, 0x91077896), TOBN(0xa0d690cf, 0xc2c9885b),
+       TOBN(0xfeb4da33, 0x3b9a5187), TOBN(0x5f789598, 0x153c87ee)}},
+     {{TOBN(0x2192dd47, 0x52b16dba), TOBN(0xdeefc0e6, 0x3524c1b1),
+       TOBN(0x465ea76e, 0xe4383693), TOBN(0x79401711, 0x361b8d98)},
+      {TOBN(0xa5f9ace9, 0xf21a15cb), TOBN(0x73d26163, 0xefee9aeb),
+       TOBN(0xcca844b3, 0xe677016c), TOBN(0x6c122b07, 0x57eaee06)}},
+     {{TOBN(0xb782dce7, 0x15f09690), TOBN(0x508b9b12, 0x2dfc0fc9),
+       TOBN(0x9015ab4b, 0x65d89fc6), TOBN(0x5e79dab7, 0xd6d5bb0f)},
+      {TOBN(0x64f021f0, 0x6c775aa2), TOBN(0xdf09d8cc, 0x37c7eca1),
+       TOBN(0x9a761367, 0xef2fa506), TOBN(0xed4ca476, 0x5b81eec6)}},
+     {{TOBN(0x262ede36, 0x10bbb8b5), TOBN(0x0737ce83, 0x0641ada3),
+       TOBN(0x4c94288a, 0xe9831ccc), TOBN(0x487fc1ce, 0x8065e635)},
+      {TOBN(0xb13d7ab3, 0xb8bb3659), TOBN(0xdea5df3e, 0x855e4120),
+       TOBN(0xb9a18573, 0x85eb0244), TOBN(0x1a1b8ea3, 0xa7cfe0a3)}},
+     {{TOBN(0x3b837119, 0x67b0867c), TOBN(0x8d5e0d08, 0x9d364520),
+       TOBN(0x52dccc1e, 0xd930f0e3), TOBN(0xefbbcec7, 0xbf20bbaf)},
+      {TOBN(0x99cffcab, 0x0263ad10), TOBN(0xd8199e6d, 0xfcd18f8a),
+       TOBN(0x64e2773f, 0xe9f10617), TOBN(0x0079e8e1, 0x08704848)}},
+     {{TOBN(0x1169989f, 0x8a342283), TOBN(0x8097799c, 0xa83012e6),
+       TOBN(0xece966cb, 0x8a6a9001), TOBN(0x93b3afef, 0x072ac7fc)},
+      {TOBN(0xe6893a2a, 0x2db3d5ba), TOBN(0x263dc462, 0x89bf4fdc),
+       TOBN(0x8852dfc9, 0xe0396673), TOBN(0x7ac70895, 0x3af362b6)}},
+     {{TOBN(0xbb9cce4d, 0x5c2f342b), TOBN(0xbf80907a, 0xb52d7aae),
+       TOBN(0x97f3d3cd, 0x2161bcd0), TOBN(0xb25b0834, 0x0962744d)},
+      {TOBN(0xc5b18ea5, 0x6c3a1dda), TOBN(0xfe4ec7eb, 0x06c92317),
+       TOBN(0xb787b890, 0xad1c4afe), TOBN(0xdccd9a92, 0x0ede801a)}},
+     {{TOBN(0x9ac6ddda, 0xdb58da1f), TOBN(0x22bbc12f, 0xb8cae6ee),
+       TOBN(0xc6f8bced, 0x815c4a43), TOBN(0x8105a92c, 0xf96480c7)},
+      {TOBN(0x0dc3dbf3, 0x7a859d51), TOBN(0xe3ec7ce6, 0x3041196b),
+       TOBN(0xd9f64b25, 0x0d1067c9), TOBN(0xf2321321, 0x3d1f8dd8)}},
+     {{TOBN(0x8b5c619c, 0x76497ee8), TOBN(0x5d2b0ac6, 0xc717370e),
+       TOBN(0x98204cb6, 0x4fcf68e1), TOBN(0x0bdec211, 0x62bc6792)},
+      {TOBN(0x6973ccef, 0xa63b1011), TOBN(0xf9e3fa97, 0xe0de1ac5),
+       TOBN(0x5efb693e, 0x3d0e0c8b), TOBN(0x037248e9, 0xd2d4fcb4)}}},
+    {{{TOBN(0x80802dc9, 0x1ec34f9e), TOBN(0xd8772d35, 0x33810603),
+       TOBN(0x3f06d66c, 0x530cb4f3), TOBN(0x7be5ed0d, 0xc475c129)},
+      {TOBN(0xcb9e3c19, 0x31e82b10), TOBN(0xc63d2857, 0xc9ff6b4c),
+       TOBN(0xb92118c6, 0x92a1b45e), TOBN(0x0aec4414, 0x7285bbca)}},
+     {{TOBN(0xfc189ae7, 0x1e29a3ef), TOBN(0xcbe906f0, 0x4c93302e),
+       TOBN(0xd0107914, 0xceaae10e), TOBN(0xb7a23f34, 0xb68e19f8)},
+      {TOBN(0xe9d875c2, 0xefd2119d), TOBN(0x03198c6e, 0xfcadc9c8),
+       TOBN(0x65591bf6, 0x4da17113), TOBN(0x3cf0bbf8, 0x3d443038)}},
+     {{TOBN(0xae485bb7, 0x2b724759), TOBN(0x945353e1, 0xb2d4c63a),
+       TOBN(0x82159d07, 0xde7d6f2c), TOBN(0x389caef3, 0x4ec5b109)},
+      {TOBN(0x4a8ebb53, 0xdb65ef14), TOBN(0x2dc2cb7e, 0xdd99de43),
+       TOBN(0x816fa3ed, 0x83f2405f), TOBN(0x73429bb9, 0xc14208a3)}},
+     {{TOBN(0xb618d590, 0xb01e6e27), TOBN(0x047e2ccd, 0xe180b2dc),
+       TOBN(0xd1b299b5, 0x04aea4a9), TOBN(0x412c9e1e, 0x9fa403a4)},
+      {TOBN(0x88d28a36, 0x79407552), TOBN(0x49c50136, 0xf332b8e3),
+       TOBN(0x3a1b6fcc, 0xe668de19), TOBN(0x178851bc, 0x75122b97)}},
+     {{TOBN(0xb1e13752, 0xfb85fa4c), TOBN(0xd61257ce, 0x383c8ce9),
+       TOBN(0xd43da670, 0xd2f74dae), TOBN(0xa35aa23f, 0xbf846bbb)},
+      {TOBN(0x5e74235d, 0x4421fc83), TOBN(0xf6df8ee0, 0xc363473b),
+       TOBN(0x34d7f52a, 0x3c4aa158), TOBN(0x50d05aab, 0x9bc6d22e)}},
+     {{TOBN(0x8c56e735, 0xa64785f4), TOBN(0xbc56637b, 0x5f29cd07),
+       TOBN(0x53b2bb80, 0x3ee35067), TOBN(0x50235a0f, 0xdc919270)},
+      {TOBN(0x191ab6d8, 0xf2c4aa65), TOBN(0xc3475831, 0x8396023b),
+       TOBN(0x80400ba5, 0xf0f805ba), TOBN(0x8881065b, 0x5ec0f80f)}},
+     {{TOBN(0xc370e522, 0xcc1b5e83), TOBN(0xde2d4ad1, 0x860b8bfb),
+       TOBN(0xad364df0, 0x67b256df), TOBN(0x8f12502e, 0xe0138997)},
+      {TOBN(0x503fa0dc, 0x7783920a), TOBN(0xe80014ad, 0xc0bc866a),
+       TOBN(0x3f89b744, 0xd3064ba6), TOBN(0x03511dcd, 0xcba5dba5)}},
+     {{TOBN(0x197dd46d, 0x95a7b1a2), TOBN(0x9c4e7ad6, 0x3c6341fb),
+       TOBN(0x426eca29, 0x484c2ece), TOBN(0x9211e489, 0xde7f4f8a)},
+      {TOBN(0x14997f6e, 0xc78ef1f4), TOBN(0x2b2c0910, 0x06574586),
+       TOBN(0x17286a6e, 0x1c3eede8), TOBN(0x25f92e47, 0x0f60e018)}},
+     {{TOBN(0x805c5646, 0x31890a36), TOBN(0x703ef600, 0x57feea5b),
+       TOBN(0x389f747c, 0xaf3c3030), TOBN(0xe0e5daeb, 0x54dd3739)},
+      {TOBN(0xfe24a4c3, 0xc9c9f155), TOBN(0x7e4bf176, 0xb5393962),
+       TOBN(0x37183de2, 0xaf20bf29), TOBN(0x4a1bd7b5, 0xf95a8c3b)}},
+     {{TOBN(0xa83b9699, 0x46191d3d), TOBN(0x281fc8dd, 0x7b87f257),
+       TOBN(0xb18e2c13, 0x54107588), TOBN(0x6372def7, 0x9b2bafe8)},
+      {TOBN(0xdaf4bb48, 0x0d8972ca), TOBN(0x3f2dd4b7, 0x56167a3f),
+       TOBN(0x1eace32d, 0x84310cf4), TOBN(0xe3bcefaf, 0xe42700aa)}},
+     {{TOBN(0x5fe5691e, 0xd785e73d), TOBN(0xa5db5ab6, 0x2ea60467),
+       TOBN(0x02e23d41, 0xdfc6514a), TOBN(0x35e8048e, 0xe03c3665)},
+      {TOBN(0x3f8b118f, 0x1adaa0f8), TOBN(0x28ec3b45, 0x84ce1a5a),
+       TOBN(0xe8cacc6e, 0x2c6646b8), TOBN(0x1343d185, 0xdbd0e40f)}},
+     {{TOBN(0xe5d7f844, 0xcaaa358c), TOBN(0x1a1db7e4, 0x9924182a),
+       TOBN(0xd64cd42d, 0x9c875d9a), TOBN(0xb37b515f, 0x042eeec8)},
+      {TOBN(0x4d4dd409, 0x7b165fbe), TOBN(0xfc322ed9, 0xe206eff3),
+       TOBN(0x7dee4102, 0x59b7e17e), TOBN(0x55a481c0, 0x8236ca00)}},
+     {{TOBN(0x8c885312, 0xc23fc975), TOBN(0x15715806, 0x05d6297b),
+       TOBN(0xa078868e, 0xf78edd39), TOBN(0x956b31e0, 0x03c45e52)},
+      {TOBN(0x470275d5, 0xff7b33a6), TOBN(0xc8d5dc3a, 0x0c7e673f),
+       TOBN(0x419227b4, 0x7e2f2598), TOBN(0x8b37b634, 0x4c14a975)}},
+     {{TOBN(0xd0667ed6, 0x8b11888c), TOBN(0x5e0e8c3e, 0x803e25dc),
+       TOBN(0x34e5d0dc, 0xb987a24a), TOBN(0x9f40ac3b, 0xae920323)},
+      {TOBN(0x5463de95, 0x34e0f63a), TOBN(0xa128bf92, 0x6b6328f9),
+       TOBN(0x491ccd7c, 0xda64f1b7), TOBN(0x7ef1ec27, 0xc47bde35)}},
+     {{TOBN(0xa857240f, 0xa36a2737), TOBN(0x35dc1366, 0x63621bc1),
+       TOBN(0x7a3a6453, 0xd4fb6897), TOBN(0x80f1a439, 0xc929319d)},
+      {TOBN(0xfc18274b, 0xf8cb0ba0), TOBN(0xb0b53766, 0x8078c5eb),
+       TOBN(0xfb0d4924, 0x1e01d0ef), TOBN(0x50d7c67d, 0x372ab09c)}},
+     {{TOBN(0xb4e370af, 0x3aeac968), TOBN(0xe4f7fee9, 0xc4b63266),
+       TOBN(0xb4acd4c2, 0xe3ac5664), TOBN(0xf8910bd2, 0xceb38cbf)},
+      {TOBN(0x1c3ae50c, 0xc9c0726e), TOBN(0x15309569, 0xd97b40bf),
+       TOBN(0x70884b7f, 0xfd5a5a1b), TOBN(0x3890896a, 0xef8314cd)}},
+     {{TOBN(0x58e1515c, 0xa5618c93), TOBN(0xe665432b, 0x77d942d1),
+       TOBN(0xb32181bf, 0xb6f767a8), TOBN(0x753794e8, 0x3a604110)},
+      {TOBN(0x09afeb7c, 0xe8c0dbcc), TOBN(0x31e02613, 0x598673a3),
+       TOBN(0x5d98e557, 0x7d46db00), TOBN(0xfc21fb8c, 0x9d985b28)}},
+     {{TOBN(0xc9040116, 0xb0843e0b), TOBN(0x53b1b3a8, 0x69b04531),
+       TOBN(0xdd1649f0, 0x85d7d830), TOBN(0xbb3bcc87, 0xcb7427e8)},
+      {TOBN(0x77261100, 0xc93dce83), TOBN(0x7e79da61, 0xa1922a2a),
+       TOBN(0x587a2b02, 0xf3149ce8), TOBN(0x147e1384, 0xde92ec83)}},
+     {{TOBN(0x484c83d3, 0xaf077f30), TOBN(0xea78f844, 0x0658b53a),
+       TOBN(0x912076c2, 0x027aec53), TOBN(0xf34714e3, 0x93c8177d)},
+      {TOBN(0x37ef5d15, 0xc2376c84), TOBN(0x8315b659, 0x3d1aa783),
+       TOBN(0x3a75c484, 0xef852a90), TOBN(0x0ba0c58a, 0x16086bd4)}},
+     {{TOBN(0x29688d7a, 0x529a6d48), TOBN(0x9c7f250d, 0xc2f19203),
+       TOBN(0x123042fb, 0x682e2df9), TOBN(0x2b7587e7, 0xad8121bc)},
+      {TOBN(0x30fc0233, 0xe0182a65), TOBN(0xb82ecf87, 0xe3e1128a),
+       TOBN(0x71682861, 0x93fb098f), TOBN(0x043e21ae, 0x85e9e6a7)}},
+     {{TOBN(0xab5b49d6, 0x66c834ea), TOBN(0x3be43e18, 0x47414287),
+       TOBN(0xf40fb859, 0x219a2a47), TOBN(0x0e6559e9, 0xcc58df3c)},
+      {TOBN(0xfe1dfe8e, 0x0c6615b4), TOBN(0x14abc8fd, 0x56459d70),
+       TOBN(0x7be0fa8e, 0x05de0386), TOBN(0x8e63ef68, 0xe9035c7c)}},
+     {{TOBN(0x116401b4, 0x53b31e91), TOBN(0x0cba7ad4, 0x4436b4d8),
+       TOBN(0x9151f9a0, 0x107afd66), TOBN(0xafaca8d0, 0x1f0ee4c4)},
+      {TOBN(0x75fe5c1d, 0x9ee9761c), TOBN(0x3497a16b, 0xf0c0588f),
+       TOBN(0x3ee2bebd, 0x0304804c), TOBN(0xa8fb9a60, 0xc2c990b9)}},
+     {{TOBN(0xd14d32fe, 0x39251114), TOBN(0x36bf25bc, 0xcac73366),
+       TOBN(0xc9562c66, 0xdba7495c), TOBN(0x324d301b, 0x46ad348b)},
+      {TOBN(0x9f46620c, 0xd670407e), TOBN(0x0ea8d4f1, 0xe3733a01),
+       TOBN(0xd396d532, 0xb0c324e0), TOBN(0x5b211a0e, 0x03c317cd)}},
+     {{TOBN(0x090d7d20, 0x5ffe7b37), TOBN(0x3b7f3efb, 0x1747d2da),
+       TOBN(0xa2cb525f, 0xb54fc519), TOBN(0x6e220932, 0xf66a971e)},
+      {TOBN(0xddc160df, 0xb486d440), TOBN(0x7fcfec46, 0x3fe13465),
+       TOBN(0x83da7e4e, 0x76e4c151), TOBN(0xd6fa48a1, 0xd8d302b5)}},
+     {{TOBN(0xc6304f26, 0x5872cd88), TOBN(0x806c1d3c, 0x278b90a1),
+       TOBN(0x3553e725, 0xcaf0bc1c), TOBN(0xff59e603, 0xbb9d8d5c)},
+      {TOBN(0xa4550f32, 0x7a0b85dd), TOBN(0xdec5720a, 0x93ecc217),
+       TOBN(0x0b88b741, 0x69d62213), TOBN(0x7212f245, 0x5b365955)}},
+     {{TOBN(0x20764111, 0xb5cae787), TOBN(0x13cb7f58, 0x1dfd3124),
+       TOBN(0x2dca77da, 0x1175aefb), TOBN(0xeb75466b, 0xffaae775)},
+      {TOBN(0x74d76f3b, 0xdb6cff32), TOBN(0x7440f37a, 0x61fcda9a),
+       TOBN(0x1bb3ac92, 0xb525028b), TOBN(0x20fbf8f7, 0xa1975f29)}},
+     {{TOBN(0x982692e1, 0xdf83097f), TOBN(0x28738f6c, 0x554b0800),
+       TOBN(0xdc703717, 0xa2ce2f2f), TOBN(0x7913b93c, 0x40814194)},
+      {TOBN(0x04924593, 0x1fe89636), TOBN(0x7b98443f, 0xf78834a6),
+       TOBN(0x11c6ab01, 0x5114a5a1), TOBN(0x60deb383, 0xffba5f4c)}},
+     {{TOBN(0x4caa54c6, 0x01a982e6), TOBN(0x1dd35e11, 0x3491cd26),
+       TOBN(0x973c315f, 0x7cbd6b05), TOBN(0xcab00775, 0x52494724)},
+      {TOBN(0x04659b1f, 0x6565e15a), TOBN(0xbf30f529, 0x8c8fb026),
+       TOBN(0xfc21641b, 0xa8a0de37), TOBN(0xe9c7a366, 0xfa5e5114)}},
+     {{TOBN(0xdb849ca5, 0x52f03ad8), TOBN(0xc7e8dbe9, 0x024e35c0),
+       TOBN(0xa1a2bbac, 0xcfc3c789), TOBN(0xbf733e7d, 0x9c26f262)},
+      {TOBN(0x882ffbf5, 0xb8444823), TOBN(0xb7224e88, 0x6bf8483b),
+       TOBN(0x53023b8b, 0x65bef640), TOBN(0xaabfec91, 0xd4d5f8cd)}},
+     {{TOBN(0xa40e1510, 0x079ea1bd), TOBN(0x1ad9addc, 0xd05d5d26),
+       TOBN(0xdb3f2eab, 0x13e68d4f), TOBN(0x1cff1ae2, 0x640f803f)},
+      {TOBN(0xe0e7b749, 0xd4cee117), TOBN(0x8e9f275b, 0x4036d909),
+       TOBN(0xce34e31d, 0x8f4d4c38), TOBN(0x22b37f69, 0xd75130fc)}},
+     {{TOBN(0x83e0f1fd, 0xb4014604), TOBN(0xa8ce9919, 0x89415078),
+       TOBN(0x82375b75, 0x41792efe), TOBN(0x4f59bf5c, 0x97d4515b)},
+      {TOBN(0xac4f324f, 0x923a277d), TOBN(0xd9bc9b7d, 0x650f3406),
+       TOBN(0xc6fa87d1, 0x8a39bc51), TOBN(0x82588530, 0x5ccc108f)}},
+     {{TOBN(0x5ced3c9f, 0x82e4c634), TOBN(0x8efb8314, 0x3a4464f8),
+       TOBN(0xe706381b, 0x7a1dca25), TOBN(0x6cd15a3c, 0x5a2a412b)},
+      {TOBN(0x9347a8fd, 0xbfcd8fb5), TOBN(0x31db2eef, 0x6e54cd22),
+       TOBN(0xc4aeb11e, 0xf8d8932f), TOBN(0x11e7c1ed, 0x344411af)}},
+     {{TOBN(0x2653050c, 0xdc9a151e), TOBN(0x9edbfc08, 0x3bb0a859),
+       TOBN(0x926c81c7, 0xfd5691e7), TOBN(0x9c1b2342, 0x6f39019a)},
+      {TOBN(0x64a81c8b, 0x7f8474b9), TOBN(0x90657c07, 0x01761819),
+       TOBN(0x390b3331, 0x55e0375a), TOBN(0xc676c626, 0xb6ebc47d)}},
+     {{TOBN(0x51623247, 0xb7d6dee8), TOBN(0x0948d927, 0x79659313),
+       TOBN(0x99700161, 0xe9ab35ed), TOBN(0x06cc32b4, 0x8ddde408)},
+      {TOBN(0x6f2fd664, 0x061ef338), TOBN(0x1606fa02, 0xc202e9ed),
+       TOBN(0x55388bc1, 0x929ba99b), TOBN(0xc4428c5e, 0x1e81df69)}},
+     {{TOBN(0xce2028ae, 0xf91b0b2a), TOBN(0xce870a23, 0xf03dfd3f),
+       TOBN(0x66ec2c87, 0x0affe8ed), TOBN(0xb205fb46, 0x284d0c00)},
+      {TOBN(0xbf5dffe7, 0x44cefa48), TOBN(0xb6fc37a8, 0xa19876d7),
+       TOBN(0xbecfa84c, 0x08b72863), TOBN(0xd7205ff5, 0x2576374f)}},
+     {{TOBN(0x80330d32, 0x8887de41), TOBN(0x5de0df0c, 0x869ea534),
+       TOBN(0x13f42753, 0x3c56ea17), TOBN(0xeb1f6069, 0x452b1a78)},
+      {TOBN(0x50474396, 0xe30ea15c), TOBN(0x575816a1, 0xc1494125),
+       TOBN(0xbe1ce55b, 0xfe6bb38f), TOBN(0xb901a948, 0x96ae30f7)}},
+     {{TOBN(0xe5af0f08, 0xd8fc3548), TOBN(0x5010b5d0, 0xd73bfd08),
+       TOBN(0x993d2880, 0x53fe655a), TOBN(0x99f2630b, 0x1c1309fd)},
+      {TOBN(0xd8677baf, 0xb4e3b76f), TOBN(0x14e51ddc, 0xb840784b),
+       TOBN(0x326c750c, 0xbf0092ce), TOBN(0xc83d306b, 0xf528320f)}},
+     {{TOBN(0xc4456715, 0x77d4715c), TOBN(0xd30019f9, 0x6b703235),
+       TOBN(0x207ccb2e, 0xd669e986), TOBN(0x57c824af, 0xf6dbfc28)},
+      {TOBN(0xf0eb532f, 0xd8f92a23), TOBN(0x4a557fd4, 0x9bb98fd2),
+       TOBN(0xa57acea7, 0xc1e6199a), TOBN(0x0c663820, 0x8b94b1ed)}},
+     {{TOBN(0x9b42be8f, 0xf83a9266), TOBN(0xc7741c97, 0x0101bd45),
+       TOBN(0x95770c11, 0x07bd9ceb), TOBN(0x1f50250a, 0x8b2e0744)},
+      {TOBN(0xf762eec8, 0x1477b654), TOBN(0xc65b900e, 0x15efe59a),
+       TOBN(0x88c96148, 0x9546a897), TOBN(0x7e8025b3, 0xc30b4d7c)}},
+     {{TOBN(0xae4065ef, 0x12045cf9), TOBN(0x6fcb2caf, 0x9ccce8bd),
+       TOBN(0x1fa0ba4e, 0xf2cf6525), TOBN(0xf683125d, 0xcb72c312)},
+      {TOBN(0xa01da4ea, 0xe312410e), TOBN(0x67e28677, 0x6cd8e830),
+       TOBN(0xabd95752, 0x98fb3f07), TOBN(0x05f11e11, 0xeef649a5)}},
+     {{TOBN(0xba47faef, 0x9d3472c2), TOBN(0x3adff697, 0xc77d1345),
+       TOBN(0x4761fa04, 0xdd15afee), TOBN(0x64f1f61a, 0xb9e69462)},
+      {TOBN(0xfa691fab, 0x9bfb9093), TOBN(0x3df8ae8f, 0xa1133dfe),
+       TOBN(0xcd5f8967, 0x58cc710d), TOBN(0xfbb88d50, 0x16c7fe79)}},
+     {{TOBN(0x8e011b4c, 0xe88c50d1), TOBN(0x7532e807, 0xa8771c4f),
+       TOBN(0x64c78a48, 0xe2278ee4), TOBN(0x0b283e83, 0x3845072a)},
+      {TOBN(0x98a6f291, 0x49e69274), TOBN(0xb96e9668, 0x1868b21c),
+       TOBN(0x38f0adc2, 0xb1a8908e), TOBN(0x90afcff7, 0x1feb829d)}},
+     {{TOBN(0x9915a383, 0x210b0856), TOBN(0xa5a80602, 0xdef04889),
+       TOBN(0x800e9af9, 0x7c64d509), TOBN(0x81382d0b, 0xb8996f6f)},
+      {TOBN(0x490eba53, 0x81927e27), TOBN(0x46c63b32, 0x4af50182),
+       TOBN(0x784c5fd9, 0xd3ad62ce), TOBN(0xe4fa1870, 0xf8ae8736)}},
+     {{TOBN(0x4ec9d0bc, 0xd7466b25), TOBN(0x84ddbe1a, 0xdb235c65),
+       TOBN(0x5e2645ee, 0x163c1688), TOBN(0x570bd00e, 0x00eba747)},
+      {TOBN(0xfa51b629, 0x128bfa0f), TOBN(0x92fce1bd, 0x6c1d3b68),
+       TOBN(0x3e7361dc, 0xb66778b1), TOBN(0x9c7d249d, 0x5561d2bb)}},
+     {{TOBN(0xa40b28bf, 0x0bbc6229), TOBN(0x1c83c05e, 0xdfd91497),
+       TOBN(0x5f9f5154, 0xf083df05), TOBN(0xbac38b3c, 0xeee66c9d)},
+      {TOBN(0xf71db7e3, 0xec0dfcfd), TOBN(0xf2ecda8e, 0x8b0a8416),
+       TOBN(0x52fddd86, 0x7812aa66), TOBN(0x2896ef10, 0x4e6f4272)}},
+     {{TOBN(0xff27186a, 0x0fe9a745), TOBN(0x08249fcd, 0x49ca70db),
+       TOBN(0x7425a2e6, 0x441cac49), TOBN(0xf4a0885a, 0xece5ff57)},
+      {TOBN(0x6e2cb731, 0x7d7ead58), TOBN(0xf96cf7d6, 0x1898d104),
+       TOBN(0xafe67c9d, 0x4f2c9a89), TOBN(0x89895a50, 0x1c7bf5bc)}},
+     {{TOBN(0xdc7cb8e5, 0x573cecfa), TOBN(0x66497eae, 0xd15f03e6),
+       TOBN(0x6bc0de69, 0x3f084420), TOBN(0x323b9b36, 0xacd532b0)},
+      {TOBN(0xcfed390a, 0x0115a3c1), TOBN(0x9414c40b, 0x2d65ca0e),
+       TOBN(0x641406bd, 0x2f530c78), TOBN(0x29369a44, 0x833438f2)}},
+     {{TOBN(0x996884f5, 0x903fa271), TOBN(0xe6da0fd2, 0xb9da921e),
+       TOBN(0xa6f2f269, 0x5db01e54), TOBN(0x1ee3e9bd, 0x6876214e)},
+      {TOBN(0xa26e181c, 0xe27a9497), TOBN(0x36d254e4, 0x8e215e04),
+       TOBN(0x42f32a6c, 0x252cabca), TOBN(0x99481487, 0x80b57614)}},
+     {{TOBN(0x4c4dfe69, 0x40d9cae1), TOBN(0x05869580, 0x11a10f09),
+       TOBN(0xca287b57, 0x3491b64b), TOBN(0x77862d5d, 0x3fd4a53b)},
+      {TOBN(0xbf94856e, 0x50349126), TOBN(0x2be30bd1, 0x71c5268f),
+       TOBN(0x10393f19, 0xcbb650a6), TOBN(0x639531fe, 0x778cf9fd)}},
+     {{TOBN(0x02556a11, 0xb2935359), TOBN(0xda38aa96, 0xaf8c126e),
+       TOBN(0x47dbe6c2, 0x0960167f), TOBN(0x37bbabb6, 0x501901cd)},
+      {TOBN(0xb6e979e0, 0x2c947778), TOBN(0xd69a5175, 0x7a1a1dc6),
+       TOBN(0xc3ed5095, 0x9d9faf0c), TOBN(0x4dd9c096, 0x1d5fa5f0)}},
+     {{TOBN(0xa0c4304d, 0x64f16ea8), TOBN(0x8b1cac16, 0x7e718623),
+       TOBN(0x0b576546, 0x7c67f03e), TOBN(0x559cf5ad, 0xcbd88c01)},
+      {TOBN(0x074877bb, 0x0e2af19a), TOBN(0x1f717ec1, 0xa1228c92),
+       TOBN(0x70bcb800, 0x326e8920), TOBN(0xec6e2c5c, 0x4f312804)}},
+     {{TOBN(0x426aea7d, 0x3fca4752), TOBN(0xf12c0949, 0x2211f62a),
+       TOBN(0x24beecd8, 0x7be7b6b5), TOBN(0xb77eaf4c, 0x36d7a27d)},
+      {TOBN(0x154c2781, 0xfda78fd3), TOBN(0x848a83b0, 0x264eeabe),
+       TOBN(0x81287ef0, 0x4ffe2bc4), TOBN(0x7b6d88c6, 0xb6b6fc2a)}},
+     {{TOBN(0x805fb947, 0xce417d99), TOBN(0x4b93dcc3, 0x8b916cc4),
+       TOBN(0x72e65bb3, 0x21273323), TOBN(0xbcc1badd, 0x6ea9886e)},
+      {TOBN(0x0e223011, 0x4bc5ee85), TOBN(0xa561be74, 0xc18ee1e4),
+       TOBN(0x762fd2d4, 0xa6bcf1f1), TOBN(0x50e6a5a4, 0x95231489)}},
+     {{TOBN(0xca96001f, 0xa00b500b), TOBN(0x5c098cfc, 0x5d7dcdf5),
+       TOBN(0xa64e2d2e, 0x8c446a85), TOBN(0xbae9bcf1, 0x971f3c62)},
+      {TOBN(0x4ec22683, 0x8435a2c5), TOBN(0x8ceaed6c, 0x4bad4643),
+       TOBN(0xe9f8fb47, 0xccccf4e3), TOBN(0xbd4f3fa4, 0x1ce3b21e)}},
+     {{TOBN(0xd79fb110, 0xa3db3292), TOBN(0xe28a37da, 0xb536c66a),
+       TOBN(0x279ce87b, 0x8e49e6a9), TOBN(0x70ccfe8d, 0xfdcec8e3)},
+      {TOBN(0x2193e4e0, 0x3ba464b2), TOBN(0x0f39d60e, 0xaca9a398),
+       TOBN(0x7d7932af, 0xf82c12ab), TOBN(0xd8ff50ed, 0x91e7e0f7)}},
+     {{TOBN(0xea961058, 0xfa28a7e0), TOBN(0xc726cf25, 0x0bf5ec74),
+       TOBN(0xe74d55c8, 0xdb229666), TOBN(0x0bd9abbf, 0xa57f5799)},
+      {TOBN(0x7479ef07, 0x4dfc47b3), TOBN(0xd9c65fc3, 0x0c52f91d),
+       TOBN(0x8e0283fe, 0x36a8bde2), TOBN(0xa32a8b5e, 0x7d4b7280)}},
+     {{TOBN(0x6a677c61, 0x12e83233), TOBN(0x0fbb3512, 0xdcc9bf28),
+       TOBN(0x562e8ea5, 0x0d780f61), TOBN(0x0db8b22b, 0x1dc4e89c)},
+      {TOBN(0x0a6fd1fb, 0x89be0144), TOBN(0x8c77d246, 0xca57113b),
+       TOBN(0x4639075d, 0xff09c91c), TOBN(0x5b47b17f, 0x5060824c)}},
+     {{TOBN(0x58aea2b0, 0x16287b52), TOBN(0xa1343520, 0xd0cd8eb0),
+       TOBN(0x6148b4d0, 0xc5d58573), TOBN(0xdd2b6170, 0x291c68ae)},
+      {TOBN(0xa61b3929, 0x1da3b3b7), TOBN(0x5f946d79, 0x08c4ac10),
+       TOBN(0x4105d4a5, 0x7217d583), TOBN(0x5061da3d, 0x25e6de5e)}},
+     {{TOBN(0x3113940d, 0xec1b4991), TOBN(0xf12195e1, 0x36f485ae),
+       TOBN(0xa7507fb2, 0x731a2ee0), TOBN(0x95057a8e, 0x6e9e196e)},
+      {TOBN(0xa3c2c911, 0x2e130136), TOBN(0x97dfbb36, 0x33c60d15),
+       TOBN(0xcaf3c581, 0xb300ee2b), TOBN(0x77f25d90, 0xf4bac8b8)}},
+     {{TOBN(0xdb1c4f98, 0x6d840cd6), TOBN(0x471d62c0, 0xe634288c),
+       TOBN(0x8ec2f85e, 0xcec8a161), TOBN(0x41f37cbc, 0xfa6f4ae2)},
+      {TOBN(0x6793a20f, 0x4b709985), TOBN(0x7a7bd33b, 0xefa8985b),
+       TOBN(0x2c6a3fbd, 0x938e6446), TOBN(0x19042619, 0x2a8d47c1)}},
+     {{TOBN(0x16848667, 0xcc36975f), TOBN(0x02acf168, 0x9d5f1dfb),
+       TOBN(0x62d41ad4, 0x613baa94), TOBN(0xb56fbb92, 0x9f684670)},
+      {TOBN(0xce610d0d, 0xe9e40569), TOBN(0x7b99c65f, 0x35489fef),
+       TOBN(0x0c88ad1b, 0x3df18b97), TOBN(0x81b7d9be, 0x5d0e9edb)}},
+     {{TOBN(0xd85218c0, 0xc716cc0a), TOBN(0xf4b5ff90, 0x85691c49),
+       TOBN(0xa4fd666b, 0xce356ac6), TOBN(0x17c72895, 0x4b327a7a)},
+      {TOBN(0xf93d5085, 0xda6be7de), TOBN(0xff71530e, 0x3301d34e),
+       TOBN(0x4cd96442, 0xd8f448e8), TOBN(0x9283d331, 0x2ed18ffa)}},
+     {{TOBN(0x4d33dd99, 0x2a849870), TOBN(0xa716964b, 0x41576335),
+       TOBN(0xff5e3a9b, 0x179be0e5), TOBN(0x5b9d6b1b, 0x83b13632)},
+      {TOBN(0x3b8bd7d4, 0xa52f313b), TOBN(0xc9dd95a0, 0x637a4660),
+       TOBN(0x30035962, 0x0b3e218f), TOBN(0xce1481a3, 0xc7b28a3c)}},
+     {{TOBN(0xab41b43a, 0x43228d83), TOBN(0x24ae1c30, 0x4ad63f99),
+       TOBN(0x8e525f1a, 0x46a51229), TOBN(0x14af860f, 0xcd26d2b4)},
+      {TOBN(0xd6baef61, 0x3f714aa1), TOBN(0xf51865ad, 0xeb78795e),
+       TOBN(0xd3e21fce, 0xe6a9d694), TOBN(0x82ceb1dd, 0x8a37b527)}}}};
diff --git a/src/crypto/fipsmodule/ec/p256-x86_64.c b/src/crypto/fipsmodule/ec/p256-x86_64.c
index b4af544..29ae193 100644
--- a/src/crypto/fipsmodule/ec/p256-x86_64.c
+++ b/src/crypto/fipsmodule/ec/p256-x86_64.c
@@ -50,8 +50,8 @@
 
 // Recode window to a signed digit, see |ec_GFp_nistp_recode_scalar_bits| in
 // util.c for details
-static unsigned booth_recode_w5(unsigned in) {
-  unsigned s, d;
+static crypto_word_t booth_recode_w5(crypto_word_t in) {
+  crypto_word_t s, d;
 
   s = ~((in >> 5) - 1);
   d = (1 << 6) - in - 1;
@@ -61,8 +61,8 @@
   return (d << 1) + (s & 1);
 }
 
-static unsigned booth_recode_w7(unsigned in) {
-  unsigned s, d;
+static crypto_word_t booth_recode_w7(crypto_word_t in) {
+  crypto_word_t s, d;
 
   s = ~((in >> 7) - 1);
   d = (1 << 8) - in - 1;
@@ -117,86 +117,73 @@
   return in;
 }
 
-// ecp_nistz256_mod_inverse_mont sets |r| to (|in| * 2^-256)^-1 * 2^256 mod p.
-// That is, |r| is the modular inverse of |in| for input and output in the
-// Montgomery domain.
-static void ecp_nistz256_mod_inverse_mont(BN_ULONG r[P256_LIMBS],
-                                          const BN_ULONG in[P256_LIMBS]) {
-  /* The poly is ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff
-     ffffffff
-     We use FLT and used poly-2 as exponent */
-  BN_ULONG p2[P256_LIMBS];
-  BN_ULONG p4[P256_LIMBS];
-  BN_ULONG p8[P256_LIMBS];
-  BN_ULONG p16[P256_LIMBS];
-  BN_ULONG p32[P256_LIMBS];
-  BN_ULONG res[P256_LIMBS];
-  int i;
+// ecp_nistz256_mod_inverse_sqr_mont sets |r| to (|in| * 2^-256)^-2 * 2^256 mod
+// p. That is, |r| is the modular inverse square of |in| for input and output in
+// the Montgomery domain.
+static void ecp_nistz256_mod_inverse_sqr_mont(BN_ULONG r[P256_LIMBS],
+                                              const BN_ULONG in[P256_LIMBS]) {
+  // This implements the addition chain described in
+  // https://briansmith.org/ecc-inversion-addition-chains-01#p256_field_inversion
+  BN_ULONG x2[P256_LIMBS], x3[P256_LIMBS], x6[P256_LIMBS], x12[P256_LIMBS],
+      x15[P256_LIMBS], x30[P256_LIMBS], x32[P256_LIMBS];
+  ecp_nistz256_sqr_mont(x2, in);      // 2^2 - 2^1
+  ecp_nistz256_mul_mont(x2, x2, in);  // 2^2 - 2^0
 
-  ecp_nistz256_sqr_mont(res, in);
-  ecp_nistz256_mul_mont(p2, res, in);  // 3*p
+  ecp_nistz256_sqr_mont(x3, x2);      // 2^3 - 2^1
+  ecp_nistz256_mul_mont(x3, x3, in);  // 2^3 - 2^0
 
-  ecp_nistz256_sqr_mont(res, p2);
-  ecp_nistz256_sqr_mont(res, res);
-  ecp_nistz256_mul_mont(p4, res, p2);  // f*p
+  ecp_nistz256_sqr_mont(x6, x3);
+  for (int i = 1; i < 3; i++) {
+    ecp_nistz256_sqr_mont(x6, x6);
+  }                                   // 2^6 - 2^3
+  ecp_nistz256_mul_mont(x6, x6, x3);  // 2^6 - 2^0
 
-  ecp_nistz256_sqr_mont(res, p4);
-  ecp_nistz256_sqr_mont(res, res);
-  ecp_nistz256_sqr_mont(res, res);
-  ecp_nistz256_sqr_mont(res, res);
-  ecp_nistz256_mul_mont(p8, res, p4);  // ff*p
+  ecp_nistz256_sqr_mont(x12, x6);
+  for (int i = 1; i < 6; i++) {
+    ecp_nistz256_sqr_mont(x12, x12);
+  }                                     // 2^12 - 2^6
+  ecp_nistz256_mul_mont(x12, x12, x6);  // 2^12 - 2^0
 
-  ecp_nistz256_sqr_mont(res, p8);
-  for (i = 0; i < 7; i++) {
-    ecp_nistz256_sqr_mont(res, res);
-  }
-  ecp_nistz256_mul_mont(p16, res, p8);  // ffff*p
+  ecp_nistz256_sqr_mont(x15, x12);
+  for (int i = 1; i < 3; i++) {
+    ecp_nistz256_sqr_mont(x15, x15);
+  }                                     // 2^15 - 2^3
+  ecp_nistz256_mul_mont(x15, x15, x3);  // 2^15 - 2^0
 
-  ecp_nistz256_sqr_mont(res, p16);
-  for (i = 0; i < 15; i++) {
-    ecp_nistz256_sqr_mont(res, res);
-  }
-  ecp_nistz256_mul_mont(p32, res, p16);  // ffffffff*p
+  ecp_nistz256_sqr_mont(x30, x15);
+  for (int i = 1; i < 15; i++) {
+    ecp_nistz256_sqr_mont(x30, x30);
+  }                                      // 2^30 - 2^15
+  ecp_nistz256_mul_mont(x30, x30, x15);  // 2^30 - 2^0
 
-  ecp_nistz256_sqr_mont(res, p32);
-  for (i = 0; i < 31; i++) {
-    ecp_nistz256_sqr_mont(res, res);
-  }
-  ecp_nistz256_mul_mont(res, res, in);
+  ecp_nistz256_sqr_mont(x32, x30);
+  ecp_nistz256_sqr_mont(x32, x32);      // 2^32 - 2^2
+  ecp_nistz256_mul_mont(x32, x32, x2);  // 2^32 - 2^0
 
-  for (i = 0; i < 32 * 4; i++) {
-    ecp_nistz256_sqr_mont(res, res);
-  }
-  ecp_nistz256_mul_mont(res, res, p32);
+  BN_ULONG ret[P256_LIMBS];
+  ecp_nistz256_sqr_mont(ret, x32);
+  for (int i = 1; i < 31 + 1; i++) {
+    ecp_nistz256_sqr_mont(ret, ret);
+  }                                     // 2^64 - 2^32
+  ecp_nistz256_mul_mont(ret, ret, in);  // 2^64 - 2^32 + 2^0
 
-  for (i = 0; i < 32; i++) {
-    ecp_nistz256_sqr_mont(res, res);
-  }
-  ecp_nistz256_mul_mont(res, res, p32);
+  for (int i = 0; i < 96 + 32; i++) {
+    ecp_nistz256_sqr_mont(ret, ret);
+  }                                      // 2^192 - 2^160 + 2^128
+  ecp_nistz256_mul_mont(ret, ret, x32);  // 2^192 - 2^160 + 2^128 + 2^32 - 2^0
 
-  for (i = 0; i < 16; i++) {
-    ecp_nistz256_sqr_mont(res, res);
-  }
-  ecp_nistz256_mul_mont(res, res, p16);
+  for (int i = 0; i < 32; i++) {
+    ecp_nistz256_sqr_mont(ret, ret);
+  }                                      // 2^224 - 2^192 + 2^160 + 2^64 - 2^32
+  ecp_nistz256_mul_mont(ret, ret, x32);  // 2^224 - 2^192 + 2^160 + 2^64 - 2^0
 
-  for (i = 0; i < 8; i++) {
-    ecp_nistz256_sqr_mont(res, res);
-  }
-  ecp_nistz256_mul_mont(res, res, p8);
+  for (int i = 0; i < 30; i++) {
+    ecp_nistz256_sqr_mont(ret, ret);
+  }                                      // 2^254 - 2^222 + 2^190 + 2^94 - 2^30
+  ecp_nistz256_mul_mont(ret, ret, x30);  // 2^254 - 2^222 + 2^190 + 2^94 - 2^0
 
-  ecp_nistz256_sqr_mont(res, res);
-  ecp_nistz256_sqr_mont(res, res);
-  ecp_nistz256_sqr_mont(res, res);
-  ecp_nistz256_sqr_mont(res, res);
-  ecp_nistz256_mul_mont(res, res, p4);
-
-  ecp_nistz256_sqr_mont(res, res);
-  ecp_nistz256_sqr_mont(res, res);
-  ecp_nistz256_mul_mont(res, res, p2);
-
-  ecp_nistz256_sqr_mont(res, res);
-  ecp_nistz256_sqr_mont(res, res);
-  ecp_nistz256_mul_mont(r, res, in);
+  ecp_nistz256_sqr_mont(ret, ret);
+  ecp_nistz256_sqr_mont(r, ret);  // 2^256 - 2^224 + 2^192 + 2^96 - 2^2
 }
 
 // r = p * p_scalar
@@ -207,8 +194,8 @@
   assert(p_scalar != NULL);
   assert(group->field.width == P256_LIMBS);
 
-  static const unsigned kWindowSize = 5;
-  static const unsigned kMask = (1 << (5 /* kWindowSize */ + 1)) - 1;
+  static const size_t kWindowSize = 5;
+  static const crypto_word_t kMask = (1 << (5 /* kWindowSize */ + 1)) - 1;
 
   // A |P256_POINT| is (3 * 32) = 96 bytes, and the 64-byte alignment should
   // add no more than 63 bytes of overhead. Thus, |table| should require
@@ -245,17 +232,17 @@
 
   BN_ULONG tmp[P256_LIMBS];
   alignas(32) P256_POINT h;
-  unsigned index = 255;
-  unsigned wvalue = p_str[(index - 1) / 8];
+  size_t index = 255;
+  crypto_word_t wvalue = p_str[(index - 1) / 8];
   wvalue = (wvalue >> ((index - 1) % 8)) & kMask;
 
   ecp_nistz256_select_w5(r, table, booth_recode_w5(wvalue) >> 1);
 
   while (index >= 5) {
     if (index != 255) {
-      unsigned off = (index - 1) / 8;
+      size_t off = (index - 1) / 8;
 
-      wvalue = p_str[off] | p_str[off + 1] << 8;
+      wvalue = (crypto_word_t)p_str[off] | (crypto_word_t)p_str[off + 1] << 8;
       wvalue = (wvalue >> ((index - 1) % 8)) & kMask;
 
       wvalue = booth_recode_w5(wvalue);
@@ -296,21 +283,22 @@
   P256_POINT_AFFINE a;
 } p256_point_union_t;
 
-static unsigned calc_first_wvalue(unsigned *index, const uint8_t p_str[33]) {
-  static const unsigned kWindowSize = 7;
-  static const unsigned kMask = (1 << (7 /* kWindowSize */ + 1)) - 1;
+static crypto_word_t calc_first_wvalue(size_t *index, const uint8_t p_str[33]) {
+  static const size_t kWindowSize = 7;
+  static const crypto_word_t kMask = (1 << (7 /* kWindowSize */ + 1)) - 1;
   *index = kWindowSize;
 
-  unsigned wvalue = (p_str[0] << 1) & kMask;
+  crypto_word_t wvalue = (p_str[0] << 1) & kMask;
   return booth_recode_w7(wvalue);
 }
 
-static unsigned calc_wvalue(unsigned *index, const uint8_t p_str[33]) {
-  static const unsigned kWindowSize = 7;
-  static const unsigned kMask = (1 << (7 /* kWindowSize */ + 1)) - 1;
+static crypto_word_t calc_wvalue(size_t *index, const uint8_t p_str[33]) {
+  static const size_t kWindowSize = 7;
+  static const crypto_word_t kMask = (1 << (7 /* kWindowSize */ + 1)) - 1;
 
-  const unsigned off = (*index - 1) / 8;
-  unsigned wvalue = p_str[off] | p_str[off + 1] << 8;
+  const size_t off = (*index - 1) / 8;
+  crypto_word_t wvalue =
+      (crypto_word_t)p_str[off] | (crypto_word_t)p_str[off + 1] << 8;
   wvalue = (wvalue >> ((*index - 1) % 8)) & kMask;
   *index += kWindowSize;
 
@@ -338,8 +326,8 @@
   p_str[32] = 0;
 
   // First window
-  unsigned index = 0;
-  unsigned wvalue = calc_first_wvalue(&index, p_str);
+  size_t index = 0;
+  crypto_word_t wvalue = calc_first_wvalue(&index, p_str);
 
   ecp_nistz256_select_w7(&p.a, ecp_nistz256_precomputed[0], wvalue >> 1);
   ecp_nistz256_neg(p.p.Z, p.p.Y);
@@ -383,8 +371,8 @@
   p_str[32] = 0;
 
   // First window
-  unsigned index = 0;
-  unsigned wvalue = calc_first_wvalue(&index, p_str);
+  size_t index = 0;
+  size_t wvalue = calc_first_wvalue(&index, p_str);
 
   // Convert |p| from affine to Jacobian coordinates. We set Z to zero if |p|
   // is infinity and |ONE| otherwise. |p| was computed from the table, so it
@@ -440,24 +428,17 @@
   }
 
   BN_ULONG z_inv2[P256_LIMBS];
-  BN_ULONG z_inv3[P256_LIMBS];
   assert(group->field.width == P256_LIMBS);
-  ecp_nistz256_mod_inverse_mont(z_inv3, point->Z.words);
-  ecp_nistz256_sqr_mont(z_inv2, z_inv3);
-
-  // Instead of using |ecp_nistz256_from_mont| to convert the |x| coordinate
-  // and then calling |ecp_nistz256_from_mont| again to convert the |y|
-  // coordinate below, convert the common factor |z_inv2| once now, saving one
-  // reduction.
-  ecp_nistz256_from_mont(z_inv2, z_inv2);
+  ecp_nistz256_mod_inverse_sqr_mont(z_inv2, point->Z.words);
 
   if (x != NULL) {
     ecp_nistz256_mul_mont(x->words, z_inv2, point->X.words);
   }
 
   if (y != NULL) {
-    ecp_nistz256_mul_mont(z_inv3, z_inv3, z_inv2);
-    ecp_nistz256_mul_mont(y->words, z_inv3, point->Y.words);
+    ecp_nistz256_sqr_mont(z_inv2, z_inv2);                            // z^-4
+    ecp_nistz256_mul_mont(y->words, point->Y.words, point->Z.words);  // y * z
+    ecp_nistz256_mul_mont(y->words, y->words, z_inv2);  // y * z^-3
   }
 
   return 1;
@@ -490,8 +471,8 @@
   OPENSSL_memcpy(r->Z.words, a.Z, P256_LIMBS * sizeof(BN_ULONG));
 }
 
-static void ecp_nistz256_inv_mod_ord(const EC_GROUP *group, EC_SCALAR *out,
-                                     const EC_SCALAR *in) {
+static void ecp_nistz256_inv0_mod_ord(const EC_GROUP *group, EC_SCALAR *out,
+                                      const EC_SCALAR *in) {
   // table[i] stores a power of |in| corresponding to the matching enum value.
   enum {
     // The following indices specify the power in binary.
@@ -571,12 +552,12 @@
   }
 }
 
-static int ecp_nistz256_mont_inv_mod_ord_vartime(const EC_GROUP *group,
+static int ecp_nistz256_scalar_to_montgomery_inv_vartime(const EC_GROUP *group,
                                                  EC_SCALAR *out,
                                                  const EC_SCALAR *in) {
   if ((OPENSSL_ia32cap_get()[1] & (1 << 28)) == 0) {
     // No AVX support; fallback to generic code.
-    return ec_GFp_simple_mont_inv_mod_ord_vartime(group, out, in);
+    return ec_simple_scalar_to_montgomery_inv_vartime(group, out, in);
   }
 
   assert(group->order.width == P256_LIMBS);
@@ -640,10 +621,11 @@
   out->mul_public = ecp_nistz256_points_mul_public;
   out->felem_mul = ec_GFp_mont_felem_mul;
   out->felem_sqr = ec_GFp_mont_felem_sqr;
-  out->bignum_to_felem = ec_GFp_mont_bignum_to_felem;
-  out->felem_to_bignum = ec_GFp_mont_felem_to_bignum;
-  out->scalar_inv_montgomery = ecp_nistz256_inv_mod_ord;
-  out->scalar_inv_montgomery_vartime = ecp_nistz256_mont_inv_mod_ord_vartime;
+  out->felem_to_bytes = ec_GFp_mont_felem_to_bytes;
+  out->felem_from_bytes = ec_GFp_mont_felem_from_bytes;
+  out->scalar_inv0_montgomery = ecp_nistz256_inv0_mod_ord;
+  out->scalar_to_montgomery_inv_vartime =
+      ecp_nistz256_scalar_to_montgomery_inv_vartime;
   out->cmp_x_coordinate = ecp_nistz256_cmp_x_coordinate;
 }
 
diff --git a/src/crypto/fipsmodule/ec/p256.c b/src/crypto/fipsmodule/ec/p256.c
new file mode 100644
index 0000000..9f5694c
--- /dev/null
+++ b/src/crypto/fipsmodule/ec/p256.c
@@ -0,0 +1,740 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+// An implementation of the NIST P-256 elliptic curve point multiplication.
+// 256-bit Montgomery form for 64 and 32-bit. Field operations are generated by
+// Fiat, which lives in //third_party/fiat.
+
+#include <openssl/base.h>
+
+#include <openssl/bn.h>
+#include <openssl/ec.h>
+#include <openssl/err.h>
+#include <openssl/mem.h>
+#include <openssl/type_check.h>
+
+#include <assert.h>
+#include <string.h>
+
+#include "../../internal.h"
+#include "../delocate.h"
+#include "./internal.h"
+
+
+// MSVC does not implement uint128_t, and crashes with intrinsics
+#if defined(BORINGSSL_HAS_UINT128)
+#define BORINGSSL_NISTP256_64BIT 1
+#include "../../../third_party/fiat/p256_64.h"
+#else
+#include "../../../third_party/fiat/p256_32.h"
+#endif
+
+
+// utility functions, handwritten
+
+#if defined(BORINGSSL_NISTP256_64BIT)
+#define FIAT_P256_NLIMBS 4
+typedef uint64_t fiat_p256_limb_t;
+typedef uint64_t fiat_p256_felem[FIAT_P256_NLIMBS];
+static const fiat_p256_felem fiat_p256_one = {0x1, 0xffffffff00000000,
+                                              0xffffffffffffffff, 0xfffffffe};
+#else  // 64BIT; else 32BIT
+#define FIAT_P256_NLIMBS 8
+typedef uint32_t fiat_p256_limb_t;
+typedef uint32_t fiat_p256_felem[FIAT_P256_NLIMBS];
+static const fiat_p256_felem fiat_p256_one = {
+    0x1, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffffe, 0x0};
+#endif  // 64BIT
+
+
+static fiat_p256_limb_t fiat_p256_nz(
+    const fiat_p256_limb_t in1[FIAT_P256_NLIMBS]) {
+  fiat_p256_limb_t ret;
+  fiat_p256_nonzero(&ret, in1);
+  return ret;
+}
+
+static void fiat_p256_copy(fiat_p256_limb_t out[FIAT_P256_NLIMBS],
+                           const fiat_p256_limb_t in1[FIAT_P256_NLIMBS]) {
+  for (size_t i = 0; i < FIAT_P256_NLIMBS; i++) {
+    out[i] = in1[i];
+  }
+}
+
+static void fiat_p256_cmovznz(fiat_p256_limb_t out[FIAT_P256_NLIMBS],
+                              fiat_p256_limb_t t,
+                              const fiat_p256_limb_t z[FIAT_P256_NLIMBS],
+                              const fiat_p256_limb_t nz[FIAT_P256_NLIMBS]) {
+  fiat_p256_selectznz(out, !!t, z, nz);
+}
+
+static void fiat_p256_from_generic(fiat_p256_felem out, const EC_FELEM *in) {
+  fiat_p256_from_bytes(out, in->bytes);
+}
+
+static void fiat_p256_to_generic(EC_FELEM *out, const fiat_p256_felem in) {
+  // This works because 256 is a multiple of 64, so there are no excess bytes to
+  // zero when rounding up to |BN_ULONG|s.
+  OPENSSL_STATIC_ASSERT(
+      256 / 8 == sizeof(BN_ULONG) * ((256 + BN_BITS2 - 1) / BN_BITS2),
+      "fiat_p256_to_bytes leaves bytes uninitialized");
+  fiat_p256_to_bytes(out->bytes, in);
+}
+
+// fiat_p256_inv_square calculates |out| = |in|^{-2}
+//
+// Based on Fermat's Little Theorem:
+//   a^p = a (mod p)
+//   a^{p-1} = 1 (mod p)
+//   a^{p-3} = a^{-2} (mod p)
+static void fiat_p256_inv_square(fiat_p256_felem out,
+                                 const fiat_p256_felem in) {
+  // This implements the addition chain described in
+  // https://briansmith.org/ecc-inversion-addition-chains-01#p256_field_inversion
+  fiat_p256_felem x2, x3, x6, x12, x15, x30, x32;
+  fiat_p256_square(x2, in);   // 2^2 - 2^1
+  fiat_p256_mul(x2, x2, in);  // 2^2 - 2^0
+
+  fiat_p256_square(x3, x2);   // 2^3 - 2^1
+  fiat_p256_mul(x3, x3, in);  // 2^3 - 2^0
+
+  fiat_p256_square(x6, x3);
+  for (int i = 1; i < 3; i++) {
+    fiat_p256_square(x6, x6);
+  }                           // 2^6 - 2^3
+  fiat_p256_mul(x6, x6, x3);  // 2^6 - 2^0
+
+  fiat_p256_square(x12, x6);
+  for (int i = 1; i < 6; i++) {
+    fiat_p256_square(x12, x12);
+  }                             // 2^12 - 2^6
+  fiat_p256_mul(x12, x12, x6);  // 2^12 - 2^0
+
+  fiat_p256_square(x15, x12);
+  for (int i = 1; i < 3; i++) {
+    fiat_p256_square(x15, x15);
+  }                             // 2^15 - 2^3
+  fiat_p256_mul(x15, x15, x3);  // 2^15 - 2^0
+
+  fiat_p256_square(x30, x15);
+  for (int i = 1; i < 15; i++) {
+    fiat_p256_square(x30, x30);
+  }                              // 2^30 - 2^15
+  fiat_p256_mul(x30, x30, x15);  // 2^30 - 2^0
+
+  fiat_p256_square(x32, x30);
+  fiat_p256_square(x32, x32);   // 2^32 - 2^2
+  fiat_p256_mul(x32, x32, x2);  // 2^32 - 2^0
+
+  fiat_p256_felem ret;
+  fiat_p256_square(ret, x32);
+  for (int i = 1; i < 31 + 1; i++) {
+    fiat_p256_square(ret, ret);
+  }                             // 2^64 - 2^32
+  fiat_p256_mul(ret, ret, in);  // 2^64 - 2^32 + 2^0
+
+  for (int i = 0; i < 96 + 32; i++) {
+    fiat_p256_square(ret, ret);
+  }                              // 2^192 - 2^160 + 2^128
+  fiat_p256_mul(ret, ret, x32);  // 2^192 - 2^160 + 2^128 + 2^32 - 2^0
+
+  for (int i = 0; i < 32; i++) {
+    fiat_p256_square(ret, ret);
+  }                              // 2^224 - 2^192 + 2^160 + 2^64 - 2^32
+  fiat_p256_mul(ret, ret, x32);  // 2^224 - 2^192 + 2^160 + 2^64 - 2^0
+
+  for (int i = 0; i < 30; i++) {
+    fiat_p256_square(ret, ret);
+  }                              // 2^254 - 2^222 + 2^190 + 2^94 - 2^30
+  fiat_p256_mul(ret, ret, x30);  // 2^254 - 2^222 + 2^190 + 2^94 - 2^0
+
+  fiat_p256_square(ret, ret);
+  fiat_p256_square(out, ret);  // 2^256 - 2^224 + 2^192 + 2^96 - 2^2
+}
+
+// Group operations
+// ----------------
+//
+// Building on top of the field operations we have the operations on the
+// elliptic curve group itself. Points on the curve are represented in Jacobian
+// coordinates.
+//
+// Both operations were transcribed to Coq and proven to correspond to naive
+// implementations using Affine coordinates, for all suitable fields.  In the
+// Coq proofs, issues of constant-time execution and memory layout (aliasing)
+// conventions were not considered. Specification of affine coordinates:
+// <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Spec/WeierstrassCurve.v#L28>
+// As a sanity check, a proof that these points form a commutative group:
+// <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Curves/Weierstrass/AffineProofs.v#L33>
+
+// fiat_p256_point_double calculates 2*(x_in, y_in, z_in)
+//
+// The method is taken from:
+//   http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
+//
+// Coq transcription and correctness proof:
+// <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Curves/Weierstrass/Jacobian.v#L93>
+// <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Curves/Weierstrass/Jacobian.v#L201>
+//
+// Outputs can equal corresponding inputs, i.e., x_out == x_in is allowed.
+// while x_out == y_in is not (maybe this works, but it's not tested).
+static void fiat_p256_point_double(fiat_p256_felem x_out, fiat_p256_felem y_out,
+                                   fiat_p256_felem z_out,
+                                   const fiat_p256_felem x_in,
+                                   const fiat_p256_felem y_in,
+                                   const fiat_p256_felem z_in) {
+  fiat_p256_felem delta, gamma, beta, ftmp, ftmp2, tmptmp, alpha, fourbeta;
+  // delta = z^2
+  fiat_p256_square(delta, z_in);
+  // gamma = y^2
+  fiat_p256_square(gamma, y_in);
+  // beta = x*gamma
+  fiat_p256_mul(beta, x_in, gamma);
+
+  // alpha = 3*(x-delta)*(x+delta)
+  fiat_p256_sub(ftmp, x_in, delta);
+  fiat_p256_add(ftmp2, x_in, delta);
+
+  fiat_p256_add(tmptmp, ftmp2, ftmp2);
+  fiat_p256_add(ftmp2, ftmp2, tmptmp);
+  fiat_p256_mul(alpha, ftmp, ftmp2);
+
+  // x' = alpha^2 - 8*beta
+  fiat_p256_square(x_out, alpha);
+  fiat_p256_add(fourbeta, beta, beta);
+  fiat_p256_add(fourbeta, fourbeta, fourbeta);
+  fiat_p256_add(tmptmp, fourbeta, fourbeta);
+  fiat_p256_sub(x_out, x_out, tmptmp);
+
+  // z' = (y + z)^2 - gamma - delta
+  fiat_p256_add(delta, gamma, delta);
+  fiat_p256_add(ftmp, y_in, z_in);
+  fiat_p256_square(z_out, ftmp);
+  fiat_p256_sub(z_out, z_out, delta);
+
+  // y' = alpha*(4*beta - x') - 8*gamma^2
+  fiat_p256_sub(y_out, fourbeta, x_out);
+  fiat_p256_add(gamma, gamma, gamma);
+  fiat_p256_square(gamma, gamma);
+  fiat_p256_mul(y_out, alpha, y_out);
+  fiat_p256_add(gamma, gamma, gamma);
+  fiat_p256_sub(y_out, y_out, gamma);
+}
+
+// fiat_p256_point_add calculates (x1, y1, z1) + (x2, y2, z2)
+//
+// The method is taken from:
+//   http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-2007-bl,
+// adapted for mixed addition (z2 = 1, or z2 = 0 for the point at infinity).
+//
+// Coq transcription and correctness proof:
+// <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Curves/Weierstrass/Jacobian.v#L135>
+// <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Curves/Weierstrass/Jacobian.v#L205>
+//
+// This function includes a branch for checking whether the two input points
+// are equal, (while not equal to the point at infinity). This case never
+// happens during single point multiplication, so there is no timing leak for
+// ECDH or ECDSA signing.
+static void fiat_p256_point_add(fiat_p256_felem x3, fiat_p256_felem y3,
+                                fiat_p256_felem z3, const fiat_p256_felem x1,
+                                const fiat_p256_felem y1,
+                                const fiat_p256_felem z1, const int mixed,
+                                const fiat_p256_felem x2,
+                                const fiat_p256_felem y2,
+                                const fiat_p256_felem z2) {
+  fiat_p256_felem x_out, y_out, z_out;
+  fiat_p256_limb_t z1nz = fiat_p256_nz(z1);
+  fiat_p256_limb_t z2nz = fiat_p256_nz(z2);
+
+  // z1z1 = z1z1 = z1**2
+  fiat_p256_felem z1z1;
+  fiat_p256_square(z1z1, z1);
+
+  fiat_p256_felem u1, s1, two_z1z2;
+  if (!mixed) {
+    // z2z2 = z2**2
+    fiat_p256_felem z2z2;
+    fiat_p256_square(z2z2, z2);
+
+    // u1 = x1*z2z2
+    fiat_p256_mul(u1, x1, z2z2);
+
+    // two_z1z2 = (z1 + z2)**2 - (z1z1 + z2z2) = 2z1z2
+    fiat_p256_add(two_z1z2, z1, z2);
+    fiat_p256_square(two_z1z2, two_z1z2);
+    fiat_p256_sub(two_z1z2, two_z1z2, z1z1);
+    fiat_p256_sub(two_z1z2, two_z1z2, z2z2);
+
+    // s1 = y1 * z2**3
+    fiat_p256_mul(s1, z2, z2z2);
+    fiat_p256_mul(s1, s1, y1);
+  } else {
+    // We'll assume z2 = 1 (special case z2 = 0 is handled later).
+
+    // u1 = x1*z2z2
+    fiat_p256_copy(u1, x1);
+    // two_z1z2 = 2z1z2
+    fiat_p256_add(two_z1z2, z1, z1);
+    // s1 = y1 * z2**3
+    fiat_p256_copy(s1, y1);
+  }
+
+  // u2 = x2*z1z1
+  fiat_p256_felem u2;
+  fiat_p256_mul(u2, x2, z1z1);
+
+  // h = u2 - u1
+  fiat_p256_felem h;
+  fiat_p256_sub(h, u2, u1);
+
+  fiat_p256_limb_t xneq = fiat_p256_nz(h);
+
+  // z_out = two_z1z2 * h
+  fiat_p256_mul(z_out, h, two_z1z2);
+
+  // z1z1z1 = z1 * z1z1
+  fiat_p256_felem z1z1z1;
+  fiat_p256_mul(z1z1z1, z1, z1z1);
+
+  // s2 = y2 * z1**3
+  fiat_p256_felem s2;
+  fiat_p256_mul(s2, y2, z1z1z1);
+
+  // r = (s2 - s1)*2
+  fiat_p256_felem r;
+  fiat_p256_sub(r, s2, s1);
+  fiat_p256_add(r, r, r);
+
+  fiat_p256_limb_t yneq = fiat_p256_nz(r);
+
+  fiat_p256_limb_t is_nontrivial_double = constant_time_is_zero_w(xneq | yneq) &
+                                          ~constant_time_is_zero_w(z1nz) &
+                                          ~constant_time_is_zero_w(z2nz);
+  if (is_nontrivial_double) {
+    fiat_p256_point_double(x3, y3, z3, x1, y1, z1);
+    return;
+  }
+
+  // I = (2h)**2
+  fiat_p256_felem i;
+  fiat_p256_add(i, h, h);
+  fiat_p256_square(i, i);
+
+  // J = h * I
+  fiat_p256_felem j;
+  fiat_p256_mul(j, h, i);
+
+  // V = U1 * I
+  fiat_p256_felem v;
+  fiat_p256_mul(v, u1, i);
+
+  // x_out = r**2 - J - 2V
+  fiat_p256_square(x_out, r);
+  fiat_p256_sub(x_out, x_out, j);
+  fiat_p256_sub(x_out, x_out, v);
+  fiat_p256_sub(x_out, x_out, v);
+
+  // y_out = r(V-x_out) - 2 * s1 * J
+  fiat_p256_sub(y_out, v, x_out);
+  fiat_p256_mul(y_out, y_out, r);
+  fiat_p256_felem s1j;
+  fiat_p256_mul(s1j, s1, j);
+  fiat_p256_sub(y_out, y_out, s1j);
+  fiat_p256_sub(y_out, y_out, s1j);
+
+  fiat_p256_cmovznz(x_out, z1nz, x2, x_out);
+  fiat_p256_cmovznz(x3, z2nz, x1, x_out);
+  fiat_p256_cmovznz(y_out, z1nz, y2, y_out);
+  fiat_p256_cmovznz(y3, z2nz, y1, y_out);
+  fiat_p256_cmovznz(z_out, z1nz, z2, z_out);
+  fiat_p256_cmovznz(z3, z2nz, z1, z_out);
+}
+
+#include "./p256_table.h"
+
+// fiat_p256_select_point_affine selects the |idx-1|th point from a
+// precomputation table and copies it to out. If |idx| is zero, the output is
+// the point at infinity.
+static void fiat_p256_select_point_affine(
+    const fiat_p256_limb_t idx, size_t size,
+    const fiat_p256_felem pre_comp[/*size*/][2], fiat_p256_felem out[3]) {
+  OPENSSL_memset(out, 0, sizeof(fiat_p256_felem) * 3);
+  for (size_t i = 0; i < size; i++) {
+    fiat_p256_limb_t mismatch = i ^ (idx - 1);
+    fiat_p256_cmovznz(out[0], mismatch, pre_comp[i][0], out[0]);
+    fiat_p256_cmovznz(out[1], mismatch, pre_comp[i][1], out[1]);
+  }
+  fiat_p256_cmovznz(out[2], idx, out[2], fiat_p256_one);
+}
+
+// fiat_p256_select_point selects the |idx|th point from a precomputation table
+// and copies it to out.
+static void fiat_p256_select_point(const fiat_p256_limb_t idx, size_t size,
+                                   const fiat_p256_felem pre_comp[/*size*/][3],
+                                   fiat_p256_felem out[3]) {
+  OPENSSL_memset(out, 0, sizeof(fiat_p256_felem) * 3);
+  for (size_t i = 0; i < size; i++) {
+    fiat_p256_limb_t mismatch = i ^ idx;
+    fiat_p256_cmovznz(out[0], mismatch, pre_comp[i][0], out[0]);
+    fiat_p256_cmovznz(out[1], mismatch, pre_comp[i][1], out[1]);
+    fiat_p256_cmovznz(out[2], mismatch, pre_comp[i][2], out[2]);
+  }
+}
+
+// fiat_p256_get_bit returns the |i|th bit in |in|
+static crypto_word_t fiat_p256_get_bit(const uint8_t *in, int i) {
+  if (i < 0 || i >= 256) {
+    return 0;
+  }
+  return (in[i >> 3] >> (i & 7)) & 1;
+}
+
+// OPENSSL EC_METHOD FUNCTIONS
+
+// Takes the Jacobian coordinates (X, Y, Z) of a point and returns (X', Y') =
+// (X/Z^2, Y/Z^3).
+static int ec_GFp_nistp256_point_get_affine_coordinates(
+    const EC_GROUP *group, const EC_RAW_POINT *point, EC_FELEM *x_out,
+    EC_FELEM *y_out) {
+  if (ec_GFp_simple_is_at_infinity(group, point)) {
+    OPENSSL_PUT_ERROR(EC, EC_R_POINT_AT_INFINITY);
+    return 0;
+  }
+
+  fiat_p256_felem z1, z2;
+  fiat_p256_from_generic(z1, &point->Z);
+  fiat_p256_inv_square(z2, z1);
+
+  if (x_out != NULL) {
+    fiat_p256_felem x;
+    fiat_p256_from_generic(x, &point->X);
+    fiat_p256_mul(x, x, z2);
+    fiat_p256_to_generic(x_out, x);
+  }
+
+  if (y_out != NULL) {
+    fiat_p256_felem y;
+    fiat_p256_from_generic(y, &point->Y);
+    fiat_p256_square(z2, z2);  // z^-4
+    fiat_p256_mul(y, y, z1);   // y * z
+    fiat_p256_mul(y, y, z2);   // y * z^-3
+    fiat_p256_to_generic(y_out, y);
+  }
+
+  return 1;
+}
+
+static void ec_GFp_nistp256_add(const EC_GROUP *group, EC_RAW_POINT *r,
+                                const EC_RAW_POINT *a, const EC_RAW_POINT *b) {
+  fiat_p256_felem x1, y1, z1, x2, y2, z2;
+  fiat_p256_from_generic(x1, &a->X);
+  fiat_p256_from_generic(y1, &a->Y);
+  fiat_p256_from_generic(z1, &a->Z);
+  fiat_p256_from_generic(x2, &b->X);
+  fiat_p256_from_generic(y2, &b->Y);
+  fiat_p256_from_generic(z2, &b->Z);
+  fiat_p256_point_add(x1, y1, z1, x1, y1, z1, 0 /* both Jacobian */, x2, y2,
+                      z2);
+  fiat_p256_to_generic(&r->X, x1);
+  fiat_p256_to_generic(&r->Y, y1);
+  fiat_p256_to_generic(&r->Z, z1);
+}
+
+static void ec_GFp_nistp256_dbl(const EC_GROUP *group, EC_RAW_POINT *r,
+                                const EC_RAW_POINT *a) {
+  fiat_p256_felem x, y, z;
+  fiat_p256_from_generic(x, &a->X);
+  fiat_p256_from_generic(y, &a->Y);
+  fiat_p256_from_generic(z, &a->Z);
+  fiat_p256_point_double(x, y, z, x, y, z);
+  fiat_p256_to_generic(&r->X, x);
+  fiat_p256_to_generic(&r->Y, y);
+  fiat_p256_to_generic(&r->Z, z);
+}
+
+static void ec_GFp_nistp256_point_mul(const EC_GROUP *group, EC_RAW_POINT *r,
+                                      const EC_RAW_POINT *p,
+                                      const EC_SCALAR *scalar) {
+  fiat_p256_felem p_pre_comp[17][3];
+  OPENSSL_memset(&p_pre_comp, 0, sizeof(p_pre_comp));
+  // Precompute multiples.
+  fiat_p256_from_generic(p_pre_comp[1][0], &p->X);
+  fiat_p256_from_generic(p_pre_comp[1][1], &p->Y);
+  fiat_p256_from_generic(p_pre_comp[1][2], &p->Z);
+  for (size_t j = 2; j <= 16; ++j) {
+    if (j & 1) {
+      fiat_p256_point_add(p_pre_comp[j][0], p_pre_comp[j][1], p_pre_comp[j][2],
+                          p_pre_comp[1][0], p_pre_comp[1][1], p_pre_comp[1][2],
+                          0, p_pre_comp[j - 1][0], p_pre_comp[j - 1][1],
+                          p_pre_comp[j - 1][2]);
+    } else {
+      fiat_p256_point_double(p_pre_comp[j][0], p_pre_comp[j][1],
+                             p_pre_comp[j][2], p_pre_comp[j / 2][0],
+                             p_pre_comp[j / 2][1], p_pre_comp[j / 2][2]);
+    }
+  }
+
+  // Set nq to the point at infinity.
+  fiat_p256_felem nq[3] = {{0}, {0}, {0}}, ftmp, tmp[3];
+
+  // Loop over |scalar| msb-to-lsb, incorporating |p_pre_comp| every 5th round.
+  int skip = 1;  // Save two point operations in the first round.
+  for (size_t i = 255; i < 256; i--) {
+    // double
+    if (!skip) {
+      fiat_p256_point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
+    }
+
+    // do other additions every 5 doublings
+    if (i % 5 == 0) {
+      crypto_word_t bits = fiat_p256_get_bit(scalar->bytes, i + 4) << 5;
+      bits |= fiat_p256_get_bit(scalar->bytes, i + 3) << 4;
+      bits |= fiat_p256_get_bit(scalar->bytes, i + 2) << 3;
+      bits |= fiat_p256_get_bit(scalar->bytes, i + 1) << 2;
+      bits |= fiat_p256_get_bit(scalar->bytes, i) << 1;
+      bits |= fiat_p256_get_bit(scalar->bytes, i - 1);
+      crypto_word_t sign, digit;
+      ec_GFp_nistp_recode_scalar_bits(&sign, &digit, bits);
+
+      // select the point to add or subtract, in constant time.
+      fiat_p256_select_point((fiat_p256_limb_t)digit, 17,
+                             (const fiat_p256_felem(*)[3])p_pre_comp, tmp);
+      fiat_p256_opp(ftmp, tmp[1]);  // (X, -Y, Z) is the negative point.
+      fiat_p256_cmovznz(tmp[1], (fiat_p256_limb_t)sign, tmp[1], ftmp);
+
+      if (!skip) {
+        fiat_p256_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2],
+                            0 /* mixed */, tmp[0], tmp[1], tmp[2]);
+      } else {
+        fiat_p256_copy(nq[0], tmp[0]);
+        fiat_p256_copy(nq[1], tmp[1]);
+        fiat_p256_copy(nq[2], tmp[2]);
+        skip = 0;
+      }
+    }
+  }
+
+  fiat_p256_to_generic(&r->X, nq[0]);
+  fiat_p256_to_generic(&r->Y, nq[1]);
+  fiat_p256_to_generic(&r->Z, nq[2]);
+}
+
+static void ec_GFp_nistp256_point_mul_base(const EC_GROUP *group,
+                                           EC_RAW_POINT *r,
+                                           const EC_SCALAR *scalar) {
+  // Set nq to the point at infinity.
+  fiat_p256_felem nq[3] = {{0}, {0}, {0}}, tmp[3];
+
+  int skip = 1;  // Save two point operations in the first round.
+  for (size_t i = 31; i < 32; i--) {
+    if (!skip) {
+      fiat_p256_point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
+    }
+
+    // First, look 32 bits upwards.
+    crypto_word_t bits = fiat_p256_get_bit(scalar->bytes, i + 224) << 3;
+    bits |= fiat_p256_get_bit(scalar->bytes, i + 160) << 2;
+    bits |= fiat_p256_get_bit(scalar->bytes, i + 96) << 1;
+    bits |= fiat_p256_get_bit(scalar->bytes, i + 32);
+    // Select the point to add, in constant time.
+    fiat_p256_select_point_affine((fiat_p256_limb_t)bits, 15,
+                                  fiat_p256_g_pre_comp[1], tmp);
+
+    if (!skip) {
+      fiat_p256_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2],
+                          1 /* mixed */, tmp[0], tmp[1], tmp[2]);
+    } else {
+      fiat_p256_copy(nq[0], tmp[0]);
+      fiat_p256_copy(nq[1], tmp[1]);
+      fiat_p256_copy(nq[2], tmp[2]);
+      skip = 0;
+    }
+
+    // Second, look at the current position.
+    bits = fiat_p256_get_bit(scalar->bytes, i + 192) << 3;
+    bits |= fiat_p256_get_bit(scalar->bytes, i + 128) << 2;
+    bits |= fiat_p256_get_bit(scalar->bytes, i + 64) << 1;
+    bits |= fiat_p256_get_bit(scalar->bytes, i);
+    // Select the point to add, in constant time.
+    fiat_p256_select_point_affine((fiat_p256_limb_t)bits, 15,
+                                  fiat_p256_g_pre_comp[0], tmp);
+    fiat_p256_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */,
+                        tmp[0], tmp[1], tmp[2]);
+  }
+
+  fiat_p256_to_generic(&r->X, nq[0]);
+  fiat_p256_to_generic(&r->Y, nq[1]);
+  fiat_p256_to_generic(&r->Z, nq[2]);
+}
+
+static void ec_GFp_nistp256_point_mul_public(const EC_GROUP *group,
+                                             EC_RAW_POINT *r,
+                                             const EC_SCALAR *g_scalar,
+                                             const EC_RAW_POINT *p,
+                                             const EC_SCALAR *p_scalar) {
+#define P256_WSIZE_PUBLIC 4
+  // Precompute multiples of |p|. p_pre_comp[i] is (2*i+1) * |p|.
+  fiat_p256_felem p_pre_comp[1 << (P256_WSIZE_PUBLIC - 1)][3];
+  fiat_p256_from_generic(p_pre_comp[0][0], &p->X);
+  fiat_p256_from_generic(p_pre_comp[0][1], &p->Y);
+  fiat_p256_from_generic(p_pre_comp[0][2], &p->Z);
+  fiat_p256_felem p2[3];
+  fiat_p256_point_double(p2[0], p2[1], p2[2], p_pre_comp[0][0],
+                         p_pre_comp[0][1], p_pre_comp[0][2]);
+  for (size_t i = 1; i < OPENSSL_ARRAY_SIZE(p_pre_comp); i++) {
+    fiat_p256_point_add(p_pre_comp[i][0], p_pre_comp[i][1], p_pre_comp[i][2],
+                        p_pre_comp[i - 1][0], p_pre_comp[i - 1][1],
+                        p_pre_comp[i - 1][2], 0 /* not mixed */, p2[0], p2[1],
+                        p2[2]);
+  }
+
+  // Set up the coefficients for |p_scalar|.
+  int8_t p_wNAF[257];
+  ec_compute_wNAF(group, p_wNAF, p_scalar, 256, P256_WSIZE_PUBLIC);
+
+  // Set |ret| to the point at infinity.
+  int skip = 1;  // Save some point operations.
+  fiat_p256_felem ret[3] = {{0}, {0}, {0}};
+  for (int i = 256; i >= 0; i--) {
+    if (!skip) {
+      fiat_p256_point_double(ret[0], ret[1], ret[2], ret[0], ret[1], ret[2]);
+    }
+
+    // For the |g_scalar|, we use the precomputed table without the
+    // constant-time lookup.
+    if (i <= 31) {
+      // First, look 32 bits upwards.
+      crypto_word_t bits = fiat_p256_get_bit(g_scalar->bytes, i + 224) << 3;
+      bits |= fiat_p256_get_bit(g_scalar->bytes, i + 160) << 2;
+      bits |= fiat_p256_get_bit(g_scalar->bytes, i + 96) << 1;
+      bits |= fiat_p256_get_bit(g_scalar->bytes, i + 32);
+      if (bits != 0) {
+        size_t index = (size_t)(bits - 1);
+        fiat_p256_point_add(ret[0], ret[1], ret[2], ret[0], ret[1], ret[2],
+                            1 /* mixed */, fiat_p256_g_pre_comp[1][index][0],
+                            fiat_p256_g_pre_comp[1][index][1],
+                            fiat_p256_one);
+        skip = 0;
+      }
+
+      // Second, look at the current position.
+      bits = fiat_p256_get_bit(g_scalar->bytes, i + 192) << 3;
+      bits |= fiat_p256_get_bit(g_scalar->bytes, i + 128) << 2;
+      bits |= fiat_p256_get_bit(g_scalar->bytes, i + 64) << 1;
+      bits |= fiat_p256_get_bit(g_scalar->bytes, i);
+      if (bits != 0) {
+        size_t index = (size_t)(bits - 1);
+        fiat_p256_point_add(ret[0], ret[1], ret[2], ret[0], ret[1], ret[2],
+                            1 /* mixed */, fiat_p256_g_pre_comp[0][index][0],
+                            fiat_p256_g_pre_comp[0][index][1],
+                            fiat_p256_one);
+        skip = 0;
+      }
+    }
+
+    int digit = p_wNAF[i];
+    if (digit != 0) {
+      assert(digit & 1);
+      size_t idx = (size_t)(digit < 0 ? (-digit) >> 1 : digit >> 1);
+      fiat_p256_felem *y = &p_pre_comp[idx][1], tmp;
+      if (digit < 0) {
+        fiat_p256_opp(tmp, p_pre_comp[idx][1]);
+        y = &tmp;
+      }
+      if (!skip) {
+        fiat_p256_point_add(ret[0], ret[1], ret[2], ret[0], ret[1], ret[2],
+                            0 /* not mixed */, p_pre_comp[idx][0], *y,
+                            p_pre_comp[idx][2]);
+      } else {
+        fiat_p256_copy(ret[0], p_pre_comp[idx][0]);
+        fiat_p256_copy(ret[1], *y);
+        fiat_p256_copy(ret[2], p_pre_comp[idx][2]);
+        skip = 0;
+      }
+    }
+  }
+
+  fiat_p256_to_generic(&r->X, ret[0]);
+  fiat_p256_to_generic(&r->Y, ret[1]);
+  fiat_p256_to_generic(&r->Z, ret[2]);
+}
+
+static int ec_GFp_nistp256_cmp_x_coordinate(const EC_GROUP *group,
+                                            const EC_RAW_POINT *p,
+                                            const EC_SCALAR *r) {
+  if (ec_GFp_simple_is_at_infinity(group, p)) {
+    return 0;
+  }
+
+  // We wish to compare X/Z^2 with r. This is equivalent to comparing X with
+  // r*Z^2. Note that X and Z are represented in Montgomery form, while r is
+  // not.
+  fiat_p256_felem Z2_mont;
+  fiat_p256_from_generic(Z2_mont, &p->Z);
+  fiat_p256_mul(Z2_mont, Z2_mont, Z2_mont);
+
+  fiat_p256_felem r_Z2;
+  fiat_p256_from_bytes(r_Z2, r->bytes);  // r < order < p, so this is valid.
+  fiat_p256_mul(r_Z2, r_Z2, Z2_mont);
+
+  fiat_p256_felem X;
+  fiat_p256_from_generic(X, &p->X);
+  fiat_p256_from_montgomery(X, X);
+
+  if (OPENSSL_memcmp(&r_Z2, &X, sizeof(r_Z2)) == 0) {
+    return 1;
+  }
+
+  // During signing the x coefficient is reduced modulo the group order.
+  // Therefore there is a small possibility, less than 1/2^128, that group_order
+  // < p.x < P. in that case we need not only to compare against |r| but also to
+  // compare against r+group_order.
+  assert(group->field.width == group->order.width);
+  if (bn_less_than_words(r->words, group->field_minus_order.words,
+                         group->field.width)) {
+    // We can ignore the carry because: r + group_order < p < 2^256.
+    EC_FELEM tmp;
+    bn_add_words(tmp.words, r->words, group->order.d, group->order.width);
+    fiat_p256_from_generic(r_Z2, &tmp);
+    fiat_p256_mul(r_Z2, r_Z2, Z2_mont);
+    if (OPENSSL_memcmp(&r_Z2, &X, sizeof(r_Z2)) == 0) {
+      return 1;
+    }
+  }
+
+  return 0;
+}
+
+DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_nistp256_method) {
+  out->group_init = ec_GFp_mont_group_init;
+  out->group_finish = ec_GFp_mont_group_finish;
+  out->group_set_curve = ec_GFp_mont_group_set_curve;
+  out->point_get_affine_coordinates =
+      ec_GFp_nistp256_point_get_affine_coordinates;
+  out->add = ec_GFp_nistp256_add;
+  out->dbl = ec_GFp_nistp256_dbl;
+  out->mul = ec_GFp_nistp256_point_mul;
+  out->mul_base = ec_GFp_nistp256_point_mul_base;
+  out->mul_public = ec_GFp_nistp256_point_mul_public;
+  out->felem_mul = ec_GFp_mont_felem_mul;
+  out->felem_sqr = ec_GFp_mont_felem_sqr;
+  out->felem_to_bytes = ec_GFp_mont_felem_to_bytes;
+  out->felem_from_bytes = ec_GFp_mont_felem_from_bytes;
+  out->scalar_inv0_montgomery = ec_simple_scalar_inv0_montgomery;
+  out->scalar_to_montgomery_inv_vartime =
+      ec_simple_scalar_to_montgomery_inv_vartime;
+  out->cmp_x_coordinate = ec_GFp_nistp256_cmp_x_coordinate;
+}
+
+#undef BORINGSSL_NISTP256_64BIT
diff --git a/src/crypto/fipsmodule/ec/p256_table.h b/src/crypto/fipsmodule/ec/p256_table.h
new file mode 100644
index 0000000..14129a3
--- /dev/null
+++ b/src/crypto/fipsmodule/ec/p256_table.h
@@ -0,0 +1,297 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+// This file is generated by make_tables.go.
+
+// Base point pre computation
+// --------------------------
+//
+// Two different sorts of precomputed tables are used in the following code.
+// Each contain various points on the curve, where each point is three field
+// elements (x, y, z).
+//
+// For the base point table, z is usually 1 (0 for the point at infinity).
+// This table has 2 * 16 elements, starting with the following:
+// index | bits    | point
+// ------+---------+------------------------------
+//     0 | 0 0 0 0 | 0G
+//     1 | 0 0 0 1 | 1G
+//     2 | 0 0 1 0 | 2^64G
+//     3 | 0 0 1 1 | (2^64 + 1)G
+//     4 | 0 1 0 0 | 2^128G
+//     5 | 0 1 0 1 | (2^128 + 1)G
+//     6 | 0 1 1 0 | (2^128 + 2^64)G
+//     7 | 0 1 1 1 | (2^128 + 2^64 + 1)G
+//     8 | 1 0 0 0 | 2^192G
+//     9 | 1 0 0 1 | (2^192 + 1)G
+//    10 | 1 0 1 0 | (2^192 + 2^64)G
+//    11 | 1 0 1 1 | (2^192 + 2^64 + 1)G
+//    12 | 1 1 0 0 | (2^192 + 2^128)G
+//    13 | 1 1 0 1 | (2^192 + 2^128 + 1)G
+//    14 | 1 1 1 0 | (2^192 + 2^128 + 2^64)G
+//    15 | 1 1 1 1 | (2^192 + 2^128 + 2^64 + 1)G
+// followed by a copy of this with each element multiplied by 2^32.
+//
+// The reason for this is so that we can clock bits into four different
+// locations when doing simple scalar multiplies against the base point,
+// and then another four locations using the second 16 elements.
+//
+// Tables for other points have table[i] = iG for i in 0 .. 16.
+
+// fiat_p256_g_pre_comp is the table of precomputed base points
+#if defined(BORINGSSL_NISTP256_64BIT)
+static const fiat_p256_felem fiat_p256_g_pre_comp[2][15][2] = {
+    {{{0x79e730d418a9143c, 0x75ba95fc5fedb601, 0x79fb732b77622510,
+       0x18905f76a53755c6},
+      {0xddf25357ce95560a, 0x8b4ab8e4ba19e45c, 0xd2e88688dd21f325,
+       0x8571ff1825885d85}},
+     {{0x4f922fc516a0d2bb, 0x0d5cc16c1a623499, 0x9241cf3a57c62c8b,
+       0x2f5e6961fd1b667f},
+      {0x5c15c70bf5a01797, 0x3d20b44d60956192, 0x04911b37071fdb52,
+       0xf648f9168d6f0f7b}},
+     {{0x9e566847e137bbbc, 0xe434469e8a6a0bec, 0xb1c4276179d73463,
+       0x5abe0285133d0015},
+      {0x92aa837cc04c7dab, 0x573d9f4c43260c07, 0x0c93156278e6cc37,
+       0x94bb725b6b6f7383}},
+     {{0x62a8c244bfe20925, 0x91c19ac38fdce867, 0x5a96a5d5dd387063,
+       0x61d587d421d324f6},
+      {0xe87673a2a37173ea, 0x2384800853778b65, 0x10f8441e05bab43e,
+       0xfa11fe124621efbe}},
+     {{0x1c891f2b2cb19ffd, 0x01ba8d5bb1923c23, 0xb6d03d678ac5ca8e,
+       0x586eb04c1f13bedc},
+      {0x0c35c6e527e8ed09, 0x1e81a33c1819ede2, 0x278fd6c056c652fa,
+       0x19d5ac0870864f11}},
+     {{0x62577734d2b533d5, 0x673b8af6a1bdddc0, 0x577e7c9aa79ec293,
+       0xbb6de651c3b266b1},
+      {0xe7e9303ab65259b3, 0xd6a0afd3d03a7480, 0xc5ac83d19b3cfc27,
+       0x60b4619a5d18b99b}},
+     {{0xbd6a38e11ae5aa1c, 0xb8b7652b49e73658, 0x0b130014ee5f87ed,
+       0x9d0f27b2aeebffcd},
+      {0xca9246317a730a55, 0x9c955b2fddbbc83a, 0x07c1dfe0ac019a71,
+       0x244a566d356ec48d}},
+     {{0x56f8410ef4f8b16a, 0x97241afec47b266a, 0x0a406b8e6d9c87c1,
+       0x803f3e02cd42ab1b},
+      {0x7f0309a804dbec69, 0xa83b85f73bbad05f, 0xc6097273ad8e197f,
+       0xc097440e5067adc1}},
+     {{0x846a56f2c379ab34, 0xa8ee068b841df8d1, 0x20314459176c68ef,
+       0xf1af32d5915f1f30},
+      {0x99c375315d75bd50, 0x837cffbaf72f67bc, 0x0613a41848d7723f,
+       0x23d0f130e2d41c8b}},
+     {{0xed93e225d5be5a2b, 0x6fe799835934f3c6, 0x4314092622626ffc,
+       0x50bbb4d97990216a},
+      {0x378191c6e57ec63e, 0x65422c40181dcdb2, 0x41a8099b0236e0f6,
+       0x2b10011801fe49c3}},
+     {{0xfc68b5c59b391593, 0xc385f5a2598270fc, 0x7144f3aad19adcbb,
+       0xdd55899983fbae0c},
+      {0x93b88b8e74b82ff4, 0xd2e03c4071e734c9, 0x9a7a9eaf43c0322a,
+       0xe6e4c551149d6041}},
+     {{0x5fe14bfe80ec21fe, 0xf6ce116ac255be82, 0x98bc5a072f4a5d67,
+       0xfad27148db7e63af},
+      {0x90c0b6ac29ab05b3, 0x37a9a83c4e251ae6, 0x0a7dc875c2aade7d,
+       0x77387de39f0e1a84}},
+     {{0x1e9ecc49a56c0dd7, 0xa5cffcd846086c74, 0x8f7a1408f505aece,
+       0xb37b85c0bef0c47e},
+      {0x3596b6e4cc0e6a8f, 0xfd6d4bbf6b388f23, 0xaba453fac39cef4e,
+       0x9c135ac8f9f628d5}},
+     {{0x0a1c729495c8f8be, 0x2961c4803bf362bf, 0x9e418403df63d4ac,
+       0xc109f9cb91ece900},
+      {0xc2d095d058945705, 0xb9083d96ddeb85c0, 0x84692b8d7a40449b,
+       0x9bc3344f2eee1ee1}},
+     {{0x0d5ae35642913074, 0x55491b2748a542b1, 0x469ca665b310732a,
+       0x29591d525f1a4cc1},
+      {0xe76f5b6bb84f983f, 0xbe7eef419f5f84e1, 0x1200d49680baa189,
+       0x6376551f18ef332c}}},
+    {{{0x202886024147519a, 0xd0981eac26b372f0, 0xa9d4a7caa785ebc8,
+       0xd953c50ddbdf58e9},
+      {0x9d6361ccfd590f8f, 0x72e9626b44e6c917, 0x7fd9611022eb64cf,
+       0x863ebb7e9eb288f3}},
+     {{0x4fe7ee31b0e63d34, 0xf4600572a9e54fab, 0xc0493334d5e7b5a4,
+       0x8589fb9206d54831},
+      {0xaa70f5cc6583553a, 0x0879094ae25649e5, 0xcc90450710044652,
+       0xebb0696d02541c4f}},
+     {{0xabbaa0c03b89da99, 0xa6f2d79eb8284022, 0x27847862b81c05e8,
+       0x337a4b5905e54d63},
+      {0x3c67500d21f7794a, 0x207005b77d6d7f61, 0x0a5a378104cfd6e8,
+       0x0d65e0d5f4c2fbd6}},
+     {{0xd433e50f6d3549cf, 0x6f33696ffacd665e, 0x695bfdacce11fcb4,
+       0x810ee252af7c9860},
+      {0x65450fe17159bb2c, 0xf7dfbebe758b357b, 0x2b057e74d69fea72,
+       0xd485717a92731745}},
+     {{0xce1f69bbe83f7669, 0x09f8ae8272877d6b, 0x9548ae543244278d,
+       0x207755dee3c2c19c},
+      {0x87bd61d96fef1945, 0x18813cefb12d28c3, 0x9fbcd1d672df64aa,
+       0x48dc5ee57154b00d}},
+     {{0xef0f469ef49a3154, 0x3e85a5956e2b2e9a, 0x45aaec1eaa924a9c,
+       0xaa12dfc8a09e4719},
+      {0x26f272274df69f1d, 0xe0e4c82ca2ff5e73, 0xb9d8ce73b7a9dd44,
+       0x6c036e73e48ca901}},
+     {{0xe1e421e1a47153f0, 0xb86c3b79920418c9, 0x93bdce87705d7672,
+       0xf25ae793cab79a77},
+      {0x1f3194a36d869d0c, 0x9d55c8824986c264, 0x49fb5ea3096e945e,
+       0x39b8e65313db0a3e}},
+     {{0xe3417bc035d0b34a, 0x440b386b8327c0a7, 0x8fb7262dac0362d1,
+       0x2c41114ce0cdf943},
+      {0x2ba5cef1ad95a0b1, 0xc09b37a867d54362, 0x26d6cdd201e486c9,
+       0x20477abf42ff9297}},
+     {{0x0f121b41bc0a67d2, 0x62d4760a444d248a, 0x0e044f1d659b4737,
+       0x08fde365250bb4a8},
+      {0xaceec3da848bf287, 0xc2a62182d3369d6e, 0x3582dfdc92449482,
+       0x2f7e2fd2565d6cd7}},
+     {{0x0a0122b5178a876b, 0x51ff96ff085104b4, 0x050b31ab14f29f76,
+       0x84abb28b5f87d4e6},
+      {0xd5ed439f8270790a, 0x2d6cb59d85e3f46b, 0x75f55c1b6c1e2212,
+       0xe5436f6717655640}},
+     {{0xc2965ecc9aeb596d, 0x01ea03e7023c92b4, 0x4704b4b62e013961,
+       0x0ca8fd3f905ea367},
+      {0x92523a42551b2b61, 0x1eb7a89c390fcd06, 0xe7f1d2be0392a63e,
+       0x96dca2644ddb0c33}},
+     {{0x231c210e15339848, 0xe87a28e870778c8d, 0x9d1de6616956e170,
+       0x4ac3c9382bb09c0b},
+      {0x19be05516998987d, 0x8b2376c4ae09f4d6, 0x1de0b7651a3f933d,
+       0x380d94c7e39705f4}},
+     {{0x3685954b8c31c31d, 0x68533d005bf21a0c, 0x0bd7626e75c79ec9,
+       0xca17754742c69d54},
+      {0xcc6edafff6d2dbb2, 0xfd0d8cbd174a9d18, 0x875e8793aa4578e8,
+       0xa976a7139cab2ce6}},
+     {{0xce37ab11b43ea1db, 0x0a7ff1a95259d292, 0x851b02218f84f186,
+       0xa7222beadefaad13},
+      {0xa2ac78ec2b0a9144, 0x5a024051f2fa59c5, 0x91d1eca56147ce38,
+       0xbe94d523bc2ac690}},
+     {{0x2d8daefd79ec1a0f, 0x3bbcd6fdceb39c97, 0xf5575ffc58f61a95,
+       0xdbd986c4adf7b420},
+      {0x81aa881415f39eb7, 0x6ee2fcf5b98d976c, 0x5465475dcf2f717d,
+       0x8e24d3c46860bbd0}}}};
+#else
+static const fiat_p256_felem fiat_p256_g_pre_comp[2][15][2] = {
+    {{{0x18a9143c, 0x79e730d4, 0x5fedb601, 0x75ba95fc, 0x77622510, 0x79fb732b,
+       0xa53755c6, 0x18905f76},
+      {0xce95560a, 0xddf25357, 0xba19e45c, 0x8b4ab8e4, 0xdd21f325, 0xd2e88688,
+       0x25885d85, 0x8571ff18}},
+     {{0x16a0d2bb, 0x4f922fc5, 0x1a623499, 0x0d5cc16c, 0x57c62c8b, 0x9241cf3a,
+       0xfd1b667f, 0x2f5e6961},
+      {0xf5a01797, 0x5c15c70b, 0x60956192, 0x3d20b44d, 0x071fdb52, 0x04911b37,
+       0x8d6f0f7b, 0xf648f916}},
+     {{0xe137bbbc, 0x9e566847, 0x8a6a0bec, 0xe434469e, 0x79d73463, 0xb1c42761,
+       0x133d0015, 0x5abe0285},
+      {0xc04c7dab, 0x92aa837c, 0x43260c07, 0x573d9f4c, 0x78e6cc37, 0x0c931562,
+       0x6b6f7383, 0x94bb725b}},
+     {{0xbfe20925, 0x62a8c244, 0x8fdce867, 0x91c19ac3, 0xdd387063, 0x5a96a5d5,
+       0x21d324f6, 0x61d587d4},
+      {0xa37173ea, 0xe87673a2, 0x53778b65, 0x23848008, 0x05bab43e, 0x10f8441e,
+       0x4621efbe, 0xfa11fe12}},
+     {{0x2cb19ffd, 0x1c891f2b, 0xb1923c23, 0x01ba8d5b, 0x8ac5ca8e, 0xb6d03d67,
+       0x1f13bedc, 0x586eb04c},
+      {0x27e8ed09, 0x0c35c6e5, 0x1819ede2, 0x1e81a33c, 0x56c652fa, 0x278fd6c0,
+       0x70864f11, 0x19d5ac08}},
+     {{0xd2b533d5, 0x62577734, 0xa1bdddc0, 0x673b8af6, 0xa79ec293, 0x577e7c9a,
+       0xc3b266b1, 0xbb6de651},
+      {0xb65259b3, 0xe7e9303a, 0xd03a7480, 0xd6a0afd3, 0x9b3cfc27, 0xc5ac83d1,
+       0x5d18b99b, 0x60b4619a}},
+     {{0x1ae5aa1c, 0xbd6a38e1, 0x49e73658, 0xb8b7652b, 0xee5f87ed, 0x0b130014,
+       0xaeebffcd, 0x9d0f27b2},
+      {0x7a730a55, 0xca924631, 0xddbbc83a, 0x9c955b2f, 0xac019a71, 0x07c1dfe0,
+       0x356ec48d, 0x244a566d}},
+     {{0xf4f8b16a, 0x56f8410e, 0xc47b266a, 0x97241afe, 0x6d9c87c1, 0x0a406b8e,
+       0xcd42ab1b, 0x803f3e02},
+      {0x04dbec69, 0x7f0309a8, 0x3bbad05f, 0xa83b85f7, 0xad8e197f, 0xc6097273,
+       0x5067adc1, 0xc097440e}},
+     {{0xc379ab34, 0x846a56f2, 0x841df8d1, 0xa8ee068b, 0x176c68ef, 0x20314459,
+       0x915f1f30, 0xf1af32d5},
+      {0x5d75bd50, 0x99c37531, 0xf72f67bc, 0x837cffba, 0x48d7723f, 0x0613a418,
+       0xe2d41c8b, 0x23d0f130}},
+     {{0xd5be5a2b, 0xed93e225, 0x5934f3c6, 0x6fe79983, 0x22626ffc, 0x43140926,
+       0x7990216a, 0x50bbb4d9},
+      {0xe57ec63e, 0x378191c6, 0x181dcdb2, 0x65422c40, 0x0236e0f6, 0x41a8099b,
+       0x01fe49c3, 0x2b100118}},
+     {{0x9b391593, 0xfc68b5c5, 0x598270fc, 0xc385f5a2, 0xd19adcbb, 0x7144f3aa,
+       0x83fbae0c, 0xdd558999},
+      {0x74b82ff4, 0x93b88b8e, 0x71e734c9, 0xd2e03c40, 0x43c0322a, 0x9a7a9eaf,
+       0x149d6041, 0xe6e4c551}},
+     {{0x80ec21fe, 0x5fe14bfe, 0xc255be82, 0xf6ce116a, 0x2f4a5d67, 0x98bc5a07,
+       0xdb7e63af, 0xfad27148},
+      {0x29ab05b3, 0x90c0b6ac, 0x4e251ae6, 0x37a9a83c, 0xc2aade7d, 0x0a7dc875,
+       0x9f0e1a84, 0x77387de3}},
+     {{0xa56c0dd7, 0x1e9ecc49, 0x46086c74, 0xa5cffcd8, 0xf505aece, 0x8f7a1408,
+       0xbef0c47e, 0xb37b85c0},
+      {0xcc0e6a8f, 0x3596b6e4, 0x6b388f23, 0xfd6d4bbf, 0xc39cef4e, 0xaba453fa,
+       0xf9f628d5, 0x9c135ac8}},
+     {{0x95c8f8be, 0x0a1c7294, 0x3bf362bf, 0x2961c480, 0xdf63d4ac, 0x9e418403,
+       0x91ece900, 0xc109f9cb},
+      {0x58945705, 0xc2d095d0, 0xddeb85c0, 0xb9083d96, 0x7a40449b, 0x84692b8d,
+       0x2eee1ee1, 0x9bc3344f}},
+     {{0x42913074, 0x0d5ae356, 0x48a542b1, 0x55491b27, 0xb310732a, 0x469ca665,
+       0x5f1a4cc1, 0x29591d52},
+      {0xb84f983f, 0xe76f5b6b, 0x9f5f84e1, 0xbe7eef41, 0x80baa189, 0x1200d496,
+       0x18ef332c, 0x6376551f}}},
+    {{{0x4147519a, 0x20288602, 0x26b372f0, 0xd0981eac, 0xa785ebc8, 0xa9d4a7ca,
+       0xdbdf58e9, 0xd953c50d},
+      {0xfd590f8f, 0x9d6361cc, 0x44e6c917, 0x72e9626b, 0x22eb64cf, 0x7fd96110,
+       0x9eb288f3, 0x863ebb7e}},
+     {{0xb0e63d34, 0x4fe7ee31, 0xa9e54fab, 0xf4600572, 0xd5e7b5a4, 0xc0493334,
+       0x06d54831, 0x8589fb92},
+      {0x6583553a, 0xaa70f5cc, 0xe25649e5, 0x0879094a, 0x10044652, 0xcc904507,
+       0x02541c4f, 0xebb0696d}},
+     {{0x3b89da99, 0xabbaa0c0, 0xb8284022, 0xa6f2d79e, 0xb81c05e8, 0x27847862,
+       0x05e54d63, 0x337a4b59},
+      {0x21f7794a, 0x3c67500d, 0x7d6d7f61, 0x207005b7, 0x04cfd6e8, 0x0a5a3781,
+       0xf4c2fbd6, 0x0d65e0d5}},
+     {{0x6d3549cf, 0xd433e50f, 0xfacd665e, 0x6f33696f, 0xce11fcb4, 0x695bfdac,
+       0xaf7c9860, 0x810ee252},
+      {0x7159bb2c, 0x65450fe1, 0x758b357b, 0xf7dfbebe, 0xd69fea72, 0x2b057e74,
+       0x92731745, 0xd485717a}},
+     {{0xe83f7669, 0xce1f69bb, 0x72877d6b, 0x09f8ae82, 0x3244278d, 0x9548ae54,
+       0xe3c2c19c, 0x207755de},
+      {0x6fef1945, 0x87bd61d9, 0xb12d28c3, 0x18813cef, 0x72df64aa, 0x9fbcd1d6,
+       0x7154b00d, 0x48dc5ee5}},
+     {{0xf49a3154, 0xef0f469e, 0x6e2b2e9a, 0x3e85a595, 0xaa924a9c, 0x45aaec1e,
+       0xa09e4719, 0xaa12dfc8},
+      {0x4df69f1d, 0x26f27227, 0xa2ff5e73, 0xe0e4c82c, 0xb7a9dd44, 0xb9d8ce73,
+       0xe48ca901, 0x6c036e73}},
+     {{0xa47153f0, 0xe1e421e1, 0x920418c9, 0xb86c3b79, 0x705d7672, 0x93bdce87,
+       0xcab79a77, 0xf25ae793},
+      {0x6d869d0c, 0x1f3194a3, 0x4986c264, 0x9d55c882, 0x096e945e, 0x49fb5ea3,
+       0x13db0a3e, 0x39b8e653}},
+     {{0x35d0b34a, 0xe3417bc0, 0x8327c0a7, 0x440b386b, 0xac0362d1, 0x8fb7262d,
+       0xe0cdf943, 0x2c41114c},
+      {0xad95a0b1, 0x2ba5cef1, 0x67d54362, 0xc09b37a8, 0x01e486c9, 0x26d6cdd2,
+       0x42ff9297, 0x20477abf}},
+     {{0xbc0a67d2, 0x0f121b41, 0x444d248a, 0x62d4760a, 0x659b4737, 0x0e044f1d,
+       0x250bb4a8, 0x08fde365},
+      {0x848bf287, 0xaceec3da, 0xd3369d6e, 0xc2a62182, 0x92449482, 0x3582dfdc,
+       0x565d6cd7, 0x2f7e2fd2}},
+     {{0x178a876b, 0x0a0122b5, 0x085104b4, 0x51ff96ff, 0x14f29f76, 0x050b31ab,
+       0x5f87d4e6, 0x84abb28b},
+      {0x8270790a, 0xd5ed439f, 0x85e3f46b, 0x2d6cb59d, 0x6c1e2212, 0x75f55c1b,
+       0x17655640, 0xe5436f67}},
+     {{0x9aeb596d, 0xc2965ecc, 0x023c92b4, 0x01ea03e7, 0x2e013961, 0x4704b4b6,
+       0x905ea367, 0x0ca8fd3f},
+      {0x551b2b61, 0x92523a42, 0x390fcd06, 0x1eb7a89c, 0x0392a63e, 0xe7f1d2be,
+       0x4ddb0c33, 0x96dca264}},
+     {{0x15339848, 0x231c210e, 0x70778c8d, 0xe87a28e8, 0x6956e170, 0x9d1de661,
+       0x2bb09c0b, 0x4ac3c938},
+      {0x6998987d, 0x19be0551, 0xae09f4d6, 0x8b2376c4, 0x1a3f933d, 0x1de0b765,
+       0xe39705f4, 0x380d94c7}},
+     {{0x8c31c31d, 0x3685954b, 0x5bf21a0c, 0x68533d00, 0x75c79ec9, 0x0bd7626e,
+       0x42c69d54, 0xca177547},
+      {0xf6d2dbb2, 0xcc6edaff, 0x174a9d18, 0xfd0d8cbd, 0xaa4578e8, 0x875e8793,
+       0x9cab2ce6, 0xa976a713}},
+     {{0xb43ea1db, 0xce37ab11, 0x5259d292, 0x0a7ff1a9, 0x8f84f186, 0x851b0221,
+       0xdefaad13, 0xa7222bea},
+      {0x2b0a9144, 0xa2ac78ec, 0xf2fa59c5, 0x5a024051, 0x6147ce38, 0x91d1eca5,
+       0xbc2ac690, 0xbe94d523}},
+     {{0x79ec1a0f, 0x2d8daefd, 0xceb39c97, 0x3bbcd6fd, 0x58f61a95, 0xf5575ffc,
+       0xadf7b420, 0xdbd986c4},
+      {0x15f39eb7, 0x81aa8814, 0xb98d976c, 0x6ee2fcf5, 0xcf2f717d, 0x5465475d,
+       0x6860bbd0, 0x8e24d3c4}}}};
+#endif
diff --git a/src/crypto/fipsmodule/ec/scalar.c b/src/crypto/fipsmodule/ec/scalar.c
index 82f2a50..e4ae9d7 100644
--- a/src/crypto/fipsmodule/ec/scalar.c
+++ b/src/crypto/fipsmodule/ec/scalar.c
@@ -51,6 +51,45 @@
                              additional_data);
 }
 
+void ec_scalar_to_bytes(const EC_GROUP *group, uint8_t *out, size_t *out_len,
+                        const EC_SCALAR *in) {
+  size_t len = BN_num_bytes(&group->order);
+  for (size_t i = 0; i < len; i++) {
+    out[len - i - 1] = in->bytes[i];
+  }
+  *out_len = len;
+}
+
+int ec_scalar_from_bytes(const EC_GROUP *group, EC_SCALAR *out,
+                         const uint8_t *in, size_t len) {
+  if (len != BN_num_bytes(&group->order)) {
+    OPENSSL_PUT_ERROR(EC, EC_R_INVALID_SCALAR);
+    return 0;
+  }
+
+  OPENSSL_memset(out, 0, sizeof(EC_SCALAR));
+
+  for (size_t i = 0; i < len; i++) {
+    out->bytes[i] = in[len - i - 1];
+  }
+
+  if (!bn_less_than_words(out->words, group->order.d, group->order.width)) {
+    OPENSSL_PUT_ERROR(EC, EC_R_INVALID_SCALAR);
+    return 0;
+  }
+
+  return 1;
+}
+
+void ec_scalar_reduce(const EC_GROUP *group, EC_SCALAR *out,
+                      const BN_ULONG *words, size_t num) {
+  // Convert "from" Montgomery form so the value is reduced modulo the order.
+  bn_from_montgomery_small(out->words, group->order.width, words, num,
+                           group->order_mont);
+  // Convert "to" Montgomery form to remove the R^-1 factor added.
+  ec_scalar_to_montgomery(group, out, out);
+}
+
 void ec_scalar_add(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a,
                    const EC_SCALAR *b) {
   const BIGNUM *order = &group->order;
@@ -59,6 +98,26 @@
   OPENSSL_cleanse(tmp, sizeof(tmp));
 }
 
+void ec_scalar_sub(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a,
+                   const EC_SCALAR *b) {
+  const BIGNUM *order = &group->order;
+  BN_ULONG tmp[EC_MAX_WORDS];
+  bn_mod_sub_words(r->words, a->words, b->words, order->d, tmp, order->width);
+  OPENSSL_cleanse(tmp, sizeof(tmp));
+}
+
+void ec_scalar_neg(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a) {
+  EC_SCALAR zero;
+  OPENSSL_memset(&zero, 0, sizeof(EC_SCALAR));
+  ec_scalar_sub(group, r, &zero, a);
+}
+
+void ec_scalar_select(const EC_GROUP *group, EC_SCALAR *out, BN_ULONG mask,
+                      const EC_SCALAR *a, const EC_SCALAR *b) {
+  const BIGNUM *order = &group->order;
+  bn_select_words(out->words, mask, a->words, b->words, order->width);
+}
+
 void ec_scalar_to_montgomery(const EC_GROUP *group, EC_SCALAR *r,
                              const EC_SCALAR *a) {
   const BIGNUM *order = &group->order;
@@ -68,7 +127,8 @@
 void ec_scalar_from_montgomery(const EC_GROUP *group, EC_SCALAR *r,
                                const EC_SCALAR *a) {
   const BIGNUM *order = &group->order;
-  bn_from_montgomery_small(r->words, a->words, order->width, group->order_mont);
+  bn_from_montgomery_small(r->words, order->width, a->words, order->width,
+                           group->order_mont);
 }
 
 void ec_scalar_mul_montgomery(const EC_GROUP *group, EC_SCALAR *r,
@@ -78,19 +138,38 @@
                               group->order_mont);
 }
 
-void ec_simple_scalar_inv_montgomery(const EC_GROUP *group, EC_SCALAR *r,
-                                     const EC_SCALAR *a) {
+void ec_simple_scalar_inv0_montgomery(const EC_GROUP *group, EC_SCALAR *r,
+                                      const EC_SCALAR *a) {
   const BIGNUM *order = &group->order;
-  bn_mod_inverse_prime_mont_small(r->words, a->words, order->width,
-                                  group->order_mont);
+  bn_mod_inverse0_prime_mont_small(r->words, a->words, order->width,
+                                   group->order_mont);
 }
 
-void ec_scalar_inv_montgomery(const EC_GROUP *group, EC_SCALAR *r,
-                              const EC_SCALAR *a) {
-  group->meth->scalar_inv_montgomery(group, r, a);
+int ec_simple_scalar_to_montgomery_inv_vartime(const EC_GROUP *group,
+                                               EC_SCALAR *r,
+                                               const EC_SCALAR *a) {
+  if (ec_scalar_is_zero(group, a)) {
+    return 0;
+  }
+
+  // This implementation (in fact) runs in constant time,
+  // even though for this interface it is not mandatory.
+
+  // r = a^-1 in the Montgomery domain. This is
+  // |ec_scalar_to_montgomery| followed by |ec_scalar_inv0_montgomery|, but
+  // |ec_scalar_inv0_montgomery| followed by |ec_scalar_from_montgomery| is
+  // equivalent and slightly more efficient.
+  ec_scalar_inv0_montgomery(group, r, a);
+  ec_scalar_from_montgomery(group, r, r);
+  return 1;
 }
 
-int ec_scalar_inv_montgomery_vartime(const EC_GROUP *group, EC_SCALAR *r,
-                                     const EC_SCALAR *a) {
-  return group->meth->scalar_inv_montgomery_vartime(group, r, a);
+void ec_scalar_inv0_montgomery(const EC_GROUP *group, EC_SCALAR *r,
+                               const EC_SCALAR *a) {
+  group->meth->scalar_inv0_montgomery(group, r, a);
+}
+
+int ec_scalar_to_montgomery_inv_vartime(const EC_GROUP *group, EC_SCALAR *r,
+                                        const EC_SCALAR *a) {
+  return group->meth->scalar_to_montgomery_inv_vartime(group, r, a);
 }
diff --git a/src/crypto/fipsmodule/ec/simple.c b/src/crypto/fipsmodule/ec/simple.c
index c418c4e..b6d9312 100644
--- a/src/crypto/fipsmodule/ec/simple.c
+++ b/src/crypto/fipsmodule/ec/simple.c
@@ -101,22 +101,13 @@
 int ec_GFp_simple_group_set_curve(EC_GROUP *group, const BIGNUM *p,
                                   const BIGNUM *a, const BIGNUM *b,
                                   BN_CTX *ctx) {
-  int ret = 0;
-  BN_CTX *new_ctx = NULL;
-
   // p must be a prime > 3
   if (BN_num_bits(p) <= 2 || !BN_is_odd(p)) {
     OPENSSL_PUT_ERROR(EC, EC_R_INVALID_FIELD);
     return 0;
   }
 
-  if (ctx == NULL) {
-    ctx = new_ctx = BN_CTX_new();
-    if (ctx == NULL) {
-      return 0;
-    }
-  }
-
+  int ret = 0;
   BN_CTX_start(ctx);
   BIGNUM *tmp = BN_CTX_get(ctx);
   if (tmp == NULL) {
@@ -131,33 +122,23 @@
   // Store the field in minimal form, so it can be used with |BN_ULONG| arrays.
   bn_set_minimal_width(&group->field);
 
-  // group->a
-  if (!BN_nnmod(tmp, a, &group->field, ctx) ||
-      !ec_bignum_to_felem(group, &group->a, tmp)) {
+  if (!ec_bignum_to_felem(group, &group->a, a) ||
+      !ec_bignum_to_felem(group, &group->b, b) ||
+      !ec_bignum_to_felem(group, &group->one, BN_value_one())) {
     goto err;
   }
 
   // group->a_is_minus3
-  if (!BN_add_word(tmp, 3)) {
+  if (!BN_copy(tmp, a) ||
+      !BN_add_word(tmp, 3)) {
     goto err;
   }
   group->a_is_minus3 = (0 == BN_cmp(tmp, &group->field));
 
-  // group->b
-  if (!BN_nnmod(tmp, b, &group->field, ctx) ||
-      !ec_bignum_to_felem(group, &group->b, tmp)) {
-    goto err;
-  }
-
-  if (!ec_bignum_to_felem(group, &group->one, BN_value_one())) {
-    goto err;
-  }
-
   ret = 1;
 
 err:
   BN_CTX_end(ctx);
-  BN_CTX_free(new_ctx);
   return ret;
 }
 
@@ -190,24 +171,6 @@
   ec_GFp_simple_point_init(point);
 }
 
-int ec_GFp_simple_point_set_affine_coordinates(const EC_GROUP *group,
-                                               EC_RAW_POINT *point,
-                                               const BIGNUM *x,
-                                               const BIGNUM *y) {
-  if (x == NULL || y == NULL) {
-    OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);
-    return 0;
-  }
-
-  if (!ec_bignum_to_felem(group, &point->X, x) ||
-      !ec_bignum_to_felem(group, &point->Y, y)) {
-    return 0;
-  }
-  OPENSSL_memcpy(&point->Z, &group->one, sizeof(EC_FELEM));
-
-  return 1;
-}
-
 void ec_GFp_simple_invert(const EC_GROUP *group, EC_RAW_POINT *point) {
   ec_felem_neg(group, &point->Y, &point->Y);
 }
@@ -219,10 +182,6 @@
 
 int ec_GFp_simple_is_on_curve(const EC_GROUP *group,
                               const EC_RAW_POINT *point) {
-  if (ec_GFp_simple_is_at_infinity(group, point)) {
-    return 1;
-  }
-
   // We have a curve defined by a Weierstrass equation
   //      y^2 = x^3 + a*x + b.
   // The point to consider is given in Jacobian projective coordinates
@@ -231,6 +190,9 @@
   // into
   //      Y^2 = X^3 + a*X*Z^4 + b*Z^6.
   // To test this, we add up the right-hand side in 'rh'.
+  //
+  // This function may be used when double-checking the secret result of a point
+  // multiplication, so we proceed in constant-time.
 
   void (*const felem_mul)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a,
                           const EC_FELEM *b) = group->meth->felem_mul;
@@ -242,128 +204,114 @@
   felem_sqr(group, &rh, &point->X);
 
   EC_FELEM tmp, Z4, Z6;
-  if (!ec_felem_equal(group, &point->Z, &group->one)) {
-    felem_sqr(group, &tmp, &point->Z);
-    felem_sqr(group, &Z4, &tmp);
-    felem_mul(group, &Z6, &Z4, &tmp);
+  felem_sqr(group, &tmp, &point->Z);
+  felem_sqr(group, &Z4, &tmp);
+  felem_mul(group, &Z6, &Z4, &tmp);
 
-    // rh := (rh + a*Z^4)*X
-    if (group->a_is_minus3) {
-      ec_felem_add(group, &tmp, &Z4, &Z4);
-      ec_felem_add(group, &tmp, &tmp, &Z4);
-      ec_felem_sub(group, &rh, &rh, &tmp);
-      felem_mul(group, &rh, &rh, &point->X);
-    } else {
-      felem_mul(group, &tmp, &Z4, &group->a);
-      ec_felem_add(group, &rh, &rh, &tmp);
-      felem_mul(group, &rh, &rh, &point->X);
-    }
-
-    // rh := rh + b*Z^6
-    felem_mul(group, &tmp, &group->b, &Z6);
-    ec_felem_add(group, &rh, &rh, &tmp);
+  // rh := rh + a*Z^4
+  if (group->a_is_minus3) {
+    ec_felem_add(group, &tmp, &Z4, &Z4);
+    ec_felem_add(group, &tmp, &tmp, &Z4);
+    ec_felem_sub(group, &rh, &rh, &tmp);
   } else {
-    // rh := (rh + a)*X
-    ec_felem_add(group, &rh, &rh, &group->a);
-    felem_mul(group, &rh, &rh, &point->X);
-    // rh := rh + b
-    ec_felem_add(group, &rh, &rh, &group->b);
+    felem_mul(group, &tmp, &Z4, &group->a);
+    ec_felem_add(group, &rh, &rh, &tmp);
   }
 
+  // rh := (rh + a*Z^4)*X
+  felem_mul(group, &rh, &rh, &point->X);
+
+  // rh := rh + b*Z^6
+  felem_mul(group, &tmp, &group->b, &Z6);
+  ec_felem_add(group, &rh, &rh, &tmp);
+
   // 'lh' := Y^2
   felem_sqr(group, &tmp, &point->Y);
-  return ec_felem_equal(group, &tmp, &rh);
+
+  ec_felem_sub(group, &tmp, &tmp, &rh);
+  BN_ULONG not_equal = ec_felem_non_zero_mask(group, &tmp);
+
+  // If Z = 0, the point is infinity, which is always on the curve.
+  BN_ULONG not_infinity = ec_felem_non_zero_mask(group, &point->Z);
+
+  return 1 & ~(not_infinity & not_equal);
 }
 
-int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_RAW_POINT *a,
-                      const EC_RAW_POINT *b) {
-  // Note this function returns zero if |a| and |b| are equal and 1 if they are
-  // not equal.
-  if (ec_GFp_simple_is_at_infinity(group, a)) {
-    return ec_GFp_simple_is_at_infinity(group, b) ? 0 : 1;
-  }
+int ec_GFp_simple_points_equal(const EC_GROUP *group, const EC_RAW_POINT *a,
+                               const EC_RAW_POINT *b) {
+  // This function is implemented in constant-time for two reasons. First,
+  // although EC points are usually public, their Jacobian Z coordinates may be
+  // secret, or at least are not obviously public. Second, more complex
+  // protocols will sometimes manipulate secret points.
+  //
+  // This does mean that we pay a 6M+2S Jacobian comparison when comparing two
+  // publicly affine points costs no field operations at all. If needed, we can
+  // restore this optimization by keeping better track of affine vs. Jacobian
+  // forms. See https://crbug.com/boringssl/326.
 
-  if (ec_GFp_simple_is_at_infinity(group, b)) {
-    return 1;
-  }
-
-  int a_Z_is_one = ec_felem_equal(group, &a->Z, &group->one);
-  int b_Z_is_one = ec_felem_equal(group, &b->Z, &group->one);
-
-  if (a_Z_is_one && b_Z_is_one) {
-    return !ec_felem_equal(group, &a->X, &b->X) ||
-           !ec_felem_equal(group, &a->Y, &b->Y);
-  }
+  // If neither |a| or |b| is infinity, we have to decide whether
+  //     (X_a/Z_a^2, Y_a/Z_a^3) = (X_b/Z_b^2, Y_b/Z_b^3),
+  // or equivalently, whether
+  //     (X_a*Z_b^2, Y_a*Z_b^3) = (X_b*Z_a^2, Y_b*Z_a^3).
 
   void (*const felem_mul)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a,
                           const EC_FELEM *b) = group->meth->felem_mul;
   void (*const felem_sqr)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a) =
       group->meth->felem_sqr;
 
-  // We have to decide whether
-  //     (X_a/Z_a^2, Y_a/Z_a^3) = (X_b/Z_b^2, Y_b/Z_b^3),
-  // or equivalently, whether
-  //     (X_a*Z_b^2, Y_a*Z_b^3) = (X_b*Z_a^2, Y_b*Z_a^3).
-
   EC_FELEM tmp1, tmp2, Za23, Zb23;
-  const EC_FELEM *tmp1_, *tmp2_;
-  if (!b_Z_is_one) {
-    felem_sqr(group, &Zb23, &b->Z);
-    felem_mul(group, &tmp1, &a->X, &Zb23);
-    tmp1_ = &tmp1;
-  } else {
-    tmp1_ = &a->X;
-  }
-  if (!a_Z_is_one) {
-    felem_sqr(group, &Za23, &a->Z);
-    felem_mul(group, &tmp2, &b->X, &Za23);
-    tmp2_ = &tmp2;
-  } else {
-    tmp2_ = &b->X;
-  }
+  felem_sqr(group, &Zb23, &b->Z);         // Zb23 = Z_b^2
+  felem_mul(group, &tmp1, &a->X, &Zb23);  // tmp1 = X_a * Z_b^2
+  felem_sqr(group, &Za23, &a->Z);         // Za23 = Z_a^2
+  felem_mul(group, &tmp2, &b->X, &Za23);  // tmp2 = X_b * Z_a^2
+  ec_felem_sub(group, &tmp1, &tmp1, &tmp2);
+  const BN_ULONG x_not_equal = ec_felem_non_zero_mask(group, &tmp1);
 
-  // Compare  X_a*Z_b^2  with  X_b*Z_a^2.
-  if (!ec_felem_equal(group, tmp1_, tmp2_)) {
-    return 1;  // The points differ.
-  }
+  felem_mul(group, &Zb23, &Zb23, &b->Z);  // Zb23 = Z_b^3
+  felem_mul(group, &tmp1, &a->Y, &Zb23);  // tmp1 = Y_a * Z_b^3
+  felem_mul(group, &Za23, &Za23, &a->Z);  // Za23 = Z_a^3
+  felem_mul(group, &tmp2, &b->Y, &Za23);  // tmp2 = Y_b * Z_a^3
+  ec_felem_sub(group, &tmp1, &tmp1, &tmp2);
+  const BN_ULONG y_not_equal = ec_felem_non_zero_mask(group, &tmp1);
+  const BN_ULONG x_and_y_equal = ~(x_not_equal | y_not_equal);
 
-  if (!b_Z_is_one) {
-    felem_mul(group, &Zb23, &Zb23, &b->Z);
-    felem_mul(group, &tmp1, &a->Y, &Zb23);
-    // tmp1_ = &tmp1
-  } else {
-    tmp1_ = &a->Y;
-  }
-  if (!a_Z_is_one) {
-    felem_mul(group, &Za23, &Za23, &a->Z);
-    felem_mul(group, &tmp2, &b->Y, &Za23);
-    // tmp2_ = &tmp2
-  } else {
-    tmp2_ = &b->Y;
-  }
+  const BN_ULONG a_not_infinity = ec_felem_non_zero_mask(group, &a->Z);
+  const BN_ULONG b_not_infinity = ec_felem_non_zero_mask(group, &b->Z);
+  const BN_ULONG a_and_b_infinity = ~(a_not_infinity | b_not_infinity);
 
-  // Compare  Y_a*Z_b^3  with  Y_b*Z_a^3.
-  if (!ec_felem_equal(group, tmp1_, tmp2_)) {
-    return 1;  // The points differ.
-  }
-
-  // The points are equal.
-  return 0;
+  const BN_ULONG equal =
+      a_and_b_infinity | (a_not_infinity & b_not_infinity & x_and_y_equal);
+  return equal & 1;
 }
 
-int ec_GFp_simple_mont_inv_mod_ord_vartime(const EC_GROUP *group,
-                                           EC_SCALAR *out,
-                                           const EC_SCALAR *in) {
-  // This implementation (in fact) runs in constant time,
-  // even though for this interface it is not mandatory.
+int ec_affine_jacobian_equal(const EC_GROUP *group, const EC_AFFINE *a,
+                             const EC_RAW_POINT *b) {
+  // If |b| is not infinity, we have to decide whether
+  //     (X_a, Y_a) = (X_b/Z_b^2, Y_b/Z_b^3),
+  // or equivalently, whether
+  //     (X_a*Z_b^2, Y_a*Z_b^3) = (X_b, Y_b).
 
-  // out = in^-1 in the Montgomery domain. This is
-  // |ec_scalar_to_montgomery| followed by |ec_scalar_inv_montgomery|, but
-  // |ec_scalar_inv_montgomery| followed by |ec_scalar_from_montgomery| is
-  // equivalent and slightly more efficient.
-  ec_scalar_inv_montgomery(group, out, in);
-  ec_scalar_from_montgomery(group, out, out);
-  return 1;
+  void (*const felem_mul)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a,
+                          const EC_FELEM *b) = group->meth->felem_mul;
+  void (*const felem_sqr)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a) =
+      group->meth->felem_sqr;
+
+  EC_FELEM tmp, Zb2;
+  felem_sqr(group, &Zb2, &b->Z);        // Zb2 = Z_b^2
+  felem_mul(group, &tmp, &a->X, &Zb2);  // tmp = X_a * Z_b^2
+  ec_felem_sub(group, &tmp, &tmp, &b->X);
+  const BN_ULONG x_not_equal = ec_felem_non_zero_mask(group, &tmp);
+
+  felem_mul(group, &tmp, &a->Y, &Zb2);  // tmp = Y_a * Z_b^2
+  felem_mul(group, &tmp, &tmp, &b->Z);  // tmp = Y_a * Z_b^3
+  ec_felem_sub(group, &tmp, &tmp, &b->Y);
+  const BN_ULONG y_not_equal = ec_felem_non_zero_mask(group, &tmp);
+  const BN_ULONG x_and_y_equal = ~(x_not_equal | y_not_equal);
+
+  const BN_ULONG b_not_infinity = ec_felem_non_zero_mask(group, &b->Z);
+
+  const BN_ULONG equal = b_not_infinity & x_and_y_equal;
+  return equal & 1;
 }
 
 int ec_GFp_simple_cmp_x_coordinate(const EC_GROUP *group, const EC_RAW_POINT *p,
@@ -378,3 +326,32 @@
   return ec_get_x_coordinate_as_scalar(group, &x, p) &&
          ec_scalar_equal_vartime(group, &x, r);
 }
+
+void ec_GFp_simple_felem_to_bytes(const EC_GROUP *group, uint8_t *out,
+                                  size_t *out_len, const EC_FELEM *in) {
+  size_t len = BN_num_bytes(&group->field);
+  for (size_t i = 0; i < len; i++) {
+    out[i] = in->bytes[len - 1 - i];
+  }
+  *out_len = len;
+}
+
+int ec_GFp_simple_felem_from_bytes(const EC_GROUP *group, EC_FELEM *out,
+                                   const uint8_t *in, size_t len) {
+  if (len != BN_num_bytes(&group->field)) {
+    OPENSSL_PUT_ERROR(EC, EC_R_DECODE_ERROR);
+    return 0;
+  }
+
+  OPENSSL_memset(out, 0, sizeof(EC_FELEM));
+  for (size_t i = 0; i < len; i++) {
+    out->bytes[i] = in[len - 1 - i];
+  }
+
+  if (!bn_less_than_words(out->words, group->field.d, group->field.width)) {
+    OPENSSL_PUT_ERROR(EC, EC_R_DECODE_ERROR);
+    return 0;
+  }
+
+  return 1;
+}
diff --git a/src/crypto/fipsmodule/ec/simple_mul.c b/src/crypto/fipsmodule/ec/simple_mul.c
index 4ed6c48..0e6384e 100644
--- a/src/crypto/fipsmodule/ec/simple_mul.c
+++ b/src/crypto/fipsmodule/ec/simple_mul.c
@@ -60,9 +60,7 @@
       OPENSSL_memset(&tmp, 0, sizeof(EC_RAW_POINT));
       for (size_t j = 0; j < OPENSSL_ARRAY_SIZE(precomp); j++) {
         BN_ULONG mask = constant_time_eq_w(j, window);
-        ec_felem_select(group, &tmp.X, mask, &precomp[j].X, &tmp.X);
-        ec_felem_select(group, &tmp.Y, mask, &precomp[j].Y, &tmp.Y);
-        ec_felem_select(group, &tmp.Z, mask, &precomp[j].Z, &tmp.Z);
+        ec_point_select(group, &tmp, mask, &precomp[j], &tmp);
       }
 
       if (r_is_at_infinity) {
@@ -82,3 +80,191 @@
                           const EC_SCALAR *scalar) {
   ec_GFp_mont_mul(group, r, &group->generator->raw, scalar);
 }
+
+static void ec_GFp_mont_batch_precomp(const EC_GROUP *group, EC_RAW_POINT *out,
+                                      size_t num, const EC_RAW_POINT *p) {
+  assert(num > 1);
+  ec_GFp_simple_point_set_to_infinity(group, &out[0]);
+  ec_GFp_simple_point_copy(&out[1], p);
+  for (size_t j = 2; j < num; j++) {
+    if (j & 1) {
+      ec_GFp_mont_add(group, &out[j], &out[1], &out[j - 1]);
+    } else {
+      ec_GFp_mont_dbl(group, &out[j], &out[j / 2]);
+    }
+  }
+}
+
+static void ec_GFp_mont_batch_get_window(const EC_GROUP *group,
+                                         EC_RAW_POINT *out,
+                                         const EC_RAW_POINT precomp[17],
+                                         const EC_SCALAR *scalar, unsigned i) {
+  const size_t width = group->order.width;
+  uint8_t window = bn_is_bit_set_words(scalar->words, width, i + 4) << 5;
+  window |= bn_is_bit_set_words(scalar->words, width, i + 3) << 4;
+  window |= bn_is_bit_set_words(scalar->words, width, i + 2) << 3;
+  window |= bn_is_bit_set_words(scalar->words, width, i + 1) << 2;
+  window |= bn_is_bit_set_words(scalar->words, width, i) << 1;
+  if (i > 0) {
+    window |= bn_is_bit_set_words(scalar->words, width, i - 1);
+  }
+  crypto_word_t sign, digit;
+  ec_GFp_nistp_recode_scalar_bits(&sign, &digit, window);
+
+  // Select the entry in constant-time.
+  OPENSSL_memset(out, 0, sizeof(EC_RAW_POINT));
+  for (size_t j = 0; j < 17; j++) {
+    BN_ULONG mask = constant_time_eq_w(j, digit);
+    ec_point_select(group, out, mask, &precomp[j], out);
+  }
+
+  // Negate if necessary.
+  EC_FELEM neg_Y;
+  ec_felem_neg(group, &neg_Y, &out->Y);
+  crypto_word_t sign_mask = sign;
+  sign_mask = 0u - sign_mask;
+  ec_felem_select(group, &out->Y, sign_mask, &neg_Y, &out->Y);
+}
+
+void ec_GFp_mont_mul_batch(const EC_GROUP *group, EC_RAW_POINT *r,
+                           const EC_RAW_POINT *p0, const EC_SCALAR *scalar0,
+                           const EC_RAW_POINT *p1, const EC_SCALAR *scalar1,
+                           const EC_RAW_POINT *p2, const EC_SCALAR *scalar2) {
+  EC_RAW_POINT precomp[3][17];
+  ec_GFp_mont_batch_precomp(group, precomp[0], 17, p0);
+  ec_GFp_mont_batch_precomp(group, precomp[1], 17, p1);
+  if (p2 != NULL) {
+    ec_GFp_mont_batch_precomp(group, precomp[2], 17, p2);
+  }
+
+  // Divide bits in |scalar| into windows.
+  unsigned bits = BN_num_bits(&group->order);
+  int r_is_at_infinity = 1;
+  for (unsigned i = bits; i <= bits; i--) {
+    if (!r_is_at_infinity) {
+      ec_GFp_mont_dbl(group, r, r);
+    }
+    if (i % 5 == 0) {
+      EC_RAW_POINT tmp;
+      ec_GFp_mont_batch_get_window(group, &tmp, precomp[0], scalar0, i);
+      if (r_is_at_infinity) {
+        ec_GFp_simple_point_copy(r, &tmp);
+        r_is_at_infinity = 0;
+      } else {
+        ec_GFp_mont_add(group, r, r, &tmp);
+      }
+
+      ec_GFp_mont_batch_get_window(group, &tmp, precomp[1], scalar1, i);
+      ec_GFp_mont_add(group, r, r, &tmp);
+
+      if (p2 != NULL) {
+        ec_GFp_mont_batch_get_window(group, &tmp, precomp[2], scalar2, i);
+        ec_GFp_mont_add(group, r, r, &tmp);
+      }
+    }
+  }
+  if (r_is_at_infinity) {
+    ec_GFp_simple_point_set_to_infinity(group, r);
+  }
+}
+
+static unsigned ec_GFp_mont_comb_stride(const EC_GROUP *group) {
+  return (BN_num_bits(&group->field) + EC_MONT_PRECOMP_COMB_SIZE - 1) /
+         EC_MONT_PRECOMP_COMB_SIZE;
+}
+
+int ec_GFp_mont_init_precomp(const EC_GROUP *group, EC_PRECOMP *out,
+                             const EC_RAW_POINT *p) {
+  // comb[i - 1] stores the ith element of the comb. That is, if i is
+  // b4 * 2^4 + b3 * 2^3 + ... + b0 * 2^0, it stores k * |p|, where k is
+  // b4 * 2^(4*stride) + b3 * 2^(3*stride) + ... + b0 * 2^(0*stride). stride
+  // here is |ec_GFp_mont_comb_stride|. We store at index i - 1 because the 0th
+  // comb entry is always infinity.
+  EC_RAW_POINT comb[(1 << EC_MONT_PRECOMP_COMB_SIZE) - 1];
+  unsigned stride = ec_GFp_mont_comb_stride(group);
+
+  // We compute the comb sequentially by the highest set bit. Initially, all
+  // entries up to 2^0 are filled.
+  comb[(1 << 0) - 1] = *p;
+  for (unsigned i = 1; i < EC_MONT_PRECOMP_COMB_SIZE; i++) {
+    // Compute entry 2^i by doubling the entry for 2^(i-1) |stride| times.
+    unsigned bit = 1 << i;
+    ec_GFp_mont_dbl(group, &comb[bit - 1], &comb[bit / 2 - 1]);
+    for (unsigned j = 1; j < stride; j++) {
+      ec_GFp_mont_dbl(group, &comb[bit - 1], &comb[bit - 1]);
+    }
+    // Compute entries from 2^i + 1 to 2^i + (2^i - 1) by adding entry 2^i to
+    // a previous entry.
+    for (unsigned j = 1; j < bit; j++) {
+      ec_GFp_mont_add(group, &comb[bit + j - 1], &comb[bit - 1], &comb[j - 1]);
+    }
+  }
+
+  // Store the comb in affine coordinates to shrink the table. (This reduces
+  // cache pressure and makes the constant-time selects faster.)
+  OPENSSL_STATIC_ASSERT(
+      OPENSSL_ARRAY_SIZE(comb) == OPENSSL_ARRAY_SIZE(out->comb),
+      "comb sizes did not match");
+  return ec_jacobian_to_affine_batch(group, out->comb, comb,
+                                     OPENSSL_ARRAY_SIZE(comb));
+}
+
+static void ec_GFp_mont_get_comb_window(const EC_GROUP *group,
+                                        EC_RAW_POINT *out,
+                                        const EC_PRECOMP *precomp,
+                                        const EC_SCALAR *scalar, unsigned i) {
+  const size_t width = group->order.width;
+  unsigned stride = ec_GFp_mont_comb_stride(group);
+  // Select the bits corresponding to the comb shifted up by |i|.
+  unsigned window = 0;
+  for (unsigned j = 0; j < EC_MONT_PRECOMP_COMB_SIZE; j++) {
+    window |= bn_is_bit_set_words(scalar->words, width, j * stride + i)
+              << j;
+  }
+
+  // Select precomp->comb[window - 1]. If |window| is zero, |match| will always
+  // be zero, which will leave |out| at infinity.
+  OPENSSL_memset(out, 0, sizeof(EC_RAW_POINT));
+  for (unsigned j = 0; j < OPENSSL_ARRAY_SIZE(precomp->comb); j++) {
+    BN_ULONG match = constant_time_eq_w(window, j + 1);
+    ec_felem_select(group, &out->X, match, &precomp->comb[j].X, &out->X);
+    ec_felem_select(group, &out->Y, match, &precomp->comb[j].Y, &out->Y);
+  }
+  BN_ULONG is_infinity = constant_time_is_zero_w(window);
+  ec_felem_select(group, &out->Z, is_infinity, &out->Z, &group->one);
+}
+
+void ec_GFp_mont_mul_precomp(const EC_GROUP *group, EC_RAW_POINT *r,
+                             const EC_PRECOMP *p0, const EC_SCALAR *scalar0,
+                             const EC_PRECOMP *p1, const EC_SCALAR *scalar1,
+                             const EC_PRECOMP *p2, const EC_SCALAR *scalar2) {
+  unsigned stride = ec_GFp_mont_comb_stride(group);
+  int r_is_at_infinity = 1;
+  for (unsigned i = stride - 1; i < stride; i--) {
+    if (!r_is_at_infinity) {
+      ec_GFp_mont_dbl(group, r, r);
+    }
+
+    EC_RAW_POINT tmp;
+    ec_GFp_mont_get_comb_window(group, &tmp, p0, scalar0, i);
+    if (r_is_at_infinity) {
+      ec_GFp_simple_point_copy(r, &tmp);
+      r_is_at_infinity = 0;
+    } else {
+      ec_GFp_mont_add(group, r, r, &tmp);
+    }
+
+    if (p1 != NULL) {
+      ec_GFp_mont_get_comb_window(group, &tmp, p1, scalar1, i);
+      ec_GFp_mont_add(group, r, r, &tmp);
+    }
+
+    if (p2 != NULL) {
+      ec_GFp_mont_get_comb_window(group, &tmp, p2, scalar2, i);
+      ec_GFp_mont_add(group, r, r, &tmp);
+    }
+  }
+  if (r_is_at_infinity) {
+    ec_GFp_simple_point_set_to_infinity(group, r);
+  }
+}
diff --git a/src/crypto/fipsmodule/ec/util.c b/src/crypto/fipsmodule/ec/util.c
index 4f39f18..c4323f2 100644
--- a/src/crypto/fipsmodule/ec/util.c
+++ b/src/crypto/fipsmodule/ec/util.c
@@ -240,9 +240,9 @@
 //   P-384: ...01110011; w = 2, 5, 6, 7 are okay
 //   P-256: ...01010001; w = 5, 7 are okay
 //   P-224: ...00111101; w = 3, 4, 5, 6 are okay
-void ec_GFp_nistp_recode_scalar_bits(uint8_t *sign, uint8_t *digit,
-                                     uint8_t in) {
-  uint8_t s, d;
+void ec_GFp_nistp_recode_scalar_bits(crypto_word_t *sign, crypto_word_t *digit,
+                                     crypto_word_t in) {
+  crypto_word_t s, d;
 
   s = ~((in >> 5) - 1); /* sets all bits to MSB(in), 'in' seen as
                           * 6-bit value */
diff --git a/src/crypto/fipsmodule/ec/wnaf.c b/src/crypto/fipsmodule/ec/wnaf.c
index fd1b480..65cc894 100644
--- a/src/crypto/fipsmodule/ec/wnaf.c
+++ b/src/crypto/fipsmodule/ec/wnaf.c
@@ -72,6 +72,7 @@
 
 #include <openssl/bn.h>
 #include <openssl/err.h>
+#include <openssl/mem.h>
 #include <openssl/thread.h>
 
 #include "internal.h"
@@ -174,24 +175,57 @@
 // EC_WNAF_TABLE_SIZE is the table size to use for |ec_GFp_mont_mul_public|.
 #define EC_WNAF_TABLE_SIZE (1 << (EC_WNAF_WINDOW_BITS - 1))
 
-void ec_GFp_mont_mul_public(const EC_GROUP *group, EC_RAW_POINT *r,
-                            const EC_SCALAR *g_scalar, const EC_RAW_POINT *p,
-                            const EC_SCALAR *p_scalar) {
+// EC_WNAF_STACK is the number of points worth of data to stack-allocate and
+// avoid a malloc.
+#define EC_WNAF_STACK 3
+
+int ec_GFp_mont_mul_public_batch(const EC_GROUP *group, EC_RAW_POINT *r,
+                                 const EC_SCALAR *g_scalar,
+                                 const EC_RAW_POINT *points,
+                                 const EC_SCALAR *scalars, size_t num) {
   size_t bits = BN_num_bits(&group->order);
   size_t wNAF_len = bits + 1;
 
+  int ret = 0;
+  int8_t wNAF_stack[EC_WNAF_STACK][EC_MAX_BYTES * 8 + 1];
+  int8_t (*wNAF_alloc)[EC_MAX_BYTES * 8 + 1] = NULL;
+  int8_t (*wNAF)[EC_MAX_BYTES * 8 + 1];
+  EC_RAW_POINT precomp_stack[EC_WNAF_STACK][EC_WNAF_TABLE_SIZE];
+  EC_RAW_POINT (*precomp_alloc)[EC_WNAF_TABLE_SIZE] = NULL;
+  EC_RAW_POINT (*precomp)[EC_WNAF_TABLE_SIZE];
+  if (num <= EC_WNAF_STACK) {
+    wNAF = wNAF_stack;
+    precomp = precomp_stack;
+  } else {
+    if (num >= ((size_t)-1) / sizeof(wNAF_alloc[0]) ||
+        num >= ((size_t)-1) / sizeof(precomp_alloc[0])) {
+      OPENSSL_PUT_ERROR(EC, ERR_R_OVERFLOW);
+      goto err;
+    }
+    wNAF_alloc = OPENSSL_malloc(num * sizeof(wNAF_alloc[0]));
+    precomp_alloc = OPENSSL_malloc(num * sizeof(precomp_alloc[0]));
+    if (wNAF_alloc == NULL || precomp_alloc == NULL) {
+      OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE);
+      goto err;
+    }
+    wNAF = wNAF_alloc;
+    precomp = precomp_alloc;
+  }
+
   int8_t g_wNAF[EC_MAX_BYTES * 8 + 1];
   EC_RAW_POINT g_precomp[EC_WNAF_TABLE_SIZE];
   assert(wNAF_len <= OPENSSL_ARRAY_SIZE(g_wNAF));
   const EC_RAW_POINT *g = &group->generator->raw;
-  ec_compute_wNAF(group, g_wNAF, g_scalar, bits, EC_WNAF_WINDOW_BITS);
-  compute_precomp(group, g_precomp, g, EC_WNAF_TABLE_SIZE);
+  if (g_scalar != NULL) {
+    ec_compute_wNAF(group, g_wNAF, g_scalar, bits, EC_WNAF_WINDOW_BITS);
+    compute_precomp(group, g_precomp, g, EC_WNAF_TABLE_SIZE);
+  }
 
-  int8_t p_wNAF[EC_MAX_BYTES * 8 + 1];
-  EC_RAW_POINT p_precomp[EC_WNAF_TABLE_SIZE];
-  assert(wNAF_len <= OPENSSL_ARRAY_SIZE(p_wNAF));
-  ec_compute_wNAF(group, p_wNAF, p_scalar, bits, EC_WNAF_WINDOW_BITS);
-  compute_precomp(group, p_precomp, p, EC_WNAF_TABLE_SIZE);
+  for (size_t i = 0; i < num; i++) {
+    assert(wNAF_len <= OPENSSL_ARRAY_SIZE(wNAF[i]));
+    ec_compute_wNAF(group, wNAF[i], &scalars[i], bits, EC_WNAF_WINDOW_BITS);
+    compute_precomp(group, precomp[i], &points[i], EC_WNAF_TABLE_SIZE);
+  }
 
   EC_RAW_POINT tmp;
   int r_is_at_infinity = 1;
@@ -200,7 +234,7 @@
       ec_GFp_mont_dbl(group, r, r);
     }
 
-    if (g_wNAF[k] != 0) {
+    if (g_scalar != NULL && g_wNAF[k] != 0) {
       lookup_precomp(group, &tmp, g_precomp, g_wNAF[k]);
       if (r_is_at_infinity) {
         ec_GFp_simple_point_copy(r, &tmp);
@@ -210,13 +244,15 @@
       }
     }
 
-    if (p_wNAF[k] != 0) {
-      lookup_precomp(group, &tmp, p_precomp, p_wNAF[k]);
-      if (r_is_at_infinity) {
-        ec_GFp_simple_point_copy(r, &tmp);
-        r_is_at_infinity = 0;
-      } else {
-        ec_GFp_mont_add(group, r, r, &tmp);
+    for (size_t i = 0; i < num; i++) {
+      if (wNAF[i][k] != 0) {
+        lookup_precomp(group, &tmp, precomp[i], wNAF[i][k]);
+        if (r_is_at_infinity) {
+          ec_GFp_simple_point_copy(r, &tmp);
+          r_is_at_infinity = 0;
+        } else {
+          ec_GFp_mont_add(group, r, r, &tmp);
+        }
       }
     }
   }
@@ -224,4 +260,11 @@
   if (r_is_at_infinity) {
     ec_GFp_simple_point_set_to_infinity(group, r);
   }
+
+  ret = 1;
+
+err:
+  OPENSSL_free(wNAF_alloc);
+  OPENSSL_free(precomp_alloc);
+  return ret;
 }
diff --git a/src/crypto/fipsmodule/ecdh/ecdh.c b/src/crypto/fipsmodule/ecdh/ecdh.c
index a7b2f08..4e6d0bf 100644
--- a/src/crypto/fipsmodule/ecdh/ecdh.c
+++ b/src/crypto/fipsmodule/ecdh/ecdh.c
@@ -94,8 +94,8 @@
   uint8_t buf[EC_MAX_BYTES];
   size_t buflen;
   if (!ec_point_mul_scalar(group, &shared_point, &pub_key->raw, priv) ||
-      !ec_point_get_affine_coordinate_bytes(group, buf, NULL, &buflen,
-                                            sizeof(buf), &shared_point)) {
+      !ec_get_x_coordinate_as_bytes(group, buf, &buflen, sizeof(buf),
+                                    &shared_point)) {
     OPENSSL_PUT_ERROR(ECDH, ECDH_R_POINT_ARITHMETIC_FAILURE);
     return 0;
   }
diff --git a/src/crypto/fipsmodule/ecdsa/ecdsa.c b/src/crypto/fipsmodule/ecdsa/ecdsa.c
index 56d9f16..096b615 100644
--- a/src/crypto/fipsmodule/ecdsa/ecdsa.c
+++ b/src/crypto/fipsmodule/ecdsa/ecdsa.c
@@ -169,8 +169,11 @@
     return 0;
   }
 
-  // s_inv_mont = s^-1 in the Montgomery domain. This is
-  ec_scalar_inv_montgomery_vartime(group, &s_inv_mont, &s);
+  // s_inv_mont = s^-1 in the Montgomery domain.
+  if (!ec_scalar_to_montgomery_inv_vartime(group, &s_inv_mont, &s)) {
+    OPENSSL_PUT_ERROR(ECDSA, ERR_R_INTERNAL_ERROR);
+    return 0;
+  }
 
   // u1 = m * s^-1 mod order
   // u2 = r * s^-1 mod order
@@ -216,6 +219,10 @@
       if (!ec_bignum_to_scalar(group, &k, eckey->fixed_k)) {
         goto err;
       }
+      if (ec_scalar_is_zero(group, &k)) {
+        OPENSSL_PUT_ERROR(ECDSA, ERR_R_INTERNAL_ERROR);
+        goto err;
+      }
     } else {
       // Pass a SHA512 hash of the private key and digest as additional data
       // into the RBG. This is a hardening measure against entropy failure.
@@ -233,10 +240,10 @@
     }
 
     // Compute k^-1 in the Montgomery domain. This is |ec_scalar_to_montgomery|
-    // followed by |ec_scalar_inv_montgomery|, but |ec_scalar_inv_montgomery|
+    // followed by |ec_scalar_inv0_montgomery|, but |ec_scalar_inv0_montgomery|
     // followed by |ec_scalar_from_montgomery| is equivalent and slightly more
-    // efficient.
-    ec_scalar_inv_montgomery(group, out_kinv_mont, &k);
+    // efficient. Note k is non-zero, so the inverse must exist.
+    ec_scalar_inv0_montgomery(group, out_kinv_mont, &k);
     ec_scalar_from_montgomery(group, out_kinv_mont, out_kinv_mont);
 
     // Compute r, the x-coordinate of generator * k.
diff --git a/src/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl b/src/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl
index e72d0dc..94f95c2 100644
--- a/src/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl
+++ b/src/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl
@@ -157,12 +157,15 @@
 }
 
 $code .= <<___;
+#include <openssl/arm_arch.h>
+
 .text
 
 .global	gcm_init_neon
 .type	gcm_init_neon,%function
 .align	4
 gcm_init_neon:
+	AARCH64_VALID_CALL_TARGET
 	// This function is adapted from gcm_init_v8. xC2 is t3.
 	ld1	{$t1.2d}, [x1]			// load H
 	movi	$t3.16b, #0xe1
@@ -187,6 +190,7 @@
 .type	gcm_gmult_neon,%function
 .align	4
 gcm_gmult_neon:
+	AARCH64_VALID_CALL_TARGET
 	ld1	{$INlo.16b}, [$Xi]		// load Xi
 	ld1	{$Hlo.1d}, [$Htbl], #8		// load twisted H
 	ld1	{$Hhi.1d}, [$Htbl]
@@ -205,6 +209,7 @@
 .type	gcm_ghash_neon,%function
 .align	4
 gcm_ghash_neon:
+	AARCH64_VALID_CALL_TARGET
 	ld1	{$Xl.16b}, [$Xi]		// load Xi
 	ld1	{$Hlo.1d}, [$Htbl], #8		// load twisted H
 	ld1	{$Hhi.1d}, [$Htbl]
diff --git a/src/crypto/fipsmodule/modes/asm/ghash-x86_64.pl b/src/crypto/fipsmodule/modes/asm/ghash-x86_64.pl
index a1c9220..16f7f00 100644
--- a/src/crypto/fipsmodule/modes/asm/ghash-x86_64.pl
+++ b/src/crypto/fipsmodule/modes/asm/ghash-x86_64.pl
@@ -117,37 +117,11 @@
 
 $do4xaggr=1;
 
-# common register layout
-$nlo="%rax";
-$nhi="%rbx";
-$Zlo="%r8";
-$Zhi="%r9";
-$tmp="%r10";
-$rem_4bit = "%r11";
-
-$Xi="%rdi";
-$Htbl="%rsi";
-
-sub LB() { my $r=shift; $r =~ s/%[er]([a-d])x/%\1l/	or
-			$r =~ s/%[er]([sd]i)/%\1l/	or
-			$r =~ s/%[er](bp)/%\1l/		or
-			$r =~ s/%(r[0-9]+)[d]?/%\1b/;   $r; }
-
-sub AUTOLOAD()		# thunk [simplified] 32-bit style perlasm
-{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://;
-  my $arg = pop;
-    $arg = "\$$arg" if ($arg*1 eq $arg);
-    $code .= "\t$opcode\t".join(',',$arg,reverse @_)."\n";
-}
 
 $code=<<___;
 .text
 .extern	OPENSSL_ia32cap_P
 ___
-
-# per-function register layout
-$inp="%rdx";
-$len="%rcx";
 
 
 ######################################################################
@@ -1308,8 +1282,6 @@
 	.byte	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2
 .L7_mask:
 	.long	7,0,7,0
-.L7_mask_poly:
-	.long	7,0,`0xE1<<1`,0
 .align	64
 
 .asciz	"GHASH for x86_64, CRYPTOGAMS by <appro\@openssl.org>"
diff --git a/src/crypto/fipsmodule/modes/asm/ghashv8-armx.pl b/src/crypto/fipsmodule/modes/asm/ghashv8-armx.pl
index 99124a2..82f7637 100644
--- a/src/crypto/fipsmodule/modes/asm/ghashv8-armx.pl
+++ b/src/crypto/fipsmodule/modes/asm/ghashv8-armx.pl
@@ -86,6 +86,11 @@
 .type	gcm_init_v8,%function
 .align	4
 gcm_init_v8:
+___
+$code.=<<___	if ($flavour =~ /64/);
+	AARCH64_VALID_CALL_TARGET
+___
+$code.=<<___;
 	vld1.64		{$t1},[x1]		@ load input H
 	vmov.i8		$xC2,#0xe1
 	vshl.i64	$xC2,$xC2,#57		@ 0xc2.0
@@ -145,6 +150,11 @@
 .type	gcm_gmult_v8,%function
 .align	4
 gcm_gmult_v8:
+___
+$code.=<<___	if ($flavour =~ /64/);
+	AARCH64_VALID_CALL_TARGET
+___
+$code.=<<___;
 	vld1.64		{$t1},[$Xi]		@ load Xi
 	vmov.i8		$xC2,#0xe1
 	vld1.64		{$H-$Hhl},[$Htbl]	@ load twisted H, ...
@@ -198,6 +208,9 @@
 .align	4
 gcm_ghash_v8:
 ___
+$code.=<<___	if ($flavour =~ /64/);
+	AARCH64_VALID_CALL_TARGET
+___
 $code.=<<___		if ($flavour !~ /64/);
 	vstmdb		sp!,{d8-d15}		@ 32-bit ABI says so
 ___
diff --git a/src/crypto/fipsmodule/policydocs/BoringCrypto-Security-Policy-20190808.docx b/src/crypto/fipsmodule/policydocs/BoringCrypto-Security-Policy-20190808.docx
new file mode 100644
index 0000000..c4f6d8d
--- /dev/null
+++ b/src/crypto/fipsmodule/policydocs/BoringCrypto-Security-Policy-20190808.docx
Binary files differ
diff --git a/src/crypto/fipsmodule/rand/fork_detect.c b/src/crypto/fipsmodule/rand/fork_detect.c
new file mode 100644
index 0000000..eafe615
--- /dev/null
+++ b/src/crypto/fipsmodule/rand/fork_detect.c
@@ -0,0 +1,139 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#if !defined(_GNU_SOURCE)
+#define _GNU_SOURCE  // needed for madvise() and MAP_ANONYMOUS on Linux.
+#endif
+
+#include <openssl/base.h>
+
+#include "fork_detect.h"
+
+// Android-changed: Don't compile fork_detect() for Trusty.
+// TODO(prb): Remove when better fix lands upstream.
+#if defined(OPENSSL_LINUX) && !defined(OPENSSL_TRUSTY)
+#include <sys/mman.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include <openssl/type_check.h>
+
+#include "../delocate.h"
+#include "../../internal.h"
+
+
+#if defined(MADV_WIPEONFORK)
+OPENSSL_STATIC_ASSERT(MADV_WIPEONFORK == 18, "MADV_WIPEONFORK is not 18");
+#else
+#define MADV_WIPEONFORK 18
+#endif
+
+DEFINE_STATIC_ONCE(g_fork_detect_once);
+DEFINE_STATIC_MUTEX(g_fork_detect_lock);
+DEFINE_BSS_GET(volatile char *, g_fork_detect_addr);
+DEFINE_BSS_GET(uint64_t, g_fork_generation);
+DEFINE_BSS_GET(int, g_ignore_madv_wipeonfork);
+
+static void init_fork_detect(void) {
+  if (*g_ignore_madv_wipeonfork_bss_get()) {
+    return;
+  }
+
+  long page_size = sysconf(_SC_PAGESIZE);
+  if (page_size <= 0) {
+    return;
+  }
+
+  void *addr = mmap(NULL, (size_t)page_size, PROT_READ | PROT_WRITE,
+                    MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+  if (addr == MAP_FAILED) {
+    return;
+  }
+
+  // Some versions of qemu (up to at least 5.0.0-rc4, see linux-user/syscall.c)
+  // ignore |madvise| calls and just return zero (i.e. success). But we need to
+  // know whether MADV_WIPEONFORK actually took effect. Therefore try an invalid
+  // call to check that the implementation of |madvise| is actually rejecting
+  // unknown |advice| values.
+  if (madvise(addr, (size_t)page_size, -1) == 0 ||
+      madvise(addr, (size_t)page_size, MADV_WIPEONFORK) != 0) {
+    munmap(addr, (size_t)page_size);
+    return;
+  }
+
+  *((volatile char *) addr) = 1;
+  *g_fork_detect_addr_bss_get() = addr;
+  *g_fork_generation_bss_get() = 1;
+}
+
+uint64_t CRYPTO_get_fork_generation(void) {
+  // In a single-threaded process, there are obviously no races because there's
+  // only a single mutator in the address space.
+  //
+  // In a multi-threaded environment, |CRYPTO_once| ensures that the flag byte
+  // is initialised atomically, even if multiple threads enter this function
+  // concurrently.
+  //
+  // In the limit, the kernel may clear WIPEONFORK pages while a multi-threaded
+  // process is running. (For example, because a VM was cloned.) Therefore a
+  // lock is used below to synchronise the potentially multiple threads that may
+  // concurrently observe the cleared flag.
+
+  CRYPTO_once(g_fork_detect_once_bss_get(), init_fork_detect);
+  // This pointer is |volatile| because the value pointed to may be changed by
+  // external forces (i.e. the kernel wiping the page) thus the compiler must
+  // not assume that it has exclusive access to it.
+  volatile char *const flag_ptr = *g_fork_detect_addr_bss_get();
+  if (flag_ptr == NULL) {
+    // Our kernel is too old to support |MADV_WIPEONFORK|.
+    return 0;
+  }
+
+  struct CRYPTO_STATIC_MUTEX *const lock = g_fork_detect_lock_bss_get();
+  uint64_t *const generation_ptr = g_fork_generation_bss_get();
+
+  CRYPTO_STATIC_MUTEX_lock_read(lock);
+  uint64_t current_generation = *generation_ptr;
+  if (*flag_ptr) {
+    CRYPTO_STATIC_MUTEX_unlock_read(lock);
+    return current_generation;
+  }
+
+  CRYPTO_STATIC_MUTEX_unlock_read(lock);
+  CRYPTO_STATIC_MUTEX_lock_write(lock);
+  current_generation = *generation_ptr;
+  if (*flag_ptr == 0) {
+    // A fork has occurred.
+    *flag_ptr = 1;
+
+    current_generation++;
+    if (current_generation == 0) {
+      current_generation = 1;
+    }
+    *generation_ptr = current_generation;
+  }
+  CRYPTO_STATIC_MUTEX_unlock_write(lock);
+
+  return current_generation;
+}
+
+void CRYPTO_fork_detect_ignore_madv_wipeonfork_for_testing(void) {
+  *g_ignore_madv_wipeonfork_bss_get() = 1;
+}
+
+#else   // !OPENSSL_LINUX
+
+uint64_t CRYPTO_get_fork_generation(void) { return 0; }
+
+#endif  // OPENSSL_LINUX
diff --git a/src/crypto/fipsmodule/rand/fork_detect.h b/src/crypto/fipsmodule/rand/fork_detect.h
new file mode 100644
index 0000000..8518830
--- /dev/null
+++ b/src/crypto/fipsmodule/rand/fork_detect.h
@@ -0,0 +1,49 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#ifndef OPENSSL_HEADER_CRYPTO_FORK_DETECT_H
+#define OPENSSL_HEADER_CRYPTO_FORK_DETECT_H
+
+#include <openssl/base.h>
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+// crypto_get_fork_generation returns the fork generation number for the current
+// process, or zero if not supported on the platform. The fork generation number
+// is a non-zero, strictly-monotonic counter with the property that, if queried
+// in an address space and then again in a subsequently forked copy, the forked
+// address space will observe a greater value.
+//
+// This function may be used to clear cached values across a fork. When
+// initializing a cache, record the fork generation. Before using the cache,
+// check if the fork generation has changed. If so, drop the cache and update
+// the save fork generation. Note this logic transparently handles platforms
+// which always return zero.
+//
+// This is not reliably supported on all platforms which implement |fork|, so it
+// should only be used as a hardening measure.
+OPENSSL_EXPORT uint64_t CRYPTO_get_fork_generation(void);
+
+// CRYPTO_fork_detect_ignore_madv_wipeonfork_for_testing is an internal detail
+// used for testing purposes.
+OPENSSL_EXPORT void CRYPTO_fork_detect_ignore_madv_wipeonfork_for_testing(void);
+
+#if defined(__cplusplus)
+}  // extern C
+#endif
+
+#endif  // OPENSSL_HEADER_CRYPTO_FORK_DETECT_H
diff --git a/src/crypto/fipsmodule/rand/fork_detect_test.cc b/src/crypto/fipsmodule/rand/fork_detect_test.cc
new file mode 100644
index 0000000..ab48512
--- /dev/null
+++ b/src/crypto/fipsmodule/rand/fork_detect_test.cc
@@ -0,0 +1,160 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#include <openssl/base.h>
+
+// TSAN cannot cope with this test and complains that "starting new threads
+// after multi-threaded fork is not supported".
+#if defined(OPENSSL_LINUX) && !defined(OPENSSL_TSAN)
+#include <errno.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <functional>
+
+#if defined(OPENSSL_THREADS)
+#include <thread>
+#include <vector>
+#endif
+
+#include <gtest/gtest.h>
+
+#include "fork_detect.h"
+
+
+static pid_t WaitpidEINTR(pid_t pid, int *out_status, int options) {
+  pid_t ret;
+  do {
+    ret = waitpid(pid, out_status, options);
+  } while (ret < 0 && errno == EINTR);
+
+  return ret;
+}
+
+// The *InChild functions run inside a child process and must report errors via
+// |stderr| and |_exit| rather than GTest.
+
+static void CheckGenerationInChild(const char *name, uint64_t expected) {
+  uint64_t generation = CRYPTO_get_fork_generation();
+  if (generation != expected) {
+    fprintf(stderr, "%s generation (#1) was %" PRIu64 ", wanted %" PRIu64 ".\n",
+            name, generation, expected);
+    _exit(1);
+  }
+
+  // The generation should be stable.
+  generation = CRYPTO_get_fork_generation();
+  if (generation != expected) {
+    fprintf(stderr, "%s generation (#2) was %" PRIu64 ", wanted %" PRIu64 ".\n",
+            name, generation, expected);
+    _exit(1);
+  }
+}
+
+// ForkInChild forks a child which runs |f|. If the child exits unsuccessfully,
+// this function will also exit unsuccessfully.
+static void ForkInChild(std::function<void()> f) {
+  fflush(stderr);  // Avoid duplicating any buffered output.
+
+  const pid_t pid = fork();
+  if (pid < 0) {
+    perror("fork");
+    _exit(1);
+  } else if (pid == 0) {
+    f();
+    _exit(0);
+  }
+
+  // Wait for the child and pass its exit code up.
+  int status;
+  if (WaitpidEINTR(pid, &status, 0) < 0) {
+    perror("waitpid");
+    _exit(1);
+  }
+  if (!WIFEXITED(status)) {
+    fprintf(stderr, "Child did not exit cleanly.\n");
+    _exit(1);
+  }
+  if (WEXITSTATUS(status) != 0) {
+    // Pass the failure up.
+    _exit(WEXITSTATUS(status));
+  }
+}
+
+TEST(ForkDetect, Test) {
+  const uint64_t start = CRYPTO_get_fork_generation();
+  if (start == 0) {
+    fprintf(stderr, "Fork detection not supported. Skipping test.\n");
+    return;
+  }
+
+  // The fork generation should be stable.
+  EXPECT_EQ(start, CRYPTO_get_fork_generation());
+
+  fflush(stderr);
+  const pid_t child = fork();
+
+  if (child == 0) {
+    // Fork grandchildren before observing the fork generation. The
+    // grandchildren will observe |start| + 1.
+    for (int i = 0; i < 2; i++) {
+      ForkInChild([&] { CheckGenerationInChild("Grandchild", start + 1); });
+    }
+
+    // Now the child also observes |start| + 1. This is fine because it has
+    // already diverged from the grandchild at this point.
+    CheckGenerationInChild("Child", start + 1);
+
+    // Forked grandchildren will now observe |start| + 2.
+    for (int i = 0; i < 2; i++) {
+      ForkInChild([&] { CheckGenerationInChild("Grandchild", start + 2); });
+    }
+
+#if defined(OPENSSL_THREADS)
+    // The fork generation logic itself must be thread-safe. We test this in a
+    // child process to capture the actual fork detection. This segment is meant
+    // to be tested in TSan.
+    ForkInChild([&] {
+      std::vector<std::thread> threads(4);
+      for (int i = 0; i < 2; i++) {
+        for (auto &t : threads) {
+          t = std::thread(
+              [&] { CheckGenerationInChild("Grandchild thread", start + 2); });
+        }
+        for (auto &t : threads) {
+          t.join();
+        }
+      }
+    });
+#endif  // OPENSSL_THREADS
+
+    // The child still observes |start| + 1.
+    CheckGenerationInChild("Child", start + 1);
+    _exit(0);
+  }
+
+  ASSERT_GT(child, 0) << "Error in fork: " << strerror(errno);
+  int status;
+  ASSERT_EQ(child, WaitpidEINTR(child, &status, 0))
+      << "Error in waitpid: " << strerror(errno);
+  ASSERT_TRUE(WIFEXITED(status));
+  EXPECT_EQ(0, WEXITSTATUS(status)) << "Error in child process";
+
+  // We still observe |start|.
+  EXPECT_EQ(start, CRYPTO_get_fork_generation());
+}
+
+#endif  // OPENSSL_LINUX && !OPENSSL_TSAN
diff --git a/src/crypto/fipsmodule/rand/internal.h b/src/crypto/fipsmodule/rand/internal.h
index 280aae4..db81c33 100644
--- a/src/crypto/fipsmodule/rand/internal.h
+++ b/src/crypto/fipsmodule/rand/internal.h
@@ -40,17 +40,33 @@
 // system.
 void CRYPTO_sysrand(uint8_t *buf, size_t len);
 
-#if defined(OPENSSL_URANDOM) || defined(BORINGSSL_UNSAFE_DETERMINISTIC_MODE)
+#if defined(OPENSSL_URANDOM)
+// CRYPTO_init_sysrand initializes long-lived resources needed to draw entropy
+// from the operating system.
+void CRYPTO_init_sysrand(void);
+
 // CRYPTO_sysrand_for_seed fills |len| bytes at |buf| with entropy from the
 // operating system. It may draw from the |GRND_RANDOM| pool on Android,
 // depending on the vendor's configuration.
 void CRYPTO_sysrand_for_seed(uint8_t *buf, size_t len);
 
 // CRYPTO_sysrand_if_available fills |len| bytes at |buf| with entropy from the
-// operating system, if the entropy pool is initialized. If it is uninitialized,
-// it will not block and will instead fill |buf| with all zeros or early
-// /dev/urandom output.
-void CRYPTO_sysrand_if_available(uint8_t *buf, size_t len);
+// operating system, or early /dev/urandom data, and returns 1, _if_ the entropy
+// pool is initialized or if getrandom() is not available and not in FIPS mode.
+// Otherwise it will not block and will instead fill |buf| with all zeros and
+// return 0.
+int CRYPTO_sysrand_if_available(uint8_t *buf, size_t len);
+#else
+OPENSSL_INLINE void CRYPTO_init_sysrand(void) {}
+
+OPENSSL_INLINE void CRYPTO_sysrand_for_seed(uint8_t *buf, size_t len) {
+  CRYPTO_sysrand(buf, len);
+}
+
+OPENSSL_INLINE int CRYPTO_sysrand_if_available(uint8_t *buf, size_t len) {
+  CRYPTO_sysrand(buf, len);
+  return 1;
+}
 #endif
 
 // rand_fork_unsafe_buffering_enabled returns whether fork-unsafe buffering has
@@ -105,10 +121,19 @@
 
 
 #if defined(OPENSSL_X86_64) && !defined(OPENSSL_NO_ASM)
+
 OPENSSL_INLINE int have_rdrand(void) {
   return (OPENSSL_ia32cap_get()[1] & (1u << 30)) != 0;
 }
 
+// have_fast_rdrand returns true if RDRAND is supported and it's reasonably
+// fast. Concretely the latter is defined by whether the chip is Intel (fast) or
+// not (assumed slow).
+OPENSSL_INLINE int have_fast_rdrand(void) {
+  const uint32_t *const ia32cap = OPENSSL_ia32cap_get();
+  return (ia32cap[1] & (1u << 30)) && (ia32cap[0] & (1u << 30));
+}
+
 // CRYPTO_rdrand writes eight bytes of random data from the hardware RNG to
 // |out|. It returns one on success or zero on hardware failure.
 int CRYPTO_rdrand(uint8_t out[8]);
@@ -117,6 +142,17 @@
 // the hardware RNG. The |len| argument must be a multiple of eight. It returns
 // one on success and zero on hardware failure.
 int CRYPTO_rdrand_multiple8_buf(uint8_t *buf, size_t len);
+
+#else  // OPENSSL_X86_64 && !OPENSSL_NO_ASM
+
+OPENSSL_INLINE int have_rdrand(void) {
+  return 0;
+}
+
+OPENSSL_INLINE int have_fast_rdrand(void) {
+  return 0;
+}
+
 #endif  // OPENSSL_X86_64 && !OPENSSL_NO_ASM
 
 
diff --git a/src/crypto/fipsmodule/rand/rand.c b/src/crypto/fipsmodule/rand/rand.c
index 87d7b30..05d6a29 100644
--- a/src/crypto/fipsmodule/rand/rand.c
+++ b/src/crypto/fipsmodule/rand/rand.c
@@ -27,6 +27,7 @@
 #include <openssl/mem.h>
 
 #include "internal.h"
+#include "fork_detect.h"
 #include "../../internal.h"
 #include "../delocate.h"
 
@@ -57,6 +58,7 @@
 // rand_thread_state contains the per-thread state for the RNG.
 struct rand_thread_state {
   CTR_DRBG_STATE drbg;
+  uint64_t fork_generation;
   // calls is the number of generate calls made on |drbg| since it was last
   // (re)seeded. This is bound by |kReseedInterval|.
   unsigned calls;
@@ -125,11 +127,9 @@
 
 #if defined(OPENSSL_X86_64) && !defined(OPENSSL_NO_ASM) && \
     !defined(BORINGSSL_UNSAFE_DETERMINISTIC_MODE)
-static int hwrand(uint8_t *buf, const size_t len) {
-  if (!have_rdrand()) {
-    return 0;
-  }
-
+// rdrand should only be called if either |have_rdrand| or |have_fast_rdrand|
+// returned true.
+static int rdrand(uint8_t *buf, const size_t len) {
   const size_t len_multiple8 = len & ~7;
   if (!CRYPTO_rdrand_multiple8_buf(buf, len_multiple8)) {
     return 0;
@@ -157,7 +157,7 @@
 
 #else
 
-static int hwrand(uint8_t *buf, size_t len) {
+static int rdrand(uint8_t *buf, size_t len) {
   return 0;
 }
 
@@ -168,7 +168,8 @@
 static void rand_get_seed(struct rand_thread_state *state,
                           uint8_t seed[CTR_DRBG_ENTROPY_LEN]) {
   if (!state->last_block_valid) {
-    if (!hwrand(state->last_block, sizeof(state->last_block))) {
+    if (!have_rdrand() ||
+        !rdrand(state->last_block, sizeof(state->last_block))) {
       CRYPTO_sysrand_for_seed(state->last_block, sizeof(state->last_block));
     }
     state->last_block_valid = 1;
@@ -179,8 +180,8 @@
 #define FIPS_OVERREAD 10
   uint8_t entropy[CTR_DRBG_ENTROPY_LEN * FIPS_OVERREAD];
 
-  int used_hwrand = hwrand(entropy, sizeof(entropy));
-  if (!used_hwrand) {
+  int used_rdrand = have_rdrand() && rdrand(entropy, sizeof(entropy));
+  if (!used_rdrand) {
     CRYPTO_sysrand_for_seed(entropy, sizeof(entropy));
   }
 
@@ -215,7 +216,7 @@
 #if defined(OPENSSL_URANDOM)
   // If we used RDRAND, also opportunistically read from the system. This avoids
   // solely relying on the hardware once the entropy pool has been initialized.
-  if (used_hwrand) {
+  if (used_rdrand) {
     CRYPTO_sysrand_if_available(entropy, CTR_DRBG_ENTROPY_LEN);
     for (size_t i = 0; i < CTR_DRBG_ENTROPY_LEN; i++) {
       seed[i] ^= entropy[i];
@@ -241,20 +242,31 @@
     return;
   }
 
+  const uint64_t fork_generation = CRYPTO_get_fork_generation();
+
   // Additional data is mixed into every CTR-DRBG call to protect, as best we
   // can, against forks & VM clones. We do not over-read this information and
   // don't reseed with it so, from the point of view of FIPS, this doesn't
   // provide “prediction resistance”. But, in practice, it does.
   uint8_t additional_data[32];
-  if (!hwrand(additional_data, sizeof(additional_data))) {
+  // Intel chips have fast RDRAND instructions while, in other cases, RDRAND can
+  // be _slower_ than a system call.
+  if (!have_fast_rdrand() ||
+      !rdrand(additional_data, sizeof(additional_data))) {
     // Without a hardware RNG to save us from address-space duplication, the OS
     // entropy is used. This can be expensive (one read per |RAND_bytes| call)
-    // and so can be disabled by applications that we have ensured don't fork
-    // and aren't at risk of VM cloning.
-    if (!rand_fork_unsafe_buffering_enabled()) {
-      CRYPTO_sysrand(additional_data, sizeof(additional_data));
-    } else {
+    // and so is disabled when we have fork detection, or if the application has
+    // promised not to fork.
+    if (fork_generation != 0 || rand_fork_unsafe_buffering_enabled()) {
       OPENSSL_memset(additional_data, 0, sizeof(additional_data));
+    } else if (!have_rdrand()) {
+      // No alternative so block for OS entropy.
+      CRYPTO_sysrand(additional_data, sizeof(additional_data));
+    } else if (!CRYPTO_sysrand_if_available(additional_data,
+                                            sizeof(additional_data)) &&
+               !rdrand(additional_data, sizeof(additional_data))) {
+      // RDRAND failed: block for OS entropy.
+      CRYPTO_sysrand(additional_data, sizeof(additional_data));
     }
   }
 
@@ -283,6 +295,7 @@
       abort();
     }
     state->calls = 0;
+    state->fork_generation = fork_generation;
 
 #if defined(BORINGSSL_FIPS)
     if (state != &stack_state) {
@@ -299,7 +312,8 @@
 #endif
   }
 
-  if (state->calls >= kReseedInterval) {
+  if (state->calls >= kReseedInterval ||
+      state->fork_generation != fork_generation) {
     uint8_t seed[CTR_DRBG_ENTROPY_LEN];
     rand_get_seed(state, seed);
 #if defined(BORINGSSL_FIPS)
@@ -317,6 +331,7 @@
       abort();
     }
     state->calls = 0;
+    state->fork_generation = fork_generation;
   } else {
 #if defined(BORINGSSL_FIPS)
     CRYPTO_STATIC_MUTEX_lock_read(thread_states_list_lock_bss_get());
diff --git a/src/crypto/fipsmodule/rand/urandom.c b/src/crypto/fipsmodule/rand/urandom.c
index 6ca3400..bae3fc3 100644
--- a/src/crypto/fipsmodule/rand/urandom.c
+++ b/src/crypto/fipsmodule/rand/urandom.c
@@ -95,17 +95,10 @@
 
 #endif  // USE_NR_getrandom
 
-// rand_lock is used to protect the |*_requested| variables.
-DEFINE_STATIC_MUTEX(rand_lock)
-
-// The following constants are magic values of |urandom_fd|.
-static const int kUnset = 0;
+// kHaveGetrandom in |urandom_fd| signals that |getrandom| or |getentropy| is
+// available and should be used instead.
 static const int kHaveGetrandom = -3;
 
-// urandom_fd_requested is set by |RAND_set_urandom_fd|. It's protected by
-// |rand_lock|.
-DEFINE_BSS_GET(int, urandom_fd_requested)
-
 // urandom_fd is a file descriptor to /dev/urandom. It's protected by |once|.
 DEFINE_BSS_GET(int, urandom_fd)
 
@@ -144,14 +137,9 @@
 DEFINE_STATIC_ONCE(rand_once)
 
 // init_once initializes the state of this module to values previously
-// requested. This is the only function that modifies |urandom_fd| and
-// |urandom_buffering|, whose values may be read safely after calling the
-// once.
+// requested. This is the only function that modifies |urandom_fd|, which may be
+// read safely after calling the once.
 static void init_once(void) {
-  CRYPTO_STATIC_MUTEX_lock_read(rand_lock_bss_get());
-  int fd = *urandom_fd_requested_bss_get();
-  CRYPTO_STATIC_MUTEX_unlock_read(rand_lock_bss_get());
-
 #if defined(USE_NR_getrandom)
   int have_getrandom;
   uint8_t dummy;
@@ -194,31 +182,16 @@
   abort();
 #endif
 
-  if (fd == kUnset) {
-    do {
-      fd = open("/dev/urandom", O_RDONLY);
-    } while (fd == -1 && errno == EINTR);
-  }
+  int fd;
+  do {
+    fd = open("/dev/urandom", O_RDONLY);
+  } while (fd == -1 && errno == EINTR);
 
   if (fd < 0) {
     perror("failed to open /dev/urandom");
     abort();
   }
 
-  assert(kUnset == 0);
-  if (fd == kUnset) {
-    // Because we want to keep |urandom_fd| in the BSS, we have to initialise
-    // it to zero. But zero is a valid file descriptor too. Thus if open
-    // returns zero for /dev/urandom, we dup it to get a non-zero number.
-    fd = dup(fd);
-    close(kUnset);
-
-    if (fd <= 0) {
-      perror("failed to dup /dev/urandom fd");
-      abort();
-    }
-  }
-
   int flags = fcntl(fd, F_GETFD);
   if (flags == -1) {
     // Native Client doesn't implement |fcntl|.
@@ -307,40 +280,6 @@
 #endif  // BORINGSSL_FIPS
 }
 
-void RAND_set_urandom_fd(int fd) {
-  fd = dup(fd);
-  if (fd < 0) {
-    perror("failed to dup supplied urandom fd");
-    abort();
-  }
-
-  assert(kUnset == 0);
-  if (fd == kUnset) {
-    // Because we want to keep |urandom_fd| in the BSS, we have to initialise
-    // it to zero. But zero is a valid file descriptor too. Thus if dup
-    // returned zero we dup it again to get a non-zero number.
-    fd = dup(fd);
-    close(kUnset);
-
-    if (fd <= 0) {
-      perror("failed to dup supplied urandom fd");
-      abort();
-    }
-  }
-
-  CRYPTO_STATIC_MUTEX_lock_write(rand_lock_bss_get());
-  *urandom_fd_requested_bss_get() = fd;
-  CRYPTO_STATIC_MUTEX_unlock_write(rand_lock_bss_get());
-
-  CRYPTO_once(rand_once_bss_get(), init_once);
-  if (*urandom_fd_bss_get() == kHaveGetrandom) {
-    close(fd);
-  } else if (*urandom_fd_bss_get() != fd) {
-    fprintf(stderr, "RAND_set_urandom_fd called after initialisation.\n");
-    abort();
-  }
-}
-
 // fill_with_entropy writes |len| bytes of entropy into |out|. It returns one
 // on success and zero on error. If |block| is one, this function will block
 // until the entropy pool is initialized. Otherwise, this function may fail,
@@ -362,7 +301,7 @@
   }
 #endif
 
-  CRYPTO_once(rand_once_bss_get(), init_once);
+  CRYPTO_init_sysrand();
   if (block) {
     CRYPTO_once(wait_for_entropy_once_bss_get(), wait_for_entropy);
   }
@@ -417,6 +356,10 @@
   }
 }
 
+void CRYPTO_init_sysrand(void) {
+  CRYPTO_once(rand_once_bss_get(), init_once);
+}
+
 #if defined(BORINGSSL_FIPS)
 void CRYPTO_sysrand_for_seed(uint8_t *out, size_t requested) {
   if (!fill_with_entropy(out, requested, /*block=*/1, /*seed=*/1)) {
@@ -431,16 +374,18 @@
 #endif
 }
 
-void CRYPTO_sysrand_if_available(uint8_t *out, size_t requested) {
-  // Return all zeros if |fill_with_entropy| fails.
-  OPENSSL_memset(out, 0, requested);
+#endif  // BORINGSSL_FIPS
 
-  if (!fill_with_entropy(out, requested, /*block=*/0, /*seed=*/0) &&
-      errno != EAGAIN) {
+int CRYPTO_sysrand_if_available(uint8_t *out, size_t requested) {
+  if (fill_with_entropy(out, requested, /*block=*/0, /*seed=*/0)) {
+    return 1;
+  } else if (errno == EAGAIN) {
+    OPENSSL_memset(out, 0, requested);
+    return 0;
+  } else {
     perror("opportunistic entropy fill failed");
     abort();
   }
 }
-#endif  // BORINGSSL_FIPS
 
 #endif  // OPENSSL_URANDOM
diff --git a/src/crypto/fipsmodule/rand/urandom_test.cc b/src/crypto/fipsmodule/rand/urandom_test.cc
index 38b0202..b9e9007 100644
--- a/src/crypto/fipsmodule/rand/urandom_test.cc
+++ b/src/crypto/fipsmodule/rand/urandom_test.cc
@@ -28,14 +28,12 @@
 #include <sys/syscall.h>
 #include <sys/user.h>
 
+#include "fork_detect.h"
+
 #if !defined(PTRACE_O_EXITKILL)
 #define PTRACE_O_EXITKILL (1 << 20)
 #endif
 
-#if defined(OPENSSL_NO_ASM)
-static int have_rdrand() { return 0; }
-#endif
-
 // This test can be run with $OPENSSL_ia32cap=~0x4000000000000000 in order to
 // simulate the absence of RDRAND of machines that have it.
 
@@ -333,6 +331,10 @@
   RAND_bytes(&byte, sizeof(byte));
 }
 
+static bool have_fork_detection() {
+  return CRYPTO_get_fork_generation() != 0;
+}
+
 // TestFunctionPRNGModel is a model of how the urandom.c code will behave when
 // |TestFunction| is run. It should return the same trace of events that
 // |GetTrace| will observe the real code making.
@@ -415,26 +417,59 @@
   const size_t kAdditionalDataLength = 32;
 
   if (!have_rdrand()) {
-    if (!sysrand(true, kAdditionalDataLength) ||
+    if ((!have_fork_detection() && !sysrand(true, kAdditionalDataLength)) ||
         // Initialise CRNGT.
         (is_fips && !sysrand(true, 16)) ||
         !sysrand(true, kSeedLength) ||
         // Second entropy draw.
-        !sysrand(true, kAdditionalDataLength)) {
+        (!have_fork_detection() && !sysrand(true, kAdditionalDataLength))) {
       return ret;
     }
-  } else {
-    // Opportuntistic entropy draw in FIPS mode because RDRAND was used.
-    // In non-FIPS mode it's just drawn from |CRYPTO_sysrand| in a blocking
-    // way.
-    if (!sysrand(!is_fips, CTR_DRBG_ENTROPY_LEN)) {
-      return ret;
-    }
+  } else if (
+      // First additional data. If fast RDRAND isn't available then a
+      // non-blocking OS entropy draw will be tried.
+      (!have_fast_rdrand() && !have_fork_detection() &&
+       !sysrand(false, kAdditionalDataLength)) ||
+      // Opportuntistic entropy draw in FIPS mode because RDRAND was used.
+      // In non-FIPS mode it's just drawn from |CRYPTO_sysrand| in a blocking
+      // way.
+      !sysrand(!is_fips, CTR_DRBG_ENTROPY_LEN) ||
+      // Second entropy draw's additional data.
+      (!have_fast_rdrand() && !have_fork_detection() &&
+       !sysrand(false, kAdditionalDataLength))) {
+    return ret;
   }
 
   return ret;
 }
 
+static void CheckInvariants(const std::vector<Event> &events) {
+  // If RDRAND is available then there should be no blocking syscalls in FIPS
+  // mode.
+#if defined(BORINGSSL_FIPS)
+  if (have_rdrand()) {
+    for (const auto &event : events) {
+      switch (event.type) {
+        case Event::Syscall::kGetRandom:
+          if ((event.flags & GRND_NONBLOCK) == 0) {
+            ADD_FAILURE() << "Blocking getrandom found with RDRAND: "
+                          << ToString(events);
+          }
+          break;
+
+        case Event::Syscall::kUrandomIoctl:
+          ADD_FAILURE() << "Urandom polling found with RDRAND: "
+                        << ToString(events);
+          break;
+
+        default:
+          break;
+      }
+    }
+  }
+#endif
+}
+
 // Tests that |TestFunctionPRNGModel| is a correct model for the code in
 // urandom.c, at least to the limits of the the |Event| type.
 TEST(URandomTest, Test) {
@@ -453,6 +488,7 @@
     TRACE_FLAG(URANDOM_ERROR);
 
     const std::vector<Event> expected_trace = TestFunctionPRNGModel(flags);
+    CheckInvariants(expected_trace);
     std::vector<Event> actual_trace;
     GetTrace(&actual_trace, flags, TestFunction);
 
@@ -465,6 +501,11 @@
 
 int main(int argc, char **argv) {
   ::testing::InitGoogleTest(&argc, argv);
+
+  if (getenv("BORINGSSL_IGNORE_MADV_WIPEONFORK")) {
+    CRYPTO_fork_detect_ignore_madv_wipeonfork_for_testing();
+  }
+
   return RUN_ALL_TESTS();
 }
 
diff --git a/src/crypto/fipsmodule/rsa/blinding.c b/src/crypto/fipsmodule/rsa/blinding.c
index b05f9c9..29477bd 100644
--- a/src/crypto/fipsmodule/rsa/blinding.c
+++ b/src/crypto/fipsmodule/rsa/blinding.c
@@ -167,6 +167,10 @@
   OPENSSL_free(r);
 }
 
+void BN_BLINDING_invalidate(BN_BLINDING *b) {
+  b->counter = BN_BLINDING_COUNTER - 1;
+}
+
 static int bn_blinding_update(BN_BLINDING *b, const BIGNUM *e,
                               const BN_MONT_CTX *mont, BN_CTX *ctx) {
   if (++b->counter == BN_BLINDING_COUNTER) {
diff --git a/src/crypto/fipsmodule/rsa/internal.h b/src/crypto/fipsmodule/rsa/internal.h
index f913058..d9d6fac 100644
--- a/src/crypto/fipsmodule/rsa/internal.h
+++ b/src/crypto/fipsmodule/rsa/internal.h
@@ -83,6 +83,7 @@
 
 BN_BLINDING *BN_BLINDING_new(void);
 void BN_BLINDING_free(BN_BLINDING *b);
+void BN_BLINDING_invalidate(BN_BLINDING *b);
 int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, const BIGNUM *e,
                         const BN_MONT_CTX *mont_ctx, BN_CTX *ctx);
 int BN_BLINDING_invert(BIGNUM *n, const BN_BLINDING *b, BN_MONT_CTX *mont_ctx,
@@ -107,6 +108,10 @@
 int RSA_padding_add_none(uint8_t *to, size_t to_len, const uint8_t *from,
                          size_t from_len);
 
+// rsa_check_public_key checks that |rsa|'s public modulus and exponent are
+// within DoS bounds.
+int rsa_check_public_key(const RSA *rsa);
+
 // RSA_private_transform calls either the method-specific |private_transform|
 // function (if given) or the generic one. See the comment for
 // |private_transform| in |rsa_meth_st|.
diff --git a/src/crypto/fipsmodule/rsa/rsa.c b/src/crypto/fipsmodule/rsa/rsa.c
index a7fb7ae..ae63e1a 100644
--- a/src/crypto/fipsmodule/rsa/rsa.c
+++ b/src/crypto/fipsmodule/rsa/rsa.c
@@ -655,7 +655,15 @@
 }
 
 static int check_mod_inverse(int *out_ok, const BIGNUM *a, const BIGNUM *ainv,
-                             const BIGNUM *m, int check_reduced, BN_CTX *ctx) {
+                             const BIGNUM *m, BN_CTX *ctx) {
+  if (BN_is_negative(ainv) || BN_cmp(ainv, m) >= 0) {
+    *out_ok = 0;
+    return 1;
+  }
+
+  // Note |bn_mul_consttime| and |bn_div_consttime| do not scale linearly, but
+  // checking |ainv| is in range bounds the running time, assuming |m|'s bounds
+  // were checked by the caller.
   BN_CTX_start(ctx);
   BIGNUM *tmp = BN_CTX_get(ctx);
   int ret = tmp != NULL &&
@@ -663,84 +671,97 @@
             bn_div_consttime(NULL, tmp, tmp, m, ctx);
   if (ret) {
     *out_ok = BN_is_one(tmp);
-    if (check_reduced && (BN_is_negative(ainv) || BN_cmp(ainv, m) >= 0)) {
-      *out_ok = 0;
-    }
   }
   BN_CTX_end(ctx);
   return ret;
 }
 
 int RSA_check_key(const RSA *key) {
-  BIGNUM n, pm1, qm1, lcm, dmp1, dmq1, iqmp_times_q;
-  BN_CTX *ctx;
-  int ok = 0, has_crt_values;
+  // TODO(davidben): RSA key initialization is spread across
+  // |rsa_check_public_key|, |RSA_check_key|, |freeze_private_key|, and
+  // |BN_MONT_CTX_set_locked| as a result of API issues. See
+  // https://crbug.com/boringssl/316. As a result, we inconsistently check RSA
+  // invariants. We should fix this and integrate that logic.
 
   if (RSA_is_opaque(key)) {
     // Opaque keys can't be checked.
     return 1;
   }
 
+  if (!rsa_check_public_key(key)) {
+    return 0;
+  }
+
   if ((key->p != NULL) != (key->q != NULL)) {
     OPENSSL_PUT_ERROR(RSA, RSA_R_ONLY_ONE_OF_P_Q_GIVEN);
     return 0;
   }
 
-  if (!key->n || !key->e) {
-    OPENSSL_PUT_ERROR(RSA, RSA_R_VALUE_MISSING);
+  // |key->d| must be bounded by |key->n|. This ensures bounds on |RSA_bits|
+  // translate to bounds on the running time of private key operations.
+  if (key->d != NULL &&
+      (BN_is_negative(key->d) || BN_cmp(key->d, key->n) >= 0)) {
+    OPENSSL_PUT_ERROR(RSA, RSA_R_D_OUT_OF_RANGE);
     return 0;
   }
 
-  if (!key->d || !key->p) {
+  if (key->d == NULL || key->p == NULL) {
     // For a public key, or without p and q, there's nothing that can be
     // checked.
     return 1;
   }
 
-  ctx = BN_CTX_new();
+  BN_CTX *ctx = BN_CTX_new();
   if (ctx == NULL) {
     OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
     return 0;
   }
 
-  BN_init(&n);
+  BIGNUM tmp, de, pm1, qm1, dmp1, dmq1;
+  int ok = 0;
+  BN_init(&tmp);
+  BN_init(&de);
   BN_init(&pm1);
   BN_init(&qm1);
-  BN_init(&lcm);
   BN_init(&dmp1);
   BN_init(&dmq1);
-  BN_init(&iqmp_times_q);
 
-  int d_ok;
-  if (!bn_mul_consttime(&n, key->p, key->q, ctx) ||
-      // lcm = lcm(p, q)
-      !bn_usub_consttime(&pm1, key->p, BN_value_one()) ||
-      !bn_usub_consttime(&qm1, key->q, BN_value_one()) ||
-      !bn_lcm_consttime(&lcm, &pm1, &qm1, ctx) ||
-      // Other implementations use the Euler totient rather than the Carmichael
-      // totient, so allow unreduced |key->d|.
-      !check_mod_inverse(&d_ok, key->e, key->d, &lcm,
-                         0 /* don't require reduced */, ctx)) {
+  // Check that p * q == n. Before we multiply, we check that p and q are in
+  // bounds, to avoid a DoS vector in |bn_mul_consttime| below. Note that
+  // n was bound by |rsa_check_public_key|.
+  if (BN_is_negative(key->p) || BN_cmp(key->p, key->n) >= 0 ||
+      BN_is_negative(key->q) || BN_cmp(key->q, key->n) >= 0) {
+    OPENSSL_PUT_ERROR(RSA, RSA_R_N_NOT_EQUAL_P_Q);
+    goto out;
+  }
+  if (!bn_mul_consttime(&tmp, key->p, key->q, ctx)) {
     OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN);
     goto out;
   }
-
-  if (BN_cmp(&n, key->n) != 0) {
+  if (BN_cmp(&tmp, key->n) != 0) {
     OPENSSL_PUT_ERROR(RSA, RSA_R_N_NOT_EQUAL_P_Q);
     goto out;
   }
 
-  if (!d_ok) {
+  // d must be an inverse of e mod the Carmichael totient, lcm(p-1, q-1), but it
+  // may be unreduced because other implementations use the Euler totient. We
+  // simply check that d * e is one mod p-1 and mod q-1. Note d and e were bound
+  // by earlier checks in this function.
+  if (!bn_usub_consttime(&pm1, key->p, BN_value_one()) ||
+      !bn_usub_consttime(&qm1, key->q, BN_value_one()) ||
+      !bn_mul_consttime(&de, key->d, key->e, ctx) ||
+      !bn_div_consttime(NULL, &tmp, &de, &pm1, ctx) ||
+      !bn_div_consttime(NULL, &de, &de, &qm1, ctx)) {
+    OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN);
+    goto out;
+  }
+
+  if (!BN_is_one(&tmp) || !BN_is_one(&de)) {
     OPENSSL_PUT_ERROR(RSA, RSA_R_D_E_NOT_CONGRUENT_TO_1);
     goto out;
   }
 
-  if (BN_is_negative(key->d) || BN_cmp(key->d, key->n) >= 0) {
-    OPENSSL_PUT_ERROR(RSA, RSA_R_D_OUT_OF_RANGE);
-    goto out;
-  }
-
-  has_crt_values = key->dmp1 != NULL;
+  int has_crt_values = key->dmp1 != NULL;
   if (has_crt_values != (key->dmq1 != NULL) ||
       has_crt_values != (key->iqmp != NULL)) {
     OPENSSL_PUT_ERROR(RSA, RSA_R_INCONSISTENT_SET_OF_CRT_VALUES);
@@ -749,12 +770,9 @@
 
   if (has_crt_values) {
     int dmp1_ok, dmq1_ok, iqmp_ok;
-    if (!check_mod_inverse(&dmp1_ok, key->e, key->dmp1, &pm1,
-                           1 /* check reduced */, ctx) ||
-        !check_mod_inverse(&dmq1_ok, key->e, key->dmq1, &qm1,
-                           1 /* check reduced */, ctx) ||
-        !check_mod_inverse(&iqmp_ok, key->q, key->iqmp, key->p,
-                           1 /* check reduced */, ctx)) {
+    if (!check_mod_inverse(&dmp1_ok, key->e, key->dmp1, &pm1, ctx) ||
+        !check_mod_inverse(&dmq1_ok, key->e, key->dmq1, &qm1, ctx) ||
+        !check_mod_inverse(&iqmp_ok, key->q, key->iqmp, key->p, ctx)) {
       OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN);
       goto out;
     }
@@ -768,13 +786,12 @@
   ok = 1;
 
 out:
-  BN_free(&n);
+  BN_free(&tmp);
+  BN_free(&de);
   BN_free(&pm1);
   BN_free(&qm1);
-  BN_free(&lcm);
   BN_free(&dmp1);
   BN_free(&dmq1);
-  BN_free(&iqmp_times_q);
   BN_CTX_free(ctx);
 
   return ok;
diff --git a/src/crypto/fipsmodule/rsa/rsa_impl.c b/src/crypto/fipsmodule/rsa/rsa_impl.c
index 94fb75c..86ff2f3 100644
--- a/src/crypto/fipsmodule/rsa/rsa_impl.c
+++ b/src/crypto/fipsmodule/rsa/rsa_impl.c
@@ -70,9 +70,15 @@
 #include "../bn/internal.h"
 #include "../../internal.h"
 #include "../delocate.h"
+#include "../rand/fork_detect.h"
 
 
-static int check_modulus_and_exponent_sizes(const RSA *rsa) {
+int rsa_check_public_key(const RSA *rsa) {
+  if (rsa->n == NULL || rsa->e == NULL) {
+    OPENSSL_PUT_ERROR(RSA, RSA_R_VALUE_MISSING);
+    return 0;
+  }
+
   unsigned rsa_bits = BN_num_bits(rsa->n);
 
   if (rsa_bits > 16 * 1024) {
@@ -252,8 +258,7 @@
 
 int RSA_encrypt(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out,
                 const uint8_t *in, size_t in_len, int padding) {
-  if (rsa->n == NULL || rsa->e == NULL) {
-    OPENSSL_PUT_ERROR(RSA, RSA_R_VALUE_MISSING);
+  if (!rsa_check_public_key(rsa)) {
     return 0;
   }
 
@@ -268,10 +273,6 @@
     return 0;
   }
 
-  if (!check_modulus_and_exponent_sizes(rsa)) {
-    return 0;
-  }
-
   ctx = BN_CTX_new();
   if (ctx == NULL) {
     goto err;
@@ -345,7 +346,7 @@
 // MAX_BLINDINGS_PER_RSA defines the maximum number of cached BN_BLINDINGs per
 // RSA*. Then this limit is exceeded, BN_BLINDING objects will be created and
 // destroyed as needed.
-#if defined(OPNESSL_TSAN)
+#if defined(OPENSSL_TSAN)
 // Smaller under TSAN so that the edge case can be hit with fewer threads.
 #define MAX_BLINDINGS_PER_RSA 2
 #else
@@ -365,8 +366,21 @@
   assert(rsa->mont_n != NULL);
 
   BN_BLINDING *ret = NULL;
+  const uint64_t fork_generation = CRYPTO_get_fork_generation();
   CRYPTO_MUTEX_lock_write(&rsa->lock);
 
+  // Wipe the blinding cache on |fork|.
+  if (rsa->blinding_fork_generation != fork_generation) {
+    for (unsigned i = 0; i < rsa->num_blindings; i++) {
+      // The inuse flag must be zero unless we were forked from a
+      // multi-threaded process, in which case calling back into BoringSSL is
+      // forbidden.
+      assert(rsa->blindings_inuse[i] == 0);
+      BN_BLINDING_invalidate(rsa->blindings[i]);
+    }
+    rsa->blinding_fork_generation = fork_generation;
+  }
+
   uint8_t *const free_inuse_flag =
       OPENSSL_memchr(rsa->blindings_inuse, 0, rsa->num_blindings);
   if (free_inuse_flag != NULL) {
@@ -578,8 +592,7 @@
 
 int RSA_verify_raw(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out,
                    const uint8_t *in, size_t in_len, int padding) {
-  if (rsa->n == NULL || rsa->e == NULL) {
-    OPENSSL_PUT_ERROR(RSA, RSA_R_VALUE_MISSING);
+  if (!rsa_check_public_key(rsa)) {
     return 0;
   }
 
@@ -596,10 +609,6 @@
     return 0;
   }
 
-  if (!check_modulus_and_exponent_sizes(rsa)) {
-    return 0;
-  }
-
   BN_CTX *ctx = BN_CTX_new();
   if (ctx == NULL) {
     return 0;
@@ -1107,8 +1116,8 @@
 
   // Reject excessively large public exponents. Windows CryptoAPI and Go don't
   // support values larger than 32 bits, so match their limits for generating
-  // keys. (|check_modulus_and_exponent_sizes| uses a slightly more conservative
-  // value, but we don't need to support generating such keys.)
+  // keys. (|rsa_check_public_key| uses a slightly more conservative value, but
+  // we don't need to support generating such keys.)
   // https://github.com/golang/go/issues/3161
   // https://msdn.microsoft.com/en-us/library/aa387685(VS.85).aspx
   if (BN_num_bits(e_value) > 32) {
diff --git a/src/crypto/fipsmodule/self_check/self_check.c b/src/crypto/fipsmodule/self_check/self_check.c
index d8a61c3..4b954b7 100644
--- a/src/crypto/fipsmodule/self_check/self_check.c
+++ b/src/crypto/fipsmodule/self_check/self_check.c
@@ -21,6 +21,7 @@
 #include <openssl/aes.h>
 #include <openssl/bn.h>
 #include <openssl/des.h>
+#include <openssl/ec.h>
 #include <openssl/ecdsa.h>
 #include <openssl/ec_key.h>
 #include <openssl/nid.h>
@@ -430,11 +431,44 @@
       0xba, 0x4d, 0xd9, 0x86, 0x77, 0xda, 0x7d, 0x8f, 0xef, 0xc4, 0x1a,
       0xf0, 0xcc, 0x81, 0xe5, 0xea, 0x3f, 0xc2, 0x41, 0x7f, 0xd8,
   };
+  // kP256Point is SHA256("Primitive Z Computation KAT")×G within P-256.
+  const uint8_t kP256Point[65] = {
+      0x04, 0x4e, 0xc1, 0x94, 0x8c, 0x5c, 0xf4, 0x37, 0x35, 0x0d, 0xa3,
+      0xf9, 0x55, 0xf9, 0x8b, 0x26, 0x23, 0x5c, 0x43, 0xe0, 0x83, 0x51,
+      0x2b, 0x0d, 0x4b, 0x56, 0x24, 0xc3, 0xe4, 0xa5, 0xa8, 0xe2, 0xe9,
+      0x95, 0xf2, 0xc4, 0xb9, 0xb7, 0x48, 0x7d, 0x2a, 0xae, 0xc5, 0xc0,
+      0x0a, 0xcc, 0x1b, 0xd0, 0xec, 0xb8, 0xdc, 0xbe, 0x0c, 0xbe, 0x52,
+      0x79, 0x93, 0x7c, 0x0b, 0x92, 0x2b, 0x7f, 0x17, 0xa5, 0x80,
+  };
+  // kP256Scalar is SHA256("Primitive Z Computation KAT scalar").
+  const uint8_t kP256Scalar[32] = {
+      0xe7, 0x60, 0x44, 0x91, 0x26, 0x9a, 0xfb, 0x5b, 0x10, 0x2d, 0x6e,
+      0xa5, 0x2c, 0xb5, 0x9f, 0xeb, 0x70, 0xae, 0xde, 0x6c, 0xe3, 0xbf,
+      0xb3, 0xe0, 0x10, 0x54, 0x85, 0xab, 0xd8, 0x61, 0xd7, 0x7b,
+  };
+  // kP256PointResult is |kP256Scalar|×|kP256Point|.
+  const uint8_t kP256PointResult[65] = {
+      0x04, 0xf1, 0x63, 0x00, 0x88, 0xc5, 0xd5, 0xe9, 0x05, 0x52, 0xac,
+      0xb6, 0xec, 0x68, 0x76, 0xb8, 0x73, 0x7f, 0x0f, 0x72, 0x34, 0xe6,
+      0xbb, 0x30, 0x32, 0x22, 0x37, 0xb6, 0x2a, 0x80, 0xe8, 0x9e, 0x6e,
+      0x6f, 0x36, 0x02, 0xe7, 0x21, 0xd2, 0x31, 0xdb, 0x94, 0x63, 0xb7,
+      0xd8, 0x19, 0x0e, 0xc2, 0xc0, 0xa7, 0x2f, 0x15, 0x49, 0x1a, 0xa2,
+      0x7c, 0x41, 0x8f, 0xaf, 0x9c, 0x40, 0xaf, 0x2e, 0x4a,
+#if !defined(BORINGSSL_FIPS_BREAK_Z_COMPUTATION)
+      0x0c,
+#else
+      0x00,
+#endif
+  };
 
   EVP_AEAD_CTX aead_ctx;
   EVP_AEAD_CTX_zero(&aead_ctx);
   RSA *rsa_key = NULL;
   EC_KEY *ec_key = NULL;
+  EC_GROUP *ec_group = NULL;
+  EC_POINT *ec_point_in = NULL;
+  EC_POINT *ec_point_out = NULL;
+  BIGNUM *ec_scalar = NULL;
   ECDSA_SIG *sig = NULL;
   int ret = 0;
 
@@ -602,6 +636,30 @@
     goto err;
   }
 
+  // Primitive Z Computation KAT (IG 9.6).
+  ec_group = EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1);
+  if (ec_group == NULL) {
+    fprintf(stderr, "Failed to create P-256 group.\n");
+    goto err;
+  }
+  ec_point_in = EC_POINT_new(ec_group);
+  ec_point_out = EC_POINT_new(ec_group);
+  ec_scalar = BN_new();
+  uint8_t z_comp_result[65];
+  if (ec_point_in == NULL || ec_point_out == NULL || ec_scalar == NULL ||
+      !EC_POINT_oct2point(ec_group, ec_point_in, kP256Point, sizeof(kP256Point),
+                          NULL) ||
+      !BN_bin2bn(kP256Scalar, sizeof(kP256Scalar), ec_scalar) ||
+      !EC_POINT_mul(ec_group, ec_point_out, NULL, ec_point_in, ec_scalar,
+                    NULL) ||
+      !EC_POINT_point2oct(ec_group, ec_point_out, POINT_CONVERSION_UNCOMPRESSED,
+                          z_comp_result, sizeof(z_comp_result), NULL) ||
+      !check_test(kP256PointResult, z_comp_result, sizeof(z_comp_result),
+                  "Z Computation Result")) {
+    fprintf(stderr, "Z Computation KAT failed.\n");
+    goto err;
+  }
+
   // DBRG KAT
   CTR_DRBG_STATE drbg;
   if (!CTR_DRBG_init(&drbg, kDRBGEntropy, kDRBGPersonalization,
@@ -642,6 +700,10 @@
   EVP_AEAD_CTX_cleanup(&aead_ctx);
   RSA_free(rsa_key);
   EC_KEY_free(ec_key);
+  EC_POINT_free(ec_point_in);
+  EC_POINT_free(ec_point_out);
+  EC_GROUP_free(ec_group);
+  BN_free(ec_scalar);
   ECDSA_SIG_free(sig);
 
   return ret;
diff --git a/src/crypto/fipsmodule/sha/asm/sha1-armv8.pl b/src/crypto/fipsmodule/sha/asm/sha1-armv8.pl
index 59d55b3..dfde8c9 100644
--- a/src/crypto/fipsmodule/sha/asm/sha1-armv8.pl
+++ b/src/crypto/fipsmodule/sha/asm/sha1-armv8.pl
@@ -180,6 +180,8 @@
 .type	sha1_block_data_order,%function
 .align	6
 sha1_block_data_order:
+	// Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later.
+	AARCH64_VALID_CALL_TARGET
 #if __has_feature(hwaddress_sanitizer) && __clang_major__ >= 10
 	adrp	x16,:pg_hi21_nc:OPENSSL_armcap_P
 #else
@@ -249,6 +251,8 @@
 .type	sha1_block_armv8,%function
 .align	6
 sha1_block_armv8:
+	// Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later.
+	AARCH64_VALID_CALL_TARGET
 .Lv8_entry:
 	stp	x29,x30,[sp,#-16]!
 	add	x29,sp,#0
diff --git a/src/crypto/fipsmodule/sha/asm/sha1-x86_64.pl b/src/crypto/fipsmodule/sha/asm/sha1-x86_64.pl
index df7cbc3..76e4077 100755
--- a/src/crypto/fipsmodule/sha/asm/sha1-x86_64.pl
+++ b/src/crypto/fipsmodule/sha/asm/sha1-x86_64.pl
@@ -107,16 +107,8 @@
 # In upstream, this is controlled by shelling out to the compiler to check
 # versions, but BoringSSL is intended to be used with pre-generated perlasm
 # output, so this isn't useful anyway.
-#
-# TODO(davidben): Enable AVX2 code after testing by setting $avx to 2. Is it
-# necessary to disable AVX2 code when SHA Extensions code is disabled? Upstream
-# did not tie them together until after $shaext was added.
-$avx = 1;
-
-# TODO(davidben): Consider enabling the Intel SHA Extensions code once it's
-# been tested.
-$shaext=0;	### set to zero if compiling for 1.0.1
-$avx=1		if (!$shaext && $avx);
+$avx = 2;
+$shaext=1;	### set to zero if compiling for 1.0.1
 
 open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\"";
 *STDOUT=*OUT;
@@ -461,8 +453,8 @@
 .Lepilogue_shaext:
 ___
 $code.=<<___;
-.cfi_endproc
 	ret
+.cfi_endproc
 .size	sha1_block_data_order_shaext,.-sha1_block_data_order_shaext
 ___
 }}}
diff --git a/src/crypto/fipsmodule/sha/asm/sha512-armv8.pl b/src/crypto/fipsmodule/sha/asm/sha512-armv8.pl
index 1afaf58..aff41ce 100644
--- a/src/crypto/fipsmodule/sha/asm/sha512-armv8.pl
+++ b/src/crypto/fipsmodule/sha/asm/sha512-armv8.pl
@@ -185,6 +185,7 @@
 $func:
 ___
 $code.=<<___	if ($SZ==4);
+	AARCH64_VALID_CALL_TARGET
 #ifndef	__KERNEL__
 #if __has_feature(hwaddress_sanitizer) && __clang_major__ >= 10
 	adrp	x16,:pg_hi21_nc:OPENSSL_armcap_P
@@ -197,6 +198,7 @@
 #endif
 ___
 $code.=<<___;
+	AARCH64_SIGN_LINK_REGISTER
 	stp	x29,x30,[sp,#-128]!
 	add	x29,sp,#0
 
@@ -259,6 +261,7 @@
 	ldp	x25,x26,[x29,#64]
 	ldp	x27,x28,[x29,#80]
 	ldp	x29,x30,[sp],#128
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	$func,.-$func
 
@@ -350,6 +353,7 @@
 .align	6
 sha256_block_armv8:
 .Lv8_entry:
+	// Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later.
 	stp		x29,x30,[sp,#-16]!
 	add		x29,sp,#0
 
diff --git a/src/crypto/fipsmodule/sha/sha512.c b/src/crypto/fipsmodule/sha/sha512.c
index 848f3b6..fd02574 100644
--- a/src/crypto/fipsmodule/sha/sha512.c
+++ b/src/crypto/fipsmodule/sha/sha512.c
@@ -105,6 +105,23 @@
   return 1;
 }
 
+int SHA512_256_Init(SHA512_CTX *sha) {
+  sha->h[0] = UINT64_C(0x22312194fc2bf72c);
+  sha->h[1] = UINT64_C(0x9f555fa3c84c64c2);
+  sha->h[2] = UINT64_C(0x2393b86b6f53b151);
+  sha->h[3] = UINT64_C(0x963877195940eabd);
+  sha->h[4] = UINT64_C(0x96283ee2a88effe3);
+  sha->h[5] = UINT64_C(0xbe5e1e2553863992);
+  sha->h[6] = UINT64_C(0x2b0199fc2c85b8aa);
+  sha->h[7] = UINT64_C(0x0eb72ddc81c52ca2);
+
+  sha->Nl = 0;
+  sha->Nh = 0;
+  sha->num = 0;
+  sha->md_len = SHA512_256_DIGEST_LENGTH;
+  return 1;
+}
+
 uint8_t *SHA384(const uint8_t *data, size_t len,
                 uint8_t out[SHA384_DIGEST_LENGTH]) {
   SHA512_CTX ctx;
@@ -125,6 +142,16 @@
   return out;
 }
 
+uint8_t *SHA512_256(const uint8_t *data, size_t len,
+                    uint8_t out[SHA512_256_DIGEST_LENGTH]) {
+  SHA512_CTX ctx;
+  SHA512_256_Init(&ctx);
+  SHA512_Update(&ctx, data, len);
+  SHA512_Final(out, &ctx);
+  OPENSSL_cleanse(&ctx, sizeof(ctx));
+  return out;
+}
+
 #if !defined(SHA512_ASM)
 static void sha512_block_data_order(uint64_t *state, const uint8_t *in,
                                     size_t num_blocks);
@@ -141,6 +168,17 @@
   return SHA512_Update(sha, data, len);
 }
 
+int SHA512_256_Update(SHA512_CTX *sha, const void *data, size_t len) {
+  return SHA512_Update(sha, data, len);
+}
+
+int SHA512_256_Final(uint8_t out[SHA512_256_DIGEST_LENGTH],
+                                    SHA512_CTX *sha) {
+  // |SHA512_256_Init| sets |sha->md_len| to |SHA512_256_DIGEST_LENGTH|, so this
+  // has a |smaller output.
+  return SHA512_Final(out, sha);
+}
+
 void SHA512_Transform(SHA512_CTX *c, const uint8_t block[SHA512_CBLOCK]) {
   sha512_block_data_order(c->h, block, 1);
 }
@@ -231,41 +269,12 @@
     return 0;
   }
 
-  switch (sha->md_len) {
-    // Let compiler decide if it's appropriate to unroll...
-    case SHA384_DIGEST_LENGTH:
-      for (n = 0; n < SHA384_DIGEST_LENGTH / 8; n++) {
-        uint64_t t = sha->h[n];
-
-        *(out++) = (uint8_t)(t >> 56);
-        *(out++) = (uint8_t)(t >> 48);
-        *(out++) = (uint8_t)(t >> 40);
-        *(out++) = (uint8_t)(t >> 32);
-        *(out++) = (uint8_t)(t >> 24);
-        *(out++) = (uint8_t)(t >> 16);
-        *(out++) = (uint8_t)(t >> 8);
-        *(out++) = (uint8_t)(t);
-      }
-      break;
-    case SHA512_DIGEST_LENGTH:
-      for (n = 0; n < SHA512_DIGEST_LENGTH / 8; n++) {
-        uint64_t t = sha->h[n];
-
-        *(out++) = (uint8_t)(t >> 56);
-        *(out++) = (uint8_t)(t >> 48);
-        *(out++) = (uint8_t)(t >> 40);
-        *(out++) = (uint8_t)(t >> 32);
-        *(out++) = (uint8_t)(t >> 24);
-        *(out++) = (uint8_t)(t >> 16);
-        *(out++) = (uint8_t)(t >> 8);
-        *(out++) = (uint8_t)(t);
-      }
-      break;
-    // ... as well as make sure md_len is not abused.
-    default:
-      // TODO(davidben): This bad |md_len| case is one of the few places a
-      // low-level hash 'final' function can fail. This should never happen.
-      return 0;
+  assert(sha->md_len % 8 == 0);
+  const size_t out_words = sha->md_len / 8;
+  for (size_t i = 0; i < out_words; i++) {
+    const uint64_t t = CRYPTO_bswap8(sha->h[i]);
+    memcpy(out, &t, sizeof(t));
+    out += sizeof(t);
   }
 
   return 1;
diff --git a/src/crypto/hpke/hpke.c b/src/crypto/hpke/hpke.c
new file mode 100644
index 0000000..2e0a581
--- /dev/null
+++ b/src/crypto/hpke/hpke.c
@@ -0,0 +1,543 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#include <assert.h>
+#include <string.h>
+
+#include <openssl/aead.h>
+#include <openssl/bytestring.h>
+#include <openssl/digest.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/hkdf.h>
+#include <openssl/sha.h>
+
+#include "../internal.h"
+#include "internal.h"
+
+
+// This file implements draft-irtf-cfrg-hpke-05.
+
+#define KEM_CONTEXT_LEN (2 * X25519_PUBLIC_VALUE_LEN)
+
+// HPKE KEM scheme IDs.
+#define HPKE_DHKEM_X25519_HKDF_SHA256 0x0020
+
+// This is strlen("HPKE") + 3 * sizeof(uint16_t).
+#define HPKE_SUITE_ID_LEN 10
+
+#define HPKE_MODE_BASE 0
+#define HPKE_MODE_PSK 1
+
+static const char kHpkeRfcId[] = "HPKE-05 ";
+
+static int add_label_string(CBB *cbb, const char *label) {
+  return CBB_add_bytes(cbb, (const uint8_t *)label, strlen(label));
+}
+
+// The suite_id for the KEM is defined as concat("KEM", I2OSP(kem_id, 2)). Note
+// that the suite_id used outside of the KEM also includes the kdf_id and
+// aead_id.
+static const uint8_t kX25519SuiteID[] = {
+    'K', 'E', 'M', HPKE_DHKEM_X25519_HKDF_SHA256 >> 8,
+    HPKE_DHKEM_X25519_HKDF_SHA256 & 0x00ff};
+
+// The suite_id for non-KEM pieces of HPKE is defined as concat("HPKE",
+// I2OSP(kem_id, 2), I2OSP(kdf_id, 2), I2OSP(aead_id, 2)).
+static int hpke_build_suite_id(uint8_t out[HPKE_SUITE_ID_LEN], uint16_t kdf_id,
+                               uint16_t aead_id) {
+  CBB cbb;
+  int ret = CBB_init_fixed(&cbb, out, HPKE_SUITE_ID_LEN) &&
+            add_label_string(&cbb, "HPKE") &&
+            CBB_add_u16(&cbb, HPKE_DHKEM_X25519_HKDF_SHA256) &&
+            CBB_add_u16(&cbb, kdf_id) &&
+            CBB_add_u16(&cbb, aead_id);
+  CBB_cleanup(&cbb);
+  return ret;
+}
+
+static int hpke_labeled_extract(const EVP_MD *hkdf_md, uint8_t *out_key,
+                                size_t *out_len, const uint8_t *salt,
+                                size_t salt_len, const uint8_t *suite_id,
+                                size_t suite_id_len, const char *label,
+                                const uint8_t *ikm, size_t ikm_len) {
+  // labeledIKM = concat("RFCXXXX ", suite_id, label, IKM)
+  CBB labeled_ikm;
+  int ok = CBB_init(&labeled_ikm, 0) &&
+           add_label_string(&labeled_ikm, kHpkeRfcId) &&
+           CBB_add_bytes(&labeled_ikm, suite_id, suite_id_len) &&
+           add_label_string(&labeled_ikm, label) &&
+           CBB_add_bytes(&labeled_ikm, ikm, ikm_len) &&
+           HKDF_extract(out_key, out_len, hkdf_md, CBB_data(&labeled_ikm),
+                        CBB_len(&labeled_ikm), salt, salt_len);
+  CBB_cleanup(&labeled_ikm);
+  return ok;
+}
+
+static int hpke_labeled_expand(const EVP_MD *hkdf_md, uint8_t *out_key,
+                               size_t out_len, const uint8_t *prk,
+                               size_t prk_len, const uint8_t *suite_id,
+                               size_t suite_id_len, const char *label,
+                               const uint8_t *info, size_t info_len) {
+  // labeledInfo = concat(I2OSP(L, 2), "RFCXXXX ", suite_id, label, info)
+  CBB labeled_info;
+  int ok = CBB_init(&labeled_info, 0) &&
+           CBB_add_u16(&labeled_info, out_len) &&
+           add_label_string(&labeled_info, kHpkeRfcId) &&
+           CBB_add_bytes(&labeled_info, suite_id, suite_id_len) &&
+           add_label_string(&labeled_info, label) &&
+           CBB_add_bytes(&labeled_info, info, info_len) &&
+           HKDF_expand(out_key, out_len, hkdf_md, prk, prk_len,
+                       CBB_data(&labeled_info), CBB_len(&labeled_info));
+  CBB_cleanup(&labeled_info);
+  return ok;
+}
+
+static int hpke_extract_and_expand(const EVP_MD *hkdf_md, uint8_t *out_key,
+                                   size_t out_len,
+                                   const uint8_t dh[X25519_PUBLIC_VALUE_LEN],
+                                   const uint8_t kem_context[KEM_CONTEXT_LEN]) {
+  uint8_t prk[EVP_MAX_MD_SIZE];
+  size_t prk_len;
+  static const char kEaePrkLabel[] = "eae_prk";
+  if (!hpke_labeled_extract(hkdf_md, prk, &prk_len, NULL, 0, kX25519SuiteID,
+                            sizeof(kX25519SuiteID), kEaePrkLabel, dh,
+                            X25519_PUBLIC_VALUE_LEN)) {
+    return 0;
+  }
+  static const char kPRKExpandLabel[] = "shared_secret";
+  if (!hpke_labeled_expand(hkdf_md, out_key, out_len, prk, prk_len,
+                           kX25519SuiteID, sizeof(kX25519SuiteID),
+                           kPRKExpandLabel, kem_context, KEM_CONTEXT_LEN)) {
+    return 0;
+  }
+  return 1;
+}
+
+static const EVP_AEAD *hpke_get_aead(uint16_t aead_id) {
+  switch (aead_id) {
+    case EVP_HPKE_AEAD_AES_GCM_128:
+      return EVP_aead_aes_128_gcm();
+    case EVP_HPKE_AEAD_AES_GCM_256:
+      return EVP_aead_aes_256_gcm();
+    case EVP_HPKE_AEAD_CHACHA20POLY1305:
+      return EVP_aead_chacha20_poly1305();
+  }
+  OPENSSL_PUT_ERROR(EVP, ERR_R_INTERNAL_ERROR);
+  return NULL;
+}
+
+static const EVP_MD *hpke_get_kdf(uint16_t kdf_id) {
+  switch (kdf_id) {
+    case EVP_HPKE_HKDF_SHA256:
+      return EVP_sha256();
+    case EVP_HPKE_HKDF_SHA384:
+      return EVP_sha384();
+    case EVP_HPKE_HKDF_SHA512:
+      return EVP_sha512();
+  }
+  OPENSSL_PUT_ERROR(EVP, ERR_R_INTERNAL_ERROR);
+  return NULL;
+}
+
+static int hpke_key_schedule(EVP_HPKE_CTX *hpke, uint8_t mode,
+                             const uint8_t *shared_secret,
+                             size_t shared_secret_len, const uint8_t *info,
+                             size_t info_len, const uint8_t *psk,
+                             size_t psk_len, const uint8_t *psk_id,
+                             size_t psk_id_len) {
+  // Verify the PSK inputs.
+  switch (mode) {
+    case HPKE_MODE_BASE:
+      // This is an internal error, unreachable from the caller.
+      assert(psk_len == 0 && psk_id_len == 0);
+      break;
+    case HPKE_MODE_PSK:
+      if (psk_len == 0 || psk_id_len == 0) {
+        OPENSSL_PUT_ERROR(EVP, EVP_R_EMPTY_PSK);
+        return 0;
+      }
+      break;
+    default:
+      return 0;
+  }
+
+  // Attempt to get an EVP_AEAD*.
+  const EVP_AEAD *aead = hpke_get_aead(hpke->aead_id);
+  if (aead == NULL) {
+    return 0;
+  }
+
+  uint8_t suite_id[HPKE_SUITE_ID_LEN];
+  if (!hpke_build_suite_id(suite_id, hpke->kdf_id, hpke->aead_id)) {
+    return 0;
+  }
+
+  // psk_id_hash = LabeledExtract("", "psk_id_hash", psk_id)
+  static const char kPskIdHashLabel[] = "psk_id_hash";
+  uint8_t psk_id_hash[EVP_MAX_MD_SIZE];
+  size_t psk_id_hash_len;
+  if (!hpke_labeled_extract(hpke->hkdf_md, psk_id_hash, &psk_id_hash_len, NULL,
+                            0, suite_id, sizeof(suite_id), kPskIdHashLabel,
+                            psk_id, psk_id_len)) {
+    return 0;
+  }
+
+  // info_hash = LabeledExtract("", "info_hash", info)
+  static const char kInfoHashLabel[] = "info_hash";
+  uint8_t info_hash[EVP_MAX_MD_SIZE];
+  size_t info_hash_len;
+  if (!hpke_labeled_extract(hpke->hkdf_md, info_hash, &info_hash_len, NULL, 0,
+                            suite_id, sizeof(suite_id), kInfoHashLabel, info,
+                            info_len)) {
+    return 0;
+  }
+
+  // key_schedule_context = concat(mode, psk_id_hash, info_hash)
+  uint8_t context[sizeof(uint8_t) + 2 * EVP_MAX_MD_SIZE];
+  size_t context_len;
+  CBB context_cbb;
+  if (!CBB_init_fixed(&context_cbb, context, sizeof(context)) ||
+      !CBB_add_u8(&context_cbb, mode) ||
+      !CBB_add_bytes(&context_cbb, psk_id_hash, psk_id_hash_len) ||
+      !CBB_add_bytes(&context_cbb, info_hash, info_hash_len) ||
+      !CBB_finish(&context_cbb, NULL, &context_len)) {
+    return 0;
+  }
+
+  // psk_hash = LabeledExtract("", "psk_hash", psk)
+  static const char kPskHashLabel[] = "psk_hash";
+  uint8_t psk_hash[EVP_MAX_MD_SIZE];
+  size_t psk_hash_len;
+  if (!hpke_labeled_extract(hpke->hkdf_md, psk_hash, &psk_hash_len, NULL, 0,
+                            suite_id, sizeof(suite_id), kPskHashLabel, psk,
+                            psk_len)) {
+    return 0;
+  }
+
+  // secret = LabeledExtract(psk_hash, "secret", shared_secret)
+  static const char kSecretExtractLabel[] = "secret";
+  uint8_t secret[EVP_MAX_MD_SIZE];
+  size_t secret_len;
+  if (!hpke_labeled_extract(hpke->hkdf_md, secret, &secret_len, psk_hash,
+                            psk_hash_len, suite_id, sizeof(suite_id),
+                            kSecretExtractLabel, shared_secret,
+                            shared_secret_len)) {
+    return 0;
+  }
+
+  // key = LabeledExpand(secret, "key", key_schedule_context, Nk)
+  static const char kKeyExpandLabel[] = "key";
+  uint8_t key[EVP_AEAD_MAX_KEY_LENGTH];
+  const size_t kKeyLen = EVP_AEAD_key_length(aead);
+  if (!hpke_labeled_expand(hpke->hkdf_md, key, kKeyLen, secret, secret_len,
+                           suite_id, sizeof(suite_id), kKeyExpandLabel, context,
+                           context_len)) {
+    return 0;
+  }
+
+  // Initialize the HPKE context's AEAD context, storing a copy of |key|.
+  if (!EVP_AEAD_CTX_init(&hpke->aead_ctx, aead, key, kKeyLen, 0, NULL)) {
+    return 0;
+  }
+
+  // nonce = LabeledExpand(secret, "nonce", key_schedule_context, Nn)
+  static const char kNonceExpandLabel[] = "nonce";
+  if (!hpke_labeled_expand(hpke->hkdf_md, hpke->nonce,
+                           EVP_AEAD_nonce_length(aead), secret, secret_len,
+                           suite_id, sizeof(suite_id), kNonceExpandLabel,
+                           context, context_len)) {
+    return 0;
+  }
+
+  // exporter_secret = LabeledExpand(secret, "exp", key_schedule_context, Nh)
+  static const char kExporterSecretExpandLabel[] = "exp";
+  if (!hpke_labeled_expand(hpke->hkdf_md, hpke->exporter_secret,
+                           EVP_MD_size(hpke->hkdf_md), secret, secret_len,
+                           suite_id, sizeof(suite_id),
+                           kExporterSecretExpandLabel, context, context_len)) {
+    return 0;
+  }
+
+  return 1;
+}
+
+// The number of bytes written to |out_shared_secret| is the size of the KEM's
+// KDF (currently we only support SHA256).
+static int hpke_encap(EVP_HPKE_CTX *hpke,
+                      uint8_t out_shared_secret[SHA256_DIGEST_LENGTH],
+                      const uint8_t public_key_r[X25519_PUBLIC_VALUE_LEN],
+                      const uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN],
+                      const uint8_t ephemeral_public[X25519_PUBLIC_VALUE_LEN]) {
+  uint8_t dh[X25519_PUBLIC_VALUE_LEN];
+  if (!X25519(dh, ephemeral_private, public_key_r)) {
+    OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
+    return 0;
+  }
+
+  uint8_t kem_context[KEM_CONTEXT_LEN];
+  OPENSSL_memcpy(kem_context, ephemeral_public, X25519_PUBLIC_VALUE_LEN);
+  OPENSSL_memcpy(kem_context + X25519_PUBLIC_VALUE_LEN, public_key_r,
+                 X25519_PUBLIC_VALUE_LEN);
+  if (!hpke_extract_and_expand(EVP_sha256(), out_shared_secret,
+                               SHA256_DIGEST_LENGTH, dh, kem_context)) {
+    return 0;
+  }
+  return 1;
+}
+
+static int hpke_decap(const EVP_HPKE_CTX *hpke,
+                      uint8_t out_shared_secret[SHA256_DIGEST_LENGTH],
+                      const uint8_t enc[X25519_PUBLIC_VALUE_LEN],
+                      const uint8_t public_key_r[X25519_PUBLIC_VALUE_LEN],
+                      const uint8_t secret_key_r[X25519_PRIVATE_KEY_LEN]) {
+  uint8_t dh[X25519_PUBLIC_VALUE_LEN];
+  if (!X25519(dh, secret_key_r, enc)) {
+    OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
+    return 0;
+  }
+  uint8_t kem_context[KEM_CONTEXT_LEN];
+  OPENSSL_memcpy(kem_context, enc, X25519_PUBLIC_VALUE_LEN);
+  OPENSSL_memcpy(kem_context + X25519_PUBLIC_VALUE_LEN, public_key_r,
+                 X25519_PUBLIC_VALUE_LEN);
+  if (!hpke_extract_and_expand(EVP_sha256(), out_shared_secret,
+                               SHA256_DIGEST_LENGTH, dh, kem_context)) {
+    return 0;
+  }
+  return 1;
+}
+
+void EVP_HPKE_CTX_init(EVP_HPKE_CTX *ctx) {
+  OPENSSL_memset(ctx, 0, sizeof(EVP_HPKE_CTX));
+  EVP_AEAD_CTX_zero(&ctx->aead_ctx);
+}
+
+void EVP_HPKE_CTX_cleanup(EVP_HPKE_CTX *ctx) {
+  EVP_AEAD_CTX_cleanup(&ctx->aead_ctx);
+}
+
+int EVP_HPKE_CTX_setup_base_s_x25519(
+    EVP_HPKE_CTX *hpke, uint8_t out_enc[X25519_PUBLIC_VALUE_LEN],
+    uint16_t kdf_id, uint16_t aead_id,
+    const uint8_t peer_public_value[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t *info, size_t info_len) {
+  // The GenerateKeyPair() step technically belongs in the KEM's Encap()
+  // function, but we've moved it up a layer to make it easier for tests to
+  // inject an ephemeral keypair.
+  uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN];
+  X25519_keypair(out_enc, ephemeral_private);
+  return EVP_HPKE_CTX_setup_base_s_x25519_for_test(
+      hpke, kdf_id, aead_id, peer_public_value, info, info_len,
+      ephemeral_private, out_enc);
+}
+
+int EVP_HPKE_CTX_setup_base_s_x25519_for_test(
+    EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
+    const uint8_t peer_public_value[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t *info, size_t info_len,
+    const uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN],
+    const uint8_t ephemeral_public[X25519_PUBLIC_VALUE_LEN]) {
+  hpke->is_sender = 1;
+  hpke->kdf_id = kdf_id;
+  hpke->aead_id = aead_id;
+  hpke->hkdf_md = hpke_get_kdf(kdf_id);
+  if (hpke->hkdf_md == NULL) {
+    return 0;
+  }
+  uint8_t shared_secret[SHA256_DIGEST_LENGTH];
+  if (!hpke_encap(hpke, shared_secret, peer_public_value, ephemeral_private,
+                  ephemeral_public) ||
+      !hpke_key_schedule(hpke, HPKE_MODE_BASE, shared_secret,
+                         sizeof(shared_secret), info, info_len, NULL, 0, NULL,
+                         0)) {
+    return 0;
+  }
+  return 1;
+}
+
+int EVP_HPKE_CTX_setup_base_r_x25519(
+    EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
+    const uint8_t enc[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t public_key[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t private_key[X25519_PRIVATE_KEY_LEN], const uint8_t *info,
+    size_t info_len) {
+  hpke->is_sender = 0;
+  hpke->kdf_id = kdf_id;
+  hpke->aead_id = aead_id;
+  hpke->hkdf_md = hpke_get_kdf(kdf_id);
+  if (hpke->hkdf_md == NULL) {
+    return 0;
+  }
+  uint8_t shared_secret[SHA256_DIGEST_LENGTH];
+  if (!hpke_decap(hpke, shared_secret, enc, public_key, private_key) ||
+      !hpke_key_schedule(hpke, HPKE_MODE_BASE, shared_secret,
+                         sizeof(shared_secret), info, info_len, NULL, 0, NULL,
+                         0)) {
+    return 0;
+  }
+  return 1;
+}
+
+int EVP_HPKE_CTX_setup_psk_s_x25519(
+    EVP_HPKE_CTX *hpke, uint8_t out_enc[X25519_PUBLIC_VALUE_LEN],
+    uint16_t kdf_id, uint16_t aead_id,
+    const uint8_t peer_public_value[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t *info, size_t info_len, const uint8_t *psk, size_t psk_len,
+    const uint8_t *psk_id, size_t psk_id_len) {
+  // The GenerateKeyPair() step technically belongs in the KEM's Encap()
+  // function, but we've moved it up a layer to make it easier for tests to
+  // inject an ephemeral keypair.
+  uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN];
+  X25519_keypair(out_enc, ephemeral_private);
+  return EVP_HPKE_CTX_setup_psk_s_x25519_for_test(
+      hpke, kdf_id, aead_id, peer_public_value, info, info_len, psk, psk_len,
+      psk_id, psk_id_len, ephemeral_private, out_enc);
+}
+
+int EVP_HPKE_CTX_setup_psk_s_x25519_for_test(
+    EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
+    const uint8_t peer_public_value[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t *info, size_t info_len, const uint8_t *psk, size_t psk_len,
+    const uint8_t *psk_id, size_t psk_id_len,
+    const uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN],
+    const uint8_t ephemeral_public[X25519_PUBLIC_VALUE_LEN]) {
+  hpke->is_sender = 1;
+  hpke->kdf_id = kdf_id;
+  hpke->aead_id = aead_id;
+  hpke->hkdf_md = hpke_get_kdf(kdf_id);
+  if (hpke->hkdf_md == NULL) {
+    return 0;
+  }
+  uint8_t shared_secret[SHA256_DIGEST_LENGTH];
+  if (!hpke_encap(hpke, shared_secret, peer_public_value, ephemeral_private,
+                  ephemeral_public) ||
+      !hpke_key_schedule(hpke, HPKE_MODE_PSK, shared_secret,
+                         sizeof(shared_secret), info, info_len, psk, psk_len,
+                         psk_id, psk_id_len)) {
+    return 0;
+  }
+  return 1;
+}
+
+int EVP_HPKE_CTX_setup_psk_r_x25519(
+    EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
+    const uint8_t enc[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t public_key[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t private_key[X25519_PRIVATE_KEY_LEN], const uint8_t *info,
+    size_t info_len, const uint8_t *psk, size_t psk_len, const uint8_t *psk_id,
+    size_t psk_id_len) {
+  hpke->is_sender = 0;
+  hpke->kdf_id = kdf_id;
+  hpke->aead_id = aead_id;
+  hpke->hkdf_md = hpke_get_kdf(kdf_id);
+  if (hpke->hkdf_md == NULL) {
+    return 0;
+  }
+  uint8_t shared_secret[SHA256_DIGEST_LENGTH];
+  if (!hpke_decap(hpke, shared_secret, enc, public_key, private_key) ||
+      !hpke_key_schedule(hpke, HPKE_MODE_PSK, shared_secret,
+                         sizeof(shared_secret), info, info_len, psk, psk_len,
+                         psk_id, psk_id_len)) {
+    return 0;
+  }
+  return 1;
+}
+
+static void hpke_nonce(const EVP_HPKE_CTX *hpke, uint8_t *out_nonce,
+                       size_t nonce_len) {
+  assert(nonce_len >= 8);
+
+  // Write padded big-endian bytes of |hpke->seq| to |out_nonce|.
+  OPENSSL_memset(out_nonce, 0, nonce_len);
+  uint64_t seq_copy = hpke->seq;
+  for (size_t i = 0; i < 8; i++) {
+    out_nonce[nonce_len - i - 1] = seq_copy & 0xff;
+    seq_copy >>= 8;
+  }
+
+  // XOR the encoded sequence with the |hpke->nonce|.
+  for (size_t i = 0; i < nonce_len; i++) {
+    out_nonce[i] ^= hpke->nonce[i];
+  }
+}
+
+size_t EVP_HPKE_CTX_max_overhead(const EVP_HPKE_CTX *hpke) {
+  assert(hpke->is_sender);
+  return EVP_AEAD_max_overhead(hpke->aead_ctx.aead);
+}
+
+int EVP_HPKE_CTX_open(EVP_HPKE_CTX *hpke, uint8_t *out, size_t *out_len,
+                      size_t max_out_len, const uint8_t *in, size_t in_len,
+                      const uint8_t *ad, size_t ad_len) {
+  if (hpke->is_sender) {
+    OPENSSL_PUT_ERROR(EVP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+    return 0;
+  }
+  if (hpke->seq == UINT64_MAX) {
+    OPENSSL_PUT_ERROR(EVP, ERR_R_OVERFLOW);
+    return 0;
+  }
+
+  uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
+  const size_t nonce_len = EVP_AEAD_nonce_length(hpke->aead_ctx.aead);
+  hpke_nonce(hpke, nonce, nonce_len);
+
+  if (!EVP_AEAD_CTX_open(&hpke->aead_ctx, out, out_len, max_out_len, nonce,
+                         nonce_len, in, in_len, ad, ad_len)) {
+    return 0;
+  }
+  hpke->seq++;
+  return 1;
+}
+
+int EVP_HPKE_CTX_seal(EVP_HPKE_CTX *hpke, uint8_t *out, size_t *out_len,
+                      size_t max_out_len, const uint8_t *in, size_t in_len,
+                      const uint8_t *ad, size_t ad_len) {
+  if (!hpke->is_sender) {
+    OPENSSL_PUT_ERROR(EVP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+    return 0;
+  }
+  if (hpke->seq == UINT64_MAX) {
+    OPENSSL_PUT_ERROR(EVP, ERR_R_OVERFLOW);
+    return 0;
+  }
+
+  uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
+  const size_t nonce_len = EVP_AEAD_nonce_length(hpke->aead_ctx.aead);
+  hpke_nonce(hpke, nonce, nonce_len);
+
+  if (!EVP_AEAD_CTX_seal(&hpke->aead_ctx, out, out_len, max_out_len, nonce,
+                         nonce_len, in, in_len, ad, ad_len)) {
+    return 0;
+  }
+  hpke->seq++;
+  return 1;
+}
+
+int EVP_HPKE_CTX_export(const EVP_HPKE_CTX *hpke, uint8_t *out,
+                        size_t secret_len, const uint8_t *context,
+                        size_t context_len) {
+  uint8_t suite_id[HPKE_SUITE_ID_LEN];
+  if (!hpke_build_suite_id(suite_id, hpke->kdf_id, hpke->aead_id)) {
+    return 0;
+  }
+  static const char kExportExpandLabel[] = "sec";
+  if (!hpke_labeled_expand(hpke->hkdf_md, out, secret_len,
+                           hpke->exporter_secret, EVP_MD_size(hpke->hkdf_md),
+                           suite_id, sizeof(suite_id), kExportExpandLabel,
+                           context, context_len)) {
+    return 0;
+  }
+  return 1;
+}
diff --git a/src/crypto/hpke/hpke_test.cc b/src/crypto/hpke/hpke_test.cc
new file mode 100644
index 0000000..49c9b06
--- /dev/null
+++ b/src/crypto/hpke/hpke_test.cc
@@ -0,0 +1,492 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#include <cstdint>
+#include <limits>
+#include <string>
+#include <vector>
+
+#include <gtest/gtest.h>
+
+#include <openssl/base.h>
+#include <openssl/curve25519.h>
+#include <openssl/digest.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/sha.h>
+#include <openssl/span.h>
+
+#include "../test/file_test.h"
+#include "../test/test_util.h"
+#include "internal.h"
+
+
+namespace bssl {
+namespace {
+
+enum class HPKEMode {
+  kBase = 0,
+  kPSK = 1,
+};
+
+// HPKETestVector corresponds to one array member in the published
+// test-vectors.json.
+class HPKETestVector {
+ public:
+  explicit HPKETestVector() = default;
+  ~HPKETestVector() = default;
+
+  bool ReadFromFileTest(FileTest *t);
+
+  void Verify() const {
+    ScopedEVP_HPKE_CTX sender_ctx;
+    ScopedEVP_HPKE_CTX receiver_ctx;
+
+    switch (mode_) {
+      case HPKEMode::kBase:
+        ASSERT_GT(secret_key_e_.size(), 0u);
+        ASSERT_EQ(psk_.size(), 0u);
+        ASSERT_EQ(psk_id_.size(), 0u);
+
+        // Set up the sender.
+        ASSERT_TRUE(EVP_HPKE_CTX_setup_base_s_x25519_for_test(
+            sender_ctx.get(), kdf_id_, aead_id_, public_key_r_.data(),
+            info_.data(), info_.size(), secret_key_e_.data(),
+            public_key_e_.data()));
+
+        // Set up the receiver.
+        ASSERT_TRUE(EVP_HPKE_CTX_setup_base_r_x25519(
+            receiver_ctx.get(), kdf_id_, aead_id_, public_key_e_.data(),
+            public_key_r_.data(), secret_key_r_.data(), info_.data(),
+            info_.size()));
+        break;
+
+      case HPKEMode::kPSK:
+        ASSERT_GT(secret_key_e_.size(), 0u);
+        ASSERT_GT(psk_.size(), 0u);
+        ASSERT_GT(psk_id_.size(), 0u);
+
+        // Set up the sender.
+        ASSERT_TRUE(EVP_HPKE_CTX_setup_psk_s_x25519_for_test(
+            sender_ctx.get(), kdf_id_, aead_id_, public_key_r_.data(),
+            info_.data(), info_.size(), psk_.data(), psk_.size(),
+            psk_id_.data(), psk_id_.size(), secret_key_e_.data(),
+            public_key_e_.data()));
+
+        // Set up the receiver.
+        ASSERT_TRUE(EVP_HPKE_CTX_setup_psk_r_x25519(
+            receiver_ctx.get(), kdf_id_, aead_id_, public_key_e_.data(),
+            public_key_r_.data(), secret_key_r_.data(), info_.data(),
+            info_.size(), psk_.data(), psk_.size(), psk_id_.data(),
+            psk_id_.size()));
+        break;
+      default:
+        FAIL() << "Unsupported mode";
+        return;
+    }
+
+    VerifyEncryptions(sender_ctx.get(), receiver_ctx.get());
+    VerifyExports(sender_ctx.get());
+    VerifyExports(receiver_ctx.get());
+  }
+
+ private:
+  void VerifyEncryptions(EVP_HPKE_CTX *sender_ctx,
+                         EVP_HPKE_CTX *receiver_ctx) const {
+    for (const Encryption &task : encryptions_) {
+      std::vector<uint8_t> encrypted(task.plaintext.size() +
+                                     EVP_HPKE_CTX_max_overhead(sender_ctx));
+      size_t encrypted_len;
+      ASSERT_TRUE(EVP_HPKE_CTX_seal(
+          sender_ctx, encrypted.data(), &encrypted_len, encrypted.size(),
+          task.plaintext.data(), task.plaintext.size(), task.aad.data(),
+          task.aad.size()));
+
+      ASSERT_EQ(Bytes(encrypted.data(), encrypted_len), Bytes(task.ciphertext));
+
+      std::vector<uint8_t> decrypted(task.ciphertext.size());
+      size_t decrypted_len;
+      ASSERT_TRUE(EVP_HPKE_CTX_open(
+          receiver_ctx, decrypted.data(), &decrypted_len, decrypted.size(),
+          task.ciphertext.data(), task.ciphertext.size(), task.aad.data(),
+          task.aad.size()));
+
+      ASSERT_EQ(Bytes(decrypted.data(), decrypted_len), Bytes(task.plaintext));
+    }
+  }
+
+  void VerifyExports(EVP_HPKE_CTX *ctx) const {
+    for (const Export &task : exports_) {
+      std::vector<uint8_t> exported_secret(task.exportLength);
+
+      ASSERT_TRUE(EVP_HPKE_CTX_export(
+          ctx, exported_secret.data(), exported_secret.size(),
+          task.exportContext.data(), task.exportContext.size()));
+      ASSERT_EQ(Bytes(exported_secret), Bytes(task.exportValue));
+    }
+  }
+
+  struct Encryption {
+    std::vector<uint8_t> aad;
+    std::vector<uint8_t> ciphertext;
+    std::vector<uint8_t> plaintext;
+  };
+
+  struct Export {
+    std::vector<uint8_t> exportContext;
+    size_t exportLength;
+    std::vector<uint8_t> exportValue;
+  };
+
+  HPKEMode mode_;
+  uint16_t kdf_id_;
+  uint16_t aead_id_;
+  std::vector<uint8_t> context_;
+  std::vector<uint8_t> info_;
+  std::vector<uint8_t> public_key_e_;
+  std::vector<uint8_t> secret_key_e_;
+  std::vector<uint8_t> public_key_r_;
+  std::vector<uint8_t> secret_key_r_;
+  std::vector<Encryption> encryptions_;
+  std::vector<Export> exports_;
+  std::vector<uint8_t> psk_;     // Empty when mode is not PSK.
+  std::vector<uint8_t> psk_id_;  // Empty when mode is not PSK.
+};
+
+// Match FileTest's naming scheme for duplicated attribute names.
+std::string BuildAttrName(const std::string &name, int iter) {
+  return iter == 1 ? name : name + "/" + std::to_string(iter);
+}
+
+// Parses |s| as an unsigned integer of type T and writes the value to |out|.
+// Returns true on success. If the integer value exceeds the maximum T value,
+// returns false.
+template <typename T>
+bool ParseIntSafe(T *out, const std::string &s) {
+  T value = 0;
+  for (char c : s) {
+    if (c < '0' || c > '9') {
+      return false;
+    }
+    if (value > (std::numeric_limits<T>::max() - (c - '0')) / 10) {
+      return false;
+    }
+    value = 10 * value + (c - '0');
+  }
+  *out = value;
+  return true;
+}
+
+// Read the |key| attribute from |file_test| and convert it to an integer.
+template <typename T>
+bool FileTestReadInt(FileTest *file_test, T *out, const std::string &key) {
+  std::string s;
+  return file_test->GetAttribute(&s, key) && ParseIntSafe(out, s);
+}
+
+
+bool HPKETestVector::ReadFromFileTest(FileTest *t) {
+  uint8_t mode_tmp;
+  if (!FileTestReadInt(t, &mode_tmp, "mode")) {
+    return false;
+  }
+  mode_ = static_cast<HPKEMode>(mode_tmp);
+
+  if (!FileTestReadInt(t, &kdf_id_, "kdf_id") ||
+      !FileTestReadInt(t, &aead_id_, "aead_id") ||
+      !t->GetBytes(&info_, "info") ||
+      !t->GetBytes(&secret_key_r_, "skRm") ||
+      !t->GetBytes(&public_key_r_, "pkRm") ||
+      !t->GetBytes(&secret_key_e_, "skEm") ||
+      !t->GetBytes(&public_key_e_, "pkEm")) {
+    return false;
+  }
+
+  if (mode_ == HPKEMode::kPSK) {
+    if (!t->GetBytes(&psk_, "psk") ||
+        !t->GetBytes(&psk_id_, "psk_id")) {
+      return false;
+    }
+  }
+
+  for (int i = 1; t->HasAttribute(BuildAttrName("aad", i)); i++) {
+    Encryption encryption;
+    if (!t->GetBytes(&encryption.aad, BuildAttrName("aad", i)) ||
+        !t->GetBytes(&encryption.ciphertext, BuildAttrName("ciphertext", i)) ||
+        !t->GetBytes(&encryption.plaintext, BuildAttrName("plaintext", i))) {
+      return false;
+    }
+    encryptions_.push_back(std::move(encryption));
+  }
+
+  for (int i = 1; t->HasAttribute(BuildAttrName("exportContext", i)); i++) {
+    Export exp;
+    if (!t->GetBytes(&exp.exportContext, BuildAttrName("exportContext", i)) ||
+        !FileTestReadInt(t, &exp.exportLength,
+                         BuildAttrName("exportLength", i)) ||
+        !t->GetBytes(&exp.exportValue, BuildAttrName("exportValue", i))) {
+      return false;
+    }
+    exports_.push_back(std::move(exp));
+  }
+  return true;
+}
+
+}  // namespace
+
+TEST(HPKETest, VerifyTestVectors) {
+  FileTestGTest("crypto/hpke/hpke_test_vectors.txt", [](FileTest *t) {
+    HPKETestVector test_vec;
+    EXPECT_TRUE(test_vec.ReadFromFileTest(t));
+    test_vec.Verify();
+  });
+}
+
+// The test vectors used fixed sender ephemeral keys, while HPKE itself
+// generates new keys for each context. Test this codepath by checking we can
+// decrypt our own messages.
+TEST(HPKETest, RoundTrip) {
+  uint16_t kdf_ids[] = {EVP_HPKE_HKDF_SHA256, EVP_HPKE_HKDF_SHA384,
+                        EVP_HPKE_HKDF_SHA512};
+  uint16_t aead_ids[] = {EVP_HPKE_AEAD_AES_GCM_128, EVP_HPKE_AEAD_AES_GCM_256,
+                         EVP_HPKE_AEAD_CHACHA20POLY1305};
+
+  const uint8_t info_a[] = {1, 1, 2, 3, 5, 8};
+  const uint8_t info_b[] = {42, 42, 42};
+  const uint8_t ad_a[] = {1, 2, 4, 8, 16};
+  const uint8_t ad_b[] = {7};
+  Span<const uint8_t> info_values[] = {{nullptr, 0}, info_a, info_b};
+  Span<const uint8_t> ad_values[] = {{nullptr, 0}, ad_a, ad_b};
+
+  // Generate the receiver's keypair.
+  uint8_t secret_key_r[X25519_PRIVATE_KEY_LEN];
+  uint8_t public_key_r[X25519_PUBLIC_VALUE_LEN];
+  X25519_keypair(public_key_r, secret_key_r);
+
+  for (uint16_t kdf_id : kdf_ids) {
+    for (uint16_t aead_id : aead_ids) {
+      for (const Span<const uint8_t> &info : info_values) {
+        for (const Span<const uint8_t> &ad : ad_values) {
+          // Set up the sender.
+          ScopedEVP_HPKE_CTX sender_ctx;
+          uint8_t enc[X25519_PUBLIC_VALUE_LEN];
+          ASSERT_TRUE(EVP_HPKE_CTX_setup_base_s_x25519(
+              sender_ctx.get(), enc, kdf_id, aead_id, public_key_r, info.data(),
+              info.size()));
+
+          // Set up the receiver.
+          ScopedEVP_HPKE_CTX receiver_ctx;
+          ASSERT_TRUE(EVP_HPKE_CTX_setup_base_r_x25519(
+              receiver_ctx.get(), kdf_id, aead_id, enc, public_key_r,
+              secret_key_r, info.data(), info.size()));
+
+          const char kCleartextPayload[] = "foobar";
+
+          // Have sender encrypt message for the receiver.
+          std::vector<uint8_t> ciphertext(
+              sizeof(kCleartextPayload) +
+              EVP_HPKE_CTX_max_overhead(sender_ctx.get()));
+          size_t ciphertext_len;
+          ASSERT_TRUE(EVP_HPKE_CTX_seal(
+              sender_ctx.get(), ciphertext.data(), &ciphertext_len,
+              ciphertext.size(),
+              reinterpret_cast<const uint8_t *>(kCleartextPayload),
+              sizeof(kCleartextPayload), ad.data(), ad.size()));
+
+          // Have receiver decrypt the message.
+          std::vector<uint8_t> cleartext(ciphertext.size());
+          size_t cleartext_len;
+          ASSERT_TRUE(EVP_HPKE_CTX_open(receiver_ctx.get(), cleartext.data(),
+                                        &cleartext_len, cleartext.size(),
+                                        ciphertext.data(), ciphertext_len,
+                                        ad.data(), ad.size()));
+
+          // Verify that decrypted message matches the original.
+          ASSERT_EQ(Bytes(cleartext.data(), cleartext_len),
+                    Bytes(kCleartextPayload, sizeof(kCleartextPayload)));
+        }
+      }
+    }
+  }
+}
+
+// Verify that the DH operations inside Encap() and Decap() both fail when the
+// public key is on a small-order point in the curve.
+TEST(HPKETest, X25519EncapSmallOrderPoint) {
+  // Borrowed from X25519Test.SmallOrder.
+  static const uint8_t kSmallOrderPoint[32] = {
+      0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae, 0x16, 0x56, 0xe3,
+      0xfa, 0xf1, 0x9f, 0xc4, 0x6a, 0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32,
+      0xb1, 0xfd, 0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8,
+  };
+
+  // Generate a valid keypair for the receiver.
+  uint8_t secret_key_r[X25519_PRIVATE_KEY_LEN];
+  uint8_t public_key_r[X25519_PUBLIC_VALUE_LEN];
+  X25519_keypair(public_key_r, secret_key_r);
+
+  uint16_t kdf_ids[] = {EVP_HPKE_HKDF_SHA256, EVP_HPKE_HKDF_SHA384,
+                        EVP_HPKE_HKDF_SHA512};
+  uint16_t aead_ids[] = {EVP_HPKE_AEAD_AES_GCM_128, EVP_HPKE_AEAD_AES_GCM_256,
+                         EVP_HPKE_AEAD_CHACHA20POLY1305};
+
+  for (uint16_t kdf_id : kdf_ids) {
+    for (uint16_t aead_id : aead_ids) {
+      // Set up the sender, passing in kSmallOrderPoint as |peer_public_value|.
+      ScopedEVP_HPKE_CTX sender_ctx;
+      uint8_t enc[X25519_PUBLIC_VALUE_LEN];
+      ASSERT_FALSE(EVP_HPKE_CTX_setup_base_s_x25519(
+          sender_ctx.get(), enc, kdf_id, aead_id, kSmallOrderPoint, nullptr,
+          0));
+
+      // Set up the receiver, passing in kSmallOrderPoint as |enc|.
+      ScopedEVP_HPKE_CTX receiver_ctx;
+      ASSERT_FALSE(EVP_HPKE_CTX_setup_base_r_x25519(
+          receiver_ctx.get(), kdf_id, aead_id, kSmallOrderPoint, public_key_r,
+          secret_key_r, nullptr, 0));
+    }
+  }
+}
+
+// Test that Seal() fails when the context has been initialized as a receiver.
+TEST(HPKETest, ReceiverInvalidSeal) {
+  const uint8_t kMockEnc[X25519_PUBLIC_VALUE_LEN] = {0xff};
+  const char kCleartextPayload[] = "foobar";
+
+  // Generate the receiver's keypair.
+  uint8_t secret_key_r[X25519_PRIVATE_KEY_LEN];
+  uint8_t public_key_r[X25519_PUBLIC_VALUE_LEN];
+  X25519_keypair(public_key_r, secret_key_r);
+
+  // Set up the receiver.
+  ScopedEVP_HPKE_CTX receiver_ctx;
+  ASSERT_TRUE(EVP_HPKE_CTX_setup_base_r_x25519(
+      receiver_ctx.get(), EVP_HPKE_HKDF_SHA256, EVP_HPKE_AEAD_AES_GCM_128,
+      kMockEnc, public_key_r, secret_key_r, nullptr, 0));
+
+  // Call Seal() on the receiver.
+  size_t ciphertext_len;
+  uint8_t ciphertext[100];
+  ASSERT_FALSE(EVP_HPKE_CTX_seal(
+      receiver_ctx.get(), ciphertext, &ciphertext_len, sizeof(ciphertext),
+      reinterpret_cast<const uint8_t *>(kCleartextPayload),
+      sizeof(kCleartextPayload), nullptr, 0));
+}
+
+// Test that Open() fails when the context has been initialized as a sender.
+TEST(HPKETest, SenderInvalidOpen) {
+  const uint8_t kMockCiphertext[100] = {0xff};
+  const size_t kMockCiphertextLen = 80;
+
+  // Generate the receiver's keypair.
+  uint8_t secret_key_r[X25519_PRIVATE_KEY_LEN];
+  uint8_t public_key_r[X25519_PUBLIC_VALUE_LEN];
+  X25519_keypair(public_key_r, secret_key_r);
+
+  // Set up the sender.
+  ScopedEVP_HPKE_CTX sender_ctx;
+  uint8_t enc[X25519_PUBLIC_VALUE_LEN];
+  ASSERT_TRUE(EVP_HPKE_CTX_setup_base_s_x25519(
+      sender_ctx.get(), enc, EVP_HPKE_HKDF_SHA256, EVP_HPKE_AEAD_AES_GCM_128,
+      public_key_r, nullptr, 0));
+
+  // Call Open() on the sender.
+  uint8_t cleartext[128];
+  size_t cleartext_len;
+  ASSERT_FALSE(EVP_HPKE_CTX_open(sender_ctx.get(), cleartext, &cleartext_len,
+                                 sizeof(cleartext), kMockCiphertext,
+                                 kMockCiphertextLen, nullptr, 0));
+}
+
+// Test that the PSK variants of Setup functions fail when any of the PSK inputs
+// are empty.
+TEST(HPKETest, EmptyPSK) {
+  const uint8_t kMockEnc[X25519_PUBLIC_VALUE_LEN] = {0xff};
+  const uint8_t kMockPSK[100] = {0xff};
+  const bssl::Span<const uint8_t> kPSKValues[] = {
+      {kMockPSK, sizeof(kMockPSK)},
+      {nullptr, 0},
+  };
+
+  // Generate the receiver's keypair.
+  uint8_t secret_key_r[X25519_PRIVATE_KEY_LEN];
+  uint8_t public_key_r[X25519_PUBLIC_VALUE_LEN];
+  X25519_keypair(public_key_r, secret_key_r);
+
+  // Vary the PSK and PSKID inputs for the sender and receiver, trying all four
+  // permutations of empty and nonempty inputs.
+
+  for (const auto psk : kPSKValues) {
+    for (const auto psk_id : kPSKValues) {
+      const bool kExpectSuccess = psk.size() > 0 && psk_id.size() > 0;
+
+      ASSERT_EQ(ERR_get_error(), 0u);
+
+      ScopedEVP_HPKE_CTX sender_ctx;
+      uint8_t enc[X25519_PUBLIC_VALUE_LEN];
+      ASSERT_EQ(EVP_HPKE_CTX_setup_psk_s_x25519(
+                    sender_ctx.get(), enc, EVP_HPKE_HKDF_SHA256,
+                    EVP_HPKE_AEAD_AES_GCM_128, public_key_r, nullptr, 0,
+                    psk.data(), psk.size(), psk_id.data(), psk_id.size()),
+                kExpectSuccess);
+
+      if (!kExpectSuccess) {
+        uint32_t err = ERR_get_error();
+        EXPECT_EQ(ERR_LIB_EVP, ERR_GET_LIB(err));
+        EXPECT_EQ(EVP_R_EMPTY_PSK, ERR_GET_REASON(err));
+      }
+      ERR_clear_error();
+
+      ScopedEVP_HPKE_CTX receiver_ctx;
+      ASSERT_EQ(
+          EVP_HPKE_CTX_setup_psk_r_x25519(
+              receiver_ctx.get(), EVP_HPKE_HKDF_SHA256,
+              EVP_HPKE_AEAD_AES_GCM_128, kMockEnc, public_key_r, secret_key_r,
+              nullptr, 0, psk.data(), psk.size(), psk_id.data(), psk_id.size()),
+          kExpectSuccess);
+
+      if (!kExpectSuccess) {
+        uint32_t err = ERR_get_error();
+        EXPECT_EQ(ERR_LIB_EVP, ERR_GET_LIB(err));
+        EXPECT_EQ(EVP_R_EMPTY_PSK, ERR_GET_REASON(err));
+      }
+      ERR_clear_error();
+    }
+  }
+}
+
+TEST(HPKETest, InternalParseIntSafe) {
+  uint8_t u8 = 0xff;
+  ASSERT_FALSE(ParseIntSafe(&u8, "-1"));
+
+  ASSERT_TRUE(ParseIntSafe(&u8, "0"));
+  ASSERT_EQ(u8, 0);
+
+  ASSERT_TRUE(ParseIntSafe(&u8, "255"));
+  ASSERT_EQ(u8, 255);
+
+  ASSERT_FALSE(ParseIntSafe(&u8, "256"));
+
+  uint16_t u16 = 0xffff;
+  ASSERT_TRUE(ParseIntSafe(&u16, "257"));
+  ASSERT_EQ(u16, 257);
+
+  ASSERT_TRUE(ParseIntSafe(&u16, "65535"));
+  ASSERT_EQ(u16, 65535);
+
+  ASSERT_FALSE(ParseIntSafe(&u16, "65536"));
+}
+
+
+}  // namespace bssl
diff --git a/src/crypto/hpke/hpke_test_vectors.txt b/src/crypto/hpke/hpke_test_vectors.txt
new file mode 100644
index 0000000..9d787e9
--- /dev/null
+++ b/src/crypto/hpke/hpke_test_vectors.txt
@@ -0,0 +1,839 @@
+mode = 0
+kdf_id = 1
+aead_id = 1
+info = 4f6465206f6e2061204772656369616e2055726e
+skRm = 5a8aa0d2476b28521588e0c704b14db82cdd4970d340d293a9576deaee9ec1c7
+skEm = 8c490e5b0c7dbe0c6d2192484d2b7a0423b3b4544f2481095a99dbf238fb350f
+pkRm = 8756e2580c07c1d2ffcb662f5fadc6d6ff13da85abd7adfecf984aaa102c1269
+pkEm = 8a07563949fac6232936ed6f36c4fa735930ecdeaef6734e314aeac35a56fd0a
+# encryptions[0]
+aad = 436f756e742d30
+ciphertext = 971ba65db526758ea30ae748cd769bc8d90579b62a037816057f24ce427416bd47c05ed1c2446ac8e19ec9ae79
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[1]
+aad = 436f756e742d31
+ciphertext = f18f1ec397667ca069b9a6ee0bebf0890cd5caa34bb9875b3600ca0142cba774dd35f2aafd79a02a08ca5f2806
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[2]
+aad = 436f756e742d32
+ciphertext = 51a8dea350fe6e753f743ec17c956de4cbdfa35f3018fc6a12752c51d1372c5093959f18c7253da9c953c6cfbe
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[3]
+aad = 436f756e742d33
+ciphertext = ee2c9cb45a5088256b061a28b528fcd252d2a014d73523bf3ffb0c8687d9996ec6fb69c487a0b62fbc45b04ccb
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[4]
+aad = 436f756e742d34
+ciphertext = 2e5fa3a358e3ab64e5e981c4b89b5ae4cc5b800aaf726dc64ff857536a3db0e6d816199e711aac60c4670c2a31
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[5]
+aad = 436f756e742d35
+ciphertext = d2d0d40c685b3646527da571ff9bb23eee8d0f124a2ab937ad9aacb314209ba150b12bce3be844a414b2b81e15
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[6]
+aad = 436f756e742d36
+ciphertext = 107b5d77e79b423ddc8feb4f1d42094244d9363b1157e2a46de9b192d1ebaf6053164878a8e9f3ab6c87260355
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[7]
+aad = 436f756e742d37
+ciphertext = 64b5285667328e0fa12c51e282eb4d446c69404944134958dcbee1b947ce413eaff910146f2ae47586055c05ec
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[8]
+aad = 436f756e742d38
+ciphertext = 89dd974790c8491cd5539f51537708bd2cbf4d6e0322637fb4dbe6008e6f59b75e3c527587cfefdb37ca68e6cd
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[9]
+aad = 436f756e742d39
+ciphertext = e84394b6142059384e270407a6360760827eba0e90c0d2dfd8d6170eed7667cf933fb9854ab766cede7306bda3
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# exports[0]
+exportContext = 436f6e746578742d30
+exportLength = 32
+exportValue = 0df04ac640d34a56561419bab20a68e6b7331070208004f89c7b973f4c472e92
+# exports[1]
+exportContext = 436f6e746578742d31
+exportLength = 32
+exportValue = 723c2c8f80e6b827e72bd8e80973a801a05514afe3d4bc46e82e505dceb953aa
+# exports[2]
+exportContext = 436f6e746578742d32
+exportLength = 32
+exportValue = 38010c7d5d81093a11b55e2403a258e9a195bcf066817b332dd996b0a9bcbc9a
+# exports[3]
+exportContext = 436f6e746578742d33
+exportLength = 32
+exportValue = ebf6ab4c3186131de9b2c3c0bc3e2ad21dfcbc4efaf050cd0473f5b1535a8b6d
+# exports[4]
+exportContext = 436f6e746578742d34
+exportLength = 32
+exportValue = c4823eeb3efd2d5216b2d3b16e542bf57470dc9b9ea9af6bce85b151a3589d90
+
+mode = 1
+kdf_id = 1
+aead_id = 1
+info = 4f6465206f6e2061204772656369616e2055726e
+skRm = 4b41ef269169090551fcea177ecdf622bca86d82298e21cd93119b804ccc5eab
+skEm = e7d2b539792a48a24451303ccd0cfe77176b6cb06823c439edfd217458a1398a
+pkRm = a5c85773bed3a831e7096f7df4ff5d1d8bac48fc97bfac366141efab91892a3a
+pkEm = 08d39d3e7f9b586341b6004dafba9679d2bd9340066edb247e3e919013efcd0f
+psk = 5db3b80a81cb63ca59470c83414ef70a
+psk_id = 456e6e796e20447572696e206172616e204d6f726961
+# encryptions[0]
+aad = 436f756e742d30
+ciphertext = fb68f911b4e4033d1547f646ea30c9cee987fb4b4a8c30918e5de6e96de32fc63466f2fc05e09aeff552489741
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[1]
+aad = 436f756e742d31
+ciphertext = 85e7472fbb7e2341af35fb2a0795df9a85caa99a8f584056b11d452bc160470672e297f9892ce2c5020e794ae1
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[2]
+aad = 436f756e742d32
+ciphertext = 74229b7491102bcf94cf7633888bc48baa4e5a73cc544bfad4ff61585506facb44b359ade03c0b2b35c6430e4c
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[3]
+aad = 436f756e742d33
+ciphertext = 013476197af9440a8be89a0cf7d3802eae519d5f5b39cb600e8b285e16ad90c3d903f6108946616723e9a93b73
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[4]
+aad = 436f756e742d34
+ciphertext = 5aeb09a3798d21dc2ca01f5c255624c9c8c20d75d79d19269eca7b280be0cb7851fae82b646bd5673d10368276
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[5]
+aad = 436f756e742d35
+ciphertext = e9cac48b89f3f8898a85562007854b9f61bdf2d2c3e32e9b6162e9fa2f83924d138194528946d96cf7988685a0
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[6]
+aad = 436f756e742d36
+ciphertext = 2aa76414e0cb28ba7ba0f24d800bc4fec24d51cd1f75e839233ee10610bda97f3daf46fadb53ca01762bbe8a04
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[7]
+aad = 436f756e742d37
+ciphertext = 96148b343eb53df8d528af57214e65de028461ac69f2d9e371cb0aa4d732201d693766a17fd49ec6025bc98705
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[8]
+aad = 436f756e742d38
+ciphertext = 39b7e966e0ada05d8cd8a9beb5765941baad38473f18f705443f882a207ff96bfe1c71ae386e97e2fa91960bbe
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[9]
+aad = 436f756e742d39
+ciphertext = 25bd0d0614a38b19a05dff783a1bbd003c25cade55ba0e24e234b803991cae60ba7d105d35e47519a8cf598580
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# exports[0]
+exportContext = 436f6e746578742d30
+exportLength = 32
+exportValue = bd292b132fae00243851451c3f3a87e9e11c3293c14d61b114b7e12e07245ffd
+# exports[1]
+exportContext = 436f6e746578742d31
+exportLength = 32
+exportValue = 695de26bc9336caee01cb04826f6e224f4d2108066ab17fc18f0c993dce05f24
+# exports[2]
+exportContext = 436f6e746578742d32
+exportLength = 32
+exportValue = c53f26ef1bf4f5fd5469d807c418a0e103d035c76ccdbc6afb5bc42b24968f6c
+# exports[3]
+exportContext = 436f6e746578742d33
+exportLength = 32
+exportValue = 8cea4a595dfe3de84644ca8ea7ea9401a345f0db29bb4beebc2c471afc602ec4
+# exports[4]
+exportContext = 436f6e746578742d34
+exportLength = 32
+exportValue = e6313f12f6c2054c69018f273211c54fcf2439d90173392eaa34b4caac929068
+
+mode = 0
+kdf_id = 1
+aead_id = 2
+info = 4f6465206f6e2061204772656369616e2055726e
+skRm = d7f9945b55b697a7452105630095894758508599694f401aaaed77a88364b8a1
+skEm = dfe953241ce3e4bd96b6f7421124136a3203aaa239fda95352eab223e821677d
+pkRm = f14d42cde2eaac0eb8e36c4658b927791941d6e2aefb8435d722b5fac3d3a842
+pkEm = 97f8c9d24e6fc9f26de91a180fc2368b43aa7464185e3618d43bb341fb83b75b
+# encryptions[0]
+aad = 436f756e742d30
+ciphertext = 922b657481e80bf18b8814a435d31c776759859e8ca40884157247c0cbed07bcbd3c22ed029a50da93d08fa065
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[1]
+aad = 436f756e742d31
+ciphertext = 5b6efad025ff8edee5cee6b32f161cb33f2ba397469e9b35a48f9bad8a7a9dd2522748f68a1d64521d79097901
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[2]
+aad = 436f756e742d32
+ciphertext = a2039f9c4b3cf3a71ecf972c55541ae1bef3931a73d98c5178d8f2bbe0c0f56e058077719fc4e63a882f104f64
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[3]
+aad = 436f756e742d33
+ciphertext = ac3967baf9b52e321eecc638ef42c53a7502b60890ac84200a1580bd825d4f89e83c2710c136e56644784f1a71
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[4]
+aad = 436f756e742d34
+ciphertext = cfe4cca91ae9bf4e3c6cfd5d3ab777cda301041ab8c695388f94bb883763b3f0dd85dfaf483c117549176107e8
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[5]
+aad = 436f756e742d35
+ciphertext = 721543123239a19a8242c8aab8aa997c04d758fc7819930dda8633dbdc5af5e33c5a451f3d8cd1691e3eb28310
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[6]
+aad = 436f756e742d36
+ciphertext = ef970051362035083bdf24d2262d5a597f4361922eace58811df54c3dc12fc6622f853e4dec8b483178f61567e
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[7]
+aad = 436f756e742d37
+ciphertext = c5653e7a823bdf8d083e3fbdd7c9b9c2838c80cbfcd6d1adfd18d237f43a02d5a83c3808c1d4b4451dbbed5f98
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[8]
+aad = 436f756e742d38
+ciphertext = 04278bdacd59166890abb0f67a19c577acb0b108801db93fba1e271522f98d43c2c2fcac66378d174463c146ee
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[9]
+aad = 436f756e742d39
+ciphertext = c0a4e4e239d9c59d61fa2809fc47476941b53b262d95aa14bf29ea24b6de10783148e2762d8900640d2798f255
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# exports[0]
+exportContext = 436f6e746578742d30
+exportLength = 32
+exportValue = de705a4b13a12250f4d5487de67705190737e6d1ba8b57f70d87ba585ea1cf85
+# exports[1]
+exportContext = 436f6e746578742d31
+exportLength = 32
+exportValue = f4e86ab469491b2a7ad91d17ddb8964884a114549f63d0985355d9b844dacd4c
+# exports[2]
+exportContext = 436f6e746578742d32
+exportLength = 32
+exportValue = 47c20438e2a2fbca12b2ac55c2cccb1ff5ef0907c80ead4bd36ab1a10d57fb2e
+# exports[3]
+exportContext = 436f6e746578742d33
+exportLength = 32
+exportValue = ae7cd43f0d52ee38ac4655d5f2d191fd8ec573ab1d47702684dfea85b52b5a38
+# exports[4]
+exportContext = 436f6e746578742d34
+exportLength = 32
+exportValue = 807d14a692749503f44e54660e8ebe4e93311715b9ba7d540973b2bb3c606825
+
+mode = 1
+kdf_id = 1
+aead_id = 2
+info = 4f6465206f6e2061204772656369616e2055726e
+skRm = cb798ffb68e7b3db33913c365bf45a811fca8382522ac8815b12b26d3377a049
+skEm = bf3981d4d9b43ea83365747e25d8ba71e14d21cca47e35e70b5311e1d48f8a0d
+pkRm = 4a9269e9db60008f5c7f3c7d39bb8c4923bc2f244b3ed9085191ef54cd10cf0c
+pkEm = 8f65c9f75b4b774d36052dfac0bdd37a03f309b92c9a9ca47e903683be34d04d
+psk = 5db3b80a81cb63ca59470c83414ef70a
+psk_id = 456e6e796e20447572696e206172616e204d6f726961
+# encryptions[0]
+aad = 436f756e742d30
+ciphertext = ad2a3e08e10413e7bdf9e89f2db169338fc68bcf8dc7bb073ca779024996de5922d338cf8407d34109cd2fdccf
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[1]
+aad = 436f756e742d31
+ciphertext = d7c94516707aef83e37dc5cbe3e9668260de5954899d54e8ecab3f1cfba8556557f1ff2238f817e0eb75d3cbb7
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[2]
+aad = 436f756e742d32
+ciphertext = 371412a9a86704990e8d7170282134096fc623c74411d5ff95380692a74c438deb0e38f41bfba0562042e987a0
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[3]
+aad = 436f756e742d33
+ciphertext = 4e3486ffca6d42f064c885d169210f6fcce2b3d4981d185d4b1a5c1e82733c14f14fcb8b1f16dd1e7b707907ab
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[4]
+aad = 436f756e742d34
+ciphertext = 45f532caeed9f6c35a990812773cfd688f686288dfcb500ae04f8fac4d3704204bb051e704c422edcc3107737b
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[5]
+aad = 436f756e742d35
+ciphertext = 1c0aee5fa393a0c4e2dbd70f7ce475542c71fd402b6fb8431855ac8fbafc6801c777996f8243c53a7d96d131c8
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[6]
+aad = 436f756e742d36
+ciphertext = 66cd0eeb97fc59c1863898f9b7f1f67c82c5aede5794c17937f5e0909641af770c4973aec2a21967c0f17a64ba
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[7]
+aad = 436f756e742d37
+ciphertext = c96bb3363b31b582476239e1eb0792d2ac632ddaa7a1dc9ac7f9d588b62970016040a278e448256f5bbbf09ed7
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[8]
+aad = 436f756e742d38
+ciphertext = 71b3055db5efe1165e685d25c4a749b6fdf8cb7a59f7e3e76cfbf63c109db9387fc751cc9c36cf886dd0f79411
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[9]
+aad = 436f756e742d39
+ciphertext = 14372e32a6dee0536a11b66343eb436c099d7adf658900fa624a45d6f1a8e84297c56ec6e05b2745605dfcd99e
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# exports[0]
+exportContext = 436f6e746578742d30
+exportLength = 32
+exportValue = c52ecbb65af1c6764ce7d2fd1131d5f050ee2f943a4fe56e9c855b44385b00cf
+# exports[1]
+exportContext = 436f6e746578742d31
+exportLength = 32
+exportValue = 42c5cf4f81152d05bacc9323e805eab8e429850dd029937c2c42f17ce7fea09b
+# exports[2]
+exportContext = 436f6e746578742d32
+exportLength = 32
+exportValue = 89d7f97327d51d61a4ac04b2507e51a977c8706bd932941f5acf1f542cfd034b
+# exports[3]
+exportContext = 436f6e746578742d33
+exportLength = 32
+exportValue = 581e3a66a1ad5309c3295825bc03407c7d9e34673e61aed2c543b47764577783
+# exports[4]
+exportContext = 436f6e746578742d34
+exportLength = 32
+exportValue = 599f10537288a9ec87d53c16aaa5881715061e6152a5b51b1e0433a396b38d10
+
+mode = 0
+kdf_id = 1
+aead_id = 3
+info = 4f6465206f6e2061204772656369616e2055726e
+skRm = 62139576dcbf9878ccd56262d1b28dbea897821c03370d81971513cc74aea3ff
+skEm = 5006a9a0f0138b9b5d577ed4a67c4f795aee8fc146ac63d7a4167765be3ad7dc
+pkRm = 1ae26f65041b36ad69eb392c198bfd33df1c6ff17a910cb3e49db7506b6a4e7f
+pkEm = 716281787b035b2fee90455d951fa70b3db6cc92f13bedfd758c3487994b7020
+# encryptions[0]
+aad = 436f756e742d30
+ciphertext = fa4632a400962c98143e58450e75d879365359afca81a5f5b5997c6555647ec302045a80c57d3e2c2abe7e1ced
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[1]
+aad = 436f756e742d31
+ciphertext = 8313fcbf760714f5a93b6864820e48dcec3ddd476ad4408ff1c1a1f7bfb8cb8699fada4a9e59bf8086eb1c0635
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[2]
+aad = 436f756e742d32
+ciphertext = 020f2856d95b85e1def9549bf327c484d327616f1e213045f117be4c287571ab983958f74766cbc6f8197c8d8d
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[3]
+aad = 436f756e742d33
+ciphertext = 14d88332e147f24efd749dc5b37de8d9367fea2dca34f8117bd8d2093e08489fae56595eed6503e2a5997f66a2
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[4]
+aad = 436f756e742d34
+ciphertext = 5e688918b05e96631628eef3e74781caf41c4f25ee1ef52ca1d746ca31561392c8833a7232036bf8e839a4c8e0
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[5]
+aad = 436f756e742d35
+ciphertext = 3ad1659d8d0060428598bd13b790b0893d81ad11155ed618de7ac950c65a2d4a883a78b954946d58b2395a53db
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[6]
+aad = 436f756e742d36
+ciphertext = 08eb46778b70677b32ead9ebe04f31a6dcc06eb19d41a79d9efc5af6e94a54a97558ce7a783b4037112a870a93
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[7]
+aad = 436f756e742d37
+ciphertext = 0e3b0d39dfb10f63905b30b12bcbc87735dfbac2e66c3724a6803da266ea58e464df3638cb7605f801e8d8f1f5
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[8]
+aad = 436f756e742d38
+ciphertext = c3f4cdbba72516de891a4b1b6d6ae1cc071a9adb2a17383182c6c5e9d34e38217d59711700f3b3503233225b1d
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[9]
+aad = 436f756e742d39
+ciphertext = 7dddf70f5cd25cb840b70fe4355b5c9c77aaaf12fe158114df2718dc2ce9e148eac89966b1b68660135c8eca4b
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# exports[0]
+exportContext = 436f6e746578742d30
+exportLength = 32
+exportValue = 22bbe971392c685b55e13544cdaf976f36b89dc1dbe1296c2884971a5aa9e331
+# exports[1]
+exportContext = 436f6e746578742d31
+exportLength = 32
+exportValue = 5c0fa72053a2622d8999b726446db9ef743e725e2cb040afac2d83eae0d41981
+# exports[2]
+exportContext = 436f6e746578742d32
+exportLength = 32
+exportValue = 72b0f9999fd37ac2b948a07dadd01132587501a5a9460d596c1f7383299a2442
+# exports[3]
+exportContext = 436f6e746578742d33
+exportLength = 32
+exportValue = 73d2308ed5bdd63aacd236effa0db2d3a30742b6293a924d95a372e76d90486b
+# exports[4]
+exportContext = 436f6e746578742d34
+exportLength = 32
+exportValue = d4f8878dbc471935e86cdee08746e53837bbb4b6013003bebb0bc1cc3e074085
+
+mode = 1
+kdf_id = 1
+aead_id = 3
+info = 4f6465206f6e2061204772656369616e2055726e
+skRm = a6ab4e1bb782d580d837843089d65ebe271a0ee9b5a951777cecf1293c58c150
+skEm = 4bfdb62b95ae2a1f29f20ea49e24aa2673e0d240c6e967f668f55ed5dee996dc
+pkRm = c49b46ed73ecb7d3a6a3e44f54b8f00f9ab872b57dd79ded66d7231a14c64144
+pkEm = f4639297e3305b03d34dd5d86522ddc6ba11a608a0003670a30734823cdd3763
+psk = 5db3b80a81cb63ca59470c83414ef70a
+psk_id = 456e6e796e20447572696e206172616e204d6f726961
+# encryptions[0]
+aad = 436f756e742d30
+ciphertext = f97ca72675b8199e8ffec65b4c200d901110b177b246f241b6f9716fb60b35b32a6d452675534b591e8141468a
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[1]
+aad = 436f756e742d31
+ciphertext = 57796e2b9dd0ddf807f1a7cb5884dfc50e61468c4fd69fa03963731e51674ca88fee94eeac3290734e1627ded6
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[2]
+aad = 436f756e742d32
+ciphertext = b514150af1057151687d0036a9b4a3ad50fb186253f839d8433622baa85719ed5d2532017a0ce7b9ca0007f276
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[3]
+aad = 436f756e742d33
+ciphertext = 50a645f0f9bddac7b1029dba61921d2cdc10258e6d67e4918000eab0d617fb04a655caeeab308eb159585ae07a
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[4]
+aad = 436f756e742d34
+ciphertext = 6232e4a184dbff7361f9e4d6bfaaf97631225ee317e63cb09e8f74fc93efeedb6385d4f4cb2e30ffb82aea0e1f
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[5]
+aad = 436f756e742d35
+ciphertext = ab801465f2080c1b9a06b582a919b51fc289e1b5b14bbad0b09cd92a82d27a1de1b934fd809cde8f19ef988373
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[6]
+aad = 436f756e742d36
+ciphertext = 83248649e62ac67c3b9d5525b886c04960b00b02df2d34c91284e8ed537feba132b03d12b868822af1e583118d
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[7]
+aad = 436f756e742d37
+ciphertext = 5ad03248b8e5270a654b090df5eb8955120d5cdc00f5dfb004942125cec1fbcbaef7d9fdef284bddc134018b74
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[8]
+aad = 436f756e742d38
+ciphertext = 56333a4ee1e5512cf2ffa1fd135fa54ba666f4388cf654fda9d7696ccfca1c51facda5a9bf80c9ac789026955a
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[9]
+aad = 436f756e742d39
+ciphertext = e352a356575dcee382c8d2489bc45dc3a757979638e952dbac969eb092e9c616d8654e9dec8d1c0777e39478c3
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# exports[0]
+exportContext = 436f6e746578742d30
+exportLength = 32
+exportValue = 735400cd9b9193daffe840f412074728ade6b1978e9ae27957aacd588dbd7c9e
+# exports[1]
+exportContext = 436f6e746578742d31
+exportLength = 32
+exportValue = cf4e351e1943d171ff2d88726f18160086ecbec52a8151dba8cf5ba0737a6097
+# exports[2]
+exportContext = 436f6e746578742d32
+exportLength = 32
+exportValue = 8e23b44d4f23dd906d1c100580a670d171132c9786212c4ca2876a1541a84fae
+# exports[3]
+exportContext = 436f6e746578742d33
+exportLength = 32
+exportValue = 56252a940ece53d4013eb619b444ee1d019a08eec427ded2b6dbf24be624a4a0
+# exports[4]
+exportContext = 436f6e746578742d34
+exportLength = 32
+exportValue = fc6cdca9ce8ab062401478ffd16ee1c07e2b15d7c781d4227f07c6043d937fad
+
+mode = 0
+kdf_id = 3
+aead_id = 1
+info = 4f6465206f6e2061204772656369616e2055726e
+skRm = f1d9c20bd7a7b88aea23c2d6f457b9d14c83a02f4bd52ed34760e3a70b4d1f5e
+skEm = 7854915a6fbec01530902324cee60646536d189633d980f04dc03711b49defb2
+pkRm = cdb3ddcca2377569ab2888bc2c529ea8c16e55bb68f6925888a9212aad89fc19
+pkEm = d1976db4826912a68d1e1d562ba37b2a04faef62e71193c142d78b874bb24f78
+# encryptions[0]
+aad = 436f756e742d30
+ciphertext = fbba8d4f66c1a5cf77a89eaf5201a538a7e6fc8a37b6bd96a29fc3cc7a51496ec92f46e6392dcec9eba772109f
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[1]
+aad = 436f756e742d31
+ciphertext = 05326c3d17447ac21d1f17e720c93c7a9fc3f57c1bb682cafbd026e27def58b950aeab78cc17a070e992552436
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[2]
+aad = 436f756e742d32
+ciphertext = 55958c515d297358af6ea2c952ec05513499ef9923c282dafa8b235e7bad03c130cc838c765a9e604c7aaa1c9f
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[3]
+aad = 436f756e742d33
+ciphertext = 60dbbaecf091daabb228b43111979f1212dfef251017606443671a160419655f170f8ee2f23ad1754a56de4107
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[4]
+aad = 436f756e742d34
+ciphertext = d316d2a28311d228c341a36fdee46028bb44b0a474a1059113440e970a3064cf9a72a56b24577c0f84341a125d
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[5]
+aad = 436f756e742d35
+ciphertext = 48dc6be6fd66205fba951df5aa2b33d8e25641075f3cb2f4d165b909be1318bbc5f3450549f2e746f078478f7c
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[6]
+aad = 436f756e742d36
+ciphertext = ea1e4f1154364ef394d9493e2d5e9e33e98f7e64f2a51d0f394851d3329e7aecf7a8dc6c24ca1b12420dd210df
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[7]
+aad = 436f756e742d37
+ciphertext = c0bd46a29e1ac5f34755f87928e4fc1b8d1894d0e731fac3c706a33a7f2a15fed65566c345f0bfcdb708adcb1f
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[8]
+aad = 436f756e742d38
+ciphertext = 8a24e35391caf3359190ad6b25a4536bdca240273e65ffba76c978d8f2047c7a291e4caf8aac2af4b04ef8365d
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[9]
+aad = 436f756e742d39
+ciphertext = 5b9b653e1fc92401823f8f0914763056d012b0a9830809d1ad68363ddf278ad9bf58f9e727a2ee9e4524d2f28a
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# exports[0]
+exportContext = 436f6e746578742d30
+exportLength = 32
+exportValue = 760cec56bab6780fb7ee51563e7b9e6145d38ffda10faa1053f65b1f74fc2733
+# exports[1]
+exportContext = 436f6e746578742d31
+exportLength = 32
+exportValue = 25e50184173be00e1e07a8e6a8bbda8bf628909f7088e01b9b1c720ece0526fd
+# exports[2]
+exportContext = 436f6e746578742d32
+exportLength = 32
+exportValue = fa4207bb0bff9af2183978736f84a703d23568b82675a964681383c3f11047eb
+# exports[3]
+exportContext = 436f6e746578742d33
+exportLength = 32
+exportValue = fdbebeb2901e996284387bf0a7d4d26ee8eca9f7f5858bf98015d7595813bad3
+# exports[4]
+exportContext = 436f6e746578742d34
+exportLength = 32
+exportValue = 1538807322f02dbded405d10de3aafc4f6d365d9aefbef081d114dcedbe1cae2
+
+mode = 1
+kdf_id = 3
+aead_id = 1
+info = 4f6465206f6e2061204772656369616e2055726e
+skRm = ac1f54ecf81f53a71c5be7f734346fffe084ba6f5966d2b3173df819145bd722
+skEm = 20c9020273ac6193f27fb69af406cdab8154090c28aa2c7b870b92513d8805f4
+pkRm = 7e8561e6b753c6992df8d89cc1e447bebd4e21fcd4d1dc868f6b2ea663ce7e18
+pkEm = 7c35810fdc4009af7cb98dca0838ad32495c71c3003be650ed1ea0f6cd1ecc3c
+psk = 5db3b80a81cb63ca59470c83414ef70a
+psk_id = 456e6e796e20447572696e206172616e204d6f726961
+# encryptions[0]
+aad = 436f756e742d30
+ciphertext = 13d119d97709546435a5fbc99a39d9ac3f2ef459c9841305582282c435aab714af1df2f52bd07f196bfe9294f5
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[1]
+aad = 436f756e742d31
+ciphertext = e8f9743ee3eeb41cebade4ba2f0d758b679c560a53a720aeb88017bbd778537b02b3eca27bca61fa13898847ec
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[2]
+aad = 436f756e742d32
+ciphertext = 7f0218fe141ffccc6229d096516a27cce109e1300f59a3500288cc1bb57c765b91b4a240075493d94abb9e4cf9
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[3]
+aad = 436f756e742d33
+ciphertext = b893adce352a2b1c780f67475062a9eb827ba2fb2e7ec4ae21e27d6663e1a988d81390b50d99b4de2b451afce1
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[4]
+aad = 436f756e742d34
+ciphertext = 8e733ddc1dd2b80ad6decf1b0ce08a28e9f5e644a7439621cd028ac9599c7657dac34173f7d5489e34be099462
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[5]
+aad = 436f756e742d35
+ciphertext = 4551173fc2233def235d52c738dc5095bc7abb6e3c3c7f8e58ae983bf68cb5b6fdfdf334b9bef4e1c5b11c2884
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[6]
+aad = 436f756e742d36
+ciphertext = 3384441833b623b36930d89a3e795fcc31e703d460ec48dc43be345794a2d73af9f4283494f23b904ba609197d
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[7]
+aad = 436f756e742d37
+ciphertext = ad5a5977bd3486ec319850a52fb8e7cba74d0e2c2ee261ec9a6b2bfb579f7a55f8bac5ab774c2bc28d86623ff7
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[8]
+aad = 436f756e742d38
+ciphertext = 8d4466e0d99086ee1c0171a111a2c1ea5736ba9324eb20aa0d071dcd8c4581ea1dda96e25dd3f341c84c9c3529
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[9]
+aad = 436f756e742d39
+ciphertext = adf8ca449b303657e9d81bf9566d7562d9b28d9c63758bfa93586f5ba69a2fe2dca1dafd022831de39b6453c28
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# exports[0]
+exportContext = 436f6e746578742d30
+exportLength = 32
+exportValue = 899f63d5646d1116e63029c0c03a3a8b63b815af58a0e197c440e8075daa220d
+# exports[1]
+exportContext = 436f6e746578742d31
+exportLength = 32
+exportValue = a2da1ff2773723418e07c63d39455d70be0865d6d0fb29e355eda599a62441da
+# exports[2]
+exportContext = 436f6e746578742d32
+exportLength = 32
+exportValue = 1c361d5b9b14c6f75660c8c960b908394c0281895fbba9288730822511a24171
+# exports[3]
+exportContext = 436f6e746578742d33
+exportLength = 32
+exportValue = b5258b7e39ea3a68177b50a5a492b6cb8083707a1756e5a7d5d4370556c856de
+# exports[4]
+exportContext = 436f6e746578742d34
+exportLength = 32
+exportValue = 81ddfe54c7894f987e2945333a5ec809068890587759b6407feb1d6f1ca26e6e
+
+mode = 0
+kdf_id = 3
+aead_id = 2
+info = 4f6465206f6e2061204772656369616e2055726e
+skRm = 6c84707a1b8a46e356795ce20e2f556da0f518eb29477ceb2b5dcfdd68989212
+skEm = 64ed0bb5e6b71e91eaf9fbf5196f422f8430f0d79b91844b892b59c25086c628
+pkRm = bc66fc66209686476b3c9b2e7489a3bdb9835df1a888eb5022c417d0ca1fdf7f
+pkEm = ba09ff75d7e2a7a2fa9d698a0706a4e1bad0d5615c55c69628aa88b3fc270a6d
+# encryptions[0]
+aad = 436f756e742d30
+ciphertext = 65e2512b6bea0738746d1c9b5a3bc2149c5c7fd43ade420b4c55f884264a2c606dee89aeafa6a66e55213a0dec
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[1]
+aad = 436f756e742d31
+ciphertext = 32fa3a5253b53a802a493f9a2c4857775b641a16989c643ce2b2f4c01e49e39b72e961c9a3ed4b648fcde75a11
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[2]
+aad = 436f756e742d32
+ciphertext = 0e537e6ccff81b53299c440e9045e1374944f9b60c175903037ad7d551e61ee9915b78035c297df7c6134c3ec6
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[3]
+aad = 436f756e742d33
+ciphertext = b8c65d5c4bd920821f82c2499da8286f74998bcd4ae102e66987bfc7580094612fa0c560ad37784bda9298fc1e
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[4]
+aad = 436f756e742d34
+ciphertext = c8f1681adebac7f109b5cf5b0c7e85fbaa190d3d4a9d16ada8e08763feed8ef2fcb2bb85081c1f652fd45d2a29
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[5]
+aad = 436f756e742d35
+ciphertext = 8240b9bce84dc4b202d61e1687b37d746e49b233820d3493ac2a5c97cb3a2f70839fb6f7c4b6eaa80e21e80d76
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[6]
+aad = 436f756e742d36
+ciphertext = 42541a69b5953fd02ea5a2f5129447425572c99339a3228016f49153def718e1315292ce7d2c8b3a7f74567bdf
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[7]
+aad = 436f756e742d37
+ciphertext = d2316427e8c48f92f70acc180818e642aba734dd481dd889d47a08fa9a9cb67aa39ed90faad8bda2151a745391
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[8]
+aad = 436f756e742d38
+ciphertext = dbdbb33329d44fb93c437343af27791b2817c1ec392f6771ea598e60e73d06b2714978034f2b5270e80f0945fb
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[9]
+aad = 436f756e742d39
+ciphertext = f8c7f2a437bbcc472cba3aa7928414e4b4cf9867e0b12be1b4de0f8a9177a19d4c2f4fcb7f1f27cad391d7f3a2
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# exports[0]
+exportContext = 436f6e746578742d30
+exportLength = 32
+exportValue = 87c135b0f1670f076865bd364a21612ef0afa0cb70daceea3ba9a01b0007a521
+# exports[1]
+exportContext = 436f6e746578742d31
+exportLength = 32
+exportValue = f25e4fd51a25cc972a405638273d2a7b7ee84807633121b2611da1bdf15a2f46
+# exports[2]
+exportContext = 436f6e746578742d32
+exportLength = 32
+exportValue = 83e790e3c6dc91401e5fd3070f31b3a8886ad26d177b0dd2c4e38e1530154bbd
+# exports[3]
+exportContext = 436f6e746578742d33
+exportLength = 32
+exportValue = 3d4f5cb496ace65fdd21b82568ae0e528526df3f10760c55784a2c9a1f46bc37
+# exports[4]
+exportContext = 436f6e746578742d34
+exportLength = 32
+exportValue = 5c49cd3ebcb956aeb7e41c9a0f2d4b4c9501f66cc544d8d7fa62ce96d2938857
+
+mode = 1
+kdf_id = 3
+aead_id = 2
+info = 4f6465206f6e2061204772656369616e2055726e
+skRm = 939a0b48510924ccf6449c0eaaa1069bb41ab9cf54d090e6c6eb9aaab6051d69
+skEm = d3668380f7053086047e1f8a66e0e32c45c1086002b6a67dc9a942058a655073
+pkRm = 4af18720a608d13ce17268aa1721876e96ec4173a40788ddfd60c886b4c08605
+pkEm = 2ed53926385da5d41c76e75a636cd795fea5200d0e7ef6affd4b741a1196be37
+psk = 5db3b80a81cb63ca59470c83414ef70a
+psk_id = 456e6e796e20447572696e206172616e204d6f726961
+# encryptions[0]
+aad = 436f756e742d30
+ciphertext = b5039652103f36bdcf1380b947ed8b6dc3413b98cff2c6451aff5fabee7234ace274918eb665f6d08850a70093
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[1]
+aad = 436f756e742d31
+ciphertext = f1a1beb03a0c2d3f756d992cba6712247e24561e8407aef299285cefc337beaf249b8b92325a6718feffb1cfad
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[2]
+aad = 436f756e742d32
+ciphertext = 0f5f58f918a19f55efc146bf3ecd5c72bb0c00893c02ca56cf291904e1e1f8f6d0768f1cfed9d64d3f7f35d912
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[3]
+aad = 436f756e742d33
+ciphertext = 14177f71f6716d128baaff214e360bb9b8dc0ddb34ba7bcb8d0dcb01c548d42d3c43875ec8ff083acba591ca24
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[4]
+aad = 436f756e742d34
+ciphertext = f8ee21f3af210dacb7aea148b444a98e643f161040db1350429c366a667bbc4b0cb6dbf047c2ba9f86a8ecf425
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[5]
+aad = 436f756e742d35
+ciphertext = 9f5ffc686ca660de6101a9dbf412c61de6fc574954f72f7d2c652c0ab61e8597170ec713b5314e41f0601fbf49
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[6]
+aad = 436f756e742d36
+ciphertext = 3f415ff7bc48fbdb69babce3045049ae2bc2a6983ddaf08cc9b3368362f7918bb73a4872c37fed3e3d808a9c1e
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[7]
+aad = 436f756e742d37
+ciphertext = bd2199064b596d3ef9a77fa8a5db93f1510bf996e320da92635e435c4b59120702c344825fc012393dcbddc05e
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[8]
+aad = 436f756e742d38
+ciphertext = 789faf060328cb1d359a7a30a3ce9d303612ef9c9da56c78fee82334953d425bb1613e757b2d7ab1aafd5be927
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[9]
+aad = 436f756e742d39
+ciphertext = ac41c4a676448ef3f39a471f588d8576bb30817055ce8ac4404b61a4fdbb71adbababd15117cec7371aac83b0e
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# exports[0]
+exportContext = 436f6e746578742d30
+exportLength = 32
+exportValue = e98921e4c437992d7ac035d74dfae232ef41227e2f27e4e4d801b4bd8934a5b6
+# exports[1]
+exportContext = 436f6e746578742d31
+exportLength = 32
+exportValue = 1269029586ff64d8bde114359411f61c22211e8725a2b86ea145b8b9151c3915
+# exports[2]
+exportContext = 436f6e746578742d32
+exportLength = 32
+exportValue = b8f393d7cea5934e16f4de8ef9a8912104b741ecd464d4c84886f7eef28cc301
+# exports[3]
+exportContext = 436f6e746578742d33
+exportLength = 32
+exportValue = eb5c8739d172a30b48235316e13a12fa8abd05d72cc5c330fd3ab3de3371ddc4
+# exports[4]
+exportContext = 436f6e746578742d34
+exportLength = 32
+exportValue = 0b15c1a0dccac801a3078a8a01145c940ade7d9993111bf614ac69d073913a6f
+
+mode = 0
+kdf_id = 3
+aead_id = 3
+info = 4f6465206f6e2061204772656369616e2055726e
+skRm = 80a54bfb48d9a6680a355127ad3e9ea3b8725b47f7f5f2022b79a43feb231f84
+skEm = 06a1b9d7915cd1fe501de50d1d2ec1712662f4179b18a672f1622ae807ff2543
+pkRm = cbba177f103979838f8d46577662c399dabe9732cc79f9081e9d481dc533807c
+pkEm = 7c1f8d203bcea456ea16ba3e72f1f1d8018cca78751c5b49742df6ae1462640d
+# encryptions[0]
+aad = 436f756e742d30
+ciphertext = 9e59f241a345e708d96e786986c789b6da9a134cd4e38dde9a8acce177b97052ae6fcc3bf378e3535f9739c678
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[1]
+aad = 436f756e742d31
+ciphertext = 2f9b8e92eae0a795fcb9bf1c180e02625f15f76fa95894e5cd21f3b275f330eca957998f0385c30c34e99fb377
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[2]
+aad = 436f756e742d32
+ciphertext = 791394c37b2c7910186f885ceb4badba54a3f44054a13475e31e343f476fc214dced7b7dcf349ca3fd2bc49729
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[3]
+aad = 436f756e742d33
+ciphertext = 14ea622ea1fab744a5a5c3b875727151741854fb0d948d14d685a8df603cd090bb3264f9a474b6c19647771211
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[4]
+aad = 436f756e742d34
+ciphertext = 59b3299e76fcb0c9ed1180c995f34b3a0161fcf9cb055b53e8d548f0bcc001dc79f30619c892e738aeef6c778d
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[5]
+aad = 436f756e742d35
+ciphertext = 550f977d3f9ca10a1cc30a73b2e858cdf7a13798d85a1c4c904c908f4612acc6d2cbbaf073a127e41b9816dcc7
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[6]
+aad = 436f756e742d36
+ciphertext = 7cb1d8890ad19aa43f84ad86e1d09cc2d14a102e838c19dd55977a1f3d07791ca5f7797671eb66db5099f53917
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[7]
+aad = 436f756e742d37
+ciphertext = d5d9d138cd42161eab8800e71a2e06bb895c1ef7538bb0337b638438e51d824a5e8bd1515607c0b985058ec19b
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[8]
+aad = 436f756e742d38
+ciphertext = 5f1b9078dabaf0c16821256a0591f1287c42cc22d002d38fbaeb64d77a0943c2f092615185e716eb28681a3a0d
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[9]
+aad = 436f756e742d39
+ciphertext = 575e3da798641f1e965d6e18384cac54d9190e5c663959de71b071b1e244763bafa959ed512a0e266c6b1afcc1
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# exports[0]
+exportContext = 436f6e746578742d30
+exportLength = 32
+exportValue = 5f0a458aca1ea6118fa1d0883a99b5bb626aa71b55de2e73436f53e93b8073a7
+# exports[1]
+exportContext = 436f6e746578742d31
+exportLength = 32
+exportValue = c5aff969431e6d731c9b26fb8e4377b4e859430345af77d4374dd71461e772da
+# exports[2]
+exportContext = 436f6e746578742d32
+exportLength = 32
+exportValue = 0c40105c9bc2e407d9d4a64dfb1392e46d393e78747701c5daaaa530878e001c
+# exports[3]
+exportContext = 436f6e746578742d33
+exportLength = 32
+exportValue = d440fbf13b9e3956c7d6772166e07305a8f5a396e2bd361b5b9fbae9b0b04909
+# exports[4]
+exportContext = 436f6e746578742d34
+exportLength = 32
+exportValue = 1474f8e9dac70e76041b4bb365f1fc4e1e2509f43c188b5d15b8d89113c197f7
+
+mode = 1
+kdf_id = 3
+aead_id = 3
+info = 4f6465206f6e2061204772656369616e2055726e
+skRm = c9221f98c17117ab4216e062481934ad21a12c8ba833a0611ca1910fac031563
+skEm = 9e38eaa97787575e564949bd84845965e910ae90a17bf841f68a4c791385afd3
+pkRm = 4ca2dcf3f5fa2b8b782536f695b3279f03569857a88e90075d5e4a67e4c4a44d
+pkEm = 886c15a9d1c3609a3f3f6be3b5d1b60817f6a557e2b7344456dbc8ae49f5e93c
+psk = 5db3b80a81cb63ca59470c83414ef70a
+psk_id = 456e6e796e20447572696e206172616e204d6f726961
+# encryptions[0]
+aad = 436f756e742d30
+ciphertext = 2f3eba789b7706b85fd2fcadf189f640a726160a7a0ef22b6483aaf69210c02d4c22113740235783dbd70ca1b7
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[1]
+aad = 436f756e742d31
+ciphertext = ea76c297d6440fcc6e753980678adf65389171c591cd2ce0cc6de56c4560e6642ca5df5d910b3006b653372657
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[2]
+aad = 436f756e742d32
+ciphertext = 7bed7b81628f1892518ced3b292cdf8e17dd0fa270600177a5c122204bfc381bc01f9bd5de77c4a568055ad19c
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[3]
+aad = 436f756e742d33
+ciphertext = 38ad518591bbb6bbbe114e08e76a90b0040ef5571dbeb9a4ca778b72eba6e729c75efaf476e1dc69d2a95ba304
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[4]
+aad = 436f756e742d34
+ciphertext = a38f5cf41d1ad3802ec4043067e4ff1aff3c557d1961cb76f6fbecea500f45ce780c27cc2894057093298d782e
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[5]
+aad = 436f756e742d35
+ciphertext = 0844adf506c653ff4cb9eaa595b4a6382055d53bfe4490a323d3ed0369b33a206f6fbed3a2c2409a646edcce70
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[6]
+aad = 436f756e742d36
+ciphertext = 747700aa0de178a38e2ac8ee358e0d79d2b6026a8e86e215312d359933da08bcbb443e9e2280932e2e37ca0c7d
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[7]
+aad = 436f756e742d37
+ciphertext = 31b7a490d05bd9e31b6ddc82b2eef9d6500675273e5c215c2f3fd4a28f04b73c752a7b7f89c2220cc5d26d3ef4
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[8]
+aad = 436f756e742d38
+ciphertext = b57d6cb945a21064c1dd0a293ae28d315e7160764e20d48f50ba9be6d3d530cd064a851f7f9fd16f61fd8afef0
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# encryptions[9]
+aad = 436f756e742d39
+ciphertext = 1bb75c2eb81165d8c95d893c9dc1425d2de1628696c488d6ff0213674a6bdba09a3ad6ef506ca339d64f02e46e
+plaintext = 4265617574792069732074727574682c20747275746820626561757479
+# exports[0]
+exportContext = 436f6e746578742d30
+exportLength = 32
+exportValue = bf8d87036ace4835ee917a504016601ce7b5add0b8d72aa64ea493ea241786f4
+# exports[1]
+exportContext = 436f6e746578742d31
+exportLength = 32
+exportValue = 9583f302506aabded442f4a3c4cb976682fed99c4bcbdf5ad41c2f00d3fbc27a
+# exports[2]
+exportContext = 436f6e746578742d32
+exportLength = 32
+exportValue = fa169c1e9ca8582381a72b5067da174995500198484520d60d22bf9bb4c34ead
+# exports[3]
+exportContext = 436f6e746578742d33
+exportLength = 32
+exportValue = 56fbba55aef923240daf63ebd30508e891cdffbe0bfe03306727320d6dfa29e6
+# exports[4]
+exportContext = 436f6e746578742d34
+exportLength = 32
+exportValue = eb30f91427038c6e3716310c0ffc431ca9ea2b10c2f264f7aee82f86f817b8e2
diff --git a/src/crypto/hpke/internal.h b/src/crypto/hpke/internal.h
new file mode 100644
index 0000000..87c049a
--- /dev/null
+++ b/src/crypto/hpke/internal.h
@@ -0,0 +1,237 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#ifndef OPENSSL_HEADER_CRYPTO_HPKE_INTERNAL_H
+#define OPENSSL_HEADER_CRYPTO_HPKE_INTERNAL_H
+
+#include <openssl/aead.h>
+#include <openssl/base.h>
+#include <openssl/curve25519.h>
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+// Hybrid Public Key Encryption.
+//
+// Hybrid Public Key Encryption (HPKE) enables a sender to encrypt messages to a
+// receiver with a public key. Optionally, the sender may authenticate its
+// possession of a pre-shared key to the recipient.
+//
+// See https://tools.ietf.org/html/draft-irtf-cfrg-hpke-05.
+
+// EVP_HPKE_AEAD_* are AEAD identifiers.
+#define EVP_HPKE_AEAD_AES_GCM_128 0x0001
+#define EVP_HPKE_AEAD_AES_GCM_256 0x0002
+#define EVP_HPKE_AEAD_CHACHA20POLY1305 0x0003
+
+// EVP_HPKE_HKDF_* are HKDF identifiers.
+#define EVP_HPKE_HKDF_SHA256 0x0001
+#define EVP_HPKE_HKDF_SHA384 0x0002
+#define EVP_HPKE_HKDF_SHA512 0x0003
+
+// EVP_HPKE_MAX_OVERHEAD contains the largest value that
+// |EVP_HPKE_CTX_max_overhead| would ever return for any context.
+#define EVP_HPKE_MAX_OVERHEAD EVP_AEAD_MAX_OVERHEAD
+
+
+// Encryption contexts.
+
+// An |EVP_HPKE_CTX| is an HPKE encryption context.
+typedef struct evp_hpke_ctx_st {
+  const EVP_MD *hkdf_md;
+  EVP_AEAD_CTX aead_ctx;
+  uint16_t kdf_id;
+  uint16_t aead_id;
+  uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
+  uint8_t exporter_secret[EVP_MAX_MD_SIZE];
+  uint64_t seq;
+  int is_sender;
+} EVP_HPKE_CTX;
+
+// EVP_HPKE_CTX_init initializes an already-allocated |EVP_HPKE_CTX|. The caller
+// should then use one of the |EVP_HPKE_CTX_setup_*| functions.
+//
+// It is safe, but not necessary to call |EVP_HPKE_CTX_cleanup| in this state.
+OPENSSL_EXPORT void EVP_HPKE_CTX_init(EVP_HPKE_CTX *ctx);
+
+// EVP_HPKE_CTX_cleanup releases memory referenced by |ctx|. |ctx| must have
+// been initialized with |EVP_HPKE_CTX_init|.
+OPENSSL_EXPORT void EVP_HPKE_CTX_cleanup(EVP_HPKE_CTX *ctx);
+
+
+// Setting up HPKE contexts.
+//
+// In each of the following functions, |hpke| must have been initialized with
+// |EVP_HPKE_CTX_init|. |kdf_id| selects the KDF for non-KEM HPKE operations and
+// must be one of the |EVP_HPKE_HKDF_*| constants. |aead_id| selects the AEAD
+// for the "open" and "seal" operations and must be one of the |EVP_HPKE_AEAD_*"
+// constants."
+
+// EVP_HPKE_CTX_setup_base_s_x25519 sets up |hpke| as a sender context that can
+// encrypt for the private key corresponding to |peer_public_value| (the
+// recipient's public key). It returns one on success, and zero otherwise. Note
+// that this function will fail if |peer_public_value| is invalid.
+//
+// This function writes the encapsulated shared secret to |out_enc|.
+OPENSSL_EXPORT int EVP_HPKE_CTX_setup_base_s_x25519(
+    EVP_HPKE_CTX *hpke, uint8_t out_enc[X25519_PUBLIC_VALUE_LEN],
+    uint16_t kdf_id, uint16_t aead_id,
+    const uint8_t peer_public_value[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t *info, size_t info_len);
+
+// EVP_HPKE_CTX_setup_base_s_x25519_for_test behaves like
+// |EVP_HPKE_CTX_setup_base_s_x25519|, but takes a pre-generated ephemeral
+// sender key.
+OPENSSL_EXPORT int EVP_HPKE_CTX_setup_base_s_x25519_for_test(
+    EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
+    const uint8_t peer_public_value[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t *info, size_t info_len,
+    const uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN],
+    const uint8_t ephemeral_public[X25519_PUBLIC_VALUE_LEN]);
+
+// EVP_HPKE_CTX_setup_base_r_x25519 sets up |hpke| as a recipient context that
+// can decrypt messages. |private_key| is the recipient's private key, and |enc|
+// is the encapsulated shared secret from the sender. Note that this function
+// will fail if |enc| is invalid.
+OPENSSL_EXPORT int EVP_HPKE_CTX_setup_base_r_x25519(
+    EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
+    const uint8_t enc[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t public_key[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t private_key[X25519_PRIVATE_KEY_LEN], const uint8_t *info,
+    size_t info_len);
+
+// EVP_HPKE_CTX_setup_psk_s_x25519 sets up |hpke| as a sender context that can
+// encrypt for the private key corresponding to |peer_public_value| (the
+// recipient's public key) and authenticate its possession of a PSK. It returns
+// one on success, and zero otherwise. Note that this function will fail if
+// |peer_public_value| is invalid.
+//
+// The PSK and its ID must be provided in |psk| and |psk_id|, respectively. Both
+// must be nonempty (|psk_len| and |psk_id_len| must be non-zero), or this
+// function will fail.
+//
+// This function writes the encapsulated shared secret to |out_enc|.
+OPENSSL_EXPORT int EVP_HPKE_CTX_setup_psk_s_x25519(
+    EVP_HPKE_CTX *hpke, uint8_t out_enc[X25519_PUBLIC_VALUE_LEN],
+    uint16_t kdf_id, uint16_t aead_id,
+    const uint8_t peer_public_value[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t *info, size_t info_len, const uint8_t *psk, size_t psk_len,
+    const uint8_t *psk_id, size_t psk_id_len);
+
+// EVP_HPKE_CTX_setup_psk_s_x25519_for_test behaves like
+// |EVP_HPKE_CTX_setup_psk_s_x25519|, but takes a pre-generated ephemeral sender
+// key.
+OPENSSL_EXPORT int EVP_HPKE_CTX_setup_psk_s_x25519_for_test(
+    EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
+    const uint8_t peer_public_value[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t *info, size_t info_len, const uint8_t *psk, size_t psk_len,
+    const uint8_t *psk_id, size_t psk_id_len,
+    const uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN],
+    const uint8_t ephemeral_public[X25519_PUBLIC_VALUE_LEN]);
+
+// EVP_HPKE_CTX_setup_psk_r_x25519 sets up |hpke| as a recipient context that
+// can decrypt messages. Future open (decrypt) operations will fail if the
+// sender does not possess the PSK indicated by |psk| and |psk_id|.
+// |private_key| is the recipient's private key, and |enc| is the encapsulated
+// shared secret from the sender. If |enc| is invalid, this function will fail.
+//
+// The PSK and its ID must be provided in |psk| and |psk_id|, respectively. Both
+// must be nonempty (|psk_len| and |psk_id_len| must be non-zero), or this
+// function will fail.
+OPENSSL_EXPORT int EVP_HPKE_CTX_setup_psk_r_x25519(
+    EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
+    const uint8_t enc[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t public_key[X25519_PUBLIC_VALUE_LEN],
+    const uint8_t private_key[X25519_PRIVATE_KEY_LEN], const uint8_t *info,
+    size_t info_len, const uint8_t *psk, size_t psk_len, const uint8_t *psk_id,
+    size_t psk_id_len);
+
+
+// Using an HPKE context.
+
+// EVP_HPKE_CTX_open uses the HPKE context |hpke| to authenticate |in_len| bytes
+// from |in| and |ad_len| bytes from |ad| and to decrypt at most |in_len| bytes
+// into |out|. It returns one on success, and zero otherwise.
+//
+// This operation will fail if the |hpke| context is not set up as a receiver.
+//
+// Note that HPKE encryption is stateful and ordered. The sender's first call to
+// |EVP_HPKE_CTX_seal| must correspond to the recipient's first call to
+// |EVP_HPKE_CTX_open|, etc.
+//
+// At most |in_len| bytes are written to |out|. In order to ensure success,
+// |max_out_len| should be at least |in_len|. On successful return, |*out_len|
+// is set to the actual number of bytes written.
+OPENSSL_EXPORT int EVP_HPKE_CTX_open(EVP_HPKE_CTX *hpke, uint8_t *out,
+                                     size_t *out_len, size_t max_out_len,
+                                     const uint8_t *in, size_t in_len,
+                                     const uint8_t *ad, size_t ad_len);
+
+// EVP_HPKE_CTX_seal uses the HPKE context |hpke| to encrypt and authenticate
+// |in_len| bytes of ciphertext |in| and authenticate |ad_len| bytes from |ad|,
+// writing the result to |out|. It returns one on success and zero otherwise.
+//
+// This operation will fail if the |hpke| context is not set up as a sender.
+//
+// Note that HPKE encryption is stateful and ordered. The sender's first call to
+// |EVP_HPKE_CTX_seal| must correspond to the recipient's first call to
+// |EVP_HPKE_CTX_open|, etc.
+//
+// At most, |max_out_len| encrypted bytes are written to |out|. On successful
+// return, |*out_len| is set to the actual number of bytes written.
+//
+// To ensure success, |max_out_len| should be |in_len| plus the result of
+// |EVP_HPKE_CTX_max_overhead| or |EVP_HPKE_MAX_OVERHEAD|.
+OPENSSL_EXPORT int EVP_HPKE_CTX_seal(EVP_HPKE_CTX *hpke, uint8_t *out,
+                                     size_t *out_len, size_t max_out_len,
+                                     const uint8_t *in, size_t in_len,
+                                     const uint8_t *ad, size_t ad_len);
+
+// EVP_HPKE_CTX_export uses the HPKE context |hpke| to export a secret of
+// |secret_len| bytes into |out|. This function uses |context_len| bytes from
+// |context| as a context string for the secret. This is necessary to separate
+// different uses of exported secrets and bind relevant caller-specific context
+// into the output. It returns one on success and zero otherwise.
+OPENSSL_EXPORT int EVP_HPKE_CTX_export(const EVP_HPKE_CTX *hpke, uint8_t *out,
+                                       size_t secret_len,
+                                       const uint8_t *context,
+                                       size_t context_len);
+
+// EVP_HPKE_CTX_max_overhead returns the maximum number of additional bytes
+// added by sealing data with |EVP_HPKE_CTX_seal|. The |hpke| context must be
+// set up as a sender.
+OPENSSL_EXPORT size_t EVP_HPKE_CTX_max_overhead(const EVP_HPKE_CTX *hpke);
+
+
+#if defined(__cplusplus)
+}  // extern C
+#endif
+
+#if !defined(BORINGSSL_NO_CXX)
+extern "C++" {
+
+BSSL_NAMESPACE_BEGIN
+
+using ScopedEVP_HPKE_CTX =
+    internal::StackAllocated<EVP_HPKE_CTX, void, EVP_HPKE_CTX_init,
+                             EVP_HPKE_CTX_cleanup>;
+
+BSSL_NAMESPACE_END
+
+}  // extern C++
+#endif
+
+#endif  // OPENSSL_HEADER_CRYPTO_HPKE_INTERNAL_H
diff --git a/src/crypto/hpke/test-vectors.json b/src/crypto/hpke/test-vectors.json
new file mode 100644
index 0000000..046d861
--- /dev/null
+++ b/src/crypto/hpke/test-vectors.json
@@ -0,0 +1 @@
+[{"mode":0,"kem_id":32,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"1289f0db1d8f68d0c531b5e53a40911a2a2347059355d7c267717033fef2b08c","seedE":"a77ae3e14cc2ec9e603a9049423d48e66a5e3139e896e95cf19919430657adc7","skRm":"5a8aa0d2476b28521588e0c704b14db82cdd4970d340d293a9576deaee9ec1c7","skEm":"8c490e5b0c7dbe0c6d2192484d2b7a0423b3b4544f2481095a99dbf238fb350f","pkRm":"8756e2580c07c1d2ffcb662f5fadc6d6ff13da85abd7adfecf984aaa102c1269","pkEm":"8a07563949fac6232936ed6f36c4fa735930ecdeaef6734e314aeac35a56fd0a","enc":"8a07563949fac6232936ed6f36c4fa735930ecdeaef6734e314aeac35a56fd0a","shared_secret":"f3822302c852b924c5f984f192d39705ddd287ea93bb73e3c5f95ba6da7e01f5","key_schedule_context":"000c085d4e6d2e6a568b5dcf334f7badd56222cd79f2ac98b6f99059f311c3f16a44c484c33962433c90728ac6c2893f828d58cebf58ba4fdae59b0a8f7ab84ff8","secret":"98a35c8191d511d39a35afcb6cd4072d5038afb2bcc1ecb468626466b2870447","key":"550ee0b7ec1ea2532f2e2bac87040a4c","nonce":"2b855847756795a57229559a","exporter_secret":"1aabf0ea393517daa48a9eaf44a886f5e059d455988a65ae8d66b3c017fc3722","encryptions":[{"aad":"436f756e742d30","ciphertext":"971ba65db526758ea30ae748cd769bc8d90579b62a037816057f24ce427416bd47c05ed1c2446ac8e19ec9ae79","nonce":"2b855847756795a57229559a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"f18f1ec397667ca069b9a6ee0bebf0890cd5caa34bb9875b3600ca0142cba774dd35f2aafd79a02a08ca5f2806","nonce":"2b855847756795a57229559b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"51a8dea350fe6e753f743ec17c956de4cbdfa35f3018fc6a12752c51d1372c5093959f18c7253da9c953c6cfbe","nonce":"2b855847756795a572295598","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"ee2c9cb45a5088256b061a28b528fcd252d2a014d73523bf3ffb0c8687d9996ec6fb69c487a0b62fbc45b04ccb","nonce":"2b855847756795a572295599","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"2e5fa3a358e3ab64e5e981c4b89b5ae4cc5b800aaf726dc64ff857536a3db0e6d816199e711aac60c4670c2a31","nonce":"2b855847756795a57229559e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"d2d0d40c685b3646527da571ff9bb23eee8d0f124a2ab937ad9aacb314209ba150b12bce3be844a414b2b81e15","nonce":"2b855847756795a57229559f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"107b5d77e79b423ddc8feb4f1d42094244d9363b1157e2a46de9b192d1ebaf6053164878a8e9f3ab6c87260355","nonce":"2b855847756795a57229559c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"64b5285667328e0fa12c51e282eb4d446c69404944134958dcbee1b947ce413eaff910146f2ae47586055c05ec","nonce":"2b855847756795a57229559d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"89dd974790c8491cd5539f51537708bd2cbf4d6e0322637fb4dbe6008e6f59b75e3c527587cfefdb37ca68e6cd","nonce":"2b855847756795a572295592","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"e84394b6142059384e270407a6360760827eba0e90c0d2dfd8d6170eed7667cf933fb9854ab766cede7306bda3","nonce":"2b855847756795a572295593","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"0df04ac640d34a56561419bab20a68e6b7331070208004f89c7b973f4c472e92"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"723c2c8f80e6b827e72bd8e80973a801a05514afe3d4bc46e82e505dceb953aa"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"38010c7d5d81093a11b55e2403a258e9a195bcf066817b332dd996b0a9bcbc9a"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"ebf6ab4c3186131de9b2c3c0bc3e2ad21dfcbc4efaf050cd0473f5b1535a8b6d"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"c4823eeb3efd2d5216b2d3b16e542bf57470dc9b9ea9af6bce85b151a3589d90"}]},{"mode":1,"kem_id":32,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"326ee379f778718e6cb343f55668fbb9d0098ba0503cd4414a8f1ce252605c39","seedE":"0fa1407ccee05de0cceb2f2d2381d2df0602dbd43be90eefd288ce4ad0b3ba32","skRm":"4b41ef269169090551fcea177ecdf622bca86d82298e21cd93119b804ccc5eab","skEm":"e7d2b539792a48a24451303ccd0cfe77176b6cb06823c439edfd217458a1398a","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"a5c85773bed3a831e7096f7df4ff5d1d8bac48fc97bfac366141efab91892a3a","pkEm":"08d39d3e7f9b586341b6004dafba9679d2bd9340066edb247e3e919013efcd0f","enc":"08d39d3e7f9b586341b6004dafba9679d2bd9340066edb247e3e919013efcd0f","shared_secret":"9d4fe1809006b38854f056830b8900086f562207dce6010eadf23d2d5303cdf8","key_schedule_context":"01512564fc13bf3387a7d73eb72eb6b62766480582bfe146c4e5afb8788652269644c484c33962433c90728ac6c2893f828d58cebf58ba4fdae59b0a8f7ab84ff8","secret":"84d1c77bdf45e43e2e84f607573f0db0758c56f322500a673be8e2062d343b1f","key":"811e9b2d7a10f4f9d58786bf8a534ca6","nonce":"b79b0c5a8c3808e238b10411","exporter_secret":"7e9ef6d537503f815d0eaf70550a1f8e9af12c1cccb76919aafe93535547c150","encryptions":[{"aad":"436f756e742d30","ciphertext":"fb68f911b4e4033d1547f646ea30c9cee987fb4b4a8c30918e5de6e96de32fc63466f2fc05e09aeff552489741","nonce":"b79b0c5a8c3808e238b10411","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"85e7472fbb7e2341af35fb2a0795df9a85caa99a8f584056b11d452bc160470672e297f9892ce2c5020e794ae1","nonce":"b79b0c5a8c3808e238b10410","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"74229b7491102bcf94cf7633888bc48baa4e5a73cc544bfad4ff61585506facb44b359ade03c0b2b35c6430e4c","nonce":"b79b0c5a8c3808e238b10413","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"013476197af9440a8be89a0cf7d3802eae519d5f5b39cb600e8b285e16ad90c3d903f6108946616723e9a93b73","nonce":"b79b0c5a8c3808e238b10412","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"5aeb09a3798d21dc2ca01f5c255624c9c8c20d75d79d19269eca7b280be0cb7851fae82b646bd5673d10368276","nonce":"b79b0c5a8c3808e238b10415","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"e9cac48b89f3f8898a85562007854b9f61bdf2d2c3e32e9b6162e9fa2f83924d138194528946d96cf7988685a0","nonce":"b79b0c5a8c3808e238b10414","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"2aa76414e0cb28ba7ba0f24d800bc4fec24d51cd1f75e839233ee10610bda97f3daf46fadb53ca01762bbe8a04","nonce":"b79b0c5a8c3808e238b10417","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"96148b343eb53df8d528af57214e65de028461ac69f2d9e371cb0aa4d732201d693766a17fd49ec6025bc98705","nonce":"b79b0c5a8c3808e238b10416","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"39b7e966e0ada05d8cd8a9beb5765941baad38473f18f705443f882a207ff96bfe1c71ae386e97e2fa91960bbe","nonce":"b79b0c5a8c3808e238b10419","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"25bd0d0614a38b19a05dff783a1bbd003c25cade55ba0e24e234b803991cae60ba7d105d35e47519a8cf598580","nonce":"b79b0c5a8c3808e238b10418","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"bd292b132fae00243851451c3f3a87e9e11c3293c14d61b114b7e12e07245ffd"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"695de26bc9336caee01cb04826f6e224f4d2108066ab17fc18f0c993dce05f24"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"c53f26ef1bf4f5fd5469d807c418a0e103d035c76ccdbc6afb5bc42b24968f6c"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"8cea4a595dfe3de84644ca8ea7ea9401a345f0db29bb4beebc2c471afc602ec4"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"e6313f12f6c2054c69018f273211c54fcf2439d90173392eaa34b4caac929068"}]},{"mode":2,"kem_id":32,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"518df90f0f5044ce653180c700e4902d37a7ba1cd23482a76e18b300fecaac4e","seedS":"262a05ad0c08030cdbbaafc03d64f33b95bf8089f216c62ac39b72064a4b4dcb","seedE":"02900cb4856b5f222293a9bd7bda2f1f81c562dc3002336ad1c39f6572402b7d","skRm":"c4148fc8253ccf99b0738b94d376ff58e7eb3845494b5dc945c2f2dbda65da85","skSm":"6836d31499e13bdcc51b8318060e6a752849c9424d02e7f404bb03a0341b0878","skEm":"ca30ef092d6b9bfdf0dc96bc96c5153c8f61cffd01603936ca09fc6146ec523c","pkRm":"07828ba8fb4171c0393edf8cf975268e263245fea4726e16393f536ccca7c46e","pkSm":"76ce23e7f9144663772e283a16fc25950ad4a53b1200a8576442b159d14e5c3f","pkEm":"56a21e8b5416d187c3d865765794e7f361d631049ebbb6a64ed28fd071068121","enc":"56a21e8b5416d187c3d865765794e7f361d631049ebbb6a64ed28fd071068121","shared_secret":"dec9ae331e9017669151e07c06d1cd7f3dd318c180c9cad5223e1c2b019d2243","key_schedule_context":"020c085d4e6d2e6a568b5dcf334f7badd56222cd79f2ac98b6f99059f311c3f16a44c484c33962433c90728ac6c2893f828d58cebf58ba4fdae59b0a8f7ab84ff8","secret":"a78ac3f106be621d7ce48d7f02e9c69f23c042912697a985787c34e5340ca8e7","key":"82a24b8790521d6b2d260664d9bfaefc","nonce":"bb0cb3a72dff841c796fce56","exporter_secret":"933d7ef819b2fabc810db31f7fcbe5b16c4efa0f4b715e888466829d9b22062d","encryptions":[{"aad":"436f756e742d30","ciphertext":"86dea722bc4f4cb0983b70dbdb539cf79e393546805d90d3f832af5f907c86f37ac579976db191a479c9450f37","nonce":"bb0cb3a72dff841c796fce56","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"4f6b757fc0e807cf8f4726ed1bd05c6b87714b2332372795f7e8579fe21e104ff8180fea797855a62f71a37aea","nonce":"bb0cb3a72dff841c796fce57","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"999285da95ed93dfb48bbe99d46ebba43c98e35f6ccd4fed92edf9d618e98174b63a0a2c12ab91521669fdad2c","nonce":"bb0cb3a72dff841c796fce54","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"1a28de36d92f579a485b4ef4c598c7173bee06be8d9cab4aec6a81a0ec545855f72b82fbc078bd2f8cda61acb3","nonce":"bb0cb3a72dff841c796fce55","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"1ac6af74dfe65c63b046eb99fb9036ce759ddf5bfb3a396796892c78ce3f35beeedb7b3d1b515a9dff7d9af365","nonce":"bb0cb3a72dff841c796fce52","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"d7bf489f2452682d7794df762ef0156887dc69e664ecaceeda81825838196cc77ded5ffcea7650cf1739ff7df5","nonce":"bb0cb3a72dff841c796fce53","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"7815584cffb6f9571a2cd317aa84b437dbca0e85bc6f67c075059ad8325007709515b3dfc87246fc7b9d4da2a4","nonce":"bb0cb3a72dff841c796fce50","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"02b863056cd2d58e1214a73cbb81d59ea1397d407da2709b32d65ccf38d86e91872332a51ce64c818788d6c0d0","nonce":"bb0cb3a72dff841c796fce51","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"ef4debbf21e4ed4a1f8eb408907b6c7191196db3cfe301dc57d489fee24e7daf2a30753961d326a393f6d27121","nonce":"bb0cb3a72dff841c796fce5e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"ea8b29a8489eba2c66d01aeb3d937d76374e5fdd86cbae3902cd6c0f4edbd64749453449ac50b86348ad839826","nonce":"bb0cb3a72dff841c796fce5f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"569accd852ca9f1bbb1cc2ac01126f5be0f40cff54c2192f6c7d2e9b4208aae8"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"21e678d4feb8d3e63cad48c0bc0d7cd4d9898f3582306921d6f594c7548748eb"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"9b6d0e4fc457c91692ffed826a7656e33f6deec5b502ac2b8eb895a6bb6e3a65"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"d129c80ae79865868c859543aef97588ee135a7d2d42d026f8055313adb90535"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"082427af691bcea347bda235464d8389a104ec70b3ff1a24c63709a4ad3a9b7a"}]},{"mode":3,"kem_id":32,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"02a965d8f53bbdcc11cc618d4f31f69277500b75959ca97fd533058315511d1b","seedS":"e9c09a3e50073935e75d3846007a26088a93ebf58ad0bb30ad6c42a9d4d2419e","seedE":"c1d1028243a951dbf6469025f3a1304407b08fb932104e61c7aab42ab4f1995c","skRm":"a13722050e593c33f367a4d048dd6a6e0c25b1d8288d8f9ac7a3b00228cad946","skSm":"e19b525b64f4799822d229b5c6769ab4244773aa2d48720d3bbc36aa5b9d5aac","skEm":"d9ddce685897eeccc4390d07f30aceea8151d6c0d3468bc7f2a16702b2ac13e3","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"cbc7508f3232db133971f3c7dfd97f00c01de68ac8103f61fa60ac5ae2800153","pkSm":"48cddb9d276b4d14895e14973bfbd72db587c0036f9a75409b45334844360a7a","pkEm":"0f496b65ac352457865d9f6cb30e0ceaffee742accb016c2c1a7cec68a33244c","enc":"0f496b65ac352457865d9f6cb30e0ceaffee742accb016c2c1a7cec68a33244c","shared_secret":"83272c7b992c197f882d992ef6737bb7f4b17ddf103368e1d7e90b07c946b2e3","key_schedule_context":"03512564fc13bf3387a7d73eb72eb6b62766480582bfe146c4e5afb8788652269644c484c33962433c90728ac6c2893f828d58cebf58ba4fdae59b0a8f7ab84ff8","secret":"619e4c000edf5cb8c2b795fbf2dce842d0ff5cba4e12312f5fc67510eb059560","key":"b305d06827e854504246d9bbae3b1f80","nonce":"4940e55b734bbe1d46e24bd6","exporter_secret":"bd6ec34885e97fe0c07bda3454d47ece7b6e9a1a05f729223485e4335c40cbdf","encryptions":[{"aad":"436f756e742d30","ciphertext":"c7200a5246b4aa9e6878e22830d19466ca31394651ae84383f183991d3a8662415d60e1e073209e6dadd480ff2","nonce":"4940e55b734bbe1d46e24bd6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"8071f54a0a43f77a30de1fd96133d91184b5f863525d7810eb9350aa25558bc470781e62c27fe9a566f15efdc8","nonce":"4940e55b734bbe1d46e24bd7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"fc9747b21f74c098899e408d86c11d28617a1a3eb2d985fe4af7ccea202343df096920759614bfa2586f0f1c5a","nonce":"4940e55b734bbe1d46e24bd4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"feb4cb8de805d855c0df8e75293a2a50cce58c9f4db7ead85e91eb10c498de2878961da5dab9d59237d524f4f6","nonce":"4940e55b734bbe1d46e24bd5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"d85c2d06220ae34064210c4129f8c95dd43c45fb87ab25885467dc2c6a663deb84043eedde254968c55ef693e6","nonce":"4940e55b734bbe1d46e24bd2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"f9f00677d11dfbc321f5bc94c34df253e4f413d01f3e3fcf916ac9a767d0830f17f6bfe772e28642eed51e865c","nonce":"4940e55b734bbe1d46e24bd3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"061c0a2f036735c87afe3e1b091f634ca3dc1b33a393cdf7ddd054c68ea1d26e9c39322d332b2923017700d5a3","nonce":"4940e55b734bbe1d46e24bd0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"9aba719d419a3b91e51c84b905d4bfbbe8ad9b1e47ec15c207b930d4a4cbdd585410390d41cf38107c08872a8f","nonce":"4940e55b734bbe1d46e24bd1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"54fecbce208e6416f62f1e0e12af14937b5b292cb36d6a7df527d38a7f30de63e7846b18662507e46fa389b5af","nonce":"4940e55b734bbe1d46e24bde","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"1d39d1782ab76f9293b709d0958b0faa7b6e8ae299017e42d6595064aaed942f254cdb48db49b5fad6a7842f53","nonce":"4940e55b734bbe1d46e24bdf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"f8e91bf713455564a66e27755294012dda09d1b4bb7d5d8b893678173093aa3f"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"d98a71a97c5cc4c87f74b3bc8073aa41f393942c2a4f41b273676da28f99f139"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"39168f2f0360a48eebcc72bd19504e294b1b456a391014e15b97d0c318f2ae3a"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"1b41f68bd5f990aab48869931b433256f88899111ac158516e2a4326c83eb892"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"9432ffb5d534c88e7e7e5ed8434206be52855547e130b2b75cc1000ced6fef0e"}]},{"mode":0,"kem_id":32,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"83ee68e36ddc609bf738125f72d9f1f27bce7c6934070a69b6c2a78ca921918b","seedE":"adda7fa5deb77a957f598da6f20c056993862b3286845e23e1cc08696ed2f1f2","skRm":"d7f9945b55b697a7452105630095894758508599694f401aaaed77a88364b8a1","skEm":"dfe953241ce3e4bd96b6f7421124136a3203aaa239fda95352eab223e821677d","pkRm":"f14d42cde2eaac0eb8e36c4658b927791941d6e2aefb8435d722b5fac3d3a842","pkEm":"97f8c9d24e6fc9f26de91a180fc2368b43aa7464185e3618d43bb341fb83b75b","enc":"97f8c9d24e6fc9f26de91a180fc2368b43aa7464185e3618d43bb341fb83b75b","shared_secret":"f00937b7094c31669fb1d349f12be9400267872ffd2292d50c5816bd52716a7a","key_schedule_context":"0052abd58a159195ab1612c2748d4ceeea5070496ba8c288bbe08601d1b2d14a4d873ee9cafb5415c4177a8661bc0f493c76414cd81fe7d6e8b390a6e3e6c93abe","secret":"98f6a3a62bb3b8c2cdb9b0f0264616e8863eff6d0f7282b4c153a8e766e5a9c5","key":"2a893cfc4e62539953aa8ff2cc1431562f661ab3b33744f1d4f1708e841435ec","nonce":"5d1b1f352ad6bfcfe9c4da65","exporter_secret":"6786153d8812c7889346b007ec0ca4ec9d9fe1d07e1b1c4e437bc4c69df04be5","encryptions":[{"aad":"436f756e742d30","ciphertext":"922b657481e80bf18b8814a435d31c776759859e8ca40884157247c0cbed07bcbd3c22ed029a50da93d08fa065","nonce":"5d1b1f352ad6bfcfe9c4da65","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"5b6efad025ff8edee5cee6b32f161cb33f2ba397469e9b35a48f9bad8a7a9dd2522748f68a1d64521d79097901","nonce":"5d1b1f352ad6bfcfe9c4da64","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"a2039f9c4b3cf3a71ecf972c55541ae1bef3931a73d98c5178d8f2bbe0c0f56e058077719fc4e63a882f104f64","nonce":"5d1b1f352ad6bfcfe9c4da67","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"ac3967baf9b52e321eecc638ef42c53a7502b60890ac84200a1580bd825d4f89e83c2710c136e56644784f1a71","nonce":"5d1b1f352ad6bfcfe9c4da66","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"cfe4cca91ae9bf4e3c6cfd5d3ab777cda301041ab8c695388f94bb883763b3f0dd85dfaf483c117549176107e8","nonce":"5d1b1f352ad6bfcfe9c4da61","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"721543123239a19a8242c8aab8aa997c04d758fc7819930dda8633dbdc5af5e33c5a451f3d8cd1691e3eb28310","nonce":"5d1b1f352ad6bfcfe9c4da60","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"ef970051362035083bdf24d2262d5a597f4361922eace58811df54c3dc12fc6622f853e4dec8b483178f61567e","nonce":"5d1b1f352ad6bfcfe9c4da63","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"c5653e7a823bdf8d083e3fbdd7c9b9c2838c80cbfcd6d1adfd18d237f43a02d5a83c3808c1d4b4451dbbed5f98","nonce":"5d1b1f352ad6bfcfe9c4da62","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"04278bdacd59166890abb0f67a19c577acb0b108801db93fba1e271522f98d43c2c2fcac66378d174463c146ee","nonce":"5d1b1f352ad6bfcfe9c4da6d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"c0a4e4e239d9c59d61fa2809fc47476941b53b262d95aa14bf29ea24b6de10783148e2762d8900640d2798f255","nonce":"5d1b1f352ad6bfcfe9c4da6c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"de705a4b13a12250f4d5487de67705190737e6d1ba8b57f70d87ba585ea1cf85"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"f4e86ab469491b2a7ad91d17ddb8964884a114549f63d0985355d9b844dacd4c"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"47c20438e2a2fbca12b2ac55c2cccb1ff5ef0907c80ead4bd36ab1a10d57fb2e"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"ae7cd43f0d52ee38ac4655d5f2d191fd8ec573ab1d47702684dfea85b52b5a38"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"807d14a692749503f44e54660e8ebe4e93311715b9ba7d540973b2bb3c606825"}]},{"mode":1,"kem_id":32,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"9d0d68a6649cc66c65782569d4a79da1e2f73a34b84191d759569428479a510c","seedE":"8c51282bb46acb5132fbcf26f1e2cdab29408c19f0f66960d7264d7ce676a023","skRm":"cb798ffb68e7b3db33913c365bf45a811fca8382522ac8815b12b26d3377a049","skEm":"bf3981d4d9b43ea83365747e25d8ba71e14d21cca47e35e70b5311e1d48f8a0d","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"4a9269e9db60008f5c7f3c7d39bb8c4923bc2f244b3ed9085191ef54cd10cf0c","pkEm":"8f65c9f75b4b774d36052dfac0bdd37a03f309b92c9a9ca47e903683be34d04d","enc":"8f65c9f75b4b774d36052dfac0bdd37a03f309b92c9a9ca47e903683be34d04d","shared_secret":"f228aa9be7ff1ebd78f52b8b00b7f15688935ce105e24df508ad27c68eea703a","key_schedule_context":"01e623aa22a604f74ba1383391cf0c046f3461b30b65733a0a9e9043172f9317da873ee9cafb5415c4177a8661bc0f493c76414cd81fe7d6e8b390a6e3e6c93abe","secret":"f7878c2d949a446b44b95b2587dc3cc5155a83a837013582eeefea774b32f526","key":"743493cb30aac02389f8db1be74b6a2f2e09f7b6fe337095b207bb3b750b1ace","nonce":"3b83c923d13310f21c71baba","exporter_secret":"555a2c91cf21b146f7cdd2fce83dc165133b1896613c0e21d31583641b972967","encryptions":[{"aad":"436f756e742d30","ciphertext":"ad2a3e08e10413e7bdf9e89f2db169338fc68bcf8dc7bb073ca779024996de5922d338cf8407d34109cd2fdccf","nonce":"3b83c923d13310f21c71baba","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"d7c94516707aef83e37dc5cbe3e9668260de5954899d54e8ecab3f1cfba8556557f1ff2238f817e0eb75d3cbb7","nonce":"3b83c923d13310f21c71babb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"371412a9a86704990e8d7170282134096fc623c74411d5ff95380692a74c438deb0e38f41bfba0562042e987a0","nonce":"3b83c923d13310f21c71bab8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"4e3486ffca6d42f064c885d169210f6fcce2b3d4981d185d4b1a5c1e82733c14f14fcb8b1f16dd1e7b707907ab","nonce":"3b83c923d13310f21c71bab9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"45f532caeed9f6c35a990812773cfd688f686288dfcb500ae04f8fac4d3704204bb051e704c422edcc3107737b","nonce":"3b83c923d13310f21c71babe","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"1c0aee5fa393a0c4e2dbd70f7ce475542c71fd402b6fb8431855ac8fbafc6801c777996f8243c53a7d96d131c8","nonce":"3b83c923d13310f21c71babf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"66cd0eeb97fc59c1863898f9b7f1f67c82c5aede5794c17937f5e0909641af770c4973aec2a21967c0f17a64ba","nonce":"3b83c923d13310f21c71babc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"c96bb3363b31b582476239e1eb0792d2ac632ddaa7a1dc9ac7f9d588b62970016040a278e448256f5bbbf09ed7","nonce":"3b83c923d13310f21c71babd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"71b3055db5efe1165e685d25c4a749b6fdf8cb7a59f7e3e76cfbf63c109db9387fc751cc9c36cf886dd0f79411","nonce":"3b83c923d13310f21c71bab2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"14372e32a6dee0536a11b66343eb436c099d7adf658900fa624a45d6f1a8e84297c56ec6e05b2745605dfcd99e","nonce":"3b83c923d13310f21c71bab3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"c52ecbb65af1c6764ce7d2fd1131d5f050ee2f943a4fe56e9c855b44385b00cf"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"42c5cf4f81152d05bacc9323e805eab8e429850dd029937c2c42f17ce7fea09b"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"89d7f97327d51d61a4ac04b2507e51a977c8706bd932941f5acf1f542cfd034b"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"581e3a66a1ad5309c3295825bc03407c7d9e34673e61aed2c543b47764577783"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"599f10537288a9ec87d53c16aaa5881715061e6152a5b51b1e0433a396b38d10"}]},{"mode":2,"kem_id":32,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"c1a41b7efd403c8f04e2998c09ad725768ab626cba81880cc676bcdb5dbca74b","seedS":"6cc54ffec5f01c01c5b756c26498c910f2d024713baef267cf225dd2d3c5f409","seedE":"b8975c2b6df6a87ca61f910353f540c1b79aab73015d8f8cf59fd404c9c8a638","skRm":"c771870b6aa79a169d4bd426f34dac32174e78840973a8adbefe0108e3747cc9","skSm":"3735f9ba5702a15fa76c56f8c907b5611dbeafa6390dceccccc3c7f12a17460c","skEm":"ae178b9103efd5eb4f8bde61fb3cd83a52e0c1cce7a4fe859c949331f956d511","pkRm":"081bcda65a1808a9579f7e20ddaa3d03298d1eeba4befcd3d5975972167fbf57","pkSm":"37b491977d9bb9f271a3632064bed9f302d150357d0839ccdbadbcd6173a4419","pkEm":"9d49cfea83e2ccb0cfb7eabdbd1ef6c55fb8ffc739d03e180bf115791ff87c02","enc":"9d49cfea83e2ccb0cfb7eabdbd1ef6c55fb8ffc739d03e180bf115791ff87c02","shared_secret":"c019ff113e0f309e487dc5960adc4fcd6911350a9e85fc4383792122daa73837","key_schedule_context":"0252abd58a159195ab1612c2748d4ceeea5070496ba8c288bbe08601d1b2d14a4d873ee9cafb5415c4177a8661bc0f493c76414cd81fe7d6e8b390a6e3e6c93abe","secret":"b1ceca5c1b3376f8b37f71344c6fe1521090c6ee010692f083e6a5e6e45b6863","key":"83599f5f934755e886914e61a29de1d52ff52ab9517bc5d1c7fb28263a6ceebf","nonce":"447624b35e2c38133a2defd9","exporter_secret":"9f900e30337b61db9d212648d70885f6e40bac84c279b51f9a6fc22da8978e3e","encryptions":[{"aad":"436f756e742d30","ciphertext":"0ba66fa26360c526051791e6f377e6e35d0d7254c9269eaf01ab5b272ff8da13ac7f4339cb325568134e3365f6","nonce":"447624b35e2c38133a2defd9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"689222e02e128c36de72cf5169779a2769ac3a6f39ace69607a44970f9afabc7b236b3c600900d9f7ce9da6e17","nonce":"447624b35e2c38133a2defd8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"75aae78f896b62c95b423c12a087152b0f3f45057c36925cc2ee6e3f9bda3eaf447628e90fd4ca77300b3c45ba","nonce":"447624b35e2c38133a2defdb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"cc3b4f802b2278b4a3107fbbbb7f9e78667fee91957004aa6143cbbc1cef354d311e95010c19152eba1a731f71","nonce":"447624b35e2c38133a2defda","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"7d6dd0646b7ea2ad191d4a6a069e464642ed0c53392a4612238e06700b4ab20e0a9c025fc5b25b1feaae541346","nonce":"447624b35e2c38133a2defdd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"1cf00297bcdb18f8f2295416afdf7cb589982cf50ce6277df8cb3dbd70c270d8b0805111e7f165bd3ea1c24316","nonce":"447624b35e2c38133a2defdc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"cec9a809a4a06ba86c89930ed21a2db95fb8942f70fbf2619be69e0e02169ea18f8390b905bc86435987c424bb","nonce":"447624b35e2c38133a2defdf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"5df50bbe002481f084c0194661e02f670e19898acdde8f78859db4915b951916ce7fc7b717472de39415e095ee","nonce":"447624b35e2c38133a2defde","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"d2f8e9034f9f32cd85e0f69fc9cb4e93c55419bd9b1b7d748528e10d69e7a0654cf424bfcb7d8eef5deb1f3312","nonce":"447624b35e2c38133a2defd1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"3c3661439f0a31e2319b56648f6d4c30efb5922fa222c6be7a389a4d6441a7fb0de07057b455734ba506c2c5a6","nonce":"447624b35e2c38133a2defd0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"bfbc0230819d3e6dba6ae32f39e0840b8ddb14b927800a021bc9376d62462c90"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"207607306e5d68cbd2f32d73f472a9b3cf36598dd316da93d463ea025270935f"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"e498d7a98e6bc111ffb07ec8539d54e0b685061cace510fc5226c56ff1ca9134"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"24555bdc2881b2fa8814bca0803f49d768c7fc05f5f27c10cb8c2df2c4c4d584"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"23cee20b371e7b062ade45eea3e290749cc95e337d80b4d7ee36e4043724b35d"}]},{"mode":3,"kem_id":32,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"127a413bb98fa67dcfa9ae1391d9f2ceb637429ccf7634fbfaaa9b7c2d95394a","seedS":"26715ac5390fc7f72a55a95fc4ea7ea4def939213a1ee511c571edfdadab420e","seedE":"cc1cc98b3286bb960d74a304d96233b1f1d7b7298ebb6b79157c88b83dfbf4ef","skRm":"8368aa6054c102a4c4ca085ba83bd2a6ae241aa2a5f0247af76b0b7756042d46","skSm":"e2eafeb1389d6496565c01b6a4a5ff3f2d69475f8f43118f64768d7ccd0909d8","skEm":"c7a95b0534b3596cdb772bde4c80146bbe33c211d85d3f117b92f7f80796ce46","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"1dc131613febf7dc74dbd3326949bc73c5982335e52282b169807bdc62926148","pkSm":"70f2270817fd42b0ed69b0680fdb2912560f4f0440b9be05d93d7c431e7d8d7c","pkEm":"8b7d2426569473b14243aaffbe2ec64ab0bb58945144335f8fa58261355f3503","enc":"8b7d2426569473b14243aaffbe2ec64ab0bb58945144335f8fa58261355f3503","shared_secret":"0e4a803a76f093f4fb7a82e840cac442b06a0b30cabb20ba59b5982a773f78b3","key_schedule_context":"03e623aa22a604f74ba1383391cf0c046f3461b30b65733a0a9e9043172f9317da873ee9cafb5415c4177a8661bc0f493c76414cd81fe7d6e8b390a6e3e6c93abe","secret":"b7535e2df30b527576f29063894af1e3611957014aaaabe969fd31e47ad8984e","key":"d02364c8e94e08e015e6061ea31eda2c8c0fd5b4973d26dca610af14510b0821","nonce":"a3cd47557401fdf1a349b243","exporter_secret":"0b0f201f5c76048f2fd58d0817583e89807e9d899271bf862b795389be021885","encryptions":[{"aad":"436f756e742d30","ciphertext":"ec5d9354593006285b097295886b22854742ee7f44f0d1dd4235b99bbceec5a95c626fc9983ecb1b2be8f10f6c","nonce":"a3cd47557401fdf1a349b243","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"91b640c5045448c8c6c5657aceeda12c82eb2749611895eacc5bc7c4c8122588e37636823382c7ccb879784817","nonce":"a3cd47557401fdf1a349b242","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"037ed304c37b14836ff38a92fb7ab5a0d797db37f379ee84b6f533b703bf48985c6ae374202d715920325c7cc5","nonce":"a3cd47557401fdf1a349b241","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"9d2c7f7e20007d014aa38308de433e60abb4cfd8dead753ba33c14a6c96c873e5e6ba56a219cd655bb017dbc5c","nonce":"a3cd47557401fdf1a349b240","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"8d970fcc5794969c4a35353adf89d6ea7ab4c62d8546ef1d1d6369ae6bb4a1c1620329e66f93066c7e377ae4ea","nonce":"a3cd47557401fdf1a349b247","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"d67832b32dfb350c6a5272af809ff548bd1998b87662144112b7891966f3476b0600dc774a4d8de682cf84dd66","nonce":"a3cd47557401fdf1a349b246","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"b23098fa0591b56e6a885326d69081eac13723d0d58067b4a66f47bb161f6d18b5b5d708b45dae3ff8ad20ad65","nonce":"a3cd47557401fdf1a349b245","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"091e27dcfa24dc5b26d8a29e1c206a6969354545ba8f793ab8a4a689a3822483184bccf68126541b09c3d68fff","nonce":"a3cd47557401fdf1a349b244","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"f1b42d5b3a4a3e0808d694d101b8b1f8e543511ba4e303fc71d4cf1e5a932817dc26412cbcc6e30947003c6c92","nonce":"a3cd47557401fdf1a349b24b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"d48648b2c75eb86ffb00341417826ca6a9565a5bfd8578dc5e9d663507eed7ff4aca583607c22e8b57f14a0624","nonce":"a3cd47557401fdf1a349b24a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"5e2de257432a21533c1d28cbbc3fa41b6bc7d649ec26ca4b132e7652eb2f7fb8"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"0f233d0ca18809f3c9be821053e24a4d345f5b5a930238341db6fee81aaf0cb4"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"af7de682aa69736a773b872dfa8bb8293943a60686b8a55685ec1c303ebe4bd3"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"ae8b3011f3959dac604fa7256e3e4b99d26f2617d04b160f18b6e0db4d3b2194"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"9e866bddb361fb288d4c4f10d1086ad23c3f8e16694457e93cc7a70c103d4a25"}]},{"mode":3,"kem_id":32,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"9a063358dc95c04f2bdf2a9a2911145c0632f49012829d92b2b5d9f398a9cbe3","seedS":"bc7c6a9ce74ba9e7fff0644da70899148f4775eaa1857478f0275af76cabb764","seedE":"ca35fe19e214033e34465a3bb125dfea8b483e55fb8163774413d95a4d9b1f0e","skRm":"50553ecb05c3ad2feab069f7e767ce7fccf8f99b5f555499b0bec4c88b8541de","skSm":"910500b78fee3ab807b1e08f664d2822be453e7a795e1d613487cf15266ef933","skEm":"753d98048ba28e8bdd6a22c3530dcc208cecb7386aeebca9b49cab1b91f46b6e","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"b8a27c312fd14d866ceed49df7d847879d609d3ba074534f657dae1fb2ef7d3d","pkSm":"1b38fe7dc7c255ba5caf7116eb9fcaf3d63d60a1667042b6e19e769596ee3754","pkEm":"a6125996b3bb128bfa05392ffb39afd1e5b0031625e26c8c484e4aea0721ec39","enc":"a6125996b3bb128bfa05392ffb39afd1e5b0031625e26c8c484e4aea0721ec39","shared_secret":"0c9ac657691ef63b088f9777e84a9a8ccda766f0c9834ad318c0e49cc34fa43f","key_schedule_context":"03f5f7e2ba59c3ff0cff51f71c4204fcfc76c95f778b37ccdc6a83b3df36c33e7b6da3f8f29fa93987a2c185c1c17e719f7ae8eb4d564b80119e012c9c959b0ca1","secret":"502a94d9ee9cf5367beb65a97e7bfeae19a7cfbff25c6a4d2a9d1ece4d744b41","key":"968ebe599b1443cbfbd1914daa5bf667a52cf7a3339ecb209e8684f1f9c97d86","nonce":"a0bcc93f25f5b9e707f453e3","exporter_secret":"12fa76c18f0c16769262574bc6d49e9b22cac1d963e3e6b91031f61ef4277350","encryptions":[{"aad":"436f756e742d30","ciphertext":"1b049559f757b7c16d77bec8a8cf9c1cecc6becaa08aa513c791822b829345cf4477936df226e34804acb93b33","nonce":"a0bcc93f25f5b9e707f453e3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"21311cd102acdb30e18669620623c54dc66eb0c5cc7fad1ac1a327062d89fc1fb6cd1228f8de48418d089a709d","nonce":"a0bcc93f25f5b9e707f453e2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"3e84e9e5c3d004a6d8cea022c8ae5a10bac7d75829a189b137db55e6a5c11974792e8a6b92cc208d615f424d45","nonce":"a0bcc93f25f5b9e707f453e1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"a377781085d6292c5a91fce21c269dd5eb220be5bf2035de16530a98cc0e96ceff4c79b7cb50ede50c2f70bb20","nonce":"a0bcc93f25f5b9e707f453e0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"595f2004a961c4762e418d33821f5c73335a681e75512134c5a5e3912d24bd089b074e018f042e6164bc72c5f5","nonce":"a0bcc93f25f5b9e707f453e7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"4099f8c58c8fabd9af32abd2b9abec08d62b2fd88332f28ed804c64a9aa19a6f87a0950b7e4c5611b18110dff2","nonce":"a0bcc93f25f5b9e707f453e6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"e140cb63407363267cc24b31404281fca03280e3649c2da0f7e1fd4c900777bc5546bea0a3b2f1cf0040b4f2b3","nonce":"a0bcc93f25f5b9e707f453e5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d7c3341b0ec12be40a56c83817f4d1f513c99851b4b26db3a4b848c0f1bb073124d3c4ce0a50b75eeefacc3fe4","nonce":"a0bcc93f25f5b9e707f453e4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"d06d49a68ebf2e9081c526d64648cab19707935222dcfab9eec9cea9a02175debaa8d4a06ad92eb999b437edb7","nonce":"a0bcc93f25f5b9e707f453eb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"462fb838e0be597ad4b4db41c01ec74f5b5a5e981a1ca071c1042d3bd871bc50cc0dc848377fcad65628acb6c1","nonce":"a0bcc93f25f5b9e707f453ea","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"6c1ec2b099cd01a2f9b4f27df92bf6366fb964f6187b95126c00c9756521bfc2"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"7ba60f793b074bf90f9c3a5d910ef5aff0b87b44973047e5e10d98624f0f1238"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"df036ec1ceafd079400aad707110f98b69e461151b55a6506a21eb12e1b8a2f0"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"83657e205ebe05e085beb9d22441df8eb4b3dfac384f65be7165bc31ac670dd2"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"92cd0de496d63d465b9e2e544b3de7b62fae045d12a207d88ef61060053fa475"}]},{"mode":0,"kem_id":32,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"da0002ddf1803c7d54c1fb10fd68eb76afa2aa4577352b9ce26462cf63a97f6f","seedE":"8c5a8a722a10c144a7577a73bbbbddb0284ea3436f9901a12c54eafd6eb5cb81","skRm":"62139576dcbf9878ccd56262d1b28dbea897821c03370d81971513cc74aea3ff","skEm":"5006a9a0f0138b9b5d577ed4a67c4f795aee8fc146ac63d7a4167765be3ad7dc","pkRm":"1ae26f65041b36ad69eb392c198bfd33df1c6ff17a910cb3e49db7506b6a4e7f","pkEm":"716281787b035b2fee90455d951fa70b3db6cc92f13bedfd758c3487994b7020","enc":"716281787b035b2fee90455d951fa70b3db6cc92f13bedfd758c3487994b7020","shared_secret":"f995f043efe63c77ac333fbe6007240fd01006bac1b075d2807845afae89a19f","key_schedule_context":"00cbe688614d6e54c26594f3c118e6cb1a01f6c6572a9112dc2687bd3e8b1e6ba06da3f8f29fa93987a2c185c1c17e719f7ae8eb4d564b80119e012c9c959b0ca1","secret":"b061e1b7e604df2fe8a4d32e25d33aeb5a0849e7b15dd212231adbf656259f8b","key":"1d5e71e2885ddadbcc479798cc65ea74d308f2a9e99c0cc7fe480adce66b5722","nonce":"8354a7fcfef97d4bbef6d24e","exporter_secret":"3ef38fcad3a0bc7fca8ba8ccea4a556db32320bca35140cb9ee6ec6dd801b602","encryptions":[{"aad":"436f756e742d30","ciphertext":"fa4632a400962c98143e58450e75d879365359afca81a5f5b5997c6555647ec302045a80c57d3e2c2abe7e1ced","nonce":"8354a7fcfef97d4bbef6d24e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"8313fcbf760714f5a93b6864820e48dcec3ddd476ad4408ff1c1a1f7bfb8cb8699fada4a9e59bf8086eb1c0635","nonce":"8354a7fcfef97d4bbef6d24f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"020f2856d95b85e1def9549bf327c484d327616f1e213045f117be4c287571ab983958f74766cbc6f8197c8d8d","nonce":"8354a7fcfef97d4bbef6d24c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"14d88332e147f24efd749dc5b37de8d9367fea2dca34f8117bd8d2093e08489fae56595eed6503e2a5997f66a2","nonce":"8354a7fcfef97d4bbef6d24d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"5e688918b05e96631628eef3e74781caf41c4f25ee1ef52ca1d746ca31561392c8833a7232036bf8e839a4c8e0","nonce":"8354a7fcfef97d4bbef6d24a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"3ad1659d8d0060428598bd13b790b0893d81ad11155ed618de7ac950c65a2d4a883a78b954946d58b2395a53db","nonce":"8354a7fcfef97d4bbef6d24b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"08eb46778b70677b32ead9ebe04f31a6dcc06eb19d41a79d9efc5af6e94a54a97558ce7a783b4037112a870a93","nonce":"8354a7fcfef97d4bbef6d248","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"0e3b0d39dfb10f63905b30b12bcbc87735dfbac2e66c3724a6803da266ea58e464df3638cb7605f801e8d8f1f5","nonce":"8354a7fcfef97d4bbef6d249","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"c3f4cdbba72516de891a4b1b6d6ae1cc071a9adb2a17383182c6c5e9d34e38217d59711700f3b3503233225b1d","nonce":"8354a7fcfef97d4bbef6d246","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"7dddf70f5cd25cb840b70fe4355b5c9c77aaaf12fe158114df2718dc2ce9e148eac89966b1b68660135c8eca4b","nonce":"8354a7fcfef97d4bbef6d247","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"22bbe971392c685b55e13544cdaf976f36b89dc1dbe1296c2884971a5aa9e331"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"5c0fa72053a2622d8999b726446db9ef743e725e2cb040afac2d83eae0d41981"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"72b0f9999fd37ac2b948a07dadd01132587501a5a9460d596c1f7383299a2442"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"73d2308ed5bdd63aacd236effa0db2d3a30742b6293a924d95a372e76d90486b"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"d4f8878dbc471935e86cdee08746e53837bbb4b6013003bebb0bc1cc3e074085"}]},{"mode":1,"kem_id":32,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"2dc8b23353f632c2797ba4644fafb7363d958c1fce79162a215863951bd9a06c","seedE":"31c63611a67f55281f76477958758873f7a65113f3e1666ba5fce96e96852684","skRm":"a6ab4e1bb782d580d837843089d65ebe271a0ee9b5a951777cecf1293c58c150","skEm":"4bfdb62b95ae2a1f29f20ea49e24aa2673e0d240c6e967f668f55ed5dee996dc","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"c49b46ed73ecb7d3a6a3e44f54b8f00f9ab872b57dd79ded66d7231a14c64144","pkEm":"f4639297e3305b03d34dd5d86522ddc6ba11a608a0003670a30734823cdd3763","enc":"f4639297e3305b03d34dd5d86522ddc6ba11a608a0003670a30734823cdd3763","shared_secret":"95978c18311fc9e360209dd2cd10b2fcacf019ed25f7703cb2b4e4538558c13f","key_schedule_context":"01f5f7e2ba59c3ff0cff51f71c4204fcfc76c95f778b37ccdc6a83b3df36c33e7b6da3f8f29fa93987a2c185c1c17e719f7ae8eb4d564b80119e012c9c959b0ca1","secret":"2c25a1d6e3b889cc8ea031a96aa3357f16973f83ab1d444114e7bb4f56e4a639","key":"396c06a52b39d0930594aa2c6944561cc1741f638557a12bef1c1cad349157c9","nonce":"baa4ecf96b5d6d536d0d7210","exporter_secret":"96c88d4b561a2fc98cbafc9cb7d98895c8962ba5d9693da550cf7ed115d9753f","encryptions":[{"aad":"436f756e742d30","ciphertext":"f97ca72675b8199e8ffec65b4c200d901110b177b246f241b6f9716fb60b35b32a6d452675534b591e8141468a","nonce":"baa4ecf96b5d6d536d0d7210","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"57796e2b9dd0ddf807f1a7cb5884dfc50e61468c4fd69fa03963731e51674ca88fee94eeac3290734e1627ded6","nonce":"baa4ecf96b5d6d536d0d7211","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"b514150af1057151687d0036a9b4a3ad50fb186253f839d8433622baa85719ed5d2532017a0ce7b9ca0007f276","nonce":"baa4ecf96b5d6d536d0d7212","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"50a645f0f9bddac7b1029dba61921d2cdc10258e6d67e4918000eab0d617fb04a655caeeab308eb159585ae07a","nonce":"baa4ecf96b5d6d536d0d7213","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"6232e4a184dbff7361f9e4d6bfaaf97631225ee317e63cb09e8f74fc93efeedb6385d4f4cb2e30ffb82aea0e1f","nonce":"baa4ecf96b5d6d536d0d7214","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"ab801465f2080c1b9a06b582a919b51fc289e1b5b14bbad0b09cd92a82d27a1de1b934fd809cde8f19ef988373","nonce":"baa4ecf96b5d6d536d0d7215","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"83248649e62ac67c3b9d5525b886c04960b00b02df2d34c91284e8ed537feba132b03d12b868822af1e583118d","nonce":"baa4ecf96b5d6d536d0d7216","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"5ad03248b8e5270a654b090df5eb8955120d5cdc00f5dfb004942125cec1fbcbaef7d9fdef284bddc134018b74","nonce":"baa4ecf96b5d6d536d0d7217","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"56333a4ee1e5512cf2ffa1fd135fa54ba666f4388cf654fda9d7696ccfca1c51facda5a9bf80c9ac789026955a","nonce":"baa4ecf96b5d6d536d0d7218","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"e352a356575dcee382c8d2489bc45dc3a757979638e952dbac969eb092e9c616d8654e9dec8d1c0777e39478c3","nonce":"baa4ecf96b5d6d536d0d7219","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"735400cd9b9193daffe840f412074728ade6b1978e9ae27957aacd588dbd7c9e"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"cf4e351e1943d171ff2d88726f18160086ecbec52a8151dba8cf5ba0737a6097"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"8e23b44d4f23dd906d1c100580a670d171132c9786212c4ca2876a1541a84fae"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"56252a940ece53d4013eb619b444ee1d019a08eec427ded2b6dbf24be624a4a0"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"fc6cdca9ce8ab062401478ffd16ee1c07e2b15d7c781d4227f07c6043d937fad"}]},{"mode":2,"kem_id":32,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"71237558db2b55c1a09f6695187d2af6e7d1dd97256cbb927bfc8a794476d07f","seedS":"4255c61730d15a7ed2018a023ad45274c1ab38ce621d4b597636e08e97619ef1","seedE":"c9c2d6f5a6f88e4c2bf5600817aa140fcb46dc682942bfca357c30fe2db17d6b","skRm":"05f54678e1c66bccf4c485cd297d080b4bfaf7cb049f876d80d9102f8ad06fb6","skSm":"18bbae7f265b459930a1e2773c6e3d447ba1bbdc8a59d91bbae159e87f131e8b","skEm":"91f86be15caa8696aea8e14c27c05a5139a87d049a3cfb97606989c7cd996335","pkRm":"c7667fb6e14617b12aa7bbc25cb916b360b324b0e08d10570533d258b8a87962","pkSm":"2c8f2577674c52ed6c8e6d3485afb7746a1edd02985b85f139fa51c617ea0070","pkEm":"f82cc290dd57c0c63f041ad62605d1ae0c5436243e18758b2b63658904ee6a09","enc":"f82cc290dd57c0c63f041ad62605d1ae0c5436243e18758b2b63658904ee6a09","shared_secret":"92d03a5e87f58fda583129e62f1cb55769df02a2453863b0a09f55e4bd5ff7be","key_schedule_context":"02cbe688614d6e54c26594f3c118e6cb1a01f6c6572a9112dc2687bd3e8b1e6ba06da3f8f29fa93987a2c185c1c17e719f7ae8eb4d564b80119e012c9c959b0ca1","secret":"4760feb6cc5ac6891ef2114490723c6ca2ad3352b2c52a60b390616d731f7767","key":"7638c7ade5856344fbc3a92600fa278dfff1c22b5857fe2c391e5bd248ac32ac","nonce":"1d14b2320b54376e6c43e791","exporter_secret":"0ea20eb846e3c26f1ee8b2ecf55c9abdfecc910387945528c73a5ff91bc4ef38","encryptions":[{"aad":"436f756e742d30","ciphertext":"30b013196168dcaf7a07047eda596f8c4f425abe6cfa269a7602b2a2b0bea958e2ded3c68c8c9e341ca4bf2e31","nonce":"1d14b2320b54376e6c43e791","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"a259ce67a35c44ff9616f83cceadb2f0f542b208e9410686ece7e3eb92f08ca2e3fc95ccde64e849c96367952a","nonce":"1d14b2320b54376e6c43e790","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"4691caf957cf159e39a3f66cee9cd76e06ae3e7f97c577898423babfdc9800669d69356531dab839e0a491d502","nonce":"1d14b2320b54376e6c43e793","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"11acad0d8b2d5f2e82bdb87201f5b09df5f71c4341eb33a8a0c6f253bd122945b5706d40a11614ee128cae6131","nonce":"1d14b2320b54376e6c43e792","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"471ccbb6a81a3bfcc4c11dbeed62e95a7279fdab214f3b0cf22e998a89a2fd054fdf6326ea6a340b20cfafae20","nonce":"1d14b2320b54376e6c43e795","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"9a51e37bc5c41261c6fcb9f8036611faffc4e39a2190b3c313c2ef62d8904a14a6ad81cd56d56e1ab99d5b3889","nonce":"1d14b2320b54376e6c43e794","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"822661572ff4fb84619b4b12c38640fc1b1ebad69fb97dd425ce0efa4fe08aa9090bc2297aad658ede2cc20a96","nonce":"1d14b2320b54376e6c43e797","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"5ca6f9ced86a2f0fda6e1c2f0ac2a9ec3c9ce66c467fdb306a94cba91d9bf50e435f75416633bad5c97bedc730","nonce":"1d14b2320b54376e6c43e796","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"1128b6ad625f2617d471f1608aa45b21122b43dd212223a62445e301e3c4ef4ca199bb7bfcb7b20d509a08b14e","nonce":"1d14b2320b54376e6c43e799","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"3658f02680a2beea1e1e3502f4714521cbbb4578a13812d3aea17147e79b4ae062bd1f8790bf4f20607cfd4dfc","nonce":"1d14b2320b54376e6c43e798","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"b8902ea677882e79e60f0e65253918c21b346a97fc2767ad3f47e51d387b6400"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"aa92552439bd2ad01821df3dc0d554ec2ddfaa744df9e338db8a523fb24b4170"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"64c8473dd1d246edf1cca89cf90c37c38aaf0a80745f2d085a143179f77e444b"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"bfa826352fddf2fa033349f0a9fdc679f4df87af7d94723657119531ff4e81e3"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"ec90bb6309c5d1a206f8ed9789f08abf76469c0507edbfaa4586d4aee0d68c1b"}]},{"mode":3,"kem_id":32,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"5e9430f75100e243779110bcd9166d0581dfd2f99db6e0080457e147295bf34d","seedS":"5d1d360a576b3ed866b57bf67e7bcc2280b28c050abb1b4c000f851ed2a48547","seedE":"5915b3eb940bdab74b2fb99d50d1fe978ee9d52063a68595db47f4cfb08d310e","skRm":"f7f65fbb3dccb4296f8e184f08e8cab0cc713367d7fe482ab0bc82f70426fc9a","skSm":"37185c6564c333864a81671f36f49dde8e0ede8ab44c0f9ef2a18d378d3ef737","skEm":"589a5406ccac263fc8d7b442a71835e14e90eb4fdc9e43e92070fc6b7cdfe404","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"e05a289a384add8f188bbc2c875b7e361e0475d099eb6d27cc49e88664fadf6d","pkSm":"1f47c8be014cabf904cea3a57ffb41c5faf20ed7aad5b538979a61e7f4f56b09","pkEm":"cb6469d6708a6e4a0d4f36b875a90849e230689cdd17be2bc724b4d12bc9cb29","enc":"cb6469d6708a6e4a0d4f36b875a90849e230689cdd17be2bc724b4d12bc9cb29","shared_secret":"facb471314510a2aae54c0a110018c89ab2f80ccf1a8298f7cf0269e13db94d4","key_schedule_context":"03cc094b22955765a9aa3dc3ff58b26c8c84758bed960d693e13d606cca12454c2dcc3cbad2443923c74ac8b066de4f99a57ceceb24859069eb6c7d69ae315def8762135448ab48be035e789e67e0affbee59d601f0251c30987f11cfc5ac445462e5ce28b7932d547576975e27519875cc5504c30c151aa97ee3dc1398788d52a","secret":"9a2b49cda253a428a2e9c41f6143eaf748539bc10f2e2c959155f9062b3caef9eeff54811abee4c48c04cad4bbbf3cf87949add9901ef20a7941a0850f43ae2a","key":"7b24b1064c176c7a7b63cc2bf5488765","nonce":"c20982814d1fec4d10678e67","exporter_secret":"04337c3fa35c7e4ff83a14cd5e78741f6f31db85bd80529ceab30e5c850b955510d8feee8c255334547ac14fb16bc7fc2270f4fe99548e4ed7abebc5253acc33","encryptions":[{"aad":"436f756e742d30","ciphertext":"5417bcde0bcf1e2aa3b3d497fb05096a76925a678db4afbc34861a895bf25fe3731b09b9fbb57907784cad077c","nonce":"c20982814d1fec4d10678e67","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"c046ce0b0edd3c3868a740626f9263641046e0364cbe0448b8abd3e7f2cd744670d6fadf112b3fad35e29740c3","nonce":"c20982814d1fec4d10678e66","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"7235ba9a22292c6f49d982fcf97790d403b68746db53150a7b1dd25b5a7187ef4103763ff61d5faae82222cf1e","nonce":"c20982814d1fec4d10678e65","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"06f54ba39744b06d3947a03333427f807578415d4a4bcaf8b011b691f758a145ed137b843d50e7ad4eae44bc0c","nonce":"c20982814d1fec4d10678e64","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"b7c642834a9d609fe87fc7443659ab5fbdc8a4be018ae6d4166001095c9cb362bd713448a3e8b625ddd545e650","nonce":"c20982814d1fec4d10678e63","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"098e528b7b818ea150eeea942ad6457ecdad711ba6a8f8ef4a1685f77c0de09ceeee2cad0ae341fba8c4342890","nonce":"c20982814d1fec4d10678e62","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"dd3df7c7678904c08faf2cc95996834dcebc8832c039325f94e915e34a6249e46714de28cc22ce9d9a7c7b83b5","nonce":"c20982814d1fec4d10678e61","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"498724f30c4e624f9dae0883e5ce979839d3b1aa5094dccbbcdcef13d687747e79d1808462c619bf635e7c77fa","nonce":"c20982814d1fec4d10678e60","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"20af71cd8eedd815958bc62cdfab2bb612dd9fb8fe32bda58dc357939b73108180d4140278fcbe6633617d5c19","nonce":"c20982814d1fec4d10678e6f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"4e07810b686425fe70974a481317d09d89b1d49dd0e164a12c44c7f15d92445b3dd30eb3ea3c166ecc49345b38","nonce":"c20982814d1fec4d10678e6e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"14877f91ade5df257d363a72709b108a728c225a4a3efa9c29d961dc931f2a0e"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"447583e788e3e0d6336d2b373775023ab55a2bf448a6df7fd6da8276c24da466"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"5815b192c95cd1614f4b0de668c63a50b409ad73d95b6eec674484f7044e4f36"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e33e1e5c7556debeda5da3c8de0dc486b3d712a82e7f3c2161f1f01fc037332f"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"f5f9e2657aab8c09a2f7566a51b199c84761ad683f80bb371a2e4553475bd1cb"}]},{"mode":0,"kem_id":32,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"a786126e19a5e0e3c4e54b7882fb80fcbf19941cd4183c67d467c91af0927239","seedE":"4bdf1773e0b1f9baf8ae5b49682f5b419ac2f2dc399e2f81381d869416e30246","skRm":"f1d9c20bd7a7b88aea23c2d6f457b9d14c83a02f4bd52ed34760e3a70b4d1f5e","skEm":"7854915a6fbec01530902324cee60646536d189633d980f04dc03711b49defb2","pkRm":"cdb3ddcca2377569ab2888bc2c529ea8c16e55bb68f6925888a9212aad89fc19","pkEm":"d1976db4826912a68d1e1d562ba37b2a04faef62e71193c142d78b874bb24f78","enc":"d1976db4826912a68d1e1d562ba37b2a04faef62e71193c142d78b874bb24f78","shared_secret":"0b41304c37562993d694c0f8ca11800c028f56a993d0812bca623fbbfac185df","key_schedule_context":"006203383e1ae65f6b455b5858e95955a07ebf7b673d1ef93ae2bd3bd4cfd952978a62a7d140c519e4a4d9167aed8819b2034c29fce41574f10a87e0dac20767a4762135448ab48be035e789e67e0affbee59d601f0251c30987f11cfc5ac445462e5ce28b7932d547576975e27519875cc5504c30c151aa97ee3dc1398788d52a","secret":"333b5f32babf57b5d712101d00b41d6b46b19ba5ea365be46c7edac2f27d68eceefededd7e1d1e2cbf59dbc95e7f6a4fa7f8fc2d56cad77daf293a8281f6197b","key":"db2ed7a433455b2e89c7c8cea7693cf1","nonce":"9ad24c7c53bfb35a41210b0e","exporter_secret":"1cb1229f21d3599f4b8317e1a419fa3360a6ea9923245e29e934c30502d3ace6bedb9ebfb99909d1f6afcda7039d0517d52e3c6dbb303673714c089179df710f","encryptions":[{"aad":"436f756e742d30","ciphertext":"fbba8d4f66c1a5cf77a89eaf5201a538a7e6fc8a37b6bd96a29fc3cc7a51496ec92f46e6392dcec9eba772109f","nonce":"9ad24c7c53bfb35a41210b0e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"05326c3d17447ac21d1f17e720c93c7a9fc3f57c1bb682cafbd026e27def58b950aeab78cc17a070e992552436","nonce":"9ad24c7c53bfb35a41210b0f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"55958c515d297358af6ea2c952ec05513499ef9923c282dafa8b235e7bad03c130cc838c765a9e604c7aaa1c9f","nonce":"9ad24c7c53bfb35a41210b0c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"60dbbaecf091daabb228b43111979f1212dfef251017606443671a160419655f170f8ee2f23ad1754a56de4107","nonce":"9ad24c7c53bfb35a41210b0d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"d316d2a28311d228c341a36fdee46028bb44b0a474a1059113440e970a3064cf9a72a56b24577c0f84341a125d","nonce":"9ad24c7c53bfb35a41210b0a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"48dc6be6fd66205fba951df5aa2b33d8e25641075f3cb2f4d165b909be1318bbc5f3450549f2e746f078478f7c","nonce":"9ad24c7c53bfb35a41210b0b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"ea1e4f1154364ef394d9493e2d5e9e33e98f7e64f2a51d0f394851d3329e7aecf7a8dc6c24ca1b12420dd210df","nonce":"9ad24c7c53bfb35a41210b08","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"c0bd46a29e1ac5f34755f87928e4fc1b8d1894d0e731fac3c706a33a7f2a15fed65566c345f0bfcdb708adcb1f","nonce":"9ad24c7c53bfb35a41210b09","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"8a24e35391caf3359190ad6b25a4536bdca240273e65ffba76c978d8f2047c7a291e4caf8aac2af4b04ef8365d","nonce":"9ad24c7c53bfb35a41210b06","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"5b9b653e1fc92401823f8f0914763056d012b0a9830809d1ad68363ddf278ad9bf58f9e727a2ee9e4524d2f28a","nonce":"9ad24c7c53bfb35a41210b07","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"760cec56bab6780fb7ee51563e7b9e6145d38ffda10faa1053f65b1f74fc2733"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"25e50184173be00e1e07a8e6a8bbda8bf628909f7088e01b9b1c720ece0526fd"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"fa4207bb0bff9af2183978736f84a703d23568b82675a964681383c3f11047eb"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"fdbebeb2901e996284387bf0a7d4d26ee8eca9f7f5858bf98015d7595813bad3"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"1538807322f02dbded405d10de3aafc4f6d365d9aefbef081d114dcedbe1cae2"}]},{"mode":1,"kem_id":32,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"43ecb1a6e630e12cb24332e2a08951ff7d94937d46f591381cba6f7a463d200b","seedE":"0cf1f0a982cf339261868e6548345d5e610054d55daf35fd41a166ffef95b8ad","skRm":"ac1f54ecf81f53a71c5be7f734346fffe084ba6f5966d2b3173df819145bd722","skEm":"20c9020273ac6193f27fb69af406cdab8154090c28aa2c7b870b92513d8805f4","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"7e8561e6b753c6992df8d89cc1e447bebd4e21fcd4d1dc868f6b2ea663ce7e18","pkEm":"7c35810fdc4009af7cb98dca0838ad32495c71c3003be650ed1ea0f6cd1ecc3c","enc":"7c35810fdc4009af7cb98dca0838ad32495c71c3003be650ed1ea0f6cd1ecc3c","shared_secret":"29755d2e5faab6748d601ec4c68c752ab23f04d6438c21ab14acdfab860cd4cd","key_schedule_context":"01cc094b22955765a9aa3dc3ff58b26c8c84758bed960d693e13d606cca12454c2dcc3cbad2443923c74ac8b066de4f99a57ceceb24859069eb6c7d69ae315def8762135448ab48be035e789e67e0affbee59d601f0251c30987f11cfc5ac445462e5ce28b7932d547576975e27519875cc5504c30c151aa97ee3dc1398788d52a","secret":"c809f7b5f7421deb5812b39a787aed6b52591115c427d3d53b578f419d0dbc3ded44f89a822f1caf9c2438d020caf2e78858c1f1825ff929d96acfdf317d17c1","key":"b11d0f2382a047a9b0ffec876c42b57b","nonce":"3414ed70345e48e38abc1414","exporter_secret":"2985eb1aa88c3425898e1ebca382890438b961d0f79edb76ab6a41fbb0e9516c4f41dea0b592e32aa9fdd8aecd69a7751e028b0b043d0fb642411847b44d5a07","encryptions":[{"aad":"436f756e742d30","ciphertext":"13d119d97709546435a5fbc99a39d9ac3f2ef459c9841305582282c435aab714af1df2f52bd07f196bfe9294f5","nonce":"3414ed70345e48e38abc1414","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"e8f9743ee3eeb41cebade4ba2f0d758b679c560a53a720aeb88017bbd778537b02b3eca27bca61fa13898847ec","nonce":"3414ed70345e48e38abc1415","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"7f0218fe141ffccc6229d096516a27cce109e1300f59a3500288cc1bb57c765b91b4a240075493d94abb9e4cf9","nonce":"3414ed70345e48e38abc1416","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"b893adce352a2b1c780f67475062a9eb827ba2fb2e7ec4ae21e27d6663e1a988d81390b50d99b4de2b451afce1","nonce":"3414ed70345e48e38abc1417","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"8e733ddc1dd2b80ad6decf1b0ce08a28e9f5e644a7439621cd028ac9599c7657dac34173f7d5489e34be099462","nonce":"3414ed70345e48e38abc1410","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"4551173fc2233def235d52c738dc5095bc7abb6e3c3c7f8e58ae983bf68cb5b6fdfdf334b9bef4e1c5b11c2884","nonce":"3414ed70345e48e38abc1411","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"3384441833b623b36930d89a3e795fcc31e703d460ec48dc43be345794a2d73af9f4283494f23b904ba609197d","nonce":"3414ed70345e48e38abc1412","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"ad5a5977bd3486ec319850a52fb8e7cba74d0e2c2ee261ec9a6b2bfb579f7a55f8bac5ab774c2bc28d86623ff7","nonce":"3414ed70345e48e38abc1413","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"8d4466e0d99086ee1c0171a111a2c1ea5736ba9324eb20aa0d071dcd8c4581ea1dda96e25dd3f341c84c9c3529","nonce":"3414ed70345e48e38abc141c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"adf8ca449b303657e9d81bf9566d7562d9b28d9c63758bfa93586f5ba69a2fe2dca1dafd022831de39b6453c28","nonce":"3414ed70345e48e38abc141d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"899f63d5646d1116e63029c0c03a3a8b63b815af58a0e197c440e8075daa220d"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"a2da1ff2773723418e07c63d39455d70be0865d6d0fb29e355eda599a62441da"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"1c361d5b9b14c6f75660c8c960b908394c0281895fbba9288730822511a24171"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"b5258b7e39ea3a68177b50a5a492b6cb8083707a1756e5a7d5d4370556c856de"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"81ddfe54c7894f987e2945333a5ec809068890587759b6407feb1d6f1ca26e6e"}]},{"mode":2,"kem_id":32,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"820bf46d4ab7bebf7a02c40192ccd12787e7f9ed3dc7b8ae82d1c91d5d15ddb9","seedS":"52ad475488a9dc5a8f9d135b64e1d254db3d29b77774834df12cdd0942a24ebb","seedE":"5b2125ff49e1a1c36f8759c6558ce9c12dfeb1b5e241341fd3fdbe7330522640","skRm":"cb83517c3c0cc1dbfa0498b8f279789e193b17401e884cf06173d656f98820aa","skSm":"ad94176aac3504ee1d0f30ae7f38c21d6f3e5227a19cf24d1ebf7d69dc17dc1c","skEm":"0374f17011a923033eae1847e561e82c259889d35168261eae560c3764ba7f3d","pkRm":"fec1d8bfa85daa89319ddd2d46684f42fce1c0a25c4bfa07b54eb4e3dbdeba03","pkSm":"80417415eb586d2bd47412519393c1165b073f57086ba95e72c177766854710e","pkEm":"1f17c1c0b29d9c312fe8f71c0e29f5441998fdbd0b029a1d52a751d8b01b6b58","enc":"1f17c1c0b29d9c312fe8f71c0e29f5441998fdbd0b029a1d52a751d8b01b6b58","shared_secret":"fc4fedbcd0985bc84eaee1aa6b174e6273ac9f16c6048fdfb02faa9560199a0b","key_schedule_context":"026203383e1ae65f6b455b5858e95955a07ebf7b673d1ef93ae2bd3bd4cfd952978a62a7d140c519e4a4d9167aed8819b2034c29fce41574f10a87e0dac20767a4762135448ab48be035e789e67e0affbee59d601f0251c30987f11cfc5ac445462e5ce28b7932d547576975e27519875cc5504c30c151aa97ee3dc1398788d52a","secret":"b182e6f939f95a4e97cd8a239da503e39e614c911a1142c6b79275085e22d80cc4c9113b3bf9379f8930805aaff187652b2cda69d98de2340ded32a90b244efe","key":"26321329cf054a5576d37b0a0c9fde45","nonce":"003ec10fde32244c5dce2b8d","exporter_secret":"9c5125374a4d074afa1fb2f8d875ebae2b2bb4436cee8dc57be6fe64c493492c46c6c04ca58c1b94f1126859c7459ac8fd08c8945219987fd02fa8fd14027bf6","encryptions":[{"aad":"436f756e742d30","ciphertext":"837827a4dc33b7a23ab23ddb5f0ed898c5f744609ec9bde56f6b07bf0373b6585c9b04df17203595a4a683bb47","nonce":"003ec10fde32244c5dce2b8d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"20a40e718f89db3fccbe3fef32b7ceee4419e1aa6be0844dd81914f44658d9b39efe412debaff411a186a45824","nonce":"003ec10fde32244c5dce2b8c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"1bd2f1d9195420adfa58e7d06aa900354006388e51bf1d065e2f891cb7175b00a297d4eba78a584589916e806b","nonce":"003ec10fde32244c5dce2b8f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"2e56cabafa81dcd7c5e58e2060c98fa8e3543e1c76065abd390a72c6d3a39745b49d23a3090e360783d3600e37","nonce":"003ec10fde32244c5dce2b8e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"fe3390926d7896140c946723f50dd12980dc5097990f67e050b5a99d10b6947449f6953871234db7a2afcafe23","nonce":"003ec10fde32244c5dce2b89","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"f9d9374b9287be63f8daa4404bb150f162ccf97afd74c7016bf03085f9f4b9511cc2e1cc48618553474c7c7767","nonce":"003ec10fde32244c5dce2b88","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"ff60b8b544531a5cdf5dbd0a79a76a50f3369f327b05d5c2145bf24567a475bcaf2e167495685c55454d56b98c","nonce":"003ec10fde32244c5dce2b8b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"8df1f8d039429ef3b6e1e27b9bd59d609c3d0e7515a88c3ca8446ef3350c2f32a8cb0e78ee0b42388ad957537f","nonce":"003ec10fde32244c5dce2b8a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"0a506355098c5f15c8f46212eb8b3df09525207b5d32e180848f9f77022bf7d58bbae86830fc45e658d6c6f527","nonce":"003ec10fde32244c5dce2b85","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"a3f4cec2871eae9c16d3093442d065e3314fc78e603e7730cdcbff81e92b8dc0789a5a1290dc9cfc5c881ec894","nonce":"003ec10fde32244c5dce2b84","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"0ec37494f7b2544c1f448226710ee12be3b12c54cae4168e4617fed253b08095"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"77c29b8ed6700ca670a6db3af32bfe1a9c779c695b36e7359df169aefc68ec64"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"a91be9089d657c587a7ad01cb7809760d8f8b7dc91d6d36e56f65ddffa6d62e6"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"a840afe2012451a8115f49894473d23124de4341fbd4212a6127fa1db05278db"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"0af4ca04a20107f7398a6aa40e2674e3fce58618837b89914fa6e1b8980390b8"}]},{"mode":0,"kem_id":32,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"e783b7ad03555657c49ba93b11e2b5ea13fc69b9548b59fe2389f9d879531efa","seedE":"d1497d0f8d8ec8db2b4774e8367f54be80f4c0dc0e9beef474c35e8e3fe8d762","skRm":"6c84707a1b8a46e356795ce20e2f556da0f518eb29477ceb2b5dcfdd68989212","skEm":"64ed0bb5e6b71e91eaf9fbf5196f422f8430f0d79b91844b892b59c25086c628","pkRm":"bc66fc66209686476b3c9b2e7489a3bdb9835df1a888eb5022c417d0ca1fdf7f","pkEm":"ba09ff75d7e2a7a2fa9d698a0706a4e1bad0d5615c55c69628aa88b3fc270a6d","enc":"ba09ff75d7e2a7a2fa9d698a0706a4e1bad0d5615c55c69628aa88b3fc270a6d","shared_secret":"9defe9cf50fffc4242ba343f05d6a071fe3ace1c9d9093eb76265f51609f2151","key_schedule_context":"0073f945acda7f7a9a792b4a2ea025189ef12f6b88a87b421600137423872748fd73ecbafd48f4c15c1959360588c12918ef3b7804b01b088b9c7329c283be06d822b8255fb5743844a872c00dab0350f4b3c350db3842f9b3f8951a62ee666551a290ffb1a799100f0b56291f800042cad3fd852fcb2a723ebe437daa77ed156b","secret":"561142644e4ba9117267514b04f1ba228da1ee10b20b12cf8ab44fddef9431e1ad055103f2559f32fbe8a2cc61d570648e3c697b7a67c26ed20b5e1f010b224d","key":"886c8089975343cb4bd736c5f31ee45d3289133034723e9aaa0eea6d0054b775","nonce":"f70c49b42ede03de377b48e1","exporter_secret":"1b06858fe246cc0260d9fc0275c6b741946a87d3ffafdbe8d0ce6776fb0387bcf92fb07bb305df7a7ce872b6d6728f9eff6cafc9ae0a330887f17e098cb1cb8f","encryptions":[{"aad":"436f756e742d30","ciphertext":"65e2512b6bea0738746d1c9b5a3bc2149c5c7fd43ade420b4c55f884264a2c606dee89aeafa6a66e55213a0dec","nonce":"f70c49b42ede03de377b48e1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"32fa3a5253b53a802a493f9a2c4857775b641a16989c643ce2b2f4c01e49e39b72e961c9a3ed4b648fcde75a11","nonce":"f70c49b42ede03de377b48e0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"0e537e6ccff81b53299c440e9045e1374944f9b60c175903037ad7d551e61ee9915b78035c297df7c6134c3ec6","nonce":"f70c49b42ede03de377b48e3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"b8c65d5c4bd920821f82c2499da8286f74998bcd4ae102e66987bfc7580094612fa0c560ad37784bda9298fc1e","nonce":"f70c49b42ede03de377b48e2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"c8f1681adebac7f109b5cf5b0c7e85fbaa190d3d4a9d16ada8e08763feed8ef2fcb2bb85081c1f652fd45d2a29","nonce":"f70c49b42ede03de377b48e5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"8240b9bce84dc4b202d61e1687b37d746e49b233820d3493ac2a5c97cb3a2f70839fb6f7c4b6eaa80e21e80d76","nonce":"f70c49b42ede03de377b48e4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"42541a69b5953fd02ea5a2f5129447425572c99339a3228016f49153def718e1315292ce7d2c8b3a7f74567bdf","nonce":"f70c49b42ede03de377b48e7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d2316427e8c48f92f70acc180818e642aba734dd481dd889d47a08fa9a9cb67aa39ed90faad8bda2151a745391","nonce":"f70c49b42ede03de377b48e6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"dbdbb33329d44fb93c437343af27791b2817c1ec392f6771ea598e60e73d06b2714978034f2b5270e80f0945fb","nonce":"f70c49b42ede03de377b48e9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"f8c7f2a437bbcc472cba3aa7928414e4b4cf9867e0b12be1b4de0f8a9177a19d4c2f4fcb7f1f27cad391d7f3a2","nonce":"f70c49b42ede03de377b48e8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"87c135b0f1670f076865bd364a21612ef0afa0cb70daceea3ba9a01b0007a521"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"f25e4fd51a25cc972a405638273d2a7b7ee84807633121b2611da1bdf15a2f46"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"83e790e3c6dc91401e5fd3070f31b3a8886ad26d177b0dd2c4e38e1530154bbd"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"3d4f5cb496ace65fdd21b82568ae0e528526df3f10760c55784a2c9a1f46bc37"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"5c49cd3ebcb956aeb7e41c9a0f2d4b4c9501f66cc544d8d7fa62ce96d2938857"}]},{"mode":1,"kem_id":32,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"0d03b1625cd52b651ce738cbb7053a39ccce696a2783a03e3e9db11cb0a68265","seedE":"10a5f0275769776ea7f121bb9fd7b12f062b8bc14bfaa502bfbcc937cbbd163f","skRm":"939a0b48510924ccf6449c0eaaa1069bb41ab9cf54d090e6c6eb9aaab6051d69","skEm":"d3668380f7053086047e1f8a66e0e32c45c1086002b6a67dc9a942058a655073","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"4af18720a608d13ce17268aa1721876e96ec4173a40788ddfd60c886b4c08605","pkEm":"2ed53926385da5d41c76e75a636cd795fea5200d0e7ef6affd4b741a1196be37","enc":"2ed53926385da5d41c76e75a636cd795fea5200d0e7ef6affd4b741a1196be37","shared_secret":"24f1483ed8d4abe6c92a5c5e5e61e28e9314a71dacf646c6bbb9cff1bcaf0918","key_schedule_context":"01dd48bfdb63d00c44a4845d06c258b5c5b4ccdf948bc3d346a3dde3bcf3b46db6064faa4d81649134adeab3c4027df3962ff1c6fea27fc18fbc63e9d4bf262b3c22b8255fb5743844a872c00dab0350f4b3c350db3842f9b3f8951a62ee666551a290ffb1a799100f0b56291f800042cad3fd852fcb2a723ebe437daa77ed156b","secret":"b99a46823fbdd9b6c3da2adb68d2030cfbf85d3ab7453d91b485dc40799ac1e4eb17a06519f46597b87d211f70008ad9584e69a1e89704be0e20a4f2dcfbef17","key":"36cfcebe83218f402cd1ac2961c6e27d0201affee517fc13360d79bf4d82b3ad","nonce":"590c8c1ac13132d2068c994d","exporter_secret":"b43d818759306b815ceb2d8258414cceb0add065b455d0e95c5c40635d78e9e3ba5ef66f23c237a4f1ee08a709365291577e83d9f620f41a0e94754b6c61fadc","encryptions":[{"aad":"436f756e742d30","ciphertext":"b5039652103f36bdcf1380b947ed8b6dc3413b98cff2c6451aff5fabee7234ace274918eb665f6d08850a70093","nonce":"590c8c1ac13132d2068c994d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"f1a1beb03a0c2d3f756d992cba6712247e24561e8407aef299285cefc337beaf249b8b92325a6718feffb1cfad","nonce":"590c8c1ac13132d2068c994c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"0f5f58f918a19f55efc146bf3ecd5c72bb0c00893c02ca56cf291904e1e1f8f6d0768f1cfed9d64d3f7f35d912","nonce":"590c8c1ac13132d2068c994f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"14177f71f6716d128baaff214e360bb9b8dc0ddb34ba7bcb8d0dcb01c548d42d3c43875ec8ff083acba591ca24","nonce":"590c8c1ac13132d2068c994e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"f8ee21f3af210dacb7aea148b444a98e643f161040db1350429c366a667bbc4b0cb6dbf047c2ba9f86a8ecf425","nonce":"590c8c1ac13132d2068c9949","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"9f5ffc686ca660de6101a9dbf412c61de6fc574954f72f7d2c652c0ab61e8597170ec713b5314e41f0601fbf49","nonce":"590c8c1ac13132d2068c9948","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"3f415ff7bc48fbdb69babce3045049ae2bc2a6983ddaf08cc9b3368362f7918bb73a4872c37fed3e3d808a9c1e","nonce":"590c8c1ac13132d2068c994b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"bd2199064b596d3ef9a77fa8a5db93f1510bf996e320da92635e435c4b59120702c344825fc012393dcbddc05e","nonce":"590c8c1ac13132d2068c994a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"789faf060328cb1d359a7a30a3ce9d303612ef9c9da56c78fee82334953d425bb1613e757b2d7ab1aafd5be927","nonce":"590c8c1ac13132d2068c9945","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"ac41c4a676448ef3f39a471f588d8576bb30817055ce8ac4404b61a4fdbb71adbababd15117cec7371aac83b0e","nonce":"590c8c1ac13132d2068c9944","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"e98921e4c437992d7ac035d74dfae232ef41227e2f27e4e4d801b4bd8934a5b6"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"1269029586ff64d8bde114359411f61c22211e8725a2b86ea145b8b9151c3915"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"b8f393d7cea5934e16f4de8ef9a8912104b741ecd464d4c84886f7eef28cc301"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"eb5c8739d172a30b48235316e13a12fa8abd05d72cc5c330fd3ab3de3371ddc4"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"0b15c1a0dccac801a3078a8a01145c940ade7d9993111bf614ac69d073913a6f"}]},{"mode":2,"kem_id":32,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"2a7b45d6305a056fcce0d67b79dafbb432d71393d9b88e922e653beaf8f3e946","seedS":"182775b06c6f01c1982b399bd82a091f13f78d38b5d77bd89d3137435012b7da","seedE":"017d68ccefbcab067d91e07bf5d1e350259a1f66d6ee2283cf0a1bd2a35a461d","skRm":"4d2b363c2a0687c9d47891ab5b6bec2099225a8925bceab2c3b5fc72ed309f5d","skSm":"0400f73d1caea31392020ecdcfeb20ac62ae6307f01483c31d27684e222cbe50","skEm":"e33e3e7527db822323f2c775b9870703fdb7bc5f656ca5bfe8b98b153816df3c","pkRm":"c257e08a244254f8f5ee3ceed0bb3c6910e46f148be79819c98b886311084042","pkSm":"48dc53e8fdb2e3906672aafef929187cad8f2a4c5da18c97a67f9fd9c7aa7b69","pkEm":"9956046c4dc3e938a4064b0f86ec3b8f326aed97c82e0f92a42328388f51727c","enc":"9956046c4dc3e938a4064b0f86ec3b8f326aed97c82e0f92a42328388f51727c","shared_secret":"a020bc7ea7c31373cd178e88d1576865d405c8f8bc7f7a242b02306af17affee","key_schedule_context":"0273f945acda7f7a9a792b4a2ea025189ef12f6b88a87b421600137423872748fd73ecbafd48f4c15c1959360588c12918ef3b7804b01b088b9c7329c283be06d822b8255fb5743844a872c00dab0350f4b3c350db3842f9b3f8951a62ee666551a290ffb1a799100f0b56291f800042cad3fd852fcb2a723ebe437daa77ed156b","secret":"e8bce0628aad315927acfe34c304c74ee9ae48b0c751b1e65036345b85ba4c7200fe241f373d4522d256709b88f806c54c30da02c65b9498e64a9f47d182d9db","key":"12962c25138767a8a57a0bdaa1a2e7bfdf381df782c4c8c38756f69ea706a914","nonce":"9b65f79afdd17fece149388d","exporter_secret":"077cc63b553e1537d689f589867076dd7d601889e5960e40ba7ea2751374a46b7fa01cf24a042340c8386160464921c136559c176f7853da6da4c9adf7d90afc","encryptions":[{"aad":"436f756e742d30","ciphertext":"69c49d792bd7a208614a02efbd94744aaefe027fb53020008d8de9ad7645f5e5b6c9b7afd168e897aa5deacb2d","nonce":"9b65f79afdd17fece149388d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"57959be8cd78ed36953237dae72071217b049b53f0f028b5f59afeb99b034b71d463d8cad18ffb6b94b9e2f8ba","nonce":"9b65f79afdd17fece149388c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"6ccf7df54580a9d4927ea991441b9f0d01bb799de66de783ab74fa156b538184f0ffb5969c678f1cf393cba716","nonce":"9b65f79afdd17fece149388f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"2e8c246a49e206c32efe36f10b3cffb5b12e6f42d62607a874ffabe4cbd91d5a7a5c0fd535646a3085d200d935","nonce":"9b65f79afdd17fece149388e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"8220b6d725cbc86c14fec128fb1a9b06ca183b0f8f5b65dd375bf56f30b705ac56b2203c6fea7d7e3a0323492e","nonce":"9b65f79afdd17fece1493889","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"35499f5d6769dee34e370fe5334668b8dfe0cba924b447643bfef607525cc8d55f1c2b1f80f93eb5fb5dd7f093","nonce":"9b65f79afdd17fece1493888","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"b497af4782f9af1992f5b8e1720514aaa68339893e901fde50e173f6316aff5ce58185a4065603196aabfdde58","nonce":"9b65f79afdd17fece149388b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"180ab688b58578cbffa5db7c7288efbf193a5fcd65050a7bded835a52a9189cbad22a16f33c91a51c972db4eaf","nonce":"9b65f79afdd17fece149388a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"43f7c06777d41a76b00900c65502ef596a89f670852bfe555da1cf93f156a27f1a7b84721388968a5673aff2e2","nonce":"9b65f79afdd17fece1493885","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"c697efac7a5c92c9aedcf7f8a951a2e82aab4dcb93c5eca879fc23ef11b9528b90307eaf5ccff6fd6dc98b0574","nonce":"9b65f79afdd17fece1493884","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"2676176972f00ac0dd9c8f81a64afa7f9677a19b978826c7778940c4570fe0fd"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"b5b3c0422bdcb07c9da4e6a18f2d19deabd48a7ff662bdf6b636e1bab916fe28"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"27fc2f21aea82ebb1e237243524586cb6031aa1ab8d1f803f127f5ca92dff8a0"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"8c7896b50d4c015b37a7b843331d1c44410849e0cc49d99833d4f10113beead0"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"4b29cd3e75e6bf4a1bed920791fad6bc5fad920bfe30f6154759f21cbffeeddc"}]},{"mode":3,"kem_id":32,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"8b024d42dd06e8d20eb7949813edbe7399dadfda6c081f97f0eb0e99cf290161","seedS":"4dc5131e785d369fec29b6b6612a1054c7536aff240bd2a99df2bda6bf75193a","seedE":"c03da7722e4622a50def5894f714e1cb9b7823704f0ef7f234713376c45b6131","skRm":"82b9abb9a4ea102ab1664768a98f3eed874eea4f764f64489690ee4ac6102bc9","skSm":"a91d0b1ace8465586869a38cd285f10c3a50e535e2ab675ef491a551e8490898","skEm":"472dc1deebdc2af356ffdea748eac44c4db8855cbef574301752b590484278b6","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"4e5ec5dda6ae02ee6f908f80c7da5bc39c01edfe7152af0da8d175eafcc8ed60","pkSm":"8ed496ebac8da6abe752bb166b4c4388f8e1b15d06379e5d496ab5b14ce3b225","pkEm":"3d47d52b21a5c8878bfc123e62aa76ce5df05b1e0cd74762ae9ccd98414a7325","enc":"3d47d52b21a5c8878bfc123e62aa76ce5df05b1e0cd74762ae9ccd98414a7325","shared_secret":"588898e474468b1e63cb7943ec41835ad8cf89d529c9a914498472065f2ecd82","key_schedule_context":"03dd48bfdb63d00c44a4845d06c258b5c5b4ccdf948bc3d346a3dde3bcf3b46db6064faa4d81649134adeab3c4027df3962ff1c6fea27fc18fbc63e9d4bf262b3c22b8255fb5743844a872c00dab0350f4b3c350db3842f9b3f8951a62ee666551a290ffb1a799100f0b56291f800042cad3fd852fcb2a723ebe437daa77ed156b","secret":"9afad4013cfdf6f4454e7fee7d49f3e7b9b9ad1ba69cd610f9f88cf38e44a61c7482505efd0970c8e561a56bfa7cbf63f720b642991cd626d3c3fe91a9416b72","key":"347612500663d0be23c6cf1473be28df3169b2e83b8783971320bc5d117e399d","nonce":"fe9c8f48b28b6b6045fdfda6","exporter_secret":"88b41d7b53c11329730fe9e80ca27bd1ffafc59c79ff3d10a477cb2be3b5953a6176412f7f9099d50098169fd7ac9ba183a0d533d5857e2fd9c88d891b6ec42a","encryptions":[{"aad":"436f756e742d30","ciphertext":"c485075b232e7e872df61a07561d5931262e0fe00cea7393bb7a75280f703a1e02b8123a4faadb3fe919798ff3","nonce":"fe9c8f48b28b6b6045fdfda6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"c4be24a9ecdbb9a5fa56b519c74f8b5572d367dd4015ab127073c0afadce2db2ea47f9150f52e39fdb2007a722","nonce":"fe9c8f48b28b6b6045fdfda7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"863005c2127cea10ae1c821d04f96cf1e723ab5b37c9f03631d9a45cb6afbe88849706d9b63a93fae1d45eee76","nonce":"fe9c8f48b28b6b6045fdfda4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"1ede5bfc3ecaac5ce4e64166ec288dcf45172679f32f581d9fb6ecb312ae2598ff42d1e6f908196f621eaf02c7","nonce":"fe9c8f48b28b6b6045fdfda5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"2dd3bfbaec2f89735b051eb9be71884daa531fb5ab7a130eabe54b73eba56f05c68f1d626ed529e8c8f07d5ceb","nonce":"fe9c8f48b28b6b6045fdfda2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"c7b9530761d08c3efc9a3948bca1f638cec20e03dfc0813eb09b9885f83481aee39294dfe5eb58cc8e4bee3f72","nonce":"fe9c8f48b28b6b6045fdfda3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"20422f75ab22af1e845643beb764c1d5e69d534cd933d284a31f893f7a08eb8f6eee96746290520596aeff5f0f","nonce":"fe9c8f48b28b6b6045fdfda0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"7a9fc21915f99f90b16351f6ed394241421a3c439f1c66e41a21eea5709146a33c12b9ed58b34369dfcc5767ee","nonce":"fe9c8f48b28b6b6045fdfda1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"ddd70f33980774ff79113fa443634bdcbb70751d10d14c884a8fc9dfed97db86eb4262dfef14097dfde261fda9","nonce":"fe9c8f48b28b6b6045fdfdae","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"1700189f793f3db0ee7951a5320efee797b38c1d08efa4dcad35969f34156a5b29e219270c784abdbad825bd1c","nonce":"fe9c8f48b28b6b6045fdfdaf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"5d741b5b622b3466e89505ceb55e17b66d49866de3e7417d5e6dab1b9c76fb59"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"238d2201bd7466e80d9b6cb2717ec54514c71561da26a87d27deba5779a8ca81"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"2ff78266464d700f81c3eb8be5bc70abfefddbd6d365f82358d2e4e9854dba54"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"71a3a5250fb38dd3a2c6d136740945336827eb0b1b2945025285da6817e04a40"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"e2809534e90e79b5ca8874bd57ef01b2c27d13cc6572414015812174be909560"}]},{"mode":0,"kem_id":32,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"bd17a99be261cea263f97d5ed248596078f0f2c5b31f78745c595707592f238f","seedE":"c465e324a0355b2e4b3a5f2abdfaca60817f087bf7ed8205708b4f88a9e3355c","skRm":"80a54bfb48d9a6680a355127ad3e9ea3b8725b47f7f5f2022b79a43feb231f84","skEm":"06a1b9d7915cd1fe501de50d1d2ec1712662f4179b18a672f1622ae807ff2543","pkRm":"cbba177f103979838f8d46577662c399dabe9732cc79f9081e9d481dc533807c","pkEm":"7c1f8d203bcea456ea16ba3e72f1f1d8018cca78751c5b49742df6ae1462640d","enc":"7c1f8d203bcea456ea16ba3e72f1f1d8018cca78751c5b49742df6ae1462640d","shared_secret":"b8d4cde6e1d7fe1f25e09462eafa2dcaf252f4f7c5e0a1f1b0e5dfc3c96b50e0","key_schedule_context":"0087c58ee510f46e12e7e873ae6d81d7ebfdda8bbba76771357f98760168bdfd345464e9f7a12aebfacbc09b2acf5a3496e805c0642bd323b8547bae228b71ddc9314503cc3d6722f18adbe020a4f637c49464a70ef95aa699f2b9c279b02f101f48c3ecc1b64d47ef8aebfde7c6e208bb7a155a65e3c0781df6cf0c19479deb1e","secret":"32a4bd541c869d8cc8b7cdd97e9c09931a76a495026bfc0fd344223e071b323245c60489e5452b08bae1b5dada06ff5e7d3e0e35d32aa5f992259caa8f38fe6c","key":"2053a36e42b28ffe2c12abbf8fead182647cfa0f975054efea3d3d5f16699d47","nonce":"d6af23bee6e537d5b2ebe361","exporter_secret":"65e9541a809e8d17bfe8ca3158111a6912e39b6965b118663cd542e5f2a84c226618196967da0209c3622785f9c22b645a984475d04e57b6ba03766abff2dab2","encryptions":[{"aad":"436f756e742d30","ciphertext":"9e59f241a345e708d96e786986c789b6da9a134cd4e38dde9a8acce177b97052ae6fcc3bf378e3535f9739c678","nonce":"d6af23bee6e537d5b2ebe361","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"2f9b8e92eae0a795fcb9bf1c180e02625f15f76fa95894e5cd21f3b275f330eca957998f0385c30c34e99fb377","nonce":"d6af23bee6e537d5b2ebe360","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"791394c37b2c7910186f885ceb4badba54a3f44054a13475e31e343f476fc214dced7b7dcf349ca3fd2bc49729","nonce":"d6af23bee6e537d5b2ebe363","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"14ea622ea1fab744a5a5c3b875727151741854fb0d948d14d685a8df603cd090bb3264f9a474b6c19647771211","nonce":"d6af23bee6e537d5b2ebe362","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"59b3299e76fcb0c9ed1180c995f34b3a0161fcf9cb055b53e8d548f0bcc001dc79f30619c892e738aeef6c778d","nonce":"d6af23bee6e537d5b2ebe365","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"550f977d3f9ca10a1cc30a73b2e858cdf7a13798d85a1c4c904c908f4612acc6d2cbbaf073a127e41b9816dcc7","nonce":"d6af23bee6e537d5b2ebe364","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"7cb1d8890ad19aa43f84ad86e1d09cc2d14a102e838c19dd55977a1f3d07791ca5f7797671eb66db5099f53917","nonce":"d6af23bee6e537d5b2ebe367","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d5d9d138cd42161eab8800e71a2e06bb895c1ef7538bb0337b638438e51d824a5e8bd1515607c0b985058ec19b","nonce":"d6af23bee6e537d5b2ebe366","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"5f1b9078dabaf0c16821256a0591f1287c42cc22d002d38fbaeb64d77a0943c2f092615185e716eb28681a3a0d","nonce":"d6af23bee6e537d5b2ebe369","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"575e3da798641f1e965d6e18384cac54d9190e5c663959de71b071b1e244763bafa959ed512a0e266c6b1afcc1","nonce":"d6af23bee6e537d5b2ebe368","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"5f0a458aca1ea6118fa1d0883a99b5bb626aa71b55de2e73436f53e93b8073a7"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"c5aff969431e6d731c9b26fb8e4377b4e859430345af77d4374dd71461e772da"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"0c40105c9bc2e407d9d4a64dfb1392e46d393e78747701c5daaaa530878e001c"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"d440fbf13b9e3956c7d6772166e07305a8f5a396e2bd361b5b9fbae9b0b04909"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"1474f8e9dac70e76041b4bb365f1fc4e1e2509f43c188b5d15b8d89113c197f7"}]},{"mode":1,"kem_id":32,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"c30e9658c3d803a6422b892ce6df64978144cf7d6a992da307a326bde6694c34","seedE":"e1e85070d88e22ddb3e6058a803c5e18f3db025589d30610a196fd1a67e527f7","skRm":"c9221f98c17117ab4216e062481934ad21a12c8ba833a0611ca1910fac031563","skEm":"9e38eaa97787575e564949bd84845965e910ae90a17bf841f68a4c791385afd3","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"4ca2dcf3f5fa2b8b782536f695b3279f03569857a88e90075d5e4a67e4c4a44d","pkEm":"886c15a9d1c3609a3f3f6be3b5d1b60817f6a557e2b7344456dbc8ae49f5e93c","enc":"886c15a9d1c3609a3f3f6be3b5d1b60817f6a557e2b7344456dbc8ae49f5e93c","shared_secret":"222e3ad153c4fbc5d5044711ad16e5929aab1f072cfce7ecfac23b31b90167b1","key_schedule_context":"0143c397935cce815be04393774bc6bb839a62e7ccfe08c622716b273836d78abbac643b1a9ed26e5dd5ca7c1474c98fbfc32c0cf2c784561ce67d4bbed5cd2c98314503cc3d6722f18adbe020a4f637c49464a70ef95aa699f2b9c279b02f101f48c3ecc1b64d47ef8aebfde7c6e208bb7a155a65e3c0781df6cf0c19479deb1e","secret":"0ebc65a14a17dc5e3397c3207b4b6943174e36718e1a63bb7c391c989ceb5c781fbc24641c209bdef2550be5d6c26bd5c8cce772ad65947d62549695b194bece","key":"e9d8a65ebf6384c2e98619a700a3ed4c80b1f4a5d0fe36ac32d19afac15a749e","nonce":"b11eb847d5050f3299c83832","exporter_secret":"c949d252eddb9d52ca395e8f4f6cb1d10a00c36cae2477de74bf46285edfc3144176d3258234e26f3ee1a93fb389b9ccd7036be33ad32acf0259d327e73e18a0","encryptions":[{"aad":"436f756e742d30","ciphertext":"2f3eba789b7706b85fd2fcadf189f640a726160a7a0ef22b6483aaf69210c02d4c22113740235783dbd70ca1b7","nonce":"b11eb847d5050f3299c83832","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"ea76c297d6440fcc6e753980678adf65389171c591cd2ce0cc6de56c4560e6642ca5df5d910b3006b653372657","nonce":"b11eb847d5050f3299c83833","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"7bed7b81628f1892518ced3b292cdf8e17dd0fa270600177a5c122204bfc381bc01f9bd5de77c4a568055ad19c","nonce":"b11eb847d5050f3299c83830","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"38ad518591bbb6bbbe114e08e76a90b0040ef5571dbeb9a4ca778b72eba6e729c75efaf476e1dc69d2a95ba304","nonce":"b11eb847d5050f3299c83831","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"a38f5cf41d1ad3802ec4043067e4ff1aff3c557d1961cb76f6fbecea500f45ce780c27cc2894057093298d782e","nonce":"b11eb847d5050f3299c83836","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"0844adf506c653ff4cb9eaa595b4a6382055d53bfe4490a323d3ed0369b33a206f6fbed3a2c2409a646edcce70","nonce":"b11eb847d5050f3299c83837","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"747700aa0de178a38e2ac8ee358e0d79d2b6026a8e86e215312d359933da08bcbb443e9e2280932e2e37ca0c7d","nonce":"b11eb847d5050f3299c83834","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"31b7a490d05bd9e31b6ddc82b2eef9d6500675273e5c215c2f3fd4a28f04b73c752a7b7f89c2220cc5d26d3ef4","nonce":"b11eb847d5050f3299c83835","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"b57d6cb945a21064c1dd0a293ae28d315e7160764e20d48f50ba9be6d3d530cd064a851f7f9fd16f61fd8afef0","nonce":"b11eb847d5050f3299c8383a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"1bb75c2eb81165d8c95d893c9dc1425d2de1628696c488d6ff0213674a6bdba09a3ad6ef506ca339d64f02e46e","nonce":"b11eb847d5050f3299c8383b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"bf8d87036ace4835ee917a504016601ce7b5add0b8d72aa64ea493ea241786f4"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"9583f302506aabded442f4a3c4cb976682fed99c4bcbdf5ad41c2f00d3fbc27a"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"fa169c1e9ca8582381a72b5067da174995500198484520d60d22bf9bb4c34ead"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"56fbba55aef923240daf63ebd30508e891cdffbe0bfe03306727320d6dfa29e6"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"eb30f91427038c6e3716310c0ffc431ca9ea2b10c2f264f7aee82f86f817b8e2"}]},{"mode":2,"kem_id":32,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"363f0085e3c914edd27a323f84789c2e206c6234811d7c7f5b5c12c0d3e67b59","seedS":"5ca8955411a106bb9ea8329bcf0b31a374bf9f01ebe394f53733c843f8917673","seedE":"764d97c13832b46cf04eb7ceb50c926c83ae5536f035f29901cefb97c21018c1","skRm":"d141e5a404d693aec79c189a41687f3a31c5ca98d22b0a0d816ef7f1841ffc95","skSm":"b6b32f5d1d926e84f0a7b0f681a3003cfc6a35ac9ce2756c723912850f9fd0c3","skEm":"e7909be5308616242af7b86d8c1de4821181c6daa8dafac2b15d3be550fa284d","pkRm":"b8856097782470ab2c82d747250fac3d8fad9c50f932c271ec8474171f842425","pkSm":"3f695084ae37582436720b354913adcf670a84a0fcf5402a3e04d0b6966ae90e","pkEm":"3be0463d6f9cdf743b0913115d8546788b23125b1108473e4cc064e9c0b7315a","enc":"3be0463d6f9cdf743b0913115d8546788b23125b1108473e4cc064e9c0b7315a","shared_secret":"ce822a6c6990bb223d231a465a816fb33df4308b9e510f2b015ee2dbbfe21c40","key_schedule_context":"0287c58ee510f46e12e7e873ae6d81d7ebfdda8bbba76771357f98760168bdfd345464e9f7a12aebfacbc09b2acf5a3496e805c0642bd323b8547bae228b71ddc9314503cc3d6722f18adbe020a4f637c49464a70ef95aa699f2b9c279b02f101f48c3ecc1b64d47ef8aebfde7c6e208bb7a155a65e3c0781df6cf0c19479deb1e","secret":"b050a99f3ff262e6b2b0f44ae4f8aad77e4e7448b01bba7259b30aa5b98cafc5b7aa04fa5dbe1bfb60be9321d081f7a072e1f7c00277ff8468c1a9c34db6bc21","key":"cc3567050a01273280d84800736fe9b6d4dea9a3fdcf79bb304aee9d73b0f68e","nonce":"17d7c834b3345e54be529050","exporter_secret":"e11fa30ecc7d77f0afbcafa34c724ab1e1401d84fb973f21d75878f0e0af171a2ce1ebcc777c0173d57a9983c6da96e89509f25d4d953c1ae24d26140fc41029","encryptions":[{"aad":"436f756e742d30","ciphertext":"b3a1fac48dc6545072af738f976361d3cb95098bc670c0fbb3d0d99173b4682b2b40336b71420cd48c6bf7917a","nonce":"17d7c834b3345e54be529050","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"75e134e0ab362827c90b13e04fad8a02075aea3d965890fc3dd7be1dde8406f16c7b4a751c887e5bb48062b2cc","nonce":"17d7c834b3345e54be529051","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"fdd8479be3b40ecc28499796e89e6a744295709069c59fca2e6c32c92b4a954ae9e597cbd244c51827c8af852f","nonce":"17d7c834b3345e54be529052","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"bd3612cb0b5880344d6d0520e3ab0d840716d1c1935ddb49b8dcf560b27642b2768d9ec6dacabe71e0ab4b56c0","nonce":"17d7c834b3345e54be529053","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"c5d4fd561b3ec01b2ed97e3677e5fd3b6a80378974245d0364ead9160ef8990d4df68141cc08c08875ac16cfa8","nonce":"17d7c834b3345e54be529054","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"b0a6df60a2032daa7146f6bc44328f8e71401b790019d6859a00748ff9776f131e1cd653ed600ef8df6b4dda07","nonce":"17d7c834b3345e54be529055","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"edea5a2976a6919ca3f303fc32b6148daf57a5ebc1715cc7979975bf34dd189965fe07a23416a99f54877ff604","nonce":"17d7c834b3345e54be529056","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"1f349017fbfbf3f5e62b91a884177eec09102ea320783dd30d6c9b96a5c8ae296a3052a4f0e41e3fd8562edc04","nonce":"17d7c834b3345e54be529057","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"a5f1ccfa3e64a7ea4bd6bf3955fc5fb8e6ce187474e90c762732b9440faf49fa40695c5545c9a6ef17b675ed54","nonce":"17d7c834b3345e54be529058","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"4ece108c75a3ccdc2e430a969fd89a3e3339b7168560d8ccb932d373c63d0c55b37b139a67f2744f4d67342b86","nonce":"17d7c834b3345e54be529059","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"42181bb90eb2e1a419f10b0a63e752c5301a9c1bb2eddf85d153d10d40c1b8a7"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"1d3e745c429d3efb9fc7cd4ed1807551ecad38b99db0a08e683710745499e798"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"b715a7cd3adac15a1f85a96201eeeecb78e057ff89e448fe527068f462c93846"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"b1d367dde1dd771fac5433e8522cf6fbd290ff589b491430c24b89e2c75092f9"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"eeefc65db8df1b1bb3d4513a918b1485696f1e928a7155ac47138a4a333a893a"}]},{"mode":3,"kem_id":32,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"233a58d91e52244505bec4000ad9d835d05e88517776d28fb90c32efce830f7a","seedS":"ce18d4b2548facf57aaed72142db5eb562396c07e445d5c8bc9efcb5488efcc4","seedE":"22826ded7a08458cfbe1ec517cefd9ab8631344ec9364a86bf3635fcbf16b6d4","skRm":"7d6405d7177b2dac780da972e747e2f5e6bf8a0ecd8a39c135513ae4db24ea7d","skSm":"64cd714c1fdbcc80708e8a5d590311e5758353b2787102638623d68e0e636d14","skEm":"cf40b44720860cedcbed79de0fbcaedefa6706fbc9963748111482c78b1b0b66","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"08347bae5c99bb13fca893f6cbc70638dd7a2ff9058a9750ace959f125484926","pkSm":"44f97e6b0f9f3f7dc2c731f1a1f42d96c6e4a8a3ef2d730c041801c8780b1448","pkEm":"5d8fe3bd678deb9ba21b3ed36fca7cb51382504f33b1c60a0d71be0643843151","enc":"5d8fe3bd678deb9ba21b3ed36fca7cb51382504f33b1c60a0d71be0643843151","shared_secret":"b2d3fe7eb181503689a32e08240b492442a1d3340e9fa8820c8e9af056e34b7e","key_schedule_context":"0343c397935cce815be04393774bc6bb839a62e7ccfe08c622716b273836d78abbac643b1a9ed26e5dd5ca7c1474c98fbfc32c0cf2c784561ce67d4bbed5cd2c98314503cc3d6722f18adbe020a4f637c49464a70ef95aa699f2b9c279b02f101f48c3ecc1b64d47ef8aebfde7c6e208bb7a155a65e3c0781df6cf0c19479deb1e","secret":"f20f4f3ccab5c16814ad12a1ce0463e11075b2560ac25e7984a45c4f7784bf3192e7fdc423210ad3652957fcd1e5fe6c8a653605a4a2fb4eaa1de67b3e8e70a0","key":"1b15b275b603558db955eb490cd8717514e287647e07a28e82b7a20c5f2870c6","nonce":"d81f1a89588dc2c61da33085","exporter_secret":"126e127812f6e44fa04690dc8af2701ec8d348d647e7fedfc8d1fedb9b394e6efe0c4f3af883e625c744abc8929c165f17db60bb8558e7cb78f1c29c695dc942","encryptions":[{"aad":"436f756e742d30","ciphertext":"639f1871790993148f8c975000124fd323ed1353fa653875a5779adc7f3342a96ff835f70c41a6d9b36b29cb1a","nonce":"d81f1a89588dc2c61da33085","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"2d47c64b2fdecd7a58f50729d9c1310bb322ac321d68dede9a84dfec8897f71b1122aecc830eb6a43805552aee","nonce":"d81f1a89588dc2c61da33084","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"d6cf3482557de23c52dc62a6f2e7425e6606484ffac099dfb47f9119d096ce6112b6de8981d7e884093ff3e80a","nonce":"d81f1a89588dc2c61da33087","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"295f254ccc64f04889a3b7c7102cd398bf3d2f7d364764aed1ddce25bb5f36e3217a5d50444696cfbb5e64b8cb","nonce":"d81f1a89588dc2c61da33086","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"cce3b64b62d742c9bc50c43111afe39472a4c4b030a4f66b5ac696d392c7816845e143ea7d076229c4b112ecb7","nonce":"d81f1a89588dc2c61da33081","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"a0ad35f0f057038d628fa577b8b71d577eb747a510eff008c13c80f76c4f31e038b7303134d89fd3a336e15ccd","nonce":"d81f1a89588dc2c61da33080","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"a803a8e795ba403b00825f2614fd482ff4ff1e875c4a514fcd2c04aa981a19976595846b66fcc295400276de9b","nonce":"d81f1a89588dc2c61da33083","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"90ea0b5252d5c765ee0a1215c7478a548cbf86788a204bf0722c304f68f3a6688316e588a10675903a9f3f8253","nonce":"d81f1a89588dc2c61da33082","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"213bcde6d5c846e1781c50efc9ec5f4ca86cc3c1888da0db59bd1aa9c3b834741a2aaf85ad1af63e3dc596f8d4","nonce":"d81f1a89588dc2c61da3308d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"a0f16420ca607806dc1d058805297911a6cc9b7a4ad0b26690bdfde986784bce41c5d24b09c72f3390605d2d3d","nonce":"d81f1a89588dc2c61da3308c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"955fa57827a8f9306db8617a7d3d436ed9a02668ceb7293fc69c01008858f4f7"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"3f5cdb9ad427a300e4083dc10e72ab1681b833865d6488748733a00a10361b19"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"c307218e9d9ae3d6ecea9c7a1de30464d22e054e0302b47d461820c0ec94ca57"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"536c514d7bf8d9b38b8048468b2ccee56d12eaed756b4e6e6da91be09cbbbdf0"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"76025659e4a7a00e6b7c3c85b92d722c6b034b90cdfb95b72e75eea80937ed90"}]},{"mode":3,"kem_id":33,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"11ea3791ccf3c31d8ca4a02f3b17ff10ce4e9ea58725ae8fb161e87df4ca32b537ec94862245ede88eab4a163130542b520a92785b9af864","seedS":"8eadb637621667d3e414c6205adb9e9a82222b2d05a3bdae240f3c3677cec67349ab424fb2b97c7da16d3f4d9ccd2fbff1f6bdf61b230088","seedE":"199880d66afbfc12f3e53c187e7823361aae6b0062e96d038b3e35ffb8557c6fa14a916dbc3764a5ff0ca74f1c866b16d437dae323693942","skRm":"35b8703880baa256b1514b1dbe9e35fa5736dea679d36fd30b2f648a60f659f3dea3d0442610fee0d7bfb471da12b39ac1193b8a40c8d9e8","skSm":"eea8dfc2fd049a16f72c925d79295706653e87c45a51709f95592ee38535bac92c78c3d2eba119e29a60aa8ab48c72c5b4e64fa6139781e9","skEm":"ceffb64f0cf79a10ed0efd136fd1907ddf04d190fe6bd545a576a9bbe156c61c1a62ccb42a1da214e81e7b4c6a4526d1a760af1470cac70e","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"d547ae02df61beeec89acbebe8ddf18b3d0f5ea4bef46febbd6c1da54a6752730e108323f42680ef66de42567244bcc3b76ba4536380ea45","pkSm":"ba37766ccead9080896568e64f31b29d1a9537884c900c9ab9ea5e0717bd991821051884f35ab27fe07ccd764ca5906cb2c1e5db68515676","pkEm":"1a8221557a9f356c3b58666d694fe4c63222d273d727a62e7c96161ebc2c32fefd057ae9625b87ae894dadf733827897b1060cb6564ba7f9","enc":"1a8221557a9f356c3b58666d694fe4c63222d273d727a62e7c96161ebc2c32fefd057ae9625b87ae894dadf733827897b1060cb6564ba7f9","shared_secret":"68763a46f6566802d4e5211dfd0cda20574cdedf198789cfedbedd93673952e84b91240ca1df8af2e150d917a607b1272000b5b33f066267abb5fe2c87be84c2","key_schedule_context":"0378a529697c7004818b8af5a225548b44be8d0766690b5a2ca50a9cba77481c23ec45fc1e118e7e28e97cde7959a48beef4959c6176131f818392aaad29caf78e","secret":"a16f2cfcae1ee298ed69f285390ce99ac5db538d54e943975d5b9a39ab44e7f3","key":"87146c90840cc3e18b72613d2ebfe8ac","nonce":"310ce50aa641bbde455b8e76","exporter_secret":"252aa958259709dabcd9f165b987c7da356f6e006e77f23e9a7e11c1305b0d18","encryptions":[{"aad":"436f756e742d30","ciphertext":"3d275b7735f8cd485f543c291ea80701f3a3a88e9c89a63c69e512738ab3e5b507e8306f96efc9b7fb53cfc1ee","nonce":"310ce50aa641bbde455b8e76","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"be3ea270a97e5a5f0f80649a7a5e835b2c5fb505f13647e449bbd6b132837d11bfc3e0212038318c23a7b7ec95","nonce":"310ce50aa641bbde455b8e77","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"94151334b02244fe0fc86856339d40f43a7ea77f4a9ea3ff8e71df97c756f31dfd884d5ee90708ec8f906229a0","nonce":"310ce50aa641bbde455b8e74","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"05a3d260e4f835a1a34cea954843c2b0b7e72693d6e076a402bceefeeb696979ee961d461b9b5d913c6230a709","nonce":"310ce50aa641bbde455b8e75","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"4c66a3a3c8f4826b911290f703bb80ea619bccbda4fd23ef8393b4649d2a8a2f039bcb2e1c4b939d4b1931aff6","nonce":"310ce50aa641bbde455b8e72","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"50279c22488cab35baeea5d859dec0d86d39f426a545583077f9961faf0de7c6b60409e56088c43427a683ed2b","nonce":"310ce50aa641bbde455b8e73","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"2840fa9d3435084701797c8c6bd8fb0543e1d0b9a242ab38b4283ebfc99bbe8861ec39f56ac9e1226871e732b6","nonce":"310ce50aa641bbde455b8e70","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"84a8db32e486663fa9cfdc55fc4e3f0825062c8b04c10ae5877ff1f97130586385d691775630beae3c0a65f4fb","nonce":"310ce50aa641bbde455b8e71","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"602a233ce5aae8face241c18279a1716abd97ea0ab59c4824fcd72b277459e0d0239b3ac7b54be2c6a0e8bbd49","nonce":"310ce50aa641bbde455b8e7e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"0d6dabb93cea5f584c34aee6cb20a8b796004c23270f67db78493995b52dadf95e1074527a7c04a7f8a62fa1fb","nonce":"310ce50aa641bbde455b8e7f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"d1f616aea0d1836d387aa5bf4d062dae6fc9092eae034c6db70914b3f16acf03"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"148c2be20001da340a4b71840fff6bd5be36d8d54d250c176d4c3245a70ccfac"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"5762892367434465262351db6a342e95bc6d62821ac9a7ffd28b8359bb75adc1"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e56358ec3a531328a19a4976360c3b20a59de2a8ecae73dd63977d25abc82735"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"ab40d827b55a42c28ce9308befeb526feb72ba73a6adfccdcb8798b5a1c239ff"}]},{"mode":0,"kem_id":33,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"edd38a46ec129da70b75ce398e57365d1ab3600cd8984da1d96df68d75b3c7cbd871a8ff0be7dbf0b3fa44f66689d63f237cfab36bc70070","seedE":"c7eeb0549f577095706400cef8bb0689580de6152b89bef46818769a18d4f5480cad49531d9329668b2f64161f62036a56e9db128f756fc5","skRm":"ee9d0a8f539ee58e5c813c4f4c4a36a89d70492a4e888b878522f902f86cfcd77eca4f21ad4c9728e1cef9697c94905a950ffc7757d3dbdc","skEm":"5eb24f3f4f474f4ac8f0027048b8ea230372c52d89e04f31d6cab3e1e5b46a22c61d6424b19408bf35f03888b734c8d3baa75342a1f9e14b","pkRm":"335cb28eb12a5677f3e3f4678df86d674141e258bf1709a2140a1873c6e8543b68c26f577a457bb26702cb47d79d07dd971de493f75d6965","pkEm":"4bb52b1773b7d3b6bcebf5b429e40e83b8b52b987829c24b417e5c6d5097ff6c55de1bb3501c1f50466b2ef17cc76b168066303506be93e4","enc":"4bb52b1773b7d3b6bcebf5b429e40e83b8b52b987829c24b417e5c6d5097ff6c55de1bb3501c1f50466b2ef17cc76b168066303506be93e4","shared_secret":"d2c00054bf68a3d564dac55dbab0a6f74c3061b8f9b8950b7d6bf80827e203b78dbf00951b577addddb0d3d78af29ae88f9c0cdaf9ba5523d1b0e2f3b59190df","key_schedule_context":"007637e763b51bb8f614a2ab36af7b189cbe66dacd3714f6721c6e066e7b3515acec45fc1e118e7e28e97cde7959a48beef4959c6176131f818392aaad29caf78e","secret":"ee471671bac354cb8c7ce0eb08985143ab37d69bd7d55a973e385fb07881c296","key":"8e400b071a712f8422ad65ceb76f9506","nonce":"27fea2c4dfea3f19f2dc6c37","exporter_secret":"56e731d650293604be9173e9d78a683b703859c2443480b5b2401f802886e079","encryptions":[{"aad":"436f756e742d30","ciphertext":"66eac177fa8f12d727205e67903b49155c1e3924cb83a23ec4dbd4df7896a7794931d4023dc02fb34d02cb1801","nonce":"27fea2c4dfea3f19f2dc6c37","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"ce3ee44de9951aa2bbc3c31ef4412d74f7e263e0f70dc9cf56f7f6bddaa30aa660bd79a17372e6d18009c303d0","nonce":"27fea2c4dfea3f19f2dc6c36","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"ec6a5731db1cb2fea00cb7715545f9658ee95fdd122fe83dec34a34987dc34c44b28400e19d36152d0e67e08d5","nonce":"27fea2c4dfea3f19f2dc6c35","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"fbfc9583d7511e109bbe5b09b2e0bffca8a99b424cfb5b346654a485b6e372e617d781b3dc050c1b0b10ae8b3d","nonce":"27fea2c4dfea3f19f2dc6c34","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"d8814497888486f325c45b734caf262abfa52dc6ce0f4af60ece22e7d5f767a459e6fbda7386ddb9f6aa2462dd","nonce":"27fea2c4dfea3f19f2dc6c33","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"0f0bc72403d629e51e8e99d4f3ba83475f0218c9d1f26221aabac5883655f1477139baf808cdfaa52e06526b14","nonce":"27fea2c4dfea3f19f2dc6c32","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"cd707965ecdb2f6e3f0bae668bd475642882f2b1232dad6ad6aefd9aaea21e0f01966f726c8c14eb75407c9d42","nonce":"27fea2c4dfea3f19f2dc6c31","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d5f85e23cf15fb39f4c12f666655e22bcb07644d190d5466c7704c34a31e6796a42190caceaf2f5bdc7c4e3020","nonce":"27fea2c4dfea3f19f2dc6c30","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"6df05d157cae48d7e4e3ebc309d47e9c936452c6bbb558506dbfca4e1155af39001f04594e327e48b14cd00b61","nonce":"27fea2c4dfea3f19f2dc6c3f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"c267b3ffb34a30789b1351bc9ae79d6bdba44c18dfa1e1edccf53882c78011270d44ad9d9c76ecf69a02470c96","nonce":"27fea2c4dfea3f19f2dc6c3e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"9c160bdcfa734da33a9d11bfa1ff1556acaa3c59d12707b563909dadeb739657"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"3f1cd49a2cb62a712b6631bf0871e4a9dd201ea60115751838616336c9acfbc3"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"bfb779e1f648f3c6c0a0bf913e70ace00ec17e93022b9f312e031989296ce63f"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e1acf2868c209c568193e020afa9c4ed7525695cdf1daaf53d5c02b599e1005f"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"d4ee15708e6e5770d522d626780c89e9964d8c2a2a9d76a2851e02dc50579e9b"}]},{"mode":1,"kem_id":33,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"187c91efdf36a6881e056705e2fda3bbff11309834c93be10ed9b9cadffe55e883fa2685e1b9d180308f49d2d273a24a651b9a07434c2d6c","seedE":"38c5b1535dc834d8c99bb90cfc62b8687af4de7105b1f41dd44a0a66d90545f4edd577ee6312d3af08c23cd040772aa2ced12b5df36002c9","skRm":"210cf894a93c2de421e3536a20d5fad929d41d496d0c9151633809e036b5d02a67898b85cda8a8370530fbfa983b6470352186277c48cddd","skEm":"c3724fa946940c0b8e486be840140c10c7da3a8aca782867ea301bce43e2e23ee9fe7c4b71f40feb3c9d27aabf8781787ded1cf01390efd8","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"4af54303289af16d303d8790054793f50b65a18d8d062da29c1cfae100afbd975e06573a35a9c1a2a5a152e84d13084c2c5836c12cc2ed6a","pkEm":"191b7f447d5043df3981b3a4b257864561723972aad8a89403be2ca6fbd7e9108f6d9a6eeba1ad3bc943df84be110fd1456ccedec3b665f9","enc":"191b7f447d5043df3981b3a4b257864561723972aad8a89403be2ca6fbd7e9108f6d9a6eeba1ad3bc943df84be110fd1456ccedec3b665f9","shared_secret":"0f609813e0f5c6b4b39df0dff711e9f897241f7a624952dda9205ba2dcdaa30018c259ed8e64369d24708ca8a220eb2ec7b453c3a0c8d899efaf69e58ca8c781","key_schedule_context":"0178a529697c7004818b8af5a225548b44be8d0766690b5a2ca50a9cba77481c23ec45fc1e118e7e28e97cde7959a48beef4959c6176131f818392aaad29caf78e","secret":"aa693e8819e909475870dd6aafacd3bb7620a1c59932317d746f3704ae02695a","key":"7c50dcabd485d519a88d94f02cfd0d86","nonce":"864426e0ef9dcc418e3ef9b8","exporter_secret":"5a9c352865fe7fe15a190a0ae3f35719c019585868fca86708878073e8326fc8","encryptions":[{"aad":"436f756e742d30","ciphertext":"63fa252f8bbd9f1dd1566d018de7b3718b822b2ddd90a451220f6f845620b0ba6b63a90c1c2f3c82ffa5853acc","nonce":"864426e0ef9dcc418e3ef9b8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"e990656d4d876a3496a6a5514f9177a712bdd8a3aa12923a09ff4c228548c8a8b46bec3bcbb4e6571f3a8a7331","nonce":"864426e0ef9dcc418e3ef9b9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"2c6f35ee1c6ec4703ad29b9ee01bdf177fbcacd49cd5f04bc17b1b251397637021dd5a79c105ddd79d89d3e341","nonce":"864426e0ef9dcc418e3ef9ba","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"030eb9875a0edee2b8447af20369ea721040a89559214a46002ab43a563c970bc73064fce73334fbc71cfd7636","nonce":"864426e0ef9dcc418e3ef9bb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"d94b837b9860700a90fea288894c6a9a5511804e63c1bd4fe0cf5e20efaaa9129be4da204a8086184372a1aa03","nonce":"864426e0ef9dcc418e3ef9bc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"90420a577ee23b66cd374f936ea5fea85a647aa57c96b67322e36f2c4278e36f9c7e7621d4b56cddd87cff5e29","nonce":"864426e0ef9dcc418e3ef9bd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"32ff9b476a56d18b1ccd70caafdd06bfbab782a19a874d1d4ee2a016c4369ebdb485f80425406febc77bc70352","nonce":"864426e0ef9dcc418e3ef9be","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"8726a6384f5c10e897a68e9ebe69535a707e26628e1fa945f14b912c09912ebfd1faf60f4f0532c674fa499664","nonce":"864426e0ef9dcc418e3ef9bf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"5bed8cabcfa513bed8f35b43f3ecac3f0e667b59c0284791b2078eb0a6b57ad612a950da0e3a5dbac4ad85c5e0","nonce":"864426e0ef9dcc418e3ef9b0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"ce504a031cdb8d0a7970b4d4cb2e9f314ddb5d93779a08b4f65b2108e90d2d2da5bf1f61fd42556b938bda09a2","nonce":"864426e0ef9dcc418e3ef9b1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"f8e2b59efab661703ac7f65335c4fe1a2d6844e0ee77a196ab9d57015cbd6202"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"8395130e27a11d1b3ec80a72f8788c765c6a4968a786e1208e366caee58efb09"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"f97c3ce62fc4f68835a843e9ded3add36d58ecabf0923f544f98a41d2d851247"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e6a936202ec20beefc991f170c1a5389bfd93c0d8bfd8049356f0e2ccfad6498"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"017a0f3d6641c13257ecfafa3554029f8426254b5a29a4e37cbd6d86554fa8f9"}]},{"mode":2,"kem_id":33,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"f8a2a7ecb21eb886b8ec56ab4aa02514ed1ded3c19abbc6d58bc8f7b596239aed469bc34cac73fc8bfe135a0508dc43c3747e7feb245caa6","seedS":"746b24de561783b87bba3616ea7c631675038cc0c5bc2ca8fc50cb793e580594bc7757b9f554a20be294df87778508d82955efc9a954551b","seedE":"dd35cfb173339595853ad88013c1a4fb8c55d985cd3d226ae1d3fac16ed19e8b73dfdf8c6f434e88daafa37373f22b13553beec50f34f81a","skRm":"4c14a13eacf01df0db63dc7822e3ea90eca77ae8851d54fd0f4f148787a5168893bc06aa8be1908cb9e5e545820f9bcb3c467d6b0e65defc","skSm":"243770a3f8ae7624ad981a24a8e047cb0a7c7eb014fba1657a86c92b6c9cb3b960e5cf329a97af728525d8e151cf3a89feafc7dab4a8048c","skEm":"b2a1c90ca079b0eeedbf84434defaa6d6a6e3810bff1e939497e2410fefeb7a5c5b046389652077e36dc006d8479d1f43c5e7c79d304df09","pkRm":"d6fb3e761720de6797f7838550775b814df440c76cdad8e1e3071ce92925a5d898f075161ccfb8495b0297471635fb1c8f77ffc59abd2dde","pkSm":"0f24fc27e5eddb3e68338bf7712d4d42788e5ef32ad1748fd684b084c8bf2af8e82ba23a6a189554e53bc9ac22835b1ae9d3ae49dad1a0eb","pkEm":"0de148c3ff3655e2444fd1d75eaa5902eacc445471184f83ec4da9db6cfca54071ae6d3c5d2efdc1152e80910cdf5f0fc265760857434490","enc":"0de148c3ff3655e2444fd1d75eaa5902eacc445471184f83ec4da9db6cfca54071ae6d3c5d2efdc1152e80910cdf5f0fc265760857434490","shared_secret":"476026ca9903b0a6f30ab99c390a6d89ce0e43c4acdb08461f409a2e8bf342eb5ba4500ed2281257b2fed23bb1bda9ec815cb31355a8f694edcd63acf159a982","key_schedule_context":"027637e763b51bb8f614a2ab36af7b189cbe66dacd3714f6721c6e066e7b3515acec45fc1e118e7e28e97cde7959a48beef4959c6176131f818392aaad29caf78e","secret":"40b76560320db8ad9a5fbf31f7b28c68dc7af634a9a58b2984b95433a6010d03","key":"e8faaa9faf6ddacdc5e8d82de34e62cd","nonce":"fa479777b460af5d94cab5d5","exporter_secret":"93e6ea450d4dad0ed95423cf9ce4ade6150a9aacc6b9f61f3a3ab1ecb7ced63b","encryptions":[{"aad":"436f756e742d30","ciphertext":"8c0d8a1d769c9d05c7ed6b82d3f9039b773bc6ad1f8bfda2d5f776a08c5f9f1282eebff0fa51affcc260bda776","nonce":"fa479777b460af5d94cab5d5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"b75214a4d494b9067afba98ec855d7f7231afc48d48eb8b4ecb0bfcd452e1eb8620df63b2b5e3087d3040ecf63","nonce":"fa479777b460af5d94cab5d4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"b24f59a49800253dd6d4b96a366d29133feb4a711854957ac1dd089f77a94266274a1d1421b53dc677cd417aa0","nonce":"fa479777b460af5d94cab5d7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"9ced9a7a63732cab78bf083f4bf2718164d42366502f15eb64104e39edbcf484f62a5e9f9704765f27cf04debe","nonce":"fa479777b460af5d94cab5d6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"c773d78e116e80bc8d367b1eea69b0c25f80286cef049befc13a3fcecd3170049c6c1f2cfd1dea99c03b85887f","nonce":"fa479777b460af5d94cab5d1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"b4c981b6f5a1534cbbda8106217a221cc9a155e6078f470fca174b19a464af8f4878f5a141802e984c69ac03e1","nonce":"fa479777b460af5d94cab5d0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"43004b3d9b642654da6782a080bac6f1678f6b0ab99428dcfbbccaef39b0bf178bdd8ea3b2114346ed93bb7b2b","nonce":"fa479777b460af5d94cab5d3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"e8404d6aadeccc39026cb8e26facef1383664662d673d94057e719eaa7fd4b8c1bce863639c0f17aa40c1e6ecc","nonce":"fa479777b460af5d94cab5d2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"a278bad4d99b5a9c3d84844af85af63df4ca96feb35f085e86c6d2a041ecea21f5301d6941024faf7e3b68ce1a","nonce":"fa479777b460af5d94cab5dd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"433fb80b33c14f6a62dcd85883150f5128add3549334be227c877bc58dedcd73aeb61e6abc4338393ef06de834","nonce":"fa479777b460af5d94cab5dc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"89b57b9f22443d8ba2893d594bcfc31612168c6aa338a610476d05bd3934f8e3"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"32078dc3a22f99b3c84363aa958afd7531dc9b9dab59e148d9fb2a4f1cb7dcea"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"0eabe263bc1614a06b28cf334ad5a39651e5b2aa89f9e537b9ded0b39b3166f8"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"0deebcada7d72d4c211493d2f8a0522690ee6c526e098f8758c67b57b74208ec"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"d12502f84e8ba530184fb14fa3aad4d4b85b5365bce22f9e9fc818d487654471"}]},{"mode":1,"kem_id":33,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"fde902f38e08bf251b43a479755f883f1110159c663b6a57e300a75ed5fdd65753501c76dc59f17900b75f90a7f05a4663a8a06abf0533d4","seedE":"d6758984451862254c489381c841bbf554485ff45ef4f69f21531139e2821493d297665bb99e7ff77c194528dd3520cafdbb0384410f1a75","skRm":"b1d73fc566eb793a3c249043b8773496970b2f43a96629f710960b1dc5226f4203248bf976a6c6416ad29b9f40eac39543add592f9e8935d","skEm":"99ae1146dc27216e42d1696507b3995b32aefcc46363981d3784707beecbaa4b97394e604c9aaaccce28a44fa4c76d8449cb161cf7a69ea5","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"8a27c8ba8b8e8189c7a6e0523d869e1cefc69f40487f7c8bd6189c00b5becb1013b40f1f5518aa1e4671651c8a136d3135832daba940b17b","pkEm":"ed8f82c7d6ec6df3cf21c9f7c594699fd3d8487b0ff52f9e37d539ea537e61833d65cc2c4444e20886b9c0dcfc3427d92ea65fa089d346f3","enc":"ed8f82c7d6ec6df3cf21c9f7c594699fd3d8487b0ff52f9e37d539ea537e61833d65cc2c4444e20886b9c0dcfc3427d92ea65fa089d346f3","shared_secret":"c2b6f12ece73c9a19ec00b90b80a2f119807652ae3253193ffa9eb070890956e07dfb173599a48d99a1a7256fc53f9814e47c18894fe89a90e7ec0ce84d5916f","key_schedule_context":"01de6d9192189182309c4c5b2ed1340a7d3b7a658019b10e2727f442357352d8387489993fc53c01e467acb9e813e93cf59dbddb92fe273c67cca0582a2e482be4","secret":"c7e9e7604bc6e4ff55973c9e0d179f1dd340dc0e2dc408e0c8d1afff88899fd7","key":"eacad4765ba36fb528de011999d0e49bdd57bf10ea73277be79d6916a47a0d5e","nonce":"8e9644405d44e969cfdcfa69","exporter_secret":"408bcc314c04cd9451e88cf5037ec1a9adeaec119be300be4e478bafdd19728c","encryptions":[{"aad":"436f756e742d30","ciphertext":"70deba173d7e1d7ba408c51efdab89b4b7aba995a1bdeb7de4b0eb232354c2356e2390626f9a5b62a2a604dff7","nonce":"8e9644405d44e969cfdcfa69","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"55b1c0b0a78da95232962b1528e6da4ed43aa7a24c6050596baa17b6d6727b70df4722aad006ffa35044a3b88e","nonce":"8e9644405d44e969cfdcfa68","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"76fc4afb0847d364601ddd5ba555301d2ed12de29b66b1ad97ab4a67dc8fbab27000541688b1b0af296ccc3e76","nonce":"8e9644405d44e969cfdcfa6b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"da76d243451605f5d55f2160854e13aa468366ded40cf46f9b2160e974b5dd3e9e15292cc7afec92e56edfe7f9","nonce":"8e9644405d44e969cfdcfa6a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"5a193f5b3dfda9abb2a92980ecf2cd6ca462e33ea5641d5bd02ff74b85cb68678734cdd8b435292dd30824861a","nonce":"8e9644405d44e969cfdcfa6d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"063e47c63415ac80f223391899e5270d409a630da7a0527f0bc818486087a2d219264a342a95c31823af278674","nonce":"8e9644405d44e969cfdcfa6c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"f16e5e478851c1387d30cdc77400647de8a29cd9d6106ccdf0f6050bafaadf6330aefdd763668cdce63a54c29c","nonce":"8e9644405d44e969cfdcfa6f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"885a5707d8866c4d3068b890c4de29f6953dfb90c848d37b2c63ae91f9522d0bb2898ce389a0ff5f69c6b0f4ed","nonce":"8e9644405d44e969cfdcfa6e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"c0f9f75f9ded9ec70bd758df30d2e5ff145d413938838861148937c6c8ae5ab3a8537bb1455cf15aa3e7b71615","nonce":"8e9644405d44e969cfdcfa61","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"cbeae9cbe74470c73f7166bfdad9d5e51319f4f30551ee7cd236e0a1e87039a768ec2f9873b1e49e5844e052a0","nonce":"8e9644405d44e969cfdcfa60","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"0d5026d91397975544febab5d9f789be7a100653d73a4119685b3a726535bfe9"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"94d3d9dc9bdc20bc79387a3aa9b0a049fa469d371e5fe942f9c9b8ae0db0a4ba"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"53df7ddb7a75f7f0a91ed27d25f74191685e59e673106b4e3f5deecd248c24aa"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"3ee04fb7060b8d0072aecae63c5ba2e04a9536a70cc1602b4ae781ef13f2512c"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"f4fee6ec4ca105b4eb33044ec7199c8ad6e2c3d519a864c91dd9f55ce085d3e5"}]},{"mode":2,"kem_id":33,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"85867fa68d095842dda73da0c0ba207065a6529b12859a6c2b3dd71feef88d323529248a355e2b035ed04c93b793524415ea376cae96d11c","seedS":"c6a514be4901d3202ad91e7be13471f5047419e2eee8fe359799811fda603fd3f60b4f8596c136e450814db99fdff4f1f656d5e4c942d988","seedE":"f8b8e6ed3aa3f6e01aa1e1b2e80fea41f5d4867c97973701c48dc88d0cfe1dc37338acef0d75201b3c38f96cabef6999e54b9424d6ea2735","skRm":"7d7a3179665b4411fede6a44e289870f6a60982bdab74cd3a79bc5b565bb38a6faf837a123040ff2645bb416dcc84ce024e29dee802040fc","skSm":"a244d996df474d480c5b36d6517299128945f6bdc8491c043230183b20f0fb739da4a9b42ba5f090882980dcf40aba52bd8e70a41f987850","skEm":"ab04eef8a43308ef161a5340020e54e0cc19d685ed49846f2a70e0209abd13693183af17d0aac1d8c5051aea1b2fe919863fbb55db6ee02e","pkRm":"bf074d0583d1aefeca2cb0810e978929438720cb704864f4f37ba99184edbc1f6c95c4ab5de9c13e180eab9ff33543ea1bdb7748760f57de","pkSm":"51918020f48e4b96994ecb7b097768e3d18929fc982ad4580723c3efac419b070e5117792db0286eb514a13b42b6eec13720bde540c01f8a","pkEm":"8f68860803ab12bda74358b3d6a6edc2eb959032cbb1b9ced78e663b0155ebadc6b038d87ce902b8cf94be47408dc63caefc06b68a78ab66","enc":"8f68860803ab12bda74358b3d6a6edc2eb959032cbb1b9ced78e663b0155ebadc6b038d87ce902b8cf94be47408dc63caefc06b68a78ab66","shared_secret":"660be9e07b7d0724ab30b1620a35492b52ebde7509abcaf6531a70007373c5c66590037b760b7ced97fc227d94f16363148b28c625b590a24637aadd12d2edc8","key_schedule_context":"025057c11b73576e77b95c5eeef1246d13b0ccf6f8b222a3d300a09bec8a7fc6a07489993fc53c01e467acb9e813e93cf59dbddb92fe273c67cca0582a2e482be4","secret":"738ff205d95a1f2be091ed63649ee8446b44a53278618ce453434f972decf0c9","key":"8f3a7791ae3031e83c36c84b091f9583e59ab6b23c1370975d06222b10f01b9b","nonce":"46c3254c7ef0d118abe35284","exporter_secret":"bec7e30d04f9b97dafde477e754d3315c0cc58f6322b168830a7b553c99207d2","encryptions":[{"aad":"436f756e742d30","ciphertext":"3ec5e123988189f15b2ff1338e34efeee77dafc8873f490df8fed694b53fe98e1d3e5172865afe3177b18f507e","nonce":"46c3254c7ef0d118abe35284","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"3ec36d955b6e7d345e7a662164dbbdcdda8e649918079d5b872b549cd7f4d43edde8ba682c273253236d374355","nonce":"46c3254c7ef0d118abe35285","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"195322be6cd116db2d34f6cb6f2be679a4cb5d78fbb9cfa0fd2410b1e038f7a671368bb600228463b0c2b78a9a","nonce":"46c3254c7ef0d118abe35286","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"83c3c837af0351d0e31ec7aa6c465b8db495b8c83f24da746199cd607f459ca2988bb71f4e3f74743bc3b6b3f9","nonce":"46c3254c7ef0d118abe35287","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"55953efb4d5e546b61c4b0fa8c105befdb67c3114ac085a4fb01e4d34d4679d286b5ea354d81877638bea210ed","nonce":"46c3254c7ef0d118abe35280","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"34636c8715d05b74e3da31bb0d6b7f6e6fc0ed7c4d3ba9e35b7280e75f81677b24162c60e07f30c8214baca818","nonce":"46c3254c7ef0d118abe35281","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"34c6a063493fb0ed7f45d3139b2a839d811b769994431ebf6e18da572bedddc9d2638e76325af7ba94515b956e","nonce":"46c3254c7ef0d118abe35282","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"32fb5ac9875e527e890a8d0706ad50feac3baecd4f812d29897231c022642b210ba019ee3edc55cb4baaa0c652","nonce":"46c3254c7ef0d118abe35283","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"a65da4c7dac822712e33976878aa1084408f5979ddbb6fb8fcdf1944d6b2b5f02c250754c8711f67ca3b391570","nonce":"46c3254c7ef0d118abe3528c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"0fdf4d91e3583dcee16e6333b8afdab5815c97464da5b6da6529c4174f06bf35458c22a0ea4acf996c1bd69726","nonce":"46c3254c7ef0d118abe3528d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"07b3774dc0e60dfd0b08c850dfd3849a2ea13dec1c4cdfc44fa622082f20b43a"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"702a581be0ab35e718d64a7723de5e797b4f1a64c99898077321f6c215a62887"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"66a7047d8a949af6e188972638aad81288188b202d726351d4d6eff58cf65de3"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"be542f49bd3f85fb50106625aa1e8052149ec0f22ad8343b5e5e0c316a793649"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"37a2ab65647f022ed2313aac60c55f67579a29aa55beca39a3501e75239fa999"}]},{"mode":3,"kem_id":33,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"99199b17de274a7cace772f708c4cda6315aac5c255f4f3fb126b450f30c5c555d318ec8f87b516345618d815fb08d6ae06d1e2482f2386c","seedS":"f85efb5df259cda577cfd3fa0d5313746587c685374d78c268a8b1c2b28446d19541bfae05beb38efec66d11ab7c7fafa87cb4fc00a7dfb4","seedE":"7717c66909f31f8d82e345a4cbc456df66c5a1b3629f0fa66f7c1c45ab01b513820eeaed9ada7f281aa8368a1a23108406e76d708890f709","skRm":"4a4b3a58bb2de05ea148a40d190142d4dba31a2e2102e605b5d9318b860d7f9646479ab57e2d3c679d0e9bc23ea36fbe71f044b945b3b52e","skSm":"650be62a9774ef251a4a140bd1ac453368b0aa29481612841f6ab10222d2fb784c9738eab6722dcc10a88ad97395904ef7f14c5559699616","skEm":"f351a67d841df44dda36315913327190c2487d924697f317c9074d86ed32994f7f0f71f7b64ef24b8e8b3468c52ed90023ba07b592dab56b","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"47fde1e052cbde93064898e42b24007703991e93aec5493af1ce8a1df9b07fe5977ed9bfce68ede5186b923a12390cd1305f67de29e6de1d","pkSm":"7dcc702d3b465062ecad762149f515593cafb59ffbad9ab06bbd3cf58be235ab19ab6a4918f145ddf4c81fd3429271b4efed2629798f396f","pkEm":"0632d00791732fc626c857b30c0d3e3e1dd79e6bb46745d04d61e11ae982b03fd6e2e4aaf53740ffe72076a713633dcb07b344e487fe2603","enc":"0632d00791732fc626c857b30c0d3e3e1dd79e6bb46745d04d61e11ae982b03fd6e2e4aaf53740ffe72076a713633dcb07b344e487fe2603","shared_secret":"da6f64f2ddec81302a2ffc25c3e455dd38aa5bd95be1ba4e2f8bd6ab75ecec5d8ffcb27de67e1ada16182de3245e7e87ddf7a6279663a64e93de24f32d224516","key_schedule_context":"03de6d9192189182309c4c5b2ed1340a7d3b7a658019b10e2727f442357352d8387489993fc53c01e467acb9e813e93cf59dbddb92fe273c67cca0582a2e482be4","secret":"da09e1bd2615121ce87523b9329ff51a53cff93aa2f37f6479694d880f1afcf7","key":"15459c6b6c00119b4526e08e3849fb4dbe1d71a7953440b924bff51726c5942e","nonce":"0cba9e7f9bda353097c19d29","exporter_secret":"d0d69fc66c28694d3ed781cae32ea92dfdc96ceb3eb72fa034fa266d2dae664b","encryptions":[{"aad":"436f756e742d30","ciphertext":"cbf82cebf59dc7e600b2714119a83c8abcfed40d1e60efe43543eb5993001b5f5cd9fac6a9e9410109b80b9518","nonce":"0cba9e7f9bda353097c19d29","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"bec2a27b7a05a34493be2525c91eb002379be7339eb90f433ab5adab525276e65084055515dcac9857aeda0f12","nonce":"0cba9e7f9bda353097c19d28","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"4295efc71dc5292dcfdb74df8c1ebcc4bfc00106632655e240be8364995fbb4edbac81da8ba16485074086fb87","nonce":"0cba9e7f9bda353097c19d2b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"d2e9d05cf330b13d8851c29dbde0171bb379c52c547df6a093bbeb623ed561c712848221cd2a9fbb106d349038","nonce":"0cba9e7f9bda353097c19d2a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"3dd2cf14d2dc26e2d6bae391fa8672b686d81ce38265e81029ef508d60d4d846b56e21faae35393ceb37381e98","nonce":"0cba9e7f9bda353097c19d2d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"09ce68ce9a78486c3e594697f55c2b877838dc0307c74b45baf506cac656db8f4e371d7fd6f480b2fddeb24e85","nonce":"0cba9e7f9bda353097c19d2c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"1ee31c80355f902b1362d627484ae488e304804930411fd1b780beb57ab72e336cf4428f65e45c51ef075d5538","nonce":"0cba9e7f9bda353097c19d2f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"10f324755e7a932b90aed1a4fe17a6c97b7128c9d04cff484a7efb265c1c14196a86d02296a1daf98a4fdd036f","nonce":"0cba9e7f9bda353097c19d2e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"13a1c2e55a8151bf9113bbc64a584a1eb8bc2bf1f3e7d071247fbb999c6be1fd9c842452d8fe854411eecd5569","nonce":"0cba9e7f9bda353097c19d21","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"3df2f384f8f68c3b6adc64fdc8afc4c934b05e1363e0cd1ac63979ecd5b75e4cf8624f397f8e48058ad9c0aad0","nonce":"0cba9e7f9bda353097c19d20","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"88127b708662b1fa0dbafe14825c69874499fbbc0c3fb40f3d4d3ce0e236faa2"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"1c21e9e09b3a12388c173f73ef2df922d4da0bcef7db508321997e4e20969991"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"a85bc0c79f4052c77de9053b6a8918430c92c8a41ac6c8ed3f234d20c20539e0"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e0f733a0573befb1049c0b8c3d64c82d32b1ab87bf977e958e4835b4b1c01b23"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"c27f2744f7df8bd2d544663434513259570171ff1eb30410311dd5671568351c"}]},{"mode":0,"kem_id":33,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"0b8c4c4ec52e8f0f632aad9d34e4778fb02a620b8853f3f46df02818e67bb09cb7b323e4b8ba860890fe286ea63f0bb9a47514e3bfd41f87","seedE":"8ab1885c7aa71077748a2729730bbf45eafa48e43496d640b8355ebcac0c16b72d27c0a3ac6a81e5c4ec7157452a067c91ee265177ea046c","skRm":"e41de2e424f44bdb6b766b67cf9e563d019d529c68d2b9bf049c203caeabfd21e46e07fa41b1f7905faef1648e4705f14810127230ec8b88","skEm":"9642d5e7f47a5cdb2bb9c341e94d97eaf87abbbf146728a6b19d987888c8d13123d2b0c18b503e294034de8083921f683505bbfac3191aeb","pkRm":"e04c798c2e677d4e0ba7a1884fcc6824b7e0b90bf75894b91470c37abd9d01890ff20515396bec2106d8a6cdd2a35a39a6c8cbbaba8c73ff","pkEm":"0be9fd12e57a5cd996c7aacfc0b4bd94e6d29c292fc6db89a24dbe935d3efa6848cc9bafad9297324a99f6cd6616d9c0c0c238af312a4f6b","enc":"0be9fd12e57a5cd996c7aacfc0b4bd94e6d29c292fc6db89a24dbe935d3efa6848cc9bafad9297324a99f6cd6616d9c0c0c238af312a4f6b","shared_secret":"58be019b0287449206574676eac0600dec6bf1e618c7e33043e253cf94e2c573b0b83032771deaff9e8f7ded3977ce9cc0a892cbe208c074bec26b3bd0c8f211","key_schedule_context":"005057c11b73576e77b95c5eeef1246d13b0ccf6f8b222a3d300a09bec8a7fc6a07489993fc53c01e467acb9e813e93cf59dbddb92fe273c67cca0582a2e482be4","secret":"fe9d68689d05bc6f8c837dd938fa3fb613d84796c08ab2e462c33daa8182ca9e","key":"3bf0a2c961a1f146a5147d35cd89a3db06b5b8c60e62df060188b5bf7abe750e","nonce":"6a7584fbf93c9e31d3f66a0c","exporter_secret":"d2f1ac2e5f0af6a940be18847e8b3b6a481c1d6f4787cfdcf2e0d059b17b4414","encryptions":[{"aad":"436f756e742d30","ciphertext":"0fe91e0dc5954f1a05df8e21fafd3e2749e0ac6b0cc733f125f60ccb1c3f29c445f5bcbb37790e261584c48ef9","nonce":"6a7584fbf93c9e31d3f66a0c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"45c1ddee15ad6b2048fb73d8c6deb429ab87c09cdefcbb1502a20a9ce666f5e2add0ab64bfa3d1e1213a3754b2","nonce":"6a7584fbf93c9e31d3f66a0d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"44aa8fdb5e1c3c6359e96ec9f6292d38764c3adc840bf96a839352482114594fb640e6c0706e1a8adfbeac8625","nonce":"6a7584fbf93c9e31d3f66a0e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"cf7fbfe58e047dead7d6d8de3a71d1d26be2e7d6ea5d606773351299d46f8768d49a1e2c5dbdd528d48c5307dc","nonce":"6a7584fbf93c9e31d3f66a0f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"94aeca06538057cb916c5ad5e27d69aedf2f27507d1d28fde011c2c394f3bb0875fb77d37217628425a13da7d0","nonce":"6a7584fbf93c9e31d3f66a08","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"aaee5d7066018b840d9cb780d699fe97b17df72feeb7026376698ebc0ec5b01f21f8307bcc3bfc8fcbea923fe5","nonce":"6a7584fbf93c9e31d3f66a09","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"06fd8e117183eb4e94e749ca61b26d72481a68186b8d78b840922b91f28fea47467b7f2ec4d0b0cbec6ba8672f","nonce":"6a7584fbf93c9e31d3f66a0a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"941820ee50b84f69ee6f39a2eda20acb3be5220eeba1bfc594acb4ee4944903e39572ebcd346c8d6d6f1526904","nonce":"6a7584fbf93c9e31d3f66a0b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"c7fc6424744092d60a7316e999178d1eef3c25adda58049667873fa57a2fdc66179f06da98aa9cf694670ba7a6","nonce":"6a7584fbf93c9e31d3f66a04","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"efc54408a42c66a387c9ce55114f0af9d3b8b4de3ced6918d327088421d41748e0a43dde59f001c4cf2bd3a4ea","nonce":"6a7584fbf93c9e31d3f66a05","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"aab38c2b0e86a2f8151da17abc40eb20625a1f0c26b03009a6fd7d540370c6f4"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"98ad5e6ed780775fe9664b13a4071d29391c5284b6080be6030e58976e288138"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"570db86edba10ecc6ce2714bef20edcbdcc8e12b80d64593b1b2ad40c1b9449f"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"d20ccce491be64cb4e19b6edb3bfb7f47f181946fe50df348ba9b6e0feac722a"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"9ad8b770dd7b35e24f9729dbd857d204e1122df44600308cd8dd3d29967f2c7e"}]},{"mode":0,"kem_id":33,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"152eef656d9c65f0f8ea3ca383392de3223b38e233f89a8c6a34b65583159cd5bccdbeb22e770819baaf5358ea589904db6669710600c202","seedE":"6e8a3ca45d8a7e5e65e553c1d012ba92ec82c93b337800cbc2ab2d6a444d63722c163930fcd4e1830019e6fd58dee38f6523bc6e50e327b1","skRm":"5b25cae27597e1e508b48ff3604a2b4f995faa4473d05597a06733a9c58e48defda48e2e036fbbc2213c9dd369b9aed000d032afdf8d7134","skEm":"f15a64279359020b052f5f58f1a8a0682968c1fc33805bb30a484706aebd7c07376447293f43949c1a835459fdd834b9b97730e6aa0448cc","pkRm":"59fab7e185bb71f3c33c092a70a052151213b0052333c0cff61e8d6f67505216b994efc3b5621a72187b80b0ec0a8e0b03254061689d39ea","pkEm":"1322fef7cffce45496a8cd37deba37b171ceccf615033872491858da9333b6a5a23a9d7f11c50f8e5478ec2a60d43e85c0ea879522cb12e5","enc":"1322fef7cffce45496a8cd37deba37b171ceccf615033872491858da9333b6a5a23a9d7f11c50f8e5478ec2a60d43e85c0ea879522cb12e5","shared_secret":"345013e8a9d4ec33d0c78d3c0f632d1c28cac291806a33fd007e268d54d290cd3c6c4a9552f64fc53b20c54489bf64f2bffb5c3fdaa6d38bc77049d7f56122b4","key_schedule_context":"002b8f02bd1528e10a5db81bdfd552f8ade1fcbaee98c6171d8742d4b7eacc6e5dc0145fd4bbe76b938b1db8a0015dded39e0f54ec5bc80dca911db0c14bb1cba5","secret":"631763a3bda5d9659cb80582a510cc700fc6778a87f53b0f0d44b915be216c60","key":"470eeb80c458ac986ed88b7bf3732d7d77e09402d766b58b5b58926a25a20902","nonce":"26012de04740ed1fdae0b335","exporter_secret":"7016fbd2c332b3adfe0c0189019724a3222994706ba85aecd87401fe156b54d2","encryptions":[{"aad":"436f756e742d30","ciphertext":"263642d6c87269e7b81b005131ca08aad7cfb9cf82a5dcafc7b5e64a79bb0becb8e6db4ebcc5ac8ede95002851","nonce":"26012de04740ed1fdae0b335","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"0e88e9c0ab64245ed4d5947851e9b1569c7b6060e056a4d08ffbfd78514390842f566daa71ab95268223b93a8f","nonce":"26012de04740ed1fdae0b334","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"c59c5bf707b8e9b1265014bfaa869dfb9170cee4ad77234b018c585e19e261aea75ca7c471dc7b62c1a3486903","nonce":"26012de04740ed1fdae0b337","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"afc4626114ad4c7a85271245655a28d183c06cc9e4dd87a0f1e059b9958409e6f7ec73bf426f985d7c6ef9bb5d","nonce":"26012de04740ed1fdae0b336","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"0270b9cf34548e25a8645c3a1aaba18c585bd1d1b465a9908bdc14f0e5ff8ed5d8622cab2621460630de29912a","nonce":"26012de04740ed1fdae0b331","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"a83d4b8954539fe3594854bc687d55f4810763a756149b8fe868f07f3725f7c31a604cd8b7fbd73d4256759f6b","nonce":"26012de04740ed1fdae0b330","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"f92b53f97af7d4d9ec315aa10ea16934930be4e0128d0f3cd51b7cd0dd0df19bed23768a50fb32f87fec627834","nonce":"26012de04740ed1fdae0b333","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d1435a299e04e4a00f2e878d4efc81917ee37868cfffe01a402211fe0e91a5f1aa678e9712d539f87c2ee42c9f","nonce":"26012de04740ed1fdae0b332","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"d9e273b0bc3ecef3f278965d51a362dcec6aed400f029c70bc43eeb345e2f71a71bef3ceb8d7810a4bf3af7921","nonce":"26012de04740ed1fdae0b33d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"cf355db0753cf6c6b29a79cc8a88c14e0c332c934404362b878363557f05bab097e1506ce03fa496b31a6ad23f","nonce":"26012de04740ed1fdae0b33c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"b8479d310d5b93310447b6ccdd5f5f90f20d2a991ad91d459731e732df675565"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"ab03e32dff5709274ebfb2d8b030d3c9b2255b50875170ba8915ff7d0f1b80a2"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"0bee7658a03ca765b80c827b45d885f8cd3b7b80aedddca264fc604cfb8c44e4"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e6f48db0e5287d8105b5d9f18e914e0c10f988abb26deade9eea4fbafd392437"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"5c4a9f02dfffd39c3b6f69ac6156a7b25098f04d82ef99aa6ec62ec32f05a6cd"}]},{"mode":1,"kem_id":33,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"3f31c1a6b129d952c00429c53313d8b05fb1d87ab7b1c223e02c7e502cbfea24cb772f2e09ebfbbf1eea53d183ed0957d71135f6abe613dd","seedE":"cbe7cb1abc04bde868eede5224b61761247a339ad66753865b44bf88db472d28d62ae9715147669486133688214e10974bbffb0fd3181140","skRm":"8ac84a55aad6804115ee853ec8a118379b9e6b25f38a466b7d20ee4623640213908c98da599b44d1f193bed52af5bf87fa34df5a4b7097aa","skEm":"b13ebcbfe9c89a3b55d5937c3c9c2a1c8731715cfd8173d692803b9bf1531e724da45600d8c5c7b8c6b052ebe6bb9a26c6ec6bef8a6d792e","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"d4c749a7351bb41a8ceb3dfef5f5c795ef8c83361049d86c1c8fc839d6558fd1812c93f6327cae4c773ed151054e212d8ccc7c4cd4344c54","pkEm":"5b69ea3b9e318523ddbf3278eda6ebf86016ddd7629239cfdfa4402714b40554d97d778e9b58053d2b444939c323a85bbab467258d3af2b9","enc":"5b69ea3b9e318523ddbf3278eda6ebf86016ddd7629239cfdfa4402714b40554d97d778e9b58053d2b444939c323a85bbab467258d3af2b9","shared_secret":"861893f7cc4f900c25b8bb55d3b5f2acb604abee65895266661747aadc30faca5aacf415eca88dba80fca790889d281e1ce22d07b54f26a21c5da74d0ca0f626","key_schedule_context":"0160b33b678eb261e664f7ebeb4c9f0e2ade08c83dd68a7b83cf15b17d3191379fc0145fd4bbe76b938b1db8a0015dded39e0f54ec5bc80dca911db0c14bb1cba5","secret":"b8d767f8febad22ca72180503ba0dd26d40d345072b1d1f3da08123911301f72","key":"5e96521ea27acec733b0f10c6355b4fd66f3c2dd3f810902ec0533c2acf2762e","nonce":"97099d0ff5ee002c4b136aac","exporter_secret":"f1d2f974cb54ab869901a0a01c158c4d063579fc7ea118c0852d8ffd17e97e4f","encryptions":[{"aad":"436f756e742d30","ciphertext":"3f0d91321c0eebce712d29d0d8f6ba07e0e582febc70b0ae07e031a659993ed2ed78e07c25961db4cfddee0eac","nonce":"97099d0ff5ee002c4b136aac","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"3ed6b2ad5fd06d5f355aa697e5a74f40c09c84d0f630c6f61215eeb0c27beaeee983dfe2a6d61bc7aa4c8e728b","nonce":"97099d0ff5ee002c4b136aad","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"f8118affd70ebd55a5a0ddb27ba923200ab0987bc16c653de3da5a59b38560c2b874ebac6bde5121da59253052","nonce":"97099d0ff5ee002c4b136aae","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"81838b8a5c389295ebdde07201a189cbaa77643633c080850ec1124209f927bd4c4b9a29448ba69df0cb05940f","nonce":"97099d0ff5ee002c4b136aaf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"2015d7c06c792fd5bc9ec2fb9fc2a4a29efcba9a35123c38ab0f16475e0c23a50bd5b54660896e468cd46dc77f","nonce":"97099d0ff5ee002c4b136aa8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"fa0b0b8f74b605174ed007eb56d8bc36f5a6cd62bd3d4efe06dbdf6e58bfd9595cb61b9dcb5f16d5738c999f02","nonce":"97099d0ff5ee002c4b136aa9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"35285a47ab789afd3e2b370eb03eaaaca9f51b8f2e98d4e62959a76a9d8fdda192292c70b49b47b84e4cc9bed9","nonce":"97099d0ff5ee002c4b136aaa","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"39ff6d4702566d3e96c8f29d5b9063928c740de80c50ebf33a56a614ea5c0068ae71dc56200675cd25fd76559e","nonce":"97099d0ff5ee002c4b136aab","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"0f3d82a85023c63a9bc3a33c35d55b0f3089dfbd1e10875bcbeba66006646d1684aacbf4d15348c89830707292","nonce":"97099d0ff5ee002c4b136aa4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"1cd3ea58da0622cfe3014e9ac84ed4659f408f137793bd8a9f128fdaf98a5bb50bf038e85e40f2b7600ef8a4af","nonce":"97099d0ff5ee002c4b136aa5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"556887468e18082fa78688d3f0485e26ef9bdaa983adc09aaffdc28693844d60"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"57c3719dc9196def5d2f7e159fdb107b9c724a178d724aa89f84aa453dc82795"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"02d7d395a9b890223fa29265fbeccfd2c9d4e1ce4f2d337e6b465aae10ad1ef0"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"cce4071e42b5c1c0befdc4139bffd91075fbb45273053bbe64eb7c06c1296f4a"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"73bdb6adeffba85f45895e1c664fd30988f889f64d46ff980e4ba3160441e9bc"}]},{"mode":2,"kem_id":33,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"25287cfa577abaf5b9887033e1ce7625541104149bc6f860a4a21c014f9c0571549bd2ce3f790a85f9d59cf66777ce2f502d491a5cac3dea","seedS":"3e3e1edf4bf7b595cbbc7899b2b480e6f7b7b0584ec55e4ffad309d68f4fbe9f20c94179f9cf8b854701c2b2c7060d9a08089c3be546d333","seedE":"2ed5e9727dee68d17536d127b54c75fb5d35fae432b41b8ca0e47c679c2c9d68e168054d7536686469cd04fe6fa4c86356fb0bfe80af2f65","skRm":"4ee4da4638a72a53bf36d19085b438da5666f685fc771036b6d1e5d42ed5b929b6894cbdcd7c622bfa89e472d43fda0609962d896d859548","skSm":"701c906748ddd6fa71391f8e2af54f6cdc9012133accb2a57955c294454c01e62cd4fcadbb6250a046d4d8d956ed8fdbd8d076daaf9da872","skEm":"dac7e07aa9dab5731d47ca19a466bb02221dd94132d00f4c2323e62c5d67affd414079955cfa2b787d5bf10f781ae64e5e6937f04bae1760","pkRm":"264c22ac7762c8d31fe623ab796792f919f8873bb7bc2e9ae2b65fd277af42f300ae93b44aea1c9d0ba470f497c82fd8ef2c6dafdb785acf","pkSm":"c8eca8f703c77f9f1b0f035d7451a1d5ea30c396ebb32a761ec59e99f77077efa9b92d78150b78f9b580efc8f62a078f1c06ebca082d961a","pkEm":"02e3dfe93f39fbd0de9db6876a5939d147df2df81cce43dd8500bcff541a1e94c7db88d6e23b67c36f77e12fee7c06190ee6b45dc411eb5f","enc":"02e3dfe93f39fbd0de9db6876a5939d147df2df81cce43dd8500bcff541a1e94c7db88d6e23b67c36f77e12fee7c06190ee6b45dc411eb5f","shared_secret":"5c88ed198157e18205072fbda016c059dabf4720d883b8f54163183a065cbaedef1effb169ceb4fd5eaa3143ab1de35d5b7ce8d1a82d8e8e81b050df7d3417a0","key_schedule_context":"022b8f02bd1528e10a5db81bdfd552f8ade1fcbaee98c6171d8742d4b7eacc6e5dc0145fd4bbe76b938b1db8a0015dded39e0f54ec5bc80dca911db0c14bb1cba5","secret":"b9f018fab9bb8863a1955aab88da7130ff343a43450212a8d0034d4ab92030b1","key":"5803804b27e31a4c226d8a519235fcfee864b0b227daaca9c53afdd88224c84e","nonce":"cd059158c6e638ade09bbc61","exporter_secret":"9769274d1ab2a934242bad5d21afe445edcaa4678790026c573a90580f8ae453","encryptions":[{"aad":"436f756e742d30","ciphertext":"f8ce7a7c2fe43f37bb5cc35e4db8fa232149b45f2d95ce3f88e79b54bfbfd5ce77f23ba7472d5ca8247b3d9332","nonce":"cd059158c6e638ade09bbc61","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"17fdc08a7893af23c5a4ebf889bcc28e3d9b3085ee678ca9213ff3345e590276a9c4acad0b81e7e74180986d9e","nonce":"cd059158c6e638ade09bbc60","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"1a955bf88b30f183377d8494d1a676b1a27b0d2be68fdc781d4aebca24741f64e476ffd139f7cc6c334e22e2a3","nonce":"cd059158c6e638ade09bbc63","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"5ebb4d7d7919f295df2e4fdddea703b2da7edaa7389dc6b4ba6bbed4bec60e22df43b104cca13f0f12f9406ae0","nonce":"cd059158c6e638ade09bbc62","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"b98f8bbb65eb82d4a9918f770648f4f40920f5676c534ff4ac6fb53a24d8800bc39600a3c82a7b311de31b9aa7","nonce":"cd059158c6e638ade09bbc65","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"08e580f6033214f25bc032fdc14a3bb661557139f1ca976473bea371482705756d1d2659900789f6c27cbf9eda","nonce":"cd059158c6e638ade09bbc64","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"923080e329bdc7ed64cf8ee4e5bb8c3af1a8002b2cf96b792214234351f2db13f2b4cd2d43a2e6dbd5f508ca0c","nonce":"cd059158c6e638ade09bbc67","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"871455d005ecbd0e19a5a4214acc71308752bd3b6fb163462ffac3bde9125e1894b194f306b127c8d850e27ae9","nonce":"cd059158c6e638ade09bbc66","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"8fbc6f2e6dea47eaf5663611e87d4474381f07b638a3c12f6c6c71f3d57fc1398f59b780d59860fe728048045e","nonce":"cd059158c6e638ade09bbc69","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"67c8041dde518f2a13f13dc4a3b35ad351f3d46a55ee836e1f311bd9aa0bb1a459b87b90cbc98c06545109ffe3","nonce":"cd059158c6e638ade09bbc68","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"8948052d92df634cf37ec6ae4fa29695bdc8a6c6d7713bc89008761f54b9e698"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"7a1347fbadbe6931da5b6b68c1d686fb4c802015ff0928c7dda275baac10284e"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"82eb6e06e729439445b9ef494c87fe6ecfb1e8eb3407ac5efa82b2625da1bfa6"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"f80f5f3ed1b4d1c3dcffd6392bed02c97299f18135ec136a0eec90cec6750c57"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"54b203a3d58378bcf839eb5b998d509b80cc53897d24163ddb721587465deae9"}]},{"mode":3,"kem_id":33,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"b40b5ff469deed2ad6363d2554f1600ca4206bc6874381ab9fcca2153d2f6c6ca02339558ae32ccd1ff640030e321f63fe1056f7716122e2","seedS":"c10703a86b8e7274ec4ca8f5ee3a1696960ba9db764d517ebfa37567141d7af0fbeef6196fbfdcd76cec65d228f23d883dbc34f91eb01bd6","seedE":"71eac45a2e9971054caff3b70c0355ced179eeb0b041a63c48d8cdab38bd961ee9a0a46a2d190311b3c0ac645bf00f02d9a68defcc0a0d2e","skRm":"8c3a62dbb72bb89cd35a3bdc422bd27f49dc714d1435b6157f42174bd8d109c55d1885da65e6212cc766c70592cf8d9d1010e91d8f8256b3","skSm":"4e1d51ea700684c53beb805fe01b6bf8f0cb6256f04d9bbff39fb2b49b965aa7d1dca955846a68bd65c97be151895cf3255d85a4d6f4f94a","skEm":"3b77dcaea6bfc14cf89ec89a3370e9b36d0383f93644ad10d4c310e3a7d3818606f2cdea3495d64dede5d23e7fad0ae358f3c439a2b13b4b","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"a0bb840213bf5800d13016fe35700872d3b403bcac14192de7a3cb3b5055ba2c8926ec28a7f57a2cdb615e8657b2ca38edb78c7edb0588bf","pkSm":"87caeeac827587fb8b6edff096b8c7a94d32eca43367ef84f7ab4bac8b2af2eae7cd17cfa394b48be757affaf9fe50fc8f0d38ab9d55d7bb","pkEm":"4270618c60c2e9a48fbb2b6b81b0f7b3148383393e6f8facd5a4c67960c909fdcbb73150326afc0e0cedc3bc0377cdf1f4da489ddf367e54","enc":"4270618c60c2e9a48fbb2b6b81b0f7b3148383393e6f8facd5a4c67960c909fdcbb73150326afc0e0cedc3bc0377cdf1f4da489ddf367e54","shared_secret":"1e683726676fd1c6421e6f3cd46121d62000005b923756a95dda5f84cdaddaa3884d28dcf92042805338f68cf6c0b6369a7b91c44b78949374fbea44c0031828","key_schedule_context":"0360b33b678eb261e664f7ebeb4c9f0e2ade08c83dd68a7b83cf15b17d3191379fc0145fd4bbe76b938b1db8a0015dded39e0f54ec5bc80dca911db0c14bb1cba5","secret":"4c85e58fa17bef7d0646af59cf06614339e0538bc6be79bc980cb1a1205b7b25","key":"6c5b4bb172966c369798511372f6b3466fc0dd8770135c128aadc41c89df5492","nonce":"72216807db1ad3cb8bf336e2","exporter_secret":"f8ebf43478a0773cf7dad5e176fa2cdd6fcf75798a43f5ff90adbcf6066d2729","encryptions":[{"aad":"436f756e742d30","ciphertext":"4da7ec65d462ecfa94de2e20b8e86891d2852da25ea7031285e66e022230359d6a9fb3ae7b68626df9f271f544","nonce":"72216807db1ad3cb8bf336e2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"bd9d78d9e0b6f152cf4c10192b22deee3df3d452bc29a8277beea09d3f9397dd54c7597bc2536ff691a73f2866","nonce":"72216807db1ad3cb8bf336e3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"92b71616c19dcba3daa30d3f96dc6406955da08309e2ab6d90b7baddd61d941cdf12803fc3333d1033eb9fc22e","nonce":"72216807db1ad3cb8bf336e0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"94d0a5018d110d3c881c3130c752b9db725df51e1a8c163aaed7ea24a8777e9f885eaa7b3a5de1899870d70986","nonce":"72216807db1ad3cb8bf336e1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"7c90aadeae406d1b0cc00ae9e28924c12a81af3354ed0f9e53bcad1f4a45634a5f84b5b2de53652df151290134","nonce":"72216807db1ad3cb8bf336e6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"01d4431079858e7f56bce4de406d072d945fd3c38341064cabef84aa1b67a1fac1ba69354f39309f247704fcca","nonce":"72216807db1ad3cb8bf336e7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"1f59fffc76b067cd2716bcfa6a71d7382a953713ab1a0538fc9369ab772b5a6eb4d96cd8b161184ee170889940","nonce":"72216807db1ad3cb8bf336e4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"079f62fe721ff48ef01d4491d3aff6837f23c63e0219238efa42d916a18f323a9d8c2c129ec68141a5e32bf601","nonce":"72216807db1ad3cb8bf336e5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"23001a980c108791b7d153ff9f81594c5167124735c7feecda7da93cfc857a4e8bae9d9a6c1909afc4a32d489e","nonce":"72216807db1ad3cb8bf336ea","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"ab310e1e2613af557ac63e2c752a0c4ac487a387decafb3199b140e9307054a74d5ca3d5a8be5341b26a926949","nonce":"72216807db1ad3cb8bf336eb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"825d5f3f3000d98a056025dafc2ab80d905b0bc4d1e317704a13d3fe3f599199"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"73b63aad01e20c74173aec2bb530d39f22393524939fa1e3529f91a16c61be6b"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"ef3b95c9778bc495a23de52dedc5f7a84b93e6e31e689392e01960b0b06b4783"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"a7757e51476a9e200d22bc4aff2eae57a0eb69160ad4db8806c6d440be6472fe"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"964ce7bca098643be539b9d555802f6dd1dc8030123dce4a979e6088eccbc874"}]},{"mode":2,"kem_id":33,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"27fcfcf1a55ed562445ef999353a1894eb7671af8ce6f03151fb5d5f93235f44da1c32781168a448499c8fd2b8a4828b0088e3d7ef9abec8","seedS":"22a6972235a42ad557944c5d36f4f38e3659794aa399a78c5beb5b037c5e2404d57e418f9080edefc4c525fe47c1c89d45ce072d515b45bd","seedE":"af66c36135c57286feba0ef23ccd4fbfc6f12922556150c109b362db1673af446b8923f3d2013511aac1e154d28360be1b2c5309c2d3ecdd","skRm":"61cf934d4a15734121195eb4bdb925e754920be595746cbad44b3cd020c90c37f01b5c982897cbbef07b1cd55194295ee4d9cd92878bcb2e","skSm":"0e00205f71f1f0c5818eae997188b41cfb7a6622fba5cc7577173ad5240df15f9a285650269b8e881ac4cc2b34abe72ed6b1fd266fbb7cc2","skEm":"41d7dab149bf26e26d93f867cbdac4b10c6203e4fb0e665e59bf54059bfb1082ec3809a78b3599537b0614a8a7df698771ab60f30ccc5812","pkRm":"25c4f6870d74f51dd7dcd0b1dab37edab70114c163840f729f04dfa6b1d2ca2624d68842c7d81c4250b32afc6cf85317a487fd63a8c5b81b","pkSm":"b16c9e5d76483478c8beca90fcbaf8b17a25d4ab32608d57ce1c1861e6bd92bb2d38450ac2b1d8cf34e1d9e85e9e39d2587beda8a309f3fb","pkEm":"82aa10cb64ff3be99241d81233445f530b5cd8f867cec70790de1363de94d33cd5261cad9d2ddf4d8718d0bd94f5a0cc0ff34320a6815c42","enc":"82aa10cb64ff3be99241d81233445f530b5cd8f867cec70790de1363de94d33cd5261cad9d2ddf4d8718d0bd94f5a0cc0ff34320a6815c42","shared_secret":"8ddafde754208d8430cbd9c1cedcfad641d7f173584f83ba4a366add2bb22ef0f10458fe9c6fac1ff9cacd6835cce38c2ee57d2875a2f0f0fa924d1741643822","key_schedule_context":"025d51d75e5b6f166cd8b3f200bb9646620b4b45c205483628fd330118ab8b530410a42988985d900acb2d52b068b37da9a4fc1c1bdb2952941a95db6be723e5c362adcc0c79cd0b968b815a83011ebe5c6f02404c89dcb6dd6b980095a163c99f19eb76bdd4e21cee08a19a1c50b98380ce01640ee02953f6789aaaa0ad2c45af","secret":"00d19b2f3025c9f8872edd49a054e6f6a5eed8d4124f30ffc07b4c75e6c7569d763e485cbed7787e4fcc87633caa8f73ecee4fd6244006e15260614f42f48c28","key":"f7b9fc5bd000071914939828181889a3","nonce":"816601c863fdfce9a4a3a15d","exporter_secret":"0c9e3f5f82b5669bd027dbeef29f0c1213a893c8e9f498e70d3caca6dda0a81df4530ef95ca3c99f949173f6ce02984c2a1e8e8760f8521001cdabc0387d4d19","encryptions":[{"aad":"436f756e742d30","ciphertext":"ad72bc52aa8073a1f90556bcce259b2d565be9a3c114df8c0c1e3eafd2f4228fa971b8ca43717a5fc5e5804c03","nonce":"816601c863fdfce9a4a3a15d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"f00127e0c443931958f701883007b6e1a50a6b10c1461990a36c62b7c1fad053bf7328504d0a22ff114a649493","nonce":"816601c863fdfce9a4a3a15c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"c140c5d64f323a4e55dbdc9d4ace434e81010ea268bc66ef79d2f98a343e49dfeb47d8f4d03209c19bad9406a4","nonce":"816601c863fdfce9a4a3a15f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"71bfb9ad1af731b7192d75ba5acbd7c9404718511b5f3e4ad439fd709eb2802e38f1fc50757f28d65bbf7dc855","nonce":"816601c863fdfce9a4a3a15e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"c9ec025105ade2d803c7b406e5e4d10ed00897253cc7f577389749d55012c334de0da94bb2517168e28a796d2f","nonce":"816601c863fdfce9a4a3a159","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"2d90c3472fe774f62dbbf8795b0df0a8069e2e60a7872b9c9ce3b750c5368da65532170911f1608bcbf4d45e23","nonce":"816601c863fdfce9a4a3a158","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"99ba751a7a4140ee3233b8a16a0f5066640b8399ea718cfb767f7ec86812c67f791ba8f9b4a6e3243b3c1979ad","nonce":"816601c863fdfce9a4a3a15b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"f76142aad62ed75f3e4f70269688d7d6861f0b1b0afdabedfda6d32850314f7297ed47510912ceb8d2e1e49de5","nonce":"816601c863fdfce9a4a3a15a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"056de5d273f7e561e64d9b90bc33751cee6955ded05a3dd959f0aa52e7b18e72c0c6b055e769525025ce7da1cb","nonce":"816601c863fdfce9a4a3a155","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"ccb02cf3c17a635a4d2770583073d745d8d6baa8187efe5c5767ac7db5fd6288051aa802110bc0d869294e2514","nonce":"816601c863fdfce9a4a3a154","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"9d783a7adcee76f512f21ae44c63c735bdb230c653ae87c3a6cedbca5e29f080"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"5d8e2f1845a7e4a99036b09e364243a99d02e86a98b62b932f19f1a979aa0bb0"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"87bbea40f8d47428218666f2db76ed4c7064c002b2f0da00193dcdc0104181b8"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"4e5c4b7de90713fb3083f9628ade164312f54ecaa83a21ac8e25f7e6f9c50d09"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"f7a1fdaa32a4974bafe0cf96c36bc73b210fe99f2719c595077ea0c0d1f0cd88"}]},{"mode":3,"kem_id":33,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"492a05907c9333451345b9e3e9e6e773c3abc580669d95cc420f4d0b41b96b7dcfa73218c35971095c5dff55e3c5c050a8befa23eae54c63","seedS":"de7e57886f023a5f139fecbee0028c575e69c381ed766e708554bd1caa3867fcf6c799d3daa575299352107822de4623e026a2050bd9b229","seedE":"0ab4328bdc77d0c7de08f752bf5e7b93aff5f5f01b151297b2f489721e0e9ff62cc0fbb2af32c1f94615751c0dcfa3c5d4feca8fbee5e5f4","skRm":"e8e9dc198f259e6c902eaac03efabeca7c3b1ec48aca1730f59c1ab79f1ded8edd530911fd5514b3bc68c049d6010b15bdc684f4ea9214a5","skSm":"d8b46cd2ea92de565e620093843b4da23f77b6989d99995caf0b1d8940af7c59a8ffc0670b3e48dfd45bdca0fc718485304b6237d1c53935","skEm":"3db80feb1d68cac9ec2b4d51aef14bbc60cb6ab35fb5098ef27f82bb77a4893636a0d835477ca9c1c50789f7711ce5860f7c4f9c0bc850ed","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"02e85703d4aa1bd51fe239c1d199e902ff0f2cef5a07a9457e352fdcaf2c8fa326d01950a3bfe465c3d5a96a735898d6a2223a1108399255","pkSm":"988dcd43a6a9e97bd642fcc604f9d7a13f1e579eced688b7cdc46b4dba3b436a097279c925cf48c0d5f3a360eebef655542576e661163a3e","pkEm":"49f736fa1851d53335a14666898adbfe37f69a9a82673271d5212c6d1186d4ea2d025936319223626a72169279456a847b2ca31ed7985ad4","enc":"49f736fa1851d53335a14666898adbfe37f69a9a82673271d5212c6d1186d4ea2d025936319223626a72169279456a847b2ca31ed7985ad4","shared_secret":"514222683da8588d53b89b526c1ed5b05bf35f8f8d073499b951c67fab37d2ffb93d2b3b0443fdc96c96b419f78d9254c02b899e16dcf7cf79e3e5e7f068d21e","key_schedule_context":"03cc21a52de94b0a329e224dd508f16ef2a0ea4d49a6dad47e45c9657e7309d5f5e8673b72bf8a440dc517e88f4bb22b990cb594b65cc33814be7ba4f6167492d262adcc0c79cd0b968b815a83011ebe5c6f02404c89dcb6dd6b980095a163c99f19eb76bdd4e21cee08a19a1c50b98380ce01640ee02953f6789aaaa0ad2c45af","secret":"484a8424d063dbf353979bab4bd642b5e4488b4aa2fc7482463ce32f75f1e7b827d3865850faa66572ce8fc43e75c806c5d491f8f5f785f1b438a551a6ecafac","key":"573a464751df979ff0075f357139672f","nonce":"89861896be87d3c09120026a","exporter_secret":"34a4e7b423f79694000c18d93780c4bd5060a3c2997fc27c71c4709ff9802269c58a8790cad5a5d140cb8ae4c6b10fecdea82fdae147811d4e9411a44b0b8423","encryptions":[{"aad":"436f756e742d30","ciphertext":"cd9e3aa1d093b4e0d21ebf098d8db95f32a414a870479b50d2c906a07ba1863182493a651cfa95eda655245d2c","nonce":"89861896be87d3c09120026a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"23cea2fec3adc34073546237cb16ba573de1600355f86f56a7a94365cec14716961e4e2e2085427db145bc5e17","nonce":"89861896be87d3c09120026b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"4ff3846cea6e14410f7497af988734f403c2abe3996df2b4360ec66051bc3ad4c9f198f7a0b145569f91f312ef","nonce":"89861896be87d3c091200268","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"1fab75193fcf2bc77ed03bd0fa3a0ac8db9a54a12fd26c7d87e2cf218c505429d60efb6c9f5de4bf291c3639f5","nonce":"89861896be87d3c091200269","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"6858b4624dc6f7cfebbbfdb91898a269a5a173cc2a849024ab9a81e598f28adc958b0867df6d54605b3cc29544","nonce":"89861896be87d3c09120026e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"50220690603568358a58ad6102b1a4f13b1b62ba53622b1293aef183d2ed6ded13a826216a28a4c21718decd81","nonce":"89861896be87d3c09120026f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"0e22702fcea9c7fc450811be23f90e0f884bc49c60bc04eb3953ec8ac59ab80d777126581b48ce870a304e0344","nonce":"89861896be87d3c09120026c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"5dea91cf3c6d5ba0e4ebd4c6ae5b89085fdb33c6fc30e1016f7adb00eab466996a21c294a194ea32e5c04b23d4","nonce":"89861896be87d3c09120026d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"1fbf1cffa7abacd1dbdb081ea942a5d47773910b8f30fac45638597ba72ebf9087099c95776fdea429ea9835c5","nonce":"89861896be87d3c091200262","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"12ae8e5e3a4b09fb78b22449fe457d186216456e2c32bf546bbdfd6dd82cfb1204207320542903b56510219ca0","nonce":"89861896be87d3c091200263","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"20796a9fb6d464a8ebfe5a64ef97c3e57935585fb8628095c5665af9a22246d0"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"10df6aed035d8adb65e65f8d534e853ade16d762b2ecf972cb70d6a5f550f83a"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"ffc793d331e22990ede4a0a024f4ef0132c6537328c5c376f8f77cd2bd9ac27f"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"7ed3fa7a37c5466f72e6ede994d21c6316d8f5db977854b9d22efcd742895746"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"bf215205266401791f172c334694f007fac348585824dc6527d2c9aa3e8d3e89"}]},{"mode":0,"kem_id":33,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"0f19220f2681231e23a309f507b041ec8540b3918e5dfad94fe9ed0109435e65973ad68a8ab8d58c6d42526999620c8d2aff76ffb376aa91","seedE":"6050076722962753ef9a009821c53276d2f4a18017b8bb92785e026d8168f37e9fe0b18942928fb7eb117a08469ce121490e0e6fc833388d","skRm":"3107a207cc726b228abd268d828aa306af1e92f009792df8107d98009ae6613aea3561ddbce8666ada8f74e278389202949df00540cb8fb1","skEm":"f3830255dd9798b8605691e0829bb4d81590cada8549e78f1a3324a88acd731733a1c5f242b3c7226533207c8fdea9e585d0d5640140452e","pkRm":"33f79f1e42558f1fd0864cbe376fb245bdca880fb3d97421855c4292b4bb745271e4cd3825bd050ce0797785f0f72cd40a479a5123ecc11c","pkEm":"98c2c211cde375f23bef4106b3ae9cd68d2c05041951c65160e7cad40ce653573620a4b555595f552ad28a9acf41863696bf8c690390d670","enc":"98c2c211cde375f23bef4106b3ae9cd68d2c05041951c65160e7cad40ce653573620a4b555595f552ad28a9acf41863696bf8c690390d670","shared_secret":"b041b9db313b0f6a884a0e8bcbc7122035f97c96c896f4030a4ed64bb78479ed6ff44074f311e78c548b65cf3c49402a14d5f5e5bc65bc962c6af82561d01ca3","key_schedule_context":"005d51d75e5b6f166cd8b3f200bb9646620b4b45c205483628fd330118ab8b530410a42988985d900acb2d52b068b37da9a4fc1c1bdb2952941a95db6be723e5c362adcc0c79cd0b968b815a83011ebe5c6f02404c89dcb6dd6b980095a163c99f19eb76bdd4e21cee08a19a1c50b98380ce01640ee02953f6789aaaa0ad2c45af","secret":"ac15e386cb4c1603f8baa59eeaac90d9a6478f47140c686d0e6b1d33b8adb8ce53552fb98827021fadc0c119a63c451cf1c159c0b094444a291f20c9a911d95f","key":"73742d76103f4c9cff35fca35e7b5add","nonce":"5d052acda60c2d966bb034a1","exporter_secret":"cba72cf36c19b940db9bd01454eae911afb566b5c474ff8b58450e0270bcad10f945feb420b527561fedf7f6de6ec99d8ba7aeeb068db011ac738c53f56f0f77","encryptions":[{"aad":"436f756e742d30","ciphertext":"cd601f53e81152295b84c531f919fc79096b8f5c62d15cec196e856078f70c24057db0007172a593d0b199b012","nonce":"5d052acda60c2d966bb034a1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"51aff83472028d64a11ab0339dd92e134b28d0e8d16e3c9771630e95b8acc55dc1fbbf4b9a6c4fb288d665207c","nonce":"5d052acda60c2d966bb034a0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"6c3e9651739351ccd6d1adacd2643c522d8d1157ad8b5b36069259f544572a120f4f3e912c7e88af540e9c3104","nonce":"5d052acda60c2d966bb034a3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"081174e7f23850c0973d0d9054b3c9a6fca9cabecb37c3b54950d187a2cbdf77b97dd786764edb648f74a26b20","nonce":"5d052acda60c2d966bb034a2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"15866799bdacd4184143e06c6d7a7991f4a45b7166371e6ae7d8ce447a1d937b2d11cc60e1b5efadeb03a0b317","nonce":"5d052acda60c2d966bb034a5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"b9ef89bb296d82ef65f46ac3c3d0370309867e9bf6723d09da784fdf9120c24fd030d0bf0f6f32436fcb8fa29a","nonce":"5d052acda60c2d966bb034a4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"9dc10c4ca633265356564144953ad81af098d11bf68ec9ca0918248e2708a2f609b6e79a4451a4d074d4188e9c","nonce":"5d052acda60c2d966bb034a7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"e97a7258a5cc6f9f3d8edd226b9908a6c20e6542347e08c88bc7e098d57a6787b88831d52ac0da51932d3c2ad4","nonce":"5d052acda60c2d966bb034a6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"6051d9ad419653b97c9d1d9c9bfc7c4e07a230605af5e9919888e3b62e314a6a262aebc42f55e594902594d952","nonce":"5d052acda60c2d966bb034a9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"bfc202ad0d94bb762326233443c491b19b67042abb1d2631b249e14953c5e4d780fd83cb9e0aaef8f73cb0aeb2","nonce":"5d052acda60c2d966bb034a8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"59ea4af8da44808957f8f87ddee9277bd336a9540e6640176f45ba4019c96ce5"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"5169ce1517ab3638ebf4e546c9f085f291ae1502e1df58915956b7bfcc896e53"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"ff223c7c1731f0ee8800f767f5ad827fe8fa6e70d196dfe034821982e9265073"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"19f7b26824686d8bebb1c58a671f4b6ceed9bcb8289b056547ca52689045b65f"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"653953c2761895008cc617c346ea40ada7c1d46bd58d00a4e768d0400998e9d6"}]},{"mode":1,"kem_id":33,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"4a8ca6773ce624674cf4712be6532be268c1aa9e5a0d1d7674351cb0031353968cbf00d2af942593d25c45aa07aa64ae0000000000000000","seedE":"1015a5c84bf856f48f91dff4e02b203a4945a36d983868f4c6aa873c77be282e3171b1c7b5524436907ab4271d856cb435415cd0725ddc75","skRm":"df6dc8364055e453dabb1a410ca8184df78a909be951613b1935f42b01e79ce5fb58b29dd307a2673b463e8e3c60380c33c3f657cf36a7d7","skEm":"0f2bba5c2c9af90403847a72b107c33a156214d1321ea23057bddb2e98cf117df878db8c475d08e286cf647121b746782c4b9f2e56ddfc18","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"eb2de413057cfa13d57cbba12f20b3261b7e12c564c1e116d570ee8f7476fa1f00b327ad3194e9f6c19532a188f77bffbe6528f596d7cb8f","pkEm":"32f0064fbf6bfbe5e7be112f3dc38e61c7e6193bda7e727b229b96e2cb5f76552c0545b1f689fbdbfb35d031ceb44178ebcd403c1f2ed20a","enc":"32f0064fbf6bfbe5e7be112f3dc38e61c7e6193bda7e727b229b96e2cb5f76552c0545b1f689fbdbfb35d031ceb44178ebcd403c1f2ed20a","shared_secret":"bb5a259338a230fdda5714a910b1081ca6d6bb883091e824c6d54100efafba4da41b8721f8e89cbbeb66b2fa6eab904f4459a1b2040314fa9846a7c98d8eacf9","key_schedule_context":"01cc21a52de94b0a329e224dd508f16ef2a0ea4d49a6dad47e45c9657e7309d5f5e8673b72bf8a440dc517e88f4bb22b990cb594b65cc33814be7ba4f6167492d262adcc0c79cd0b968b815a83011ebe5c6f02404c89dcb6dd6b980095a163c99f19eb76bdd4e21cee08a19a1c50b98380ce01640ee02953f6789aaaa0ad2c45af","secret":"fda0bddae602495d0ec51802f4aa6217c1fe9b8ebd7a1b32e59b3b35881781791132838c9fa2df6f1fe2526507a34fc2605b0154b9f6caad3d3bb3f5dc7a6bf7","key":"bf57cd65eb3cca8c974e880355d6b5ed","nonce":"0efc3be01b60e273719ff2b1","exporter_secret":"01636a5329db27f65be6fd0f59d97f847df3695f443d2cb8e38487ca2990b2353cde2cf29d871c510406130c8f3e2460482499c7361d5ef030cc8ab7e6631b3b","encryptions":[{"aad":"436f756e742d30","ciphertext":"855ee4684cb2b7dffccf3f739fe7497148a480aa28e8202dc12dedd0a4f7514a1541674a3416698a7000417c8f","nonce":"0efc3be01b60e273719ff2b1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"941ad4b75b2abe687e7680bc595146d9f7bb8f72e465ce4a1dad2eb6236cf9ba3ed3f4fa4981f72235db459058","nonce":"0efc3be01b60e273719ff2b0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"3067a38a01188974b337b11c35908ddea240614d922e493f9a8b6690a36ceae4cbc6022575795ce5f6386da423","nonce":"0efc3be01b60e273719ff2b3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"62fa57456b95553a8902872930242368267df2325286b47f9f5046c6ca7068d421171a8446e13463f0f0a1ec9e","nonce":"0efc3be01b60e273719ff2b2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"de5a69c74c2a238addc0aa9c734c03d734ab89f8591262f5ca8134ca56966b44e4fec3d93661c7b2a0890acc0c","nonce":"0efc3be01b60e273719ff2b5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"0abbeffd9af3ba18a3615cbf9ccc321cc39f0d11b5633bbce45f9ffc32df5c90b6f68fb5764e3bd032c08b867f","nonce":"0efc3be01b60e273719ff2b4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"22aafa65c0b72c55987c5b812dfab96e7cc8cf4fb2b9f39a97128e97325fe5f6fff0f64391f7afe99e6ee54f8c","nonce":"0efc3be01b60e273719ff2b7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"128f0715b460dd2787898d9b33bc232fbc30b3be16605b20d4d09743c54126accc1a174bf2f0023bed6685efbf","nonce":"0efc3be01b60e273719ff2b6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"4e488d6061b249462696d49f7826a5fec9cafc49513c64e475e7c9efb4db09a20957406459b3522a4dfddbffff","nonce":"0efc3be01b60e273719ff2b9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"77c49ec9f77241259d71fa267f7663ff17d0484f735ebfa80ef105f477a439a559e7e9ef32a92ec85acb0007d1","nonce":"0efc3be01b60e273719ff2b8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"b205534f9bd4059548486b148dfbe4257dadacec5cf2342e131140ad6286cb19"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"bd3b8c3e47a88b1feb0053e79bb4b52b47f43d012699b827e67b18f359c6ca78"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"707114c83b15324de470377831a43982209abfe093bbfc30fa86b39903e45145"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"f27707e284da281348b2b0cfb2fdc5b67655241d9742252bb3c27f604d2bd49a"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"82abcd8bd86392fa791c39b75f9da1ff8aa91f2b8c1bc8bcfbb01db30c92c456"}]},{"mode":0,"kem_id":33,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"12684735fb94654b1a127bc48ab4eabdf12eeab245af66a9f5e3cb79f30ce17dc477ade44170ad0f80c7b02a01473cb0ec928594d55b0295","seedE":"468563e1ebe7d0b8aa04a3c863a842428607ef45dd7a2b95425ec918dcd5c1012c9614523317e4f311ff0963fba4dac4ecf353e38291934f","skRm":"f8089f023bf6b0202cfd015d1ddb699bb5da08391f2fc5f349c0a32751650b173650e948d46464a1fd2e7be3716a2d64b815a67a250a5b4f","skEm":"ea774d71891fec036f2190ba255ab20224b0a88f8c129a1bb7c1d5097aaa6d8044b1b6ad89bf988fc5b8e089ab0688c12a14297f5ca4f3c1","pkRm":"5f8c4c3f3c94a51d098968a1eb9ed8b54419dc5e8143e3cd49e6f2101fb71f48b563d312d4356366a9d5bb0e80555da3aa31fb30e5c503b9","pkEm":"f64be0dbe9f5bcc5a3e9bdc34eaf7873f4163f98db5d00ce913af789013e82242b22854f66854ffb625f2c8ed02ddd46a04c7d3b48613f93","enc":"f64be0dbe9f5bcc5a3e9bdc34eaf7873f4163f98db5d00ce913af789013e82242b22854f66854ffb625f2c8ed02ddd46a04c7d3b48613f93","shared_secret":"6273e5d79d9c2d8db9e5dea73878a19991e7dadfffc37e4197a2bb985e58c76527e70e143cfefd57711599da2108c438a13ccfbed45c7cfb3c6ee6286d1a9708","key_schedule_context":"00a4a6828e50394582b8d4f101de1c624fecf9153b9e803944a8c22d8bf985a46840a56d0a67554a9ab9b5979a752796ba11b915ca3af1e418798f7eaa752d03eb4b04213a6327751ae97ddc9638f81e97f5aff8055b24257c74a7f446115b2be1496a2850f949347aeeda33a7c46057fa7a4733274acec5d1d58936a13838b421","secret":"9194dcb174a36a359eb17dde349a5e3e41a5595649decd9244e9b91064c8de29368636cddfedd51001e66c7ee7dc342f755757efca041e4336177b9b3b27c437","key":"c314fd0f6be845d33338d0c3df6a71a1163558082e44176ca0469a055cbfb15b","nonce":"e3c2ba06dec7c1f8a046c2c6","exporter_secret":"293c7402516c261de2a32d0d81facd1410a042999a9b3ef14134e130fffb59e6f539674fdde330d5f24e9c24d14fd5b8944040f04886c222e9e0f5c604f2a8a3","encryptions":[{"aad":"436f756e742d30","ciphertext":"e40cb667cd288fcd5aae7e691e35202d2f2d7a4e5a048c9e237cf1dbd5970893559e8e0fb08523f00d1720d908","nonce":"e3c2ba06dec7c1f8a046c2c6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"30defbd6bc8ec2ab827a2e7d05148cf0a5941cbbe4a925b92323d7df0a811e37296c780107d5ab003ac36df5cb","nonce":"e3c2ba06dec7c1f8a046c2c7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"d14121acabce4245081cc291e35d5f2fbd19736bbef7a4141434a3e18b0ff83b8968005571e0462a64045b22b3","nonce":"e3c2ba06dec7c1f8a046c2c4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"79da6a00596d80153ebc1fac08a15a5874b361573ed0c2a281b72b5f93f41b31ddb5824e7efa9948b21a399d70","nonce":"e3c2ba06dec7c1f8a046c2c5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"1ecad5b3d780ef9f6be90de9cc8681b1a4ae24506e170f91d729cfa052776e2a2a82bb13873b45109e90226a2d","nonce":"e3c2ba06dec7c1f8a046c2c2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"ee4fffc5e0ca32f39e7202963e3a88e1db57f909bf95dffe2436304651cfb3eca51cc7ff99cbe47662a5b9ae65","nonce":"e3c2ba06dec7c1f8a046c2c3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"54aaf7bf3dab9b4b328ad01b9aec483ce0c9337b1bd139c1e552ddbe470e12eb4514d7f087f16d0effd0cb30f1","nonce":"e3c2ba06dec7c1f8a046c2c0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"7cceb10b88655bf5b81d6d61e958a3c509df7ed80686e9ee33f83a13cc671d69ad443479881d0c6e88fefbc94e","nonce":"e3c2ba06dec7c1f8a046c2c1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"85b828bf7c58840a8a09e4f955ff100b5da4e65b1dcdc0a42bc34e4bec0886675822242cd8aaa99a06024f6e61","nonce":"e3c2ba06dec7c1f8a046c2ce","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"52242e3cb91abe500ff7a4c67d1e01b3cb066bcf9d77304d68f9b29de8c0d11d842d48d07046ed67dbcc07fe14","nonce":"e3c2ba06dec7c1f8a046c2cf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"d08f6cf70fd5d380d21ca0f8ccfafbdf20a6b1a45e4f145673e2e50f16c53c7b"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"35a21a53733a0f7211d032cc9cf0763612898ef2acbc63694bfd5fe61e5e564b"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"76317113f198add5398b74b5ceeb44ef955954d8d6021a6f61c1fba30bc49f70"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"110899af64167e3f643e0911884f1841e0c52d3607ce9248c6c161f85c6bcb7b"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"5477ab51f582b7fe4574a3eb0e84c7c5f18ccc083720ec2db4b434601fdda5bf"}]},{"mode":1,"kem_id":33,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"e6423d7eac45b0ff9d5b642fc6d375f2960615175b4003d5335a242220da8ac58c1aec1d7e035fbea45c4f4b62b75de829b933c3039c7f50","seedE":"5b68c114f92f0d348b460c51f09e9e3e2983ac98e9194e2c6f15e44a6499cbf6a7600a73207c2629e5c8c376ec24b20bf82b4ade27c8e7ff","skRm":"6a47dcea0154d00c0c7a98a97e2dc614443d9436ae30e2c040e40a33b4d0e32c9d3fcc5c0e9484f5601c2d40ef51764b0d833f1232f69e8d","skEm":"58e42a04bbc17488211a7a089e14e89902852854285aec11000ec7ad805914afd695ebd9f3c567fda44e708f5a8f03a97b0147866338411e","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"c79d510841e470963352fe59e1130c59f9e6e3f2b8f65e3a82c1de892de33e61aa4d166086b8537f8daf742d562ca4d7423eef337310e0d4","pkEm":"9a35a39551c90549a40a3a652e642c62d51a96f65984cf7b036ceb791ac5c72076f4c997b7ff743a1b808cd55e02d5cafedd7a9328f8d740","enc":"9a35a39551c90549a40a3a652e642c62d51a96f65984cf7b036ceb791ac5c72076f4c997b7ff743a1b808cd55e02d5cafedd7a9328f8d740","shared_secret":"f879bf0832d7bc61a6d57c65b5684d2a754bc08852b48418e08fbcccd7b8d17028ee36fd8345b37c6fda187ed99fd9e1d10b627f7ac821d542170353ae139875","key_schedule_context":"01270eb32f1aa6bd1804e98fae038c96f1258a5efb64dd856e466a1b25bbc4f54c49e8fa12042bc8895415e773fb0f8e81714a217deaa194f326b96175fe8834ed4b04213a6327751ae97ddc9638f81e97f5aff8055b24257c74a7f446115b2be1496a2850f949347aeeda33a7c46057fa7a4733274acec5d1d58936a13838b421","secret":"e14d1170aa4c1af756abe9504c4f121457eddcca0f1f79b0173a686f5a22c95b8da9001efd88b7abcbde5057cbcc79c277befc112bc8c25aa77ef82e8aa06035","key":"01835374fe4557e0ec736c9da908ea06fef00c47f091a6c633fff452b3c95962","nonce":"e602e0148b819201540968e8","exporter_secret":"d4b6822ed504736cac26bab8d01887ad4b59c19cecdd7bdf7c0812062d4fb9427e9685c15bf9ad4bc051b1f8dd93ded54b731750c5aacf27dc7473dc9d15f9a8","encryptions":[{"aad":"436f756e742d30","ciphertext":"dca3e94e1d99849d88898109fddba983103106760f3ca3636ec44bfd0d175bede4b746f300602bf62561e27097","nonce":"e602e0148b819201540968e8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"798e33f6c48ac7736fe36fad6643d3356b6a4cb589de0e891ffe4461a32816ce6b2a68c4fa8a9c0c9655249d15","nonce":"e602e0148b819201540968e9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"0c81b5a98f18645954d8cc3f1faa898185c9b7a64f177273ee0b425433d368109b2dcfb1dac2640a40d2fa548b","nonce":"e602e0148b819201540968ea","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"1186422dbe4feebe1d445cfc819dc0d5495e541b754de94d79ee67a0d8754f5947ef251f3e97a3dcd76d28fa15","nonce":"e602e0148b819201540968eb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"e4664d96e7cb00030751b0f81a86f2f718f0f6d344148c589cd817d629ebd98d2b03d0880b70a2f2ba8de2fa36","nonce":"e602e0148b819201540968ec","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"607009cd53eb8e9645f8561d83e37825ec20429c06774aa195442b61fba3dc5c6b8c196337f4678f138726a507","nonce":"e602e0148b819201540968ed","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"c1fe6a5a5baf20a0268feb0fae4b92386811527b1a1ed7f9e08e6abee27c4502ffdcd188cdd310aa7c5b14db35","nonce":"e602e0148b819201540968ee","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"04601c093ee9ab4ab1e14bb053e13bd02eba7a47cfee60b8ea4de340dca576e642a6f8378e2cb812af4709cdc8","nonce":"e602e0148b819201540968ef","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"0782ae574a218da34ef2f73b1f4c8b0016177fbd037428948b2a299f0b1f8e6170cae28992c9fb6a0ff9f8d8ea","nonce":"e602e0148b819201540968e0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"6e0a4153994bf4ce2ffb2ded505983863177574c17c1f3c7753c17fdd37cc2fc5d2db35af0a741ec6537085db4","nonce":"e602e0148b819201540968e1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"dd1a7a522c85da3784758f1fefed178f831e057d8c71586f227324718a72a2b7"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"09d63098fefd60d4604ca7b12887154f3bc2d558c95067cdc324cd333f147632"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"29cc8fc16975032aa13449a4ac5fba39f3ec55c7fd1c9243e21896447671818a"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"fc50e4bfc4ad2d78082ff8f2e85fae782f990619076d1abbcfdf45c542c2a078"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"77e8d0dbc5cd8193a85b5efb9ff8c926addc0adf2e4f94032deeb0cc0132134c"}]},{"mode":2,"kem_id":33,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"3d6e5522102615c277d119e8f277fcdbc9eda0c65927024607efc190b9d378408a456b65854717c86f0588407ecc5e1ce57db4dfa2480c79","seedS":"1c07a040301aabd3100ca6e094d14093c8d4bfd774d35aa201c84187418f64d4e48196bdcf8aca8f56f7cbbac75b3ccb5e6f53c230a70617","seedE":"ba747512572a5e1d5845b9342fc017663b0073d915bb2f4a3d532534229fcb8d61b79648f177456b2bb86483457b7a61c924cb5891f23bb7","skRm":"de386be1f5cbe675fe0aae18e640d49a6e33202c8ffcc3a04fcb221f9bb177c50c3fb4dbbe6555e6c472802b524bfc23e658089ec4e6e0e6","skSm":"8bf6c596f2eefd49c0cb357ab1d6665db85024a2ed150d8eba2bf3325c40bde35eb60cf70e417e74713c8f625cf1cf3910c837f39ee7996c","skEm":"52e4929709ab17982ab2a6a3e19ca2973c2f6c477e6361fa5aee85e8adf89bf4b7bad702566c4dfa9a988d3280a0d5469a8b6e5c475b13bb","pkRm":"5e719bd817d0e738b2b39b2e9a00cbb7b4e5b7befacfc286094d98a51944e9ff725006ec53fafbedf51a1158574912aff07a6c1013191ba6","pkSm":"db571cc1df7df6ef0534d6d607aabf32b3e68854aa6c6b246e7157b47719c314c0526d201aa9d6310f9519d0384e9fb6c46760100e5b2401","pkEm":"8817c337f6efd5aa756ea38f4b8c139812b0e719c6ac38157604fc04cb5d7552a57b760d1ff9760da6353cd4924c83306160fc39fca48ad5","enc":"8817c337f6efd5aa756ea38f4b8c139812b0e719c6ac38157604fc04cb5d7552a57b760d1ff9760da6353cd4924c83306160fc39fca48ad5","shared_secret":"121daf7d9e070adf4a5c5e64280585de0c6549f63e4a5f69fc8807e155ca8efa068b9d2e9a5eac517316487953a45077b6d5b74a223ca11f1730c73d2ee608c7","key_schedule_context":"02a4a6828e50394582b8d4f101de1c624fecf9153b9e803944a8c22d8bf985a46840a56d0a67554a9ab9b5979a752796ba11b915ca3af1e418798f7eaa752d03eb4b04213a6327751ae97ddc9638f81e97f5aff8055b24257c74a7f446115b2be1496a2850f949347aeeda33a7c46057fa7a4733274acec5d1d58936a13838b421","secret":"78abdd3a983347d4e16f7f17ae2d1e003c5068d6dde35074f325f28fb59d40066222e56e01b78970bfdcbf40afe7e970551bb52e496b5126ab43e32467d77f2a","key":"b4935f834fcd9de1e5c6710aabbf51340666d3d6247245a01f18214f24c0faf5","nonce":"054faf900de9fab0ae1ed01d","exporter_secret":"a0c5c7f46788f14d2871c35b4df7aa06aeec855a4fc610c8b165dbd6eb070da21cd4202f6ff37996f14bf3212df9007ec8f1b11c0698d9efc2e2e40d811a7b6e","encryptions":[{"aad":"436f756e742d30","ciphertext":"a488bb71bc42e68bbb9030fc2719f4e7e3148d126e3bb8471125e6562e775db5ea8517167e4b22f5998ce13a3f","nonce":"054faf900de9fab0ae1ed01d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"fc861667fff4be393123eb8f69fca1fa7002b0dc69ead7a7ca364553febea34ae2382ae48541570de8b98d1b86","nonce":"054faf900de9fab0ae1ed01c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"34a91e7eb386aa9fdc4ba14e8db2345ae38d6a3dcf4a673242adcb244abe368e8a95639945b913835a0baa82b5","nonce":"054faf900de9fab0ae1ed01f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"2a46ba4636614007a305049f34ddd53987ea15e3ed09258d0dbc63fba4a701d33b1488b7b96c581015a7de3e33","nonce":"054faf900de9fab0ae1ed01e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"7bb313f3995ba7dc3d7f70cbf351d67827b3f7fdeee745f79507c05364ad12e743f69d5c51a8cb8796d515f95b","nonce":"054faf900de9fab0ae1ed019","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"715064eef3e4629a8ed104b5521db7aa202d1b307f67bf825258d30a25e318ff5b0062a19da0182f662fda5c2e","nonce":"054faf900de9fab0ae1ed018","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"b0719c97014b1a904762a5ffacf0683e4bbba0b974364c0e170849b4860ec2357a8b2fdc928fd6c86538cd6c4b","nonce":"054faf900de9fab0ae1ed01b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"b0a9926e6fbff811ee2bf10c35a8f18b94662f04db78b503ea2c9927c998cc697a9c90667032d177eaa117e05b","nonce":"054faf900de9fab0ae1ed01a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"b124d983b1aa4cac12c6274f3b064f4870e07d4093e32eb359d764cd7117fa8a831435ad424f23c4bf4f05ba9f","nonce":"054faf900de9fab0ae1ed015","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"381f9c08fbb3c9bacd73eb87da10b3661a796d32e1d4ea0bc864c8c55768e504a01e42f90367cc0b2c695bfed4","nonce":"054faf900de9fab0ae1ed014","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"1c44aebcd90ad6e2d7a36b08799c9d17fde40f3bc66bd8fa82ed2fc2069ed194"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"1089cf50f4536b1a9d1171c94708d27750c5a5200a760fefc9c38fe0945c04c3"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"9c2ca49214fc81c108eba6fc10dff3e02c4be39198b8166b80aef4382ca2a92a"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"09bafdbb2b6cf1b939be3c0bef720fadaec2b32ca4b89eabf1fa50ae7f53f519"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"d6f527d5bfe0c909cd1ad035f0d570d04681e509d4ee8c17f4e87fc5b4821bde"}]},{"mode":3,"kem_id":33,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"13521f68c6286bf84a882b8790b8e7ecd6fa0c743ff56e2e4ca3c8a9d3f41c921cf171073e03298aa29a5638658623564e783d639d332a92","seedS":"572aad7eb2ca9a1e1dcf6d84660882039087ffe89afd7db3504046b5ced7aedfcb6af7a6d3e6fe06147d75de82e518206745769436e1d31d","seedE":"12d0d37bb6c7a6edb44ca68fd62d9e44c00ab8c93c864fd7b2e8dac02a92f4ad17676d7ccd8ce42e1533916a63553b49d379c6b02d846578","skRm":"c10ba658ebf82cdc09c5f136cefe90f36eba7d96aa27f921f27dd36c1ed069263a70bb5e376702ba0842058842524267ced12a824fd3bbb1","skSm":"287d7fd3638cb7b0437e9981275d8fda6b51c2a46494997c44d466765e214c43d7eebe4c4c7bb318728ebacebd8afdc5c8d3147ab3389de7","skEm":"0954948e3ae5eaa8f18f888a4266b491c92db0ba4316e6d0c4436f6454440334402e45e1f8d61fef2292e18c49e80c88cf30316858b36cd9","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"35e190fb6f4cfcc75aa14fde61fa9b7896e83cc12efa86b90b8887f6138c72ee65a33b40918128324f103d5415980f440bba03f43c80431c","pkSm":"6d5903f60c73f0e840aa9c9e22bca71d179808297026e79057f15b297a7585cb395ab143a8942b69c2146c5c5c7c2963537cc82a604c1330","pkEm":"d8e656d733e728843310d95d4bff073d6ce4f15b208ecb21efaa8dc240a82043917ed010f1a8ed67d9c9d5fa66f08e0a80fd2b010b51d820","enc":"d8e656d733e728843310d95d4bff073d6ce4f15b208ecb21efaa8dc240a82043917ed010f1a8ed67d9c9d5fa66f08e0a80fd2b010b51d820","shared_secret":"728bbee83b6b180ce8d69a929060f725933d813fb2e6f132fe3f2215fbf522f72515f4a0226b91bcae7247070888368ec618a8d2674073c85744cd6ef5111dd0","key_schedule_context":"03270eb32f1aa6bd1804e98fae038c96f1258a5efb64dd856e466a1b25bbc4f54c49e8fa12042bc8895415e773fb0f8e81714a217deaa194f326b96175fe8834ed4b04213a6327751ae97ddc9638f81e97f5aff8055b24257c74a7f446115b2be1496a2850f949347aeeda33a7c46057fa7a4733274acec5d1d58936a13838b421","secret":"3a375117f246b53e052f84b35e843d32d415e5f8d3dbf3e5852ee75b323a33039ab7a983d8616cce9faa2496e557b2283f355533028f4d1d598d89299505fd97","key":"97e6608603090e1f010431046c5c590a5399c3bd94c5828c5685ff209b1b60d5","nonce":"564ae5511cee1c8bcce5d9f3","exporter_secret":"0d48d3bac9f44ee42652ed61c1529e2f74b2d020c9c5614df7d679a66c55115b34f9c2342ef7f6949b98650d05d2d4e0396242847f743dd856a1ab06ba772c83","encryptions":[{"aad":"436f756e742d30","ciphertext":"80f748d2853581eee2315e1eead8d58066a320508a793b280ded362320de3ce84d9e1b317a34a47dacfde861aa","nonce":"564ae5511cee1c8bcce5d9f3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"2a07e06f7b0a3261e43bb0733519efc33fc933d83cd2d6b2734a5dbf87b940c6dd6c9bbbf1d28b67627f690ba3","nonce":"564ae5511cee1c8bcce5d9f2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"108fafb8fbc11257c2ab8edfae59a1f4ebaf9f5ac6e5abf62da3f595aee74cd3005f6885912aaf2f0938b4126b","nonce":"564ae5511cee1c8bcce5d9f1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"c8d08fda05476ff33db9877ff28d801543f27d4659112bbc18d3427faf5755415c686a9e58e9e9a97227b13f4e","nonce":"564ae5511cee1c8bcce5d9f0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"086fbcadc8c2976af4aa658049531700ea4db41ffeec2ce46ff6d7bebcf17c2d85f938ffb2130c1a0e5c1b0675","nonce":"564ae5511cee1c8bcce5d9f7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"30026c91c563736fee502d2af52721ca5e60deb4c7998ecb7b9e395e1b0da39bb43fa4c15b066c69bbd5b606f2","nonce":"564ae5511cee1c8bcce5d9f6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"cecc563b2b4a759843a4a3dbf64e4b542ba42e69a1865af19aeb58c18854092149806ebc0d3060c89ff901e0e2","nonce":"564ae5511cee1c8bcce5d9f5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"3fc8f433f307c3a141387700a48d9c775d491797ef9ed875340fc2b4a07b9c3c7973c6ef3cdd3a06254a59878a","nonce":"564ae5511cee1c8bcce5d9f4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"a26dcf88f35d3af1b87e4b136776e356ec1a760b78adb5d475c322e615247fe6e9c29f27bb4f0e35a7c58598ed","nonce":"564ae5511cee1c8bcce5d9fb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"f82f662c006635b2112b69207e940a97960231c0fbed3a63c7fabac8785940f215cf8e4239491be4b146e3bf0c","nonce":"564ae5511cee1c8bcce5d9fa","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"d1988a3f35413f8601aaa8d47a11d8212d9de4c5012686f6b9fe07babcd8b2c9"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"d6a3752296fc2780725258877b92830b9565662507429484bb6732bcfe51f527"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"5f61437060f9f4d682622b1cd29084982109f1a3fe01261c281b4f0950acfbf3"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e2d855fd656828026e74cb858f29b07f8d4517a58a1e577a20cd8224080c6bfa"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"5bc6449b879f245814cf4e986cd6ddc70000c088e22dfdff1190567456361bde"}]},{"mode":1,"kem_id":33,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"203771c4e993533769a70d4b7f96140b423511fed0b9271d8f5c383fe0599c6c336181e51013dc72c5f2b7f7cb1c08167ddce6d739bb0f13","seedE":"a5d567fed542bae28f570c11f3fb20136d01a9ee4342ae081333696802968d13d5d5b2aaddea3b9a94ce91db7e1e80cb339b66eb9f632c96","skRm":"6302eedad39332878954936954a0967a6c8bdd96d90f1500aa29412e931f25499c6296c57ee1170c1dca6a06c064f0ef1b1e6ad42048db42","skEm":"ded888ef2b32a9ecf5b45d9d930eda1329e2de4e030f8cccff65337633b7a35885c37a7800ba5612507c06dac99d4a6a6dc0c99f9a5a0920","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"f2ec6213a3afb83c484a9cac28f4672b8e4e3aec99cb6b6653440445d47fb69252a0d18cf2ec8227ab20e2f96dc204de9203a83686bde831","pkEm":"11eed6e0d37b76a827a8a97f5d6e41b4c8cb00afecb0fa642b3e1c18502077deb72791b2bcd987b5fe28d1f7d8cedd0b9501fe72b5fe530e","enc":"11eed6e0d37b76a827a8a97f5d6e41b4c8cb00afecb0fa642b3e1c18502077deb72791b2bcd987b5fe28d1f7d8cedd0b9501fe72b5fe530e","shared_secret":"c2c9dac7864047d1cc0a0e61291af549b087701d4d17151db00ae59bfcef09623ead8cf4ca8a134c40e0c026014b55b13fb530d68628b36f9312f0ea41ed6e10","key_schedule_context":"01a582fa2066caee8eeec8b15e18264048512c071dcc6713d863afe894092c6c8bad26e2f209333569be9ed3562f8ce234815ad8b5491a602fb85fe52189154952328a725dd18e4ad29eae9417de74d3bfc492a53eacf6a587ea8959c3acf9c00167497cee7032b254ee92ec9bb58db92724f35310364ad193e684390be2bdc1b6","secret":"3c3b9b38496a06a8a5cad5ac29a74fae92bc6615de246812813d1525ea6ddce082068044c3c92d77648cb0b2551629d46db74194555cde3ace75180831aa81bc","key":"ac794528ef3eb085de5461ae0a8026b4856c1d8ce5ba008810a80e8f66d2f4cb","nonce":"1ff7899f246f0f9af99e889e","exporter_secret":"b8015dc47656c4aef70c76abdf8b97970908fd7457293db4e74cd346b408b547863cdf9deedd41fea403bd8cec519ee6a81260c7a534c6a4a75307e06932dcf1","encryptions":[{"aad":"436f756e742d30","ciphertext":"cb511f9085f04c83d1e75887f2844afbdd5e3c5cf2acd41e42743d443d980000d492b876c75187b5dc54301707","nonce":"1ff7899f246f0f9af99e889e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"e28b4b7dc96131bfc7d039d969808d6a3412ca55313808fd7c64321e3ca058b788be97f56583b53b9bc9b6f8bb","nonce":"1ff7899f246f0f9af99e889f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"9e6f44703515e462464f8e4395a267431025c3e957a4a07850e1c0eddbe0fcb32c9e56d8ccf5ed25e4f69e7131","nonce":"1ff7899f246f0f9af99e889c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"2753aa6dc408db0a3e8479be15fc8a6958d87486288a6196ec5e1f387e6fb26553c48e311591a11215204b66b6","nonce":"1ff7899f246f0f9af99e889d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"610b9d391c4d0b70ce62e19764915ed7ffcd6f268b39d2742ebe92fd72e5bc230306aba3b1f53331ac1e06a296","nonce":"1ff7899f246f0f9af99e889a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"97107b5188b8e5e442fbdcd2aeafef978908bd62df010fa856ea2e68e35db87927a4556f7e6438179d2f717f71","nonce":"1ff7899f246f0f9af99e889b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"e9538213f043c636e2da48de7ae19ff0a43fc21dac392f0ebeb911c78a12d51e4b5aa0dbd6004179c5bb28d89d","nonce":"1ff7899f246f0f9af99e8898","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"f32041f71470d1afca87718d0c80960a36675bcb9473946c940b24ee4ccf7f07b9595fee06724802bbbd6e39ba","nonce":"1ff7899f246f0f9af99e8899","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"a66303b8c6b3352b0bea9c491deb8552e173e23799e01deba9269f35ab796781fb8f51e97dba9ee737f12f87ea","nonce":"1ff7899f246f0f9af99e8896","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"2477477a7a0994623f69d3e4c4a859e8cbb30b9eee775097a270f8a2cdaa0c49761c770dd2f7f783db7fd4c756","nonce":"1ff7899f246f0f9af99e8897","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"46249b43354819e5cb1a115a1a9f9b1c9130d14ad3a628e2eac71a5e14f2f062"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"0b2dda2ab0a7c37f725f1e6bc54c4a1d9c86e3b5f7a347b9748f17a43aeda76b"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"30cdfd9b8495615090f2e8a40e330e38049698dd263efd6faa894d8ab1a306be"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"051fddfcca20bb7784400301ebdb0a299233000d3f9355f96251d844391fdb1d"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"dbeeb7e9a57691330008bbeb831a53a877f68825dd75288e18c618a9267d6089"}]},{"mode":2,"kem_id":33,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"107a25cf96d1648294ecaddc47b3d9a5877ec1ec9dafbb41ad8ba8644ccb7d777ca99262371d15fd7eaa9c345a1d91fb206dbd66df99ff7f","seedS":"99d1993004b16f164626b4c1f3f25383fd77c2a8304cc7eff86ea6af7885cf7bb49dca399890a87114a45e97620a1e946b4e7daec2743628","seedE":"b46feaf969180be4de42db779c3956ce5e8ac797cb5915ca3a07d7eec5ea45d62b4a38aa8659dda2d9f0eeb550368c8255d7c54bc187eaeb","skRm":"b200be2dd13e2084d53c0c3465f166a85d55b287fccc907229856b90df704232a420af978778f033c9501796e33e68311d9b24d4d042bbb5","skSm":"f82859859fa5d6fab67af06b9a6c24d9f8efd11b8364ceaaa9164038e0154c633813352276036db4f5bf222cb364f9a9c75ea1447ca04e15","skEm":"332491c052cba1a6ad7f54e8105ecdcd325d9f7bafeb380efe022321e7620078622e1caee2de1763d52d083b14cd5697326d87d3cb5c0741","pkRm":"13d56d8381bf424b361bec7f7f5b634cfd7aa79f5b6483bd89b7575e4e06679503e9e115ad3a7b9de365735023286433f6a6177079320266","pkSm":"9633ee1ffbb0104c746e3856f78d87c8a21c5b99c6fdb9137800a7bc4d5ff9916ee4b6bb9eeae59e78a3f88a33c2157869c77d40b4968915","pkEm":"21aa84c3126d4c27ce1a8465ad4b2535501ca44fd79cfe42d9a4673693fe9e5ae3a2d2d894a48fb944a042a2811daba49fd996ff50796cef","enc":"21aa84c3126d4c27ce1a8465ad4b2535501ca44fd79cfe42d9a4673693fe9e5ae3a2d2d894a48fb944a042a2811daba49fd996ff50796cef","shared_secret":"fdc7c9456ea7d9d6ba7021aebeb5fb1225e69779915e878b3079491274cead3a77e7649fa102a729b16f3aa23ababe9bd8ed07ec8752bc538d5fba69c2ff04ad","key_schedule_context":"02949d30f15a3c476eb5e6947de88e3cb3e8b5a45874d4abd686177b5afd9702da927cba7e52411e08576e4788f91c25697bbbc25c333eebb1511e6436d856cd8f328a725dd18e4ad29eae9417de74d3bfc492a53eacf6a587ea8959c3acf9c00167497cee7032b254ee92ec9bb58db92724f35310364ad193e684390be2bdc1b6","secret":"75f63552523fce4479f1dfecf63210b0b1bdc9f9bdabdcea576846130a86394402f87c0744a438149b1ec28a55a05538a2d34582342d1b28d7fa44074d2d3e10","key":"f90372666daa1121c012e830a66cf484e29d8dad58fd130d47e034821960a27f","nonce":"b79a0fd5c77efad080414303","exporter_secret":"60e5a5c31aa42ffd932eeece958296aa9ae144be70d64d1bfc90ead1014fcab4b3cc4b0765cc941ae70331657930581baee277233647c971699abaaa021470eb","encryptions":[{"aad":"436f756e742d30","ciphertext":"c01995470d656ad9a4b4a01ff698e8567c843672b5fa5e47629d47c284129947c0dd6b2090c41b492a40809194","nonce":"b79a0fd5c77efad080414303","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"60e070f64e66aa99b5f5f9dd78422ed9cef1366532097f20e364ba946e39110308986c36067effea399594758b","nonce":"b79a0fd5c77efad080414302","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"b6fdfd206b442f117260e745482f35320512650ccc18a99f5132279900f03c88af9d1d70e54fd7a3d8b948f685","nonce":"b79a0fd5c77efad080414301","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"5fe3e78000c8e168163f1dee902e57c9aac7352137f2f2f9dc3c8ae394a1701df5148acf722d724176dd35607c","nonce":"b79a0fd5c77efad080414300","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"de0a82c62d31be9f068d50d45e30dd0fcef0129b9b25975ddc1b237ba7e9c491491c2e1c1ea95204313fd02a49","nonce":"b79a0fd5c77efad080414307","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"0a15d694b6c0044b97d9e388ef08438362a1db41d54f6b18b4068542e564718937769538c923e6f1260db692fc","nonce":"b79a0fd5c77efad080414306","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"6dc4924aa25126900f22924ab12f1ee0d70a02cc0af8dbe059223ebc23cddc5152073c5412fc4c0434de82aab9","nonce":"b79a0fd5c77efad080414305","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"fed47335231e6ec95660a6da9d613bba81635f88ea15179a6744519efadc55f81faed9e61280120c563b57235b","nonce":"b79a0fd5c77efad080414304","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"19e1b35e3ec9a91604a831e04c431aa37908de5510f061ffa1170addc47682dc28c9abab263ada85aa3fec64f6","nonce":"b79a0fd5c77efad08041430b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"a168ad13e7dd3b6b298b01826d8049676f25fd2a4e8c74856d6494e122c5fb3aa62f7d98296df5b40b9fce8035","nonce":"b79a0fd5c77efad08041430a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"a3850a2dfe8335912be6f5a89591c68f8420211ec1d682a3e9173ad19984809d"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"8dfe369c3da8b6ba2d1073a6bb7e55c7fb3478e6e653240ee39f4b3f388a065c"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"18a5ec9eb90a4d12ab25915b7ab624e492eb19d201062cd10bb5668bf03ca234"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"31f7f1e653a44beae7d14e37fe627d533808077c526eaee32ca3bdfd27007802"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"7b8e97b6cc8657fab07be70a2830ae2c28124a0b9c07c2a654cf0c021e40294e"}]},{"mode":3,"kem_id":33,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"f9efc7a4b82b54a3ddf6ece1d4f185d957d01f7c630e5cfc9d71d7d5912dac50b72d61df40b1d087391c452f029ea54c6c71a04325667b65","seedS":"6751ce992f7dba1ad48eeadd81a4d93c4c860212ce363f36c304f463b04fc966a69983f4ff137ce461a34c3a9d867c2b88aafc7b7bcf89a4","seedE":"7d9687706099aeb9fdcb611f5bc6d8f5875697bb435cbf24d97a603c1b4219e6a95c9be2632f1f460c9a71339b69805210cabe4250a6dde0","skRm":"dc410d2556a7a6db1e2c150f66110b8be961ad2337beeb553d5ed22034495183b6266f2eb8b26a2b60f3c75105593bf6094e16e640a0ac1e","skSm":"555402ca385d27e88558f4ec2b2d8bc5ca5728ebe4c298da6462eebe6b5180dc785b47cd205fb45934ea245f66397874acf653deb36baa97","skEm":"7af0acea9cd8085959788be327845ef74accd96e11f663045428ff3deed9b752cfdfa68296f8d32dddfb0e2358899335f1880dd51e0221cb","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"e4921613240e46b5c43eb20e09ebf8f80ef675e592765ef59eb3be1919867bc6ff658cdfe1b6c05447d48d984046fd0047a493a291e21bc7","pkSm":"ee59a3e466d468757ec8841a12be67933afadb8162b647100ab88decb10fc3febb6a4b15f5135edb4d19c0724936a9151493aae2a348679e","pkEm":"2bd17a955e5df3b11ab4e64eef9d2372d22b0055149c9ddeaed39f2fd5f81a4dcaa048e1674722d7ac36752da16bc5d737db0a671016759b","enc":"2bd17a955e5df3b11ab4e64eef9d2372d22b0055149c9ddeaed39f2fd5f81a4dcaa048e1674722d7ac36752da16bc5d737db0a671016759b","shared_secret":"0c0349678cf035512d68a4a81e13fd4cdfcb2d2932028ddbb9f901a6c39d96e221b72738be51b0278f715c7b6b5d6e5934687e033b33f08ed970a9f76bc68f76","key_schedule_context":"03a582fa2066caee8eeec8b15e18264048512c071dcc6713d863afe894092c6c8bad26e2f209333569be9ed3562f8ce234815ad8b5491a602fb85fe52189154952328a725dd18e4ad29eae9417de74d3bfc492a53eacf6a587ea8959c3acf9c00167497cee7032b254ee92ec9bb58db92724f35310364ad193e684390be2bdc1b6","secret":"e79a48c324c48585df6204a95d0d78e552b0a67ee82983371e1b43352005f34d4b0af8911fd4c7d5942bd2edf074d145028c31e2458932311359a920590b165d","key":"e43856f2d944c2039598af74c576aa4984ec466fa943245ef1704e6b74a78286","nonce":"983bccea0ce43cda86db0c72","exporter_secret":"cf7c7aa54ca8ce02e9435467bb044c6c4122242c5244a4a962582f734b49c389af17b5a170ab5a2452fb5059210e3dcdc0564dc21c6b25441ce5e1d20df17009","encryptions":[{"aad":"436f756e742d30","ciphertext":"40bbb464b661a4cba57fef131af2098abb53411990af9d652e80bd3fe83df47b986fce6456548a4569ba971268","nonce":"983bccea0ce43cda86db0c72","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"252cf353fba0f373241d4311fdbe6f2937ec330fbd1f28bed63e08d2c22acdc459399491dd449e8518eb91ea90","nonce":"983bccea0ce43cda86db0c73","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"81b3ec62aaab4df7bb45f507c3bd74bc4b35d804329310c8935c1ea9bcfa7954da72acd58769892f581d4f089a","nonce":"983bccea0ce43cda86db0c70","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"147a3921b060c8e3a854b4a118463aafe35e093a331eb42609a15d94eaf30c836595efcfb8cb7d19f8fa2698a2","nonce":"983bccea0ce43cda86db0c71","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"d8e05d3d97cdf18214c4f28775d63e0d60d431ff53d172561ca5482648c92ef66bb2701ac973e86fd3aacea97e","nonce":"983bccea0ce43cda86db0c76","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"8edeed464c1af56e7b8f9921ffc1014945d5316e78d55d4159055daabe09a0ecd4265d700c76341814b180f99a","nonce":"983bccea0ce43cda86db0c77","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"394cecaf44ce2e2945458a9451252aac77d0261fc4b7d9c001001ea5edc1a2cdfa366603e2cf5215909537f327","nonce":"983bccea0ce43cda86db0c74","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"ecd094958bb028e50807ac880e9a89aaad3ec6239826cfcb41116c3f7001f6ba0340c446d6057a71b92379f08f","nonce":"983bccea0ce43cda86db0c75","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"359eb4f1404078b80644c8f5902883780bc99efd47210603f080c059c185d385a680b6719e8692a163e4c6ad51","nonce":"983bccea0ce43cda86db0c7a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"2a37371fba755453f4ab2bb34bc606ec53aeab3a2a48e0871f32a1c792c73b22c5ed203bfae73f22aad38d7086","nonce":"983bccea0ce43cda86db0c7b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"244d5a5a214d36595b3441761299b6bf69f7271402e57a5ff82ed517eecdd1e3"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"1b9cfd9b17e946e834579084ef304fe6bb2a41007ca80d0788b9d19e755be326"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"53e0a335b6e3565b7a9d274982874bb00b4fd6697b419832e481d39f74ea253e"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"b717ff3452f194a17f8de5a14ec294070c7eb361accca60ae0a8a79771064dc1"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"ef32585bad422663f1338a70cca5226362d1f814d7f99b6fb09b7082f1fc174c"}]},{"mode":0,"kem_id":33,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"e591b5c9c7f834294f02f4cb956db64b4bdf176ab2ac3de731f63e8a4bd7a5fc087841141925404aacc7fe26967c1382a43ac05779b75128","seedE":"80db21de690815eed8258d592e23f2b21d3efb9a79465c42ba7a29dc736c0f70b288f5629ca1d82222b3e686c12ac58e8db238b1462276f3","skRm":"66eebbbf3e982e501e612328be2ab056ea1b8c38a2270c9f93383e50606507593bb7e5d888ea0d748d502b77eed41c4349c200a96a6f428d","skEm":"6d6c372300b4eb582c9ff5366e722b2fdf680665446d4a6edea48438a13932a8224ce174746703d77a46802a837e42f1cb5e828dcc94c731","pkRm":"90a7773c8673273ef3e6581a337675aea8ec42600bf31f0b4b55e741df2b0e402a962283b0336744d96486e96a24992b4f4a4435a5222a9a","pkEm":"5e5d06141e78f7a94b6275dff0ecf6af15947cc4e99cbe408a9d20a712a939833acf526b30ee01cf9ec86fdf13791ddba7d7a70bdfe1ad05","enc":"5e5d06141e78f7a94b6275dff0ecf6af15947cc4e99cbe408a9d20a712a939833acf526b30ee01cf9ec86fdf13791ddba7d7a70bdfe1ad05","shared_secret":"43c250123c2dacc763874cf4030810517fd84009a8250301ade70fa30bdb81eb3f198f8f30d8868fc3e1326f34be4d9b5aa29aeb09bae4a0cbaf84889fa8bcc5","key_schedule_context":"00949d30f15a3c476eb5e6947de88e3cb3e8b5a45874d4abd686177b5afd9702da927cba7e52411e08576e4788f91c25697bbbc25c333eebb1511e6436d856cd8f328a725dd18e4ad29eae9417de74d3bfc492a53eacf6a587ea8959c3acf9c00167497cee7032b254ee92ec9bb58db92724f35310364ad193e684390be2bdc1b6","secret":"3956648a1aa6b44c7f559b6acd1a6aac48dd3272cb9d934d627539901b49807abd8211d490406d1f046987274bc239b72de06459301ae11f2cffedc7be326d36","key":"083d3fa7958a3d5ebc4f3cae94447060707f7b7a4da98a825a2e579d5ed93e8b","nonce":"12ce3d9d40c187b8377e0ddf","exporter_secret":"65a7401afb2876e12420969ca1bad97fce7e245723eadf3281b66450a05d2378076189e5660f6bb5631c439db805a9ccafd34edb0317d2fa902117e6b6ec1cbf","encryptions":[{"aad":"436f756e742d30","ciphertext":"6f01de655a40dee69a07370b51d0f1183b4603881f30388dc598364d0b860411146ba44b769487388ed1841a6d","nonce":"12ce3d9d40c187b8377e0ddf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"dffb2604362e07a5a22992483b68d94c879257f3a92e3158017264de2dab8b332270b1143f01f62a57adb0bcab","nonce":"12ce3d9d40c187b8377e0dde","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"489924221b016f04fb2c5c3fb356a1343011b901e0cf7bb9fd036251f3cf99b7f20926c00d74b6f882fe513698","nonce":"12ce3d9d40c187b8377e0ddd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"c3b3e6d57c9233769b2e58a952ac1b80449deeea83b84fbe2656882ca8e942d74342f6732a57f410ac846f129e","nonce":"12ce3d9d40c187b8377e0ddc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"0fe25dd70dc35f71e0e297843c5eae558e3b3d2db4ad335c58362381b0e3eae008c38c13502569dd8a06c30b3b","nonce":"12ce3d9d40c187b8377e0ddb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"5d78285b136cf2fb07d5dfd0233e8c7cbdbd251951d3f6b9e1bd575b30e3274ba5845ae17cdb060763d0ff790f","nonce":"12ce3d9d40c187b8377e0dda","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"20a9adf213dde86c2074783a95affc055971ae0ac87f61be5708f1eabf8e6f00762f2c19beb61f0944689d1a90","nonce":"12ce3d9d40c187b8377e0dd9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"a5acbada7a5d5742c44962162d76d85e6b1534f478ebb0e125ce9302783ec3f5787993cc4ee844bea8b7743bc3","nonce":"12ce3d9d40c187b8377e0dd8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"9f92ff892bc47db0e3ccaa0eec402782fd7dad2b4cd050f90331dbadc102589d683e3f2eafe30eefc0549e0c06","nonce":"12ce3d9d40c187b8377e0dd7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"19e688f8514230b582d2066026719221c60d5f0b88d7370b81d002b8ec7e98bdc17e8b00df50a2914a41c24ffd","nonce":"12ce3d9d40c187b8377e0dd6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"62f8798bc12e1e26b665900a143346a7c2a2e06873917294d7e58330ab827aa8"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"8a217709de572f1ce94f03033dcd71100a2dca801f8595ba75ae05cbbdbb2f69"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"95146fca21cf8e83a25c7c4b937c3bcea09ef110b0cb36c4c01c3a54d59557cf"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"ae30213755c43930e16d7fe7c4a36ea651106ce4c267411f36ed8c87f4033272"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"563c82e453d51898bc0495fc5aaa04926a5b518bfc5c1b5907ab8ebc92219d0e"}]},{"mode":0,"kem_id":16,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"67bc0b8ba01fd8a1526d13c803d4d9ffe1a9914ac27e7a6c925b1580893a8485","seedE":"616ed5a6277fd3324e0cc0f4349cd345b0adbb1ceb98de44c03aab083fbaa6e6","skRm":"3846bf6b40f92e3645c5a8c725ad44354c59187b59140c35497b339a10d0beba","skEm":"d37c52c07a637e858ceeb0fa8b972307e07b17218d99581cf46a88f9a3b2af73","pkRm":"04f79409119f58d542a8e4f8ad6fad6394f83c39d34496d990357e30dc0b38a8d8add95f8f4ca7feaa7c29520632845d36fdf94e73cb038a59be020f82b93fe141","pkEm":"048a0c9b27c844f5f1c6a1d9d570e34909c6359997b6acbd8132f1536d1f7685ff0d203f205dfe4a789e4af3f599172b613d060c80d0e1341f066a87c0f83d827c","enc":"048a0c9b27c844f5f1c6a1d9d570e34909c6359997b6acbd8132f1536d1f7685ff0d203f205dfe4a789e4af3f599172b613d060c80d0e1341f066a87c0f83d827c","shared_secret":"5f175bec391524f0153b05559212adbc2f5d6981b95a5d53fa7ed58fe5e156be","key_schedule_context":"00c14ae6a0da7c6764c62eba270ec0cc28b5b568b4849a9b59425c08860800fad8a633c96fae27707d2cfedac544e900a8b52a016cf86e4bf25a7d350fbe847f8d","secret":"f753e6728460efed42ca308bef93e8b6646cec0252a0154d8310984445bb0629","key":"d0696b5461fee5620d54f33b04a00f79","nonce":"99f33bd3ad9ad334b17de055","exporter_secret":"f79e9a0e83b5c678cc0c9240b68fc3a84096ce374f37673ad4ea345ef0a3510c","encryptions":[{"aad":"436f756e742d30","ciphertext":"0d77ad2340cc7af125fcd7f4ea63bca7e857d774d08365eff8c7f63091a5e5aebca4721c854579b11149649209","nonce":"99f33bd3ad9ad334b17de055","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"90260e86b560860d0bf7bd1273bf7b6f4bf43aa94d475c93015c5d5b536aae7631227968ab1aecc337cd080988","nonce":"99f33bd3ad9ad334b17de054","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"fba616306cbe53eb8faef059a8d39947102a037c2e5bfb6b770bf7241576b74e197ae6972c39177b8393e4bece","nonce":"99f33bd3ad9ad334b17de057","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"2f4681e2af177e92b34f7e2160507a629119c6fb70c928f64a0e65e07aca151cc32dd3fdfa3f7932bc46626706","nonce":"99f33bd3ad9ad334b17de056","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"ca7c1e359bb916ec8aed3a10bd2a703d044af6a1a1b5a8f8bbba63141f35ca7c292516bda6c97c4bfe85333f6f","nonce":"99f33bd3ad9ad334b17de051","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"7d878cfad5124f066fdc229349bf8ab1c82015a748a35e00fbec324602726871759838c64d132aee8e9e0a772a","nonce":"99f33bd3ad9ad334b17de050","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"b5d9fb5376c667950032051e67a5c981dac6a3fbf416fe28e98d87d075ab71151eca8a3ebde0d9532c82d6120f","nonce":"99f33bd3ad9ad334b17de053","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"7bfedf8a3d0e909bb8b7d894d0b602f50900cc4ee7e10e94480201b0a41405f65bdbe549c76d82fbe36df309c4","nonce":"99f33bd3ad9ad334b17de052","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"dc922098754661b41651d1e254cec89890ac0e76867bf9be2702a2dd1bacfc393abb5706b8743362ce949e2a36","nonce":"99f33bd3ad9ad334b17de05d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"c6613ca71e6951ccbd3a3c2d52b815c7d4c284fcbcad506b89d21a49d0f812079b515aefa52d48cd2d8164810b","nonce":"99f33bd3ad9ad334b17de05c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"23fe2c722df89643d0987e657da15f39c7548e273cd17b469721665b212c44ce"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"c29c28d8f6550d8f8ed4a36fe1e3ed98a1dd1f075d97b5ce0eed8298bea8c035"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"a3d75d106a706e2c6f5515e0d423aa8f6596b903f3996ece7762f43e9bee28c7"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"fd588757856a2fb1d63a80c5151d389c41254120a1cbd2397c9a31c1cac3249e"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"d44987f0cc98d2366ebc0ae856e2abd15f7112fd6b40e6cc0d8f009fd0e5759f"}]},{"mode":1,"kem_id":16,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"236ddc165201cb79b2d8c7399c7f6e6e8cc4542b2fd1b75d107875db2b89cced","seedE":"8131f719cf2d1f5263da51e133876a99eaaf5d5fb118bda64ef12ca6fa40f987","skRm":"725658a8e129bddeb7b6769634fa7d64ead6277488cb57e88e68dd77f5cda19b","skEm":"e9338b646027098a903c0c5f66bd58fd895eca90e171e55766e31951cfe6cc39","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04c5a0bfad2ebb4c7a7d1ee2f56cb2503bcf73c17b7239bba0d23b6910292f162ea2466e2d0ec5ee4aa52d81f18870dd2723f288bd87bb98ad314b3b1a55e1a3de","pkEm":"04df79d22d7cba95ff448cf84ffa01cdd87a68c9ef70dd926fe164a76d2cd243036f3a34e9bac0725406fcb46d7c723248e42c3b329bed5bf8fcaa47d87d9d3e00","enc":"04df79d22d7cba95ff448cf84ffa01cdd87a68c9ef70dd926fe164a76d2cd243036f3a34e9bac0725406fcb46d7c723248e42c3b329bed5bf8fcaa47d87d9d3e00","shared_secret":"1f245a22765eaf94b3a76463b9a248941078d138c3216acfcbd1d25f8772afda","key_schedule_context":"018c27d3410cb79f908302ae06a67ad4c6f971cc37f64c23807cb4de4adeaa7d76a633c96fae27707d2cfedac544e900a8b52a016cf86e4bf25a7d350fbe847f8d","secret":"fc6a6aca6b179515d69086844efec0acda07bd55efd50873cb46fb811faea941","key":"89fb75a38ba6bab89b1a8b0fc7db366e","nonce":"00b1c2de64b6a56a51921d56","exporter_secret":"cbd0d3b0ce32cc4ad834a0e81cecd21ecba042a0f4f25ae839a1fe95e56b89ff","encryptions":[{"aad":"436f756e742d30","ciphertext":"75e82c5e991af745c380557b2f03f793dde5f4a78b3bf31429735aebbbd881580917e8a489fb0da3b081444319","nonce":"00b1c2de64b6a56a51921d56","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"bc7e436c6435634a69147dc20e3abae51f2c02f96ec2b198138b5e10e28420cb45a7ee149b1d936154ca320e08","nonce":"00b1c2de64b6a56a51921d57","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"bd020f02b8eaae481e512bfe4969b2b285c636f756c72d70022f31af52bf00692c57264bb214a412ac8fb1b965","nonce":"00b1c2de64b6a56a51921d54","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"a9f3741535b1f99ff328a857d2e0231ca11078afd787cf8d267fbcf224820a89f33a30b672bfbf7170bf958a21","nonce":"00b1c2de64b6a56a51921d55","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"b1ff4e7b8ec452aff36b06c5c1bcf7e4e1cdd3211f1516ce752366f1b81d5cc813e4d5e2142239afcbd1a75f4e","nonce":"00b1c2de64b6a56a51921d52","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"fe66cbc16ed4829324352f5183b6c456477f2ee6af0a31bf2def8bd9b0a2c242403e4bdd6144f965a1299fa6c4","nonce":"00b1c2de64b6a56a51921d53","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"97c1e8908fabaec4bc83efef957048c2baf70aee75f2d46386f446739c6b8dd5778e01dfda7f11ca58e660255b","nonce":"00b1c2de64b6a56a51921d50","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"f134462139d6cd110a14bda61aa16eb359d2b585f2fb45abc9b23ec8871b6a1eb9acc44159cfb93cd7f40a05a2","nonce":"00b1c2de64b6a56a51921d51","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"c989f5d31f2609fcb643c706113104c2f3b48f7ded406b42f02cf394cd9ea077a7e9ec7a158f25a3aabaf001ff","nonce":"00b1c2de64b6a56a51921d5e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"411f0e5327416e9f01916346a2c0a242e946dba349f05bd10baa5787675ffe6dccc5b05400bab94c9ea22c0973","nonce":"00b1c2de64b6a56a51921d5f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"5442920c851a483c22402c95e872d21a6145286ecf8f1406711d691d15874a44"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"8ffe3f22d326b2164530a35ab50420dd36cab7d2941ffdb9819858257c18a9fc"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"26d98b7e5e4ee486411687551d6be41ea07316ee975e552726aa80c8bb23f734"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"31eb98cc4dd527c04c89784f17bc0d1e9c9717b25ea9a8559690a8faa8dd34b3"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"f4e7d010e2b9df1329ff819d24209c4c3d66b7c80f99aa61bf2a6ea08869717b"}]},{"mode":2,"kem_id":16,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"740a67dba29760f8d95e953a1ae75fda6d5eede2a41c15f4860b5557d4763fbf","seedS":"174deda86fb885b78e5ef8ad158be3c38349c5322120f03ee9ddb6336788d8ca","seedE":"f9b977313fa3cd4dd8637307fc93e48093ab6bcd45781ad9f7a79f5f0e379bb6","skRm":"c66e74f49ade18cd81aa612cf8e5363ebf0da7cfd06f07ec266f46c29e9919cc","skSm":"7e8de5af9ea0240a8638421db70967ea6a1d610d5dcb6faec575dab5d6079a8f","skEm":"d1e640b7630e0ba4423a4ea17fb1fc7976580e31048523c5dfdf7c78ed775aaa","pkRm":"043902c8e06ba874cb4eff0db4bed84ecfe3afb85e837308c4e87ba0f41bea35d56c17ea6a72ab671aa513ecae24df1d03bf976f670ad13e6bfbb3ade658d14dc4","pkSm":"04a5db098f6637ebc548feabdb9564d52e52db469590d6d55b6572474df0e8007471493bca84c4d152c2682166cc7e9825849a7e1a9f162aec8e6a773760682911","pkEm":"04686fc26c925890636fdaabae3434af53172035f7a191bc21fbc7ad9161ee1673c0e6b61d0c4b2db3140d622c46c8e42fd4e10fb48b4fd522ff59f795659a5b13","enc":"04686fc26c925890636fdaabae3434af53172035f7a191bc21fbc7ad9161ee1673c0e6b61d0c4b2db3140d622c46c8e42fd4e10fb48b4fd522ff59f795659a5b13","shared_secret":"8e1409be7adea332a36fbf29bf8668ae13d66cfecf5d02e8d2cb2c16950af36e","key_schedule_context":"02c14ae6a0da7c6764c62eba270ec0cc28b5b568b4849a9b59425c08860800fad8a633c96fae27707d2cfedac544e900a8b52a016cf86e4bf25a7d350fbe847f8d","secret":"35cafa2133584ef110a63010be05bcbc32fe5b5985f5b62ae94c07cd3a844ae1","key":"40eef365aa0dcee18cb7d16b0d24e35d","nonce":"a5f0d2f22f3e404976ca7b1b","exporter_secret":"162a8e2af6ba4e66e110b8dca44a076f49d4fba4614540341f4013159eab5e69","encryptions":[{"aad":"436f756e742d30","ciphertext":"1e9233f2b21834f72bc2b23173b107770d97092d1fc57960aaf0d011b1bb8f1767d6ff8cb3b5bdb857168260ee","nonce":"a5f0d2f22f3e404976ca7b1b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"e870727eec0872dfc176e3d48e894a6fd23c560b2f7c097febd70cf819710e8a0c30adfe0a1d740b5e42d09325","nonce":"a5f0d2f22f3e404976ca7b1a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"1b28bcf1c88146063ca68a999bee8b6d339bf9ec9ce1b22aad255abf96b7951f0d14db39d2a7042402d2ff3b41","nonce":"a5f0d2f22f3e404976ca7b19","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"df6d0b7d3e15eeda33e63942f9d5e60e64ceedcea2e19b0fe41c7a7df0c4c7a4ee4e83bb49462722fc0780aa23","nonce":"a5f0d2f22f3e404976ca7b18","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"10ec221a706669d206e4fdaffe72adadf4c98286728aa58b91ffea2035179ecf97677723a814464d6c0e3220f5","nonce":"a5f0d2f22f3e404976ca7b1f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"98f6093648abbedf6e20b09b67b7d85ccb3d5fc37a604ad55343576cbaa639d4dfb4819591749d0a727b5da868","nonce":"a5f0d2f22f3e404976ca7b1e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"0201aba31cc93a603a390962519da378d3cc7db6bdaebd9e9690e0bdc26833d112099503f27b002f9adf377c9c","nonce":"a5f0d2f22f3e404976ca7b1d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"b4f9e059f243342d3de4aa73eeae2e191c55377f58bd6f2487d1ccfce5739ac084167dca2c4fbe4b04728e47ff","nonce":"a5f0d2f22f3e404976ca7b1c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"1482376408b564b4d856c52843b325da4f1d8a0a10e6f455be96c1c3a13401877ece5e387657d87ec135405bff","nonce":"a5f0d2f22f3e404976ca7b13","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"9df3134f355f41dc559b2ba228fb721a249bb81311f67a0b74d6c22cf92cccd28633d756079c84bc9728b3ea44","nonce":"a5f0d2f22f3e404976ca7b12","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"bef66b4290f5ffc092c61b8f92e7bf504329e5edf28b850d80e0b4f9385a077b"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"52480991a6dad93f4a82ad346de990cbc66e31e2e9e0963bed53027ce4c7a769"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"f12626be2223e055ce3c151faf68731e0dd895f34daf7cbc7e44cf87ba313f5f"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"ad2ff40ccb7744209ecc48b5e0bde903b79497a3bf0ee4f9ac92a525907f2e71"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"80ef89f0569f4bf789fbba227f8e631c23b6766ce6d5a3e2462570746b5cd0ee"}]},{"mode":3,"kem_id":16,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"85c7ca573ca20cffc0db7748f2b93a1faaa951aaedace61a6cc0b15755cf7cdb","seedS":"adfa10a0be028fec577fc0d8da73b3af3f6c8d96976ac3664b1a191c8ef0506c","seedE":"ac7928bd504449496e56517f59ad30ba62575c3c328864340247d73217823bb3","skRm":"bd739bdaba378bb0592f5ff599c14b656391c6d4f56a81017013fac0e12506fb","skSm":"d9d39ce984847da21bba54983f8ccc259e65904ffcbd9698230f8a7d446b1e3e","skEm":"c2b0fe035a29b73d57c462aa2ec77f80b997b85c062ac7311fe8f6c04229da5b","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04ebb2396e02ce2751b3cad1278f4c3b63e416dc8b38856907ae8192c59d0c12c95c599cecaf75995d14735bd070c9b5b2ba1bad45b4d63a6a275a84e925529dae","pkSm":"04751aa130b35d9b3b1d305d165f28ac9c749788a9acdab87568f30e386b59b2b4d617cca80c9f676dbde2809b428fbc58d862723950f8e2408f466b5b4c601254","pkEm":"0435ea0b3e1693ee6c10ab35b0d6a01d9c6879be1ca8676cc2fd16e94b622368b4125f4528deeb1d32dbb0a9b815341ee6dc723e00dfad789a46abc337c0cb2d74","enc":"0435ea0b3e1693ee6c10ab35b0d6a01d9c6879be1ca8676cc2fd16e94b622368b4125f4528deeb1d32dbb0a9b815341ee6dc723e00dfad789a46abc337c0cb2d74","shared_secret":"acabc837f0148300e7264c7bfc597ce119a5a77c51eb091fb943573cafa69ce2","key_schedule_context":"038c27d3410cb79f908302ae06a67ad4c6f971cc37f64c23807cb4de4adeaa7d76a633c96fae27707d2cfedac544e900a8b52a016cf86e4bf25a7d350fbe847f8d","secret":"dbbb9e2244449b76d56b48a7c8257f8b03e9a5948fc382528ad4f8464f3b8ee9","key":"51ad48b07edc1bc355bbd8ba1288f90d","nonce":"fa9f85cd9f4e97cc5655eeee","exporter_secret":"25fa7177ee5c4686f095fc5c51d2ce5c5871a6d1210c3e345fe4ba2fc8febbdf","encryptions":[{"aad":"436f756e742d30","ciphertext":"bab2fad2725ecde8486e17afb2ea44d908c023f80ee2592273e8ca7a25367c946d318f3bf241038f9ebd0267b3","nonce":"fa9f85cd9f4e97cc5655eeee","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"63270c658fe7f960837760b763d487ba9b663643a3843399328aa90d06a19046e76b6e5a23460dec758b41a03c","nonce":"fa9f85cd9f4e97cc5655eeef","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"9ee05381c12b4ac0d6fdddfb0efaf7ebe126474af24785af7ead4730b3382155a7924996410f42905b05a7a3de","nonce":"fa9f85cd9f4e97cc5655eeec","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"02e38fd178ff2f481459e3a60b1386db354956583350acb3a2397375c480d95316d544ab903c0aa77493f8d710","nonce":"fa9f85cd9f4e97cc5655eeed","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"971ba4154f709dcd45fd46b3a7cf53cfaa34ffcf8758c7bc6beea9e91b5725cd611356da09dff633517c9284d2","nonce":"fa9f85cd9f4e97cc5655eeea","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"3e07e70884c881a61a71dc6534f10803976e135390e68f89e3c5bc9b62d1bad26316ab86f0eeba89e7886067bb","nonce":"fa9f85cd9f4e97cc5655eeeb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"82612e965f1b24d5b4ae7354e6e1be78994ff185f58e2027ee9595c931280809331d6e9ad09a2656f4d527d207","nonce":"fa9f85cd9f4e97cc5655eee8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"2172db33f3f7b1147be2948077b40872f2ec96f2fb720d0a7154e4f57fc4d85ff3d13f4475929431036b5e5931","nonce":"fa9f85cd9f4e97cc5655eee9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"4683a2c815d3c5ee7dfe92afa0a7262ff082805f38d695c04d4697ad250afdac79dbe358094441520f6f8a7b20","nonce":"fa9f85cd9f4e97cc5655eee6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"c2992dfa7a64a715337b76d77ad991735657a958abf68a5c804729589820862e5601608c74081fbd286d868cb3","nonce":"fa9f85cd9f4e97cc5655eee7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"8c0ff21900045dc8038b2f69bed5f85d9a9d7031623149e821b74efa9e164da5"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"ce1ba1ce64cb38b8e67ef8835544069786582ddb831c460aa77cc7c9ebe3b8c1"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"c8222f0acce675ba4e952f9e029c640d8b51dfae1b86348c7ac6c6d51709b0f8"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"0634a1b9044df8e24c0c850a15f8d4c79800481612873d4a070d6886e8aae447"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"bf7a694636a4fe4f9b828ff82581fa0f69dc753daee777c0160e50d6c0b87e13"}]},{"mode":1,"kem_id":16,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"30144dce90e8da40cef827ef2f5be9d50c0758a092a9ebf9e5c95c255f2600ef","seedE":"082b20a74ce728004bf1f21037f02a53f49a1ef8e4bd4449d3cab2dd91365703","skRm":"4ca804179924ec5ce3e4839e194a98d424e55815bf178c9a2691a78775e30b2e","skEm":"cf79fee656566beaf32e1bb840202b8103b698a8f305bb59ea4f4ce020571e74","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04081c74b6d48bc97867816b5837f617ecab50bea0e15d37d95c143e228d81bb504c52e21596b5287a887f6b17b6e93f58ceb9d5a863ac726238f5db9d09261f74","pkEm":"0407ae51ebaecd25784773bf391996fa5bb38593c869918d0286bcfbcd067e8191c074311f438cad22a59c10bd648896b08f78e8ead4661f0d5c60f53545197e9d","enc":"0407ae51ebaecd25784773bf391996fa5bb38593c869918d0286bcfbcd067e8191c074311f438cad22a59c10bd648896b08f78e8ead4661f0d5c60f53545197e9d","shared_secret":"b4ae820185593e14a33a61ba879702eb8ff6906c5d3d307ccc3b535b53617afa","key_schedule_context":"01f433726a9b77cd11901b221010f824334953ba3ab86de05ff8f8ae23c35a6a58db5dcea79c6245a722348982ea03da56990c996747fcf13675cc980bc9bcaf6e","secret":"fd084a5369bd4d1974ff84f5739023b5a86a609106c36c19a16ed428d04bd9dc","key":"b870b956603b57888d9de6056c1e446c04d30cf24a02289c0b9c51b8ac8cbcb2","nonce":"499c4881497bfa644d8f023e","exporter_secret":"38f892be4c083cd8d677005c7da627de280064b938e61b33431aac49c62c66a0","encryptions":[{"aad":"436f756e742d30","ciphertext":"7e8c562381211392f26007ec7161ca7cf062e6fd1abea253e04f98a67ff09a82306b464769cd9e9715180619ad","nonce":"499c4881497bfa644d8f023e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"679fe5a4c5bd983361253da3b0b93056040fef90be39c9324426ba3ca1eb41fe7822b0fb324e3775d89abe4858","nonce":"499c4881497bfa644d8f023f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"1bbca910e45c68abfda87b6447d5c21abdca9d290209be2d827bef0238a01dcd0ce400c31e30ed7c62f5e1b7e4","nonce":"499c4881497bfa644d8f023c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"ec208bdc6606a462543045cd19763e678f8bb040d7905a552139f4d8dd99ba4c16bfa4c620846ae9a40d3193d1","nonce":"499c4881497bfa644d8f023d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"33ef12322d760d611538c45b33cbc9334685e7e27ca310e148975d7c29f4b8544aa6f734994c8634d42fc5b31c","nonce":"499c4881497bfa644d8f023a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"3e887a4c6b71d4a540f975f5e05b3ae2c39aa7da55a8496e1d052509202db83b51277d78e1d31dc55aafa9bc0c","nonce":"499c4881497bfa644d8f023b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"f744dac9626c7d42a92e0f98c0472799dc7852b3fa230ae49a4cf119262699a9acdec511647319d48b26b0fb8a","nonce":"499c4881497bfa644d8f0238","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"6076f477c136f311a0504ffbd6644cd8e074363c4379bba4687dad04ee292d2e1549d0017e5c07bb0e2a1d79f9","nonce":"499c4881497bfa644d8f0239","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"19ee10fe30db22c18c092174fb45cb933ae5da2a7abe9824b63c6ebf49641ddd5ab7a2d886246e62a6ba98eab0","nonce":"499c4881497bfa644d8f0236","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"4dd35263c4f03dea7f4a329fdfd567c48ac41c628d2140b3f4c58ee6450a82caf6fb5fc0ad6cfa1461e77712a8","nonce":"499c4881497bfa644d8f0237","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"3e7814f1992e9605e5d36ce870cc62552bedcbea99ea0792999f98ae345315cc"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"26280c704d05f0f2129025cd5c321647d255795130846b98285191f7cdb820a4"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"e17451c393f84759bee24c1c2fd8fcc14b52bcb9c0fedf25a2d90a782931a0db"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"dd04432150426fc746a820d6ba230fc9bf6d0ea8dd270709a0063f0efe1d89ec"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"27a8caaedc09099b676894199f00f9789593a098de8625ddf3ca52c19d58a41c"}]},{"mode":2,"kem_id":16,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"b258f3438d53965ca6509d83efb51644d61e966dec8faa14af7ce29ad82e82b9","seedS":"c35e474e1c473791dd85f2fda49ca3e3910fb9b09cf6bce5367bfeaca1dad2ff","seedE":"b93135d53fe4203397e25ea009667164eb3a0cc9482e9457b32da083f65ba10a","skRm":"ef9b18dd12df729e4a10434388ba9f40aa0d0c8ffdfc655af4a2090d4947c215","skSm":"fe4eaf760e1ee90b102011dda46b705bba1a10c75e9f6b0b1c93f07d721aa111","skEm":"e691594f3a9aa3f0b85e8dd336725375485780ca8eb1b991b94c885aa8953941","pkRm":"049bf3c8a0ba5ea99503c48ce1e029da503372385b106ed5105edd8b52fc04a02be2939b8f57c49fa41940fa09bda683ccddbbcac00e1fff77c7b93a75c9268d04","pkSm":"04dbf2887090e0477b444fed9c4fa580bc9bc4dfde5f6e286142049b7d10fe0dcb252f0cab73dc0b2287a6cfd3376a4d2214844d0ae78d39a72c0decf1df2a5828","pkEm":"04c6916f797d69eea4cf9da98adb1c6883f10c13f39b3cf2ab32bde11526642b42a54ba47a54987e242ffdc769fc3ec5dc457b99c3526aa58f54fdfe3ba700da64","enc":"04c6916f797d69eea4cf9da98adb1c6883f10c13f39b3cf2ab32bde11526642b42a54ba47a54987e242ffdc769fc3ec5dc457b99c3526aa58f54fdfe3ba700da64","shared_secret":"cc630ea984e4d32bf5a9c90e236375ce0753037136027601d343cb25186d891d","key_schedule_context":"025c92bcc6813ef740f5d927446355965dffa6d842897d6b73339075d9c87a658bdb5dcea79c6245a722348982ea03da56990c996747fcf13675cc980bc9bcaf6e","secret":"b710085fdd1a9a0dac16a159fee7cb4b105abeb9c0a3abb5af391ac19db2187a","key":"1544ec15a7adbb2d8bda205e4dc82127c6b63a037f1f117dee0c6862a7dd9e43","nonce":"ad3b03c3c6282908a04ac078","exporter_secret":"acdca5cd2ea7bdc6dadd095eb9d3d76f88c1b705061bf8e98d2b7d326fca135d","encryptions":[{"aad":"436f756e742d30","ciphertext":"a28d64117895ddfc39811e35930441c1113defba7a46561fe594e9c5bce02f365e5ae8432a3ffb3f2a1cb0895f","nonce":"ad3b03c3c6282908a04ac078","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"81d3036ce78d8e8f7b67b253ebace6889d031fe07c8529cf59b7784e450248a496ec5a301922f43481c35bc970","nonce":"ad3b03c3c6282908a04ac079","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"69ba30896cbfdc379ebd8dfffc0afe23168abac982db86d3e4592320dfd65b223dbe1c643919132d9bc8d162d3","nonce":"ad3b03c3c6282908a04ac07a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"9b6b9e77cfa6af14da57a0ad719079545f7f668ade4026a678222f0c6c9f68748b01416a54dbecb57ce0bc35b9","nonce":"ad3b03c3c6282908a04ac07b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"2816f4209315267c00ff92203db037b4c6c65e846a3f92efc35868f7870d3cff2923b81d91d197e6a8763dcf20","nonce":"ad3b03c3c6282908a04ac07c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"5a52ff3624d1cd6d8430210ff936903ea2410a9e34fde986300acd6b19da5c8e25a1acc3302e1af96a5ffc0f76","nonce":"ad3b03c3c6282908a04ac07d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"4d5c7c811efef5e84e0355d9a2a6bba22357385fa101e2bf69de2851340104cb1695e929c17bdcf32cc4afdb4b","nonce":"ad3b03c3c6282908a04ac07e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"3fb284ba584a79791cff4cfb033cb8d0ef720bdfaab8b9c90d35be395b3f246c784654594fd97c941c7ed31f2a","nonce":"ad3b03c3c6282908a04ac07f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"46a5632d6112f15505a784d517f4c16e9cdaafe71a20990e3ce20f6ba21a5f2761bd36f585559e50a1be89988c","nonce":"ad3b03c3c6282908a04ac070","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"ffa878cecbe6a73dbc4146b9be16e0b74b5d340e6595b01e866005f2ad751676b3b1114ae1b3870e4999649530","nonce":"ad3b03c3c6282908a04ac071","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"82d03497def1c27e00d729572b77e4ef0661793046faa684e427e9e0696e20b3"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"897c4eb2e1a8184b1eb9c978f9cfc0386b64da6b1b9dd91b8448b94381ce7a40"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"0b9cb2c464e002c17515b0789a15a4680645a858fbceb65f9da2c350e54530a4"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"de04503063861ca3ca5a3be2df391597adf03d2d5f4ac0c6e5ee1fc85d698560"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"e3ee024f24a11df38978a15c812045e18bb8a6bc33c2a13c95d0dc773e9de6a1"}]},{"mode":3,"kem_id":16,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"f8246c84a85b100432cde4b70cd4702a9720614e25f7235904ee6271ffabe00a","seedS":"6ad2d20422ac9a6d784a1ba53dd3aa309df0b7abd04cdbe68e9192e356d76acc","seedE":"89d6bcfbb2dde2da7d92f40d9d00b09b87e954501f3509f63a748b2373e8f466","skRm":"60ac53d96153260971472d6c9201921bc7d0c60638145f89ada082bceda3a571","skSm":"40fc4c1c632bf63309468cbce611b89d8df18108578c8883567c9cde4dfd899f","skEm":"17cbb948d94daacebb962ee8f355d40364184817ec2412e45c6b1e96cf108149","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0453fd5d33333b21ec5f8910b3fc1c44f1c8657dba1575cd32514e4e0be7e7300d70e4747aea9c965923a20056099cb88717e54b5f3b3d6569a41285bba680a380","pkSm":"044a49c389ed1900a8f058e96cee0d61c0ddde13330a2fc08b4ed361588a8e5476236bb9803c6351312e6e59bed91ad90c6164ebc8f3eb021cd19cb20527043b61","pkEm":"04f81d2a10babc103aa42e54d85b8a2d08407357feae595720e3c7fd57dd49d0bb6df777cda8d5c933af84354b9b3a66ec2bf5fd816bb2a0e65e9284d8871dccd4","enc":"04f81d2a10babc103aa42e54d85b8a2d08407357feae595720e3c7fd57dd49d0bb6df777cda8d5c933af84354b9b3a66ec2bf5fd816bb2a0e65e9284d8871dccd4","shared_secret":"deb5ec014485412ac1e56f20a91ad59da16373ec5a1f6bc1c525b7f30589ea37","key_schedule_context":"03f433726a9b77cd11901b221010f824334953ba3ab86de05ff8f8ae23c35a6a58db5dcea79c6245a722348982ea03da56990c996747fcf13675cc980bc9bcaf6e","secret":"6b867503f042d7e1a7b7a05d79bdfbc1b57f6da46cf0b6b0cc49259ea155101b","key":"951dc95a0bf2a5ec16fdca1be8e4834ab6c8f788a10cc9eca2770038f15dd976","nonce":"6849a1f2710a8526142b3bd0","exporter_secret":"eda5ed2a8dac952792e0a558e58b1c0e584a6edb7aa2b80a461013da7a507e45","encryptions":[{"aad":"436f756e742d30","ciphertext":"44d2563a3d5348b85252463b5e9770da4869ace9333e889f9ac89cc564f8537a96cf3affeec44e0a8b32cf803d","nonce":"6849a1f2710a8526142b3bd0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"33e4a19f81bd096ceea776dac727d35ca1fe73ad541cfb5db4751e7eef357b5328207ed7c9e7d69bc42bc44569","nonce":"6849a1f2710a8526142b3bd1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"7b15572b45cea0ae2e8fd10c0ae45d69bf8e1e31fceac38cea797c3d5678b8eb956bef1f1452c4727721ed56d2","nonce":"6849a1f2710a8526142b3bd2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"2732b89b46cb77e28c4911252a62b6662e976ea589cd26b84d4bbb6e35b06e7bbe27ebd20ce57fe7fe7e793ac7","nonce":"6849a1f2710a8526142b3bd3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"e24983665cc172d40cea72023951d59674e501664b5cc3794825741e0516665b4d59452cd148d41aad46cd8daf","nonce":"6849a1f2710a8526142b3bd4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"f298134f57ddd1fb06cbfc9a70f715cabf6ed878fd31d0d0438575b29f4fb945619d1b433e4dae5a32b5e2085c","nonce":"6849a1f2710a8526142b3bd5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"45eea956eeafbfa21b2b1ba2db3678d15dc74d2c6181d503f67178ba225a88d1a3f5a46206b0189ae71c1d22c2","nonce":"6849a1f2710a8526142b3bd6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"ce5ff70bb7ee85dddb9baefea2f739138c5665e5d006b104208000f5c8e7b5b061557fbe05d28a4c0fab343cef","nonce":"6849a1f2710a8526142b3bd7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"e5794b9166097caf11ecc691665fb2bc5fcc41d3f5c236d214756ce4f17b4e05d81757b3fbab00179ed7a558e0","nonce":"6849a1f2710a8526142b3bd8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"0406542e1a4b01d7127fd6a1c09d4010df82fa4b4d78a014f108b2f10a82db143d14aa21793019969b02f3847a","nonce":"6849a1f2710a8526142b3bd9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"1a1c57bf8407b454bb0e471764713bba703202e629e4cfda27d897a29a376ef9"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"a4faac4d3b4113973382f5d729b1e8b58da202843ad33550e86573b8c7247729"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"334332880a7f48319790de3d66a2f3e92e094322302bdd26a6a354dd5b68a153"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"b0e396a47aac53caa3e1b796698e6e0ee1413cb6416e6d13a4ece58992ae225e"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"fa37e66183010d74d537d08c64a533e22628918ef059c10bc1189d4e8f5c09c9"}]},{"mode":0,"kem_id":16,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"466840f087e9747a8441719f96888dfea093cbe3a4caa4e154891ff0e5a22caf","seedE":"3dddd441d33fb4de895d33c4bb200d650a36abde25cbac0ee53447b7caafeded","skRm":"ba2a98db7ccc7fc3894ca4812904eaae2dc8f6e7455915fdabab5facd90e521d","skEm":"df87d0e9f0409f749499c28bb9cfe9a175cd7de674086ba9cd261a696a12e1d4","pkRm":"04981708fd745a9abe489d8724dbff0ec49241e7aa2b4cb7d463cecb80fc0ee9b7c583bd3b09c6bc0ddd74022342b6df5a6eb3b73528786645925dcc97e728c303","pkEm":"04ce090d292a9adfca5d70c466a4388e9d57943142926455f95cc9b3220c54c6fb0092318c8155980ae94d2c407138410450e2d5a2171b75b0a04895cf8daec8a2","enc":"04ce090d292a9adfca5d70c466a4388e9d57943142926455f95cc9b3220c54c6fb0092318c8155980ae94d2c407138410450e2d5a2171b75b0a04895cf8daec8a2","shared_secret":"dc5f1f85559bdf4f2daceaffd3005baad2cb18a3a40af6d33ef232c157acbd84","key_schedule_context":"005c92bcc6813ef740f5d927446355965dffa6d842897d6b73339075d9c87a658bdb5dcea79c6245a722348982ea03da56990c996747fcf13675cc980bc9bcaf6e","secret":"a2c58978ff0f0ea2c0ceaf312ce27199b01059354d116f426a284a3fde0b539d","key":"22818854f97e1001706745d76e07a06a440b4ea63b11b3405d2ecead866a81a4","nonce":"696fa16d9ae48bfb6deddc27","exporter_secret":"4a397e78ba391f71919941fd477895fa0739954a2b2033a0d5edbe1b4edf6531","encryptions":[{"aad":"436f756e742d30","ciphertext":"cc93284dac4e65f07a30482f8a31ceb671d5d029c8a0e0260dd364e73dfef1aee4a94ce474f0db910cfff24f07","nonce":"696fa16d9ae48bfb6deddc27","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"7cdc5c24c46752beabbcc1cd3c8b373e21da8a709e18424e6a1e3b2c5d3d9246ef46456f0babc370871c683a9b","nonce":"696fa16d9ae48bfb6deddc26","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"c1bd95c8df9901dbc6e3c128bd1534350db5e8e71bef7469102dc33be0aa7576873a0ad34e3b549752c461d2d0","nonce":"696fa16d9ae48bfb6deddc25","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"71142545349be81bba943f8175e1a043ef709f3974e3a27132efcea05f08c091e8dae89187fb5fb267342a0029","nonce":"696fa16d9ae48bfb6deddc24","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"fc640c906098fba7d72b84739665c1d3dc064cfc4d40738999e2f9d38924cd0b0b3272b4552e82e4e94c726714","nonce":"696fa16d9ae48bfb6deddc23","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"b347d55ef585fd8bcbe0457de73b984400d10e2ea28f6ece07110cb8e4413cd7f1d8dbab35a02d722dc69ee6b1","nonce":"696fa16d9ae48bfb6deddc22","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"5efc4b3128b5c9bc92fd2269b1e03a4083eb76b7c946a6a68d8c3b6be166e7f4432f87d1efe266d681f43d874b","nonce":"696fa16d9ae48bfb6deddc21","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"5bcea0a89384808f48212dc88112b8e7078b4a8b084e5f6a42294948424716bb2bb2aaee21f966b7e932a6bbe8","nonce":"696fa16d9ae48bfb6deddc20","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"ecea2ea2a9bc10dae58455c9953b31e277da4775781dc33280c14877d3155092831bdfc442965647a6ba3047ba","nonce":"696fa16d9ae48bfb6deddc2f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"4aa3d15a2254d09f79b5050cb6ed6126b40e57adfda2810d4a1420b6916ea72ae21385524db49485ddbd8cec03","nonce":"696fa16d9ae48bfb6deddc2e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"15f4fc793eb5544d393c244f5b9e2b4b645458fe1f0da6b876242c00f12d7cf7"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"0b8ade9a5a2966175f4214a5c9d1881140a28cdf97aa47c2356f5ca991d4b152"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"dccf03eedae715f34376c4e2a87c896a7252aade2fbd6fde65a2a7e44465cb49"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"063e87baf2a8604bae19d7cd9a9054f84f34dd95e7f4722d5b3759e8be05dd31"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"c9fed34fcbe2325222f57d338acb58dcf4f8f7862778f3bedcb28f66f7379815"}]},{"mode":0,"kem_id":16,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"483bb0a0fe639035e3909be5c43af275da1cc8a0f355385fc4c7af211fbcad60","seedE":"fcdcc1cd73bf5cc87b991ca1f7b2f4f0ec2aac20e105efcb7111177a150af48c","skRm":"64257b7a86638b98c2d22dc4b730b3f344fa2dcc3573ce85d2bac959750b7709","skEm":"f779ab76bd6a8edaec8edf9c8382ea15f5f4ad6a9aabebc1450b6c1025dd1de3","pkRm":"048716e273cdf7146a7d68941f9d8b0115cf25ee484e37c0519a49c90e79149c60bf7dc40312a324c0710e6eea965f1267ea5c2dd0e6a487b50acdfd6f71cf0fce","pkEm":"042eba2b8c1fa16ee99ab9f4627aee2358f71d6240955e5747ab869b5531a43ddab8dec00e9fbdfb2f92073774a9981f72312ff6361b551bb254295fffea04de02","enc":"042eba2b8c1fa16ee99ab9f4627aee2358f71d6240955e5747ab869b5531a43ddab8dec00e9fbdfb2f92073774a9981f72312ff6361b551bb254295fffea04de02","shared_secret":"23df0808be6ebbef5822349e5dae008d2c1e9f4020367097bde447ed5fcf383e","key_schedule_context":"005193809f9701d761ad3e980ec406cc14ea789817d821d0cb139989260f37f4c6d3da0100c16489caa7ad5adf41151b806e7a2a438b79586881afdfaf8bc6fedd","secret":"e0001a90ebb7efc5e85e1f72c90ea2e98b14c0431379789250bd2acda2a95208","key":"652abfcff470224fec73d73cef7c424401cb4d72d92ff5a8447a865c19830535","nonce":"07e632ae808cddf6acaeb15b","exporter_secret":"f3a31ef376affde7513fa5989ffadf6e32b8c7ee40a71d2c2f890dda77a5dadd","encryptions":[{"aad":"436f756e742d30","ciphertext":"edcfa837ec3e00787a52b462ac2a3a438a75e8df971fd21fa617998398c34ecfb69b4878faaa68c21edc39be2a","nonce":"07e632ae808cddf6acaeb15b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"02dfb0620b7d7835f66dd53b3444742649104532a808aab474b13c311b3d5dfb99e80f00988b9e70546c369021","nonce":"07e632ae808cddf6acaeb15a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"f42d3def0a450bbf6d15a6950a64c198bd36760a9b53e775bc3e60f9ec38253597b725181e6d3b5feaa0ad80ef","nonce":"07e632ae808cddf6acaeb159","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"d729d3b60bef054f235af71fa09bc2df2770c1889b431f69396f506b71775e8c5e29653e1b2b63b1e89e4e4fc9","nonce":"07e632ae808cddf6acaeb158","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"03769cf4d9e13994376ee35afd627b9f7d1f495ae2d1d3538c4c803e9c08aa13cf9ae7ec545c0f17b28d6b1cba","nonce":"07e632ae808cddf6acaeb15f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"9df2d9690b5b6d616a4c5d2d2071a409a187ea9a76f11c9247b15c74e5c771a74db613ce35869d43e0f5db31ef","nonce":"07e632ae808cddf6acaeb15e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"1458125842e0234f178663fee07446afc0336f52ff76b0e425309941c846fff62a9f065966316345df67cdacd9","nonce":"07e632ae808cddf6acaeb15d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"2d9933061cdd7df0abe4f195924e86a2307863a034deae74ad5ad86c991311f574b32f1f591d7d6ae25b7c75b3","nonce":"07e632ae808cddf6acaeb15c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"ac1bb432b048d0ee419c5c9498bb2ce912fda19d27ed0c70252808240746e78625c448038b8ac0963f57095425","nonce":"07e632ae808cddf6acaeb153","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"1e36fe5f2221a82dca3421b6449f37ccfcc6652c887cd782b644f85e14d89606b7712820f92b4c4af333703204","nonce":"07e632ae808cddf6acaeb152","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"649768704ae994b8143f95e12bc79be662ca632d870b635cf0482ed7d29476b8"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"fc7efd160492ab40b1147296dbd3af5d433c798b52aef3973f0951c2df6d6cec"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"a3c5fe8a2d3a842c30d2ed9aad8c47cb1a465abb20b1a2a6f78baee5f4dd2ec4"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"13f67e00dfc25cba38864d0637176283599cda360d4537c4d49c36d5d3db51fe"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"207a6aeb271d89ed554ee58ae74c1d08cfc758e02c1cd911ad7d5d351575a259"}]},{"mode":1,"kem_id":16,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"4ac36e24812130586b5326c046de98d3186124dedc8fa6afe6bb1181540bd0f7","seedE":"d5f77ccc5d8a284a97f6c9c72fa5cba1daff07cb177770796733129a39de0c14","skRm":"4ef2e67bfc1eb724a58ebea6d96aff6d5de11c7a18991f5771cb30069610a6fc","skEm":"d789d9d4a2a040b785b0a9feabb343425cc8e2d8f6417e42789ea6d18663951c","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0492e832e125ce8981fefdd9cd36d36d729472e634e7ba0a027909f9436b1f26593f02da0257acba3efded2f1073b1f4ccc4b57cc024e8d1fd6df6a122b850ecb2","pkEm":"04f6ddb4c4f41ec4c1577e34519fb3a5b8d659945d425b4b117e02636841c4287fa34bab4c35a5d41d788a8c321b8256cd71c93ff4a8799ed28301114196f9f6a6","enc":"04f6ddb4c4f41ec4c1577e34519fb3a5b8d659945d425b4b117e02636841c4287fa34bab4c35a5d41d788a8c321b8256cd71c93ff4a8799ed28301114196f9f6a6","shared_secret":"c6ab3fe04a92b975f5fd98a09db71063814b03ba86a69da3004e3a0dda8bbc40","key_schedule_context":"017d40471421306b100f7401fbf733fef208e1508bd2744517e95ef7471f21a1dad3da0100c16489caa7ad5adf41151b806e7a2a438b79586881afdfaf8bc6fedd","secret":"6ab05d9bade32456ac456527e164651f1e7b90a22cec55cd32878dd4770271bc","key":"abc5af188ea872c94cafd11dbdb7836cc1930ca0271833ba2a36a04d54404912","nonce":"4724facf9d0af1c7a55a0560","exporter_secret":"38e87692f83d991b20e731e1a29fa86bb92630824de1df6aeaf04fd4d59778e9","encryptions":[{"aad":"436f756e742d30","ciphertext":"6972d38453567d2624db55ad748d42ff3177d1e941bbe57f68d03b53fb0f1d48b6fc2dfcb84d8ef39f3a8ad6c5","nonce":"4724facf9d0af1c7a55a0560","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"6ff2faf2ec58ddd27c3a97a25a1d1b3db45484f2bb1c84c751f58c03d660cee4b942a10bac339044bd65157c65","nonce":"4724facf9d0af1c7a55a0561","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"e2203b51c7d776ed347168dd7d93066184bb7e775277dea7f95bcc3e897cedd52fdcea492158116a8354387f85","nonce":"4724facf9d0af1c7a55a0562","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"458b0a4458330eb1fe600c62867fe26e8cdeb5b16f54b5b774b98ec7922d27ad76d6f823668d7a7b027e9c8682","nonce":"4724facf9d0af1c7a55a0563","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"c953c3657872749b048d8245ef98cf33a2f7e4c62f27d9b9e3496fdf50b951e63031092466f4bc67fb93bcee82","nonce":"4724facf9d0af1c7a55a0564","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"46d075d224610a1f9fd9ed18fb5fa898112e27f3f0cf97a8ffe94478904f21bb46e68270d8bd7741d256f12dba","nonce":"4724facf9d0af1c7a55a0565","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"19b51358618270c87ca9820e9df7be39b9f7b581e206f570c85e8011ae114278f869ffe70e69f8ab0aff13315c","nonce":"4724facf9d0af1c7a55a0566","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"376c925d9efb620cb2613647f52ad415831afb9a12ef4122213621e621009a3435df8a99fc184cb7a7d4107621","nonce":"4724facf9d0af1c7a55a0567","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"86848929cb7bf449943f29cfdc6b0d6e9f5c4ea4db69b1ff0f3a244d4bc4b85c5da02600d54d46f23628403944","nonce":"4724facf9d0af1c7a55a0568","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"a138f4b4f7fdf18a61acee43458c575b293beca34ecca3d3ee07a229c5aa00f3e357e00db8b97f3e0950680fb1","nonce":"4724facf9d0af1c7a55a0569","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"f0ead771d6b184134a6770ea37a1f54fa9298d55cb3a09904894039d7c43369c"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"53227b56dcd547bc4a8dd6df4b3cb88919af2a6511135cbfe96f3aa1f86485cc"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"e0e1a39d3f1927b03f7f4486dcd56edb73004490dcd996f3f6b1e69f62f558ef"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"356ca58ad6658834d97777d59ec0314557b316f5e3396065622bf268be17e207"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"faef5b99303d4689fc49da7a590339877e70262a64340f7c3cfd40f0d1a5e97d"}]},{"mode":2,"kem_id":16,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"df66678a95aaf77b4a3ec2635b23b181dd3d8a05c68022cb6d5d71b119c1535d","seedS":"01bbe1ed07b0688a97d888880ca203b9ac5ebf298f4a5a081e1fa46dbb6e183f","seedE":"336770111a4f3e97ddd1592a15e4734b910b9a5b566e846cd8f28c6199f8c5e7","skRm":"6d50088dd600327d6491736bb152d0e2a2ad70db0c26d5f8a5681e25405bd89d","skSm":"8f24aadec1e93eed8b5570844074591b6c1eb8f54eae8af7ab398a7e48d2fa29","skEm":"cdfd892a2bac5ee9e2422122323da13b17d7f0873386b5053de94d2636f3c53a","pkRm":"0494a8b15d3abddf20f57b09c784687ac1176dcc532cbed5d3704441026b00dc9f2436c77bd1a4a5a219bdf2aa324b4af59fbec5caa86db4e83cf7d5c724e0c0c3","pkSm":"047cdd53556de3eb39e267c546ed61864d2460a3225b224ce64860f695e44ba00ec5433cff0e535713d1f2ae1e138fa93463b22039ebac399e6fa99536688e536c","pkEm":"044b364b95db5fadf0617c48688eed541aab99ddf72a5357ae371c34df7803fcd0da422f17ce4c68d03fef7c6ab272041230a3901361445644c2a6c3d02e9532c5","enc":"044b364b95db5fadf0617c48688eed541aab99ddf72a5357ae371c34df7803fcd0da422f17ce4c68d03fef7c6ab272041230a3901361445644c2a6c3d02e9532c5","shared_secret":"f7b6fa8884784f6723692603cd958db6830cb0c87718f72cdff10758cb97a3ab","key_schedule_context":"025193809f9701d761ad3e980ec406cc14ea789817d821d0cb139989260f37f4c6d3da0100c16489caa7ad5adf41151b806e7a2a438b79586881afdfaf8bc6fedd","secret":"53be166abcfea99cf7bbe7c20e3704bccee414244cebed9dd5a2bc9f3ffe1600","key":"807c3ed1b3fdfa8ffb052e01e2f60e75aa9f47ed8378c17ad737e58f32954888","nonce":"7c84b0a76e3bff59f55eeb66","exporter_secret":"ad0c4d9ecace4d473c702f15f83c14964abc8340d560fb103a8ed9e96d30477a","encryptions":[{"aad":"436f756e742d30","ciphertext":"b626e15a016a4d1141404694d4f42300324839c26442761558aff3f11bead5af3102ca3eaa3d9ebe7d61b5e9ad","nonce":"7c84b0a76e3bff59f55eeb66","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"9a71859d14fc01dd756e9c5ae3bd17f30276f60702913ed52d9bdd1f984dd3c1f8d8da0e3cf80d7948322e5272","nonce":"7c84b0a76e3bff59f55eeb67","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"56e9a11b272337128786b69cbf4969d92bfa91ff642c76815c3ed4169d8708d1736466d5ba124de3de05e274ed","nonce":"7c84b0a76e3bff59f55eeb64","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"bda8c5ea76c250209ed354711e2fa4c7a26d90845b9c2793931449d6c054a4a407a3782f2e8274294ada480ba9","nonce":"7c84b0a76e3bff59f55eeb65","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"47c2b0dd4cc2a0cdb9ece76eca03d71556f33554f52800adc208c1c954a50035d3a0c442ad07e5a4a0af2d3987","nonce":"7c84b0a76e3bff59f55eeb62","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"d18c385a2354a5090e99472d499f67585e01542a69bbfd301034532b04171f0526fe7517dd8eabed8df627630e","nonce":"7c84b0a76e3bff59f55eeb63","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"130092f9c1902cdca003a08c28ce46a8507755cd578861f336613da3f165b78f945399a4e3b3b3f9ee1ce69f78","nonce":"7c84b0a76e3bff59f55eeb60","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"fd8e1c6369240ed7ecda11a0bc6dae9e7528c45823820bc3e44071730b63fad4f290c909aae25f25ecf55a85a1","nonce":"7c84b0a76e3bff59f55eeb61","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"8dbc566792a20a312e1bfcddcbd6bf7017d3e839db346199effed067c5f4bf3f9b89373c2cc6dfdc2c50440bad","nonce":"7c84b0a76e3bff59f55eeb6e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"8057fcc15fed0a16568fb4a896a7c62acc440f0a2e7b1595a6b52e18c3b01cf8f7984caa96f91abd10b9fb29cc","nonce":"7c84b0a76e3bff59f55eeb6f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"bfe763893bbb429e86e2352ea9c53556c8b4d8b2dadb3fd900371679d293bed2"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"a6e3e480c5a99278ec252f56f0efe91c5abf40b3c4fc8624d7ad4cdc239b1c33"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"4186f4de3878e8f46afc5df03b9b7c17036069934ad6c5c1527714176e1f9b05"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"bc0de36f7e92535570e1e21b33a7436c98f126f443a1db316036f2b3e3001eb7"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"934a3d9a609cfefce3b882263edf89b35ec4cacd1e0be0491fe73685a8cd6cae"}]},{"mode":3,"kem_id":16,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"5f587a548f7cba21c98ac0dfdac619e962aba8526339c7ad98e804abd9fcbf19","seedS":"1093c27b5e2719ffade39714b76a8e994341b019de9522d89133b41a200f97da","seedE":"7454e819f88659590461a91dff451738df7789f5b4ced005211ed7b264be713f","skRm":"44d78e464befc5faa20e36e8a5f056bbb2970372f3617a6a28883f05891a5e73","skSm":"6e7a6242333ec01f7651bee7a6d51097208647ba3f31991079b318cca32463a3","skEm":"b0782e95b3b3d115a40a5382ea33a29cd91e51ed85db42fa61fdcc51f5125bfd","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04f464a6bf8ca0cb0679391714160c34a853cc8df2d89c119c18fa835600232c9c73041bd7d17129f7de2573a72385f8f507ba2971280f4f0615fdca8d5701c3cd","pkSm":"04a4f059459fff8a1cfbb58ba01c9763d41355c31bee2c822d3831cb0fec2cd06c970713ee5bfe9ab0f9c4ae70afa88a7bac78ac74dba6fbe12afae83e783fce5c","pkEm":"042b8f991a7f0e1a833f58ce65bf65c96780e9620ae3ab6e8df1645b54b70ed89adbc9c2db9f4b6a0c7c08a76523f24ccbd555da8cdd0403e5f1aaf3f68e0dc62d","enc":"042b8f991a7f0e1a833f58ce65bf65c96780e9620ae3ab6e8df1645b54b70ed89adbc9c2db9f4b6a0c7c08a76523f24ccbd555da8cdd0403e5f1aaf3f68e0dc62d","shared_secret":"ae88d508550ecc1804706bf7ef31c329cd2475f20b3ce3082207dc7c806121d5","key_schedule_context":"037d40471421306b100f7401fbf733fef208e1508bd2744517e95ef7471f21a1dad3da0100c16489caa7ad5adf41151b806e7a2a438b79586881afdfaf8bc6fedd","secret":"35a0d70ef7522b31c1d534e268a6d5139b0943b598e61c1c81f8d21633f459cf","key":"2fc299bf7d673aa547d3cb9972a7976bc262508c52a1a84c617e0f0b6bca3c39","nonce":"4af68b1b2cd29814fc8020d5","exporter_secret":"6370cd9058b498d3db6cce9beb618b094ff0981b846d5cf59676cd7e5e41dd3b","encryptions":[{"aad":"436f756e742d30","ciphertext":"694ad6fefd198fece3706b5fd6fb696ed03f399f3bdfabaec36b52fa63153db22a50978c6b0329a6c583a7380b","nonce":"4af68b1b2cd29814fc8020d5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"b0f4eeb0f9ef54c9f5dbc1b16dec408dc4160e255e768b00cc21aec6c5fb65b29835131275ce081ff80e9f05ff","nonce":"4af68b1b2cd29814fc8020d4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"7d72a1eaeb27669fe6fa123a6c4bebecfe9fc035c8b0b2402ccab99dd92c4047c9953a537fb1e647b9e8d49e0f","nonce":"4af68b1b2cd29814fc8020d7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"9fd647d26cf03952a2877b1d7507b6ae8fa61f3985dbd41491fdf306b560baf0652d391642f7487474cb5f153e","nonce":"4af68b1b2cd29814fc8020d6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"b55b04cb0cfa1911bf1c4cef46fdafeb2352de13cdb25e254d4b611ae59cb2342208ccd645e4be0f6d02a34125","nonce":"4af68b1b2cd29814fc8020d1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"a8fc30cdeb8ecfd7a8cffca1f7e4a59303cb7edd6721868e0ee83c689dde1b17531fe8f87ac50830c4bbf99def","nonce":"4af68b1b2cd29814fc8020d0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"6bdb1f7e55d39ee13694d3a9e06bb82e38e7b38db530e03c3507bb625fbbc743407a11261fcd87c1d0c23e8887","nonce":"4af68b1b2cd29814fc8020d3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"e0aa389c3546b37244a0a13fb188aa55c1e84680a21f100edf0e33303804abeb10d5b1cc65f5c06c7bfb5d5a2a","nonce":"4af68b1b2cd29814fc8020d2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"78b7b2716fe7f0fa5351035cc2cc4e9be5ef99d9bd56d10aeef41cf08e60f3724efdf6287be81a8363d8df7e8b","nonce":"4af68b1b2cd29814fc8020dd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"7195492e8fe7517e7c1fbe257e1f32fd742852debcbd218c83cc097c36a9a21cc3dbd52f32ba06fe4ceb49d1b1","nonce":"4af68b1b2cd29814fc8020dc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"1c822c8d8f6ea1bbead09f9ccc92df6ce2786b96772053afbf294241c16db4ce"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"b9f17786f59ec280fbbde09f75be3089cd2909ef524a2601a0ce0d8de9eb0cd1"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"b6190643fe019c146dbd5e40dc9b48ff5eb651c770518dc38e68f4e6e13ab4d3"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"966bc89d4ea55312007cd418deeadc583e17b644e9d235f818b5b13ff0a17a23"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"dd38c21d8885b436df52160e9f0e666326c55fe9049abaed7d06ba2a2b7218a3"}]},{"mode":0,"kem_id":16,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"3d4504f63bd3c1e292043c94dbc37b57085059df1e9f67518158deab2ebae28a","seedE":"c06b7c4fa7fcdf4c149d5616dd913a47c0d861e35f1c3b9bc8228a26aefd4f52","skRm":"3bb1f10127548c1ddcca9ecd25407dadf34b0ca63e8c8efde26bea162f3422d5","skEm":"6246a8df03d24ca9dbb6a32675010d9a472cc97e00ababe835bf3a03b89ae6e9","pkRm":"042460a1b576c061f89bdc25f6149dbb65dd48798407b5500de0cd23922a5fd5a1e55463096bc1a44b1cf761df11ac6acdf49f46fcb025fe2cea367292e762bfa9","pkEm":"04153e63654a815ebfc292776cafbd06fe1f9c5eabd997d146eb98bff3b8064f979217e4903e979a961e81b36aefaf9ff9312765a3754f0bc2fd406947bf5357f2","enc":"04153e63654a815ebfc292776cafbd06fe1f9c5eabd997d146eb98bff3b8064f979217e4903e979a961e81b36aefaf9ff9312765a3754f0bc2fd406947bf5357f2","shared_secret":"f81985f6fc778694728ba142df551a60a529fe0f86add8f402b4786abb91158e","key_schedule_context":"0059a145bcce1c1c862714bcd04c342351f917429e57578e3a2fa684c7ed0403ba264455f90835145bd18f39bfadab2d3808163e74fc91c733021e758f5b70c2668c9942e377e9f72fa4152c161bfba6c407fe5ee3d6517b56634fdf07ade5b4fcb1358e1f01175ac61ef5c191ba765599e625e92cd4623fea16bbe3a0ca2db1df","secret":"56670b96b4a99297fb753156bec636c3f9019e2778520f9650d3dee2827bc35e2f9257437356e333d96c628a4b9c043b36a60db894a3831954a431889b2e0570","key":"0fd75b296c0fcc51ddf829c16b664ccc","nonce":"5b80ab1ace6b4e0add668804","exporter_secret":"1da2e149dd9972a5b45e6dfa8da7ec1d24f8401ef83f1d6244b76bb114f25f36b2963d48e39278f71678edefca22aa3cb7a9a16f243799db93fe95294d323a23","encryptions":[{"aad":"436f756e742d30","ciphertext":"d382add6f0915aec3411bcdb596a531cabb4ea8c09e5171d2b00ca285e6d782e2a5a828ab4c2059993c3e55d95","nonce":"5b80ab1ace6b4e0add668804","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"2d05d58388725a0af35e3baa7d233d358055a856b69919bb3eec858373bca40dcdf1ce07c5a8584e203f1cbed5","nonce":"5b80ab1ace6b4e0add668805","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"ed54296f6579e95cf33dc38c0e8a7158cd09f3041d0c03bb7dc1a1892a36441ba84a10cb470af4954d5d7a07c1","nonce":"5b80ab1ace6b4e0add668806","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"7e986cfdda7660ebd500f9b81caca638caaec9a32c8aa4765a0ef268f6a4c975c9991ca0a9cfd407cd583a4859","nonce":"5b80ab1ace6b4e0add668807","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"172bc3a81f1843724134e3a50da0099dda4f316a8900e55f164f7253a5df977f9bb05bf65464bcf06946ea5c30","nonce":"5b80ab1ace6b4e0add668800","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"a1e235e1d6142e05135b1b6e4d66a556648719f8e2729b8b94eb4f0f16e593911b02dabad8ce9a139e37f76b47","nonce":"5b80ab1ace6b4e0add668801","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"1233ac00bfb7dd8d78d427865b18658f27cab952f8d7cc82219053b663ad922be817cde39931d8941ad58e055a","nonce":"5b80ab1ace6b4e0add668802","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"074996f439738ecc4745ba16320095b70f32dc3d58302a811afe0a432e63d219085f7d05ab46da053f140ae4fb","nonce":"5b80ab1ace6b4e0add668803","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"973331248414a7a61c0d83041b1f2aaf13f5415891b7ea4baaf67d1fc6b4f432cdd3757295cf7794e61d6e8fce","nonce":"5b80ab1ace6b4e0add66880c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"44bfe1e3ebbf6b0b5a5cf8fc9f19d343defc943dfc6dbb03ab1c24e1a6a4c808abb00bbfa077f51de8c63ce8a9","nonce":"5b80ab1ace6b4e0add66880d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"a6915faa798ec8ba1af5f4f646380852f0087762fad105d22a48b0dc3276df32"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"4482bdb729df726c733680b12c3f3efedaf27e127050c68d9b319d67fcc26246"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"8c70c298303408fbac3245e766fd835e8b4f98158caa69d7e2aa8d9e840b4b44"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"50682fb87496383686668cd66ab7a85099c7eb0be05d51b36783f447352e4b2a"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"098209fdb7f854cece7449870758b888a3ed2dd409619df514d0b0aa9b878b02"}]},{"mode":1,"kem_id":16,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"870a8cd14bdccd6dc2d538e4b57fa79d2ae19657fb92163b8c2f776da0d9c5e0","seedE":"8ae414fe57a79d6ee44c6ebf03223c0a23685a9ef131513c9501803155b84650","skRm":"723323b210fa5fb49fa686e20df412f68265cccd19af92bebcd737e403c358c5","skEm":"bc2e5291d700a743050d85ae1ef59494b539eb380d99bedb628dc8195f76f138","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04ac9e67c5e737d35bf3c4c756b8701810819d6debd3068c9a6b3472a307d26dcfe00faa1ffb706bbfd40cef488c6acd57283be40654876a4ae815b8501b7b0cb6","pkEm":"04fee5bf414527ffa5c439a5b1d2e10b8941f0e577a2f6e811755f9248c4ff04610a84653887f9674afeda68b879ea7a4de0e1a1f5a1d89d358499b2d4753311b7","enc":"04fee5bf414527ffa5c439a5b1d2e10b8941f0e577a2f6e811755f9248c4ff04610a84653887f9674afeda68b879ea7a4de0e1a1f5a1d89d358499b2d4753311b7","shared_secret":"35966cf7216392119e7b6a4ec3681de9cc69bbed75c09d66a2aeebe9e1d29e8d","key_schedule_context":"0139f6011ebbfa0b089f98c9db37956a61abf9fb58427f56ada80743584c1a6cdcfbd55ffd4399433c54b22f53e40738082c9489846c4c19c08fa771b0388da3eb8c9942e377e9f72fa4152c161bfba6c407fe5ee3d6517b56634fdf07ade5b4fcb1358e1f01175ac61ef5c191ba765599e625e92cd4623fea16bbe3a0ca2db1df","secret":"d451d6013533360a86d0867a08363b3129ab1907eec7bafdc7f48f854463cdd23edd337f09bf1c62f2b4946a89cd66f5b0a67b82b5d0994f54f49dd84665d1b9","key":"1b70d145c0099c28510618465569948d","nonce":"74eb101dce2cbf07c8692aca","exporter_secret":"4676e4f4a13fba7cf74721c5aef58919003fdf0f61f07250b622a61f12ca10013c490daca9110593c1e731dba7a56e93919644000792f83441c9b4517f0e1dbe","encryptions":[{"aad":"436f756e742d30","ciphertext":"8ab8ca639da1b3355e1d3e642617745b557ccd6777d80b90c849e9a216141fa7168b2c52da7f9f8b30816d5aac","nonce":"74eb101dce2cbf07c8692aca","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"ff6472f39880630cea5115008f040e2999d6b2dfedbf3c34c49e7d2ed0abd83ec5375323494b210ad615107dbd","nonce":"74eb101dce2cbf07c8692acb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"ff561682ac310c9fa8838db48ed9cf8c5b3be3830e0b7e00cdac82a2c7e50fc39989e21a20290c5af0be57ec37","nonce":"74eb101dce2cbf07c8692ac8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"4759159f97287d42489c75a2521db52087db1e46f273cc29e6ae3426f5f0dccf89b5fcbd4adb77d3271fa78355","nonce":"74eb101dce2cbf07c8692ac9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"61be985bdadb35e1d08903a46e40b0403de965ec4885517f80d0278a185f227031bed2812512c7fc40b1e42cbb","nonce":"74eb101dce2cbf07c8692ace","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"eda45b17d994523322944cc1bc1ba58ff898b7dbf410d90db06142502f693579a1165e94bd7b344eb372e582b0","nonce":"74eb101dce2cbf07c8692acf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"668a39fe2e0f29c0d224a49253a040d0da64f7f59e3f588d633dc0b5652535d2d1ca7acb09eecbe98491140c5b","nonce":"74eb101dce2cbf07c8692acc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"406ec4231d9c26da8f59a981d5fd402c6b36fe118b48d2d98b6144c46e910eddaf6ccf27f3d8e90553402f65f3","nonce":"74eb101dce2cbf07c8692acd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"9087513b903a1c75cafb8b36e3b34fc4746a582b3c3ee6691aed29bc3c38a5bfa91c9ad866bb3a67b24ff8ea54","nonce":"74eb101dce2cbf07c8692ac2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"6c6c30d924561afd3ec05fd3bcf724abb67b890c6593b7fa7a176a397dbc8b27da588e21db36496b7d2dc7c201","nonce":"74eb101dce2cbf07c8692ac3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"f54a1a9b24d4fa4991c8468347a9b64cb8d8df08b2d4fa3688c7e907a7761ec9"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"b0a6e92e2b26d5d4db97dbecb44e4f6779d7c1722e48b92ff93c6a1099766ff8"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"229459cfb47d4761e3146b55477693117e606d26c8cc83a7937765569d3ef732"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"fbd37a00a12a56df5f88b8e0d8c20ab491915a455a66759a655cddac9bfad7c3"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"ecdbb3933778c88fecba51f0d3f0abfccd6ed2292701938e2405646191f7adcd"}]},{"mode":2,"kem_id":16,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"96cb1d99dd2d353191e179fe806c5052b93eca6e1d08d7fb3ea20d420b4a921a","seedS":"baed6b6af0f1598fe1711376c0160200b84ced22ff9e898eab0353137f0cb540","seedE":"8248b1d3bfea9c55a1ead6c9f74f010c8322fc79c683eaf25d7a91dae7b17684","skRm":"9034b047ec840a44a75c2f83c9e6a86a5c585119d2e7f3f81f8a79bc38f9e36e","skSm":"f80c28087185d38fbac014f95c38abe3a96b810d7d07b758b9df7c11a9b3fda8","skEm":"07e7a0a40594be31b5807213f8fda3139fd7716ae780cfbe9563543b90e9de9f","pkRm":"04516de058a01c089b0a9bf62b7e3be6dbeeead63aac139c4565cf93aab1c7557846a159f04fb282fa425bfc68933371594c05bd588cd11270de0d550bfbf2b02c","pkSm":"04ae7983ba0cad779487d104642077ddfdfa5ebe4b508d8a7268c448cb30a0ffa97ca34806b36b0cf66c6bdd13cfc65beef97c3909d580423b085843d2d9e6fee0","pkEm":"04803cb253106c0d23f609fd613ad0be7b5354c368b9301c87e27c479a3b64230e463fdd8cb0b76d72d7eda9734b994aafc430254ffc83cdf09ee681417d3f09ff","enc":"04803cb253106c0d23f609fd613ad0be7b5354c368b9301c87e27c479a3b64230e463fdd8cb0b76d72d7eda9734b994aafc430254ffc83cdf09ee681417d3f09ff","shared_secret":"58bf8c9c94a2eae4d4e1bdb51898352b6d9d9b5c8aa83e83b2a5b0fa465c1fe4","key_schedule_context":"0259a145bcce1c1c862714bcd04c342351f917429e57578e3a2fa684c7ed0403ba264455f90835145bd18f39bfadab2d3808163e74fc91c733021e758f5b70c2668c9942e377e9f72fa4152c161bfba6c407fe5ee3d6517b56634fdf07ade5b4fcb1358e1f01175ac61ef5c191ba765599e625e92cd4623fea16bbe3a0ca2db1df","secret":"ccaa506479e8eee3347d4e8fc866a86fddbc8e2cfef229f44ee264ec814b0ad874c5a0fbb19f842ffa1969dcebd804a064032427d5f17e0eafac3960e1811e95","key":"4595017dbf4412c6cdd873001bdc1a55","nonce":"e66f9266b90637a3099e52e6","exporter_secret":"1a5e3fa36b9d898b5efb33f9cc3a5756b1ff3d3593cbe538995c6d56541317662c0e05cfb01015434d885b061cd668b2faad5146aa2b37fa9f9da36585f1efd8","encryptions":[{"aad":"436f756e742d30","ciphertext":"fe47489d387fb3ca019da499b62c0f92dd4630c67df81f382277ddfdd4e2b4d42bb9915108ebf5755f337ef155","nonce":"e66f9266b90637a3099e52e6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"6c57cb1ec364035e655ff9f19ff0684f2fb009ec2a953a259e8268b245a2a17b0e0e4ba2401b68d235f50c240e","nonce":"e66f9266b90637a3099e52e7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"9b9990d9231ede1502308c06427acf7e857ed9a5ecf8e538338412a897f95db793a2369cbc03dbbe174618a23f","nonce":"e66f9266b90637a3099e52e4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"70cd6c2faf311338b8de25c5f46c455622fcb3c64ef887639dbdce4bbe071877098cf3ef07492df95c8f4fcf6f","nonce":"e66f9266b90637a3099e52e5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"282eaa18a3de39abc6c9805ca8e6fe5e2ae85cde764b3287037e633886d1c9b114c6c8ceee3536bb61b286026d","nonce":"e66f9266b90637a3099e52e2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"6ca49ce9ad850cb747b3e781caa27f7c6a9541547561a083b122af469031283430acd875017e495eaeaf58d7ae","nonce":"e66f9266b90637a3099e52e3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"e2f61a704ef6bd444b6fb4bd98e76dec8e159d7c08393ef0ab94847bd6535aa533e37b8bf59503e912caa31560","nonce":"e66f9266b90637a3099e52e0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"99403389fe1e378228a349752be63a52e74a4480cca9bad3757f162d65ce758dd5901393b35c5bc56f81822120","nonce":"e66f9266b90637a3099e52e1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"6736f70cb1f28bfb08b303d93ca0e3b0d5580850cf54ae9325b114f99b87cd5d8f745641ea873f2b6420a0d640","nonce":"e66f9266b90637a3099e52ee","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"085b08c0d24c0ad56a599881ce481f6788e45bd9c7b262782b4f97c36f7b65e29c328572f4220cd19b58130f73","nonce":"e66f9266b90637a3099e52ef","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"1073462594bd12498748b3fc94034b0a6b9fd0920827dcca2fb39b18ec50e9a5"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"e515c5ded61ef56cdc0343cb5e133d549af71b96b9b8a27234f7ddf728159dad"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"8e859df03e63ae48d0f832c1379ee3c363787bf3c8d15f8cce6d1db2806ea290"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"92cfa5521eb3fd6b9463da6e7e90eae0b4e1a42e6e9d0ed66c06d86917cac3f8"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"f559e3c540e8c24a9189c9ba7d03d34f1a71a588bebc7a5842065b03938f9d17"}]},{"mode":3,"kem_id":16,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"073bcc799a8bfb579a627d8f8b55e93721340f6cf5de0eb357da157374e14eeb","seedS":"17388d5f671b12ef6c67cbaa20c8608619ee6b28ff65daa83ba63212451fd89f","seedE":"3264f316c88af07f985280644d38099b0767a16f88ae82d1e6accb9da3c6bb55","skRm":"5d22f76cd9af7e6aef48218e94c59cdd099d656917d7d3725eced88438808594","skSm":"01a45893d642b80751d7a5f9b07a8225e54734336d015b3aafb6be2d8aa5155e","skEm":"5fa7728ed91abd4589e53c40c96b06e57a8c3e7bfc15d8109f8579cd36e0a78f","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"045fbf495f070a860fc1f5ca05dbc3296caa9b8af281163e766e801f920aaddd99b10505d6086bd7d12fd7c39ca14e3480bcf855fca8eec13941392a00e81f73fc","pkSm":"04fbd2e874739deba895b84c2960a9a9f2b78a38769efa81113a07094549d8c8903f661f6722d20c44ed0a271eaa35676734674c03ff3d49cd659ed4b99889625b","pkEm":"04fafac74b1183efd0274b2b1a0819a7298bbdf4f6b9ec8a1a118da73f1d076f0e3dee8decd09c2ebd63fdc7e41abb308c5f5770d743b1c7426e1412445c5e20e1","enc":"04fafac74b1183efd0274b2b1a0819a7298bbdf4f6b9ec8a1a118da73f1d076f0e3dee8decd09c2ebd63fdc7e41abb308c5f5770d743b1c7426e1412445c5e20e1","shared_secret":"f184ae42ee268c1b3fd6f25b3cfb612d1d288a4921416598146cbf35bbbf2712","key_schedule_context":"0339f6011ebbfa0b089f98c9db37956a61abf9fb58427f56ada80743584c1a6cdcfbd55ffd4399433c54b22f53e40738082c9489846c4c19c08fa771b0388da3eb8c9942e377e9f72fa4152c161bfba6c407fe5ee3d6517b56634fdf07ade5b4fcb1358e1f01175ac61ef5c191ba765599e625e92cd4623fea16bbe3a0ca2db1df","secret":"fe2d56adfa0505528204033a330498957e1f95bb38a3a035cca1d8763b0a2f97f56e26f5981002e55db28c4969ac8b25f7e207e0180f8efe63060eb1fa8de47f","key":"e39381714251f8c506bd9003337d3ef5","nonce":"d59bb13cf84f3d7ffc28f091","exporter_secret":"eab52a0c640878495981d6f9092536c9c0f95e6c456daf497670755b598798aeb17fcd057f632cd546a4ca3585c1e8297d5bf43b4e9f965a581cafd108304e3a","encryptions":[{"aad":"436f756e742d30","ciphertext":"1d1ee90fdfac8e8f3f466de3772b397ab2025bb73adcd97743e6391952a2829a8acb47e7e0541eabd612e6d640","nonce":"d59bb13cf84f3d7ffc28f091","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"c7f0eefa13a77c03400ee3fe44a0df3bce4b4eecddd93b4641d55f9d0d6e1ead7b19ba99c63192af7ea5b4f290","nonce":"d59bb13cf84f3d7ffc28f090","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"1a9ceaa63324a430c1229a6228926e654f419b724a963bbd5ad29b9e00b7c4ccb96a957ca8f910c4e8c2481d9d","nonce":"d59bb13cf84f3d7ffc28f093","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"ada59014cc67211d0a231f710ce1e5d22fe36b5cde2e1994306eada30925f76d6988ee9e2419f17a51edcbe07b","nonce":"d59bb13cf84f3d7ffc28f092","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"ffdcdcf7713b25e8efd42c2cffc2bc57956d55375042f5f637649b3ab2c2c55e00f51d13b98db6662bdf705a18","nonce":"d59bb13cf84f3d7ffc28f095","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"b1e70f34192b4b21f0f9a44d4777e47e1320d1ad7d8a6c354c328f74f2e25065bfe42e46c91be5078602a65e84","nonce":"d59bb13cf84f3d7ffc28f094","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"82afa299d920cff2455853d8d77dbf171e6a27e9feba17dfc0b970099fc947279b29a9e5d5cc26dc82c3407757","nonce":"d59bb13cf84f3d7ffc28f097","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"179a48012e1ace22453a1ba4fa6799941561d2533a7f565138a6c06154b72560607cb3ed081ad62f3eea9b301b","nonce":"d59bb13cf84f3d7ffc28f096","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"e09c95f999d1abd544a719858a48b7f173acb652f6baa3171fd9a1fb2dfe23a4405fc24798ae2c13223780d748","nonce":"d59bb13cf84f3d7ffc28f099","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"52f1851ccc3ceb55030e1743822232895e7a932353c08daf4cd1b387f1bbcc74cb8fcd4bffd517b1588f9da35d","nonce":"d59bb13cf84f3d7ffc28f098","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"4d75a3087f405aa27a807e013ea6d94b4a0187473c3238452a5e3d4da572d1f3"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"a9f5799567d926c978bb46020dcc89f30ae8a661babdcffc6ee5400410bf6d02"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"e48871ffb1dbfb34f7752f5a26ef4aa4037464f43faa3efe35362a933d3d927e"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"71848e967d641cfab77715c3a0f7b4c8f538e9b5fbbb115862b1fee3953b618c"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"784f5f3ed53b73257b0d7a16626d6647328c6b67234460a6da534e4cb14225ce"}]},{"mode":0,"kem_id":16,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"823b066d173e0168acb1b7aceb5b008f8c74bb65b18aa35742c3cd3ac70b5eba","seedE":"e16826415ba7c26b77b5090f52377d807bf55b6f500665d1f499daee41d52a07","skRm":"bd8186f046929cf3a8fcebf955c509cb9579dfcb46a6f27c2e3abc1f52baf161","skEm":"2201d77263825a8bd14b6622b4bd8d5e2b6f6a5278112a5f245e5555658e9e5b","pkRm":"041f88bf27edbf094ad864786ea888df8bf9e6856be90c38e902644d47a5fb520c1c146265694d621d0566617bce231cc4d2426cd7f227e126979fe0d567699075","pkEm":"04e4ec14c319364dabd7ccbd5226d757f54669ea7f2755f04a2cdc666167ac3029d44d2658f62df1d5bc4f0662e1e24fac052e34dd8008298a37033ada2f2a4d5a","enc":"04e4ec14c319364dabd7ccbd5226d757f54669ea7f2755f04a2cdc666167ac3029d44d2658f62df1d5bc4f0662e1e24fac052e34dd8008298a37033ada2f2a4d5a","shared_secret":"97f4834091cadf76c1dd234bff67271c77a65c833d934079bb649d040ba72c58","key_schedule_context":"00e8330716b34bfee8656f3e44bdca33abfb241ebd1f719547077656dafcdd8aa74f7156fc99d5cdb20c0284581128d5e18c0a1d9b1ddf53abc0f2c8160ee0ee11b7ecf6aeccbd7dfc9c4f8d6917caba5fd2376a4071a3ed8962f1442f25f34fc2addea034555e7302f685312d3149c4c044a5267eadc7df201c36caca1d871117","secret":"4d906cda7d0b42832fa1cee0b1a6d887571abc52c76edb68054346c7e8d607bfe5afe75b6597a9e950ea6cd99162a2f2acc1404ec8e35587f43deeff8789041b","key":"74459357225bf4680f0dc49080cedaa481f23ebed1c83306761571115e752db9","nonce":"bb8c3ea549c3e929834ac2e1","exporter_secret":"07818080f9489e29bc678b288c2d0500bf5a7c20fb2f26af9ae479316c41afbd973102bcf9569a6251a5a999b543f6ae5e3ad23893a075b03bc4e47d37804b4b","encryptions":[{"aad":"436f756e742d30","ciphertext":"15e0b24708b59781ae373414f0237f86f925a8796ef6615697c846378df0e89c8de4c7b99e34c943a015876b4e","nonce":"bb8c3ea549c3e929834ac2e1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"2a3993a1e21435ff9874ee0d1e7844bca7faa62252af50b835b5a81b4e1aacd664106d69b13de3bb8776a2a56e","nonce":"bb8c3ea549c3e929834ac2e0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"8fbbafd491d0291507460ee8809d70d8098cd21b8d9990d6522cebf78b1cc1455be6f1d704ad92a2a5c99016bb","nonce":"bb8c3ea549c3e929834ac2e3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"acab75e848f0b9083d376c4f52c4c321931b1128abf5e9170a9119b36224661bbf7f74215b76337ab7af5225a5","nonce":"bb8c3ea549c3e929834ac2e2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"db1d91250fb426d5cb058d57f24cd5959bc24a3d97d02d450a5bf7467d0da1eb08ca65fe61a93a3feaa163b33c","nonce":"bb8c3ea549c3e929834ac2e5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"046f4d1a90cdbf90144601291227e80bb5f3223cc9ef153ba6bad652c6271d504b0744ded54f1f29423bb95408","nonce":"bb8c3ea549c3e929834ac2e4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"99e919f27944a55e2258d41be15dfe6db081614154e80f42edf50327b8776b079464d94e918c8126fffbaa79fc","nonce":"bb8c3ea549c3e929834ac2e7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"9f8cb6f84fbab34fc7d3a2fbedc653be7ef8037b193d8e67c4ab7b898ee2904bf4d6435779b5100a8a8160f797","nonce":"bb8c3ea549c3e929834ac2e6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"2b376c1cca925dd09e3db76a30815e2101f0e0658c50cea4a33ea235d4457935f5450339392920eb59c544a70f","nonce":"bb8c3ea549c3e929834ac2e9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"466eaee3885723790c5339b540b0e774ba2b804df0d7b59befef953f31e4af30867006f67f457c4a3d68e9e540","nonce":"bb8c3ea549c3e929834ac2e8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"8155ffb4381cbd725f37644e407bb80c346219d4ffeb5c8b840e52cfa3fda07f"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"941d8a95a4caf16af00b14de59625ec7e5e134e9403e5ae5b3abb24a6209335d"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"fb2ca41dcda93b23cf0a64a0521bb716946a9417af64b25a49d5a03b8a3fddc3"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"3e1598b904748454c741d4edf01e601dace2ce2b1e100afcc2c59269f8f680b9"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"9697f97c5a38f4f817cc601d53cb4e152cd505962ef4de2d2680f034c9b662e2"}]},{"mode":1,"kem_id":16,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"0d39d962eb25e8e407533a3f13d29002d57c22bf281c5d92cd49c761ab6316b4","seedE":"c736963dc1680fc7ad621ac9157fe96a91cfe56646faa3a55b73642dc32c2959","skRm":"c2493a2a40c1fa4bc1a215b4ffb3ec9302dbfb96a978873c82f297e8dc6a2fec","skEm":"2c8bc2e74d523d3c8e8287de6b3ae318d5288cd61c485d1d5c8e5f0df752f29f","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"043ba228d14d191ecc14e13699303d7e159df32c9cd2e1780fdf3890363e47c46119ce0e79ac9b00e6ec26f6f6f018ffa6891976bdf00594ae4bb07a59df765eca","pkEm":"040959e7db67c5186a55b37d33a687a69cd2c8d1f9c1067a225b94d71d2697551af10b9c7fc67371df549ada6e01e740486e5d8bd23b0ff5ec282f38c94935e7da","enc":"040959e7db67c5186a55b37d33a687a69cd2c8d1f9c1067a225b94d71d2697551af10b9c7fc67371df549ada6e01e740486e5d8bd23b0ff5ec282f38c94935e7da","shared_secret":"a84774515f7be05fee1405b85fc89788d0db3b823a3469f105be9b6ef84c37a1","key_schedule_context":"01e4a0ff05c4c44e507f4dcfa55d959d4aaf010c069a4e6bb356931f3b4e1558b707f80bbb91ce7f560aa3471f09ad08d1510fe711d60c9fef568b977d067b7f26b7ecf6aeccbd7dfc9c4f8d6917caba5fd2376a4071a3ed8962f1442f25f34fc2addea034555e7302f685312d3149c4c044a5267eadc7df201c36caca1d871117","secret":"f4a7427fa0beabb240bd5eb011ab2881b4ae1f8b1b2a5f5bfbdffd41ea38d47f6271426be714cf98e30808e8ba11231e5a49f8cb22e31e5ad11d561a32bccdbc","key":"d64cc5cfed9924171b7528428190807231129c715b3bf48360fcc37f219038bf","nonce":"8026340c8e646b552390241f","exporter_secret":"a6f80bc3216d83ba16666263fd918fd311a94fb96db51d73b51854491d63b1acc67228b1fb9646b3f3360e6e4d70bccdd1a50b41c88fd87f22beb46367f03d14","encryptions":[{"aad":"436f756e742d30","ciphertext":"0907b2e45f9aa98ccb84020bd803be2bc80f7e6b638e9d660f42f43da600ce77ee0dff0bb79d93c191a37727fc","nonce":"8026340c8e646b552390241f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"c5a2afa5aac499b87da61700f9315aa7969023478a8570977d9bc1a1fa5803f8b0e02afc05a61729ea6ff1472f","nonce":"8026340c8e646b552390241e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"3adb63d286bfe9a403e1280d058f6e820e1629bd20c01cf7d2cdab0e4d866cdc013cfe457c98ee51731d9c1725","nonce":"8026340c8e646b552390241d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"49ea188a5043c256b2553cabf735da62d10faa27cb93a15b8f3e915ec4629b8ffbde4fba3f08781dd0d105035f","nonce":"8026340c8e646b552390241c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"3ff6732fec15b5aac4d07219674a5115e7e69b6e459653cd43c7277740e6e53be01ee0fd8d1b37f082517722e7","nonce":"8026340c8e646b552390241b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"e18987a0243dcea73f2f9dccc5186643d82e81cf3aec2995a669b51028f7070041dad3eb8cd7251c723c72f551","nonce":"8026340c8e646b552390241a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"0d4304922728a96e6556ae4ee45770649be76e40c68bbef5c7f0ae7265c3e123f92fc90510d307aa773849c6b9","nonce":"8026340c8e646b5523902419","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"a04d7167c74962b8b487c960edc1a59648d7519a7d0ac174c8567aea43aec7a358f5dd3c550ea5980120e4b94e","nonce":"8026340c8e646b5523902418","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"58ab1c57c779102d08f195fafaf1955816bdf9043e6c84b494ef0faa1a5065d5d02e6046d4927b94dafefbb222","nonce":"8026340c8e646b5523902417","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"cd3dc890d8b92d7fcf0e6e8beb31833d47bcfa3b59f50bdf01a9802f7a47d79f74531f19be018d3a61abe46a49","nonce":"8026340c8e646b5523902416","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"9965b97fadb989cee8b6f9f1bc2053a066abdf67f54a5917c74316b02e86d204"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"a40bc38276675776a5c711d51b8820be971566860e111a94449313632c86268d"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"0518b2cc37983aa48c082b41f86791763def1f11887692d650b8b15131f1fb43"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"208c73c2e0c70696299d5f2e542b2b10ae3cf039329285da49c97d88196b4122"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"c2cd22bd68f76ba7c5b0900f3493de44279cbb9087d849f359eeedec3416bc39"}]},{"mode":2,"kem_id":16,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"91c559c9f16214fa1f510968268e44a7ffd8900ef2228682234a30601a36fa78","seedS":"7e3d27ae13ac7b93874c249a441b2d400b9118b535288a3990e454179c8df73a","seedE":"8a2b215168adbb38412886f628522efe73a75b825e4cf4d0a4d6d8e75ea422ca","skRm":"91642f9cc9af5b4089183bcdcf844099905c7e9be2d74d73aed86f7f4714e0b5","skSm":"917df5e67eca044638b4ca5b136032f6bc4e0b4fed93b59a8b1c74e299eac71e","skEm":"22c0c29d845e608f62b3762e08fb042985856b52dbfbe9e5708befa346956896","pkRm":"04e2562b9192795edfe26bb0b520f9a9de6ac9138f6985f19098f078791efff5f470ab482311004b89f3cceedd6c0b117ec9b409b636f5cc289b2066270088aa92","pkSm":"049b9b34f68a06fb790685cfb3b5072e52bff8abd804644523047d060fb29c11db56e4d03d79a5475dfb6b561ecd929459644fddd69d8d1baca04a57d168ba861e","pkEm":"045a0470ac0d6a0043c004a8e7493c3a9c01ea8e71216313810f44e190f84931d63e0807683b8a72dae55b222fac17217495a75377dc3928ab2c5dacaae1085911","enc":"045a0470ac0d6a0043c004a8e7493c3a9c01ea8e71216313810f44e190f84931d63e0807683b8a72dae55b222fac17217495a75377dc3928ab2c5dacaae1085911","shared_secret":"5f312de5dc6fac555ab65f129f6238777cb3603f5fdd186c6745f9cb1aec6343","key_schedule_context":"02e8330716b34bfee8656f3e44bdca33abfb241ebd1f719547077656dafcdd8aa74f7156fc99d5cdb20c0284581128d5e18c0a1d9b1ddf53abc0f2c8160ee0ee11b7ecf6aeccbd7dfc9c4f8d6917caba5fd2376a4071a3ed8962f1442f25f34fc2addea034555e7302f685312d3149c4c044a5267eadc7df201c36caca1d871117","secret":"77c2831192e3a97d3e51ade3ed6014b934ca1ed71a63e34e0f5460e16f7211bbdff99f47e47c8ed3732aaf3a6580b9f223d400d81c7e68f5d8be54527415c72e","key":"4925ec670ee559b8cf0fc2079764e0726032dd42f4f80668d50569f4d86203b1","nonce":"ef53cfa9953002266984ffbf","exporter_secret":"f6a54d28700c7ce83004fa3c6fdc6b8b5dd0a086eb8edd27307a3a1e87697b8a8fb4bc396f9c5714255657e119f7e7d8dd5bcdb8ddef2ae3fbb2b99dd0cce8b8","encryptions":[{"aad":"436f756e742d30","ciphertext":"38306c8b3e305c2f7532cf8d73e9e3eeb35b02ccee260ecb83cace47e3cfb19d5c1cb1cbe19878c824115ab738","nonce":"ef53cfa9953002266984ffbf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"d6c58d00ef640174967cb3b0b82b1e501159046d17efea5f0c70ca35c9f2d6252be6069733abe50d947d254c8c","nonce":"ef53cfa9953002266984ffbe","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"7eeceec6fa3a3d85d9bc7200dc9e7a4b35c3508d0d58fd2f1c560caeb4ec6c71ad34647bb68bb637e35f4c82ca","nonce":"ef53cfa9953002266984ffbd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"2bd75a62994429aa7812b78a46e3460a39c6aaeda14b105805f5631f0e3eb26115e8c61ef00c46cd10620f0204","nonce":"ef53cfa9953002266984ffbc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"b10df0748e7ea9bf126f4f949b29ec58dd18338f46d6e71bdf6716ebfd4b26dc158013a029bd4990a053b1e9a2","nonce":"ef53cfa9953002266984ffbb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"6bf6cd46ae7a8e044a07afa178d135132654a0303c6b69d995f02a4f58b520902cc80c92910ef72f4338999e42","nonce":"ef53cfa9953002266984ffba","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"fd2bb67290111c4d327ce3fe4d911386d37e0cc0cda7fff6105aaa479db1ea0f8cd97758b763aa66672e0cac50","nonce":"ef53cfa9953002266984ffb9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"26a7d60f71a763963c3b23e536609d6d117cddefc96218c8dfdbde3b9aa4d5c4727953a086252252f5662c3ff8","nonce":"ef53cfa9953002266984ffb8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"6e98dc0cd3fe6955ea589432a219cab45a8e92208994b01b5183adfe5919dfd0aea75571ddbd7e0c879cb868c0","nonce":"ef53cfa9953002266984ffb7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"9c69158b71c6bcafd03abb6c49d21b1987771f8b718d28aaf3753291945fcc706323e6fe217645bb46660c6ef1","nonce":"ef53cfa9953002266984ffb6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"8c50d3135e9154a881ce13fd624ee6979d74ad2bee4099d1bfb81558f898317e"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"3595536eeb1c8602b026ed7c0f15c0c4ed41d741413a6fdf01dd7f73539b0436"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"aad5db30e02e3fd6a428c9a2129da0664721e72683e0c0044893cd3b12a8d106"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"76c7bb6e31e4a0a6d3899f33ce95bf489e60e9b8b0155381c6f863df7b122ff5"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"07cfe70e6e8dcc27c96a1608060ac95514703f4e6f8382b380b74f10794a7878"}]},{"mode":3,"kem_id":16,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"0918c29592520a9e0f2235dff2e10485109df7364dccedeb3d30131bae0d6d10","seedS":"031b5b0f9493f5b26ce5587f9469861cc92ebe974b3e616647901ec9a71213e0","seedE":"bfb18594e78811253ad4afb6b9397df93d60c999cb578a978d6fc8286547efb7","skRm":"e3e50b41326db961884e59bd5247c139421f71ef41bf67b0671324c6a0a9d988","skSm":"d3d3ad61b5726824bb60b6cd14ac727bba8c8ef64b82e3ea85915785cff45e2b","skEm":"a01f97c8932f278fc87f3748ace5ef25b7058eb3598648afba9a47b558b0f37c","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0448c1c88f2e794ad1cc6e8dd7e03e04621b1e14c4bbf15674c2ba480afe8b643bb57b2d59d6c5a0c821b1dc488da1e09b7a620443b259f066a7b5436aa769587a","pkSm":"04ddc0be02367cd9fac492b54c70f8baaf129f118a11477a05d4d36ed5395b779e26ede12cecad3e5b760f80f501b5bc1e6eec5ae6d1e381b6ab233d39b01589c3","pkEm":"04549ec8b01dbea8f120a0ea1f0c7d3c30ae3a77ca894df5a44517ce06c86d68c0d3e0cb9fa51d334c110965cb731ece0442ac113a149aff8909c756a182449e88","enc":"04549ec8b01dbea8f120a0ea1f0c7d3c30ae3a77ca894df5a44517ce06c86d68c0d3e0cb9fa51d334c110965cb731ece0442ac113a149aff8909c756a182449e88","shared_secret":"2553d5ce79e9be7d4da87249a3cf0cd337123466842769aa7ea3ce722fa2f5e9","key_schedule_context":"03e4a0ff05c4c44e507f4dcfa55d959d4aaf010c069a4e6bb356931f3b4e1558b707f80bbb91ce7f560aa3471f09ad08d1510fe711d60c9fef568b977d067b7f26b7ecf6aeccbd7dfc9c4f8d6917caba5fd2376a4071a3ed8962f1442f25f34fc2addea034555e7302f685312d3149c4c044a5267eadc7df201c36caca1d871117","secret":"c05da60b4428de2a6723ca99450fa6ec73d6a7cd4902de4349960b0930d0e1b7994d58aad9acf3e360ed7774fc4438ab69eacec0b5c82c9c74b747d90d90d85c","key":"30c454a430be91820d1113b61a1ef329e11e33a3bec177a8d7e10f44b00c788f","nonce":"566575c59770a2b546bc87ae","exporter_secret":"6e66824813080c65b95dc0da510a806ade56e975a744f9a6b78061b13e5adeef167ad004430e1a8f9635b34fa1ddf348388c44d181a3f2a1841b7817c010f7cb","encryptions":[{"aad":"436f756e742d30","ciphertext":"1e0c65d8d42ab9af6a25ba62f269371f98d1f36878b09a9afd4f477ee7250902bddd4c16aeeaad06934ab8a0e6","nonce":"566575c59770a2b546bc87ae","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"b6624f14a6160306546181dddb832dfb3587726962e26819f854b2917faf9052b3dd641c21bb0d34ffe2e1aef4","nonce":"566575c59770a2b546bc87af","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"eead5db8438b50ba4eb3fb5c08fcefad66b3fbb07f2d84e751c6a9f49f754a860c77f8de71b32d53b3e794e84a","nonce":"566575c59770a2b546bc87ac","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"b3314287fd573edd49bc56ddb220e950421115fd5cba5c84dfbc26bd4b5fc80647450533fee66115a46b755422","nonce":"566575c59770a2b546bc87ad","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"8485d31052e46f016b236320caa6b217361df308171620f33fa5708010f7e839e1526ab24a8384e728b94ce9f1","nonce":"566575c59770a2b546bc87aa","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"ccd4bf2780428d6fcfb6a33ca1b99af4e4c4fcc5696f5361531d0281f26fbf37e884f081deaf84acdf4f832e47","nonce":"566575c59770a2b546bc87ab","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"fd8f0933ec05cbffc1d07cb2a87ce9709aa3b61b8a46c1fe159fe7d0e3894e3878c4b988529ba7a0d2503e0357","nonce":"566575c59770a2b546bc87a8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"f16c39cd74597c3a6e761f7b4f2775241e5d780ddce0a24614d6c4f07b6d0b98f06d461f37ddacbedf06ec79e3","nonce":"566575c59770a2b546bc87a9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"5baf72e19e0bca137649c039f6329170c08d67e514184e2b2e6fd41d8267d4b1cc520043b1afc1a9781e2e205a","nonce":"566575c59770a2b546bc87a6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"2963b4bdd359eebf21ff47b934509351a3270f55f6d9ab640a0075f5c9f1e8878ce8f1029bdaa3f234f3bbf334","nonce":"566575c59770a2b546bc87a7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"33db496ee718d283ff4278a60a89b68f9d06eb11365aa969ac0f5160f964a68f"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"9545bb91de18940528abeef20a65e0ff882590577017dfebbc9971eabf634046"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"67299a96335b0cb5981f1a415af645ee23bc27a6f06a98c0f50e8bdab49c69fd"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"ba1fd2546c1912ae9939d41ccea4850af0eebba94ee19ca2a8fd5642c45f6488"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"0415931b9f7b16432416dec16f8861436eede89ef5a46fed7f14a2bb816df331"}]},{"mode":0,"kem_id":16,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"b061f7e67feb0258e7245c8f8e473a18147a08060cb628a4a03f356ad2514f83","seedE":"864162263c95aede0f3fd2fac213e558810abb738291357eeafb332ce5291d26","skRm":"0440c3774a5b8e4ba71ce14baa3e1d12158b9360f962981554f28635a1fa5fa3","skEm":"5c554094a0b8a278a50f1e4f1aa9b6d024ea2b9b4d6468a3aa772e15c74e84ae","pkRm":"0475cc672d5db040b187506cbac6947bdddb60b0466739b117cf7b07bb679265337810e3fd359a409ccdec9b58682673ab7dfa969235ff0f89228f77cc16cd8811","pkEm":"04e93e5a08c8121bdb7a4c2966168a614fa58f8b7a11555ccc4bb3607087d674941882218d2c06166fe192fbf8cc756ce38875b81d05da6c7fc62e9fe5ac8c0c4b","enc":"04e93e5a08c8121bdb7a4c2966168a614fa58f8b7a11555ccc4bb3607087d674941882218d2c06166fe192fbf8cc756ce38875b81d05da6c7fc62e9fe5ac8c0c4b","shared_secret":"0ba5ff925f0c9aeca983d45b8ac812f721de185d1849c3cc567a9c3bfeb4739b","key_schedule_context":"00e622bbe03266624d8ea93c7d97d8be642f4955d8060d0ed7709255fba73356f48218480f1abfc9301b90f167be9779678624e6fb37cae923ff09a806e31e438ded71e9dde5769168bde996f6ce2fecafea09eefe04952d6c75fa87906c921b2c490d7b953d7ebf66f1ff7b81e80f150131de0d1b207e4d9209f185ae4c886e4b","secret":"79b68d94a06a5234a2b2b75272d90c92aea77f23bdc11e59a8b1c23e6e8c4b566f32d2151be767882dd12653ee152e5650402de20d46939adb81d54eca6d8ac2","key":"5e1cb61e6c8b468f22c24831489bd8471f10c11a3dac649eb42d49485d7687d9","nonce":"d708e8765ec29e285e1ed350","exporter_secret":"98b16f709c8ee264e881c07282ad5f467087558eec6bcd45307bb6ad36f037b1b7b3b004ad3a034c664730c393d2ae8b0fead816e8785360d23d2cfef5401dcf","encryptions":[{"aad":"436f756e742d30","ciphertext":"47db3b0aa16fe85b3b127e6e860a648e26b2b12b20b3fc214226187cdb6b7729dba11fb1a8576e0fb6d2785eae","nonce":"d708e8765ec29e285e1ed350","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"93a5b2c72fcd34c700f9c7b5f989c2ae39a5d77f1b295ac447a5bad197b829dffbd55d4e5f141c9c61321401fe","nonce":"d708e8765ec29e285e1ed351","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"041f70672286d27c8ffa2778edac385b446768187e2da99d7fffa06567ec2641ad8d61d1584bb3f3906eb87b0b","nonce":"d708e8765ec29e285e1ed352","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"7e0b239664bc6f3f7486770285663b8d6c4f04838c22a885f6db7339ca6323e860f2db05c3eb2eb9fd6c710e55","nonce":"d708e8765ec29e285e1ed353","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"b785b4427b1d16ef4e18d8a0e7c003c4111d9975327033f087b553be33387c46f2af976172fd7fe1027d527e08","nonce":"d708e8765ec29e285e1ed354","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"65ca50c2c9b11c1486333590db3af5f96f3e5298ce8cf783af01a668c85e38c7563965757b63c4fd7ad1eb707c","nonce":"d708e8765ec29e285e1ed355","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"cbc72079b4bfbebd3942fadff28bc28c6a3a01cef85588b09fbaddeaad7ad5b836c52fcebad22d89fc36b88744","nonce":"d708e8765ec29e285e1ed356","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"ce2a4a499a0fab8c93c289eb1494f95f6dd190c2ea133167bcb3ecc11f8e0a0d06951ce5c02dbf5d1dd3ceed2a","nonce":"d708e8765ec29e285e1ed357","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"390d4ed9960fb9cf60618b93e938150beb99744c9ca56b583986146811160999a7cde9e141facbd07ac30c9b8a","nonce":"d708e8765ec29e285e1ed358","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"bfa96928e2e8236e87d2945c9eedfd6c440356f03f615fbead2984500fd82909b493c354d5c96fa9413f4399ea","nonce":"d708e8765ec29e285e1ed359","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"28b8663af3815617d7277fe2fe970c90f38db4c3af17692679dcc4653cc8da4d"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"3dce1ce3315cde15840a6a4b3b08b43dcab5791c8f842550e91405322b8ebee4"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"29f45577bc87105b6732263b3a8ce44eea68cbc4d1f82fccf1f27635e6223dc7"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"d8881a85d89809789e58b91f57f7a92ccc6b9bdfce7855cd431d3ea1dfd9f5f6"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"73cef42867956f369ba10496d24c5ae2da9ea736f08a46579f08525015678c31"}]},{"mode":1,"kem_id":16,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"7829af997003dd82b9f58e2d284699307f24dfb631bc44355c0db6221cea8ace","seedE":"59d9c10fcf7a238b6d7f20851223502f837a0a677833f2b0938976e94d3c3482","skRm":"a81ea9d321bff794554cbb80cc6a640f120d05170c59b597473b761fec5f3b3b","skEm":"628fd86ee8203b5b091940e726868b4f1d065f9f4802f10bb23c19581af72a78","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0482838e233d0972b052a4a3bdb1fdb8e0f8d909211b8a4bac11f49898a5a60ea2873c7a9c5e292b13f57d7c540b6ab3234f5b62cc10ad192d2a974f077a4feaf1","pkEm":"040b569364ecf147dcfaab27c9f32b2d372a4982c687d176a9431a5a4a0d735689261f3f7df13af7ba0f488f33cd277067eab8a1efdffd1a652182601618bcf53c","enc":"040b569364ecf147dcfaab27c9f32b2d372a4982c687d176a9431a5a4a0d735689261f3f7df13af7ba0f488f33cd277067eab8a1efdffd1a652182601618bcf53c","shared_secret":"61bda676b0b45bf76d4490d7f32fc88b5e98a985834d01eca40c2425dcaa3863","key_schedule_context":"010542a7e0afdfd9ca23b9ac7c0331b7593a8505a183a605b94c4b91f9e3c55aaefaab5fa4bfc63e4f27f242c8ad3170fa0da038c1d60aca18b949cb6047c56bf1ed71e9dde5769168bde996f6ce2fecafea09eefe04952d6c75fa87906c921b2c490d7b953d7ebf66f1ff7b81e80f150131de0d1b207e4d9209f185ae4c886e4b","secret":"acca99fa583f5cbbfe380c5b8b8e563ff5660babb79a657efb80c4b119cdcfcda8b8a899b6f38b257e09a892d045850e9be2f9b65a66212a65263707af987102","key":"6637f8affc276bdc902a0aafae3d89320582e01267dff1bab50cfdc86dee749f","nonce":"5e6008a2187680e40b02dcb5","exporter_secret":"98593091409ed29933c6d9f2d66f48c7cd079f32a6581ae8f825b7f24fdd95f1f5585a09c8f530872808b90b9f0f30bbe32d6eed5cbb9fa3a2bc7af316d90ed8","encryptions":[{"aad":"436f756e742d30","ciphertext":"0d02aa8cde4281cd95faf7b45ed59839f7b115d69a2f9b71f0fddf11370541f2eac9b6945e759da39cd1bc76c1","nonce":"5e6008a2187680e40b02dcb5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"9c93f3da62d7ad7ee2a5239e66261706b3845dafbbb31af9d4d81a99cbc784764556a197deaaff37007b454455","nonce":"5e6008a2187680e40b02dcb4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"19459000b301b00b8c203614ff9c285f33eaf26b67ec0c1a633ad948eee028189c4c6643fb579b95f132d4c9ac","nonce":"5e6008a2187680e40b02dcb7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"09dca54f0e438b51d791fb38536cb2af9d43140705718a4da8cdc98638313e690aa991e0c485cbf871bf7762b1","nonce":"5e6008a2187680e40b02dcb6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"17f8d4ff1c94551cf5ce77bd9536c6289144bc2cde44adf769b48b2d4b0fc86c19f1922301a1b918a0bd76abdb","nonce":"5e6008a2187680e40b02dcb1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"d7c5eb6547c0437edfada6836a6b7c68de48989a90e05b84024f9cec4dfb44b6ae7f970bc3afaa772e358a4548","nonce":"5e6008a2187680e40b02dcb0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"1408f897e06c317943156ff2a7d0f2483dc209ba1d0ab6a6bd7121058ac89b96e2f85f733d563f62cc4dac619c","nonce":"5e6008a2187680e40b02dcb3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"236f968351ef1c24be45688cae77b72f9e6b57ee7672d75fd98a4079a7db6b9291ada14688a3e47f00cedae5e5","nonce":"5e6008a2187680e40b02dcb2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"bc9e909cfea67b70030b39a7c56325dfebf00657b1356aec8213ca8621205fe779356c8fe58e88e175be012edc","nonce":"5e6008a2187680e40b02dcbd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"7817f9ffae65ac104f067cca0568a03218bcffaf18703b20f7973db38b82cc42ab66c549dc840c5e1e541339bc","nonce":"5e6008a2187680e40b02dcbc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"9ec938833be379f35306970221039fe820853e68abe551fab0e5c726cbb36120"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"e578cd390df78aa20afb39f41a139a1c12af6c2bc1d588bae94be1ef80918378"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"85890887caf203e632929d29f01b70c5d2f358cbdcb585367f4a5ceaf08f9a97"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"4e2c6d13969c6bd3422e5737ff87f8ee0b3a46f0e92b395e16cbab28b7b282ca"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"0a377edeb68f9a223159e3646ab7a12b320e479d80adae9c09f5eb3f79736d1a"}]},{"mode":2,"kem_id":16,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"3975483e6613099b12c9aa65a69dc088918305fce07e635986a5c47a70a77453","seedS":"0ce38851fe2134a68730f84063413ed0bcf1707dd296be62ad34c739ba31dfda","seedE":"e17192a4e1a863a7b4b9e985b59f9d86281fa578f68e8e5e7a0919febff51b32","skRm":"9b27a25c90b9b7b3d00ba9e310028ed7c40909853c3e432c1a9e81ef915e0a5b","skSm":"0d20b214444aa00095b7b982cfb34003ab941999a7d78abe4c3aed79114a75e7","skEm":"f69e98cecebf9a188f1a9fdff538c207c3f7bd4cf111b90cb5d1b5b0e5422d15","pkRm":"04fe1d93e77b4bc8cf3a61ab0329a3b3f8c78abdec0d5870a935e5f18905e3f86f4071515fe974e6157c96645d036766e32ed4d9483bc7077a15c98a4bfef91038","pkSm":"04b6d4ae3f5691816d76b8bd8900af2f8f111117febabb3aa4706ad0472147828223aef0fc9ac1bb6c1e4612301d907bc29e254294c9edd0619b8bbd1b9a93bde4","pkEm":"042c880802d69ff88b24f0b34dab3546b6505554c722cbe371d745169835df37757f9dcc44db2e4d03e08746da5cb0e9272e662589df2e1d1ce670173f3e0046be","enc":"042c880802d69ff88b24f0b34dab3546b6505554c722cbe371d745169835df37757f9dcc44db2e4d03e08746da5cb0e9272e662589df2e1d1ce670173f3e0046be","shared_secret":"92e2e215c1a83d54639c2a1cf809b78a6050765b9f84cf81881d799c6f8b5dc7","key_schedule_context":"02e622bbe03266624d8ea93c7d97d8be642f4955d8060d0ed7709255fba73356f48218480f1abfc9301b90f167be9779678624e6fb37cae923ff09a806e31e438ded71e9dde5769168bde996f6ce2fecafea09eefe04952d6c75fa87906c921b2c490d7b953d7ebf66f1ff7b81e80f150131de0d1b207e4d9209f185ae4c886e4b","secret":"67791051cc284d16971022e4140dad5ebe435fc27067e882caea13272968a75ba054045db86e08066b6ea14f4982043efc560144bd12290751194dbbb85f4961","key":"8eecd47dfa050abca604ff8aeea71df7aa20f2a61ba650e93880160ce781860b","nonce":"dba0aad9cdfd91c3e2bdd9c7","exporter_secret":"9a2e52b3b2f54c0e8f8df55e805d503f09ccd8851f1fb860c0f48ef53169e3a0a6fda981e25a30242d2e4dcdb6cd1d50eda739ae3a9a754a019cc8d18ef02dab","encryptions":[{"aad":"436f756e742d30","ciphertext":"cd47d6b79271dd65a95e651f1594e02de22fa6c6ca59a1eb7335d2c3568f5a37d787e8da6bb16713b07e1920cc","nonce":"dba0aad9cdfd91c3e2bdd9c7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"89d4fb73d7fe464ec758d4076ee0d3a2bb00d25b7ef903acb3871eba1ac1aab119695c53adba8b819176114b69","nonce":"dba0aad9cdfd91c3e2bdd9c6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"692c684d791f6672b1a377f8f17499082a9bb35f7d98589951fdbe6b6dbc967ff6143b721abff9565133ba33ac","nonce":"dba0aad9cdfd91c3e2bdd9c5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"a3d130c6b42477bf3891c4e33c1ade1587c7b33bd1cb2257a1e6abf24414837ee1cdf68beef7af89b274799a14","nonce":"dba0aad9cdfd91c3e2bdd9c4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"6011032c0492384cf8e0104269fd7e89083f4b6a779eee49d14d76a61679fe8aa3434ae9e0cd2e746bea94bc50","nonce":"dba0aad9cdfd91c3e2bdd9c3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"7c490437c971373c093f387b58bccb4e43b67f102dc768311f757a22e0812b38b9be64f4413b34cdff8a13f01f","nonce":"dba0aad9cdfd91c3e2bdd9c2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"2c0b07b9150c30d997715c1538923ca5c825c01ac34dc8ff1ee3747f8b29fedf298658661fba5e707945462434","nonce":"dba0aad9cdfd91c3e2bdd9c1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"13e6520b3a152ffb90181bd806b6d6b15c470340512f017a45fbb2123d3c910a0db8aecc9b29163dd1ecaaebee","nonce":"dba0aad9cdfd91c3e2bdd9c0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"e656d5157f662d6958b2f5030084a4f0d77a64b811646a4938bbea17a8ee0b3422a1e186451ffa5d08610994b1","nonce":"dba0aad9cdfd91c3e2bdd9cf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"8b147757b8eddfc5689121627278b39ece9fcabd717df933b116a2ac408e1f11b61e1eef25485551a772583d08","nonce":"dba0aad9cdfd91c3e2bdd9ce","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"03cc00d46a614895cc3be43b10245e1b35dd17a5600c66bd2cf0ef37071040da"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"9ead40dd07b3c1b8617c853ac965f6aca452ede79808239600c04d75a30abdd6"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"fe2e2794ee74171b3d44c8d2a65f4f296c5e1d3da2c6bec9df6456c8d9bbf6b4"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"3ad099547cd3209ee8b801299df44274252607496d6178f3a7eb32c0f4ed9773"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"2401d653c088ee5fda56b3caa833442ddecc00cebfbdefb3b95d624f1e6f3a29"}]},{"mode":3,"kem_id":16,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"c32e5a08622ec62f4688d78a8aa0d431088532688f5dc6953e99ffccf3ddf60e","seedS":"83f63934a46e13925f7581c9feb1e3940ab207827b34564ff08277412da1c532","seedE":"d74cf4f19cdf40008a438518fbfb82725809bbcd4d5ff2dd5dfd2529578a84a5","skRm":"3dcbbcc97592cb236ede3a957013415f47aed3cf83b7525ed9398ececc416899","skSm":"520f211a36ef47379ac0d9c4e91ff4aeb282220efb998c7f598190312953f230","skEm":"37f12b882a9c02a83b55d59fb3eb34b3f036ef5e5bf7b6f48baf44b40dedcbbd","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04f8407001cf5dd69d3a316dd921bd950449985510b51b81e714b33850472e3f414bef638b3fe1a60e79b0acd3f4397a4056fdf799db378a661cfdeac3b3d4d56b","pkSm":"040a6281a4bef779452081e500734262e21ecfe18cf5e968297fc98b21536a3bf518ef35f25c67a69077638644a69dec037fadfb940cf82a858f68433031f4b9bb","pkEm":"04dfed83c20373d55ec642d22562863f7220c61457d661bf8e8ca27d6566be3c2d69d94587c7f68784ce68e4d08b8b619495a37a6bcba2fbe156bb543e5f8d62a6","enc":"04dfed83c20373d55ec642d22562863f7220c61457d661bf8e8ca27d6566be3c2d69d94587c7f68784ce68e4d08b8b619495a37a6bcba2fbe156bb543e5f8d62a6","shared_secret":"a523e7db8f26e7003986ec8a633a6c7db0fbe7dc1e222c7cf6250079c9e990c1","key_schedule_context":"030542a7e0afdfd9ca23b9ac7c0331b7593a8505a183a605b94c4b91f9e3c55aaefaab5fa4bfc63e4f27f242c8ad3170fa0da038c1d60aca18b949cb6047c56bf1ed71e9dde5769168bde996f6ce2fecafea09eefe04952d6c75fa87906c921b2c490d7b953d7ebf66f1ff7b81e80f150131de0d1b207e4d9209f185ae4c886e4b","secret":"0acac8bfa5c87a9968f4240620463488d1db7ef4b74616041b34bf0a2c5d01c13e9efd2f51509b8c2612804a9a36d86ed422717e133be1424933d67bbfd8ae40","key":"2de8d0ed2bb0f4ac80df804c157f59a7b735dc80ac679c75208bd0fee66195d5","nonce":"61f2cfc2b6eaff09cf00e852","exporter_secret":"dbb308a5d160f26eed605379e96215a25a652c806e27719218ae42b22bdd13e32354245652ae99a7fbca926106b092a259fabb77c35d7f27c29063ba8eac5062","encryptions":[{"aad":"436f756e742d30","ciphertext":"d931e102f03a85139f19c687e1872bc2e7eb088e0e6f52623fbafe58931413a0ebf74a6dc7a0c867e44aacf14d","nonce":"61f2cfc2b6eaff09cf00e852","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"3a9eb1457608e6db82d027e070975274a6c78d84b65454be23d443f5f123d6901bf2258053aae7a3fc639262be","nonce":"61f2cfc2b6eaff09cf00e853","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"ba91f6569a61474947c8195b6f82446e3ab27b34cc0105cbd27d83c3804c936ac9682520152e3fabb3a7d25de4","nonce":"61f2cfc2b6eaff09cf00e850","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"888be00d8fccd99c9a61711b4988f799456b174f4bf5ca01adedeca57cabb578debd6315fed7b7222c69ecb635","nonce":"61f2cfc2b6eaff09cf00e851","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"89bdcd086d3e6d40469301fa9f1501c6b8513ae3033446c6914b3d361484ab7df88b5fdfc42acd2a2bcc4b4ccc","nonce":"61f2cfc2b6eaff09cf00e856","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"8d015f1a65e56f4e6a40b79e11e4e872c950cd73e187f55bf3f2d528d956d36b182a7a039e788f5329a2d1b6e0","nonce":"61f2cfc2b6eaff09cf00e857","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"098cfbbb0c7da2229b38886118d480fbcd67e4e97c56206a99ce97e2f339d0a571e2ed420e0988aafa41f299e8","nonce":"61f2cfc2b6eaff09cf00e854","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"b4fde11cfbcabc4c2ac865f58bb954d066f22f08359df9047bfffe1c9b882844cb460540817aa9a588a1490e36","nonce":"61f2cfc2b6eaff09cf00e855","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"e9de06ebbf1784c19051a4cd50f2a1608a85ae0285617c970d900eb545d9abde1e5bd01b982a2498bcf7ac25f0","nonce":"61f2cfc2b6eaff09cf00e85a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"82c82e24d9fd07af6b6fadd5a05f286785a363e726d2fd30d1298ec031c68fdbab1ba25c8d08ba57d03e518144","nonce":"61f2cfc2b6eaff09cf00e85b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"c875e0e5210a7ee5283f9917d28cf7869b959d09eabe10a07b6be3e088bd8df0"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"aceca56efd2f67f774bf21abd3aa82fb6e0112ec42785abf3de27e15d234cb8d"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"9a4b7f4bcb09528dc5bbd1f80b30e64be514fdb2fb46204bf46b09bc229065db"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"0d7841b054ffb4681f847438c237694bd0a792d5381c1f93a8ad5c006b3b36f6"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"ade658c23485d3d7858cdb7c45982d5c2761501acfc10dfc5cbef8a00f9f0cd4"}]},{"mode":0,"kem_id":18,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"883b63f591af5f3b1c4c7c288a5b3c7d40d3388fce16a1e62c43b8f8a85e9250091c7f1b6b46b1ab36134640d37e0636a344bc58026160edb0badd4ab5a58fc0c568","seedE":"924196136779a5fc979d90c68c8ea9e17cd0c39a8aa506cb494366f72c8032e8ad88530c81a278abefea49f0c6b0bbf778680e12b8f10a3d0d437f931d84cd3575f2","skRm":"001993eb42a296db6a3ec78f6ed4b5030c988de0616f798c81a21fbf573f5c71edfe9164aae52a3c9aeff6efcb2638e8e1ec4deac827a924a9a3f0da85abfb8daf8e","skEm":"01b00e7284c2c38cb7147c36b162373983754a1bae0287030201ad17c0ce5a011919ba38cdb29a6849af11a734783070cb0a5d4a071daea7727f0c74be2f21c3ad1c","pkRm":"0400377fc101f2314202bc00e3b6a145d22a8c5a519bd1bfc68f0718483480b14d1ea3e735fc1eef0487125e2b8b3d50fdc6e829b34d7d662757f54a5cee84051e64ef001eb378e3af7e9c001ae59f5bb9d2b21765f8a9c11933f89286c2593bc39972d92958dcbc9870dd1987d5229988c4634caa82a42795f434b8bcbfb88ad512020813","pkEm":"040032bba569e6b9f5249ec4aa95d2c724c15de4b78b96de19ee860252ce6c647834eeaa62068909c32738f32299cf94ff20acd22e00eedad7a67833739e88d94530b40199f1af2fe20440a7eed0cb38958322c128b3a26f4c6dfc20e8864bfd1e90c3ca63135edd65937fa876cc69a57bb4af6fd758e2131cf24afd3cab39c63c394dd0a4","enc":"040032bba569e6b9f5249ec4aa95d2c724c15de4b78b96de19ee860252ce6c647834eeaa62068909c32738f32299cf94ff20acd22e00eedad7a67833739e88d94530b40199f1af2fe20440a7eed0cb38958322c128b3a26f4c6dfc20e8864bfd1e90c3ca63135edd65937fa876cc69a57bb4af6fd758e2131cf24afd3cab39c63c394dd0a4","shared_secret":"ca3706b50c343d862f3db67d8beb68f5cd10fb7bf2f27558bad5078aa84cc2d58f3fd53691ce4b4f6d651ba6f222dd70470268dce1c8911fcbb807ae4e36542c","key_schedule_context":"00eb019bbafcd598e780a14b2fd24d49bd927c4f7b00c169f110ddd5edcab0266563c3e22d2189ce73cf281fdd334f2165aef7f5ae7015ecc70e16decdc2544bdb","secret":"7e6170f050bb4f2d35c49f0deb1441770497e5e6e87942121882ee1f2bb7fe28","key":"efb5caf6834ea53ba29905ca76d72157","nonce":"71ba271e5c494a6acdcb7440","exporter_secret":"485b072652c31732e003ae54368ecb7b0a161acb16b7386c034ceed4d035137e","encryptions":[{"aad":"436f756e742d30","ciphertext":"7e76da9584726f765c58a551512f15bbf2dc31295cb73abc78a33bec3553f27296160da25a606f32c6bab0687f","nonce":"71ba271e5c494a6acdcb7440","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"beaf5b6a214e83c3ccba4a5c6e212817f312267af6986874489fa2ac491109a9e1973719ed8a115d5eaf1595aa","nonce":"71ba271e5c494a6acdcb7441","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"c6568e2fbe48de1877e646a3d9bb14740200289e6b5b50b5134066dc5facd9528ba97ed4c4f380ff98641877a0","nonce":"71ba271e5c494a6acdcb7442","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"8b3b9c45e3a7d78ad36562e4e1b8202ff800dd8ced4d18a6abe207b2b6c4c28f44086d27548b061af426bb07c6","nonce":"71ba271e5c494a6acdcb7443","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"a5ceda5bf6bcd8c61093a2f4badc6217c49691a5f6223a72f1aec148c448e9759b1c33de8ac492e2c51cb89e43","nonce":"71ba271e5c494a6acdcb7444","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"9484b665a34e65e0f194ab54ef4c49e1efb52bc9fe8bbaffb2723a9a72c6402c4123873aabb71c48b362ac5097","nonce":"71ba271e5c494a6acdcb7445","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"31987fa2009732f8ee05d374086bd3df97daedc67815c1888fbdfedc63e41ed0c685e703ce05f34428348c0fb6","nonce":"71ba271e5c494a6acdcb7446","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"5f5e483a7ec180a37ab75db5b04237014bf1354a882cf7205dd04c826a452a426faedbbf7c7fe2bc245565bf2e","nonce":"71ba271e5c494a6acdcb7447","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"f95e2ab99c90d816f37718753ed2c431f10eb8f30984463fe2c1593915973675af65bf17a764b0ff3f3e7932ed","nonce":"71ba271e5c494a6acdcb7448","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"9912a6c284aa299a0167770928f780fd01bd16da13af9f55a24531f199c448cc72ca01b660b3c23be5c76e46df","nonce":"71ba271e5c494a6acdcb7449","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"8af42c0b20c405eb1b0d8b99c6d1658c1f470184d67876dcb3a6dcaf5ce650e4"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"94ed2280ae2b8024f4ccacb620acfe90c317f95be342917d48c68ac81bfa2b2b"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"1bd714ae6b0f4f9f54c3ac147b70f7c24052633a04ba1f163cdd82d35843f52e"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"822a81dfb867874c36111ecb4855db7f3931adf5299cf0ef21d17bb14fe39898"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"cd87435d18a71e8681545f8b831d4925bf46999867f96a75e7db68050027f17a"}]},{"mode":1,"kem_id":18,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"bcfffcb919c93a135aa9c240bdde09e89ffdb34be7262c63090b687ed1a6f3b67e62ed939e2d9e4e2117fc6b45e5ec71f62bfd5638b3c8cc2ea7917e512076b7a4fc","seedE":"eb205ef7c6f80dd291630b94e95a91499e73e9d15a14f4873588beae7bbe28e356341d6440b3d340673b866d91a3bbaad4d0eee675129e8928cca73d2663e5dce170","skRm":"006ba0fb298dc4698de10e275822720349fb3023602f5c497e0561caa3d903db86ab6899517d7f91cd83408fba363918f73a11bf4d5bd4c399202aa8d5847f784085","skEm":"0193872d5dd52e9c50035e68edd70230363684364efa20483723dd390eb06adea9e83c6c765af3aa5d5cb26b108d054defbaffd466cfbe4ae55f1c7524637dd1237f","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0401052a180494fa898ca3f444d3c4c7d0202abf2613bd9cb6bab164fad706dc15bb5674e432abe7ca264adfdc139d6532f06e036d6dc055cb710e19dfdf120d32688001975d506e22708b80da3dbcf660b220223328e718e60740835e5faa7094882d735c63264aaead194045277766bb3fd5ca40c8e6c800b4e50c059fef7f99fb40fe5c","pkEm":"0401a20d7906148209dd5f31dd677377497392a49919643117bf01c24653c0b3188f4a003cf418918065a1a4c61e6a56c2a3dbac858fcef61d5f88376fc8b54c2218f900eaa12ea41da2b95caa85f9ae8eb315dc2f17658b98cc0d1c4d08cd83137a81588d6bf125db78c1223b7532dbb86e92786fa2080fcf9b772d849a9e1cfdaba5f667","enc":"0401a20d7906148209dd5f31dd677377497392a49919643117bf01c24653c0b3188f4a003cf418918065a1a4c61e6a56c2a3dbac858fcef61d5f88376fc8b54c2218f900eaa12ea41da2b95caa85f9ae8eb315dc2f17658b98cc0d1c4d08cd83137a81588d6bf125db78c1223b7532dbb86e92786fa2080fcf9b772d849a9e1cfdaba5f667","shared_secret":"5ff6ae5f1b9894abc636391de762794be83f9c20f6b7bb60980b09a00bd4a96b0f68a04d63e600ede81862b8fd51e165651e10941ddccc02c99c99e5a5209c8a","key_schedule_context":"015dd167df8d4130b09e24af66848741f066b89054d7926b8d4c82b2c68751bceb63c3e22d2189ce73cf281fdd334f2165aef7f5ae7015ecc70e16decdc2544bdb","secret":"52cbbedbe85dc9cfd93dfb3e508adec934c7e99b2f7f8520f1a2925318b15590","key":"3238b1c5b5efa1413a8867909863da81","nonce":"132b96cc62303e3fbddc304c","exporter_secret":"37064f7c3d0ccefcd22a2bde6849471323f431cd3d88b081bae40103fc520e58","encryptions":[{"aad":"436f756e742d30","ciphertext":"6be53b0ddbf6e3d25074b1a8f11584ba75deff5a55b3eeb7b744139e37086bb74a07b810336057f78874267485","nonce":"132b96cc62303e3fbddc304c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"e8021f6dab683ce41ae36e5de06faf441e9778a62c1c3b232fd9c81958e659a91de69e5cf05002879e15439882","nonce":"132b96cc62303e3fbddc304d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"33688f12641154a68644c8c70e9f57c9c60baa4ee71ca2b5cce385dba6b8595f1566eaa07a47d1b8018dbebcbd","nonce":"132b96cc62303e3fbddc304e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"d10d08ab7c24763409afde1e976467746daca2e4b57010c9a60e3ad7e07f39c8e5f9ffc33a6ee38d3616f29d3e","nonce":"132b96cc62303e3fbddc304f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"a6ca67384bb3888a12897b9c2872b5910103d4d28cba0103af6b57d46ac4c562fd33e81efcb3f7caecc30c81f3","nonce":"132b96cc62303e3fbddc3048","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"ecd075e87741e18cd60eb98a92af5ae621c2cff12406452999dcac084c8b07e80f6986c04743a7de2a13fba5bc","nonce":"132b96cc62303e3fbddc3049","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"9f920a5c18dad698f590f7f7fdafc66e632bfab31ae0f3371619c5425cf7616712a0be6191a20f56a164d0eec7","nonce":"132b96cc62303e3fbddc304a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d920e8b018439f275ed4e7f1433c2e7fd272b3d60f609c8ec26321219d14e4dcfe0dd8063d6aaaa7c69bb27b98","nonce":"132b96cc62303e3fbddc304b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"d4fe1a5daccb621a565bdc09797e9269f8e72d84c8706d547a13188c55ad8be743178015033a73caab8e4a3b4e","nonce":"132b96cc62303e3fbddc3044","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"5ee3c57f5e7afcd69d5d2bba4bfefb2fb317faa6764c8f45b0d4669b7947d49b21923a2023d944621ac1990689","nonce":"132b96cc62303e3fbddc3045","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"62cac863ac85dce6cab0f5025b28f00d892aefe886d929841c5db018b6cdc4cd"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"85985c0dedaa6874b648ffe2309bdfa363c25272dc19ee9521a1632c587f9bab"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"6e011df6c2c5da3ac11e5709ce9c19e3bffeb32f1a86f01c0a99315336b40b69"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"360de08e21d527bacdfeecaf2df5ed56bc04444ddbd74f2521af38abb6759fe6"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"835e5f5e54db12b144b3524cff06995825f944f2a8c67294940cd73626c9b49c"}]},{"mode":2,"kem_id":18,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"7a40fd2e51e538bbbad16e12f2af6ae5f7dd125c46141fbe172bbd4c8d8ff8c195855e7c7c3aaa05f72ff19a79a09f88ade9e21cd124a0cb7ec0e3b3398da0a885ce","seedS":"9915274f9c98b27d28e6b4caa0aae346292e4279aae1b031de9a57636bd6dca538957cd6241e58e98ab14fa00aab5126e26c65807045198020c4a036849b0bf0e81c","seedE":"7f85ef97913400d6e42bbbcc2f8d350b9cc2c871f0cf9a8e1addfcfd2fb4dd2a1272a3e73d920b62f1ef55eb8768d880c756287b0fbf9bf8f87e3086c8f1e60f2649","skRm":"01261eace5e2de2dc005c85c3d8528773c10657793856ed2330738810c0cc489bdda7785ef7f16e24dce6ed85df1840acd9532201b193caa01104a1875fd029ec556","skSm":"006c7164a9a6ae0ac71ac3ee6accc6d04627422abf2d217f9e0c62663de6b566d3c4215990c174eb79068c09aeabccfafd6bc9c61770e17178e647aefbe02ab2b17e","skEm":"0087d99d333cd16b102bac579d769f45779608961e26783dc1d1803109b7f1ee61202f4fdfca7f8e89186ff2f2b840b3a4fe98c7735007f2cc7032f233249b372457","pkRm":"0401597ec93b14ee576137dcc4295b4253b0de665a9a837f818e30d3de2a3a27da54beb9e2f9c89ec69aa508f4f1a91e9429182fc2c746fc9cfc839d87ec09f88d37910011d9b9b4f933cb7b3b891875bf0a7178db89c4fccbd7532cbc13c698537362602d38fe1b7745c015f1907140491bc71f2e2cc172a8dbb168bbe051bd4b74836bb8","pkSm":"0401bbf341d021e390bae735b94ac33cd911147f8699419cfbfae68d3df1417212dbec694bf69bccf9b52adbc9125e10cc5e15bda9ce3b9030e94a05a5620b0038d296008b35142c100020a00266cb10131a64666e59ea3bfecb6570c4e8036eb22cff730381cdc5b83cfb7c6f50f3038413b6ec9231d814c883e1ed3ddc808e0b11a99f38","pkEm":"0401e46b501645fd1f216d8c0f7db734ccd2ffe19c715f591ea8733ee0d2be59be2a2a6e16ba977f1765344720daf4cd8e9c04c08ea95910a933a238daf8179d6834de00dade88dc8bc03640be50ec0c3024300e2dc89b1348fb90f69770e53fe05c4adf864e5f9067fd4e0d62066b9d31e706d02c1bf297f4664f45a05df3c881639f9bf5","enc":"0401e46b501645fd1f216d8c0f7db734ccd2ffe19c715f591ea8733ee0d2be59be2a2a6e16ba977f1765344720daf4cd8e9c04c08ea95910a933a238daf8179d6834de00dade88dc8bc03640be50ec0c3024300e2dc89b1348fb90f69770e53fe05c4adf864e5f9067fd4e0d62066b9d31e706d02c1bf297f4664f45a05df3c881639f9bf5","shared_secret":"2699d5a9a67c8a789903a1c874f95eb3c5dc5f8a6af18d45d72abf4ec3108323378b82b622b9a1b79e45b0e22265b746167387245edccdaafb932a700b9756af","key_schedule_context":"02eb019bbafcd598e780a14b2fd24d49bd927c4f7b00c169f110ddd5edcab0266563c3e22d2189ce73cf281fdd334f2165aef7f5ae7015ecc70e16decdc2544bdb","secret":"9ba8e80d2290b61d6d243627e30a68d3d9f0551419bdd6d1574ed6d0075ed44b","key":"f01a98f2c465fa7794a112a86ad3f96f","nonce":"4c1687c4f8caa631acfb159f","exporter_secret":"437931bc930991f1a86e9bb4af505b9f96146d56095c739ec4438716cd1dbb72","encryptions":[{"aad":"436f756e742d30","ciphertext":"667fe72156c28642e67807a90671f84bf65e83a18d04b46b522bbe3102e0cb39dcff4b0ea0cf529f4f88794a51","nonce":"4c1687c4f8caa631acfb159f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"e7d15754bfe78cd9c6006485761c329a50601cb6469fb07d0c1e882fcac4b8e71748ceb68196e1c6a238bb81b3","nonce":"4c1687c4f8caa631acfb159e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"0a3d684520e9765cb9e3917aaeb5fa32e69ffed0bdeb31b9efbc8ac12b7606091de95e216b689471cd3516babf","nonce":"4c1687c4f8caa631acfb159d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"3687c3be20891a0bca8254d49c15da646630dc3fb4badfc20b19ed5f2176a081f78c7bd17f243721508f23abba","nonce":"4c1687c4f8caa631acfb159c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"5099ab66dff6582db90cde08bda5cf0d0aec950e7f21647d031240dce43a84f68a1560577d04b8a882c0cc964d","nonce":"4c1687c4f8caa631acfb159b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"6288fbebfd2d8c2919a687802c8969f13f9b2f3e6ee5dc7fd119699e4c8326234d67091de2c75448e5f25f391c","nonce":"4c1687c4f8caa631acfb159a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"ac53921b0eb8e855c06ed966ef55342000a403aeb003992e5a53d416ee87d88f765d327c3f7c38e285241380c1","nonce":"4c1687c4f8caa631acfb1599","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"a1d21e2a1a80b144b8963f80a71f7103fa7437e1e714be98839a8f622a287ba2a6cdd5dba928cdcd06ea97c8de","nonce":"4c1687c4f8caa631acfb1598","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"cd84466b74b520bc87887fba5a4b593313e1135666635917094c0c76c94af774b8cbfc32c1ecfcb76ff6343dd1","nonce":"4c1687c4f8caa631acfb1597","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"393c3d1876a86998ef7d558845f03735aeb83c0c0fb8940138764cabd1a03861572835031516f6fa626317208e","nonce":"4c1687c4f8caa631acfb1596","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"102224cc9f9bfdc37c155061062da6b1a73a3701854a1411b071c10794f35c9a"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"e70e15c34a084486b53487e83344c31911a4b2ec758b2ccb1815307015f4497d"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"3a89ffac5ee70c38fb6cf876b7afb32266b279f87399d062f18e4d62e5a8ca76"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e17d1ba6e8a6634ebe493843da89b31c949d0dd87ce97878128e2dc7866b2be3"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"d78d8b73c548d06caea8ef22ef9df79895a611e4af323cc1ab5be635bcdb619a"}]},{"mode":3,"kem_id":18,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"5bec846892b6974d9e697096721ab56441b4aa13a3ab22e86af11cb65cb19cdd045f812facef3942b68c8ee808a596b2388afd7b8a0264e6ebd975bd127283e1812f","seedS":"9a9a583d77b0ec97d8c645df3bb19c69f9932c8a38d8e7983cc7e07880f9deb0723ee9eedfd793d0ac1d501114994ed91fc944b68893bf72a72f4f1c5b85876a3ceb","seedE":"861bd6aac8080815c8640e0fa5f756d41996c21495af4165bc72abbf22c6c86e13388b6f7b02e940351babc3230ed161f951afd2588aa3d55a6fce8892434e407da9","skRm":"0190d3282aeaa815e05497a2b5f532d2ae2975b81f3fdc4757cbe146402407e2eb060effd7b43bc906015db1c5ee56214846d9c95ce4b8670e08d104c88afd477c9f","skSm":"005c5ea616e78b4ad3985705424c5197f5dab1a21d00069b5497f1d95620d2ba9de87ec5ed2a6002a19b87b3d5a770932b24371d40f937eb5546511d8d59f34934f9","skEm":"01689b2050c8ad4c652ae4be0a923fe86508404c130f968a8ad3887cf807d0e2525718bc206ff1f04801c77cc3f08c0e971d566751d5d842fb6fa16fbea62a3224ca","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0401ad37bb93d2ae6e0c5292d0a4a7cb771595e0d53e276cdbde8379f489bb844b4d1ce4765ee9b9af6d928bd206687b121ee9f813eb32430675058751d8981f98ab7c008eb3b2680f3330d241dba3cdaf8aa48c768c82848d19eca91d6847b25c6a6d83f8a5a6410b9a35763340fbb47bfd4d785f3d6f9424de6b145d21cf45d22238e61d","pkSm":"0401d1d0ffc26f09ba4d2f5c8d7457d55e2904d085365820290a4b70e96c7900ba7478a3db79067d52b4aba180efce4b64ef88c332caa03a8d852911b9162ed20e61db01d1c37ca3b5cdb9ca3653f1c0a9407aaf83b6b82ec4ecdacc73677d3d8e44ab75703e56443875d5fe28d4ebfad20725271e83779046fb108a28718cb71ddebcbc63","pkEm":"0400c2abb61b29e6379fb282572f55b5871bbdf708929126b842fa5b0d321941f8e1c7f0c3a3425108e30b5cdede9d13f25636b7de02dec7309e79e7d3f36b378814170035fbf0e10fee77ec0ada13f8349bfd84279cfacd74dcbc83a91f17439660dbd50330e82155af5094d02af3d27873cb956dc571f27a5fd67185f6fad4216a271f90","enc":"0400c2abb61b29e6379fb282572f55b5871bbdf708929126b842fa5b0d321941f8e1c7f0c3a3425108e30b5cdede9d13f25636b7de02dec7309e79e7d3f36b378814170035fbf0e10fee77ec0ada13f8349bfd84279cfacd74dcbc83a91f17439660dbd50330e82155af5094d02af3d27873cb956dc571f27a5fd67185f6fad4216a271f90","shared_secret":"29981f95190cef5117aa8bb6fdfb0266332a1ea4417eda0602f47fb1f6b61e5f05e86a5d08c9257d206ab090ce56400f164ea86dfc749c138186739fb858b2d6","key_schedule_context":"035dd167df8d4130b09e24af66848741f066b89054d7926b8d4c82b2c68751bceb63c3e22d2189ce73cf281fdd334f2165aef7f5ae7015ecc70e16decdc2544bdb","secret":"6911cf879f086e020949464238d53baf2d622a3664933610ef062926d7ad18e5","key":"efee78f7da9b2e4163f6234034edc8f4","nonce":"0ac2f422453abed28add917f","exporter_secret":"b39440418a94c29d21c2b08c45d16fc41ff0816b486d5424c38294034f2b8016","encryptions":[{"aad":"436f756e742d30","ciphertext":"a77366eedc024c8e6f13fd735ecefd95283af9ba68d5895d82415b3c9b3c2599cf45d07725dd221abbdadfe7b6","nonce":"0ac2f422453abed28add917f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"2a182c102dcba15a6df2982fa69fd342ea1b3736a33288b0a0343bec074b398b1ef77e7db124884ba1a778cf7d","nonce":"0ac2f422453abed28add917e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"bcf789ec1035c49fe0ec6b55983f0397f07df20364faac3df71a1e7a9ef3b8f8aab4d1cae407797c46d2e263ad","nonce":"0ac2f422453abed28add917d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"1e8a4334bfa3d23271ff0d7d5ce99b8e2f2debbb6e48e44998b488facf169c28396bf1cde59eeee22b198621cd","nonce":"0ac2f422453abed28add917c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"6708c6b3977f4ba7204e2dc5210dd7d0b75a1b9a9b6a049917ddbbb739d78c991748ebed65244f9a5c5db58151","nonce":"0ac2f422453abed28add917b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"787b45d4dcade6d5e347c1a78176544f9ec8c620ec8c03bd9058cabc88062850cd1d61d7b578300e12f46bfb85","nonce":"0ac2f422453abed28add917a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"06056c6438a52d73712025ac32fc376818e9f67a8a3d61f0869c0b3fdbb312d459ecdb10aa843ab637703b00cd","nonce":"0ac2f422453abed28add9179","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"48801509ce1f93c006940e0c521958cbfd4948985de9b9dad0aca9b4cb303ee1b10987c86471791b973c4c8aec","nonce":"0ac2f422453abed28add9178","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"682641e8dd6a21f8c9be5c335655f85600191320faec87481744dee3d52da8dec5b854b9955ed6990bb36472cf","nonce":"0ac2f422453abed28add9177","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"f27e70d7b16bd3f9f4b4b5af18b75072059c9dd18a34f096a6dafb1acfdfa4934598843de58014080420909f3c","nonce":"0ac2f422453abed28add9176","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"7f8ea6e212b6e0f0733375c9e4e89060f090dd3ef47d7bb590789df7673d44f5"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"58055ba847127891e78d055217f54243540f2e599962e1a943a19541c90f8aa1"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"455c66b166c374dba86cb99ca2d60175cc558a92d2a1799a7ae2c8c1d73db3ab"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"1096b657944a8af87745b1477f00f222032267c490a3dd8da02afd2072177df5"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"64e5a26520d3f60d40369069ec47ed11225e5977173315ff81d5f62de031bc0c"}]},{"mode":0,"kem_id":18,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"7d68e0016a8efafe04ea92a83c36ad7ebf20a4451ca20aa52bd9e8c324a4b7f3836bcc9d74a4bf17c6985d6bae94b7f4f775a751622d3a7dbe8a69e1d7a37e804473","seedE":"c2cf7ab17e805e2e36a2e2f31ca4c11ce2eac6ea63b7931a235d42947d904085942e610c056b5e00daf71f80c124bc3943ed4214776d211e1cc13412d742056da275","skRm":"01785bcf85db89f9488f04bcdd163873c4781f870b5f778c095987c28193a589baa36fe628a0285e4d50a353fdae7989fd3bdecfe6bbb16e2b554e0fa6cc2856c16d","skEm":"00e2b58a245c0945179103980aa9a2eabfc2dd5ab59dbceb64d3eb0b8cff35bf5cf34f721fbfe272da9473098ec4cde03d0b989f970b2601fbe1f3d8397d9bbcc94e","pkRm":"04001d53280f009b961237235784769368f60e935f98ac947818960278b8bed4505f82a9354702dc4f3597cf5e3e6fb9cfd09d881db0e61d44a19d05f9809d5caad24d006ecfc529c4b93e1a654bbe010aa22d8868f6aa3bef20d7c20e3b19bf56dd8146e78621e8a447baf6b2e2dc30e026e090b29eae8e16d431140254c41d781d664001","pkEm":"0400bcf477edb94738b8e49305209817600f0a44599c881d4eade411ec7bd7a74e1bbb2c656df87e7e388a47a43e163e8ae196f088534efadbc9ae9b6b9392fd7d2e9b01fa78fe186bcd11c291bfe0aee53f531621723220f44e2262ff69adb158eba0b1803d43941ea68a4beed7d180100f0b010a3ff22e4533c579f59f564e317bf1d82a","enc":"0400bcf477edb94738b8e49305209817600f0a44599c881d4eade411ec7bd7a74e1bbb2c656df87e7e388a47a43e163e8ae196f088534efadbc9ae9b6b9392fd7d2e9b01fa78fe186bcd11c291bfe0aee53f531621723220f44e2262ff69adb158eba0b1803d43941ea68a4beed7d180100f0b010a3ff22e4533c579f59f564e317bf1d82a","shared_secret":"b5f6df7b147d71f8185547af93ef7661fde31eb675a691a3fab7fe9ceeaae5a39b5932298e68f5fa76ec7ab1bd94c38901265bc5d4d0f68443060846ed1500df","key_schedule_context":"006cc4993ec21e5710cc3844a17243519591c5a338ffbfc8900990c50511368b680fee6343e42a34de218021722990f4771d707f8f92b430f6243c559b4dc31082","secret":"a1e0833b0755cf9ab14c300d5b4513c766b56026910b55a712662dfdd262676d","key":"516c0e09afc2a19f4ebffc340ec4e73e70cbee52c721da45ce4ee7c307d9c3f7","nonce":"c29ffb393e6dbc435168e404","exporter_secret":"83bc79e96d53cead27ba1dfcddd4af1ed48aaaa97ce0c926134ee05cc2c8a10f","encryptions":[{"aad":"436f756e742d30","ciphertext":"d28ed7dc07de3e946c2a2e5657dd9c9f166e4fea4e5a69fb3d9e0ade3c6e142efb618f07893cef7a7e20ffccb0","nonce":"c29ffb393e6dbc435168e404","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"09454d37810276c59eb70ea459c464d9664006feb52656187eaf01c6f0af76138713d1d858e5da715ce8e333bc","nonce":"c29ffb393e6dbc435168e405","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"cb08154f73e5037eba1b07f73e78c491af1c511f7bd5510398fbab3b801917ea6f9357e7ecf6b5248935849a52","nonce":"c29ffb393e6dbc435168e406","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"5b9f30a66fd9ad15f93c79e608e6fae60582f487e6cd8251de6591ecb0479fde949420fdce260d13390b28fe65","nonce":"c29ffb393e6dbc435168e407","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"a3e227daf4c6ab7b9f48e4dd42831713c93e3e2fa26292e34ba030d29f259526bfd91ed794d5a3a49015a7f688","nonce":"c29ffb393e6dbc435168e400","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"1b78fa88fb94b300620ec26feda239e9d8abf31d3083325ee44d69bd71523ee71fbe61c9c8440bfc27df253ab7","nonce":"c29ffb393e6dbc435168e401","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"adc69638a5fd29ced5c5c78f89d6a4fa243014802a8da1fc890510b0afdb46eb337e70ac18c40234a3429c143c","nonce":"c29ffb393e6dbc435168e402","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"48a85cf51f5fbed6f4ede827dee43078a42272dfeec1004cd27c582898752777b74ab5b15c5d137a6b7836367f","nonce":"c29ffb393e6dbc435168e403","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"82f43d555b54c9ffa396ad10c80879bf76b583417e510566b50229b3f9b6faa68e963801c7ad13e2127f25217d","nonce":"c29ffb393e6dbc435168e40c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"05a029e482d124abe71e02967ea24de67a1a7090b80b83d0dafe31a44742e9b7113bde2ead3d76e1024ad8d06f","nonce":"c29ffb393e6dbc435168e40d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"358b348bf5cda591d267ac6bfc3d5642b256b0a2f6fe6c0cda023528012bf3db"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"0d792da028fbfe9377ae89a6148e1684560792252d9361eb6c0e7c240a05e116"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"e6f9037b5235bdcc4252fce2a2206decff5e8be2d7556b771130a509d5ce5d25"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"8df243ea332fa32ed78bb3d15a878797df97b0f15a60ad2d0789aae1b1cb4259"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"de5c0bc3cf954d209a19bd03d8b254eb2f1b753f212157baabd2f2b40409d0b2"}]},{"mode":1,"kem_id":18,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"4b4c6355d4d28a1d2bfb09d733a14ff6b7b3253ecc5448fa110c0dd904b3910772fd7aa1ccc3ac5ad89325e75cbaec7ec3c77c8af8b0276822f6bef19e63629b3e5b","seedE":"48f699a7605188793d51bb19a845ab0a73bb23212ede0ac1776cbb2d4ed901783c356e4555a2c4f86b0fb4356366cc99f5e74352c7529afebe5321258239451144c1","skRm":"016bccbfa4b6965b5a9c02da431d209826a8eba1686a50c792ef4104db279e4e17b8d1d6cce959febc831b83133912665d584adea2bb13f90ecb1d9a9854421cf528","skEm":"0117e51c5e7bcb1a23ee3baed6a4ed888e45fefb8cf981b319957708754db30022923e491e70e0a1f40e6d95d1273dbd8db0f57029db76afc38cc2bb4b734682b43e","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0401a28f6c1c4058380f26c3fbf903f8400725347f16ffbc04527de862aa2839b542b9dd9816f16ff350fc598454258919ec0e1ad636694b6c755c920b57af5b85cba500ad3d727f1b3bc1884724d7156d806f2f24a39438c0e843e2d39b652aacc3c69a7baf5fab83752312904a30294b94129182918ce07a26be8d4bf460b7feac0b0874","pkEm":"0401f4767f61f15354f720b9899341c00d69bbee17f0bb0d7403f9798a659db91354fa8a41576f852fb3f5570ab3833df46853c3c87b9a2358178c0f8df015b8a86b1f00afb7675829caf09496807ac63c45dd604e476d8ab805e52bf3eac6e52ceb9b3f43d14f28e57d22fd6997b0b066d9c4bd1370f634b30b9ca24f4b5516dda4629b62","enc":"0401f4767f61f15354f720b9899341c00d69bbee17f0bb0d7403f9798a659db91354fa8a41576f852fb3f5570ab3833df46853c3c87b9a2358178c0f8df015b8a86b1f00afb7675829caf09496807ac63c45dd604e476d8ab805e52bf3eac6e52ceb9b3f43d14f28e57d22fd6997b0b066d9c4bd1370f634b30b9ca24f4b5516dda4629b62","shared_secret":"842138d398ac66645bb54b815eb7775c10d0f77b98e6b5d8908a5a405490530e2d11e9977107851ef27566b06a50d2a564f001519cd7e6ed750093dc1771655a","key_schedule_context":"01b545cdff6122a6240f9a42d61d0a73efbd3f121e05e32083695897aded6f01040fee6343e42a34de218021722990f4771d707f8f92b430f6243c559b4dc31082","secret":"9d0a1f1a8c64e2a76c8c0bec7d9c7406446c02ebdbdf97d2ae64a2a5f7763f90","key":"05d63a46dbc6192dfb736fb9138f77a26d13ae8b8a372543c4d1d21c79c38acf","nonce":"e723e97f9142e8d40ac52b50","exporter_secret":"ef85ed877d13de2eea31e37430d2fe0670342dc2548011f3e9bb59ad280db27e","encryptions":[{"aad":"436f756e742d30","ciphertext":"39d0f56dfefd4c518ff8ae12131225017d698fb5bbe5df351ba9a067a5483d1eed55271c91d7b0b5552a515f7c","nonce":"e723e97f9142e8d40ac52b50","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"815227c9b850510ab92b89d9c50e9db6edfb35500b1d7adbd6f0cd2f933552d26d68d086fb1fed7078dd33dd53","nonce":"e723e97f9142e8d40ac52b51","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"624e3e678457b363d5fbba813c542b0fb97bd3fc5b39723e4d3fddaaeb28218fcdc5ed8ac8b89e4c9661aa6f36","nonce":"e723e97f9142e8d40ac52b52","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"53bc62bf01d8b10999c30a72753ecbce7702507c9d1644b221487d98b7b11d8d9cdf51d5d67e03e5ae3ae5d34d","nonce":"e723e97f9142e8d40ac52b53","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"10d9c40f6ba311175b713c2f7daee0a9b8fe76b33f0e6183edc4cfb5213ae372708daee3b479fbdfdb638520fa","nonce":"e723e97f9142e8d40ac52b54","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"7bf6d397232d853b34345308c9e48ba376ffe6a4e9dd94c3b2a1bda8c5d66c4cffa8395f39ec9876642036fffb","nonce":"e723e97f9142e8d40ac52b55","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"1d99155816d66f3663c3f854e76c4667bb59f5e4f7b148f8b6f99d540ef8753929daac8840aa999e0ca839d874","nonce":"e723e97f9142e8d40ac52b56","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"c679982ad874dd4a7f5bc9a4ffbd4777c568b718bfbe5431e338c13522605ef2c742ecd1f8cfda7f51f68b3118","nonce":"e723e97f9142e8d40ac52b57","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"d33cc821c984cdab0d5e0c332673aaa9461b9b0c7fc098abe5080a25cb14f0973c068001c31186fce0d45cb7a1","nonce":"e723e97f9142e8d40ac52b58","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"1975bb3ac05e637a9b0db2a938b25adc90d17051b150611852a5e335308e0ee1b1dfa2c3a9f1ac3032ab7caa7f","nonce":"e723e97f9142e8d40ac52b59","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"f424b53a5752023fa6a26c551c735258094898f11691afda491d87c294c83f8c"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"4803c825ad2a8e9cf522c861624a0c00ec9d87627f595d6f20f3b00be8fdd9da"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"66c23a61056eb0a2b40a5bd6d87b2f40d44859eba77254558ca3412c1e605c05"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"58d7452175dcaa9f346796207a0fc66978ee1f253571834a31c6dfdbd4a4e61b"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"5a3707d16217d60ec195a638291f9210e442cd390e7502c7bd7204c1ed131e61"}]},{"mode":2,"kem_id":18,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"3a2ce236f1e6918064f97caa0ce8bb456cedc3dc85fa9baf6dd4719e8becf060c6d42802c2c67727446df38d306a565b1297c94eceb30ace6d23cf6604e563735870","seedS":"8f5c4cba3bbad90a4ca142eb0306b60d418520ab6a72a838582abd2990d91cc799c2d74608789a951ca84ce0fe3cdfeaa68b4456674aa05babfbe5d9d8f8f75dff7b","seedE":"e48a27b1b91841e39bd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","skRm":"00d4978e806094631242fd2386823eb1a5a60946d68c60c6c6bda34c98395006c7c52e6e92587952db058099144b4b9d0152db5cfdd43a3d72db402422ad0669caf3","skSm":"007dbba771de9fef18bb82a9365e5d3bcd82072c6493af6c18d9bb9a8940981daf5e22950f5b251cd20dc18e7d70534420347dfc201c080a9634e9a75c75947d65fd","skEm":"01532076454f46b0945d13b186a91c554f68cd48514b467d4be16e74ac2656df11ec09f82260e4124cf20a49fe02aefb9584c4a7996fca7b9b22b147512fd67c81bb","pkRm":"04006273e3af746c915a10f19c5d558dadac8b216a4e25d8e032d0941c3b1b560ad8f7468e16e522252fbd6c9b6d7f2295f0a64c4ac6f9741c5666dad5a6cdf7d8a59500745918f823df189cf6db4a0eb234840065048158d164897787e8df3578de630e6e2c1c7512c20dc2c67c6bdd5f18ac62ec3ac0130957ebaa6663e51bcb45adcd3f","pkSm":"0401812adc0236448eca5b2724a867712336101191c33c2d20ed17d91f4519a0764ce8b4f0722aca939f34deff0357075ad21013b12394fda1b56384061ba1ee3c95de002a5bd92bcddf0976bb595e407639f5bad2e0315af2de1a01ca03fd4f8bf9eae00b80d82a6e1b2ed525fad06e6849acceda5bf89f69819ed33c4a792fcacd5581f5","pkEm":"040055f72d9bd95aadcf79c55b6bd345f3db1ee987815bc3ed0c4410610d7353a17d525e51688400360e15b21ac18262bac268fec3f51c1312247f8fba2be38d0596d60065cc1352a3319a9bca10da261e61325105a147a53947b75196d46d24638e9308bd1d31fcc887b73cdd5391baa3f2fc78869e07040abeb180829f06496c666ea7b4","enc":"040055f72d9bd95aadcf79c55b6bd345f3db1ee987815bc3ed0c4410610d7353a17d525e51688400360e15b21ac18262bac268fec3f51c1312247f8fba2be38d0596d60065cc1352a3319a9bca10da261e61325105a147a53947b75196d46d24638e9308bd1d31fcc887b73cdd5391baa3f2fc78869e07040abeb180829f06496c666ea7b4","shared_secret":"118b2bfe24dc4bde41f7e394a6f9774c1fa34a07b59689759851f0a7eca4f5131242ff4310f2c6a9bc3a47258708fa7049c5a4ebdbf1ee721225ff4c2f4bc250","key_schedule_context":"026cc4993ec21e5710cc3844a17243519591c5a338ffbfc8900990c50511368b680fee6343e42a34de218021722990f4771d707f8f92b430f6243c559b4dc31082","secret":"3bfe1cf7e64253e9f3c8950f1feb9fb7c62438e7391ed8c0e146283e5811cba7","key":"b117226d059191979d2e82734032de69c99584a06a1c05ac840420aef52c0c5d","nonce":"1470999d8ff714f381403328","exporter_secret":"9d92613e437cb3c662a594498427a2342d41e75b5df24b68618640d2fac6753e","encryptions":[{"aad":"436f756e742d30","ciphertext":"c5c8df4fd07062f6f871bf052659bc6f8469c2317dac377fb94dea600d9a9bbb889046214b63928429ac938d54","nonce":"1470999d8ff714f381403328","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"125fff54dd164571d1a7753589cc9e7564e45fee42db682727606e90e5773d4bc1ff78de0fed3c0821fb99eed6","nonce":"1470999d8ff714f381403329","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"31b92f1bc0db97ae8396cda3d349a75422155a600ba0916572396c7c254ae0b804cb7d7edf9b10a3bc3c027136","nonce":"1470999d8ff714f38140332a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"d3ddb417ef5f0e4477d5b584e7dd632cc7c917983cbb6cb519650c1e91aeb84c908161d4f998658e334bbcca65","nonce":"1470999d8ff714f38140332b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"4a1d877ab1e09a7480b76ca43809fdff73cd2e788bf43346852f316cecf597b4b2cd4dbbfe7c2157bcdfde8ecb","nonce":"1470999d8ff714f38140332c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"12cb1adc01c450d73cbf5dab19663bc52a0f6f4b7ba9d27e9b8de81fd6f1abe79f9fd4077caf35f7297b23f09e","nonce":"1470999d8ff714f38140332d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"8de9070b0a2af26866bd07ac65515256f8e60e382f543791d61a31d9a969d4d13ec5261d5ad727cb7f3eb41fcb","nonce":"1470999d8ff714f38140332e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"df78c4956f2823cb22013f9060170cb1c2fff7de31fc28a4d209b73e3b8159f46d46dfd856616a28be8d57b3d9","nonce":"1470999d8ff714f38140332f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"36d6109756defb947e39a287b479d4db33224ba5ab6e05f8caed0d1f4e4ef40e2b88b5d4ec64681e98a1303241","nonce":"1470999d8ff714f381403320","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"d3b28ea2b8e98d38d11c000c5a6afbe04d11760b9d64cd48913e800c2219b7ebe8598b459924132e3a33c86e51","nonce":"1470999d8ff714f381403321","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"faeeb16f942fb3134ed3530238147ae3dbb556158cdd542ce470037937f8eed3"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"d3f224ad4882fecbd31b7d438484657a2cd9b79c7d87bf6175d6f7e77f686a29"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"290512b39203fc767834801cda116afab68c46c385754cec4af612509cb5cea2"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"1aed63a9892bad585961337c57d6b058097bf20f66ae123d3b839424ab2b2e07"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"202fc287acb8b1106bb7883a15c3442efc1d1fc51282b1a0ced6171103ff81f1"}]},{"mode":3,"kem_id":18,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"877efc3213de44d73a97301d3244be03a5cd6b59a65cf11e03122603b90fa2ce14f5cac3ad9cc1dd998ab8c86d762bbbb240e7ac6a94a68d7ef572fe55557df7b26d","seedS":"a30177f7923fa437c6801743dc8d9e6684ea117a2f5f23125614bc74813d9f6c5ca33917a8493aafa6e5d75ef6e5614670883095aec72f1c2abc00d496a72fece071","seedE":"1a3d8fb0a52f24f7fff8caa7e23244764d36e0a7fe69b10ac93298ef5c50934ddef929ece119d374855f028692bffc446187f8424b2707e224cc7f80d22e062d0fa4","skRm":"01ed5d101694552b8d8aa289b67d304927801a0e310adbca6120e269dfe53a242dfac71cc646d2fc4d046d3e49b96ac78d9ca401fa41d644862280c3587bd86c71f7","skSm":"00c10e5d5ccdc8731b5a3a0d0842efe8b276990f3a02e4921a7789150035940e71a60858412d9687a14046034fe17b1b69d03ae86beee015208925eb9067556cab7a","skEm":"0194b9ad589a66037e0fa1bb240d7d6f62fd8e8524b59cb55522516388cd58bb959a57836a1fd06995c08ac8c0130f8a6fe85a6aaddad70b45b37058887b9f05377e","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04003d86d95af7fa167b33981df197a3546255d950e561698fe8b11cfa86ba776e561f0e038366d9e9cc9d0ce492a0efec82a0835723647b6d0b1bef930ee7befe184b015ef51ddcbf9ab79ac61691a5c99540af04bd27b4929b26eb1aff36b87e790f946076c998ab89fd894517329d8ad8ac07bd518cefebbe7860be52e96e9749440f0d","pkSm":"040195e007f17633ad09e96404bcbab2cf5fd4668182a3e194c84db4ba5b6a8c54d918c027a7a86e5d3a39e0a6e63cb7ecc18506b42382c7fe83a6685f8cc48333dd05019b04d637afccbb9720753b7c299a2785293948e8f018cc13c6d9b2b44fc68a05b5242a52cf1992ae4e0624d30e49f51a1983c857ad39e06054b986c84acc36e69b","pkEm":"0401836a33ac4246b5a417d2bd0ea3918b0fd6b082e6ae78495792c3202a955b398e2903f1d6b20c59c1e48aa55a68ecd1aab025f2662bbd747bdd449343063792b69901b7cb711b902582122318bbec190a409ef895d4c8c9f2c3cc9f4092f7f94f91b9a90f15bf8c45beda3ed22e0ff134a964e775fce16bb1b7ce27e74f92fefaf54d3c","enc":"0401836a33ac4246b5a417d2bd0ea3918b0fd6b082e6ae78495792c3202a955b398e2903f1d6b20c59c1e48aa55a68ecd1aab025f2662bbd747bdd449343063792b69901b7cb711b902582122318bbec190a409ef895d4c8c9f2c3cc9f4092f7f94f91b9a90f15bf8c45beda3ed22e0ff134a964e775fce16bb1b7ce27e74f92fefaf54d3c","shared_secret":"0fa02419627ee784931fef1cae2149cf04dacc6e249372614d9fa627f302dddd14332e585f33e7f5cefb4ca10821412119980756839e8e239a5da0ebc82269a6","key_schedule_context":"03b545cdff6122a6240f9a42d61d0a73efbd3f121e05e32083695897aded6f01040fee6343e42a34de218021722990f4771d707f8f92b430f6243c559b4dc31082","secret":"2042dbfdf986f1734fbd105ea630f1048d6c8a6f1dbf620172d8f6f48e7f181b","key":"352ec4e3e91f34bf54a9cf138e69c2a7dfaff4ca494ce3409b5fdfa8eb6246de","nonce":"903b6d72ef7ebdbae9d08815","exporter_secret":"45904977b6733fbc70381867593792ee30f61ea1d80f902cdb5057c499d6755d","encryptions":[{"aad":"436f756e742d30","ciphertext":"4f38370a1563da71b30a6557f722bdd6295d2f9ec580ab156c875625cebee6e3b24cb0b3e83504eb96f830ee76","nonce":"903b6d72ef7ebdbae9d08815","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"78a69157dcdb257794f6ee6334344c6af72c7622e5ace8863fa79b9dd5d362851d3621e3475884939d3e614fff","nonce":"903b6d72ef7ebdbae9d08814","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"b2c43d76adca9e2458fd2fa5c254c090c9930c75fc487a3f10a21d0bf038ab5d9f7fefd74d78bd0d9a5dbf8729","nonce":"903b6d72ef7ebdbae9d08817","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"6042939742f122f0a620bac9878e2857175f9e4dd814cec1b0e3581ba98fece91b0083fd32c78e26e89b7c0fc6","nonce":"903b6d72ef7ebdbae9d08816","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"8c6e9363a07ee3e9a9aebf6c1f89d8ab694e8e40075a7cbec969319fb5ec07bd369639029bf36774efdea4b075","nonce":"903b6d72ef7ebdbae9d08811","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"cb42db09e0792a554eeb8398257be1393e82ec8aacee381f67b02d6fc3945b219c8ad35050e64373869fcda44c","nonce":"903b6d72ef7ebdbae9d08810","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"7e8413487fa78183c3ff3ce34f612ac95530be9f809f7ed80ddf777dba225b405ce75e3ac8abab4f71f72f3267","nonce":"903b6d72ef7ebdbae9d08813","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"e39cda495c0ffe71b27c99d256bfa75ac671083f047eac2e4a413b43ff52041b393773c0b92790d87ef4277c0d","nonce":"903b6d72ef7ebdbae9d08812","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"a175e895e80302f6adfe8b0fe24f3bdf6034a1467ce4a417bef62952ec81a9ac8756faf7e2f3889d36e3a907ef","nonce":"903b6d72ef7ebdbae9d0881d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"c4f2d481f6aef2c8dc4e2320e391600d44204a909acf66ebaaca697774986765bb2fae316198862f51390ebed3","nonce":"903b6d72ef7ebdbae9d0881c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"c2e98ab5965e329a4c895318314dc055afb13ca8a223cdc655da2eec868d5760"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"e8a81d4618b54d82ef8fe3220390f22d9551f17ce32606a68e3778bd0df9912e"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"9e447698b3afe5ea1b9c41c2597ec639692812d4d332f446fd9798715265e296"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"480abec70a42a0e9a4fae7f78139965550da908a2ec4732c7fff38c97df7ff5a"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"50821d14d8acd067aa0a03b42396245ea06e986437941d2b7e944e4239e5b00c"}]},{"mode":0,"kem_id":18,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"b2ca27ee1204df73ab1f2db875fb5a56b544abdaa73e1f0cf2fe24e66b7ed08ce30935e562b922d70742b68a3699b5f895dfb274a2abd014929d2ed0355bab9ed89d","seedE":"9e013e040e389b4bc84a7eca2d0137a217169f954234f13841678fa586ba996752a704ee3baadb694ca79f25fdabdbb7e6ca1e835341a91d76178575c44b20c0b741","skRm":"008a8c0ed7ae8cf7245308f71a08f7937fc2e06659353eefa8523eff209461667ddf05ee359ec5344de616d47e42971a30e180d398e4a262d003f7e5cc587d121577","skEm":"013dd547eca9fabafbb4bfe5ca61ed344320fee25be98731221b5d4dfaad6e024e50ae4a4fc4290ffbe46097de61a9c353328f1dfc6b4b52665a199c504be1d3746e","pkRm":"04015c9abe6613ede70f1c3c12d17a21e7413ac338ef4c091565da2686cf1bf033af67e6cfbf70711e4cc58906b1572ac7e3503715142eae74c64188b253158f508a42018cf9ed335eb73a48e66bcae01bc49c8d742a78fc5b69c3d804c0e3ecba4cf50b129a1f991a4da727d034aecb4e947828f20f2def4dbe1b7e13758fd5bd895c72e7","pkEm":"040069e0729701961658f143143074cbe8b6be603358e03bb78fed54cef3426c417ac7eb8841fbe220f2344ebe35dfd6c7e092f64030a3773cc313aac06bbf0d2059ca002e573f663768574472ab92e1f9e7cb3e031dc6d4cc3a515bd5fd40ae3a0eae11ed290482fc1d0a8b7e34d75e8a05a6e1543040738bddaeb4a6e12f9731cfd73ee8","enc":"040069e0729701961658f143143074cbe8b6be603358e03bb78fed54cef3426c417ac7eb8841fbe220f2344ebe35dfd6c7e092f64030a3773cc313aac06bbf0d2059ca002e573f663768574472ab92e1f9e7cb3e031dc6d4cc3a515bd5fd40ae3a0eae11ed290482fc1d0a8b7e34d75e8a05a6e1543040738bddaeb4a6e12f9731cfd73ee8","shared_secret":"7a55d62f663f46bf0f95908db7cdfeafb2ad3dac3a7a4f7392791371d5badc8ddb8423d444f6b42ba08e8d88e53f17a6e504fcd2d829021f38fe9b502397791a","key_schedule_context":"0068bce131ceb9d0bb238bbe64df9e33d725b06ea82e3053e0e77164f5594110bb696b9a9694b8cd3b05f17760139ba6c64e0b211d6fb62af0374fcc112cdeab00","secret":"b3d25da458dc76198d562c5e22914f09551fc14e14c0e1461c5e5697383f10b5","key":"f91bd12000b579cfb283f74f58a66cd1593f8b9fb40260e680d6ee4f00e8d2fa","nonce":"136cf8abbd7b6e2a6e1fe1b5","exporter_secret":"393fd66d91ec8da2297df3a90cadce581f61f9675d06d3cf69a4d7ce22b1d3c4","encryptions":[{"aad":"436f756e742d30","ciphertext":"1d9648c780fc47295288b89af94f0241642cb5eb1c75b696736cef478dfaab5d0f56d2f5dd8df157174e6350fd","nonce":"136cf8abbd7b6e2a6e1fe1b5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"67a0098a8acef90403dadf0e5134e6273d8d5a5bbfa348dff03d5fb7f4bd8e16f6cff1d16caf1b083efb254a88","nonce":"136cf8abbd7b6e2a6e1fe1b4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"18f71b4281e38beec6c899699da61f5fc560a7d371e76e269af8bb45556f086b05b7a15bc27a9143ede6b6bc37","nonce":"136cf8abbd7b6e2a6e1fe1b7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"89efd53984aa1489c43a45a236bc3eb87e575ac647060c4af803d5b9e1e3ac1e3743046d6bfcdba9569e7112fb","nonce":"136cf8abbd7b6e2a6e1fe1b6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"dae93420ea8a6ac146ad22dd0d79f780ea07d117b94a934185f833e1ca5d74e81fa55c2cc6815889004360f910","nonce":"136cf8abbd7b6e2a6e1fe1b1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"b68393c81311a6f58b71921dbdc298382dc7b42ff59176b26a5d6d91fd81a70c2965efdf63620a8f826814e3df","nonce":"136cf8abbd7b6e2a6e1fe1b0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"8d4e2dd521fac31ad4c8a1916644401e47f24ae025bb7ad8dca1658bfecb3f7f9a0c44efa3c21a95e6d588c06c","nonce":"136cf8abbd7b6e2a6e1fe1b3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"4394473c860f17744ee4c13c7bf8d0962f2a3484ac5bc7fdbda1831a7d1024f21ad42bb833ede89d8aec69a4e5","nonce":"136cf8abbd7b6e2a6e1fe1b2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"80bb1f963b011d56e0a5b5d73c029cc131662f33492fcc4c77e7ef5b03f31db670d45950048ed9dac5710129f2","nonce":"136cf8abbd7b6e2a6e1fe1bd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"8d9ad0bbdb2b48bcdbfcb4bb0102fa3a72cb75cd28757c82dcbfc81ac2f3d337a71d2ad3604f353d006677405d","nonce":"136cf8abbd7b6e2a6e1fe1bc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"680b6c5f8a0f19ff462bdf8d5e1757be485b3e50df26b57345b722ac2f357095"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"37e1502f929dd95d359c81e264f85d3f689a52174f4ad1b6a11012cda5f14f82"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"efaa1e0ff2a5d610a36d1b247f3cba34e1746d35d6420be06d6e293bdeab077e"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"b17e421b27e83ad93e8668e9422f60503c46967cc7a0902b21d5be503458509a"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"78e4a91a93f80cd11e679bb434273d35a3733ea0ec50b809c19ca91050456d60"}]},{"mode":1,"kem_id":18,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"2bf983a8659982907789ee1bfe89c1e644ee46b2569045deb8e86dbe1ea88d90edba6ddf7c399affe96b27b6f3c0c17e9c2a89a71c5eed80e94fb85b154eaa613d48","seedE":"aa548d8188df010735cca80564f6b1c37456814c512337f2298d3ca9e01e717c941cca9d9a461232edd894643af2eb70c905b0eff2f626441759ff7f03487a51521f","skRm":"00eedf8f1b62cd7de56631c6058cbbba07592fc86a89840c26131c67939ce64ffa551a64ad6ba58c3fccea6a3d8c8958ef52036ee3f207cc8af7d0c38a3e77a62d41","skEm":"00d6ad55a2f2eb34c14867ed82464b00cfbba94a26ed3fd86ab5a2733bcbc78f1ffb7b8b6de9b157a33cc8efff9cd755969165500eb474d32bef3ffc6c48eedf0afc","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0400584df74bec3fa7f0dce365c3923ca611feb6691622dbac5321a8a5fa174e9ed2e18c92f7691c6664c7d2a09891917ba3f28a1801c0c9b75414e94127a2765efaea01171750ebaa823dd3f63982a92ff3757fc640228c698fb07d28103582d7bc06d2306c674cc367510fd397bb7af8e975bacfffc49a8d0d3cf67881837f26540668e9","pkEm":"04009477b3dc3f30c402f73b3a9d63391e11cc0a914d5c0a7835e4413e57c0286e0640eaee3533e0e2a80ded9116aa52e9f2e6e5b5bc102b69cd45d85c2b47fb03af10004a2fce3d0a2cd1dd15c7bbe0e423e13ea884b73c1f5d4d3b55e0e9bd738bfbe1896b0b3bca5c4782dafdf6ec05312b5071dca41a973a22bef20612e561ed8e58d7","enc":"04009477b3dc3f30c402f73b3a9d63391e11cc0a914d5c0a7835e4413e57c0286e0640eaee3533e0e2a80ded9116aa52e9f2e6e5b5bc102b69cd45d85c2b47fb03af10004a2fce3d0a2cd1dd15c7bbe0e423e13ea884b73c1f5d4d3b55e0e9bd738bfbe1896b0b3bca5c4782dafdf6ec05312b5071dca41a973a22bef20612e561ed8e58d7","shared_secret":"7b04878d023438a83f6f74580c8b2711aca9a3dec210f7bb5c941b4f66cb84713b82218ff05724697eea9df7161bccacdfd3977a9c5b9670c55e969f830fe677","key_schedule_context":"0117e9751a1ce31a2cb6e3ae98596467c10eb692c73899ae0aba8b6e79fcf3081e696b9a9694b8cd3b05f17760139ba6c64e0b211d6fb62af0374fcc112cdeab00","secret":"6b74b07e493c2f3fb36c593c9c8ca9eeaa7cae330e70d85a78394db540d3c695","key":"b2357f8f74a7d9243998d16ea7baa93457d4639159893f04ef60702d83187edf","nonce":"f6c0d7ce128ff29d905cb88e","exporter_secret":"f79b920e36fcf0f924efc589c9485d403af4d7ee4c6c55a80ecbac151d4dfcf7","encryptions":[{"aad":"436f756e742d30","ciphertext":"3a86b581f718dcf093110154e78529d597e50600e20848e8046943e0662b328ceae04bb0c3df0989a06cb32e53","nonce":"f6c0d7ce128ff29d905cb88e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"c0ac779111acf3ff541aac85950dc850f58464056d9282159f37b05654c9af9e9196373591e96270574ae4c228","nonce":"f6c0d7ce128ff29d905cb88f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"eda3ffe2c54eddf87acd0911caef69f248ed55339e6a0e7744eaddf08c4d6b0cd9eaa6012486acd8453848d78d","nonce":"f6c0d7ce128ff29d905cb88c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"ae80cbcbb6de996d724e27b941dc3a42e5512bece94864e725d1da7025086b08ceaa8e6771270fc21a7dbd5b9c","nonce":"f6c0d7ce128ff29d905cb88d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"54ce193b3d33116ca0ace9f7b6f3ed3d3fa4a8c87aa084ea19338912c2b18851ad18cd151b602661275480fd53","nonce":"f6c0d7ce128ff29d905cb88a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"f9f9d24851293447edb9a867c555e2f924740dbb0994b4c2ab74b16ebd11fc0adbd2151d07789e8c9fb28bc54c","nonce":"f6c0d7ce128ff29d905cb88b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"fac04cdbc9dbb92afdf30d16f8448c7b8bf341105486fbe2115cfdbecd0c1082ee9d4ae64377163bfdf273f8ff","nonce":"f6c0d7ce128ff29d905cb888","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"f3f1f2c6b2c51289825357de9685ce02ad65e6b4b388e85905fc2ecc11caf3a50bbce58c073471728503f49444","nonce":"f6c0d7ce128ff29d905cb889","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"62a562e500138c6f4395c30ed9477ffc4d15e341d87d99e723523299520d7be6a25df9e4021aabc6b82a5da239","nonce":"f6c0d7ce128ff29d905cb886","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"17ebe1f1141182f8b9eeff2b584b84082e4fd71657bfaa14deb577277a64db18c6b872dd60b7990bb06f4af585","nonce":"f6c0d7ce128ff29d905cb887","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"df7783e259d6d656df5979b7a572b44e2644a2e15748db1afac0d4e29153ecda"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"90a95b2b2763b2ca2f8266941cbe333cf55e1a0a4d2de0cde905ee46fffc11ec"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"25e24a953c4f4b8b61bf5a87deb735b3049d5b5079b172972ca3017dab2ff3eb"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"3d2a15485dda8968208e12f2ccc5746f1cf7e4500f13f875db4a05d90732a88b"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"4259420bba32bc7f1587e3cad4229cea12e1b9dc553276e67196f40bc6bb7149"}]},{"mode":2,"kem_id":18,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"99ea0426c199188f323cd5cd0e75c7fec15ee54a8f5a8b9eeb68093415131196814483850ee972b15143c1ffae2e261747e284486ff645859c3608ea43558b7d41ff","seedS":"907dff3ae86d5fe3513725bf64050a0912ecd0caa182f854a13ad96e7824ad62d10f4ed269e07c17bb0c8c469fd14c8861719966d5aa54f7115f03c3a5baf1841ba4","seedE":"aa056200e1fa696ffa9e5bc070d5e862b040c4cb3b2a1e5a70c2bddd7cf2c80cd1eecea84e8ced27a87c8b9e73cdcf79fe3e4f0f38df3b3260717992324533fe6ca5","skRm":"00d46e36db75090f033e0bf17aa7b482590f20137237165595be995ec28886f34cd253f1f25c7e36d9e0b95b23274da0e6c2e3ac652a4383425f348711ad9f2e3004","skSm":"00614b7f66ea06df1e9ab8f40006231246ffee2bae3d6e404a89eef247dfce113c305cc4a2572b9fc1fe76e57da77e8f2699b0c07549b7b63de61abcd59265123d7e","skEm":"01170d1b92c936ff3b37f8d048b965bc2d42d60a0c8de6cae49894f1b8270d06f68da0dc14a1c41ea666b06f58448f4f19eba5d24f1366e78de66a2a9f025588d6be","pkRm":"0401db105971d353476497caff1edf2eb6c48d61b7cee637306a8ba17da2b57e0261dddd97f892d97cc16b54d14f8425150f699bcff8d6f26a94dd8df38cbd2e8888c200e8a3779134dce660812dc46f320808d3ae4db8d13f5993fc420ea1080f1071a04580f21c0dd04f996ab60fb9bd69a8495bf8b60459abacf75db6c26807a3dbba0d","pkSm":"040013e860214f49dea0cf69bfe6c6e8dfd0438f8eb7ed88bfe91ea86441503f83d437ff4bf9c4149503378c437830be991ddb2f7aef3626922ac9d806f7b317c743cc004e29bf7dfc2dedd50c65e753276b7b0c6975c13f3990686816a46b5ea240164ee9470d70195abb5ae66722ce6f6f24ce2e0f63d69acee87c10d133f98afcc7a325","pkEm":"0400b79d8750d53cc6eb760e8a08e0f8a4db66cfc494ec955c61b4c189c75e9bc633cfa420b4ace20afbb231d1978edc76c6883ea42d84d4a9c24994b3f358f5869806015aa3a8ef9780af72b2fe214a202c1d3a19d5d9ab2815ec8fd914740e90eff86f8176df82220e014cb73c76c03bf284ec67c2688ba311718f3288d00f1b52d1e9e6","enc":"0400b79d8750d53cc6eb760e8a08e0f8a4db66cfc494ec955c61b4c189c75e9bc633cfa420b4ace20afbb231d1978edc76c6883ea42d84d4a9c24994b3f358f5869806015aa3a8ef9780af72b2fe214a202c1d3a19d5d9ab2815ec8fd914740e90eff86f8176df82220e014cb73c76c03bf284ec67c2688ba311718f3288d00f1b52d1e9e6","shared_secret":"62f613d299fa12d63ce034e8dd09518a54ec9e1b04b4d7a1a4f4c06c9885b3dfe0e89e5ba4da2287a9093c78fddf592004063dc2205b5912977a38f0ad4f78ec","key_schedule_context":"0268bce131ceb9d0bb238bbe64df9e33d725b06ea82e3053e0e77164f5594110bb696b9a9694b8cd3b05f17760139ba6c64e0b211d6fb62af0374fcc112cdeab00","secret":"5bec06e998b0c14b8aecc290761e1c4de7a6e3ea935ad3873fe0be81a72205c1","key":"5678d456bdc0676b557872095f5c86668466395c886b67f9556916fb1166ee3c","nonce":"88a24e7615c0284c19194b5c","exporter_secret":"eea859e001d4b20cc1a1e20e767b28ab7481ca7fb23e611781652fe7c92a49e7","encryptions":[{"aad":"436f756e742d30","ciphertext":"13f16cb9295c6994c284d95a7d84d4891194bac9671e71871d39fed08cfeff1936027e3d7539ab0944283ad9fd","nonce":"88a24e7615c0284c19194b5c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"44e0fd32719d2e0f80221519113f52f0129386438b12b5891b6dba0e11aa093a6709a813dc0ecdb46e668429b8","nonce":"88a24e7615c0284c19194b5d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"2e53c758b752aa097b56b0e93e48beb61ed7ecda088879a467b655f212e63f5e422502d54459e754d0cc7f60e1","nonce":"88a24e7615c0284c19194b5e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"9c248e3159da0d95ef568c8a2e2247c7d80b70033cedcf33def94d6a8df8a4e1869483c50cc5a1eb4362d677cb","nonce":"88a24e7615c0284c19194b5f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"4667d8745d42c30ceba31f48042719f438c4bb3104ced3b41fb026b60a4d078e7c7270aca99585d0a4faaf4b38","nonce":"88a24e7615c0284c19194b58","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"7efaa3aa5b0655d310b41a2e90e2fd3b4a495e6b8d66b8870f6799fa389126b05880269f8c82c86f21e19abbcb","nonce":"88a24e7615c0284c19194b59","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"9af8f0f313739bc66d66a2eb38f3f9f4ba253758598cf347e782666f34be5fdfd9941e0476dd602f4e30cbdbcc","nonce":"88a24e7615c0284c19194b5a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"a2e0900d1aa7356e6957ddcc8b747506802b3e127ba8d38f8b2357a992417fc699e3f1277ddea3fb67aa807723","nonce":"88a24e7615c0284c19194b5b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"c3461462df718d4b53adb5625cf3914bb54155bc139b814a38855939617fdaf818fbfc3001f76603f30a961614","nonce":"88a24e7615c0284c19194b54","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"79fb220113a556e352138f99e8ec7a327b1ded4968dbb50b0577997bbc75d1c1ba8664a8a8f1b2b381ac9b9cfc","nonce":"88a24e7615c0284c19194b55","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"ff2755bebe2772bd4f99f1370e52e445b4c9f9df2e11c83dfb41e28a9c1f4aef"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"ea13e6d9376e3896c23503a72c03b88638e9b1604d89bb3aee15b6e00ad354d5"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"e2a1e9c00ab4c95f3c584596662cac2ddcfeaacde8917110963c3afa32d3dd2e"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"1a56752e604e49f8bd70117914c2594b917719bc0d4b1a99bf82c9828f0ebc87"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"81abc1c7b8f2b8945bbf78d6228158bca8e71b365215f306ecc2e231cfd5fee7"}]},{"mode":3,"kem_id":18,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"2eb5067f38647048206c2873c3473c6c4567644f9583a47e2e3bcf57f9b9b87d41897fdef33a4d8524318eae6a04190afa53ea649eba1a6161f98f6778660c94f929","seedS":"00af06131e06c7386da9bdb9ce3fb1cdc2d761532f66b352182deb2e4dfb867bf072351e3ca53d0a81d955ba236f280876e7d955bb3cdc78ac881771d588e6b04f02","seedE":"78158b03926181b0d71bcd0913ebf706984b2c7b54b19fec947d31b6d55323c7ef005f63c03b609e3d0ee7369587fb930fad83ae88b7aa97740caff8e4d53eeef551","skRm":"003680140d11ace9becb84d3fb282224c5ff3a6613231a4679efde55581ae37922a0060564c598f4af4c9f828c5bea6a438cc0bdb556d21baeb15e6a9c68eb679772","skSm":"017dd0f876db38ff984884cdfb006521b2a90d85105709e6bbce22dbb50a82cacb6d3471b1a87233668e2d45411b0ad12ea97f283c367ec55cbd1de7f16e3b13d054","skEm":"00d89259ccbc262b2e7538fe00c057f9582f3707ae94b2f3d4a4a99ffb16cc8f73363eb42dba8e68db6b35ac1986dc6a8caa52f9a70c18864caf45512959c6c3f89e","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"040040bd8beffb39fd024e1c4bd1530a469e8e74cb4385d03cd9abd2b5cbd1540e37f62d50a5e5e64079fdee4d6b578081282a646f4cc63f7f90c5a6538a8a5207eaeb00c320cdbff6e683ff6cb8d5bdf3d863fddcbace2f32af2c9b5c0d907a72e3b8261930faa0bc14abe265ef87716749c20b866cd7e633469a825078e08ee2b87123fb","pkSm":"0401ed7b91af53d2e36b07181dfa6c7164bfcebbf5613d01ab8d91e65d8d33b482df5c35bd63d8444b2e6c39eb1f4c3944d6484c73f5d74628bf10ab7ddf6adfeddcf6011b4f46fc28d7000fb05c5d0854f97925fbafd09b53394d91b41019ea5b392a6577dc8686a6808cd61cd5d624ca4c80587dfb86af0d280aea3578a07946107424c6","pkEm":"0400a017fa6c144e371c9060d578409a014a35edca2b70941181566d25fee1e25fd5136c0af063c80d5af87e2d15e0e112ca2f4068f6e3542d614d12f0b76d56ad392700fa196e52a2a4381b9a04ef82224675a4eea3a66ce687885a43a773df8278c8768a1b0b5d074a41aabbbf1a0b886d2aa13557f84eb674e1cfeff3d4428425b954cc","enc":"0400a017fa6c144e371c9060d578409a014a35edca2b70941181566d25fee1e25fd5136c0af063c80d5af87e2d15e0e112ca2f4068f6e3542d614d12f0b76d56ad392700fa196e52a2a4381b9a04ef82224675a4eea3a66ce687885a43a773df8278c8768a1b0b5d074a41aabbbf1a0b886d2aa13557f84eb674e1cfeff3d4428425b954cc","shared_secret":"519c14de5eaced325b04da30b8ad02b5601476e55b1a12ee6cd6e2fe754e10161272c2ab66bf897cdefc8e358f6d9653667e2b54287bec530c4d965e272d4014","key_schedule_context":"0317e9751a1ce31a2cb6e3ae98596467c10eb692c73899ae0aba8b6e79fcf3081e696b9a9694b8cd3b05f17760139ba6c64e0b211d6fb62af0374fcc112cdeab00","secret":"f3ad97a8b4474fc89b7b0f9d0787eabe60a43b6e9458de245c4c7617030e61e4","key":"3f974d2380c73a379dba57ee68ca42bc5944c34eeba2276d80a5351a5d4fd5ee","nonce":"ba6be781eb947514bb8273c4","exporter_secret":"6543095482cc642608ed1cd067343ab43e8413f404bd3d5c67fe3105908060e0","encryptions":[{"aad":"436f756e742d30","ciphertext":"d45c37a30c53ed028e54a629180fed544a513fd1bf4279a05a4c6179f3a1a970665b55ec9b3ce7232eb32b1135","nonce":"ba6be781eb947514bb8273c4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"a2be2c35e7cc67ecd61d00551b57db3ab1de3ad5128f184f69add3f47b07a4bc8d90338ec6ce047deddf8c1925","nonce":"ba6be781eb947514bb8273c5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"c5187581417c77c780f8d4f1ff8d8d124faf5405e75afaf2a93c58265c6e9599a1e0bbdef828a42162dfbf9af4","nonce":"ba6be781eb947514bb8273c6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"9db8696411a63b438eb269e95881f1eda2295616fee987154331b2e4ce95edac1cca8cff78880f776ed8e5762d","nonce":"ba6be781eb947514bb8273c7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"036a67082ee66fb0bdd691fe729e2e88ed21b2b10b22d63b6237b832a97f0ec3b48249d3b24e7cf1af69333f27","nonce":"ba6be781eb947514bb8273c0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"87f7e8376c9d95efffe3aaf0f5838644adc3e6a3418e54e833d1cb45df1970f6878b6626e352b8c0e3eb0435d0","nonce":"ba6be781eb947514bb8273c1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"a5d9345f0b05c56689603583ba44847f0307790d37e6b48586e7c8a3a2625d0a186d610dd648780b5dbb4efb45","nonce":"ba6be781eb947514bb8273c2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d5599f15721dc792d93aef27233d5d7ea81fd9c60735b70ee736972a0dcc2e93ef3fe76cc0d18f14594f60bd92","nonce":"ba6be781eb947514bb8273c3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"53cbead6f822c6bfe26f3561df02fa5e9df2a0bc12d9c2f408203affc220c3e21322974a8651148e1bca744a07","nonce":"ba6be781eb947514bb8273cc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"682b1e6b4c42e5ac2aea205a2b074ad107a87b5cef1548e2015877fd39d7fb37d309494ea88a0d835dc7b2068a","nonce":"ba6be781eb947514bb8273cd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"f9cb8f3777322a8621d9f28688c395edc7276920b36caabd8c23d11ab1730f1c"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"40c73f0999e453625f8395b98e8cb24509500d26ce4beac82f08bcbb6a3cd23b"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"1090e07bbd53cfca52b25dad24aa016e1070d1ed64eccb1ea0c1cfd08aec4f3c"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"cc91d600f570b77630acbe099ffac0edb2afe69475fe1720e081e7dad3e86252"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"d64af35167f1f2627511be1c4d0e107c1636e1cc83ae8698e56a8ae0a0f40253"}]},{"mode":0,"kem_id":18,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"f43e12a39e3f340ee92a9490461f00c5f52674ace3d7fdee671913421a31ed0eb859a9df301d28939ac945cc73486849916d0059c44d1a7d6d3785789e7df46a37fd","seedE":"819f0e3920604f28b31edf711c96225cec8f9e4cab35f7fee0de321376787f8d3a7026975bd664e8b6991dad84c96c95e4800dffa1cc0b7ee3fa7b46d60eee9159f4","skRm":"01240198a6989112e1379120c01d0796fcc8f82d939706a7e8a8bd0bcc0f53fa7813c8e1015491abbce6278bb7fde75bbe8780d01f1297bb2c0e2dbe2a5166366f15","skEm":"002fb1cbff02dd8281012080200dabb5e8f8477cb9e5dd34608a275cc9e52755c80bae7f7bc3fbfdbe07c706f1d8d31f79ad903c01bdcc25509981d615c9b1b77927","pkRm":"0401f7cda9141e6735475c80055dea2f4b8145c8313c386ba8d438658832cffebab43b0fc24574eca9b5f638944ce44d875dd2d8be1aabbf6dd41431158feb026eb02701e9aee03b22afd1fbf39bed5c31ad1b9bcf135972d30eca361b3860a5af27bf6c7496c3047eaa59239ae18231b6d96cc0563de37677e83f82630bb6ce5c8ee7c586","pkEm":"04016b8d0d1d8580f9b0b2128fd11d60bcbde31ba3cbc5641c85218719e3013bbc889d7cdf58c5b65ca417f0fd4f9dfe91c937cc9b940af3db0ac3d703107ebb62419000385b8dfd047c63ba721b790abe69eef3996f6a2b0a6c856131ec10e1d0f3e6b2fa4af28f85f4578f53ec35f59a021a3224eb1e4804b7abf5055ec3ed15521b243e","enc":"04016b8d0d1d8580f9b0b2128fd11d60bcbde31ba3cbc5641c85218719e3013bbc889d7cdf58c5b65ca417f0fd4f9dfe91c937cc9b940af3db0ac3d703107ebb62419000385b8dfd047c63ba721b790abe69eef3996f6a2b0a6c856131ec10e1d0f3e6b2fa4af28f85f4578f53ec35f59a021a3224eb1e4804b7abf5055ec3ed15521b243e","shared_secret":"2a00469d9ee6734e256db9333fae08816b2981ecf842b07b9d369d001f4809b12bbb58a1840e621fb460bd833487ea098596db41092da01103c5ca91c0ad0d45","key_schedule_context":"00f561da04cd85ee1cc244a2dc01c448761ef6adc50c3278bd9685a8441a52e99ebf93bd8606a1106f8e6cc040b9d01d47da6ed1171e402d7ed278e376d5efe4eb1589804341ddc17e93c29ce4a87139233f08c3224ae89b29e6989ec29c21ba8abc3cbf74cd2fe282dfaa23b36f5d563cb69b09074729c5f23d751098c2807767","secret":"8fa2566064a1beb6c091e142922f473123ba22acbdb986b405f8cdb451a94235c2b9a1ca1e7d467e531662c995ed0f48c219806c44b688b70534e1d8bb8fc4a5","key":"6a395584e24745b9e5b71f72d044dabc","nonce":"e4ec677d9dc43d8531a040b7","exporter_secret":"2bde5abb5aecb032e2728c17f5d8c386a502e803b3b7d72dd0c98db76bf0e5caf43e89a0d358c27b420a4f4b5deef7d730d07cdd5b9951f5f658aaaf04f0cd35","encryptions":[{"aad":"436f756e742d30","ciphertext":"4ca874638b9a9633fd109f8957bb105ce37b3e9c812593fd5605ec859f3d408bbd716d0f1e4384d24acff0d007","nonce":"e4ec677d9dc43d8531a040b7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"983deab2502cbca2d8fdfcb751891c5669729098c6c3e9acb325c36679e662c9d3e863ecc7ceba2944c9bae78d","nonce":"e4ec677d9dc43d8531a040b6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"9427c36fca1bdf4be81a4fcc57d6275efde2037c6e47ebbccd68b4d842e529eb9e38eb2bbba409775e415abd89","nonce":"e4ec677d9dc43d8531a040b5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"95004dcf13f1d51258f6448d44831ce533c0593b6522b9678d0d4cc877cc4fd978ec25cba4e3b693a1ec5bb67a","nonce":"e4ec677d9dc43d8531a040b4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"5c270c324697db015edda9eb65483418a64a3a0e410deb60731b1cc7446c08c160b82a9dc060af7bb1ba9cc1aa","nonce":"e4ec677d9dc43d8531a040b3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"bf76b62994ad02a63530673b8eabf300ca84a3688618833d527a328a04445ede3f3cb417c155a59457df859d71","nonce":"e4ec677d9dc43d8531a040b2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"19deb3e1f21fbcabc302169c78ffa0f74bab75966390a231d837dc19ab166c6db43df9acf6bd263b4dd88a9ab4","nonce":"e4ec677d9dc43d8531a040b1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"9be5f540dae2490ce52c876e1cbb3b6d8c9c3a93e8a04cd27cefd113c05d2b00092db1ae3a893c6606d67e9def","nonce":"e4ec677d9dc43d8531a040b0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"474c08f3de07ca42616b9cfb49bb93118d52b3c91c9cd6714d6bec4bcc97bd22ab6ca9433f98a4ff286d543e67","nonce":"e4ec677d9dc43d8531a040bf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"2fdfbd498a87889d2257fe258c54ae0969f485a5b53e0b60dbd02b32fbe20c2fa142af227165d3d86ca979b722","nonce":"e4ec677d9dc43d8531a040be","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"e03b8253a1164c7757c6841f9c43748a903272dd80c4e3ff03c455aa7d39e26c"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"07e78f49a665a860d70b40febb8844c702860e911ea712be1fca2401016e00d2"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"13e9db36781be22dccfead703178887a472d7076c08a1eb04ba880bf315b952d"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"f2e8cae5bfff1e797ceddf66229b585c6de3954e2736dfd9937657c6aafcd318"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"833528678794682e9eda37e75fc3b11d88aa9dd13d1b57894d486407c3b30749"}]},{"mode":1,"kem_id":18,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"f73216bc387e50725769cd4eb6616442040285ae70cdd6eaf3963d2f2dbc5d35ad8842a11974411029b5887032b027cf22878632785e8e0f7cd5f146bf9e069607cb","seedE":"6b017fc966a0fe4c5e11d163fb557d31169c06dded835b1b516165ba501e53595896f4a34186aa1405987dd9a8952e78b9df7c30107c95f36b1700ed1114b3896354","skRm":"0109b250864bcb64a2ef307b70bfe0c2c4fe0575f6309f08677ab464f24e24e7270537b58381e5553d4e2c9579b8c55d8ef214426b567e25c84e85df188a3b57370e","skEm":"00590c59e7ef2a14557b86d024ec83abae1dccc4586020793971ea1265d01fb7207d39b9e55935f283777cd83506587d4c44ce8b643fe0d06685ab370bd9e90b0c43","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"040159780fc638ba2e57eba4d4f645483adf276be35cd3ff5649577aec7eb2277d095913b3022ff6b4aa908d21108607dbeca564abfc31f95bd640c1962cb79c823f9801f1ba80d9f43ea1ebbe298b33180b230818bdfe9c19b2fec1ffe5d2eee68a8e8aa87a9b9275ccf7cca84aed572742628f0ce0f2990c25d1f3d7de106082cc1fafbf","pkEm":"040175970c9c06165963eba5d7b71abddae5d478cddc95f880e86b2664ac42e25edd142a21f9c148bcceaa14f8ea567ee36149d7a974e512f01f945cce263fb82af11800e23529e800f6f1ef0df605b836aa4227c1e9ef40de521098537afc9c6436d5da26f0e4c95a30a007ea34ad91fa04f99af45fbb70785318dec40e87e7fca0d0eed9","enc":"040175970c9c06165963eba5d7b71abddae5d478cddc95f880e86b2664ac42e25edd142a21f9c148bcceaa14f8ea567ee36149d7a974e512f01f945cce263fb82af11800e23529e800f6f1ef0df605b836aa4227c1e9ef40de521098537afc9c6436d5da26f0e4c95a30a007ea34ad91fa04f99af45fbb70785318dec40e87e7fca0d0eed9","shared_secret":"8aff1d8083b1e2fa35a12af0e735be16c9f6d689c1c26dff378966a45f4bd9cb488ae7f917edac20c01640e5499e84b1b0b6532973e40414f52cb89b44fe8bdb","key_schedule_context":"01b12ec5b1b0cb71c610512ec14f972d365f2160aafbf38da681bf7d9ce9befd8ccbc47c51d6f0ffb420ccd4dafa49d39b3feeb93fbfe58bb91585669799e10f0a1589804341ddc17e93c29ce4a87139233f08c3224ae89b29e6989ec29c21ba8abc3cbf74cd2fe282dfaa23b36f5d563cb69b09074729c5f23d751098c2807767","secret":"ebae2b820e744fe1bb615dcfc1c7f5ae3f98acd8bf9bb57b6fe15f367bda66eb8a267aacae8fedea710e2d434037a8b998f4612cc317ca8221c1d9d6ab42d3c6","key":"23ccdd9d6fc29aed824e04646d708131","nonce":"8ee9860c102e2b2524bae87b","exporter_secret":"412030bb4509b7e9486f1167bea076bd889d1af5eb212d1a0eafd0ac65ca87907276f030994995c43831b7222e60220a167450da26650c3582f602361ef239cd","encryptions":[{"aad":"436f756e742d30","ciphertext":"68d7931b7142f075b788eba9aed528ce6fe8a15c68512d65de13ee64dd7bec70d378e13d3592a741de813e926d","nonce":"8ee9860c102e2b2524bae87b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"5bcee8b0699facf9e8b68fd9a109466915dae70d609ad1d323a843168f0eb3dd476007fd5bcd4de4800c8b2693","nonce":"8ee9860c102e2b2524bae87a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"7aee4ad945a439a2e3e6feda56c69ad99aaff4ff2f1b3a9182d1b397c07981f46a2ff10cd05dd30605f7302281","nonce":"8ee9860c102e2b2524bae879","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"0611858c489caa8605244a7b8ec4f3192f932bd7be39527c32fae9fb926568399bd9cb94827e0a847e58bf70cc","nonce":"8ee9860c102e2b2524bae878","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"1ef7694f39dd53bbbe863ddd4fc37c0e63cedaec94619af8c1ad6ef1a5421ae998881343cb12fcdde47b81336c","nonce":"8ee9860c102e2b2524bae87f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"a918e726c2712e448356bba54122178a32b301cbbf84604142dc04d2c43746cf09a8bc62facccd63e13daa288d","nonce":"8ee9860c102e2b2524bae87e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"a904cbac602cb148d817ce8ed4b838f1ed229ad3c27665c7526fe54456624576ae3c76959aa174f0715311c5ec","nonce":"8ee9860c102e2b2524bae87d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"7fdd5b05440847f9785fa817661fbb713ad3e8b1d62951053be8877400c0c47a22747c4cbb466eb0d4f383320a","nonce":"8ee9860c102e2b2524bae87c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"28775e857bd885ecb5f524f96221640fe36b46a4d5801828c3536933ff7f73cd624709a3af153b72917788dc1b","nonce":"8ee9860c102e2b2524bae873","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"5ab15738565a80bd41d3a01afd34bd44492a75b72e992bd1229b0d839b4853d5d165baf7dec3095cb7a36764df","nonce":"8ee9860c102e2b2524bae872","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"5290b3a27d734279bf172a6578ec0a130ca2a9c060da37988ca9c0b61a4db4a0"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"3ee60c21dde226df1f7e1e2d611f9fe9d73cf073abd96ff33540371e58c32533"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"722deaad2e30e65e2a99695ca3b6daeaca4025c076bfbaae2013303c188915be"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"98e6eaa5d9e276c0ae76363023040a628e81397ff0519bbde337a82d8ea95727"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"a4204e8e7a4258c4f230db1998986912274b3f2a7901ecd46b41b218a7c2dbde"}]},{"mode":2,"kem_id":18,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"a6b06b3f40ad9be9c5d4e78b6b9b978236409f59af6ff572af67f9de518a8de7029095c18416fd497911721631e9e036dc47141b3748ddd6a0e446062d416e0eaa69","seedS":"2a7cc27ddc9e94ac5e0c45bf39253bb334df63c6cf4bdbd746f1b055653bcf83919d8a1884ee34909263850b9e975d195d825be63379088c15945bcb4793dd15e817","seedE":"e924e36b2a5fbf1ac843a09c58f0b0dde183245a4d459935be153da95b6e70ab37601478a77d42200393e2b0dd5cdfdba5ebb767ca6393e90a1d990e18a0ebe2e043","skRm":"014eac6c36f931d8740bb7bb64160553ae59fa30937e5b1f01a12bbe8e63eed385c9562e0e54a298952d54e58468306d3d4dd231a193d0e59ff6fb04a9d56597c46d","skSm":"0111fd3bc3a7bfedda3cb83fddf38faed459e53b832ea97c5cc80e00003833cb6316e7fc2bdda1f10249d46600f2f11439fe8e8a057c90d21e5f0ee1b6d4fc9e424c","skEm":"0107ff446305050bbedf39d4e2d2a6a9bbc08ce76214f1ef02c9277948fc03568edf3f215221bf63c14f71222d6df5391232e1089ad702df4c1f57b848fba3c25768","pkRm":"0400949942cd6239410338f0728c610ac2bd8e330a453295e785a4b661ea4b1529e4ff90c2c7bdd084cbd9c196539277772b572e808c8d640294de56a37bd2102037b7006f6533b6267370511ec437ec68b2ea8b682ef4ebe60c19b2d67e42ba20b6fd1e2c8d5bb6b9486c129d8513cd649765783b40309286551188486b89de1779b406a1","pkSm":"0401cf1d39eaeb57bc10827606bd1202a12ec8dc7a3320dac7eb91756b9dd6097491379d4b5f8c6bc24121aad57277fa51f50ae89f22d9dc9d223af88eba0414e6665d00274b9bad8516e98981f3943cf9f0d5ccd0cb9df2c1bbb01af7f312d39b6a2b77ad3fdfe5b75e2db5139f541b6ef6177bdc029b9b94d8148051116cdf15b15e4cb7","pkEm":"0401f2f000a0f0c8f55165ab573f9a106624fc88d382d6494ed83c3528d54e6b196cec236f50dc3bf5494f9608c6b32c779c93ea09b8a8e98ced30c049a0d456110f0a01bfeeb699e936744895981e14e53b93525366342072c6fbd6be589fb487d2adedd5f02beda4f907b0c81508568db3a072125a984e2445a47bb7f95af42c6919bd63","enc":"0401f2f000a0f0c8f55165ab573f9a106624fc88d382d6494ed83c3528d54e6b196cec236f50dc3bf5494f9608c6b32c779c93ea09b8a8e98ced30c049a0d456110f0a01bfeeb699e936744895981e14e53b93525366342072c6fbd6be589fb487d2adedd5f02beda4f907b0c81508568db3a072125a984e2445a47bb7f95af42c6919bd63","shared_secret":"7eebcf4193afaa25997bf5cb158e618945a6f2fb808c916e74dde681e7b309798186c05c4da217e8605172b85136e466157ef1abde77b9c4a327f8eb20871a13","key_schedule_context":"02f561da04cd85ee1cc244a2dc01c448761ef6adc50c3278bd9685a8441a52e99ebf93bd8606a1106f8e6cc040b9d01d47da6ed1171e402d7ed278e376d5efe4eb1589804341ddc17e93c29ce4a87139233f08c3224ae89b29e6989ec29c21ba8abc3cbf74cd2fe282dfaa23b36f5d563cb69b09074729c5f23d751098c2807767","secret":"556450381e562042cf3c3aa5c798c14f237a4c7b6eefdf5052616d551147254994ca8a0dbed6cd1026bd81f51b541a57f6dcbc9970eac3737a5521ae916105cd","key":"33b930a97ed702582652678cea425f01","nonce":"facfc3de1d3d16654a3646c6","exporter_secret":"0d137a52999ac3666f1260c7520c55b63ee269938176f5f1cf9cd7c8ac63ccc150302650cbcfbdfa28376f32d2a368c2a86b52cf5306e2c7c0193d9412dd2ed4","encryptions":[{"aad":"436f756e742d30","ciphertext":"b0e7997abd962aa9bf94b591977fac084fc773faf6706e55de1d783df2bdc94ed9c5bccbb32c5b8bda4a30271f","nonce":"facfc3de1d3d16654a3646c6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"d60872b9ca21813c413bfe4c5a0f6b1237ec032e095b48ae4c53ff7ef822a0c339f2207548fc7874b6e038bc22","nonce":"facfc3de1d3d16654a3646c7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"3aa0b0bc285783a79ac039f7f21dd40e078e71a5dc65616833d47c67025aac87030ab57d6d198103c9767a5e63","nonce":"facfc3de1d3d16654a3646c4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"1bfb77fcd19be061e7802f4db64b23229df599fa6a515b7bb07a444e821c75b3e142f6cf2bb3da3f66a908e70f","nonce":"facfc3de1d3d16654a3646c5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"1d7f887bd329bb672cba847a04b45d9dfedefbd5555e1c116343b2e0afc7f495412c798b16912c9e58bbfefdd7","nonce":"facfc3de1d3d16654a3646c2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"41442da017b36a9c27f3f06fedcb3d09014cc9d411dca7c7d95d38406057676d7ae198e422b1ab7bbe2786126c","nonce":"facfc3de1d3d16654a3646c3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"0614ec3de689aaefca79907eaacc7aa72b602ca54b8c266457f81d33f4e34011fdb6885c6d5a9f9e8cbc83ca4b","nonce":"facfc3de1d3d16654a3646c0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"4881ac5eebbc3c3629c6490daeb84b9f491fa1e7cbc47655fdc77449ab58af5bb26d7fab74aa5f8358d1b06adc","nonce":"facfc3de1d3d16654a3646c1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"cd9e88cc5d93e37ee8fe1569f9a7d576be109004b72b8568fe71bfb213ec8ec9d1c1069ae5ed64c23e35077aea","nonce":"facfc3de1d3d16654a3646ce","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"ebaec62cd84c54ce100614621c44d3dd6c468e0bea80d162ae1153f0b59e18f193b09351e02c0f0d1d160cfad7","nonce":"facfc3de1d3d16654a3646cf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"917098cb566a31bf5d25f2e6269eb678ca48be094bc8cbd92e18550297e60770"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"b059929a24d13f83539cd5af3a533ece04c23bc3339903d82a20532ce7c52fc2"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"73e244eedc6a760ac563d8391ebdea1e6cc20bc5d952507a6400033e466c6e2f"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"52c8a927b91539056071eeeed79b5dbf79c2d15a9da094783ab0d396747f3ee8"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"7af7616f6537a45510b6aadb25ddbedb93d4b50a2481b2234d6d99af5bb8ef53"}]},{"mode":3,"kem_id":18,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"5f06de72f05e73706e8a0c98f85fc6eff3f2e7ef9498ce1eaa6d3f936acfe82c5fc290cbcc414e014b4be2a4ee14d9967478598a1f64e712f4e68d67aaf41fd3aa51","seedS":"e9e6cc24a272adf73292ff3deb5afd8f0576bd0e54293dd34c73654afc74ba8ffa938e79258f97149301c8ddd7509faece4c13a9e89e78080dca3ac7b1dcc8ff5e93","seedE":"3143ae589ae5aeba6d954c33f01508bf410e8d500dc725a1ae36f0ccb2dee83dbaac4bfb1d0b3ba9af13bc3efe2c1ae1a005baf6cab683a19dbb9e33f2d802d04b5b","skRm":"00a3cbfe527a1e2fac8868d81ef28da38bc6022f9b93b9051161a78843f7422640ac23517f9551a096ea34314f25d07d80a984fd406d67aca47af9a7233cc5c6fa23","skSm":"019fe5b5e3a47133f61a5cb9ee15af83729fa7acb14b4983a4ce679e3710c2686047faed72952b16ada67cb1526a9df8d7807873f35e1277e61f6d5b42dc70d28b41","skEm":"00a6c4acc257c589de087e2430f41abf81285a61e2193f32b2acb7d1a225ddb56436ad5808dee4f233b564a1a8bacc2d4468ebe4f969dea5604dec1acd294e95d84a","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04002bfbf7302ff541cd8b01e27038fbe6f35f74bcba2944b68bf53cfa2ae74e0d365e175dd7b8818f057e9b4e9f1b387e708e7f8e7c0d89b95b6fe192e6d293a98dad0158317ad685e12a1ad93a7bd16997ec7c1632f2ceb56418fd942dc28d0ddf5ff77cf6b24f8c831e2048091389906034e53433fb4a50c01f3efb24da8c73e3fbd737","pkSm":"0401ccf22f46a74a949572e124e87c59a519cce79d40ecafa70684931164ffed6f7651bd08c3a6ff4a933665675a65fb4c212c6e24d3d7b6ac4e4c75377755f54b2b1100a2ead01cfc0d0ca9a1d9e563ceb44aaacfb2d3e8d7ec39831bd947631795bcce06e6e89dd0d81e69c967921685fb342e84e9caf09bdefb39189d2b5537f67e0b84","pkEm":"040057beff01b9625020fc4faa6a54260b73bc4b39636f3e79b2b20cbe094de634831fa88897dfca7456ab05106f72a011efe5a2d72de2ff713924419de7398475130000a589e352cf39ccc5208172c0c720a3c93d71078d5f643b5e2a5d92de1c2c512083204e1826f46bb1aac4f03854f35f45740c240d20120a53898b330fe967721a17","enc":"040057beff01b9625020fc4faa6a54260b73bc4b39636f3e79b2b20cbe094de634831fa88897dfca7456ab05106f72a011efe5a2d72de2ff713924419de7398475130000a589e352cf39ccc5208172c0c720a3c93d71078d5f643b5e2a5d92de1c2c512083204e1826f46bb1aac4f03854f35f45740c240d20120a53898b330fe967721a17","shared_secret":"b77f09c6b711384291a1a4822d9fd5864a08c968902ffe63835878b35335075c257a4863a6a8d6ad6067adfb545050837fb8a19d03ad691cb0cfd7f76d03500c","key_schedule_context":"03b12ec5b1b0cb71c610512ec14f972d365f2160aafbf38da681bf7d9ce9befd8ccbc47c51d6f0ffb420ccd4dafa49d39b3feeb93fbfe58bb91585669799e10f0a1589804341ddc17e93c29ce4a87139233f08c3224ae89b29e6989ec29c21ba8abc3cbf74cd2fe282dfaa23b36f5d563cb69b09074729c5f23d751098c2807767","secret":"6cd564b9a65e237c91771af7a9da548440d0bc9f22f36f72d40a7f9433753548bfbc2e2da1179ac84af405f13b55a68bf2d720b5076de09d38846f1b42640ffc","key":"18f593f0aff921f7f58f50474601eb10","nonce":"b8113a6f9ee5cf29ba88dfd5","exporter_secret":"d15f9c13268af889d0694705c3f98dbd541ce2c33735555a7abd5547251c11c19a44e5ad0e382b704e45f8e58584a8511f6a1df44d2861b3550cf43b7e2d838f","encryptions":[{"aad":"436f756e742d30","ciphertext":"dbabe86a5bdca936147e45a05d744207bf45f1ef4aabab4ff9b6c72fd41190649ec1ebda705b0cd012a0ba28ee","nonce":"b8113a6f9ee5cf29ba88dfd5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"bee4c779624a07eef5ae46e427a39c89f249c2564be98ce87c99c25be66729f939cb3c6bf17587a15d381d7f1f","nonce":"b8113a6f9ee5cf29ba88dfd4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"63124a0efcdecc80a4e202d1865b2b88e67e86a14e875117a40821a02203aa32593bc7ff792aca4ec3b31977cd","nonce":"b8113a6f9ee5cf29ba88dfd7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"4609212683526d757aeee1bb91eaeb147457dc83ec4d49304a2128a57694f589a9219bfa95c4395a3f282f3983","nonce":"b8113a6f9ee5cf29ba88dfd6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"521e5eaef4eb073913249a3cc330631c0e05e56e190e3e837f5415a91c6571e7b96e86ca0a7d414296a393801f","nonce":"b8113a6f9ee5cf29ba88dfd1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"68b48f40a6425413b71fdddb8a9411d65a579f40d1025e594aba227056f2c2f2765736952e8f570ba90ca17420","nonce":"b8113a6f9ee5cf29ba88dfd0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"24202e80f83b5ceaa09e7006a4517d6d31e58a190f6e7495c1ba9b1a3af5c93e67524aa778a88405af41eb04e9","nonce":"b8113a6f9ee5cf29ba88dfd3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"bfa1b2d7332caa15cdbadc9703cd198f48e9d8cbca96a3e9124f024246ce2de93fb1f4ccc0542beea62f68ffa7","nonce":"b8113a6f9ee5cf29ba88dfd2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"e963bb2fbb4bbfde98c59d6544d04f38e8fb33a871325761ec31a6863b84f499c41566cf5fe54725e690c90508","nonce":"b8113a6f9ee5cf29ba88dfdd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"a7b89f43a4bac6ec41c1abd9126455e9472ad34bc98692a2dafc4616891be6ea89cc60959e9a505fa17ceabd44","nonce":"b8113a6f9ee5cf29ba88dfdc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"163809810a5d97564de6f9e58e59804053a5f6001e6b318cca4f9f0b895d1619"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"df744c018202efe80a2a97a4a4a58e95ef3d80cda9cf3f9cee61b0612100010e"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"bf52deb8e2c0958063e38589edd21ce547a71299662ebb96aeab7beb85e291e6"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"8429381f0b65b4f13481516c4d1387e2e23927a95cd2a16a58b0dfdd1a3c2fc8"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"a47e3e0cc975fda3d6b3bc65a9cf5baf7291125f3b26f5d288fdb78f24fbfb91"}]},{"mode":0,"kem_id":18,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"62641514bccd2858f3d6513305288d6ca0e443f00a86eb33ccd519d1803aebc5d07bbad0e1013ce61d9c9d713b3c90c8e79a1af01d6c69750f67cbbd1d9d4afeedfa","seedE":"1ed3768f499b5b3c2beda3166528b649d4b117a0bd450f0e9e19815c2597d1777ac67ea367415fb28c8819c94b383a0a8a15c9f03b4835330e3e6c8bc8319202e473","skRm":"009f662259723e2774e0ef4ef1fc57dffcf7f96fee05ee32b8534983f25daab861fce9ac5dc0cccd3d346a58963e57653048f933f9c884c74f776bcd57e6669c9a86","skEm":"00c028f97f53e7609c4f9478841b29c0d009abea13d12f4d558f57b78fa6193faafdf15ce03572ea2330510020e9bdd2d94c1d461d1af9e8f2b2f1e7c6dbeddec850","pkRm":"0400dc5973e5ab5a417e82c8115abdf28a78ea32a397cf067b9e783ebff9182d1e3bcb32aeb9ce74ababd634678a6fe716ff15f6135e8ee7b43f46364198ac03c4504301056de893c64abc7314b877dc699db98be5cbf07b12e0c141578e0aeba9911045f193511f074b4f6036dcd5826515dd4aaab522c4a7f44bced319e9583bc118d14c","pkEm":"04000fe222a93e988f2b890bf98345fdd3c08724631091dfbd8c3572a91e2fc8bd878f1537852bffdaaf55e168cfa4511445c390a705bf322ded61f4bf7e5a9f69248101acb73eb821bf6c757ab35286af062fa59f614e319c7eb62a1423c84c86eba1ae8d65280fd69916ff758825e2944c2df3242b3f6b110da559bf20919431cab76cfa","enc":"04000fe222a93e988f2b890bf98345fdd3c08724631091dfbd8c3572a91e2fc8bd878f1537852bffdaaf55e168cfa4511445c390a705bf322ded61f4bf7e5a9f69248101acb73eb821bf6c757ab35286af062fa59f614e319c7eb62a1423c84c86eba1ae8d65280fd69916ff758825e2944c2df3242b3f6b110da559bf20919431cab76cfa","shared_secret":"836dec8ee53432fe6135a364858d61a256848874d645c286d454411eefde448bc7654cf506bf1e4ab3dd43f5d9baeb05b24e2ee6b3591b5136432ff747c71722","key_schedule_context":"005c0b2bdbbffbea1af82c95fa5560defe4ba0a05fd3c301cdfab3bbc2fba9783d13d14ecba2cdc7a7c1f544087eb5b3a22ca199e34879b2bbeab3d644cb2a005dd8854451600d718851b126f132b5ea0cf6942b64e7e586a7f8877bbcc281c8f6c005e9d1c201fa65882d2162ed577741da4aed5c33fa050d83feb94a4e88638c","secret":"71529ceee3d8881f66363e99cd1bade88b2ea7b8c19363fc0e093bb92b961c31d61e9147aeed52bc81be1e4f5ce18bb758a97dc54030e63ce37d3a92860328d6","key":"80358d48c8324176a44632f90c826a6bbfe7b2126f9ee47eca65f58faee8946f","nonce":"7502fc65d8e5db6fd14285c5","exporter_secret":"d876060f03e1ba934c3e3c93416e91888b0a02614f8c5a27d24f3112754c4d654bbc04fd54c1aa052c5dd81358362ecea1c15e20c9cebaa5393e52da73d4f611","encryptions":[{"aad":"436f756e742d30","ciphertext":"ba38cbcd619868b4e993b7757cf8449aeab47d07741a62ec8b3fa72c136b7e5f6c11ee2faceea367f4126181ca","nonce":"7502fc65d8e5db6fd14285c5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"a97932db8c889e85e844b1b8fc75fb3a21e25569bcfacc74ce47287eb35b59372f0e6c1762446674aec9469774","nonce":"7502fc65d8e5db6fd14285c4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"dffe364d097f06751044647b5b992a834414c0d629b25f9db8e0bde6687e26f73cd7f77078bd9d677a4e3555ed","nonce":"7502fc65d8e5db6fd14285c7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"820b741ad9f16c1e434fffb94ff55b6ec7f4063367e4c449bccc1529f758f67f6432a9e935e42196f810116f4c","nonce":"7502fc65d8e5db6fd14285c6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"e48c2e05ec38338e78a2ed2473a6052006f474957d9ff98ff26c07d51418bda9bebb572b6a46bdb8367a65595c","nonce":"7502fc65d8e5db6fd14285c1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"e06d29c5648f88176dde24501610a8f51438d6af6d3e4c84d73906987aa918d8a2b69876c748eab826e603f1b6","nonce":"7502fc65d8e5db6fd14285c0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"9a7ade7c34c2c2c48dfa117a6618e76eabb8fbfe0bfd5fc91dd7c1fa849a3ee95e37026de1cb8120db1a8fdb6f","nonce":"7502fc65d8e5db6fd14285c3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"f7c76b6fd22f90d58f43c67da7a9d8ab7ccf53e7f9d586308d5c64cdc268358df5e1a6a44c8a7c611018b9ca7a","nonce":"7502fc65d8e5db6fd14285c2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"8d4fca01e27ed84720bfa1ef4cd2ae8df59e0fc41593d68de060ea1e765edd03667ccab3f3ca3a05339196a21c","nonce":"7502fc65d8e5db6fd14285cd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"1abf19cdb9f0cfb71e23569c2a36f283a542a228ac95893e7ee5782cde5c82beb8102ed924f6d0667bcef7d678","nonce":"7502fc65d8e5db6fd14285cc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"25165e98cacc80b167e37a1051b2f3e2c22140959dfe2a9493625e83c9be9f15"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"f9b5c7fece670b2d8f0bc6337ead2815e00ef98108ceaf47a42d81f5b180c1d2"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"2c2716e716318f538e2fe72a5578051588efb8948d12082e9611477b511afdb5"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"09ed503d557c02ffc00ba7a86a57506fb967622c17fc6a5b9109135fd6ccbbb0"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"62daccd56fa57ed1dd1998088eef0f20a7272d422a664f31c3b9ee3a7f1ec185"}]},{"mode":1,"kem_id":18,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"41b782c18c14986c9d7a636152f13677aeddf479c1c7791ea46e0ebbe35ca9dd524c23d730eef443741d7d965415833d6c549c8c1b31ad05f2b9a88f916b2930528e","seedE":"64463def238f309f1e9d1f28c15dc126cffa4ded911a4c527eeb71ba593847fb405756239d2c694ce4effa3996cafb5cc0b3736dd988deb7289210ec92bf6b339302","skRm":"0002be614bf40b361548a5a881d5fdb4b5b1bff90bbc5cffb0eeccbf9163076881edc46eb7944623d900868e532b9b1d5eddb47cabf4579a11793193eeecaa5a788d","skEm":"00a173fbc49ecb270b4fa1ab823cc457f1e1e0dbeadf9b481b824099300fe6c11e0329dd0b82894881a9c57209ad5a47d37172283e8af39c6d41de867a7e16c87bbd","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0401dde7fc00593a91eaee630e84d8cc9cc07c5392f779d28c82784b5cfc38fe916f28351dc8857404fcd81a5c317eb82e18ff3ef0fbe87f49db936f6a6c0870c4943401f31ed2fe9192f09f8806441675180b8cd8ab335dfe855acfabbd86e60fa5a08e4e4faab1271e4530ba61dfece5332f55fd14efa2172b8cc4670415a37fd9587dee","pkEm":"040041d3923b7218cf378f7336712e2ab1d254a2e7b0e67b85ccd149f68115e9d1ed4492f5542923586feecf2e5500be432e181e73bbcf87947914ba760ab1216e62f80067e0e0899fbc87ffcf0b2e7556f4bac9395aa3e284f73323c87ab3e5bb8409e2b85ed657170aacad0d83cd8ea71dee1b480634f818383d75899c877d3fa263fe49","enc":"040041d3923b7218cf378f7336712e2ab1d254a2e7b0e67b85ccd149f68115e9d1ed4492f5542923586feecf2e5500be432e181e73bbcf87947914ba760ab1216e62f80067e0e0899fbc87ffcf0b2e7556f4bac9395aa3e284f73323c87ab3e5bb8409e2b85ed657170aacad0d83cd8ea71dee1b480634f818383d75899c877d3fa263fe49","shared_secret":"8fb618ff94fca65c1bb2183b5683bbefd0aefe66d1610e0d1623c8b3d00c2fb5feba21b1050d7752ad1f0b52250624881902f3d5156b4b3c454aaee2b2b20a89","key_schedule_context":"017344e204124da2a856fc5693999bbfd1242c27f4b2f16fdc92751d458fbb606adde7aecc32db4dd5b0fdbea7655c7c0e8363da1a34370ba59bfdb42108a4bebbd8854451600d718851b126f132b5ea0cf6942b64e7e586a7f8877bbcc281c8f6c005e9d1c201fa65882d2162ed577741da4aed5c33fa050d83feb94a4e88638c","secret":"edfc1907ed7d5006b7e821f9802b49192ebd40dad26bb9ebc20192bfc4e6319f22dd9950d51fe7c07c48739ff424509b056acf2a2acb655b59999626b91741b8","key":"6fb2ffb368d1d76a743b9e51d8293d0960810936399fb51dcffe83ddf14c6271","nonce":"ba6d3b6c7435583230a60d86","exporter_secret":"1926473db83cdccbfc308c0a286b0e248c2d2cda275c6c511f50d64768d483229f24f770271cdb01096bdcb15c8269ef5e80e592998fb43c93ea3b8c0e1e46d2","encryptions":[{"aad":"436f756e742d30","ciphertext":"264cd2ede05a9ab1527a01508fd537afe67b6c6f89d5a09e9e28bb3e0a52c61a174f9ae71681f548ec44b38ccd","nonce":"ba6d3b6c7435583230a60d86","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"4b439bc9afa3ce832cbda50c31b549fcab63a7ffd040907e1fdc5200e01d5d0ba4b4349eda9c135d4b1a39da7d","nonce":"ba6d3b6c7435583230a60d87","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"b8bf1321fa9d670cd0fea9c59ca8a88583f793a27633a8ab5b026e3309b7861d98c1546ee4205621da2d5899c0","nonce":"ba6d3b6c7435583230a60d84","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"3816786f0f619b1ba80c0046a155638b616fe90d2c33fd4229299a0b01d7b632d9ae77da1bae05d6c0b8fc1342","nonce":"ba6d3b6c7435583230a60d85","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"84a1574168983ccb5b52a5e0b522f04cf5283bd6e818e0f4c3b165e179ad899e34f8675aea5b905605f10cfb15","nonce":"ba6d3b6c7435583230a60d82","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"cf2f3b487370c15dea92ced3d5a5829fea7c539eb4583dbd61b090b2e0b55efe9a93b1e14aacbd3a278d39d272","nonce":"ba6d3b6c7435583230a60d83","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"e26984b3cb713bc5061ec0bf7c9b9ce27e95a1f7c19d027179744aae3788c65d6695ce92148e055369c6094d1d","nonce":"ba6d3b6c7435583230a60d80","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d51df949ac4584f4428fbf5b391b5e910336401264d7be5366da4818b17e781a960d67f537218969947fe6aee8","nonce":"ba6d3b6c7435583230a60d81","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"7a75a9427db2b5692723ac6e7230ab12f4f477ede1322f28ccc58a6e0cbcd8b6583785b5b20b1211f718882a14","nonce":"ba6d3b6c7435583230a60d8e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"c7c2153eebbb2fbdc0f22fff28a5981e548f2007e8dea3e65eb4b0f5f91b7da603b872d17ef2d14f3229576c50","nonce":"ba6d3b6c7435583230a60d8f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"1e22305088a733da436e9f34981bf02bc5387c585709050f1d793f92b21dface"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"2c885f289aeef95d8305a401869704320046283bd42c9c827a53c777e97cf9ea"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"c725f067eee0973e37641b9eb160a48ec0b38206b392ddad62366b6c778e6543"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"34e07d6e42b66f2e8151ea3b18ec883116ad69caba9befd7eb15af3595820896"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"363a041e5cd48d14546e9cf1cdc0e07ae84cf4ce92c343a7cfbf2900ba6817e0"}]},{"mode":2,"kem_id":18,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"54af23ea93c8fc34deb6a7cd70e657ea8990fc4e9a18656d5764b62f7a33a9e0212adeae1585ad2ef28688c1b558866c1975973c4dff08955c1f9fd7939b10b5fbfc","seedS":"b65599d814192278ab826ef197a61b77db50f40495f77502dfaa03acd1f3565a3cefebd59de2328ece0638c90d8a89f9ca58f2850e39e9a4c9c339290d66da12fdf0","seedE":"81dc51e31ef8e9b33fefcdf00bd3b0ff585b941fe76cf39a86c269e2f53be7edb3db0be1a58b6cb8d8e6020fe8a2018c59d47cacb35b2b8c61bd4155438b5eda5c0d","skRm":"018c4d39ce0fe30e708136c80fb507b12db90d248da5c823afcf27ecd9b103d965181d870c873c1c221f7e69409b65591acc8ed470576ad76daccdc24cb80ef77ef9","skSm":"00fdac1340626d9d6510afb50ebb7ce865bcce98d33325f30f3cd354e5950f2a905ead357966a2ac549f4756f07fff3c6ed70d5dda8ffd325f0bd5a3582910aef18d","skEm":"01f1407a3723aa7c17931bf192ff7956c82d80f54db79d4576f82b69249df8009f699718e82c77b961cc9d040ff1d9272ff97d2ba2a6c92876950e897e3b5f0f2c05","pkRm":"0401205c8f7f686f4c76e9c4c4915fb8bdfac4003cd9ccb92b885f3b8fbd9f846e47c32c6beedab8fc0643f8fb6345b3d9f75e651c0c9477970dfc688f6c869629650400868296e95f404533db84ad8f2e282218c9588c25e94d5b818dc54f1a5659c36b3c60c95405af87d6b2684bd02ec6462c7802a52524d8886c9e1c7ffa8de9d75680","pkSm":"0401686163e4e2bdbb7d476a3668343270457beaea97a008d943eaa767bf4898ab97c01c16f9312efd77572ee9e958bacd6dbca1c8ed8de22c165a084ad7ea0360fa3b004d33b20332bd85bc9c2b772ed56b40ebe5ce72a01b6a481f591097cd13e6ecfac471586bdd49805ac94ba351d5c5bee6ec66d4b599d1d123ee7b3463c5901b3434","pkEm":"0400c708757d53d8a1ac555426d660014fefab2676fcebf62d7589339f24a0f632e51da9e1b13631f461a48753b756c3322032cc27b32cea63cfefadba56952d7ae35c0166b63cc1e329938a33728a2ef6fce3372589da2b9bcc80ae007dee3e084b1656349f15145905689ef920807ff239f94891b22057385c7b97ea517b1ab21bf5fec8","enc":"0400c708757d53d8a1ac555426d660014fefab2676fcebf62d7589339f24a0f632e51da9e1b13631f461a48753b756c3322032cc27b32cea63cfefadba56952d7ae35c0166b63cc1e329938a33728a2ef6fce3372589da2b9bcc80ae007dee3e084b1656349f15145905689ef920807ff239f94891b22057385c7b97ea517b1ab21bf5fec8","shared_secret":"7258e75f7c2a8ded295523a7b99c1045925dca1628a91bdca9a2e1bdcc187eee3b627f2ab6a73853c8dcb13a95d0980585c21c25cf92b7c9d945430dfc47e690","key_schedule_context":"025c0b2bdbbffbea1af82c95fa5560defe4ba0a05fd3c301cdfab3bbc2fba9783d13d14ecba2cdc7a7c1f544087eb5b3a22ca199e34879b2bbeab3d644cb2a005dd8854451600d718851b126f132b5ea0cf6942b64e7e586a7f8877bbcc281c8f6c005e9d1c201fa65882d2162ed577741da4aed5c33fa050d83feb94a4e88638c","secret":"dc6a1631b3fbc9d6b6b856d60738cefe1743cfc14d1ae0627b38386b9abc9b2f86dde080bb6b9d7c3eb579d6bf599765cb4a5e27cd134703acc06142901164c9","key":"eedfdbacc250f004a9a4027184a95388f9ebf86ce9593c81921da9eef5d9f6e9","nonce":"8c1fb99aa9cca28b2a1ac3ec","exporter_secret":"1f64d525bc6f36488c46c0650b6f0c10a887e0e300737a2c167e4ffd1b4d91193750fcf26173f0c8924f6a86b01fac3f6753d4e9f91abd92b042ae3218d7f45e","encryptions":[{"aad":"436f756e742d30","ciphertext":"1f4da6829a7336ec414ffeebec31807dd1acb2ec248b165b5d29732dd0057fa76be483b9af01437b32ebe6c061","nonce":"8c1fb99aa9cca28b2a1ac3ec","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"168714b29e7f1c3a91dffdb6cc576b7be34ef929b7ccd598435c4ef1af52c5d7ddbe43f51ac50b27bbf9ce0e73","nonce":"8c1fb99aa9cca28b2a1ac3ed","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"639d9f6c9ca75d91fff8d4a9b0608d10db800fe6a1ed208a09fb907f70a327c61414a20e4910a54f12f2ada7a6","nonce":"8c1fb99aa9cca28b2a1ac3ee","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"8f90fa8fcb29c639026f1f56a6ac3926a0a00f683ae8ef41d96dcb1227b67a3e95293864d68e3db50cd027d3d5","nonce":"8c1fb99aa9cca28b2a1ac3ef","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"e325abd75e86991abc1ba269fef64c5ccb3a5c1636f4c8e026205ad45470cae1771d9a5c87a3a21af1d6b89cc0","nonce":"8c1fb99aa9cca28b2a1ac3e8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"e1a27236cb42c406eba76558911566feb7599ed953f9a90949a26a2f58eb1b3c3271fa839c30fb94e25a50b98c","nonce":"8c1fb99aa9cca28b2a1ac3e9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"2c4b97f2267c0cdae0dca989a4e2dc273742938c0a512839e4ead5c27c6c37941f181b6ab9492abedaf1139f73","nonce":"8c1fb99aa9cca28b2a1ac3ea","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"f47cb2016143f9c989a456f608c79fb482eb2100c7df02961f51db7a52095560e12fb2014838a44ae3bb714ebd","nonce":"8c1fb99aa9cca28b2a1ac3eb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"5a0ecf0fba2d379a909080d947a2396541c7cbe17b129197a00d3bf8ada54e042de1b9ea7fac92ad212ea44507","nonce":"8c1fb99aa9cca28b2a1ac3e4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"923b8cd6aaa17919dc2a7781aed4683be667d0e1d3813e87ec1cdf1e3831ff4048200f86feaac65c905fadd5f8","nonce":"8c1fb99aa9cca28b2a1ac3e5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"7a96638a8687bc888f4b0d085684dc250e8e6f8781d3f9529863cddda962f26f"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"647aafb6c2ef4fed30aca20558f1c3d20adb5b113ddfdd9ddc382226ddad88d6"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"0c1623f289d451b5c9409ff9c249ebf93b6f60f7b26220d8f440d34b3d953b77"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"dad5bda5c3f44c7bc916083e5cabf83d236ebfc11969bd12f9749f6343cf37a7"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"5aa4b65d67adeb2bd6c61d69dd1d9f034a5081c6775ef18ce0e55f5047690937"}]},{"mode":3,"kem_id":18,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"46592c2b171b8cdcce89601fab103f63ed43badadcf9df62a928ae3b7fa91f269eff3485f6401c374e19a8bb988005626b9c26d39795282b1095bcc4f62a67255e15","seedS":"d02446c344c10cd162486caa69aa1156ac3066e0fd668fa7faaf13bdbc944edbc0cd68ee36e4c30ecc36c2c5ab0978473eb1b5dcfff27985c9328877e85fd48b657d","seedE":"dc1fda9b21a1af6925ecf9ad79d2422f698b4168587c7908b36f5f58352181b9506554d8d8c9427e0dd2cfda25f0eabf58e9f5597e1b76ac12c799fe96e3cc03dc59","skRm":"0060669f64320d18ab930d3d8445d08c60cc160c7f6fec3cf00c0d4fd2683c78a4fd379e764717e8c15d5ec65cf35c333113c8441249d17f61d476b55cea893b54ac","skSm":"01e1aac5ee87bf982e74faf7a452e9336084472898bfb9a5e38b3e6bea42e5cf8b8dae5a81e0de94d01a27f3f519d7bf5fa2fb6210cc704090062c230eff8ab45395","skEm":"01cd84ef7d3c0d780d48e74460dfdd6c8af9e7658c5fed7a9e5b24c77cfba485ae985ea0f12bdf7d71a30842a56f0eeab035c6154d0676ef83d7ff189aba3581c8ea","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0400a45f815c40cb61ab387708fb38cb3283dde4750bec539d124ce268ea991554fca7ace0d096ca2607c4f9d53e19a45b25415f4eef39ed601a43ca15b2de81b91d1e00f2a93bbc4c2ece7841e67916d23f5582bc0930bb8a22c8401b7402511b93a28887ecd81ca17ae2a3cc11e9e9663ee1385e8f245d4a1720bcd8334faee88ddb849a","pkSm":"0400a7b0299c29e52f560b84c357c5b3b379a3f32b1f5f2c48c89fe88c655f28e980dc6deab743cca6a12eaaa1df826f25d17c5eb8fcda8d6ca207153a24108f59c675013edf7d12d93f82de1e1a47d1fb27d082f3dc1ca605792b11171c8e0815f8c9f575e7fc0bbcf6108a0326fa5fdf713282ba60196d6524ead737d512e3b1c0e94c69","pkEm":"04007abb917b25112c8bf9a75233c90e0f55a4b6cd4f52a9f8a8856e85f82bbd84ac0d1941f01aab2c7846e6b562c0f5168727f4443acb84249f357d591f7bef8651d2019e0f9ef53c20a74f6cc9e6080e792877201ec7d4fb5fa22e184d1d848314811a3d110112172bc802805ef7405dc0fac4f5f401865f0410c05d172524a71039963e","enc":"04007abb917b25112c8bf9a75233c90e0f55a4b6cd4f52a9f8a8856e85f82bbd84ac0d1941f01aab2c7846e6b562c0f5168727f4443acb84249f357d591f7bef8651d2019e0f9ef53c20a74f6cc9e6080e792877201ec7d4fb5fa22e184d1d848314811a3d110112172bc802805ef7405dc0fac4f5f401865f0410c05d172524a71039963e","shared_secret":"82913b51b3809a9177ab90ca628e661126d8b64ca95739f6172b93ff511ccc0b7b6255dd9bc17d692b598acd10c1a3b86fb242554824f06df693f75c5d2935d6","key_schedule_context":"037344e204124da2a856fc5693999bbfd1242c27f4b2f16fdc92751d458fbb606adde7aecc32db4dd5b0fdbea7655c7c0e8363da1a34370ba59bfdb42108a4bebbd8854451600d718851b126f132b5ea0cf6942b64e7e586a7f8877bbcc281c8f6c005e9d1c201fa65882d2162ed577741da4aed5c33fa050d83feb94a4e88638c","secret":"fd3c39728bad99fcb7c2430841690994f624a2bcfaba38affe3596b651bae01ccd0b7b1c9fbf10de0fddb9ec06bfc9dfcd0c1fcdb2cbfee6e27e4a653bc24344","key":"7262c38cfa0c8f468160fb1530579d53c433559a58bc1acf1facf5231bdbc7cf","nonce":"65560e6c300fd5a0a7dba420","exporter_secret":"58a7173f251e03619d615542539e40c9bf480f96efd02621621106296dbff95aff003971cafb9265d92ba3d7fbf67283c40364f7def04cd4d6429c015172e76e","encryptions":[{"aad":"436f756e742d30","ciphertext":"e0d4d9b38eb8b8dc1f2c986005a83b7df5bde76d48c95dd59bd60456639a82feb3ea3205b6fce5e672fad9c73d","nonce":"65560e6c300fd5a0a7dba420","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"a905aa5e9c23600c8bdd8c45b2bdd3352727175c565d4d60b7e4d7083b10fe26afde4ccdab36726e6e0c26d78f","nonce":"65560e6c300fd5a0a7dba421","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"f8d5733f3b2e850176ae68f998268125662161b4edf86752a80b70ec03762dcbb8508c495852fc313cbca8e065","nonce":"65560e6c300fd5a0a7dba422","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"800f11fa1dc970978fab07a6a4fbd9101239fbbc931167373fd2ee5129cff5e1db3ae36d9596ce9476ec2a925a","nonce":"65560e6c300fd5a0a7dba423","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"644ce2fe731274c00b455a25e7a733032dd2916d25a4a39d28a89f3f5282b12b20afde48860ea31f187c4c4ecd","nonce":"65560e6c300fd5a0a7dba424","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"3ef4ede51efec97da0af338e7f2c8a30885ee77c0a23cb33aaf9509118c97aa247bd40c0b0488ffdfc9411a77e","nonce":"65560e6c300fd5a0a7dba425","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"2214739cc80e0455e890177151f3395f79a2d19c121065e4e8f67ebcbb0c10d530e931327b1ca9fe506406d629","nonce":"65560e6c300fd5a0a7dba426","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"25d21a04b992960fcfc181ccc73d2106951c7ee6a6edbe8aa9de7d9f6104a16823e843fb30f02772689a01b3cc","nonce":"65560e6c300fd5a0a7dba427","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"a1e2f5eb982c4be137fd6deff6ca1f20241d79b1428cfe29502df25ba47d62e332ba396cf9dffe00ba694ef866","nonce":"65560e6c300fd5a0a7dba428","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"9be2404dce63045a15f601705f7d6caaac998e78462485474965b6c2c56eca046fe15b69b2e93288cbaced2bf5","nonce":"65560e6c300fd5a0a7dba429","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"1f80dacf98a15b2eff384c6aac4fd98dfe425968fa7d8ec76d2361da973acffa"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"0eede8db2d45fbd3a3a4ad5ad47ffa593e57a9c6b165dfe1a4b3a179f6583276"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"0e32f7da3eaa86937d5c6564d1b478b498091b8d783f331b7574762c77f11081"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e658a561a3ddecdb7adc3357c553e55c3eef3ff9c8698979c59029d4c16dbbfc"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"3f2c9c7eae96e43cefbdfb5df2607a442a3dedb0bfa6c9a3b15bf7475dddcc6c"}]},{"mode":3,"kem_id":18,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"afe4407749e1accb6df86bda61cd7d61a0e295efcc9ddffab0ef8324fcf281d15ed770776017518bf16740c0ba6523eced924c525a676ef0dcafe60d38042fff7788","seedS":"03e44c22c38d193cda5d66a314d9f36605f3c3b155acde8fe56ed2261879ffd85bf395053af9f51d54f4684ec92d7208a95692ba920c9e96f8fc131dfff8a1dac71d","seedE":"f9991b4bc4ec5ef506e36eab43ef7422b068c5e66e2ce15c0d7bfe44ceff2a3807a87638d1a3797e8f774cdf681248589cc6894d1a64da8027666328a1c32165963a","skRm":"001b6f9d8b218e96132f6f51cbbebafca37d0cbb6ef517034ce41534c90ed4687c84beebc59e8065b30937970050053a3896a6367d65f444484133e7d86597ad48cb","skSm":"0069d82b87057772df7f75dc74e78896b3450f6b694022e670f7b813bb95f9b17c8ea57d07ee79f49510d5d479fabcee75c459ed730d50ea9e055b1fe2647026aa17","skEm":"01ba14a645f950d05dea697069be887b3bd90649c7f2877ef501f83ef231e6839e07428c1731200b44082a6f184ddb26fce2641d855bf66564470752033179570bff","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"040154dd6d80dcaf2bcfba96edb7e52550e41fe5d768729b5559dd77334d3ecde2b88c237f250e08184098445c3fc3596c47cdea9a2e0435f9ce472f199e5eeba3b7d100b5f6a6a55ca05a36dc544ed5cbc2b556f5e7149d11a8e7b6c5e85003118d2af94bbdd82050ece599ff29b4435da6acfb7ec3f364b8a95c577cc70a6a9a42d17c6e","pkSm":"0401367b19816b3d3a8c71cc53d2037793260a90e979ae9b4d3910e52b3cdda705dc29c4d63dfcfa0adeb2ce2827ffb52e6f0ba7d0c4aedabc68e6dd372368b8a88784014916cf8e23c8d529739d074dbe7045c81881f09dd163bbd7e9db6bcb82a45e0ef044ca181d709b7c325900e52984b82d4120d9886be387623bb9b82a4ba3537f0b","pkEm":"040011ba58eaa601f71289bcc8fa90bc70d35bcaf0d2f0afa02a3d0f4820cf70906fcf1274f2a1163081a85e81794e9fc285a57572d433189e8662fcf74f352e6c3df7010eb5612096b921e03eeb4b6bcf2a5abbc0d6dbf060d97f87628f19d97ec60a7524c28fdc0d0dbfc1765909bced9a10371abe96b47c55454ea9659bb139df6907b5","enc":"040011ba58eaa601f71289bcc8fa90bc70d35bcaf0d2f0afa02a3d0f4820cf70906fcf1274f2a1163081a85e81794e9fc285a57572d433189e8662fcf74f352e6c3df7010eb5612096b921e03eeb4b6bcf2a5abbc0d6dbf060d97f87628f19d97ec60a7524c28fdc0d0dbfc1765909bced9a10371abe96b47c55454ea9659bb139df6907b5","shared_secret":"5313dfd8b46f5749afe2457b166fe3da5ab5fd49b04fe5a13c3a23c9493320c3a32565d8fb4f8e31b0b9fb5ec81317238380a0d333afa4f243b43fe4d26626b7","key_schedule_context":"03ba90b638d5ae2c6488edc28f7abc5188a60b96c6e96367794c34759163a5ebee443d2f641d7a0594ce08b4f3653353ee089cc3091c939e8b6fe3eb4ff3748cb285b4705ede051b724ef3f87671693f5557e24db97b1d0f9157193ccb5e5493f80502223f08b249a52c75d3f0c7d70e95b529f34e03240a6755ddc65ee7b72241","secret":"3edfd3e7d221adb57d9f0c2c8005ea31e712b0d2fe21655555f9f22ba95e879669f3b634c76c21a9be38ac1965dece161a4d8cd3c63357b4f3b25e249eb5d453","key":"852e9e96c1324407fec8bfab71bcdd586984471dde8b1aa9695adb9e82b177cb","nonce":"b23012a7ee4c4dc0efa5615b","exporter_secret":"030d34aeff16f253db254d669d9a94917e098e1deb058e0c1e357868a015a76b249e8f5b339bfa9cf9cfc6844af2baffccffeeee9e64f3f912e7d738bc4c53b6","encryptions":[{"aad":"436f756e742d30","ciphertext":"c3987a07a677eaae164acf205dd188a613e6aad523b82c7d9f223fbf002ee21487a890d1df5c87f964320f6b4b","nonce":"b23012a7ee4c4dc0efa5615b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"91d2a397e07129db85c99852fa4341585ddf921d211a8f8d70b6352405210dbeb362b2dfb4d56e2c62ed5a82b3","nonce":"b23012a7ee4c4dc0efa5615a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"bc130311bc5d2987c83517797265572b43137ac317d826e59e5331a63bcea7db6081b7061ceaa8276baec39aff","nonce":"b23012a7ee4c4dc0efa56159","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"55bd00ea2b8183677a1d2dc4dbca2ab4ec2c4b39aa561113e87bccac91eba37d268c1f61b5fb2c711ea40ccd30","nonce":"b23012a7ee4c4dc0efa56158","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"a6cc3d0f30af2a46f60fff15b7cd5f256c31741085d4784a9da338f19696868495ab767f697969c476b835fff7","nonce":"b23012a7ee4c4dc0efa5615f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"082507620a7c623154bb00c92ddf9a391e4d6c3684dfaf3f55a8c4286abc781f90f24409438f510f7d16dc5a28","nonce":"b23012a7ee4c4dc0efa5615e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"62ac7e5c1a4a5ae2b17a8834b03c0ba2d6a8ef1fa3f83e8d11dc3cb489739ab793e69f0f8995b9ba74616f0328","nonce":"b23012a7ee4c4dc0efa5615d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"0c99ad2a03da9cba99c0eb5f9a70d04d028c9467379a42751af7fb38d1aea8407e2db454abb0a3dc2f547ba0a3","nonce":"b23012a7ee4c4dc0efa5615c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"647762eb26e1e1efd20eb602fd9566a0ae7a3bccbe21251cbcb8bf330b5fe10b5fa26ec765c6cda817a9b7f084","nonce":"b23012a7ee4c4dc0efa56153","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"49f0b0e212db9d73109d28b2be96309d7280d59f2e780014feea75ac0a64c4df83b00a592338ac0668e8d4c34e","nonce":"b23012a7ee4c4dc0efa56152","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"ac45b252413470b0d0187a96a64f3efd83fb804f27f3073d6175c34449c51380"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"57fd376cae557718624dc9ad46d56423e79c6d48566a0e7cd018323213a91b96"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"6f654552eb5ef7820273290de89195efd8e3a5ceb9f1a581fe7c0187015f12e8"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e30fc773747808c8be4968e9461e90467cc5d2026fb99851a64657128cca0e80"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"e00988474bc3c508f397e55d160eff3d3f01793c6b66e09ad0405500f8894d91"}]},{"mode":0,"kem_id":18,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"34f96d72455fff5cf5cbf7dc32ad32473cc48f407d156f17e946fa9f8ec8c244daeb885dc5f0307d1fbec88c964dadf4aa6e0acb7df5e371bbbdcd0f6703ab1e9df2","seedE":"23df8975e1b2996c05bd32bf4cbefafec98a1f9880cf877f05af5a077d976f2bce0af7eadb24359767878cbd60f0df4d40708e900cfa08f4855b67634f842f784656","skRm":"00e11b5ce02614d436787a07b371af522c16864645091df9d1c3c4bb50870dae5d3229dd0f3f3955bab7933454c6f9b958a1979da757c21e705bf56920842aeb4dc5","skEm":"00a135a1d72cc0d10d654641f9f8c6d0d666419f8eb97a6d288dc8b091f8d8c77de3dcd0ab4b340efd7f1bdf9f511f00b33b35d00c9d8d87c00192ea8ed4f137cdfa","pkRm":"04000f20a75c2c4797a2cffd54020cdbe8e8ffa975e3222323bf160e667db88b1deded22d9b8ef5e4401c86b5f293d353d6d28da03c06ed36e5c4759eccaa61b06b760010418a7e5ac5ebc270613fbc39dace37fd082c58680c7861be126627e45d99dea4311dd4075f0288eeebe090216d367c661478fb73f87b1bc7f34ad819e968fca67","pkEm":"0401e061860220dfd47ed6b2911ab27870e3d798fcf7c06328e446648c781f60d7c71389dbd1bdb41ce2bba456191c326e3c44bafcabd13b85bdb5b98438abadeca55b00fbe389412fe3d8770b72e6b096e5d1777de3b75cfbb8d920d9c2730a05f71490e295f8304177d37b9c021bcf9ab79b301f59c30f46efb50cb20f13a9090f7ec19a","enc":"0401e061860220dfd47ed6b2911ab27870e3d798fcf7c06328e446648c781f60d7c71389dbd1bdb41ce2bba456191c326e3c44bafcabd13b85bdb5b98438abadeca55b00fbe389412fe3d8770b72e6b096e5d1777de3b75cfbb8d920d9c2730a05f71490e295f8304177d37b9c021bcf9ab79b301f59c30f46efb50cb20f13a9090f7ec19a","shared_secret":"032c6f5a957f0f62c33d26c0204f79a0e68211f46c8b9e199383d19c91a33621032e423d9a0cc73688ea51eb63902e0f6f94738f2ed59fc5636863cafdf203fb","key_schedule_context":"000c4b4692570e10a3ccd0199ca48594d44ab05fdec28bbee21b8a7c0ba7c15b68cb32a4df5f9f6e4584454e9bc484777e35170a86e8efb50ff97fc9c192657bd285b4705ede051b724ef3f87671693f5557e24db97b1d0f9157193ccb5e5493f80502223f08b249a52c75d3f0c7d70e95b529f34e03240a6755ddc65ee7b72241","secret":"ab42a848d9780ae1931fb23bb04ffe56c48baa7c434bfac848c6e82086731d079a11bba87bff947a3045c9a695435c7e1b3e61c3dcf9ca52f9a64ec304771b83","key":"e35998471d57288d507acca857d1a54aac979b33a09970792d701750c5ce80e8","nonce":"b05eaaa142a6c099b1ca6bd5","exporter_secret":"087ab9bb45fc44ef31ad7613d1e6e23bff633cc62419b2a9a2fb85d758498c09339d6825f6050c022a8dadbcc6cbce8af6c3dcac5c0922643add9be37d650879","encryptions":[{"aad":"436f756e742d30","ciphertext":"f8e000cb5bf86633c9b5843fca18a9b76d8403b6e5b34b9d32e17b54bc8b3fd8e1a3e6d46bb77e183923f898eb","nonce":"b05eaaa142a6c099b1ca6bd5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"55277cc7058163d4a452475b799860918baf2d1abd39dc1cddafa7644a7f7f4531040573c4b28d51a843fb93c5","nonce":"b05eaaa142a6c099b1ca6bd4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"f0e236a160eb3099a54bd9442a00cceed874c3f8e978b4c8eb8d5d9422ea277f53d4c32e256c0319fe8ef811be","nonce":"b05eaaa142a6c099b1ca6bd7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"36c6f570dc06af1942c2215c938e0492a3ca55454e178695b68988a6d0f048eb27243481c380e2b087f7b98746","nonce":"b05eaaa142a6c099b1ca6bd6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"47937d634c694c2bc5dc129f63575bc8ffd124c74bcda217611ace1e85d0f2068502a07f8bf9e1b11b866902ee","nonce":"b05eaaa142a6c099b1ca6bd1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"d255bbb6093c09dae581acecc9ad346ae6dd36434ab901049bac2c025f596001598db8916c4e18693947883f90","nonce":"b05eaaa142a6c099b1ca6bd0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"eed848c4d26eeb0ff0d9efd83e58141ccbbad6aff02c0bf860cb1c72336ef675e0ab8344783da73c88d4800f20","nonce":"b05eaaa142a6c099b1ca6bd3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"cb5c20d1933a689471c4b41dc0536f55c632ed5b813ed858698f48212182b46194a65fa3e45f0dc2c85e709f70","nonce":"b05eaaa142a6c099b1ca6bd2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"b17bb76868696bea4d2f53b0093f3417ad7abb420b9b70136f0e410412760485daac2d6b8079048956c27339cf","nonce":"b05eaaa142a6c099b1ca6bdd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"0e018ba4f0e68609e0c25d1cbb60b76d3e82307a4082c2f84644ba057d4e30ffad17dd88ea84e6991e1bdbae56","nonce":"b05eaaa142a6c099b1ca6bdc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"08304ed9b5662626f17776984b6e436064cccd7e127d310500a7a5a1148bda62"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"d9284031c5313ba52af01c94610522c461b197ba5e41bdfd40715d3160b9ab6b"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"b237a77ff26dac6bc943e8c1591450ef14746d3e5c0cfdd992c83511639b639c"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"c65e387998306596a46ba5eec6de3656981a9109c04a61189872e7d024d19061"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"44b1e6f27a6c8a64eab67f38e9e05b3d9faea16b8ad15754017be8379f31c7df"}]},{"mode":1,"kem_id":18,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"06ce5eac5f1a343457310f980a85c98a025f7d347a4989f20b37d4490be06973e0e7387b354741bb8c68b0430b92d6c40d261a5133a9c4089b1ac330a0942b8f1d6d","seedE":"215ad8753c7ec0943db82736f0f27dec22ef24e0eb907404fb54529a80bb295bf190e351c071152e45a40d8b334e26d129017759f89c05eb9e4d8fe5b4c101332e6e","skRm":"003f9b68b4b9bb36a971332ffd3c261ef9ec5f3a1b35709587d52451250aeccb00ebd45498fc49ed2f68e953cfef143a94042069dee78453a4ecd92723a0378d1d30","skEm":"0078a53316b3eae95a32615fb823ab2c4f9d1a6a399781c91b47f6346aac8c7048d0ee49d13eef1caf06d8a5db7676650fa502a93a7f25cda37274c4f0aa831608e8","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04014c8135371e0adcf36f3d89a4517e432f52685901e9007029826482cf88f2c32d127275665a1b7e899cc0669644a8568268c30e4138c2077fbbf86473a74b9d03dc000865206ab6144f0822b71ab108ddad34de1798baa0fb0b3027ab79f6309767a0fa6d897d41be6d39130396f8a8e294d63dce5a561b34a21021d3241fec084feacf","pkEm":"0401e84ce1918ec8493e0f1677eb82df1d572d66edf701868d1069fc9fcd2e375b8d87db4c3ace7377b40075344f0998381e6153128a25b3fdae0dee905be99beaac42013c034473a22ed6b47d61a1b73974c7b126d26237f6025384467f0c5fcff0b00fa5b5f3ebe307d1d62022e63b023ffbba6fc699bbfd194b10436d36520b65bed0ba","enc":"0401e84ce1918ec8493e0f1677eb82df1d572d66edf701868d1069fc9fcd2e375b8d87db4c3ace7377b40075344f0998381e6153128a25b3fdae0dee905be99beaac42013c034473a22ed6b47d61a1b73974c7b126d26237f6025384467f0c5fcff0b00fa5b5f3ebe307d1d62022e63b023ffbba6fc699bbfd194b10436d36520b65bed0ba","shared_secret":"2ad342c278b53163e11fb875f0faaf20e9d94064f3f59f0666f3d0c65bd32ccfb81014d230beaaf020bfe2f299207ed083e22ea2fb969075bac0ff0123f125b8","key_schedule_context":"01ba90b638d5ae2c6488edc28f7abc5188a60b96c6e96367794c34759163a5ebee443d2f641d7a0594ce08b4f3653353ee089cc3091c939e8b6fe3eb4ff3748cb285b4705ede051b724ef3f87671693f5557e24db97b1d0f9157193ccb5e5493f80502223f08b249a52c75d3f0c7d70e95b529f34e03240a6755ddc65ee7b72241","secret":"ba24c236cb1fa88b056dc0c4785fb9f84e21be13457dfe8e1de33880774a7623f6433991c3c2454c8730b29b253d059db2ce45d2b64b5a03e38655842d0abee4","key":"e0f3753dc876574371aa8e394a7bb57d7111a9ac89e831d01fab3e696192c4f6","nonce":"1c89b4c0bfcc29ef25a86332","exporter_secret":"6fdc99f9f22334e67a7c001edfa51022937bd55b39b55e6338241e9c483c50ca80e2f6d55ded200eabd6b5906f2436fa7add2a19522bf1c5e7ae3a6d265aab60","encryptions":[{"aad":"436f756e742d30","ciphertext":"9ebc5df2bf8909d59be29c6c21ad762d155d0da35d56c307ce5d07725a27fd4b05dd81594b11859e69c0314ad0","nonce":"1c89b4c0bfcc29ef25a86332","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"3a386a718d4f1b1236b53b80930cc6446eaecec3344ea5faf9dea7baca6cd9b72a9c380aa228129db8e2b264f0","nonce":"1c89b4c0bfcc29ef25a86333","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"6fa2d6e7499ae9e07e6e74cdfd6ad0268019ad1148eb66b8f838a60f511310983f9ac8e3066a24da9022bbea10","nonce":"1c89b4c0bfcc29ef25a86330","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"185f703fd97382de28c5112a16644e0f2fc93d298fdf8866c264861b753d1b650e43ba2a11c4ec5ead75edf472","nonce":"1c89b4c0bfcc29ef25a86331","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"b977ef5a55a218276270b82b9e8cb90834ad084d79c98510f48b6bb67f8b3c5d543c027d5a5e8684fc5334cee6","nonce":"1c89b4c0bfcc29ef25a86336","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"174c17d85c76cba81350d6e3defe1508d1cb3dff7c29248861fac50b41cff84aa005d465003570129bbfc81d43","nonce":"1c89b4c0bfcc29ef25a86337","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"993cef0582117fad1c9c96912ddad7181c4f58b83e7a04e6ab675013a400e7c7fadefdd9a6e9067db2560834ef","nonce":"1c89b4c0bfcc29ef25a86334","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"0529400ccf6ec71e4ae67825a0382600fccf79bead2a7213eb6d5656ac106fb2ca8bae529c8074f51f9627e80c","nonce":"1c89b4c0bfcc29ef25a86335","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"447615a7d3ace31a21318a17c12e0bd8591f84c97af7c8e0743d80bfc528a57b7cbe1997dff9569020205a756a","nonce":"1c89b4c0bfcc29ef25a8633a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"539df2098a05ecca7292f3365710b5069edd4cb08807aeffde0998d02e26262daca7f30bc70803e16625f7fe70","nonce":"1c89b4c0bfcc29ef25a8633b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"c667337f991a30700c05e844f2583684879d751a47233ddb648a26b11d6dadf3"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"5f1d637ce893b6d7623363ab5a5e96da30dc38722066ab47083926024d9d10f0"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"678ab9525540685f6392caf8e993a55c75e1a1d1d3f86a5e9e518cbb07f526d8"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"776549da419022b315f56c0bf22e6e52a022d19e1e309068fccac969c7aa20c5"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"9c76568baea3c1a56ecde1563957f06eea16450965e99a4d834c2fe99846fa72"}]},{"mode":2,"kem_id":18,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"bdc75e222461b29945232c18e575c43dfbc87248babfa4946ba5cf81bca05738f37c98a353ea5f4a040f3e4033af0f23a23ea247c6b46d51efbeb62c7b023ea3b148","seedS":"14a6b525f3a31214e0622df5914b1e2c88f085ec4c365eace3776f53b96f25dacd53655ded74fa0404e2b6fad7bbea49d00510f6cc1586db408e099196af3712e31b","seedE":"663368cede158c61cb598d3e941018c92c57dda845769ad43edebc5421faeda7c8f3b7b151991847a24af7dcaf68d49b53746d57fc56c6273a5a8210842144b9ff5f","skRm":"00fd468b7f46869792a31fddaf39a2952db8fb25f0f70c2dc1c4dd755c579837e7bb4107b15c516392a5fd60603e1d4eb96588d9f81d4add76a86ac3cbcf17517b03","skSm":"01b84829e2c24fa23e679061d049d2e0ec92bbad36f45466dd05b62f63308a3443bff73b7d4e602e3288418b6300bd679f0b733f46e820ec30ce52984ba447a8f15b","skEm":"0003d8bbac36045c78cdcab360682542310c5c7381ef1f7a7155008aa76209a4b04ea8cd1ae25af3666f49643f2f79bc2b242acb3cbbcf4c4a6acce668bac8da9e4a","pkRm":"040180404868dcb3e9c55a9dd5d667bdc1f7745ad4911ae21cff8a84d54ff2767ae2f52b2dbd56a7359afc5d63c9b26c6704597d37c0d10b2a063bdc2bcef872ba266901405f3b12625fb57739bab027da62622732fd098bb10b3c9be7d9263ab58ab40da8ee9544716de4ade3dbce40d0b3d9dbdbc2935955d5ead812bfd43ae8f3e3dd87","pkSm":"0401780a6096a2b3737a94d2fdc7cbe17ea25bece2ede690ec5b8318feb09710c9dc6985d1d55e71d82899b46b8f81dcf0a5e9a728b0b7c1896b6ec2cabf314b017a3100fed5e4a2a147da5f747819b894f4768e8d15ec6b44b983dba8c927d5988d8b48c49cad592197f257c0a490204d2a4cd780f9ab0ec47e466bdafac2cecfcecfb0bb","pkEm":"04017136a689703e87f63e9a72f63e8eceaf0ee7430212f5a95b0a8de447276fb8b4ea1f95e429776a2dfe0e687327072bba3e422d2454f74da6a838caa20c0e420dd700de3828b02ad43ce01ebd3e1524e83c2ab4f1c8989c252856bad2c3d646137c627f64a682dde2af46fa3fe1461243992c45039d7365bb5d19e8df355dbf57f426b1","enc":"04017136a689703e87f63e9a72f63e8eceaf0ee7430212f5a95b0a8de447276fb8b4ea1f95e429776a2dfe0e687327072bba3e422d2454f74da6a838caa20c0e420dd700de3828b02ad43ce01ebd3e1524e83c2ab4f1c8989c252856bad2c3d646137c627f64a682dde2af46fa3fe1461243992c45039d7365bb5d19e8df355dbf57f426b1","shared_secret":"0b92b8a7ab50f9c1d6412174d8b6cce17e7eb1ef0b455ee9bd01688fae37b1a07f4b69fcbd15c45aed54d9b05f32c1c1e79e9da25ecb290b3255b94059667ec8","key_schedule_context":"020c4b4692570e10a3ccd0199ca48594d44ab05fdec28bbee21b8a7c0ba7c15b68cb32a4df5f9f6e4584454e9bc484777e35170a86e8efb50ff97fc9c192657bd285b4705ede051b724ef3f87671693f5557e24db97b1d0f9157193ccb5e5493f80502223f08b249a52c75d3f0c7d70e95b529f34e03240a6755ddc65ee7b72241","secret":"1ae455b1ff4262402d51ef444b365e3fc4a7db7fbbe803ba99dd0c95666c13c79e4a076361a51fa2dbecef1203cc5e8b41a4e0f0a557357aa0bcf153f557a89c","key":"74d2dd38d29d85a7fea3477ac829f87761c895dae1eadbf08bb3fb54cb1a3002","nonce":"26491428068e251cd5ad4abc","exporter_secret":"199eb590ec1b3efba9862f2aad38cbaffa7707f6efe322f51b739dce559d2790f849f42df2b3970e0b11c3ac167a8b7beef3a767fc010d63d8842b2945858e32","encryptions":[{"aad":"436f756e742d30","ciphertext":"4c91d2555698f13bcd72b9a7182ceff63b8b87923878a8c7cf123544021d507793e2240002e0cf9eb6194a4abc","nonce":"26491428068e251cd5ad4abc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"695b3cd21bbb0d761f687b491a26f7a37b6882077cd009088b163252952be614c8298130fa162f172c79ae9b08","nonce":"26491428068e251cd5ad4abd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"297f2f4016e8f8548237f71260a61d97988aa735e51416c5d50f9526963d952358879acdf0d42ae62ff752e398","nonce":"26491428068e251cd5ad4abe","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"77f36aa92abfca832eff9eebab38aae243fca2f5e92104e121073354c5e91d0bae83bbb0ebc22c2f714ece511a","nonce":"26491428068e251cd5ad4abf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"cac020669fc237f86d87ff01da53700e30926ababaa969e9cedff09927fea51ba085968e5c771df21d221c4586","nonce":"26491428068e251cd5ad4ab8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"c5ba87783306fef4dc9194303842157f15297db455e03a0ab3d9fcb1668aefbd04fd67061094430e36d80c0277","nonce":"26491428068e251cd5ad4ab9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"5e8843a20d892552805509ce1fd56145d7daecfeb9ee68f0219acd24a30450c98afa0c71c081473126e0183619","nonce":"26491428068e251cd5ad4aba","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"41794416c888b614a61e1ed77e4a0e67be499f5149776df19fb21f20b513931c9eaf176f05d04a774dd575da76","nonce":"26491428068e251cd5ad4abb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"5bd00423e8ead9723974afbc69dcefe1c927e5a1d2468bec18ae974716bfd4c0f611ecdd733597012e07e48f23","nonce":"26491428068e251cd5ad4ab4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"beeb349c2d3e9d9854e10360c693276fc37b68bb525f1d5ca7e52693cf56fe5f3d40590cb4881557aa281fc0a8","nonce":"26491428068e251cd5ad4ab5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"c2f634df11bdf5c8fb625574b5dca7454ebd831c429a4ba93bce77f7da313eed"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"0194148e428330492491c5a2edc42ced978e95a8aef4f7dc232203dd0b458516"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"bf81fe58fcc3ee0fc74498e411f00c29121027c435ef10e74a2c665dd905a34e"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"b8e3f171a971de018ef915256f2c0df13f98f4658b2633ae4bba37ba5dfe999b"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"fa48a2235fecceb879de1ef4f1871a74304b96d49c68c52c101836a88b35687b"}]}]
\ No newline at end of file
diff --git a/src/crypto/hpke/translate_test_vectors.py b/src/crypto/hpke/translate_test_vectors.py
new file mode 100755
index 0000000..d53787a
--- /dev/null
+++ b/src/crypto/hpke/translate_test_vectors.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python
+# coding=utf-8
+# Copyright (c) 2020, Google Inc.
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""This script translates JSON test vectors to BoringSSL's "FileTest" format.
+
+Usage: translate_test_vectors.py TEST_VECTORS_JSON_FILE
+
+The TEST_VECTORS_JSON_FILE is expected to come from the HPKE reference
+implementation at https://github.com/cisco/go-hpke. The output file is
+hardcoded as "hpke_test_vectors.txt".
+"""
+
+import collections
+import json
+import sys
+
+HPKE_MODE_BASE = 0
+HPKE_MODE_PSK = 1
+HPKE_DHKEM_X25519_SHA256 = 0x0020
+
+
+def read_test_vectors_and_generate_code(json_file_in_path, test_file_out_path):
+  """Translates JSON test vectors into BoringSSL's FileTest language.
+
+    Args:
+      json_file_in_path: Path to the JSON test vectors file.
+      test_file_out_path: Path to output file.
+  """
+
+  # Load the JSON file into |test_vecs|.
+  with open(json_file_in_path) as file_in:
+    test_vecs = json.load(file_in)
+
+  lines = []
+  for test in test_vecs:
+    # Filter out test cases that we don't use.
+    if (test["mode"] not in [HPKE_MODE_BASE, HPKE_MODE_PSK] or
+        test["kem_id"] != HPKE_DHKEM_X25519_SHA256):
+      continue
+
+    keys = ["mode", "kdf_id", "aead_id", "info", "skRm", "skEm", "pkRm", "pkEm"]
+
+    if test["mode"] == HPKE_MODE_PSK:
+      keys.append("psk")
+      keys.append("psk_id")
+
+    for key in keys:
+      lines.append("{} = {}".format(key, str(test[key])))
+
+    for i, enc in enumerate(test["encryptions"]):
+      lines.append("# encryptions[{}]".format(i))
+      for key in ("aad", "ciphertext", "plaintext"):
+        lines.append("{} = {}".format(key, str(enc[key])))
+
+    for i, exp in enumerate(test["exports"]):
+      lines.append("# exports[{}]".format(i))
+      for key in ("exportContext", "exportLength", "exportValue"):
+        lines.append("{} = {}".format(key, str(exp[key])))
+
+    lines.append("")
+
+  with open(test_file_out_path, "w") as file_out:
+    file_out.write("\n".join(lines))
+
+
+def main(argv):
+  if len(argv) != 2:
+    print(__doc__)
+    sys.exit(1)
+
+  read_test_vectors_and_generate_code(argv[1], "hpke_test_vectors.txt")
+
+
+if __name__ == "__main__":
+  main(sys.argv)
diff --git a/src/crypto/impl_dispatch_test.cc b/src/crypto/impl_dispatch_test.cc
index 8297e22..10a4d1b 100644
--- a/src/crypto/impl_dispatch_test.cc
+++ b/src/crypto/impl_dispatch_test.cc
@@ -57,7 +57,7 @@
 
     f();
 
-    for (const auto flag : flags) {
+    for (const auto& flag : flags) {
       SCOPED_TRACE(flag.first);
 
       ASSERT_LT(flag.first, sizeof(BORINGSSL_function_hit));
diff --git a/src/crypto/mem.c b/src/crypto/mem.c
index a864a66..0491f15 100644
--- a/src/crypto/mem.c
+++ b/src/crypto/mem.c
@@ -72,6 +72,8 @@
 
 
 #define OPENSSL_MALLOC_PREFIX 8
+OPENSSL_STATIC_ASSERT(OPENSSL_MALLOC_PREFIX >= sizeof(size_t),
+                      "size_t too large");
 
 #if defined(OPENSSL_ASAN)
 void __asan_poison_memory_region(const volatile void *addr, size_t size);
@@ -84,27 +86,38 @@
 // Windows doesn't really support weak symbols as of May 2019, and Clang on
 // Windows will emit strong symbols instead. See
 // https://bugs.llvm.org/show_bug.cgi?id=37598
-#if defined(__GNUC__) || (defined(__clang__) && !defined(_MSC_VER))
+#if defined(__ELF__) && defined(__GNUC__)
+#define WEAK_SYMBOL_FUNC(rettype, name, args) \
+  rettype name args __attribute__((weak));
+#else
+#define WEAK_SYMBOL_FUNC(rettype, name, args) static rettype(*name) args = NULL;
+#endif
+
 // sdallocx is a sized |free| function. By passing the size (which we happen to
 // always know in BoringSSL), the malloc implementation can save work. We cannot
-// depend on |sdallocx| being available so we declare a wrapper that falls back
-// to |free| as a weak symbol.
+// depend on |sdallocx| being available, however, so it's a weak symbol.
 //
 // This will always be safe, but will only be overridden if the malloc
 // implementation is statically linked with BoringSSL. So, if |sdallocx| is
 // provided in, say, libc.so, we still won't use it because that's dynamically
 // linked. This isn't an ideal result, but its helps in some cases.
-void sdallocx(void *ptr, size_t size, int flags);
+WEAK_SYMBOL_FUNC(void, sdallocx, (void *ptr, size_t size, int flags));
 
-__attribute((weak, noinline))
-#else
-static
-#endif
-void sdallocx(void *ptr, size_t size, int flags) {
-  free(ptr);
-}
+// The following three functions can be defined to override default heap
+// allocation and freeing. If defined, it is the responsibility of
+// |OPENSSL_memory_free| to zero out the memory before returning it to the
+// system. |OPENSSL_memory_free| will not be passed NULL pointers.
+WEAK_SYMBOL_FUNC(void*, OPENSSL_memory_alloc, (size_t size));
+WEAK_SYMBOL_FUNC(void, OPENSSL_memory_free, (void *ptr));
+WEAK_SYMBOL_FUNC(size_t, OPENSSL_memory_get_size, (void *ptr));
 
 void *OPENSSL_malloc(size_t size) {
+  if (OPENSSL_memory_alloc != NULL) {
+    assert(OPENSSL_memory_free != NULL);
+    assert(OPENSSL_memory_get_size != NULL);
+    return OPENSSL_memory_alloc(size);
+  }
+
   if (size + OPENSSL_MALLOC_PREFIX < size) {
     return NULL;
   }
@@ -125,12 +138,21 @@
     return;
   }
 
+  if (OPENSSL_memory_free != NULL) {
+    OPENSSL_memory_free(orig_ptr);
+    return;
+  }
+
   void *ptr = ((uint8_t *)orig_ptr) - OPENSSL_MALLOC_PREFIX;
   __asan_unpoison_memory_region(ptr, OPENSSL_MALLOC_PREFIX);
 
   size_t size = *(size_t *)ptr;
   OPENSSL_cleanse(ptr, size + OPENSSL_MALLOC_PREFIX);
-  sdallocx(ptr, size + OPENSSL_MALLOC_PREFIX, 0 /* flags */);
+  if (sdallocx) {
+    sdallocx(ptr, size + OPENSSL_MALLOC_PREFIX, 0 /* flags */);
+  } else {
+    free(ptr);
+  }
 }
 
 void *OPENSSL_realloc(void *orig_ptr, size_t new_size) {
@@ -138,10 +160,15 @@
     return OPENSSL_malloc(new_size);
   }
 
-  void *ptr = ((uint8_t *)orig_ptr) - OPENSSL_MALLOC_PREFIX;
-  __asan_unpoison_memory_region(ptr, OPENSSL_MALLOC_PREFIX);
-  size_t old_size = *(size_t *)ptr;
-  __asan_poison_memory_region(ptr, OPENSSL_MALLOC_PREFIX);
+  size_t old_size;
+  if (OPENSSL_memory_get_size != NULL) {
+    old_size = OPENSSL_memory_get_size(orig_ptr);
+  } else {
+    void *ptr = ((uint8_t *)orig_ptr) - OPENSSL_MALLOC_PREFIX;
+    __asan_unpoison_memory_region(ptr, OPENSSL_MALLOC_PREFIX);
+    old_size = *(size_t *)ptr;
+    __asan_poison_memory_region(ptr, OPENSSL_MALLOC_PREFIX);
+  }
 
   void *ret = OPENSSL_malloc(new_size);
   if (ret == NULL) {
diff --git a/src/crypto/obj/obj_dat.h b/src/crypto/obj/obj_dat.h
index 888ea67..778d8e3 100644
--- a/src/crypto/obj/obj_dat.h
+++ b/src/crypto/obj/obj_dat.h
@@ -57,7 +57,7 @@
 /* This file is generated by crypto/obj/objects.go. */
 
 
-#define NUM_NID 962
+#define NUM_NID 963
 
 static const uint8_t kObjectData[] = {
     /* NID_rsadsi */
@@ -7127,6 +7127,16 @@
     0x2b,
     0x65,
     0x6f,
+    /* NID_sha512_256 */
+    0x60,
+    0x86,
+    0x48,
+    0x01,
+    0x65,
+    0x03,
+    0x04,
+    0x02,
+    0x06,
 };
 
 static const ASN1_OBJECT kObjects[NUM_NID] = {
@@ -8770,6 +8780,7 @@
     {"CECPQ2", "CECPQ2", NID_CECPQ2, 0, NULL, 0},
     {"ED448", "ED448", NID_ED448, 3, &kObjectData[6181], 0},
     {"X448", "X448", NID_X448, 3, &kObjectData[6184], 0},
+    {"SHA512-256", "sha512-256", NID_sha512_256, 9, &kObjectData[6187], 0},
 };
 
 static const uint16_t kNIDsInShortNameOrder[] = {
@@ -8959,6 +8970,7 @@
     672 /* SHA256 */,
     673 /* SHA384 */,
     674 /* SHA512 */,
+    962 /* SHA512-256 */,
     188 /* SMIME */,
     167 /* SMIME-CAPS */,
     100 /* SN */,
@@ -10632,6 +10644,7 @@
     673 /* sha384 */,
     669 /* sha384WithRSAEncryption */,
     674 /* sha512 */,
+    962 /* sha512-256 */,
     670 /* sha512WithRSAEncryption */,
     42 /* shaWithRSAEncryption */,
     52 /* signingTime */,
@@ -11391,6 +11404,7 @@
     673 /* 2.16.840.1.101.3.4.2.2 (OBJ_sha384) */,
     674 /* 2.16.840.1.101.3.4.2.3 (OBJ_sha512) */,
     675 /* 2.16.840.1.101.3.4.2.4 (OBJ_sha224) */,
+    962 /* 2.16.840.1.101.3.4.2.6 (OBJ_sha512_256) */,
     802 /* 2.16.840.1.101.3.4.3.1 (OBJ_dsa_with_SHA224) */,
     803 /* 2.16.840.1.101.3.4.3.2 (OBJ_dsa_with_SHA256) */,
     71 /* 2.16.840.1.113730.1.1 (OBJ_netscape_cert_type) */,
diff --git a/src/crypto/obj/obj_mac.num b/src/crypto/obj/obj_mac.num
index f73ebf9..f110ee9 100644
--- a/src/crypto/obj/obj_mac.num
+++ b/src/crypto/obj/obj_mac.num
@@ -950,3 +950,4 @@
 CECPQ2		959
 ED448		960
 X448		961
+sha512_256		962
diff --git a/src/crypto/obj/objects.txt b/src/crypto/obj/objects.txt
index 798da1e..b88342d 100644
--- a/src/crypto/obj/objects.txt
+++ b/src/crypto/obj/objects.txt
@@ -905,6 +905,7 @@
 nist_hashalgs 2		: SHA384		: sha384
 nist_hashalgs 3		: SHA512		: sha512
 nist_hashalgs 4		: SHA224		: sha224
+nist_hashalgs 6		: SHA512-256		: sha512-256
 
 # OIDs for dsa-with-sha224 and dsa-with-sha256
 !Alias dsa_with_sha2 nistAlgorithms 3
diff --git a/src/crypto/pkcs8/internal.h b/src/crypto/pkcs8/internal.h
index c3302f7..b5d42ba 100644
--- a/src/crypto/pkcs8/internal.h
+++ b/src/crypto/pkcs8/internal.h
@@ -63,6 +63,13 @@
 #endif
 
 
+struct pkcs8_priv_key_info_st {
+  ASN1_INTEGER *version;
+  X509_ALGOR *pkeyalg;
+  ASN1_OCTET_STRING *pkey;
+  STACK_OF(X509_ATTRIBUTE) *attributes;
+};
+
 // pkcs8_pbe_decrypt decrypts |in| using the PBE scheme described by
 // |algorithm|, which should be a serialized AlgorithmIdentifier structure. On
 // success, it sets |*out| to a newly-allocated buffer containing the decrypted
diff --git a/src/crypto/pkcs8/pkcs8_x509.c b/src/crypto/pkcs8/pkcs8_x509.c
index 4458b56..a2f9075 100644
--- a/src/crypto/pkcs8/pkcs8_x509.c
+++ b/src/crypto/pkcs8/pkcs8_x509.c
@@ -96,10 +96,8 @@
   // Since the structure must still be valid use ASN1_OP_FREE_PRE
   if (operation == ASN1_OP_FREE_PRE) {
     PKCS8_PRIV_KEY_INFO *key = (PKCS8_PRIV_KEY_INFO *)*pval;
-    if (key->pkey && key->pkey->type == V_ASN1_OCTET_STRING &&
-        key->pkey->value.octet_string) {
-      OPENSSL_cleanse(key->pkey->value.octet_string->data,
-                      key->pkey->value.octet_string->length);
+    if (key->pkey) {
+      OPENSSL_cleanse(key->pkey->data, key->pkey->length);
     }
   }
   return 1;
@@ -108,12 +106,45 @@
 ASN1_SEQUENCE_cb(PKCS8_PRIV_KEY_INFO, pkey_cb) = {
   ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, version, ASN1_INTEGER),
   ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, pkeyalg, X509_ALGOR),
-  ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, pkey, ASN1_ANY),
+  ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, pkey, ASN1_OCTET_STRING),
   ASN1_IMP_SET_OF_OPT(PKCS8_PRIV_KEY_INFO, attributes, X509_ATTRIBUTE, 0)
 } ASN1_SEQUENCE_END_cb(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO)
 
 IMPLEMENT_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO)
 
+int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, int version,
+                    int ptype, void *pval, uint8_t *penc, int penclen) {
+  if (version >= 0 &&
+      !ASN1_INTEGER_set(priv->version, version)) {
+    return 0;
+  }
+
+  if (!X509_ALGOR_set0(priv->pkeyalg, aobj, ptype, pval)) {
+    return 0;
+  }
+
+  if (penc != NULL) {
+    ASN1_STRING_set0(priv->pkey, penc, penclen);
+  }
+
+  return 1;
+}
+
+int PKCS8_pkey_get0(ASN1_OBJECT **ppkalg, const uint8_t **pk, int *ppklen,
+                    X509_ALGOR **pa, PKCS8_PRIV_KEY_INFO *p8) {
+  if (ppkalg) {
+    *ppkalg = p8->pkeyalg->algorithm;
+  }
+  if (pk) {
+    *pk = ASN1_STRING_data(p8->pkey);
+    *ppklen = ASN1_STRING_length(p8->pkey);
+  }
+  if (pa) {
+    *pa = p8->pkeyalg;
+  }
+  return 1;
+}
+
 EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8) {
   uint8_t *der = NULL;
   int der_len = i2d_PKCS8_PRIV_KEY_INFO(p8, &der);
diff --git a/src/crypto/rand_extra/deterministic.c b/src/crypto/rand_extra/deterministic.c
index 34547ea..38cfd11 100644
--- a/src/crypto/rand_extra/deterministic.c
+++ b/src/crypto/rand_extra/deterministic.c
@@ -30,27 +30,23 @@
 // multi-threaded program, replace this with a thread-local. (A mutex would not
 // be deterministic.)
 static uint64_t g_num_calls = 0;
+static struct CRYPTO_STATIC_MUTEX g_num_calls_lock = CRYPTO_STATIC_MUTEX_INIT;
 
 void RAND_reset_for_fuzzing(void) { g_num_calls = 0; }
 
 void CRYPTO_sysrand(uint8_t *out, size_t requested) {
   static const uint8_t kZeroKey[32];
 
+  CRYPTO_STATIC_MUTEX_lock_write(&g_num_calls_lock);
+  uint64_t num_calls = g_num_calls++;
+  CRYPTO_STATIC_MUTEX_unlock_write(&g_num_calls_lock);
+
   uint8_t nonce[12];
   OPENSSL_memset(nonce, 0, sizeof(nonce));
-  OPENSSL_memcpy(nonce, &g_num_calls, sizeof(g_num_calls));
+  OPENSSL_memcpy(nonce, &num_calls, sizeof(num_calls));
 
   OPENSSL_memset(out, 0, requested);
   CRYPTO_chacha_20(out, out, requested, kZeroKey, nonce, 0);
-  g_num_calls++;
-}
-
-void CRYPTO_sysrand_for_seed(uint8_t *out, size_t requested) {
-  CRYPTO_sysrand(out, requested);
-}
-
-void CRYPTO_sysrand_if_available(uint8_t *out, size_t requested) {
-  CRYPTO_sysrand(out, requested);
 }
 
 #endif  // BORINGSSL_UNSAFE_DETERMINISTIC_MODE
diff --git a/src/crypto/rand_extra/rand_test.cc b/src/crypto/rand_extra/rand_test.cc
index 9c69b8f..7f7c19f 100644
--- a/src/crypto/rand_extra/rand_test.cc
+++ b/src/crypto/rand_extra/rand_test.cc
@@ -21,6 +21,7 @@
 #include <openssl/cpu.h>
 #include <openssl/span.h>
 
+#include "../fipsmodule/rand/fork_detect.h"
 #include "../fipsmodule/rand/internal.h"
 #include "../test/abi_test.h"
 #include "../test/test_util.h"
diff --git a/src/crypto/test/asm/trampoline-armv8.pl b/src/crypto/test/asm/trampoline-armv8.pl
index aefe5f7..426360e 100755
--- a/src/crypto/test/asm/trampoline-armv8.pl
+++ b/src/crypto/test/asm/trampoline-armv8.pl
@@ -45,6 +45,8 @@
 
 my ($func, $state, $argv, $argc) = ("x0", "x1", "x2", "x3");
 my $code = <<____;
+#include <openssl/arm_arch.h>
+
 .text
 
 // abi_test_trampoline loads callee-saved registers from |state|, calls |func|
@@ -57,6 +59,8 @@
 .globl	abi_test_trampoline
 .align	4
 abi_test_trampoline:
+.Labi_test_trampoline_begin:
+	AARCH64_SIGN_LINK_REGISTER
 	// Stack layout (low to high addresses)
 	//   x29,x30 (16 bytes)
 	//    d8-d15 (64 bytes)
@@ -159,6 +163,7 @@
 	ldp	x27, x28, [sp, #144]
 
 	ldp	x29, x30, [sp], #176
+	AARCH64_VALIDATE_LINK_REGISTER
 	ret
 .size	abi_test_trampoline,.-abi_test_trampoline
 ____
@@ -173,6 +178,7 @@
 .globl	abi_test_clobber_x$_
 .align	4
 abi_test_clobber_x$_:
+	AARCH64_VALID_CALL_TARGET
 	mov	x$_, xzr
 	ret
 .size	abi_test_clobber_x$_,.-abi_test_clobber_x$_
@@ -184,6 +190,7 @@
 .globl	abi_test_clobber_d$_
 .align	4
 abi_test_clobber_d$_:
+	AARCH64_VALID_CALL_TARGET
 	fmov	d$_, xzr
 	ret
 .size	abi_test_clobber_d$_,.-abi_test_clobber_d$_
@@ -198,6 +205,7 @@
 .globl	abi_test_clobber_v${_}_upper
 .align	4
 abi_test_clobber_v${_}_upper:
+	AARCH64_VALID_CALL_TARGET
 	fmov	v${_}.d[1], xzr
 	ret
 .size	abi_test_clobber_v${_}_upper,.-abi_test_clobber_v${_}_upper
diff --git a/src/crypto/test/gtest_main.cc b/src/crypto/test/gtest_main.cc
index aeec0f5..a79f263 100644
--- a/src/crypto/test/gtest_main.cc
+++ b/src/crypto/test/gtest_main.cc
@@ -79,17 +79,5 @@
     abi_test::EnableUnwindTests();
   }
 
-  // Run the entire test suite under an ABI check. This is less effective than
-  // testing the individual assembly functions, but will catch issues with
-  // rarely-used registers.
-  abi_test::Result abi;
-  int ret = abi_test::Check(&abi, RUN_ALL_TESTS);
-  if (!abi.ok()) {
-    fprintf(stderr, "ABI failure in test suite:\n");
-    for (const auto &error : abi.errors) {
-      fprintf(stderr, "    %s\n", error.c_str());
-    }
-    exit(1);
-  }
-  return ret;
+  return RUN_ALL_TESTS();
 }
diff --git a/src/crypto/thread_pthread.c b/src/crypto/thread_pthread.c
index 832e90e..2cb1000 100644
--- a/src/crypto/thread_pthread.c
+++ b/src/crypto/thread_pthread.c
@@ -26,6 +26,10 @@
 
 OPENSSL_STATIC_ASSERT(sizeof(CRYPTO_MUTEX) >= sizeof(pthread_rwlock_t),
                       "CRYPTO_MUTEX is too small");
+#if defined(__GNUC__) || defined(__clang__)
+OPENSSL_STATIC_ASSERT(alignof(CRYPTO_MUTEX) >= alignof(pthread_rwlock_t),
+                      "CRYPTO_MUTEX has insufficient alignment");
+#endif
 
 void CRYPTO_MUTEX_init(CRYPTO_MUTEX *lock) {
   if (pthread_rwlock_init((pthread_rwlock_t *) lock, NULL) != 0) {
diff --git a/src/crypto/thread_test.cc b/src/crypto/thread_test.cc
index f9fad9b..aa17e35 100644
--- a/src/crypto/thread_test.cc
+++ b/src/crypto/thread_test.cc
@@ -15,6 +15,7 @@
 #include "internal.h"
 
 #include <chrono>
+#include <vector>
 #include <thread>
 
 #include <gtest/gtest.h>
@@ -130,4 +131,32 @@
   thread.join();
 }
 
+TEST(ThreadTest, InitThreads) {
+  constexpr size_t kNumThreads = 10;
+
+  // |CRYPTO_library_init| is safe to call across threads.
+  std::vector<std::thread> threads;
+  threads.reserve(kNumThreads);
+  for (size_t i = 0; i < kNumThreads; i++) {
+    threads.emplace_back(&CRYPTO_library_init);
+  }
+  for (auto &thread : threads) {
+    thread.join();
+  }
+}
+
+TEST(ThreadTest, PreSandboxInitThreads) {
+  constexpr size_t kNumThreads = 10;
+
+  // |CRYPTO_pre_sandbox_init| is safe to call across threads.
+  std::vector<std::thread> threads;
+  threads.reserve(kNumThreads);
+  for (size_t i = 0; i < kNumThreads; i++) {
+    threads.emplace_back(&CRYPTO_pre_sandbox_init);
+  }
+  for (auto &thread : threads) {
+    thread.join();
+  }
+}
+
 #endif  // OPENSSL_THREADS
diff --git a/src/crypto/thread_win.c b/src/crypto/thread_win.c
index c8e19f5..49ecc12 100644
--- a/src/crypto/thread_win.c
+++ b/src/crypto/thread_win.c
@@ -29,6 +29,10 @@
 
 OPENSSL_STATIC_ASSERT(sizeof(CRYPTO_MUTEX) >= sizeof(SRWLOCK),
                       "CRYPTO_MUTEX is too small");
+#if defined(__GNUC__) || defined(__clang__)
+OPENSSL_STATIC_ASSERT(alignof(CRYPTO_MUTEX) >= alignof(SRWLOCK),
+                      "CRYPTO_MUTEX has insufficient alignment");
+#endif
 
 static BOOL CALLBACK call_once_init(INIT_ONCE *once, void *arg, void **out) {
   void (**init)(void) = (void (**)(void))arg;
diff --git a/src/crypto/trust_token/internal.h b/src/crypto/trust_token/internal.h
new file mode 100644
index 0000000..c935888
--- /dev/null
+++ b/src/crypto/trust_token/internal.h
@@ -0,0 +1,291 @@
+/* Copyright (c) 2019, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#ifndef OPENSSL_HEADER_TRUST_TOKEN_INTERNAL_H
+#define OPENSSL_HEADER_TRUST_TOKEN_INTERNAL_H
+
+#include <openssl/base.h>
+#include <openssl/ec.h>
+#include <openssl/ec_key.h>
+#include <openssl/nid.h>
+
+#include "../fipsmodule/ec/internal.h"
+
+#include <openssl/trust_token.h>
+
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+// PMBTokens.
+//
+// PMBTokens is described in https://eprint.iacr.org/2020/072/20200324:214215
+// and provides anonymous tokens with private metadata. We implement the
+// construction with validity verification, described in appendix H,
+// construction 6.
+
+// PMBTOKEN_NONCE_SIZE is the size of nonces used as part of the PMBToken
+// protocol.
+#define PMBTOKEN_NONCE_SIZE 64
+
+typedef struct {
+  // TODO(https://crbug.com/boringssl/334): These should store |EC_PRECOMP| so
+  // that |TRUST_TOKEN_finish_issuance| can use |ec_point_mul_scalar_precomp|.
+  EC_AFFINE pub0;
+  EC_AFFINE pub1;
+  EC_AFFINE pubs;
+} PMBTOKEN_CLIENT_KEY;
+
+typedef struct {
+  EC_SCALAR x0;
+  EC_SCALAR y0;
+  EC_SCALAR x1;
+  EC_SCALAR y1;
+  EC_SCALAR xs;
+  EC_SCALAR ys;
+  EC_AFFINE pub0;
+  EC_PRECOMP pub0_precomp;
+  EC_AFFINE pub1;
+  EC_PRECOMP pub1_precomp;
+  EC_AFFINE pubs;
+  EC_PRECOMP pubs_precomp;
+} PMBTOKEN_ISSUER_KEY;
+
+// PMBTOKEN_PRETOKEN represents the intermediate state a client keeps during a
+// PMBToken issuance operation.
+typedef struct pmb_pretoken_st {
+  uint8_t t[PMBTOKEN_NONCE_SIZE];
+  EC_SCALAR r;
+  EC_AFFINE Tp;
+} PMBTOKEN_PRETOKEN;
+
+// PMBTOKEN_PRETOKEN_free releases the memory associated with |token|.
+OPENSSL_EXPORT void PMBTOKEN_PRETOKEN_free(PMBTOKEN_PRETOKEN *token);
+
+DEFINE_STACK_OF(PMBTOKEN_PRETOKEN)
+
+// The following functions implement the corresponding |TRUST_TOKENS_METHOD|
+// functions for |TRUST_TOKENS_experiment_v1|'s PMBTokens construction which
+// uses P-384.
+//
+// We use P-384 instead of our usual choice of P-256. See Appendix I which
+// describes two attacks which may affect smaller curves. In particular, p-1 for
+// P-256 is smooth, giving a low complexity for the p-1 attack. P-384's p-1 has
+// a 281-bit prime factor,
+// 3055465788140352002733946906144561090641249606160407884365391979704929268480326390471.
+// This lower-bounds the p-1 attack at O(2^140). The p+1 attack is lower-bounded
+// by O(p^(1/3)) or O(2^128), so we do not need to check the smoothness of p+1.
+int pmbtoken_exp1_generate_key(CBB *out_private, CBB *out_public);
+int pmbtoken_exp1_client_key_from_bytes(PMBTOKEN_CLIENT_KEY *key,
+                                        const uint8_t *in, size_t len);
+int pmbtoken_exp1_issuer_key_from_bytes(PMBTOKEN_ISSUER_KEY *key,
+                                        const uint8_t *in, size_t len);
+STACK_OF(PMBTOKEN_PRETOKEN) * pmbtoken_exp1_blind(CBB *cbb, size_t count);
+int pmbtoken_exp1_sign(const PMBTOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
+                       size_t num_requested, size_t num_to_issue,
+                       uint8_t private_metadata);
+STACK_OF(TRUST_TOKEN) *
+    pmbtoken_exp1_unblind(const PMBTOKEN_CLIENT_KEY *key,
+                          const STACK_OF(PMBTOKEN_PRETOKEN) * pretokens,
+                          CBS *cbs, size_t count, uint32_t key_id);
+int pmbtoken_exp1_read(const PMBTOKEN_ISSUER_KEY *key,
+                       uint8_t out_nonce[PMBTOKEN_NONCE_SIZE],
+                       uint8_t *out_private_metadata, const uint8_t *token,
+                       size_t token_len);
+
+// pmbtoken_exp1_get_h_for_testing returns H in uncompressed coordinates. This
+// function is used to confirm H was computed as expected.
+OPENSSL_EXPORT int pmbtoken_exp1_get_h_for_testing(uint8_t out[97]);
+
+// The following functions implement the corresponding |TRUST_TOKENS_METHOD|
+// functions for |TRUST_TOKENS_experiment_v2|'s PMBTokens construction which
+// uses P-384.
+//
+// We use P-384 instead of our usual choice of P-256. See Appendix I which
+// describes two attacks which may affect smaller curves. In particular, p-1 for
+// P-256 is smooth, giving a low complexity for the p-1 attack. P-384's p-1 has
+// a 281-bit prime factor,
+// 3055465788140352002733946906144561090641249606160407884365391979704929268480326390471.
+// This lower-bounds the p-1 attack at O(2^140). The p+1 attack is lower-bounded
+// by O(p^(1/3)) or O(2^128), so we do not need to check the smoothness of p+1.
+int pmbtoken_exp2_generate_key(CBB *out_private, CBB *out_public);
+int pmbtoken_exp2_client_key_from_bytes(PMBTOKEN_CLIENT_KEY *key,
+                                        const uint8_t *in, size_t len);
+int pmbtoken_exp2_issuer_key_from_bytes(PMBTOKEN_ISSUER_KEY *key,
+                                        const uint8_t *in, size_t len);
+STACK_OF(PMBTOKEN_PRETOKEN) * pmbtoken_exp2_blind(CBB *cbb, size_t count);
+int pmbtoken_exp2_sign(const PMBTOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
+                       size_t num_requested, size_t num_to_issue,
+                       uint8_t private_metadata);
+STACK_OF(TRUST_TOKEN) *
+    pmbtoken_exp2_unblind(const PMBTOKEN_CLIENT_KEY *key,
+                          const STACK_OF(PMBTOKEN_PRETOKEN) * pretokens,
+                          CBS *cbs, size_t count, uint32_t key_id);
+int pmbtoken_exp2_read(const PMBTOKEN_ISSUER_KEY *key,
+                       uint8_t out_nonce[PMBTOKEN_NONCE_SIZE],
+                       uint8_t *out_private_metadata, const uint8_t *token,
+                       size_t token_len);
+
+// pmbtoken_exp2_get_h_for_testing returns H in uncompressed coordinates. This
+// function is used to confirm H was computed as expected.
+OPENSSL_EXPORT int pmbtoken_exp2_get_h_for_testing(uint8_t out[97]);
+
+
+// Trust Tokens internals.
+
+struct trust_token_method_st {
+  // generate_key generates a fresh keypair and writes their serialized
+  // forms into |out_private| and |out_public|. It returns one on success and
+  // zero on failure.
+  int (*generate_key)(CBB *out_private, CBB *out_public);
+
+  // client_key_from_bytes decodes a client key from |in| and sets |key|
+  // to the resulting key. It returns one on success and zero
+  // on failure.
+  int (*client_key_from_bytes)(PMBTOKEN_CLIENT_KEY *key, const uint8_t *in,
+                               size_t len);
+
+  // issuer_key_from_bytes decodes a issuer key from |in| and sets |key|
+  // to the resulting key. It returns one on success and zero
+  // on failure.
+  int (*issuer_key_from_bytes)(PMBTOKEN_ISSUER_KEY *key, const uint8_t *in,
+                               size_t len);
+
+  // blind generates a new issuance request for |count| tokens. On
+  // success, it returns a newly-allocated |STACK_OF(PMBTOKEN_PRETOKEN)| and
+  // writes a request to the issuer to |cbb|. On failure, it returns NULL. The
+  // |STACK_OF(PMBTOKEN_PRETOKEN)|s should be passed to |pmbtoken_unblind| when
+  // the server responds.
+  //
+  // This function implements the AT.Usr0 operation.
+  STACK_OF(PMBTOKEN_PRETOKEN) *(*blind)(CBB *cbb, size_t count);
+
+  // sign parses a request for |num_requested| tokens from |cbs| and
+  // issues |num_to_issue| tokens with |key| and a private metadata value of
+  // |private_metadata|. It then writes the response to |cbb|. It returns one on
+  // success and zero on failure.
+  //
+  // This function implements the AT.Sig operation.
+  int (*sign)(const PMBTOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
+              size_t num_requested, size_t num_to_issue,
+              uint8_t private_metadata);
+
+  // unblind processes an issuance response for |count| tokens from |cbs|
+  // and unblinds the signed tokens. |pretokens| are the pre-tokens returned
+  // from the corresponding |blind| call. On success, the function returns a
+  // newly-allocated |STACK_OF(TRUST_TOKEN)| containing the resulting tokens.
+  // Each token's serialization will have |key_id| prepended. Otherwise, it
+  // returns NULL.
+  //
+  // This function implements the AT.Usr1 operation.
+  STACK_OF(TRUST_TOKEN) *
+      (*unblind)(const PMBTOKEN_CLIENT_KEY *key,
+                 const STACK_OF(PMBTOKEN_PRETOKEN) * pretokens, CBS *cbs,
+                 size_t count, uint32_t key_id);
+
+  // read parses a PMBToken from |token| and verifies it using |key|. On
+  // success, it returns one and stores the nonce and private metadata bit in
+  // |out_nonce| and |*out_private_metadata|. Otherwise, it returns zero. Note
+  // that, unlike the output of |unblind|, |token| does not have a
+  // four-byte key ID prepended.
+  int (*read)(const PMBTOKEN_ISSUER_KEY *key,
+              uint8_t out_nonce[PMBTOKEN_NONCE_SIZE],
+              uint8_t *out_private_metadata, const uint8_t *token,
+              size_t token_len);
+
+  // whether the construction supports private metadata.
+  int has_private_metadata;
+
+  // max keys that can be configured.
+  size_t max_keys;
+
+  // whether the SRR is part of the protocol.
+  int has_srr;
+};
+
+// Structure representing a single Trust Token public key with the specified ID.
+struct trust_token_client_key_st {
+  uint32_t id;
+  PMBTOKEN_CLIENT_KEY key;
+};
+
+// Structure representing a single Trust Token private key with the specified
+// ID.
+struct trust_token_issuer_key_st {
+  uint32_t id;
+  PMBTOKEN_ISSUER_KEY key;
+};
+
+struct trust_token_client_st {
+  const TRUST_TOKEN_METHOD *method;
+
+  // max_batchsize is the maximum supported batchsize.
+  uint16_t max_batchsize;
+
+  // keys is the set of public keys that are supported by the client for
+  // issuance/redemptions.
+  struct trust_token_client_key_st keys[6];
+
+  // num_keys is the number of keys currently configured.
+  size_t num_keys;
+
+  // pretokens is the intermediate state during an active issuance.
+  STACK_OF(PMBTOKEN_PRETOKEN)* pretokens;
+
+  // srr_key is the public key used to verify the signature of the SRR.
+  EVP_PKEY *srr_key;
+};
+
+
+struct trust_token_issuer_st {
+  const TRUST_TOKEN_METHOD *method;
+
+  // max_batchsize is the maximum supported batchsize.
+  uint16_t max_batchsize;
+
+  // keys is the set of private keys that are supported by the issuer for
+  // issuance/redemptions. The public metadata is an index into this list of
+  // keys.
+  struct trust_token_issuer_key_st keys[6];
+
+  // num_keys is the number of keys currently configured.
+  size_t num_keys;
+
+  // srr_key is the private key used to sign the SRR.
+  EVP_PKEY *srr_key;
+
+  // metadata_key is the secret material used to encode the private metadata bit
+  // in the SRR.
+  uint8_t *metadata_key;
+  size_t metadata_key_len;
+};
+
+
+#if defined(__cplusplus)
+}  // extern C
+
+extern "C++" {
+
+BSSL_NAMESPACE_BEGIN
+
+BORINGSSL_MAKE_DELETER(PMBTOKEN_PRETOKEN, PMBTOKEN_PRETOKEN_free)
+
+BSSL_NAMESPACE_END
+
+}  // extern C++
+#endif
+
+#endif  // OPENSSL_HEADER_TRUST_TOKEN_INTERNAL_H
diff --git a/src/crypto/trust_token/pmbtoken.c b/src/crypto/trust_token/pmbtoken.c
new file mode 100644
index 0000000..f9132e6
--- /dev/null
+++ b/src/crypto/trust_token/pmbtoken.c
@@ -0,0 +1,1399 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#include <openssl/trust_token.h>
+
+#include <openssl/bn.h>
+#include <openssl/bytestring.h>
+#include <openssl/ec.h>
+#include <openssl/err.h>
+#include <openssl/mem.h>
+#include <openssl/nid.h>
+#include <openssl/rand.h>
+#include <openssl/sha.h>
+
+#include "../ec_extra/internal.h"
+#include "../fipsmodule/bn/internal.h"
+#include "../fipsmodule/ec/internal.h"
+
+#include "internal.h"
+
+
+typedef int (*hash_t_func_t)(const EC_GROUP *group, EC_RAW_POINT *out,
+                             const uint8_t t[PMBTOKEN_NONCE_SIZE]);
+typedef int (*hash_s_func_t)(const EC_GROUP *group, EC_RAW_POINT *out,
+                             const EC_AFFINE *t,
+                             const uint8_t s[PMBTOKEN_NONCE_SIZE]);
+typedef int (*hash_c_func_t)(const EC_GROUP *group, EC_SCALAR *out,
+                             uint8_t *buf, size_t len);
+
+typedef struct {
+  const EC_GROUP *group;
+  EC_PRECOMP g_precomp;
+  EC_PRECOMP h_precomp;
+  EC_RAW_POINT h;
+  // hash_t implements the H_t operation in PMBTokens. It returns one on success
+  // and zero on error.
+  hash_t_func_t hash_t;
+  // hash_s implements the H_s operation in PMBTokens. It returns one on success
+  // and zero on error.
+  hash_s_func_t hash_s;
+  // hash_c implements the H_c operation in PMBTokens. It returns one on success
+  // and zero on error.
+  hash_c_func_t hash_c;
+  int prefix_point : 1;
+} PMBTOKEN_METHOD;
+
+static const uint8_t kDefaultAdditionalData[32] = {0};
+
+static int pmbtoken_init_method(PMBTOKEN_METHOD *method, int curve_nid,
+                                const uint8_t *h_bytes, size_t h_len,
+                                hash_t_func_t hash_t, hash_s_func_t hash_s,
+                                hash_c_func_t hash_c, int prefix_point) {
+  method->group = EC_GROUP_new_by_curve_name(curve_nid);
+  if (method->group == NULL) {
+    return 0;
+  }
+
+  method->hash_t = hash_t;
+  method->hash_s = hash_s;
+  method->hash_c = hash_c;
+  method->prefix_point = prefix_point;
+
+  EC_AFFINE h;
+  if (!ec_point_from_uncompressed(method->group, &h, h_bytes, h_len)) {
+    return 0;
+  }
+  ec_affine_to_jacobian(method->group, &method->h, &h);
+
+  if (!ec_init_precomp(method->group, &method->g_precomp,
+                       &method->group->generator->raw) ||
+      !ec_init_precomp(method->group, &method->h_precomp, &method->h)) {
+    return 0;
+  }
+  return 1;
+}
+
+// generate_keypair generates a keypair for the PMBTokens construction.
+// |out_x| and |out_y| are set to the secret half of the keypair, while
+// |*out_pub| is set to the public half of the keypair. It returns one on
+// success and zero on failure.
+static int generate_keypair(const PMBTOKEN_METHOD *method, EC_SCALAR *out_x,
+                            EC_SCALAR *out_y, EC_RAW_POINT *out_pub) {
+  if (!ec_random_nonzero_scalar(method->group, out_x, kDefaultAdditionalData) ||
+      !ec_random_nonzero_scalar(method->group, out_y, kDefaultAdditionalData) ||
+      !ec_point_mul_scalar_precomp(method->group, out_pub, &method->g_precomp,
+                                   out_x, &method->h_precomp, out_y, NULL,
+                                   NULL)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    return 0;
+  }
+  return 1;
+}
+
+static int point_to_cbb(CBB *out, const EC_GROUP *group,
+                        const EC_AFFINE *point) {
+  size_t len =
+      ec_point_to_bytes(group, point, POINT_CONVERSION_UNCOMPRESSED, NULL, 0);
+  if (len == 0) {
+    return 0;
+  }
+  uint8_t *p;
+  return CBB_add_space(out, &p, len) &&
+         ec_point_to_bytes(group, point, POINT_CONVERSION_UNCOMPRESSED, p,
+                           len) == len;
+}
+
+static int cbb_add_prefixed_point(CBB *out, const EC_GROUP *group,
+                                  const EC_AFFINE *point, int prefix_point) {
+  if (prefix_point) {
+    CBB child;
+    if (!CBB_add_u16_length_prefixed(out, &child) ||
+        !point_to_cbb(&child, group, point) ||
+        !CBB_flush(out)) {
+      return 0;
+    }
+  } else {
+    if (!point_to_cbb(out, group, point) ||
+        !CBB_flush(out)) {
+      return 0;
+    }
+  }
+
+  return 1;
+}
+
+static int cbs_get_prefixed_point(CBS *cbs, const EC_GROUP *group,
+                                  EC_AFFINE *out, int prefix_point) {
+  CBS child;
+  if (prefix_point) {
+    if (!CBS_get_u16_length_prefixed(cbs, &child)) {
+      return 0;
+    }
+  } else {
+    size_t plen = 1 + 2 * BN_num_bytes(&group->field);
+    if (!CBS_get_bytes(cbs, &child, plen)) {
+      return 0;
+    }
+  }
+
+  if (!ec_point_from_uncompressed(group, out, CBS_data(&child),
+                                  CBS_len(&child))) {
+    return 0;
+  }
+  return 1;
+}
+
+static int mul_public_3(const EC_GROUP *group, EC_RAW_POINT *out,
+                        const EC_RAW_POINT *p0, const EC_SCALAR *scalar0,
+                        const EC_RAW_POINT *p1, const EC_SCALAR *scalar1,
+                        const EC_RAW_POINT *p2, const EC_SCALAR *scalar2) {
+  EC_RAW_POINT points[3] = {*p0, *p1, *p2};
+  EC_SCALAR scalars[3] = {*scalar0, *scalar1, *scalar2};
+  return ec_point_mul_scalar_public_batch(group, out, /*g_scalar=*/NULL, points,
+                                          scalars, 3);
+}
+
+void PMBTOKEN_PRETOKEN_free(PMBTOKEN_PRETOKEN *pretoken) {
+  OPENSSL_free(pretoken);
+}
+
+static int pmbtoken_generate_key(const PMBTOKEN_METHOD *method,
+                                 CBB *out_private, CBB *out_public) {
+  const EC_GROUP *group = method->group;
+  EC_RAW_POINT pub[3];
+  EC_SCALAR x0, y0, x1, y1, xs, ys;
+  if (!generate_keypair(method, &x0, &y0, &pub[0]) ||
+      !generate_keypair(method, &x1, &y1, &pub[1]) ||
+      !generate_keypair(method, &xs, &ys, &pub[2])) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_KEYGEN_FAILURE);
+    return 0;
+  }
+
+  const EC_SCALAR *scalars[] = {&x0, &y0, &x1, &y1, &xs, &ys};
+  size_t scalar_len = BN_num_bytes(&group->order);
+  for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(scalars); i++) {
+    uint8_t *buf;
+    if (!CBB_add_space(out_private, &buf, scalar_len)) {
+      OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_BUFFER_TOO_SMALL);
+      return 0;
+    }
+    ec_scalar_to_bytes(group, buf, &scalar_len, scalars[i]);
+  }
+
+  EC_AFFINE pub_affine[3];
+  if (!ec_jacobian_to_affine_batch(group, pub_affine, pub, 3)) {
+    return 0;
+  }
+
+  if (!cbb_add_prefixed_point(out_public, group, &pub_affine[0],
+                              method->prefix_point) ||
+      !cbb_add_prefixed_point(out_public, group, &pub_affine[1],
+                              method->prefix_point) ||
+      !cbb_add_prefixed_point(out_public, group, &pub_affine[2],
+                              method->prefix_point)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_BUFFER_TOO_SMALL);
+    return 0;
+  }
+
+  return 1;
+}
+
+static int pmbtoken_client_key_from_bytes(const PMBTOKEN_METHOD *method,
+                                          PMBTOKEN_CLIENT_KEY *key,
+                                          const uint8_t *in, size_t len) {
+  CBS cbs;
+  CBS_init(&cbs, in, len);
+  if (!cbs_get_prefixed_point(&cbs, method->group, &key->pub0,
+                              method->prefix_point) ||
+      !cbs_get_prefixed_point(&cbs, method->group, &key->pub1,
+                              method->prefix_point) ||
+      !cbs_get_prefixed_point(&cbs, method->group, &key->pubs,
+                              method->prefix_point) ||
+      CBS_len(&cbs) != 0) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+    return 0;
+  }
+
+  return 1;
+}
+
+static int pmbtoken_issuer_key_from_bytes(const PMBTOKEN_METHOD *method,
+                                          PMBTOKEN_ISSUER_KEY *key,
+                                          const uint8_t *in, size_t len) {
+  const EC_GROUP *group = method->group;
+  CBS cbs, tmp;
+  CBS_init(&cbs, in, len);
+  size_t scalar_len = BN_num_bytes(&group->order);
+  EC_SCALAR *scalars[] = {&key->x0, &key->y0, &key->x1,
+                          &key->y1, &key->xs, &key->ys};
+  for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(scalars); i++) {
+    if (!CBS_get_bytes(&cbs, &tmp, scalar_len) ||
+        !ec_scalar_from_bytes(group, scalars[i], CBS_data(&tmp),
+                              CBS_len(&tmp))) {
+      OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+      return 0;
+    }
+  }
+
+  // Recompute the public key.
+  EC_RAW_POINT pub[3];
+  EC_AFFINE pub_affine[3];
+  if (!ec_point_mul_scalar_precomp(group, &pub[0], &method->g_precomp, &key->x0,
+                                   &method->h_precomp, &key->y0, NULL, NULL) ||
+      !ec_init_precomp(group, &key->pub0_precomp, &pub[0]) ||
+      !ec_point_mul_scalar_precomp(group, &pub[1], &method->g_precomp, &key->x1,
+                                   &method->h_precomp, &key->y1, NULL, NULL) ||
+      !ec_init_precomp(group, &key->pub1_precomp, &pub[1]) ||
+      !ec_point_mul_scalar_precomp(group, &pub[2], &method->g_precomp, &key->xs,
+                                   &method->h_precomp, &key->ys, NULL, NULL) ||
+      !ec_init_precomp(group, &key->pubs_precomp, &pub[2]) ||
+      !ec_jacobian_to_affine_batch(group, pub_affine, pub, 3)) {
+    return 0;
+  }
+
+  key->pub0 = pub_affine[0];
+  key->pub1 = pub_affine[1];
+  key->pubs = pub_affine[2];
+  return 1;
+}
+
+static STACK_OF(PMBTOKEN_PRETOKEN) *
+    pmbtoken_blind(const PMBTOKEN_METHOD *method, CBB *cbb, size_t count) {
+  const EC_GROUP *group = method->group;
+  STACK_OF(PMBTOKEN_PRETOKEN) *pretokens = sk_PMBTOKEN_PRETOKEN_new_null();
+  if (pretokens == NULL) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  for (size_t i = 0; i < count; i++) {
+    // Insert |pretoken| into |pretokens| early to simplify error-handling.
+    PMBTOKEN_PRETOKEN *pretoken = OPENSSL_malloc(sizeof(PMBTOKEN_PRETOKEN));
+    if (pretoken == NULL ||
+        !sk_PMBTOKEN_PRETOKEN_push(pretokens, pretoken)) {
+      OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+      PMBTOKEN_PRETOKEN_free(pretoken);
+      goto err;
+    }
+
+    RAND_bytes(pretoken->t, sizeof(pretoken->t));
+
+    // We sample |pretoken->r| in Montgomery form to simplify inverting.
+    if (!ec_random_nonzero_scalar(group, &pretoken->r,
+                                  kDefaultAdditionalData)) {
+      OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+      goto err;
+    }
+
+    EC_SCALAR rinv;
+    ec_scalar_inv0_montgomery(group, &rinv, &pretoken->r);
+    // Convert both out of Montgomery form.
+    ec_scalar_from_montgomery(group, &pretoken->r, &pretoken->r);
+    ec_scalar_from_montgomery(group, &rinv, &rinv);
+
+    EC_RAW_POINT T, Tp;
+    if (!method->hash_t(group, &T, pretoken->t) ||
+        !ec_point_mul_scalar(group, &Tp, &T, &rinv) ||
+        !ec_jacobian_to_affine(group, &pretoken->Tp, &Tp)) {
+      goto err;
+    }
+
+    if (!cbb_add_prefixed_point(cbb, group, &pretoken->Tp,
+                                method->prefix_point)) {
+      goto err;
+    }
+  }
+
+  return pretokens;
+
+err:
+  sk_PMBTOKEN_PRETOKEN_pop_free(pretokens, PMBTOKEN_PRETOKEN_free);
+  return NULL;
+}
+
+static int scalar_to_cbb(CBB *out, const EC_GROUP *group,
+                         const EC_SCALAR *scalar) {
+  uint8_t *buf;
+  size_t scalar_len = BN_num_bytes(&group->order);
+  if (!CBB_add_space(out, &buf, scalar_len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    return 0;
+  }
+  ec_scalar_to_bytes(group, buf, &scalar_len, scalar);
+  return 1;
+}
+
+static int scalar_from_cbs(CBS *cbs, const EC_GROUP *group, EC_SCALAR *out) {
+  size_t scalar_len = BN_num_bytes(&group->order);
+  CBS tmp;
+  if (!CBS_get_bytes(cbs, &tmp, scalar_len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+    return 0;
+  }
+
+  ec_scalar_from_bytes(group, out, CBS_data(&tmp), CBS_len(&tmp));
+  return 1;
+}
+
+static int hash_c_dleq(const PMBTOKEN_METHOD *method, EC_SCALAR *out,
+                       const EC_AFFINE *X, const EC_AFFINE *T,
+                       const EC_AFFINE *S, const EC_AFFINE *W,
+                       const EC_AFFINE *K0, const EC_AFFINE *K1) {
+  static const uint8_t kDLEQ2Label[] = "DLEQ2";
+
+  int ok = 0;
+  CBB cbb;
+  CBB_zero(&cbb);
+  uint8_t *buf = NULL;
+  size_t len;
+  if (!CBB_init(&cbb, 0) ||
+      !CBB_add_bytes(&cbb, kDLEQ2Label, sizeof(kDLEQ2Label)) ||
+      !point_to_cbb(&cbb, method->group, X) ||
+      !point_to_cbb(&cbb, method->group, T) ||
+      !point_to_cbb(&cbb, method->group, S) ||
+      !point_to_cbb(&cbb, method->group, W) ||
+      !point_to_cbb(&cbb, method->group, K0) ||
+      !point_to_cbb(&cbb, method->group, K1) ||
+      !CBB_finish(&cbb, &buf, &len) ||
+      !method->hash_c(method->group, out, buf, len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  ok = 1;
+
+err:
+  CBB_cleanup(&cbb);
+  OPENSSL_free(buf);
+  return ok;
+}
+
+static int hash_c_dleqor(const PMBTOKEN_METHOD *method, EC_SCALAR *out,
+                         const EC_AFFINE *X0, const EC_AFFINE *X1,
+                         const EC_AFFINE *T, const EC_AFFINE *S,
+                         const EC_AFFINE *W, const EC_AFFINE *K00,
+                         const EC_AFFINE *K01, const EC_AFFINE *K10,
+                         const EC_AFFINE *K11) {
+  static const uint8_t kDLEQOR2Label[] = "DLEQOR2";
+
+  int ok = 0;
+  CBB cbb;
+  CBB_zero(&cbb);
+  uint8_t *buf = NULL;
+  size_t len;
+  if (!CBB_init(&cbb, 0) ||
+      !CBB_add_bytes(&cbb, kDLEQOR2Label, sizeof(kDLEQOR2Label)) ||
+      !point_to_cbb(&cbb, method->group, X0) ||
+      !point_to_cbb(&cbb, method->group, X1) ||
+      !point_to_cbb(&cbb, method->group, T) ||
+      !point_to_cbb(&cbb, method->group, S) ||
+      !point_to_cbb(&cbb, method->group, W) ||
+      !point_to_cbb(&cbb, method->group, K00) ||
+      !point_to_cbb(&cbb, method->group, K01) ||
+      !point_to_cbb(&cbb, method->group, K10) ||
+      !point_to_cbb(&cbb, method->group, K11) ||
+      !CBB_finish(&cbb, &buf, &len) ||
+      !method->hash_c(method->group, out, buf, len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  ok = 1;
+
+err:
+  CBB_cleanup(&cbb);
+  OPENSSL_free(buf);
+  return ok;
+}
+
+static int hash_c_batch(const PMBTOKEN_METHOD *method, EC_SCALAR *out,
+                        const CBB *points, size_t index) {
+  static const uint8_t kDLEQBatchLabel[] = "DLEQ BATCH";
+  if (index > 0xffff) {
+    // The protocol supports only two-byte batches.
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_OVERFLOW);
+    return 0;
+  }
+
+  int ok = 0;
+  CBB cbb;
+  CBB_zero(&cbb);
+  uint8_t *buf = NULL;
+  size_t len;
+  if (!CBB_init(&cbb, 0) ||
+      !CBB_add_bytes(&cbb, kDLEQBatchLabel, sizeof(kDLEQBatchLabel)) ||
+      !CBB_add_bytes(&cbb, CBB_data(points), CBB_len(points)) ||
+      !CBB_add_u16(&cbb, (uint16_t)index) ||
+      !CBB_finish(&cbb, &buf, &len) ||
+      !method->hash_c(method->group, out, buf, len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  ok = 1;
+
+err:
+  CBB_cleanup(&cbb);
+  OPENSSL_free(buf);
+  return ok;
+}
+
+// The DLEQ2 and DLEQOR2 constructions are described in appendix B of
+// https://eprint.iacr.org/2020/072/20200324:214215. DLEQ2 is an instance of
+// DLEQOR2 with only one value (n=1).
+
+static int dleq_generate(const PMBTOKEN_METHOD *method, CBB *cbb,
+                         const PMBTOKEN_ISSUER_KEY *priv, const EC_RAW_POINT *T,
+                         const EC_RAW_POINT *S, const EC_RAW_POINT *W,
+                         const EC_RAW_POINT *Ws, uint8_t private_metadata) {
+  const EC_GROUP *group = method->group;
+
+  // We generate a DLEQ proof for the validity token and a DLEQOR2 proof for the
+  // private metadata token. To allow amortizing Jacobian-to-affine conversions,
+  // we compute Ki for both proofs first.
+  enum {
+    idx_T,
+    idx_S,
+    idx_W,
+    idx_Ws,
+    idx_Ks0,
+    idx_Ks1,
+    idx_Kb0,
+    idx_Kb1,
+    idx_Ko0,
+    idx_Ko1,
+    num_idx,
+  };
+  EC_RAW_POINT jacobians[num_idx];
+
+  // Setup the DLEQ proof.
+  EC_SCALAR ks0, ks1;
+  if (// ks0, ks1 <- Zp
+      !ec_random_nonzero_scalar(group, &ks0, kDefaultAdditionalData) ||
+      !ec_random_nonzero_scalar(group, &ks1, kDefaultAdditionalData) ||
+      // Ks = ks0*(G;T) + ks1*(H;S)
+      !ec_point_mul_scalar_precomp(group, &jacobians[idx_Ks0],
+                                   &method->g_precomp, &ks0, &method->h_precomp,
+                                   &ks1, NULL, NULL) ||
+      !ec_point_mul_scalar_batch(group, &jacobians[idx_Ks1], T, &ks0, S, &ks1,
+                                 NULL, NULL)) {
+    return 0;
+  }
+
+  // Setup the DLEQOR proof. First, select values of xb, yb (keys corresponding
+  // to the private metadata value) and pubo (public key corresponding to the
+  // other value) in constant time.
+  BN_ULONG mask = ((BN_ULONG)0) - (private_metadata & 1);
+  EC_PRECOMP pubo_precomp;
+  EC_SCALAR xb, yb;
+  ec_scalar_select(group, &xb, mask, &priv->x1, &priv->x0);
+  ec_scalar_select(group, &yb, mask, &priv->y1, &priv->y0);
+  ec_precomp_select(group, &pubo_precomp, mask, &priv->pub0_precomp,
+                    &priv->pub1_precomp);
+
+  EC_SCALAR k0, k1, minus_co, uo, vo;
+  if (// k0, k1 <- Zp
+      !ec_random_nonzero_scalar(group, &k0, kDefaultAdditionalData) ||
+      !ec_random_nonzero_scalar(group, &k1, kDefaultAdditionalData) ||
+      // Kb = k0*(G;T) + k1*(H;S)
+      !ec_point_mul_scalar_precomp(group, &jacobians[idx_Kb0],
+                                   &method->g_precomp, &k0, &method->h_precomp,
+                                   &k1, NULL, NULL) ||
+      !ec_point_mul_scalar_batch(group, &jacobians[idx_Kb1], T, &k0, S, &k1,
+                                 NULL, NULL) ||
+      // co, uo, vo <- Zp
+      !ec_random_nonzero_scalar(group, &minus_co, kDefaultAdditionalData) ||
+      !ec_random_nonzero_scalar(group, &uo, kDefaultAdditionalData) ||
+      !ec_random_nonzero_scalar(group, &vo, kDefaultAdditionalData) ||
+      // Ko = uo*(G;T) + vo*(H;S) - co*(pubo;W)
+      !ec_point_mul_scalar_precomp(group, &jacobians[idx_Ko0],
+                                   &method->g_precomp, &uo, &method->h_precomp,
+                                   &vo, &pubo_precomp, &minus_co) ||
+      !ec_point_mul_scalar_batch(group, &jacobians[idx_Ko1], T, &uo, S, &vo, W,
+                                 &minus_co)) {
+    return 0;
+  }
+
+  EC_AFFINE affines[num_idx];
+  jacobians[idx_T] = *T;
+  jacobians[idx_S] = *S;
+  jacobians[idx_W] = *W;
+  jacobians[idx_Ws] = *Ws;
+  if (!ec_jacobian_to_affine_batch(group, affines, jacobians, num_idx)) {
+    return 0;
+  }
+
+  // Select the K corresponding to K0 and K1 in constant-time.
+  EC_AFFINE K00, K01, K10, K11;
+  ec_affine_select(group, &K00, mask, &affines[idx_Ko0], &affines[idx_Kb0]);
+  ec_affine_select(group, &K01, mask, &affines[idx_Ko1], &affines[idx_Kb1]);
+  ec_affine_select(group, &K10, mask, &affines[idx_Kb0], &affines[idx_Ko0]);
+  ec_affine_select(group, &K11, mask, &affines[idx_Kb1], &affines[idx_Ko1]);
+
+  // Compute c = Hc(...) for the two proofs.
+  EC_SCALAR cs, c;
+  if (!hash_c_dleq(method, &cs, &priv->pubs, &affines[idx_T], &affines[idx_S],
+                   &affines[idx_Ws], &affines[idx_Ks0], &affines[idx_Ks1]) ||
+      !hash_c_dleqor(method, &c, &priv->pub0, &priv->pub1, &affines[idx_T],
+                     &affines[idx_S], &affines[idx_W], &K00, &K01, &K10,
+                     &K11)) {
+    return 0;
+  }
+
+  // Compute cb, ub, and ub for the two proofs. In each of these products, only
+  // one operand is in Montgomery form, so the product does not need to be
+  // converted.
+
+  EC_SCALAR cs_mont;
+  ec_scalar_to_montgomery(group, &cs_mont, &cs);
+
+  // us = ks0 + cs*xs
+  EC_SCALAR us, vs;
+  ec_scalar_mul_montgomery(group, &us, &priv->xs, &cs_mont);
+  ec_scalar_add(group, &us, &ks0, &us);
+
+  // vs = ks1 + cs*ys
+  ec_scalar_mul_montgomery(group, &vs, &priv->ys, &cs_mont);
+  ec_scalar_add(group, &vs, &ks1, &vs);
+
+  // Store DLEQ2 proof in transcript.
+  if (!scalar_to_cbb(cbb, group, &cs) ||
+      !scalar_to_cbb(cbb, group, &us) ||
+      !scalar_to_cbb(cbb, group, &vs)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    return 0;
+  }
+
+  // cb = c - co
+  EC_SCALAR cb, ub, vb;
+  ec_scalar_add(group, &cb, &c, &minus_co);
+
+  EC_SCALAR cb_mont;
+  ec_scalar_to_montgomery(group, &cb_mont, &cb);
+
+  // ub = k0 + cb*xb
+  ec_scalar_mul_montgomery(group, &ub, &xb, &cb_mont);
+  ec_scalar_add(group, &ub, &k0, &ub);
+
+  // vb = k1 + cb*yb
+  ec_scalar_mul_montgomery(group, &vb, &yb, &cb_mont);
+  ec_scalar_add(group, &vb, &k1, &vb);
+
+  // Select c, u, v in constant-time.
+  EC_SCALAR co, c0, c1, u0, u1, v0, v1;
+  ec_scalar_neg(group, &co, &minus_co);
+  ec_scalar_select(group, &c0, mask, &co, &cb);
+  ec_scalar_select(group, &u0, mask, &uo, &ub);
+  ec_scalar_select(group, &v0, mask, &vo, &vb);
+  ec_scalar_select(group, &c1, mask, &cb, &co);
+  ec_scalar_select(group, &u1, mask, &ub, &uo);
+  ec_scalar_select(group, &v1, mask, &vb, &vo);
+
+  // Store DLEQOR2 proof in transcript.
+  if (!scalar_to_cbb(cbb, group, &c0) ||
+      !scalar_to_cbb(cbb, group, &c1) ||
+      !scalar_to_cbb(cbb, group, &u0) ||
+      !scalar_to_cbb(cbb, group, &u1) ||
+      !scalar_to_cbb(cbb, group, &v0) ||
+      !scalar_to_cbb(cbb, group, &v1)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    return 0;
+  }
+
+  return 1;
+}
+
+static int dleq_verify(const PMBTOKEN_METHOD *method, CBS *cbs,
+                       const PMBTOKEN_CLIENT_KEY *pub, const EC_RAW_POINT *T,
+                       const EC_RAW_POINT *S, const EC_RAW_POINT *W,
+                       const EC_RAW_POINT *Ws) {
+  const EC_GROUP *group = method->group;
+  const EC_RAW_POINT *g = &group->generator->raw;
+
+  // We verify a DLEQ proof for the validity token and a DLEQOR2 proof for the
+  // private metadata token. To allow amortizing Jacobian-to-affine conversions,
+  // we compute Ki for both proofs first. Additionally, all inputs to this
+  // function are public, so we can use the faster variable-time
+  // multiplications.
+  enum {
+    idx_T,
+    idx_S,
+    idx_W,
+    idx_Ws,
+    idx_Ks0,
+    idx_Ks1,
+    idx_K00,
+    idx_K01,
+    idx_K10,
+    idx_K11,
+    num_idx,
+  };
+  EC_RAW_POINT jacobians[num_idx];
+
+  // Decode the DLEQ proof.
+  EC_SCALAR cs, us, vs;
+  if (!scalar_from_cbs(cbs, group, &cs) ||
+      !scalar_from_cbs(cbs, group, &us) ||
+      !scalar_from_cbs(cbs, group, &vs)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+    return 0;
+  }
+
+  // Ks = us*(G;T) + vs*(H;S) - cs*(pubs;Ws)
+  EC_RAW_POINT pubs;
+  ec_affine_to_jacobian(group, &pubs, &pub->pubs);
+  EC_SCALAR minus_cs;
+  ec_scalar_neg(group, &minus_cs, &cs);
+  if (!mul_public_3(group, &jacobians[idx_Ks0], g, &us, &method->h, &vs, &pubs,
+                    &minus_cs) ||
+      !mul_public_3(group, &jacobians[idx_Ks1], T, &us, S, &vs, Ws,
+                    &minus_cs)) {
+    return 0;
+  }
+
+  // Decode the DLEQOR proof.
+  EC_SCALAR c0, c1, u0, u1, v0, v1;
+  if (!scalar_from_cbs(cbs, group, &c0) ||
+      !scalar_from_cbs(cbs, group, &c1) ||
+      !scalar_from_cbs(cbs, group, &u0) ||
+      !scalar_from_cbs(cbs, group, &u1) ||
+      !scalar_from_cbs(cbs, group, &v0) ||
+      !scalar_from_cbs(cbs, group, &v1)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+    return 0;
+  }
+
+  EC_RAW_POINT pub0, pub1;
+  ec_affine_to_jacobian(group, &pub0, &pub->pub0);
+  ec_affine_to_jacobian(group, &pub1, &pub->pub1);
+  EC_SCALAR minus_c0, minus_c1;
+  ec_scalar_neg(group, &minus_c0, &c0);
+  ec_scalar_neg(group, &minus_c1, &c1);
+  if (// K0 = u0*(G;T) + v0*(H;S) - c0*(pub0;W)
+      !mul_public_3(group, &jacobians[idx_K00], g, &u0, &method->h, &v0, &pub0,
+                    &minus_c0) ||
+      !mul_public_3(group, &jacobians[idx_K01], T, &u0, S, &v0, W, &minus_c0) ||
+      // K1 = u1*(G;T) + v1*(H;S) - c1*(pub1;W)
+      !mul_public_3(group, &jacobians[idx_K10], g, &u1, &method->h, &v1, &pub1,
+                    &minus_c1) ||
+      !mul_public_3(group, &jacobians[idx_K11], T, &u1, S, &v1, W, &minus_c1)) {
+    return 0;
+  }
+
+  EC_AFFINE affines[num_idx];
+  jacobians[idx_T] = *T;
+  jacobians[idx_S] = *S;
+  jacobians[idx_W] = *W;
+  jacobians[idx_Ws] = *Ws;
+  if (!ec_jacobian_to_affine_batch(group, affines, jacobians, num_idx)) {
+    return 0;
+  }
+
+  // Check the DLEQ proof.
+  EC_SCALAR calculated;
+  if (!hash_c_dleq(method, &calculated, &pub->pubs, &affines[idx_T],
+                   &affines[idx_S], &affines[idx_Ws], &affines[idx_Ks0],
+                   &affines[idx_Ks1])) {
+    return 0;
+  }
+
+  // cs == calculated
+  if (!ec_scalar_equal_vartime(group, &cs, &calculated)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_INVALID_PROOF);
+    return 0;
+  }
+
+  // Check the DLEQOR proof.
+  if (!hash_c_dleqor(method, &calculated, &pub->pub0, &pub->pub1,
+                     &affines[idx_T], &affines[idx_S], &affines[idx_W],
+                     &affines[idx_K00], &affines[idx_K01], &affines[idx_K10],
+                     &affines[idx_K11])) {
+    return 0;
+  }
+
+  // c0 + c1 == calculated
+  EC_SCALAR c;
+  ec_scalar_add(group, &c, &c0, &c1);
+  if (!ec_scalar_equal_vartime(group, &c, &calculated)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_INVALID_PROOF);
+    return 0;
+  }
+
+  return 1;
+}
+
+static int pmbtoken_sign(const PMBTOKEN_METHOD *method,
+                         const PMBTOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
+                         size_t num_requested, size_t num_to_issue,
+                         uint8_t private_metadata) {
+  const EC_GROUP *group = method->group;
+  if (num_requested < num_to_issue) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_INTERNAL_ERROR);
+    return 0;
+  }
+
+  if (num_to_issue > ((size_t)-1) / sizeof(EC_RAW_POINT) ||
+      num_to_issue > ((size_t)-1) / sizeof(EC_SCALAR)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_OVERFLOW);
+    return 0;
+  }
+
+  int ret = 0;
+  EC_RAW_POINT *Tps = OPENSSL_malloc(num_to_issue * sizeof(EC_RAW_POINT));
+  EC_RAW_POINT *Sps = OPENSSL_malloc(num_to_issue * sizeof(EC_RAW_POINT));
+  EC_RAW_POINT *Wps = OPENSSL_malloc(num_to_issue * sizeof(EC_RAW_POINT));
+  EC_RAW_POINT *Wsps = OPENSSL_malloc(num_to_issue * sizeof(EC_RAW_POINT));
+  EC_SCALAR *es = OPENSSL_malloc(num_to_issue * sizeof(EC_SCALAR));
+  CBB batch_cbb;
+  CBB_zero(&batch_cbb);
+  if (!Tps ||
+      !Sps ||
+      !Wps ||
+      !Wsps ||
+      !es ||
+      !CBB_init(&batch_cbb, 0) ||
+      !point_to_cbb(&batch_cbb, method->group, &key->pubs) ||
+      !point_to_cbb(&batch_cbb, method->group, &key->pub0) ||
+      !point_to_cbb(&batch_cbb, method->group, &key->pub1)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  for (size_t i = 0; i < num_to_issue; i++) {
+    EC_AFFINE Tp_affine;
+    EC_RAW_POINT Tp;
+    if (!cbs_get_prefixed_point(cbs, group, &Tp_affine, method->prefix_point)) {
+      OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+      goto err;
+    }
+    ec_affine_to_jacobian(group, &Tp, &Tp_affine);
+
+    EC_SCALAR xb, yb;
+    BN_ULONG mask = ((BN_ULONG)0) - (private_metadata & 1);
+    ec_scalar_select(group, &xb, mask, &key->x1, &key->x0);
+    ec_scalar_select(group, &yb, mask, &key->y1, &key->y0);
+
+    uint8_t s[PMBTOKEN_NONCE_SIZE];
+    RAND_bytes(s, PMBTOKEN_NONCE_SIZE);
+    // The |jacobians| and |affines| contain Sp, Wp, and Wsp.
+    EC_RAW_POINT jacobians[3];
+    EC_AFFINE affines[3];
+    if (!method->hash_s(group, &jacobians[0], &Tp_affine, s) ||
+        !ec_point_mul_scalar_batch(group, &jacobians[1], &Tp, &xb,
+                                   &jacobians[0], &yb, NULL, NULL) ||
+        !ec_point_mul_scalar_batch(group, &jacobians[2], &Tp, &key->xs,
+                                   &jacobians[0], &key->ys, NULL, NULL) ||
+        !ec_jacobian_to_affine_batch(group, affines, jacobians, 3) ||
+        !CBB_add_bytes(cbb, s, PMBTOKEN_NONCE_SIZE) ||
+        !cbb_add_prefixed_point(cbb, group, &affines[1], method->prefix_point) ||
+        !cbb_add_prefixed_point(cbb, group, &affines[2], method->prefix_point)) {
+      goto err;
+    }
+
+    if (!point_to_cbb(&batch_cbb, group, &Tp_affine) ||
+        !point_to_cbb(&batch_cbb, group, &affines[0]) ||
+        !point_to_cbb(&batch_cbb, group, &affines[1]) ||
+        !point_to_cbb(&batch_cbb, group, &affines[2])) {
+      OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+      goto err;
+    }
+    Tps[i] = Tp;
+    Sps[i] = jacobians[0];
+    Wps[i] = jacobians[1];
+    Wsps[i] = jacobians[2];
+
+    if (!CBB_flush(cbb)) {
+      goto err;
+    }
+  }
+
+  // The DLEQ batching construction is described in appendix B of
+  // https://eprint.iacr.org/2020/072/20200324:214215. Note the additional
+  // computations all act on public inputs.
+  for (size_t i = 0; i < num_to_issue; i++) {
+    if (!hash_c_batch(method, &es[i], &batch_cbb, i)) {
+      goto err;
+    }
+  }
+
+  EC_RAW_POINT Tp_batch, Sp_batch, Wp_batch, Wsp_batch;
+  if (!ec_point_mul_scalar_public_batch(group, &Tp_batch,
+                                        /*g_scalar=*/NULL, Tps, es,
+                                        num_to_issue) ||
+      !ec_point_mul_scalar_public_batch(group, &Sp_batch,
+                                        /*g_scalar=*/NULL, Sps, es,
+                                        num_to_issue) ||
+      !ec_point_mul_scalar_public_batch(group, &Wp_batch,
+                                        /*g_scalar=*/NULL, Wps, es,
+                                        num_to_issue) ||
+      !ec_point_mul_scalar_public_batch(group, &Wsp_batch,
+                                        /*g_scalar=*/NULL, Wsps, es,
+                                        num_to_issue)) {
+    goto err;
+  }
+
+  CBB proof;
+  if (!CBB_add_u16_length_prefixed(cbb, &proof) ||
+      !dleq_generate(method, &proof, key, &Tp_batch, &Sp_batch, &Wp_batch,
+                     &Wsp_batch, private_metadata) ||
+      !CBB_flush(cbb)) {
+    goto err;
+  }
+
+  // Skip over any unused requests.
+  size_t point_len = 1 + 2 * BN_num_bytes(&group->field);
+  size_t token_len = point_len;
+  if (method->prefix_point) {
+    token_len += 2;
+  }
+  if (!CBS_skip(cbs, token_len * (num_requested - num_to_issue))) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+    goto err;
+  }
+
+  ret = 1;
+
+err:
+  OPENSSL_free(Tps);
+  OPENSSL_free(Sps);
+  OPENSSL_free(Wps);
+  OPENSSL_free(Wsps);
+  OPENSSL_free(es);
+  CBB_cleanup(&batch_cbb);
+  return ret;
+}
+
+static STACK_OF(TRUST_TOKEN) *
+    pmbtoken_unblind(const PMBTOKEN_METHOD *method,
+                     const PMBTOKEN_CLIENT_KEY *key,
+                     const STACK_OF(PMBTOKEN_PRETOKEN) * pretokens, CBS *cbs,
+                     size_t count, uint32_t key_id) {
+  const EC_GROUP *group = method->group;
+  if (count > sk_PMBTOKEN_PRETOKEN_num(pretokens)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+    return NULL;
+  }
+
+  int ok = 0;
+  STACK_OF(TRUST_TOKEN) *ret = sk_TRUST_TOKEN_new_null();
+  if (ret == NULL) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    return NULL;
+  }
+
+  if (count > ((size_t)-1) / sizeof(EC_RAW_POINT) ||
+      count > ((size_t)-1) / sizeof(EC_SCALAR)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_OVERFLOW);
+    return 0;
+  }
+  EC_RAW_POINT *Tps = OPENSSL_malloc(count * sizeof(EC_RAW_POINT));
+  EC_RAW_POINT *Sps = OPENSSL_malloc(count * sizeof(EC_RAW_POINT));
+  EC_RAW_POINT *Wps = OPENSSL_malloc(count * sizeof(EC_RAW_POINT));
+  EC_RAW_POINT *Wsps = OPENSSL_malloc(count * sizeof(EC_RAW_POINT));
+  EC_SCALAR *es = OPENSSL_malloc(count * sizeof(EC_SCALAR));
+  CBB batch_cbb;
+  CBB_zero(&batch_cbb);
+  if (!Tps ||
+      !Sps ||
+      !Wps ||
+      !Wsps ||
+      !es ||
+      !CBB_init(&batch_cbb, 0) ||
+      !point_to_cbb(&batch_cbb, method->group, &key->pubs) ||
+      !point_to_cbb(&batch_cbb, method->group, &key->pub0) ||
+      !point_to_cbb(&batch_cbb, method->group, &key->pub1)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  for (size_t i = 0; i < count; i++) {
+    const PMBTOKEN_PRETOKEN *pretoken =
+        sk_PMBTOKEN_PRETOKEN_value(pretokens, i);
+
+    uint8_t s[PMBTOKEN_NONCE_SIZE];
+    EC_AFFINE Wp_affine, Wsp_affine;
+    if (!CBS_copy_bytes(cbs, s, PMBTOKEN_NONCE_SIZE) ||
+        !cbs_get_prefixed_point(cbs, group, &Wp_affine, method->prefix_point) ||
+        !cbs_get_prefixed_point(cbs, group, &Wsp_affine,
+                                method->prefix_point)) {
+      OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+      goto err;
+    }
+
+    ec_affine_to_jacobian(group, &Tps[i], &pretoken->Tp);
+    ec_affine_to_jacobian(group, &Wps[i], &Wp_affine);
+    ec_affine_to_jacobian(group, &Wsps[i], &Wsp_affine);
+    if (!method->hash_s(group, &Sps[i], &pretoken->Tp, s)) {
+      goto err;
+    }
+
+    EC_AFFINE Sp_affine;
+    if (!point_to_cbb(&batch_cbb, group, &pretoken->Tp) ||
+        !ec_jacobian_to_affine(group, &Sp_affine, &Sps[i]) ||
+        !point_to_cbb(&batch_cbb, group, &Sp_affine) ||
+        !point_to_cbb(&batch_cbb, group, &Wp_affine) ||
+        !point_to_cbb(&batch_cbb, group, &Wsp_affine)) {
+      OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+      goto err;
+    }
+
+    // Unblind the token.
+    EC_RAW_POINT jacobians[3];
+    EC_AFFINE affines[3];
+    if (!ec_point_mul_scalar(group, &jacobians[0], &Sps[i], &pretoken->r) ||
+        !ec_point_mul_scalar(group, &jacobians[1], &Wps[i], &pretoken->r) ||
+        !ec_point_mul_scalar(group, &jacobians[2], &Wsps[i], &pretoken->r) ||
+        !ec_jacobian_to_affine_batch(group, affines, jacobians, 3)) {
+      goto err;
+    }
+
+    // Serialize the token. Include |key_id| to avoid an extra copy in the layer
+    // above.
+    CBB token_cbb;
+    size_t point_len = 1 + 2 * BN_num_bytes(&group->field);
+    if (!CBB_init(&token_cbb, 4 + PMBTOKEN_NONCE_SIZE + 3 * (2 + point_len)) ||
+        !CBB_add_u32(&token_cbb, key_id) ||
+        !CBB_add_bytes(&token_cbb, pretoken->t, PMBTOKEN_NONCE_SIZE) ||
+        !cbb_add_prefixed_point(&token_cbb, group, &affines[0],
+                                method->prefix_point) ||
+        !cbb_add_prefixed_point(&token_cbb, group, &affines[1],
+                                method->prefix_point) ||
+        !cbb_add_prefixed_point(&token_cbb, group, &affines[2],
+                                method->prefix_point) ||
+        !CBB_flush(&token_cbb)) {
+      CBB_cleanup(&token_cbb);
+      goto err;
+    }
+
+    TRUST_TOKEN *token =
+        TRUST_TOKEN_new(CBB_data(&token_cbb), CBB_len(&token_cbb));
+    CBB_cleanup(&token_cbb);
+    if (token == NULL ||
+        !sk_TRUST_TOKEN_push(ret, token)) {
+      OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+      TRUST_TOKEN_free(token);
+      goto err;
+    }
+  }
+
+  // The DLEQ batching construction is described in appendix B of
+  // https://eprint.iacr.org/2020/072/20200324:214215. Note the additional
+  // computations all act on public inputs.
+  for (size_t i = 0; i < count; i++) {
+    if (!hash_c_batch(method, &es[i], &batch_cbb, i)) {
+      goto err;
+    }
+  }
+
+  EC_RAW_POINT Tp_batch, Sp_batch, Wp_batch, Wsp_batch;
+  if (!ec_point_mul_scalar_public_batch(group, &Tp_batch,
+                                        /*g_scalar=*/NULL, Tps, es, count) ||
+      !ec_point_mul_scalar_public_batch(group, &Sp_batch,
+                                        /*g_scalar=*/NULL, Sps, es, count) ||
+      !ec_point_mul_scalar_public_batch(group, &Wp_batch,
+                                        /*g_scalar=*/NULL, Wps, es, count) ||
+      !ec_point_mul_scalar_public_batch(group, &Wsp_batch,
+                                        /*g_scalar=*/NULL, Wsps, es, count)) {
+    goto err;
+  }
+
+  CBS proof;
+  if (!CBS_get_u16_length_prefixed(cbs, &proof) ||
+      !dleq_verify(method, &proof, key, &Tp_batch, &Sp_batch, &Wp_batch,
+                   &Wsp_batch) ||
+      CBS_len(&proof) != 0) {
+    goto err;
+  }
+
+  ok = 1;
+
+err:
+  OPENSSL_free(Tps);
+  OPENSSL_free(Sps);
+  OPENSSL_free(Wps);
+  OPENSSL_free(Wsps);
+  OPENSSL_free(es);
+  CBB_cleanup(&batch_cbb);
+  if (!ok) {
+    sk_TRUST_TOKEN_pop_free(ret, TRUST_TOKEN_free);
+    ret = NULL;
+  }
+  return ret;
+}
+
+static int pmbtoken_read(const PMBTOKEN_METHOD *method,
+                         const PMBTOKEN_ISSUER_KEY *key,
+                         uint8_t out_nonce[PMBTOKEN_NONCE_SIZE],
+                         uint8_t *out_private_metadata, const uint8_t *token,
+                         size_t token_len) {
+  const EC_GROUP *group = method->group;
+  CBS cbs;
+  CBS_init(&cbs, token, token_len);
+  EC_AFFINE S, W, Ws;
+  if (!CBS_copy_bytes(&cbs, out_nonce, PMBTOKEN_NONCE_SIZE) ||
+      !cbs_get_prefixed_point(&cbs, group, &S, method->prefix_point) ||
+      !cbs_get_prefixed_point(&cbs, group, &W, method->prefix_point) ||
+      !cbs_get_prefixed_point(&cbs, group, &Ws, method->prefix_point) ||
+      CBS_len(&cbs) != 0) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_INVALID_TOKEN);
+    return 0;
+  }
+
+
+  EC_RAW_POINT T;
+  if (!method->hash_t(group, &T, out_nonce)) {
+    return 0;
+  }
+
+  // We perform three multiplications with S and T. This is enough that it is
+  // worth using |ec_point_mul_scalar_precomp|.
+  EC_RAW_POINT S_jacobian;
+  EC_PRECOMP S_precomp, T_precomp;
+  ec_affine_to_jacobian(group, &S_jacobian, &S);
+  if (!ec_init_precomp(group, &S_precomp, &S_jacobian) ||
+      !ec_init_precomp(group, &T_precomp, &T)) {
+    return 0;
+  }
+
+  EC_RAW_POINT Ws_calculated;
+  // Check the validity of the token.
+  if (!ec_point_mul_scalar_precomp(group, &Ws_calculated, &T_precomp, &key->xs,
+                                   &S_precomp, &key->ys, NULL, NULL) ||
+      !ec_affine_jacobian_equal(group, &Ws, &Ws_calculated)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_BAD_VALIDITY_CHECK);
+    return 0;
+  }
+
+  EC_RAW_POINT W0, W1;
+  if (!ec_point_mul_scalar_precomp(group, &W0, &T_precomp, &key->x0, &S_precomp,
+                                   &key->y0, NULL, NULL) ||
+      !ec_point_mul_scalar_precomp(group, &W1, &T_precomp, &key->x1, &S_precomp,
+                                   &key->y1, NULL, NULL)) {
+    return 0;
+  }
+
+  const int is_W0 = ec_affine_jacobian_equal(group, &W, &W0);
+  const int is_W1 = ec_affine_jacobian_equal(group, &W, &W1);
+  const int is_valid = is_W0 ^ is_W1;
+  if (!is_valid) {
+    // Invalid tokens will fail the validity check above.
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_INTERNAL_ERROR);
+    return 0;
+  }
+
+  *out_private_metadata = is_W1;
+  return 1;
+}
+
+
+// PMBTokens experiment v1.
+
+static int pmbtoken_exp1_hash_t(const EC_GROUP *group, EC_RAW_POINT *out,
+                                const uint8_t t[PMBTOKEN_NONCE_SIZE]) {
+  const uint8_t kHashTLabel[] = "PMBTokens Experiment V1 HashT";
+  return ec_hash_to_curve_p384_xmd_sha512_sswu_draft07(
+      group, out, kHashTLabel, sizeof(kHashTLabel), t, PMBTOKEN_NONCE_SIZE);
+}
+
+static int pmbtoken_exp1_hash_s(const EC_GROUP *group, EC_RAW_POINT *out,
+                                const EC_AFFINE *t,
+                                const uint8_t s[PMBTOKEN_NONCE_SIZE]) {
+  const uint8_t kHashSLabel[] = "PMBTokens Experiment V1 HashS";
+  int ret = 0;
+  CBB cbb;
+  uint8_t *buf = NULL;
+  size_t len;
+  if (!CBB_init(&cbb, 0) ||
+      !point_to_cbb(&cbb, group, t) ||
+      !CBB_add_bytes(&cbb, s, PMBTOKEN_NONCE_SIZE) ||
+      !CBB_finish(&cbb, &buf, &len) ||
+      !ec_hash_to_curve_p384_xmd_sha512_sswu_draft07(
+          group, out, kHashSLabel, sizeof(kHashSLabel), buf, len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  ret = 1;
+
+err:
+  OPENSSL_free(buf);
+  CBB_cleanup(&cbb);
+  return ret;
+}
+
+static int pmbtoken_exp1_hash_c(const EC_GROUP *group, EC_SCALAR *out,
+                                uint8_t *buf, size_t len) {
+  const uint8_t kHashCLabel[] = "PMBTokens Experiment V1 HashC";
+  return ec_hash_to_scalar_p384_xmd_sha512_draft07(
+      group, out, kHashCLabel, sizeof(kHashCLabel), buf, len);
+}
+
+static int pmbtoken_exp1_ok = 0;
+static PMBTOKEN_METHOD pmbtoken_exp1_method;
+static CRYPTO_once_t pmbtoken_exp1_method_once = CRYPTO_ONCE_INIT;
+
+static void pmbtoken_exp1_init_method_impl(void) {
+  // This is the output of |ec_hash_to_scalar_p384_xmd_sha512_draft07| with DST
+  // "PMBTokens Experiment V1 HashH" and message "generator".
+  static const uint8_t kH[] = {
+      0x04, 0x82, 0xd5, 0x68, 0xf5, 0x39, 0xf6, 0x08, 0x19, 0xa1, 0x75,
+      0x9f, 0x98, 0xb5, 0x10, 0xf5, 0x0b, 0x9d, 0x2b, 0xe1, 0x64, 0x4d,
+      0x02, 0x76, 0x18, 0x11, 0xf8, 0x2f, 0xd3, 0x33, 0x25, 0x1f, 0x2c,
+      0xb8, 0xf6, 0xf1, 0x9e, 0x93, 0x85, 0x79, 0xb3, 0xb7, 0x81, 0xa3,
+      0xe6, 0x23, 0xc3, 0x1c, 0xff, 0x03, 0xd9, 0x40, 0x6c, 0xec, 0xe0,
+      0x4d, 0xea, 0xdf, 0x9d, 0x94, 0xd1, 0x87, 0xab, 0x27, 0xf7, 0x4f,
+      0x53, 0xea, 0xa3, 0x18, 0x72, 0xb9, 0xd1, 0x56, 0xa0, 0x4e, 0x81,
+      0xaa, 0xeb, 0x1c, 0x22, 0x6d, 0x39, 0x1c, 0x5e, 0xb1, 0x27, 0xfc,
+      0x87, 0xc3, 0x95, 0xd0, 0x13, 0xb7, 0x0b, 0x5c, 0xc7,
+  };
+
+  pmbtoken_exp1_ok =
+      pmbtoken_init_method(&pmbtoken_exp1_method, NID_secp384r1, kH, sizeof(kH),
+                           pmbtoken_exp1_hash_t, pmbtoken_exp1_hash_s,
+                           pmbtoken_exp1_hash_c, 1);
+}
+
+static int pmbtoken_exp1_init_method(void) {
+  CRYPTO_once(&pmbtoken_exp1_method_once, pmbtoken_exp1_init_method_impl);
+  if (!pmbtoken_exp1_ok) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_INTERNAL_ERROR);
+    return 0;
+  }
+  return 1;
+}
+
+int pmbtoken_exp1_generate_key(CBB *out_private, CBB *out_public) {
+  if (!pmbtoken_exp1_init_method()) {
+    return 0;
+  }
+
+  return pmbtoken_generate_key(&pmbtoken_exp1_method, out_private, out_public);
+}
+
+int pmbtoken_exp1_client_key_from_bytes(PMBTOKEN_CLIENT_KEY *key,
+                                        const uint8_t *in, size_t len) {
+  if (!pmbtoken_exp1_init_method()) {
+    return 0;
+  }
+  return pmbtoken_client_key_from_bytes(&pmbtoken_exp1_method, key, in, len);
+}
+
+int pmbtoken_exp1_issuer_key_from_bytes(PMBTOKEN_ISSUER_KEY *key,
+                                        const uint8_t *in, size_t len) {
+  if (!pmbtoken_exp1_init_method()) {
+    return 0;
+  }
+  return pmbtoken_issuer_key_from_bytes(&pmbtoken_exp1_method, key, in, len);
+}
+
+STACK_OF(PMBTOKEN_PRETOKEN) * pmbtoken_exp1_blind(CBB *cbb, size_t count) {
+  if (!pmbtoken_exp1_init_method()) {
+    return NULL;
+  }
+  return pmbtoken_blind(&pmbtoken_exp1_method, cbb, count);
+}
+
+int pmbtoken_exp1_sign(const PMBTOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
+                       size_t num_requested, size_t num_to_issue,
+                       uint8_t private_metadata) {
+  if (!pmbtoken_exp1_init_method()) {
+    return 0;
+  }
+  return pmbtoken_sign(&pmbtoken_exp1_method, key, cbb, cbs, num_requested,
+                       num_to_issue, private_metadata);
+}
+
+STACK_OF(TRUST_TOKEN) *
+    pmbtoken_exp1_unblind(const PMBTOKEN_CLIENT_KEY *key,
+                          const STACK_OF(PMBTOKEN_PRETOKEN) * pretokens,
+                          CBS *cbs, size_t count, uint32_t key_id) {
+  if (!pmbtoken_exp1_init_method()) {
+    return NULL;
+  }
+  return pmbtoken_unblind(&pmbtoken_exp1_method, key, pretokens, cbs, count,
+                          key_id);
+}
+
+int pmbtoken_exp1_read(const PMBTOKEN_ISSUER_KEY *key,
+                       uint8_t out_nonce[PMBTOKEN_NONCE_SIZE],
+                       uint8_t *out_private_metadata, const uint8_t *token,
+                       size_t token_len) {
+  if (!pmbtoken_exp1_init_method()) {
+    return 0;
+  }
+  return pmbtoken_read(&pmbtoken_exp1_method, key, out_nonce,
+                       out_private_metadata, token, token_len);
+}
+
+int pmbtoken_exp1_get_h_for_testing(uint8_t out[97]) {
+  if (!pmbtoken_exp1_init_method()) {
+    return 0;
+  }
+  EC_AFFINE h;
+  return ec_jacobian_to_affine(pmbtoken_exp1_method.group, &h,
+                               &pmbtoken_exp1_method.h) &&
+         ec_point_to_bytes(pmbtoken_exp1_method.group, &h,
+                           POINT_CONVERSION_UNCOMPRESSED, out, 97) == 97;
+}
+
+// PMBTokens experiment v2.
+
+static int pmbtoken_exp2_hash_t(const EC_GROUP *group, EC_RAW_POINT *out,
+                                const uint8_t t[PMBTOKEN_NONCE_SIZE]) {
+  const uint8_t kHashTLabel[] = "PMBTokens Experiment V2 HashT";
+  return ec_hash_to_curve_p384_xmd_sha512_sswu_draft07(
+      group, out, kHashTLabel, sizeof(kHashTLabel), t, PMBTOKEN_NONCE_SIZE);
+}
+
+static int pmbtoken_exp2_hash_s(const EC_GROUP *group, EC_RAW_POINT *out,
+                                const EC_AFFINE *t,
+                                const uint8_t s[PMBTOKEN_NONCE_SIZE]) {
+  const uint8_t kHashSLabel[] = "PMBTokens Experiment V2 HashS";
+  int ret = 0;
+  CBB cbb;
+  uint8_t *buf = NULL;
+  size_t len;
+  if (!CBB_init(&cbb, 0) ||
+      !point_to_cbb(&cbb, group, t) ||
+      !CBB_add_bytes(&cbb, s, PMBTOKEN_NONCE_SIZE) ||
+      !CBB_finish(&cbb, &buf, &len) ||
+      !ec_hash_to_curve_p384_xmd_sha512_sswu_draft07(
+          group, out, kHashSLabel, sizeof(kHashSLabel), buf, len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  ret = 1;
+
+err:
+  OPENSSL_free(buf);
+  CBB_cleanup(&cbb);
+  return ret;
+}
+
+static int pmbtoken_exp2_hash_c(const EC_GROUP *group, EC_SCALAR *out,
+                                uint8_t *buf, size_t len) {
+  const uint8_t kHashCLabel[] = "PMBTokens Experiment V2 HashC";
+  return ec_hash_to_scalar_p384_xmd_sha512_draft07(
+      group, out, kHashCLabel, sizeof(kHashCLabel), buf, len);
+}
+
+static int pmbtoken_exp2_ok = 0;
+static PMBTOKEN_METHOD pmbtoken_exp2_method;
+static CRYPTO_once_t pmbtoken_exp2_method_once = CRYPTO_ONCE_INIT;
+
+static void pmbtoken_exp2_init_method_impl(void) {
+  // This is the output of |ec_hash_to_scalar_p384_xmd_sha512_draft07| with DST
+  // "PMBTokens Experiment V2 HashH" and message "generator".
+  static const uint8_t kH[] = {
+      0x04, 0xbc, 0x27, 0x24, 0x99, 0xfa, 0xc9, 0xa4, 0x74, 0x6f, 0xf9,
+      0x07, 0x81, 0x55, 0xf8, 0x1f, 0x6f, 0xda, 0x09, 0xe7, 0x8c, 0x5d,
+      0x9e, 0x4e, 0x14, 0x7c, 0x53, 0x14, 0xbc, 0x7e, 0x29, 0x57, 0x92,
+      0x17, 0x94, 0x6e, 0xd2, 0xdf, 0xa5, 0x31, 0x1b, 0x4e, 0xb7, 0xfc,
+      0x93, 0xe3, 0x6e, 0x14, 0x1f, 0x4f, 0x14, 0xf3, 0xe5, 0x47, 0x61,
+      0x1c, 0x2c, 0x72, 0x25, 0xf0, 0x4a, 0x45, 0x23, 0x2d, 0x57, 0x93,
+      0x0e, 0xb2, 0x55, 0xb8, 0x57, 0x25, 0x4c, 0x1e, 0xdb, 0xfd, 0x58,
+      0x70, 0x17, 0x9a, 0xbb, 0x9e, 0x5e, 0x93, 0x9e, 0x92, 0xd3, 0xe8,
+      0x25, 0x62, 0xbf, 0x59, 0xb2, 0xd2, 0x3d, 0x71, 0xff
+  };
+
+  pmbtoken_exp2_ok =
+      pmbtoken_init_method(&pmbtoken_exp2_method, NID_secp384r1, kH, sizeof(kH),
+                           pmbtoken_exp2_hash_t, pmbtoken_exp2_hash_s,
+                           pmbtoken_exp2_hash_c, 0);
+}
+
+static int pmbtoken_exp2_init_method(void) {
+  CRYPTO_once(&pmbtoken_exp2_method_once, pmbtoken_exp2_init_method_impl);
+  if (!pmbtoken_exp2_ok) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_INTERNAL_ERROR);
+    return 0;
+  }
+  return 1;
+}
+
+int pmbtoken_exp2_generate_key(CBB *out_private, CBB *out_public) {
+  if (!pmbtoken_exp2_init_method()) {
+    return 0;
+  }
+
+  return pmbtoken_generate_key(&pmbtoken_exp2_method, out_private, out_public);
+}
+
+int pmbtoken_exp2_client_key_from_bytes(PMBTOKEN_CLIENT_KEY *key,
+                                        const uint8_t *in, size_t len) {
+  if (!pmbtoken_exp2_init_method()) {
+    return 0;
+  }
+  return pmbtoken_client_key_from_bytes(&pmbtoken_exp2_method, key, in, len);
+}
+
+int pmbtoken_exp2_issuer_key_from_bytes(PMBTOKEN_ISSUER_KEY *key,
+                                        const uint8_t *in, size_t len) {
+  if (!pmbtoken_exp2_init_method()) {
+    return 0;
+  }
+  return pmbtoken_issuer_key_from_bytes(&pmbtoken_exp2_method, key, in, len);
+}
+
+STACK_OF(PMBTOKEN_PRETOKEN) * pmbtoken_exp2_blind(CBB *cbb, size_t count) {
+  if (!pmbtoken_exp2_init_method()) {
+    return NULL;
+  }
+  return pmbtoken_blind(&pmbtoken_exp2_method, cbb, count);
+}
+
+int pmbtoken_exp2_sign(const PMBTOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
+                       size_t num_requested, size_t num_to_issue,
+                       uint8_t private_metadata) {
+  if (!pmbtoken_exp2_init_method()) {
+    return 0;
+  }
+  return pmbtoken_sign(&pmbtoken_exp2_method, key, cbb, cbs, num_requested,
+                       num_to_issue, private_metadata);
+}
+
+STACK_OF(TRUST_TOKEN) *
+    pmbtoken_exp2_unblind(const PMBTOKEN_CLIENT_KEY *key,
+                          const STACK_OF(PMBTOKEN_PRETOKEN) * pretokens,
+                          CBS *cbs, size_t count, uint32_t key_id) {
+  if (!pmbtoken_exp2_init_method()) {
+    return NULL;
+  }
+  return pmbtoken_unblind(&pmbtoken_exp2_method, key, pretokens, cbs, count,
+                          key_id);
+}
+
+int pmbtoken_exp2_read(const PMBTOKEN_ISSUER_KEY *key,
+                       uint8_t out_nonce[PMBTOKEN_NONCE_SIZE],
+                       uint8_t *out_private_metadata, const uint8_t *token,
+                       size_t token_len) {
+  if (!pmbtoken_exp2_init_method()) {
+    return 0;
+  }
+  return pmbtoken_read(&pmbtoken_exp2_method, key, out_nonce,
+                       out_private_metadata, token, token_len);
+}
+
+int pmbtoken_exp2_get_h_for_testing(uint8_t out[97]) {
+  if (!pmbtoken_exp2_init_method()) {
+    return 0;
+  }
+  EC_AFFINE h;
+  return ec_jacobian_to_affine(pmbtoken_exp2_method.group, &h,
+                               &pmbtoken_exp2_method.h) &&
+         ec_point_to_bytes(pmbtoken_exp2_method.group, &h,
+                           POINT_CONVERSION_UNCOMPRESSED, out, 97) == 97;
+}
diff --git a/src/crypto/trust_token/trust_token.c b/src/crypto/trust_token/trust_token.c
new file mode 100644
index 0000000..fea619e
--- /dev/null
+++ b/src/crypto/trust_token/trust_token.c
@@ -0,0 +1,726 @@
+/* Copyright (c) 2019, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#include <openssl/bytestring.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/mem.h>
+#include <openssl/sha.h>
+#include <openssl/trust_token.h>
+
+#include "internal.h"
+
+
+// The Trust Token API is described in
+// https://github.com/WICG/trust-token-api/blob/master/README.md and provides a
+// protocol for issuing and redeeming tokens built on top of the PMBTokens
+// construction.
+
+const TRUST_TOKEN_METHOD *TRUST_TOKEN_experiment_v1(void) {
+  static const TRUST_TOKEN_METHOD kMethod = {
+      pmbtoken_exp1_generate_key,
+      pmbtoken_exp1_client_key_from_bytes,
+      pmbtoken_exp1_issuer_key_from_bytes,
+      pmbtoken_exp1_blind,
+      pmbtoken_exp1_sign,
+      pmbtoken_exp1_unblind,
+      pmbtoken_exp1_read,
+      1, /* has_private_metadata */
+      3, /* max_keys */
+      1, /* has_srr */
+  };
+  return &kMethod;
+}
+
+const TRUST_TOKEN_METHOD *TRUST_TOKEN_experiment_v2_pp(void) {
+  static const TRUST_TOKEN_METHOD kMethod = {
+      pmbtoken_exp2_generate_key,
+      pmbtoken_exp2_client_key_from_bytes,
+      pmbtoken_exp2_issuer_key_from_bytes,
+      pmbtoken_exp2_blind,
+      pmbtoken_exp2_sign,
+      pmbtoken_exp2_unblind,
+      pmbtoken_exp2_read,
+      0, /* has_private_metadata */
+      6, /* max_keys */
+      0, /* has_srr */
+  };
+  return &kMethod;
+}
+
+const TRUST_TOKEN_METHOD *TRUST_TOKEN_experiment_v2_pmb(void) {
+  static const TRUST_TOKEN_METHOD kMethod = {
+      pmbtoken_exp2_generate_key,
+      pmbtoken_exp2_client_key_from_bytes,
+      pmbtoken_exp2_issuer_key_from_bytes,
+      pmbtoken_exp2_blind,
+      pmbtoken_exp2_sign,
+      pmbtoken_exp2_unblind,
+      pmbtoken_exp2_read,
+      1, /* has_private_metadata */
+      3, /* max_keys */
+      0, /* has_srr */
+  };
+  return &kMethod;
+}
+
+TRUST_TOKEN *TRUST_TOKEN_new(const uint8_t *data, size_t len) {
+  TRUST_TOKEN *ret = OPENSSL_malloc(sizeof(TRUST_TOKEN));
+  if (ret == NULL) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    return NULL;
+  }
+  OPENSSL_memset(ret, 0, sizeof(TRUST_TOKEN));
+  ret->data = OPENSSL_memdup(data, len);
+  if (len != 0 && ret->data == NULL) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    OPENSSL_free(ret);
+    return NULL;
+  }
+  ret->len = len;
+  return ret;
+}
+
+void TRUST_TOKEN_free(TRUST_TOKEN *token) {
+  if (token == NULL) {
+    return;
+  }
+  OPENSSL_free(token->data);
+  OPENSSL_free(token);
+}
+
+int TRUST_TOKEN_generate_key(const TRUST_TOKEN_METHOD *method,
+                             uint8_t *out_priv_key, size_t *out_priv_key_len,
+                             size_t max_priv_key_len, uint8_t *out_pub_key,
+                             size_t *out_pub_key_len, size_t max_pub_key_len,
+                             uint32_t id) {
+  // Prepend the key ID in front of the PMBTokens format.
+  int ret = 0;
+  CBB priv_cbb, pub_cbb;
+  CBB_zero(&priv_cbb);
+  CBB_zero(&pub_cbb);
+  if (!CBB_init_fixed(&priv_cbb, out_priv_key, max_priv_key_len) ||
+      !CBB_init_fixed(&pub_cbb, out_pub_key, max_pub_key_len) ||
+      !CBB_add_u32(&priv_cbb, id) ||
+      !CBB_add_u32(&pub_cbb, id)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_BUFFER_TOO_SMALL);
+    goto err;
+  }
+
+  if (!method->generate_key(&priv_cbb, &pub_cbb)) {
+    goto err;
+  }
+
+  if (!CBB_finish(&priv_cbb, NULL, out_priv_key_len) ||
+      !CBB_finish(&pub_cbb, NULL, out_pub_key_len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_BUFFER_TOO_SMALL);
+    goto err;
+  }
+
+  ret = 1;
+
+err:
+  CBB_cleanup(&priv_cbb);
+  CBB_cleanup(&pub_cbb);
+  return ret;
+}
+
+TRUST_TOKEN_CLIENT *TRUST_TOKEN_CLIENT_new(const TRUST_TOKEN_METHOD *method,
+                                           size_t max_batchsize) {
+  if (max_batchsize > 0xffff) {
+    // The protocol supports only two-byte token counts.
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_OVERFLOW);
+    return NULL;
+  }
+
+  TRUST_TOKEN_CLIENT *ret = OPENSSL_malloc(sizeof(TRUST_TOKEN_CLIENT));
+  if (ret == NULL) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    return NULL;
+  }
+  OPENSSL_memset(ret, 0, sizeof(TRUST_TOKEN_CLIENT));
+  ret->method = method;
+  ret->max_batchsize = (uint16_t)max_batchsize;
+  return ret;
+}
+
+void TRUST_TOKEN_CLIENT_free(TRUST_TOKEN_CLIENT *ctx) {
+  if (ctx == NULL) {
+    return;
+  }
+  EVP_PKEY_free(ctx->srr_key);
+  sk_PMBTOKEN_PRETOKEN_pop_free(ctx->pretokens, PMBTOKEN_PRETOKEN_free);
+  OPENSSL_free(ctx);
+}
+
+int TRUST_TOKEN_CLIENT_add_key(TRUST_TOKEN_CLIENT *ctx, size_t *out_key_index,
+                               const uint8_t *key, size_t key_len) {
+  if (ctx->num_keys == OPENSSL_ARRAY_SIZE(ctx->keys) ||
+      ctx->num_keys >= ctx->method->max_keys) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_TOO_MANY_KEYS);
+    return 0;
+  }
+
+  struct trust_token_client_key_st *key_s = &ctx->keys[ctx->num_keys];
+  CBS cbs;
+  CBS_init(&cbs, key, key_len);
+  uint32_t key_id;
+  if (!CBS_get_u32(&cbs, &key_id) ||
+      !ctx->method->client_key_from_bytes(&key_s->key, CBS_data(&cbs),
+                                          CBS_len(&cbs))) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+    return 0;
+  }
+  key_s->id = key_id;
+  *out_key_index = ctx->num_keys;
+  ctx->num_keys += 1;
+  return 1;
+}
+
+int TRUST_TOKEN_CLIENT_set_srr_key(TRUST_TOKEN_CLIENT *ctx, EVP_PKEY *key) {
+  if (!ctx->method->has_srr) {
+    return 1;
+  }
+  EVP_PKEY_free(ctx->srr_key);
+  EVP_PKEY_up_ref(key);
+  ctx->srr_key = key;
+  return 1;
+}
+
+int TRUST_TOKEN_CLIENT_begin_issuance(TRUST_TOKEN_CLIENT *ctx, uint8_t **out,
+                                      size_t *out_len, size_t count) {
+  if (count > ctx->max_batchsize) {
+    count = ctx->max_batchsize;
+  }
+
+  int ret = 0;
+  CBB request;
+  STACK_OF(PMBTOKEN_PRETOKEN) *pretokens = NULL;
+  if (!CBB_init(&request, 0) ||
+      !CBB_add_u16(&request, count)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  pretokens = ctx->method->blind(&request, count);
+  if (pretokens == NULL) {
+    goto err;
+  }
+
+  if (!CBB_finish(&request, out, out_len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  sk_PMBTOKEN_PRETOKEN_pop_free(ctx->pretokens, PMBTOKEN_PRETOKEN_free);
+  ctx->pretokens = pretokens;
+  pretokens = NULL;
+  ret = 1;
+
+err:
+  CBB_cleanup(&request);
+  sk_PMBTOKEN_PRETOKEN_pop_free(pretokens, PMBTOKEN_PRETOKEN_free);
+  return ret;
+}
+
+STACK_OF(TRUST_TOKEN) *
+    TRUST_TOKEN_CLIENT_finish_issuance(TRUST_TOKEN_CLIENT *ctx,
+                                       size_t *out_key_index,
+                                       const uint8_t *response,
+                                       size_t response_len) {
+  CBS in;
+  CBS_init(&in, response, response_len);
+  uint16_t count;
+  uint32_t key_id;
+  if (!CBS_get_u16(&in, &count) ||
+      !CBS_get_u32(&in, &key_id)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+    return NULL;
+  }
+
+  size_t key_index = 0;
+  const struct trust_token_client_key_st *key = NULL;
+  for (size_t i = 0; i < ctx->num_keys; i++) {
+    if (ctx->keys[i].id == key_id) {
+      key_index = i;
+      key = &ctx->keys[i];
+      break;
+    }
+  }
+
+  if (key == NULL) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_INVALID_KEY_ID);
+    return NULL;
+  }
+
+  if (count > sk_PMBTOKEN_PRETOKEN_num(ctx->pretokens)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+    return NULL;
+  }
+
+  STACK_OF(TRUST_TOKEN) *tokens =
+      ctx->method->unblind(&key->key, ctx->pretokens, &in, count, key_id);
+  if (tokens == NULL) {
+    return NULL;
+  }
+
+  if (CBS_len(&in) != 0) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+    sk_TRUST_TOKEN_pop_free(tokens, TRUST_TOKEN_free);
+    return NULL;
+  }
+
+  sk_PMBTOKEN_PRETOKEN_pop_free(ctx->pretokens, PMBTOKEN_PRETOKEN_free);
+  ctx->pretokens = NULL;
+
+  *out_key_index = key_index;
+  return tokens;
+}
+
+int TRUST_TOKEN_CLIENT_begin_redemption(TRUST_TOKEN_CLIENT *ctx, uint8_t **out,
+                                        size_t *out_len,
+                                        const TRUST_TOKEN *token,
+                                        const uint8_t *data, size_t data_len,
+                                        uint64_t time) {
+  CBB request, token_inner, inner;
+  if (!CBB_init(&request, 0) ||
+      !CBB_add_u16_length_prefixed(&request, &token_inner) ||
+      !CBB_add_bytes(&token_inner, token->data, token->len) ||
+      !CBB_add_u16_length_prefixed(&request, &inner) ||
+      !CBB_add_bytes(&inner, data, data_len) ||
+      !CBB_add_u64(&request, time) ||
+      !CBB_finish(&request, out, out_len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    CBB_cleanup(&request);
+    return 0;
+  }
+  return 1;
+}
+
+int TRUST_TOKEN_CLIENT_finish_redemption(TRUST_TOKEN_CLIENT *ctx,
+                                         uint8_t **out_rr, size_t *out_rr_len,
+                                         uint8_t **out_sig, size_t *out_sig_len,
+                                         const uint8_t *response,
+                                         size_t response_len) {
+  CBS in, srr, sig;
+  CBS_init(&in, response, response_len);
+  if (!CBS_get_u16_length_prefixed(&in, &srr) ||
+      !CBS_get_u16_length_prefixed(&in, &sig)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_ERROR);
+    return 0;
+  }
+
+  if (ctx->method->has_srr) {
+    if (ctx->srr_key == NULL) {
+      OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_NO_SRR_KEY_CONFIGURED);
+      return 0;
+    }
+
+    EVP_MD_CTX md_ctx;
+    EVP_MD_CTX_init(&md_ctx);
+    int sig_ok =
+        EVP_DigestVerifyInit(&md_ctx, NULL, NULL, NULL, ctx->srr_key) &&
+        EVP_DigestVerify(&md_ctx, CBS_data(&sig), CBS_len(&sig), CBS_data(&srr),
+                         CBS_len(&srr));
+    EVP_MD_CTX_cleanup(&md_ctx);
+
+    if (!sig_ok) {
+      OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_SRR_SIGNATURE_ERROR);
+      return 0;
+    }
+  }
+
+  uint8_t *srr_buf = NULL, *sig_buf = NULL;
+  size_t srr_len, sig_len;
+  if (!CBS_stow(&srr, &srr_buf, &srr_len) ||
+      !CBS_stow(&sig, &sig_buf, &sig_len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    OPENSSL_free(srr_buf);
+    OPENSSL_free(sig_buf);
+    return 0;
+  }
+
+  *out_rr = srr_buf;
+  *out_rr_len = srr_len;
+  *out_sig = sig_buf;
+  *out_sig_len = sig_len;
+  return 1;
+}
+
+TRUST_TOKEN_ISSUER *TRUST_TOKEN_ISSUER_new(const TRUST_TOKEN_METHOD *method,
+                                           size_t max_batchsize) {
+  if (max_batchsize > 0xffff) {
+    // The protocol supports only two-byte token counts.
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_OVERFLOW);
+    return NULL;
+  }
+
+  TRUST_TOKEN_ISSUER *ret = OPENSSL_malloc(sizeof(TRUST_TOKEN_ISSUER));
+  if (ret == NULL) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    return NULL;
+  }
+  OPENSSL_memset(ret, 0, sizeof(TRUST_TOKEN_ISSUER));
+  ret->method = method;
+  ret->max_batchsize = (uint16_t)max_batchsize;
+  return ret;
+}
+
+void TRUST_TOKEN_ISSUER_free(TRUST_TOKEN_ISSUER *ctx) {
+  if (ctx == NULL) {
+    return;
+  }
+  EVP_PKEY_free(ctx->srr_key);
+  OPENSSL_free(ctx->metadata_key);
+  OPENSSL_free(ctx);
+}
+
+int TRUST_TOKEN_ISSUER_add_key(TRUST_TOKEN_ISSUER *ctx, const uint8_t *key,
+                               size_t key_len) {
+  if (ctx->num_keys == OPENSSL_ARRAY_SIZE(ctx->keys) ||
+      ctx->num_keys >= ctx->method->max_keys) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_TOO_MANY_KEYS);
+    return 0;
+  }
+
+  struct trust_token_issuer_key_st *key_s = &ctx->keys[ctx->num_keys];
+  CBS cbs;
+  CBS_init(&cbs, key, key_len);
+  uint32_t key_id;
+  if (!CBS_get_u32(&cbs, &key_id) ||
+      !ctx->method->issuer_key_from_bytes(&key_s->key, CBS_data(&cbs),
+                                          CBS_len(&cbs))) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+    return 0;
+  }
+
+  key_s->id = key_id;
+  ctx->num_keys += 1;
+  return 1;
+}
+
+int TRUST_TOKEN_ISSUER_set_srr_key(TRUST_TOKEN_ISSUER *ctx, EVP_PKEY *key) {
+  EVP_PKEY_free(ctx->srr_key);
+  EVP_PKEY_up_ref(key);
+  ctx->srr_key = key;
+  return 1;
+}
+
+int TRUST_TOKEN_ISSUER_set_metadata_key(TRUST_TOKEN_ISSUER *ctx,
+                                        const uint8_t *key, size_t len) {
+  if (len < 32) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_INVALID_METADATA_KEY);
+  }
+  OPENSSL_free(ctx->metadata_key);
+  ctx->metadata_key_len = 0;
+  ctx->metadata_key = OPENSSL_memdup(key, len);
+  if (ctx->metadata_key == NULL) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    return 0;
+  }
+  ctx->metadata_key_len = len;
+  return 1;
+}
+
+static const struct trust_token_issuer_key_st *trust_token_issuer_get_key(
+    const TRUST_TOKEN_ISSUER *ctx, uint32_t key_id) {
+  for (size_t i = 0; i < ctx->num_keys; i++) {
+    if (ctx->keys[i].id == key_id) {
+      return &ctx->keys[i];
+    }
+  }
+  return NULL;
+}
+
+int TRUST_TOKEN_ISSUER_issue(const TRUST_TOKEN_ISSUER *ctx, uint8_t **out,
+                             size_t *out_len, size_t *out_tokens_issued,
+                             const uint8_t *request, size_t request_len,
+                             uint32_t public_metadata, uint8_t private_metadata,
+                             size_t max_issuance) {
+  if (max_issuance > ctx->max_batchsize) {
+    max_issuance = ctx->max_batchsize;
+  }
+
+  const struct trust_token_issuer_key_st *key =
+      trust_token_issuer_get_key(ctx, public_metadata);
+  if (key == NULL || private_metadata > 1 ||
+      (!ctx->method->has_private_metadata && private_metadata != 0)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_INVALID_METADATA);
+    return 0;
+  }
+
+  CBS in;
+  uint16_t num_requested;
+  CBS_init(&in, request, request_len);
+  if (!CBS_get_u16(&in, &num_requested)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+    return 0;
+  }
+
+  size_t num_to_issue = num_requested;
+  if (num_to_issue > max_issuance) {
+    num_to_issue = max_issuance;
+  }
+
+  int ret = 0;
+  CBB response;
+  if (!CBB_init(&response, 0) ||
+      !CBB_add_u16(&response, num_to_issue) ||
+      !CBB_add_u32(&response, public_metadata)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  if (!ctx->method->sign(&key->key, &response, &in, num_requested, num_to_issue,
+                         private_metadata)) {
+    goto err;
+  }
+
+  if (CBS_len(&in) != 0) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+    goto err;
+  }
+
+  if (!CBB_finish(&response, out, out_len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  *out_tokens_issued = num_to_issue;
+  ret = 1;
+
+err:
+  CBB_cleanup(&response);
+  return ret;
+}
+
+// https://tools.ietf.org/html/rfc7049#section-2.1
+static int add_cbor_int_with_type(CBB *cbb, uint8_t major_type,
+                                  uint64_t value) {
+  if (value <= 23) {
+    return CBB_add_u8(cbb, value | major_type);
+  }
+  if (value <= 0xff) {
+    return CBB_add_u8(cbb, 0x18 | major_type) && CBB_add_u8(cbb, value);
+  }
+  if (value <= 0xffff) {
+    return CBB_add_u8(cbb, 0x19 | major_type) && CBB_add_u16(cbb, value);
+  }
+  if (value <= 0xffffffff) {
+    return CBB_add_u8(cbb, 0x1a | major_type) && CBB_add_u32(cbb, value);
+  }
+  if (value <= 0xffffffffffffffff) {
+    return CBB_add_u8(cbb, 0x1b | major_type) && CBB_add_u64(cbb, value);
+  }
+
+  return 0;
+}
+
+// https://tools.ietf.org/html/rfc7049#section-2.1
+static int add_cbor_int(CBB *cbb, uint64_t value) {
+  return add_cbor_int_with_type(cbb, 0, value);
+}
+
+// https://tools.ietf.org/html/rfc7049#section-2.1
+static int add_cbor_bytes(CBB *cbb, const uint8_t *data, size_t len) {
+  return add_cbor_int_with_type(cbb, 0x40, len) &&
+         CBB_add_bytes(cbb, data, len);
+}
+
+// https://tools.ietf.org/html/rfc7049#section-2.1
+static int add_cbor_text(CBB *cbb, const char *data, size_t len) {
+  return add_cbor_int_with_type(cbb, 0x60, len) &&
+         CBB_add_bytes(cbb, (const uint8_t *)data, len);
+}
+
+// https://tools.ietf.org/html/rfc7049#section-2.1
+static int add_cbor_map(CBB *cbb, uint8_t size) {
+  return add_cbor_int_with_type(cbb, 0xa0, size);
+}
+
+static uint8_t get_metadata_obfuscator(const uint8_t *key, size_t key_len,
+                                       const uint8_t *client_data,
+                                       size_t client_data_len) {
+  uint8_t metadata_obfuscator[SHA256_DIGEST_LENGTH];
+  SHA256_CTX sha_ctx;
+  SHA256_Init(&sha_ctx);
+  SHA256_Update(&sha_ctx, key, key_len);
+  SHA256_Update(&sha_ctx, client_data, client_data_len);
+  SHA256_Final(metadata_obfuscator, &sha_ctx);
+  return metadata_obfuscator[0] >> 7;
+}
+
+int TRUST_TOKEN_ISSUER_redeem(const TRUST_TOKEN_ISSUER *ctx, uint8_t **out,
+                              size_t *out_len, TRUST_TOKEN **out_token,
+                              uint8_t **out_client_data,
+                              size_t *out_client_data_len,
+                              uint64_t *out_redemption_time,
+                              const uint8_t *request, size_t request_len,
+                              uint64_t lifetime) {
+  CBS request_cbs, token_cbs;
+  CBS_init(&request_cbs, request, request_len);
+  if (!CBS_get_u16_length_prefixed(&request_cbs, &token_cbs)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_ERROR);
+    return 0;
+  }
+
+  uint32_t public_metadata = 0;
+  uint8_t private_metadata = 0;
+
+  CBS token_copy = token_cbs;
+
+  // Parse the token. If there is an error, treat it as an invalid token.
+  if (!CBS_get_u32(&token_cbs, &public_metadata)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_INVALID_TOKEN);
+    return 0;
+  }
+
+  const struct trust_token_issuer_key_st *key =
+      trust_token_issuer_get_key(ctx, public_metadata);
+  uint8_t nonce[PMBTOKEN_NONCE_SIZE];
+  if (key == NULL ||
+      !ctx->method->read(&key->key, nonce, &private_metadata,
+                         CBS_data(&token_cbs), CBS_len(&token_cbs))) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_INVALID_TOKEN);
+    return 0;
+  }
+
+  int ok = 0;
+  CBB response, srr;
+  uint8_t *srr_buf = NULL, *sig_buf = NULL, *client_data_buf = NULL;
+  size_t srr_len = 0, sig_len = 0, client_data_len = 0;
+  EVP_MD_CTX md_ctx;
+  EVP_MD_CTX_init(&md_ctx);
+  CBB_zero(&srr);
+  if (!CBB_init(&response, 0)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  CBS client_data;
+  uint64_t redemption_time;
+  if (!CBS_get_u16_length_prefixed(&request_cbs, &client_data) ||
+      !CBS_get_u64(&request_cbs, &redemption_time)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_ERROR);
+    goto err;
+  }
+
+  const uint8_t kTokenHashDSTLabel[] = "TrustTokenV0 TokenHash";
+  uint8_t token_hash[SHA256_DIGEST_LENGTH];
+  SHA256_CTX sha_ctx;
+  SHA256_Init(&sha_ctx);
+  SHA256_Update(&sha_ctx, kTokenHashDSTLabel, sizeof(kTokenHashDSTLabel));
+  SHA256_Update(&sha_ctx, CBS_data(&token_copy), CBS_len(&token_copy));
+  SHA256_Final(token_hash, &sha_ctx);
+
+  uint8_t metadata_obfuscator = get_metadata_obfuscator(
+      ctx->metadata_key, ctx->metadata_key_len, token_hash, sizeof(token_hash));
+
+  // The SRR is constructed as per the format described in
+  // https://docs.google.com/document/d/1TNnya6B8pyomDK2F1R9CL3dY10OAmqWlnCxsWyOBDVQ/edit#heading=h.7mkzvhpqb8l5
+
+  static const char kClientDataLabel[] = "client-data";
+  static const char kExpiryTimestampLabel[] = "expiry-timestamp";
+  static const char kMetadataLabel[] = "metadata";
+  static const char kPrivateLabel[] = "private";
+  static const char kPublicLabel[] = "public";
+  static const char kTokenHashLabel[] = "token-hash";
+
+  // CBOR requires map keys to be sorted by length then sorted lexically.
+  // https://tools.ietf.org/html/rfc7049#section-3.9
+  assert(strlen(kMetadataLabel) < strlen(kTokenHashLabel));
+  assert(strlen(kTokenHashLabel) < strlen(kClientDataLabel));
+  assert(strlen(kClientDataLabel) < strlen(kExpiryTimestampLabel));
+  assert(strlen(kPublicLabel) < strlen(kPrivateLabel));
+
+  size_t map_entries = 4;
+
+  if (!CBB_init(&srr, 0) ||
+      !add_cbor_map(&srr, map_entries) ||  // SRR map
+      !add_cbor_text(&srr, kMetadataLabel, strlen(kMetadataLabel)) ||
+      !add_cbor_map(&srr, 2) ||  // Metadata map
+      !add_cbor_text(&srr, kPublicLabel, strlen(kPublicLabel)) ||
+      !add_cbor_int(&srr, public_metadata) ||
+      !add_cbor_text(&srr, kPrivateLabel, strlen(kPrivateLabel)) ||
+      !add_cbor_int(&srr, private_metadata ^ metadata_obfuscator) ||
+      !add_cbor_text(&srr, kTokenHashLabel, strlen(kTokenHashLabel)) ||
+      !add_cbor_bytes(&srr, token_hash, sizeof(token_hash)) ||
+      !add_cbor_text(&srr, kClientDataLabel, strlen(kClientDataLabel)) ||
+      !CBB_add_bytes(&srr, CBS_data(&client_data), CBS_len(&client_data)) ||
+      !add_cbor_text(&srr, kExpiryTimestampLabel,
+                     strlen(kExpiryTimestampLabel)) ||
+      !add_cbor_int(&srr, redemption_time + lifetime) ||
+      !CBB_finish(&srr, &srr_buf, &srr_len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  if (!EVP_DigestSignInit(&md_ctx, NULL, NULL, NULL, ctx->srr_key) ||
+      !EVP_DigestSign(&md_ctx, NULL, &sig_len, srr_buf, srr_len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_SRR_SIGNATURE_ERROR);
+    goto err;
+  }
+
+  CBB child;
+  uint8_t *ptr;
+  if (!CBB_add_u16_length_prefixed(&response, &child) ||
+      !CBB_add_bytes(&child, srr_buf, srr_len) ||
+      !CBB_add_u16_length_prefixed(&response, &child) ||
+      !CBB_reserve(&child, &ptr, sig_len) ||
+      !EVP_DigestSign(&md_ctx, ptr, &sig_len, srr_buf, srr_len) ||
+      !CBB_did_write(&child, sig_len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  if (!CBS_stow(&client_data, &client_data_buf, &client_data_len) ||
+      !CBB_finish(&response, out, out_len)) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+
+  TRUST_TOKEN *token = TRUST_TOKEN_new(nonce, PMBTOKEN_NONCE_SIZE);
+  if (token == NULL) {
+    OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+    goto err;
+  }
+  *out_token = token;
+  *out_client_data = client_data_buf;
+  *out_client_data_len = client_data_len;
+  *out_redemption_time = redemption_time;
+
+  ok = 1;
+
+err:
+  CBB_cleanup(&response);
+  CBB_cleanup(&srr);
+  OPENSSL_free(srr_buf);
+  OPENSSL_free(sig_buf);
+  EVP_MD_CTX_cleanup(&md_ctx);
+  if (!ok) {
+    OPENSSL_free(client_data_buf);
+  }
+  return ok;
+}
+
+int TRUST_TOKEN_decode_private_metadata(const TRUST_TOKEN_METHOD *method,
+                                        uint8_t *out_value, const uint8_t *key,
+                                        size_t key_len, const uint8_t *nonce,
+                                        size_t nonce_len,
+                                        uint8_t encrypted_bit) {
+  uint8_t metadata_obfuscator =
+      get_metadata_obfuscator(key, key_len, nonce, nonce_len);
+  *out_value = encrypted_bit ^ metadata_obfuscator;
+  return 1;
+}
diff --git a/src/crypto/trust_token/trust_token_test.cc b/src/crypto/trust_token/trust_token_test.cc
new file mode 100644
index 0000000..b282500
--- /dev/null
+++ b/src/crypto/trust_token/trust_token_test.cc
@@ -0,0 +1,781 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+#include <algorithm>
+#include <limits>
+#include <string>
+#include <tuple>
+#include <utility>
+#include <vector>
+
+#include <gtest/gtest.h>
+
+#include <openssl/bytestring.h>
+#include <openssl/curve25519.h>
+#include <openssl/evp.h>
+#include <openssl/mem.h>
+#include <openssl/rand.h>
+#include <openssl/sha.h>
+#include <openssl/trust_token.h>
+
+#include "../ec_extra/internal.h"
+#include "../fipsmodule/ec/internal.h"
+#include "../internal.h"
+#include "../test/test_util.h"
+#include "internal.h"
+
+
+BSSL_NAMESPACE_BEGIN
+
+namespace {
+
+TEST(TrustTokenTest, KeyGenExp1) {
+  uint8_t priv_key[TRUST_TOKEN_MAX_PRIVATE_KEY_SIZE];
+  uint8_t pub_key[TRUST_TOKEN_MAX_PUBLIC_KEY_SIZE];
+  size_t priv_key_len, pub_key_len;
+  ASSERT_TRUE(TRUST_TOKEN_generate_key(
+      TRUST_TOKEN_experiment_v1(), priv_key, &priv_key_len,
+      TRUST_TOKEN_MAX_PRIVATE_KEY_SIZE, pub_key, &pub_key_len,
+      TRUST_TOKEN_MAX_PUBLIC_KEY_SIZE, 0x0001));
+  ASSERT_EQ(292u, priv_key_len);
+  ASSERT_EQ(301u, pub_key_len);
+}
+
+TEST(TrustTokenTest, KeyGenExp2PP) {
+  uint8_t priv_key[TRUST_TOKEN_MAX_PRIVATE_KEY_SIZE];
+  uint8_t pub_key[TRUST_TOKEN_MAX_PUBLIC_KEY_SIZE];
+  size_t priv_key_len, pub_key_len;
+  ASSERT_TRUE(TRUST_TOKEN_generate_key(
+      TRUST_TOKEN_experiment_v2_pp(), priv_key, &priv_key_len,
+      TRUST_TOKEN_MAX_PRIVATE_KEY_SIZE, pub_key, &pub_key_len,
+      TRUST_TOKEN_MAX_PUBLIC_KEY_SIZE, 0x0001));
+  ASSERT_EQ(292u, priv_key_len);
+  ASSERT_EQ(295u, pub_key_len);
+}
+
+TEST(TrustTokenTest, KeyGenExp2PMB) {
+  uint8_t priv_key[TRUST_TOKEN_MAX_PRIVATE_KEY_SIZE];
+  uint8_t pub_key[TRUST_TOKEN_MAX_PUBLIC_KEY_SIZE];
+  size_t priv_key_len, pub_key_len;
+  ASSERT_TRUE(TRUST_TOKEN_generate_key(
+      TRUST_TOKEN_experiment_v2_pmb(), priv_key, &priv_key_len,
+      TRUST_TOKEN_MAX_PRIVATE_KEY_SIZE, pub_key, &pub_key_len,
+      TRUST_TOKEN_MAX_PUBLIC_KEY_SIZE, 0x0001));
+  ASSERT_EQ(292u, priv_key_len);
+  ASSERT_EQ(295u, pub_key_len);
+}
+
+// Test that H in |TRUST_TOKEN_experiment_v1| was computed correctly.
+TEST(TrustTokenTest, HExp1) {
+  const EC_GROUP *group = EC_GROUP_new_by_curve_name(NID_secp384r1);
+  ASSERT_TRUE(group);
+
+  const uint8_t kHGen[] = "generator";
+  const uint8_t kHLabel[] = "PMBTokens Experiment V1 HashH";
+
+  bssl::UniquePtr<EC_POINT> expected_h(EC_POINT_new(group));
+  ASSERT_TRUE(expected_h);
+  ASSERT_TRUE(ec_hash_to_curve_p384_xmd_sha512_sswu_draft07(
+      group, &expected_h->raw, kHLabel, sizeof(kHLabel), kHGen, sizeof(kHGen)));
+  uint8_t expected_bytes[1 + 2 * EC_MAX_BYTES];
+  size_t expected_len =
+      EC_POINT_point2oct(group, expected_h.get(), POINT_CONVERSION_UNCOMPRESSED,
+                         expected_bytes, sizeof(expected_bytes), nullptr);
+
+  uint8_t h[97];
+  ASSERT_TRUE(pmbtoken_exp1_get_h_for_testing(h));
+  EXPECT_EQ(Bytes(h), Bytes(expected_bytes, expected_len));
+}
+
+// Test that H in |TRUST_TOKEN_experiment_v2_pmb| was computed correctly.
+TEST(TrustTokenTest, HExp2) {
+  const EC_GROUP *group = EC_GROUP_new_by_curve_name(NID_secp384r1);
+  ASSERT_TRUE(group);
+
+  const uint8_t kHGen[] = "generator";
+  const uint8_t kHLabel[] = "PMBTokens Experiment V2 HashH";
+
+  bssl::UniquePtr<EC_POINT> expected_h(EC_POINT_new(group));
+  ASSERT_TRUE(expected_h);
+  ASSERT_TRUE(ec_hash_to_curve_p384_xmd_sha512_sswu_draft07(
+      group, &expected_h->raw, kHLabel, sizeof(kHLabel), kHGen, sizeof(kHGen)));
+  uint8_t expected_bytes[1 + 2 * EC_MAX_BYTES];
+  size_t expected_len =
+      EC_POINT_point2oct(group, expected_h.get(), POINT_CONVERSION_UNCOMPRESSED,
+                         expected_bytes, sizeof(expected_bytes), nullptr);
+
+  uint8_t h[97];
+  ASSERT_TRUE(pmbtoken_exp2_get_h_for_testing(h));
+  EXPECT_EQ(Bytes(h), Bytes(expected_bytes, expected_len));
+}
+
+static std::vector<const TRUST_TOKEN_METHOD *> AllMethods() {
+  return {
+    TRUST_TOKEN_experiment_v1(),
+    TRUST_TOKEN_experiment_v2_pp(),
+    TRUST_TOKEN_experiment_v2_pmb()
+  };
+}
+
+class TrustTokenProtocolTestBase : public ::testing::Test {
+ public:
+  explicit TrustTokenProtocolTestBase(const TRUST_TOKEN_METHOD *method)
+      : method_(method) {}
+
+  // KeyID returns the key ID associated with key index |i|.
+  static uint32_t KeyID(size_t i) {
+    // Use a different value from the indices to that we do not mix them up.
+    return 7 + i;
+  }
+
+  const TRUST_TOKEN_METHOD *method() { return method_; }
+
+ protected:
+  void SetupContexts() {
+    client.reset(TRUST_TOKEN_CLIENT_new(method(), client_max_batchsize));
+    ASSERT_TRUE(client);
+    issuer.reset(TRUST_TOKEN_ISSUER_new(method(), issuer_max_batchsize));
+    ASSERT_TRUE(issuer);
+
+    for (size_t i = 0; i < method()->max_keys; i++) {
+      uint8_t priv_key[TRUST_TOKEN_MAX_PRIVATE_KEY_SIZE];
+      uint8_t pub_key[TRUST_TOKEN_MAX_PUBLIC_KEY_SIZE];
+      size_t priv_key_len, pub_key_len, key_index;
+      ASSERT_TRUE(TRUST_TOKEN_generate_key(
+          method(), priv_key, &priv_key_len, TRUST_TOKEN_MAX_PRIVATE_KEY_SIZE,
+          pub_key, &pub_key_len, TRUST_TOKEN_MAX_PUBLIC_KEY_SIZE, KeyID(i)));
+      ASSERT_TRUE(TRUST_TOKEN_CLIENT_add_key(client.get(), &key_index, pub_key,
+                                             pub_key_len));
+      ASSERT_EQ(i, key_index);
+      ASSERT_TRUE(
+          TRUST_TOKEN_ISSUER_add_key(issuer.get(), priv_key, priv_key_len));
+    }
+
+    uint8_t public_key[32], private_key[64];
+    ED25519_keypair(public_key, private_key);
+    bssl::UniquePtr<EVP_PKEY> priv(EVP_PKEY_new_raw_private_key(
+        EVP_PKEY_ED25519, nullptr, private_key, 32));
+    ASSERT_TRUE(priv);
+    bssl::UniquePtr<EVP_PKEY> pub(
+        EVP_PKEY_new_raw_public_key(EVP_PKEY_ED25519, nullptr, public_key, 32));
+    ASSERT_TRUE(pub);
+
+    TRUST_TOKEN_CLIENT_set_srr_key(client.get(), pub.get());
+    TRUST_TOKEN_ISSUER_set_srr_key(issuer.get(), priv.get());
+    RAND_bytes(metadata_key, sizeof(metadata_key));
+    ASSERT_TRUE(TRUST_TOKEN_ISSUER_set_metadata_key(issuer.get(), metadata_key,
+                                                    sizeof(metadata_key)));
+  }
+
+  const TRUST_TOKEN_METHOD *method_;
+  uint16_t client_max_batchsize = 10;
+  uint16_t issuer_max_batchsize = 10;
+  bssl::UniquePtr<TRUST_TOKEN_CLIENT> client;
+  bssl::UniquePtr<TRUST_TOKEN_ISSUER> issuer;
+  uint8_t metadata_key[32];
+};
+
+class TrustTokenProtocolTest
+    : public TrustTokenProtocolTestBase,
+      public testing::WithParamInterface<const TRUST_TOKEN_METHOD *> {
+ public:
+  TrustTokenProtocolTest() : TrustTokenProtocolTestBase(GetParam()) {}
+};
+
+INSTANTIATE_TEST_SUITE_P(TrustTokenAllProtocolTest, TrustTokenProtocolTest,
+                         testing::ValuesIn(AllMethods()));
+
+TEST_P(TrustTokenProtocolTest, InvalidToken) {
+  ASSERT_NO_FATAL_FAILURE(SetupContexts());
+
+  uint8_t *issue_msg = NULL, *issue_resp = NULL;
+  size_t msg_len, resp_len;
+
+  size_t key_index;
+  size_t tokens_issued;
+  ASSERT_TRUE(
+      TRUST_TOKEN_CLIENT_begin_issuance(client.get(), &issue_msg, &msg_len, 1));
+  bssl::UniquePtr<uint8_t> free_issue_msg(issue_msg);
+  ASSERT_TRUE(TRUST_TOKEN_ISSUER_issue(
+      issuer.get(), &issue_resp, &resp_len, &tokens_issued, issue_msg, msg_len,
+      /*public_metadata=*/KeyID(0), /*private_metadata=*/0,
+      /*max_issuance=*/10));
+  bssl::UniquePtr<uint8_t> free_msg(issue_resp);
+  bssl::UniquePtr<STACK_OF(TRUST_TOKEN)> tokens(
+      TRUST_TOKEN_CLIENT_finish_issuance(client.get(), &key_index, issue_resp,
+                                         resp_len));
+  ASSERT_TRUE(tokens);
+
+  for (TRUST_TOKEN *token : tokens.get()) {
+    // Corrupt the token.
+    token->data[0] ^= 0x42;
+
+    uint8_t *redeem_msg = NULL, *redeem_resp = NULL;
+    ASSERT_TRUE(TRUST_TOKEN_CLIENT_begin_redemption(
+        client.get(), &redeem_msg, &msg_len, token, NULL, 0, 0));
+    bssl::UniquePtr<uint8_t> free_redeem_msg(redeem_msg);
+    TRUST_TOKEN *rtoken;
+    uint8_t *client_data;
+    size_t client_data_len;
+    uint64_t redemption_time;
+    ASSERT_FALSE(TRUST_TOKEN_ISSUER_redeem(
+        issuer.get(), &redeem_resp, &resp_len, &rtoken, &client_data,
+        &client_data_len, &redemption_time, redeem_msg, msg_len, 600));
+    bssl::UniquePtr<uint8_t> free_redeem_resp(redeem_resp);
+  }
+}
+
+TEST_P(TrustTokenProtocolTest, TruncatedIssuanceRequest) {
+  ASSERT_NO_FATAL_FAILURE(SetupContexts());
+
+  uint8_t *issue_msg = NULL, *issue_resp = NULL;
+  size_t msg_len, resp_len;
+  ASSERT_TRUE(TRUST_TOKEN_CLIENT_begin_issuance(client.get(), &issue_msg,
+                                                &msg_len, 10));
+  bssl::UniquePtr<uint8_t> free_issue_msg(issue_msg);
+  msg_len = 10;
+  size_t tokens_issued;
+  ASSERT_FALSE(TRUST_TOKEN_ISSUER_issue(
+      issuer.get(), &issue_resp, &resp_len, &tokens_issued, issue_msg, msg_len,
+      /*public_metadata=*/KeyID(0), /*private_metadata=*/0,
+      /*max_issuance=*/10));
+  bssl::UniquePtr<uint8_t> free_msg(issue_resp);
+}
+
+TEST_P(TrustTokenProtocolTest, TruncatedIssuanceResponse) {
+  ASSERT_NO_FATAL_FAILURE(SetupContexts());
+
+  uint8_t *issue_msg = NULL, *issue_resp = NULL;
+  size_t msg_len, resp_len;
+  ASSERT_TRUE(TRUST_TOKEN_CLIENT_begin_issuance(client.get(), &issue_msg,
+                                                &msg_len, 10));
+  bssl::UniquePtr<uint8_t> free_issue_msg(issue_msg);
+  size_t tokens_issued;
+  ASSERT_TRUE(TRUST_TOKEN_ISSUER_issue(
+      issuer.get(), &issue_resp, &resp_len, &tokens_issued, issue_msg, msg_len,
+      /*public_metadata=*/KeyID(0), /*private_metadata=*/0,
+      /*max_issuance=*/10));
+  bssl::UniquePtr<uint8_t> free_msg(issue_resp);
+  resp_len = 10;
+  size_t key_index;
+  bssl::UniquePtr<STACK_OF(TRUST_TOKEN)> tokens(
+      TRUST_TOKEN_CLIENT_finish_issuance(client.get(), &key_index, issue_resp,
+                                         resp_len));
+  ASSERT_FALSE(tokens);
+}
+
+TEST_P(TrustTokenProtocolTest, ExtraDataIssuanceResponse) {
+  ASSERT_NO_FATAL_FAILURE(SetupContexts());
+
+  uint8_t *request = NULL, *response = NULL;
+  size_t request_len, response_len;
+  ASSERT_TRUE(TRUST_TOKEN_CLIENT_begin_issuance(client.get(), &request,
+                                                &request_len, 10));
+  bssl::UniquePtr<uint8_t> free_request(request);
+  size_t tokens_issued;
+  ASSERT_TRUE(TRUST_TOKEN_ISSUER_issue(issuer.get(), &response, &response_len,
+                                       &tokens_issued, request, request_len,
+                                       /*public_metadata=*/KeyID(0),
+                                       /*private_metadata=*/0,
+                                       /*max_issuance=*/10));
+  bssl::UniquePtr<uint8_t> free_response(response);
+  std::vector<uint8_t> response2(response, response + response_len);
+  response2.push_back(0);
+  size_t key_index;
+  bssl::UniquePtr<STACK_OF(TRUST_TOKEN)> tokens(
+      TRUST_TOKEN_CLIENT_finish_issuance(client.get(), &key_index,
+                                         response2.data(), response2.size()));
+  ASSERT_FALSE(tokens);
+}
+
+TEST_P(TrustTokenProtocolTest, TruncatedRedemptionRequest) {
+  ASSERT_NO_FATAL_FAILURE(SetupContexts());
+
+  uint8_t *issue_msg = NULL, *issue_resp = NULL;
+  size_t msg_len, resp_len;
+  ASSERT_TRUE(TRUST_TOKEN_CLIENT_begin_issuance(client.get(), &issue_msg,
+                                                &msg_len, 10));
+  bssl::UniquePtr<uint8_t> free_issue_msg(issue_msg);
+  size_t tokens_issued;
+  ASSERT_TRUE(TRUST_TOKEN_ISSUER_issue(
+      issuer.get(), &issue_resp, &resp_len, &tokens_issued, issue_msg, msg_len,
+      /*public_metadata=*/KeyID(0), /*private_metadata=*/0,
+      /*max_issuance=*/10));
+  bssl::UniquePtr<uint8_t> free_msg(issue_resp);
+  size_t key_index;
+  bssl::UniquePtr<STACK_OF(TRUST_TOKEN)> tokens(
+      TRUST_TOKEN_CLIENT_finish_issuance(client.get(), &key_index, issue_resp,
+                                         resp_len));
+  ASSERT_TRUE(tokens);
+
+  for (TRUST_TOKEN *token : tokens.get()) {
+    const uint8_t kClientData[] = "\x70TEST CLIENT DATA";
+    uint64_t kRedemptionTime = 13374242;
+
+    uint8_t *redeem_msg = NULL, *redeem_resp = NULL;
+    ASSERT_TRUE(TRUST_TOKEN_CLIENT_begin_redemption(
+        client.get(), &redeem_msg, &msg_len, token, kClientData,
+        sizeof(kClientData) - 1, kRedemptionTime));
+    bssl::UniquePtr<uint8_t> free_redeem_msg(redeem_msg);
+    msg_len = 10;
+
+    TRUST_TOKEN *rtoken;
+    uint8_t *client_data;
+    size_t client_data_len;
+    uint64_t redemption_time;
+    ASSERT_FALSE(TRUST_TOKEN_ISSUER_redeem(
+        issuer.get(), &redeem_resp, &resp_len, &rtoken, &client_data,
+        &client_data_len, &redemption_time, redeem_msg, msg_len, 600));
+  }
+}
+
+TEST_P(TrustTokenProtocolTest, TruncatedRedemptionResponse) {
+  ASSERT_NO_FATAL_FAILURE(SetupContexts());
+
+  uint8_t *issue_msg = NULL, *issue_resp = NULL;
+  size_t msg_len, resp_len;
+  ASSERT_TRUE(TRUST_TOKEN_CLIENT_begin_issuance(client.get(), &issue_msg,
+                                                &msg_len, 10));
+  bssl::UniquePtr<uint8_t> free_issue_msg(issue_msg);
+  size_t tokens_issued;
+  ASSERT_TRUE(TRUST_TOKEN_ISSUER_issue(
+      issuer.get(), &issue_resp, &resp_len, &tokens_issued, issue_msg, msg_len,
+      /*public_metadata=*/KeyID(0), /*private_metadata=*/0,
+      /*max_issuance=*/10));
+  bssl::UniquePtr<uint8_t> free_msg(issue_resp);
+  size_t key_index;
+  bssl::UniquePtr<STACK_OF(TRUST_TOKEN)> tokens(
+      TRUST_TOKEN_CLIENT_finish_issuance(client.get(), &key_index, issue_resp,
+                                         resp_len));
+  ASSERT_TRUE(tokens);
+
+  for (TRUST_TOKEN *token : tokens.get()) {
+    const uint8_t kClientData[] = "\x70TEST CLIENT DATA";
+    uint64_t kRedemptionTime = 13374242;
+
+    uint8_t *redeem_msg = NULL, *redeem_resp = NULL;
+    ASSERT_TRUE(TRUST_TOKEN_CLIENT_begin_redemption(
+        client.get(), &redeem_msg, &msg_len, token, kClientData,
+        sizeof(kClientData) - 1, kRedemptionTime));
+    bssl::UniquePtr<uint8_t> free_redeem_msg(redeem_msg);
+    TRUST_TOKEN *rtoken;
+    uint8_t *client_data;
+    size_t client_data_len;
+    uint64_t redemption_time;
+    ASSERT_TRUE(TRUST_TOKEN_ISSUER_redeem(
+        issuer.get(), &redeem_resp, &resp_len, &rtoken, &client_data,
+        &client_data_len, &redemption_time, redeem_msg, msg_len, 600));
+    bssl::UniquePtr<uint8_t> free_redeem_resp(redeem_resp);
+    bssl::UniquePtr<uint8_t> free_client_data(client_data);
+    bssl::UniquePtr<TRUST_TOKEN> free_rtoken(rtoken);
+
+    ASSERT_EQ(redemption_time, kRedemptionTime);
+    ASSERT_EQ(Bytes(kClientData, sizeof(kClientData) - 1),
+              Bytes(client_data, client_data_len));
+    resp_len = 10;
+
+    uint8_t *srr = NULL, *sig = NULL;
+    size_t srr_len, sig_len;
+    ASSERT_FALSE(TRUST_TOKEN_CLIENT_finish_redemption(
+        client.get(), &srr, &srr_len, &sig, &sig_len, redeem_resp, resp_len));
+    bssl::UniquePtr<uint8_t> free_srr(srr);
+    bssl::UniquePtr<uint8_t> free_sig(sig);
+  }
+}
+
+TEST_P(TrustTokenProtocolTest, IssuedWithBadKeyID) {
+  client.reset(TRUST_TOKEN_CLIENT_new(method(), client_max_batchsize));
+  ASSERT_TRUE(client);
+  issuer.reset(TRUST_TOKEN_ISSUER_new(method(), issuer_max_batchsize));
+  ASSERT_TRUE(issuer);
+
+  // We configure the client and the issuer with different key IDs and test
+  // that the client notices.
+  const uint32_t kClientKeyID = 0;
+  const uint32_t kIssuerKeyID = 42;
+
+  uint8_t priv_key[TRUST_TOKEN_MAX_PRIVATE_KEY_SIZE];
+  uint8_t pub_key[TRUST_TOKEN_MAX_PUBLIC_KEY_SIZE];
+  size_t priv_key_len, pub_key_len, key_index;
+  ASSERT_TRUE(TRUST_TOKEN_generate_key(
+      method(), priv_key, &priv_key_len, TRUST_TOKEN_MAX_PRIVATE_KEY_SIZE,
+      pub_key, &pub_key_len, TRUST_TOKEN_MAX_PUBLIC_KEY_SIZE, kClientKeyID));
+  ASSERT_TRUE(TRUST_TOKEN_CLIENT_add_key(client.get(), &key_index, pub_key,
+                                         pub_key_len));
+  ASSERT_EQ(0UL, key_index);
+
+  ASSERT_TRUE(TRUST_TOKEN_generate_key(
+      method(), priv_key, &priv_key_len, TRUST_TOKEN_MAX_PRIVATE_KEY_SIZE,
+      pub_key, &pub_key_len, TRUST_TOKEN_MAX_PUBLIC_KEY_SIZE, kIssuerKeyID));
+  ASSERT_TRUE(TRUST_TOKEN_ISSUER_add_key(issuer.get(), priv_key, priv_key_len));
+
+
+  uint8_t public_key[32], private_key[64];
+  ED25519_keypair(public_key, private_key);
+  bssl::UniquePtr<EVP_PKEY> priv(
+      EVP_PKEY_new_raw_private_key(EVP_PKEY_ED25519, nullptr, private_key, 32));
+  ASSERT_TRUE(priv);
+  bssl::UniquePtr<EVP_PKEY> pub(
+      EVP_PKEY_new_raw_public_key(EVP_PKEY_ED25519, nullptr, public_key, 32));
+  ASSERT_TRUE(pub);
+
+  TRUST_TOKEN_CLIENT_set_srr_key(client.get(), pub.get());
+  TRUST_TOKEN_ISSUER_set_srr_key(issuer.get(), priv.get());
+  RAND_bytes(metadata_key, sizeof(metadata_key));
+  ASSERT_TRUE(TRUST_TOKEN_ISSUER_set_metadata_key(issuer.get(), metadata_key,
+                                                  sizeof(metadata_key)));
+
+
+  uint8_t *issue_msg = NULL, *issue_resp = NULL;
+  size_t msg_len, resp_len;
+  ASSERT_TRUE(TRUST_TOKEN_CLIENT_begin_issuance(client.get(), &issue_msg,
+                                                &msg_len, 10));
+  bssl::UniquePtr<uint8_t> free_issue_msg(issue_msg);
+  size_t tokens_issued;
+  ASSERT_TRUE(TRUST_TOKEN_ISSUER_issue(
+      issuer.get(), &issue_resp, &resp_len, &tokens_issued, issue_msg, msg_len,
+      /*public_metadata=*/42, /*private_metadata=*/0, /*max_issuance=*/10));
+  bssl::UniquePtr<uint8_t> free_msg(issue_resp);
+  bssl::UniquePtr<STACK_OF(TRUST_TOKEN)> tokens(
+      TRUST_TOKEN_CLIENT_finish_issuance(client.get(), &key_index, issue_resp,
+                                         resp_len));
+  ASSERT_FALSE(tokens);
+}
+
+class TrustTokenMetadataTest
+    : public TrustTokenProtocolTestBase,
+      public testing::WithParamInterface<
+          std::tuple<const TRUST_TOKEN_METHOD *, int, bool>> {
+ public:
+  TrustTokenMetadataTest()
+      : TrustTokenProtocolTestBase(std::get<0>(GetParam())) {}
+
+  int public_metadata() { return std::get<1>(GetParam()); }
+  bool private_metadata() { return std::get<2>(GetParam()); }
+};
+
+TEST_P(TrustTokenMetadataTest, SetAndGetMetadata) {
+  ASSERT_NO_FATAL_FAILURE(SetupContexts());
+
+  uint8_t *issue_msg = NULL, *issue_resp = NULL;
+  size_t msg_len, resp_len;
+  ASSERT_TRUE(TRUST_TOKEN_CLIENT_begin_issuance(client.get(), &issue_msg,
+                                                &msg_len, 10));
+  bssl::UniquePtr<uint8_t> free_issue_msg(issue_msg);
+  size_t tokens_issued;
+  bool result = TRUST_TOKEN_ISSUER_issue(
+      issuer.get(), &issue_resp, &resp_len, &tokens_issued, issue_msg, msg_len,
+      public_metadata(), private_metadata(), /*max_issuance=*/1);
+  if (!method()->has_private_metadata && private_metadata()) {
+    ASSERT_FALSE(result);
+    return;
+  }
+  ASSERT_TRUE(result);
+  bssl::UniquePtr<uint8_t> free_msg(issue_resp);
+  size_t key_index;
+  bssl::UniquePtr<STACK_OF(TRUST_TOKEN)> tokens(
+      TRUST_TOKEN_CLIENT_finish_issuance(client.get(), &key_index, issue_resp,
+                                         resp_len));
+  ASSERT_TRUE(tokens);
+
+  for (TRUST_TOKEN *token : tokens.get()) {
+    const uint8_t kClientData[] = "\x70TEST CLIENT DATA";
+    uint64_t kRedemptionTime = 13374242;
+
+    const uint8_t kExpectedSRR[] =
+        "\xa4\x68\x6d\x65\x74\x61\x64\x61\x74\x61\xa2\x66\x70\x75\x62\x6c\x69"
+        "\x63\x00\x67\x70\x72\x69\x76\x61\x74\x65\x00\x6a\x74\x6f\x6b\x65\x6e"
+        "\x2d\x68\x61\x73\x68\x58\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+        "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+        "\x00\x00\x00\x00\x00\x6b\x63\x6c\x69\x65\x6e\x74\x2d\x64\x61\x74\x61"
+        "\x70\x54\x45\x53\x54\x20\x43\x4c\x49\x45\x4e\x54\x20\x44\x41\x54\x41"
+        "\x70\x65\x78\x70\x69\x72\x79\x2d\x74\x69\x6d\x65\x73\x74\x61\x6d\x70"
+        "\x1a\x00\xcc\x15\x7a";
+
+    uint8_t *redeem_msg = NULL, *redeem_resp = NULL;
+    ASSERT_TRUE(TRUST_TOKEN_CLIENT_begin_redemption(
+        client.get(), &redeem_msg, &msg_len, token, kClientData,
+        sizeof(kClientData) - 1, kRedemptionTime));
+    bssl::UniquePtr<uint8_t> free_redeem_msg(redeem_msg);
+    TRUST_TOKEN *rtoken;
+    uint8_t *client_data;
+    size_t client_data_len;
+    uint64_t redemption_time;
+    ASSERT_TRUE(TRUST_TOKEN_ISSUER_redeem(
+        issuer.get(), &redeem_resp, &resp_len, &rtoken, &client_data,
+        &client_data_len, &redemption_time, redeem_msg, msg_len, 600));
+    bssl::UniquePtr<uint8_t> free_redeem_resp(redeem_resp);
+    bssl::UniquePtr<uint8_t> free_client_data(client_data);
+    bssl::UniquePtr<TRUST_TOKEN> free_rtoken(rtoken);
+
+    ASSERT_EQ(redemption_time, kRedemptionTime);
+    ASSERT_EQ(Bytes(kClientData, sizeof(kClientData) - 1),
+              Bytes(client_data, client_data_len));
+
+    uint8_t *srr = NULL, *sig = NULL;
+    size_t srr_len, sig_len;
+    ASSERT_TRUE(TRUST_TOKEN_CLIENT_finish_redemption(
+        client.get(), &srr, &srr_len, &sig, &sig_len, redeem_resp, resp_len));
+    bssl::UniquePtr<uint8_t> free_srr(srr);
+    bssl::UniquePtr<uint8_t> free_sig(sig);
+
+    const uint8_t kTokenHashDSTLabel[] = "TrustTokenV0 TokenHash";
+    uint8_t token_hash[SHA256_DIGEST_LENGTH];
+    SHA256_CTX sha_ctx;
+    SHA256_Init(&sha_ctx);
+    SHA256_Update(&sha_ctx, kTokenHashDSTLabel, sizeof(kTokenHashDSTLabel));
+    SHA256_Update(&sha_ctx, token->data, token->len);
+    SHA256_Final(token_hash, &sha_ctx);
+
+    // Check the token hash is in the SRR.
+    ASSERT_EQ(Bytes(token_hash), Bytes(srr + 41, sizeof(token_hash)));
+
+    uint8_t decode_private_metadata;
+    ASSERT_TRUE(TRUST_TOKEN_decode_private_metadata(
+        method(), &decode_private_metadata, metadata_key, sizeof(metadata_key),
+        token_hash, sizeof(token_hash), srr[27]));
+    ASSERT_EQ(srr[18], public_metadata());
+    ASSERT_EQ(decode_private_metadata, private_metadata());
+
+    // Clear out the metadata bits.
+    srr[18] = 0;
+    srr[27] = 0;
+
+    // Clear out the token hash.
+    OPENSSL_memset(srr + 41, 0, sizeof(token_hash));
+
+    ASSERT_EQ(Bytes(kExpectedSRR, sizeof(kExpectedSRR) - 1),
+              Bytes(srr, srr_len));
+  }
+}
+
+TEST_P(TrustTokenMetadataTest, TooManyRequests) {
+  if (!method()->has_private_metadata && private_metadata()) {
+    return;
+  }
+
+  issuer_max_batchsize = 1;
+  ASSERT_NO_FATAL_FAILURE(SetupContexts());
+
+  uint8_t *issue_msg = NULL, *issue_resp = NULL;
+  size_t msg_len, resp_len;
+  ASSERT_TRUE(TRUST_TOKEN_CLIENT_begin_issuance(client.get(), &issue_msg,
+                                                &msg_len, 10));
+  bssl::UniquePtr<uint8_t> free_issue_msg(issue_msg);
+  size_t tokens_issued;
+  ASSERT_TRUE(TRUST_TOKEN_ISSUER_issue(
+      issuer.get(), &issue_resp, &resp_len, &tokens_issued, issue_msg, msg_len,
+      public_metadata(), private_metadata(), /*max_issuance=*/1));
+  bssl::UniquePtr<uint8_t> free_msg(issue_resp);
+  ASSERT_EQ(tokens_issued, issuer_max_batchsize);
+  size_t key_index;
+  bssl::UniquePtr<STACK_OF(TRUST_TOKEN)> tokens(
+      TRUST_TOKEN_CLIENT_finish_issuance(client.get(), &key_index, issue_resp,
+                                         resp_len));
+  ASSERT_TRUE(tokens);
+  ASSERT_EQ(sk_TRUST_TOKEN_num(tokens.get()), 1UL);
+}
+
+
+TEST_P(TrustTokenMetadataTest, TruncatedProof) {
+  if (!method()->has_private_metadata && private_metadata()) {
+    return;
+  }
+
+  ASSERT_NO_FATAL_FAILURE(SetupContexts());
+
+  uint8_t *issue_msg = NULL, *issue_resp = NULL;
+  size_t msg_len, resp_len;
+  ASSERT_TRUE(TRUST_TOKEN_CLIENT_begin_issuance(client.get(), &issue_msg,
+                                                &msg_len, 10));
+  bssl::UniquePtr<uint8_t> free_issue_msg(issue_msg);
+  size_t tokens_issued;
+  ASSERT_TRUE(TRUST_TOKEN_ISSUER_issue(
+      issuer.get(), &issue_resp, &resp_len, &tokens_issued, issue_msg, msg_len,
+      public_metadata(), private_metadata(), /*max_issuance=*/1));
+  bssl::UniquePtr<uint8_t> free_msg(issue_resp);
+
+  CBS real_response;
+  CBS_init(&real_response, issue_resp, resp_len);
+  uint16_t count;
+  uint32_t public_metadata;
+  bssl::ScopedCBB bad_response;
+  ASSERT_TRUE(CBB_init(bad_response.get(), 0));
+  ASSERT_TRUE(CBS_get_u16(&real_response, &count));
+  ASSERT_TRUE(CBB_add_u16(bad_response.get(), count));
+  ASSERT_TRUE(CBS_get_u32(&real_response, &public_metadata));
+  ASSERT_TRUE(CBB_add_u32(bad_response.get(), public_metadata));
+
+  const EC_GROUP *group = EC_GROUP_new_by_curve_name(NID_secp384r1);
+  size_t token_length =
+      PMBTOKEN_NONCE_SIZE + 2 * (1 + 2 * BN_num_bytes(&group->field));
+  if (method() == TRUST_TOKEN_experiment_v1()) {
+    token_length += 4;
+  }
+  for (size_t i = 0; i < count; i++) {
+    ASSERT_TRUE(CBB_add_bytes(bad_response.get(), CBS_data(&real_response),
+                              token_length));
+    ASSERT_TRUE(CBS_skip(&real_response, token_length));
+  }
+
+  CBS tmp;
+  ASSERT_TRUE(CBS_get_u16_length_prefixed(&real_response, &tmp));
+  CBB dleq;
+  ASSERT_TRUE(CBB_add_u16_length_prefixed(bad_response.get(), &dleq));
+  ASSERT_TRUE(CBB_add_bytes(&dleq, CBS_data(&tmp), CBS_len(&tmp) - 2));
+  ASSERT_TRUE(CBB_flush(bad_response.get()));
+
+  uint8_t *bad_buf;
+  size_t bad_len;
+  ASSERT_TRUE(CBB_finish(bad_response.get(), &bad_buf, &bad_len));
+  bssl::UniquePtr<uint8_t> free_bad(bad_buf);
+
+  size_t key_index;
+  bssl::UniquePtr<STACK_OF(TRUST_TOKEN)> tokens(
+      TRUST_TOKEN_CLIENT_finish_issuance(client.get(), &key_index, bad_buf,
+                                         bad_len));
+  ASSERT_FALSE(tokens);
+}
+
+TEST_P(TrustTokenMetadataTest, ExcessDataProof) {
+  if (!method()->has_private_metadata && private_metadata()) {
+    return;
+  }
+
+  ASSERT_NO_FATAL_FAILURE(SetupContexts());
+
+  uint8_t *issue_msg = NULL, *issue_resp = NULL;
+  size_t msg_len, resp_len;
+  ASSERT_TRUE(TRUST_TOKEN_CLIENT_begin_issuance(client.get(), &issue_msg,
+                                                &msg_len, 10));
+  bssl::UniquePtr<uint8_t> free_issue_msg(issue_msg);
+  size_t tokens_issued;
+  ASSERT_TRUE(TRUST_TOKEN_ISSUER_issue(
+      issuer.get(), &issue_resp, &resp_len, &tokens_issued, issue_msg, msg_len,
+      public_metadata(), private_metadata(), /*max_issuance=*/1));
+  bssl::UniquePtr<uint8_t> free_msg(issue_resp);
+
+  CBS real_response;
+  CBS_init(&real_response, issue_resp, resp_len);
+  uint16_t count;
+  uint32_t public_metadata;
+  bssl::ScopedCBB bad_response;
+  ASSERT_TRUE(CBB_init(bad_response.get(), 0));
+  ASSERT_TRUE(CBS_get_u16(&real_response, &count));
+  ASSERT_TRUE(CBB_add_u16(bad_response.get(), count));
+  ASSERT_TRUE(CBS_get_u32(&real_response, &public_metadata));
+  ASSERT_TRUE(CBB_add_u32(bad_response.get(), public_metadata));
+
+  const EC_GROUP *group = EC_GROUP_new_by_curve_name(NID_secp384r1);
+  size_t token_length =
+      PMBTOKEN_NONCE_SIZE + 2 * (1 + 2 * BN_num_bytes(&group->field));
+  if (method() == TRUST_TOKEN_experiment_v1()) {
+    token_length += 4;
+  }
+  for (size_t i = 0; i < count; i++) {
+    ASSERT_TRUE(CBB_add_bytes(bad_response.get(), CBS_data(&real_response),
+                              token_length));
+    ASSERT_TRUE(CBS_skip(&real_response, token_length));
+  }
+
+  CBS tmp;
+  ASSERT_TRUE(CBS_get_u16_length_prefixed(&real_response, &tmp));
+  CBB dleq;
+  ASSERT_TRUE(CBB_add_u16_length_prefixed(bad_response.get(), &dleq));
+  ASSERT_TRUE(CBB_add_bytes(&dleq, CBS_data(&tmp), CBS_len(&tmp)));
+  ASSERT_TRUE(CBB_add_u16(&dleq, 42));
+  ASSERT_TRUE(CBB_flush(bad_response.get()));
+
+  uint8_t *bad_buf;
+  size_t bad_len;
+  ASSERT_TRUE(CBB_finish(bad_response.get(), &bad_buf, &bad_len));
+  bssl::UniquePtr<uint8_t> free_bad(bad_buf);
+
+  size_t key_index;
+  bssl::UniquePtr<STACK_OF(TRUST_TOKEN)> tokens(
+      TRUST_TOKEN_CLIENT_finish_issuance(client.get(), &key_index, bad_buf,
+                                         bad_len));
+  ASSERT_FALSE(tokens);
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    TrustTokenAllMetadataTest, TrustTokenMetadataTest,
+    testing::Combine(testing::ValuesIn(AllMethods()),
+                     testing::Values(TrustTokenProtocolTest::KeyID(0),
+                                     TrustTokenProtocolTest::KeyID(1),
+                                     TrustTokenProtocolTest::KeyID(2)),
+                     testing::Bool()));
+
+class TrustTokenBadKeyTest
+    : public TrustTokenProtocolTestBase,
+      public testing::WithParamInterface<
+          std::tuple<const TRUST_TOKEN_METHOD *, bool, int>> {
+ public:
+  TrustTokenBadKeyTest()
+      : TrustTokenProtocolTestBase(std::get<0>(GetParam())) {}
+
+  bool private_metadata() { return std::get<1>(GetParam()); }
+  int corrupted_key() { return std::get<2>(GetParam()); }
+};
+
+TEST_P(TrustTokenBadKeyTest, BadKey) {
+  if (!method()->has_private_metadata && private_metadata()) {
+    return;
+  }
+
+  ASSERT_NO_FATAL_FAILURE(SetupContexts());
+
+  uint8_t *issue_msg = NULL, *issue_resp = NULL;
+  size_t msg_len, resp_len;
+  ASSERT_TRUE(TRUST_TOKEN_CLIENT_begin_issuance(client.get(), &issue_msg,
+                                                &msg_len, 10));
+  bssl::UniquePtr<uint8_t> free_issue_msg(issue_msg);
+
+  struct trust_token_issuer_key_st *key = &issuer->keys[0];
+  EC_SCALAR *scalars[] = {&key->key.x0, &key->key.y0, &key->key.x1,
+                          &key->key.y1, &key->key.xs, &key->key.ys};
+
+  // Corrupt private key scalar.
+  scalars[corrupted_key()]->bytes[0] ^= 42;
+
+  size_t tokens_issued;
+  ASSERT_TRUE(TRUST_TOKEN_ISSUER_issue(
+      issuer.get(), &issue_resp, &resp_len, &tokens_issued, issue_msg, msg_len,
+      /*public_metadata=*/7, private_metadata(), /*max_issuance=*/1));
+  bssl::UniquePtr<uint8_t> free_msg(issue_resp);
+  size_t key_index;
+  bssl::UniquePtr<STACK_OF(TRUST_TOKEN)> tokens(
+      TRUST_TOKEN_CLIENT_finish_issuance(client.get(), &key_index, issue_resp,
+                                         resp_len));
+
+  // If the unused private key is corrupted, then the DLEQ proof should succeed.
+  if ((corrupted_key() / 2 == 0 && private_metadata() == true) ||
+      (corrupted_key() / 2 == 1 && private_metadata() == false)) {
+    ASSERT_TRUE(tokens);
+  } else {
+    ASSERT_FALSE(tokens);
+  }
+}
+
+INSTANTIATE_TEST_SUITE_P(TrustTokenAllBadKeyTest, TrustTokenBadKeyTest,
+                         testing::Combine(testing::ValuesIn(AllMethods()),
+                                          testing::Bool(),
+                                          testing::Values(0, 1, 2, 3, 4, 5)));
+
+}  // namespace
+BSSL_NAMESPACE_END
diff --git a/src/crypto/x509/a_strex.c b/src/crypto/x509/a_strex.c
index 6dc183a..2c4824e 100644
--- a/src/crypto/x509/a_strex.c
+++ b/src/crypto/x509/a_strex.c
@@ -296,7 +296,7 @@
  */
 
 static int do_dump(unsigned long lflags, char_io *io_ch, void *arg,
-                   ASN1_STRING *str)
+                   const ASN1_STRING *str)
 {
     /*
      * Placing the ASN1_STRING in a temp ASN1_TYPE allows the DER encoding to
@@ -354,7 +354,7 @@
  */
 
 static int do_print_ex(char_io *io_ch, void *arg, unsigned long lflags,
-                       ASN1_STRING *str)
+                       const ASN1_STRING *str)
 {
     int outlen, len;
     int type;
@@ -446,7 +446,7 @@
 #define FN_WIDTH_LN     25
 #define FN_WIDTH_SN     10
 
-static int do_name_ex(char_io *io_ch, void *arg, X509_NAME *n,
+static int do_name_ex(char_io *io_ch, void *arg, const X509_NAME *n,
                       int indent, unsigned long flags)
 {
     int i, prev = -1, orflags, cnt;
@@ -584,7 +584,7 @@
 
 /* Wrappers round the main functions */
 
-int X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent,
+int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent,
                        unsigned long flags)
 {
     if (flags == XN_FLAG_COMPAT)
@@ -593,7 +593,7 @@
 }
 
 #ifndef OPENSSL_NO_FP_API
-int X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent,
+int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent,
                           unsigned long flags)
 {
     if (flags == XN_FLAG_COMPAT) {
@@ -610,13 +610,13 @@
 }
 #endif
 
-int ASN1_STRING_print_ex(BIO *out, ASN1_STRING *str, unsigned long flags)
+int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags)
 {
     return do_print_ex(send_bio_chars, out, flags, str);
 }
 
 #ifndef OPENSSL_NO_FP_API
-int ASN1_STRING_print_ex_fp(FILE *fp, ASN1_STRING *str, unsigned long flags)
+int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags)
 {
     return do_print_ex(send_fp_chars, fp, flags, str);
 }
diff --git a/src/crypto/x509/asn1_gen.c b/src/crypto/x509/asn1_gen.c
index 98a6fac..f61fdde 100644
--- a/src/crypto/x509/asn1_gen.c
+++ b/src/crypto/x509/asn1_gen.c
@@ -123,7 +123,7 @@
     int exp_count;
 } tag_exp_arg;
 
-static ASN1_TYPE *generate_v3(char *str, X509V3_CTX *cnf, int depth,
+static ASN1_TYPE *generate_v3(const char *str, X509V3_CTX *cnf, int depth,
                               int *perr);
 static int bitstr_cb(const char *elem, int len, void *bitstr);
 static int asn1_cb(const char *elem, int len, void *bitstr);
@@ -136,7 +136,7 @@
 static ASN1_TYPE *asn1_str2type(const char *str, int format, int utype);
 static int asn1_str2tag(const char *tagstr, int len);
 
-ASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf)
+ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf)
 {
     X509V3_CTX cnf;
 
@@ -147,7 +147,7 @@
     return ASN1_generate_v3(str, &cnf);
 }
 
-ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf)
+ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf)
 {
     int err = 0;
     ASN1_TYPE *ret = generate_v3(str, cnf, 0, &err);
@@ -156,7 +156,7 @@
     return ret;
 }
 
-static ASN1_TYPE *generate_v3(char *str, X509V3_CTX *cnf, int depth,
+static ASN1_TYPE *generate_v3(const char *str, X509V3_CTX *cnf, int depth,
                               int *perr)
 {
     ASN1_TYPE *ret;
diff --git a/src/crypto/x509/t_crl.c b/src/crypto/x509/t_crl.c
index dc9b87f..14f98c5 100644
--- a/src/crypto/x509/t_crl.c
+++ b/src/crypto/x509/t_crl.c
@@ -91,10 +91,10 @@
     BIO_printf(out, "%8sIssuer: %s\n", "", p);
     OPENSSL_free(p);
     BIO_printf(out, "%8sLast Update: ", "");
-    ASN1_TIME_print(out, X509_CRL_get_lastUpdate(x));
+    ASN1_TIME_print(out, X509_CRL_get0_lastUpdate(x));
     BIO_printf(out, "\n%8sNext Update: ", "");
-    if (X509_CRL_get_nextUpdate(x))
-        ASN1_TIME_print(out, X509_CRL_get_nextUpdate(x));
+    if (X509_CRL_get0_nextUpdate(x))
+        ASN1_TIME_print(out, X509_CRL_get0_nextUpdate(x));
     else
         BIO_printf(out, "NONE");
     BIO_printf(out, "\n");
diff --git a/src/crypto/x509/t_x509.c b/src/crypto/x509/t_x509.c
index e45a765..5db8746 100644
--- a/src/crypto/x509/t_x509.c
+++ b/src/crypto/x509/t_x509.c
@@ -494,7 +494,7 @@
   return 0;
 }
 
-int X509_NAME_print(BIO *bp, X509_NAME *name, int obase)
+int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase)
 {
     char *s, *c, *b;
     int ret = 0, l, i;
diff --git a/src/crypto/x509/test/basic_constraints_ca.pem b/src/crypto/x509/test/basic_constraints_ca.pem
new file mode 100644
index 0000000..50d1318
--- /dev/null
+++ b/src/crypto/x509/test/basic_constraints_ca.pem
@@ -0,0 +1,9 @@
+-----BEGIN CERTIFICATE-----
+MIIBOzCB4qADAgECAgEBMAoGCCqGSM49BAMCMBwxGjAYBgNVBAMTEUJhc2ljIENv
+bnN0cmFpbnRzMCAXDTAwMDEwMTAwMDAwMFoYDzIxMDAwMTAxMDAwMDAwWjAcMRow
+GAYDVQQDExFCYXNpYyBDb25zdHJhaW50czBZMBMGByqGSM49AgEGCCqGSM49AwEH
+A0IABJEq2LxVbZGSZr4q32NCQw2K2UKzSXnDy7dJLCbsdlES+ZwEIkGNUhERpxGo
+jS6aHNHZXk0vMEE/3I8P8D4KHlejEzARMA8GA1UdEwEB/wQFMAMBAf8wCgYIKoZI
+zj0EAwIDSAAwRQIgTNs2aQPDZs+Pal5LA1fAKyC4AKTNN+JE/vEYndKhFxYCIQDf
+b7IjDoXx/3GBnsrht14NUmzUBdqkQafJvC+eHIdtQA==
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/basic_constraints_ca_pathlen_0.pem b/src/crypto/x509/test/basic_constraints_ca_pathlen_0.pem
new file mode 100644
index 0000000..2d66801
--- /dev/null
+++ b/src/crypto/x509/test/basic_constraints_ca_pathlen_0.pem
@@ -0,0 +1,9 @@
+-----BEGIN CERTIFICATE-----
+MIIBPjCB5aADAgECAgEBMAoGCCqGSM49BAMCMBwxGjAYBgNVBAMTEUJhc2ljIENv
+bnN0cmFpbnRzMCAXDTAwMDEwMTAwMDAwMFoYDzIxMDAwMTAxMDAwMDAwWjAcMRow
+GAYDVQQDExFCYXNpYyBDb25zdHJhaW50czBZMBMGByqGSM49AgEGCCqGSM49AwEH
+A0IABJEq2LxVbZGSZr4q32NCQw2K2UKzSXnDy7dJLCbsdlES+ZwEIkGNUhERpxGo
+jS6aHNHZXk0vMEE/3I8P8D4KHlejFjAUMBIGA1UdEwEB/wQIMAYBAf8CAQAwCgYI
+KoZIzj0EAwIDSAAwRQIgHdMalNLi3hzz58PdNQPAqiA5KAa/dfQWuNNjzE6iDIcC
+IQCda6js7OKQvdqCFb/POHPriXX1YXIJ3N95+SE7qFJ9Gg==
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/basic_constraints_ca_pathlen_1.pem b/src/crypto/x509/test/basic_constraints_ca_pathlen_1.pem
new file mode 100644
index 0000000..b9d35d0
--- /dev/null
+++ b/src/crypto/x509/test/basic_constraints_ca_pathlen_1.pem
@@ -0,0 +1,9 @@
+-----BEGIN CERTIFICATE-----
+MIIBPjCB5aADAgECAgEBMAoGCCqGSM49BAMCMBwxGjAYBgNVBAMTEUJhc2ljIENv
+bnN0cmFpbnRzMCAXDTAwMDEwMTAwMDAwMFoYDzIxMDAwMTAxMDAwMDAwWjAcMRow
+GAYDVQQDExFCYXNpYyBDb25zdHJhaW50czBZMBMGByqGSM49AgEGCCqGSM49AwEH
+A0IABJEq2LxVbZGSZr4q32NCQw2K2UKzSXnDy7dJLCbsdlES+ZwEIkGNUhERpxGo
+jS6aHNHZXk0vMEE/3I8P8D4KHlejFjAUMBIGA1UdEwEB/wQIMAYBAf8CAQEwCgYI
+KoZIzj0EAwIDSAAwRQIgZx7fIDI65CU7Lck0t7ep/GtBkpELR0gKkUJrI09/JJoC
+IQDFPukkJgYA7RpFsAsEq77S+i9gf/S/IreobhvQm/401w==
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/basic_constraints_ca_pathlen_10.pem b/src/crypto/x509/test/basic_constraints_ca_pathlen_10.pem
new file mode 100644
index 0000000..c4698a6
--- /dev/null
+++ b/src/crypto/x509/test/basic_constraints_ca_pathlen_10.pem
@@ -0,0 +1,9 @@
+-----BEGIN CERTIFICATE-----
+MIIBPjCB5aADAgECAgEBMAoGCCqGSM49BAMCMBwxGjAYBgNVBAMTEUJhc2ljIENv
+bnN0cmFpbnRzMCAXDTAwMDEwMTAwMDAwMFoYDzIxMDAwMTAxMDAwMDAwWjAcMRow
+GAYDVQQDExFCYXNpYyBDb25zdHJhaW50czBZMBMGByqGSM49AgEGCCqGSM49AwEH
+A0IABJEq2LxVbZGSZr4q32NCQw2K2UKzSXnDy7dJLCbsdlES+ZwEIkGNUhERpxGo
+jS6aHNHZXk0vMEE/3I8P8D4KHlejFjAUMBIGA1UdEwEB/wQIMAYBAf8CAQowCgYI
+KoZIzj0EAwIDSAAwRQIhALj37ijrYfommrWjrXMXjJyILvGNH7KxViKU1cWjX5dF
+AiA6WjePmZdKilZebpZ++MTPs5cbpdcShWYuJ45sANCKgw==
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/basic_constraints_leaf.pem b/src/crypto/x509/test/basic_constraints_leaf.pem
new file mode 100644
index 0000000..4b9b8c2
--- /dev/null
+++ b/src/crypto/x509/test/basic_constraints_leaf.pem
@@ -0,0 +1,9 @@
+-----BEGIN CERTIFICATE-----
+MIIBOTCB36ADAgECAgEBMAoGCCqGSM49BAMCMBwxGjAYBgNVBAMTEUJhc2ljIENv
+bnN0cmFpbnRzMCAXDTAwMDEwMTAwMDAwMFoYDzIxMDAwMTAxMDAwMDAwWjAcMRow
+GAYDVQQDExFCYXNpYyBDb25zdHJhaW50czBZMBMGByqGSM49AgEGCCqGSM49AwEH
+A0IABJEq2LxVbZGSZr4q32NCQw2K2UKzSXnDy7dJLCbsdlES+ZwEIkGNUhERpxGo
+jS6aHNHZXk0vMEE/3I8P8D4KHlejEDAOMAwGA1UdEwEB/wQCMAAwCgYIKoZIzj0E
+AwIDSQAwRgIhAIc3Cbr1SRZZ8ZusjOQjA/9Ro5ijEZbMaD1ClW62/GqSAiEAy1tU
+No3zRwTUcuyAnav+XbXkS1a5Fm2/rFBoWN8ZAxA=
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/basic_constraints_none.pem b/src/crypto/x509/test/basic_constraints_none.pem
new file mode 100644
index 0000000..1228961
--- /dev/null
+++ b/src/crypto/x509/test/basic_constraints_none.pem
@@ -0,0 +1,9 @@
+-----BEGIN CERTIFICATE-----
+MIIBKjCB0aADAgECAgEBMAoGCCqGSM49BAMCMBwxGjAYBgNVBAMTEUJhc2ljIENv
+bnN0cmFpbnRzMCAXDTAwMDEwMTAwMDAwMFoYDzIxMDAwMTAxMDAwMDAwWjAcMRow
+GAYDVQQDExFCYXNpYyBDb25zdHJhaW50czBZMBMGByqGSM49AgEGCCqGSM49AwEH
+A0IABJEq2LxVbZGSZr4q32NCQw2K2UKzSXnDy7dJLCbsdlES+ZwEIkGNUhERpxGo
+jS6aHNHZXk0vMEE/3I8P8D4KHlejAjAAMAoGCCqGSM49BAMCA0gAMEUCIQCQ1/Ca
+RanCM+PIUqVkCpfumEeLKawHMYIA2ZM3Yy2wngIgZg10Sd25/POZKIXlMAiwlDrM
+UQcfzZiBh8T5JEWKeRc=
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_intermediate.pem b/src/crypto/x509/test/invalid_extension_intermediate.pem
new file mode 100644
index 0000000..b86865f
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_intermediate.pem
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE-----
+MIIBdTCCARugAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowKjEoMCYGA1UEAxMfSW52YWxpZCBFeHRlbnNpb25zIEludGVybWVkaWF0ZTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABOI6fKiM3jFLkLyAn88cvlw4SwxuygRj
+opP3FFBKHyUQvh3VVvfqSpSCSmp50QiajQ6Dg7CTpVZVVH+bguT7JTCjODA2MA4G
+A1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD
+AQH/MAoGCCqGSM49BAMCA0gAMEUCIDkCS9RrLeO556C9apswg90ZdI2kn3ru31bp
+a4Rqp82BAiEAqJn5GbUzqjVaI5UthWdcu1zmpdTJntbheeNstXa7k+E=
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_intermediate_authority_key_identifier.pem b/src/crypto/x509/test/invalid_extension_intermediate_authority_key_identifier.pem
new file mode 100644
index 0000000..595703c
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_intermediate_authority_key_identifier.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBhTCCASugAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowKjEoMCYGA1UEAxMfSW52YWxpZCBFeHRlbnNpb25zIEludGVybWVkaWF0ZTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABOI6fKiM3jFLkLyAn88cvlw4SwxuygRj
+opP3FFBKHyUQvh3VVvfqSpSCSmp50QiajQ6Dg7CTpVZVVH+bguT7JTCjSDBGMA4G
+A1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdIwQHSU5WQUxJRDAKBggqhkjOPQQDAgNIADBFAiEAl5TMKihFw6jD
+ajc1I7R177t3d4HyW7qCB/M3PHu9HDsCIDI0oBBsuXAHX43N1Jx8LO0sMAzujYom
+/NZn/qBanQnZ
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_intermediate_basic_constraints.pem b/src/crypto/x509/test/invalid_extension_intermediate_basic_constraints.pem
new file mode 100644
index 0000000..32f09f5
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_intermediate_basic_constraints.pem
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE-----
+MIIBdTCCARqgAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowKjEoMCYGA1UEAxMfSW52YWxpZCBFeHRlbnNpb25zIEludGVybWVkaWF0ZTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABOI6fKiM3jFLkLyAn88cvlw4SwxuygRj
+opP3FFBKHyUQvh3VVvfqSpSCSmp50QiajQ6Dg7CTpVZVVH+bguT7JTCjNzA1MA4G
+A1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEFBQcDATAOBgNVHRMEB0lOVkFM
+SUQwCgYIKoZIzj0EAwIDSQAwRgIhAK/zCwmg3s63Ndeg9piiBbMsUF6ZPcNFltEa
+3cKSMPthAiEAkMq/CmljQigMgXVWOhacYeRLyzZyi2i9hOjrCeKFuno=
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_intermediate_ext_key_usage.pem b/src/crypto/x509/test/invalid_extension_intermediate_ext_key_usage.pem
new file mode 100644
index 0000000..20ff382
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_intermediate_ext_key_usage.pem
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE-----
+MIIBbzCCARagAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowKjEoMCYGA1UEAxMfSW52YWxpZCBFeHRlbnNpb25zIEludGVybWVkaWF0ZTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABOI6fKiM3jFLkLyAn88cvlw4SwxuygRj
+opP3FFBKHyUQvh3VVvfqSpSCSmp50QiajQ6Dg7CTpVZVVH+bguT7JTCjMzAxMA4G
+A1UdDwEB/wQEAwICBDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdJQQHSU5WQUxJRDAK
+BggqhkjOPQQDAgNHADBEAiAGr6/3ad6TX4h/HgD5oFiifT7SsRzYVD1yvfyHEYRI
+qgIgYDbO0XKLN9kSUF8ZBaLPyC1AIbw+m9cQy4/GaJuzxH4=
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_intermediate_key_usage.pem b/src/crypto/x509/test/invalid_extension_intermediate_key_usage.pem
new file mode 100644
index 0000000..c31596c
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_intermediate_key_usage.pem
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE-----
+MIIBdDCCARugAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowKjEoMCYGA1UEAxMfSW52YWxpZCBFeHRlbnNpb25zIEludGVybWVkaWF0ZTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABOI6fKiM3jFLkLyAn88cvlw4SwxuygRj
+opP3FFBKHyUQvh3VVvfqSpSCSmp50QiajQ6Dg7CTpVZVVH+bguT7JTCjODA2MBMG
+A1UdJQQMMAoGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PBAdJTlZB
+TElEMAoGCCqGSM49BAMCA0cAMEQCIE1gJ4wr8D0UPRfhQ5sx1WJWEOc+IEtktigk
+giSupcouAiBFa441h0NvODAwsb39sQ/uaUhucb11vwKSZItwViMp/w==
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_intermediate_name_constraints.pem b/src/crypto/x509/test/invalid_extension_intermediate_name_constraints.pem
new file mode 100644
index 0000000..82c83a9
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_intermediate_name_constraints.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBhTCCASugAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowKjEoMCYGA1UEAxMfSW52YWxpZCBFeHRlbnNpb25zIEludGVybWVkaWF0ZTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABOI6fKiM3jFLkLyAn88cvlw4SwxuygRj
+opP3FFBKHyUQvh3VVvfqSpSCSmp50QiajQ6Dg7CTpVZVVH+bguT7JTCjSDBGMA4G
+A1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdHgQHSU5WQUxJRDAKBggqhkjOPQQDAgNIADBFAiB7QedoT6bEccGY
+/Pofovdtfdzl/AXCtbJjiu59Yt3UTAIhANdfkR5PShTke3o9diKz6G/cVvL9jkF2
+SKzPRxnRVxNo
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_intermediate_subject_alt_name.pem b/src/crypto/x509/test/invalid_extension_intermediate_subject_alt_name.pem
new file mode 100644
index 0000000..6fd9bf6
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_intermediate_subject_alt_name.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBhDCCASugAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowKjEoMCYGA1UEAxMfSW52YWxpZCBFeHRlbnNpb25zIEludGVybWVkaWF0ZTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABOI6fKiM3jFLkLyAn88cvlw4SwxuygRj
+opP3FFBKHyUQvh3VVvfqSpSCSmp50QiajQ6Dg7CTpVZVVH+bguT7JTCjSDBGMA4G
+A1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdEQQHSU5WQUxJRDAKBggqhkjOPQQDAgNHADBEAiA4J8X4tb775IOP
+gBZ8BjlQZXPaRAgO/0d8a5Bgb5j0awIgN1i84TX34Dm8SjArcZLN38mm0zbrvEY0
+wILouqC75wI=
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_intermediate_subject_key_identifier.pem b/src/crypto/x509/test/invalid_extension_intermediate_subject_key_identifier.pem
new file mode 100644
index 0000000..a440757
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_intermediate_subject_key_identifier.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBhTCCASugAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowKjEoMCYGA1UEAxMfSW52YWxpZCBFeHRlbnNpb25zIEludGVybWVkaWF0ZTBZ
+MBMGByqGSM49AgEGCCqGSM49AwEHA0IABOI6fKiM3jFLkLyAn88cvlw4SwxuygRj
+opP3FFBKHyUQvh3VVvfqSpSCSmp50QiajQ6Dg7CTpVZVVH+bguT7JTCjSDBGMA4G
+A1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdDgQHSU5WQUxJRDAKBggqhkjOPQQDAgNIADBFAiBXToga6ILFNSXj
+FiwI/ZaZvJubBHzMcrEXtIv85ybV3wIhAL3DMOezrq+dSjf+RdshlTDKwvTY8QYX
+ehvRzctnYHTd
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_leaf.pem b/src/crypto/x509/test/invalid_extension_leaf.pem
new file mode 100644
index 0000000..14bcb5a
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_leaf.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBhzCCASygAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDEx9JbnZhbGlk
+IEV4dGVuc2lvbnMgSW50ZXJtZWRpYXRlMCAXDTAwMDEwMTAwMDAwMFoYDzIxMDAw
+MTAxMDAwMDAwWjAaMRgwFgYDVQQDEw93d3cuZXhhbXBsZS5jb20wWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAASRKti8VW2Rkma+Kt9jQkMNitlCs0l5w8u3SSwm7HZR
+EvmcBCJBjVIREacRqI0umhzR2V5NLzBBP9yPD/A+Ch5Xo1EwTzAOBgNVHQ8BAf8E
+BAMCAgQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAaBgNVHREE
+EzARgg93d3cuZXhhbXBsZS5jb20wCgYIKoZIzj0EAwIDSQAwRgIhAJ1DkyH6QYsM
+bxN/aXhKYGFc1upPpxfHrzmVrVrYq34GAiEAgzAn1bws7mwi4fTBJ4XY44OisCi6
+gPDLe2H4Esop38o=
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_leaf_authority_key_identifier.pem b/src/crypto/x509/test/invalid_extension_leaf_authority_key_identifier.pem
new file mode 100644
index 0000000..166b89c
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_leaf_authority_key_identifier.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBljCCATygAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDEx9JbnZhbGlk
+IEV4dGVuc2lvbnMgSW50ZXJtZWRpYXRlMCAXDTAwMDEwMTAwMDAwMFoYDzIxMDAw
+MTAxMDAwMDAwWjAaMRgwFgYDVQQDEw93d3cuZXhhbXBsZS5jb20wWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAASRKti8VW2Rkma+Kt9jQkMNitlCs0l5w8u3SSwm7HZR
+EvmcBCJBjVIREacRqI0umhzR2V5NLzBBP9yPD/A+Ch5Xo2EwXzAOBgNVHQ8BAf8E
+BAMCAgQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAaBgNVHREE
+EzARgg93d3cuZXhhbXBsZS5jb20wDgYDVR0jBAdJTlZBTElEMAoGCCqGSM49BAMC
+A0gAMEUCIDCqsRJC3IrUHxm5txOfnjrpGmoeSvr1EhVFDhHCuV6GAiEAwJ15sf7y
++CGw0rzYTLUHw4nc5aJC9oKOhypg3SrQeGw=
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_leaf_basic_constraints.pem b/src/crypto/x509/test/invalid_extension_leaf_basic_constraints.pem
new file mode 100644
index 0000000..611f7cb
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_leaf_basic_constraints.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBiDCCAS6gAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDEx9JbnZhbGlk
+IEV4dGVuc2lvbnMgSW50ZXJtZWRpYXRlMCAXDTAwMDEwMTAwMDAwMFoYDzIxMDAw
+MTAxMDAwMDAwWjAaMRgwFgYDVQQDEw93d3cuZXhhbXBsZS5jb20wWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAASRKti8VW2Rkma+Kt9jQkMNitlCs0l5w8u3SSwm7HZR
+EvmcBCJBjVIREacRqI0umhzR2V5NLzBBP9yPD/A+Ch5Xo1MwUTAOBgNVHQ8BAf8E
+BAMCAgQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGgYDVR0RBBMwEYIPd3d3LmV4YW1w
+bGUuY29tMA4GA1UdEwQHSU5WQUxJRDAKBggqhkjOPQQDAgNIADBFAiEA6btgd6HI
+SCvxfnaHqhAiBjLl665JJC/wpSejPlxFmI0CIGZ7pLkRuQKv132ffDBmobAsBBnT
+YXmJWAHc4rsJCYEx
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_leaf_ext_key_usage.pem b/src/crypto/x509/test/invalid_extension_leaf_ext_key_usage.pem
new file mode 100644
index 0000000..2fa34ee
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_leaf_ext_key_usage.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBgTCCASegAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDEx9JbnZhbGlk
+IEV4dGVuc2lvbnMgSW50ZXJtZWRpYXRlMCAXDTAwMDEwMTAwMDAwMFoYDzIxMDAw
+MTAxMDAwMDAwWjAaMRgwFgYDVQQDEw93d3cuZXhhbXBsZS5jb20wWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAASRKti8VW2Rkma+Kt9jQkMNitlCs0l5w8u3SSwm7HZR
+EvmcBCJBjVIREacRqI0umhzR2V5NLzBBP9yPD/A+Ch5Xo0wwSjAOBgNVHQ8BAf8E
+BAMCAgQwDAYDVR0TAQH/BAIwADAaBgNVHREEEzARgg93d3cuZXhhbXBsZS5jb20w
+DgYDVR0lBAdJTlZBTElEMAoGCCqGSM49BAMCA0gAMEUCIH3jx0mZhPAY2QZHYVPQ
+ld6RNFGris9CFCD8AMOaZTR+AiEAgr4hSxoIm3g/CVeQkDORqgSrXU0AuVvQL2KO
+NM5UG1Q=
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_leaf_key_usage.pem b/src/crypto/x509/test/invalid_extension_leaf_key_usage.pem
new file mode 100644
index 0000000..82c7cf0
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_leaf_key_usage.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBhjCCASygAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDEx9JbnZhbGlk
+IEV4dGVuc2lvbnMgSW50ZXJtZWRpYXRlMCAXDTAwMDEwMTAwMDAwMFoYDzIxMDAw
+MTAxMDAwMDAwWjAaMRgwFgYDVQQDEw93d3cuZXhhbXBsZS5jb20wWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAASRKti8VW2Rkma+Kt9jQkMNitlCs0l5w8u3SSwm7HZR
+EvmcBCJBjVIREacRqI0umhzR2V5NLzBBP9yPD/A+Ch5Xo1EwTzATBgNVHSUEDDAK
+BggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMBoGA1UdEQQTMBGCD3d3dy5leGFtcGxl
+LmNvbTAOBgNVHQ8EB0lOVkFMSUQwCgYIKoZIzj0EAwIDSAAwRQIgPoSLUcWwjnDx
+3N+DJPzpgHRRSZtJz6w5njQ+zcyQvrQCIQDThWHI9F5s6xQN42stFw0sasdWFc/9
+No9QQf1zbGfGDw==
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_leaf_name_constraints.pem b/src/crypto/x509/test/invalid_extension_leaf_name_constraints.pem
new file mode 100644
index 0000000..f4e6105
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_leaf_name_constraints.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBljCCATygAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDEx9JbnZhbGlk
+IEV4dGVuc2lvbnMgSW50ZXJtZWRpYXRlMCAXDTAwMDEwMTAwMDAwMFoYDzIxMDAw
+MTAxMDAwMDAwWjAaMRgwFgYDVQQDEw93d3cuZXhhbXBsZS5jb20wWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAASRKti8VW2Rkma+Kt9jQkMNitlCs0l5w8u3SSwm7HZR
+EvmcBCJBjVIREacRqI0umhzR2V5NLzBBP9yPD/A+Ch5Xo2EwXzAOBgNVHQ8BAf8E
+BAMCAgQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAaBgNVHREE
+EzARgg93d3cuZXhhbXBsZS5jb20wDgYDVR0eBAdJTlZBTElEMAoGCCqGSM49BAMC
+A0gAMEUCIQCYofdTDXH2HIpc/ZSI6IQVCM0L0/QbKbEOGeAwDtikGAIgV48ECoAt
+8maDdh8y9qj/TZe6XA39BzkjtsLKhecCuV8=
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_leaf_subject_alt_name.pem b/src/crypto/x509/test/invalid_extension_leaf_subject_alt_name.pem
new file mode 100644
index 0000000..eae65f4
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_leaf_subject_alt_name.pem
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE-----
+MIIBeTCCASCgAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDEx9JbnZhbGlk
+IEV4dGVuc2lvbnMgSW50ZXJtZWRpYXRlMCAXDTAwMDEwMTAwMDAwMFoYDzIxMDAw
+MTAxMDAwMDAwWjAaMRgwFgYDVQQDEw93d3cuZXhhbXBsZS5jb20wWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAASRKti8VW2Rkma+Kt9jQkMNitlCs0l5w8u3SSwm7HZR
+EvmcBCJBjVIREacRqI0umhzR2V5NLzBBP9yPD/A+Ch5Xo0UwQzAOBgNVHQ8BAf8E
+BAMCAgQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAOBgNVHREE
+B0lOVkFMSUQwCgYIKoZIzj0EAwIDRwAwRAIgDatlhmjkW4lgYc/eyrqJp1kxKrL8
+0WkPsmdUZmXiI1QCIC1bl+3ponxSaCvn81xKrQzuIq2OzWxy2PTHyNbPnGcz
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_leaf_subject_key_identifier.pem b/src/crypto/x509/test/invalid_extension_leaf_subject_key_identifier.pem
new file mode 100644
index 0000000..d082bf8
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_leaf_subject_key_identifier.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBlzCCATygAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDEx9JbnZhbGlk
+IEV4dGVuc2lvbnMgSW50ZXJtZWRpYXRlMCAXDTAwMDEwMTAwMDAwMFoYDzIxMDAw
+MTAxMDAwMDAwWjAaMRgwFgYDVQQDEw93d3cuZXhhbXBsZS5jb20wWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAASRKti8VW2Rkma+Kt9jQkMNitlCs0l5w8u3SSwm7HZR
+EvmcBCJBjVIREacRqI0umhzR2V5NLzBBP9yPD/A+Ch5Xo2EwXzAOBgNVHQ8BAf8E
+BAMCAgQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAaBgNVHREE
+EzARgg93d3cuZXhhbXBsZS5jb20wDgYDVR0OBAdJTlZBTElEMAoGCCqGSM49BAMC
+A0kAMEYCIQDNfoYMjJUzrw2qxHKwopCt9lTQIfOCJDzndJwHLSI97gIhAIDRRWkU
+OpOxpzO5zJtvsPSuFJTPtFi6dKwyZA0VVX5m
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_root.pem b/src/crypto/x509/test/invalid_extension_root.pem
new file mode 100644
index 0000000..9236111
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_root.pem
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE-----
+MIIBbjCCAROgAwIBAgIBATAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowIjEgMB4GA1UEAxMXSW52YWxpZCBFeHRlbnNpb25zIFJvb3QwWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAAQmdqXYl1GvY7y3jcTTK6MVXIQr44TqChRYI6IeV9tI
+B6jIsOY+Qol1bk8x/7A5FGOnUWFVLEAPEPSJwPndjoltozgwNjAOBgNVHQ8BAf8E
+BAMCAgQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zAKBggq
+hkjOPQQDAgNJADBGAiEAkLonK/c0Wai8LSe6Nhf3ln+dpPxIQD9z0e2bXzgp3ZgC
+IQDUjv8fhl6szNN6cV4NElVrsuFRigAvt6Z5M132Ybgavw==
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_root_authority_key_identifier.pem b/src/crypto/x509/test/invalid_extension_root_authority_key_identifier.pem
new file mode 100644
index 0000000..c2321b7
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_root_authority_key_identifier.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBfTCCASOgAwIBAgIBATAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowIjEgMB4GA1UEAxMXSW52YWxpZCBFeHRlbnNpb25zIFJvb3QwWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAAQmdqXYl1GvY7y3jcTTK6MVXIQr44TqChRYI6IeV9tI
+B6jIsOY+Qol1bk8x/7A5FGOnUWFVLEAPEPSJwPndjolto0gwRjAOBgNVHQ8BAf8E
+BAMCAgQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
+HSMEB0lOVkFMSUQwCgYIKoZIzj0EAwIDSAAwRQIgO/L4Oi8esLDZ5HQgVYd/GUey
+8yPPRUkfr8+ZH5YJ724CIQCToZDd4kEPRmwjS6R20n5qrDElE4SDBq8cmJEToh57
+3Q==
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_root_basic_constraints.pem b/src/crypto/x509/test/invalid_extension_root_basic_constraints.pem
new file mode 100644
index 0000000..4e507b3
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_root_basic_constraints.pem
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE-----
+MIIBazCCARKgAwIBAgIBATAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowIjEgMB4GA1UEAxMXSW52YWxpZCBFeHRlbnNpb25zIFJvb3QwWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAAQmdqXYl1GvY7y3jcTTK6MVXIQr44TqChRYI6IeV9tI
+B6jIsOY+Qol1bk8x/7A5FGOnUWFVLEAPEPSJwPndjoltozcwNTAOBgNVHQ8BAf8E
+BAMCAgQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDgYDVR0TBAdJTlZBTElEMAoGCCqG
+SM49BAMCA0cAMEQCICRNoNJx8TOSe4FKoB7EdfvG56/zvzVK8F4SDV35nbfTAiAF
+QjSD7CDdbaRQymgX3ojBbAP3hj1fFbCzopKR7UUvxQ==
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_root_ext_key_usage.pem b/src/crypto/x509/test/invalid_extension_root_ext_key_usage.pem
new file mode 100644
index 0000000..17ac3a2
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_root_ext_key_usage.pem
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ6gAwIBAgIBATAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowIjEgMB4GA1UEAxMXSW52YWxpZCBFeHRlbnNpb25zIFJvb3QwWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAAQmdqXYl1GvY7y3jcTTK6MVXIQr44TqChRYI6IeV9tI
+B6jIsOY+Qol1bk8x/7A5FGOnUWFVLEAPEPSJwPndjoltozMwMTAOBgNVHQ8BAf8E
+BAMCAgQwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHSUEB0lOVkFMSUQwCgYIKoZIzj0E
+AwIDSAAwRQIgVjuDRpd+kVlqUDJcX899ZsAoIvkSPxo/lCVJ+ae28BkCIQD/9Aig
+0CaivgJ8Z6mUW9ozp6ClMPfSpCEUtrhm/dg2og==
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_root_key_usage.pem b/src/crypto/x509/test/invalid_extension_root_key_usage.pem
new file mode 100644
index 0000000..92ac0c6
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_root_key_usage.pem
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE-----
+MIIBbjCCAROgAwIBAgIBATAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowIjEgMB4GA1UEAxMXSW52YWxpZCBFeHRlbnNpb25zIFJvb3QwWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAAQmdqXYl1GvY7y3jcTTK6MVXIQr44TqChRYI6IeV9tI
+B6jIsOY+Qol1bk8x/7A5FGOnUWFVLEAPEPSJwPndjoltozgwNjATBgNVHSUEDDAK
+BggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwQHSU5WQUxJRDAKBggq
+hkjOPQQDAgNJADBGAiEAmX21h0WJPZ8VjGRaGwYWAh2q7iS0Wzm+besT06qgnPwC
+IQCEF2G9d/DaDL7H9aw51xA0B+WwHBN5r1kx6b9A5pJVtg==
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_root_name_constraints.pem b/src/crypto/x509/test/invalid_extension_root_name_constraints.pem
new file mode 100644
index 0000000..3511236
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_root_name_constraints.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBfTCCASOgAwIBAgIBATAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowIjEgMB4GA1UEAxMXSW52YWxpZCBFeHRlbnNpb25zIFJvb3QwWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAAQmdqXYl1GvY7y3jcTTK6MVXIQr44TqChRYI6IeV9tI
+B6jIsOY+Qol1bk8x/7A5FGOnUWFVLEAPEPSJwPndjolto0gwRjAOBgNVHQ8BAf8E
+BAMCAgQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
+HR4EB0lOVkFMSUQwCgYIKoZIzj0EAwIDSAAwRQIhALYRk6SPzWoKF3wLI6N+bWh/
+iap7zpRrAZqmL3EDTlitAiB0CFMk9r5h/RDkvrP4Z+JZKum9ZVbGew73cdjDVBA3
+dA==
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_root_subject_alt_name.pem b/src/crypto/x509/test/invalid_extension_root_subject_alt_name.pem
new file mode 100644
index 0000000..0604bf6
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_root_subject_alt_name.pem
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE-----
+MIIBfDCCASOgAwIBAgIBATAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowIjEgMB4GA1UEAxMXSW52YWxpZCBFeHRlbnNpb25zIFJvb3QwWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAAQmdqXYl1GvY7y3jcTTK6MVXIQr44TqChRYI6IeV9tI
+B6jIsOY+Qol1bk8x/7A5FGOnUWFVLEAPEPSJwPndjolto0gwRjAOBgNVHQ8BAf8E
+BAMCAgQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
+HREEB0lOVkFMSUQwCgYIKoZIzj0EAwIDRwAwRAIgZKRMQGAIoUuzwYQS8UNkuTI5
+H9kJYpOGZhZ3esyfvC4CIAsJGY8kgzzFpLwd3e9Zp6WAPK/snDzF9Tb4KL+GB85n
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/invalid_extension_root_subject_key_identifier.pem b/src/crypto/x509/test/invalid_extension_root_subject_key_identifier.pem
new file mode 100644
index 0000000..eb17a7e
--- /dev/null
+++ b/src/crypto/x509/test/invalid_extension_root_subject_key_identifier.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBfjCCASOgAwIBAgIBATAKBggqhkjOPQQDAjAiMSAwHgYDVQQDExdJbnZhbGlk
+IEV4dGVuc2lvbnMgUm9vdDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAw
+MFowIjEgMB4GA1UEAxMXSW52YWxpZCBFeHRlbnNpb25zIFJvb3QwWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAAQmdqXYl1GvY7y3jcTTK6MVXIQr44TqChRYI6IeV9tI
+B6jIsOY+Qol1bk8x/7A5FGOnUWFVLEAPEPSJwPndjolto0gwRjAOBgNVHQ8BAf8E
+BAMCAgQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
+HQ4EB0lOVkFMSUQwCgYIKoZIzj0EAwIDSQAwRgIhAJbUNO8zfK439VpI2rrG9gTl
+fjunP2fKsz3EK8NUtS12AiEA1m9Uzb+sUTCGhAlGEsDkjFbp3SCbvbWn7YhzqJkR
+xvQ=
+-----END CERTIFICATE-----
diff --git a/src/crypto/x509/test/make_basic_constraints.go b/src/crypto/x509/test/make_basic_constraints.go
new file mode 100644
index 0000000..23158b5
--- /dev/null
+++ b/src/crypto/x509/test/make_basic_constraints.go
@@ -0,0 +1,100 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+// make_basic_constraints.go generates self-signed certificates with the basic
+// constraints extension.
+package main
+
+import (
+	"crypto/ecdsa"
+	"crypto/rand"
+	"crypto/x509"
+	"crypto/x509/pkix"
+	"encoding/pem"
+	"fmt"
+	"io/ioutil"
+	"math/big"
+	"time"
+)
+
+func main() {
+	key := ecdsaKeyFromPEMOrPanic(keyPEM)
+
+	notBefore, err := time.Parse(time.RFC3339, "2000-01-01T00:00:00Z")
+	if err != nil {
+		panic(err)
+	}
+	notAfter, err := time.Parse(time.RFC3339, "2100-01-01T00:00:00Z")
+	if err != nil {
+		panic(err)
+	}
+
+	baseTemplate := x509.Certificate{
+		SerialNumber:       new(big.Int).SetInt64(1),
+		Subject:            pkix.Name{CommonName: "Basic Constraints"},
+		NotBefore:          notBefore,
+		NotAfter:           notAfter,
+		SignatureAlgorithm: x509.ECDSAWithSHA256,
+	}
+
+	certs := []struct {
+		name                  string
+		basicConstraintsValid bool
+		isCA                  bool
+		maxPathLen            int
+		maxPathLenZero        bool
+	}{
+		{name: "none"},
+		{name: "leaf", basicConstraintsValid: true},
+		{name: "ca", basicConstraintsValid: true, isCA: true},
+		{name: "ca_pathlen_0", basicConstraintsValid: true, isCA: true, maxPathLenZero: true},
+		{name: "ca_pathlen_1", basicConstraintsValid: true, isCA: true, maxPathLen: 1},
+		{name: "ca_pathlen_10", basicConstraintsValid: true, isCA: true, maxPathLen: 10},
+	}
+	for _, cert := range certs {
+		template := baseTemplate
+		template.BasicConstraintsValid = cert.basicConstraintsValid
+		template.IsCA = cert.isCA
+		template.MaxPathLen = cert.maxPathLen
+		template.MaxPathLenZero = cert.maxPathLenZero
+
+		certBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, &key.PublicKey, key)
+		if err != nil {
+			panic(err)
+		}
+
+		certPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: certBytes})
+		if err := ioutil.WriteFile(fmt.Sprintf("basic_constraints_%s.pem", cert.name), certPEM, 0666); err != nil {
+			panic(err)
+		}
+	}
+}
+
+const keyPEM = `-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgoPUXNXuH9mgiS/nk
+024SYxryxMa3CyGJldiHymLxSquhRANCAASRKti8VW2Rkma+Kt9jQkMNitlCs0l5
+w8u3SSwm7HZREvmcBCJBjVIREacRqI0umhzR2V5NLzBBP9yPD/A+Ch5X
+-----END PRIVATE KEY-----`
+
+func ecdsaKeyFromPEMOrPanic(in string) *ecdsa.PrivateKey {
+	keyBlock, _ := pem.Decode([]byte(in))
+	if keyBlock == nil || keyBlock.Type != "PRIVATE KEY" {
+		panic("could not decode private key")
+	}
+	key, err := x509.ParsePKCS8PrivateKey(keyBlock.Bytes)
+	if err != nil {
+		panic(err)
+	}
+	return key.(*ecdsa.PrivateKey)
+}
diff --git a/src/crypto/x509/test/make_invalid_extensions.go b/src/crypto/x509/test/make_invalid_extensions.go
new file mode 100644
index 0000000..3d20942
--- /dev/null
+++ b/src/crypto/x509/test/make_invalid_extensions.go
@@ -0,0 +1,184 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+// make_invalid_extensions.go generates a number of certificate chains with
+// invalid extension encodings.
+package main
+
+import (
+	"crypto/ecdsa"
+	"crypto/rand"
+	"crypto/x509"
+	"crypto/x509/pkix"
+	"encoding/pem"
+	"fmt"
+	"math/big"
+	"os"
+	"time"
+)
+
+type extension struct {
+	// The name of the extension, in a form suitable for including in a
+	// filename.
+	name string
+	// The extension's OID.
+	oid []int
+}
+
+var extensions = []extension{
+	{name: "authority_key_identifier", oid: []int{2, 5, 29, 35}},
+	{name: "basic_constraints", oid: []int{2, 5, 29, 19}},
+	{name: "ext_key_usage", oid: []int{2, 5, 29, 37}},
+	{name: "key_usage", oid: []int{2, 5, 29, 15}},
+	{name: "name_constraints", oid: []int{2, 5, 29, 30}},
+	{name: "subject_alt_name", oid: []int{2, 5, 29, 17}},
+	{name: "subject_key_identifier", oid: []int{2, 5, 29, 14}},
+}
+
+var leafKey, intermediateKey, rootKey *ecdsa.PrivateKey
+
+func init() {
+	leafKey = ecdsaKeyFromPEMOrPanic(leafKeyPEM)
+	intermediateKey = ecdsaKeyFromPEMOrPanic(intermediateKeyPEM)
+	rootKey = ecdsaKeyFromPEMOrPanic(rootKeyPEM)
+}
+
+type templateAndKey struct {
+	template x509.Certificate
+	key      *ecdsa.PrivateKey
+}
+
+func generateCertificateOrPanic(path string, subject, issuer *templateAndKey) {
+	cert, err := x509.CreateCertificate(rand.Reader, &subject.template, &issuer.template, &subject.key.PublicKey, issuer.key)
+	if err != nil {
+		panic(err)
+	}
+	file, err := os.Create(path)
+	if err != nil {
+		panic(err)
+	}
+	defer file.Close()
+	err = pem.Encode(file, &pem.Block{Type: "CERTIFICATE", Bytes: cert})
+	if err != nil {
+		panic(err)
+	}
+}
+
+func main() {
+	notBefore, err := time.Parse(time.RFC3339, "2000-01-01T00:00:00Z")
+	if err != nil {
+		panic(err)
+	}
+	notAfter, err := time.Parse(time.RFC3339, "2100-01-01T00:00:00Z")
+	if err != nil {
+		panic(err)
+	}
+
+	root := templateAndKey{
+		template: x509.Certificate{
+			SerialNumber:          new(big.Int).SetInt64(1),
+			Subject:               pkix.Name{CommonName: "Invalid Extensions Root"},
+			NotBefore:             notBefore,
+			NotAfter:              notAfter,
+			BasicConstraintsValid: true,
+			IsCA:                  true,
+			ExtKeyUsage:           []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
+			KeyUsage:              x509.KeyUsageCertSign,
+			SignatureAlgorithm:    x509.ECDSAWithSHA256,
+		},
+		key: rootKey,
+	}
+	intermediate := templateAndKey{
+		template: x509.Certificate{
+			SerialNumber:          new(big.Int).SetInt64(2),
+			Subject:               pkix.Name{CommonName: "Invalid Extensions Intermediate"},
+			NotBefore:             notBefore,
+			NotAfter:              notAfter,
+			BasicConstraintsValid: true,
+			IsCA:                  true,
+			ExtKeyUsage:           []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
+			KeyUsage:              x509.KeyUsageCertSign,
+			SignatureAlgorithm:    x509.ECDSAWithSHA256,
+		},
+		key: intermediateKey,
+	}
+	leaf := templateAndKey{
+		template: x509.Certificate{
+			SerialNumber:          new(big.Int).SetInt64(3),
+			Subject:               pkix.Name{CommonName: "www.example.com"},
+			NotBefore:             notBefore,
+			NotAfter:              notAfter,
+			BasicConstraintsValid: true,
+			IsCA:                  false,
+			ExtKeyUsage:           []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
+			KeyUsage:              x509.KeyUsageCertSign,
+			SignatureAlgorithm:    x509.ECDSAWithSHA256,
+			DNSNames:              []string{"www.example.com"},
+		},
+		key: leafKey,
+	}
+
+	// Generate a valid certificate chain from the templates.
+	generateCertificateOrPanic("invalid_extension_root.pem", &root, &root)
+	generateCertificateOrPanic("invalid_extension_intermediate.pem", &intermediate, &root)
+	generateCertificateOrPanic("invalid_extension_leaf.pem", &leaf, &intermediate)
+
+	// Make copies of each of the three certificates with invalid extensions.
+	// These copies may be substituted into the valid chain.
+	for _, ext := range extensions {
+		invalidExtension := []pkix.Extension{{Id: ext.oid, Value: []byte("INVALID")}}
+
+		rootInvalid := root
+		rootInvalid.template.ExtraExtensions = invalidExtension
+		generateCertificateOrPanic(fmt.Sprintf("invalid_extension_root_%s.pem", ext.name), &rootInvalid, &rootInvalid)
+
+		intermediateInvalid := intermediate
+		intermediateInvalid.template.ExtraExtensions = invalidExtension
+		generateCertificateOrPanic(fmt.Sprintf("invalid_extension_intermediate_%s.pem", ext.name), &intermediateInvalid, &root)
+
+		leafInvalid := leaf
+		leafInvalid.template.ExtraExtensions = invalidExtension
+		generateCertificateOrPanic(fmt.Sprintf("invalid_extension_leaf_%s.pem", ext.name), &leafInvalid, &intermediate)
+	}
+}
+
+const leafKeyPEM = `-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgoPUXNXuH9mgiS/nk
+024SYxryxMa3CyGJldiHymLxSquhRANCAASRKti8VW2Rkma+Kt9jQkMNitlCs0l5
+w8u3SSwm7HZREvmcBCJBjVIREacRqI0umhzR2V5NLzBBP9yPD/A+Ch5X
+-----END PRIVATE KEY-----`
+
+const intermediateKeyPEM = `-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgWHKCKgY058ahE3t6
+vpxVQgzlycgCVMogwjK0y3XMNfWhRANCAATiOnyojN4xS5C8gJ/PHL5cOEsMbsoE
+Y6KT9xRQSh8lEL4d1Vb36kqUgkpqedEImo0Og4Owk6VWVVR/m4Lk+yUw
+-----END PRIVATE KEY-----`
+
+const rootKeyPEM = `-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgBwND/eHytW0I417J
+Hr+qcPlp5N1jM3ACXys57bPujg+hRANCAAQmdqXYl1GvY7y3jcTTK6MVXIQr44Tq
+ChRYI6IeV9tIB6jIsOY+Qol1bk8x/7A5FGOnUWFVLEAPEPSJwPndjolt
+-----END PRIVATE KEY-----`
+
+func ecdsaKeyFromPEMOrPanic(in string) *ecdsa.PrivateKey {
+	keyBlock, _ := pem.Decode([]byte(in))
+	if keyBlock == nil || keyBlock.Type != "PRIVATE KEY" {
+		panic("could not decode private key")
+	}
+	key, err := x509.ParsePKCS8PrivateKey(keyBlock.Bytes)
+	if err != nil {
+		panic(err)
+	}
+	return key.(*ecdsa.PrivateKey)
+}
diff --git a/src/crypto/x509/make_many_constraints.go b/src/crypto/x509/test/make_many_constraints.go
similarity index 100%
rename from src/crypto/x509/make_many_constraints.go
rename to src/crypto/x509/test/make_many_constraints.go
diff --git a/src/crypto/x509/many_constraints.pem b/src/crypto/x509/test/many_constraints.pem
similarity index 100%
rename from src/crypto/x509/many_constraints.pem
rename to src/crypto/x509/test/many_constraints.pem
diff --git a/src/crypto/x509/many_names1.pem b/src/crypto/x509/test/many_names1.pem
similarity index 100%
rename from src/crypto/x509/many_names1.pem
rename to src/crypto/x509/test/many_names1.pem
diff --git a/src/crypto/x509/many_names2.pem b/src/crypto/x509/test/many_names2.pem
similarity index 100%
rename from src/crypto/x509/many_names2.pem
rename to src/crypto/x509/test/many_names2.pem
diff --git a/src/crypto/x509/many_names3.pem b/src/crypto/x509/test/many_names3.pem
similarity index 100%
rename from src/crypto/x509/many_names3.pem
rename to src/crypto/x509/test/many_names3.pem
diff --git a/src/crypto/x509/some_names1.pem b/src/crypto/x509/test/some_names1.pem
similarity index 100%
rename from src/crypto/x509/some_names1.pem
rename to src/crypto/x509/test/some_names1.pem
diff --git a/src/crypto/x509/some_names2.pem b/src/crypto/x509/test/some_names2.pem
similarity index 100%
rename from src/crypto/x509/some_names2.pem
rename to src/crypto/x509/test/some_names2.pem
diff --git a/src/crypto/x509/some_names3.pem b/src/crypto/x509/test/some_names3.pem
similarity index 100%
rename from src/crypto/x509/some_names3.pem
rename to src/crypto/x509/test/some_names3.pem
diff --git a/src/crypto/x509/x509.c b/src/crypto/x509/x509.c
index 188fd49..9049a35 100644
--- a/src/crypto/x509/x509.c
+++ b/src/crypto/x509/x509.c
@@ -65,73 +65,6 @@
  * it to avoid downstream churn. */
 OPENSSL_DECLARE_ERROR_REASON(X509, UNSUPPORTED_ALGORITHM)
 
-int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, int version,
-                    int ptype, void *pval, uint8_t *penc, int penclen) {
-  uint8_t **ppenc = NULL;
-  if (version >= 0) {
-    if (!ASN1_INTEGER_set(priv->version, version)) {
-      return 0;
-    }
-  }
-
-  if (penc) {
-    int pmtype;
-    ASN1_OCTET_STRING *oct;
-
-    oct = ASN1_OCTET_STRING_new();
-    if (!oct) {
-      return 0;
-    }
-    oct->data = penc;
-    ppenc = &oct->data;
-    oct->length = penclen;
-    if (priv->broken == PKCS8_NO_OCTET) {
-      pmtype = V_ASN1_SEQUENCE;
-    } else {
-      pmtype = V_ASN1_OCTET_STRING;
-    }
-    ASN1_TYPE_set(priv->pkey, pmtype, oct);
-  }
-
-  if (!X509_ALGOR_set0(priv->pkeyalg, aobj, ptype, pval)) {
-    /* If call fails do not swallow 'enc' */
-    if (ppenc) {
-      *ppenc = NULL;
-    }
-    return 0;
-  }
-
-  return 1;
-}
-
-int PKCS8_pkey_get0(ASN1_OBJECT **ppkalg, const uint8_t **pk, int *ppklen,
-                    X509_ALGOR **pa, PKCS8_PRIV_KEY_INFO *p8) {
-  if (ppkalg) {
-    *ppkalg = p8->pkeyalg->algorithm;
-  }
-
-  if (p8->pkey->type == V_ASN1_OCTET_STRING) {
-    p8->broken = PKCS8_OK;
-    if (pk) {
-      *pk = p8->pkey->value.octet_string->data;
-      *ppklen = p8->pkey->value.octet_string->length;
-    }
-  } else if (p8->pkey->type == V_ASN1_SEQUENCE) {
-    p8->broken = PKCS8_NO_OCTET;
-    if (pk) {
-      *pk = p8->pkey->value.sequence->data;
-      *ppklen = p8->pkey->value.sequence->length;
-    }
-  } else {
-    return 0;
-  }
-
-  if (pa) {
-    *pa = p8->pkeyalg;
-  }
-  return 1;
-}
-
 int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent) {
   const uint8_t *s;
   int i, n;
diff --git a/src/crypto/x509/x509_cmp.c b/src/crypto/x509/x509_cmp.c
index 28f2e95..92ed871 100644
--- a/src/crypto/x509/x509_cmp.c
+++ b/src/crypto/x509/x509_cmp.c
@@ -67,6 +67,7 @@
 #include <openssl/x509v3.h>
 
 #include "../internal.h"
+#include "../x509v3/internal.h"
 
 
 int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b)
@@ -130,7 +131,7 @@
     return OPENSSL_memcmp(a->sha1_hash, b->sha1_hash, 20);
 }
 
-X509_NAME *X509_get_issuer_name(X509 *a)
+X509_NAME *X509_get_issuer_name(const X509 *a)
 {
     return (a->cert_info->issuer);
 }
@@ -145,7 +146,7 @@
     return (X509_NAME_hash_old(x->cert_info->issuer));
 }
 
-X509_NAME *X509_get_subject_name(X509 *a)
+X509_NAME *X509_get_subject_name(const X509 *a)
 {
     return (a->cert_info->subject);
 }
@@ -155,6 +156,11 @@
     return (a->cert_info->serialNumber);
 }
 
+const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x509)
+{
+    return x509->cert_info->serialNumber;
+}
+
 unsigned long X509_subject_name_hash(X509 *x)
 {
     return (X509_NAME_hash(x->cert_info->subject));
@@ -175,12 +181,18 @@
  */
 int X509_cmp(const X509 *a, const X509 *b)
 {
-    int rv;
-    /* ensure hash is valid */
-    X509_check_purpose((X509 *)a, -1, 0);
-    X509_check_purpose((X509 *)b, -1, 0);
+    /* Fill in the |sha1_hash| fields.
+     *
+     * TODO(davidben): This may fail, in which case the the hash will be all
+     * zeros. This produces a consistent comparison (failures are sticky), but
+     * not a good one. OpenSSL now returns -2, but this is not a consistent
+     * comparison and may cause misbehaving sorts by transitivity. For now, we
+     * retain the old OpenSSL behavior, which was to ignore the error. See
+     * https://crbug.com/boringssl/355. */
+    x509v3_cache_extensions((X509 *)a);
+    x509v3_cache_extensions((X509 *)b);
 
-    rv = OPENSSL_memcmp(a->sha1_hash, b->sha1_hash, SHA_DIGEST_LENGTH);
+    int rv = OPENSSL_memcmp(a->sha1_hash, b->sha1_hash, SHA_DIGEST_LENGTH);
     if (rv)
         return rv;
     /* Check for match against stored encoding too */
diff --git a/src/crypto/x509/x509_ext.c b/src/crypto/x509/x509_ext.c
index a329f6f..a8f0ab6 100644
--- a/src/crypto/x509/x509_ext.c
+++ b/src/crypto/x509/x509_ext.c
@@ -62,27 +62,28 @@
 #include <openssl/x509.h>
 #include <openssl/x509v3.h>
 
-int X509_CRL_get_ext_count(X509_CRL *x)
+int X509_CRL_get_ext_count(const X509_CRL *x)
 {
     return (X509v3_get_ext_count(x->crl->extensions));
 }
 
-int X509_CRL_get_ext_by_NID(X509_CRL *x, int nid, int lastpos)
+int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos)
 {
     return (X509v3_get_ext_by_NID(x->crl->extensions, nid, lastpos));
 }
 
-int X509_CRL_get_ext_by_OBJ(X509_CRL *x, ASN1_OBJECT *obj, int lastpos)
+int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj,
+                            int lastpos)
 {
     return (X509v3_get_ext_by_OBJ(x->crl->extensions, obj, lastpos));
 }
 
-int X509_CRL_get_ext_by_critical(X509_CRL *x, int crit, int lastpos)
+int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos)
 {
     return (X509v3_get_ext_by_critical(x->crl->extensions, crit, lastpos));
 }
 
-X509_EXTENSION *X509_CRL_get_ext(X509_CRL *x, int loc)
+X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc)
 {
     return (X509v3_get_ext(x->crl->extensions, loc));
 }
@@ -92,7 +93,7 @@
     return (X509v3_delete_ext(x->crl->extensions, loc));
 }
 
-void *X509_CRL_get_ext_d2i(X509_CRL *x, int nid, int *crit, int *idx)
+void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx)
 {
     return X509V3_get_d2i(x->crl->extensions, nid, crit, idx);
 }
@@ -108,28 +109,28 @@
     return (X509v3_add_ext(&(x->crl->extensions), ex, loc) != NULL);
 }
 
-int X509_get_ext_count(X509 *x)
+int X509_get_ext_count(const X509 *x)
 {
     return (X509v3_get_ext_count(x->cert_info->extensions));
 }
 
-int X509_get_ext_by_NID(X509 *x, int nid, int lastpos)
+int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos)
 {
     return (X509v3_get_ext_by_NID(x->cert_info->extensions, nid, lastpos));
 }
 
-int X509_get_ext_by_OBJ(X509 *x, ASN1_OBJECT *obj, int lastpos)
+int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos)
 {
     return (X509v3_get_ext_by_OBJ(x->cert_info->extensions, obj, lastpos));
 }
 
-int X509_get_ext_by_critical(X509 *x, int crit, int lastpos)
+int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos)
 {
     return (X509v3_get_ext_by_critical
             (x->cert_info->extensions, crit, lastpos));
 }
 
-X509_EXTENSION *X509_get_ext(X509 *x, int loc)
+X509_EXTENSION *X509_get_ext(const X509 *x, int loc)
 {
     return (X509v3_get_ext(x->cert_info->extensions, loc));
 }
@@ -144,7 +145,7 @@
     return (X509v3_add_ext(&(x->cert_info->extensions), ex, loc) != NULL);
 }
 
-void *X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx)
+void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx)
 {
     return X509V3_get_d2i(x->cert_info->extensions, nid, crit, idx);
 }
@@ -156,28 +157,29 @@
                            flags);
 }
 
-int X509_REVOKED_get_ext_count(X509_REVOKED *x)
+int X509_REVOKED_get_ext_count(const X509_REVOKED *x)
 {
     return (X509v3_get_ext_count(x->extensions));
 }
 
-int X509_REVOKED_get_ext_by_NID(X509_REVOKED *x, int nid, int lastpos)
+int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos)
 {
     return (X509v3_get_ext_by_NID(x->extensions, nid, lastpos));
 }
 
-int X509_REVOKED_get_ext_by_OBJ(X509_REVOKED *x, ASN1_OBJECT *obj,
+int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj,
                                 int lastpos)
 {
     return (X509v3_get_ext_by_OBJ(x->extensions, obj, lastpos));
 }
 
-int X509_REVOKED_get_ext_by_critical(X509_REVOKED *x, int crit, int lastpos)
+int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit,
+                                     int lastpos)
 {
     return (X509v3_get_ext_by_critical(x->extensions, crit, lastpos));
 }
 
-X509_EXTENSION *X509_REVOKED_get_ext(X509_REVOKED *x, int loc)
+X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc)
 {
     return (X509v3_get_ext(x->extensions, loc));
 }
@@ -192,7 +194,8 @@
     return (X509v3_add_ext(&(x->extensions), ex, loc) != NULL);
 }
 
-void *X509_REVOKED_get_ext_d2i(X509_REVOKED *x, int nid, int *crit, int *idx)
+void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit,
+                               int *idx)
 {
     return X509V3_get_d2i(x->extensions, nid, crit, idx);
 }
diff --git a/src/crypto/x509/x509_obj.c b/src/crypto/x509/x509_obj.c
index 520b7a0..80d16c1 100644
--- a/src/crypto/x509/x509_obj.c
+++ b/src/crypto/x509/x509_obj.c
@@ -73,7 +73,7 @@
 
 #define NAME_ONELINE_MAX    (1024 * 1024)
 
-char *X509_NAME_oneline(X509_NAME *a, char *buf, int len)
+char *X509_NAME_oneline(const X509_NAME *a, char *buf, int len)
 {
     X509_NAME_ENTRY *ne;
     size_t i;
diff --git a/src/crypto/x509/x509_req.c b/src/crypto/x509/x509_req.c
index d918b09..9ab6e9d 100644
--- a/src/crypto/x509/x509_req.c
+++ b/src/crypto/x509/x509_req.c
@@ -107,6 +107,16 @@
     return (NULL);
 }
 
+long X509_REQ_get_version(const X509_REQ *req)
+{
+    return ASN1_INTEGER_get(req->req_info->version);
+}
+
+X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req)
+{
+    return req->req_info->subject;
+}
+
 EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req)
 {
     if ((req == NULL) || (req->req_info == NULL))
diff --git a/src/crypto/x509/x509_set.c b/src/crypto/x509/x509_set.c
index 5242e34..6fd0d63 100644
--- a/src/crypto/x509/x509_set.c
+++ b/src/crypto/x509/x509_set.c
@@ -60,6 +60,16 @@
 #include <openssl/obj.h>
 #include <openssl/x509.h>
 
+long X509_get_version(const X509 *x509)
+{
+    return ASN1_INTEGER_get(x509->cert_info->version);
+}
+
+X509_CINF *X509_get_cert_info(const X509 *x509)
+{
+    return x509->cert_info;
+}
+
 int X509_set_version(X509 *x, long version)
 {
     if (x == NULL)
@@ -107,7 +117,7 @@
     return (X509_NAME_set(&x->cert_info->subject, name));
 }
 
-int X509_set_notBefore(X509 *x, const ASN1_TIME *tm)
+int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm)
 {
     ASN1_TIME *in;
 
@@ -124,6 +134,11 @@
     return (in != NULL);
 }
 
+int X509_set_notBefore(X509 *x, const ASN1_TIME *tm)
+{
+    return X509_set1_notBefore(x, tm);
+}
+
 const ASN1_TIME *X509_get0_notBefore(const X509 *x)
 {
     return x->cert_info->validity->notBefore;
@@ -137,7 +152,15 @@
     return x->cert_info->validity->notBefore;
 }
 
-int X509_set_notAfter(X509 *x, const ASN1_TIME *tm)
+ASN1_TIME *X509_get_notBefore(const X509 *x509)
+{
+    // In OpenSSL, this function is an alias for |X509_getm_notBefore|, but our
+    // |X509_getm_notBefore| is const-correct. |X509_get_notBefore| was
+    // originally a macro, so it needs to capture both get0 and getm use cases.
+    return x509->cert_info->validity->notBefore;
+}
+
+int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm)
 {
     ASN1_TIME *in;
 
@@ -154,6 +177,11 @@
     return (in != NULL);
 }
 
+int X509_set_notAfter(X509 *x, const ASN1_TIME *tm)
+{
+    return X509_set1_notAfter(x, tm);
+}
+
 const ASN1_TIME *X509_get0_notAfter(const X509 *x)
 {
     return x->cert_info->validity->notAfter;
@@ -167,6 +195,25 @@
     return x->cert_info->validity->notAfter;
 }
 
+ASN1_TIME *X509_get_notAfter(const X509 *x509)
+{
+    // In OpenSSL, this function is an alias for |X509_getm_notAfter|, but our
+    // |X509_getm_notAfter| is const-correct. |X509_get_notAfter| was
+    // originally a macro, so it needs to capture both get0 and getm use cases.
+    return x509->cert_info->validity->notAfter;
+}
+
+void X509_get0_uids(const X509 *x509, const ASN1_BIT_STRING **out_issuer_uid,
+                    const ASN1_BIT_STRING **out_subject_uid)
+{
+    if (out_issuer_uid != NULL) {
+        *out_issuer_uid = x509->cert_info->issuerUID;
+    }
+    if (out_subject_uid != NULL) {
+        *out_subject_uid = x509->cert_info->subjectUID;
+    }
+}
+
 int X509_set_pubkey(X509 *x, EVP_PKEY *pkey)
 {
     if ((x == NULL) || (x->cert_info == NULL))
@@ -183,3 +230,18 @@
 {
     return x->cert_info->signature;
 }
+
+void X509_CINF_set_modified(X509_CINF *cinf)
+{
+    cinf->enc.modified = 1;
+}
+
+const X509_ALGOR *X509_CINF_get_signature(const X509_CINF *cinf)
+{
+    return cinf->signature;
+}
+
+X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x509)
+{
+    return x509->cert_info->key;
+}
diff --git a/src/crypto/x509/x509_test.cc b/src/crypto/x509/x509_test.cc
index 521d757..599abf5 100644
--- a/src/crypto/x509/x509_test.cc
+++ b/src/crypto/x509/x509_test.cc
@@ -354,16 +354,16 @@
 // extension.
 static const char kKnownCriticalCRL[] =
     "-----BEGIN X509 CRL-----\n"
-    "MIIBujCBowIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n"
+    "MIIBuDCBoQIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n"
     "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ\n"
-    "Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoCEwHzAKBgNV\n"
-    "HRQEAwIBATARBgNVHRwBAf8EBzAFoQMBAf8wDQYJKoZIhvcNAQELBQADggEBAA+3\n"
-    "i+5e5Ub8sccfgOBs6WVJFI9c8gvJjrJ8/dYfFIAuCyeocs7DFXn1n13CRZ+URR/Q\n"
-    "mVWgU28+xeusuSPYFpd9cyYTcVyNUGNTI3lwgcE/yVjPaOmzSZKdPakApRxtpKKQ\n"
-    "NN/56aQz3bnT/ZSHQNciRB8U6jiD9V30t0w+FDTpGaG+7bzzUH3UVF9xf9Ctp60A\n"
-    "3mfLe0scas7owSt4AEFuj2SPvcE7yvdOXbu+IEv21cEJUVExJAbhvIweHXh6yRW+\n"
-    "7VVeiNzdIjkZjyTmAzoXGha4+wbxXyBRbfH+XWcO/H+8nwyG8Gktdu2QB9S9nnIp\n"
-    "o/1TpfOMSGhMyMoyPrk=\n"
+    "Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoB8wHTAKBgNV\n"
+    "HRQEAwIBATAPBgNVHRwBAf8EBTADgQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAs37Jq\n"
+    "3Htcehm6C2PKXOHekwTqTLOPWsYHfF68kYhdzcopDZBeoKE7jLRkRRGFDaR/tfUs\n"
+    "kwLSDNSQ8EwPb9PT1X8kmFn9QmJgWD6f6BzaH5ZZ9iBUwOcvrydlb/jnjdIZHQxs\n"
+    "fKOAceW5XX3f7DANC3qwYLsQZR/APkfV8nXjPYVUz1kKj04uq/BbQviInjyUYixN\n"
+    "xDx+GDWVVXccehcwAu983kAqP+JDaVQPBVksLuBXz2adrEWwvbLCnZeL3zH1IY9h\n"
+    "6MFO6echpvGbU/H+dRX9UkhdJ7gdwKVD3RjfJl+DRVox9lz8Pbo5H699Tkv9/DQP\n"
+    "9dMWxqhQlv23osLp\n"
     "-----END X509 CRL-----\n";
 
 // kUnknownCriticalCRL is kBasicCRL but with an unknown critical extension.
@@ -385,16 +385,32 @@
 // point extension followed by an unknown critical extension
 static const char kUnknownCriticalCRL2[] =
     "-----BEGIN X509 CRL-----\n"
-    "MIIBzzCBuAIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n"
+    "MIIBzTCBtgIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n"
     "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ\n"
-    "Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoDYwNDAKBgNV\n"
-    "HRQEAwIBATARBgNVHRwBAf8EBzAFoQMBAf8wEwYMKoZIhvcSBAGEtwkAAQH/BAAw\n"
-    "DQYJKoZIhvcNAQELBQADggEBACTcpQC8jXL12JN5YzOcQ64ubQIe0XxRAd30p7qB\n"
-    "BTXGpgqBjrjxRfLms7EBYodEXB2oXMsDq3km0vT1MfYdsDD05S+SQ9CDsq/pUfaC\n"
-    "E2WNI5p8WircRnroYvbN2vkjlRbMd1+yNITohXYXCJwjEOAWOx3XIM10bwPYBv4R\n"
-    "rDobuLHoMgL3yHgMHmAkP7YpkBucNqeBV8cCdeAZLuhXFWi6yfr3r/X18yWbC/r2\n"
-    "2xXdkrSqXLFo7ToyP8YKTgiXpya4x6m53biEYwa2ULlas0igL6DK7wjYZX95Uy7H\n"
-    "GKljn9weIYiMPV/BzGymwfv2EW0preLwtyJNJPaxbdin6Jc=\n"
+    "Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoDQwMjAKBgNV\n"
+    "HRQEAwIBATAPBgNVHRwBAf8EBTADgQH/MBMGDCqGSIb3EgQBhLcJAAEB/wQAMA0G\n"
+    "CSqGSIb3DQEBCwUAA4IBAQBgSogsC5kf2wzr+0hmZtmLXYd0itAiYO0Gh9AyaEOO\n"
+    "myJFuqICHBSLXXUgwNkTUa2x2I/ivyReVFV756VOlWoaV2wJUs0zeCeVBgC9ZFsq\n"
+    "5a+8OGgXwgoYESFV5Y3QRF2a1Ytzfbw/o6xLXzTngvMsLOs12D4B5SkopyEZibF4\n"
+    "tXlRZyvEudTg3CCrjNP+p/GV07nZ3wcMmKJwQeilgzFUV7NaVCCo9jvPBGp0RxAN\n"
+    "KNif7jmjK4hD5mswo/Eq5kxQIc+mTfuUFdgHuAu1hfLYe0YK+Hr4RFf6Qy4hl7Ne\n"
+    "YjqkkSVIcr87u+8AznwdstnQzsyD27Jt7SjVORkYRywi\n"
+    "-----END X509 CRL-----\n";
+
+// kBadExtensionCRL is kBasicCRL but with an incorrectly-encoded issuing
+// distribution point extension.
+static const char kBadExtensionCRL[] =
+    "-----BEGIN X509 CRL-----\n"
+    "MIIBujCBowIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n"
+    "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ\n"
+    "Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoCEwHzAKBgNV\n"
+    "HRQEAwIBATARBgNVHRwBAf8EBzAFoQMBAf8wDQYJKoZIhvcNAQELBQADggEBAA+3\n"
+    "i+5e5Ub8sccfgOBs6WVJFI9c8gvJjrJ8/dYfFIAuCyeocs7DFXn1n13CRZ+URR/Q\n"
+    "mVWgU28+xeusuSPYFpd9cyYTcVyNUGNTI3lwgcE/yVjPaOmzSZKdPakApRxtpKKQ\n"
+    "NN/56aQz3bnT/ZSHQNciRB8U6jiD9V30t0w+FDTpGaG+7bzzUH3UVF9xf9Ctp60A\n"
+    "3mfLe0scas7owSt4AEFuj2SPvcE7yvdOXbu+IEv21cEJUVExJAbhvIweHXh6yRW+\n"
+    "7VVeiNzdIjkZjyTmAzoXGha4+wbxXyBRbfH+XWcO/H+8nwyG8Gktdu2QB9S9nnIp\n"
+    "o/1TpfOMSGhMyMoyPrk=\n"
     "-----END X509 CRL-----\n";
 
 // kEd25519Cert is a self-signed Ed25519 certificate.
@@ -1314,29 +1330,32 @@
   ASSERT_EQ(X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION,
             Verify(leaf.get(), {root.get()}, {root.get()},
                    {unknown_critical_crl2.get()}, X509_V_FLAG_CRL_CHECK));
+
+  // Parsing kBadExtensionCRL should fail.
+  EXPECT_FALSE(CRLFromPEM(kBadExtensionCRL));
 }
 
 TEST(X509Test, ManyNamesAndConstraints) {
-  bssl::UniquePtr<X509> many_constraints(
-      CertFromPEM(GetTestData("crypto/x509/many_constraints.pem").c_str()));
+  bssl::UniquePtr<X509> many_constraints(CertFromPEM(
+      GetTestData("crypto/x509/test/many_constraints.pem").c_str()));
   ASSERT_TRUE(many_constraints);
   bssl::UniquePtr<X509> many_names1(
-      CertFromPEM(GetTestData("crypto/x509/many_names1.pem").c_str()));
+      CertFromPEM(GetTestData("crypto/x509/test/many_names1.pem").c_str()));
   ASSERT_TRUE(many_names1);
   bssl::UniquePtr<X509> many_names2(
-      CertFromPEM(GetTestData("crypto/x509/many_names2.pem").c_str()));
+      CertFromPEM(GetTestData("crypto/x509/test/many_names2.pem").c_str()));
   ASSERT_TRUE(many_names2);
   bssl::UniquePtr<X509> many_names3(
-      CertFromPEM(GetTestData("crypto/x509/many_names3.pem").c_str()));
+      CertFromPEM(GetTestData("crypto/x509/test/many_names3.pem").c_str()));
   ASSERT_TRUE(many_names3);
   bssl::UniquePtr<X509> some_names1(
-      CertFromPEM(GetTestData("crypto/x509/some_names1.pem").c_str()));
+      CertFromPEM(GetTestData("crypto/x509/test/some_names1.pem").c_str()));
   ASSERT_TRUE(some_names1);
   bssl::UniquePtr<X509> some_names2(
-      CertFromPEM(GetTestData("crypto/x509/some_names2.pem").c_str()));
+      CertFromPEM(GetTestData("crypto/x509/test/some_names2.pem").c_str()));
   ASSERT_TRUE(some_names2);
   bssl::UniquePtr<X509> some_names3(
-      CertFromPEM(GetTestData("crypto/x509/some_names3.pem").c_str()));
+      CertFromPEM(GetTestData("crypto/x509/test/some_names3.pem").c_str()));
   ASSERT_TRUE(some_names3);
 
   EXPECT_EQ(X509_V_ERR_UNSPECIFIED,
@@ -2226,3 +2245,243 @@
     EXPECT_EQ(X509_V_OK, verify_cert(leaf));
   }
 }
+
+// Test that invalid extensions are rejected by, if not the parser, at least the
+// verifier.
+TEST(X509Test, InvalidExtensions) {
+  bssl::UniquePtr<X509> root = CertFromPEM(
+      GetTestData("crypto/x509/test/invalid_extension_root.pem").c_str());
+  ASSERT_TRUE(root);
+  bssl::UniquePtr<X509> intermediate = CertFromPEM(
+      GetTestData("crypto/x509/test/invalid_extension_intermediate.pem")
+          .c_str());
+  ASSERT_TRUE(intermediate);
+  bssl::UniquePtr<X509> leaf = CertFromPEM(
+      GetTestData("crypto/x509/test/invalid_extension_leaf.pem").c_str());
+  ASSERT_TRUE(leaf);
+
+  // Sanity-check that the baseline chain is accepted.
+  EXPECT_EQ(X509_V_OK,
+            Verify(leaf.get(), {root.get()}, {intermediate.get()}, {}));
+
+  static const char *kExtensions[] = {
+      "authority_key_identifier",
+      "basic_constraints",
+      "ext_key_usage",
+      "key_usage",
+      "name_constraints",
+      "subject_alt_name",
+      "subject_key_identifier",
+  };
+  for (const char *ext : kExtensions) {
+    SCOPED_TRACE(ext);
+    bssl::UniquePtr<X509> invalid_root = CertFromPEM(
+        GetTestData((std::string("crypto/x509/test/invalid_extension_root_") +
+                     ext + ".pem")
+                        .c_str())
+            .c_str());
+    ASSERT_TRUE(invalid_root);
+
+    bssl::UniquePtr<X509> invalid_intermediate = CertFromPEM(
+        GetTestData(
+            (std::string("crypto/x509/test/invalid_extension_intermediate_") +
+             ext + ".pem")
+                .c_str())
+            .c_str());
+    ASSERT_TRUE(invalid_intermediate);
+
+    bssl::UniquePtr<X509> invalid_leaf = CertFromPEM(
+        GetTestData((std::string("crypto/x509/test/invalid_extension_leaf_") +
+                     ext + ".pem")
+                        .c_str())
+            .c_str());
+    ASSERT_TRUE(invalid_leaf);
+
+    EXPECT_EQ(
+        X509_V_ERR_INVALID_EXTENSION,
+        Verify(invalid_leaf.get(), {root.get()}, {intermediate.get()}, {}));
+
+    // If the invalid extension is on an intermediate or root,
+    // |X509_verify_cert| notices by way of being unable to build a path to
+    // a valid issuer.
+    EXPECT_EQ(
+        X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY,
+        Verify(leaf.get(), {root.get()}, {invalid_intermediate.get()}, {}));
+    EXPECT_EQ(
+        X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY,
+        Verify(leaf.get(), {invalid_root.get()}, {intermediate.get()}, {}));
+  }
+}
+
+// kExplicitDefaultVersionPEM is an X.509v1 certificate with the version number
+// encoded explicitly, rather than omitted as required by DER.
+static const char kExplicitDefaultVersionPEM[] =
+    "-----BEGIN CERTIFICATE-----\n"
+    "MIIBfTCCASSgAwIBAAIJANlMBNpJfb/rMAkGByqGSM49BAEwRTELMAkGA1UEBhMC\n"
+    "QVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdp\n"
+    "dHMgUHR5IEx0ZDAeFw0xNDA0MjMyMzIxNTdaFw0xNDA1MjMyMzIxNTdaMEUxCzAJ\n"
+    "BgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5l\n"
+    "dCBXaWRnaXRzIFB0eSBMdGQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATmK2ni\n"
+    "v2Wfl74vHg2UikzVl2u3qR4NRvvdqakendy6WgHn1peoChj5w8SjHlbifINI2xYa\n"
+    "HPUdfvGULUvPciLBMAkGByqGSM49BAEDSAAwRQIhAPKgNV5ROjbDgnmb7idQhY5w\n"
+    "BnSVV9IpdAD0vhWHXcQHAiB8HnkUaiGD8Hp0aHlfFJmaaLTxy54VXuYfMlJhXnXJ\n"
+    "FA==\n"
+    "-----END CERTIFICATE-----\n";
+
+// kNegativeVersionPEM is an X.509 certificate with a negative version number.
+static const char kNegativeVersionPEM[] =
+    "-----BEGIN CERTIFICATE-----\n"
+    "MIIBfTCCASSgAwIB/wIJANlMBNpJfb/rMAkGByqGSM49BAEwRTELMAkGA1UEBhMC\n"
+    "QVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdp\n"
+    "dHMgUHR5IEx0ZDAeFw0xNDA0MjMyMzIxNTdaFw0xNDA1MjMyMzIxNTdaMEUxCzAJ\n"
+    "BgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5l\n"
+    "dCBXaWRnaXRzIFB0eSBMdGQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATmK2ni\n"
+    "v2Wfl74vHg2UikzVl2u3qR4NRvvdqakendy6WgHn1peoChj5w8SjHlbifINI2xYa\n"
+    "HPUdfvGULUvPciLBMAkGByqGSM49BAEDSAAwRQIhAPKgNV5ROjbDgnmb7idQhY5w\n"
+    "BnSVV9IpdAD0vhWHXcQHAiB8HnkUaiGD8Hp0aHlfFJmaaLTxy54VXuYfMlJhXnXJ\n"
+    "FA==\n"
+    "-----END CERTIFICATE-----\n";
+
+// kFutureVersionPEM is an X.509 certificate with a version number value of
+// three, which is not defined. (v3 has value two).
+static const char kFutureVersionPEM[] =
+    "-----BEGIN CERTIFICATE-----\n"
+    "MIIBfTCCASSgAwIBAwIJANlMBNpJfb/rMAkGByqGSM49BAEwRTELMAkGA1UEBhMC\n"
+    "QVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdp\n"
+    "dHMgUHR5IEx0ZDAeFw0xNDA0MjMyMzIxNTdaFw0xNDA1MjMyMzIxNTdaMEUxCzAJ\n"
+    "BgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5l\n"
+    "dCBXaWRnaXRzIFB0eSBMdGQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATmK2ni\n"
+    "v2Wfl74vHg2UikzVl2u3qR4NRvvdqakendy6WgHn1peoChj5w8SjHlbifINI2xYa\n"
+    "HPUdfvGULUvPciLBMAkGByqGSM49BAEDSAAwRQIhAPKgNV5ROjbDgnmb7idQhY5w\n"
+    "BnSVV9IpdAD0vhWHXcQHAiB8HnkUaiGD8Hp0aHlfFJmaaLTxy54VXuYfMlJhXnXJ\n"
+    "FA==\n"
+    "-----END CERTIFICATE-----\n";
+
+// kOverflowVersionPEM is an X.509 certificate with a version field which
+// overflows |uint64_t|.
+static const char kOverflowVersionPEM[] =
+    "-----BEGIN CERTIFICATE-----\n"
+    "MIIBoDCCAUegJgIkAP//////////////////////////////////////////////\n"
+    "AgkA2UwE2kl9v+swCQYHKoZIzj0EATBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwK\n"
+    "U29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMB4X\n"
+    "DTE0MDQyMzIzMjE1N1oXDTE0MDUyMzIzMjE1N1owRTELMAkGA1UEBhMCQVUxEzAR\n"
+    "BgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5\n"
+    "IEx0ZDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOYraeK/ZZ+Xvi8eDZSKTNWX\n"
+    "a7epHg1G+92pqR6d3LpaAefWl6gKGPnDxKMeVuJ8g0jbFhoc9R1+8ZQtS89yIsEw\n"
+    "CQYHKoZIzj0EAQNIADBFAiEA8qA1XlE6NsOCeZvuJ1CFjnAGdJVX0il0APS+FYdd\n"
+    "xAcCIHweeRRqIYPwenRoeV8UmZpotPHLnhVe5h8yUmFedckU\n"
+    "-----END CERTIFICATE-----\n";
+
+// kV1WithExtensionsPEM is an X.509v1 certificate with extensions.
+static const char kV1WithExtensionsPEM[] =
+    "-----BEGIN CERTIFICATE-----\n"
+    "MIIByjCCAXECCQDZTATaSX2/6zAJBgcqhkjOPQQBMEUxCzAJBgNVBAYTAkFVMRMw\n"
+    "EQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0\n"
+    "eSBMdGQwHhcNMTQwNDIzMjMyMTU3WhcNMTQwNTIzMjMyMTU3WjBFMQswCQYDVQQG\n"
+    "EwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lk\n"
+    "Z2l0cyBQdHkgTHRkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5itp4r9ln5e+\n"
+    "Lx4NlIpM1Zdrt6keDUb73ampHp3culoB59aXqAoY+cPEox5W4nyDSNsWGhz1HX7x\n"
+    "lC1Lz3IiwaNQME4wHQYDVR0OBBYEFKuE0qyrlfCCThZ4B1VXX+QmjYLRMB8GA1Ud\n"
+    "IwQYMBaAFKuE0qyrlfCCThZ4B1VXX+QmjYLRMAwGA1UdEwQFMAMBAf8wCQYHKoZI\n"
+    "zj0EAQNIADBFAiEA8qA1XlE6NsOCeZvuJ1CFjnAGdJVX0il0APS+FYddxAcCIHwe\n"
+    "eRRqIYPwenRoeV8UmZpotPHLnhVe5h8yUmFedckU\n"
+    "-----END CERTIFICATE-----\n";
+
+// kV2WithExtensionsPEM is an X.509v2 certificate with extensions.
+static const char kV2WithExtensionsPEM[] =
+    "-----BEGIN CERTIFICATE-----\n"
+    "MIIBzzCCAXagAwIBAQIJANlMBNpJfb/rMAkGByqGSM49BAEwRTELMAkGA1UEBhMC\n"
+    "QVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdp\n"
+    "dHMgUHR5IEx0ZDAeFw0xNDA0MjMyMzIxNTdaFw0xNDA1MjMyMzIxNTdaMEUxCzAJ\n"
+    "BgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5l\n"
+    "dCBXaWRnaXRzIFB0eSBMdGQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATmK2ni\n"
+    "v2Wfl74vHg2UikzVl2u3qR4NRvvdqakendy6WgHn1peoChj5w8SjHlbifINI2xYa\n"
+    "HPUdfvGULUvPciLBo1AwTjAdBgNVHQ4EFgQUq4TSrKuV8IJOFngHVVdf5CaNgtEw\n"
+    "HwYDVR0jBBgwFoAUq4TSrKuV8IJOFngHVVdf5CaNgtEwDAYDVR0TBAUwAwEB/zAJ\n"
+    "BgcqhkjOPQQBA0gAMEUCIQDyoDVeUTo2w4J5m+4nUIWOcAZ0lVfSKXQA9L4Vh13E\n"
+    "BwIgfB55FGohg/B6dGh5XxSZmmi08cueFV7mHzJSYV51yRQ=\n"
+    "-----END CERTIFICATE-----\n";
+
+// kV1WithIssuerUniqueIDPEM is an X.509v1 certificate with an issuerUniqueID.
+static const char kV1WithIssuerUniqueIDPEM[] =
+    "-----BEGIN CERTIFICATE-----\n"
+    "MIIBgzCCASoCCQDZTATaSX2/6zAJBgcqhkjOPQQBMEUxCzAJBgNVBAYTAkFVMRMw\n"
+    "EQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0\n"
+    "eSBMdGQwHhcNMTQwNDIzMjMyMTU3WhcNMTQwNTIzMjMyMTU3WjBFMQswCQYDVQQG\n"
+    "EwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lk\n"
+    "Z2l0cyBQdHkgTHRkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5itp4r9ln5e+\n"
+    "Lx4NlIpM1Zdrt6keDUb73ampHp3culoB59aXqAoY+cPEox5W4nyDSNsWGhz1HX7x\n"
+    "lC1Lz3IiwYEJAAEjRWeJq83vMAkGByqGSM49BAEDSAAwRQIhAPKgNV5ROjbDgnmb\n"
+    "7idQhY5wBnSVV9IpdAD0vhWHXcQHAiB8HnkUaiGD8Hp0aHlfFJmaaLTxy54VXuYf\n"
+    "MlJhXnXJFA==\n"
+    "-----END CERTIFICATE-----\n";
+
+// kV1WithSubjectUniqueIDPEM is an X.509v1 certificate with an issuerUniqueID.
+static const char kV1WithSubjectUniqueIDPEM[] =
+    "-----BEGIN CERTIFICATE-----\n"
+    "MIIBgzCCASoCCQDZTATaSX2/6zAJBgcqhkjOPQQBMEUxCzAJBgNVBAYTAkFVMRMw\n"
+    "EQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0\n"
+    "eSBMdGQwHhcNMTQwNDIzMjMyMTU3WhcNMTQwNTIzMjMyMTU3WjBFMQswCQYDVQQG\n"
+    "EwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lk\n"
+    "Z2l0cyBQdHkgTHRkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5itp4r9ln5e+\n"
+    "Lx4NlIpM1Zdrt6keDUb73ampHp3culoB59aXqAoY+cPEox5W4nyDSNsWGhz1HX7x\n"
+    "lC1Lz3IiwYIJAAEjRWeJq83vMAkGByqGSM49BAEDSAAwRQIhAPKgNV5ROjbDgnmb\n"
+    "7idQhY5wBnSVV9IpdAD0vhWHXcQHAiB8HnkUaiGD8Hp0aHlfFJmaaLTxy54VXuYf\n"
+    "MlJhXnXJFA==\n"
+    "-----END CERTIFICATE-----\n";
+
+// Test that the X.509 parser enforces versions are valid and match the fields
+// present.
+TEST(X509Test, InvalidVersion) {
+  // kExplicitDefaultVersionPEM is invalid but, for now, we accept it. See
+  // https://crbug.com/boringssl/364.
+  EXPECT_TRUE(CertFromPEM(kExplicitDefaultVersionPEM));
+
+  EXPECT_FALSE(CertFromPEM(kNegativeVersionPEM));
+  EXPECT_FALSE(CertFromPEM(kFutureVersionPEM));
+  EXPECT_FALSE(CertFromPEM(kOverflowVersionPEM));
+  EXPECT_FALSE(CertFromPEM(kV1WithExtensionsPEM));
+  EXPECT_FALSE(CertFromPEM(kV2WithExtensionsPEM));
+  EXPECT_FALSE(CertFromPEM(kV1WithIssuerUniqueIDPEM));
+  EXPECT_FALSE(CertFromPEM(kV1WithSubjectUniqueIDPEM));
+}
+
+// Unlike upstream OpenSSL, we require a non-null store in
+// |X509_STORE_CTX_init|.
+TEST(X509Test, NullStore) {
+  bssl::UniquePtr<X509> leaf(CertFromPEM(kLeafPEM));
+  ASSERT_TRUE(leaf);
+  bssl::UniquePtr<X509_STORE_CTX> ctx(X509_STORE_CTX_new());
+  ASSERT_TRUE(ctx);
+  EXPECT_FALSE(X509_STORE_CTX_init(ctx.get(), nullptr, leaf.get(), nullptr));
+}
+
+TEST(X509Test, BasicConstraints) {
+  const uint32_t kFlagMask = EXFLAG_CA | EXFLAG_BCONS | EXFLAG_INVALID;
+
+  static const struct {
+    const char *file;
+    uint32_t flags;
+    int path_len;
+  } kTests[] = {
+      {"basic_constraints_none.pem", 0, -1},
+      {"basic_constraints_ca.pem", EXFLAG_CA | EXFLAG_BCONS, -1},
+      {"basic_constraints_ca_pathlen_0.pem", EXFLAG_CA | EXFLAG_BCONS, 0},
+      {"basic_constraints_ca_pathlen_1.pem", EXFLAG_CA | EXFLAG_BCONS, 1},
+      {"basic_constraints_ca_pathlen_10.pem", EXFLAG_CA | EXFLAG_BCONS, 10},
+      {"basic_constraints_leaf.pem", EXFLAG_BCONS, -1},
+      {"invalid_extension_leaf_basic_constraints.pem", EXFLAG_INVALID, -1},
+  };
+
+  for (const auto &test : kTests) {
+    SCOPED_TRACE(test.file);
+
+    std::string path = "crypto/x509/test/";
+    path += test.file;
+
+    bssl::UniquePtr<X509> cert = CertFromPEM(GetTestData(path.c_str()).c_str());
+    ASSERT_TRUE(cert);
+    EXPECT_EQ(test.flags, X509_get_extension_flags(cert.get()) & kFlagMask);
+    EXPECT_EQ(test.path_len, X509_get_pathlen(cert.get()));
+  }
+}
diff --git a/src/crypto/x509/x509_trs.c b/src/crypto/x509/x509_trs.c
index 18ac883..d3002e8 100644
--- a/src/crypto/x509/x509_trs.c
+++ b/src/crypto/x509/x509_trs.c
@@ -59,6 +59,8 @@
 #include <openssl/obj.h>
 #include <openssl/x509v3.h>
 
+#include "../x509v3/internal.h"
+
 static int tr_cmp(const X509_TRUST **a, const X509_TRUST **b);
 static void trtable_free(X509_TRUST *p);
 
@@ -258,17 +260,17 @@
     trtable = NULL;
 }
 
-int X509_TRUST_get_flags(X509_TRUST *xp)
+int X509_TRUST_get_flags(const X509_TRUST *xp)
 {
     return xp->flags;
 }
 
-char *X509_TRUST_get0_name(X509_TRUST *xp)
+char *X509_TRUST_get0_name(const X509_TRUST *xp)
 {
     return xp->name;
 }
 
-int X509_TRUST_get_trust(X509_TRUST *xp)
+int X509_TRUST_get_trust(const X509_TRUST *xp)
 {
     return xp->trust;
 }
@@ -293,7 +295,8 @@
 
 static int trust_compat(X509_TRUST *trust, X509 *x, int flags)
 {
-    X509_check_purpose(x, -1, 0);
+    if (!x509v3_cache_extensions(x))
+        return X509_TRUST_UNTRUSTED;
     if (x->ex_flags & EXFLAG_SS)
         return X509_TRUST_TRUSTED;
     else
diff --git a/src/crypto/x509/x509_txt.c b/src/crypto/x509/x509_txt.c
index 8e6ac27..17e14a6 100644
--- a/src/crypto/x509/x509_txt.c
+++ b/src/crypto/x509/x509_txt.c
@@ -56,144 +56,144 @@
 
 #include <openssl/x509.h>
 
-const char *X509_verify_cert_error_string(long n)
+const char *X509_verify_cert_error_string(long err)
 {
-    switch ((int)n) {
+    switch (err) {
     case X509_V_OK:
-        return ("ok");
+        return "ok";
     case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
-        return ("unable to get issuer certificate");
+        return "unable to get issuer certificate";
     case X509_V_ERR_UNABLE_TO_GET_CRL:
-        return ("unable to get certificate CRL");
+        return "unable to get certificate CRL";
     case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE:
-        return ("unable to decrypt certificate's signature");
+        return "unable to decrypt certificate's signature";
     case X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE:
-        return ("unable to decrypt CRL's signature");
+        return "unable to decrypt CRL's signature";
     case X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY:
-        return ("unable to decode issuer public key");
+        return "unable to decode issuer public key";
     case X509_V_ERR_CERT_SIGNATURE_FAILURE:
-        return ("certificate signature failure");
+        return "certificate signature failure";
     case X509_V_ERR_CRL_SIGNATURE_FAILURE:
-        return ("CRL signature failure");
+        return "CRL signature failure";
     case X509_V_ERR_CERT_NOT_YET_VALID:
-        return ("certificate is not yet valid");
+        return "certificate is not yet valid";
     case X509_V_ERR_CRL_NOT_YET_VALID:
-        return ("CRL is not yet valid");
+        return "CRL is not yet valid";
     case X509_V_ERR_CERT_HAS_EXPIRED:
-        return ("certificate has expired");
+        return "certificate has expired";
     case X509_V_ERR_CRL_HAS_EXPIRED:
-        return ("CRL has expired");
+        return "CRL has expired";
     case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
-        return ("format error in certificate's notBefore field");
+        return "format error in certificate's notBefore field";
     case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
-        return ("format error in certificate's notAfter field");
+        return "format error in certificate's notAfter field";
     case X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD:
-        return ("format error in CRL's lastUpdate field");
+        return "format error in CRL's lastUpdate field";
     case X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD:
-        return ("format error in CRL's nextUpdate field");
+        return "format error in CRL's nextUpdate field";
     case X509_V_ERR_OUT_OF_MEM:
-        return ("out of memory");
+        return "out of memory";
     case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
-        return ("self signed certificate");
+        return "self signed certificate";
     case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:
-        return ("self signed certificate in certificate chain");
+        return "self signed certificate in certificate chain";
     case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
-        return ("unable to get local issuer certificate");
+        return "unable to get local issuer certificate";
     case X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE:
-        return ("unable to verify the first certificate");
+        return "unable to verify the first certificate";
     case X509_V_ERR_CERT_CHAIN_TOO_LONG:
-        return ("certificate chain too long");
+        return "certificate chain too long";
     case X509_V_ERR_CERT_REVOKED:
-        return ("certificate revoked");
+        return "certificate revoked";
     case X509_V_ERR_INVALID_CA:
-        return ("invalid CA certificate");
+        return "invalid CA certificate";
     case X509_V_ERR_INVALID_NON_CA:
-        return ("invalid non-CA certificate (has CA markings)");
+        return "invalid non-CA certificate (has CA markings)";
     case X509_V_ERR_PATH_LENGTH_EXCEEDED:
-        return ("path length constraint exceeded");
+        return "path length constraint exceeded";
     case X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED:
-        return ("proxy path length constraint exceeded");
+        return "proxy path length constraint exceeded";
     case X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED:
         return
-            ("proxy certificates not allowed, please set the appropriate flag");
+            "proxy certificates not allowed, please set the appropriate flag";
     case X509_V_ERR_INVALID_PURPOSE:
-        return ("unsupported certificate purpose");
+        return "unsupported certificate purpose";
     case X509_V_ERR_CERT_UNTRUSTED:
-        return ("certificate not trusted");
+        return "certificate not trusted";
     case X509_V_ERR_CERT_REJECTED:
-        return ("certificate rejected");
+        return "certificate rejected";
     case X509_V_ERR_APPLICATION_VERIFICATION:
-        return ("application verification failure");
+        return "application verification failure";
     case X509_V_ERR_SUBJECT_ISSUER_MISMATCH:
-        return ("subject issuer mismatch");
+        return "subject issuer mismatch";
     case X509_V_ERR_AKID_SKID_MISMATCH:
-        return ("authority and subject key identifier mismatch");
+        return "authority and subject key identifier mismatch";
     case X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH:
-        return ("authority and issuer serial number mismatch");
+        return "authority and issuer serial number mismatch";
     case X509_V_ERR_KEYUSAGE_NO_CERTSIGN:
-        return ("key usage does not include certificate signing");
+        return "key usage does not include certificate signing";
     case X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER:
-        return ("unable to get CRL issuer certificate");
+        return "unable to get CRL issuer certificate";
     case X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION:
-        return ("unhandled critical extension");
+        return "unhandled critical extension";
     case X509_V_ERR_KEYUSAGE_NO_CRL_SIGN:
-        return ("key usage does not include CRL signing");
+        return "key usage does not include CRL signing";
     case X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE:
-        return ("key usage does not include digital signature");
+        return "key usage does not include digital signature";
     case X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION:
-        return ("unhandled critical CRL extension");
+        return "unhandled critical CRL extension";
     case X509_V_ERR_INVALID_EXTENSION:
-        return ("invalid or inconsistent certificate extension");
+        return "invalid or inconsistent certificate extension";
     case X509_V_ERR_INVALID_POLICY_EXTENSION:
-        return ("invalid or inconsistent certificate policy extension");
+        return "invalid or inconsistent certificate policy extension";
     case X509_V_ERR_NO_EXPLICIT_POLICY:
-        return ("no explicit policy");
+        return "no explicit policy";
     case X509_V_ERR_DIFFERENT_CRL_SCOPE:
-        return ("Different CRL scope");
+        return "Different CRL scope";
     case X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE:
-        return ("Unsupported extension feature");
+        return "Unsupported extension feature";
     case X509_V_ERR_UNNESTED_RESOURCE:
-        return ("RFC 3779 resource not subset of parent's resources");
+        return "RFC 3779 resource not subset of parent's resources";
 
     case X509_V_ERR_PERMITTED_VIOLATION:
-        return ("permitted subtree violation");
+        return "permitted subtree violation";
     case X509_V_ERR_EXCLUDED_VIOLATION:
-        return ("excluded subtree violation");
+        return "excluded subtree violation";
     case X509_V_ERR_SUBTREE_MINMAX:
-        return ("name constraints minimum and maximum not supported");
+        return "name constraints minimum and maximum not supported";
     case X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE:
-        return ("unsupported name constraint type");
+        return "unsupported name constraint type";
     case X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX:
-        return ("unsupported or invalid name constraint syntax");
+        return "unsupported or invalid name constraint syntax";
     case X509_V_ERR_UNSUPPORTED_NAME_SYNTAX:
-        return ("unsupported or invalid name syntax");
+        return "unsupported or invalid name syntax";
     case X509_V_ERR_CRL_PATH_VALIDATION_ERROR:
-        return ("CRL path validation error");
+        return "CRL path validation error";
 
     case X509_V_ERR_SUITE_B_INVALID_VERSION:
-        return ("Suite B: certificate version invalid");
+        return "Suite B: certificate version invalid";
     case X509_V_ERR_SUITE_B_INVALID_ALGORITHM:
-        return ("Suite B: invalid public key algorithm");
+        return "Suite B: invalid public key algorithm";
     case X509_V_ERR_SUITE_B_INVALID_CURVE:
-        return ("Suite B: invalid ECC curve");
+        return "Suite B: invalid ECC curve";
     case X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM:
-        return ("Suite B: invalid signature algorithm");
+        return "Suite B: invalid signature algorithm";
     case X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED:
-        return ("Suite B: curve not allowed for this LOS");
+        return "Suite B: curve not allowed for this LOS";
     case X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256:
-        return ("Suite B: cannot sign P-384 with P-256");
+        return "Suite B: cannot sign P-384 with P-256";
 
     case X509_V_ERR_HOSTNAME_MISMATCH:
-        return ("Hostname mismatch");
+        return "Hostname mismatch";
     case X509_V_ERR_EMAIL_MISMATCH:
-        return ("Email address mismatch");
+        return "Email address mismatch";
     case X509_V_ERR_IP_ADDRESS_MISMATCH:
-        return ("IP address mismatch");
+        return "IP address mismatch";
 
     case X509_V_ERR_INVALID_CALL:
-        return ("Invalid certificate verification context");
+        return "Invalid certificate verification context";
     case X509_V_ERR_STORE_LOOKUP:
-        return ("Issuer certificate lookup error");
+        return "Issuer certificate lookup error";
 
     case X509_V_ERR_NAME_CONSTRAINTS_WITHOUT_SANS:
         return "Issuer has name constraints but leaf has no SANs";
diff --git a/src/crypto/x509/x509_v3.c b/src/crypto/x509/x509_v3.c
index ecbc0dd..7cfd6e9 100644
--- a/src/crypto/x509/x509_v3.c
+++ b/src/crypto/x509/x509_v3.c
@@ -181,7 +181,7 @@
 
 X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, int nid,
                                              int crit,
-                                             ASN1_OCTET_STRING *data)
+                                             const ASN1_OCTET_STRING *data)
 {
     const ASN1_OBJECT *obj;
     X509_EXTENSION *ret;
@@ -197,7 +197,7 @@
 
 X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex,
                                              const ASN1_OBJECT *obj, int crit,
-                                             ASN1_OCTET_STRING *data)
+                                             const ASN1_OCTET_STRING *data)
 {
     X509_EXTENSION *ret;
 
@@ -242,7 +242,7 @@
     return (1);
 }
 
-int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data)
+int X509_EXTENSION_set_data(X509_EXTENSION *ex, const ASN1_OCTET_STRING *data)
 {
     int i;
 
diff --git a/src/crypto/x509/x509_vfy.c b/src/crypto/x509/x509_vfy.c
index 23bbeb5..a997202 100644
--- a/src/crypto/x509/x509_vfy.c
+++ b/src/crypto/x509/x509_vfy.c
@@ -146,14 +146,16 @@
     return ok;
 }
 
-/* Return 1 is a certificate is self signed */
-static int cert_self_signed(X509 *x)
+/* cert_self_signed checks if |x| is self-signed. If |x| is valid, it returns
+ * one and sets |*out_is_self_signed| to the result. If |x| is invalid, it
+ * returns zero. */
+static int cert_self_signed(X509 *x, int *out_is_self_signed)
 {
-    X509_check_purpose(x, -1, 0);
-    if (x->ex_flags & EXFLAG_SS)
-        return 1;
-    else
+    if (!x509v3_cache_extensions(x)) {
         return 0;
+    }
+    *out_is_self_signed = (x->ex_flags & EXFLAG_SS) != 0;
+    return 1;
 }
 
 /* Given a certificate try and find an exact match in the store */
@@ -263,8 +265,14 @@
                                  * X509_V_ERR_CERT_CHAIN_TOO_LONG error code
                                  * later. */
 
+        int is_self_signed;
+        if (!cert_self_signed(x, &is_self_signed)) {
+            ctx->error = X509_V_ERR_INVALID_EXTENSION;
+            goto end;
+        }
+
         /* If we are self signed, we break */
-        if (cert_self_signed(x))
+        if (is_self_signed)
             break;
         /*
          * If asked see if we can find issuer in trusted store first
@@ -323,7 +331,14 @@
          */
         i = sk_X509_num(ctx->chain);
         x = sk_X509_value(ctx->chain, i - 1);
-        if (cert_self_signed(x)) {
+
+        int is_self_signed;
+        if (!cert_self_signed(x, &is_self_signed)) {
+            ctx->error = X509_V_ERR_INVALID_EXTENSION;
+            goto end;
+        }
+
+        if (is_self_signed) {
             /* we have a self signed certificate */
             if (sk_X509_num(ctx->chain) == 1) {
                 /*
@@ -368,8 +383,12 @@
             /* If we have enough, we break */
             if (depth < num)
                 break;
+            if (!cert_self_signed(x, &is_self_signed)) {
+                ctx->error = X509_V_ERR_INVALID_EXTENSION;
+                goto end;
+            }
             /* If we are self signed, we break */
-            if (cert_self_signed(x))
+            if (is_self_signed)
                 break;
             ok = ctx->get_issuer(&xtmp, ctx, x);
 
@@ -1018,7 +1037,7 @@
     else
         ptime = NULL;
 
-    i = X509_cmp_time(X509_CRL_get_lastUpdate(crl), ptime);
+    i = X509_cmp_time(X509_CRL_get0_lastUpdate(crl), ptime);
     if (i == 0) {
         if (!notify)
             return 0;
@@ -1035,8 +1054,8 @@
             return 0;
     }
 
-    if (X509_CRL_get_nextUpdate(crl)) {
-        i = X509_cmp_time(X509_CRL_get_nextUpdate(crl), ptime);
+    if (X509_CRL_get0_nextUpdate(crl)) {
+        i = X509_cmp_time(X509_CRL_get0_nextUpdate(crl), ptime);
 
         if (i == 0) {
             if (!notify)
@@ -1081,8 +1100,8 @@
         /* If current CRL is equivalent use it if it is newer */
         if (crl_score == best_score && best_crl != NULL) {
             int day, sec;
-            if (ASN1_TIME_diff(&day, &sec, X509_CRL_get_lastUpdate(best_crl),
-                               X509_CRL_get_lastUpdate(crl)) == 0)
+            if (ASN1_TIME_diff(&day, &sec, X509_CRL_get0_lastUpdate(best_crl),
+                               X509_CRL_get0_lastUpdate(crl)) == 0)
                 continue;
             /*
              * ASN1_TIME_diff never returns inconsistent signs for |day|
@@ -2039,9 +2058,9 @@
     if (!X509_CRL_set_issuer_name(crl, X509_CRL_get_issuer(newer)))
         goto memerr;
 
-    if (!X509_CRL_set_lastUpdate(crl, X509_CRL_get_lastUpdate(newer)))
+    if (!X509_CRL_set1_lastUpdate(crl, X509_CRL_get0_lastUpdate(newer)))
         goto memerr;
-    if (!X509_CRL_set_nextUpdate(crl, X509_CRL_get_nextUpdate(newer)))
+    if (!X509_CRL_set1_nextUpdate(crl, X509_CRL_get0_nextUpdate(newer)))
         goto memerr;
 
     /* Set base CRL number: must be critical */
@@ -2148,6 +2167,11 @@
     return ctx->chain;
 }
 
+STACK_OF(X509) *X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx)
+{
+    return ctx->chain;
+}
+
 STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx)
 {
     if (!ctx->chain)
@@ -2283,8 +2307,6 @@
 int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, X509 *x509,
                         STACK_OF(X509) *chain)
 {
-    int ret = 1;
-
     X509_STORE_CTX_zero(ctx);
     ctx->ctx = store;
     ctx->cert = x509;
@@ -2292,78 +2314,74 @@
 
     CRYPTO_new_ex_data(&ctx->ex_data);
 
+    if (store == NULL) {
+        OPENSSL_PUT_ERROR(X509, ERR_R_PASSED_NULL_PARAMETER);
+        goto err;
+    }
+
     ctx->param = X509_VERIFY_PARAM_new();
     if (!ctx->param)
         goto err;
 
     /*
-     * Inherit callbacks and flags from X509_STORE if not set use defaults.
+     * Inherit callbacks and flags from X509_STORE.
      */
 
-    if (store)
-        ret = X509_VERIFY_PARAM_inherit(ctx->param, store->param);
-    else
-        ctx->param->inh_flags |= X509_VP_FLAG_DEFAULT | X509_VP_FLAG_ONCE;
+    ctx->verify_cb = store->verify_cb;
+    ctx->cleanup = store->cleanup;
 
-    if (store) {
-        ctx->verify_cb = store->verify_cb;
-        ctx->cleanup = store->cleanup;
-    } else
-        ctx->cleanup = 0;
-
-    if (ret)
-        ret = X509_VERIFY_PARAM_inherit(ctx->param,
-                                        X509_VERIFY_PARAM_lookup("default"));
-
-    if (ret == 0)
+    if (!X509_VERIFY_PARAM_inherit(ctx->param, store->param) ||
+        !X509_VERIFY_PARAM_inherit(ctx->param,
+                                   X509_VERIFY_PARAM_lookup("default"))) {
         goto err;
+    }
 
-    if (store && store->check_issued)
+    if (store->check_issued)
         ctx->check_issued = store->check_issued;
     else
         ctx->check_issued = check_issued;
 
-    if (store && store->get_issuer)
+    if (store->get_issuer)
         ctx->get_issuer = store->get_issuer;
     else
         ctx->get_issuer = X509_STORE_CTX_get1_issuer;
 
-    if (store && store->verify_cb)
+    if (store->verify_cb)
         ctx->verify_cb = store->verify_cb;
     else
         ctx->verify_cb = null_callback;
 
-    if (store && store->verify)
+    if (store->verify)
         ctx->verify = store->verify;
     else
         ctx->verify = internal_verify;
 
-    if (store && store->check_revocation)
+    if (store->check_revocation)
         ctx->check_revocation = store->check_revocation;
     else
         ctx->check_revocation = check_revocation;
 
-    if (store && store->get_crl)
+    if (store->get_crl)
         ctx->get_crl = store->get_crl;
     else
         ctx->get_crl = NULL;
 
-    if (store && store->check_crl)
+    if (store->check_crl)
         ctx->check_crl = store->check_crl;
     else
         ctx->check_crl = check_crl;
 
-    if (store && store->cert_crl)
+    if (store->cert_crl)
         ctx->cert_crl = store->cert_crl;
     else
         ctx->cert_crl = cert_crl;
 
-    if (store && store->lookup_certs)
+    if (store->lookup_certs)
         ctx->lookup_certs = store->lookup_certs;
     else
         ctx->lookup_certs = X509_STORE_get1_certs;
 
-    if (store && store->lookup_crls)
+    if (store->lookup_crls)
         ctx->lookup_crls = store->lookup_crls;
     else
         ctx->lookup_crls = X509_STORE_get1_crls;
diff --git a/src/crypto/x509/x509cset.c b/src/crypto/x509/x509cset.c
index 6f2708c..b07ff27 100644
--- a/src/crypto/x509/x509cset.c
+++ b/src/crypto/x509/x509cset.c
@@ -79,7 +79,7 @@
     return (X509_NAME_set(&x->crl->issuer, name));
 }
 
-int X509_CRL_set_lastUpdate(X509_CRL *x, const ASN1_TIME *tm)
+int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm)
 {
     ASN1_TIME *in;
 
@@ -96,7 +96,7 @@
     return (in != NULL);
 }
 
-int X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm)
+int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm)
 {
     ASN1_TIME *in;
 
@@ -135,6 +135,11 @@
     return 1;
 }
 
+long X509_CRL_get_version(const X509_CRL *crl)
+{
+    return ASN1_INTEGER_get(crl->crl->version);
+}
+
 const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl)
 {
     return crl->crl->lastUpdate;
@@ -145,6 +150,31 @@
     return crl->crl->nextUpdate;
 }
 
+ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl)
+{
+    return crl->crl->lastUpdate;
+}
+
+ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl)
+{
+    return crl->crl->nextUpdate;
+}
+
+X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl)
+{
+    return crl->crl->issuer;
+}
+
+STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl)
+{
+    return crl->crl->revoked;
+}
+
+const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl)
+{
+    return crl->crl->extensions;
+}
+
 void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig,
                              const X509_ALGOR **palg)
 {
@@ -203,6 +233,12 @@
     return (in != NULL);
 }
 
+const STACK_OF(X509_EXTENSION) *
+    X509_REVOKED_get0_extensions(const X509_REVOKED *r)
+{
+    return r->extensions;
+}
+
 int i2d_re_X509_CRL_tbs(X509_CRL *crl, unsigned char **pp)
 {
     crl->crl->enc.modified = 1;
diff --git a/src/crypto/x509/x509name.c b/src/crypto/x509/x509name.c
index fbb76f0..0bf3459 100644
--- a/src/crypto/x509/x509name.c
+++ b/src/crypto/x509/x509name.c
@@ -66,7 +66,8 @@
 #include "../internal.h"
 
 
-int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len)
+int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid, char *buf,
+                              int len)
 {
     const ASN1_OBJECT *obj;
 
@@ -76,7 +77,7 @@
     return (X509_NAME_get_text_by_OBJ(name, obj, buf, len));
 }
 
-int X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj,
+int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
                               char *buf, int len)
 {
     int i;
@@ -94,14 +95,14 @@
     return (i);
 }
 
-int X509_NAME_entry_count(X509_NAME *name)
+int X509_NAME_entry_count(const X509_NAME *name)
 {
     if (name == NULL)
         return (0);
     return (sk_X509_NAME_ENTRY_num(name->entries));
 }
 
-int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos)
+int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos)
 {
     const ASN1_OBJECT *obj;
 
@@ -112,7 +113,7 @@
 }
 
 /* NOTE: you should be passsing -1, not 0 as lastpos */
-int X509_NAME_get_index_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj,
+int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj,
                                int lastpos)
 {
     int n;
@@ -133,7 +134,7 @@
     return (-1);
 }
 
-X509_NAME_ENTRY *X509_NAME_get_entry(X509_NAME *name, int loc)
+X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc)
 {
     if (name == NULL || loc < 0
         || sk_X509_NAME_ENTRY_num(name->entries) <= (size_t)loc)
@@ -374,14 +375,14 @@
     return (1);
 }
 
-ASN1_OBJECT *X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne)
+ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne)
 {
     if (ne == NULL)
         return (NULL);
     return (ne->object);
 }
 
-ASN1_STRING *X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne)
+ASN1_STRING *X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne)
 {
     if (ne == NULL)
         return (NULL);
diff --git a/src/crypto/x509/x_all.c b/src/crypto/x509/x_all.c
index 33c11b6..a29e038 100644
--- a/src/crypto/x509/x_all.c
+++ b/src/crypto/x509/x_all.c
@@ -66,20 +66,20 @@
 #include <openssl/rsa.h>
 #include <openssl/stack.h>
 
-int X509_verify(X509 *a, EVP_PKEY *r)
+int X509_verify(X509 *x509, EVP_PKEY *pkey)
 {
-    if (X509_ALGOR_cmp(a->sig_alg, a->cert_info->signature)) {
+    if (X509_ALGOR_cmp(x509->sig_alg, x509->cert_info->signature)) {
         OPENSSL_PUT_ERROR(X509, X509_R_SIGNATURE_ALGORITHM_MISMATCH);
         return 0;
     }
-    return (ASN1_item_verify(ASN1_ITEM_rptr(X509_CINF), a->sig_alg,
-                             a->signature, a->cert_info, r));
+    return ASN1_item_verify(ASN1_ITEM_rptr(X509_CINF), x509->sig_alg,
+                            x509->signature, x509->cert_info, pkey);
 }
 
-int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r)
+int X509_REQ_verify(X509_REQ *req, EVP_PKEY *pkey)
 {
-    return (ASN1_item_verify(ASN1_ITEM_rptr(X509_REQ_INFO),
-                             a->sig_alg, a->signature, a->req_info, r));
+    return ASN1_item_verify(ASN1_ITEM_rptr(X509_REQ_INFO),
+                            req->sig_alg, req->signature, req->req_info, pkey);
 }
 
 int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md)
@@ -131,10 +131,10 @@
                            x->signature, x->spkac, pkey, md));
 }
 
-int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *x, EVP_PKEY *pkey)
+int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *spki, EVP_PKEY *pkey)
 {
-    return (ASN1_item_verify(ASN1_ITEM_rptr(NETSCAPE_SPKAC), x->sig_algor,
-                             x->signature, x->spkac, pkey));
+    return (ASN1_item_verify(ASN1_ITEM_rptr(NETSCAPE_SPKAC), spki->sig_algor,
+                             spki->signature, spki->spkac, pkey));
 }
 
 #ifndef OPENSSL_NO_FP_API
diff --git a/src/crypto/x509/x_crl.c b/src/crypto/x509/x_crl.c
index 6450e84..b1c485a 100644
--- a/src/crypto/x509/x_crl.c
+++ b/src/crypto/x509/x_crl.c
@@ -86,7 +86,7 @@
 };
 
 static int X509_REVOKED_cmp(const X509_REVOKED **a, const X509_REVOKED **b);
-static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp);
+static int setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp);
 
 ASN1_SEQUENCE(X509_REVOKED) = {
         ASN1_SIMPLE(X509_REVOKED,serialNumber, ASN1_INTEGER),
@@ -126,6 +126,9 @@
          * affect the output of X509_CRL_print().
          */
     case ASN1_OP_D2I_POST:
+        /* TODO(davidben): Check that default |versions| are never encoded and
+         * that |extensions| is only present in v2. */
+
         (void)sk_X509_REVOKED_set_cmp_func(a->revoked, X509_REVOKED_cmp);
         break;
     }
@@ -226,6 +229,7 @@
     STACK_OF(X509_EXTENSION) *exts;
     X509_EXTENSION *ext;
     size_t idx;
+    int i;
 
     switch (operation) {
     case ASN1_OP_NEW_POST:
@@ -242,26 +246,44 @@
         break;
 
     case ASN1_OP_D2I_POST:
-        X509_CRL_digest(crl, EVP_sha1(), crl->sha1_hash, NULL);
+        if (!X509_CRL_digest(crl, EVP_sha1(), crl->sha1_hash, NULL)) {
+            return 0;
+        }
+
         crl->idp = X509_CRL_get_ext_d2i(crl,
-                                        NID_issuing_distribution_point, NULL,
+                                        NID_issuing_distribution_point, &i,
                                         NULL);
-        if (crl->idp)
-            setup_idp(crl, crl->idp);
+        if (crl->idp != NULL) {
+            if (!setup_idp(crl, crl->idp)) {
+                return 0;
+            }
+        } else if (i != -1) {
+            return 0;
+        }
 
         crl->akid = X509_CRL_get_ext_d2i(crl,
-                                         NID_authority_key_identifier, NULL,
+                                         NID_authority_key_identifier, &i,
                                          NULL);
+        if (crl->akid == NULL && i != -1) {
+            return 0;
+        }
 
         crl->crl_number = X509_CRL_get_ext_d2i(crl,
-                                               NID_crl_number, NULL, NULL);
+                                               NID_crl_number, &i, NULL);
+        if (crl->crl_number == NULL && i != -1) {
+            return 0;
+        }
 
-        crl->base_crl_number = X509_CRL_get_ext_d2i(crl,
-                                                    NID_delta_crl, NULL,
+        crl->base_crl_number = X509_CRL_get_ext_d2i(crl, NID_delta_crl, &i,
                                                     NULL);
+        if (crl->base_crl_number == NULL && i != -1) {
+            return 0;
+        }
         /* Delta CRLs must have CRL number */
-        if (crl->base_crl_number && !crl->crl_number)
-            crl->flags |= EXFLAG_INVALID;
+        if (crl->base_crl_number && !crl->crl_number) {
+            OPENSSL_PUT_ERROR(X509, X509_R_DELTA_CRL_WITHOUT_CRL_NUMBER);
+            return 0;
+        }
 
         /*
          * See if we have any unhandled critical CRL extensions and indicate
@@ -319,7 +341,7 @@
 
 /* Convert IDP into a more convenient form */
 
-static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp)
+static int setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp)
 {
     int idp_only = 0;
     /* Set various flags according to IDP */
@@ -352,7 +374,7 @@
         crl->idp_reasons &= CRLDP_ALL_REASONS;
     }
 
-    DIST_POINT_set_dpname(idp->distpoint, X509_CRL_get_issuer(crl));
+    return DIST_POINT_set_dpname(idp->distpoint, X509_CRL_get_issuer(crl));
 }
 
 ASN1_SEQUENCE_ref(X509_CRL, crl_cb) = {
@@ -389,10 +411,10 @@
     return 1;
 }
 
-int X509_CRL_verify(X509_CRL *crl, EVP_PKEY *r)
+int X509_CRL_verify(X509_CRL *crl, EVP_PKEY *pkey)
 {
     if (crl->meth->crl_verify)
-        return crl->meth->crl_verify(crl, r);
+        return crl->meth->crl_verify(crl, pkey);
     return 0;
 }
 
diff --git a/src/crypto/x509/x_name.c b/src/crypto/x509/x_name.c
index 7824100..bef9ec4 100644
--- a/src/crypto/x509/x_name.c
+++ b/src/crypto/x509/x_name.c
@@ -197,18 +197,8 @@
                             char opt, ASN1_TLC *ctx)
 {
     const unsigned char *p = *in, *q;
-    union {
-        STACK_OF(STACK_OF_X509_NAME_ENTRY) *s;
-        ASN1_VALUE *a;
-    } intname = {
-        NULL
-    };
-    union {
-        X509_NAME *x;
-        ASN1_VALUE *a;
-    } nm = {
-        NULL
-    };
+    STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname = NULL;
+    X509_NAME *nm = NULL;
     size_t i, j;
     int ret;
     STACK_OF(X509_NAME_ENTRY) *entries;
@@ -220,46 +210,48 @@
     q = p;
 
     /* Get internal representation of Name */
-    ret = ASN1_item_ex_d2i(&intname.a,
+    ASN1_VALUE *intname_val = NULL;
+    ret = ASN1_item_ex_d2i(&intname_val,
                            &p, len, ASN1_ITEM_rptr(X509_NAME_INTERNAL),
                            tag, aclass, opt, ctx);
-
     if (ret <= 0)
         return ret;
+    intname = (STACK_OF(STACK_OF_X509_NAME_ENTRY) *)intname_val;
 
     if (*val)
         x509_name_ex_free(val, NULL);
-    if (!x509_name_ex_new(&nm.a, NULL))
+    ASN1_VALUE *nm_val = NULL;
+    if (!x509_name_ex_new(&nm_val, NULL))
         goto err;
+    nm = (X509_NAME *)nm_val;
     /* We've decoded it: now cache encoding */
-    if (!BUF_MEM_grow(nm.x->bytes, p - q))
+    if (!BUF_MEM_grow(nm->bytes, p - q))
         goto err;
-    OPENSSL_memcpy(nm.x->bytes->data, q, p - q);
+    OPENSSL_memcpy(nm->bytes->data, q, p - q);
 
     /* Convert internal representation to X509_NAME structure */
-    for (i = 0; i < sk_STACK_OF_X509_NAME_ENTRY_num(intname.s); i++) {
-        entries = sk_STACK_OF_X509_NAME_ENTRY_value(intname.s, i);
+    for (i = 0; i < sk_STACK_OF_X509_NAME_ENTRY_num(intname); i++) {
+        entries = sk_STACK_OF_X509_NAME_ENTRY_value(intname, i);
         for (j = 0; j < sk_X509_NAME_ENTRY_num(entries); j++) {
             entry = sk_X509_NAME_ENTRY_value(entries, j);
             entry->set = i;
-            if (!sk_X509_NAME_ENTRY_push(nm.x->entries, entry))
+            if (!sk_X509_NAME_ENTRY_push(nm->entries, entry))
                 goto err;
             (void)sk_X509_NAME_ENTRY_set(entries, j, NULL);
         }
     }
-    ret = x509_name_canon(nm.x);
+    ret = x509_name_canon(nm);
     if (!ret)
         goto err;
-    sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname.s,
+    sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname,
                                          local_sk_X509_NAME_ENTRY_free);
-    nm.x->modified = 0;
-    *val = nm.a;
+    nm->modified = 0;
+    *val = (ASN1_VALUE *)nm;
     *in = p;
     return ret;
  err:
-    if (nm.x != NULL)
-        X509_NAME_free(nm.x);
-    sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname.s,
+    X509_NAME_free(nm);
+    sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname,
                                          local_sk_X509_NAME_ENTRY_pop_free);
     OPENSSL_PUT_ERROR(X509, ERR_R_ASN1_LIB);
     return 0;
@@ -288,20 +280,15 @@
 
 static int x509_name_encode(X509_NAME *a)
 {
-    union {
-        STACK_OF(STACK_OF_X509_NAME_ENTRY) *s;
-        ASN1_VALUE *a;
-    } intname = {
-        NULL
-    };
     int len;
     unsigned char *p;
     STACK_OF(X509_NAME_ENTRY) *entries = NULL;
     X509_NAME_ENTRY *entry;
     int set = -1;
     size_t i;
-    intname.s = sk_STACK_OF_X509_NAME_ENTRY_new_null();
-    if (!intname.s)
+    STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname =
+        sk_STACK_OF_X509_NAME_ENTRY_new_null();
+    if (!intname)
         goto memerr;
     for (i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) {
         entry = sk_X509_NAME_ENTRY_value(a->entries, i);
@@ -309,7 +296,7 @@
             entries = sk_X509_NAME_ENTRY_new_null();
             if (!entries)
                 goto memerr;
-            if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname.s, entries)) {
+            if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname, entries)) {
                 sk_X509_NAME_ENTRY_free(entries);
                 goto memerr;
             }
@@ -318,19 +305,20 @@
         if (!sk_X509_NAME_ENTRY_push(entries, entry))
             goto memerr;
     }
-    len = ASN1_item_ex_i2d(&intname.a, NULL,
+    ASN1_VALUE *intname_val = (ASN1_VALUE *)intname;
+    len = ASN1_item_ex_i2d(&intname_val, NULL,
                            ASN1_ITEM_rptr(X509_NAME_INTERNAL), -1, -1);
     if (!BUF_MEM_grow(a->bytes, len))
         goto memerr;
     p = (unsigned char *)a->bytes->data;
-    ASN1_item_ex_i2d(&intname.a,
+    ASN1_item_ex_i2d(&intname_val,
                      &p, ASN1_ITEM_rptr(X509_NAME_INTERNAL), -1, -1);
-    sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname.s,
+    sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname,
                                          local_sk_X509_NAME_ENTRY_free);
     a->modified = 0;
     return len;
  memerr:
-    sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname.s,
+    sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname,
                                          local_sk_X509_NAME_ENTRY_free);
     OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
     return -1;
diff --git a/src/crypto/x509/x_pubkey.c b/src/crypto/x509/x_pubkey.c
index 3d07d66..37dee49 100644
--- a/src/crypto/x509/x_pubkey.c
+++ b/src/crypto/x509/x_pubkey.c
@@ -180,160 +180,6 @@
     return NULL;
 }
 
-/*
- * Now two pseudo ASN1 routines that take an EVP_PKEY structure and encode or
- * decode as X509_PUBKEY
- */
-
-EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length)
-{
-    X509_PUBKEY *xpk;
-    EVP_PKEY *pktmp;
-    xpk = d2i_X509_PUBKEY(NULL, pp, length);
-    if (!xpk)
-        return NULL;
-    pktmp = X509_PUBKEY_get(xpk);
-    X509_PUBKEY_free(xpk);
-    if (!pktmp)
-        return NULL;
-    if (a) {
-        EVP_PKEY_free(*a);
-        *a = pktmp;
-    }
-    return pktmp;
-}
-
-int i2d_PUBKEY(const EVP_PKEY *a, unsigned char **pp)
-{
-    X509_PUBKEY *xpk = NULL;
-    int ret;
-    if (!a)
-        return 0;
-    if (!X509_PUBKEY_set(&xpk, (EVP_PKEY *)a))
-        return 0;
-    ret = i2d_X509_PUBKEY(xpk, pp);
-    X509_PUBKEY_free(xpk);
-    return ret;
-}
-
-/*
- * The following are equivalents but which return RSA and DSA keys
- */
-RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length)
-{
-    EVP_PKEY *pkey;
-    RSA *key;
-    const unsigned char *q;
-    q = *pp;
-    pkey = d2i_PUBKEY(NULL, &q, length);
-    if (!pkey)
-        return NULL;
-    key = EVP_PKEY_get1_RSA(pkey);
-    EVP_PKEY_free(pkey);
-    if (!key)
-        return NULL;
-    *pp = q;
-    if (a) {
-        RSA_free(*a);
-        *a = key;
-    }
-    return key;
-}
-
-int i2d_RSA_PUBKEY(const RSA *a, unsigned char **pp)
-{
-    EVP_PKEY *pktmp;
-    int ret;
-    if (!a)
-        return 0;
-    pktmp = EVP_PKEY_new();
-    if (!pktmp) {
-        OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
-        return 0;
-    }
-    EVP_PKEY_set1_RSA(pktmp, (RSA *)a);
-    ret = i2d_PUBKEY(pktmp, pp);
-    EVP_PKEY_free(pktmp);
-    return ret;
-}
-
-#ifndef OPENSSL_NO_DSA
-DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length)
-{
-    EVP_PKEY *pkey;
-    DSA *key;
-    const unsigned char *q;
-    q = *pp;
-    pkey = d2i_PUBKEY(NULL, &q, length);
-    if (!pkey)
-        return NULL;
-    key = EVP_PKEY_get1_DSA(pkey);
-    EVP_PKEY_free(pkey);
-    if (!key)
-        return NULL;
-    *pp = q;
-    if (a) {
-        DSA_free(*a);
-        *a = key;
-    }
-    return key;
-}
-
-int i2d_DSA_PUBKEY(const DSA *a, unsigned char **pp)
-{
-    EVP_PKEY *pktmp;
-    int ret;
-    if (!a)
-        return 0;
-    pktmp = EVP_PKEY_new();
-    if (!pktmp) {
-        OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
-        return 0;
-    }
-    EVP_PKEY_set1_DSA(pktmp, (DSA *)a);
-    ret = i2d_PUBKEY(pktmp, pp);
-    EVP_PKEY_free(pktmp);
-    return ret;
-}
-#endif
-
-EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length)
-{
-    EVP_PKEY *pkey;
-    EC_KEY *key;
-    const unsigned char *q;
-    q = *pp;
-    pkey = d2i_PUBKEY(NULL, &q, length);
-    if (!pkey)
-        return (NULL);
-    key = EVP_PKEY_get1_EC_KEY(pkey);
-    EVP_PKEY_free(pkey);
-    if (!key)
-        return (NULL);
-    *pp = q;
-    if (a) {
-        EC_KEY_free(*a);
-        *a = key;
-    }
-    return (key);
-}
-
-int i2d_EC_PUBKEY(const EC_KEY *a, unsigned char **pp)
-{
-    EVP_PKEY *pktmp;
-    int ret;
-    if (!a)
-        return (0);
-    if ((pktmp = EVP_PKEY_new()) == NULL) {
-        OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
-        return (0);
-    }
-    EVP_PKEY_set1_EC_KEY(pktmp, (EC_KEY *)a);
-    ret = i2d_PUBKEY(pktmp, pp);
-    EVP_PKEY_free(pktmp);
-    return (ret);
-}
-
 int X509_PUBKEY_set0_param(X509_PUBKEY *pub, const ASN1_OBJECT *aobj,
                            int ptype, void *pval,
                            unsigned char *penc, int penclen)
diff --git a/src/crypto/x509/x_sig.c b/src/crypto/x509/x_sig.c
index e18024a..ca08c64 100644
--- a/src/crypto/x509/x_sig.c
+++ b/src/crypto/x509/x_sig.c
@@ -67,3 +67,23 @@
 } ASN1_SEQUENCE_END(X509_SIG)
 
 IMPLEMENT_ASN1_FUNCTIONS(X509_SIG)
+
+void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **out_alg,
+                   const ASN1_OCTET_STRING **out_digest) {
+  if (out_alg != NULL) {
+    *out_alg = sig->algor;
+  }
+  if (out_digest != NULL) {
+    *out_digest = sig->digest;
+  }
+}
+
+void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **out_alg,
+                   ASN1_OCTET_STRING **out_digest) {
+  if (out_alg != NULL) {
+    *out_alg = sig->algor;
+  }
+  if (out_digest != NULL) {
+    *out_digest = sig->digest;
+  }
+}
diff --git a/src/crypto/x509/x_x509.c b/src/crypto/x509/x_x509.c
index 9ece062..cddceb8 100644
--- a/src/crypto/x509/x_x509.c
+++ b/src/crypto/x509/x_x509.c
@@ -98,7 +98,6 @@
     switch (operation) {
 
     case ASN1_OP_NEW_POST:
-        ret->name = NULL;
         ret->ex_flags = 0;
         ret->ex_pathlen = -1;
         ret->skid = NULL;
@@ -115,11 +114,35 @@
         ret->buf = NULL;
         break;
 
-    case ASN1_OP_D2I_POST:
-        if (ret->name != NULL)
-            OPENSSL_free(ret->name);
-        ret->name = X509_NAME_oneline(ret->cert_info->subject, NULL, 0);
+    case ASN1_OP_D2I_POST: {
+        /* The version must be one of v1(0), v2(1), or v3(2). */
+        long version = 0;
+        if (ret->cert_info->version != NULL) {
+            version = ASN1_INTEGER_get(ret->cert_info->version);
+            /* TODO(https://crbug.com/boringssl/364): |version| = 0 should also
+             * be rejected. This means an explicitly-encoded X.509v1 version.
+             * v1 is DEFAULT, so DER requires it be omitted. */
+            if (version < 0 || version > 2) {
+                OPENSSL_PUT_ERROR(X509, X509_R_INVALID_VERSION);
+                return 0;
+            }
+        }
+
+        /* Per RFC5280, section 4.1.2.8, these fields require v2 or v3. */
+        if (version == 0 && (ret->cert_info->issuerUID != NULL ||
+                             ret->cert_info->subjectUID != NULL)) {
+            OPENSSL_PUT_ERROR(X509, X509_R_INVALID_FIELD_FOR_VERSION);
+            return 0;
+        }
+
+        /* Per RFC5280, section 4.1.2.9, extensions require v3. */
+        if (version != 2 && ret->cert_info->extensions != NULL) {
+            OPENSSL_PUT_ERROR(X509, X509_R_INVALID_FIELD_FOR_VERSION);
+            return 0;
+        }
+
         break;
+    }
 
     case ASN1_OP_FREE_POST:
         CRYPTO_MUTEX_cleanup(&ret->lock);
@@ -132,7 +155,6 @@
         GENERAL_NAMES_free(ret->altname);
         NAME_CONSTRAINTS_free(ret->nc);
         CRYPTO_BUFFER_free(ret->buf);
-        OPENSSL_free(ret->name);
         break;
 
     }
diff --git a/src/crypto/x509v3/ext_dat.h b/src/crypto/x509v3/ext_dat.h
index a6ca45b..7930126 100644
--- a/src/crypto/x509v3/ext_dat.h
+++ b/src/crypto/x509v3/ext_dat.h
@@ -61,8 +61,7 @@
 #endif
 
 extern const X509V3_EXT_METHOD v3_bcons, v3_nscert, v3_key_usage, v3_ext_ku;
-extern const X509V3_EXT_METHOD v3_pkey_usage_period, v3_sxnet, v3_info,
-    v3_sinfo;
+extern const X509V3_EXT_METHOD v3_info, v3_sinfo;
 extern const X509V3_EXT_METHOD v3_ns_ia5_list[], v3_alt[], v3_skey_id,
     v3_akey_id;
 extern const X509V3_EXT_METHOD v3_crl_num, v3_crl_reason, v3_crl_invdate;
@@ -96,7 +95,6 @@
     &v3_ns_ia5_list[6],
     &v3_skey_id,
     &v3_key_usage,
-    &v3_pkey_usage_period,
     &v3_alt[0],
     &v3_alt[1],
     &v3_bcons,
@@ -108,7 +106,6 @@
     &v3_delta_crl,
     &v3_crl_reason,
     &v3_crl_invdate,
-    &v3_sxnet,
     &v3_info,
 #ifndef OPENSSL_NO_OCSP
     &v3_ocsp_nonce,
diff --git a/src/crypto/x509v3/internal.h b/src/crypto/x509v3/internal.h
index c143d73..245a5d1 100644
--- a/src/crypto/x509v3/internal.h
+++ b/src/crypto/x509v3/internal.h
@@ -48,6 +48,11 @@
 OPENSSL_EXPORT int x509v3_looks_like_dns_name(const unsigned char *in,
                                               size_t len);
 
+// x509v3_cache_extensions fills in a number of fields relating to X.509
+// extensions in |x|. It returns one on success and zero if some extensions were
+// invalid.
+int x509v3_cache_extensions(X509 *x);
+
 
 #if defined(__cplusplus)
 }  /* extern C */
diff --git a/src/crypto/x509v3/v3_conf.c b/src/crypto/x509v3/v3_conf.c
index e98d0fc..b3deb7f 100644
--- a/src/crypto/x509v3/v3_conf.c
+++ b/src/crypto/x509v3/v3_conf.c
@@ -428,13 +428,17 @@
         ctx->db_meth->free_section(ctx->db, section);
 }
 
-static char *nconf_get_string(void *db, char *section, char *value)
+static char *nconf_get_string(void *db, const char *section, const char *value)
 {
-    /* TODO(fork): this should return a const value. */
+    /* TODO(fork): This returns a non-const pointer because |X509V3_CONF_METHOD|
+     * allows |get_string| to return caller-owned pointers, provided they're
+     * freed by |free_string|. |nconf_method| leaves |free_string| NULL, and
+     * there are no other implementations of |X509V3_CONF_METHOD|, so this can
+     * be simplified if we make it private. */
     return (char *)NCONF_get_string(db, section, value);
 }
 
-static STACK_OF(CONF_VALUE) *nconf_get_section(void *db, char *section)
+static STACK_OF(CONF_VALUE) *nconf_get_section(void *db, const char *section)
 {
     return NCONF_get_section(db, section);
 }
diff --git a/src/crypto/x509v3/v3_genn.c b/src/crypto/x509v3/v3_genn.c
index 552a524..57223b4 100644
--- a/src/crypto/x509v3/v3_genn.c
+++ b/src/crypto/x509v3/v3_genn.c
@@ -188,7 +188,7 @@
     a->type = type;
 }
 
-void *GENERAL_NAME_get0_value(GENERAL_NAME *a, int *ptype)
+void *GENERAL_NAME_get0_value(const GENERAL_NAME *a, int *ptype)
 {
     if (ptype)
         *ptype = a->type;
@@ -233,7 +233,7 @@
     return 1;
 }
 
-int GENERAL_NAME_get0_otherName(GENERAL_NAME *gen,
+int GENERAL_NAME_get0_otherName(const GENERAL_NAME *gen,
                                 ASN1_OBJECT **poid, ASN1_TYPE **pvalue)
 {
     if (gen->type != GEN_OTHERNAME)
diff --git a/src/crypto/x509v3/v3_info.c b/src/crypto/x509v3/v3_info.c
index 7a48bd5..3615c71 100644
--- a/src/crypto/x509v3/v3_info.c
+++ b/src/crypto/x509v3/v3_info.c
@@ -208,7 +208,7 @@
     return NULL;
 }
 
-int i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION *a)
+int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION *a)
 {
     i2a_ASN1_OBJECT(bp, a->method);
 #ifdef UNDEF
diff --git a/src/crypto/x509v3/v3_pku.c b/src/crypto/x509v3/v3_pku.c
deleted file mode 100644
index e4868b4..0000000
--- a/src/crypto/x509v3/v3_pku.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/* v3_pku.c */
-/*
- * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
- * 1999.
- */
-/* ====================================================================
- * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- *    software must display the following acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
- *
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- *    endorse or promote products derived from this software without
- *    prior written permission. For written permission, please contact
- *    licensing@OpenSSL.org.
- *
- * 5. Products derived from this software may not be called "OpenSSL"
- *    nor may "OpenSSL" appear in their names without prior written
- *    permission of the OpenSSL Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- *    acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
- *
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
- * ITS CONTRIBUTORS 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 ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * ====================================================================
- *
- * This product includes cryptographic software written by Eric Young
- * (eay@cryptsoft.com).  This product includes software written by Tim
- * Hudson (tjh@cryptsoft.com). */
-
-#include <stdio.h>
-
-#include <openssl/asn1.h>
-#include <openssl/asn1t.h>
-#include <openssl/mem.h>
-#include <openssl/obj.h>
-#include <openssl/x509v3.h>
-
-static int i2r_PKEY_USAGE_PERIOD(X509V3_EXT_METHOD *method,
-                                 PKEY_USAGE_PERIOD *usage, BIO *out,
-                                 int indent);
-/*
- * static PKEY_USAGE_PERIOD *v2i_PKEY_USAGE_PERIOD(X509V3_EXT_METHOD *method,
- * X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *values);
- */
-const X509V3_EXT_METHOD v3_pkey_usage_period = {
-    NID_private_key_usage_period, 0, ASN1_ITEM_ref(PKEY_USAGE_PERIOD),
-    0, 0, 0, 0,
-    0, 0, 0, 0,
-    (X509V3_EXT_I2R)i2r_PKEY_USAGE_PERIOD, NULL,
-    NULL
-};
-
-ASN1_SEQUENCE(PKEY_USAGE_PERIOD) = {
-        ASN1_IMP_OPT(PKEY_USAGE_PERIOD, notBefore, ASN1_GENERALIZEDTIME, 0),
-        ASN1_IMP_OPT(PKEY_USAGE_PERIOD, notAfter, ASN1_GENERALIZEDTIME, 1)
-} ASN1_SEQUENCE_END(PKEY_USAGE_PERIOD)
-
-IMPLEMENT_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD)
-
-static int i2r_PKEY_USAGE_PERIOD(X509V3_EXT_METHOD *method,
-                                 PKEY_USAGE_PERIOD *usage, BIO *out,
-                                 int indent)
-{
-    BIO_printf(out, "%*s", indent, "");
-    if (usage->notBefore) {
-        BIO_write(out, "Not Before: ", 12);
-        ASN1_GENERALIZEDTIME_print(out, usage->notBefore);
-        if (usage->notAfter)
-            BIO_write(out, ", ", 2);
-    }
-    if (usage->notAfter) {
-        BIO_write(out, "Not After: ", 11);
-        ASN1_GENERALIZEDTIME_print(out, usage->notAfter);
-    }
-    return 1;
-}
-
-/*
- * static PKEY_USAGE_PERIOD *v2i_PKEY_USAGE_PERIOD(method, ctx, values)
- * X509V3_EXT_METHOD *method; X509V3_CTX *ctx; STACK_OF(CONF_VALUE) *values;
- * { return NULL; }
- */
diff --git a/src/crypto/x509v3/v3_purp.c b/src/crypto/x509v3/v3_purp.c
index d9d105e..acb7602 100644
--- a/src/crypto/x509v3/v3_purp.c
+++ b/src/crypto/x509v3/v3_purp.c
@@ -68,6 +68,7 @@
 #include <openssl/x509v3.h>
 
 #include "../internal.h"
+#include "internal.h"
 
 #define V1_ROOT (EXFLAG_V1|EXFLAG_SS)
 #define ku_reject(x, usage) \
@@ -77,8 +78,6 @@
 #define ns_reject(x, usage) \
         (((x)->ex_flags & EXFLAG_NSCERT) && !((x)->ex_nscert & (usage)))
 
-static void x509v3_cache_extensions(X509 *x);
-
 static int check_purpose_ssl_client(const X509_PURPOSE *xp, const X509 *x,
                                     int ca);
 static int check_purpose_ssl_server(const X509_PURPOSE *xp, const X509 *x,
@@ -144,7 +143,10 @@
 {
     int idx;
     const X509_PURPOSE *pt;
-    x509v3_cache_extensions(x);
+    if (!x509v3_cache_extensions(x)) {
+        return -1;
+    }
+
     if (id == -1)
         return 1;
     idx = X509_PURPOSE_get_by_id(id);
@@ -305,22 +307,22 @@
     xptable = NULL;
 }
 
-int X509_PURPOSE_get_id(X509_PURPOSE *xp)
+int X509_PURPOSE_get_id(const X509_PURPOSE *xp)
 {
     return xp->purpose;
 }
 
-char *X509_PURPOSE_get0_name(X509_PURPOSE *xp)
+char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp)
 {
     return xp->name;
 }
 
-char *X509_PURPOSE_get0_sname(X509_PURPOSE *xp)
+char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp)
 {
     return xp->sname;
 }
 
-int X509_PURPOSE_get_trust(X509_PURPOSE *xp)
+int X509_PURPOSE_get_trust(const X509_PURPOSE *xp)
 {
     return xp->trust;
 }
@@ -368,7 +370,7 @@
     return 0;
 }
 
-static void setup_dp(X509 *x, DIST_POINT *dp)
+static int setup_dp(X509 *x, DIST_POINT *dp)
 {
     X509_NAME *iname = NULL;
     size_t i;
@@ -381,7 +383,7 @@
     } else
         dp->dp_reasons = CRLDP_ALL_REASONS;
     if (!dp->distpoint || (dp->distpoint->type != 1))
-        return;
+        return 1;
     for (i = 0; i < sk_GENERAL_NAME_num(dp->CRLissuer); i++) {
         GENERAL_NAME *gen = sk_GENERAL_NAME_value(dp->CRLissuer, i);
         if (gen->type == GEN_DIRNAME) {
@@ -392,19 +394,25 @@
     if (!iname)
         iname = X509_get_issuer_name(x);
 
-    DIST_POINT_set_dpname(dp->distpoint, iname);
-
+    return DIST_POINT_set_dpname(dp->distpoint, iname);
 }
 
-static void setup_crldp(X509 *x)
+static int setup_crldp(X509 *x)
 {
-    size_t i;
-    x->crldp = X509_get_ext_d2i(x, NID_crl_distribution_points, NULL, NULL);
-    for (i = 0; i < sk_DIST_POINT_num(x->crldp); i++)
-        setup_dp(x, sk_DIST_POINT_value(x->crldp, i));
+    int j;
+    x->crldp = X509_get_ext_d2i(x, NID_crl_distribution_points, &j, NULL);
+    if (x->crldp == NULL && j != -1) {
+        return 0;
+    }
+    for (size_t i = 0; i < sk_DIST_POINT_num(x->crldp); i++) {
+        if (!setup_dp(x, sk_DIST_POINT_value(x->crldp, i))) {
+            return 0;
+        }
+    }
+    return 1;
 }
 
-static void x509v3_cache_extensions(X509 *x)
+int x509v3_cache_extensions(X509 *x)
 {
     BASIC_CONSTRAINTS *bs;
     PROXY_CERT_INFO_EXTENSION *pci;
@@ -420,21 +428,22 @@
     CRYPTO_MUTEX_unlock_read(&x->lock);
 
     if (is_set) {
-        return;
+        return (x->ex_flags & EXFLAG_INVALID) == 0;
     }
 
     CRYPTO_MUTEX_lock_write(&x->lock);
     if (x->ex_flags & EXFLAG_SET) {
         CRYPTO_MUTEX_unlock_write(&x->lock);
-        return;
+        return (x->ex_flags & EXFLAG_INVALID) == 0;
     }
 
-    X509_digest(x, EVP_sha1(), x->sha1_hash, NULL);
+    if (!X509_digest(x, EVP_sha1(), x->sha1_hash, NULL))
+        x->ex_flags |= EXFLAG_INVALID;
     /* V1 should mean no extensions ... */
     if (!X509_get_version(x))
         x->ex_flags |= EXFLAG_V1;
     /* Handle basic constraints */
-    if ((bs = X509_get_ext_d2i(x, NID_basic_constraints, NULL, NULL))) {
+    if ((bs = X509_get_ext_d2i(x, NID_basic_constraints, &j, NULL))) {
         if (bs->ca)
             x->ex_flags |= EXFLAG_CA;
         if (bs->pathlen) {
@@ -442,15 +451,23 @@
                 || !bs->ca) {
                 x->ex_flags |= EXFLAG_INVALID;
                 x->ex_pathlen = 0;
-            } else
+            } else {
+                /* TODO(davidben): |ASN1_INTEGER_get| returns -1 on overflow,
+                 * which currently acts as if the constraint isn't present. This
+                 * works (an overflowing path length constraint may as well be
+                 * infinity), but Chromium's verifier simply treats values above
+                 * 255 as an error. */
                 x->ex_pathlen = ASN1_INTEGER_get(bs->pathlen);
+            }
         } else
             x->ex_pathlen = -1;
         BASIC_CONSTRAINTS_free(bs);
         x->ex_flags |= EXFLAG_BCONS;
+    } else if (j != -1) {
+        x->ex_flags |= EXFLAG_INVALID;
     }
     /* Handle proxy certificates */
-    if ((pci = X509_get_ext_d2i(x, NID_proxyCertInfo, NULL, NULL))) {
+    if ((pci = X509_get_ext_d2i(x, NID_proxyCertInfo, &j, NULL))) {
         if (x->ex_flags & EXFLAG_CA
             || X509_get_ext_by_NID(x, NID_subject_alt_name, -1) >= 0
             || X509_get_ext_by_NID(x, NID_issuer_alt_name, -1) >= 0) {
@@ -462,9 +479,11 @@
             x->ex_pcpathlen = -1;
         PROXY_CERT_INFO_EXTENSION_free(pci);
         x->ex_flags |= EXFLAG_PROXY;
+    } else if (j != -1) {
+        x->ex_flags |= EXFLAG_INVALID;
     }
     /* Handle key usage */
-    if ((usage = X509_get_ext_d2i(x, NID_key_usage, NULL, NULL))) {
+    if ((usage = X509_get_ext_d2i(x, NID_key_usage, &j, NULL))) {
         if (usage->length > 0) {
             x->ex_kusage = usage->data[0];
             if (usage->length > 1)
@@ -473,9 +492,11 @@
             x->ex_kusage = 0;
         x->ex_flags |= EXFLAG_KUSAGE;
         ASN1_BIT_STRING_free(usage);
+    } else if (j != -1) {
+        x->ex_flags |= EXFLAG_INVALID;
     }
     x->ex_xkusage = 0;
-    if ((extusage = X509_get_ext_d2i(x, NID_ext_key_usage, NULL, NULL))) {
+    if ((extusage = X509_get_ext_d2i(x, NID_ext_key_usage, &j, NULL))) {
         x->ex_flags |= EXFLAG_XKUSAGE;
         for (i = 0; i < sk_ASN1_OBJECT_num(extusage); i++) {
             switch (OBJ_obj2nid(sk_ASN1_OBJECT_value(extusage, i))) {
@@ -518,18 +539,28 @@
             }
         }
         sk_ASN1_OBJECT_pop_free(extusage, ASN1_OBJECT_free);
+    } else if (j != -1) {
+        x->ex_flags |= EXFLAG_INVALID;
     }
 
-    if ((ns = X509_get_ext_d2i(x, NID_netscape_cert_type, NULL, NULL))) {
+    if ((ns = X509_get_ext_d2i(x, NID_netscape_cert_type, &j, NULL))) {
         if (ns->length > 0)
             x->ex_nscert = ns->data[0];
         else
             x->ex_nscert = 0;
         x->ex_flags |= EXFLAG_NSCERT;
         ASN1_BIT_STRING_free(ns);
+    } else if (j != -1) {
+        x->ex_flags |= EXFLAG_INVALID;
     }
-    x->skid = X509_get_ext_d2i(x, NID_subject_key_identifier, NULL, NULL);
-    x->akid = X509_get_ext_d2i(x, NID_authority_key_identifier, NULL, NULL);
+    x->skid = X509_get_ext_d2i(x, NID_subject_key_identifier, &j, NULL);
+    if (x->skid == NULL && j != -1) {
+        x->ex_flags |= EXFLAG_INVALID;
+    }
+    x->akid = X509_get_ext_d2i(x, NID_authority_key_identifier, &j, NULL);
+    if (x->akid == NULL && j != -1) {
+        x->ex_flags |= EXFLAG_INVALID;
+    }
     /* Does subject name match issuer ? */
     if (!X509_NAME_cmp(X509_get_subject_name(x), X509_get_issuer_name(x))) {
         x->ex_flags |= EXFLAG_SI;
@@ -538,11 +569,17 @@
             !ku_reject(x, KU_KEY_CERT_SIGN))
             x->ex_flags |= EXFLAG_SS;
     }
-    x->altname = X509_get_ext_d2i(x, NID_subject_alt_name, NULL, NULL);
-    x->nc = X509_get_ext_d2i(x, NID_name_constraints, &j, NULL);
-    if (!x->nc && (j != -1))
+    x->altname = X509_get_ext_d2i(x, NID_subject_alt_name, &j, NULL);
+    if (x->altname == NULL && j != -1) {
         x->ex_flags |= EXFLAG_INVALID;
-    setup_crldp(x);
+    }
+    x->nc = X509_get_ext_d2i(x, NID_name_constraints, &j, NULL);
+    if (x->nc == NULL && j != -1) {
+        x->ex_flags |= EXFLAG_INVALID;
+    }
+    if (!setup_crldp(x)) {
+        x->ex_flags |= EXFLAG_INVALID;
+    }
 
     for (j = 0; j < X509_get_ext_count(x); j++) {
         ex = X509_get_ext(x, j);
@@ -559,6 +596,7 @@
     x->ex_flags |= EXFLAG_SET;
 
     CRYPTO_MUTEX_unlock_write(&x->lock);
+    return (x->ex_flags & EXFLAG_INVALID) == 0;
 }
 
 /* check_ca returns one if |x| should be considered a CA certificate and zero
@@ -579,7 +617,9 @@
 
 int X509_check_ca(X509 *x)
 {
-    x509v3_cache_extensions(x);
+    if (!x509v3_cache_extensions(x)) {
+        return 0;
+    }
     return check_ca(x);
 }
 
@@ -761,8 +801,10 @@
     if (X509_NAME_cmp(X509_get_subject_name(issuer),
                       X509_get_issuer_name(subject)))
         return X509_V_ERR_SUBJECT_ISSUER_MISMATCH;
-    x509v3_cache_extensions(issuer);
-    x509v3_cache_extensions(subject);
+    if (!x509v3_cache_extensions(issuer) ||
+        !x509v3_cache_extensions(subject)) {
+        return X509_V_ERR_UNSPECIFIED;
+    }
 
     if (subject->akid) {
         int ret = X509_check_akid(issuer, subject->akid);
@@ -819,15 +861,17 @@
 
 uint32_t X509_get_extension_flags(X509 *x)
 {
-    /* Call for side-effect of computing hash and caching extensions */
-    X509_check_purpose(x, -1, -1);
+    /* Ignore the return value. On failure, |x->ex_flags| will include
+     * |EXFLAG_INVALID|. */
+    x509v3_cache_extensions(x);
     return x->ex_flags;
 }
 
 uint32_t X509_get_key_usage(X509 *x)
 {
-    /* Call for side-effect of computing hash and caching extensions */
-    X509_check_purpose(x, -1, -1);
+    if (!x509v3_cache_extensions(x)) {
+        return 0;
+    }
     if (x->ex_flags & EXFLAG_KUSAGE)
         return x->ex_kusage;
     return UINT32_MAX;
@@ -835,9 +879,51 @@
 
 uint32_t X509_get_extended_key_usage(X509 *x)
 {
-    /* Call for side-effect of computing hash and caching extensions */
-    X509_check_purpose(x, -1, -1);
+    if (!x509v3_cache_extensions(x)) {
+        return 0;
+    }
     if (x->ex_flags & EXFLAG_XKUSAGE)
         return x->ex_xkusage;
     return UINT32_MAX;
 }
+
+const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x509)
+{
+    if (!x509v3_cache_extensions(x509)) {
+        return NULL;
+    }
+    return x509->skid;
+}
+
+const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x509)
+{
+    if (!x509v3_cache_extensions(x509)) {
+        return NULL;
+    }
+    return x509->akid != NULL ? x509->akid->keyid : NULL;
+}
+
+const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x509)
+{
+    if (!x509v3_cache_extensions(x509)) {
+        return NULL;
+    }
+    return x509->akid != NULL ? x509->akid->issuer : NULL;
+}
+
+const ASN1_INTEGER *X509_get0_authority_serial(X509 *x509)
+{
+    if (!x509v3_cache_extensions(x509)) {
+        return NULL;
+    }
+    return x509->akid != NULL ? x509->akid->serial : NULL;
+}
+
+long X509_get_pathlen(X509 *x509)
+{
+    if (!x509v3_cache_extensions(x509) ||
+        (x509->ex_flags & EXFLAG_BCONS) == 0) {
+        return -1;
+    }
+    return x509->ex_pathlen;
+}
diff --git a/src/crypto/x509v3/v3_skey.c b/src/crypto/x509v3/v3_skey.c
index 6a16e78..8c628ec 100644
--- a/src/crypto/x509v3/v3_skey.c
+++ b/src/crypto/x509v3/v3_skey.c
@@ -77,7 +77,7 @@
     NULL
 };
 
-char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, ASN1_OCTET_STRING *oct)
+char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, const ASN1_OCTET_STRING *oct)
 {
     return x509v3_bytes_to_hex(oct->data, oct->length);
 }
diff --git a/src/crypto/x509v3/v3_sxnet.c b/src/crypto/x509v3/v3_sxnet.c
deleted file mode 100644
index 51c5a67..0000000
--- a/src/crypto/x509v3/v3_sxnet.c
+++ /dev/null
@@ -1,274 +0,0 @@
-/* v3_sxnet.c */
-/*
- * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
- * 1999.
- */
-/* ====================================================================
- * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- *    software must display the following acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
- *
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- *    endorse or promote products derived from this software without
- *    prior written permission. For written permission, please contact
- *    licensing@OpenSSL.org.
- *
- * 5. Products derived from this software may not be called "OpenSSL"
- *    nor may "OpenSSL" appear in their names without prior written
- *    permission of the OpenSSL Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- *    acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
- *
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
- * ITS CONTRIBUTORS 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 ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * ====================================================================
- *
- * This product includes cryptographic software written by Eric Young
- * (eay@cryptsoft.com).  This product includes software written by Tim
- * Hudson (tjh@cryptsoft.com).
- *
- */
-
-#include <stdio.h>
-#include <string.h>
-
-#include <openssl/asn1.h>
-#include <openssl/asn1t.h>
-#include <openssl/conf.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-#include <openssl/obj.h>
-#include <openssl/x509v3.h>
-
-/* Support for Thawte strong extranet extension */
-
-#define SXNET_TEST
-
-static int sxnet_i2r(X509V3_EXT_METHOD *method, SXNET *sx, BIO *out,
-                     int indent);
-#ifdef SXNET_TEST
-static SXNET *sxnet_v2i(X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
-                        STACK_OF(CONF_VALUE) *nval);
-#endif
-const X509V3_EXT_METHOD v3_sxnet = {
-    NID_sxnet, X509V3_EXT_MULTILINE, ASN1_ITEM_ref(SXNET),
-    0, 0, 0, 0,
-    0, 0,
-    0,
-#ifdef SXNET_TEST
-    (X509V3_EXT_V2I)sxnet_v2i,
-#else
-    0,
-#endif
-    (X509V3_EXT_I2R)sxnet_i2r,
-    0,
-    NULL
-};
-
-ASN1_SEQUENCE(SXNETID) = {
-        ASN1_SIMPLE(SXNETID, zone, ASN1_INTEGER),
-        ASN1_SIMPLE(SXNETID, user, ASN1_OCTET_STRING)
-} ASN1_SEQUENCE_END(SXNETID)
-
-IMPLEMENT_ASN1_FUNCTIONS(SXNETID)
-
-ASN1_SEQUENCE(SXNET) = {
-        ASN1_SIMPLE(SXNET, version, ASN1_INTEGER),
-        ASN1_SEQUENCE_OF(SXNET, ids, SXNETID)
-} ASN1_SEQUENCE_END(SXNET)
-
-IMPLEMENT_ASN1_FUNCTIONS(SXNET)
-
-static int sxnet_i2r(X509V3_EXT_METHOD *method, SXNET *sx, BIO *out,
-                     int indent)
-{
-    long v;
-    char *tmp;
-    SXNETID *id;
-    size_t i;
-    v = ASN1_INTEGER_get(sx->version);
-    BIO_printf(out, "%*sVersion: %ld (0x%lX)", indent, "", v + 1, v);
-    for (i = 0; i < sk_SXNETID_num(sx->ids); i++) {
-        id = sk_SXNETID_value(sx->ids, i);
-        tmp = i2s_ASN1_INTEGER(NULL, id->zone);
-        BIO_printf(out, "\n%*sZone: %s, User: ", indent, "", tmp);
-        OPENSSL_free(tmp);
-        M_ASN1_OCTET_STRING_print(out, id->user);
-    }
-    return 1;
-}
-
-#ifdef SXNET_TEST
-
-/*
- * NBB: this is used for testing only. It should *not* be used for anything
- * else because it will just take static IDs from the configuration file and
- * they should really be separate values for each user.
- */
-
-static SXNET *sxnet_v2i(X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
-                        STACK_OF(CONF_VALUE) *nval)
-{
-    CONF_VALUE *cnf;
-    SXNET *sx = NULL;
-    size_t i;
-    for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
-        cnf = sk_CONF_VALUE_value(nval, i);
-        if (!SXNET_add_id_asc(&sx, cnf->name, cnf->value, -1))
-            return NULL;
-    }
-    return sx;
-}
-
-#endif
-
-/* Strong Extranet utility functions */
-
-/* Add an id given the zone as an ASCII number */
-
-int SXNET_add_id_asc(SXNET **psx, char *zone, char *user, int userlen)
-{
-    ASN1_INTEGER *izone = NULL;
-    if (!(izone = s2i_ASN1_INTEGER(NULL, zone))) {
-        OPENSSL_PUT_ERROR(X509V3, X509V3_R_ERROR_CONVERTING_ZONE);
-        return 0;
-    }
-    return SXNET_add_id_INTEGER(psx, izone, user, userlen);
-}
-
-/* Add an id given the zone as an unsigned long */
-
-int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user,
-                       int userlen)
-{
-    ASN1_INTEGER *izone = NULL;
-    if (!(izone = M_ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) {
-        OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
-        M_ASN1_INTEGER_free(izone);
-        return 0;
-    }
-    return SXNET_add_id_INTEGER(psx, izone, user, userlen);
-
-}
-
-/*
- * Add an id given the zone as an ASN1_INTEGER. Note this version uses the
- * passed integer and doesn't make a copy so don't free it up afterwards.
- */
-
-int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *zone, char *user,
-                         int userlen)
-{
-    SXNET *sx = NULL;
-    SXNETID *id = NULL;
-    if (!psx || !zone || !user) {
-        OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_NULL_ARGUMENT);
-        return 0;
-    }
-    if (userlen == -1)
-        userlen = strlen(user);
-    if (userlen > 64) {
-        OPENSSL_PUT_ERROR(X509V3, X509V3_R_USER_TOO_LONG);
-        return 0;
-    }
-    if (!*psx) {
-        if (!(sx = SXNET_new()))
-            goto err;
-        if (!ASN1_INTEGER_set(sx->version, 0))
-            goto err;
-        *psx = sx;
-    } else
-        sx = *psx;
-    if (SXNET_get_id_INTEGER(sx, zone)) {
-        OPENSSL_PUT_ERROR(X509V3, X509V3_R_DUPLICATE_ZONE_ID);
-        return 0;
-    }
-
-    if (!(id = SXNETID_new()))
-        goto err;
-    if (userlen == -1)
-        userlen = strlen(user);
-
-    if (!M_ASN1_OCTET_STRING_set(id->user, user, userlen))
-        goto err;
-    if (!sk_SXNETID_push(sx->ids, id))
-        goto err;
-    id->zone = zone;
-    return 1;
-
- err:
-    OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
-    SXNETID_free(id);
-    SXNET_free(sx);
-    *psx = NULL;
-    return 0;
-}
-
-ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, char *zone)
-{
-    ASN1_INTEGER *izone = NULL;
-    ASN1_OCTET_STRING *oct;
-    if (!(izone = s2i_ASN1_INTEGER(NULL, zone))) {
-        OPENSSL_PUT_ERROR(X509V3, X509V3_R_ERROR_CONVERTING_ZONE);
-        return NULL;
-    }
-    oct = SXNET_get_id_INTEGER(sx, izone);
-    M_ASN1_INTEGER_free(izone);
-    return oct;
-}
-
-ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone)
-{
-    ASN1_INTEGER *izone = NULL;
-    ASN1_OCTET_STRING *oct;
-    if (!(izone = M_ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) {
-        OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
-        M_ASN1_INTEGER_free(izone);
-        return NULL;
-    }
-    oct = SXNET_get_id_INTEGER(sx, izone);
-    M_ASN1_INTEGER_free(izone);
-    return oct;
-}
-
-ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone)
-{
-    SXNETID *id;
-    size_t i;
-    for (i = 0; i < sk_SXNETID_num(sx->ids); i++) {
-        id = sk_SXNETID_value(sx->ids, i);
-        if (!M_ASN1_INTEGER_cmp(id->zone, zone))
-            return id->user;
-    }
-    return NULL;
-}
-
-IMPLEMENT_ASN1_SET_OF(SXNETID)