You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@milagro.apache.org by sa...@apache.org on 2019/12/06 15:07:39 UTC

[incubator-milagro-crypto-c] branch issue51 updated (6b56b35 -> b0fa54f)

This is an automated email from the ASF dual-hosted git repository.

sandreoli pushed a change to branch issue51
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-crypto-c.git.


    from 6b56b35  remove DEBUG statements from Paillier code
     new bfd2d29  Revert "remove DEBUG statements from Paillier code"
     new 02699cc  rework paillier so ff_8192 is not needed
     new 52a2d98  fix bug where r was generated in Zn instead of Zn2
     new 63785bb  use side channel resistant functions when necessary
     new afeb64e  change paillier API to use private/public key
     new aee0051  ff - allow specification of exponent size in skpow
     new fc31c16  use inversion modulo 2^m trick for division
     new 363552b  remove unnecessary clause from rsa tests
     new 294e3c0  add i/o functions for paillier public key
     new b0fa54f  improve decryption using CRT

The 10 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CMakeLists.txt                    |   2 +-
 benchmark/benchtest_paillier.c.in |  91 +---
 cmake/AMCLParameters.cmake        |   1 -
 config.mk                         |   4 +-
 examples/example_paillier.c       | 114 ++---
 include/ff.h.in                   |  86 ++--
 include/paillier.h                | 102 ++--
 src/ff.c.in                       | 154 +++---
 src/paillier.c                    | 385 +++++++--------
 src/rsa.c.in                      |   4 +-
 test/CMakeLists.txt               |  18 +-
 test/test_ff_consistency_WWW.c.in | 287 ++++++++++++
 test/test_paillier_add.c          |  71 +--
 test/test_paillier_consistency.c  | 199 +++-----
 test/test_paillier_decrypt.c      | 187 +++++---
 test/test_paillier_encrypt.c      | 103 ++--
 test/test_paillier_keygen.c       | 432 ++++++++---------
 test/test_paillier_mult.c         |  71 +--
 testVectors/paillier/decrypt.txt  | 144 +++---
 testVectors/paillier/encrypt.txt  |  22 +-
 testVectors/paillier/keygen.txt   | 953 +++-----------------------------------
 21 files changed, 1330 insertions(+), 2100 deletions(-)
 create mode 100644 test/test_ff_consistency_WWW.c.in


[incubator-milagro-crypto-c] 05/10: change paillier API to use private/public key

Posted by sa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sandreoli pushed a commit to branch issue51
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-crypto-c.git

commit afeb64e2a675161de42227c606e8a0dd1e1d88f1
Author: samuele-andreoli <sa...@yahoo.it>
AuthorDate: Thu Nov 28 15:13:16 2019 +0000

    change paillier API to use private/public key
---
 benchmark/benchtest_paillier.c.in |  78 ++-------
 config.mk                         |   2 +-
 examples/example_paillier.c       | 101 +++--------
 include/paillier.h                |  60 ++++---
 src/paillier.c                    | 191 ++++++++++-----------
 test/test_paillier_add.c          |  68 +++-----
 test/test_paillier_consistency.c  | 142 +++++++---------
 test/test_paillier_decrypt.c      |  88 ++++------
 test/test_paillier_encrypt.c      |  98 +++++------
 test/test_paillier_keygen.c       | 344 +++++++++++++-------------------------
 test/test_paillier_mult.c         |  68 +++-----
 11 files changed, 470 insertions(+), 770 deletions(-)

diff --git a/benchmark/benchtest_paillier.c.in b/benchmark/benchtest_paillier.c.in
index 2e5a2ec..5511b5d 100644
--- a/benchmark/benchtest_paillier.c.in
+++ b/benchmark/benchtest_paillier.c.in
@@ -110,32 +110,13 @@ static void print_system_info()
 
 int paillier(csprng *RNG)
 {
-    int rc;
-
     int iterations;
     clock_t start;
     double elapsed;
 
-    char p[FS_2048];
-    octet P = {0,sizeof(p),p};
-    char q[FS_2048];
-    octet Q = {0,sizeof(q),q};
-
-    char p1[FS_2048];
-    octet P1 = {0,sizeof(p1),p1};
-    char q1[FS_2048];
-    octet Q1 = {0,sizeof(q1),q1};
-
-    char n[FS_2048] = {0};
-    octet N = {0,sizeof(n),n};
-    char g[FS_2048];
-    octet G = {0,sizeof(g),g};
-
-    char l[FS_2048] = {0};
-    octet L = {0,sizeof(l),l};
-
-    char m[FS_2048] = {0};
-    octet M = {0,sizeof(m),m};
+    // Key material
+    PAILLIER_private_key PRIV;
+    PAILLIER_public_key PUB;
 
     // Plaintext to encrypt
     char ptin[NTHREADS][FS_2048];
@@ -172,30 +153,25 @@ int paillier(csprng *RNG)
     // Initialize octets
     for(int i=0; i<NTHREADS; i++)
     {
-        memset(ptin[i], 0, FS_2048*sizeof(ptin[i][0]));
         PTIN[i].max = FS_2048;
-        PTIN[i].len = 0;
         PTIN[i].val = ptin[i];
+        OCT_clear(&PTIN[i]);
 
-        memset(ptout[i], 0, FS_2048*sizeof(ptout[i][0]));
         PTOUT[i].max = FS_2048;
-        PTOUT[i].len = 0;
         PTOUT[i].val = ptout[i];
+        OCT_clear(&PTOUT[i]);
 
-        memset(ptko[i], 0, FS_2048*sizeof(ptko[i][0]));
         PTK[i].max = FS_2048;
-        PTK[i].len = 0;
         PTK[i].val = ptko[i];
+        OCT_clear(&PTIN[i]);
 
-        memset(cto[i], 0, FS_4096*sizeof(cto[i][0]));
         CT[i].max = FS_4096;
-        CT[i].len = 0;
         CT[i].val = cto[i];
+        OCT_clear(&PTIN[i]);
 
-        memset(cta[i], 0, FS_4096*sizeof(cta[i][0]));
         CTA[i].max = FS_4096;
-        CTA[i].len = 0;
         CTA[i].val = cta[i];
+        OCT_clear(&PTIN[i]);
     }
 
     printf("Timing info\n");
@@ -206,7 +182,7 @@ int paillier(csprng *RNG)
     start=clock();
     do
     {
-        PAILLIER_KEY_PAIR(RNG, &P, &Q, &N, &G, &L, &M);
+        PAILLIER_KEY_PAIR(RNG, NULL, NULL,&PUB, &PRIV);
         iterations++;
         elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
     }
@@ -232,7 +208,7 @@ int paillier(csprng *RNG)
     start=clock();
     do
     {
-        PAILLIER_ENCRYPT(RNG, &N, &G, &PTIN[0], &CT[0], NULL);
+        PAILLIER_ENCRYPT(RNG, &PUB, &PTIN[0], &CT[0], NULL);
         iterations++;
         elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
     }
@@ -241,19 +217,14 @@ int paillier(csprng *RNG)
     printf("PAILLIER_ENCRYPT\t%8d iterations\t",iterations);
     printf("%8.2lf ms per iteration\n",elapsed);
 
-    rc = PAILLIER_ENCRYPT(RNG, &N, &G, &PTIN[1], &CT[1], NULL);
-    if (rc)
-    {
-        fprintf(stderr, "ERROR PAILLIER_ENCRYPT rc: %d\n", rc);
-        exit(EXIT_FAILURE);
-    }
+    PAILLIER_ENCRYPT(RNG, &PUB, &PTIN[1], &CT[1], NULL);
 
     // Multiple by constant
     iterations=0;
     start=clock();
     do
     {
-        PAILLIER_MULT(&N, &CT[0], &PTK[0], &CTA[0]);
+        PAILLIER_MULT(&PUB, &CT[0], &PTK[0], &CTA[0]);
         iterations++;
         elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
     }
@@ -262,19 +233,14 @@ int paillier(csprng *RNG)
     printf("PAILLIER_MULT\t\t%8d iterations\t",iterations);
     printf("%8.2lf ms per iteration\n",elapsed);
 
-    rc = PAILLIER_MULT(&N, &CT[1], &PTK[1], &CTA[1]);
-    if (rc)
-    {
-        fprintf(stderr, "ERROR PAILLIER_MULT rc: %d\n", rc);
-        exit(EXIT_FAILURE);
-    }
+    PAILLIER_MULT(&PUB, &CT[1], &PTK[1], &CTA[1]);
 
     // Homomorphic addition
     iterations=0;
     start=clock();
     do
     {
-        PAILLIER_ADD(&N, &CTA[0], &CTA[1], &CT3);
+        PAILLIER_ADD(&PUB, &CTA[0], &CTA[1], &CT3);
         iterations++;
         elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
     }
@@ -288,7 +254,7 @@ int paillier(csprng *RNG)
     start=clock();
     do
     {
-        PAILLIER_DECRYPT(&N, &L, &M, &CT3, &PT3);
+        PAILLIER_DECRYPT(&PRIV, &CT3, &PT3);
         iterations++;
         elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
     }
@@ -312,22 +278,14 @@ int paillier(csprng *RNG)
     printf("\n");
 #endif
 
-    OCT_clear(&P);
-    OCT_clear(&Q);
-    OCT_clear(&P1);
-    OCT_clear(&Q1);
-    OCT_clear(&N);
-    OCT_clear(&G);
-    OCT_clear(&L);
-    OCT_clear(&M);
-    OCT_clear(&CT3);
+    // Clean sensitive memory
+    PAILLIER_PRIVATE_KEY_KILL(&PRIV);
+
     OCT_clear(&PT3);
     for(int i=0; i<NTHREADS; i++)
     {
         OCT_clear(&PTIN[i]);
         OCT_clear(&PTOUT[i]);
-        OCT_clear(&CT[i]);
-        OCT_clear(&CTA[i]);
     }
     return 0;
 }
diff --git a/config.mk b/config.mk
index bdbc4cd..18467bb 100644
--- a/config.mk
+++ b/config.mk
@@ -6,8 +6,8 @@ WORD_SIZE:=64
 # Current choice of Elliptic Curve ANSSI C25519 NIST521 BLS24 C41417 NUMS256E BLS381 ED25519 NUMS256W BLS383 FP256BN NUMS384E BLS461 FP512BN NUMS384W BLS48 GOLDILOCKS NUMS512E BN254 HIFIVE NUMS512W BN254CX NIST256 SECP256K1 BRAINPOOL NIST384
 AMCL_CURVE:=ED25519,NIST256,GOLDILOCKS,BLS381
 
-# RSA security level: 2048 3072 4096 (8192 for Paillier)
 AMCL_RSA:=2048,4096
+# RSA security level: 2048 3072 4096
 
 # Build type Debug Release Coverage ASan Check CheckFull
 CMAKE_BUILD_TYPE:=Release
diff --git a/examples/example_paillier.c b/examples/example_paillier.c
index b293724..d51b174 100644
--- a/examples/example_paillier.c
+++ b/examples/example_paillier.c
@@ -35,22 +35,9 @@ under the License.
 
 int paillier(csprng *RNG)
 {
-    int rc;
-    char p[FS_2048];
-    octet P = {0,sizeof(p),p};
-    char q[FS_2048];
-    octet Q = {0,sizeof(q),q};
-
-    char n[FS_2048] = {0};
-    octet N = {0,sizeof(n),n};
-    char g[FS_2048];
-    octet G = {0,sizeof(g),g};
-
-    char l[FS_2048] = {0};
-    octet L = {0,sizeof(l),l};
-
-    char m[FS_2048] = {0};
-    octet M = {0,sizeof(m),m};
+    // Key material
+    PAILLIER_private_key PRIV;
+    PAILLIER_public_key PUB;
 
     // Plaintext to encrypt
     char ptin[NTHREADS][FS_2048];
@@ -85,61 +72,51 @@ int paillier(csprng *RNG)
     // Initialize octets
     for(int i=0; i<NTHREADS; i++)
     {
-        memset(ptin[i], 0, FS_2048*sizeof(ptin[i][0]));
         PTIN[i].max = FS_2048;
-        PTIN[i].len = 0;
         PTIN[i].val = ptin[i];
+        OCT_clear(&PTIN[i]);
 
-        memset(ptout[i], 0, FS_2048*sizeof(ptout[i][0]));
         PTOUT[i].max = FS_2048;
-        PTOUT[i].len = 0;
         PTOUT[i].val = ptout[i];
+        OCT_clear(&PTOUT[i]);
 
-        memset(ptko[i], 0, FS_2048*sizeof(ptko[i][0]));
         PTK[i].max = FS_2048;
-        PTK[i].len = 0;
         PTK[i].val = ptko[i];
+        OCT_clear(&PTIN[i]);
 
-        memset(cto[i], 0, FS_4096*sizeof(cto[i][0]));
         CT[i].max = FS_4096;
-        CT[i].len = 0;
         CT[i].val = cto[i];
+        OCT_clear(&PTIN[i]);
 
-        memset(cta[i], 0, FS_4096*sizeof(cta[i][0]));
         CTA[i].max = FS_4096;
-        CTA[i].len = 0;
         CTA[i].val = cta[i];
+        OCT_clear(&PTIN[i]);
     }
 
     printf("Generating public/private key pair\n");
-    rc = PAILLIER_KEY_PAIR(RNG, &P, &Q, &N, &G, &L, &M);
-    if (rc)
-    {
-        fprintf(stderr, "ERROR PAILLIER_KEY_PAIR rc: %d\n", rc);
-        exit(EXIT_FAILURE);
-    }
+    PAILLIER_KEY_PAIR(RNG, NULL, NULL, &PUB, &PRIV);
 
     printf("P: ");
-    OCT_output(&P);
+    FF_4096_output(PRIV.p, HFLEN_4096/2);
     printf("\n");
     printf("Q: ");
-    OCT_output(&Q);
+    FF_4096_output(PRIV.q, HFLEN_4096/2);
     printf("\n");
 
     printf("Public Key \n");
     printf("N: ");
-    OCT_output(&N);
+    FF_4096_output(PRIV.n, HFLEN_4096);
     printf("\n");
     printf("G: ");
-    OCT_output(&G);
+    FF_4096_output(PRIV.g, FFLEN_4096);
     printf("\n");
 
     printf("Secret Key \n");
     printf("L: ");
-    OCT_output(&L);
+    FF_4096_output(PRIV.l, HFLEN_4096);
     printf("\n");
     printf("M: ");
-    OCT_output(&M);
+    FF_4096_output(PRIV.m, HFLEN_4096);
     printf("\n");
 
     // Set plaintext values
@@ -164,12 +141,7 @@ int paillier(csprng *RNG)
     // Encrypt plaintext
     for(int i=0; i<NTHREADS; i++)
     {
-        rc = PAILLIER_ENCRYPT(RNG, &N, &G, &PTIN[i], &CT[i], NULL);
-        if (rc)
-        {
-            fprintf(stderr, "ERROR PAILLIER_ENCRYPT rc: %d\n", rc);
-            exit(EXIT_FAILURE);
-        }
+        PAILLIER_ENCRYPT(RNG, &PUB, &PTIN[i], &CT[i], NULL);
     }
 
     for(int i=0; i<NTHREADS; i++)
@@ -182,12 +154,7 @@ int paillier(csprng *RNG)
     // Decrypt ciphertexts
     for(int i=0; i<NTHREADS; i++)
     {
-        rc = PAILLIER_DECRYPT(&N, &L, &M, &CT[i], &PTOUT[i]);
-        if (rc)
-        {
-            fprintf(stderr, "ERROR PAILLIER_DECRYPT rc: %d\n", rc);
-            exit(EXIT_FAILURE);
-        }
+        PAILLIER_DECRYPT(&PRIV, &CT[i], &PTOUT[i]);
     }
 
     for(int i=0; i<NTHREADS; i++)
@@ -199,20 +166,10 @@ int paillier(csprng *RNG)
 
     for(int i=0; i<NTHREADS; i++)
     {
-        rc = PAILLIER_MULT(&N, &CT[i], &PTK[i], &CTA[i]);
-        if (rc)
-        {
-            fprintf(stderr, "ERROR PAILLIER_MULT rc: %d\n", rc);
-            exit(EXIT_FAILURE);
-        }
+        PAILLIER_MULT(&PUB, &CT[i], &PTK[i], &CTA[i]);
     }
 
-    rc = PAILLIER_ADD(&N, &CTA[0], &CTA[1], &CT3);
-    if (rc)
-    {
-        fprintf(stderr, "ERROR PAILLIER_ADD rc: %d\n", rc);
-        exit(EXIT_FAILURE);
-    }
+    PAILLIER_ADD(&PUB, &CTA[0], &CTA[1], &CT3);
 
     for(int i=0; i<NTHREADS; i++)
     {
@@ -224,32 +181,22 @@ int paillier(csprng *RNG)
     OCT_output(&CT3);
     printf("\n");
 
-    rc = PAILLIER_DECRYPT(&N, &L, &M, &CT3, &PT3);
-    if (rc)
-    {
-        fprintf(stderr, "ERROR PAILLIER_DECRYPT rc: %d\n", rc);
-        exit(EXIT_FAILURE);
-    }
+    PAILLIER_DECRYPT(&PRIV, &CT3, &PT3);
 
     printf("PT3: ");
     OCT_output(&PT3);
     printf("\n");
 
-    OCT_clear(&P);
-    OCT_clear(&Q);
-    OCT_clear(&N);
-    OCT_clear(&G);
-    OCT_clear(&L);
-    OCT_clear(&M);
-    OCT_clear(&CT3);
+    // Clear sensitive memory
+    PAILLIER_PRIVATE_KEY_KILL(&PRIV);
+
     OCT_clear(&PT3);
     for(int i=0; i<NTHREADS; i++)
     {
         OCT_clear(&PTIN[i]);
         OCT_clear(&PTOUT[i]);
-        OCT_clear(&CT[i]);
-        OCT_clear(&CTA[i]);
     }
+
     return 0;
 }
 
diff --git a/include/paillier.h b/include/paillier.h
index 8072370..7ba9592 100644
--- a/include/paillier.h
+++ b/include/paillier.h
@@ -38,6 +38,29 @@ under the License.
 #define HFS_4096 MODBYTES_512_60*HFLEN_4096   /**< Half 4096 field size in bytes */
 #define HFS_2048 MODBYTES_1024_58*HFLEN_2048  /**< Half 2048 field size in bytes */
 
+/*!
+ * \brief Paillier Public Key
+ */
+typedef struct{
+    BIG_512_60 n[FFLEN_4096]; /**< Paillier Modulus - n = pq */
+    BIG_512_60 g[FFLEN_4096]; /**< Public Base - n+1 */
+
+    BIG_512_60 n2[FFLEN_4096]; /**< Precomputed n^2 */
+}PAILLIER_public_key;
+
+/*!
+ * \brief Paillier Private Key
+ */
+typedef struct{
+    BIG_512_60 n[FFLEN_4096]; /**< Paillier Modulus - n = pq*/
+    BIG_512_60 g[FFLEN_4096]; /**< Public Base - n+1 */
+    BIG_512_60 l[FFLEN_4096]; /**< Private Key (Euler totient of n) */
+    BIG_512_60 m[FFLEN_4096]; /**< Precomputed l^(-1) */
+
+    BIG_512_60 p[HFLEN_4096];  /**< Secret Prime */
+    BIG_512_60 q[HFLEN_4096];  /**< Secret Prime */
+    BIG_512_60 n2[FFLEN_4096]; /**< Precomputed n^2 */
+}PAILLIER_private_key;
 
 /*! \brief Generate the key pair
  *
@@ -53,13 +76,16 @@ under the License.
  *  @param  RNG              Pointer to a cryptographically secure random number generator
  *  @param  P                Prime number. If RNG is NULL then this value is read
  *  @param  Q                Prime number. If RNG is NULL then this value is read
- *  @param  N                Public key (see above)
- *  @param  G                Public key (see above)
- *  @param  L                Private key (see above)
- *  @param  M                Private key (see above)
- *  @return                  Returns 0 or else error code
+ *  @param  PUB              Public key
+ *  @param  PRIV             Private key
  */
-int PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, octet* N, octet* G, octet* L, octet* M);
+void PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, PAILLIER_public_key *PUB, PAILLIER_private_key *PRIV);
+
+/*! \brief Clear private key
+ *
+ *  @param PRIV             Private key to clean
+ */
+void PAILLIER_PRIVATE_KEY_KILL(PAILLIER_private_key *PRIV);
 
 /*! \brief Encrypt a plaintext
  *
@@ -72,14 +98,12 @@ int PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, octet* N, octet* G, octet
  *  </ol>
  *
  *  @param  RNG              Pointer to a cryptographically secure random number generator
- *  @param  N                Public key
- *  @param  G                Public key (see above)
+ *  @param  PUB              Public key
  *  @param  PT               Plaintext
  *  @param  CT               Ciphertext
  *  @param  R                R value for testing. If RNG is NULL then this value is read.
- *  @return                  Returns 0 or else error code
  */
-int PAILLIER_ENCRYPT(csprng *RNG, octet* N, octet* G, octet* PT, octet* CT, octet* R);
+void PAILLIER_ENCRYPT(csprng *RNG, PAILLIER_public_key *PUB, octet* PT, octet* CT, octet* R);
 
 /*! \brief Decrypt ciphertext
  *
@@ -92,14 +116,11 @@ int PAILLIER_ENCRYPT(csprng *RNG, octet* N, octet* G, octet* PT, octet* CT, octe
  *  <li> \f$ pt = ctln * m \pmod{n} \f$
  *  </ol>
  *
- *  @param   N                Public key
- *  @param   L                Private key (see above)
- *  @param   M                Private key (see above)
+ *  @param   PRIV             Private key
  *  @param   CT               Ciphertext
  *  @param   PT               Plaintext
- *  @return                   Returns 0 or else error code
  */
-int PAILLIER_DECRYPT(octet* N, octet* L, octet* M, octet* CT, octet* PT);
+void PAILLIER_DECRYPT(PAILLIER_private_key *PRIV, octet* CT, octet* PT);
 
 /*! \brief Homomorphic addition of plaintexts
  *
@@ -109,13 +130,13 @@ int PAILLIER_DECRYPT(octet* N, octet* L, octet* M, octet* CT, octet* PT);
  *  <li> \f$ ct = ct1*ct2 \pmod{n^2} \f$
  *  </ol>
  *
- *  @param   N                Public key
+ *  @param   PUB              Public key
  *  @param   CT1              Ciphertext one
  *  @param   CT2              Ciphertext two
  *  @param   CT               Ciphertext
  *  @return                   Returns 0 or else error code
  */
-int PAILLIER_ADD(octet* N, octet* CT1, octet* CT2, octet* CT);
+void PAILLIER_ADD(PAILLIER_public_key *PUB, octet* CT1, octet* CT2, octet* CT);
 
 /*! \brief Homomorphic multipication of plaintexts
  *
@@ -125,10 +146,9 @@ int PAILLIER_ADD(octet* N, octet* CT1, octet* CT2, octet* CT);
  *  <li> \f$ ct = ct1^{m2} \pmod{n^2} \f$
  *  </ol>
  *
- *  @param   N                Public key
+ *  @param   PUB              Public key
  *  @param   CT1              Ciphertext one
  *  @param   PT               Plaintext constant
  *  @param   CT               Ciphertext
- *  @return                   Returns 0 or else error code
  */
-int PAILLIER_MULT(octet* N, octet* CT1, octet* PT, octet* CT);
+void PAILLIER_MULT(PAILLIER_public_key *PUB, octet* CT1, octet* PT, octet* CT);
diff --git a/src/paillier.c b/src/paillier.c
index ddf25be..aa3a5c5 100644
--- a/src/paillier.c
+++ b/src/paillier.c
@@ -27,7 +27,7 @@ under the License.
 #include "ff_2048.h"
 #include "paillier.h"
 
-int FF_4096_divide(BIG_512_60 x[], BIG_512_60 y[], BIG_512_60 z[])
+void FF_4096_divide(BIG_512_60 x[], BIG_512_60 y[], BIG_512_60 z[])
 {
     BIG_512_60 d[FFLEN_4096];
     BIG_512_60 q[FFLEN_4096];
@@ -61,12 +61,10 @@ int FF_4096_divide(BIG_512_60 x[], BIG_512_60 y[], BIG_512_60 z[])
         // z = z + q i.e. update quotient
         FF_4096_add(z,z,q,FFLEN_4096);
     }
-
-    return 0;
 }
 
 /* generate a Paillier key pair */
-int PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, octet* N, octet* G, octet* L, octet* M)
+void PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, PAILLIER_public_key *PUB, PAILLIER_private_key *PRIV)
 {
     BIG_1024_58 p[HFLEN_2048];
     BIG_1024_58 q[HFLEN_2048];
@@ -131,18 +129,49 @@ int PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, octet* N, octet* G, octet
     FF_2048_inc(p,1,HFLEN_2048);
     FF_2048_inc(q,1,HFLEN_2048);
 
-    // Output
-    if (P != NULL)
-        FF_2048_toOctet(P, p, HFLEN_2048);
 
-    if (Q != NULL)
-        FF_2048_toOctet(Q, q, HFLEN_2048);
+    // Output Private Key
+    char oct[FS_2048];
+    octet OCT = {0,FS_2048, oct};
+
+    FF_2048_toOctet(&OCT, p, HFLEN_2048);
+    OCT_pad(&OCT,HFS_4096);
+    FF_4096_fromOctet(PRIV->p, &OCT, HFLEN_4096);
+    OCT_empty(&OCT);
+
+    FF_2048_toOctet(&OCT, q, HFLEN_2048);
+    OCT_pad(&OCT,HFS_4096);
+    FF_4096_fromOctet(PRIV->q, &OCT, HFLEN_4096);
+    OCT_empty(&OCT);
+
+    FF_2048_toOctet(&OCT, n, FFLEN_2048);
+    FF_4096_zero(PRIV->n, FFLEN_4096);
+    FF_4096_fromOctet(PRIV->n, &OCT, HFLEN_4096);
+    OCT_empty(&OCT);
 
-    FF_2048_toOctet(N, n, FFLEN_2048);
-    FF_2048_toOctet(G, g, FFLEN_2048);
+    FF_2048_toOctet(&OCT, g, FFLEN_2048);
+    FF_4096_zero(PRIV->g, FFLEN_4096);
+    FF_4096_fromOctet(PRIV->g, &OCT, HFLEN_4096);
+    OCT_empty(&OCT);
 
-    FF_2048_toOctet(L, l, FFLEN_2048);
-    FF_2048_toOctet(M, m, FFLEN_2048);
+    FF_2048_toOctet(&OCT, l, FFLEN_2048);
+    FF_4096_zero(PRIV->l, FFLEN_4096);
+    FF_4096_fromOctet(PRIV->l, &OCT, HFLEN_4096);
+    OCT_empty(&OCT);
+
+    FF_2048_toOctet(&OCT, m, FFLEN_2048);
+    FF_4096_zero(PRIV->m, FFLEN_4096);
+    FF_4096_fromOctet(PRIV->m, &OCT, HFLEN_4096);
+    OCT_empty(&OCT);
+
+    // Precompute n^2
+    FF_4096_sqr(PRIV->n2, PRIV->n, HFLEN_4096);
+    FF_4096_norm(PRIV->n2, FFLEN_4096);
+
+    // Output Public Key
+    FF_4096_copy(PUB->n , PRIV->n , FFLEN_4096);
+    FF_4096_copy(PUB->g , PRIV->g , FFLEN_4096);
+    FF_4096_copy(PUB->n2, PRIV->n2, FFLEN_4096);
 
 #ifdef DEBUG
     printf("p ");
@@ -167,21 +196,27 @@ int PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, octet* N, octet* G, octet
     printf("\n");
 #endif
 
-    return 0;
+    // Clean secret keys from memory
+    FF_2048_zero(p,HFLEN_2048);
+    FF_2048_zero(q,HFLEN_2048);
+    FF_2048_zero(l,FFLEN_2048);
+    FF_2048_zero(m,FFLEN_2048);
+}
+
+/* Clean secrets from private key */
+void PAILLIER_PRIVATE_KEY_KILL(PAILLIER_private_key *PRIV)
+{
+    FF_4096_zero(PRIV->l, FFLEN_4096);
+    FF_4096_zero(PRIV->m, FFLEN_4096);
+    FF_4096_zero(PRIV->p, HFLEN_4096/2);
+    FF_4096_zero(PRIV->q, HFLEN_4096/2);
 }
 
 /* Paillier encrypt
  R is for testing
 */
-int PAILLIER_ENCRYPT(csprng *RNG, octet* N, octet* G, octet* PT, octet* CT, octet* R)
+void PAILLIER_ENCRYPT(csprng *RNG, PAILLIER_public_key *PUB, octet* PT, octet* CT, octet* R)
 {
-    // Public key
-    BIG_512_60 n[FFLEN_4096];
-    BIG_512_60 g[FFLEN_4096];
-
-    // n2 = n^2
-    BIG_512_60 n2[FFLEN_4096];
-
     // Random r < n
     BIG_512_60 r[FFLEN_4096];
 
@@ -191,23 +226,13 @@ int PAILLIER_ENCRYPT(csprng *RNG, octet* N, octet* G, octet* PT, octet* CT, octe
     // ciphertext
     BIG_512_60 ct[FFLEN_4096];
 
-    FF_4096_zero(n, FFLEN_4096);
-    FF_4096_fromOctet(n,N,HFLEN_4096);
-
-    FF_4096_zero(g, FFLEN_4096);
-    FF_4096_fromOctet(g,G,HFLEN_4096);
-
     FF_4096_zero(pt, FFLEN_4096);
     FF_4096_fromOctet(pt,PT,HFLEN_4096);
 
-    // n2 = n^2
-    FF_4096_sqr(n2, n, HFLEN_4096);
-    FF_4096_norm(n2, FFLEN_4096);
-
     // In production generate R from RNG
     if (RNG!=NULL)
     {
-        FF_4096_randomnum(r,n2,RNG,FFLEN_4096);
+        FF_4096_randomnum(r,PUB->n2,RNG,FFLEN_4096);
     }
     else
     {
@@ -215,7 +240,7 @@ int PAILLIER_ENCRYPT(csprng *RNG, octet* N, octet* G, octet* PT, octet* CT, octe
     }
 
     // ct = g^pt * r^n mod n2
-    FF_4096_skpow2(ct, g, pt, r, n, n2, FFLEN_4096);
+    FF_4096_skpow2(ct, PUB->g, pt, r, PUB->n, PUB->n2, FFLEN_4096);
 
     // Output
     FF_4096_toOctet(CT, ct, FFLEN_4096);
@@ -228,13 +253,13 @@ int PAILLIER_ENCRYPT(csprng *RNG, octet* N, octet* G, octet* PT, octet* CT, octe
 
 #ifdef DEBUG
     printf("n ");
-    FF_4096_output(n,FFLEN_4096);
+    FF_4096_output(PUB->n,FFLEN_4096);
     printf("\n\n");
     printf("g ");
-    FF_4096_output(g,FFLEN_4096);
+    FF_4096_output(PUB->g,FFLEN_4096);
     printf("\n\n");
     printf("n2 ");
-    FF_4096_output(n2,FFLEN_4096);
+    FF_4096_output(PUB->n2,FFLEN_4096);
     printf("\n\n");
     printf("r ");
     FF_4096_output(r,FFLEN_4096);
@@ -250,51 +275,29 @@ int PAILLIER_ENCRYPT(csprng *RNG, octet* N, octet* G, octet* PT, octet* CT, octe
     printf("\n");
 #endif
 
-    return 0;
+    // Clean memory
+    FF_4096_zero(pt, HFLEN_4096);
 }
 
 /* Paillier decrypt */
-int PAILLIER_DECRYPT(octet* N, octet* L, octet* M, octet* CT, octet* PT)
+void PAILLIER_DECRYPT(PAILLIER_private_key *PRIV, octet* CT, octet* PT)
 {
-    // Public key
-    BIG_512_60 n[FFLEN_4096];
-
-    // secret key
-    BIG_512_60 l[FFLEN_4096];
-    BIG_512_60 m[FFLEN_4096];
-
-    // Ciphertext
+       // Ciphertext
     BIG_512_60 ct[FFLEN_4096];
 
     // Plaintext
     BIG_512_60 pt[FFLEN_4096];
 
-    // n2 = n^2
-    BIG_512_60 n2[FFLEN_4096];
-
     // ctl = ct^l mod n^2
     BIG_512_60 ctl[FFLEN_4096];
 
     // ctln = ctl / n
     BIG_512_60 ctln[FFLEN_4096];
 
-    FF_4096_zero(n, FFLEN_4096);
-    FF_4096_fromOctet(n,N,HFLEN_4096);
-
-    FF_4096_zero(l, FFLEN_4096);
-    FF_4096_fromOctet(l,L,HFLEN_4096);
-
-    FF_4096_zero(m, FFLEN_4096);
-    FF_4096_fromOctet(m,M,HFLEN_4096);
-
     FF_4096_fromOctet(ct,CT,FFLEN_4096);
 
-    // n2 = n^2
-    FF_4096_sqr(n2, n, HFLEN_4096);
-    FF_4096_norm(n2, FFLEN_4096);
-
     // ct^l mod n^2 - 1
-    FF_4096_skpow(ctl,ct,l,n2,FFLEN_4096);
+    FF_4096_skpow(ctl,ct,PRIV->l,PRIV->n2,FFLEN_4096);
     FF_4096_dec(ctl,1,FFLEN_4096);
 
 #ifdef DEBUG
@@ -306,31 +309,31 @@ int PAILLIER_DECRYPT(octet* N, octet* L, octet* M, octet* CT, octet* PT)
     // ctln = ctl / n
     // note that ctln fits into a FF_2048 element,
     // since ctln = ctl/n < n^2 / n = n
-    FF_4096_divide(n, ctl, ctln);
+    FF_4096_divide(PRIV->n, ctl, ctln);
 
     // pt = ctln * m mod n
     // the result fits into a FF_4096 element,
     // since both m and ctln fit into a FF_2048 element
-    FF_4096_mul(pt, ctln, m, HFLEN_4096);
+    FF_4096_mul(pt, ctln, PRIV->m, HFLEN_4096);
 #ifdef DEBUG
     printf("pt1 ");
     FF_4096_output(pt,FFLEN_4096);
     printf("\n\n");
 #endif
-    FF_4096_mod(pt,n,FFLEN_4096);
+    FF_4096_mod(pt,PRIV->n,FFLEN_4096);
 
     // Output
     FF_4096_toOctet(PT, pt, HFLEN_4096);
 
 #ifdef DEBUG
     printf("PAILLIER_DECRYPT n ");
-    FF_4096_output(n,FFLEN_4096);
+    FF_4096_output(PRIV->n,FFLEN_4096);
     printf("\n\n");
     printf("PAILLIER_DECRYPT l ");
-    FF_4096_output(l,FFLEN_4096);
+    FF_4096_output(PRIV->l,FFLEN_4096);
     printf("\n\n");
     printf("PAILLIER_DECRYPT m ");
-    FF_4096_output(m,FFLEN_4096);
+    FF_4096_output(PRIV->m,FFLEN_4096);
     printf("\n\n");
     printf("PAILLIER_DECRYPT ct ");
     FF_4096_output(ct,FFLEN_4096);
@@ -343,8 +346,10 @@ int PAILLIER_DECRYPT(octet* N, octet* L, octet* M, octet* CT, octet* PT)
     printf("\n\n");
 #endif
 
-    return 0;
-
+    // Clean memory
+    FF_4096_zero(ctl, FFLEN_4096);
+    FF_4096_zero(ctln, FFLEN_4096);
+    FF_4096_zero(pt, HFLEN_4096);
 }
 
 /* Homomorphic addition of plaintexts */
@@ -352,27 +357,16 @@ int PAILLIER_DECRYPT(octet* N, octet* L, octet* M, octet* CT, octet* PT)
     ct = ct1 * ct2
     ct = ct % n2
 */
-int PAILLIER_ADD(octet* N, octet* CT1, octet* CT2, octet* CT)
+void PAILLIER_ADD(PAILLIER_public_key *PUB, octet* CT1, octet* CT2, octet* CT)
 {
-    // Public key
-    BIG_512_60 n[HFLEN_4096];
-
-    // n2 = n^2
-    BIG_512_60 n2[FFLEN_4096];
-
     // ciphertext
     BIG_512_60 ct1[FFLEN_4096];
     BIG_512_60 ct2[FFLEN_4096];
     BIG_512_60 ct[2 * FFLEN_4096];
 
-    FF_4096_fromOctet(n,N,HFLEN_4096);
     FF_4096_fromOctet(ct1,CT1,FFLEN_4096);
     FF_4096_fromOctet(ct2,CT2,FFLEN_4096);
 
-    // n2 = n^2
-    FF_4096_sqr(n2, n, HFLEN_4096);
-    FF_4096_norm(n2, FFLEN_4096);
-
 #ifdef DEBUG
     printf("PAILLIER_ADD ct1 ");
     FF_4096_output(ct1,FFLEN_4096);
@@ -391,14 +385,14 @@ int PAILLIER_ADD(octet* N, octet* CT1, octet* CT2, octet* CT)
     printf("\n\n");
 #endif
 
-    FF_4096_dmod(ct,ct,n2,FFLEN_4096);
+    FF_4096_dmod(ct,ct,PUB->n2,FFLEN_4096);
 
     // Output
     FF_4096_toOctet(CT, ct, FFLEN_4096);
 
 #ifdef DEBUG
     printf("PAILLIER_ADD n ");
-    FF_4096_output(n,HFLEN_4096);
+    FF_4096_output(PUB->n,HFLEN_4096);
     printf("\n\n");
     printf("PAILLIER_ADD ct1 ");
     FF_4096_output(ct1,FFLEN_4096);
@@ -407,8 +401,6 @@ int PAILLIER_ADD(octet* N, octet* CT1, octet* CT2, octet* CT)
     FF_4096_output(ct2,FFLEN_4096);
     printf("\n\n");
 #endif
-
-    return 0;
 }
 
 /* Homomorphic multiplation of plaintext
@@ -416,14 +408,8 @@ int PAILLIER_ADD(octet* N, octet* CT1, octet* CT2, octet* CT)
     ct = ct1 ^ pt mod n^2
 
 */
-int PAILLIER_MULT(octet* N, octet* CT1, octet* PT, octet* CT)
+void PAILLIER_MULT(PAILLIER_public_key *PUB, octet* CT1, octet* PT, octet* CT)
 {
-    // Public key
-    BIG_512_60 n[HFLEN_4096];
-
-    // n^2
-    BIG_512_60 n2[FFLEN_4096];
-
     // Ciphertext
     BIG_512_60 ct1[FFLEN_4096];
 
@@ -433,29 +419,23 @@ int PAILLIER_MULT(octet* N, octet* CT1, octet* PT, octet* CT)
     // Ciphertext output. ct = ct1 ^ pt mod n^2
     BIG_512_60 ct[FFLEN_4096];
 
-    FF_4096_fromOctet(n,N,HFLEN_4096);
-
     FF_4096_zero(pt, FFLEN_4096);
     FF_4096_fromOctet(pt,PT,HFLEN_4096);
 
     FF_4096_fromOctet(ct1,CT1,FFLEN_4096);
 
-    // n2 = n^2
-    FF_4096_sqr(n2, n, HFLEN_4096);
-    FF_4096_norm(n2, FFLEN_4096);
-
     // ct1^pt mod n^2
-    FF_4096_skpow(ct,ct1,pt,n2,FFLEN_4096);
+    FF_4096_skpow(ct,ct1,pt,PUB->n2,FFLEN_4096);
 
     // output
     FF_4096_toOctet(CT, ct, FFLEN_4096);
 
 #ifdef DEBUG
     printf("PAILLIER_MULT n: ");
-    FF_4096_output(n,HFLEN_4096);
+    FF_4096_output(PUB->n,HFLEN_4096);
     printf("\n\n");
     printf("PAILLIER_MULT n2: ");
-    FF_4096_output(n2,FFLEN_4096);
+    FF_4096_output(PUB->n2,FFLEN_4096);
     printf("\n\n");
     printf("PAILLIER_MULT ct1: ");
     FF_4096_output(ct1,FFLEN_4096);
@@ -468,5 +448,6 @@ int PAILLIER_MULT(octet* N, octet* CT1, octet* PT, octet* CT)
     printf("\n\n");
 #endif
 
-    return 0;
+    // Clean memory
+    FF_4096_zero(pt, HFLEN_4096);
 }
diff --git a/test/test_paillier_add.c b/test/test_paillier_add.c
index 7408547..7b1ba93 100644
--- a/test/test_paillier_add.c
+++ b/test/test_paillier_add.c
@@ -41,6 +41,16 @@ void read_OCTET(octet* OCT, char* string)
     OCT_fromHex(OCT,buff);
 }
 
+void read_FF_4096(BIG_512_60 *x, char* string, int n)
+{
+    int len = strlen(string);
+    char oct[len/2];
+    octet OCT = {0, len/2, oct};
+
+    read_OCTET(&OCT, string);
+    FF_4096_fromOctet(x, &OCT, n);
+}
+
 int main(int argc, char** argv)
 {
     if (argc != 2)
@@ -55,20 +65,13 @@ int main(int argc, char** argv)
     char line[LINE_LEN]= {0};
     char *linePtr=NULL;
 
-    int applyVector=0;
-
-    const char* TESTline = "TEST = ";
-    int testNo=0;
-
     char ct[FS_4096]= {0};
     octet CT = {0,sizeof(ct),ct};
 
-    // Test result
-    int result = 0;
-    const char* RESULTline = "RESULT = ";
+    int testNo;
+    const char* TESTline = "TEST = ";
 
-    char ngolden[FS_2048]= {0};
-    octet NGOLDEN = {0,sizeof(ngolden),ngolden};
+    PAILLIER_public_key PUB;
     const char* Nline = "N = ";
 
     char ct1golden[FS_4096]= {0};
@@ -98,7 +101,6 @@ int main(int argc, char** argv)
             len = strlen(TESTline);
             linePtr = line + len;
             sscanf(linePtr,"%d\n",&testNo);
-            printf("TEST = %d\n",testNo);
         }
 
         // Read N
@@ -106,10 +108,14 @@ int main(int argc, char** argv)
         {
             len = strlen(Nline);
             linePtr = line + len;
-            read_OCTET(&NGOLDEN,linePtr);
+            read_FF_4096(PUB.n, linePtr, HFLEN_4096);
+
+            FF_4096_sqr(PUB.n2, PUB.n, HFLEN_4096);
+            FF_4096_norm(PUB.n2, FFLEN_4096);
 #ifdef DEBUG
             printf("N = ");
-            OCT_output(&NGOLDEN);
+            FF_4096_output(PUB.n , FFLEN_4096);
+            printf("\n");
 #endif
         }
 
@@ -137,7 +143,7 @@ int main(int argc, char** argv)
 #endif
         }
 
-        // Read CIPHERTEXT
+        // Read CIPHERTEXT and process test vector
         if (!strncmp(line,CTline, strlen(CTline)))
         {
             len = strlen(CTline);
@@ -147,32 +153,8 @@ int main(int argc, char** argv)
             printf("CIPHERTEXT = ");
             OCT_output(&CTGOLDEN);
 #endif
-        }
-
-        // Read expected result
-        if (!strncmp(line,RESULTline, strlen(RESULTline)))
-        {
-            len = strlen(RESULTline);
-            linePtr = line + len;
-            sscanf(linePtr,"%d\n",&result);
-            applyVector=1;
-#ifdef DEBUG
-            printf("RESULT = %d\n\n", result);
-#endif
-        }
-
-        if (applyVector)
-        {
-            applyVector=0;
-
-            int rc = PAILLIER_ADD(&NGOLDEN, &CT1GOLDEN, &CT2GOLDEN, &CT);
-            if (rc)
-            {
-                fprintf(stderr, "FAILURE PAILLIER_ADD rc: %d\n", rc);
-                fclose(fp);
-                exit(EXIT_FAILURE);
-            }
 
+            PAILLIER_ADD(&PUB, &CT1GOLDEN, &CT2GOLDEN, &CT);
 
 #ifdef DEBUG
             printf("CT: ");
@@ -180,22 +162,22 @@ int main(int argc, char** argv)
             printf("\n");
 #endif
 
-            // OCT_comp return 1 for equal
-            rc = !(OCT_comp(&CTGOLDEN,&CT));
-            if(rc != result)
+            if(!(OCT_comp(&CTGOLDEN,&CT)))
             {
 #ifdef DEBUG
                 printf("CTGOLDEN: ");
                 OCT_output(&CTGOLDEN);
                 printf("\n");
 #endif
-                fprintf(stderr, "FAILURE Test %d rc: %d\n", testNo, rc);
+                fprintf(stderr, "FAILURE Test %d\n", testNo);
                 fclose(fp);
                 exit(EXIT_FAILURE);
             }
         }
     }
+
     fclose(fp);
+
     printf("SUCCESS TEST PAILLIER ADD PASSED\n");
     exit(EXIT_SUCCESS);
 }
diff --git a/test/test_paillier_consistency.c b/test/test_paillier_consistency.c
index b21a1cb..dd8a3c8 100644
--- a/test/test_paillier_consistency.c
+++ b/test/test_paillier_consistency.c
@@ -34,22 +34,11 @@ char* PT3GOLDEN_hex = "000000000000000000000000000000000000000000000000000000000
 
 int paillier(csprng *RNG)
 {
-    int rc;
-    char p[FS_2048];
-    octet P = {0,sizeof(p),p};
-    char q[FS_2048];
-    octet Q = {0,sizeof(q),q};
+    BIG_512_60 zero[FFLEN_4096];
 
-    char n[FS_2048] = {0};
-    octet N = {0,sizeof(n),n};
-    char g[FS_2048];
-    octet G = {0,sizeof(g),g};
-
-    char l[FS_2048] = {0};
-    octet L = {0,sizeof(l),l};
-
-    char m[FS_2048] = {0};
-    octet M = {0,sizeof(m),m};
+    // Key material
+    PAILLIER_private_key PRIV;
+    PAILLIER_public_key PUB;
 
     // Plaintext to encrypt
     char ptin[NTHREADS][FS_2048];
@@ -88,62 +77,53 @@ int paillier(csprng *RNG)
     // Initialize octets
     for(int i=0; i<NTHREADS; i++)
     {
-        memset(ptin[i], 0, FS_2048*sizeof(ptin[i][0]));
         PTIN[i].max = FS_2048;
-        PTIN[i].len = 0;
         PTIN[i].val = ptin[i];
+        OCT_clear(&PTIN[i]);
 
-        memset(ptout[i], 0, FS_2048*sizeof(ptout[i][0]));
         PTOUT[i].max = FS_2048;
-        PTOUT[i].len = 0;
         PTOUT[i].val = ptout[i];
+        OCT_clear(&PTOUT[i]);
 
-        memset(ptko[i], 0, FS_2048*sizeof(ptko[i][0]));
         PTK[i].max = FS_2048;
-        PTK[i].len = 0;
         PTK[i].val = ptko[i];
+        OCT_clear(&PTIN[i]);
 
-        memset(cto[i], 0, FS_4096*sizeof(cto[i][0]));
         CT[i].max = FS_4096;
-        CT[i].len = 0;
         CT[i].val = cto[i];
+        OCT_clear(&PTIN[i]);
 
-        memset(cta[i], 0, FS_4096*sizeof(cta[i][0]));
         CTA[i].max = FS_4096;
-        CTA[i].len = 0;
         CTA[i].val = cta[i];
+        OCT_clear(&PTIN[i]);
     }
 
-    printf("Generating public/private key pair\n");
-    rc = PAILLIER_KEY_PAIR(RNG, &P, &Q, &N, &G, &L, &M);
-    if (rc)
-    {
-        fprintf(stderr, "FAILURE PAILLIER_KEY_PAIR rc: %d\n", rc);
-        exit(EXIT_FAILURE);
-    }
+    PAILLIER_KEY_PAIR(RNG, NULL, NULL, &PUB, &PRIV);
 
+#ifdef DEBUG
     printf("P: ");
-    OCT_output(&P);
+    FF_4096_output(PRIV.p, HFLEN_4096);
     printf("\n");
     printf("Q: ");
-    OCT_output(&Q);
+    FF_4096_output(PRIV.q, HFLEN_4096);
     printf("\n");
 
     printf("Public Key \n");
     printf("N: ");
-    OCT_output(&N);
+    FF_4096_output(PUB.n, HFLEN_4096);
     printf("\n");
     printf("G: ");
-    OCT_output(&G);
+    FF_4096_output(PUB.g, HFLEN_4096);
     printf("\n");
 
     printf("Secret Key \n");
     printf("L: ");
-    OCT_output(&L);
+    FF_4096_output(PRIV.l, HFLEN_4096);
     printf("\n");
     printf("M: ");
-    OCT_output(&M);
+    FF_4096_output(PRIV.m, HFLEN_4096);
     printf("\n");
+#endif
 
     // Set plaintext values
     for(int i=0; i<NTHREADS; i++)
@@ -166,66 +146,53 @@ int paillier(csprng *RNG)
 #endif
     }
 
+#ifdef DEBUG
     for(int i=0; i<NTHREADS; i++)
     {
         printf("PTIN[%d] ", i);
         OCT_output(&PTIN[i]);
         printf("\n");
     }
+#endif
 
     // Encrypt plaintext
     for(int i=0; i<NTHREADS; i++)
     {
-        rc = PAILLIER_ENCRYPT(RNG, &N, &G, &PTIN[i], &CT[i], NULL);
-        if (rc)
-        {
-            fprintf(stderr, "FAILURE PAILLIER_ENCRYPT rc: %d\n", rc);
-            exit(EXIT_FAILURE);
-        }
+        PAILLIER_ENCRYPT(RNG, &PUB, &PTIN[i], &CT[i], NULL);
     }
 
+#ifdef DEBUG
     for(int i=0; i<NTHREADS; i++)
     {
         printf("CT[%d] ", i);
         OCT_output(&CT[i]);
         printf("\n");
     }
+#endif
 
     // Decrypt ciphertexts
     for(int i=0; i<NTHREADS; i++)
     {
-        rc = PAILLIER_DECRYPT(&N, &L, &M, &CT[i], &PTOUT[i]);
-        if (rc)
-        {
-            fprintf(stderr, "FAILURE PAILLIER_DECRYPT rc: %d\n", rc);
-            exit(EXIT_FAILURE);
-        }
+        PAILLIER_DECRYPT(&PRIV, &CT[i], &PTOUT[i]);
     }
 
+#ifdef DEBUG
     for(int i=0; i<NTHREADS; i++)
     {
         printf("PTOUT[%d] ", i);
         OCT_output(&PTOUT[i]);
         printf("\n");
     }
+#endif
 
     for(int i=0; i<NTHREADS; i++)
     {
-        rc = PAILLIER_MULT(&N, &CT[i], &PTK[i], &CTA[i]);
-        if (rc)
-        {
-            fprintf(stderr, "FAILURE PAILLIER_MULT rc: %d\n", rc);
-            exit(EXIT_FAILURE);
-        }
+        PAILLIER_MULT(&PUB, &CT[i], &PTK[i], &CTA[i]);
     }
 
-    rc = PAILLIER_ADD(&N, &CTA[0], &CTA[1], &CT3);
-    if (rc)
-    {
-        fprintf(stderr, "FAILURE PAILLIER_ADD rc: %d\n", rc);
-        exit(EXIT_FAILURE);
-    }
+    PAILLIER_ADD(&PUB, &CTA[0], &CTA[1], &CT3);
 
+#ifdef DEBUG
     for(int i=0; i<NTHREADS; i++)
     {
         printf("CTA[%d] ", i);
@@ -235,35 +202,53 @@ int paillier(csprng *RNG)
     printf("CT3: ");
     OCT_output(&CT3);
     printf("\n");
+#endif
 
-    rc = PAILLIER_DECRYPT(&N, &L, &M, &CT3, &PT3);
-    if (rc)
-    {
-        fprintf(stderr, "FAILURE PAILLIER_DECRYPT rc: %d\n", rc);
-        exit(EXIT_FAILURE);
-    }
+    PAILLIER_DECRYPT(&PRIV, &CT3, &PT3);
 
-    OCT_fromHex(&PT3GOLDEN,PT3GOLDEN_hex);
+#ifdef DEBUG
     printf("PT3GOLDEN: ");
     OCT_output(&PT3GOLDEN);
 
     printf("PT3: ");
     OCT_output(&PT3);
     printf("\n");
+#endif
+    OCT_fromHex(&PT3GOLDEN,PT3GOLDEN_hex);
+    if(!OCT_comp(&PT3GOLDEN,&PT3))
+    {
+        fprintf(stderr, "FAILURE PT3 != PT3GOLDEN\n");
+        exit(EXIT_FAILURE);
+    }
+
+    PAILLIER_PRIVATE_KEY_KILL(&PRIV);
+
+    FF_4096_zero(zero, FFLEN_4096);
+
+    if(FF_4096_comp(zero, PRIV.p, HFLEN_4096))
+    {
+        fprintf(stderr, "FAILURE p not cleaned from private key\n");
+        exit(EXIT_FAILURE);
+    }
+
+    if(FF_4096_comp(zero, PRIV.q, HFLEN_4096))
+    {
+        fprintf(stderr, "FAILURE q not cleaned from private key\n");
+        exit(EXIT_FAILURE);
+    }
+
+    if(FF_4096_comp(zero, PRIV.l, FFLEN_4096))
+    {
+        fprintf(stderr, "FAILURE l not cleaned from private key\n");
+        exit(EXIT_FAILURE);
+    }
 
-    rc = OCT_comp(&PT3GOLDEN,&PT3);
-    if(!rc)
+    if(FF_4096_comp(zero, PRIV.m, FFLEN_4096))
     {
-        fprintf(stderr, "FAILURE PT3 != PT3GOLDEN rc: %d\n", rc);
+        fprintf(stderr, "FAILURE m not cleaned from private key\n");
         exit(EXIT_FAILURE);
     }
 
-    OCT_clear(&P);
-    OCT_clear(&Q);
-    OCT_clear(&N);
-    OCT_clear(&G);
-    OCT_clear(&L);
-    OCT_clear(&M);
     OCT_clear(&CT3);
     OCT_clear(&PT3);
     for(int i=0; i<NTHREADS; i++)
@@ -295,7 +280,6 @@ int main()
     // initialise strong RNG
     CREATE_CSPRNG(&RNG,&SEED);
 
-    printf("\nPaillier example\n");
     paillier(&RNG);
 
     KILL_CSPRNG(&RNG);
diff --git a/test/test_paillier_decrypt.c b/test/test_paillier_decrypt.c
index 6f12989..855cb14 100644
--- a/test/test_paillier_decrypt.c
+++ b/test/test_paillier_decrypt.c
@@ -41,6 +41,16 @@ void read_OCTET(octet* OCT, char* string)
     OCT_fromHex(OCT,buff);
 }
 
+void read_FF_4096(BIG_512_60 *x, char* string, int n)
+{
+    int len = strlen(string);
+    char oct[len/2];
+    octet OCT = {0, len/2, oct};
+
+    read_OCTET(&OCT, string);
+    FF_4096_fromOctet(x, &OCT, n);
+}
+
 int main(int argc, char** argv)
 {
     if (argc != 2)
@@ -55,28 +65,15 @@ int main(int argc, char** argv)
     char line[LINE_LEN]= {0};
     char *linePtr=NULL;
 
-    int applyVector=0;
-
-    const char* TESTline = "TEST = ";
-    int testNo=0;
-
-    // Test result
-    int result=0;
-    const char* RESULTline = "RESULT = ";
-
     char pt[FS_2048]= {0};
     octet PT = {0,sizeof(pt),pt};
 
-    char ngolden[FS_2048]= {0};
-    octet NGOLDEN = {0,sizeof(ngolden),ngolden};
-    const char* Nline = "N = ";
+    int testNo=0;
+    const char* TESTline = "TEST = ";
 
-    char lgolden[FS_2048] = {0};
-    octet LGOLDEN = {0,sizeof(lgolden),lgolden};
+    PAILLIER_private_key PRIV;
+    const char* Nline = "N = ";
     const char* Lline = "L = ";
-
-    char mgolden[FS_2048]= {0};
-    octet MGOLDEN = {0,sizeof(mgolden),mgolden};
     const char* Mline = "M = ";
 
     char ptgolden[FS_2048]= {0};
@@ -102,7 +99,6 @@ int main(int argc, char** argv)
             len = strlen(TESTline);
             linePtr = line + len;
             sscanf(linePtr,"%d\n",&testNo);
-            printf("TEST = %d\n",testNo);
         }
 
         // Read N
@@ -110,10 +106,15 @@ int main(int argc, char** argv)
         {
             len = strlen(Nline);
             linePtr = line + len;
-            read_OCTET(&NGOLDEN,linePtr);
+            FF_4096_zero(PRIV.n, FFLEN_4096);
+            read_FF_4096(PRIV.n, linePtr, HFLEN_4096);
+
+            FF_4096_sqr(PRIV.n2,PRIV.n, HFLEN_4096);
+            FF_4096_norm(PRIV.n2, FFLEN_4096);
 #ifdef DEBUG
             printf("N = ");
-            OCT_output(&NGOLDEN);
+            FF_4096_output(PRIV.n , FFLEN_4096);
+            printf("\n");
 #endif
         }
 
@@ -122,10 +123,12 @@ int main(int argc, char** argv)
         {
             len = strlen(Lline);
             linePtr = line + len;
-            read_OCTET(&LGOLDEN,linePtr);
+            FF_4096_zero(PRIV.l, FFLEN_4096);
+            read_FF_4096(PRIV.l, linePtr, HFLEN_4096);
 #ifdef DEBUG
             printf("L = ");
-            OCT_output(&LGOLDEN);
+            FF_4096_output(PRIV.l , FFLEN_4096);
+            printf("\n");
 #endif
         }
 
@@ -134,10 +137,12 @@ int main(int argc, char** argv)
         {
             len = strlen(Mline);
             linePtr = line + len;
-            read_OCTET(&MGOLDEN,linePtr);
+            FF_4096_zero(PRIV.m, FFLEN_4096);
+            read_FF_4096(PRIV.m, linePtr, HFLEN_4096);
 #ifdef DEBUG
             printf("M = ");
-            OCT_output(&MGOLDEN);
+            FF_4096_output(PRIV.m , FFLEN_4096);
+            printf("\n");
 #endif
         }
 
@@ -153,7 +158,7 @@ int main(int argc, char** argv)
 #endif
         }
 
-        // Read PLAINTEXT
+        // Read PLAINTEXT and process test vector
         if (!strncmp(line,PTline, strlen(PTline)))
         {
             len = strlen(PTline);
@@ -163,31 +168,8 @@ int main(int argc, char** argv)
             printf("PLAINTEXT = ");
             OCT_output(&PTGOLDEN);
 #endif
-        }
 
-        // Read expected result
-        if (!strncmp(line,RESULTline, strlen(RESULTline)))
-        {
-            len = strlen(RESULTline);
-            linePtr = line + len;
-            sscanf(linePtr,"%d\n",&result);
-            applyVector=1;
-#ifdef DEBUG
-            printf("RESULT = %d\n\n", result);
-#endif
-        }
-
-        if (applyVector)
-        {
-            applyVector=0;
-
-            int rc = PAILLIER_DECRYPT(&NGOLDEN, &LGOLDEN, &MGOLDEN, &CTGOLDEN, &PT);
-            if (rc)
-            {
-                fprintf(stderr, "FAILURE PAILLIER_DECRYPT Test %d rc: %d\n", testNo, rc);
-                fclose(fp);
-                exit(EXIT_FAILURE);
-            }
+            PAILLIER_DECRYPT(&PRIV, &CTGOLDEN, &PT);
 
 #ifdef DEBUG
             printf("PT: ");
@@ -195,22 +177,22 @@ int main(int argc, char** argv)
             printf("\n");
 #endif
 
-            // OCT_comp return 1 for equal
-            rc = !(OCT_comp(&PTGOLDEN,&PT));
-            if(rc != result)
+            if(!OCT_comp(&PTGOLDEN,&PT))
             {
 #ifdef DEBUG
                 printf("PTGOLDEN: ");
                 OCT_output(&PTGOLDEN);
                 printf("\n");
 #endif
-                fprintf(stderr, "FAILURE Test %d rc: %d\n", testNo, rc);
+                fprintf(stderr, "FAILURE Test %d\n", testNo);
                 fclose(fp);
                 exit(EXIT_FAILURE);
             }
         }
     }
+
     fclose(fp);
+
     printf("SUCCESS TEST PAILLIER DECRYPTION PASSED\n");
     exit(EXIT_SUCCESS);
 }
diff --git a/test/test_paillier_encrypt.c b/test/test_paillier_encrypt.c
index da759cb..2f1891e 100644
--- a/test/test_paillier_encrypt.c
+++ b/test/test_paillier_encrypt.c
@@ -41,6 +41,16 @@ void read_OCTET(octet* OCT, char* string)
     OCT_fromHex(OCT,buff);
 }
 
+void read_FF_4096(BIG_512_60 *x, char* string, int n)
+{
+    int len = strlen(string);
+    char oct[len/2];
+    octet OCT = {0, len/2, oct};
+
+    read_OCTET(&OCT, string);
+    FF_4096_fromOctet(x, &OCT, n);
+}
+
 int main(int argc, char** argv)
 {
     if (argc != 2)
@@ -55,25 +65,15 @@ int main(int argc, char** argv)
     char line[LINE_LEN]= {0};
     char *linePtr=NULL;
 
-    int applyVector=0;
-
-    const char* TESTline = "TEST = ";
-    int testNo=0;
-
-    // Test result
-    int result=0;
-    const char* RESULTline = "RESULT = ";
-
     char ct[FS_4096]= {0};
     octet CT = {0,sizeof(ct),ct};
 
-    char ngolden[FS_2048]= {0};
-    octet NGOLDEN = {0,sizeof(ngolden),ngolden};
-    const char* Nline = "N = ";
+    int testNo=0;
+    const char* TESTline = "TEST = ";
 
-    char ggolden[FS_2048]= {0};
-    octet GGOLDEN = {0,sizeof(ggolden),ggolden};
-    const char* Lline = "G = ";
+    PAILLIER_public_key PUB;
+    const char* Nline = "N = ";
+    const char* Gline = "G = ";
 
     char rgolden[FS_4096]= {0};
     octet RGOLDEN = {0,sizeof(rgolden),rgolden};
@@ -102,7 +102,6 @@ int main(int argc, char** argv)
             len = strlen(TESTline);
             linePtr = line + len;
             sscanf(linePtr,"%d\n",&testNo);
-            printf("TEST = %d\n",testNo);
         }
 
         // Read N
@@ -110,22 +109,30 @@ int main(int argc, char** argv)
         {
             len = strlen(Nline);
             linePtr = line + len;
-            read_OCTET(&NGOLDEN,linePtr);
+            FF_4096_zero(PUB.n, FFLEN_4096);
+            read_FF_4096(PUB.n, linePtr, HFLEN_4096);
+
+            FF_4096_sqr(PUB.n2, PUB.n, HFLEN_4096);
+            FF_4096_norm(PUB.n2, FFLEN_4096);
 #ifdef DEBUG
             printf("N = ");
-            OCT_output(&NGOLDEN);
+            FF_4096_output(PUB.n , FFLEN_4096);
+            printf("\n");
 #endif
         }
 
+
         // Read G
-        if (!strncmp(line,Lline, strlen(Lline)))
+        if (!strncmp(line,Gline, strlen(Gline)))
         {
-            len = strlen(Lline);
+            len = strlen(Gline);
             linePtr = line + len;
-            read_OCTET(&GGOLDEN,linePtr);
+            FF_4096_zero(PUB.g, FFLEN_4096);
+            read_FF_4096(PUB.g, linePtr, HFLEN_4096);
 #ifdef DEBUG
-            printf("L = ");
-            OCT_output(&GGOLDEN);
+            printf("\nG = ");
+            FF_4096_output(PUB.g , FFLEN_4096);
+            printf("\n");
 #endif
         }
 
@@ -141,18 +148,6 @@ int main(int argc, char** argv)
 #endif
         }
 
-        // Read CIPHERTEXT
-        if (!strncmp(line,CTline, strlen(CTline)))
-        {
-            len = strlen(CTline);
-            linePtr = line + len;
-            read_OCTET(&CTGOLDEN,linePtr);
-#ifdef DEBUG
-            printf("CIPHERTEXT = ");
-            OCT_output(&CTGOLDEN);
-#endif
-        }
-
         // Read PLAINTEXT
         if (!strncmp(line,PTline, strlen(PTline)))
         {
@@ -165,29 +160,18 @@ int main(int argc, char** argv)
 #endif
         }
 
-        // Read expected result
-        if (!strncmp(line,RESULTline, strlen(RESULTline)))
+        // Read CIPHERTEXT and process test vector
+        if (!strncmp(line,CTline, strlen(CTline)))
         {
-            len = strlen(RESULTline);
+            len = strlen(CTline);
             linePtr = line + len;
-            sscanf(linePtr,"%d\n",&result);
-            applyVector=1;
+            read_OCTET(&CTGOLDEN,linePtr);
 #ifdef DEBUG
-            printf("RESULT = %d\n\n", result);
+            printf("CIPHERTEXT = ");
+            OCT_output(&CTGOLDEN);
 #endif
-        }
 
-        if (applyVector)
-        {
-            applyVector=0;
-
-            int rc = PAILLIER_ENCRYPT(NULL, &NGOLDEN, &GGOLDEN, &PTGOLDEN, &CT, &RGOLDEN);
-            if (rc)
-            {
-                fprintf(stderr, "FAILURE PAILLIER_DECRYPT Test %d rc: %d\n", testNo, rc);
-                fclose(fp);
-                exit(EXIT_FAILURE);
-            }
+            PAILLIER_ENCRYPT(NULL, &PUB, &PTGOLDEN, &CT, &RGOLDEN);
 
 #ifdef DEBUG
             printf("CT: ");
@@ -195,22 +179,22 @@ int main(int argc, char** argv)
             printf("\n");
 #endif
 
-            // OCT_comp return 1 for equal
-            rc = !(OCT_comp(&CTGOLDEN,&CT));
-            if(rc != result)
+            if(!OCT_comp(&CTGOLDEN,&CT))
             {
 #ifdef DEBUG
                 printf("CTGOLDEN: ");
                 OCT_output(&CTGOLDEN);
                 printf("\n");
 #endif
-                fprintf(stderr, "FAILURE Test %d rc: %d\n", testNo, rc);
+                fprintf(stderr, "FAILURE Test %d\n", testNo);
                 fclose(fp);
                 exit(EXIT_FAILURE);
             }
         }
     }
+
     fclose(fp);
+
     printf("SUCCESS TEST PAILLIER ENCRYPTION PASSED\n");
     exit(EXIT_SUCCESS);
 }
diff --git a/test/test_paillier_keygen.c b/test/test_paillier_keygen.c
index 74c8673..fecb25d 100644
--- a/test/test_paillier_keygen.c
+++ b/test/test_paillier_keygen.c
@@ -42,6 +42,40 @@ void read_OCTET(octet* OCT, char* string)
     OCT_fromHex(OCT,buff);
 }
 
+void read_FF_4096(BIG_512_60 *x, char* string, int n)
+{
+    int len = strlen(string);
+    char oct[len/2];
+    octet OCT = {0, len/2, oct};
+
+    read_OCTET(&OCT, string);
+    FF_4096_fromOctet(x, &OCT, n);
+}
+
+void compare_FF(char *x_name, char* y_name, BIG_512_60 *x, BIG_512_60 *y, int n)
+{
+    if(FF_4096_comp(x, y, n))
+    {
+        fprintf(stderr, "FAILURE %s != %s\n", x_name, y_name);
+        exit(EXIT_FAILURE);
+    }
+}
+
+void clean_private(PAILLIER_private_key *PRIV)
+{
+    PAILLIER_PRIVATE_KEY_KILL(PRIV);
+    FF_4096_zero(PRIV->n, FFLEN_4096);
+    FF_4096_zero(PRIV->g, FFLEN_4096);
+    FF_4096_zero(PRIV->n2, FFLEN_4096);
+}
+
+void clean_public(PAILLIER_public_key *PUB)
+{
+    FF_4096_zero(PUB->n, FFLEN_4096);
+    FF_4096_zero(PUB->g, FFLEN_4096);
+    FF_4096_zero(PUB->n2, FFLEN_4096);
+}
+
 int main(int argc, char** argv)
 {
     if (argc != 2)
@@ -52,76 +86,46 @@ int main(int argc, char** argv)
 
     int len=0;
     FILE *fp;
-    int rc=0;
 
     char line[LINE_LEN]= {0};
     char * linePtr=NULL;
 
-    int applyVector=0;
     int testSeed=0;
 
-    const char* TESTline = "TEST = ";
-    int testNo=0;
-
-    // Test result
-    int result=0;
-    const char* RESULTline = "RESULT = ";
+    PAILLIER_private_key PRIV;
+    PAILLIER_public_key PUB;
 
-    char p1[FS_2048]= {0};
-    octet P1 = {0,sizeof(p1),p1};
-    char q1[FS_2048]= {0};
-    octet Q1 = {0,sizeof(q1),q1};
-
-    char n1[FS_2048]= {0};
-    octet N1 = {0,sizeof(n1),n1};
-    char g1[FS_2048]= {0};
-    octet G1 = {0,sizeof(g1),g1};
-
-    char l1[FS_2048]= {0};
-    octet L1 = {0,sizeof(l1),l1};
-
-    char m1[FS_2048]= {0};
-    octet M1 = {0,sizeof(m1),m1};
-
-    char n2[FS_2048]= {0};
-    octet N2 = {0,sizeof(n2),n2};
-    char g2[FS_2048]= {0};
-    octet G2 = {0,sizeof(g2),g2};
-
-    char l2[FS_2048]= {0};
-    octet L2 = {0,sizeof(l2),l2};
-
-    char m2[FS_2048]= {0};
-    octet M2 = {0,sizeof(m2),m2};
+    int testNo=0;
+    const char* TESTline = "TEST = ";
 
     char seedgolden[32]= {0};
     octet SEEDGOLDEN = {0,sizeof(seedgolden),seedgolden};
     const char* SEEDline = "SEED = ";
 
-    char pgolden[FS_2048]= {0};
+    char p[FS_2048]={0};
+    char pgolden[HFS_2048]= {0};
+    octet P = {0, sizeof(p),p};
     octet PGOLDEN = {0,sizeof(pgolden),pgolden};
     const char* Pline = "P = ";
 
-    char qgolden[FS_2048]= {0};
+    char q[FS_2048]={0};
+    char qgolden[HFS_2048]={0};
+    octet Q = {0, sizeof(q),q};
     octet QGOLDEN = {0,sizeof(qgolden),qgolden};
     const char* Qline = "Q = ";
 
-    char ngolden[FS_2048]= {0};
-    octet NGOLDEN = {0,sizeof(ngolden),ngolden};
+    PAILLIER_private_key PRIVGOLDEN;
+    PAILLIER_public_key PUBGOLDEN;
     const char* Nline = "N = ";
-
-    char ggolden[FS_2048]= {0};
-    octet GGOLDEN = {0,sizeof(ggolden),ggolden};
     const char* Gline = "G = ";
-
-    char lgolden[FS_2048]= {0};
-    octet LGOLDEN = {0,sizeof(lgolden),lgolden};
     const char* Lline = "L = ";
-
-    char mgolden[FS_2048]= {0};
-    octet MGOLDEN = {0,sizeof(mgolden),mgolden};
     const char* Mline = "M = ";
 
+    // Clean GOLDEN keys, the generated keys should be cleaned
+    // during initialisation
+    clean_private(&PRIVGOLDEN);
+    clean_public(&PUBGOLDEN);
+
     fp = fopen(argv[1], "r");
     if (fp == NULL)
     {
@@ -137,7 +141,6 @@ int main(int argc, char** argv)
             len = strlen(TESTline);
             linePtr = line + len;
             sscanf(linePtr,"%d\n",&testNo);
-            printf("TEST = %d\n",testNo);
         }
 
         // Read SEED
@@ -147,10 +150,6 @@ int main(int argc, char** argv)
             linePtr = line + len;
             read_OCTET(&SEEDGOLDEN,linePtr);
             testSeed = 1;
-#ifdef DEBUG
-            printf("SEED = ");
-            OCT_output(&SEEDGOLDEN);
-#endif
         }
 
         // Read P
@@ -159,10 +158,9 @@ int main(int argc, char** argv)
             len = strlen(Pline);
             linePtr = line + len;
             read_OCTET(&PGOLDEN,linePtr);
-#ifdef DEBUG
-            printf("P = ");
-            OCT_output(&PGOLDEN);
-#endif
+            OCT_copy(&P, &PGOLDEN);
+            OCT_pad(&P, HFS_4096);
+            FF_4096_fromOctet(PRIVGOLDEN.p,&P,HFLEN_4096);
         }
 
         // Read Q
@@ -171,10 +169,9 @@ int main(int argc, char** argv)
             len = strlen(Qline);
             linePtr = line + len;
             read_OCTET(&QGOLDEN,linePtr);
-#ifdef DEBUG
-            printf("Q = ");
-            OCT_output(&QGOLDEN);
-#endif
+            OCT_copy(&Q, &QGOLDEN);
+            OCT_pad(&Q, HFS_4096);
+            FF_4096_fromOctet(PRIVGOLDEN.q,&Q,HFLEN_4096);
         }
 
         // Read N
@@ -182,11 +179,13 @@ int main(int argc, char** argv)
         {
             len = strlen(Nline);
             linePtr = line + len;
-            read_OCTET(&NGOLDEN,linePtr);
-#ifdef DEBUG
-            printf("N = ");
-            OCT_output(&NGOLDEN);
-#endif
+            read_FF_4096(PRIVGOLDEN.n, linePtr, HFLEN_4096);
+
+            FF_4096_sqr(PRIVGOLDEN.n2,PRIVGOLDEN.n, HFLEN_4096);
+            FF_4096_norm(PRIVGOLDEN.n2, FFLEN_4096);
+
+            FF_4096_copy(PUBGOLDEN.n, PRIVGOLDEN.n, HFLEN_4096);
+            FF_4096_copy(PUBGOLDEN.n2, PRIVGOLDEN.n2, FFLEN_4096);
         }
 
         // Read G
@@ -194,11 +193,8 @@ int main(int argc, char** argv)
         {
             len = strlen(Gline);
             linePtr = line + len;
-            read_OCTET(&GGOLDEN,linePtr);
-#ifdef DEBUG
-            printf("G = ");
-            OCT_output(&GGOLDEN);
-#endif
+            read_FF_4096(PRIVGOLDEN.g, linePtr, HFLEN_4096);
+            FF_4096_copy(PUBGOLDEN.g, PRIVGOLDEN.g, HFLEN_4096);
         }
 
         // Read L
@@ -206,41 +202,15 @@ int main(int argc, char** argv)
         {
             len = strlen(Lline);
             linePtr = line + len;
-            read_OCTET(&LGOLDEN,linePtr);
-#ifdef DEBUG
-            printf("L = ");
-            OCT_output(&LGOLDEN);
-#endif
+            read_FF_4096(PRIVGOLDEN.l, linePtr, HFLEN_4096);
         }
 
-        // Read M
+        // Read M and process test vector
         if (!strncmp(line,Mline, strlen(Mline)))
         {
             len = strlen(Mline);
             linePtr = line + len;
-            read_OCTET(&MGOLDEN,linePtr);
-#ifdef DEBUG
-            printf("M = ");
-            OCT_output(&MGOLDEN);
-#endif
-        }
-
-        // Read expected result
-        if (!strncmp(line,RESULTline, strlen(RESULTline)))
-        {
-            len = strlen(RESULTline);
-            linePtr = line + len;
-            sscanf(linePtr,"%d\n",&result);
-            applyVector=1;
-#ifdef DEBUG
-            printf("RESULT = %d\n\n", result);
-#endif
-        }
-
-        if (applyVector)
-        {
-            applyVector=0;
-
+            read_FF_4096(PRIVGOLDEN.m, linePtr, HFLEN_4096);
 
             if (testSeed)
             {
@@ -252,152 +222,62 @@ int main(int argc, char** argv)
                 // initialise strong RNG
                 CREATE_CSPRNG(&RNG,&SEEDGOLDEN);
 
-                rc = PAILLIER_KEY_PAIR(&RNG, &P1, &Q1, &N1, &G1, &L1, &M1);
-                if (rc)
-                {
-                    fprintf(stderr, "FAILURE PAILLIER_KEY_PAIR Test %d rc: %d\n", testNo, rc);
-                    fclose(fp);
-                    exit(EXIT_FAILURE);
-                }
-
-#ifdef DEBUG
-                printf("P1: ");
-                OCT_output(&P1);
-                printf("\n");
-                printf("Q1: ");
-                OCT_output(&Q1);
-                printf("\n");
-
-                printf("Public Key \n");
-                printf("N1: ");
-                OCT_output(&N1);
-                printf("\n");
-                printf("G1: ");
-                OCT_output(&G1);
-                printf("\n");
-
-                printf("Secret Key \n");
-                printf("L1: ");
-                OCT_output(&L1);
-                printf("\n");
-                printf("M1: ");
-                OCT_output(&M1);
-                printf("\n");
-#endif
-
-                // OCT_comp returns 1 for equal
-                rc = !(OCT_comp(&PGOLDEN,&P1));
-                if(rc != result)
-                {
-                    fprintf(stderr, "FAILURE Test %d PGOLDEN rc: %d\n", testNo, rc);
-                    fclose(fp);
-                    exit(EXIT_FAILURE);
-                }
-
-                rc = !(OCT_comp(&QGOLDEN,&Q1));
-                if(rc != result)
-                {
-                    fprintf(stderr, "FAILURE Test %d QGOLDEN rc: %d\n", testNo, rc);
-                    fclose(fp);
-                    exit(EXIT_FAILURE);
-                }
-
-                rc = !(OCT_comp(&NGOLDEN,&N1));
-                if(rc != result)
-                {
-                    fprintf(stderr, "FAILURE Test %d NGOLDEN rc: %d\n", testNo, rc);
-                    fclose(fp);
-                    exit(EXIT_FAILURE);
-                }
-
-                rc = !(OCT_comp(&GGOLDEN,&G1));
-                if(rc != result)
-                {
-                    fprintf(stderr, "FAILURE Test %d GGOLDEN rc: %d\n", testNo, rc);
-                    fclose(fp);
-                    exit(EXIT_FAILURE);
-                }
-
-                rc = !(OCT_comp(&LGOLDEN,&L1));
-                if(rc != result)
-                {
-                    fprintf(stderr, "FAILURE Test %d LGOLDEN rc: %d\n", testNo, rc);
-                    fclose(fp);
-                    exit(EXIT_FAILURE);
-                }
-
-                rc = !(OCT_comp(&MGOLDEN,&M1));
-                if(rc != result)
-                {
-                    fprintf(stderr, "FAILURE Test %d MGOLDEN rc: %d\n", testNo, rc);
-                    fclose(fp);
-                    exit(EXIT_FAILURE);
-                }
-
+                PAILLIER_KEY_PAIR(&RNG, NULL, NULL, &PUB, &PRIV);
             }
-
-
-            rc = PAILLIER_KEY_PAIR(NULL, &PGOLDEN, &QGOLDEN, &N2, &G2, &L2, &M2);
-            if (rc)
+            else
             {
-                fprintf(stderr, "FAILURE PAILLIER_KEY_PAIR Test %d rc: %d\n", testNo, rc);
-                fclose(fp);
-                exit(EXIT_FAILURE);
+                PAILLIER_KEY_PAIR(NULL, &PGOLDEN, &QGOLDEN, &PUB, &PRIV);
             }
 
 #ifdef DEBUG
-            printf("Public Key \n");
-            printf("N2: ");
-            OCT_output(&N2);
-            printf("\n");
-            printf("G2: ");
-            OCT_output(&G2);
-            printf("\n");
-
-            printf("Secret Key \n");
-            printf("L2: ");
-            OCT_output(&L2);
-            printf("\n");
-            printf("M2: ");
-            OCT_output(&M2);
-            printf("\n");
+            printf("SEED = ");
+            OCT_output(&SEEDGOLDEN);
+            printf("\nP = ");
+            FF_4096_output(PRIV.p , HFLEN_4096);
+            printf("\nQ = ");
+            FF_4096_output(PRIV.q , HFLEN_4096);
+            printf("\nL = ");
+            FF_4096_output(PRIV.l , FFLEN_4096);
+            printf("\nM = ");
+            FF_4096_output(PRIV.m , FFLEN_4096);
+            printf("\nN = ");
+            FF_4096_output(PRIV.n , FFLEN_4096);
+            printf("\nG = ");
+            FF_4096_output(PRIV.g , FFLEN_4096);
+            printf("\nN2 = ");
+            FF_4096_output(PRIV.n2, FFLEN_4096);
+            printf("\nPUB N = ");
+            FF_4096_output(PUB.n , FFLEN_4096);
+            printf("\nPUB G = ");
+            FF_4096_output(PUB.g , FFLEN_4096);
+            printf("\nPUB N2 = ");
+            FF_4096_output(PUB.n2, FFLEN_4096);
+            printf("\n\n");
 #endif
-            rc = !(OCT_comp(&NGOLDEN,&N2));
-            if(rc != result)
-            {
-                fprintf(stderr, "FAILURE Test %d NGOLDEN rc: %d\n", testNo, rc);
-                fclose(fp);
-                exit(EXIT_FAILURE);
-            }
 
-            rc = !(OCT_comp(&GGOLDEN,&G2));
-            if(rc != result)
-            {
-                fprintf(stderr, "FAILURE Test %d GGOLDEN rc: %d\n", testNo, rc);
-                fclose(fp);
-                exit(EXIT_FAILURE);
-            }
-
-            rc = !(OCT_comp(&LGOLDEN,&L2));
-            if(rc != result)
-            {
-                fprintf(stderr, "FAILURE Test %d LGOLDEN rc: %d\n", testNo, rc);
-                fclose(fp);
-                exit(EXIT_FAILURE);
-            }
+            compare_FF("PRIV.p" , "PRIVGOLDEN.p" , PRIV.p , PRIVGOLDEN.p , HFLEN_4096);
+            compare_FF("PRIV.q" , "PRIVGOLDEN.q" , PRIV.q , PRIVGOLDEN.q , HFLEN_4096);
+            compare_FF("PRIV.l" , "PRIVGOLDEN.l" , PRIV.l , PRIVGOLDEN.l , FFLEN_4096);
+            compare_FF("PRIV.m" , "PRIVGOLDEN.m" , PRIV.m , PRIVGOLDEN.m , FFLEN_4096);
+            compare_FF("PRIV.n" , "PRIVGOLDEN.n" , PRIV.n , PRIVGOLDEN.n , FFLEN_4096);
+            compare_FF("PRIV.g" , "PRIVGOLDEN.g" , PRIV.g , PRIVGOLDEN.g , FFLEN_4096);
+            compare_FF("PRIV.n2", "PRIVGOLDEN.n2", PRIV.n2, PRIVGOLDEN.n2, FFLEN_4096);
 
-            rc = !(OCT_comp(&MGOLDEN,&M2));
-            if(rc != result)
-            {
-                fprintf(stderr, "FAILURE Test %d MGOLDEN rc: %d\n", testNo, rc);
-                fclose(fp);
-                exit(EXIT_FAILURE);
-            }
+            compare_FF("PUB.n" , "PUBGOLDEN.n" , PUB.n , PUBGOLDEN.n , FFLEN_4096);
+            compare_FF("PUB.g" , "PUBGOLDEN.g" , PUB.g , PUBGOLDEN.g , FFLEN_4096);
+            compare_FF("PUB.n2", "PUBGOLDEN.n2", PUB.n2, PUBGOLDEN.n2, FFLEN_4096);
 
+            // Clean keys for next test vector
+            clean_private(&PRIV);
+            clean_private(&PRIVGOLDEN);
 
+            clean_public(&PUB);
+            clean_public(&PUBGOLDEN);
         }
     }
+
     fclose(fp);
+
     printf("SUCCESS TEST PAILLIER KEYGEN PASSED\n");
     exit(EXIT_SUCCESS);
 }
diff --git a/test/test_paillier_mult.c b/test/test_paillier_mult.c
index b8b7aae..0ca9500 100644
--- a/test/test_paillier_mult.c
+++ b/test/test_paillier_mult.c
@@ -41,6 +41,16 @@ void read_OCTET(octet* OCT, char* string)
     OCT_fromHex(OCT,buff);
 }
 
+void read_FF_4096(BIG_512_60 *x, char* string, int n)
+{
+    int len = strlen(string);
+    char oct[len/2];
+    octet OCT = {0, len/2, oct};
+
+    read_OCTET(&OCT, string);
+    FF_4096_fromOctet(x, &OCT, n);
+}
+
 int main(int argc, char** argv)
 {
     if (argc != 2)
@@ -55,20 +65,13 @@ int main(int argc, char** argv)
     char line[LINE_LEN]= {0};
     char *linePtr=NULL;
 
-    int applyVector=0;
-
-    const char* TESTline = "TEST = ";
-    int testNo=0;
-
     char ct[FS_4096]= {0};
     octet CT = {0,sizeof(ct),ct};
 
-    // Test result
-    int result=0;
-    const char* RESULTline = "RESULT = ";
+    int testNo=0;
+    const char* TESTline = "TEST = ";
 
-    char ngolden[FS_2048]= {0};
-    octet NGOLDEN = {0,sizeof(ngolden),ngolden};
+    PAILLIER_public_key PUB;
     const char* Nline = "N = ";
 
     char ct1golden[FS_4096]= {0};
@@ -98,7 +101,6 @@ int main(int argc, char** argv)
             len = strlen(TESTline);
             linePtr = line + len;
             sscanf(linePtr,"%d\n",&testNo);
-            printf("TEST = %d\n",testNo);
         }
 
         // Read N
@@ -106,10 +108,14 @@ int main(int argc, char** argv)
         {
             len = strlen(Nline);
             linePtr = line + len;
-            read_OCTET(&NGOLDEN,linePtr);
+            read_FF_4096(PUB.n, linePtr, HFLEN_4096);
+
+            FF_4096_sqr(PUB.n2, PUB.n, HFLEN_4096);
+            FF_4096_norm(PUB.n2, FFLEN_4096);
 #ifdef DEBUG
             printf("N = ");
-            OCT_output(&NGOLDEN);
+            FF_4096_output(PUB.n , FFLEN_4096);
+            printf("\n");
 #endif
         }
 
@@ -137,7 +143,7 @@ int main(int argc, char** argv)
 #endif
         }
 
-        // Read CIPHERTEXT
+        // Read CIPHERTEXT and process test vector
         if (!strncmp(line,CTline, strlen(CTline)))
         {
             len = strlen(CTline);
@@ -147,32 +153,8 @@ int main(int argc, char** argv)
             printf("CIPHERTEXT = ");
             OCT_output(&CTGOLDEN);
 #endif
-        }
-
-        // Read expected result
-        if (!strncmp(line,RESULTline, strlen(RESULTline)))
-        {
-            len = strlen(RESULTline);
-            linePtr = line + len;
-            sscanf(linePtr,"%d\n",&result);
-            applyVector=1;
-#ifdef DEBUG
-            printf("RESULT = %d\n\n", result);
-#endif
-        }
-
-        if (applyVector)
-        {
-            applyVector=0;
-
-            int rc = PAILLIER_MULT(&NGOLDEN, &CT1GOLDEN, &PT2GOLDEN, &CT);
-            if (rc)
-            {
-                fprintf(stderr, "FAILURE PAILLIER_ADD rc: %d\n", rc);
-                fclose(fp);
-                exit(EXIT_FAILURE);
-            }
 
+            PAILLIER_MULT(&PUB, &CT1GOLDEN, &PT2GOLDEN, &CT);
 
 #ifdef DEBUG
             printf("CT: ");
@@ -180,22 +162,22 @@ int main(int argc, char** argv)
             printf("\n");
 #endif
 
-            // OCT_comp return 1 for equal
-            rc = !(OCT_comp(&CTGOLDEN,&CT));
-            if(rc != result)
+            if(!OCT_comp(&CTGOLDEN,&CT))
             {
 #ifdef DEBUG
                 printf("CTGOLDEN: ");
                 OCT_output(&CTGOLDEN);
                 printf("\n");
 #endif
-                fprintf(stderr, "FAILURE Test %d rc: %d\n", testNo, rc);
+                fprintf(stderr, "FAILURE Test %d\n", testNo);
                 fclose(fp);
                 exit(EXIT_FAILURE);
             }
         }
     }
+
     fclose(fp);
+
     printf("SUCCESS TEST PAILLIER MULTIPLICATION PASSED\n");
     exit(EXIT_SUCCESS);
 }


[incubator-milagro-crypto-c] 10/10: improve decryption using CRT

Posted by sa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sandreoli pushed a commit to branch issue51
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-crypto-c.git

commit b0fa54f5e874aac7286caa1caa10443367169629
Author: samuele-andreoli <sa...@yahoo.it>
AuthorDate: Fri Dec 6 11:43:52 2019 +0000

    improve decryption using CRT
---
 benchmark/benchtest_paillier.c.in |  10 +-
 examples/example_paillier.c       |  22 +-
 include/ff.h.in                   |  10 +
 include/paillier.h                |  25 +-
 src/ff.c.in                       |  29 ++
 src/paillier.c                    | 380 ++++++---------
 test/CMakeLists.txt               |   4 +
 test/test_ff_consistency_WWW.c.in | 287 ++++++++++++
 test/test_paillier_consistency.c  | 116 +----
 test/test_paillier_decrypt.c      | 123 +++--
 test/test_paillier_keygen.c       | 215 ++++++---
 testVectors/paillier/decrypt.txt  | 144 +++---
 testVectors/paillier/keygen.txt   | 953 +++-----------------------------------
 13 files changed, 916 insertions(+), 1402 deletions(-)

diff --git a/benchmark/benchtest_paillier.c.in b/benchmark/benchtest_paillier.c.in
index 5511b5d..a3c4a24 100644
--- a/benchmark/benchtest_paillier.c.in
+++ b/benchmark/benchtest_paillier.c.in
@@ -266,10 +266,12 @@ int paillier(csprng *RNG)
     printf("Size info\n");
     printf("=========\n");
     
-    printf("public key n\t%d bytes\n", FS_2048);
-    printf("public key g\t%d bytes\n", FS_2048);
-    printf("secret key l\t%d bytes\n", FS_2048);
-    printf("secret key m\t%d bytes\n", FS_2048);
+    printf("public key n\t%d bytes\n",  FS_2048);
+    printf("public key g\t%d bytes\n",  FS_2048);
+    printf("secret key lp\t%d bytes\n", HFS_2048);
+    printf("secret key lq\t%d bytes\n", HFS_2048);
+    printf("secret key mp\t%d bytes\n", HFS_2048);
+    printf("secret key mq\t%d bytes\n", HFS_2048);
     printf("ciphertext\t%d bytes\n", FS_4096);
 
 #ifdef DEBUG
diff --git a/examples/example_paillier.c b/examples/example_paillier.c
index d51b174..4c57a39 100644
--- a/examples/example_paillier.c
+++ b/examples/example_paillier.c
@@ -97,26 +97,32 @@ int paillier(csprng *RNG)
     PAILLIER_KEY_PAIR(RNG, NULL, NULL, &PUB, &PRIV);
 
     printf("P: ");
-    FF_4096_output(PRIV.p, HFLEN_4096/2);
+    FF_2048_output(PRIV.p, HFLEN_2048);
     printf("\n");
     printf("Q: ");
-    FF_4096_output(PRIV.q, HFLEN_4096/2);
+    FF_2048_output(PRIV.q, HFLEN_2048);
     printf("\n");
 
     printf("Public Key \n");
     printf("N: ");
-    FF_4096_output(PRIV.n, HFLEN_4096);
+    FF_4096_output(PUB.n, HFLEN_4096);
     printf("\n");
     printf("G: ");
-    FF_4096_output(PRIV.g, FFLEN_4096);
+    FF_4096_output(PUB.g, FFLEN_4096);
     printf("\n");
 
     printf("Secret Key \n");
-    printf("L: ");
-    FF_4096_output(PRIV.l, HFLEN_4096);
+    printf("L_p: ");
+    FF_2048_output(PRIV.lp, HFLEN_2048);
     printf("\n");
-    printf("M: ");
-    FF_4096_output(PRIV.m, HFLEN_4096);
+    printf("L_q: ");
+    FF_2048_output(PRIV.lq, HFLEN_2048);
+    printf("\n");
+    printf("M_p: ");
+    FF_2048_output(PRIV.mp, HFLEN_2048);
+    printf("\n");
+    printf("M_q: ");
+    FF_2048_output(PRIV.mq, HFLEN_2048);
     printf("\n");
 
     // Set plaintext values
diff --git a/include/ff.h.in b/include/ff.h.in
index 05907b8..9af83c5 100644
--- a/include/ff.h.in
+++ b/include/ff.h.in
@@ -301,5 +301,15 @@ extern int FF_WWW_cfactor(BIG_XXX *x,sign32 s,int n);
 	@return 1 if x is (almost certainly) prime, else return 0
  */
 extern int FF_WWW_prime(BIG_XXX *x,csprng *R,int n);
+/**	@brief Combine rp and rq using the Chinese Remainder Theorem
+ *
+	@param r  FF instance, on exit the solution of the system
+	@param rp FF instance, solution modulo p
+	@param rq FF instance, solution modulo q
+	@param p  FF instance, MUST be coprime with q
+	@param q  FF instance, MUST be coprime with p
+	@param n size of p and q in BIGs
+ */
+extern void FF_WWW_crt(BIG_XXX *r, BIG_XXX *rp, BIG_XXX *rq, BIG_XXX *p, BIG_XXX *q, int n);
 
 #endif
diff --git a/include/paillier.h b/include/paillier.h
index 38b9ef0..d5713cd 100644
--- a/include/paillier.h
+++ b/include/paillier.h
@@ -52,15 +52,20 @@ typedef struct{
  * \brief Paillier Private Key
  */
 typedef struct{
-    BIG_512_60 n[FFLEN_4096]; /**< Paillier Modulus - n = pq*/
-    BIG_512_60 g[FFLEN_4096]; /**< Public Base - n+1 */
-    BIG_512_60 l[HFLEN_4096]; /**< Private Key (Euler totient of n) */
-    BIG_512_60 m[FFLEN_4096]; /**< Precomputed l^(-1) */
+    BIG_1024_58 p[HFLEN_2048]; /**< Secret Prime */
+    BIG_1024_58 q[HFLEN_2048]; /**< Secret Prime */
+
+    BIG_1024_58 lp[HFLEN_2048]; /**< Private Key modulo p (Euler totient of p) */
+    BIG_1024_58 lq[HFLEN_2048]; /**< Private Key modulo q (Euler totient of q) */
+
+    BIG_1024_58 invp[FFLEN_2048]; /**< Precomputed inverse of p mod 2^m */
+    BIG_1024_58 invq[FFLEN_2048]; /**< Precomputed inverse of q mod 2^m */
+
+    BIG_1024_58 p2[FFLEN_2048]; /**< Precomputed p^2 */
+    BIG_1024_58 q2[FFLEN_2048]; /**< Precomputed q^2 */
 
-    BIG_512_60 p[HFLEN_4096];     /**< Secret Prime */
-    BIG_512_60 q[HFLEN_4096];     /**< Secret Prime */
-    BIG_512_60 invn[FFLEN_4096];  /**< Precomputed inverse of n */
-    BIG_512_60 n2[FFLEN_4096];    /**< Precomputed n^2 */
+    BIG_1024_58 mp[HFLEN_2048]; /**< Precomputed L(g^lp mod p^2)^(-1) */
+    BIG_1024_58 mq[HFLEN_2048]; /**< Precomputed L(g^lq mod q^2)^(-1) */
 }PAILLIER_private_key;
 
 /*! \brief Generate the key pair
@@ -108,7 +113,9 @@ void PAILLIER_ENCRYPT(csprng *RNG, PAILLIER_public_key *PUB, octet* PT, octet* C
 
 /*! \brief Decrypt ciphertext
  *
- *  These are the decryption steps.
+ *  These are the decryption steps modulo n.
+ *  The computations are carried out modulo p and q
+ *  and combined using the CRT.
  *
  *  <ol>
  *  <li> \f$ ctl = ct^l \pmod{n^2} - 1 \f$
diff --git a/src/ff.c.in b/src/ff.c.in
index a1dfd2d..c9e5918 100644
--- a/src/ff.c.in
+++ b/src/ff.c.in
@@ -1013,3 +1013,32 @@ int FF_WWW_prime(BIG_XXX p[],csprng *rng,int n)
 
     return 1;
 }
+
+/* Chinese Remainder Theorem to reconstruct results mod pq*/
+void FF_WWW_crt(BIG_XXX *r, BIG_XXX *rp, BIG_XXX *rq, BIG_XXX *p, BIG_XXX *q, int n)
+{
+#ifndef C99
+    BIG_XXX pq[FFLEN_WWW], invp[FFLEN_WWW], invq[FFLEN_WWW], a[2*FFLEN_WWW], b[2*FFLEN_WWW]; 
+#else
+    BIG_XXX pq[2*n], invp[2*n], invq[2*n], a[2*n], b[4*n];
+#endif
+
+    FF_WWW_mul(pq,p,q,n);
+
+    FF_WWW_zero(invp,2*n);
+    FF_WWW_zero(invq,2*n);
+
+    FF_WWW_invmodp(invp,p,q,n);
+    FF_WWW_invmodp(invq,q,p,n);
+
+    FF_WWW_mul(a,rq,p,n);
+    FF_WWW_mul(b,a,invp,2*n);
+    FF_WWW_dmod(r,b,pq,2*n);
+
+    FF_WWW_mul(a,rp,q,n);
+    FF_WWW_mul(b,a,invq,2*n);
+    FF_WWW_dmod(a,b,pq,2*n);
+    FF_WWW_add(r,r,a,2*n);
+
+    FF_WWW_mod(r,pq,2*n);
+}
\ No newline at end of file
diff --git a/src/paillier.c b/src/paillier.c
index 61534f3..954f638 100644
--- a/src/paillier.c
+++ b/src/paillier.c
@@ -30,151 +30,121 @@ under the License.
 /* generate a Paillier key pair */
 void PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, PAILLIER_public_key *PUB, PAILLIER_private_key *PRIV)
 {
-    BIG_1024_58 p[HFLEN_2048];
-    BIG_1024_58 q[HFLEN_2048];
+    char oct[FS_2048];
+    octet OCT = {0, FS_2048, oct};
 
     // Public key
-    BIG_1024_58 n[FFLEN_2048];
     BIG_1024_58 g[FFLEN_2048];
 
-    // Secret key
-    BIG_1024_58 l[FFLEN_2048];
-    BIG_1024_58 m[FFLEN_2048];
+    // Workspace for CRT precomputations
+    BIG_1024_58 ff[FFLEN_2048];
+    BIG_1024_58 dff[2*FFLEN_2048];
+
+    /* Private key */
 
     if (RNG!=NULL)
     {
         // p
-        FF_2048_random(p,RNG,HFLEN_2048);
-        while (FF_2048_lastbits(p,2)!=3)
+        FF_2048_random(PRIV->p, RNG, HFLEN_2048);
+        while (FF_2048_lastbits(PRIV->p, 2) != 3)
         {
-            FF_2048_inc(p,1,HFLEN_2048);
+            FF_2048_inc(PRIV->p, 1, HFLEN_2048);
         }
-        while (!FF_2048_prime(p,RNG,HFLEN_2048))
+        while (!FF_2048_prime(PRIV->p, RNG, HFLEN_2048))
         {
-            FF_2048_inc(p,4,HFLEN_2048);
+            FF_2048_inc(PRIV->p, 4, HFLEN_2048);
         }
 
         // q
-        FF_2048_random(q,RNG,HFLEN_2048);
-        while (FF_2048_lastbits(q,2)!=3)
+        FF_2048_random(PRIV->q, RNG, HFLEN_2048);
+        while (FF_2048_lastbits(PRIV->q, 2) != 3)
         {
-            FF_2048_inc(q,1,HFLEN_2048);
+            FF_2048_inc(PRIV->q, 1, HFLEN_2048);
         }
-        while (!FF_2048_prime(q,RNG,HFLEN_2048))
+        while (!FF_2048_prime(PRIV->q, RNG, HFLEN_2048))
         {
-            FF_2048_inc(q,4,HFLEN_2048);
+            FF_2048_inc(PRIV->q, 4, HFLEN_2048);
         }
     }
     else
     {
-        FF_2048_fromOctet(p,P,HFLEN_2048);
-        FF_2048_fromOctet(q,Q,HFLEN_2048);
+        FF_2048_fromOctet(PRIV->p, P, HFLEN_2048);
+        FF_2048_fromOctet(PRIV->q, Q, HFLEN_2048);
     }
 
-    // n = p * q
-    FF_2048_mul(n,p,q,HFLEN_2048);
+    // lp = p-1, lq = q-1
+    FF_2048_copy(PRIV->lp, PRIV->p, HFLEN_2048);
+    FF_2048_copy(PRIV->lq, PRIV->q, HFLEN_2048);
+    FF_2048_dec(PRIV->lp, 1, HFLEN_2048);
+    FF_2048_dec(PRIV->lq, 1, HFLEN_2048);
 
-    // g = n + 1
-    FF_2048_copy(g,n,FFLEN_2048);
-    FF_2048_inc(g,1,FFLEN_2048);
+    /* Precomputations for Secret Key */
 
-    // Decrement p and q in place. They need to
-    // be restored before being returned
-    FF_2048_dec(p,1,HFLEN_2048);
-    FF_2048_dec(q,1,HFLEN_2048);
+    // p^{-1}, q^{-1} mod 2^m for division trick
+    FF_2048_zero(PRIV->invp, FFLEN_2048);
+    FF_2048_zero(PRIV->invq, FFLEN_2048);
+    FF_2048_invmod2m(PRIV->invp, PRIV->p, HFLEN_2048);
+    FF_2048_invmod2m(PRIV->invq, PRIV->q, HFLEN_2048);
 
-    // l = (p-1) * (q-1)
-    FF_2048_mul(l,p,q,HFLEN_2048);
+    // p^2, q^2
+    FF_2048_sqr(PRIV->p2, PRIV->p, HFLEN_2048);
+    FF_2048_sqr(PRIV->q2, PRIV->q, HFLEN_2048);
+    FF_2048_norm(PRIV->p2, FFLEN_2048);
+    FF_2048_norm(PRIV->q2, FFLEN_2048);
 
-    // m = ((p-1) * (q-1))^{-1} mod n
-    FF_2048_invmodp(m,l,n,FFLEN_2048);
-
-    // Restore p and q for output
-    FF_2048_inc(p,1,HFLEN_2048);
-    FF_2048_inc(q,1,HFLEN_2048);
+    // g = n + 1
+    FF_2048_mul(g, PRIV->p, PRIV->q, HFLEN_2048);
+    FF_2048_inc(g, 1, FFLEN_2048);
 
-    // Output Private Key
-    char oct[FS_2048];
-    octet OCT = {0,FS_2048, oct};
+    // (((g^(p-1) mod p^2) - 1) / p)^(-1) mod p for dec/enc with CRT
+    FF_2048_skpow(ff, g, PRIV->lp, PRIV->p2, FFLEN_2048, HFLEN_2048);
+    FF_2048_dec(ff, 1, FFLEN_2048);
+    FF_2048_mul(dff, ff, PRIV->invp, FFLEN_2048);
+    FF_2048_invmodp(PRIV->mp, dff, PRIV->p, HFLEN_2048);
 
-    FF_2048_toOctet(&OCT, p, HFLEN_2048);
-    OCT_pad(&OCT,HFS_4096);
-    FF_4096_fromOctet(PRIV->p, &OCT, HFLEN_4096);
-    OCT_empty(&OCT);
+    // (((g^(q-1) mod q^2) - 1) / q)^(-1) mod q for dec/enc with CRT
+    FF_2048_skpow(ff, g, PRIV->lq, PRIV->q2, FFLEN_2048, HFLEN_2048);
+    FF_2048_dec(ff, 1, FFLEN_2048);
+    FF_2048_mul(dff, ff, PRIV->invq, FFLEN_2048);
+    FF_2048_invmodp(PRIV->mq, dff, PRIV->q, HFLEN_2048);
 
-    FF_2048_toOctet(&OCT, q, HFLEN_2048);
-    OCT_pad(&OCT,HFS_4096);
-    FF_4096_fromOctet(PRIV->q, &OCT, HFLEN_4096);
-    OCT_empty(&OCT);
+    /* Public Key */
 
-    FF_2048_toOctet(&OCT, n, FFLEN_2048);
-    FF_4096_zero(PRIV->n, FFLEN_4096);
-    FF_4096_fromOctet(PRIV->n, &OCT, HFLEN_4096);
+    // g = n + 1
+    FF_2048_toOctet(&OCT, g, FFLEN_2048);
+    FF_4096_zero(PUB->g, FFLEN_4096);
+    FF_4096_fromOctet(PUB->g, &OCT, HFLEN_4096);
     OCT_empty(&OCT);
 
+    // n
+    FF_2048_dec(g, 1, FFLEN_2048);
     FF_2048_toOctet(&OCT, g, FFLEN_2048);
-    FF_4096_zero(PRIV->g, FFLEN_4096);
-    FF_4096_fromOctet(PRIV->g, &OCT, HFLEN_4096);
+    FF_4096_zero(PUB->n, FFLEN_4096);
+    FF_4096_fromOctet(PUB->n, &OCT, HFLEN_4096);
     OCT_empty(&OCT);
 
-    FF_2048_toOctet(&OCT, l, FFLEN_2048);
-    FF_4096_fromOctet(PRIV->l, &OCT, HFLEN_4096);
-    OCT_empty(&OCT);
+    // Precompute n^2 for public key
+    FF_4096_sqr(PUB->n2, PUB->n, HFLEN_4096);
+    FF_4096_norm(PUB->n2, FFLEN_4096);
 
-    FF_2048_toOctet(&OCT, m, FFLEN_2048);
-    FF_4096_zero(PRIV->m, FFLEN_4096);
-    FF_4096_fromOctet(PRIV->m, &OCT, HFLEN_4096);
-    OCT_clear(&OCT);
-
-    // Precompute n^2
-    FF_4096_sqr(PRIV->n2, PRIV->n, HFLEN_4096);
-    FF_4096_norm(PRIV->n2, FFLEN_4096);
-
-    // Precompute n^-1 mod 2^m
-    FF_4096_invmod2m(PRIV->invn, PRIV->n, FFLEN_4096);
-
-    // Output Public Key
-    FF_4096_copy(PUB->n , PRIV->n , FFLEN_4096);
-    FF_4096_copy(PUB->g , PRIV->g , FFLEN_4096);
-    FF_4096_copy(PUB->n2, PRIV->n2, FFLEN_4096);
-
-#ifdef DEBUG
-    printf("p ");
-    FF_2048_output(p,HFLEN_2048);
-    printf("\n");
-    printf("q ");
-    FF_2048_output(q,HFLEN_2048);
-    printf("\n");
-
-    printf("n ");
-    FF_2048_output(n,FFLEN_2048);
-    printf("\n");
-    printf("g ");
-    FF_2048_output(g,FFLEN_2048);
-    printf("\n");
-
-    printf("l ");
-    FF_2048_output(l,FFLEN_2048);
-    printf("\n");
-    printf("m ");
-    FF_2048_output(m,FFLEN_2048);
-    printf("\n");
-#endif
-
-    // Clean secret keys from memory
-    FF_2048_zero(p,HFLEN_2048);
-    FF_2048_zero(q,HFLEN_2048);
-    FF_2048_zero(l,FFLEN_2048);
-    FF_2048_zero(m,FFLEN_2048);
+    // Clean memory
+    FF_2048_zero(ff, FFLEN_2048);
+    FF_2048_zero(dff, 2*FFLEN_2048);
 }
 
 /* Clean secrets from private key */
 void PAILLIER_PRIVATE_KEY_KILL(PAILLIER_private_key *PRIV)
 {
-    FF_4096_zero(PRIV->l, HFLEN_4096);
-    FF_4096_zero(PRIV->m, FFLEN_4096);
-    FF_4096_zero(PRIV->p, HFLEN_4096);
-    FF_4096_zero(PRIV->q, HFLEN_4096);
+    FF_2048_zero(PRIV->p,    HFLEN_2048);
+    FF_2048_zero(PRIV->q,    HFLEN_2048);
+    FF_2048_zero(PRIV->lp,   HFLEN_2048);
+    FF_2048_zero(PRIV->lq,   HFLEN_2048);
+    FF_2048_zero(PRIV->p2,   FFLEN_2048);
+    FF_2048_zero(PRIV->q2,   FFLEN_2048);
+    FF_2048_zero(PRIV->mp,   HFLEN_2048);
+    FF_2048_zero(PRIV->mq,   HFLEN_2048);
+    FF_2048_zero(PRIV->invp, FFLEN_2048);
+    FF_2048_zero(PRIV->invq, FFLEN_2048);
 }
 
 /* Paillier encrypt
@@ -182,7 +152,7 @@ void PAILLIER_PRIVATE_KEY_KILL(PAILLIER_private_key *PRIV)
 */
 void PAILLIER_ENCRYPT(csprng *RNG, PAILLIER_public_key *PUB, octet* PT, octet* CT, octet* R)
 {
-    // Random r < n
+    // Random r < n^2
     BIG_512_60 r[FFLEN_4096];
 
     // plaintext
@@ -196,11 +166,11 @@ void PAILLIER_ENCRYPT(csprng *RNG, PAILLIER_public_key *PUB, octet* PT, octet* C
     // In production generate R from RNG
     if (RNG!=NULL)
     {
-        FF_4096_randomnum(r,PUB->n2,RNG,FFLEN_4096);
+        FF_4096_randomnum(r, PUB->n2, RNG,FFLEN_4096);
     }
     else
     {
-        FF_4096_fromOctet(r,R,FFLEN_4096);
+        FF_4096_fromOctet(r, R, FFLEN_4096);
     }
 
     // ct = g^pt * r^n mod n2
@@ -215,102 +185,72 @@ void PAILLIER_ENCRYPT(csprng *RNG, PAILLIER_public_key *PUB, octet* PT, octet* C
         FF_4096_toOctet(R, r, HFLEN_4096);
     }
 
-#ifdef DEBUG
-    printf("n ");
-    FF_4096_output(PUB->n,FFLEN_4096);
-    printf("\n\n");
-    printf("g ");
-    FF_4096_output(PUB->g,FFLEN_4096);
-    printf("\n\n");
-    printf("n2 ");
-    FF_4096_output(PUB->n2,FFLEN_4096);
-    printf("\n\n");
-    printf("r ");
-    FF_4096_output(r,FFLEN_4096);
-    printf("\n\n");
-    printf("pt ");
-    FF_4096_output(pt,HFLEN_4096);
-    printf("\n\n");
-    printf("ct ");
-    FF_4096_output(ct,FFLEN_4096);
-    printf("\n\n");
-    printf("CT: ");
-    OCT_output(CT);
-    printf("\n");
-#endif
-
     // Clean memory
+    FF_4096_zero(r, FFLEN_4096);
     FF_4096_zero(pt, HFLEN_4096);
 }
 
 /* Paillier decrypt */
 void PAILLIER_DECRYPT(PAILLIER_private_key *PRIV, octet* CT, octet* PT)
 {
-    // Ciphertext
-    BIG_512_60 ct[FFLEN_4096];
+    // Chiphertext
+    BIG_1024_58 ct[2 * FFLEN_2048];
 
     // Plaintext
-    BIG_512_60 pt[FFLEN_4096];
-
-    // ctln = (ct^l - 1) / n
-    BIG_512_60 ctln[2 * FFLEN_4096];
-
-    FF_4096_fromOctet(ct,CT,FFLEN_4096);
-
-    // (ct^l mod n^2) - 1
-    FF_4096_skpow(ct,ct,PRIV->l,PRIV->n2,FFLEN_4096,HFLEN_4096);
-    FF_4096_dec(ct,1,FFLEN_4096);
-
-#ifdef DEBUG
-    printf("PAILLIER_DECRYPT ct^l-1 ");
-    FF_4096_output(ct,FFLEN_4096);
-    printf("\n\n");
-#endif
-
-    // Division using the inverse mod 2^m trick.
-    // ctln actually fits into a FF_2048 element
-    // since ctln = ctl/n < n^2 / n = n
-    FF_4096_mul(ctln,ct,PRIV->invn,FFLEN_4096);
-
-    // pt = ctln * m mod n
-    // the result fits into a FF_4096 element,
-    // since both m and ctln fit into a FF_2048 element
-    FF_4096_mul(pt, ctln, PRIV->m, HFLEN_4096);
-#ifdef DEBUG
-    printf("pt1 ");
-    FF_4096_output(pt,FFLEN_4096);
-    printf("\n\n");
-#endif
-    FF_4096_mod(pt,PRIV->n,FFLEN_4096);
+    BIG_1024_58 pt[FFLEN_2048];
+    BIG_1024_58 ptp[HFLEN_2048];
+    BIG_1024_58 ptq[HFLEN_2048];
+
+    // Work space
+    BIG_1024_58 ctl[FFLEN_2048];
+    BIG_1024_58 ctln[2 * FFLEN_2048];
+
+    FF_2048_fromOctet(ct, CT, 2 * FFLEN_2048);
+
+    /* Decryption modulo p */
+
+    FF_2048_dmod(ctl, ct, PRIV->p2, FFLEN_2048);
+
+    // Compute ctl = (ct^lp mod p2 - 1)
+    FF_2048_skpow(ctl, ctl, PRIV->lp, PRIV->p2, FFLEN_2048, HFLEN_2048);
+    FF_2048_dec(ctl, 1, FFLEN_2048);
+
+    // ctln = ctl / p
+    // Division by p using the inverse mod 2^m trick
+    FF_2048_mul(ctln, ctl, PRIV->invp, FFLEN_2048);
+
+    // ptp = ctln * mp mod p
+    FF_2048_mul(ptp, ctln, PRIV->mp, HFLEN_2048);
+    FF_2048_dmod(ptp, ptp, PRIV->p, HFLEN_2048);
+
+    /* Decryption modulo q */
+
+    FF_2048_dmod(ctl, ct, PRIV->q2, FFLEN_2048);
+
+    // Compute ctl = (ct^lq mod q2 - 1)
+    FF_2048_skpow(ctl, ctl, PRIV->lq, PRIV->q2, FFLEN_2048, HFLEN_2048);
+    FF_2048_dec(ctl, 1, FFLEN_2048);
+
+    // ctln = ctl / q
+    // Division by q using the inverse mod 2^m trick
+    FF_2048_mul(ctln, ctl, PRIV->invq, FFLEN_2048);
+
+    // ptq = ctln * mq mod q
+    FF_2048_mul(ptq, ctln, PRIV->mq, HFLEN_2048);
+    FF_2048_dmod(ptq, ptq, PRIV->q, HFLEN_2048);
+
+    /* Combine results using CRT */
+    FF_2048_crt(pt, ptp, ptq, PRIV->p, PRIV->q, HFLEN_2048);
 
     // Output
-    FF_4096_toOctet(PT, pt, HFLEN_4096);
-
-#ifdef DEBUG
-    printf("PAILLIER_DECRYPT n ");
-    FF_4096_output(PRIV->n,FFLEN_4096);
-    printf("\n\n");
-    printf("PAILLIER_DECRYPT l ");
-    FF_4096_output(PRIV->l,HFLEN_4096);
-    printf("\n\n");
-    printf("PAILLIER_DECRYPT m ");
-    FF_4096_output(PRIV->m,FFLEN_4096);
-    printf("\n\n");
-    printf("PAILLIER_DECRYPT ct ");
-    FF_4096_output(ct,FFLEN_4096);
-    printf("\n\n");
-    printf("PAILLIER_DECRYPT ctln ");
-    FF_4096_output(ctln,FFLEN_4096);
-    printf("\n\n");
-    printf("PAILLIER_DECRYPT pt ");
-    FF_4096_output(pt,FFLEN_4096);
-    printf("\n\n");
-#endif
+    FF_2048_toOctet(PT, pt, FFLEN_2048);
 
     // Clean memory
-    FF_4096_zero(ct, FFLEN_4096);
-    FF_4096_zero(ctln, FFLEN_4096);
-    FF_4096_zero(pt, HFLEN_4096);
+    FF_2048_zero(pt,   FFLEN_2048);
+    FF_2048_zero(ptp,  HFLEN_2048);
+    FF_2048_zero(ptq,  HFLEN_2048);
+    FF_2048_zero(ctl,  FFLEN_2048);
+    FF_2048_zero(ctln, 2 * FFLEN_2048);
 }
 
 /* Homomorphic addition of plaintexts */
@@ -325,43 +265,15 @@ void PAILLIER_ADD(PAILLIER_public_key *PUB, octet* CT1, octet* CT2, octet* CT)
     BIG_512_60 ct2[FFLEN_4096];
     BIG_512_60 ct[2 * FFLEN_4096];
 
-    FF_4096_fromOctet(ct1,CT1,FFLEN_4096);
-    FF_4096_fromOctet(ct2,CT2,FFLEN_4096);
-
-#ifdef DEBUG
-    printf("PAILLIER_ADD ct1 ");
-    FF_4096_output(ct1,FFLEN_4096);
-    printf("\n\n");
-    printf("PAILLIER_ADD ct2 ");
-    FF_4096_output(ct2,FFLEN_4096);
-    printf("\n\n");
-#endif
+    FF_4096_fromOctet(ct1, CT1, FFLEN_4096);
+    FF_4096_fromOctet(ct2, CT2, FFLEN_4096);
 
     // ct = ct1 * ct2 mod n^2
-    FF_4096_mul(ct,ct1,ct2,FFLEN_4096);
-
-#ifdef DEBUG
-    printf("PAILLIER_ADD ct1 * ct2 ");
-    FF_4096_output(ct,2 * FFLEN_4096);
-    printf("\n\n");
-#endif
-
-    FF_4096_dmod(ct,ct,PUB->n2,FFLEN_4096);
+    FF_4096_mul(ct, ct1, ct2, FFLEN_4096);
+    FF_4096_dmod(ct, ct, PUB->n2, FFLEN_4096);
 
     // Output
     FF_4096_toOctet(CT, ct, FFLEN_4096);
-
-#ifdef DEBUG
-    printf("PAILLIER_ADD n ");
-    FF_4096_output(PUB->n,HFLEN_4096);
-    printf("\n\n");
-    printf("PAILLIER_ADD ct1 ");
-    FF_4096_output(ct1,FFLEN_4096);
-    printf("\n\n");
-    printf("PAILLIER_ADD ct2 ");
-    FF_4096_output(ct2,FFLEN_4096);
-    printf("\n\n");
-#endif
 }
 
 /* Homomorphic multiplation of plaintext
@@ -380,33 +292,15 @@ void PAILLIER_MULT(PAILLIER_public_key *PUB, octet* CT1, octet* PT, octet* CT)
     // Ciphertext output. ct = ct1 ^ pt mod n^2
     BIG_512_60 ct[FFLEN_4096];
 
-    FF_4096_fromOctet(pt,PT,HFLEN_4096);
-    FF_4096_fromOctet(ct1,CT1,FFLEN_4096);
+    FF_4096_fromOctet(pt, PT, HFLEN_4096);
+    FF_4096_fromOctet(ct1, CT1, FFLEN_4096);
 
     // ct1^pt mod n^2
-    FF_4096_skpow(ct,ct1,pt,PUB->n2,FFLEN_4096, HFLEN_4096);
+    FF_4096_skpow(ct, ct1, pt, PUB->n2, FFLEN_4096, HFLEN_4096);
 
     // output
     FF_4096_toOctet(CT, ct, FFLEN_4096);
 
-#ifdef DEBUG
-    printf("PAILLIER_MULT n: ");
-    FF_4096_output(PUB->n,HFLEN_4096);
-    printf("\n\n");
-    printf("PAILLIER_MULT n2: ");
-    FF_4096_output(PUB->n2,FFLEN_4096);
-    printf("\n\n");
-    printf("PAILLIER_MULT ct1: ");
-    FF_4096_output(ct1,FFLEN_4096);
-    printf("\n\n");
-    printf("PAILLIER_MULT pt: ");
-    FF_4096_output(pt,HFLEN_4096);
-    printf("\n\n");
-    printf("PAILLIER_MULT ct: ");
-    FF_4096_output(ct,FFLEN_4096);
-    printf("\n\n");
-#endif
-
     // Clean memory
     FF_4096_zero(pt, HFLEN_4096);
 }
@@ -420,7 +314,7 @@ void PAILLIER_PK_fromOctet(PAILLIER_public_key *PUB, octet *PK)
     FF_4096_norm(PUB->n2, FFLEN_4096);
 
     FF_4096_copy(PUB->g, PUB->n, FFLEN_4096);
-    FF_4096_inc(PUB->g,1,HFLEN_4096);
+    FF_4096_inc(PUB->g, 1, HFLEN_4096);
 }
 
 void PAILLIER_PK_toOctet(octet *PK, PAILLIER_public_key *PUB)
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 1033a82..28f96a5 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -224,6 +224,7 @@ foreach(level ${AMCL_RSA})
 
   amcl_rsa_test(${level} test_big_arithmetics_${BD} test_big_arithmetics_XXX.c.in amcl_rsa_${TFF} "SUCCESS" "big/test_vector_big.txt")
   amcl_rsa_test(${level} test_big_consistency_${BD} test_big_consistency_XXX.c.in amcl_rsa_${TFF} "SUCCESS")
+  amcl_rsa_test(${level} test_ff_consistency_${TFF}  test_ff_consistency_WWW.c.in  amcl_rsa_${TFF} "SUCCESS")
   amcl_rsa_test(${level} test_rsa_${TFF}            test_rsa_WWW.c.in             amcl_rsa_${TFF} "SUCCESS")
 endforeach()
 
@@ -271,6 +272,9 @@ endif()
 if(BUILD_PAILLIER)
   set(deps "amcl_core;amcl_paillier")
 
+  amcl_rsa_test(2048 test_ff_consistency_2048  test_ff_consistency_WWW.c.in  "${deps}" "SUCCESS")
+  amcl_rsa_test(4096 test_ff_consistency_4096  test_ff_consistency_WWW.c.in  "${deps}" "SUCCESS")
+
   amcl_test(test_paillier_consistency test_paillier_consistency.c "${deps}" "SUCCESS")
   amcl_test(test_paillier_decrypt test_paillier_decrypt.c "${deps}" "SUCCESS" "paillier/decrypt.txt")
   amcl_test(test_paillier_encrypt test_paillier_encrypt.c "${deps}" "SUCCESS" "paillier/encrypt.txt")
diff --git a/test/test_ff_consistency_WWW.c.in b/test/test_ff_consistency_WWW.c.in
new file mode 100644
index 0000000..12d3a1d
--- /dev/null
+++ b/test/test_ff_consistency_WWW.c.in
@@ -0,0 +1,287 @@
+/*
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+*/
+/**
+ * @file test_big_consistency.c
+ * @author Samuele Andreoli
+ * @brief Test for consistency of FF_WWW
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "arch.h"
+#include "amcl.h"
+#include "utils.h"
+#include "ff_WWW.h"
+
+#define FS_WWW  MODBYTES_XXX*FFLEN_WWW
+#define HFS_WWW MODBYTES_XXX*HFLEN_WWW
+
+char *Phex = "cc44dc413faedf280f429f57881d48047e6041b16774b3074e81c6d2b2753269e61db41fb6a1bddc43f4257c49724f1d2678df0fc4d05032d228037c6580ed4b35001f1c01d788c1a5e2dfd3f676b25646d7df23d62bff478c5875327ca47b0145153fb316ad2289687fbc6fc113dca2d592e9761dd0d60577a1551c1cd37c29";
+char *Qhex = "f68a619af0db4e19ed9c32569b25650e4cd9d9b3949bad18ce58c77770413e823c92dea3eb0a0a41425b2a0ba4e329c42d89bba26548ec3544a9798c887a0e1bb419e73374202505ada6b63c63ba9af2b10ab7c80efe4bf752cb951e6c8a763d6fa6430c23547f2e671303bc3e9591f45696f25c2da64939ff2346f636581e0d";
+
+int main()
+{
+
+    int i;
+    char seed[256];
+    csprng RNG;
+
+    char oct[FS_WWW];
+    octet OCT = {0,FS_WWW,oct};
+
+    BIG_XXX A[HFLEN_WWW], B[HFLEN_WWW], C[HFLEN_WWW], D[HFLEN_WWW];
+    BIG_XXX F[FFLEN_WWW], G[FFLEN_WWW], H[FFLEN_WWW], L[FFLEN_WWW], P[FFLEN_WWW], Q[FFLEN_WWW], N[FFLEN_WWW];
+
+    /* Fake random source */
+    RAND_clean(&RNG);
+    for (i=0; i<256; i++) seed[i]=(char)i;
+    RAND_seed(&RNG,256,seed);
+
+    /* Testing general equality and equality to zero */
+    FF_WWW_zero(A, HFLEN_WWW);
+    FF_WWW_zero(B, HFLEN_WWW);
+
+    if(FF_WWW_comp(A,B,HFLEN_WWW) || !FF_WWW_iszilch(A, HFLEN_WWW))
+    {
+        printf("ERROR comparing or setting to zero\n");
+        exit(EXIT_FAILURE);
+    }
+
+    /* Test parity */
+    FF_WWW_one(A,HFLEN_WWW);
+    if (!FF_WWW_parity(A) || FF_WWW_parity(B))
+    {
+        printf("ERROR checking parity\n");
+        exit(EXIT_FAILURE);
+    }
+
+    /* Test last bits */
+    FF_WWW_init(A,0xF8,HFLEN_WWW);
+    if(FF_WWW_lastbits(A,8) != 0xF8 || FF_WWW_lastbits(A,12) != 0xF8)
+    {
+        printf("ERROR checking last bits\n");
+        exit(EXIT_FAILURE);
+    }
+
+    /* Testing copy*/
+    FF_WWW_random(F,&RNG,FFLEN_WWW);
+    FF_WWW_copy(G,F,FFLEN_WWW);
+    if(FF_WWW_comp(G,F,FFLEN_WWW))
+    {
+        printf("ERROR testing copy\n");
+        exit(EXIT_FAILURE);
+    }
+
+    /* Testing addition, subtraction */
+    for (i=0; i<10; i++)
+    {
+        FF_WWW_random(F,&RNG,FFLEN_WWW);
+        FF_WWW_random(G,&RNG,FFLEN_WWW);
+        FF_WWW_copy(H,G,FFLEN_WWW);
+
+        FF_WWW_add(G,G,F,FFLEN_WWW);
+        FF_WWW_sub(G,G,F,FFLEN_WWW);
+        FF_WWW_sub(F,F,F,FFLEN_WWW);
+        if(FF_WWW_comp(G,H,FFLEN_WWW) || !FF_WWW_iszilch(F,FFLEN_WWW))
+        {
+            printf("ERROR testing addition/subtraction\n");
+            exit(EXIT_FAILURE);
+        }
+    }
+
+    FF_WWW_one(A,HFLEN_WWW);
+    FF_WWW_zero(B,HFLEN_WWW);
+
+    FF_WWW_add(C,A,B,HFLEN_WWW);
+    FF_WWW_add(B,B,B,HFLEN_WWW);
+    if(FF_WWW_comp(A,C,HFLEN_WWW) || !FF_WWW_iszilch(B,HFLEN_WWW))
+    {
+        printf("ERROR testing addition/subtraction\n");
+        exit(EXIT_FAILURE);
+    }
+
+    /* Testing increment/decrement */
+    for (i=0; i<10; i++)
+    {
+        FF_WWW_random(F,&RNG,FFLEN_WWW);
+        FF_WWW_copy(H,F,FFLEN_WWW);
+
+        FF_WWW_inc(F,10,FFLEN_WWW);
+        FF_WWW_dec(F,10,FFLEN_WWW);
+        if(FF_WWW_comp(F,H,FFLEN_WWW))
+        {
+            printf("ERROR testing addition/subtraction\n");
+            exit(EXIT_FAILURE);
+        }
+    }
+
+    FF_WWW_zero(A,HFLEN_WWW);
+
+    FF_WWW_inc(A,0,HFLEN_WWW);
+    if(!FF_WWW_iszilch(A,HFLEN_WWW))
+    {
+        printf("ERROR testing addition/subtraction\n");
+        exit(EXIT_FAILURE);
+    }
+
+    FF_WWW_dec(A,0,HFLEN_WWW);
+    if(!FF_WWW_iszilch(A,HFLEN_WWW))
+    {
+        printf("ERROR testing addition/subtraction\n");
+        exit(EXIT_FAILURE);
+    }
+
+    /* Testing shifts */
+    FF_WWW_one(A,HFLEN_WWW);
+    FF_WWW_init(B,2,HFLEN_WWW);
+    FF_WWW_one(C,HFLEN_WWW);
+
+    FF_WWW_shl(A,HFLEN_WWW);
+    if(FF_WWW_comp(A,B,HFLEN_WWW))
+    {
+        printf("ERROR testing shifts\n");
+        exit(EXIT_FAILURE);
+    }
+
+    FF_WWW_shr(A,HFLEN_WWW);
+    if(FF_WWW_comp(A,C,HFLEN_WWW))
+    {
+        printf("ERROR testing shifts\n");
+        exit(EXIT_FAILURE);
+    }
+
+    /* Testing octet conversions */
+    for (i=0; i<10; i++)
+    {
+        OCT_clear(&OCT);
+
+        FF_WWW_random(F,&RNG,FFLEN_WWW);
+        FF_WWW_copy(H,F,FFLEN_WWW);
+
+        FF_WWW_toOctet(&OCT,F,FFLEN_WWW);
+        FF_WWW_zero(F,FFLEN_WWW);
+        FF_WWW_fromOctet(F,&OCT,FFLEN_WWW);
+
+        if(FF_WWW_comp(F,H,FFLEN_WWW))
+        {
+            printf("ERROR testing octet conversion\n");
+            exit(EXIT_FAILURE);
+        }
+
+        OCT_clear(&OCT);
+
+        FF_WWW_random(A,&RNG,HFLEN_WWW);
+        FF_WWW_copy(C,A,HFLEN_WWW);
+
+        FF_WWW_toOctet(&OCT,A,HFLEN_WWW);
+        FF_WWW_zero(A,HFLEN_WWW);
+        FF_WWW_fromOctet(A,&OCT,HFLEN_WWW);
+
+        if(FF_WWW_comp(A,C,HFLEN_WWW))
+        {
+            printf("ERROR testing octet conversion\n");
+            exit(EXIT_FAILURE);
+        }
+    }
+
+    /* Testing multiplication/square */
+    for (i=0; i<10; i++)
+    {
+        FF_WWW_random(A,&RNG,HFLEN_WWW);
+
+        FF_WWW_mul(F,A,A,HFLEN_WWW);
+        FF_WWW_sqr(G,A,HFLEN_WWW);
+
+        // Normalise for comparison
+        FF_WWW_norm(F,FFLEN_WWW);
+        FF_WWW_norm(G,FFLEN_WWW);
+
+        if(FF_WWW_comp(F,G,FFLEN_WWW))
+        {
+            printf("ERROR testing multiplication/square");
+            exit(EXIT_FAILURE);
+        }
+    }
+
+    /* Read P and Q primes from hex */
+    OCT_fromHex(&OCT, Phex);
+    OCT_pad(&OCT,FS_WWW);
+    FF_WWW_fromOctet(P,&OCT,FFLEN_WWW);
+
+    OCT_fromHex(&OCT, Qhex);
+    OCT_pad(&OCT,FS_WWW);
+    FF_WWW_fromOctet(Q,&OCT,FFLEN_WWW);
+
+    /* Testing inverse modulo P */
+    FF_WWW_one(C,HFLEN_WWW);
+    for (i=0; i< 10; i++)
+    {
+        FF_WWW_random(A,&RNG, HFLEN_WWW);
+        FF_WWW_mod(A,P,HFLEN_WWW);
+        FF_WWW_copy(B,A,HFLEN_WWW);
+
+        FF_WWW_invmodp(B,B,P,HFLEN_WWW);
+        FF_WWW_mul(F,A,B,HFLEN_WWW);
+        FF_WWW_mod(F,P,FFLEN_WWW);
+
+        if(FF_WWW_comp(C,F,HFLEN_WWW))
+        {
+            printf("ERROR testing inverse modulo p");
+            exit(EXIT_FAILURE);
+        }
+    }
+
+    /* Testing CRT */
+    FF_WWW_mul(N,P,Q,HFLEN_WWW);
+
+    for (i=0; i<10; i++)
+    {
+        FF_WWW_random(A,&RNG,HFLEN_WWW);
+        FF_WWW_random(B,&RNG,HFLEN_WWW);
+
+        FF_WWW_mul(H,A,B,HFLEN_WWW);
+        FF_WWW_mod(H,N,FFLEN_WWW);
+
+        FF_WWW_copy(C,A,HFLEN_WWW);
+        FF_WWW_copy(D,B,HFLEN_WWW);
+        FF_WWW_mod(A,P,HFLEN_WWW);
+        FF_WWW_mod(B,P,HFLEN_WWW);
+        FF_WWW_mod(C,Q,HFLEN_WWW);
+        FF_WWW_mod(D,Q,HFLEN_WWW);
+
+        FF_WWW_mul(F,A,B,HFLEN_WWW);
+        FF_WWW_mod(F,P,FFLEN_WWW);
+
+        FF_WWW_mul(G,C,D,HFLEN_WWW);
+        FF_WWW_mod(G,Q,FFLEN_WWW);
+
+        FF_WWW_crt(L,F,G,P,Q,HFLEN_WWW);
+
+        if(FF_WWW_comp(L,H,HFLEN_WWW))
+        {
+            printf("ERROR testing crt");
+            exit(EXIT_FAILURE);
+        }
+    }
+
+    printf("SUCCESS TEST CONSISTENCY OF FF_WWW PASSED\n");
+    exit(EXIT_SUCCESS);
+}
diff --git a/test/test_paillier_consistency.c b/test/test_paillier_consistency.c
index f07b11f..7c1d1ab 100644
--- a/test/test_paillier_consistency.c
+++ b/test/test_paillier_consistency.c
@@ -32,7 +32,7 @@ under the License.
 
 char* PT3GOLDEN_hex = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
 
-void ff_compare(BIG_512_60 *a, BIG_512_60 *b, char *msg, int n)
+void ff_4096_compare(BIG_512_60 *a, BIG_512_60 *b, char *msg, int n)
 {
     if(FF_4096_comp(a, b, n))
     {
@@ -41,9 +41,18 @@ void ff_compare(BIG_512_60 *a, BIG_512_60 *b, char *msg, int n)
     }
 }
 
+void ff_2048_compare(BIG_1024_58 *a, BIG_1024_58 *b, char *msg, int n)
+{
+    if(FF_2048_comp(a, b, n))
+    {
+        fprintf(stderr, "FAILURE %s\n", msg);
+        exit(EXIT_FAILURE);
+    }
+}
+
 int paillier(csprng *RNG)
 {
-    BIG_512_60 zero[FFLEN_4096];
+    BIG_1024_58 zero[FFLEN_2048];
 
     // Key material
     PAILLIER_private_key PRIV;
@@ -116,34 +125,9 @@ int paillier(csprng *RNG)
     PAILLIER_PK_toOctet(&PUBOCT, &PUB);
     PAILLIER_PK_fromOctet(&PUBIN, &PUBOCT);
 
-    ff_compare(PUB.n,  PUBIN.n,  "n not correctly loaded",   FFLEN_4096);
-    ff_compare(PUB.g,  PUBIN.g,  "g not correctly loaded",   FFLEN_4096);
-    ff_compare(PUB.n2, PUBIN.n2, "n^2 not correctly loaded", FFLEN_4096);
-
-#ifdef DEBUG
-    printf("P: ");
-    FF_4096_output(PRIV.p, HFLEN_4096);
-    printf("\n");
-    printf("Q: ");
-    FF_4096_output(PRIV.q, HFLEN_4096);
-    printf("\n");
-
-    printf("Public Key \n");
-    printf("N: ");
-    FF_4096_output(PUB.n, HFLEN_4096);
-    printf("\n");
-    printf("G: ");
-    FF_4096_output(PUB.g, HFLEN_4096);
-    printf("\n");
-
-    printf("Secret Key \n");
-    printf("L: ");
-    FF_4096_output(PRIV.l, HFLEN_4096);
-    printf("\n");
-    printf("M: ");
-    FF_4096_output(PRIV.m, HFLEN_4096);
-    printf("\n");
-#endif
+    ff_4096_compare(PUB.n,  PUBIN.n,  "n not correctly loaded",   FFLEN_4096);
+    ff_4096_compare(PUB.g,  PUBIN.g,  "g not correctly loaded",   FFLEN_4096);
+    ff_4096_compare(PUB.n2, PUBIN.n2, "n^2 not correctly loaded", FFLEN_4096);
 
     // Set plaintext values
     for(int i=0; i<NTHREADS; i++)
@@ -155,25 +139,7 @@ int paillier(csprng *RNG)
         BIG_1024_58 ptk[FFLEN_2048];
         FF_2048_init(ptk, kvalues[i],FFLEN_2048);
         FF_2048_toOctet(&PTK[i], ptk, FFLEN_2048);
-
-#ifdef DEBUG
-        printf("pt ");
-        FF_2048_output(pt,FFLEN_2048);
-        printf("\n");
-        printf("ptk ");
-        FF_2048_output(ptk,FFLEN_2048);
-        printf("\n");
-#endif
-    }
-
-#ifdef DEBUG
-    for(int i=0; i<NTHREADS; i++)
-    {
-        printf("PTIN[%d] ", i);
-        OCT_output(&PTIN[i]);
-        printf("\n");
     }
-#endif
 
     // Encrypt plaintext
     for(int i=0; i<NTHREADS; i++)
@@ -181,30 +147,12 @@ int paillier(csprng *RNG)
         PAILLIER_ENCRYPT(RNG, &PUB, &PTIN[i], &CT[i], NULL);
     }
 
-#ifdef DEBUG
-    for(int i=0; i<NTHREADS; i++)
-    {
-        printf("CT[%d] ", i);
-        OCT_output(&CT[i]);
-        printf("\n");
-    }
-#endif
-
     // Decrypt ciphertexts
     for(int i=0; i<NTHREADS; i++)
     {
         PAILLIER_DECRYPT(&PRIV, &CT[i], &PTOUT[i]);
     }
 
-#ifdef DEBUG
-    for(int i=0; i<NTHREADS; i++)
-    {
-        printf("PTOUT[%d] ", i);
-        OCT_output(&PTOUT[i]);
-        printf("\n");
-    }
-#endif
-
     for(int i=0; i<NTHREADS; i++)
     {
         PAILLIER_MULT(&PUB, &CT[i], &PTK[i], &CTA[i]);
@@ -212,28 +160,8 @@ int paillier(csprng *RNG)
 
     PAILLIER_ADD(&PUB, &CTA[0], &CTA[1], &CT3);
 
-#ifdef DEBUG
-    for(int i=0; i<NTHREADS; i++)
-    {
-        printf("CTA[%d] ", i);
-        OCT_output(&CTA[i]);
-        printf("\n");
-    }
-    printf("CT3: ");
-    OCT_output(&CT3);
-    printf("\n");
-#endif
-
     PAILLIER_DECRYPT(&PRIV, &CT3, &PT3);
 
-#ifdef DEBUG
-    printf("PT3GOLDEN: ");
-    OCT_output(&PT3GOLDEN);
-
-    printf("PT3: ");
-    OCT_output(&PT3);
-    printf("\n");
-#endif
     OCT_fromHex(&PT3GOLDEN,PT3GOLDEN_hex);
     if(!OCT_comp(&PT3GOLDEN,&PT3))
     {
@@ -243,11 +171,17 @@ int paillier(csprng *RNG)
 
     PAILLIER_PRIVATE_KEY_KILL(&PRIV);
 
-    FF_4096_zero(zero, FFLEN_4096);
-    ff_compare(zero, PRIV.p, "p not cleaned from private key", HFLEN_4096);
-    ff_compare(zero, PRIV.q, "p not cleaned from private key", HFLEN_4096);
-    ff_compare(zero, PRIV.l, "p not cleaned from private key", HFLEN_4096);
-    ff_compare(zero, PRIV.m, "p not cleaned from private key", FFLEN_4096);
+    FF_2048_zero(zero, FFLEN_2048);
+    ff_2048_compare(zero, PRIV.p,    "p not cleaned from private key",    HFLEN_2048);
+    ff_2048_compare(zero, PRIV.q,    "q not cleaned from private key",    HFLEN_2048);
+    ff_2048_compare(zero, PRIV.lp,   "lp not cleaned from private key",   HFLEN_2048);
+    ff_2048_compare(zero, PRIV.lq,   "lq not cleaned from private key",   HFLEN_2048);
+    ff_2048_compare(zero, PRIV.mp,   "mp not cleaned from private key",   HFLEN_2048);
+    ff_2048_compare(zero, PRIV.mq,   "mq not cleaned from private key",   HFLEN_2048);
+    ff_2048_compare(zero, PRIV.p2,   "p2 not cleaned from private key",   FFLEN_2048);
+    ff_2048_compare(zero, PRIV.q2,   "q2 not cleaned from private key",   FFLEN_2048);
+    ff_2048_compare(zero, PRIV.invp, "invp not cleaned from private key", FFLEN_2048);
+    ff_2048_compare(zero, PRIV.invq, "invq not cleaned from private key", FFLEN_2048);
 
     OCT_clear(&CT3);
     OCT_clear(&PT3);
diff --git a/test/test_paillier_decrypt.c b/test/test_paillier_decrypt.c
index e050f79..068c6b3 100644
--- a/test/test_paillier_decrypt.c
+++ b/test/test_paillier_decrypt.c
@@ -41,14 +41,14 @@ void read_OCTET(octet* OCT, char* string)
     OCT_fromHex(OCT,buff);
 }
 
-void read_FF_4096(BIG_512_60 *x, char* string, int n)
+void read_FF_2048(BIG_1024_58 *x, char* string, int n)
 {
     int len = strlen(string);
     char oct[len/2];
     octet OCT = {0, len/2, oct};
 
     read_OCTET(&OCT, string);
-    FF_4096_fromOctet(x, &OCT, n);
+    FF_2048_fromOctet(x, &OCT, n);
 }
 
 int main(int argc, char** argv)
@@ -72,9 +72,12 @@ int main(int argc, char** argv)
     const char* TESTline = "TEST = ";
 
     PAILLIER_private_key PRIV;
-    const char* Nline = "N = ";
-    const char* Lline = "L = ";
-    const char* Mline = "M = ";
+    const char* Pline = "P = ";
+    const char* Qline = "Q = ";
+    const char* LPline = "LP = ";
+    const char* MPline = "MP = ";
+    const char* LQline = "LQ = ";
+    const char* MQline = "MQ = ";
 
     char ptgolden[FS_2048]= {0};
     octet PTGOLDEN = {0,sizeof(ptgolden),ptgolden};
@@ -94,61 +97,119 @@ int main(int argc, char** argv)
     while (fgets(line, LINE_LEN, fp) != NULL)
     {
         // Read TEST Number
-        if (!strncmp(line,TESTline, strlen(TESTline)))
+        if (!strncmp(line, TESTline, strlen(TESTline)))
         {
             len = strlen(TESTline);
             linePtr = line + len;
             sscanf(linePtr,"%d\n",&testNo);
         }
 
-        // Read N
-        if (!strncmp(line,Nline, strlen(Nline)))
+        // Read P
+        if (!strncmp(line, Pline, strlen(Pline)))
         {
-            len = strlen(Nline);
+            len = strlen(Pline);
             linePtr = line + len;
-            FF_4096_zero(PRIV.n, FFLEN_4096);
-            read_FF_4096(PRIV.n, linePtr, HFLEN_4096);
+            read_FF_2048(PRIV.p, linePtr, HFLEN_2048);
 
-            FF_4096_sqr(PRIV.n2,PRIV.n, HFLEN_4096);
-            FF_4096_norm(PRIV.n2, FFLEN_4096);
+            FF_2048_zero(PRIV.p2, FFLEN_2048);
+            FF_2048_sqr(PRIV.p2, PRIV.p, HFLEN_2048);
+            FF_2048_norm(PRIV.p2, FFLEN_2048);
 
-            FF_4096_invmod2m(PRIV.invn,PRIV.n,FFLEN_4096);
+            FF_2048_zero(PRIV.invp, FFLEN_2048);
+            FF_2048_invmod2m(PRIV.invp, PRIV.p, HFLEN_2048);
 #ifdef DEBUG
-            printf("N = ");
-            FF_4096_output(PRIV.n , FFLEN_4096);
+            printf("P= ");
+            FF_2048_output(PRIV.p , HFLEN_2048);
+            printf("\n");
+            printf("P2= ");
+            FF_2048_output(PRIV.p2 , HFLEN_2048);
+            printf("\n");
+            printf("PI= ");
+            FF_2048_output(PRIV.invp , HFLEN_2048);
+            printf("\n");
+#endif
+        }
+
+        // Read Q
+        if (!strncmp(line, Qline, strlen(Qline)))
+        {
+            len = strlen(Qline);
+            linePtr = line + len;
+            read_FF_2048(PRIV.q, linePtr, HFLEN_2048);
+
+            FF_2048_zero(PRIV.q2, FFLEN_2048);
+            FF_2048_sqr(PRIV.q2, PRIV.q, HFLEN_2048);
+            FF_2048_norm(PRIV.q2, FFLEN_2048);
+
+            FF_2048_zero(PRIV.invq, FFLEN_2048);
+            FF_2048_invmod2m(PRIV.invq, PRIV.q, HFLEN_2048);
+#ifdef DEBUG
+            printf("Q= ");
+            FF_2048_output(PRIV.q , HFLEN_2048);
+            printf("\n");
+            printf("Q2= ");
+            FF_2048_output(PRIV.q2 , HFLEN_2048);
+            printf("\n");
+            printf("QI= ");
+            FF_2048_output(PRIV.invq , HFLEN_2048);
+            printf("\n");
+#endif
+        }
+
+        // Read LP
+        if (!strncmp(line, LPline, strlen(LPline)))
+        {
+            len = strlen(LPline);
+            linePtr = line + len;
+            read_FF_2048(PRIV.lp, linePtr, HFLEN_2048);
+#ifdef DEBUG
+            printf("LP= ");
+            FF_2048_output(PRIV.lp , HFLEN_2048);
+            printf("\n");
+#endif
+        }
+
+        // Read LQ
+        if (!strncmp(line, LQline, strlen(LQline)))
+        {
+            len = strlen(LQline);
+            linePtr = line + len;
+            read_FF_2048(PRIV.lq, linePtr, HFLEN_2048);
+#ifdef DEBUG
+            printf("LQ= ");
+            FF_2048_output(PRIV.lq , HFLEN_2048);
             printf("\n");
 #endif
         }
 
-        // Read L
-        if (!strncmp(line,Lline, strlen(Lline)))
+        // Read MP
+        if (!strncmp(line, MPline, strlen(MPline)))
         {
-            len = strlen(Lline);
+            len = strlen(MPline);
             linePtr = line + len;
-            read_FF_4096(PRIV.l, linePtr, HFLEN_4096);
+            read_FF_2048(PRIV.mp, linePtr, HFLEN_2048);
 #ifdef DEBUG
-            printf("L = ");
-            FF_4096_output(PRIV.l , HFLEN_4096);
+            printf("MP= ");
+            FF_2048_output(PRIV.mp , HFLEN_2048);
             printf("\n");
 #endif
         }
 
-        // Read M
-        if (!strncmp(line,Mline, strlen(Mline)))
+        // Read MQ
+        if (!strncmp(line, MQline, strlen(MQline)))
         {
-            len = strlen(Mline);
+            len = strlen(MQline);
             linePtr = line + len;
-            FF_4096_zero(PRIV.m, FFLEN_4096);
-            read_FF_4096(PRIV.m, linePtr, HFLEN_4096);
+            read_FF_2048(PRIV.mq, linePtr, HFLEN_2048);
 #ifdef DEBUG
-            printf("M = ");
-            FF_4096_output(PRIV.m , FFLEN_4096);
+            printf("MQ= ");
+            FF_2048_output(PRIV.mq , HFLEN_2048);
             printf("\n");
 #endif
         }
 
         // Read CIPHERTEXT
-        if (!strncmp(line,CTline, strlen(CTline)))
+        if (!strncmp(line, CTline, strlen(CTline)))
         {
             len = strlen(CTline);
             linePtr = line + len;
@@ -160,7 +221,7 @@ int main(int argc, char** argv)
         }
 
         // Read PLAINTEXT and process test vector
-        if (!strncmp(line,PTline, strlen(PTline)))
+        if (!strncmp(line, PTline, strlen(PTline)))
         {
             len = strlen(PTline);
             linePtr = line + len;
diff --git a/test/test_paillier_keygen.c b/test/test_paillier_keygen.c
index e241d38..18064ef 100644
--- a/test/test_paillier_keygen.c
+++ b/test/test_paillier_keygen.c
@@ -42,6 +42,16 @@ void read_OCTET(octet* OCT, char* string)
     OCT_fromHex(OCT,buff);
 }
 
+void read_FF_2048(BIG_1024_58 *x, char* string, int n)
+{
+    int len = strlen(string);
+    char oct[len/2];
+    octet OCT = {0, len/2, oct};
+
+    read_OCTET(&OCT, string);
+    FF_2048_fromOctet(x, &OCT, n);
+}
+
 void read_FF_4096(BIG_512_60 *x, char* string, int n)
 {
     int len = strlen(string);
@@ -52,7 +62,7 @@ void read_FF_4096(BIG_512_60 *x, char* string, int n)
     FF_4096_fromOctet(x, &OCT, n);
 }
 
-void compare_FF(char *x_name, char* y_name, BIG_512_60 *x, BIG_512_60 *y, int n)
+void ff_4096_compare(char *x_name, char* y_name, BIG_512_60 *x, BIG_512_60 *y, int n)
 {
     if(FF_4096_comp(x, y, n))
     {
@@ -61,12 +71,13 @@ void compare_FF(char *x_name, char* y_name, BIG_512_60 *x, BIG_512_60 *y, int n)
     }
 }
 
-void clean_private(PAILLIER_private_key *PRIV)
+void ff_2048_compare(char *x_name, char* y_name, BIG_1024_58 *x, BIG_1024_58 *y, int n)
 {
-    PAILLIER_PRIVATE_KEY_KILL(PRIV);
-    FF_4096_zero(PRIV->n, FFLEN_4096);
-    FF_4096_zero(PRIV->g, FFLEN_4096);
-    FF_4096_zero(PRIV->n2, FFLEN_4096);
+    if(FF_2048_comp(x, y, n))
+    {
+        fprintf(stderr, "FAILURE %s != %s\n", x_name, y_name);
+        exit(EXIT_FAILURE);
+    }
 }
 
 void clean_public(PAILLIER_public_key *PUB)
@@ -102,15 +113,11 @@ int main(int argc, char** argv)
     octet SEEDGOLDEN = {0,sizeof(seedgolden),seedgolden};
     const char* SEEDline = "SEED = ";
 
-    char p[FS_2048]={0};
     char pgolden[HFS_2048]= {0};
-    octet P = {0, sizeof(p),p};
     octet PGOLDEN = {0,sizeof(pgolden),pgolden};
     const char* Pline = "P = ";
 
-    char q[FS_2048]={0};
     char qgolden[HFS_2048]={0};
-    octet Q = {0, sizeof(q),q};
     octet QGOLDEN = {0,sizeof(qgolden),qgolden};
     const char* Qline = "Q = ";
 
@@ -118,12 +125,14 @@ int main(int argc, char** argv)
     PAILLIER_public_key PUBGOLDEN;
     const char* Nline = "N = ";
     const char* Gline = "G = ";
-    const char* Lline = "L = ";
-    const char* Mline = "M = ";
+    const char* LPline = "LP = ";
+    const char* MPline = "MP = ";
+    const char* LQline = "LQ = ";
+    const char* MQline = "MQ = ";
 
     // Clean GOLDEN keys, the generated keys should be cleaned
     // during initialisation
-    clean_private(&PRIVGOLDEN);
+    PAILLIER_PRIVATE_KEY_KILL(&PRIVGOLDEN);
     clean_public(&PUBGOLDEN);
 
     fp = fopen(argv[1], "r");
@@ -152,67 +161,125 @@ int main(int argc, char** argv)
             testSeed = 1;
         }
 
+        // Read G
+        if (!strncmp(line, Gline, strlen(Gline)))
+        {
+            len = strlen(Gline);
+            linePtr = line + len;
+            read_FF_4096(PUBGOLDEN.g, linePtr, HFLEN_4096);
+        }
+
+        // Read N
+        if (!strncmp(line, Nline, strlen(Nline)))
+        {
+            len = strlen(Nline);
+            linePtr = line + len;
+
+            FF_4096_zero(PUBGOLDEN.n, FFLEN_4096);
+            read_FF_4096(PUBGOLDEN.n, linePtr, HFLEN_4096);
+
+            FF_4096_sqr(PUBGOLDEN.n2, PUBGOLDEN.n, HFLEN_4096);
+            FF_4096_norm(PUBGOLDEN.n2, FFLEN_4096);
+        }
+
         // Read P
-        if (!strncmp(line,Pline, strlen(Pline)))
+        if (!strncmp(line, Pline, strlen(Pline)))
         {
             len = strlen(Pline);
             linePtr = line + len;
-            read_OCTET(&PGOLDEN,linePtr);
-            OCT_copy(&P, &PGOLDEN);
-            OCT_pad(&P, HFS_4096);
-            FF_4096_fromOctet(PRIVGOLDEN.p,&P,HFLEN_4096);
+            read_OCTET(&PGOLDEN, linePtr);
+            read_FF_2048(PRIVGOLDEN.p, linePtr, HFLEN_2048);
+
+            FF_2048_sqr(PRIVGOLDEN.p2, PRIVGOLDEN.p, HFLEN_2048);
+            FF_2048_norm(PRIVGOLDEN.p2, FFLEN_2048);
+            FF_2048_invmod2m(PRIVGOLDEN.invp, PRIVGOLDEN.p, HFLEN_2048);
+#ifdef DEBUG
+            printf("P= ");
+            FF_2048_output(PRIVGOLDEN.p , HFLEN_2048);
+            printf("\n");
+            printf("P2= ");
+            FF_2048_output(PRIVGOLDEN.p2 , HFLEN_2048);
+            printf("\n");
+            printf("PI= ");
+            FF_2048_output(PRIVGOLDEN.invp , HFLEN_2048);
+            printf("\n");
+#endif
         }
 
         // Read Q
-        if (!strncmp(line,Qline, strlen(Qline)))
+        if (!strncmp(line, Qline, strlen(Qline)))
         {
             len = strlen(Qline);
             linePtr = line + len;
-            read_OCTET(&QGOLDEN,linePtr);
-            OCT_copy(&Q, &QGOLDEN);
-            OCT_pad(&Q, HFS_4096);
-            FF_4096_fromOctet(PRIVGOLDEN.q,&Q,HFLEN_4096);
+            read_OCTET(&QGOLDEN, linePtr);
+            read_FF_2048(PRIVGOLDEN.q, linePtr, HFLEN_2048);
+
+            FF_2048_sqr(PRIVGOLDEN.q2, PRIVGOLDEN.q, HFLEN_2048);
+            FF_2048_norm(PRIVGOLDEN.q2, FFLEN_2048);
+            FF_2048_invmod2m(PRIVGOLDEN.invq, PRIVGOLDEN.q, HFLEN_2048);
+#ifdef DEBUG
+            printf("Q= ");
+            FF_2048_output(PRIVGOLDEN.q , HFLEN_2048);
+            printf("\n");
+            printf("Q2= ");
+            FF_2048_output(PRIVGOLDEN.q2 , HFLEN_2048);
+            printf("\n");
+            printf("QI= ");
+            FF_2048_output(PRIVGOLDEN.invq , HFLEN_2048);
+            printf("\n");
+#endif
         }
 
-        // Read N
-        if (!strncmp(line,Nline, strlen(Nline)))
+        // Read LP
+        if (!strncmp(line, LPline, strlen(LPline)))
         {
-            len = strlen(Nline);
+            len = strlen(LPline);
             linePtr = line + len;
-            read_FF_4096(PRIVGOLDEN.n, linePtr, HFLEN_4096);
-
-            FF_4096_sqr(PRIVGOLDEN.n2,PRIVGOLDEN.n, HFLEN_4096);
-            FF_4096_norm(PRIVGOLDEN.n2, FFLEN_4096);
-
-            FF_4096_invmod2m(PRIVGOLDEN.invn, PRIVGOLDEN.n, FFLEN_4096);
-
-            FF_4096_copy(PUBGOLDEN.n, PRIVGOLDEN.n, HFLEN_4096);
-            FF_4096_copy(PUBGOLDEN.n2, PRIVGOLDEN.n2, FFLEN_4096);
+            read_FF_2048(PRIVGOLDEN.lp, linePtr, HFLEN_2048);
+#ifdef DEBUG
+            printf("LP= ");
+            FF_2048_output(PRIVGOLDEN.lp , HFLEN_2048);
+            printf("\n");
+#endif
         }
 
-        // Read G
-        if (!strncmp(line,Gline, strlen(Gline)))
+        // Read LQ
+        if (!strncmp(line, LQline, strlen(LQline)))
         {
-            len = strlen(Gline);
+            len = strlen(LQline);
             linePtr = line + len;
-            read_FF_4096(PRIVGOLDEN.g, linePtr, HFLEN_4096);
-            FF_4096_copy(PUBGOLDEN.g, PRIVGOLDEN.g, HFLEN_4096);
+            read_FF_2048(PRIVGOLDEN.lq, linePtr, HFLEN_2048);
+#ifdef DEBUG
+            printf("LQ= ");
+            FF_2048_output(PRIVGOLDEN.lq , HFLEN_2048);
+            printf("\n");
+#endif
         }
 
-        // Read L
-        if (!strncmp(line,Lline, strlen(Lline)))
+        // Read MP
+        if (!strncmp(line, MPline, strlen(MPline)))
         {
-            len = strlen(Lline);
+            len = strlen(MPline);
             linePtr = line + len;
-            read_FF_4096(PRIVGOLDEN.l, linePtr, HFLEN_4096);
+            read_FF_2048(PRIVGOLDEN.mp, linePtr, HFLEN_2048);
+#ifdef DEBUG
+            printf("MP= ");
+            FF_2048_output(PRIVGOLDEN.mp , HFLEN_2048);
+            printf("\n");
+#endif
         }
 
-        // Read M and process test vector
-        if (!strncmp(line,Mline, strlen(Mline)))
+        // Read MQ and process test vector
+        if (!strncmp(line, MQline, strlen(MQline)))
         {
-            len = strlen(Mline);
+            len = strlen(MQline);
             linePtr = line + len;
-            read_FF_4096(PRIVGOLDEN.m, linePtr, HFLEN_4096);
+            read_FF_2048(PRIVGOLDEN.mq, linePtr, HFLEN_2048);
+#ifdef DEBUG
+            printf("MQ= ");
+            FF_2048_output(PRIVGOLDEN.mq , HFLEN_2048);
+            printf("\n");
+#endif
 
             if (testSeed)
             {
@@ -235,19 +302,19 @@ int main(int argc, char** argv)
             printf("SEED = ");
             OCT_output(&SEEDGOLDEN);
             printf("\nP = ");
-            FF_4096_output(PRIV.p , HFLEN_4096);
+            FF_2048_output(PRIV.p , HFLEN_2048);
             printf("\nQ = ");
-            FF_4096_output(PRIV.q , HFLEN_4096);
-            printf("\nL = ");
-            FF_4096_output(PRIV.l , FFLEN_4096);
-            printf("\nM = ");
-            FF_4096_output(PRIV.m , FFLEN_4096);
+            FF_2048_output(PRIV.q , HFLEN_2048);
             printf("\nN = ");
-            FF_4096_output(PRIV.n , FFLEN_4096);
-            printf("\nG = ");
-            FF_4096_output(PRIV.g , FFLEN_4096);
-            printf("\nN2 = ");
-            FF_4096_output(PRIV.n2, FFLEN_4096);
+            FF_2048_output(PRIV.n , FFLEN_2048);
+            printf("\nLP = ");
+            FF_2048_output(PRIV.lp , HFLEN_2048);
+            printf("\nLQ = ");
+            FF_2048_output(PRIV.lq , HFLEN_2048);
+            printf("\nMP = ");
+            FF_2048_output(PRIV.mp , HFLEN_2048);
+            printf("\nMQ = ");
+            FF_2048_output(PRIV.mq , HFLEN_2048);
             printf("\nPUB N = ");
             FF_4096_output(PUB.n , FFLEN_4096);
             printf("\nPUB G = ");
@@ -257,22 +324,24 @@ int main(int argc, char** argv)
             printf("\n\n");
 #endif
 
-            compare_FF("PRIV.p",    "PRIVGOLDEN.p",    PRIV.p,    PRIVGOLDEN.p,    HFLEN_4096);
-            compare_FF("PRIV.q",    "PRIVGOLDEN.q",    PRIV.q,    PRIVGOLDEN.q,    HFLEN_4096);
-            compare_FF("PRIV.l",    "PRIVGOLDEN.l",    PRIV.l,    PRIVGOLDEN.l,    FFLEN_4096);
-            compare_FF("PRIV.m",    "PRIVGOLDEN.m",    PRIV.m,    PRIVGOLDEN.m,    FFLEN_4096);
-            compare_FF("PRIV.n",    "PRIVGOLDEN.n",    PRIV.n,    PRIVGOLDEN.n,    FFLEN_4096);
-            compare_FF("PRIV.g",    "PRIVGOLDEN.g",    PRIV.g,    PRIVGOLDEN.g,    FFLEN_4096);
-            compare_FF("PRIV.invn", "PRIVGOLDEN.invn", PRIV.invn, PRIVGOLDEN.invn, FFLEN_4096);
-            compare_FF("PRIV.n2",   "PRIVGOLDEN.n2",   PRIV.n2,   PRIVGOLDEN.n2,   FFLEN_4096);
-
-            compare_FF("PUB.n",  "PUBGOLDEN.n",  PUB.n,  PUBGOLDEN.n,  FFLEN_4096);
-            compare_FF("PUB.g",  "PUBGOLDEN.g",  PUB.g,  PUBGOLDEN.g,  FFLEN_4096);
-            compare_FF("PUB.n2", "PUBGOLDEN.n2", PUB.n2, PUBGOLDEN.n2, FFLEN_4096);
+            ff_2048_compare("PRIV.p",    "PRIVGOLDEN.p",    PRIV.p,    PRIVGOLDEN.p,    HFLEN_2048);
+            ff_2048_compare("PRIV.q",    "PRIVGOLDEN.q",    PRIV.q,    PRIVGOLDEN.q,    HFLEN_2048);
+            ff_2048_compare("PRIV.lp",   "PRIVGOLDEN.lp",   PRIV.lp,   PRIVGOLDEN.lp,   HFLEN_2048);
+            ff_2048_compare("PRIV.mp",   "PRIVGOLDEN.mp",   PRIV.mp,   PRIVGOLDEN.mp,   HFLEN_2048);
+            ff_2048_compare("PRIV.lq",   "PRIVGOLDEN.lq",   PRIV.lq,   PRIVGOLDEN.lq,   HFLEN_2048);
+            ff_2048_compare("PRIV.mq",   "PRIVGOLDEN.mq",   PRIV.mq,   PRIVGOLDEN.mq,   HFLEN_2048);
+            ff_2048_compare("PRIV.invp", "PRIVGOLDEN.invp", PRIV.invp, PRIVGOLDEN.invp, FFLEN_2048);
+            ff_2048_compare("PRIV.p2",   "PRIVGOLDEN.p2",   PRIV.p2,   PRIVGOLDEN.p2,   FFLEN_2048);
+            ff_2048_compare("PRIV.invq", "PRIVGOLDEN.invq", PRIV.invq, PRIVGOLDEN.invq, FFLEN_2048);
+            ff_2048_compare("PRIV.q2",   "PRIVGOLDEN.q2",   PRIV.q2,   PRIVGOLDEN.q2,   FFLEN_2048);
+
+            ff_4096_compare("PUB.n",  "PUBGOLDEN.n",  PUB.n,  PUBGOLDEN.n,  FFLEN_4096);
+            ff_4096_compare("PUB.g",  "PUBGOLDEN.g",  PUB.g,  PUBGOLDEN.g,  FFLEN_4096);
+            ff_4096_compare("PUB.n2", "PUBGOLDEN.n2", PUB.n2, PUBGOLDEN.n2, FFLEN_4096);
 
             // Clean keys for next test vector
-            clean_private(&PRIV);
-            clean_private(&PRIVGOLDEN);
+            PAILLIER_PRIVATE_KEY_KILL(&PRIV);
+            PAILLIER_PRIVATE_KEY_KILL(&PRIVGOLDEN);
 
             clean_public(&PUB);
             clean_public(&PUBGOLDEN);
diff --git a/testVectors/paillier/decrypt.txt b/testVectors/paillier/decrypt.txt
index 8419914..59edce6 100644
--- a/testVectors/paillier/decrypt.txt
+++ b/testVectors/paillier/decrypt.txt
@@ -1,87 +1,99 @@
 TEST = 0,
-N = 59f668761d66864604a05a647ce112452830f0426d02e4141781c7431eb1845c2ed32ea93150fb3b8c17553629edc84fab77080e4200b815f338aaa58fa030a4b562f43d5f24a25d3dcb419ae75e281e37c8a1f0d2f47d733e040fcec7f45e293ef656c91d0045b6b97c64f72977c01ea85214e5847b425ea410a66b59cc2ef6d6fdf6509afe8d48eeb1335f58aaabf42799fe636a2f7653842cea779d0d1dc455c8d99b862ef5e96ae83626baf9d11aeecbf9cca683cb833ceeb09bd7e1bf7e63cf76d1d48d036cbcb05c185f08c72228ecd5ccffd9192443f007a3016249584504f7c0d483fb934365a58fbcf0df13a20d5864 [...]
-L = 59f668761d66864604a05a647ce112452830f0426d02e4141781c7431eb1845c2ed32ea93150fb3b8c17553629edc84fab77080e4200b815f338aaa58fa030a4b562f43d5f24a25d3dcb419ae75e281e37c8a1f0d2f47d733e040fcec7f45e293ef656c91d0045b6b97c64f72977c01ea85214e5847b425ea410a66b59cc2ef5a76c9540faee87fd45bcf109d92822af07d0771d943c69a3bc3232c573ebd9c4a6381c74a46b5d9bbe407db5c50dc37fc39de16501c4eca84f07c04511fe78d1ab5531809cf4f3706136c238df2511fc731f1bbc3be22e3efb3bef6d643a5df7ce17a93406ab8cc226c2459105cee6a3c224bc93 [...]
-M = 1ee3cbc99bde365d01286a216d15d331d82d3562fb8c53c08ed44fe45f8cc9e2d3e410b466de80dd4fb4f69e73e71232ff78e1dc7c68ce01f4d4307e05a0d4268c4fe711ae89a82bd601dbd2921db858f42ac7192ed5c37ccf35f68ab6b2bde63001f99582c34f54dfa687af2a225aa70b3fcb703ffa936ca6e4d9906cbb91f0abcb8799da2474ecdff45a7c8a5f7beee325ace997a692aee41ef423ea655747ed27f90ad330aafcc722eecc07adf5029ccf95df6e93ec773056c0e8fb2aac5d523bb0549e0d847590bb0645d662c07aef2ef3fd054c514b673516ba5aa0d2e96b04dc5bebac7727044675f94d89d990d63e118b [...]
+P = 94f689d07ba20cf7c7ca7ccbed22ae6b40c426db74eaee4ce0ced2b6f52a5e136663f5f1ef379cdbb0c4fdd6e4074d6cff21082d4803d43d89e42fd8dfa82b135aa31a8844ffea25f255f956cbc1b9d8631d01baf1010d028a190b94ce40f3b72897e8196df19edf1ff62e6556f2701d52cef1442e3301db7608ecbdcca703db,
+Q = 9a9ad73f246df853e129c589925fdad9df05606a61081e62e72be4fb33f6e5ec492cc734f28bfb71fbe2ba9a11e4c02e2c0d103a5cbb0a9d6402c07de63b1b995dd72ac8f29825d66923a088b421fb4d52b0b855d2f5dde2be9b0ca0cee6f7a94e5566735fe6cff1fcad3199602f88528d19aa8d0263adff8f5053c38254a2a3,
+LP = 94f689d07ba20cf7c7ca7ccbed22ae6b40c426db74eaee4ce0ced2b6f52a5e136663f5f1ef379cdbb0c4fdd6e4074d6cff21082d4803d43d89e42fd8dfa82b135aa31a8844ffea25f255f956cbc1b9d8631d01baf1010d028a190b94ce40f3b72897e8196df19edf1ff62e6556f2701d52cef1442e3301db7608ecbdcca703da,
+LQ = 9a9ad73f246df853e129c589925fdad9df05606a61081e62e72be4fb33f6e5ec492cc734f28bfb71fbe2ba9a11e4c02e2c0d103a5cbb0a9d6402c07de63b1b995dd72ac8f29825d66923a088b421fb4d52b0b855d2f5dde2be9b0ca0cee6f7a94e5566735fe6cff1fcad3199602f88528d19aa8d0263adff8f5053c38254a2a2,
+MP = 2cafae64af81e43b4b99dce785807768732c57d4d71392017e3572a05c34ef1ae5c50f008537a2ba3e9e87db5c812944c60bce440faa05bdd4ed90083ea6741f54f32e9b2534dc0f48dc8bd00e9aad6dbd919b7913af95b5f0d1b47bc9f600c20b7afb86bb501f1032551e08696e8eebe8cf20e0c847a34a13321aa24903fc6a,
+MQ = 6c39e504fa0718822922aa7d2c115c458afdbdfa8343077cbb2ce9b0ef62d55a791c47d7888d797d9b485c926295bb8d7c735229e45bba4c5e90ddb6d9f7f3d8bf71fb90191b58088b672a0f29b8a310dcc94e4d79fa316f6014fc4fa5f43cf63966cdf2e3006b114781a4935a9e1fd485fb8460fb2d3f93c52e74bb0367e876,
 CIPHERTEXT = 17cc5e81709f423f7d8495bd1067e4ca508775400e082f151381f4fe382f7d70b8fe1a33d1b59252c7813bf04c0cf3cd3e8ae66739319bdb152eac1b85fb8ce7e764c7376cebec6d973e0585818c319e0ad23abe9ca45c003bd1affda99ddd09b5af1469d4a526fa00eb9165e16fc9b6dd34f3f7997f39c000ff47424962513e72877cb12260c10eb540dced8b2e604dcadabcea1a150f4813036aab0dabb1658d11bd43faa125c5f1a7635b83c7c5ff110734344292cfba049e15fc4c54128fbeb5b7b0392d5456d578af190da2c5231541992c7b98c33871796b6e7f9fdb6138d352e6338fdf34d661145f8e0a89b [...]
 PLAINTEXT = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
-RESULT = 0,
 
 TEST = 1,
-N = ad82b288ac6873a6cce7809e28d06c0a7b8aad19437667cf3a55a5b20154bf1e9698830798bf693199a7de6bdeaffcb0c204c8ffd4d929fe5ff259fe86c92a7e0287ea3e5c1f8f4b809b67c19877b5f3e3d7eb58040349d9759e4142ef7de5fbe5fa19a581ea93cd8815a5d2f29e6c6d57cb99ebf8ab1e166ee3ad0b2e00f17b50b77a8a94aa342e2785426d98dfdb0828f9d291bc2ed429f4cb96903a014959f78cd62e4d0af693e1d0b5f9f9c3dbeeb956f729d41266d42dbe60c219c6cbec8ab6775b46bf6bbb0de0e91d8921be15a68bc9829d83470421d20dab458f94806dd7e7c532bcb09fd70208865e8b2db2bd543512 [...]
-L = ad82b288ac6873a6cce7809e28d06c0a7b8aad19437667cf3a55a5b20154bf1e9698830798bf693199a7de6bdeaffcb0c204c8ffd4d929fe5ff259fe86c92a7e0287ea3e5c1f8f4b809b67c19877b5f3e3d7eb58040349d9759e4142ef7de5fbe5fa19a581ea93cd8815a5d2f29e6c6d57cb99ebf8ab1e166ee3ad0b2e00f179ab31c30c1048834b8f5b983b0228d65c634160b27bfcd99ce824a6a3e7310c503a591a8b1dd6d7df503bad354bb035772b4094861c000aa742ede2f48a9d4d989a3661c091c58c335830ae98a37c272a21d15ade63b37ab26c5237c6b8c491f7ed672aa4a93504cfd1a755e0bab39653997493e4 [...]
-M = 73c5b0540bf84775acf6c47228a96e7de3a4c0f77f0a1863994eebbbf8f3499c344f17b7fe8756a76efbaf87e5690ef0c322a16c3dc2f49a13b689c3df3ca52de526d120450cb04c244d5f81dd4afa8da0f8c6c1da7824962ac806ba3448cb0ae41c1ebb1fe529e7aeaba4fa3d36cf5e2ada73c1a90df854fe935604399330d164711f6053c6c1102ab272b3878e18b4953c0f7e0a3c23eb05594fa4bfa0307254af4228539bd0a764e00b9af0a6dee5b2e58512b54ef6deeba4eac84dc13b551efd412c16b34744f55a58bd0146ebe12fa07926654b6fb9f2860612a6a662d75b1fd0c32b0ea2fee174df30c811666a97fbce5c [...]
-CIPHERTEXT = 528cb355331283ca612705133a163c21296353f9c9875b70fdc43d8d1f5b8608557ea835a11c7bb88897a03e479ba0d24f7598ae1701cf8806400495dee2301e75a047c622004056d051d633ad809cd4de62ba190e6c93998938f7851906ef91a2903e82f205f87b25bc258138793c63181044da908dc5531ad0a7f898350d40c212226b521709cdf556424e1c11fca84de2cd72d869745e442b5e2bdb554cc9b15e7f92a9fc9ff4e8695ef5684f8c2941b6f3265285bd443bfd2d6f02f4e809999c5753a0d2f2b28172d92ddfacdd7313148b633065c3c601ae3209a74a66a8cc623aab0363aeb460ad104302bfa9b [...]
-PLAINTEXT = 7394dc88262dd5b0849be3db7f7f3b5be8e30aedd7a361c805a57a83feb6535a358a7cdb2b8c8696c83ba44e6ba3910b4dfd810ac343996c20dbb86ff042b540240bb47ce9d9c1b1662e95b2399d33c76685f0451b8c7f3e0ff901b235dbe0450b3c27c02d837fb21087235d4173c18f48e3fe0574a9bd4fa4225158bf736902e16be5811f42e07177cd4bcd7b140e5148aff613741af7cf68ad1c86c215e18906f92a5a4e73fc766e26b1d30a166d832d2c9555fb002ee1b5eacfd087ef345e9101d8c2ee5dd98cff41941bf60eebec239b86adc8c890f539f109b69f8f339882dbf59fd253fc02834b2fc89d4efe9f [...]
-RESULT = 0,
+P = dbc059a235e35d0710502a363d7b10c2ec04745c8851157ea0694e740b31efa100545f10a2b525775e9b67b40d344fecf12744f9b76ba604eadc76a5cf1b6fd13613119399d20bc2025b4259d066315f9f6a0e550a7eed7e60d6a3236b7d4f9cdd63464f9861f0bf13ce9ac0926f32c4637b18d59bee02299842d9a4267913a3,
+Q = eba3e193a4175d37f9589615e5330d68f89106a953f229d84f4e02db6324459d7591e744e2f1a1060cb9feca709e3470c5d29aac0d434251b477bfbe9e1378d94eef37d173d82d918c9e0730f87e94e36570f9db9992a0052721f99706a658b1f4318f20931947f9bab12111bb05723c25e98d454b35c07aac219997e6334c21,
+LP = dbc059a235e35d0710502a363d7b10c2ec04745c8851157ea0694e740b31efa100545f10a2b525775e9b67b40d344fecf12744f9b76ba604eadc76a5cf1b6fd13613119399d20bc2025b4259d066315f9f6a0e550a7eed7e60d6a3236b7d4f9cdd63464f9861f0bf13ce9ac0926f32c4637b18d59bee02299842d9a4267913a2,
+LQ = eba3e193a4175d37f9589615e5330d68f89106a953f229d84f4e02db6324459d7591e744e2f1a1060cb9feca709e3470c5d29aac0d434251b477bfbe9e1378d94eef37d173d82d918c9e0730f87e94e36570f9db9992a0052721f99706a658b1f4318f20931947f9bab12111bb05723c25e98d454b35c07aac219997e6334c20,
+MP = 8d79eb0cb63071ed8fefb2f5bde666ae7c37c65c74f97700562d5d5c58a89410624176ad07bf5846e175fdcffe3e6119d8ab6df162e9408040192030063aebd4c0dff702f79559e9a7d1c0b061390e9107db421fbae9bfead0024c4cb396748263d20ecd8d3714b8f595f3055b177c9c88e201ecb8937a79be34427e3b73284c,
+MQ = 53ef47de9708bfb718a50d6e2aadeffeef1cb70c0c0b3086ad96d52b11fb75f69f09175344549d122fe6f6ecac5bf32209288416927a0d0401e612004f21c2900b84f3fba9a18b4a6cd5aab831e734ee8962396fb092b7060d5fdd7e44ec96951e520ad56b0400c92223f773369fb293a012be3981b1549dc9768b87e7f8a052,
+CIPHERTEXT = 0dace56469a19e75142011bc634a4e4e3185e9931ee3342181e7ed6eef3dd919e313755255012deddd4965c1ae54626c26f4a9330a7818bb187e077782cfddce9aeb781c812ded1d86f9185822d663e5fc8edd2c67b3a3ce3f8299904c94728965505cc35b84c61ea31599d84505fe38ab006f59c4a7ac6affd8efdc8513b8236d17e4e8e46da60c4d02e1d8ffcd4bb7205e54a6bb54c0e824a2aa423d2e69552acd951a3bafb1cc9b7b7107214af460184968d5519fd6fac97e382590955d6a23eeff302011bcaed4f8eceb4104914c03d64b325f5c7361d03f0262285eedd500a8c355660e9d71d167c161ba84fb9 [...]
+PLAINTEXT = 8542a3b5f98c6dc07f9801b47d044d8c3de482cc1087491cd28c36f07b7e0edd110b8ebfdae2a0a488b315e8d4cebd8d6aa7fb09886bea8a8cdbcd6884b2b305f586012d888b9f91dcd7cf7cfa0dc95805c161a953a80cfe6e27e45bebe7f5139c05a95a53dc7a4b2ffcbd53ad7fce80a66e8686743c91f05bad4b234b877c12c330862ca1d2fc7ea3022c72ec055fd23b3eefac33f93e612be0bdd7d9c37144a146ef9d1532d2ab71b74670cafc8f1fc626f0cda99dee9198a7ed5cd546c44401db0ad631d64a06d11a1a60c46330c7f02294edf90b23fb1daa9ff7857a4971041754a30746e94bf78d1d3e481514c2 [...]
 
 TEST = 2,
-N = cbd722c4b8c70faa0465ab7637f0fb0dc8953b0eccaa5118a260d699c4f019168dfb2bb25699b550cfa436af8cc06943b9d105889e7102ca891652156bb8b493bc59b41f05f92520306336fe847c16bd65af8cb48a7de2dcbfa7da27cdd5daf218451aea796fb30dfebaebadb13b961cc17e7c0f34a2d8334c51a6a8ce6876e96310f5de9458407a7188cf82345560c450058d27eb6e0257ca9deac4eb375d594412fbf98db5d1f7331cb3cc34dbe73515c78968d25a91d2c39cff7c67a6e4024f5b9266e93da141b4c9de058dcf719a5ae38451fdd71a84d931251e3efb57900dad828257cd53448d7e6fb532975825baac5fa1 [...]
-L = cbd722c4b8c70faa0465ab7637f0fb0dc8953b0eccaa5118a260d699c4f019168dfb2bb25699b550cfa436af8cc06943b9d105889e7102ca891652156bb8b493bc59b41f05f92520306336fe847c16bd65af8cb48a7de2dcbfa7da27cdd5daf218451aea796fb30dfebaebadb13b961cc17e7c0f34a2d8334c51a6a8ce6876e799d6d9a05764853544aa1efc611e79025d6855ecc5a506a52e70fecb0cf5ca3d29653b2671e799f723cc0b0f329ccecefa37dbb152ce360fd751931e803177d7d94fddc43e0ce0b5e6570e25119ca0942a98e5bf2cb804943b29ec60aab931f957b0e26b87b772e333d946a4afe8cf864cde4dcd [...]
-M = a1e9930a34ff590cca64521e50165bcbd172e4761a01b5a16c317dc75021f56d41635ed6a80077accebb2b2d67fb9e4a7d81a5d45705af15d5f612c1352aa20e0289638df97632850145708316a8250bf299bbe10b7f0face46ed065156d28f66ab4bee133e79159a0fa31bd0e19e544783436f25da96eddf46e9fd39d99594dbebeda6daef46ffedaafad78373036a727a9480a304f1b1933beb6ee012f45c7a14433a49eac177873eaca1e9c64e5ae3206d471566db4e1bf760e60e483b4380bb9b35590af9f7f7f3b79848aefdcdde034093e0b886de36ae4e614eafdcbd378e07b850572a5c89a3b459dd9b882c121b94b1d [...]
-CIPHERTEXT = 05ff3227259361aa830142be78f0f8bd578c75ec5e712d821b98b1c87b6e7ba8b66169db84aae97b4b5f5068c862d5c1d50cd8fbf00e7b2ce454a06c6cab62655a0db274ca67edad03028526c214544a6e2ad3ff462e037ab043650e2c8b27e950112fb5d9da9e00872732927e0a70ae5510626eebfef7f7f516b0a2680d964a0c69574571a00e76bf5d45424d157b838b3f1ea3ae40f2d7c0ffb1fafcae98420cca0383060ef4817a7a610beb21dc88fccf9bf310cb2bd36f4a75ee744a32830872811016f6c3a4899e643ad94997264b867f5ac391a2304a50dc1caca2f91e073cf32b7d8ec146add706ee97d7dbc [...]
-PLAINTEXT = 33a3bdac04f85bffd924d2456e2f41aec67cadf0e25ada2974ec442da15d1a1b5293d0d48fda59fa68dfbec3f874f8ab9b0e50be6843b1e38d2896533d19a3796c77caafb0fdf29abebdd4d29aaf66d29a2f0f2b8609264603e6574430c33e5a48507d40d5c3aaa1cf569e90b0b334e10145766ae456420f86d020ddbbfafa282d447e2ef06697d434c025b6c1f83242ca3a26de7770fe7b6dc0b9d2146dfaa4c6033aeb9d50dec180692c441738bd010f2d91609f5c0c5572b0026b87a9de0b2336b9948ad06c7f728a8ecd4c4b4e26df9e35ea170ccf0c45b7cb85db1b02397c58a503890f1032937e2331d855d069 [...]
-RESULT = 0,
+P = cd74cb88f41ad918a1e930394ce831769b367ef686dd4dd671edc6f7a30007025d09f744cf65a7eea8c4dd134b4b6c21e32eb26232dd76459c2e39833ca8f528bc151b99691a009236470b1606474bb762f789dda92f9df6fe75a7e8cc3629ce81f780342541e27791364ed1da855c8a1f441c93fd8f1c9844ec220af388dc5b,
+Q = ecc907fc0b663b751e5d7fb68b6f96d28c0f72c16b79afba9f07f783da50b7a5c7ff8712329cef71bcc3aec355031472be6618d80636a6dee32d9df32f256db6dc0c1f6b2ff0508d32d6d7da7ee376916db0faaf41d62847188a625b10fa82222dc7bc5573f43e7a0e347ed7ec427e6aa9706591676a673e3b118efc0fe661a1,
+LP = cd74cb88f41ad918a1e930394ce831769b367ef686dd4dd671edc6f7a30007025d09f744cf65a7eea8c4dd134b4b6c21e32eb26232dd76459c2e39833ca8f528bc151b99691a009236470b1606474bb762f789dda92f9df6fe75a7e8cc3629ce81f780342541e27791364ed1da855c8a1f441c93fd8f1c9844ec220af388dc5a,
+LQ = ecc907fc0b663b751e5d7fb68b6f96d28c0f72c16b79afba9f07f783da50b7a5c7ff8712329cef71bcc3aec355031472be6618d80636a6dee32d9df32f256db6dc0c1f6b2ff0508d32d6d7da7ee376916db0faaf41d62847188a625b10fa82222dc7bc5573f43e7a0e347ed7ec427e6aa9706591676a673e3b118efc0fe661a0,
+MP = 6a2d2cd9d6d3819ed76d2748ee4bf257a3a3c31adbfa51d131f917e9557df034359fbcfc4705d0895b004b8938cad7d58d45e889acf8d1ff1e62bd2bf491d5d14bda5949c501d4036b23d24ff26510a15c4ab9cded33715bb32a31bc8b082ee211470ced26dc761a3a19e4d4f118beed2d23a771c84fee78f8f3ab7c7d6a5eec,
+MQ = 726b209959280633754c1a06de17e41aacae36198c47c82d448f9b3e23d7a9a942500b1914ea23eb2c549cee765d705838ded0c921fbccb7dca2c9664a30370344977420a7a44e3c0e95e5ca60e4e5e03a978b688edd5ab077fb6c34412d445ad1a09e0769af053ea9270a7e5e77e57814b221b50d936bd828e44d093a74d6ca,
+CIPHERTEXT = 06d7df17a4737df1ddd52884a0d5c3bf9b8011cafcf54536782a0a639cf4b5cdd7d9d5a5ee46c42928c132af3a4198cf91ca6cbeb66d04ca765717194a9054ff85d8f575ceea2e4753fc9228dcb8a571d7e404b1e50c163094c9621177affdf9e1a1698876ffd45966008fdcbfb34be847886e59a22007625c794dd6a629b9baa82f6d1cb8129780e021693d47a336c0e0a43b482728ce59afc690ca03dd96c30f5ae12cb39995b27a118ef87c6ced23fa8c1508ee10488f590f76b4eac0e60fbf9db2eeb44278b72894f9693904bad4f7a7f8aa53a6119a9eb471cd0dcb6a80bad4ff29e8ba51a9427fc10ae353932 [...]
+PLAINTEXT = 8768977d462182a677539a470c616fa390bc8c813e938a2bb28fcea80bacdf1a5b23bf5f5c1206c4b9cdd775b89557683fe907b3d82fc126ce312b225b5c705f20c937bd5cd23f49f866b283e3f102e6641cb4ed5006b15c61b0c853f9cb56468b82c13ca47e41efcf873eb9be18d9b3ad5d047cb6ff7007e466ab940aced670c3a4948999c7108fcd661f1dade08a7525f6932e0562083451576826895fc6a6d155daa56f6f18ae2de21f6ee016bf707329210b0cbcbf88c349913566346ada1d174f7201b39648cfcc5fab8f4b6b8318728f373478f73afff249fa0d1ec1819a9cb17311ddbb632f5bf1a644533786 [...]
 
 TEST = 3,
-N = b499ba5ddffee8b37fafb01cf5f667f61804a15ff6a8e2a22948f2369daeaebb85478c50f46e6e1a70f0f3bbe5845a10f48e41d187caa770c7b13af91a3ee2e49adc9c1879d712d7c5756f8ec8d48848501944553161747cb725282cc07b6d85bd1f9fd7eae8cef202df3baafb0abcf70ee259896032b24dd8aad5975b9ec6430da67566626d51d9d108b147561fea9c2312fa95566006c49900e74aabcf02245dd37e2f2c324746e9c05168a2dcb97a471e8c6d7c85326131b40910d9f35bd7d6e3eacc5d71c1e58b1fae5fcc0b69aed1471802dd3276d270655827e0946b2d60293c22d507ffbcae74df6487223b5617ab96d7 [...]
-L = b499ba5ddffee8b37fafb01cf5f667f61804a15ff6a8e2a22948f2369daeaebb85478c50f46e6e1a70f0f3bbe5845a10f48e41d187caa770c7b13af91a3ee2e49adc9c1879d712d7c5756f8ec8d48848501944553161747cb725282cc07b6d85bd1f9fd7eae8cef202df3baafb0abcf70ee259896032b24dd8aad5975b9ec641594da028bf7c0081549c6b4d15ba4fc7e3f082c9597130a32b3396cbb768f81941a922e97fda9854edcbbd6d259bf26a3c0206142112e9d05aa501f74a350363c9ca4eb90c6de3f1f82d761698719d0538af94d941a35811e8b891d902ce906a3687e58dec7fa88d9f7a12138db06fb6f9631dc9 [...]
-M = 52e77dac128c0ae48cd88d2a00d788caf0a7fff5373724978f8d318494bd30e21c7360c0cf865a5774db109e8803a6c358dda4ec6271c8c789701acdeba1c7cf4450ddf06c91ca16dc7837ad603280dddcb45272cfa4dff58284028f323d0534ab49d6b60e837ad525be0cf812e8b05f57bfe1743227a2b210abf5debe0dc729f8c3ca2a185d6989b1b72ea5469d3ecdd90745797bfd62855315215bd029e3f06b5d1fef335450f90a5d04b3bf732307b5f88a52099546bf9d3b72c5ed3371b1420147d344ab66b552b085e5dbfa0aca5769e006abff625dfc5443185332b95e7b5e76da19cbf0f48f4335b6ca27d681eb2a228c [...]
-CIPHERTEXT = 3fa8b91281e17cea9cf2efaf46b3d88a14e2e1fcb3447d476e39987f066365762db96c366960bd4dd6ed65082a23d66793ba900443b6bafc457d8aa16e7ed995b54d434a31d93be43510db387b212864a08c3ff6715412c13f0595557163a7be07188c8d714bf06ab44157db904e42f2c80e4161e79696e85e43a6f10f34d65b9b385b087555ef773dedc33ce845f63905b03f2aa054b9a016d123b29eea24e7a29b72504c13468121da8ea8695253995e9c4b064564903c7175982bafa8a75a4011bc8873c69d24be00a9078901e9c352e9beda649dcafedee32b760e7fbbf3d27fa41e955845ce227e705b251bbab [...]
-PLAINTEXT = b33ee98fa582fb3d5ef2024cd2a44164a4ed935f1f5473a89d29c52145623c650aa6aa83987a05b9749cab75047c952f56fbd9ebb92acfd928155a8ac5b69f1f4d1107dd835446f221566d7bbe511cc4205b4a5342344bc8dfad7c0548842f3541dd8e5118d23f4509dd929685b2f8da3795db4b94d377b4789fd2621e0b87d22d63a56ccea434b5c8469a4d6e9a6ae953f3c2c2e558e5ce0dbe5012777eb4ce7259d720c5df90e980a87e6840df1f6052289e7cfde255ad91fdfffec89c912bf9724b5ecc80819a6c936eab2a5b22f020f9bd196d359fc42619800593b96ece3fedd9a05e44c4d6f813605e1dfbce8e [...]
-RESULT = 0,
+P = d9fe70a20c3f643d74dcef958af98f9640f8aa1f50c8486710bed67d112b4fb4e2615904104090b1f4b73073af55a28e881ed50edfca2b5b4c337eb5457154b9b32cab7847e2dab090767f16d52174c1e6d1b6114e194a7381c212d484127caf3e2990695d182d2ec1f4f9a8308737b7ba39ca799bec2959fabbbcab18e50c33,
+Q = f4563a9aac6c650de4043be5d9c70d720561364808776029c527bf7ec150fb0b3dd21d1d41b3eebddd2354a8e8b84c3de2a6af0581d4dbd0ec31727d2f1bd1c8dbd713ef622b66f45649078a9a00abf26543ff6c447f200379edc603b18af8b0d615643acdf15b673f620091dbc66477f2660b2b8a04f60fced9bc179ea58c2b,
+LP = d9fe70a20c3f643d74dcef958af98f9640f8aa1f50c8486710bed67d112b4fb4e2615904104090b1f4b73073af55a28e881ed50edfca2b5b4c337eb5457154b9b32cab7847e2dab090767f16d52174c1e6d1b6114e194a7381c212d484127caf3e2990695d182d2ec1f4f9a8308737b7ba39ca799bec2959fabbbcab18e50c32,
+LQ = f4563a9aac6c650de4043be5d9c70d720561364808776029c527bf7ec150fb0b3dd21d1d41b3eebddd2354a8e8b84c3de2a6af0581d4dbd0ec31727d2f1bd1c8dbd713ef622b66f45649078a9a00abf26543ff6c447f200379edc603b18af8b0d615643acdf15b673f620091dbc66477f2660b2b8a04f60fced9bc179ea58c2a,
+MP = 6ae569337cd913039b166611d49367834811e4e626cbb49304f781d0c3598f0b720c96447b67f49390732f42d5fe0cfdc89d3fdcff3063c9208d77e3b915eac6198003130ddb5abf2c8698361a79f947a752131236ed547a008cfbfb8f26fc4cecb13c9285f42ff1190da28ac833fd8f9ba42023a43de427dc0abfd3d9c714f5,
+MQ = 7c85e9e770ecb442e5b1545a3654a53731b9cc5acbac43175c946c480b5c36ed057d752665dca6c8d60d1fa4122030ba64a7100e939f55a6984b265826eb97e46d05f1c95972213c368c07da34763fd0a18f228ca821967210d4c8e23798808f44dfe38a686adc9f0b6a1cf829b6d53b21135c684087a563eeed17270e23b9f3,
+CIPHERTEXT = 61e92676264ffd39cb24d7907cf05d615539e9df23c51939247ade5fdb1f934d6e8c3ee027bb008fe8aa4417fae7d2e1ed5c3f0c173590035ce2b148f62495524302703a2d6f99befd5443918a78f0e8a35758c75fc0c18a00c3b33965b5fd854c63edd1a01122110fec38ad42a704acacbba0e8b76ab46700458d39c10c8a48ca0e3858231270b6bd7c2f1d57502cb271e27fb964e1fc92a1c94bf054401a943e21256105f3ce236af3f49704a052ffb48b35377affe4cda1dfaf211fc41fc91565ee80d7313995905ac0384e2d5dd85390ffe3059575f623bd16ca87a66977c81ce715036e6d9c40a760151a58100 [...]
+PLAINTEXT = 0dfba78f9acaf13ebcdd3bcc1c1be67dc7d9124b1311628b16a04cdf418b16f721515193e80b43a8d73664754417e64b6f1fc95abd287349744887e32218e846d7fdb529f7a5a832153b290aaf558559cd793839b2c4592b97757870ec8a653f2702e9ef9c48624a08c1bb8988f58b4cb06eb80dcd79078060bd402f77cd8b4306183c27811e698bf1f289a0930b78031bb41f5414d4b75761b301154858a65222660c45b86358f11977ed995e424d9a96faf9e174b8eb9ab9d09c3d187e16f16e8b9498692b72a6db9b1c66ea3b1aed5d9b6456ef0940ec053eef88637bdb7c60e7215acc49f87e8445927d56205ff0 [...]
 
 TEST = 4,
-N = cabc71ce6c1f9b1b6fe2d3f55aa50dbf335e1eca12fc599bc26f267e7e315378e67e4f122edf23db42c4ca1fd0442ef22c3c60b12bb1d9d6c676095c037eef3e0a19f23a79f29874f951bb9587e810d041f1784f42db8a21518f7d1a5576bc36db980dbd8383bb84166fa22bfd76a6ed3e59d0827429501e4cb75e5d42ebb3c122200e03e13809127a1336ca29c3d770d5175a72dff9a243c946502c925b34232274d709c66e69d228ca855b222991c257fc83964f84a9bb5ad1934dcbe9325c16205599c7c2132855323c130f340748282ff10e1d851b27536ef0e3cde4b5fef3ba155b5453789fc4207e4fcd11956a67c1683b [...]
-L = cabc71ce6c1f9b1b6fe2d3f55aa50dbf335e1eca12fc599bc26f267e7e315378e67e4f122edf23db42c4ca1fd0442ef22c3c60b12bb1d9d6c676095c037eef3e0a19f23a79f29874f951bb9587e810d041f1784f42db8a21518f7d1a5576bc36db980dbd8383bb84166fa22bfd76a6ed3e59d0827429501e4cb75e5d42ebb3bf58f193d2a19020d91fc48688a0ecdd62f316cd75769dc38f1968770334fb87ca6a8ce1bfbc77ebb1e339f8b6a13a87e430e3d5a4c6eb0c14dbec4dec3c6062a351aebd0e7300673a3e42392640dbcfecddfecb8d677d42846d1111b11b5d168a0b0172ad93730fe08b37a97d74df09a8ee3501ac [...]
-M = 91d171b9b7aa11441ff56acf23daafaf9c3b9011e429b2af5b259f1afb49221295020f66ee4180c534553b6a491314e4b64c17e99dec3766181d3bac491a9c7940b03f9df0cf5ded523e0f825341d84b8e00e4669590c9a8ab8cc9381fb8af014160af3a656e72da4ffe7f623bec00bd6ad965e68b08a5467685f6d2ece0cd548171a6cde9242c7fe0664b97a76a6458c77ded43855b6b4815e9214fae5c1df752694bf39bcefe171b1196f415efd474b773d0b38f945031ba71b07ff75c2b049f42b31501f64c59d8116836c4ecf9972a624849f7fce31efd55690f161b9e7ce152c1d9cd0d7a36d2dc0f0857db7fa36cd02037 [...]
-CIPHERTEXT = 5c5e0c00dd49687f8605b4effa961b7a4e30400b492c94ff7dabc94084e7503990aa081c0560f32177ffb64681343595ecc6a9ec3e980f2284174e501fa21e80e2a5a9efa08dcc576a33c14430eeaef1665a4542b2bd1210537ea91e8e2ee9bdfb8f837ff17884c314e211bdd1482de0689ad7d54840d4b1dc8b5803e8739be12abf8149dd884388ea3d643f7f4155cda92d0c65c2269e4f714a233d56948a8e9088dd155da4835d2aaa4815dec2d8147f9fd8ab6ac05b5a6ca3341b88917f058c43af03db56041bad7562d5228dafd3b9e2c89f151a3a6e632f505bacdd3c11d0046b6be4ae5ef55ea7fdbd64fb7b0 [...]
-PLAINTEXT = 37ac7372fee69dd1ac6159ecad9207cca22dffd7298fad0d21d091bc53c46598b1423d96760b4ab5219a5fdde1c2cc7ca00d58dbe9c690d62b4a002df3e4256dfa2b60a5e5f50a66a60a0f5a3170ce1fc60ff017451ab8109cb065a4bd453f3e8e8d835562b020ee4760db8d7b8fd9f85b70e12d9fd19c274aedeb43e603db1000601d45ae0e661533cdf6900949470b025426ed77da9993b1687f97d7e97e24237aa180c5b0035de109b2df925163b29355a0304a1d9ede81a110b71420bba2ef33e6c1ade3699c3d1995231ac3a778672a60328c71bb48b5aef868c524824fdc8d88b1bdd12b793caf81cd5368cfd6 [...]
-RESULT = 0,
+P = c051bd966bea3ef4336c62a4c55d773d5f382be64b0fbbc444fee805866e999a5f0753b89f1170debda10766c58d8da7da834f73134d046a6a64964dd065c562b6f13edd02bbdba9eebc4ceb3d30230b3f9aec0af6a82c04ede2e90b62d373226436b1dd624cfd29896ad0431304a660b33623383d755ecf38811d7fb61fd14b,
+Q = dce2fcbbdb85cf60990556a10655f720ef6f4cc724d73ac1b79b51202427c7530e62712f533331744bf77a9728f299e5449a61aba48bab42b0620079c8e878244dc0c0d38beef9e10184a252a88159cb0bfb6d5d960cd778afb8b87974caae55058be70167c0e4fdaa40d3afc6fd1a57b5bc1cab292134d150262079c14dafcf,
+LP = c051bd966bea3ef4336c62a4c55d773d5f382be64b0fbbc444fee805866e999a5f0753b89f1170debda10766c58d8da7da834f73134d046a6a64964dd065c562b6f13edd02bbdba9eebc4ceb3d30230b3f9aec0af6a82c04ede2e90b62d373226436b1dd624cfd29896ad0431304a660b33623383d755ecf38811d7fb61fd14a,
+LQ = dce2fcbbdb85cf60990556a10655f720ef6f4cc724d73ac1b79b51202427c7530e62712f533331744bf77a9728f299e5449a61aba48bab42b0620079c8e878244dc0c0d38beef9e10184a252a88159cb0bfb6d5d960cd778afb8b87974caae55058be70167c0e4fdaa40d3afc6fd1a57b5bc1cab292134d150262079c14dafce,
+MP = 9ea0890cd311924e85c0ec5d8976c5475f6c893f02b424af26c700d485e175715a4fafedce7400026b35bfec17540a83754b0df19eef42c578dfa73b668a58e27130be318c39a08feed84052a41cfd0e88ca56d57964618c744ecb39216881961c7945ecbd77d632c3e57d6cb16f57697499d81fb0df469f35e3c3a76e5bc5d8,
+MQ = 26b267a8b8277f968d483b8d6e1bf48a9b682ab815d6b7fb17616bcb52a40432c82087203fd418550f574cdd913dd5298253d9fdbc79701080bad94c058dbad7044973b0d3df9965f1b8a669087590a9952e7ac7ffdfa29f8b1e29970791943b2041cb245f903d559e2a87233adcb86a2e5d0d4ff0096abaef4fb8fa3c227b74,
+CIPHERTEXT = 5112ba81a6bf954f0d7720657ce11c3f8bfda967678eb006984f508de9baae96a5b80c2c85ff3bcb970c749f8be8b9b813402bf70f8b14296f5365beb387e0a14fc21dc51283f26806a67eba96f2e4c21752ec35165b534a396718582fea281fd9b2fbfb0ab4c45267091fcae60221c8985e9c0d4569a040279e4e24d2f0340de11870b7b35106b4fca91aaec50bec0b6853522fabe9cd3df8d42ff67058e918b92d4d940526a3d1e377de46a82dbe914b5bf908e640b7ad39415ced351548c18811a40c978733c964fee565c5745296278f067b2dce547bb063b03621ac219f69cb306fe0ae49b37814d714f255d81 [...]
+PLAINTEXT = 5e7a75bcfb058695f3c48e91e3bb54264127a2c34e5f627f0586d476d3559f5d10211c5ca05bb5895dd351816a15298b1946a72d73054ebcb8a141c6c5ff6a5ab4d5dc79949d402d85614924dcafbd3d26ea0f11ce9e702119e9b86f5b32de14a4ca6c9406332db2fc7b36428e93903c7629f82006a71e4b0aee290174945be136f833481be72536e41fa853677936ffc2e9027ccac8a0b5bbc61d85b126814a2e2ce6697ed1a17b2a97f15bc6894b355b6451da15ddf808a07e3f8614fb080f14e0188cb71dcd5747a1a4561e55aec3f0cc27c9642f092a6e3487b591be2492a3d7292a1994defc03a6fec4d5727e9c [...]
 
 TEST = 5,
-N = b75aab14714ed198e3bf0106dae8fb34a2680e890e49c68e9dc0098602e927744ab9093d3aa113b2f2485411de04b1bc696b7cd76477b882a46228c8fe4eb894de0d5597180329f3691436ac7958ccfc2be3903eb029e4c20bf2b8973546bc867f5ed376e1d679d81fcf1e77f0b816b852f2ad7f86719be555aef891e75d5062423a1ef7789b31e07bd743e0f9412fe25b784aa1b442827c3d41e6a3e9eb16be21dacc801dd340521b906b72591f69056f19d42bac1b577596e644fb62ec37b31ba809e0feecf388e0b70848afe28a0954c4cd3fbf725e8059b47378b729ce9c88b3f4dfa8fe38af55b5ec3338e78a54cc24277f [...]
-L = b75aab14714ed198e3bf0106dae8fb34a2680e890e49c68e9dc0098602e927744ab9093d3aa113b2f2485411de04b1bc696b7cd76477b882a46228c8fe4eb894de0d5597180329f3691436ac7958ccfc2be3903eb029e4c20bf2b8973546bc867f5ed376e1d679d81fcf1e77f0b816b852f2ad7f86719be555aef891e75d50608bf089c2f77e7b8bed8e39ea4cdf5f4357f7bac16b0e6e4c8ea9ddc39632bb408ba3faa3f390f7043b7e49ab7e21c9eda734b8e5669627f3a49a3082e50cee81933d2549fedbdad903b9e436410c276996de8649d8c28ca0c8b8289e8a974be4a7159888c625b5fc672bc06bdf615adde0a7b8ac [...]
-M = 81716ce7eebc716806e91582beb34a8ee871f4f3abf9e3aab0ec50f843a817e3c3bc8a274941617ec40b3c8fcb4a7ccba7aca7f04b4e87539071299feac2a72490feec03dfdb2f98f6d803786d52edeb01aac1843218173c3ccb49453cd2312b0df1edc49346b1fe93ee0bf06ead0f7c3182763fd698187b67e56fd7e2a01a5807ac5e4c73fcac8a3cd0fece24a48bdfd8190a088352da76988ff72fe7d9f9d218e6205400f24bb0e7b0fa302f072e1c921e8aa49dfd762b72b52f57616ddd2e6ea9a7e3b42c6e670d8336e465c2f93ab775298639b827c1146a882e4afa3215a1bf4a1eb5d2564da2ecf48430d4e7e6e9978c22 [...]
-CIPHERTEXT = 1c5e12ac7a93d341f0f419516b00aa2d60d7fc23a0577d31e1a2241b0328e47305fab656e7acc962e9be0101c3422fc89c5f22e22cd7b7c54de0664e61c09818a2b04b0e92e7aab7414c8728b8a5d30ec0e876d8d2befc35595975d17848dfbfe7c16172439cb4ac2ec8f1fa1c459246ff03f883bd6d87f53256f4b20e19bb7e06522cfbcdbe4828cbea86cc1f1476ed527cb8555e4715ca4929ab4b10f7f3b9534f16b8d6cbda551377160d943ab03be2b880443ffff470ac5d24f9e10e1d1ad4d1257f97ba2b94f40751aae73308def09f85506d64de6e79c4c6f1378dde24f3baffda6fa420d9691dc56c740b03e [...]
-PLAINTEXT = 53dba096597c946cefa917e7615f368ff4c46af0b1b8ee7e7706f04bb2f88592dd1d6ee44d3cb51408bdb755c5f684c522b8e19a41dde2449c2ccbd8dc87fdee3c44bb5de6af1983533ee5e4d0fd9e197c133cedd0a43e82ca135c7108ea19554ca0f65608982502c096a365e1c893d235d24dc73a5fb44567b4d7b63ab904326120aabd02286c9edc87c3bcda67ef0cd04aa8b47c53116e2c669cce401e545c1a88b163698578249bc0513849fc3a0c29e0858b50539188daf07a76f0ad64e4475204ec9bad5258d6d78c996a801c8b2543c6f2be6e7ca7c534ed280839af64fd2bad7853405a26d070d03af747bf13 [...]
-RESULT = 0,
+P = c8d5698fd627827166477ae090aa330573e012ec2de8f742d138965bac6d1eee5c40df8e773cac655d64ca26f213be6cee66f551ce050d3a0d2168b1c5e673100a4509a8c126708c64109cdf8f81c9be14059f19be2731857deccf403433cbf4c842d5a3ab41e7d74c69d4b62ca2d6eab84881846b2881a636e352698cad7541,
+Q = f8f03308c4b2b699d595f764b09fc769a7eb53c9a0511fbf7494add40296b41b33ce6ea7ff26ed384fb1d3c975bf06619a38183ecb62eb3a6282878ee5935e8eba3b212f87a4bd7e4c2e317b6cdfdc86e3fa6c50c63c8dee41581d2fff7d217e4ac615b73951920e208500e36b13ba6870abe74906450c5bdaa372a70c84a059,
+LP = c8d5698fd627827166477ae090aa330573e012ec2de8f742d138965bac6d1eee5c40df8e773cac655d64ca26f213be6cee66f551ce050d3a0d2168b1c5e673100a4509a8c126708c64109cdf8f81c9be14059f19be2731857deccf403433cbf4c842d5a3ab41e7d74c69d4b62ca2d6eab84881846b2881a636e352698cad7540,
+LQ = f8f03308c4b2b699d595f764b09fc769a7eb53c9a0511fbf7494add40296b41b33ce6ea7ff26ed384fb1d3c975bf06619a38183ecb62eb3a6282878ee5935e8eba3b212f87a4bd7e4c2e317b6cdfdc86e3fa6c50c63c8dee41581d2fff7d217e4ac615b73951920e208500e36b13ba6870abe74906450c5bdaa372a70c84a058,
+MP = bd207b61d23b0b191cafe31ffb959548263672d73a302a15eaedcffad56871aac0974500bde0da63e4f11646026a25bc7b82234045477970d53f24081ef43b55a9e942f06e9b57f8c0534a634bf201b42be594fa71e91f35d5098b1ce1cc378ea2114e111c2dd6966bd1f1e4b5ad7863aa1dbcd449454ea22b683a7bb8c982d7,
+MQ = 0e82c4ff8325d1fc73418a7de484133e2b7f4a38afdac30c1cab6d856b984b326aa231c8a9f8d44469ef8844053db1c2954eb1deda0f7361bdd9e9f95c8826d4c15188a13fb47c39ed31171b581d30576e7fa79b200e30d627a2a581a2c471ac5e054cbf56fc6ceaa5d473c81abf4cafb693559308cea68070f9d4f94142b399,
+CIPHERTEXT = 055cd5e5dbcf3d5f6ef7966be7ee7488f99bb90771461d8d1b131c0f588aa102e405de0e895cec658dea551564463655a89f0bf5861c73283089ede838d4ab5b567398db047f807d9a45df98910003ff7d217b201c71bc43901e82bd81d18898cb3768d1adfa4118e248a9e763933b8aabe90ef3cfa46db1738d834f3507973bc5a681ba03f08cbcb467691681b883b76608220f4e94cf44477822bcae95414d9889d410417965e7b9ec96765167e64fb6c841e8698b95e3d881592603f47d2a79f9e4a64fe246f5cdb326be9f76f53d619bc8f4f82b58043d477c9d801d3f4de778fa310fbfb0ee67616d3a6bd1fc6 [...]
+PLAINTEXT = 5eba530eb480d08fb22bac9933e4f91e716d0d6ac5eb1c1d1be0d08ca18ab5c94d7225922b03fb7fc3dea99402d534cce90579181e7f7eae49f0eb8e27593765528290edcd74c9e73dd53be3df55a699f0186e8317d870d35541993b51e780b94c82b08683aa327d158d1d18e5bb27c640a4d519d338412964c191d088839df9b525bb4cb49319d650e83222a42de6a7aad36701ca5fc403df482558123bbc13e8ccee7cd3811903531b02b37348f25aaa37a293956d30fb43881f10078ee5b37c895c962ba7caad47a63582bd9d5613d739b03bb5a9ce137496e0329d52d6dfd13ba7539baf75a53cb338a4792d35ca [...]
 
 TEST = 6,
-N = e505e4be39202f044fcd28959a1bb2a10244e984e7ceaa98c18f07d121f86029fc01c8b0de190eef3764a3c517b7f50e3cf2f4c7fdf5da37a676d2a745ab0233c008724269a428e72157e4c43a1a1fa014964351675d81fcd80fa564bccf7d91437371d795ca1a016ac62bceabff6bf6535f877aae3bed99ae39bd420d67ab052aa004af10088d4d8f68ffd88884565e8d3f8db39cbe63f5fa4267d9013f606303934b51ff38d57f6ddeeab7da0407a1a475acc13ad59a9c719fa02780262e7b9581d925539333a247c96eadb8105ac0d1e1efd39c48b0763ce64a8eb12830d63191ee75a8930dc1db7423b1e99b74ebafe12c51 [...]
-L = e505e4be39202f044fcd28959a1bb2a10244e984e7ceaa98c18f07d121f86029fc01c8b0de190eef3764a3c517b7f50e3cf2f4c7fdf5da37a676d2a745ab0233c008724269a428e72157e4c43a1a1fa014964351675d81fcd80fa564bccf7d91437371d795ca1a016ac62bceabff6bf6535f877aae3bed99ae39bd420d67ab0346541491a9ee6af4830519f9efc439501b01de41c37a97cbff337b41cf134791c233c67e6012c7490885d5abd6109742224fe1aa36da83943861f3b89fc6330a98b0e3f4e2e4953e59d4a4d79c11da2016216c5351a9520ef06cd29690ea838ec85e8fd4c90dc15fa20fb36b9a017f0c4c1412c3 [...]
-M = 1fc92cc342c9a1e1eb2a81f5a4d60009358d72db0f422ff0931498ca6c85df0d6d8316551d849fdd62ab4c163fcd7b079018362903b4b97e2f847196bc5b89ddf6e0e3670106e03cdb4b12507b5ee49bfa4e12c9fcfc5f19e15daaeac0ddc94f52065540e959c806226db60c24ba5973898ad1e3d969a6106dcf8acba318b009917661ad9df8dd524a16e9ece988c0507d6d47f748dcc2e59d1bbe30efcc8f839e4cc7460f4d4b74616788a0db94eb59ee1b6e523f6f69a192b7d5e7eab3344ff830493a997dfa1ca45671cd6f5299b66f0a8a4040da69b08f09097cb46b091e0f50099ea5a882f1588f97b0a413454235cd227c [...]
-CIPHERTEXT = 44ba018bae74e85f3ad55580d426a6c8899deaaaa24cfe94ab12744b1041a2ba9a032180c661bc9b737207e772fb8bc732a4727489524207b4675f8fa5112634aebab8b3eadeeb37ed83569cf6bac47b7a1254b53b74c2335969f4396698e15126e9770691fa2f18ed92c895b91af0bcb9492d50da446de6249835908a4f6408179807b9a7015d3a179493ebf694795270f1b107b87bbf510556efecfac5980070a7dcf4642ecb10285884c1230cf192af88c4952147d3aa7b56bbe120ad1e2f037464f617e700fa55bd2abeea971a2fee2e01261b7167496bd7b8a948940778ee59855c09af11de9282aecbfc2cad0 [...]
-PLAINTEXT = b4256787e3b88cc73ba73fcd84fce40272600f5d91ab2b17eba0482790355c9fa72abb28856564f9449874ff027c8d19fee4d1372cb844ba7bc41a6e8d6c9b3de803c519e9c5df68ef74119cd4a88d5845525a897adecba28277e2a160a19ee662399f7442ba3985aadb79bdd473e83714184746f39eca55e2e3842533a2660d9095353970606b40263ff1d32f37bf2aeb3bb12f4ea31b85099352e720218951c50d477ee3de30174a7638ada721fb6cb0b2e5ceffb6bf31f526468c932411379023122ca4a132f10e85aff6e40ff6eb931c7924d216cd88bb2661ff3b8cd7712a401f89b1d1445981a0e0694142b1d1 [...]
-RESULT = 0,
+P = ce42d55acc53fce36ab47df4d42d34ac4ef91e5c74a3c90e92af95a6d1961b5e799c682bcae20adb9711fad0583c4aa67ea84c64610a24cab0ceaf392c0ec083fbac6e0861366d844f23fb6a697a330c3a94e8eb20049a8c94b24febe8fc7414aa7365eece7725feee3e2d9bdd605a19d2525c29cdf6450ae155dad5db8bc4e3,
+Q = ed78157b11078fabd375a8abd75ccbc59bfaaf3d4818610c57929f921e70bb96d06d1d61f9f0a0ac76120b004e13025f88437fef6246e6596fe94b9953667a640c23e533ae50d48cd7d66e8ba6c37d54ee45b175eb6232e53360584a54e49c59ad8303f337cc03e91b7ba6a3e49dc5e25bc93465e5565018890f683488a3757d,
+LP = ce42d55acc53fce36ab47df4d42d34ac4ef91e5c74a3c90e92af95a6d1961b5e799c682bcae20adb9711fad0583c4aa67ea84c64610a24cab0ceaf392c0ec083fbac6e0861366d844f23fb6a697a330c3a94e8eb20049a8c94b24febe8fc7414aa7365eece7725feee3e2d9bdd605a19d2525c29cdf6450ae155dad5db8bc4e2,
+LQ = ed78157b11078fabd375a8abd75ccbc59bfaaf3d4818610c57929f921e70bb96d06d1d61f9f0a0ac76120b004e13025f88437fef6246e6596fe94b9953667a640c23e533ae50d48cd7d66e8ba6c37d54ee45b175eb6232e53360584a54e49c59ad8303f337cc03e91b7ba6a3e49dc5e25bc93465e5565018890f683488a3757c,
+MP = 9c0b4930b29294ff1ee7d7a1e94bdc65b6fb4abb31ae9a50de907c5957e85126cf29d44ac7870503976c2982488ca52e6fbe7b223fb3d3b8942de869245ef3dbc4d43b7c78424f0e4f3e5752d16f3d4fe2b5ab3486b78953e716549b48c9841e1c4db5145118ae4b37578ed0f6e6985a3593a88f173fe5aa0f5d9f6d7b89e4bc,
+MQ = 39d0a2d89932d5ae5219fec771e9fe57bbb39b5da3fa5cf3905c8273848f23588ff8654436e151ca79246e1d6947b9f78c40433c96ec4c2b9e8a0e0afef05d0530ab6e11e53efc2e9df25cede5afbcafb86305bb47b52745fc4cb93492f74f9232a111a2165b20d51d0f8401b80c6dd52ad4cb202a9c1c729345fa5f97cec9ee,
+CIPHERTEXT = 1855cf278ec7804938a865e4e27cd7c841a6a2226e2eb108fd3dd8330664a7638b8bdd0a5c64841b73b288f3d6cd3973a542c603075bfd5ce6d22f5486ac26799ea6b274ab6a2eeb4b184d2e27758c67afa2b03ae4f7baa8f1bd07a23fb6653795c12269f4b2a6dcfffba3de527f21309623040981053a03269299b04e000fa31f646c2ecb3d6f3dc353dec1022d1cc347206e91b44d7dd5403dc061efd8d4ccd6d1fe21653cb9f35168ebe45f91a5cd6b26a9c80df6bd283e2887ef51bb5dbd548bf4b346645c11106e97e34273847f61500d2de6fb3c93827d17086fc4574ce1afb6240c1f350c96995d89b2ce9c2 [...]
+PLAINTEXT = 20333a5762ef00bc1fe4fbb84f0347a6c2655ed52c15e63b8ee6a6eb3d65469c22b3fc648edd623152650f961c0ba9d100184d30fdde8d9d35f9a1f7a62787750afbd375373f255f29e1245eaf1ef36a6f02d07bc96abd0d5902bbed13457a6571f3c97e283830e20e20fc0ab8b0e01af05309f9ea26c932a43b6d49722ab5a889c885480b96acd4c57e4f7f9c7e3c4a11bc6bd660a5bfd4a62a9185372757acb2c950713fbd2ba318b0eb932655682e31b5231e468361ff6e28af6a6b8d14d1601c23e50f7e90f8eb3601e216ea19f241d945b5ab7c7f78d7c7e543c943221c33a7a572f7611df0951071be9ea50465 [...]
 
 TEST = 7,
-N = bf3a3ff2403869ef72efbf8e7faa8bd1e7e32a8358682d6c3d0a3abcbfd10a17bde462e541a880458758e03e16128a65e8f3289d689f1b148e3d4d9297a5ab77bf8ace7ae198dd1284299459646297230e205e53498c15562effddf002deb1ebc1cefdf7bb6a5d36ef5adabfba1b077173ed2ea00efbcf644f7a61ed66539edbd5577baf47f25630655c76e809de80df5088afd475a594735a75ed49eba2a48e2cf160b94dfd25bbd849f0a36b1d3124fbb1db0d38b3af329492c310a181efeedab38a83175f1507cde1fd4ecba4f958dc923a8bd34ffc9f947f94d3ccad8f782576d5fbfb9a5a70f18edc5cb6ef84864c7e567f [...]
-L = bf3a3ff2403869ef72efbf8e7faa8bd1e7e32a8358682d6c3d0a3abcbfd10a17bde462e541a880458758e03e16128a65e8f3289d689f1b148e3d4d9297a5ab77bf8ace7ae198dd1284299459646297230e205e53498c15562effddf002deb1ebc1cefdf7bb6a5d36ef5adabfba1b077173ed2ea00efbcf644f7a61ed66539eda169225bb76cf4579296322aa61a8da025f2de51b4293ad46a1c5700007f0be5f054898b0900f16de656de6beccb9cb5cde90a47f47b0477f893f92d61edc9dcebf34790a1c9770d3c6e45313a52c633c26a1aeea34b1efaf1f76b889cc0148f1353319a7a64443f3c6b64ce91ad8554e93c8ed01 [...]
-M = 9e97c473821c5d9a52d9320fe02e482cdecf4beeea557183b9adb2f7149632cc478303fb60cfa2a8cc159dfc8a7f527c7ac611cc393fe4f91c561231a362172708018b7929afb323d3422511104b686133a442d56cf4b791324d05afe9973c742427ec9da1649565fdc847581ec1c1363caeca10186d6c3a18af8e8affc9049f2061e63408e92339f71db9c984249f85ea9d4b7ef87d25e69bd41778c7adb50c5376ca79c30cd3924d1fc5586e5ff67171186dfa8dbab85f50a21ecf471fe25f1f069a47fd15cc449143c400ac40ce8ac42f833e1670a7f4dd2f39f76278cf72c111245a8aab4be0ebd418d1bdc15ac3c6403b69 [...]
-CIPHERTEXT = 8a5cecaa5d19fcb5f49e379b6de71fdfdf05750d7ef12ba5c635daaa8c030b464f1880fa57a9dcf0604f9252b5cc61c9c3984b6c9db6ca6eebbd264a56b79e1496283687267793a79f3b5b9540dcaec665ef0cbb9494263cca69d06d61c56920d722b128fbeec33ed455411d4053bb5dd33bed80f1635560dc22ed9c10f979f962a61ba8fc32c74c6ba3ec4815b72d67e102c29b44525fda7da4f861d4fb5e2cf7b315fb6302baacf56d5bcd7a6b7085bf0026f52127e799f1d5cd8baf7c6b539a9bc24a10d3b77d544bc245247397dd8bdde17f4eeb71d047c63266945dd5360b53e1be044754a6dd691a3e313c44e [...]
-PLAINTEXT = 26d59c129cd9ea7df6d9d880285bee88496b93d322afdedda9143836b051d6dbd293338f20e94c7adb41ed138a0a855292d481aab97d789fbca7b260109fa6fd5d00edc9b3ccea413afa8dcdd14f8b205a84b2e95566ff3fbff082b4e972e8a555e06ece512a024c062689002d54660bb9ddfbe1326465adc9bd9e9614341811d6ed6190e4b1f240f939b93c88cfa24fc37363ad8397cdc51b60c5925bdf84c0c3d4d73b4aed2ed5d06b95d603d7a80072687b2720682e86270377435a7b5e1596522204a812ccaee6b6478a36a276da351db87d740f1f139c8893571a99c409e9f71ae5f160f47e11c78f33a34cf375 [...]
-RESULT = 0,
+P = d1fb4aa2c4fb2f8e873a69e2e4eac41735b3214eea65ac0c342c0edd7696a92bd51e2dba73fc7dba2fbefc681883b28d505b5d8770f534b689a4028687f1d5833276a2c13770474994adb14d24e935a1bd8a39cd33ed48f8a927e6dd8b97644434cee621815629df1c9ac21b5f3aff29c9a7ed10c3622f2586c5c052579eee6d,
+Q = dabf5a9a32fb8b63093729d6d9f7be6bec81a37e6108edabb015b5e5a3b20cc9fdab851810f5b7b0cf820139e057f89c4427ee8128b37306dc1f95cb9401e6a58223cc3ab3fa0360994560dca22027cfa341ece04f708442bb37efe18cbe5844333c4c8dd8ac64e3bd46f16aa06d4f45c4b488ccd4f1ff785ec738b64edfd7cd,
+LP = d1fb4aa2c4fb2f8e873a69e2e4eac41735b3214eea65ac0c342c0edd7696a92bd51e2dba73fc7dba2fbefc681883b28d505b5d8770f534b689a4028687f1d5833276a2c13770474994adb14d24e935a1bd8a39cd33ed48f8a927e6dd8b97644434cee621815629df1c9ac21b5f3aff29c9a7ed10c3622f2586c5c052579eee6c,
+LQ = dabf5a9a32fb8b63093729d6d9f7be6bec81a37e6108edabb015b5e5a3b20cc9fdab851810f5b7b0cf820139e057f89c4427ee8128b37306dc1f95cb9401e6a58223cc3ab3fa0360994560dca22027cfa341ece04f708442bb37efe18cbe5844333c4c8dd8ac64e3bd46f16aa06d4f45c4b488ccd4f1ff785ec738b64edfd7cc,
+MP = 8b998bc664312483259ba3f7273a0a78df2a9850cbe7fb0bd57d8a075cf73d55ab78e143f5a2ed870a910bcef338dac3df240ddc8ef4757f9b4893c904e87f8e78ee386c855bb90edb9165ccc8110dcfd3179259c53dcd0481c2de49ec046c2d90a7135dc6000cb8f5fd83c6e18efab5cb8a88b15feafcc91bb252445385ef23,
+MQ = 4951e98ebcb07d92f6c0d2a63efe7fd675e2d13757d9c629f4435584ef3ed08ea351aa28f724c2687c8abd897680a9744e101031dc799893e784dfa544a68faf45cb0396851a3ca4b4e677c1d41065411907f5f01ffd3bbf2dee15c51fe1e9db30aa481956023ed23569090205cf1508bb2fb9be0afd9f215567f3ef7de888a5,
+CIPHERTEXT = 2fdd535ae3652e402aa5c0ec7a5f5a63c6fcf83884bcb82372fc7cee61ff339561e6f1f63a2e02361d9751ceeb9215412c7fcba5b04296add0e31c852a1a2d27cb958b96d3249be318129a284b8973299e8e4037a38f5c889d998b2e92cd84e34fd3eceef11a8b71f4205a24c9d29ba62158e4e7cb31cf6ff77dbb6875fea45d2e364cc58358ad9726b0ffc276d940c21d3ed5622fb438244eae30eb0029945435f33603c3ec0a55da8b3194770e8a7b47eead1876750efedf0d789ef45149a7e82465f4ab57c6cdbc801f5eb4152ab7be2fc4daa3dbe7648cd35faf4494e40eb035b79ee40d4cbb4d2f6038b5b7f22 [...]
+PLAINTEXT = 996addbd35bb71ee1e10ccf0ad428ca5d39ccefbdcc766ec3544b5907f9bbfcfa78f362f4a4392aff0e14e77e3195c5b086894be572644f5f3fd381f6630ea888dac80db481cf14e8ea3d6a57dec3731483b78421ef14a58613320c6d1e0be21f24a3d909240f7c8ce4d698456b5a5bf96dca8e5d29d12ff17653e0185ead5501a201dc73449a5d842681369ec16859fd4f604968b5aadce8c89579554505a27f09b157bba52f95fb0208ed2ddeb2f2a73882645e70ea03c97a7a4f0042091f1fdd7cfeea94d9ad4f11c1fa4d54407202f5313d624dd8c863e2a81dcab73d493f3a94056c89c8f0263225a4c77f2fbe7 [...]
 
 TEST = 8,
-N = e6d8b6c07fea9bcbf2bdc648d9a36c3986d121c5f04c5015fff72c7cc90c201f12d2d2bfcad03d16e6f4e8a7ddb62816359acd0fee28aea195b78221913b8583a94a072156fb8ff48586b8617615b905f42ed38666738b0f326e154e66f05b2c87ff8b913d1177d23b630c9a500e744b2ab3272c13e8916e2c3986e0a9675e9d2038ebdd204a548346e228f36c52867015093832ffcb4d9f4c72001b9640e1bf8311f1aff9ddb36bfac31a59499c38d5f8fa8f4420c16e598dc2ca865efe32d2bbdf049b6ffc606b5286ff46f0404b5e74a806545f1bd346ad5f9feb1ce5bf6cd4289080c290d900ec518090bebf18bda3d2a004 [...]
-L = e6d8b6c07fea9bcbf2bdc648d9a36c3986d121c5f04c5015fff72c7cc90c201f12d2d2bfcad03d16e6f4e8a7ddb62816359acd0fee28aea195b78221913b8583a94a072156fb8ff48586b8617615b905f42ed38666738b0f326e154e66f05b2c87ff8b913d1177d23b630c9a500e744b2ab3272c13e8916e2c3986e0a9675e9b396d7ae48465aae5add9818e87d839d23297712389aaf9368845040a22714b14ef4050ba6ce559877c47d7f5ab4a6173fb4e8c9ea6bfe5419dc4302ebc1b62da15d5c7e8fe93e1d2730f6db4ff04dfd70c3825f985ec5d0cff659f946ff47dfcf2e84bd2e43e159da1435b9371addd267e7bf32d [...]
-M = 1bd3d8bfba6f7c1b21184675e419d061aa69d78f0b9363a0d11142cbe62b055cdc5da192641ec032e59dbada6f7a210c6e8f14e5c188e9486c0859dfcf7ffeb3da7933d4c3195049714b1ab10e191ee71cac9a4a18a9a2a0790468f935a0e7283699f887dd6c43158a30e53de5f263c1a4e637a9a48fa0d75aafccb2035e56b8030a862e3d83e9af52e8a96ef3d5b6008b99c869c0a52b2281feca756b524bb564542d90b7e71d675635f4d73070ecfd5f1923ca98a221f3221fc312ca5fe0f2112936e3dde100f11b3ffa2199ad3909a10b3e49ed1111938afed1b7b35caa6492f3ed24707cacd467843399b34026b142362bb9 [...]
-CIPHERTEXT = 2bb9fd6be1ca20bd51c814b6eadf6ab4b79e1aa539acd5eb5a3360222b3a330f1324ad3dc5cc969a19bb499794911d98f1b9b1662cc29b821d2bfdece0c00d1fdf896d8dc8e585f994b2f9804896796f9547ebfab38ff9c99951e59223122030d07bc582752444ceff65483a329c8ad2492eb1d4c61ab94d1919f3f693d44f5ce5109dbcd16d6a05e3ed0c7b718dcbd541aa9947d35589984262950c845b11717b23335848c2c6284442eef28b88e3251a7004d2c863e5b69d5d3803eef58098fb63a4df1afe952c6b6dd75bd04c126e2befab3b0a5e5c4e3df1b39f0c1500c3b368bee3557ac8240213fbfdd6c8b85 [...]
-PLAINTEXT = a2a1ac7e62a616b2e7b41c4159af67502eb756b67b6e7acb0e6e0675b8cb77c9412185a7486e14b2e88597f9bec62ef7f36eec7e2cae08428ea380bd1a3388d6f28b6c8347519fc178af31faa17e7ec02e868da3140b92dd22d73e14617ec3882b9aced352947322b17a301354ed763a830cd8a65f7fee89dc2dbb143d39e1c87af68768aa2daa334b1957ab765aeeb2339d1680bd98bc88deb42ee4a96c4bb94b38ae6f7cecb608cedceb7e35fa44deb95a0c19f4cd0e8034f505b66fabfc628a2c9092bc3c7eba1ef1136d8321d27df7649b685a0fa29e0bd445a3df0d8f3babafdf398882606058f5e255dec6cf3d [...]
-RESULT = 0,
+P = ba3b3e2eccbacb55cc420295c5604cd424adc8d508b3989d5fe4e360170257eb2210ab826dfa4fbf89f5315edf98bc8575591e5224775d65895ea24697ebb3931b06444f010d2167c73786b6620424357c067fa59646c20202f609c8a46a39329c1243ff59a2d36dd43e6647b8f8bf66f3bbc6ecd12d7fbbb0808e09dad6d0e7,
+Q = fd19b32b97fcd6d0163646836b70f5b15571ae93e7db495d5fcc2e922b1f8586ef03d3b70e959ff2afdf511d68deb6313a05c5086ff8d0a7e3a7b291f8f7727b334b9f13cb16f2ea43219841e681d696c743144314fdc332136d9214a7d87126d0476f56cbec412f791744afcf67c90e25e2027f67b1ba85f45cc614a93f3a09,
+LP = ba3b3e2eccbacb55cc420295c5604cd424adc8d508b3989d5fe4e360170257eb2210ab826dfa4fbf89f5315edf98bc8575591e5224775d65895ea24697ebb3931b06444f010d2167c73786b6620424357c067fa59646c20202f609c8a46a39329c1243ff59a2d36dd43e6647b8f8bf66f3bbc6ecd12d7fbbb0808e09dad6d0e6,
+LQ = fd19b32b97fcd6d0163646836b70f5b15571ae93e7db495d5fcc2e922b1f8586ef03d3b70e959ff2afdf511d68deb6313a05c5086ff8d0a7e3a7b291f8f7727b334b9f13cb16f2ea43219841e681d696c743144314fdc332136d9214a7d87126d0476f56cbec412f791744afcf67c90e25e2027f67b1ba85f45cc614a93f3a08,
+MP = b68f9e543e0fe17fdf79ed87f994eda360d423557453eef1a473645f5c054265e5d07c884bdb37e027c03a4974b8682f2404639c5eb80e64d309b752cee5aa6dcd9b34eb26e9b3992689d6d9e5221b2f09c826c5c1ce152ff3a7440f1844d6c75e2efa2f964a5dc460a7c587c15dfd750b9720ad6d9761866b68b00206810ae4,
+MQ = 04fd0275a67a3b7004dea77c8ec1b7b560c88131f19199caeb26125cb36b78242bb68fd51bf5a4c8df5af82e57ea82b13345ff5800c93e2cc544f9d5c935966fd08d08cb4385492a2c0d1a08c082d7ba9ef6c06743477a821d5c3f58abf1addfc0aadfd5ba95bf3184dc51bbc3b1350783ccbc9935e4e343354e303e7b0585d6,
+CIPHERTEXT = 82c4e4e09ee2fc709065b89227f7e4c07be8638852e87f167bd12c5b730d12d872d4e836e9b3dedcb3bd1bd301a2d04270ed4f63cd233bf4942842fa94f1242049baae2835b2fa9ff7b342b39a0e5434111d53d6d33d5caec551d51d15298d7e49acefd32d37cf16c8e21fe331242b52356fd1dbef4ff6cebeacbb5085c73c15968e7c425f038659d20550aa12d7b9e3a0ffb6926cb1ccf0e6ead9c8dbdfe186cd2a0bb82a66ac03604a81bf55c24e6a8ee70f9021483abb26b597d7bc7be3d7d35791362648f77ce3892c3a4e9e577f6bf4294fab85eb5249758f432db560ab1cfd0d54f161ed354517c166d825e24 [...]
+PLAINTEXT = 5c89be46ad8d96212974405eb535b111ce16bccf4ac0e304ed1391b38919eeeb181ee1271990d49c83fc64c4003dd28d0e372b2817a63c386858366c98edccf7878856baafa4cf9442477aa6803f5b8b28fdaacf303393d6935b89e7ba208251018204d5f19e2e90ec33bfb53e153c3de63560e861b9d2b91602ca83d48c059ef1ec905abc77269035a99ec737bdf0ac2f37afe9e92b96b28cb61d83812965afab92192d95f838ac032db2471612f6641b6964a96467c9e78c92cfca2cb74824c515388fde6561345a0233a2736580eb4fb9a0a2274f74721a89a6dda01e64331c16d007283f5d69275d79949a510b33 [...]
 
 TEST = 9,
-N = 9fa46242c2b1c3265bb116d1458888b74bbc7223ee1d7584d0e56992dd5c0dabb6b2242096268884ee58cfd63c779b5c00ce6ee5e8f50310568e55709302a6c0c0ae39339681385dacb25a8e7bcee237aa53264a950a3a6f83a8f8266260a1179a04089e078d04e215fcfe2c209505b12d5d73142e2fd6dca48e29e18d040957933af52a95e93d433b622fcc020bf8e42d609de73f8ea712000e3039fd7cbc0dcd08bc1df436ed8ff7d1ee4d8ff88960bf66e7da05142ed9654de182077bf9fc461c654eaff4b65266b2b513d5682096044f02ecd500252a068cd9c50b31ade65b0281300a4ea68b2aab773fae8a70a9f9fba64c [...]
-L = 9fa46242c2b1c3265bb116d1458888b74bbc7223ee1d7584d0e56992dd5c0dabb6b2242096268884ee58cfd63c779b5c00ce6ee5e8f50310568e55709302a6c0c0ae39339681385dacb25a8e7bcee237aa53264a950a3a6f83a8f8266260a1179a04089e078d04e215fcfe2c209505b12d5d73142e2fd6dca48e29e18d040955fd4f9e682e3a20987c9efff1a422cc5392f2e1cde0a3e1b61c9f5a0afb3aeffce42315ccdf74cf01295422962be8cfe5399a2dbb30d09696e92acc43b739a78b6e1ec34a0d1fcb147c3d5f89b09ef8d5ae6fe03b80cfb7f28155068a30b78f8c2af77d9aa462f0df04bfed66a46ad513190a50fa [...]
-M = 88b69ac03a84d0352cfc1ee177d3327e71a591f541e5e9945f380dbc6ff10f65cc3fec9d39e080a035d45ad6db8831d2f5bd3272a79a2913bf5a8c83abcf6299b8d8b6586ea204b708b19c2d6f1bec7ae399784c89b82339dab7b1c794a47bfdc86b05c136a4e4a7698c1248758b933a9cb5072e0afc6292fab65f4c3fb3ad39c35c276245683ba9a36327f90b7cb50d747797e429780cced96076ae9a43da92b3acc51ca88f4d29310198d166ec14cfbaab8132bc923ddb1e7d31addb5d139370741fbcdfc4cae74714ea3a4462d218761666c3615938b67d0345228fc8d55b58e35507fd52f4727e70eb2bc1463af9c587952b [...]
-CIPHERTEXT = 5c3c3328403df5cba08dc91d1e0ca6b14126976a5b94d56f2ceab4fbae896bc66e6fc12aacad3a12cf2855c7f2fa3d45dc9295cb7bc456605e91e28e5a1fb2ef72e48b7fd6af1cff8500841cfbd0ef008e34c8a8289b8421ac3b6fd8946d4dc343d0a54990b878ceb6bfcfda1c41e870fe5e526c106ae750b270e7e82d891304a92f95592ab05f007b207336654cdc77034319d62b8b050fe162f88e522a1f64076e38d172bc7e47dfa8a57e3d1fe5dd65b403b9426e9dd2fa7998738c7093c41f28390a362437ec05ddd62f1f8d964f12d0cc61cc4a25511ca008a191004e5ae8f4f62df4c5bb9b83d2d878129a003 [...]
-PLAINTEXT = 498c9617a667d623e7b118964e23be3330acf40ff59584637b0d22a9921567270494e361bcf420b91101b3d807a54fc95745c62a65b749c0e69d52c3b5d4f1e23774cc375ee320837e4f5473785642e73e08c6bc35d18523ef0158834a43f2a84c63203902257cae43f95e99c9d2bafcedb3208735a37ac2f1f0d3137a834881e6f84301fd8c613fbb40d24ca7afcdc2a5928fcebd90e85999c9c192bb7fce15b6e1756aec2670cf2eea19e77be89b5f39d3b367cac57b0e600ad3e06d3ae09dbd8b29f476386f3ce332fc6484a688fc0808d8f7bdb6c1c57a56ca1eccb61f2cec4aa09af3375793f9692d6527689802 [...]
-RESULT = 0,
-
-TEST = 10,
-N = c132c1ce8e94aed8ee09b60feb216ad646fd11e126b826401ca07aa45341343a8107f4f5841da96505023dd6d1ef7b8e26604a971ce8e1b7b06140ae49c0f103ab550b878d87cf097701110ad19903805f12cc2005c70b6110c365a3b8285c701b3a0ddee11a55a94f581f286471f9a099cdf09c6f7c9ce219794fb3688452a17773b3629cf2293a8e3f69738c21da2a512dff888df71b0ee7baf34aece2aef3224892294fbec354e90c00a2d52d822b2a97b47cfaedb744597d49bb90bcfdce6dd56eefd918ec18d2f53fee43c9dd1039f881e916832146528ededd047a01c8d65d7819c47a7070f1f0c3d45822529564e6638d [...]
-L = c132c1ce8e94aed8ee09b60feb216ad646fd11e126b826401ca07aa45341343a8107f4f5841da96505023dd6d1ef7b8e26604a971ce8e1b7b06140ae49c0f103ab550b878d87cf097701110ad19903805f12cc2005c70b6110c365a3b8285c701b3a0ddee11a55a94f581f286471f9a099cdf09c6f7c9ce219794fb36884529fba5a129c022270c23f80e3202dc76d429b81bcef35a8c6892d9f5908c0747727439ea44b90f07c6435d8ee8cb72dd47f8e2c7211180da9574f13cb4a1f9505f4690013d9103d55a4ea17d44c0b6ef7202a581b1e25cce09be1486d64e5a46ada44b5c4a4b8d5f39d3c92ad7bbfe39ba21f54304a [...]
-M = 99d1d839b88df59055b6dfa3a9bd057de2c933d7572d0d1ab985e3bfa2175f27f53e5f2cdd23f65308c165c9f55c2156673d0ade32affa1269cc12cdf312ed64e8cbf31e542361896a35e08fea369c00c1f4b9cc57c3dc38464b4829a89f54463caa0cdf795fe1b239f4abd43092663bafa0e3716d817aa1ea5e891fde4a24dbed81e1cffc414bcfcb8d1174d5fb553012d38ed28fda9de32d4bdc1388c576fa445bb3990ed4f6bb201f47049f8fe2e0a5aee0959f9832ae627b40dd597be2ef85edb993227b999c68db0b8f992c9149f1495babd25783a32d3a82aaa2a6fa1117e09060db796c937e10901d1cb59793be2bf852 [...]
-CIPHERTEXT = 0a9578bdf034aafc6f04f55082ab20edcf52a1e298bde0db3990074018d65b920b2f7b2bafdf22120beaf1627649c3a2167ea841139ce7a1233c6a7b3d2f6c70427684a67df7b6d59f3ba6587220370f971223d82dad91ba89bb627453903e6a512e283ce93a01de72eb569a580b917928ef864721331526b19bf37ff8fea016d2796d51e81c2b5fe4ea410cebe352fc9a846c497af86ad238c94b22a9621db779bb16b5626ed49978de36a3baf11bbbe1cecf34177212ee1e609b2c681a95c13a7f0675ba656e47625d23220e410919cf1f3cb6fa75f034dd10e4b752f790e2b987a1075dc1edb7365c8469bedae73 [...]
-PLAINTEXT = 1296f6200cc3a9e4da85ec2413436224d86d47b6d01d26c6b0a7b1a97b3a6a767fbf30a56de4d1c75fe4415406450565ccfb40c287b1c5f9b1c8dbc5079246a736ab17dca869131f727fdc52d5587d1d6e9f6a4a63bc60144a2978bc367f43a862773dc99eaac926d1d80678a33f97493efa981d5a172c2e64c55adc04fba333b52e42258c709df051ac8fd902cc9475ef3dc16d06cb34aada5c092bef85d9256fec5b945df1b07d223508d3a54f6283eb5d983fae3421c2a6524da948ee7472ddbef0d0607d75de3a8d762e2572dd8b34a9c6c728ca0578b4f4d8555f48f35433642b7173da6a8c78ae960e40b4b760 [...]
-RESULT = 0,
+P = d641dea553504d3fe4e0d3c09fe85ba7f6abae764e806b4cbb16066d8d02e2d120dd6f577380a0bca633925988b5ef9f0275f166aee80aa9faeca7042c4b844b63943d2e7338dca0795cba35d1ca4c9e87120d9ed67224c0012111c572eae504c002069eeb5117a603fa4ec6429a166bedfcfc128aef34e01e6236db4366958f,
+Q = e281cd0213be9faa9ec6024ce0f5a17c1a56f436301f50e52fd7e74ed78127572bc0dba97c580627e4d4160cdd7ceeb9c4dc73a9e360aea24375892aa9c59869aff915f1ee51a7c4736ff4204d7a18187253c443c08c88e60a1acfc1a65554e4fae8622d79af287d2513502f04e5e5a59ebd7559690f1428686e3e1ac7d0253f,
+LP = d641dea553504d3fe4e0d3c09fe85ba7f6abae764e806b4cbb16066d8d02e2d120dd6f577380a0bca633925988b5ef9f0275f166aee80aa9faeca7042c4b844b63943d2e7338dca0795cba35d1ca4c9e87120d9ed67224c0012111c572eae504c002069eeb5117a603fa4ec6429a166bedfcfc128aef34e01e6236db4366958e,
+LQ = e281cd0213be9faa9ec6024ce0f5a17c1a56f436301f50e52fd7e74ed78127572bc0dba97c580627e4d4160cdd7ceeb9c4dc73a9e360aea24375892aa9c59869aff915f1ee51a7c4736ff4204d7a18187253c443c08c88e60a1acfc1a65554e4fae8622d79af287d2513502f04e5e5a59ebd7559690f1428686e3e1ac7d0253e,
+MP = 457dbda066617c8fc8608a46f0fd203962e2e4ec04d53ecf39a0aa696e5a6ea272fe7d5830ef7ca77dae26282d0cb51a95651d50e37d8418af59057ccfaeee310d7e25257622cbaf12ccf5e8d42be8abfdb9f67a88e98d2d3581bb283917d6764ed12e091acc929a5a60eefcad0d0db61cd161038d046df59109e57b65dc107e,
+MQ = 990af7a7772ec876efd2320677034c33c87f9288ebaea483332517a2725dc1cecb89c19739b83dd46e948fa617285f798aeeb7518330cdf331caaded45de73383c3ee64f6f6221802bd6776d51c3b8d472c3c93063097656de260486938abf66936946926e971a9a172e48de6517461a191a78607c9d696fc61e92ef5fbe7df2,
+CIPHERTEXT = 77a66f1fc19da5558c10d5b0090f6218e8c9412719715dcb13da7338a4fca30beb39f16a43fb79954eece430c0d08c67083ed6793b54b5a2c2eb5df8d103d268026264a725eec1204338442dad95863a5a2da1de9d588f6e7e7de871d2ea8057d7bed8a4e90a5a987639ded89ca6ddc4820589a6561abcafa3d2b8136d7dcd7df695eaf50b28b826256b05c960cf62117c3d28c1dd4d09eb51510e6aa8292cc0f0aa398c16bf843097df30533d7ae9444dec39a73fe1771b3b19cfe2bc29b7eeb2e3d3a5cc905790924cc527786f9ee9733438ffe6a672df6d3b64f599108f5ba7f5ffb9326d14e406812cffde1d843 [...]
+PLAINTEXT = 268e5891f8675e5ab519b3f6a5243446e94d3d0d9e7f398478e3e206fd2cd5582524ed8c560ca32090af5ef0b94a0e9f8de923b47e59fb7263c431e225fa45724b6a11f2f36ee463b4c2198659d2082679f836144d5ab1570eade85dcb9586bf0845fc1506787bb5d1d42551ee02f23e6d9bf3f317a4123aaa3f856bdf07af7a183244777e81237e095387de3a7d98e6e988be6c0c6d464a77f62ddcfa829bbd267377e4500b078d40d664aa24a2e4563c76268c3975de483be3687e27a18694c63d5d09687c9be614b81587573cf6f789534fd478435738494ebfb8ee4ec6d1410d1d129d2e04aaccf30d0969376aa6 [...]
diff --git a/testVectors/paillier/keygen.txt b/testVectors/paillier/keygen.txt
index 0fc6e86..2c5d110 100644
--- a/testVectors/paillier/keygen.txt
+++ b/testVectors/paillier/keygen.txt
@@ -4,898 +4,97 @@ P = 94f689d07ba20cf7c7ca7ccbed22ae6b40c426db74eaee4ce0ced2b6f52a5e136663f5f1ef37
 Q = 9a9ad73f246df853e129c589925fdad9df05606a61081e62e72be4fb33f6e5ec492cc734f28bfb71fbe2ba9a11e4c02e2c0d103a5cbb0a9d6402c07de63b1b995dd72ac8f29825d66923a088b421fb4d52b0b855d2f5dde2be9b0ca0cee6f7a94e5566735fe6cff1fcad3199602f88528d19aa8d0263adff8f5053c38254a2a3,
 N = 59f668761d66864604a05a647ce112452830f0426d02e4141781c7431eb1845c2ed32ea93150fb3b8c17553629edc84fab77080e4200b815f338aaa58fa030a4b562f43d5f24a25d3dcb419ae75e281e37c8a1f0d2f47d733e040fcec7f45e293ef656c91d0045b6b97c64f72977c01ea85214e5847b425ea410a66b59cc2ef6d6fdf6509afe8d48eeb1335f58aaabf42799fe636a2f7653842cea779d0d1dc455c8d99b862ef5e96ae83626baf9d11aeecbf9cca683cb833ceeb09bd7e1bf7e63cf76d1d48d036cbcb05c185f08c72228ecd5ccffd9192443f007a3016249584504f7c0d483fb934365a58fbcf0df13a20d5864 [...]
 G = 59f668761d66864604a05a647ce112452830f0426d02e4141781c7431eb1845c2ed32ea93150fb3b8c17553629edc84fab77080e4200b815f338aaa58fa030a4b562f43d5f24a25d3dcb419ae75e281e37c8a1f0d2f47d733e040fcec7f45e293ef656c91d0045b6b97c64f72977c01ea85214e5847b425ea410a66b59cc2ef6d6fdf6509afe8d48eeb1335f58aaabf42799fe636a2f7653842cea779d0d1dc455c8d99b862ef5e96ae83626baf9d11aeecbf9cca683cb833ceeb09bd7e1bf7e63cf76d1d48d036cbcb05c185f08c72228ecd5ccffd9192443f007a3016249584504f7c0d483fb934365a58fbcf0df13a20d5864 [...]
-L = 59f668761d66864604a05a647ce112452830f0426d02e4141781c7431eb1845c2ed32ea93150fb3b8c17553629edc84fab77080e4200b815f338aaa58fa030a4b562f43d5f24a25d3dcb419ae75e281e37c8a1f0d2f47d733e040fcec7f45e293ef656c91d0045b6b97c64f72977c01ea85214e5847b425ea410a66b59cc2ef5a76c9540faee87fd45bcf109d92822af07d0771d943c69a3bc3232c573ebd9c4a6381c74a46b5d9bbe407db5c50dc37fc39de16501c4eca84f07c04511fe78d1ab5531809cf4f3706136c238df2511fc731f1bbc3be22e3efb3bef6d643a5df7ce17a93406ab8cc226c2459105cee6a3c224bc93 [...]
-M = 1ee3cbc99bde365d01286a216d15d331d82d3562fb8c53c08ed44fe45f8cc9e2d3e410b466de80dd4fb4f69e73e71232ff78e1dc7c68ce01f4d4307e05a0d4268c4fe711ae89a82bd601dbd2921db858f42ac7192ed5c37ccf35f68ab6b2bde63001f99582c34f54dfa687af2a225aa70b3fcb703ffa936ca6e4d9906cbb91f0abcb8799da2474ecdff45a7c8a5f7beee325ace997a692aee41ef423ea655747ed27f90ad330aafcc722eecc07adf5029ccf95df6e93ec773056c0e8fb2aac5d523bb0549e0d847590bb0645d662c07aef2ef3fd054c514b673516ba5aa0d2e96b04dc5bebac7727044675f94d89d990d63e118b [...]
-RESULT = 0,
+LP = 94f689d07ba20cf7c7ca7ccbed22ae6b40c426db74eaee4ce0ced2b6f52a5e136663f5f1ef379cdbb0c4fdd6e4074d6cff21082d4803d43d89e42fd8dfa82b135aa31a8844ffea25f255f956cbc1b9d8631d01baf1010d028a190b94ce40f3b72897e8196df19edf1ff62e6556f2701d52cef1442e3301db7608ecbdcca703da,
+LQ = 9a9ad73f246df853e129c589925fdad9df05606a61081e62e72be4fb33f6e5ec492cc734f28bfb71fbe2ba9a11e4c02e2c0d103a5cbb0a9d6402c07de63b1b995dd72ac8f29825d66923a088b421fb4d52b0b855d2f5dde2be9b0ca0cee6f7a94e5566735fe6cff1fcad3199602f88528d19aa8d0263adff8f5053c38254a2a2,
+MP = 2cafae64af81e43b4b99dce785807768732c57d4d71392017e3572a05c34ef1ae5c50f008537a2ba3e9e87db5c812944c60bce440faa05bdd4ed90083ea6741f54f32e9b2534dc0f48dc8bd00e9aad6dbd919b7913af95b5f0d1b47bc9f600c20b7afb86bb501f1032551e08696e8eebe8cf20e0c847a34a13321aa24903fc6a,
+MQ = 6c39e504fa0718822922aa7d2c115c458afdbdfa8343077cbb2ce9b0ef62d55a791c47d7888d797d9b485c926295bb8d7c735229e45bba4c5e90ddb6d9f7f3d8bf71fb90191b58088b672a0f29b8a310dcc94e4d79fa316f6014fc4fa5f43cf63966cdf2e3006b114781a4935a9e1fd485fb8460fb2d3f93c52e74bb0367e876,
 
 TEST = 1,
-P = d4c61da5807cf71592f2c3f3aba8efcdad6e4c4b9e56e4c4590b4e05ab19bfcbcfe690543a10fd901d3cba6d38c528eac7e8d223fd51d35bd7d739ef511d8fe18e8de17ce1b6046d07493e835d94f00a51afed5d501b19cab4a1b9a1369eeff014e5bfbf8b82edc007683db38f09654b52fb029b3647a07feccb5720694a0093,
-Q = ff7e38fe0d0e72251aadae1a76b3daa758bde5f8b305d677063d5f35975591a02179bd7b08eb43ce5b04d7e2bcc34784a1964a4ad0e8d4a0b6a2b44c319ec790fdcb024a3ce0faca44c3a91c8bce094d42567ee06d1377967d018b87eb31b3d4693a31bace15ad5791a6bc3e245ee13a6ffe1c7def7e72ad6481a210f9626b8d,
-N = d45a4068f0596727029dd9576435ffb993c651a46c9be9b389d6d7c020074efef382041f9b8a57daf9e8d588b564c85ae05bea06869e5a391af4d2da6cfec1bfb4b336a074b11f700c8baafdc60d294d848640bd8293459020ef833489bb88aaea063ccb11c0c7fa8f45cfd8b188e173054fbcf72cd7001a19ede082725b0e56f285ad5e84b616ba4a37da97dd2a7125b4f1eb918da4b2ada41188ec7de80765859e87185ef9b10557fb45b43fe40bdaa4a5e3982275b4c07469ffa631122a999ddd850d4fe444aeb0079e801439a3f39b42cc260ddc9c680f153d306c91d520c6d6c017ba8af97ec2201d4fdd98af45ad111292 [...]
-G = d45a4068f0596727029dd9576435ffb993c651a46c9be9b389d6d7c020074efef382041f9b8a57daf9e8d588b564c85ae05bea06869e5a391af4d2da6cfec1bfb4b336a074b11f700c8baafdc60d294d848640bd8293459020ef833489bb88aaea063ccb11c0c7fa8f45cfd8b188e173054fbcf72cd7001a19ede082725b0e56f285ad5e84b616ba4a37da97dd2a7125b4f1eb918da4b2ada41188ec7de80765859e87185ef9b10557fb45b43fe40bdaa4a5e3982275b4c07469ffa631122a999ddd850d4fe444aeb0079e801439a3f39b42cc260ddc9c680f153d306c91d520c6d6c017ba8af97ec2201d4fdd98af45ad111292 [...]
-L = d45a4068f0596727029dd9576435ffb993c651a46c9be9b389d6d7c020074efef382041f9b8a57daf9e8d588b564c85ae05bea06869e5a391af4d2da6cfec1bfb4b336a074b11f700c8baafdc60d294d848640bd8293459020ef833489bb88aaea063ccb11c0c7fa8f45cfd8b188e173054fbcf72cd7001a19ede082725b0e551e4156baf72aad7f9c976889bacda6b0aec5b94d3c47f77244c8dbb13b78b5f9943e39491bfd6fa6dfb9b3644a5b9b6b3b26c729543b0cc3e5f0116aae55d3271184a146314d457763fab6e02ad6aa9c073c5fe850ae0b06dd71f8074ac1315c48b6ce9d60f25e672911235e2a3068bfea17f379 [...]
-M = 63af58951091d0b4952d7416ba7a4a02c37431bd564b90932d3461b3d5e31a4c54d5907f85b1707a090ecd646b29dc61e63883a83b1e9a944b21dcf56e7f481fe309424c2ee4dbb95793770632b2e7c8de4db2d122fd42f1a3ab44b3eff0869e59428a9ecb591ac9bd7f9955b360aea788390ce752b1e936e478dd5c7916a50b9f71d5ef57ac21586b2fc7eea315198108129aa3c418125030fa931653081b7f791b8ec46e51796525126f4e62611b0da7b6a239c3026a031b0cb1a8fc0362f7db0c833e90d4de348501f9e479f1672f099925ac28a371f6179a252d56f6c4c2f8565e6c15fec82bc5d12f5ff971e1ca02beb5c4 [...]
-RESULT = 0,
+P = c1d51ee0914da56fece8362fb77c947de2c07e99c90b2c24292c6d3ac369b7526a9b17943cba6d173976e146193393c04696388dffe0234502b1fff747a2f2c81aa4f15ea0c51b5ff59d833f397a6b58626a9c29ec7605a3fc51d5a5df29d96bc839e07ee8189e64e22aa358564fd68d4b3ef4a6594f71b4710bc0d24ebbdc05,
+Q = f8b501d376800cdfe542f6e228b7fb885f92c20e66a20d71972d263b3168e39ae9574fa36b9b936fd6213746530b6d4b9be945ba681fd34386d2a775f7c6609d7428dfab21f202793bd025b78ac70ff1d9230ae36d75b31395a209f54ffca736e1d410255d40a173e5038132a800928e01c998aff4f8b10858a670df569688c1,
+N = bc4f82fa530a785ded3975db1b2bb02c09937b25725522198cb7b54bb4490b97acd8577a50350f75a399418f791b5a61268a934624fa4c59a1f6d9910a256c6d837b7d75a21a5ac7994ecc070007bb844ab7c6f2e9e1d7915303e2112b07b3bff9417e8efb2e2e9cba98f4bf3fd7aecefa635959e4ecc87ab86255e877ab62e05eb25f69f1430b20bea4ef5e5f071982929764b4e613a934b99c8167c7f0b59fe47507ccdcf8ed8302d6428af4fd66b528a19195cebb354b027b54b7fe15d5e4272ba38ab93c3c8bca5a16aa668b1b5013d470e61bfc457bc2be66d7909852922251bd6caa82379581aedae2fef751c3c12a4d44 [...]
+G = bc4f82fa530a785ded3975db1b2bb02c09937b25725522198cb7b54bb4490b97acd8577a50350f75a399418f791b5a61268a934624fa4c59a1f6d9910a256c6d837b7d75a21a5ac7994ecc070007bb844ab7c6f2e9e1d7915303e2112b07b3bff9417e8efb2e2e9cba98f4bf3fd7aecefa635959e4ecc87ab86255e877ab62e05eb25f69f1430b20bea4ef5e5f071982929764b4e613a934b99c8167c7f0b59fe47507ccdcf8ed8302d6428af4fd66b528a19195cebb354b027b54b7fe15d5e4272ba38ab93c3c8bca5a16aa668b1b5013d470e61bfc457bc2be66d7909852922251bd6caa82379581aedae2fef751c3c12a4d44 [...]
+LP = c1d51ee0914da56fece8362fb77c947de2c07e99c90b2c24292c6d3ac369b7526a9b17943cba6d173976e146193393c04696388dffe0234502b1fff747a2f2c81aa4f15ea0c51b5ff59d833f397a6b58626a9c29ec7605a3fc51d5a5df29d96bc839e07ee8189e64e22aa358564fd68d4b3ef4a6594f71b4710bc0d24ebbdc04,
+LQ = f8b501d376800cdfe542f6e228b7fb885f92c20e66a20d71972d263b3168e39ae9574fa36b9b936fd6213746530b6d4b9be945ba681fd34386d2a775f7c6609d7428dfab21f202793bd025b78ac70ff1d9230ae36d75b31395a209f54ffca736e1d410255d40a173e5038132a800928e01c998aff4f8b10858a670df569688c0,
+MP = 40a38e14648b60e08eb17ba3702f91092ee3458e7f22bb6af8aae2f8e86c113a990540635f911ef0848a53ffafc3f18af8029d9bc57687a92393f21d60d09e5e6fb18e3ff08051ededcbba4af96dbda481371f814cfa5d49332e39f71527e050625dd6164a8609d5645e4963eb82acda4b15c19762ade74e1bc8600e9d2cd2a8,
+MQ = a5c4ca4aaae1333b7d55f581e347f5ae4e1a73a0bceadc29e86f0d20d77f24246fd397b88743a2d2bea997c1668c331edf0979c594212eb4ca13a2fe216d587e150bb9b74862c7224f23127795966999c50a3cc9865138391344b39e041162164e758cbd3aaaba48dcce81a9e2be30457ee190c7668c3c16904f77a22df0216c,
 
 TEST = 2,
-P = cc44dc413faedf280f429f57881d48047e6041b16774b3074e81c6d2b2753269e61db41fb6a1bddc43f4257c49724f1d2678df0fc4d05032d228037c6580ed4b35001f1c01d788c1a5e2dfd3f676b25646d7df23d62bff478c5875327ca47b0145153fb316ad2289687fbc6fc113dca2d592e9761dd0d60577a1551c1cd37c29,
-Q = f68a619af0db4e19ed9c32569b25650e4cd9d9b3949bad18ce58c77770413e823c92dea3eb0a0a41425b2a0ba4e329c42d89bba26548ec3544a9798c887a0e1bb419e73374202505ada6b63c63ba9af2b10ab7c80efe4bf752cb951e6c8a763d6fa6430c23547f2e671303bc3e9591f45696f25c2da64939ff2346f636581e0d,
-N = c4b896a7276f22cd9ef5dc8791bf029dd126ae4a6818decb05fd1180057f2e092eb99fd72e6f63d07a1536684daf18c266917849e311f68daead29a1d4b498344e5fab872d4237ff8ca196f7e5ce8209c128c6a76e056822f209deb97a2763a985a7f4d6d45b91610067bcf6e74fc580ef489573a4457853f94e571ad05a8e4d256ff3337e5ee60bbddc44f0777d6ad214047878752456303897a49e1a33e5e658664dc0511399d336cdbe68755e97221f65e823444f85e6c0ad7454d4fc26df07bb3c2d5bd416bcc6d0c575edc7d4c8afcca7a2737221a63055abf6f0dbcc7a0c0996fb94cf17650622169580333b6643b46c65 [...]
-G = c4b896a7276f22cd9ef5dc8791bf029dd126ae4a6818decb05fd1180057f2e092eb99fd72e6f63d07a1536684daf18c266917849e311f68daead29a1d4b498344e5fab872d4237ff8ca196f7e5ce8209c128c6a76e056822f209deb97a2763a985a7f4d6d45b91610067bcf6e74fc580ef489573a4457853f94e571ad05a8e4d256ff3337e5ee60bbddc44f0777d6ad214047878752456303897a49e1a33e5e658664dc0511399d336cdbe68755e97221f65e823444f85e6c0ad7454d4fc26df07bb3c2d5bd416bcc6d0c575edc7d4c8afcca7a2737221a63055abf6f0dbcc7a0c0996fb94cf17650622169580333b6643b46c65 [...]
-L = c4b896a7276f22cd9ef5dc8791bf029dd126ae4a6818decb05fd1180057f2e092eb99fd72e6f63d07a1536684daf18c266917849e311f68daead29a1d4b498344e5fab872d4237ff8ca196f7e5ce8209c128c6a76e056822f209deb97a2763a985a7f4d6d45b91610067bcf6e74fc580ef489573a4457853f94e571ad05a8e4b62a0b5574dd4b8c9c0fd7342543abdbf48ca5d137913f6101bbd1653f77d74fa35b5bafcaf67d1b5b07e6ee087091e40cb634d711a36497ea9dbf74be7012b781ea135dde5dc68f573472f659396877fb7ea10b68e47d6675131a1a607acdb3b574e143c5acd75ad368f56698089cccf178a9093 [...]
-M = 680c5f5da9d6d6567a85be43d7016fd795f49bbf2ecceb88403518dc536548b4c9837eb49ba90be83ab1b8bc106d91ce3c4b47951b2561e28dec65538d9ec40a2c0eb083048ef1dbd31395880eecc518c135bf3b16fc4e65d27e8927ac9a5527dbe716d42ef03241928563056fda262efc5ac73377554a2998f83c468f8e4a7709ef6480df63176659494fc08c4bae3eb36e94a60e295ab14844c6c28e6f57c1f703682006349c84b302e68e9daf9e41cee5fcd869fba4c84d9408c6d02f03405a780e46cfed7d80ea401f5da9eae3f1533eecb2f8351f6dd4aba4b2e8bc2e576f6d1f55a5f33e6deb9b1eb692dbf0038cf18ead [...]
-RESULT = 0,
+P = b65fc0b6aae562ce7c125e80c745a30225c6e347a0366c004290bbd75ef1905e98eaaec80a8ad13ced31573739933eb3f9b10da8b7d4eb00672ac89b5d698d8c23f581f5ee953edf5e36fa7e90487e3659cb8d51607d07fca7f3d4e3d119298d35df5b6adde49ed0621326bbbece28059960810c6c4583a2c78254eb70caaa1d,
+Q = d343076b640ec97c0367954505db0f77d08d118a2a25462841fbe543bf80142ccc218b38c8053702fee7824634f25519cb2b23797d7df95986e7713d91c96050200c2a577682fc46795a0309770ef59df5417c3d5a952b86541297b5aa24b7f59ce80123810b067b2dde60cf79cb97db276f8d7c3b452cd0bdce30bdfe2d387b,
+N = 9680ac2f1e3c458c2bbe3051c24c260dc21631e62637dd3efcdb9f0cd5f23085b62768d7b14a5939c699cb7ef905aa8088e3f222dcc1e5bdc0cd0e819ae403254f0507055dfe62ca9b1e4a92f8a2e7ba2b08a88011088f729e6935cef2301cb89c12a80a572409095292599d68ad5ad093ab7b3e7273983d71e13fb643655a44de02a7f295770a29974f1fe3358230d9357ae81dbe5c4482c4c362a8b8fd63c7c07dadef12d3b30627aee4d0e44531d5b426ae062e5ef106c987ec3ecb8bcf5c65fc7ac33bfb7bfaf2bbafd690c7bc6978097865773f780c1f2ad0616a3ecbed001f6015f022da61b4e22d2c5d2f2dd9f8de2331 [...]
+G = 9680ac2f1e3c458c2bbe3051c24c260dc21631e62637dd3efcdb9f0cd5f23085b62768d7b14a5939c699cb7ef905aa8088e3f222dcc1e5bdc0cd0e819ae403254f0507055dfe62ca9b1e4a92f8a2e7ba2b08a88011088f729e6935cef2301cb89c12a80a572409095292599d68ad5ad093ab7b3e7273983d71e13fb643655a44de02a7f295770a29974f1fe3358230d9357ae81dbe5c4482c4c362a8b8fd63c7c07dadef12d3b30627aee4d0e44531d5b426ae062e5ef106c987ec3ecb8bcf5c65fc7ac33bfb7bfaf2bbafd690c7bc6978097865773f780c1f2ad0616a3ecbed001f6015f022da61b4e22d2c5d2f2dd9f8de2331 [...]
+LP = b65fc0b6aae562ce7c125e80c745a30225c6e347a0366c004290bbd75ef1905e98eaaec80a8ad13ced31573739933eb3f9b10da8b7d4eb00672ac89b5d698d8c23f581f5ee953edf5e36fa7e90487e3659cb8d51607d07fca7f3d4e3d119298d35df5b6adde49ed0621326bbbece28059960810c6c4583a2c78254eb70caaa1c,
+LQ = d343076b640ec97c0367954505db0f77d08d118a2a25462841fbe543bf80142ccc218b38c8053702fee7824634f25519cb2b23797d7df95986e7713d91c96050200c2a577682fc46795a0309770ef59df5417c3d5a952b86541297b5aa24b7f59ce80123810b067b2dde60cf79cb97db276f8d7c3b452cd0bdce30bdfe2d387a,
+MP = 2b906e611bade30b8b119420cdd047effac93880c34e0dab80c294cd3a1e630f6839084bac458e08af9e22fbe35acef9959ccb0529f43644adb9e5c0a35acf19604c8017c9b567ba1fb3f266674de7c7067fffadaadd4973afb03a47bc6726cdfdab0a47272a87fcaf22660120b17b355def2e3710fb089a61b300ec7e2d37c2,
+MQ = a0cc11664ac719e282ad4875e67999017ccc0561f53779a82616017fde9ca7718f6fa5ddbea3a5308080f264cdacba84c968355b97be36478a9e21217309f932d1fdc31fce25a8d330b618ee3b3e1a3f0c1b05bc280e82cf1fb5242b3f53b9aeb5ad384002d2f3183be9e2d054d10629834eae66777a752aa1125a2e6ccfd318,
 
 TEST = 3,
-P = d7b28da61f671872c4f0107b295698904710f304162b9e8db1aa5b79f5cf25d8a5bfd8ae47b9bd7c2f95144c97b60ff4eec053218001d1443aedf6d82ab2bd31917075d8cb4de66201393cdd484f47b7befcd83ccd6a35a6947ac695af43d8a78a022e4df280081cc3ae549ab35a7133c3fb1ef6e807a8448b9382dcbc391419,
-Q = dc3dccdb296582bae9a006c59174443fedb0367275b2a8e04bccb686e7931c993918bdd518b44a591890613c4d310926a348d105c06d75ddf0efcd63effb536a2d3d9d6d63e47ae5c08ec2da3bf509c8345eb5fc9a3bab6c18fb768eae38a1428ba62c49ed6d7e4ba4263cb8fc339582028867c81e6496b674cc5e0aad732abf,
-N = b99183e17512c2fe1f581ff11e3327b1d2e3258a13db020560f24895feadb490c87ca215df741d4dca2527021a1da2c054b9bbd5caec1339fe06ce5ed381f081218edd71e30aad30f5107d70a3521603e66bb2c7ea852355852dc4a986a8cb4aca824bfcd756753c0559361750a9b4a3b8a8fb4f94f8f4a113a78c6ebcc18363706d1a6c3f43128076cd35dd09467a09e18cad46be938880c3bd2fb8137e0f156e627f83a7e4221fdecf3fe3972eb9c1d9014aa227b2c8a1ab54ad7beafd6bc1d1165392ddab4d04c49091a7db818022ab16b23c9efe1b0188bd10f938cea8d1495ace6e730dfeff90140f2a2b47c686bde62b9b [...]
-G = b99183e17512c2fe1f581ff11e3327b1d2e3258a13db020560f24895feadb490c87ca215df741d4dca2527021a1da2c054b9bbd5caec1339fe06ce5ed381f081218edd71e30aad30f5107d70a3521603e66bb2c7ea852355852dc4a986a8cb4aca824bfcd756753c0559361750a9b4a3b8a8fb4f94f8f4a113a78c6ebcc18363706d1a6c3f43128076cd35dd09467a09e18cad46be938880c3bd2fb8137e0f156e627f83a7e4221fdecf3fe3972eb9c1d9014aa227b2c8a1ab54ad7beafd6bc1d1165392ddab4d04c49091a7db818022ab16b23c9efe1b0188bd10f938cea8d1495ace6e730dfeff90140f2a2b47c686bde62b9b [...]
-L = b99183e17512c2fe1f581ff11e3327b1d2e3258a13db020560f24895feadb490c87ca215df741d4dca2527021a1da2c054b9bbd5caec1339fe06ce5ed381f081218edd71e30aad30f5107d70a3521603e66bb2c7ea852355852dc4a986a8cb4aca824bfcd756753c0559361750a9b4a3b8a8fb4f94f8f4a113a78c6ebcc18361bc7cbfeaf6767752c83d1e9c4e7b9d39accb83d032b54112c6461db7361bcca38f89e90047761a4a96a9ca5ab247a0a646f8267ae743817f7f76e93fd04f5b261268404cae78ebbd02c891f0573d2ea2b7bb2403375839eedb46d3d4db522ee733b273d693207897283f7dd67bb9bfd0f762a4dc [...]
-M = 83c139f4a5486bcf43ee87c40f3540f9645cb1f41187eef50b624549eecde134fe89ded6e5f9563b9ef018afae6f67462684cc4d20294d8b5290406414699f3b9e63132133f080e1e8eae55fa54632164596cbe4a37c83573f7c4161a59ececc020eeb5d97b2bf7d5bb5a95f32ba1fc496abfea74315dde1a64d067f370d360aea55a07d4ad92b15e23644bf5d6874258033f4715e5519e9baa0962a097ca3b4f2b1fbaeaa6b99ccb97b28d3ca25c1cc56ad98f7d07a2fabe9d4bcc3182b1c04aa51bdd8f97c1dc9b674282df4feefdfc4204b3bfa710cc20a85d29bd37a3f8b3f2f898cc93ae72cebd9ce4c07e158b8671c7d3b [...]
-RESULT = 0,
+P = f4f00d27527a3e1f81f6e811a1d1989b57a7fda6d52aa9714ae7fb6048058824d9e93d8ffb9143ccd5fb2ba493f5d0d812ab73465d50736631535b155d1dfb5fbdbada662e0f8723d09174ddcbfd6c4d464564f86a2e5e9f6a5914eba3fdd743418cfddd2ebfd9414c6c38482d56ad7621702c2a1f8e0787059f30c9262cd6bf,
+Q = f8456e93d02fa4d515d923928d320777b65ca03f46d654bb87c051bae134c4d39f86946d2c9a2aeb3b1918e208cd40e907ecf39a0f7ca525cfd9a045b628abc0294a6d1805a07a477e3b0a1ad89aefd8b20b3abc997e9c9a34695125fa7d80aa5ed5caeb40adea869fee63e9bc9a220b899a9ad1fe197886ef7f7d1c7a37e61b,
+N = ed8afb3e362eba9e2d937a5eb4cabe0a2aa534501cae80a4711015640a08bcbbb8ebbe5bac93bce790ddbcbc1336a4da85f32e0a5513fbc1d58cb0e5d1f9c918548b4caa67cb7cc2f3e377c3be56c133cbe798f9f3a8c8c8341b3d4eaf8699841100feee5b5b3a235c058eadfb73b43ad51fac2debcc7061dfb2cc867187d9c020c5d9dbc755eef31859856e49e10bbe8ecae34a44395fb9289b8b3dd5744e6d36ff8365361e17a3562c4408864f1ea5bf93707a1ada4d02af32bfc517ea44d1ed4f470dde1b867cbfc466c3c49262cebabc67fd2bb4b7c0c29fd14da2921fe8e9024ae1b3da91bc636e9fa81237d5b2e771637d [...]
+G = ed8afb3e362eba9e2d937a5eb4cabe0a2aa534501cae80a4711015640a08bcbbb8ebbe5bac93bce790ddbcbc1336a4da85f32e0a5513fbc1d58cb0e5d1f9c918548b4caa67cb7cc2f3e377c3be56c133cbe798f9f3a8c8c8341b3d4eaf8699841100feee5b5b3a235c058eadfb73b43ad51fac2debcc7061dfb2cc867187d9c020c5d9dbc755eef31859856e49e10bbe8ecae34a44395fb9289b8b3dd5744e6d36ff8365361e17a3562c4408864f1ea5bf93707a1ada4d02af32bfc517ea44d1ed4f470dde1b867cbfc466c3c49262cebabc67fd2bb4b7c0c29fd14da2921fe8e9024ae1b3da91bc636e9fa81237d5b2e771637d [...]
+LP = f4f00d27527a3e1f81f6e811a1d1989b57a7fda6d52aa9714ae7fb6048058824d9e93d8ffb9143ccd5fb2ba493f5d0d812ab73465d50736631535b155d1dfb5fbdbada662e0f8723d09174ddcbfd6c4d464564f86a2e5e9f6a5914eba3fdd743418cfddd2ebfd9414c6c38482d56ad7621702c2a1f8e0787059f30c9262cd6be,
+LQ = f8456e93d02fa4d515d923928d320777b65ca03f46d654bb87c051bae134c4d39f86946d2c9a2aeb3b1918e208cd40e907ecf39a0f7ca525cfd9a045b628abc0294a6d1805a07a477e3b0a1ad89aefd8b20b3abc997e9c9a34695125fa7d80aa5ed5caeb40adea869fee63e9bc9a220b899a9ad1fe197886ef7f7d1c7a37e61a,
+MP = e50dfd7d2be8641e1ba37d6c9852450562ea6bff71f48e6cc8fcdd2d70f4b9e60d976dfe2839f09b938efda862dd7a73db946e741f879a4cabb387697ac8f16543c18263f13a9f4992654bf45dd92efb22e453915b7f2bf74a628fb504f0801a8e1b7e6b214b5a7745891531106d9cefefbefa3ae1cbe85a1de9cee3f135dffb,
+MQ = 1019661d3ce215018f51cd100b5baf0d0504ba3ed7171b357e94e3faefcd5d59a641ed3a8d2ddce6922fb226cffd62efa0fc2ffddc12224dd6c28a49d9e865354acc755c15272cacb9454f55e24b971fb2e7233860f8cd26d598d18368b11814209f5765c9750588d80ce6f6cf7c9d2af462e1500cb579b34e590942358abf15,
 
 TEST = 4,
-P = db910a0fe560139b0859220b13c455580411831b4dfe766d1d921251cd73d7abff181433bdbcbe93add466efecc84adbb2ea97a29cc8441afd895fea8119b17683d920f3746b58866d2ed61af9e7096c52f2cc5a1464f8680861a2b89d0ac52dd92df9116bede5057ef18d6734ea0ecf446b2c03d643fe7a9f9ca25efcb35103,
-Q = fa14671c383f7077d76e5c4f385d39db2f74a57c59c466622f5f0e1b838e1fdb113649999ef1749f3ba91623c7a9017564cc9453d8eb31bc6ae33e98f4721ee35304a71ecf923770ec098a9efdb0eef6bc87c80628ffbedda02a94c77de081c7a586ec70d35c3c07850fcfeade1a558fc997fc090db76218fdbd8190c5b1490d,
-N = d67d2397de656108de57c7246404b38bcf54068b8af72f7b24dda056bf049d45e63ce8c33ce2071c3e6dab7a80cc02f0810140d5171cd6a7be35e83da982bea7e63d0fdce47d1dee30a7c7d1cfad114f4133632bff549bd21dde075f46f48d1df2f025d78521e4df5b580bf708dec51520c0cf62a78bec4ed765ea11c36214f8719017df35019d7c0dd30f4cee409e5a502fe6be0cdf767d3484e7eec9d34a0a7ee9946631fe26fc5005f1ee7be7510e170a371c543284f02205bd01c842a6a8a9d16d3c0d0585eb62b6ae3296751d80cb0846f766cf1a044159b89c22dbb78a3f6177d557f5f7ee404463a0e0d0ddc8a0ad80b1 [...]
-G = d67d2397de656108de57c7246404b38bcf54068b8af72f7b24dda056bf049d45e63ce8c33ce2071c3e6dab7a80cc02f0810140d5171cd6a7be35e83da982bea7e63d0fdce47d1dee30a7c7d1cfad114f4133632bff549bd21dde075f46f48d1df2f025d78521e4df5b580bf708dec51520c0cf62a78bec4ed765ea11c36214f8719017df35019d7c0dd30f4cee409e5a502fe6be0cdf767d3484e7eec9d34a0a7ee9946631fe26fc5005f1ee7be7510e170a371c543284f02205bd01c842a6a8a9d16d3c0d0585eb62b6ae3296751d80cb0846f766cf1a044159b89c22dbb78a3f6177d557f5f7ee404463a0e0d0ddc8a0ad80b1 [...]
-L = d67d2397de656108de57c7246404b38bcf54068b8af72f7b24dda056bf049d45e63ce8c33ce2071c3e6dab7a80cc02f0810140d5171cd6a7be35e83da982bea7e63d0fdce47d1dee30a7c7d1cfad114f4133632bff549bd21dde075f46f48d1df2f025d78521e4df5b580bf708dec51520c0cf62a78bec4ed765ea11c36214f69beaa6b3176219692e0b90f2a21f0f271ca9be26651c99ade793c78178d152836e9b3698d54ff3c9668874dac77604bcff530b25de7f0f18b9991e7e52b6d64ed2f3a529c907f5f4097e4d789edd251dbb8db297296a62be98cd811c07f07094c0ac925318abd6e13c43064ecdcc796992aa58a4 [...]
-M = c0604fa94d60e95b4438ae922c2bd8e063fcac1dcd692613ead86bd65c78b99588c9789a8418497b5cec3b721e46a8fbb049975893135e55c924a0268a8df0f5cb41ae33a8e01d4447c1b2768d77fd86609c63e5bdd14ebf8e7961ea17d0a36ab995233439b81ddfd0d4b925581039f6b021e47a4368b4af310a8834d015ef948c4b7b187b05bb2bd9e81b476762cfd9e79e362026da4ad5be3fa006b08ff1e20c43e397b5f0dc2f215ed9ed21b0635a601663479932d9c433b5e157bc830de9c08086455c12b33d65aa9da2b91c74648815e1529f6c156f82aff828e1d667572ab0127d7c4cc9040b0e38022e8f551a59a6adc8 [...]
-RESULT = 0,
+P = d37a1a35d6148beae16872573ee763fc6fe4d80866043ab4b8dbf797284dcbb734cc047e47bdab80589c7308e04e2f79f3e3a1b81078017166daf29dfa2ba1671e1f6bd9a554ca798e1b2a5ba9a3fdb7a0df84ca9d9031cb1d33b69ab6260b2b37580ab9f770ec38e842c08aa1600e05fc1045ebc2e5a9788e644d34cf2ec621,
+Q = ea4c5ae628ba5f043d9fa23b6d7d8d369d0a70c08d40c8174e7d6d2117190098aa99381b6e87caaa9f3f60351f731c58fde55b7a8509a7155f44d3da86e73c40a411d4a89817c7c2effc484fb9161a417c6d3720e50662c15e51c21caa2d77d0fb9622f07f7d58ab52dc42c434833f520132163a9a9c6fecbe663ebc2ba2d589,
+N = c18caf4c0c39d8ed1085c6f7b92db21293c5bbbde8b29d8dd8fc586ed30cf50c4e4393bfcf657aae15f15f2d333c8a074ded7c5acc1fb13c4e2fc6c393df7dcdd096e9d6ca414ebcca71821ef24fde0d5b787b3d37abd968977ae37800fbff3dee132a2744c9b81d19a4ca5eaf405e2bb8853e5dffa2b70c7566b8bb19fd505e494e91be4c55b8a92141d51928e2338b927ff095cd715e09dee6150312f0213084d0e0d3f75490ac1ca18d2d0ea79f3e3b7575eb6dd7c86127ef64678ed22b0a64c8db9f87a7b73f91a0d3d366fc948aef0e8c70dbf0287de0305f8a53082566272c6d3648dd208a2391e7f4391a2749630e8118 [...]
+G = c18caf4c0c39d8ed1085c6f7b92db21293c5bbbde8b29d8dd8fc586ed30cf50c4e4393bfcf657aae15f15f2d333c8a074ded7c5acc1fb13c4e2fc6c393df7dcdd096e9d6ca414ebcca71821ef24fde0d5b787b3d37abd968977ae37800fbff3dee132a2744c9b81d19a4ca5eaf405e2bb8853e5dffa2b70c7566b8bb19fd505e494e91be4c55b8a92141d51928e2338b927ff095cd715e09dee6150312f0213084d0e0d3f75490ac1ca18d2d0ea79f3e3b7575eb6dd7c86127ef64678ed22b0a64c8db9f87a7b73f91a0d3d366fc948aef0e8c70dbf0287de0305f8a53082566272c6d3648dd208a2391e7f4391a2749630e8118 [...]
+LP = d37a1a35d6148beae16872573ee763fc6fe4d80866043ab4b8dbf797284dcbb734cc047e47bdab80589c7308e04e2f79f3e3a1b81078017166daf29dfa2ba1671e1f6bd9a554ca798e1b2a5ba9a3fdb7a0df84ca9d9031cb1d33b69ab6260b2b37580ab9f770ec38e842c08aa1600e05fc1045ebc2e5a9788e644d34cf2ec620,
+LQ = ea4c5ae628ba5f043d9fa23b6d7d8d369d0a70c08d40c8174e7d6d2117190098aa99381b6e87caaa9f3f60351f731c58fde55b7a8509a7155f44d3da86e73c40a411d4a89817c7c2effc484fb9161a417c6d3720e50662c15e51c21caa2d77d0fb9622f07f7d58ab52dc42c434833f520132163a9a9c6fecbe663ebc2ba2d588,
+MP = 985a5234c69da446dc18c3aeb3f2092e0dacc753828be502c296486f83eea4cc887c50cb59ba6a3319d16cf8a2cdbd7313b500507a114bd6b23cf5a39d55e12bfbd9ba8f07b2f468c0d7629c7c42bd16c6d0a6c2266e84651b662168e4f5e7798b74513e8c8498de74eb48a59f60ef8d28d42dec8dde82de6a0d80ac8b675408,
+MQ = 4181246405e13c5d8d37f50dee203bc686f4e3b34eff2fd2cf9af8963be99805e504b0e073cb48d23ba4f6cdb012d177073c8f432dbd78a1bb752e7808e10665c48103d96c79085a85400e9003a1f00bf671c21dac9c24476ae358da0bb2824a7ae6502ce69eb2daa8527bd7de4e2d1ee228330b294e296b57609c26ed809060,
 
 TEST = 5,
-P = d9060a726c921fb19b75072e74e85a67b74f01c3c8e95585e445619713471f58e52238f388918960fd411a17198ec731ca41b4ed478bd8484ff6b6e54040311b325bf4d03ef8c5427a81fa32cb5e0c40a1b99b314ed20af3ab8395245dbb7c1f503acd4cf295c8fea98612b2e60a94a4689925c3b5e27d499092538e383a690f,
-Q = dd790e7c7a4ff19db59c8d1420137645327a6f94eb785b14a3eaa3a68281c162e74d1bccf07b35afa033c2e7c3ff4a3645f394241337332ae06cd5a7942263601648952d0767d8a4dfde22a434a3a3c002670b6420b6de9798271a715bf67956610ef85f7680ad9835a62c030a9ab7b06de23eadf66b6255892108d362cd7fe1,
-N = bbc0d72792ff6e760636d34a6c36cfc7d7a7e28ee95e03a9f1a9820d736d5add5429a0e2b10fbd27211510036602131b1f637c6570600f1b5c57eb5c4c6bebf166838c44381d4388a65b97b0371b6775897743e274a3e41cff5195999f3076c814b55bc4d6e9ed16322f18c801ea7ec5db0d2952f4a2ae7281d6c2f1e36b0721aaae65d864b299ffcdf025568b95d334c3932853f087eb0d1c34bf761ee01d73981442199b6fd1bce444cb5599ac36e017befb517b7da73fd31ba5ddd6674d11c51aff3f5bc645f1b7923303daa7f39811d836231639fd985acb6cba0fc0a3ae2937d106f93c6299b04e1affce70a7477655968d [...]
-G = bbc0d72792ff6e760636d34a6c36cfc7d7a7e28ee95e03a9f1a9820d736d5add5429a0e2b10fbd27211510036602131b1f637c6570600f1b5c57eb5c4c6bebf166838c44381d4388a65b97b0371b6775897743e274a3e41cff5195999f3076c814b55bc4d6e9ed16322f18c801ea7ec5db0d2952f4a2ae7281d6c2f1e36b0721aaae65d864b299ffcdf025568b95d334c3932853f087eb0d1c34bf761ee01d73981442199b6fd1bce444cb5599ac36e017befb517b7da73fd31ba5ddd6674d11c51aff3f5bc645f1b7923303daa7f39811d836231639fd985acb6cba0fc0a3ae2937d106f93c6299b04e1affce70a7477655968d [...]
-L = bbc0d72792ff6e760636d34a6c36cfc7d7a7e28ee95e03a9f1a9820d736d5add5429a0e2b10fbd27211510036602131b1f637c6570600f1b5c57eb5c4c6bebf166838c44381d4388a65b97b0371b6775897743e274a3e41cff5195999f3076c814b55bc4d6e9ed16322f18c801ea7ec5db0d2952f4a2ae7281d6c2f1e36b071ff42f4ce97dd088b07cde9113f69a0287d9c9b6fb3c263a729404ba3889173cb7cba4ed59226312ac46cfee56bc1e25780789b24020ba9bcca2b819510204b8967c7675421565a80a5d32162cdaa643976db78f8da6b1140d1720bd24560eae3877ee0b5a9025ec02d121dc49ddcb5af29fda321c [...]
-M = b5cfc0a5d899b3cfe97c40bc10a51f5e5239eb78b911bfceccde2965eca59d749bd770ad01221341708bbb658b359027a7a9eac1072d3d710e1355fc824327824068e1b6a386fc63e68c46f42c422bf823c5aa2f5c9f405e147bd8242fb7499c0add839ea0bd781cabae60fda1add35a5c5573284253e38ee2510007dd45711a52ffde2c11c9be58f5c8b50857fceee58aa112b6e88c8c622da538c83e5e73b732c03dff6ab8eda73002c689f9d1625ed9d23925c736e1dd0816e1198cb936c78ee33fc4d89d3b5d815373368a06fafcc0a562721cc27c1434295cf2284e59296fc7a12c65444892e27d53de9a7f6fb78d8cca10 [...]
-RESULT = 0,
+P = b9e05d51d08c92bb129eaa9379b02586e9cf4d46b0e57218d455dd8a2d1823d6896261cc35c4cec0222e6f7774a614c839014f0aa6b2b7e9f746e1beb85b78ce5fd235f32231646f64c5a23216228fbede356987ecdb9f038542badb2a7c4f1e67ed0f2daebe32619fdcdbcac37c5bf94f9f6cad04c72ac1375682d30137f8a7,
+Q = dd9ae03057e2eeb2333e3629346bf89585b56f115791c6096242b0993418347c400205af7a9ca541cb67d8a97811502b6016b102e8fbf580350c1f98f6e1bb0891a8530044a3ce48c71c978b41b61895372a0396f1f1bca83af669040c799be0dc626ee56a4bfb5f2bcc539975742f90a2a11a1583da7e47ed2bd6aedab092f5,
+N = a0e7244f2fc9ea27086d1310337247828c6e5e7e7c131762b174f98b5e048f164b40c0b2eb26fb7c605bf7f30449f0ad3103c9a138819cbb09053b20a1ad69c6ca94202627d13e97b14d3197013799e711488eda16e1a9fa4e99750dc2a7979d293315c43e569ede467b5a5e8443b60cc96bf7c8730361f1d0ee0020eec2fa39376e22dac764bfc21a751cb1464f63300418b682fb06c57a698575c25d7b28527e70bee7e67c853b48a9c05c3ba22036cfdd42d4f6ce59f3018751b2e8b57947381eb971620dd7cd91923d851a6f70458242bb66a31fa64ac583eb83d586cac9114999275854f940034858f815299e251eeeb499 [...]
+G = a0e7244f2fc9ea27086d1310337247828c6e5e7e7c131762b174f98b5e048f164b40c0b2eb26fb7c605bf7f30449f0ad3103c9a138819cbb09053b20a1ad69c6ca94202627d13e97b14d3197013799e711488eda16e1a9fa4e99750dc2a7979d293315c43e569ede467b5a5e8443b60cc96bf7c8730361f1d0ee0020eec2fa39376e22dac764bfc21a751cb1464f63300418b682fb06c57a698575c25d7b28527e70bee7e67c853b48a9c05c3ba22036cfdd42d4f6ce59f3018751b2e8b57947381eb971620dd7cd91923d851a6f70458242bb66a31fa64ac583eb83d586cac9114999275854f940034858f815299e251eeeb499 [...]
+LP = b9e05d51d08c92bb129eaa9379b02586e9cf4d46b0e57218d455dd8a2d1823d6896261cc35c4cec0222e6f7774a614c839014f0aa6b2b7e9f746e1beb85b78ce5fd235f32231646f64c5a23216228fbede356987ecdb9f038542badb2a7c4f1e67ed0f2daebe32619fdcdbcac37c5bf94f9f6cad04c72ac1375682d30137f8a6,
+LQ = dd9ae03057e2eeb2333e3629346bf89585b56f115791c6096242b0993418347c400205af7a9ca541cb67d8a97811502b6016b102e8fbf580350c1f98f6e1bb0891a8530044a3ce48c71c978b41b61895372a0396f1f1bca83af669040c799be0dc626ee56a4bfb5f2bcc539975742f90a2a11a1583da7e47ed2bd6aedab092f4,
+MP = 67830c27c130e9d2db909b1dbd1280aeda6ab4299a2319c2a686bc6f574738a6aa9fc06dce56831ad7d26f15ef68c14bfdb44378d2854c966eb240c7c40b59f3a6214750a1a5c1feff11a700a2afcfb8b991626422fd320844ffa335b56034d2d2e6cdadd5795145875bf2cb0b4623db4c18efed9daff32d22780b2ee7705f12,
+MQ = 623244924332d01f4642e4b53ae7bf06c6c857b98de3650ca1b239c63104fae9402841362d2e5e4e0ea538dbf4b089f9599db6575a64ee1ffa4a8fe3f663395c8faf229c83be857e3638bcf3db3b0ee7383c5667c7ed51fcbecacde634da55eaae7448ed179df2d068aac9a44a1d73f019be407ff143605c16f05fcd8610f8a8,
 
 TEST = 6,
-P = bc3d1913f69680fc021319177c883320f8a59784775426d4d489bf7e53cc844b4cc0526b290ee91b6ab69768de8ba1c871c34cc925f70c13c6f4a44bf0d029fee659d9273625af6501acdef02b8abcfe64558b704601402e47fab094b7c24b9b3f68e2b826b42c0ad353a22852bb1aca7e3765950186d8a220ac8d0f313d7037,
-Q = f1420334d7c754bdc68aba448ffeccf7d639f189c86ab2ff0c78e9d9c25516a20523a2a8b2e4b5bfd7fe758b2155690cff43830a1c5dd086ac5848b6cb5ce35327c1f9a0f1fecd6b633dc67a00c2a472aadd32610ab0b258ee936f3f399bb3eabb91984c9029d80d943fc3379ad539f5d70760ac14b433d8a8caa6c4f9b9b173,
-N = b1660eb7d4a7780a32f21406565a3fd4642bf46b19698d92e68ed73056312c950f237fd0837d32b9f5f08443dd364ed6cc0f6d1340712cfbf6c9c7f2869b54310f7cbce18b659725d49b304c61786d7d0a69d83929e2d4780a2cda1941fdea1f60f7ad7b0d4ba540c6973f3944528343be6d49d3f0b6618fa2a5ec7ea72a4372ed6e7b409784447a33d73e7cd6096d54df6533de3e6129a61f6764f146a84880577fe6e37b11f48e8c31fe246dc31846f9c24f1e3934dea930a80ffa3b812f14aa2cdc6e374b6f98ecdd0c8a2fc0a09f39853db4a794887eb7aa8bff48aa55c38b8a536a73562a7d1d1fbbea0328d196fa7469bc [...]
-G = b1660eb7d4a7780a32f21406565a3fd4642bf46b19698d92e68ed73056312c950f237fd0837d32b9f5f08443dd364ed6cc0f6d1340712cfbf6c9c7f2869b54310f7cbce18b659725d49b304c61786d7d0a69d83929e2d4780a2cda1941fdea1f60f7ad7b0d4ba540c6973f3944528343be6d49d3f0b6618fa2a5ec7ea72a4372ed6e7b409784447a33d73e7cd6096d54df6533de3e6129a61f6764f146a84880577fe6e37b11f48e8c31fe246dc31846f9c24f1e3934dea930a80ffa3b812f14aa2cdc6e374b6f98ecdd0c8a2fc0a09f39853db4a794887eb7aa8bff48aa55c38b8a536a73562a7d1d1fbbea0328d196fa7469bc [...]
-L = b1660eb7d4a7780a32f21406565a3fd4642bf46b19698d92e68ed73056312c950f237fd0837d32b9f5f08443dd364ed6cc0f6d1340712cfbf6c9c7f2869b54310f7cbce18b659725d49b304c61786d7d0a69d83929e2d4780a2cda1941fdea1f60f7ad7b0d4ba540c6973f3944528343be6d49d3f0b6618fa2a5ec7ea72a43713fef5ef7c9266ec06b396b20c9826d3c1085aacffea24fd23e64bb993086ad93059bf1cf9f1e55b3497cf1306de20d7188bb7f4af6e0020ebd5b22f77f5421c29c1109a60f26f2c887f2672003733f2e2a527fe356e295f7811c6c2b574c563d908fd865bc782664b58c568a15987cd6a535a37b [...]
-M = a2d3af2d8ecaee84c53e1854adf562019ef84b9d66f2e0683ee1e6b11a6c6bc84a56836aa429ec03d4dff499bc7e03cff33f51517dac8e906598b0fed1a1e04a8b6d23aa2ef6a860839db430664d9cb6115ea2eaef73377ada674e5413f58facbc9a6462b96b5db5aa8adb532616f4a96fcaf5331d37ff44af23af93c1d2921d77e85097d2302e7aefde5cebbd5f831a592f9cf17e095ac39a563a2f6dccc3e3a6c4cf5e59c53229e8b809cf1f4497513d614395b5dc0e4098494f0ef95e6e9296360862ef384a75b9205e6fb65cd1b9aaaf136aa553ab2aaab8ed57f87bd5ac86a149e133f31ce1bf6a586c33946998a1c73a3e [...]
-RESULT = 0,
+P = ba9bf9a2544b1a4813a5b0d9738f766cd5f5e488d8398bed67397339d3ba75bec86a86b2fd31656322495896987f2b76fa4310cc9d656921e30c9a715a2cc18fac8a5336e83a93c78ef08ed9698bad09535f3501ccc6e21df9ac52e1a464ddf53f54a42274b739b2a590da41a52ed5653ba86e8ca93e8a752fd9446d96e663c3,
+Q = d9570b3cc6b70959dfe260a4cf5f43ce9f92c935646ebc4308fb3f0ac233d6ea33e0f87b44857f7e08194a6432dbe4411011796ce1c634103cea99d1487b48edc8c195c3f78e5a02c6f2a1d9c4d52d1428e0630b9c582cbb91451b133d40cb6cff5efd1e9e5cecb4cab2c7845fb38fbdf162116b4b1be32736005c13f5d6f419,
+N = 9e6da9cd70c0d9dc02511af70a78bc007efc0f23ca0b71363fa63f6f32a87861e32a6dc77c52274d54b7d1e0f6dd2800b7cc0a08ac659ee529d5fd28f3fa0836142f565a174f255ebe3085390ab05a10d69c562f426988321ca49cae0462c6762a5450bfab2cccd5b773a2a0af38956b4ef4b69de64e83271e00eebfcc0a92cf284bcc7467223f8b2f1c4442fc0454103017d86da7ffe2d591287e123ffed57ca636d0f68f401d589d7b6d188def367c757bc98aa674442a50102d30d6526266e21856b5f5a3fb475e57f28da91616b18bc6b525351a5590d186dabc39c9e301f2faa51ba3de97a3cf688bc4d9d327f58cfa12b1 [...]
+G = 9e6da9cd70c0d9dc02511af70a78bc007efc0f23ca0b71363fa63f6f32a87861e32a6dc77c52274d54b7d1e0f6dd2800b7cc0a08ac659ee529d5fd28f3fa0836142f565a174f255ebe3085390ab05a10d69c562f426988321ca49cae0462c6762a5450bfab2cccd5b773a2a0af38956b4ef4b69de64e83271e00eebfcc0a92cf284bcc7467223f8b2f1c4442fc0454103017d86da7ffe2d591287e123ffed57ca636d0f68f401d589d7b6d188def367c757bc98aa674442a50102d30d6526266e21856b5f5a3fb475e57f28da91616b18bc6b525351a5590d186dabc39c9e301f2faa51ba3de97a3cf688bc4d9d327f58cfa12b1 [...]
+LP = ba9bf9a2544b1a4813a5b0d9738f766cd5f5e488d8398bed67397339d3ba75bec86a86b2fd31656322495896987f2b76fa4310cc9d656921e30c9a715a2cc18fac8a5336e83a93c78ef08ed9698bad09535f3501ccc6e21df9ac52e1a464ddf53f54a42274b739b2a590da41a52ed5653ba86e8ca93e8a752fd9446d96e663c2,
+LQ = d9570b3cc6b70959dfe260a4cf5f43ce9f92c935646ebc4308fb3f0ac233d6ea33e0f87b44857f7e08194a6432dbe4411011796ce1c634103cea99d1487b48edc8c195c3f78e5a02c6f2a1d9c4d52d1428e0630b9c582cbb91451b133d40cb6cff5efd1e9e5cecb4cab2c7845fb38fbdf162116b4b1be32736005c13f5d6f418,
+MP = 2752b8ff2caca37139cd316ca1d42dee857189317d38b9f878140215ed386bc3bc2d1838f8a7ede45f91ea09cb7ccda4a2c452736d32089e78ad45a2f3e9ce06c582c1c868d54d57b17a835152275da66971bbf293918e42a631e2275fb8e9cc89a046cdb3c9febf2130216ae279139231ba696916784142800fc10910cd14c4,
+MQ = ab8a89a061f8bbe7978cb388391031defec32d9071835ba2c89fb35d7c2107ccba974666a560a1b0d65dbafbe2bcaace6b56a66b49c50211b5c2e80b054e7fdc75dd7824aa33f996ef308b1745e64b1b36c6105e9531cc64759f690d88d0dde018165c66bdc0988e10844300a5b1accd370c4b29aa3e8b55c87a68b516004122,
 
 TEST = 7,
-P = c2b236ed0ea731dd0bd960260679265f41667d3f2f67a55b07b9c2ad642ae0d2a221ccdf84b886d3102da31ccf7f4f692fe8eb8ec2404bf6b3318bdf47f222094fa81b66b8fd7244dab1cfd9aa44c9cca0e0f8b8d54f4b488ec6968a5d72bbef5ab86bcd5188ef839bb0374059ad40000099b010410f6a114ae99ddf2068660d,
-Q = c5762c4f4f624bb041482dea5588a0b6e89ebe4dc9569524218fe6b797b0bb2877ff0384ee71f3ab080e1b5f70992a22e99b4f9a58128de318289f557aa3737298eece352ca43c2e47839be22b2765bc0fc898568c018391fcc45a9a928ed70f770e2200fff1af7f287c6296854559a7f767330e4263f6845bae1ad66213f715,
-N = 962d041cb05adcd8c8b4ae1623f19ba17ee609c4e05918d9b44da11d953f445fcc1cb266c6a0d98ed6a21b4f8df11e4a3d52f0f230db2cf6e6c693dcb961fb4df2a29d7e7e98c1e054f3d0270e6fac20dff04ea2b013a124304de32e7c6f2417a55769208a77193e54578b110f98e5355f8b911c1ed2f3339dba0f6d3416397873abf08395407d0f70fe609dfc0b0559113aeda03ba1348b67b64c3418b8d2b758fe413e5db29500a3f1beb800acc5d2612a79e43293b5f0c806bccb226aea981bb60bd25a1a92989e2f11551fade7c6956dca94d51c8bb17de9989abe2200b468b9d62e93c4e1dbd2e7c441caf31c50aeb5ab68 [...]
-G = 962d041cb05adcd8c8b4ae1623f19ba17ee609c4e05918d9b44da11d953f445fcc1cb266c6a0d98ed6a21b4f8df11e4a3d52f0f230db2cf6e6c693dcb961fb4df2a29d7e7e98c1e054f3d0270e6fac20dff04ea2b013a124304de32e7c6f2417a55769208a77193e54578b110f98e5355f8b911c1ed2f3339dba0f6d3416397873abf08395407d0f70fe609dfc0b0559113aeda03ba1348b67b64c3418b8d2b758fe413e5db29500a3f1beb800acc5d2612a79e43293b5f0c806bccb226aea981bb60bd25a1a92989e2f11551fade7c6956dca94d51c8bb17de9989abe2200b468b9d62e93c4e1dbd2e7c441caf31c50aeb5ab68 [...]
-L = 962d041cb05adcd8c8b4ae1623f19ba17ee609c4e05918d9b44da11d953f445fcc1cb266c6a0d98ed6a21b4f8df11e4a3d52f0f230db2cf6e6c693dcb961fb4df2a29d7e7e98c1e054f3d0270e6fac20dff04ea2b013a124304de32e7c6f2417a55769208a77193e54578b110f98e5355f8b911c1ed2f3339dba0f6d34163976eb838d473736ff8223dcd28da0093e42e735b21342e2fa0c3e6ca2cf1cdd36bc3edd70d9ea881a828bb6003bc0944c4647a63ebb1840dc16fcac91965fd5551c331f22367478e4257bf9a5994a41b83de4c4398573cbbcd6f25ea775ce206db596f34860424a42d90ebb2a6aec0082a8b6b4c84a [...]
-M = 59c8acecb5eb30a9d93bae41ef0cebe81d83c31209febefff13bf908a2e1a21e5f8ac5fabf986cc5e615325a6e8c91122246bf432eba8bb06cabc70fd5be64840bde5eb4d3cd5d5d5c6c6d53b687c7914bc8662cc6867f6f8dde63fbc776d4d094492ceade18b46d5653a007866dcef4af4748d3175fa5ec0ca864c96db978e4a7fa21387ba618267ffeefb49c3f8839d2ae2e15484bfb34ec8f34fdaaa4009667a2bf1305fcb49f388853ebf27e7939e234fdad9f116fb64cf69e2d28a85a45f5caed7f3d56acc5ba65239339ae50257c5893dd95206f33df883cd208d57c6d463da2854f81daab68bdc1e516c40f0a9821d1dc [...]
-RESULT = 0,
+P = e5b13dfa7be9063582e559939d5374e51730d2b9ea0c12673768d32d39f1036c2e5b22bc81cf1be059bf1e692f14d2a15f6f98ec1233e739c89b0374088676bb2c31d82db59fef9104cb8430ce642c4a7aa69e4b09aeb23651be06391a53701fafe90f8a612b99adbfac969a632bc41ea3f445fe7a0d81e0040fa98d1a37e1dd,
+Q = e5e8e51be75d55383e2f03f993ff9e6a44f3cb77d0c3b01766c8dcf0184b865a5862f09ed7793c087516ac6c46ede84dda0c0f78105b35280f5b989ce43692bdb832873b78d7eeb6e675c1a8a3fcb60b2bdb5c6b50270c09cc47fc9357842970e9c599d5dfa9f6e80dc504ebc320e7df6ff96639d9e453eaf2e5608fab734609,
+N = ce4882a1d19104c4dcaa6d054252e2764ca4927f5c5bb8dad71b1e196a2acdc9634e7f49f875f5dcef2364102e95a55e543b6df12321ad2841129aaf134277f57734061dfd3f07528026a48d422d242006c2e99da462902f9ec6bdf6ef1f374503f5265f97293b277cb73c7ba606657877db752241122f365ed0a2834ef73e0e4f84f93f1586333f95899112d0c09729b9975c155b0dc499e4f5355bfb1d064995a49c7a2cf09ea9be52062a99c4de8dad5098afe9cd658a35b91fd45e4f5bc4a9d2b6ddedbec26278eece5181b4618a456b9ad5adfb9243c92257558e7f226587723151af84dd045bdb1d7ff555ac952f9eadfe [...]
+G = ce4882a1d19104c4dcaa6d054252e2764ca4927f5c5bb8dad71b1e196a2acdc9634e7f49f875f5dcef2364102e95a55e543b6df12321ad2841129aaf134277f57734061dfd3f07528026a48d422d242006c2e99da462902f9ec6bdf6ef1f374503f5265f97293b277cb73c7ba606657877db752241122f365ed0a2834ef73e0e4f84f93f1586333f95899112d0c09729b9975c155b0dc499e4f5355bfb1d064995a49c7a2cf09ea9be52062a99c4de8dad5098afe9cd658a35b91fd45e4f5bc4a9d2b6ddedbec26278eece5181b4618a456b9ad5adfb9243c92257558e7f226587723151af84dd045bdb1d7ff555ac952f9eadfe [...]
+LP = e5b13dfa7be9063582e559939d5374e51730d2b9ea0c12673768d32d39f1036c2e5b22bc81cf1be059bf1e692f14d2a15f6f98ec1233e739c89b0374088676bb2c31d82db59fef9104cb8430ce642c4a7aa69e4b09aeb23651be06391a53701fafe90f8a612b99adbfac969a632bc41ea3f445fe7a0d81e0040fa98d1a37e1dc,
+LQ = e5e8e51be75d55383e2f03f993ff9e6a44f3cb77d0c3b01766c8dcf0184b865a5862f09ed7793c087516ac6c46ede84dda0c0f78105b35280f5b989ce43692bdb832873b78d7eeb6e675c1a8a3fcb60b2bdb5c6b50270c09cc47fc9357842970e9c599d5dfa9f6e80dc504ebc320e7df6ff96639d9e453eaf2e5608fab734608,
+MP = d12672916ea35eb87d865920e92ed7bd05bc191a026fa734028f492a38d28601316a0afbd2e050f51376d87539d9dfcf9a382ee2ac00721665db17ff78956fbf4a0403c9769eba20af166c9992da39bcfc5c432d6969fd88748ecc5569adfe61025f64c0b500e47f58ffdd2adc1bd9ffa64ed456507f4905778907932b026a2b,
+MQ = 148fc5945f43a9f859c1feded585179c0903086cfc8471c492ef1ef59591d5df2cef345c089335ead4a6cfa901af16e7bcf4590924b446c832d4be35f1bbd2086dbc3b7388d3d02d3f870abaaaf602ccf3c7e533823117508659b06bf9ec22c8972577242a1a210092362b33466372e4d83d8c126ccd72439a3befe78d90f0b5,
 
 TEST = 8,
-P = b88f60c8c0769e50608ae7193592b589ab79492548c24debe8ac7cb9f8e3327f6ae3ebe0c2fd58872caf9a2bce75c2845cea2fa0af68ecadb6ecc7ce12d33ec7a6899c669fb12956d0ea3ff86a58aca3137ca832b87ddaf76cd48235f730c354120b576500ec5ca784e3f300a1f734f1c267ff224e052f6b4f3548729f31560b,
-Q = fd62b30ef4e0f3c93c682d32877099c803a6e0f77939b4a13ca3d5ee675311b734763a197a5593504df454741c7723ede88e69399a63a86f3cbedfe1bee9f9891742e065b7bbc61a2ffd7f13ab1f57920a91a1474a5bce08836a75146d2ea71a2ce602a89be904e1bbdf7f4f977ea16f45861f2ed71bdfbfe794a2bcb73c71d3,
-N = b6acdaa07c1d66e0b574cff9a0dc31eea4c1f1fd5d205463cc6d8f6aa7ed718f1d9dd15c5a4262c62e7c995111e8199d1da0a001782260ac9ae8887dd5d2c027e7fb965b0d66115aa093f67c472aa935848dc01f3c854b768fed0470bc9e68c4cd105fd9d7b557c0d367ea0339396180fe3e7b57de07bc57c711861d4d08a4323ffece5b90ecbd0ff60c23371112768c2770f2a2249046be1f06e59723afb605e004771edb6b5aa05ab50f4c1bbadb8c91f9d49e73e1af087ff79ba7f9cb92d581483948f3ed4df92f0f2b816efd9f9a63ceccc403310ebb83978c31d72d1a7c035cb765ad6553ba25f3762c1dffd25d4729f090 [...]
-G = b6acdaa07c1d66e0b574cff9a0dc31eea4c1f1fd5d205463cc6d8f6aa7ed718f1d9dd15c5a4262c62e7c995111e8199d1da0a001782260ac9ae8887dd5d2c027e7fb965b0d66115aa093f67c472aa935848dc01f3c854b768fed0470bc9e68c4cd105fd9d7b557c0d367ea0339396180fe3e7b57de07bc57c711861d4d08a4323ffece5b90ecbd0ff60c23371112768c2770f2a2249046be1f06e59723afb605e004771edb6b5aa05ab50f4c1bbadb8c91f9d49e73e1af087ff79ba7f9cb92d581483948f3ed4df92f0f2b816efd9f9a63ceccc403310ebb83978c31d72d1a7c035cb765ad6553ba25f3762c1dffd25d4729f090 [...]
-L = b6acdaa07c1d66e0b574cff9a0dc31eea4c1f1fd5d205463cc6d8f6aa7ed718f1d9dd15c5a4262c62e7c995111e8199d1da0a001782260ac9ae8887dd5d2c027e7fb965b0d66115aa093f67c472aa935848dc01f3c854b768fed0470bc9e68c4cd105fd9d7b557c0d367ea0339396180fe3e7b57de07bc57c711861d4d08a4308a0cba83db952af659190eeb540f273a7850c88562944430f9b692eec37971cf40aa51249e186ec8e01120ac30cdf51a4c813bc42a1519eb8c4bf3f8280e5a84c37bbc7c9c805e882e276c7559859b6545c0834a005765bb935894e772cdb00dc46b5d58108ff230e53003dbe489fbfc3f3bd23f [...]
-M = 679b0aef4dda4fb273dc672497be79779823e1090980272c46f5f72b8e8af9aba16a1d23be0ed087ace6e3962e0bd03435d67c935d905257f2466851f8a62bd6e85e6aef555d338fb16ee36f6d16f2d3e8763353c8622870abfceeef551d741b7ddf160170a2549923ff462db50175cef09007cc97d897e1774b7da541d881780b869a0570c720b55998f50e879d13265478de33c6d9132eeb2d54c1e76e473b491f4b594ef2709e1111b8dcc5c037568c542764f47e9251d574b4e94cf02f31bf176f1f0b672f36d4d70998c7ba5b5330cd265f37b1a0cd5b48feafd9b27c93d4b84aa33c208647b5e4cb0e4dadd3e6874444b5 [...]
-RESULT = 0,
+P = c3f5d0401ee0c425c9eac5c79ee66ab7728b5165fc7a62a3137f704d1e3d163196a10ec9bd39ccb5cf92e4f47a1eb39b195cc2413986a0e0ab8060284df437b1bea6262f61c87c3a42d94bbd50b406ad7226e6dbf9de1571f5ea8a0351d07b9dcac64313c828267f549db880918c341185ead32ab123c41bb45256930887c251,
+Q = ddb940c75ae1e4ee6c369c220b2a1695785dfd6c76dac7f59a3c002c78cb5cbee33d81d4cf0b04d29653a097797d7bfb10f42858df7694773aa039fc8b7d3dba57eecfa2838546f5d88808ace963554f189aa08891d355b38c6ed8049b2aacaf2581b4fa24bbc43a7273a3f5635306864d602c55c6928d28d8cf8c1f3efc6a89,
+N = a9b90300e6b498d2926ce4184ee1416f477484878abaf77e21d7776b3fe0637e81a0d4f41f380ba8ed7d5afa7cf7603637f584374f70ab682110d8ab7b747d0ee6a98ea23f0eb22b8a13ff36d1c625760d1fd2211735c4cdfb9908f125bf42ebd2dee391dfda025827780a28d8f768522230d45f79f9afd984dc4524c0db7cb4bf58c6aa3247891a972aeefbf77b2cab1b18713f2b6a19ef307f28dc549545a3df57c0524e7d46702f7ae6f620eeedea2985c3b31f7cd3ed980000836e32e3db44ec449df7552e96e54232bc4d33e60e4b190916caede21fd68e8f55fbcbfdf7b137e258223d48444aeb895d2ed73b291501b6c5 [...]
+G = a9b90300e6b498d2926ce4184ee1416f477484878abaf77e21d7776b3fe0637e81a0d4f41f380ba8ed7d5afa7cf7603637f584374f70ab682110d8ab7b747d0ee6a98ea23f0eb22b8a13ff36d1c625760d1fd2211735c4cdfb9908f125bf42ebd2dee391dfda025827780a28d8f768522230d45f79f9afd984dc4524c0db7cb4bf58c6aa3247891a972aeefbf77b2cab1b18713f2b6a19ef307f28dc549545a3df57c0524e7d46702f7ae6f620eeedea2985c3b31f7cd3ed980000836e32e3db44ec449df7552e96e54232bc4d33e60e4b190916caede21fd68e8f55fbcbfdf7b137e258223d48444aeb895d2ed73b291501b6c5 [...]
+LP = c3f5d0401ee0c425c9eac5c79ee66ab7728b5165fc7a62a3137f704d1e3d163196a10ec9bd39ccb5cf92e4f47a1eb39b195cc2413986a0e0ab8060284df437b1bea6262f61c87c3a42d94bbd50b406ad7226e6dbf9de1571f5ea8a0351d07b9dcac64313c828267f549db880918c341185ead32ab123c41bb45256930887c250,
+LQ = ddb940c75ae1e4ee6c369c220b2a1695785dfd6c76dac7f59a3c002c78cb5cbee33d81d4cf0b04d29653a097797d7bfb10f42858df7694773aa039fc8b7d3dba57eecfa2838546f5d88808ace963554f189aa08891d355b38c6ed8049b2aacaf2581b4fa24bbc43a7273a3f5635306864d602c55c6928d28d8cf8c1f3efc6a88,
+MP = 28e3ecb0fe256d3d61d4238713293a4f8be8628636e80268fae41904dd0658212e6d3a87dd031089aca01e32bd167c544db969f482fc276d8589492ff91a4bbde0f65724672d09d26073f8a8e35290057df936899472da5804ae031939523f4616c364300c5098613cef0c97ad45e227a9bcbcf0644a835083da227b5703f6a5,
+MQ = af7514c936ac80ce186b4d660b8a1632d1875d36f8ebfc322a666f5d098153e90b5c3b7a5a28aa93c32e8be80de6ee057cd57d5194ec51bbf96762de3d7d27aa1b60254c8314d0f6633ec4c1158930632667af133976e9f2deecee752823ccb4a16a8c5f06782f7b2cf4a1769df7dfac16052492359d07ffab3f0db8c49d909b,
 
 TEST = 9,
-P = f1c6845b5f23f342ec7025ecdc538e08ec3c14ca97ed53e312953e42e3d362af0b27cf55c66fa45f54e7d9701cf02e24cac446f6b9123c4c05cd2183951adaf6dd7fb7e4b168cd31932c8f275571d14337bff3ff169075990eb1336e2a751fe4239379af8eed252c4697f13997d0661261366ede366c1a683d5abfb4c4f42b57,
-Q = f2bf588f42f4da33e18e68961af57501b4daf6ac30eff588f2e053107179cb09e3d094414818b24c426dc43081156c5ef95b002a59d2cd13f914507d0fde88016bf3b3308b7e6dd712510ce9799b733d9590889064690b4f5f2b89af46b2c39ea6df94dd1b611102878c5cedddb925f0fd9fce5094c5211485377ef8b0623bf9,
-N = e5425fdeaabbbcf0050a689aa496b7dd69ab0d926c80acd2dd33be2eaed04bf578f7b02e00bfa76575138d9602974fd6392b5e41d16a4f3679b250f45512b182e3652a0f463dfd6f6657bdeee772340d680d2730488657bdae4fda93ce2196da29cee8a5c7fceec50cdd1528870a94759a051f718f51590a8af24b5f2456edc6637cb36c49265e9d60fbf71baf5d2a3d04efe6799de72f97bcf5a18f912da443c62b790eeeffced2314f74720fc50118111b0f4c63d45fbe71b094fe8db2db031f73458c21f45dbd9c1d48acf76350c3fa2c94e9dade826397921218ea4e47dceddc8881748602f3717159d9ae882c1484f4f924 [...]
-G = e5425fdeaabbbcf0050a689aa496b7dd69ab0d926c80acd2dd33be2eaed04bf578f7b02e00bfa76575138d9602974fd6392b5e41d16a4f3679b250f45512b182e3652a0f463dfd6f6657bdeee772340d680d2730488657bdae4fda93ce2196da29cee8a5c7fceec50cdd1528870a94759a051f718f51590a8af24b5f2456edc6637cb36c49265e9d60fbf71baf5d2a3d04efe6799de72f97bcf5a18f912da443c62b790eeeffced2314f74720fc50118111b0f4c63d45fbe71b094fe8db2db031f73458c21f45dbd9c1d48acf76350c3fa2c94e9dade826397921218ea4e47dceddc8881748602f3717159d9ae882c1484f4f924 [...]
-L = e5425fdeaabbbcf0050a689aa496b7dd69ab0d926c80acd2dd33be2eaed04bf578f7b02e00bfa76575138d9602974fd6392b5e41d16a4f3679b250f45512b182e3652a0f463dfd6f6657bdeee772340d680d2730488657bdae4fda93ce2196da29cee8a5c7fceec50cdd1528870a94759a051f718f51590a8af24b5f2456edc47ef6d681a70d912692fd6898b814273263d8db02d509e62bb780103c3be0768ad7331577e077782699f9d6d171bf66944cfbc82b50ef565e72cf22fde8b9780ad5ffda76e50d22b4f69fac9c28560c432cdc185a5fe5017b29b554fb7926645a236979f4ca37ccc4a34d0bb238fea011261ebbf5 [...]
-M = d090a4458c347d66fe8ca3a261bdbdd989718b3727dbb6ddfee0fa647409e96eb1721ba6c78fca121300bad774d272ba81b6d073dc08a4d1c41315d5a03d5c63987e98df3ae6cafcc1a46f6187d1315cd687d65d627892ca4d44aa8c9f0562425a80cf0e8772f3d407529b03aeaafcb6d1d6b5ad9f860129c42ceb22ce3f1ba9b8c7832a55b055c768ccd23664ba604555a8addf020fdf38b237cca218b35ca7d9032416db8d816b4d97fd91b837150afeb6991f2eebc1d458f5a9966db1e150a434eecde4bf4a9a9da3ef82c4e3b834b3f904f9044107e177e27e8bba935b02b673a0b7fef6e1a37b668f54fc41041aedc1b287 [...]
-RESULT = 0,
-
-TEST = 10,
-P = ca71fa4d9d5c47da7622b6174d46e754455c3f38e4c9bfac4ed772e3e79d1a78ba65caae14afe76db2d9805e0c34c17bad8800c0fd07831a39d2ed8af36666f698250afa21a3a91f94689388b6960bd7ffe425327d742f90da3572659090097a08d3f072ba7ca8e0a15446e0212e4752ea61bcde95c7f0afa49af4ab7621d5a9,
-Q = f914647667a587add56bef880dd8010770ab191966b04586f9970334fdbe5ccbc997fdca151a86238f37136958ad4705c00144ed0b1d4267884881fe46d1a8262d37e7553e805ff85cdb74273472ca0bdcafcae148d2ee826dc33cdd966644c19011a06a7ea72efefba57837c76960bdfd1781b734c761814c719e4e0051c129,
-N = c4f8fccf346580cecfb544cf50407f3a3f10870250656ae7a76c8a4d692a942b2951856dc8b6a16ef5ef44b76913ccfaf76e6481db49e7a3c05bbd6f8c9a325002307d1b340634374d46f0c69014b606465741744c564fb70f5a84bb82c9627cc6813be22e1c374eb39c1a70b87d24c3a1c0a0dda06005cccb8385d00c9affd8a33679a7b78fc2a45d237d1ca0d3492d4fc8cc05ffc3ae5353f084ad2ded3b631f07802ca6b27a41b710b8a32d9171ecaaa49abe59eef3eb227a832fcca5dccc47bd8e6dda8f999448884ae4e052b44e07adf9e4c59080369dc54e23cd96733567bbca46076c8652b0bc0e4d0e0838f7cb70b3a5 [...]
-G = c4f8fccf346580cecfb544cf50407f3a3f10870250656ae7a76c8a4d692a942b2951856dc8b6a16ef5ef44b76913ccfaf76e6481db49e7a3c05bbd6f8c9a325002307d1b340634374d46f0c69014b606465741744c564fb70f5a84bb82c9627cc6813be22e1c374eb39c1a70b87d24c3a1c0a0dda06005cccb8385d00c9affd8a33679a7b78fc2a45d237d1ca0d3492d4fc8cc05ffc3ae5353f084ad2ded3b631f07802ca6b27a41b710b8a32d9171ecaaa49abe59eef3eb227a832fcca5dccc47bd8e6dda8f999448884ae4e052b44e07adf9e4c59080369dc54e23cd96733567bbca46076c8652b0bc0e4d0e0838f7cb70b3a5 [...]
-L = c4f8fccf346580cecfb544cf50407f3a3f10870250656ae7a76c8a4d692a942b2951856dc8b6a16ef5ef44b76913ccfaf76e6481db49e7a3c05bbd6f8c9a325002307d1b340634374d46f0c69014b606465741744c564fb70f5a84bb82c9627cc6813be22e1c374eb39c1a70b87d24c3a1c0a0dda06005cccb8385d00c9affd6dfb01ae3b28df31c1194d77d45b460d199c173b3b449a9200b820e944891c41e9b09b7b47ce80cb0750024dbc8af696b3d1b551051ca2e69605f13a6926dcdaf82609c1e7a6b907c57444334f549de6a2b1a09d0ff49622355cc9ee0a6a024f9ced63968ce48ae7313c24f35257090e6e3f7750f [...]
-M = 7cd0797293af2edfa5be6696add15b38efe84a4d345e96138a7c2c4d3ebf9b847c91df0a974b993fab29db16e1ed8ea54389d8c932ecefb53cffc57bf24673a9062d5680c776b7b32c1eb05d460afe39aab35ccac5e32bd4b571e1b8d2a42da10085b812b9a80e341007595136905e02e6d2c23738a7cb8d9457e12f1476bd81dc420f1d6f52c4e16b5be88932d230ca8676f12acb8766e59f2ea741b04c629b565035c1e5ace10aa85f4a9b8c4db27e713b8c23e55cd14806e6a4f50eaf152dfdf9d4f7b4da91d7268a12124cecb349dc4cef26ab1d2c6bf6ed93231a2967a35b484c65d6d516e67776493c965fab7bf5e05161 [...]
-RESULT = 0,
-
-TEST = 11,
-P = f1c5a7fd21c0e2bbad72ba03f432ec28a88843c3e195ae19aa81f04c23d889bd5f5ed1c8cfb7ece85de64ad715dc30c1e39e36c353f5933984b70d09fe11b7ca586647d73e242db8a7792f37dd2540299432b85c69243b1e1a658614efd4731d55120a40148733a9382871c5f593dd612c4eb265883ea81c2f22454f4f64b1df,
-Q = fdae402271d2411eb9fadbaa89e909c63f9aa6d45856ad53412671bd366cb26e73cedfcdd3b0f2440b23bb03eb976f04d184ae99742b3ebb779794190c10dff47918f2f3778f331a2bc4c03f73c09cce25c897023599ef85d4f3eaa72e2808118ce341cf0b3d0052c6ec188eb4098f657f2c259c83f80ee96cc8fa398b1a1b75,
-N = ef94e7ef4a26fa070848d885f341760ba8ae39bce5dbdbc711cd85ffe6611146bde41c669a21636c10b814a0404435ca1a93f767ce554c67833aa8352ded7113e1599ec7ecc44f0c79daa0d6c8ee12d21dfa29b6916e21214660605e193b87969de1722153b61c1666ecab264dfc8281a60f9b9fe2fafe94ceffc79561abb11266b265157da3b3478b7fe6292ce8a622a243defdb4d1ee14093f83ff4b36c2833502819ebd5f793bcf3642ae9ceb592b90885c5ea3190e5dcd95a427c3676ba6b367872aed012f01b62e694fdb4397f6ef0675bb5446bedc73f52ad02685fb5bdf4fdd4dd4bda4bb3bc6810743e130b32eeed0b8 [...]
-G = ef94e7ef4a26fa070848d885f341760ba8ae39bce5dbdbc711cd85ffe6611146bde41c669a21636c10b814a0404435ca1a93f767ce554c67833aa8352ded7113e1599ec7ecc44f0c79daa0d6c8ee12d21dfa29b6916e21214660605e193b87969de1722153b61c1666ecab264dfc8281a60f9b9fe2fafe94ceffc79561abb11266b265157da3b3478b7fe6292ce8a622a243defdb4d1ee14093f83ff4b36c2833502819ebd5f793bcf3642ae9ceb592b90885c5ea3190e5dcd95a427c3676ba6b367872aed012f01b62e694fdb4397f6ef0675bb5446bedc73f52ad02685fb5bdf4fdd4dd4bda4bb3bc6810743e130b32eeed0b8 [...]
-L = ef94e7ef4a26fa070848d885f341760ba8ae39bce5dbdbc711cd85ffe6611146bde41c669a21636c10b814a0404435ca1a93f767ce554c67833aa8352ded7113e1599ec7ecc44f0c79daa0d6c8ee12d21dfa29b6916e21214660605e193b87969de1722153b61c1666ecab264dfc8281a60f9b9fe2fafe94ceffc79561abb110773e7cf5ea108f6d2412507aaeccb033ba20f4657ae592a71d9721f5f0f1865761d4d00819f69a0f662c3cd39b77b964db657701daf83c68d1470304b944d3e7e1e84c60374dce2ee2f079d88a5dbaff350b265cb5889438849bba140889802cfd5a913eb4f970bf3cb1f6b29a43c3ec8373f8b5 [...]
-M = 53a1755c505c12b099be12a0ec6381bfd56f938017065acdca6707c7459d62d71c7bf2c702eab486f7aaa8df1c932da92c7d53917bb17a3107b82a25bbc0a9a51c3dea1d9f0177ac9c13df66400f90b17b43076ff368541736587de8cbdbbe85bed025444cb83717743a11d6a3bb9dfd2ef93d1839ce7690e71ceb389886c7f04062edad9816d976b19e01efb56a59daeab1590df537e6a147a57e5ec131a009357233ffa3e2ceab94394aa980da4434c3ee8457cc6c36796c879f559c83f165582f344418dce5353480971685ea38589240c7eed53c2d2abea0a122391d6cc8cc769c628c61ace99d5e4e6eacf914210102991b [...]
-RESULT = 0,
-
-TEST = 12,
-P = d28c2d91fada22b7206754c8d657008b5e86c8d357a43ee260f8b031fc814bb26c517e523ead32d8afdbe427b248a7950c6fbedf7be127507f5409fec13afe6c06e0a517787b0fe5b2f3ce380c6b9922ffc59cd09126ac7faa056a4066440f1aeecfb630c939f8560066a7c744e4f5dc2b247d43f2554951b2df675910ad398f,
-Q = fe526742a9ae8f13e0c3511875f4b2597bddaf28984c5a5e32f2578f4c8cdb020003100b69b835d4a5118d7e7dd7bba3285fdf855b076b3f0097afa8341f1afe4727ee6495e2fcaf5b557dd54d8e9780d7c8dd2757782c12378a75bc3d516b3f1258391900df1727b56a31c5c685249febadb1df97f3a4d66c9720584f7628db,
-N = d12adb0aa9ae5eea3f8d41f539747a077c77ecc0e752a930adaa4955785f9c6fb758140bfd81b9e5ddc93f04bb9e4ffa7fd872e9055426821322b5184a8bcc75e83c42e5bb02631975604d9e7f4056a38ff71e961d67f4177936fd58e8372e677de3db2a17eee60b40faffbfc754baefada526f9602a391477b8526a7e7106238ec0019cb332f5a3e6e5d0527ff89016629b5ae1f65db7a5e9f3d19bb08a2fe8644e75612c8127d43d67d55866ae46147b21ecb17ab3ec17f67316f5c2437aa2c8dc8656e7847c3e999c2c952cf6c7825a3373831e2a6968f5c2f80143a4e6304e4736b5c0b112547737dc3c0573492ebbb06ed3 [...]
-G = d12adb0aa9ae5eea3f8d41f539747a077c77ecc0e752a930adaa4955785f9c6fb758140bfd81b9e5ddc93f04bb9e4ffa7fd872e9055426821322b5184a8bcc75e83c42e5bb02631975604d9e7f4056a38ff71e961d67f4177936fd58e8372e677de3db2a17eee60b40faffbfc754baefada526f9602a391477b8526a7e7106238ec0019cb332f5a3e6e5d0527ff89016629b5ae1f65db7a5e9f3d19bb08a2fe8644e75612c8127d43d67d55866ae46147b21ecb17ab3ec17f67316f5c2437aa2c8dc8656e7847c3e999c2c952cf6c7825a3373831e2a6968f5c2f80143a4e6304e4736b5c0b112547737dc3c0573492ebbb06ed3 [...]
-L = d12adb0aa9ae5eea3f8d41f539747a077c77ecc0e752a930adaa4955785f9c6fb758140bfd81b9e5ddc93f04bb9e4ffa7fd872e9055426821322b5184a8bcc75e83c42e5bb02631975604d9e7f4056a38ff71e961d67f4177936fd58e8372e677de3db2a17eee60b40faffbfc754baefada526f9602a391477b8526a7e710621bde16cc80eaa43d8e5bb2a7133acdd318836e2e6066d1e655608c9da677c0933f7f9e703841bbf26e87a63b2368de2dc46524e4ca3cb598876875d4ecce961387ad3f2dad9266fa98b52e087d2fc96de82a4f98b358b90d714331804a00f6bd64d1f476bf69802d6c16702aefa092eb2a4de3faf [...]
-M = 46f6d0ca09956b70b92d29fa9c59fc13425c3cc705e0a05e36005f9fb18ee0ec705bd68e430701a54d6d77e321e0bc5f4f3bb9e0591a9fd1516c2dfdcff0e2e11d233ff20835c8bc1d087b6ba9f1e9d01fd0672cf7f6568bdf4fab7477b32f180afe78d1a4ac102fc9ca67a4dd25b4256423b616c6706ef716362f1ecbe92b4e6ed06b0c841aa66dc34f68f0c20d0c3f7e6c7547ee8d2d32eff9b11e304d9feb0c133609d0116d93926e1a5219bff9f1d3f74341cf9977b5eecfec266010bd4cbeab4dc68caede42e4bab528abad0e7ce5fe3f5810d9b76c82c8f7cdb384ac5ebbdce756c5f428b1b0b606a64f0d81691603fb50 [...]
-RESULT = 0,
-
-TEST = 13,
-P = bc3a433afc4b3d4915a1590184b033a0a4f23517fad6d6a5783ec06c7ad8f418a5d8041879446af5be0198833bf7debdc366fae06c31016eb4f9610b710dc09820047304863603852d2528afee7c87bd8019cb0eae14842005aea0b91db75520df162c2afe808e0e678a46c2dac9ae6946a781b8bb384d0d7033ed0b94f7ccf9,
-Q = f37c850814a0e7b311c7c0cea114333abfa23b892d145e09dd8bfc85849a9a9665ec9780d907539a75d71c7dd62ab5ee0aa0ee9142818e183efa8b20bb37350a424a4c610d874fbb72114fa0045b28568feff57367100514a405b408c72851758b7c289f2b22ecd0141d77cdc0e4ebf139e242ee534988cfb6145bbbd3b707df,
-N = b306dbd9c3f83a8fe52d0d642b97f77ebcaf9999817a68b70bebacf3a4913e04a8ffebe8c27a2dd72997bf11c95d28f72ceb4bc31502d666c244a610305f888dae08ddb820d9777d3337f8b9b10982cbb318d9cc4235f4eb2777bd4b7cbc06ae3dc30928df8b6302c60882ae90464732ff800e7702c4b02420a8a896ebac7455f250ac442d7b5df180b3233ead59beea0cbb439264b557df2dac16a9ad5816a6bdfda240a847c39cf02f1688be416be803366ea13ca8d5a2cc57b248b22ee679442a096b1eeb528293ae729d418ba45fa7512984f41473ff99b97666302124d2a7eb9247d2fa485bfb049c5a5a9a5015e5b86f30 [...]
-G = b306dbd9c3f83a8fe52d0d642b97f77ebcaf9999817a68b70bebacf3a4913e04a8ffebe8c27a2dd72997bf11c95d28f72ceb4bc31502d666c244a610305f888dae08ddb820d9777d3337f8b9b10982cbb318d9cc4235f4eb2777bd4b7cbc06ae3dc30928df8b6302c60882ae90464732ff800e7702c4b02420a8a896ebac7455f250ac442d7b5df180b3233ead59beea0cbb439264b557df2dac16a9ad5816a6bdfda240a847c39cf02f1688be416be803366ea13ca8d5a2cc57b248b22ee679442a096b1eeb528293ae729d418ba45fa7512984f41473ff99b97666302124d2a7eb9247d2fa485bfb049c5a5a9a5015e5b86f30 [...]
-L = b306dbd9c3f83a8fe52d0d642b97f77ebcaf9999817a68b70bebacf3a4913e04a8ffebe8c27a2dd72997bf11c95d28f72ceb4bc31502d666c244a610305f888dae08ddb820d9777d3337f8b9b10982cbb318d9cc4235f4eb2777bd4b7cbc06ae3dc30928df8b6302c60882ae90464732ff800e7702c4b02420a8a896ebac74544299e4011c8f38f5594a096e8795580ea826d2f13cca232fd7e159b7ade487f7b23906a755fc050cbc566187ac1ed73c352e852f8df6461bd863c61c85e9f0d6e1db4a058b2dff41f477fa4d4eb3f44b97476902deefeacaf00521a44b417e3c3d593d7da956cd7d7f5cddc9beebb5bb652eaa89 [...]
-M = 30ae96100b7d2eed1d36e7c5608acfe6bea0102bb31b2f50a28445d7c7e8274de9aa0b6e630fab1841d9c8c7deba369e29c7a2a502cf645803dcb35dff7ef8959751792c0b097707a9b2ed314b727851338bd985030a37f70d93a169ef3fac256781d3be35769bb3cb65047b69280ef91e80bc89318013b3fc94b60d5c9a3efa84ff2529ad8cdf0c1d85ee76458a0004cb29f2fdb013256f6cada115b92d7d6afb722405f18bb36343b1ee193c9d74c01be3a2a50be8b2ade9a3f40747c57b68e2c33e32a20613fce1ebf59d836d6b747998860c206fe86ad1f79c4dbc7e9f4fbcb4db9e21affd64db1dddf8f08fd81a8d66e3b0 [...]
-RESULT = 0,
-
-TEST = 14,
-P = b9b95de74e1e67957fb5c8709692cf4abf99b52c4042ab71809f1d59a6240dfa39504b139aaf1a4c1424cb906f1d7fe16ed75b5f87ac3f342b4660b00fc3945fa72b5faa54ba3dbf4af4970541b98731507cfb9bfee4c6e602e064b35b053ea60d6db7cdd304a36c61cf5e8d26d3330f9c01d39046a67bbb87dbc11e5d85b4b5,
-Q = f4de8709eb5de060e2e1db77ada0b5f3ccaac397eeff1dba8ba08c857f2496b4845366cc5938f57133e7d319189aa667f8beff15aa6cc4ee460cef8861be7ccf1265b71208ca7a0157c28cdb5f9d65bb4d6d4998ec4cc14e53911d817b9a8ecc1c79def087eab7bf7ded509473dd284d35ddb3c0bdb692ea3d144457fc18166d,
-N = b1a61e37d7d544bf0713e28d608bbaed1da9ec51e1d60a20ff57233d61aa48079651f40fbfc3e098a05b097e57ae53852c4f5dfbabda4482a9a14ebb3887bce59bdc5dd1c598421687ee597e40173ca02d57450a45c72bfa78a45c394c9109785ae710b154f57bbd5a7fa1cd6a481a3f4cdb54a30bb2ccafcda62d15262d6ddc3c12aab83b15658924d61e1c500e7bda182497b7a4deea8922f09fafa5aebd48d31ef009b3b2340322c3a2281dc64778e434365f1cad13a776da46e7f63644efe7af11cf94e639c3dd9cd1e9fdc25c8a09c7686da2b62b92fb88c3b307dd0c973318b9db4921c2a1f6e4390011c3eaeb5a06f439 [...]
-G = b1a61e37d7d544bf0713e28d608bbaed1da9ec51e1d60a20ff57233d61aa48079651f40fbfc3e098a05b097e57ae53852c4f5dfbabda4482a9a14ebb3887bce59bdc5dd1c598421687ee597e40173ca02d57450a45c72bfa78a45c394c9109785ae710b154f57bbd5a7fa1cd6a481a3f4cdb54a30bb2ccafcda62d15262d6ddc3c12aab83b15658924d61e1c500e7bda182497b7a4deea8922f09fafa5aebd48d31ef009b3b2340322c3a2281dc64778e434365f1cad13a776da46e7f63644efe7af11cf94e639c3dd9cd1e9fdc25c8a09c7686da2b62b92fb88c3b307dd0c973318b9db4921c2a1f6e4390011c3eaeb5a06f439 [...]
-L = b1a61e37d7d544bf0713e28d608bbaed1da9ec51e1d60a20ff57233d61aa48079651f40fbfc3e098a05b097e57ae53852c4f5dfbabda4482a9a14ebb3887bce59bdc5dd1c598421687ee597e40173ca02d57450a45c72bfa78a45c394c9109785ae710b154f57bbd5a7fa1cd6a481a3f4cdb54a30bb2ccafcda62d15262d6dda8d7ac5c701991d92c23e7a340bdaf69b8be01ef3759d215d16b0f5d08066189a157b3e29bfca2445dab7037e960e212f7c9ddbe9ea940f850586f6af84b433c12e1dfb13376182033ae5ae095c6b6f9d6bdd2338b784a35ea517417e313d3f250931231cee326776172789de77138f8e88276ce8 [...]
-M = 8e5b840ed9ea0f9231f42589e697e847153bc2437aa16c19afe91185bcd76d776305064d626f1b56cc1d288b78166ad69142db5fbd2d35dc2f4df0e66366403b4f61fa9c1ee8515562550aa8889bc113305ab8cbcadccbd9b749628ea0f280d11b93fc9e9593b0f5425dc7603f851a53f64d13e357313b4fd952f0ee36a99638c5eacfaf3fd034310493572e80baad7390472eb15bd1b0065f0f7922b99691c21f1c2836fd7cec48e4817434283e7051b029617dca7ed5a711cf10c3947305a17b49cbaa96a0b2225be422afd03db138c1be0f690bfc0c55de8e9152710bfd8f793357048575a43aecb4612b21eadad51af04d5b [...]
-RESULT = 0,
-
-TEST = 15,
-P = dc724084b72963a309d4287edbde39b86aeb2a86795cf3b41f471eeb93d83a5fac69048271c9875429eed7c492c196c2aeed740070db8e80bfb8d73b5ec6000fc3e775ad333db7b6ef22762d2775085092079137d2f4a3716259e87705088435a455b2340d1afc13c51ff49134d5156d08aa1ac5ca0bfe7cdf916738dc927dbf,
-Q = eb2447bc7b69ba3de2f53539077dd5a23ec4ae14194f953ebae24016be75fc3c72b5caff38c7f1672d1454153c84681e1a7581a3e9bfe71c228c6db9e20eb9533ad497893a03a69e7b6620b84d96534fa3151e888c6dadd4aad566ac91b648a62244081122b99cebf137a53352a0283f0cc7458db12d65eb6c86e9f453fea6bf,
-N = ca7c1f10e4dee0c831f45a25cb8328661954b67e1c5be2ea81aa3db6c35b9807b08d9b7210e07e3103987e8c4c82c0ce4eb5dc1315b3a8d12cca7614a590b9ca3359293d0bb31ca4cce94567e9b099726ffacfe6422c14866efbaca4a535e6e1085eb2862e4d8e9b2ac3369150dbaa51fa3346e7586bc860730b5dec1f19b48873072030162f45522035a46548af3d0d34f00c8107730faf2b57395cd4a29857fff8baf682418ab2005e5e0638277264923605bdb2cd62604a2212bef35b7d855ca0219de18c2a2eb8fdd56c331444514d42fcf9cb7816134f8d8edfd818cf886f77f9c70eaaec7b683f29b12f97cbc790832643 [...]
-G = ca7c1f10e4dee0c831f45a25cb8328661954b67e1c5be2ea81aa3db6c35b9807b08d9b7210e07e3103987e8c4c82c0ce4eb5dc1315b3a8d12cca7614a590b9ca3359293d0bb31ca4cce94567e9b099726ffacfe6422c14866efbaca4a535e6e1085eb2862e4d8e9b2ac3369150dbaa51fa3346e7586bc860730b5dec1f19b48873072030162f45522035a46548af3d0d34f00c8107730faf2b57395cd4a29857fff8baf682418ab2005e5e0638277264923605bdb2cd62604a2212bef35b7d855ca0219de18c2a2eb8fdd56c331444514d42fcf9cb7816134f8d8edfd818cf886f77f9c70eaaec7b683f29b12f97cbc790832643 [...]
-L = ca7c1f10e4dee0c831f45a25cb8328661954b67e1c5be2ea81aa3db6c35b9807b08d9b7210e07e3103987e8c4c82c0ce4eb5dc1315b3a8d12cca7614a590b9ca3359293d0bb31ca4cce94567e9b099726ffacfe6422c14866efbaca4a535e6e1085eb2862e4d8e9b2ac3369150dbaa51fa3346e7586bc860730b5dec1f19b486ab7097eee39c2771336c46ad65532db28b4033e674c686bc512dda5a825461bbe0d9eb74d7b011f6a95b322c68e17383c8d310195831ecc367dccdc9b286c4225de41467744acbd94e753e86be08e8b118264d396c15c4cd425e3fbc415a02aca8de3f81ded6537bb1e78feca8228e1b7b11c5ef [...]
-M = b96bd62f98fcca19a8ab87d343945e711a4d2963ae848c95be15b7c3a17f81751ddfb8f6cf5cbca8aa39df7ba94516c04a3e0a0d203bb54ff243691743e0d73d143792d0002e3af1f6ced306d9a3608421e6aa6aa59a042f1ddbbfdc814f04997b6d89e8b7332ddcfe96794000c1e691bf21eb7e2ca589ed495a26a045cf49037fdbea98ee3e7b946a12f7df6692ef3c40784e48fc0405772f03e6ddc171fc8f9459e99173808245178bdb38ee9582fe3b94521560a04c51473c468d9255d2de62c8f3a42d153fb039fa6fe0b97b3bf7002de44e1d977c1ae02dac02bb248f53ce998dbe01edb1f59d29dae421cd0c9c642a8081 [...]
-RESULT = 0,
-
-TEST = 16,
-P = bd1360d4900e7c6dd7cb4a087a1c7e13d226acfdaccd4bfafec9f5bdd2b7bd721298681132aebfa7253295244c6da3cd71833a7187bc9b8d961b652c0d5c913ac953edcc863b35796b32d090845779f673b3a46bf20f01f4b0725f1d6c3c262c652b37f5b34e0f0e9d3f2a13515aa9a1e60dd1448d50a6c1e054d901712dc7b1,
-Q = cdb3a18a7ec1274158948bc72dc7a7611f18763dfa69f8e6214ec572305789c56b8c3f312b3bc3caad2491f1b8132d6d846da44f01f4e59eef823e1a4e9765e3399844429a79c07d3506c76e89b88444d1131333b540274fd83f77651c0cecb34a9cdf402dd860a08eb83ac042f51102cedebb8af95d1f431a184b9c3c140429,
-N = 97ed306665f2673690ebe929105f530511b7cfc349dcd81d6e0c99d416544ecd412ebfa044c20a56a436e8ff7ddacdfb07032f8da798d87e5bedfdf1908bdaa8e89b21c82206ff7231a100567cb421e9ffc852dc710ca618ec24176644373cae6f2d0fdbb22dcabca63e2d77b3f85ec089fc31a5cbf8a1b47cf41ea5a0c5cba205fbeb8697a66ccfd04511258c536907e4bd8d187912e7422bcdc494b0d47eb9a3cff44942bd4bcbd717bf6e61721224bdc46e5986a31e57ae4632b8aad57c4e8ae60fd39bd8fedb5856668fba7fcc48308b9afd721f6eb72967bf2913bf74f6ed47777dab7cf49c2a82608349c46e58d10d25ca [...]
-G = 97ed306665f2673690ebe929105f530511b7cfc349dcd81d6e0c99d416544ecd412ebfa044c20a56a436e8ff7ddacdfb07032f8da798d87e5bedfdf1908bdaa8e89b21c82206ff7231a100567cb421e9ffc852dc710ca618ec24176644373cae6f2d0fdbb22dcabca63e2d77b3f85ec089fc31a5cbf8a1b47cf41ea5a0c5cba205fbeb8697a66ccfd04511258c536907e4bd8d187912e7422bcdc494b0d47eb9a3cff44942bd4bcbd717bf6e61721224bdc46e5986a31e57ae4632b8aad57c4e8ae60fd39bd8fedb5856668fba7fcc48308b9afd721f6eb72967bf2913bf74f6ed47777dab7cf49c2a82608349c46e58d10d25ca [...]
-L = 97ed306665f2673690ebe929105f530511b7cfc349dcd81d6e0c99d416544ecd412ebfa044c20a56a436e8ff7ddacdfb07032f8da798d87e5bedfdf1908bdaa8e89b21c82206ff7231a100567cb421e9ffc852dc710ca618ec24176644373cae6f2d0fdbb22dcabca63e2d77b3f85ec089fc31a5cbf8a1b47cf41ea5a0c5cba07b34e92788d6c9209fe53b55e46f4392f37e69dcd1dba2610bb50964adc5378225ab4d06e4d2c85a04c098585cf140e9c7d38f98fcf19d2b28a88f724ee1853087f9ddc47b2408e4b81cce90ac6fce0cebc4e35dcad04572a0b5e8a68b7662173d7f6047ca5684ecfe8afbafb574b3b41c2098fa [...]
-M = 89cb928a0ee0d5f523c7e9445114d85d009ec7581999a5b7e58fef7e9c07220a1a2e89a7f70b988a56170ff7515ec389b5a8dbf5050e80a6aca679a4e578b5883a8e0d794496a4123ead19c47dc148435aa1ea310baa13d887cadaf48251db98c07ea162d5065b5e47ef6648a9e3ae7fd07ddb6db37a294456638d2dabb95ac24daa77c748dae1ee1ded558ea344215d53dffff11ccaa698ddfc4cdcba52528c7edec1630e7fc781daaca103167e39bbbd97e626ce7e14b876dba479a3944252112c0f0986afdfdc3e014ba7574bfe226359de9d8904a6b75acfa63fe3b1b5d7d692b8a2a95124bad143d43d47c094aa8e47e679 [...]
-RESULT = 0,
-
-TEST = 17,
-P = c7e720fe329705cfc573137aa8c424c80d772a8ded46fb47a5bd8183ab25348f8f8354abd3f55621e2489b12055e49b02ccafa647ce7f6834d198d16ae7c894696b8937652f3b1313aa5bc3a0953edd69a316d374a7cedd584914fe7b49f764885db2095be73c649a4b45fb0934d344be1e0b80d25fbaa4a391408151c6ea7ff,
-Q = de9b77fe4feb6400c4ef42baf4b4108ec5de0bc66e869ce3285de8d92658f148d5195a2ed90283c6e1fd9f9f682f87e9e42c770ae846fef55881debe8433601a00ee90768524f691dd2d130585012207468ebbd12f0fe3a75b26339f7b1e8f036c38c661a3230873625a37b4b7c93c35f1060ffe5886a897a8bc026451822803,
-N = add3d5406fd8a0a5b531d1d60158cfa5aae5873fa981e1a4613bd678d2e5cb9afd92ffde8f626819c011777fe037302d768a6768db0e3b732c70dc49f8eac32c04a8048d5847c8fc28aad05dc350e35897d2260f60d74e13ee01bfca803ca925a0a0ffbb80e1e5f04bb68edd1e1cef976db56824c02ab6318c4c7902bec4bab8caa227ad0ccd78647e70bd3755aa1f6c32ba2a7e160d207f8cb53bd187d051c358592b5cf6719c6ecc3f545cb4f4bf5ae34ea46e6580b8956b55d799aca02635275633c3b90ae4f38278f901f78cd8e2384d6889da33abf99a705aba78a24bfa84be773fb97940f22cc65a6039a7e12ff13e7502 [...]
-G = add3d5406fd8a0a5b531d1d60158cfa5aae5873fa981e1a4613bd678d2e5cb9afd92ffde8f626819c011777fe037302d768a6768db0e3b732c70dc49f8eac32c04a8048d5847c8fc28aad05dc350e35897d2260f60d74e13ee01bfca803ca925a0a0ffbb80e1e5f04bb68edd1e1cef976db56824c02ab6318c4c7902bec4bab8caa227ad0ccd78647e70bd3755aa1f6c32ba2a7e160d207f8cb53bd187d051c358592b5cf6719c6ecc3f545cb4f4bf5ae34ea46e6580b8956b55d799aca02635275633c3b90ae4f38278f901f78cd8e2384d6889da33abf99a705aba78a24bfa84be773fb97940f22cc65a6039a7e12ff13e7502 [...]
-L = add3d5406fd8a0a5b531d1d60158cfa5aae5873fa981e1a4613bd678d2e5cb9afd92ffde8f626819c011777fe037302d768a6768db0e3b732c70dc49f8eac32c04a8048d5847c8fc28aad05dc350e35897d2260f60d74e13ee01bfca803ca925a0a0ffbb80e1e5f04bb68edd1e1cef976db56824c02ab6318c4c7902bec4bab7241f8eb08a4b0e93f40e6701b831ea155f64f429ba3f8854be99d174b6522beaf3bc7c824979c28607f919ab4766edc0d25732ff0051c31cc5ba6bc479f03cd48faf0fd6e0f23d306aa629c26937c904578d3f8160a6da7cbab8d73348e446ae92aa904857e2723525b7c2faee9170ae1e57acf7 [...]
-M = 13d53d19448a221c3639c37806c88040a742140bddf4f1af47b9cb8abd598a5b09767a4550b78c1ecefd42ec652d753bc27ba1cc64d1d1953bf2a53ce8a7c206caa91b9d987b8e7789df4aad28cb7f7e681fbfc6d74778dab22c3c922a969f5de6744054a951aad37deaf8851a0fef5f224430d097510f69dca97f3118d505d318192201913e3c3b4eaa2cc28c7958450e944226d6a98233939eae1b165a8ae88ebb46b858e6ccc2acd0332af4b1450292e039acce9fc7473493a0cf2fe5e438b6e78cde7b9752b09fa5c6668cad13f8765304671e21bdcea6aca4971df35c77057fe8788001c10e4c9f58aa2c67b0980814b69d [...]
-RESULT = 0,
-
-TEST = 18,
-P = db92fb5bc99fa880393b583e3b12a284f6c0cdb0d5c178ea039b207e7fb81c5d6d92ed9d3f856f3ccbaeaeab49384c7228fb8bea4337c433381c17bcbee4276b1a041b95f220a407d56b0ce14041bd81c53b10bb9bc1bc49e48a0e1f8288957dbd4fc0ed4639419f0da3a03d053f647f0e7c3ad9a407c0037343a10984099ca3,
-Q = f2c14eeab29bf85f1b8a680fd897d739d9ba78797959ceb48d77ee03f8744b9409cbaa422a3c946991975cefd9e3def636984582bfc0c101932e5ad3803f23a0dd466a2c9ad851c21b3e729035aad6ac94476088f39ffc7475a7975ca62a841c9e301dc3537a4843259034d87dd12583594a91071e2ffbfbd922db1dc4613319,
-N = d036bf1c5aeda1c8297bd602e60c3a621e1d677d06c8f8e683ffc007175411cd4c57d2dfb6c8a4ba7ffdd74f9d9863e20e96e6779e09d4b342bfe79c1199f0e454a2f2d8a9f84c4647e2e742404c89162bbe0ac9d1c3b81637a55ae93d7a1be37de25295f257d5fc55150fda0a8789c9320c4818e800c64cc158b3e134b852761a73d119469403125151475f28355dc38853286128191098adc1e9236527bfb6d9a28127e1a741ff4c229e9afba65ed3d38d96e608a66f0866118f14c0ed161ac429fc0ebb89e77c611710baf1973433622c12ce94636ef19e3af55e8e1ad1c012ef37bbb731d41907ce53018928ae90bbbab9ba [...]
-G = d036bf1c5aeda1c8297bd602e60c3a621e1d677d06c8f8e683ffc007175411cd4c57d2dfb6c8a4ba7ffdd74f9d9863e20e96e6779e09d4b342bfe79c1199f0e454a2f2d8a9f84c4647e2e742404c89162bbe0ac9d1c3b81637a55ae93d7a1be37de25295f257d5fc55150fda0a8789c9320c4818e800c64cc158b3e134b852761a73d119469403125151475f28355dc38853286128191098adc1e9236527bfb6d9a28127e1a741ff4c229e9afba65ed3d38d96e608a66f0866118f14c0ed161ac429fc0ebb89e77c611710baf1973433622c12ce94636ef19e3af55e8e1ad1c012ef37bbb731d41907ce53018928ae90bbbab9ba [...]
-L = d036bf1c5aeda1c8297bd602e60c3a621e1d677d06c8f8e683ffc007175411cd4c57d2dfb6c8a4ba7ffdd74f9d9863e20e96e6779e09d4b342bfe79c1199f0e454a2f2d8a9f84c4647e2e742404c89162bbe0ac9d1c3b81637a55ae93d7a1be37de25295f257d5fc55150fda0a8789c9320c4818e800c64cc158b3e134b852744c1f86d2ca586232fc8b8711148ae404b7d7e236d8fdc8fa1caedaa0ecfb57c56243e94877e53e58eedc92ffd88a336b73f9c57905ade9d39ac71c8481c9cb0eccdf764c2e90f1b2706d91497baaa00508a9a18a0501b63344094fe26567b825b76f590b1d7e4a36d49a7dec0618248e53f3edd9 [...]
-M = 88b0548a673440af4de1ba9613d64ed5abd75fad393ff5499cc106740cd1af26fb02b0147bf282613026e928a8785e4c1384c9ccffc9a69ccbbc969a66e0cce3e17838ba56c9442a30910441bf0e3a703c3db45d9e5bfc1c8f0edc523704f7346828e18d1fd41d0b292db433a557b2bd1c32825822605a4401b1fa6980295cd9ced0f6b13ada70bb05f59ba61ccd64a93db71f84946ab672386fe1e24f3b8900c157f096d0923bd2744d8466798ba005f01e06637fe00ddcc2e7890e1c042c83c7b801d709447454bba1a88fd55e7152985dc279e564940bb0d9f944370193b705ccbc85450c29a980a582b87d1acf07c9d29116 [...]
-RESULT = 0,
-
-TEST = 19,
-P = c353fbe24576c2aa261d59153dbe28c3acea939188faa84190c52efe47510e863e9ebd192b1208c636ea58b2d6561f97ca1d5350cce110f4cf1b5e282233dbd43897407560e4724c3e2dbbb9743806ef1275cec324ed79b75cae7d90af6a0cac4b2e98fd679bda17a85ca6783acb331a45f0344a3c8309f347f27faa3daa6f33,
-Q = d0a9c6b3922de31e9aa372758a8276196e312aecff9cc20e08652da0feb20f43eab9f7de0192b3cf3784f7604e67b037b12103eb01bb1127d46b1aa840aa22689f39b7798d9dbf8e7e7eb982163400646cfc692b640a8c8e8a5ac1e3397f87ecaf26a760265cb100ed731d1b29b581d82ac8a0e74a6f931a89d0cf94b52871a9,
-N = 9f35c6b518e3633652770c8ab2e07891577f9ea8bfeeb3f5d357d17496169a8d11b431dc07b4ca84755e2200539d871b6db3122d6331f4d6ed8bcd67b8ff05d78864e811a83fb264f43eed4c4c549582b83d5038d84c2f58db8586df7a24cabb10ebb88aa6fe952263479f749cee306bb53a8ad4921844c2710722bbafcc2eb655a761e9a8af22da781801f7e433b5f88e853a46afcf6d861dfc872f788d8f0818c0bf70066a9f5c4862e188810639c1b7c23e1ce006f84399d046d71100a9a4fd879495a0c3f1f751a96bdaccdedb326da8593c77fe20ee2c6bee7cab2af15ae5007113fd12c862b2a9f65dd307e70399b80829 [...]
-G = 9f35c6b518e3633652770c8ab2e07891577f9ea8bfeeb3f5d357d17496169a8d11b431dc07b4ca84755e2200539d871b6db3122d6331f4d6ed8bcd67b8ff05d78864e811a83fb264f43eed4c4c549582b83d5038d84c2f58db8586df7a24cabb10ebb88aa6fe952263479f749cee306bb53a8ad4921844c2710722bbafcc2eb655a761e9a8af22da781801f7e433b5f88e853a46afcf6d861dfc872f788d8f0818c0bf70066a9f5c4862e188810639c1b7c23e1ce006f84399d046d71100a9a4fd879495a0c3f1f751a96bdaccdedb326da8593c77fe20ee2c6bee7cab2af15ae5007113fd12c862b2a9f65dd307e70399b80829 [...]
-L = 9f35c6b518e3633652770c8ab2e07891577f9ea8bfeeb3f5d357d17496169a8d11b431dc07b4ca84755e2200539d871b6db3122d6331f4d6ed8bcd67b8ff05d78864e811a83fb264f43eed4c4c549582b83d5038d84c2f58db8586df7a24cabb10ebb88aa6fe952263479f749cee306bb53a8ad4921844c2710722bbafcc2eb4c1a99f53d10a7d11b757366d1bf3171b73697bc82738033684d22a90328a713def680a78d9c5e2c6d9f391755c4869f23c83e6e1116ad626f649ce06ae22ab6825b69ca6b241c01c94fcf69f4272d3deee36214def061aa84562af08c2415cc1eaab30b66f1a3d4a1cda32ca6e87321128ff32f8 [...]
-M = 981a3d2571c16ef4e3f952c8f9d22e20b2efcbeb725126a35d95dc40d913fc14dfb1fb6b7084c593c4410beed3ac2dfa07b4d3805dd313a676a699a3d3f426194f12c987db21d0fcbc1c3615b92f42cd9dccb130033438ad8e16132fa798bfdfdb50215c06614f3f0da0eeafa6b6633ce2abfe23ec68862c395cd5b2e161ec9a19f09c2f4281b3ed0daa2f3c42973381ab79ac5fa310858d793cee478fa176234768f58d84fea9928ce020993f7534e7d7ca087f8e1ca257bb05aea712554318803e211d8bf5108fca2972c172cd0f0a22061f3fe25ac047eb19482d0a1a0af09b2145443a9ea8eebb8639d8c9590fb37fee0811 [...]
-RESULT = 0,
-
-TEST = 20,
-P = b513709715cdbf119b6118aba4d1907e4f3ec0c04f8fa7d34c90046759bada35daa5bf0f93b55a588d2885595aff8c02616451e4b657e0e33f5b8971701157b49810ff0f76983a937209c76e3a0ece12c4a595a830165df17417385c7aaf2744d43ea449f665b236711088ee1828523495b139e899dc202137e737992215020d,
-Q = b97d8ffb77ee62fbbda57d442b1b37f38a0910f36499023554a3ebeefbe2f0df87e51b1860e793df7dbd1c734b0c1ee85b5e35b0e0ef829f0edb0bceb876ef421c04d33142db5aba7a6709cccc7c77452f9161fa34d0036bfea0e3faa15c19c8d3f73b5566a400c3cf30ae027670b77fa2d3d9a62d2e923d8b69ce314dbf0f75,
-N = 8333dcb2e34fc546bc3dc1217278cd92d2d81305cdcee9016cc7361eb903d141ce2205ad747c93a34d357472cbdc0c4f34e9b218f4415edca4c4b1a46d044c025aeb37e0979cd1f6731fca0fdd982f6020fa9e54974dd11efc8a3171720338989266873d5bad1e2182dad8e314030ac4f699948ae3baeaf39a62dec4b925dff76d9a9e86a9d9fbc2403ce8cec56db9ba1c70cfb59c6ecaa991617c5c0a9f2eaf4f23faff1f147bd04e42d6696a7785f82c9449a84f13a3f992f4e8a02e1733c961c035650f2fb1b090c4601c855ae4a012bf4f6c29871c900b76d76cf72e5eee1de1a6749fad343d062d085276f45de0ae903313 [...]
-G = 8333dcb2e34fc546bc3dc1217278cd92d2d81305cdcee9016cc7361eb903d141ce2205ad747c93a34d357472cbdc0c4f34e9b218f4415edca4c4b1a46d044c025aeb37e0979cd1f6731fca0fdd982f6020fa9e54974dd11efc8a3171720338989266873d5bad1e2182dad8e314030ac4f699948ae3baeaf39a62dec4b925dff76d9a9e86a9d9fbc2403ce8cec56db9ba1c70cfb59c6ecaa991617c5c0a9f2eaf4f23faff1f147bd04e42d6696a7785f82c9449a84f13a3f992f4e8a02e1733c961c035650f2fb1b090c4601c855ae4a012bf4f6c29871c900b76d76cf72e5eee1de1a6749fad343d062d085276f45de0ae903313 [...]
-L = 8333dcb2e34fc546bc3dc1217278cd92d2d81305cdcee9016cc7361eb903d141ce2205ad747c93a34d357472cbdc0c4f34e9b218f4415edca4c4b1a46d044c025aeb37e0979cd1f6731fca0fdd982f6020fa9e54974dd11efc8a3171720338989266873d5bad1e2182dad8e314030ac4f699948ae3baeaf39a62dec4b925dff5ff099df41c1dd9b4e73652def580f1484328fe01e84620a0f02d8c05b5016399ec9920d72a778d98435d349cc46bdb0d6fd1c212b7cc407744be5360058eecd2adaa632455bc1c62a4538ee17ecf9f481e8857c9c4a0bb3298bebb15db231de075abc6d542a38142c5ebd161e85b542c760b1f84 [...]
-M = 60c11e82eda61e7a90a2400dd7b1cc31b51e4dc57bd735a8c37e1e79df27eead604394f75d78c41df37552f9ab3ee85f299ea36bb54c8285eff0af94420cd796e3a8529ac493094fa94445be822f4ebd16c8d3db208a60104d6a259819f686e1439b25a1ef38acb85cc98e93fa7ce240787347eed037a69f4adf76b185669e9a4619ddc4e04bfb668fafe3cb124076299fc9a14e82f42d18b578e163258fdc9d6c1e86cae55baf789aeab9eed7d17c5b4fdbc87f62e7abb6e777c278532e1cae95cd90dd84a52a5fef9a6f0de3b0d4542a5ffab1783c02e5caead78bb1afc407a56bbe286aca1314a20bc650fcd577f1a4b1120d [...]
-RESULT = 0,
-
-TEST = 21,
-P = d224d0e119a74a16b0b9859033eab38af6276ec4a69d7581b4269e5d98df5295607d3dbc0893c958d659ae4689e0385e696e43f613d212e8d67b2299322b695a6154dc113d59c741fa689069152dbc57a5c7e1cc1edf008759115983ab5a39117c1da4530032799860f2532d9104dbc22b35f8be5bf79ec2000c0a07497d10ad,
-Q = ee8a45651fadf5ae44bc2a74bc6c54c733e8737a0700994a66a1973e34b92254a73d8dbf275bd8d0d0634b4469c7fab7988894c8e2c52f4597da3e73794058a8774c75dedd8c8387dc2ec89a1321854543ebb883a9d4f9313961ebe75d15360041bc424ecaa1cfb9d293490236641207686eb83086be7f6114a3128cdd5a475d,
-N = c3cfbb00ce05b1a0f21352b5324887aea4895899d8fe464d6085b427db01a5213673832683c95c3cd15010bf24909b153867ba83c57c9d7c1a831613736448d9e213780093339fe1b90312034e39157fe87b932a5e936a255832c9e35b876422be06bfd805f311f457b03b409d6c0f59d1ff1fe998cf401fb72bc520d10698bfee2115b26f8e044cfde5dfe2a911d6db9e46dc6e998d081a17c1c6a86e33e0ab6623eeb0e4f830ea410f99abc8f0646b9a84ba34dd580acb6627c492b1aff238bfc358470814a34ece4e7c52e724164b53b68177cd4d5765a09cf01995820773cd4c502e687f083a6e119a9864e3a503c2339485 [...]
-G = c3cfbb00ce05b1a0f21352b5324887aea4895899d8fe464d6085b427db01a5213673832683c95c3cd15010bf24909b153867ba83c57c9d7c1a831613736448d9e213780093339fe1b90312034e39157fe87b932a5e936a255832c9e35b876422be06bfd805f311f457b03b409d6c0f59d1ff1fe998cf401fb72bc520d10698bfee2115b26f8e044cfde5dfe2a911d6db9e46dc6e998d081a17c1c6a86e33e0ab6623eeb0e4f830ea410f99abc8f0646b9a84ba34dd580acb6627c492b1aff238bfc358470814a34ece4e7c52e724164b53b68177cd4d5765a09cf01995820773cd4c502e687f083a6e119a9864e3a503c2339485 [...]
-L = c3cfbb00ce05b1a0f21352b5324887aea4895899d8fe464d6085b427db01a5213673832683c95c3cd15010bf24909b153867ba83c57c9d7c1a831613736448d9e213780093339fe1b90312034e39157fe87b932a5e936a255832c9e35b876422be06bfd805f311f457b03b409d6c0f59d1ff1fe998cf401fb72bc520d10698be2d71ff6c3638c48808702fddb8bace897436fa2febeef94dfcf9910ca09b6bc15e692335b5088ec09a52a020d5483155988de175e6c0c89cf7d2638606443035e7220656ed2e5884f7b7234fbed4d4ae6a02e72804995dad0e29aaae8d1298620f72698c9daabee83a8bfe689d7ab73a2e8ee396 [...]
-M = 3a32fdd1fa15437abda9781e84fe313dfb7efb97e9b29d408cb77df08f0cede32a4decf0fba0f0742bab9820753772873aa8482be27cd34fed88989e1d8dd40c7a75376ad15ae8026d06eb624b7fc06aa35dc2944456bb2d9d93d0afa5fbe3041162871f2b3faad44a468c4ee932d8333689fa77e86f88c46bb67f67737ef6555d96e08956a96fb60ab03238065cccf9632729a93cb0253fcc59e2222b6fb3746489040bf9187fb280b5c2dd4992873999ee74168b095ad893d8571e33c7511cb7bc65220efcbbd735f63afb2c07e01252ac29e03482a567a38effece6373262277490610428456b86bb9dbf77de97df49bdbe7e [...]
-RESULT = 0,
-
-TEST = 22,
-P = cea99c9bddd85a3eb66fb43a4fa5456dd6327ba9fe57f3e2630dc8ffd40fd1faaf56d7a493b37c93bce67724cdd5394f7f3c2616dde2855b747fb4f32077c5c1bae11ed55bd081e44cd7d2ad26e20b0164433dde95b6e7f310edd256ec5ef6fbb4718d22a68a636e9310dfa92360ae341fac675d68879418e5a83267e25e5605,
-Q = d3c15862f8e64413c497a4db43b8965c0e91ed75ae3258db0f0978048d789083ae40b2f9778485684f36ce39b4fc783829695e231df7a1f5015fe71f984d47875448fa9aa74bce06ef6b51452976c711c799031ad88847ed1a3c050fe5c2ba215e04c5ff6ed11ba66b75346f4ba5cb0e1864abb9d2046ac85832ee3c7047f5ab,
-N = aaf1e14dbd0d4d79bb54ebd0504f82097a543abde3e891ddece8b85bc99076d9bfcc6c45b1a09d1a65cb10a7b727894f2ca5b5a454b4975ef8f2822da368e8477dbb1d20fc65c00cc7c13415d1de4f8229d31b9a6730765ac9499c82ad99d261b520f89924f2f549d50387cfd4e636b9218402902b5b5729f51e504d1aba0502ebdba490f279b49df128f5513849aa005a00a22eea9c2c5ab608a05416a3cc500e7d77821fa6e32347237a1f01763917b22b51299710107c01c37f9c8eb049e3e64138b2f3d77cf6dd6ac7d0ec11776fb94c79ca42be432ab7fb1e6d8c8590e1eb9788a43cd6bde8c25983c5a6ecdf9d742a17e3 [...]
-G = aaf1e14dbd0d4d79bb54ebd0504f82097a543abde3e891ddece8b85bc99076d9bfcc6c45b1a09d1a65cb10a7b727894f2ca5b5a454b4975ef8f2822da368e8477dbb1d20fc65c00cc7c13415d1de4f8229d31b9a6730765ac9499c82ad99d261b520f89924f2f549d50387cfd4e636b9218402902b5b5729f51e504d1aba0502ebdba490f279b49df128f5513849aa005a00a22eea9c2c5ab608a05416a3cc500e7d77821fa6e32347237a1f01763917b22b51299710107c01c37f9c8eb049e3e64138b2f3d77cf6dd6ac7d0ec11776fb94c79ca42be432ab7fb1e6d8c8590e1eb9788a43cd6bde8c25983c5a6ecdf9d742a17e3 [...]
-L = aaf1e14dbd0d4d79bb54ebd0504f82097a543abde3e891ddece8b85bc99076d9bfcc6c45b1a09d1a65cb10a7b727894f2ca5b5a454b4975ef8f2822da368e8477dbb1d20fc65c00cc7c13415d1de4f8229d31b9a6730765ac9499c82ad99d261b520f89924f2f549d50387cfd4e636b9218402902b5b5729f51e504d1aba05014970af921bbb164b76219c3ba4ebce36753c390f3e11df9d43f15f4fb51b69d1b0e5ece4146ee1273b0634c07ea487900985ccef9b35e92b8be3e389d5eb3c9ad7171f42f0bb2d0ba127a3de9bb8a55c8d7038d0d47f134a8cd14706ba63dfc4d9213582277b3ed3c3d36fad37e6665b3c1904cc [...]
-M = 47f71d0e5c3f1b1c010d2950183636139a4493715e03ee0fa413a580398bedb0c5567950fdaaf21c41a2dd4e068ae606e25adf5dacc640096176040292a715c941ca664ed0a5f260d81da02ef23c73648228921812e5aada0b4ae9a9ac3440f224e87a0946c66336f1344972310480e2f2cdb9822e939fc361bd4f909ad3863a61f58da3425ca2611b37ad9ccc2a7e451e18606a7c8d381370ada006a4d4978d876d0b6428906b35645e0835634f9f086a2234c42291d846aa8ba3cf7369a76031f7000a8ab82c6cbc851617fdce5d4fba95e9c5510f622e5de2f4f9d4883b26764d95a8f95f87280a8b13b40d6987c27be73a49 [...]
-RESULT = 0,
-
-TEST = 23,
-P = c3fe6c5f9c0b11716ee4f9f9337d0c82ca18efaac7e581fdb096046a19ce2168bf6d432f25a6ad025cb8cce5dda449061fd5f8827a83cb39176f13b15318ab15f78a4a0e7066672ca5a4ecee2a5970d56be7fc997d246e0b31c58b0daa60d5ec6ed67211bca131efebc55d8507733152c157df0c3c679d65966dfe6e267e3583,
-Q = cd9bf997c07bf1f4d2478d3970c03189c03294d8aa03dbc9c40fbe0be5f6f036ac3b9877ec129ed65aad4fabac576405abba20b98ce1f6e162ef44a1c3b3f20d6d5bb7459aeb37c7eb49122f1c4395d71f57987b2fafbf1fce8828b5d8a4875ac15814d4ddbd6e9cd22286d92dcacac233223df53ca326e59d3d9e1cb3c45699,
-N = 9d6a26ead3b0f89aee752f983b232b949164f7fbf6bcb70688db939615f2b704ff19283b77f7f75fe2016be97904303e124ae1fc0f5509bb3fbd8423a84e56a7abae9ad3244a95fd586b13ed132d3f6303503db1eadd385db74073e90698848ba03620ae3b3c01b90933047a4177d9fa467768d9e83578b8fd2577dd39003c6f55c5e7cbb5ed1dd6b675f76a7a9a413b57d99ca4f7037e69c3db1c125a52a8f64e52ad8096b8e2c8ab47a49312ec2a2892cf52b1370875a8bca15a8f7812e1aa32f424189ae2733ee819219c3bf0439e3fa345e4ab6aafde7b563978a1e172602728ede10d103250f0be4ad22b9cfda3963dcab5 [...]
-G = 9d6a26ead3b0f89aee752f983b232b949164f7fbf6bcb70688db939615f2b704ff19283b77f7f75fe2016be97904303e124ae1fc0f5509bb3fbd8423a84e56a7abae9ad3244a95fd586b13ed132d3f6303503db1eadd385db74073e90698848ba03620ae3b3c01b90933047a4177d9fa467768d9e83578b8fd2577dd39003c6f55c5e7cbb5ed1dd6b675f76a7a9a413b57d99ca4f7037e69c3db1c125a52a8f64e52ad8096b8e2c8ab47a49312ec2a2892cf52b1370875a8bca15a8f7812e1aa32f424189ae2733ee819219c3bf0439e3fa345e4ab6aafde7b563978a1e172602728ede10d103250f0be4ad22b9cfda3963dcab5 [...]
-L = 9d6a26ead3b0f89aee752f983b232b949164f7fbf6bcb70688db939615f2b704ff19283b77f7f75fe2016be97904303e124ae1fc0f5509bb3fbd8423a84e56a7abae9ad3244a95fd586b13ed132d3f6303503db1eadd385db74073e90698848ba03620ae3b3c01b90933047a4177d9fa467768d9e83578b8fd2577dd39003c6dc42b81d459661a7075497037d65d032ecd8e1821851a20a24f35599c5a8d9756e2a9d1d984ff96eff3e1880188f07d1cc73f39752fa2b38e4243023c61464486ce0e22c48f90d44a572b227ef5533cf1b463b0cffe9682b37b0885b51edc1518f6fa66fa72b191c432d66673f65f018ea1c3adb4 [...]
-M = 17db2869e92750e0e1c573a5d238dcbf031b386c3bd5a6093421c5947097f0029917a42be61e7aba341c0bdc4c7f6e6b11e6f931183abbaeca027ed528a87948ca9dcc7bb296ffd4d27e0d07ea0bdb5a498d0559a72b91b4476a7f3b9f92b8f351c1b101c4321eff4bf3b4eea6f3388c5fc7dd37e629c668865e1021bd5c63bdb0f2bd0e30863f8f1993d40de7afd7d6357869365fdc2955ecebe08d7ed2604258c0d6a6297f8e24f389579ed0615447b828b7c6630ca29d46410ee3cb3a7db4fece1ada0c9d4f6628149644a5f3b24e8d0065b467e5754b7e01e90aad6ef145268137cc80e11b1ae5e0da03940472206301580c [...]
-RESULT = 0,
-
-TEST = 24,
-P = beca6b96f42b4ed05282154c25a0ce086f5c46f752a4c55b752945adb62c84cf1ddbad20ddf20f638f19d7b0912d2624fda8dca38a6d611ec59c05b5240c4bc4f1f1fdd22bad62b175ee5e45be337923b04594edca142942dcb348f6a0e36fa5e910950380c8766f5edec1f8fdca0b7b5d5f788e080060d4876fa304e1cdbe6f,
-Q = c556d9d25461e53cc99288567e4ba5acb8fe312a903ea3b4b4fff304e0e6ed3487aa061f4ac223e010be9a5b6fe13e4419d31f58a88d58991fb6bda1d2929da670fe0f4fc1b9f5725c70504a66bca512aa086bb9cbcf175a552e1f0141901e5442ee7d0a0e4b5abdcdae12157e3041f3f845c2bb682f39ecbbd4c1bcd43387d7,
-N = 93127f21a4bdf1d877092c82c40ac593317369c74a5bf374d3c582582af08f6ee670a96ff2887c3f51c7c6483cf82fe5934f061dbaf48fecf98e24b8386c1ec1bc3f8ac273262de84a35d71010b21e432c4ebfb61924662aacaf842e9eeb50e02649fc28380436c770eaf15f116b2a5ec53041e51fa91fe86ae3be7d4739faa053c011356b2c2d6807f22f3832cbb0d3c1c2390a508a8fe84622527cd7f81213d38f77fd696dcd06b1d4d2802db6f81a48b6675cc3aa028bb269324aa5cb47d9ac662a9e11e3dd02efa24b4f0d3049becc4cc28f38b624c8726b653b884a85d96783f983a713780fc6fe6c37f6a994de563fba79 [...]
-G = 93127f21a4bdf1d877092c82c40ac593317369c74a5bf374d3c582582af08f6ee670a96ff2887c3f51c7c6483cf82fe5934f061dbaf48fecf98e24b8386c1ec1bc3f8ac273262de84a35d71010b21e432c4ebfb61924662aacaf842e9eeb50e02649fc28380436c770eaf15f116b2a5ec53041e51fa91fe86ae3be7d4739faa053c011356b2c2d6807f22f3832cbb0d3c1c2390a508a8fe84622527cd7f81213d38f77fd696dcd06b1d4d2802db6f81a48b6675cc3aa028bb269324aa5cb47d9ac662a9e11e3dd02efa24b4f0d3049becc4cc28f38b624c8726b653b884a85d96783f983a713780fc6fe6c37f6a994de563fba79 [...]
-L = 93127f21a4bdf1d877092c82c40ac593317369c74a5bf374d3c582582af08f6ee670a96ff2887c3f51c7c6483cf82fe5934f061dbaf48fecf98e24b8386c1ec1bc3f8ac273262de84a35d71010b21e432c4ebfb61924662aacaf842e9eeb50e02649fc28380436c770eaf15f116b2a5ec53041e51fa91fe86ae3be7d4739fa9ecf9ecbcc229ef95aebdd91958edf3d1e9967c0e86da726d81bf919ca40e4a0102e09c4bd40b999c311fc60742ca893b1313a6b6090af48d3cd166ef3af2c5e6e49761d7c247c84df1d439cbee8402b8871fec1e7a2d2e42b4089fd43a5d6f7df3b84e77617ffa6e29a7198297aaf476f009a7f2f [...]
-M = 279bc98e1f7713afc99f62d52bc17439d75be4655d00166c7a9cd6896e406ca0461cc5465cf558c3422ee9ec2a85f6fa0316f077626f239cab7b39e40e43031a8bbeeaeb9e06277d409f625f7ce2cbd933016ff9e2882e50ca9fff855f7b8350777bfccb9dfa2e2c915006efcb9df89588aa91a33dba63361b36e5db5796a2fb754fe087ef249475789f2d82c2f4cf834a23677dab7a34939d6c124e6a53830b06b4f25fe7777d00e4fe2207296283d82c9ea572f1634ab019decc15d4f1b989b3a7237478ae502cb4faf30be41dc1a876fbeb9549a28f1a71e8c6a90e59585a3ac6d208207f29c41705e44099df690c5c758144 [...]
-RESULT = 0,
-
-TEST = 25,
-P = ebed3becd7d2f0b5844c002ee4f416a1e0c17a1e31143a190e6d7defd1940ffef257548ef366b5a7f3af9ef466cf915bb6f46127acd2e35546d1ef2d4716ab49ad9b5c61957c04f748c1b7cde861e0b25f50be5be8df2646769bbe9b99875da16b63d8e59882be9a9bea3c24d74bec3b45e3660d864eae2d5be6348fee92adbf,
-Q = f7459fb84bceb00eea5142ec301d0fb5c86a9d79d157709359ab4d2adde229f6ff2cc56fd38680e7b7e2ae9836e28dc172692d8085afb5a9ed9ed7aa62fd8a54904781cff8da7b72f3b2ef47736cc406f365371282a75e109d642d23f1fec727b4b760fcf2039708e05d03cd60f79742bb8a1768a94693219072e0e4059f2f47,
-N = e3e20ef4dbaada169a9e0c6690d5d2f5df31ede50fbe366f2f9e07bf16f7493616fbd44a0e847601864af056cfb2ae6ca314c64365a8b466747d07282b616cd8cd3a4d32dfc8c7325101485da4e3022f50453c658b8e306ddb0209970a8da346fc44f1928f8f0d9b8e5cf253bb7f3cc3ae389be9d5232fa19993b9e0c9da9586ad5218c99b4812035d21f53a73c3bf0897644b65cfd9785e6650e982d4deccf1da04c68f146679bbd8c95bf27d2023cbc97d86563f526e33c332d80b4048ad3f7d4a87dc6b65abd9fa42e3cabd9a39cffd1b4c85dbd45537a11f262bc186f7f47c87a398cd5bd7a24a29111da3ea207906113483 [...]
-G = e3e20ef4dbaada169a9e0c6690d5d2f5df31ede50fbe366f2f9e07bf16f7493616fbd44a0e847601864af056cfb2ae6ca314c64365a8b466747d07282b616cd8cd3a4d32dfc8c7325101485da4e3022f50453c658b8e306ddb0209970a8da346fc44f1928f8f0d9b8e5cf253bb7f3cc3ae389be9d5232fa19993b9e0c9da9586ad5218c99b4812035d21f53a73c3bf0897644b65cfd9785e6650e982d4deccf1da04c68f146679bbd8c95bf27d2023cbc97d86563f526e33c332d80b4048ad3f7d4a87dc6b65abd9fa42e3cabd9a39cffd1b4c85dbd45537a11f262bc186f7f47c87a398cd5bd7a24a29111da3ea207906113483 [...]
-L = e3e20ef4dbaada169a9e0c6690d5d2f5df31ede50fbe366f2f9e07bf16f7493616fbd44a0e847601864af056cfb2ae6ca314c64365a8b466747d07282b616cd8cd3a4d32dfc8c7325101485da4e3022f50453c658b8e306ddb0209970a8da346fc44f1928f8f0d9b8e5cf253bb7f3cc3ae389be9d5232fa19993b9e0c9da9584ca1f3d2477a6713eee84b21f5eb298b0ee3833cdcd6dcdb1fe381e68256892fbe880ac904d79432c2d370e65df6e04aea01ff7ae0ccfd5348ec21133963477a13f67a9aadd0f2b6fbdce3cb561cb9516aa655717704dd0e08d1f3a6c3600d32b5c6c69b642d581fecde1d12b6ba69cfb04a3b70d [...]
-M = 71f3380fad562d5bfceb5f595088e00ff6a1d604675b9cfc491f9df9b7c64d835c1be25fb5bee915a822086d472cc27d2ed030b8d57ea88a0c48ec6f73f444c947221015beabb2a2f329918a596d5cf315e28f2533b2a9150edcf3564492f7a27f3fa03085e856e1cfea7539b3e810ae1c751cfec5a6c6f3a377c0558384f29bf84f66d5a778d3c4676e785f4635de858cfe63bf883eec3b797c99e2816c0a25cb4d1029054d916fddb3c1d5e8248e38723fe567c572ee63db96852d1c9731f86033db85ba29fd866e76b7042725d2f6707ff52b3b58ebb964d147cb12c42ca3b0460936c38488b0cdac12a7b9d1f28a80405c95 [...]
-RESULT = 0,
-
-TEST = 26,
-P = f1dad312054a7eebde298cf851f0458935e93a57d8c7cee398890a862c0b3b430c450517d28b056bc15f8d7736cc822b30059da14931949b967397c464a8f4a489ff1bb444847ea244862712786407e2316ac0e1ea09a7c4272fce2806c802dfcf701c7b79e672a44587d3bccf96689235af0dc0f405dd6155c1d27ac58d8d75,
-Q = f489f8cb96052a31d5e1126b6b2e5bf1e2718a3d7a4718290fb08d496fd4597d928b04bf67a4a9cac9061553344af1bfec3079d70307e67433a0cbfff043a0645f2dca6a3b8e27e7a953e71ba9f39bba8036e8d7de84a1e7ad54dfbb0927a2198c6da8edd42ff998cd5f792946322a80f5c42c80c23843139afee310edd2a48f,
-N = e706ea547469c310c3077356d52a428a56456cafc204d5cddd722b7ee1e0c3675ce1adcf50b713a06811394717d5508ff9149f7f4eb33eabe82cfe562464837ef3882b0c488a3a6a9d970446a909e7ae109766ea4017696c47b5da2dbc86256df19ca79328e686205562552697f5544637a806a810dd8624d2bc6f6d42cdf8ac7d03aca680e40bb6c52726f9e1b40ef4a5a21ee5c7c551217637b307fca3afb03f369fb98e1de13eccc3473bd1649d26a608d057ff39ee2d4c3903b7b5c98000292f20284f5fe6eb78cf9d2f5bf2844d78839cc47d0e5f257fe5d05ac974158d5ab25b974c36ab9c2dc20fae0aa94efe4152cd66 [...]
-G = e706ea547469c310c3077356d52a428a56456cafc204d5cddd722b7ee1e0c3675ce1adcf50b713a06811394717d5508ff9149f7f4eb33eabe82cfe562464837ef3882b0c488a3a6a9d970446a909e7ae109766ea4017696c47b5da2dbc86256df19ca79328e686205562552697f5544637a806a810dd8624d2bc6f6d42cdf8ac7d03aca680e40bb6c52726f9e1b40ef4a5a21ee5c7c551217637b307fca3afb03f369fb98e1de13eccc3473bd1649d26a608d057ff39ee2d4c3903b7b5c98000292f20284f5fe6eb78cf9d2f5bf2844d78839cc47d0e5f257fe5d05ac974158d5ab25b974c36ab9c2dc20fae0aa94efe4152cd66 [...]
-L = e706ea547469c310c3077356d52a428a56456cafc204d5cddd722b7ee1e0c3675ce1adcf50b713a06811394717d5508ff9149f7f4eb33eabe82cfe562464837ef3882b0c488a3a6a9d970446a909e7ae109766ea4017696c47b5da2dbc86256df19ca79328e686205562552697f5544637a806a810dd8624d2bc6f6d42cdf8aa969ee0c8e5946299111c879624956d798d475a5074b66a14cdfe1b3860c41aefa06695e253ee3208425da471664d293b89d2b8dfb300731d82249ff360dceaf740023a09cf4d40618af58f01399ae0b0c6e1f30ab4801579ab612277b9847093fed4962dfe203f5f1adac2c7f4e0bbeb15df9324 [...]
-M = b0a1aa76d71879c022b16b219e14e58e0a492035b238694a9a4b7a5272c9cda4dbb9b3718a3aa16331512ea11844fb3988046cdb07fffc76fcc5d13412fd2d3a0b87c4403f15a64f4bb11424befa1d1777529c90598c424b0e0dfa93c97c3c9735aa143ac1d080af7bb4723844eb047eff68c9a42687fc0c17a5e3c53b920dfec196180c8baa73507f839b825143e6a5cc32349db45261659eb333db22156a80b1fd9a92a8fd0518696d6c085d005154c87eae3f6dc1257f1ede8017636174b0dc40be23c61370aedfb525fd9841950cd18644b1393b60bc1bee407cf9dcee602fd7a9d43814ab46c4f5e906bb419b99a480cf0c [...]
-RESULT = 0,
-
-TEST = 27,
-P = c653d8c5227687a0fe68fe0e45c78185e401dbb66a68e476fbc2d7e4f6ca1b64d604c923e8f68d4a6a9917a91cf2b6ec973413505e35ead09ec79358785f40fc310ff6fbb324e506eb7b0b686b98018c536dc6f7613d57ddc42de4d935a0ed1564d15a323da76209cd8c1d02940726f658dd9ec92bcae29b1ccdca8d348c513b,
-Q = d6457a85fefa9273a4fca5dda3a47c0d171e0ed73277e97faabde23d4f24d1e794eb52a0c8b77b1cabc21e11be1ec35d899e4df1170ca2545e0170819e5fc90b56b2f5c2531e906f88f69514908c2eef9cdc6ae2c2cc1b14898febd8b052a48c09dc41cf74726271ee7615a61830db01c0fe7cadd6096e58473578bea271c6a3,
-N = a5ffeab9fc584095391908fe4e0b9a8886e3dfcb02ce028c56850596002c5b64da21440cb7ba717842877ae59dd1ac30f31cd3473e544a56be5ebae090a97c725a716b66229bcb4d980cd803e9d58c52d9bca11e191461685ff24cf43c76c35cd225be268db3fcf76dfd6f8aa4c013a1282283ae39dd65dadf677a0db5155cad568df047e29e6842d94d0bd0f3ae3d8081cb7948b087be397d116bd7221d06474b4d1c5aafd1b2479bf60c4fcedf60d50a85509ad3ef12761e64c90fb39f5531f21df1659e8b51a5de0f5c0bdacd1e75a254876822145e47ddc06f19b5908c8ad984d12e02fc12c11a790c7243cf5314bbb54325 [...]
-G = a5ffeab9fc584095391908fe4e0b9a8886e3dfcb02ce028c56850596002c5b64da21440cb7ba717842877ae59dd1ac30f31cd3473e544a56be5ebae090a97c725a716b66229bcb4d980cd803e9d58c52d9bca11e191461685ff24cf43c76c35cd225be268db3fcf76dfd6f8aa4c013a1282283ae39dd65dadf677a0db5155cad568df047e29e6842d94d0bd0f3ae3d8081cb7948b087be397d116bd7221d06474b4d1c5aafd1b2479bf60c4fcedf60d50a85509ad3ef12761e64c90fb39f5531f21df1659e8b51a5de0f5c0bdacd1e75a254876822145e47ddc06f19b5908c8ad984d12e02fc12c11a790c7243cf5314bbb54325 [...]
-L = a5ffeab9fc584095391908fe4e0b9a8886e3dfcb02ce028c56850596002c5b64da21440cb7ba717842877ae59dd1ac30f31cd3473e544a56be5ebae090a97c725a716b66229bcb4d980cd803e9d58c52d9bca11e191461685ff24cf43c76c35cd225be268db3fcf76dfd6f8aa4c013a1282283ae39dd65dadf677a0db5155cabb9f49cfcc12d4e2e35e767e50a423fed86ab8ebb13a6f042d690b1b4dc2e18fae05d0095fe23a9e0859ad694f3cde68ae9b2ef595eac8551219bc5359ce04b2a6a5b04a79847dc2f699dbb8edea8edf9b20a558dfe0aeb5590029e67cf9cfae96ad7352c50e24e455e76d9c99797511ca1d927ae [...]
-M = 11b9d8ebfa131c2c2f0433010d2d021c23d64fb528e5bcbcec94fd509340b86ecac1e18e8c6d6965158a8f68680c5da3d341dc031fdced5691bcc0c7f7097a0c5cf7ab072e6e8f97e9a7becf38ec8fd4e0c506ba999263ee6d67fdaa752cf0d8745a6f57f5234a73ba551a8d6bcd4a89fb2fcc4314c00413e23494fe5d59caff25f79ef1345dbef8ca4442812a6ca75421a8b4dd398a55f087ccf5a7b62cf81e7640ac4fb2b4d98691a86bf0d4fb35bd2c9c99e2fa5e15ba4a48391c1461bc36bda1e963318df0d3a4e95665402e1e53a05015261cbc84fae82b1247621e76b338aa8798c0eea84fdac31fe557ae17ec2c2196ef [...]
-RESULT = 0,
-
-TEST = 28,
-P = bcf04efe4edd2f7caf51ca4a4f54e95fb7325ab5c5c3231bad3b76b3830abc586d1e287c139a4e412f2847312cc2bc9519956fd122737cf10b2fcf15de0e30f62947541e433ba3eed62a1b2aab4d017412c9a872533387c01203354f488f54cf9925568a8ec4ad542a4e4937587c1934b2bdb1312f6a5076d94f8c6de1c1550f,
-Q = f9cbb6f86ae4e499bd789087883291b7b7b0a9fadcbe6a9fb51865b93ad8411fcd16ab084ee23a1926a295ef628c2c3dfa22d3498ef0cced6d74eb110b00be3a2e72a26869440c1742bddf1f6b89291bf410755a05af92a4067e2839543b72ad1fede0b0296a284f168bc2abc0ecb80443404bc48994214fda584fe7d8a20fef,
-N = b85c166e2e376e75b964258fb45fb0a27c3b9985b93d7a7b1d81c1c283138c0df339761885dc4a6cbabc62d1e9376401202ba9f920b9e2ab8dd24b07d2a98e699d979a969ffe995d2d94ce7dfc264a4dc0d766a1b29094326c0d73e49b6b258b74d712d5b23a6ff5b9ac07584aada737d971880a06369002d6d92b024174cdf82857fe55aea27b2909c087bd9b1951a4c83caf983f8fd44d63fed00e984387b55123210cffc36b2c2be09a1c383bd32481e8ea0dc0aa32af06d46f85a9b96303ccc4857fbc00c1448c346bdbe1e276e90fda218a9f1d3fe90e1783143528f18e9514e89ee8ad84d10e6ba7981165e4390df5bbe1 [...]
-G = b85c166e2e376e75b964258fb45fb0a27c3b9985b93d7a7b1d81c1c283138c0df339761885dc4a6cbabc62d1e9376401202ba9f920b9e2ab8dd24b07d2a98e699d979a969ffe995d2d94ce7dfc264a4dc0d766a1b29094326c0d73e49b6b258b74d712d5b23a6ff5b9ac07584aada737d971880a06369002d6d92b024174cdf82857fe55aea27b2909c087bd9b1951a4c83caf983f8fd44d63fed00e984387b55123210cffc36b2c2be09a1c383bd32481e8ea0dc0aa32af06d46f85a9b96303ccc4857fbc00c1448c346bdbe1e276e90fda218a9f1d3fe90e1783143528f18e9514e89ee8ad84d10e6ba7981165e4390df5bbe1 [...]
-L = b85c166e2e376e75b964258fb45fb0a27c3b9985b93d7a7b1d81c1c283138c0df339761885dc4a6cbabc62d1e9376401202ba9f920b9e2ab8dd24b07d2a98e699d979a969ffe995d2d94ce7dfc264a4dc0d766a1b29094326c0d73e49b6b258b74d712d5b23a6ff5b9ac07584aada737d971880a06369002d6d92b024174cdf6719bf85ef4e067129cf62cebc391d68d5959aae79d0e469201aaf3a1da608a3d16ee4d889d46e2d1d615bcfba8ecea516e30a6f30f45e8d08e2fb55ec0aa73d3750a8ef90f81113e734c7191cb0c4c59090003be463a2584f596258b985e2a11dc01b164307eaf2dcd919bb4f7fd130017f7beec [...]
-M = 0afcb1f4dcabb2b334c7e2a24c28a5983cde02ce163765180cf73a438d49cbb1a4e823505d7a26f4963a7e42f9fe3706482c5a92272596c732bb859c4ce66ea0d7c474a0e95978e9bfd22b467adb056371f96e4c83888accd96b71c5a442f31e29cc16411a6c5ce16b65b65de20fa1872826668939a948b594d35cd1883e45fc3420115d552f01678354ce05876f02120e41938d63d27ced0b1c013fcfdd7b890f22fe6eaa805f59d2e18d777275583f3979eaf60631480d350e2493ba239ace875915a17589b8b59438b38061d8541c703b9cdcd1e299cf11ab85c961481f9d8e0a74ecfc0a2624bedbbea8cb98f8aca0f4fda4 [...]
-RESULT = 0,
-
-TEST = 29,
-P = b9816a70f4501bfbe818e256747b258da85c11334ac42833fd65dcf94a1c21baf8bfab169be150edebf9595e5cbdf79aedc1ffb8c457fe0409fb62f84b4be4b2eb441e78b9ae18f534438c857e7ecd68c6d4c0d25d43a8ce6a189c00ad77429d77619616e077eb00490b520764cd8836955095b893456e4f5d56133111d7060f,
-Q = f23d62b814c12734a2c0745766a1b0539cff19c5c4564e648b7981f2c7c8e8ab159de2141cbbb848143ca277af1c4cc6509dccdd42e10ffb9d5379add03c4b6c38e39315253a767f9340b9714e4775fcf1ac41a795be47c8125dedaf6096ec1413c77000069f01b3065ac91b6cf795495f851dfe92585f360a7987ce214cc0f7,
-N = af88d1fe12abc38bfe670143e5b9f0ff4899e0c84fabd62bd6084d81b8491a45c38ce5ce44f59ed0b839985b8d42faf224e03212c46ff84171b9c404e0e95d4b0122df8e9f6d7f1ebccdf0eb0fb840cbfaecaf643c295a41435561be09bf55e6d65b36091a5e1946bff40ef8661aef3a90e5620c61da2bdadce9a2a38e10473e6d606ed5e59d8cb6c9b3b71027eeb4090490ef02c586e78b624d957cd6ab20e0aff01af1117d56740d1eefffc363c2b508ecb65b9d495f3f021a4eac75cdfa0b663355bec79f5eff25385e54c7b95b67e8ebbeae7b66190694451d5697e3ef2b3bab97bc3dfddce94a07c56977cf3a0b172a631c [...]
-G = af88d1fe12abc38bfe670143e5b9f0ff4899e0c84fabd62bd6084d81b8491a45c38ce5ce44f59ed0b839985b8d42faf224e03212c46ff84171b9c404e0e95d4b0122df8e9f6d7f1ebccdf0eb0fb840cbfaecaf643c295a41435561be09bf55e6d65b36091a5e1946bff40ef8661aef3a90e5620c61da2bdadce9a2a38e10473e6d606ed5e59d8cb6c9b3b71027eeb4090490ef02c586e78b624d957cd6ab20e0aff01af1117d56740d1eefffc363c2b508ecb65b9d495f3f021a4eac75cdfa0b663355bec79f5eff25385e54c7b95b67e8ebbeae7b66190694451d5697e3ef2b3bab97bc3dfddce94a07c56977cf3a0b172a631c [...]
-L = af88d1fe12abc38bfe670143e5b9f0ff4899e0c84fabd62bd6084d81b8491a45c38ce5ce44f59ed0b839985b8d42faf224e03212c46ff84171b9c404e0e95d4b0122df8e9f6d7f1ebccdf0eb0fb840cbfaecaf643c295a41435561be09bf55e6d65b36091a5e1946bff40ef8661aef3a90e5620c61da2bdadce9a2a38e10473cc1a1a1acdc8c49863eda60624cd1de27bf35c409b66c70f2d96e3690c4c6167aa1928dc658e04d3e0ce8f429b7897e53ca8ce9c59610513f5acb72065a45c9ec420ba430e8b6cf8a5db4185dfaf31802306abc348864287017ce93a689d5c079b08291a556e6f035faa1aa46a60a1c8b2254af65 [...]
-M = 12d8698c03eec0dc1dadc39dde6c3197ab5712a26d53c635c5342471b77f69d542578d5aae234e5f9659ca8c9d1a47d14d3e926f9e45171b135581c72bb7c30ebc32c73e3e3765d4271c0d3cdb04a6d4ec0fc90a6b6646ca7ac34192060486ff1b0ec692d98d2fc0c2000d95bf924637e1b0a85548810e52157911b3ad5c3aa4a1aa63b58f33941a336b66915ce6ba1f72d20118e3f28c4bdec59d763b325c5667ae55e941c0125b45aec71d0729da82d4b7428afa0ee50de97d792d06ed4ff7d4c34558ccf4119a41658a341896eed04c3b496483b192b88edeb593ed8c3dd56efd2854ef73c6ffae91e40a521b040ccd97de93 [...]
-RESULT = 0,
-
-TEST = 30,
-P = b58861eab1a4e500553480cc2069566c4b775e006c28d1184eeba27e4c2272a2fd71e4974c3c157da192cc281f6d2ae9e466a164ec667226d5f1a892a48c7715ac73b9b07336eadcb200316287b5639db9a5bf958e9915851b00fd1ffdc3f41a791b1218cc6d8f516fbc3b42c3fabb3c5d1b7fa7415e4d86d8108f8305847d5b,
-Q = dc368d7b4fda6a2107a9e5f8d9b59b6ea002b33e5f8534cb8f725528952573f15da6ef1bb786517371d47d5628af94073313d7fce89636a81a65768e6f121226a2332ffbc0dd43443f677a2b154c0aea547247f2bda2cb7ebade3158e2b5ade7cb42c47a648c433977172135ac8db1d933a7cf3027410db54f83625b08bc358d,
-N = 9c27e33de74074cc76e27888409d0e3a40d86ddb85cfb2b53df20ab1a0c73da401062bd1b63e4ee0d7b7e125d3d2a8cba59bea0c169e005716b570d509d3ded07259a141708982614659d7a3aa84b3989483b82cefe877b941bc4e695387d463ffc4fd7b6ea467f57a89cdacba3abc6beace9b9dcbfab1191c28f6ba49af472fb20482e9c5392d94438aaed614da84a83c6d2ef672141ee835e5887051b7e4d6bbcb7ce2684583f90e042c78fd8b1955984d43bf4789c51f43eec1a167519b3d65e2c2ab16e772155f286c38dcb775ca597cb930e22d8ac01e3e38844a93586e7cc498f0acaa646eba2685851f15e14fa3fe8874 [...]
-G = 9c27e33de74074cc76e27888409d0e3a40d86ddb85cfb2b53df20ab1a0c73da401062bd1b63e4ee0d7b7e125d3d2a8cba59bea0c169e005716b570d509d3ded07259a141708982614659d7a3aa84b3989483b82cefe877b941bc4e695387d463ffc4fd7b6ea467f57a89cdacba3abc6beace9b9dcbfab1191c28f6ba49af472fb20482e9c5392d94438aaed614da84a83c6d2ef672141ee835e5887051b7e4d6bbcb7ce2684583f90e042c78fd8b1955984d43bf4789c51f43eec1a167519b3d65e2c2ab16e772155f286c38dcb775ca597cb930e22d8ac01e3e38844a93586e7cc498f0acaa646eba2685851f15e14fa3fe8874 [...]
-L = 9c27e33de74074cc76e27888409d0e3a40d86ddb85cfb2b53df20ab1a0c73da401062bd1b63e4ee0d7b7e125d3d2a8cba59bea0c169e005716b570d509d3ded07259a141708982614659d7a3aa84b3989483b82cefe877b941bc4e695387d463ffc4fd7b6ea467f57a89cdacba3abc6beace9b9dcbfab1191c28f6ba49af472e20459383c3b9de72e6ac48111abb92cd50f31db7a6661904578790c9706ffe4260b2a92f64831d07fa9ce2fab56e5a6480d2ca5d728d1c505397a28053b31201173bd8fee2d343f46dc0c0ab3fb607424b64b1a895f1a9bc485f0a0b6a19b66c3866c25d7bb091e3d353290cae8d743a133b399c [...]
-M = 6134e2b711213089a99e51e0d06d99b539bd8534e418f33bbf6e71aa5f42faed072c26c92ef055a3d71c6438787d8f85a9917824085e3315adc000a702d6973fb40823ab65dc42b2cce7187cdb3eaf2d2a6045824604f52a1b4d96e10c92a4c2a1267761dc31526ddf8e0f0f718a6760a6a815d3714a5650348bdde9a290e17c6d67793e1fde005179302a29c2ecc25bafa460ec3c2cce323db4acfd6b3356b3dd79407fcf71956f69b985517b5564daa67298b5858a658767df2f978b9d800d6521942d596909081922f187a908f3c767554912c8aec6c13f56728261c6a5ccb8dcab7c43219751c1dea66e1c6928ca3006fe8c [...]
-RESULT = 0,
-
-TEST = 31,
-P = c326de96406ebe712a3e7328d2ef9d20060174cc82e78a0e1fd8dfa6176cfbd3682ce09a128b723b9c313cbdde15d8a84f6a6f45b43f82ef9e80fa9c92b63f22adcef39f048909763d655bec1ceb1efff29aace59e87b42dd65f861ffa3d14f075a03e72c38b6dbc877af86696f796853cd238fe544e2fb76fb1783077d25fbd,
-Q = dc2da1cd54f36bd3356e902fbdb6455a229c146a60c6c999f94b104f233ac9d5a8e7f294a11665f02c1f15df2a1d13e254c4bc029a1c472908bd96ec543172d27bd6db41ae733b3d2732bb4a0ee31e0daca6cab1eeb481a30a01e1dce1234da838bde3039fa7f99ac15f92e309968149f6511feafb40b31b4b3933e3bd75517f,
-N = a7d8307638a78d18cf36db35bbe6622b1e504269a756238389059bed1a10169fbb05cc40dcb51d26546207e51a65f2160269f917e0dbb85050b74f58ae6e197867869d5054da67db18e1b1e065fa764fc2049aeefe51a2faa2676000c3850c63adb39dd55f4a0c77ce2269902e3b64abb738e808241ffa6ea6873dda5837e7caeb26565159f57f34d08faa9a0d2a1d0ed38b5e70ece173136dc62a91718a25fb30e5af1e6ad2640abe3c396f45ed378c2e40b1814aceae4aae7d8b246a3446612eada5933917c3794e34655ecac999e83e0724ba9350def415e65c7bf7c8d09fffc3c41707772399afe5e313da8b451f8c3ee68e [...]
-G = a7d8307638a78d18cf36db35bbe6622b1e504269a756238389059bed1a10169fbb05cc40dcb51d26546207e51a65f2160269f917e0dbb85050b74f58ae6e197867869d5054da67db18e1b1e065fa764fc2049aeefe51a2faa2676000c3850c63adb39dd55f4a0c77ce2269902e3b64abb738e808241ffa6ea6873dda5837e7caeb26565159f57f34d08faa9a0d2a1d0ed38b5e70ece173136dc62a91718a25fb30e5af1e6ad2640abe3c396f45ed378c2e40b1814aceae4aae7d8b246a3446612eada5933917c3794e34655ecac999e83e0724ba9350def415e65c7bf7c8d09fffc3c41707772399afe5e313da8b451f8c3ee68e [...]
-L = a7d8307638a78d18cf36db35bbe6622b1e504269a756238389059bed1a10169fbb05cc40dcb51d26546207e51a65f2160269f917e0dbb85050b74f58ae6e197867869d5054da67db18e1b1e065fa764fc2049aeefe51a2faa2676000c3850c63adb39dd55f4a0c77ce2269902e3b64abb738e808241ffa6ea6873dda5837e7c94bd1d5edc49354f070e2a7417c843a94aaedd53a09331f6b54a23a9c36e260521fd0dbefb7308bdef5ebe6d23dba4b018a118638fc72e432073ef99b834c946c0507d6b2861b7ec5e99c4e289efb5cda9ec5ad230614a9233584f47f1c686e075165a2a0a443bc42670b57ca39fd2d50591b8da4 [...]
-M = 015213cde6a5e39344b6df86d5f35603322727fae0e693e7639811d0380082b67866a88357b9e705ec348a77e0d2ab66248d4fc64310d3815d379fdf0a7f0ad8fac7f92edd35530123a6b574afa96d5a449e4f46cb66af8eeef7807150aa11c5199f510ec00db66dcaf66079f6916d028108af916db7ce65feae5feb82c10c92947c963325a54b114cc107b2f20701789c3adf7fc91157204689adb556b2f66a6d19e2108325d6d0fe5571624ccddd359d04603c87be68dc89212e466d11f538a47cfb5b721022d2d32c45e34493e87b0d1078d43bd3162691323cd85211cffe5ab82331dd01355edeb5a4de41f8ce14caa448d9 [...]
-RESULT = 0,
-
-TEST = 32,
-P = de53604961c7dd274edee0794a67b1c68804840a49a6792f2e206a1c376fac1338a3694f1dce31fd61b4aa033e8486b904f663156f25560f2484e0ecaf0e831bc338af0f08d7fa321f291488a54f10b3a7eb1278df8055e91eff6ef13933901147f2ad4e383495bf4013a4747a1844bee2e79de734c750fab8e2edb960bd4339,
-Q = f8aded8970ac3744170277eee18b64b59f292d0516b6d1728c5e0100caef7b9c94e7cc193f98ea45096c99ef6942fcdf5f88f34c54a0fbcbea07ac0cfe5fa5a832a265046ccbd2de9a912f589ec1ae2b41bb9f30e48e933b74cb32cc85e83e3e3b5268d1e9d4040fb422e50f5035fc41e925733c67382de728875dac27212e61,
-N = d7f7d1e9b4ed333dbb91111fff2886e4250dd31ffee65fd18b275ca295a0463564698b0b733c4c13691df3e5d49e02f2393c7aee3e24cf8d2f9692ddd1752d9b50c42d13f78e80eb8f4b152ac8bb9c5aaf6a10b9c1549885bdde26600913cb94fc54963a9eb0988df3d09f89f5718a2993d39b6f3f384be29c7cf57b9cbd0d42a6f832273601f58e1984fef47ae8434372bc61e2d06d8cf3e8b500b6264f6429d6b3d1616e4492a770d1a1979a27bc4d7ffd1afb1df4ae9ef98010faf05af572d1b9b3d7536951ad5d442da1506b8be7b2ecf8299347386bd38ff63b9b843f83a0ed00f8b154ba85f634bc10c20a3e3a843dc1a3 [...]
-G = d7f7d1e9b4ed333dbb91111fff2886e4250dd31ffee65fd18b275ca295a0463564698b0b733c4c13691df3e5d49e02f2393c7aee3e24cf8d2f9692ddd1752d9b50c42d13f78e80eb8f4b152ac8bb9c5aaf6a10b9c1549885bdde26600913cb94fc54963a9eb0988df3d09f89f5718a2993d39b6f3f384be29c7cf57b9cbd0d42a6f832273601f58e1984fef47ae8434372bc61e2d06d8cf3e8b500b6264f6429d6b3d1616e4492a770d1a1979a27bc4d7ffd1afb1df4ae9ef98010faf05af572d1b9b3d7536951ad5d442da1506b8be7b2ecf8299347386bd38ff63b9b843f83a0ed00f8b154ba85f634bc10c20a3e3a843dc1a3 [...]
-L = d7f7d1e9b4ed333dbb91111fff2886e4250dd31ffee65fd18b275ca295a0463564698b0b733c4c13691df3e5d49e02f2393c7aee3e24cf8d2f9692ddd1752d9b50c42d13f78e80eb8f4b152ac8bb9c5aaf6a10b9c1549885bdde26600913cb94fc54963a9eb0988df3d09f89f5718a2993d39b6f3f384be29c7cf57b9cbd0d40cff6e454638de122b3a3a68c4ef52cc74b8eb0d3701042522e36959923f03c7a09289bf910dd766505b05da4f26038b51b7dc4995a2e5cc3eaf3840142ecccaedbde9fc3ddc5849ca389e9c00c5acd08c946467fcf384f473fc5547ddc6871341da7ead88f4c20b701fe328cf7bbfd39b830b080 [...]
-M = 3504db197b5d8733823858a62ad07b7aab0c8f4ac6233148094d6c0cc101419abd21cb5c015ec8787f15001b407946b735c0469cf17fd03a0411e89e8e577412c26297e59c831e5197855f9b8d7616a06c6e697e53cdb4db01e41c192810302421c9d160a0bbd6c2f4d305621230d81627c2d2468b7d94d08addf6b60d7ece405e853244b4389f139aae022121020c10a84ddad1e9a63ba6419b235405cae75b2c8474fbebfc24194cd35a5dcbc0c82174789cfeda9fe665c044fa3a81632a0b4f48d0398411e028296e2f4eb731f3112703fae23fd9e49cc0ad36fa3bb3f259f2aa8d020b38669bd30c3516c5dace6fa400b214 [...]
-RESULT = 0,
-
-TEST = 33,
-P = bc68fa6c94cdb6f5757b9368bdb53088ef7c09a167d8f9cc510ad888fa3b272aac4f12021c29c742154015cdb28a52676923ad03b12c11caf9e0e257bde467e792a6d8cad85b19b9c19f484402565b5739cb7dbbc0aad01ad885f1303e45e5fae41a5f0b4a0c620410be3c88163ec8a66c8cd032ff88783d150c788414306e3d,
-Q = d194017ba70ae0a073d848d00316636f100133d91359201f9f7cfd9c2925913b746350ca40660ab13957388c147be59ce7e9528eecafa981e881e25914a2d7b028ed5953d91c79d8b7871e3e8793a60656e0490dc832c967d705808d433a7c7e05bdb5f499f57889033baa9877b840026c2aeb46dc2ab4569b11dc94ab149d99,
-N = 9a3ea23ad69d34d506ad8b4b9fbad79be0b08120f9bc1296b79f36464bc6f8f39396f5c89ed2dfdddbe3afacacce1c263875c6fe28c539ae0f00099cefb09d00b3b1645ac2a8953678ac742ca26ceb151c38ed0ac3022a88d991118b862137a373e9342f30c528e2d03fabd0bb9da2355865b53bc463fd2c0f1a80439baf25864195c1a3bbf8e4225f90d121cd426bc78fdf9d098cd5561fc018ea9c40de9096ecf3fffb41cdfd56998e72c1763de574c00898f7a97a12635f3b27e4b9fe880c71a6ff775cb87d9bb3320a3df78d48a039e70020e04b425b1f1dec0c168c8d889f1f041d78f894fae1a1699aae06e09074ef354b [...]
-G = 9a3ea23ad69d34d506ad8b4b9fbad79be0b08120f9bc1296b79f36464bc6f8f39396f5c89ed2dfdddbe3afacacce1c263875c6fe28c539ae0f00099cefb09d00b3b1645ac2a8953678ac742ca26ceb151c38ed0ac3022a88d991118b862137a373e9342f30c528e2d03fabd0bb9da2355865b53bc463fd2c0f1a80439baf25864195c1a3bbf8e4225f90d121cd426bc78fdf9d098cd5561fc018ea9c40de9096ecf3fffb41cdfd56998e72c1763de574c00898f7a97a12635f3b27e4b9fe880c71a6ff775cb87d9bb3320a3df78d48a039e70020e04b425b1f1dec0c168c8d889f1f041d78f894fae1a1699aae06e09074ef354b [...]
-L = 9a3ea23ad69d34d506ad8b4b9fbad79be0b08120f9bc1296b79f36464bc6f8f39396f5c89ed2dfdddbe3afacacce1c263875c6fe28c539ae0f00099cefb09d00b3b1645ac2a8953678ac742ca26ceb151c38ed0ac3022a88d991118b862137a373e9342f30c528e2d03fabd0bb9da2355865b53bc463fd2c0f1a80439baf2584b398c5bb80204c8c763cf4e90c76d7cf90625f8f11a33c33cf9114771d7dd830cc419d2ee53e2b634af72467af37ad706efb99650b9e57167cd86333e7774874b612cd58ab40ea093a0ba3bb6da34742a93b3957576da8d86f927a4e950c2b0fb546ef1d94f6ba6dcda7827a200fd7e79c3779d1 [...]
-M = 565a520ea4caf5dfccd1be57dcf168548c11936a8cf1237fc7f079a478ccc3229fbb1164fd394894e4ce70ea6ebd5bbc9769e8c658e4aec3b1ec3617f6c01987c2daa0f090aa37715d19e670c1f865f9a72d5faff6e9011f5bafbaeef800c3a482ba99318e0c24c184c546bc5d5dcca20b0b9aa747acb309f490ab616f46a9cbbb48f6bdd16f5488659192fe6938ed0b62d3767f347b5dbda079ee6665aeeb0d3c942afdf2cb62d5410996d0be2a2496188e03b3625834db4bf435ace39f553e325f1393e3fc81213c0461f7582fc496b8b37977753af93a8d3d55d01bedd99b580fa787370157ad8266865cdc7a62c96c6314d1 [...]
-RESULT = 0,
-
-TEST = 34,
-P = d697a03301b8688b6a3620da3337c0ba80b197eaa6478fa73b36086436ddcdb9bdd9c29a3c80fa0382e83acc2442bec8d992dfb8855ac5b44ab89338f416284ca3a12bb4b89264cd0c3b35055d8da19481a0e42d74dda5c95dcabcf7c6b95d48e39c19eec2b200afb8f356fc7c61e89ef26baa0d06c8fbff4a2d47bd43d8bc1b,
-Q = e7f2184a9e1dbd001a7274b38a3b6f6dd4be33532b2b4fe2495f5d327d7fb67ab96209ffe51894d4278a2ba67fa94a714cff5e08e8b3a9f95becb0c259d9fb6b667018062c21439ade84e6c2185d198519fa7d6006553312e86c721880037c1d9ba3fe655a3c1a87270fd2a1f99f84a80b57a4a1312216279ffa0ba7d6ede535,
-N = c26dc1403a28a00b12048b5e7b1c3932916a9a9be0285904a35b2c10d67337f923e00b9300cf0027aa9967a788e0a972621a4d9ac2050f8c2855162c9031fcf42b060f23f62d1e5694888cced0ccc7f245d592932794e3c1eb03f93f37afc420e9e78002e8f0c50a1d7861376949aaa140ade25ef8105723837ca0f78741a49671af10a4e1454591a0cd5b6e814b062f1395a98bf583aad40e81f263eeed9b287838e6f9f768d6da4d6e934b5d016284bef78072e3227c557aa9e51ea5fe92582ed094752d0019ce4a3f856297de883afb32b768fb5e0c74fac7e60ae84070124df7664982db677df4d5b147a9acab2013a05b6b [...]
-G = c26dc1403a28a00b12048b5e7b1c3932916a9a9be0285904a35b2c10d67337f923e00b9300cf0027aa9967a788e0a972621a4d9ac2050f8c2855162c9031fcf42b060f23f62d1e5694888cced0ccc7f245d592932794e3c1eb03f93f37afc420e9e78002e8f0c50a1d7861376949aaa140ade25ef8105723837ca0f78741a49671af10a4e1454591a0cd5b6e814b062f1395a98bf583aad40e81f263eeed9b287838e6f9f768d6da4d6e934b5d016284bef78072e3227c557aa9e51ea5fe92582ed094752d0019ce4a3f856297de883afb32b768fb5e0c74fac7e60ae84070124df7664982db677df4d5b147a9acab2013a05b6b [...]
-L = c26dc1403a28a00b12048b5e7b1c3932916a9a9be0285904a35b2c10d67337f923e00b9300cf0027aa9967a788e0a972621a4d9ac2050f8c2855162c9031fcf42b060f23f62d1e5694888cced0ccc7f245d592932794e3c1eb03f93f37afc420e9e78002e8f0c50a1d7861376949aaa140ade25ef8105723837ca0f78741a494b3255827416f20061c24c5e0c3d7d606be25de4e2410cb4a89ec8ccd3a9016f400fd1a5fd5cf4802a2fc2cd8b915594a986542b175140ca7d404a123580e6ea024bf50ba484c71665f7f699b21f3cd215f9755db802b3398b490b6faa18396abceb74df565ed4c4714d287a933ab3dd915dd0cbd [...]
-M = a7d725f87004efe2091fdf321d7de7b8136069d016b78746664bcea368b64569da017b022df48f84039b47306308f42d7be03124d7640e78401a9444d10889e53a0e5d625825b0601b2352cf6f1c13fe0e8ed25ea4c5d8b7f4730e69df64e88efccccc95a71c1a47de582117de870f4d6942830e71802ee33c360aff3f99b7c5ff93c870136d117c650ac0c66919a25c1a7e1e04c3d0d23a78343100972a9277f1db708309f9384e98996e9f91974d585bdff36bd9d35a7ecccc5e37f38b7a2183c41cf0b8b799235095887faf493b11bf7035c8eacfa9fc291ca70446525c7e143c8d2ba3c2e30ccabb14bdef01fd32fc6a5c89 [...]
-RESULT = 0,
-
-TEST = 35,
-P = dd512191e39e26ef3513d249ac3aef5319f65b1706bd1f09214d786c4cf9bde75d61b892b388af6095306734f499f522730089648e6903753c1667deef12e16d8267d896037aac0150904043b8694299bd503363671be574aadeca183951e262ca55cf60cc8596177d420d9357cbc70ea38bf7b0957812870c3e6db984b69bf3,
-Q = e7ff32124cb89137841daf582dd106863485e3075d508426506ef3ee5eee43ff0a78aa0219227745821e78ba617b246c038ff73eac4131d468a308b883132486759ad8afaba2f3613b866736a97723fa3dc23c49cc006ecd1089388e975f18d4981bc22dac1857e45204beac43b40d9c5ac0c1a4eb7370da1b55fb587163a68f,
-N = c890d464bf4bf033e8fc1b44bf515e1fb9c365603180a46c0a094c4c87e59a00f0e14167c0a95f6b55d9aac02ab45b952ff2b3c334626e874c2ad16c0714dff27bb6fbf43b2c6014ba84ce3e33a4c052e0c597f1c9a36512aa4bda57f7802b21d5e015bc0041eab75ebe99e95a1fb0ac542ee2bdb6aa4636a7601561eb4b5c16ad049505da95da7821a23ab7dd8240eb2aa093abef799617894464d47001aa54a8e3a97c17fb7eca4d7213c8ee4ba30a0856d9ff3b01c8743a6e356d6f23cba4e93666c06e4eecd8a49098d15323ebbf2a2ed479c5aab66a68a63cfe49fdbe90233b8d1774b3f9ce8759c001dcf236a5c2c50bcd [...]
-G = c890d464bf4bf033e8fc1b44bf515e1fb9c365603180a46c0a094c4c87e59a00f0e14167c0a95f6b55d9aac02ab45b952ff2b3c334626e874c2ad16c0714dff27bb6fbf43b2c6014ba84ce3e33a4c052e0c597f1c9a36512aa4bda57f7802b21d5e015bc0041eab75ebe99e95a1fb0ac542ee2bdb6aa4636a7601561eb4b5c16ad049505da95da7821a23ab7dd8240eb2aa093abef799617894464d47001aa54a8e3a97c17fb7eca4d7213c8ee4ba30a0856d9ff3b01c8743a6e356d6f23cba4e93666c06e4eecd8a49098d15323ebbf2a2ed479c5aab66a68a63cfe49fdbe90233b8d1774b3f9ce8759c001dcf236a5c2c50bcd [...]
-L = c890d464bf4bf033e8fc1b44bf515e1fb9c365603180a46c0a094c4c87e59a00f0e14167c0a95f6b55d9aac02ab45b952ff2b3c334626e874c2ad16c0714dff27bb6fbf43b2c6014ba84ce3e33a4c052e0c597f1c9a36512aa4bda57f7802b21d5e015bc0041eab75ebe99e95a1fb0ac542ee2bdb6aa4636a7601561eb4b5c14e7b44161aa3f22516870b91603764b11dc24558d8b6bf2e81787f879c419a86e410946e74b505824362333d99836897b91c6595c0057932a95b4c4d5fcfdc5b0f133b57abf314d761879f156f143852b2f1c64cc928e6228ad3e3a57794cc358c0c9fb88fc160bd2b812f3c2417261fac4785278 [...]
-M = 53cd5d30cbc9017a4480e4dbe4b80befb7dd39e3729107aa3df3bb5a979efb84ea82cc76203b75be6823841d029a4c7034054d2bb0c219b2f923b9c08a9d5851466272e980734cca20d1f8f12b36dbfb240d64674819528db0ef45b9c3a386e6c22815514eff52d969119ef8ed25b473feacbe18484f7b49378ee479efe9fcdb701a2ef1140a0fb48b5ae89834ba651d48fd4a00d82c21a3af8fa2a0f739586ec9a11b47ee569eb12b1df9e1b6ccaedfa7d8b77d57dd4b086f3240c0378cbd780b4922f48f004e403718b76c1ff659ca108071ca63f09d8b543887cc6c51c41417515a7cdc6eb47cda41f68f3db26845b649abea [...]
-RESULT = 0,
-
-TEST = 36,
-P = c91a999b2be2b297c09ca2c8c245e9a7ef10a656fbb100ee327f204dbf254ddc0a8f37c8634134532b3f8813677860463a8503eeb548e267403d332aa375ff25699deece94a8b30e9486602b93e7bff63bf01e7d9709fb2661dacf29cc801b4344d3a8c3b34795c43601e73f9ef2f19c47ea55c4b41c757c00d56e068a782525,
-Q = d9f7fdda6e9ec9872b0b38223e54d7ee8725c0ebbac096bd066dbb0e5cfe38834d57d8f046ca08d5f043ba89d4cfa4b100923cd11c1f56cbad91246f3da44a4260d1129ed19c0df4900d2295f8437e6c303413e35500709634718d49e8ca982018b4b697b9825a6911f994a90edda0b595fb3ab50c95ae98ad26e248b1994d41,
-N = ab3a5c499e45d45ae84e48ad01f8a4d9e46abdcd3b4b67be6a0784ac06c417ede9c84a11d4cc5d062071979bf743192f2b2cb8def554ce07a11b54b9f876586e3de184628031ffb1ef5c73134d8600af250a86c992f0652faffeaa171d227aab7a8eda7ce0a137f5bb618cdf9e1d81805076b41a47814d1466eab65c2364070e0de7b8d7e5f1105ee691a23f4bcbd656f0d19388e42ba6c627384330fded681e3c9adfc8da17586f42f51ed6a02bba3b99d0704e6c55520dfeeb7676122a15af3068d1fcde3046e3531b9e2274e4c7683dd702f6c2de160d4fd0e2ff3d98dce995fe374abdcfc6392f36a92fd4ebfac20185c6d4 [...]
-G = ab3a5c499e45d45ae84e48ad01f8a4d9e46abdcd3b4b67be6a0784ac06c417ede9c84a11d4cc5d062071979bf743192f2b2cb8def554ce07a11b54b9f876586e3de184628031ffb1ef5c73134d8600af250a86c992f0652faffeaa171d227aab7a8eda7ce0a137f5bb618cdf9e1d81805076b41a47814d1466eab65c2364070e0de7b8d7e5f1105ee691a23f4bcbd656f0d19388e42ba6c627384330fded681e3c9adfc8da17586f42f51ed6a02bba3b99d0704e6c55520dfeeb7676122a15af3068d1fcde3046e3531b9e2274e4c7683dd702f6c2de160d4fd0e2ff3d98dce995fe374abdcfc6392f36a92fd4ebfac20185c6d4 [...]
-L = ab3a5c499e45d45ae84e48ad01f8a4d9e46abdcd3b4b67be6a0784ac06c417ede9c84a11d4cc5d062071979bf743192f2b2cb8def554ce07a11b54b9f876586e3de184628031ffb1ef5c73134d8600af250a86c992f0652faffeaa171d227aab7a8eda7ce0a137f5bb618cdf9e1d81805076b41a47814d1466eab65c2364070c6ad521624b6f943ffae9c7544b3114c07a9b2c462dba0f1aee4b67d4e1c9e1bee4b3cf10300c1b462771dc3963e3b5445eb92f8e9aed18db111d1edc310fcc4765f9d08f77eb85e02e881b60e8b98905d1b2d095d6d3aa50b984868b884e29863875d7ef5105d60be73b2d47271b687023a0365b [...]
-M = 7b31853161be96c0463939161f837e26a4f9f0f996ca4c36bdc29021c29b9c28de6f4d989845990c06432366e23d406ad5c00bb7e3f6514ed6b7a0ce8350449d58161f227131c1b8cf58cd461d7d595980f3ec5bd5c89762db4814fc8a397d94ddfe07d5ad48844ba97f3a50d67219e2952ccb9278933462fee5264cf8ea078d437fb241a21e4babbc302913dc88a2753fbf783f93d4029b48c621e626aa0e71de3e9b256e0bab18b7589b637a231af7c45ad1d41d1e67b6d031ee73297909a986c8fca307f530dd46978a7ad1cc287523e45d814dc83b553781d92b5e31633909dd6f15086a6f7e6f2f1da42c6df4b79bb895bd [...]
-RESULT = 0,
-
-TEST = 37,
-P = b8484a8b637e79313c6098e4dbb1c26dc8ece99864e88ff60ec21e0cc9846d4b871303cbd6e303c4e2ff9a6c37e22c78e6124829b103e50e5fdea20ef3aa9561e7433d9857809df7f5d32f9f475e14e5bba05e38cac58fefd33d9b86abbba288ae19e6c55fd9fab37a6fca0bc1ae1cab0cb13add2fd3d450ac7fdca05b15fafd,
-Q = f247ad1bf0892dc9db603b654f4c7d906311182ab1a3d16255ac85cd53f39bb0c0b758d05f7fee90b603baace5b4ebcaf46b32b500f8a1aaea618fc7e0a973330214271503d342e83b0fb20a4adf0b3c770dd2c03b038db15ead2aea3c205fe95535b61c4ea724482df9d6f416a967f7ef1620353d955aded33849ab2a066ee7,
-N = ae67ef2167dcbb1cb39f132f8b63d7e21d1621eb4f8039db247153e1b3124d53f2c1583cd8e8c341801eb4e68d7b9627de4ccff4b7e4af4098a2c990cbdf731415776c633666c4cc0c0629f4bd5951f9b311237139c0de9d11f030d065c92f511589a0dc1c0a9f56132ee5b6e84c667ef94d1b0ccaa2868801fbf0b7f657fa4e7161bb7357083ee5bb15c08af19ab51eda0c53191d304728405ddb60fe003e9dbed3f05dae29d8aec4ded36d2c12cffdb10f70a14526015cc1cfd6ad86319742975b7b9759d0ab8d60360ab3c612ffb5a4f3a422e44ea02a525dadfa6f1cafc078d8b4520c3f3089c5a6ba18c7f78fd2194183e2 [...]
-G = ae67ef2167dcbb1cb39f132f8b63d7e21d1621eb4f8039db247153e1b3124d53f2c1583cd8e8c341801eb4e68d7b9627de4ccff4b7e4af4098a2c990cbdf731415776c633666c4cc0c0629f4bd5951f9b311237139c0de9d11f030d065c92f511589a0dc1c0a9f56132ee5b6e84c667ef94d1b0ccaa2868801fbf0b7f657fa4e7161bb7357083ee5bb15c08af19ab51eda0c53191d304728405ddb60fe003e9dbed3f05dae29d8aec4ded36d2c12cffdb10f70a14526015cc1cfd6ad86319742975b7b9759d0ab8d60360ab3c612ffb5a4f3a422e44ea02a525dadfa6f1cafc078d8b4520c3f3089c5a6ba18c7f78fd2194183e2 [...]
-L = ae67ef2167dcbb1cb39f132f8b63d7e21d1621eb4f8039db247153e1b3124d53f2c1583cd8e8c341801eb4e68d7b9627de4ccff4b7e4af4098a2c990cbdf731415776c633666c4cc0c0629f4bd5951f9b311237139c0de9d11f030d065c92f511589a0dc1c0a9f56132ee5b6e84c667ef94d1b0ccaa2868801fbf0b7f657fa4cc6d1c3cc030097eaa354ec40c69c7520ae0e515606a3e5cfdbef3786e08835a1770993c177c6e6592bdb7e540e7bb7b9d691f5c293297aa3778fa4d6b1dd8eadae0416e9fe7ccaad2f53290a33d5df9372457329de8582892072e7898740ad4e758917705dbe118e1d3d1918efa00b2f1d7a28d0 [...]
-M = 11ee21333490fc6ebd5ee039921f02fb3c6f91b4d79150d2de4afd91b7d9fe92fc25fba4d9932cf7c528413ffc6f5a1867bebffa45e0028eda19a5097104e8759cd74726052198f4a41c9e28f8a326a2e2a65f02da647aa6dc6b2311874a95489dace1e47db81e7ed9a977235f67864e760cef64e66691b39f46907a551e56529de5fac5240adda26015d7bb6cbf684ea4341500d3df2f1821240663bd0be2b1b421a1b39a70add5b8fbcb01f7288358a69f5913036144c1cd13c2403b6d2e90c6df4828760082218ba8fa0001d6727131f009b8d1f116dcda41aea8cb15ade2b75e32ee9fddd348f58f2cb145b9f913056507e9 [...]
-RESULT = 0,
-
-TEST = 38,
-P = b5ddcb7fa750662cb3a0bd69b45b2ccb2077c32c8638d470dff7a575e6cedde4982a2c660e275a051604aa0df531cffa33fad1b73af5925ca81f55635bb59eb01f02b37e93f8e8bf83a56298eb2d11232c80cb65d33bc44e5203df153bb5620fb859b2162a49e8ba34d3af497b61e64d9844fd828cf6efc75d059e0e15caf215,
-Q = cf1c1fff5f5eeaa12d7d77c829ec341d7d2a941881e2e9e4db86ff76f6f0694761a28112ea9e6f9e3420614e2d77d2f6366ddb20d7e53327acc7d0c742e1a7352bf18217f4284b150e2daedfc559974ee06161014410df34c915e4f9194fdbe0442db75e5ada6c2319f4be523987bc7491f208e9b9ec81f737f6f9af3fcd959d,
-N = 93225289c19335780c5eddd680df1fbe643f9fb5e5626497c0f9a03b3e1c25f1ac5c2ca76506a0682ecac58fd9a67b78454c049c5f85b5684155ec116682b5e2b3c9318db1adc156b331d34e3eaa93dc473e6fbc052e7a3b81b3d9960ae10da50993619a5500b54dfffb86a1a8ba5e5711a026014e80300ab7adb0fabd4a9dc61bb654aed97e07f76036616fa6d1985c3bc409feecf91989544d27de60daeb700e95e98664862102a6df739a7406837e210a4a56ecb9af086bea9b14453076708e6715f17c8b1b39299ab402f1567510835451703f1076e5fa01c29da6b60bb3ce8cb815a480dbb114c55a010dc8b09cd89bdcb1 [...]
-G = 93225289c19335780c5eddd680df1fbe643f9fb5e5626497c0f9a03b3e1c25f1ac5c2ca76506a0682ecac58fd9a67b78454c049c5f85b5684155ec116682b5e2b3c9318db1adc156b331d34e3eaa93dc473e6fbc052e7a3b81b3d9960ae10da50993619a5500b54dfffb86a1a8ba5e5711a026014e80300ab7adb0fabd4a9dc61bb654aed97e07f76036616fa6d1985c3bc409feecf91989544d27de60daeb700e95e98664862102a6df739a7406837e210a4a56ecb9af086bea9b14453076708e6715f17c8b1b39299ab402f1567510835451703f1076e5fa01c29da6b60bb3ce8cb815a480dbb114c55a010dc8b09cd89bdcb1 [...]
-L = 93225289c19335780c5eddd680df1fbe643f9fb5e5626497c0f9a03b3e1c25f1ac5c2ca76506a0682ecac58fd9a67b78454c049c5f85b5684155ec116682b5e2b3c9318db1adc156b331d34e3eaa93dc473e6fbc052e7a3b81b3d9960ae10da50993619a5500b54dfffb86a1a8ba5e5711a026014e80300ab7adb0fabd4a9dc496bc692fd2ceb7297f182c3dc88a37739e21b2b9e4dd5b3398ce82f1831ba44414c93c0d6bc0575f5cba683e515ce08db6a19d7ed9dee984170374e9a699308b4372e05af469e76497c7a28a40cfcc9e7672250927c3d362dee7fe8f51b0cdc3d2054ea11f5c86d3c5fcec6558df0ddaae64d645 [...]
-M = 7b3c6d23c948ad807a1ae0507e8b829b14cb617faf0add50567d8bc0ca4bc53ba09cb06e49d261ae361d86b8295990813f42edf988c0b6d9f86a387e318b71c9562af22449f235db14c0668622da29efe8a8f34d145209afb6d882fa65d30e99e0e7eb6d59a1776d4a4032faae92fb03daa69010c03e03d35057a094994b8185bca4fc90318c354c4e16c82f66f197d0dd327134d379a2f87c6b0f4e9fcab0df85de2f7f3894c6261ba907a4a5901b822a877074ee754e11b13daca47bbf084cb79e12c4de837d2aa5e21e7659d7784c566444dd57b98779269837a001e82ec09d9bb4e93b31f8549658a826995246e6032038ef [...]
-RESULT = 0,
-
-TEST = 39,
-P = b90e9a2197f8ac3f904d49a6edd43277b6d04441f223dc7e6cad0f7653d5f8aaa2c51f4133aa7811a2dae2cacc94a0ee9eee4df9c63d7479df2dad0d91a369c9365643678dc7457c9a187baf7996444289b67608c0589c6c7e2a8451e23bb08659e1ed31ac4378d4784d7d5cbef7443f567134036cb56361a4dc21e651c0d835,
-Q = c92cf9db6eb6f948e68aeaafd730af698ac7bc8f4516bd70c9e006b67d9d6140cbccf1bd75aa0c57920db66eaa33f198fec822e4b5c072a71201ec0fa6a61234e83b7e630d9988b83c7fa34792b1ffb24015f7a4f5463d705c888195ec7f15e6808c4d14039247b8608006b477ae27fd608f9dca5ff6286ce0930cb352e985d9,
-N = 916cfa24b18970594e5b1ee974ebcab7e7ecc051426e93a8a4b5386507cebdb45352776bc6880b87108484144917279df57a0feaabdca483d516de066f53eedbb90e91a06e13e9d3f2d35090bd882e99bf215adbfa22f7217c6764034e1e0b5e661316656583f36c237817def7fe2cc07cff3c8934fd48b14385265ac5fe2d22109acb1608d5b5b3c290ec017e37023187a547cc547893f4f526d3f4c67725c079c58f4d6beaabe8b4d391201605ec63b5c3ec8ada1bf9b783c0ea1bee8866ccdc49110e0f3be45ac2673597cc061cdd03d79239b8f112da0e3902f766afbb4e8873e855d2b5c981dfe117f472796203f4ebc6ad [...]
-G = 916cfa24b18970594e5b1ee974ebcab7e7ecc051426e93a8a4b5386507cebdb45352776bc6880b87108484144917279df57a0feaabdca483d516de066f53eedbb90e91a06e13e9d3f2d35090bd882e99bf215adbfa22f7217c6764034e1e0b5e661316656583f36c237817def7fe2cc07cff3c8934fd48b14385265ac5fe2d22109acb1608d5b5b3c290ec017e37023187a547cc547893f4f526d3f4c67725c079c58f4d6beaabe8b4d391201605ec63b5c3ec8ada1bf9b783c0ea1bee8866ccdc49110e0f3be45ac2673597cc061cdd03d79239b8f112da0e3902f766afbb4e8873e855d2b5c981dfe117f472796203f4ebc6ad [...]
-L = 916cfa24b18970594e5b1ee974ebcab7e7ecc051426e93a8a4b5386507cebdb45352776bc6880b87108484144917279df57a0feaabdca483d516de066f53eedbb90e91a06e13e9d3f2d35090bd882e99bf215adbfa22f7217c6764034e1e0b5e661316656583f36c237817def7fe2cc07cff3c8934fd48b14385265ac5fe2d208e5f37190226102b4bb8b7aab9322050460d46fb1d3dfa05be99bdc7f503cbd50b337e4ec296277f7feaf7e69f3d59dc180d7bac5e1e1296929150feb63eeacebdb74f4373db1625ebcf16a0bfbdd8e83a0b248c035238fd3385fd0f97f4f4e1ae05ae1022e008f5071393e33bd3f5c73deaf4df [...]
-M = 3141cefb7578b2bb7163d64afd8dc38ed3306ae1d28b6ded32791a8059ebf7b3234fd66a2a3e6ac20af8faa214e915ded6dda890a6da33c799c24b12db738b18b48ac564780666d8e223934809f704cc94289870a3e8aa5ecaa9bed34afa4d916d6f5d51d972b26f011a89572fd94f5809bd61e0bcee9fc2303c89dd5e9cb76819eb70ddd05f3f14ad67c3f306e0f0fe708155ed7808c398e64b077dfadb2f49339365a7d02064b74de50afc031beafb0dffc92ae372d73b03ef405048011136d73902937ac7f43b5db5aab472b17eea1d9ae4096a46b790d4c923da52fc88f418f4c5dd6a8425a039a6506c1964c3a7bad8a52e [...]
-RESULT = 0,
-
-TEST = 40,
-P = cd69981d21fe6a46b2287078e1272d25025ce09b578a1879a507236ed225f3c05871b882de2d431a23ee8f4e41db6a825a0004e6827bb6372d45a9b9c704c94ae92aa78547600c4b18e05e8b7a782072329280eea7dffea6177b6db7576236df84b2f221d470f168f947884c32c9e073a77884953f69e6da73c9448c9349a157,
-Q = e7a43358a5839b08037bce7ff6b62f75ee08f8cbcce34a55313310b5990c9d0e9de4980a8c81b7315f18539e24e136a68fdaa61b6c8ff2f22045a16ca287976a99c2d5264141a68b5c56afc687fc90bcec4f6bccf08ed544f15691f6b1e0581a9a3d4665eb8d896a513abb47b6996a70ab5e2c1a78b3c8aecf152b51a0320113,
-N = b9de091ae6bf192439b095948d5b901ea9fcf2b1dcbc76e52bf650b07663cc0a41222043bdb12cba6ab5cbf7aaa5dad1a9a1f5f0cf0790a794a5acc499aa117fa397c1c6378ea2c42fd474946782338997e74aca0534151211da7177a24259b42c937c7b19f8251f7bd60347fc502bba6dc7362d9034e2696def03ffd7f237198fed84efe4e0bac7b5a917e3799f3202eb192996d56949d3ca9ecc05f263929abfe31c0472d2b1e09742b06e74381a3b76a1f239ca959472dadb0551f652e13a5bb7a50d8547b4db8e89f93fcc7d14e1d551f5527f58c18b9097cb937b0ed31f1342bf0f447c297d86a9a6babfa1df213cea3b5c [...]
-G = b9de091ae6bf192439b095948d5b901ea9fcf2b1dcbc76e52bf650b07663cc0a41222043bdb12cba6ab5cbf7aaa5dad1a9a1f5f0cf0790a794a5acc499aa117fa397c1c6378ea2c42fd474946782338997e74aca0534151211da7177a24259b42c937c7b19f8251f7bd60347fc502bba6dc7362d9034e2696def03ffd7f237198fed84efe4e0bac7b5a917e3799f3202eb192996d56949d3ca9ecc05f263929abfe31c0472d2b1e09742b06e74381a3b76a1f239ca959472dadb0551f652e13a5bb7a50d8547b4db8e89f93fcc7d14e1d551f5527f58c18b9097cb937b0ed31f1342bf0f447c297d86a9a6babfa1df213cea3b5c [...]
-L = b9de091ae6bf192439b095948d5b901ea9fcf2b1dcbc76e52bf650b07663cc0a41222043bdb12cba6ab5cbf7aaa5dad1a9a1f5f0cf0790a794a5acc499aa117fa397c1c6378ea2c42fd474946782338997e74aca0534151211da7177a24259b42c937c7b19f8251f7bd60347fc502bba6dc7362d9034e2696def03ffd7f23717dadfb97a1d5eb5790004d8eaa1c1d567fab3502fb0fbe704f46497e1873101cbc98ccb770823b795143bcd820d7b79128cc74737db89eb498d4fba2b8cc68084d8ca2861fca602051952eaedca0863b2b6700896e6e9eda087c5cbe571cc4424f4528687847daeaa3c276326d63e943cea138aac [...]
-M = 6b16e450bec036b099b3ef2486f3d9d06e983bb6fc3279f9e3a4f18527288690520bcf3a0ff782a2f735425326f026fd556a13af71d2f247501dfcd21da4b749949e8524fcda9fe195c6a07ab8e349562534d480edcf2ddba0763a2e4f16d87de5baf3745ca97a4ebc4bc849f925e88038418a950d40115118da986e88caaa0229d868b1091f9be357ee499c58b7c1e7c4348b2da22f3c018208ca6b141aa7700e6dab580baed5eff03ac546a377ffd469b7290165e75ada215b786205d0f7be7af4cb9723df34c510cb07a4f4e86fd10d21372fede512f2c0925d57fd0995148303be797b669f9f33a9a3c768af72c451adf940 [...]
-RESULT = 0,
-
-TEST = 41,
-P = e4d2435c5828dae1289ffb7cb5208550eecb6f5f171cf054a1c401b89242287cadc46d1d52ae134a8bc284cd6379b50e38ab5d041e4c5c25b62a1e1659af08cd976655184b945c7e5bd1e9eba03f83c2ddba23acbf0a535de2a363d2c15c5155d31959e18266b8f5f75bf02abb3af0d8b1000afe1158d564fe7a99ebfb2c11bb,
-Q = ebdbf17ba0ebc8ce95edff7140a8df89506616f2a5d672e69889d97f3817a89b5e825047c34c3614db42f1d805b9cd688778be87b333f101a24e1c2b11513141c2e4a57c703beb0f9c1005509153d0e904ecf83df34b1618f06845a88016cb5c25e2dcef568ec5d86167ec1842d6e9d178e8cca537330311f32cfc77a2f9f5c3,
-N = d2d19b8dd73362d7394ba9d10807f903f051cc67fa95b3339276fd87fb6084ee987db1e9d9b454761f1e00b45e79d9289385b114bb8bd6a359e56701f73f2b3f8e8cf07ceda6b44879ada86e789eaefa7c9f02b9f1be9963af8f35d4ef93e0d047f669c0d753b8b6cafc83e179186f8fcfd28d6549f18b60a30d0d94e7e0c51e2538da59574b9083cbe470167db8e27d4f156d316b7443a374a6b1123d17b5b9cca7664fd082b791eca29dc5102e92e22a303be13ad04fea9149d7953a1ed99a57b6ce03b199ef557732d25ca98c83f3fee70624d1e84519ed31004a0f54946cd7a42d228130ab7e6d2c25d7370b23cdd0d745ee [...]
-G = d2d19b8dd73362d7394ba9d10807f903f051cc67fa95b3339276fd87fb6084ee987db1e9d9b454761f1e00b45e79d9289385b114bb8bd6a359e56701f73f2b3f8e8cf07ceda6b44879ada86e789eaefa7c9f02b9f1be9963af8f35d4ef93e0d047f669c0d753b8b6cafc83e179186f8fcfd28d6549f18b60a30d0d94e7e0c51e2538da59574b9083cbe470167db8e27d4f156d316b7443a374a6b1123d17b5b9cca7664fd082b791eca29dc5102e92e22a303be13ad04fea9149d7953a1ed99a57b6ce03b199ef557732d25ca98c83f3fee70624d1e84519ed31004a0f54946cd7a42d228130ab7e6d2c25d7370b23cdd0d745ee [...]
-L = d2d19b8dd73362d7394ba9d10807f903f051cc67fa95b3339276fd87fb6084ee987db1e9d9b454761f1e00b45e79d9289385b114bb8bd6a359e56701f73f2b3f8e8cf07ceda6b44879ada86e789eaefa7c9f02b9f1be9963af8f35d4ef93e0d047f669c0d753b8b6cafc83e179186f8fcfd28d6549f18b60a30d0d94e7e0c51c548aa5815e36ecd40d56752887ef7da30fe3e6dfae80e0683a58d5da72bde4a1c060a8eaba886e32859d271fa6fb106b6a0c2055695002c338d19d53cf1e9f8afd6bd36ef5c9a7c77f50e32077f92f481c3fea3a1f92dba31a2556cecde177badea7f651a83b2cb01468499438f94923a6ee6e4a [...]
-M = 4ddee5da69704afcdc997b6389823df66410da2a9e49f60e32507dd2c31d80618bd7b39b3350a4e78d20c60e18fb7006acacfba19ecfef21bd57081c852a9ffecb08aa5587d4070bb498b2f2382c1f09146ffb19d8c77eebebdc3fe9701d0c163a18428abf9681b9e6c72640568ad4e7887b3d964ced8a137fb793e4b65c7db2db5326c7d3aacf1a17413104e8de71f6a824f4f1829536721a16088bb309663859494a93abdf3ac2c594ee54f9e2f5335b9ff7ef4222ba55550615ff5d04b115f6a29acce6a26ed5ffbbb109420c01b2eb40bf17ab673afd82b5f48b07b58f1121ea5fad1d1a847f5b8ffc34a2f321709c9add28 [...]
-RESULT = 0,
-
-TEST = 42,
-P = bbe28a3ecf8e32470641cf6a33d6dce7b4a7def9841a4b203c4ec3410081a5a59391227eb4f125f79a23cd3f8355a0a0e73aaa5a97a3877e57042bcb7837fb235491b503797ac89d7fa4a242dfc27c47fa9f9639af290faf288431aeafad91cadf7e4cdadcba35b039126144cc7d95e2d269c74427132c1f6142750a9a446173,
-Q = f14a97554ad83cf719f91027bea949f26cf3bb38fdc518d0f19f7830bc40fb9ac4670c6b8c63fe69709aa0d1dad1f2325136f6758022d881ba7efaa02d91bb50f9df21b2625f998be708d2facb9d61fdfd8d640eb01d7fb9137787a716cad156d84003c9a95a2165b17e9290e2710635f8f68594f47b3f241bc54cc79a2b6fab,
-N = b11702b2503dff906f529a054bdb5c92d8ef59aef6299c159946dbd2b4f7cb2c33fc3cb006c60128330fb2eea46d64807c869e6922ae0ed730ca6b39d30f7b3d94b85327266f904f572b49d5a13f95f47fd14280b7af356acbf772cec19d8a9ee8f1bc57b5b800ecee7c6b14b28d6e5195989d63289276a9ff5be4e051607fa9a1ec3735855fef48ad58946823ff6315bece24b91d06e4c8a5b20bb6f65041f7dbfaccb1a90fb7548c32b2aa724aa6f2c803a1993cd9a12706ba010f68035523ff83f6a9a510eb2f021ef5e033bbbe6a9f251f65a5201de82efa653c536d8d6f5d8c4b103a10eec6f52d762d0fe63166585daaa8 [...]
-G = b11702b2503dff906f529a054bdb5c92d8ef59aef6299c159946dbd2b4f7cb2c33fc3cb006c60128330fb2eea46d64807c869e6922ae0ed730ca6b39d30f7b3d94b85327266f904f572b49d5a13f95f47fd14280b7af356acbf772cec19d8a9ee8f1bc57b5b800ecee7c6b14b28d6e5195989d63289276a9ff5be4e051607fa9a1ec3735855fef48ad58946823ff6315bece24b91d06e4c8a5b20bb6f65041f7dbfaccb1a90fb7548c32b2aa724aa6f2c803a1993cd9a12706ba010f68035523ff83f6a9a510eb2f021ef5e033bbbe6a9f251f65a5201de82efa653c536d8d6f5d8c4b103a10eec6f52d762d0fe63166585daaa8 [...]
-L = b11702b2503dff906f529a054bdb5c92d8ef59aef6299c159946dbd2b4f7cb2c33fc3cb006c60128330fb2eea46d64807c869e6922ae0ed730ca6b39d30f7b3d94b85327266f904f572b49d5a13f95f47fd14280b7af356acbf772cec19d8a9ee8f1bc57b5b800ecee7c6b14b28d6e5195989d63289276a9ff5be4e051607fa7f4bf15a16af9800a8d1db4d6317f3c3b9d328a869b2780d777c3d045398da0b784029dc767ba92f3817444991423141f8f9200c925134126f536daa3c2399eafb1131ff3c93689059b7180a2885be024a6f8251d45d98e7ff2feabe68cf52a4da5cdfa6bb3fc97b10a9c825760f7954d8cfd5dcf [...]
-M = 557d48bf60780970a34e62ab2f06cce05395f488e409bcb151e8cd6d62181f69f1b7f3732039a71220a57dff4b9255ec83039b4384f06f475eec0784d5e119a46814374f9654b765d4585e151e328dbfd23afc4388920637400a9adbf30252025755faad7058b85a643383d842b24cb39d721fd2f2ec4ff3c36e45dff3d4788a1e039829977b9773d8c00b849269c72210b598c383f6c2695320548202be25a0f31b7e77595add9376d5c8e59d8c160e83e25f8ce7a9412484b994254d0481eeb97879410b999c4a973f46c66735b1bcdf69dc386b04cfc84d51c3ad57abddbc8d9738c6732b990cc2f2cb3d1d45b86763485e5f [...]
-RESULT = 0,
-
-TEST = 43,
-P = ce44303fcb5d3bec1dfd515eb87a9abc889b454c1bd78e904aaac5e938644689dd375936aad965a5b79162b24302196807fa516d577ed60880b89b93a4b35d16a581692602c10f051512469fe872ea128af888db68c03404614d801b2a84f810b27f469542bed95b57a4110046d22f62f017533f60e44a5a5378bcf809ba5bb9,
-Q = dbc6a263e2275ad2de1cf3c9ad369ab2f8917be57a87559733d0331fcedac39d4639b37ca75e8e1b3706375de4cae3c09f8bbd91b1005c63d312cb12ac9afd33e97e2be762db50de4c85da0a7cfbcd3ebd20e7a81fa0d8bd95e19d7ec9b5c0b3f9896ca1b620f8279090e046abf1962da4e2a45974e74837f3541d0a43414c75,
-N = b11460db856efbe5865d3f7adcc1f3268f3a41bcc2565e820771e16916f70a1aca80b12f701493171355be8deaa59cc9cdbf663e9cbeb546d747884b1f64dda63fb4eb00697c37fcd81de060643c3b3d74a4d043c340e69bf87d2b369a5a4c95d9bf2b092276c9768361499ccb766de8229f71b52f7103da8b5de94ec01733f71194a200774997787037435fcc09a0aa33f3f9d925d73412b9e7e405c7f82f41f774c0fe35f2fb80abeb8e28a845c04c303d029e3c1a1df46eb1b6095608d87ec1ee89f7fcaa42f5451eb13ba6c28fa211261b0f796d5280e865ec978c46bc956377a594f3c2104afb894e54266183dc37375431 [...]
-G = b11460db856efbe5865d3f7adcc1f3268f3a41bcc2565e820771e16916f70a1aca80b12f701493171355be8deaa59cc9cdbf663e9cbeb546d747884b1f64dda63fb4eb00697c37fcd81de060643c3b3d74a4d043c340e69bf87d2b369a5a4c95d9bf2b092276c9768361499ccb766de8229f71b52f7103da8b5de94ec01733f71194a200774997787037435fcc09a0aa33f3f9d925d73412b9e7e405c7f82f41f774c0fe35f2fb80abeb8e28a845c04c303d029e3c1a1df46eb1b6095608d87ec1ee89f7fcaa42f5451eb13ba6c28fa211261b0f796d5280e865ec978c46bc956377a594f3c2104afb894e54266183dc37375431 [...]
-L = b11460db856efbe5865d3f7adcc1f3268f3a41bcc2565e820771e16916f70a1aca80b12f701493171355be8deaa59cc9cdbf663e9cbeb546d747884b1f64dda63fb4eb00697c37fcd81de060643c3b3d74a4d043c340e69bf87d2b369a5a4c95d9bf2b092276c9768361499ccb766de8229f71b52f7103da8b5de94ec01733f56789cf5cc9c500b9741cfe3766586b3ab2c738a78f784feb3b6ceafcc0b9251ad403b44ae3bb07bfbd53f4188078c32388b6f39f339aeb881ae64f6304ba7e3432eef4ea970de311e38690914153d850c90caa8bf10c45bef136cefd980c03d0b76ef25dfae23ec813545d0d339dbe4ba23d5c98 [...]
-M = 81c3b86c0092a4f16b8930c6405733ed61737b058138f16b27ab6a3461832171403d31a35e880fbc05c514d1a4626e020a40df08514822de03af5c14ee1de4a7539e03dd5e5f2b65a11580413498bff8c2d3ab381bb688c159630b8d71850b90dad7ceda5e0518068fd764d1ac1e2f6fcb3b24f52a0dedcb9ab65c71c13933e0295bfd2779b7bd984d93b6b654169bd2049dc72711aeac9b7ea9c72f17520d5048c035bb6856b0c7479d1003605791364bc71ee5c76408c02923ee9f298742a4f037dcf6f6413e5eafe012e588b061d8fcecce36e3563bef20770117ca1ac7f32299381997e32853fa867bf16ebc90d1d0306dc5 [...]
-RESULT = 0,
-
-TEST = 44,
-P = e7d72d5df57efb2067c3446bc5217eecc4881ed03b4955b589c7c7a8536efaf4f94e5685652526bba095ffcfe2b290f0ec0d3781a83fa486f44ac7ac59cc87a4b3d2fd1ee98c86060dbb02cfffe3e783ff038205a52558a0be77eabe92dc85ccb3d8faf7e26d6ba7c879606076027fd494c078c446b4a9ecfef39151dba76b49,
-Q = ed1fd8e6bac1dfd5eadc71e5ca4d048601986dcffad11e58c92863f015035d19c3304b77cbcfa39d7359b5cdd466f3da373bd61438aff39703d87740e75c4c729a88e83433b1d20bfb503c27211a19f75abb1d7014d0556b192c1b2c916275c1f1e00e11921953ec2380f43ef8f8e56031daedd2451bd9e22805f0e364eb29f5,
-N = d6bf0c7cfd633d50c0699067bcce31afd83d1f4e0703e1670767329106eb61cc1f6b83b8559623539de689cedc0d398ce62ec2ec0de12acb10d318b19ccb5cb5199c045c5ad89ae5e3e54a641e0b2aca6fe1f3ec0500ee4c55f7f1291b55fa75d55362465fb88ec44f5e7d012fc286e449e9806cabc7eca0a04884a06d9c6aafe9fdeec380b4f4df01d0c92aa17bb9c59f6e001cdcf94faa4fe796e86cb06a50133268ce2ccd5952c87c9ca78332f00b28e72fc6dd4e5a89fd9d8b713a30276e9458f388b66bacb280a3ded2988816f273621e149b3f02c56fa2bc13396a194571d102c2c11245e9889789be48aee1b4922bf1ee [...]
-G = d6bf0c7cfd633d50c0699067bcce31afd83d1f4e0703e1670767329106eb61cc1f6b83b8559623539de689cedc0d398ce62ec2ec0de12acb10d318b19ccb5cb5199c045c5ad89ae5e3e54a641e0b2aca6fe1f3ec0500ee4c55f7f1291b55fa75d55362465fb88ec44f5e7d012fc286e449e9806cabc7eca0a04884a06d9c6aafe9fdeec380b4f4df01d0c92aa17bb9c59f6e001cdcf94faa4fe796e86cb06a50133268ce2ccd5952c87c9ca78332f00b28e72fc6dd4e5a89fd9d8b713a30276e9458f388b66bacb280a3ded2988816f273621e149b3f02c56fa2bc13396a194571d102c2c11245e9889789be48aee1b4922bf1ee [...]
-L = d6bf0c7cfd633d50c0699067bcce31afd83d1f4e0703e1670767329106eb61cc1f6b83b8559623539de689cedc0d398ce62ec2ec0de12acb10d318b19ccb5cb5199c045c5ad89ae5e3e54a641e0b2aca6fe1f3ec0500ee4c55f7f1291b55fa75d55362465fb88ec44f5e7d012fc286e449e9806cabc7eca0a04884a06d9c6aae1506e87ed07419e8af3112d9120d3652d94d737ca6dedb9bfcf76b50043e124156b3c6d0fbd88ef9b48ce709cc196b40059e2230fc5ec26c057a4c83f907535745fd0e35992d54a077989fdb778a157719a37e9ee14954b997feb628152b1db6cc17f9b94c8b86559c9d351ed9b37c7fcb908b57 [...]
-M = 53c1e0c88c5edc49eec4b6c4e4c00762d68f1c47186487b5823e6ffcfebf9910bf06d6bc782114414e488bf2435941fe38fd259d334d3c3dc6798b180dc11f60de770e2175876cda2af62801eb3048d2029b5ffef797c23dbdd0c640b4f223e22e8af83cac488463a935beae2fed80b30f19e9c8e9b58746b04f440bf7f31f36de88c79e9554630db402e072676ffe99e14f7536e619c165ec4cf22d5bf3fc7dc38a04c06d8b6c9ccc35e38929560d13ee427139c487576b62244427caf29d200dfb8f5944eb14150d473829ae76a97bb9fd706ea227bbc6a09aa97505046564e7914691628ff28431857f2258c7bdd95d581bf6 [...]
-RESULT = 0,
-
-TEST = 45,
-P = beeefb57e7ec78dca0889669536fe47ecea6cfb2a506abc7dc40fed09d5d122439d2edefbddb2c2518f6235f781d452d9ec1dd6f7178f2c6476ed1202b826bed4772145baaf12f45fc2547d47659ed35910579078a89a3f40b804c4bf3b425b0699d110fc87d307fc08e6e87281e1abf628f1763c1faf0ccf6edd0554d38edc1,
-Q = c504a657210b08b271f9ebd6ee4e753e04a6d9324f61fc35c76a6f6986cfdd51a9fc214266e40f9c3e28aca7583be319b7906bef780b6452ddd902d298be6cbc42dd21963fd6ddfc559528e64d22dcc71dd28dc429deec5a3042e254e7f67bf76a4c543668309d241a070280394cd0ac4ff474ad33b2d4212b7dbc661b583e35,
-N = 92f15f3685b00d1e836b995ac349b7d3aad91642cb3ed760c3bbdd5aeebac2b32e4dda2361294444f5bc547229a0f7cc4a40b3f181fa4b2617ceb9208cb362d1a31559ab823ab0cf8ae91963af42c29de59171303065c4be4b98a1b13bbf3316603636ae8bf65bf41b200339993911266cea2be0e04f5501d3d413791d9f8919b2c63615ca4cdba42fa3b49fd64f50fe3d6a269a220717346282001333ae3443dfc0567bec0d4fc7bbd0c7c8c467097c725b6c781c4c93c9c2ddfb3d48230c3925226140ac2e6af89593ed9c416adcfcb5b0fa20477e20fa0ad89a49f5c25e93fd785b0b184f8bdfefd50e00cccf5107f873c8ba [...]
-G = 92f15f3685b00d1e836b995ac349b7d3aad91642cb3ed760c3bbdd5aeebac2b32e4dda2361294444f5bc547229a0f7cc4a40b3f181fa4b2617ceb9208cb362d1a31559ab823ab0cf8ae91963af42c29de59171303065c4be4b98a1b13bbf3316603636ae8bf65bf41b200339993911266cea2be0e04f5501d3d413791d9f8919b2c63615ca4cdba42fa3b49fd64f50fe3d6a269a220717346282001333ae3443dfc0567bec0d4fc7bbd0c7c8c467097c725b6c781c4c93c9c2ddfb3d48230c3925226140ac2e6af89593ed9c416adcfcb5b0fa20477e20fa0ad89a49f5c25e93fd785b0b184f8bdfefd50e00cccf5107f873c8ba [...]
-L = 92f15f3685b00d1e836b995ac349b7d3aad91642cb3ed760c3bbdd5aeebac2b32e4dda2361294444f5bc547229a0f7cc4a40b3f181fa4b2617ceb9208cb362d1a31559ab823ab0cf8ae91963af42c29de59171303065c4be4b98a1b13bbf3316603636ae8bf65bf41b200339993911266cea2be0e04f5501d3d413791d9f89182ed29466c1555a151d21325f9490f7416a1c7db52d9e6f36bed691d90f8144cdfbf14749c74e140664b1f7c1f40de1351c09231932c83cb09d96274a83e2338f9ad32b4ec1665db643d97ce17dee130006d8f354931590abcf156ba91a17bcec298ef5c4e7a1be3c153f9cf96b64659c45f03ca9 [...]
-M = 46849e098f392e0f6e462d61b129b1d60bfd114c4c08c71ccf25c3df84dc6cb5f65ec5639c0361c97d5dcdeb89568d5daa981d8d79ba5dfe50c3aa99da0ca0613e54251343ef19a07c0e6034bfdec4b0cc052d2ee5005bd869824a303a53870c53f934c34044d08692618ca1e6402b0be2b113837263f4276bdb9a1176eecb0011367fab961b4557f8dd0e4ed83632da234f19828833f2926447bf9674eae382c46da1834897a888ab21605572c0f66d4d38bb8e183a9706281039aeceadc7fa7cb3332e03f6ed017c453dc2e93377a487390c1ca89c485329ef730c2a98500dc38f5bc761d0500bae8ccb9ea92b424aca2e4d20 [...]
-RESULT = 0,
-
-TEST = 46,
-P = c1f213379bc6d556f290a7290a591e8e66fbccaa6c7a9dd5126d6b0a3012e8d2277f285d46903da57e96cd6a4436fcebbff1e464dda8e15aca387fadd554142bac7d8d66e39334d8a772cc63abeff63b432e9149d48d43e1fc8bfe698e9afb5f650a089dd1207cb784c35c240721650765f625130ab5e4acab3da93267e37f7f,
-Q = cf8bacd48e14a7d38c894281db62e11f31173b7eddafbf6558e75fea2e890b760688d2296a50931920a2ed61def1e6b82b85d1c3f0dd0ca4938d619d519029fdb21e8c8139483f9977cd6ed8345b3ad97c8ba15a7ea93fc3f63e2d73310407b9c4420654542b4c3531111b03eabc86173d109b9af22cdae06a503305d7d5fb37,
-N = 9d3c8eea132c8ee5449fb5737e3d8ce11876fec3cd3d3bdabbfc5e1cb27ddad13ea5f76e38b8e2134c97662e2bb631b6899dbd4dc21919fb299d9be706b70575b548d46edf1b4e6a7847c47daf755c0b5d4dbe7b49fa77de8d21380c8235f7fa8b3c763ebde7b77fc5b840b0337113f809ed4e8151a128a648d934333d2ea6000eee59090b3ed11260040522201bf04416052d27430752275a6402fe55d0a01bd5e5dded9ca386999e57baad75359e57511252f433c4c892880fd5d121b64b5f0259bf4f604079d66cfe09855653cb2dd429d397619c5b3c96569812ffb6a583346b03ad9f74eece9907fd08e6eb7b3606efb164 [...]
-G = 9d3c8eea132c8ee5449fb5737e3d8ce11876fec3cd3d3bdabbfc5e1cb27ddad13ea5f76e38b8e2134c97662e2bb631b6899dbd4dc21919fb299d9be706b70575b548d46edf1b4e6a7847c47daf755c0b5d4dbe7b49fa77de8d21380c8235f7fa8b3c763ebde7b77fc5b840b0337113f809ed4e8151a128a648d934333d2ea6000eee59090b3ed11260040522201bf04416052d27430752275a6402fe55d0a01bd5e5dded9ca386999e57baad75359e57511252f433c4c892880fd5d121b64b5f0259bf4f604079d66cfe09855653cb2dd429d397619c5b3c96569812ffb6a583346b03ad9f74eece9907fd08e6eb7b3606efb164 [...]
-L = 9d3c8eea132c8ee5449fb5737e3d8ce11876fec3cd3d3bdabbfc5e1cb27ddad13ea5f76e38b8e2134c97662e2bb631b6899dbd4dc21919fb299d9be706b70575b548d46edf1b4e6a7847c47daf755c0b5d4dbe7b49fa77de8d21380c8235f7fa8b3c763ebde7b77fc5b840b0337113f809ed4e8151a128a648d934333d2ea5fe7d7098fce16353e7e0ea1b773a5ff0967df224fdf8dcf4ecef0f3809f734abd3a7dde366ebc2b5daff1dffe1520cbab3659a9ccb653eda932a49f485fad20d35a3bda567436505644dbdce4976089a19146fa0f30e65d796a38c6c364017a26a0b1ef4bb7a2925e1e33385e0f50d901763e8f0b6 [...]
-M = 13bdc3d70859a9758a0f498915c9f03818b755c5b1367d52f18b2255a7aa81b7bcc6b27b97e2d8efc0cfd04bbc1787c4d9a4035d0dee18b86f5f2d320d3da4eb2e43be73ea55a31e3680e199a358cf318939f58e80b4152e8746c2d2c8a71d0af4eecc21b856918e368fd683e0032a4af71dd0b18a56acb9818c0f23f1ee3249f0e71fd782d25e010ea530f60ec5b33d0f46bed2c90fc1ae0be8f5013ac2ed5448a3eb32d67231a645da84b696f2840c75ec8509c3e7a4115c69c58fd893ef95e8fb9be0ce89bec9a4f77224abbf2cb6308000505083812bc900c4bd1da316ef14127a9678becfb543615c4e30ef981c2a18375a [...]
-RESULT = 0,
-
-TEST = 47,
-P = e8702f8f272a028ea3074760ba58d44720cb701f00dcb6bc524d9e1164631077330eaa998e4d58c2f4200585a7153cf7408e31aff1673fbb0c2c4cd57a97a76f23a24a74f0a8aeb6d69c2308199a57e08c3e779552348baa07b7058c751725ea773b43bb8f4e4cb83eb7a6c716fdd16e79add68c7c1ed17c8cb8502310d22947,
-Q = f07a96d51e5bb6f5a506aed243794429a79cbe4845ad0af9cd24be626ed8ed5f3de1b3de41d7cfa5a1eb144ae458e144b17535a3a37a36e98570089cc18094f1ab549b5f633835636605ddca8f4dd340f828211d9924cf662a9fe46642404c68c2713cf29de086bdaa3158e94f6d384aefd3002497e1d10226fa5941560d0eeb,
-N = da587b001bb5eb0b9dc1baae1fb8946b162e95f830d96e030e3c3a223fb8d4301c1793a8b52e71e8f70a3ff22f35becaa9cb0c6dc6f78d1a3a526a1d6c3226b3765cce6e16af696740463aed2c71f41edb9809eea237c48a2dbea3017319956ff50204d754d10eb376b444a5d5657e74743242e260f56a710b28c213baf75a1e2d8ee9e9658e21ac2eca8e170dd92188cb9d0978caf1fe7150dff45a6eaa0f108c34e4526328594df93668562f4ec5bd0ee7b0b32a4c353fed051be470062cfe6960d50baa1b1583c4e4968921acd97a41678e9f66eec843a95b47b95e3cdf4ae4658e46f227a16e354c9d350c8d7d4ff2fe5d2c [...]
-G = da587b001bb5eb0b9dc1baae1fb8946b162e95f830d96e030e3c3a223fb8d4301c1793a8b52e71e8f70a3ff22f35becaa9cb0c6dc6f78d1a3a526a1d6c3226b3765cce6e16af696740463aed2c71f41edb9809eea237c48a2dbea3017319956ff50204d754d10eb376b444a5d5657e74743242e260f56a710b28c213baf75a1e2d8ee9e9658e21ac2eca8e170dd92188cb9d0978caf1fe7150dff45a6eaa0f108c34e4526328594df93668562f4ec5bd0ee7b0b32a4c353fed051be470062cfe6960d50baa1b1583c4e4968921acd97a41678e9f66eec843a95b47b95e3cdf4ae4658e46f227a16e354c9d350c8d7d4ff2fe5d2c [...]
-L = da587b001bb5eb0b9dc1baae1fb8946b162e95f830d96e030e3c3a223fb8d4301c1793a8b52e71e8f70a3ff22f35becaa9cb0c6dc6f78d1a3a526a1d6c3226b3765cce6e16af696740463aed2c71f41edb9809eea237c48a2dbea3017319956ff50204d754d10eb376b444a5d5657e74743242e260f56a710b28c213baf75a1c54a4238520086827e6bc97e4100709180334db1184683cbb316d97e69b6e113a1b4485da930330e5632b4e85a3e0a7811ce4495f956abe9b5b68c67233edf09d9a69ef37563a3169884295b678c4ae58bd00f5ec7b956d3377045dc6a6e56cf7aab90d98c4f8cdf84c639d84a6227396897d867b [...]
-M = 8aa4c29a58f42bb8424c21404e7c810efebf38aea18eaf0f1712b304f630ba1c7740beab3d2ae30e3e718691906cf0e0febfe9a69af667fbf7c5a71b2b76ceb021ec61c7033ed404d51e0f7c4c42cbf5da891baebfefff0b106f636ef16bd01570c9d86fc2446a86373dc22a6d12b2da9f9a7b2bea48a18d14cf26421d4731178aeee8077d6fe9f3c7909c98c94751e4def39ea531f899f7d37113d16127a11f32f9d567b0b6e9535b56a11017b7138cb7daaa74be182ae437da76622305253fa16579c5e1e1e7acd7ad5c32c30b181f14e03d444218f324cbf2b1b47a164c6eed5bedcd09e6f69379c5d62dd231d2c662cb1676 [...]
-RESULT = 0,
-
-TEST = 48,
-P = cfbd8724b7d0759cef4fca9c7a8b920a1df28ebe61d9899668f1dd97593173e7a2c762955cbe46a7bcc313bb92c0584e736081a1463d4ed9809f20fda5b00b77330cf3c3ab9b14d9be2cd2ce435fd93dac9b5efa79dca8fdff9db92135066e54b723b99e90cc0d4ce48604041c2dc9ea8d6cbc93edd12a900d63d2accb2fec4b,
-Q = eaeebf46ee9d01708657f82ca0fc8097c509887341ab6e29da41b98996196635cb6157f7c3f6695e25fea1ca226989bda1220b35fad25cc700b86b73d27b340d9f07246d60a78aae68785c8e721c95819230a73c6ec55115173757368d376ad74a63c1279a5b7417d3fec9ce2db69d4c22afa738a51d7a107e501ed10ae7d679,
-N = bea4faf32b706488a7450f5998b16886f6256d08f10a6a3fc068780edbabf362eb0d520337cf240a02bc2f1397b7e21bdf2510978aa91f6511d7fd8c32929c2aca71c030a9e71f21d4cd27a5a273ec1e96587ed6b3a80d2e6bb06ea423dc38456f2ba023aa05db7b90bdfd426b6e2aac9261fd3a035e519ba33f8536cf04abb42ffec5fb56eebf4369fca50e311d1b376f64a73ec7dcaf3387e1954e750c735235c5b2bac5f5486c73443042b4062c52e869c8e65197a7d90f50368e13d0205ae3f4f2a99e245fd4dcdd678f2ea02e3a84d3d477d37e83479a280ba2c4b3f7fd6b58a644c5e345768ad6bf9a01e54ec1653c88f2 [...]
-G = bea4faf32b706488a7450f5998b16886f6256d08f10a6a3fc068780edbabf362eb0d520337cf240a02bc2f1397b7e21bdf2510978aa91f6511d7fd8c32929c2aca71c030a9e71f21d4cd27a5a273ec1e96587ed6b3a80d2e6bb06ea423dc38456f2ba023aa05db7b90bdfd426b6e2aac9261fd3a035e519ba33f8536cf04abb42ffec5fb56eebf4369fca50e311d1b376f64a73ec7dcaf3387e1954e750c735235c5b2bac5f5486c73443042b4062c52e869c8e65197a7d90f50368e13d0205ae3f4f2a99e245fd4dcdd678f2ea02e3a84d3d477d37e83479a280ba2c4b3f7fd6b58a644c5e345768ad6bf9a01e54ec1653c88f2 [...]
-L = bea4faf32b706488a7450f5998b16886f6256d08f10a6a3fc068780edbabf362eb0d520337cf240a02bc2f1397b7e21bdf2510978aa91f6511d7fd8c32929c2aca71c030a9e71f21d4cd27a5a273ec1e96587ed6b3a80d2e6bb06ea423dc38456f2ba023aa05db7b90bdfd426b6e2aac9261fd3a035e519ba33f8536cf04abb275527f8fb0814835f454e245159508958c68900d2457b77344adfe2d85c19934c79cf82da540986690827abcfedc4a46d3e73c0f1087fc388df8aa1c9ba4e0d611e0da7891e1c04cb63838327923bf7b4607ce40eadc89348352fb4b02761ed169d12b7e9abbc411d251f1c7b800e78ab5202525 [...]
-M = b0057621d3c88933b2c3d901d397451059bcd11fb234dc8b0279287b7b991527504e6ddd053fddacd4cf7b7cf1e1f1a2ebe9482fd21a0b20d9c47245e2461f5bde8f458fd1c2e91928882d8b15ee0b0c869653f2dc8677d9afc65d54707e6912bf462a3c58d622a734f108a84ae361c380033218d94d0412f413e34b419770a2dfbb728582e2349d7f127145650d5afb0f640088f907366d38434349a9f6d6bb8518c9279d681aba5b02d910d839d71698633ea1cc56a35ca2e92cde6b4cf20daf71f2ef9776efc05fcd128e5b46cf9ff4c507bdf12b9927058a597d8dbef65938b125774b1e75d77f492b11155ae1e059b4dd7e [...]
-RESULT = 0,
-
-TEST = 49,
-P = c9d5c8ca6df4ea396cc533bf1201da19c72ad60763b6cb1160bdd4399a129a50fd141c8ac94ae451b3aacc6e4272cf39811015efe86255f655d0d7ca686d75012326fa8e8ccde9bdfdc44464c979f31f18cb341dbf7ce1555db10319ef90fdad0087ec5fd7ca85865220e2e36d2226d5e56f28ee81327c7ba3b4b2c26305216f,
-Q = e89c97e27d4b34289a162e37ca573b3ab135c951644d72e85aa783d13a75dcc7384a976d762e66af17492d4101ac775be464e488127f283ce4ac8077d8fbec00173989d3b52eaa648e59ff38652626db3d68307b9d96557809adba059fa592b9ad7f82a1b3fc1550fbdda1665ac523aa690d60e442a4320937f6923cceff93b7,
-N = b76533fd79f44cdf689b079a0d3a362c94a29cdfe75c6e3c83c0c72e0da5bec35ae394bf8ac91add8bdbf1f2a3bb32fa994a850a7b53b5c55d1b6db986f45a386e045a42cbde02306d0736c816638d2c964e53e36bd17dc21c2a8d7569861ab5434ede9bae2c181678d8561979cdc677cec33a3b859678db61cc0512379a3ce6dadf19ac7b8dd958de59eadc13b3b02c355909453e80614c8e4312cfe89f4de612a490698fa4160bb317d088744255736a100fd45efd2c36c69f6d126ee87ec60b30e053c421103242191d1a7f95013959fa96560a54211d649c10a057652ef2699908af9d027ece23ef4bb5c616c842cf60c377 [...]
-G = b76533fd79f44cdf689b079a0d3a362c94a29cdfe75c6e3c83c0c72e0da5bec35ae394bf8ac91add8bdbf1f2a3bb32fa994a850a7b53b5c55d1b6db986f45a386e045a42cbde02306d0736c816638d2c964e53e36bd17dc21c2a8d7569861ab5434ede9bae2c181678d8561979cdc677cec33a3b859678db61cc0512379a3ce6dadf19ac7b8dd958de59eadc13b3b02c355909453e80614c8e4312cfe89f4de612a490698fa4160bb317d088744255736a100fd45efd2c36c69f6d126ee87ec60b30e053c421103242191d1a7f95013959fa96560a54211d649c10a057652ef2699908af9d027ece23ef4bb5c616c842cf60c377 [...]
-L = b76533fd79f44cdf689b079a0d3a362c94a29cdfe75c6e3c83c0c72e0da5bec35ae394bf8ac91add8bdbf1f2a3bb32fa994a850a7b53b5c55d1b6db986f45a386e045a42cbde02306d0736c816638d2c964e53e36bd17dc21c2a8d7569861ab5434ede9bae2c181678d8561979cdc677cec33a3b859678db61cc0512379a3ce5286cb8ff904dbaf6d77e88e5375a9ad7bcf869ec767c2352d2ddbac51416d6cddd45dc71502acb0ae823d6d930230ede049b155c641bae038c2214d02d7f1dc4d0d05bf182247c0fb5fad97d50f4e73f03c731bcad40ea4ffd3d5380c82e9e8bbb9199ae113be3f6d5f0c76bfe2f7dc280e439a4 [...]
-M = 4e311784d032b0547e9a999c8ef05cdf60d8e5d6a071a43faec36815fe161844b507041ef436fff808cbd58bcd5ffde1927aa65b575e7dff27ec42c21ed388d20d770e65b0ef9240d1ee46fda84d6e0b8ce7f6ae98672aad9464753b991a3b525c40d1bb1534aaef4ff43b65239d8e800f449bb84c52d88c3722826b4801854efc6138565ac8a8cf55e47773cfc813fbfd52f70b7823a83375c68617ab5b7fb210b9df4e8432fc2e4bde691c8017cade512836c42a539fe3be303a680a6b9901949ceeada789e825a284da3dfd9d1d138c0f33bd233639c5bbb732868294b673d8639d759f8ed17d3315af4e57c1e5b65c36a41a [...]
-RESULT = 0,
-
-TEST = 50,
-P = d64013119788f1e6f4314c8ac52bd229e09485c7b77a8ab2123e69f6bca677dcf864e9eceaae313cda8f2d066ec0e275abe570d8c85831b071eb185e08d9dd29f550daa7e34a51a2be5e41a0cd2fd83b56d4350cf6d7386ef69723b598306a9154358a05cb64e2391fccefae4fab346076598313cef84e215c7e1467ba17c4b5,
-Q = f01f6da19eff310b911da43e779cb15a6429435f6afaa90d9a7e55176bfecba8a14606b8e39e35789c3ece2ba7f42c71c0dcda3960ea66b3df1e891e995c83e1e801265a00fae0285ecff4ed08b98fdc70f818e2169b58359878f7e611000cf4fb2829707b93ca2a5467006ca539b7896080eed376501caaf116c7372dd47681,
-N = c8f65f6358ad569737ec01ef9adbfdc695a74aaf3b537c06f630ed9a599034925f47e83cc6749abfe67755b4e036d1508520010c6b9f240edab0cf92061c74c21f3d232c8774fa01284b95045bcd0564983fe6c8a1c77297ce0a82a101f23eb4d64ab3d821d6b98e94ff6bfd7729e7bc70cef9cabf8e6bf5783bb11b12e4fb4b6179ca7ef572d4adcadd1e813cf01f4a7e6117a84fcfa54abc89c7130d5d2834b914a9f74e9e8e9984602a73928f2fc9b74167d74a838b3c70ab56dd2dbeebdbfe86088589df74b6e9f86c6c5dadc366cdcbd7f780a2b07fa76a967dbfdfc20559522fad07693708ad47f4e84a6f1e73a371fe5e [...]
-G = c8f65f6358ad569737ec01ef9adbfdc695a74aaf3b537c06f630ed9a599034925f47e83cc6749abfe67755b4e036d1508520010c6b9f240edab0cf92061c74c21f3d232c8774fa01284b95045bcd0564983fe6c8a1c77297ce0a82a101f23eb4d64ab3d821d6b98e94ff6bfd7729e7bc70cef9cabf8e6bf5783bb11b12e4fb4b6179ca7ef572d4adcadd1e813cf01f4a7e6117a84fcfa54abc89c7130d5d2834b914a9f74e9e8e9984602a73928f2fc9b74167d74a838b3c70ab56dd2dbeebdbfe86088589df74b6e9f86c6c5dadc366cdcbd7f780a2b07fa76a967dbfdfc20559522fad07693708ad47f4e84a6f1e73a371fe5e [...]
-L = c8f65f6358ad569737ec01ef9adbfdc695a74aaf3b537c06f630ed9a599034925f47e83cc6749abfe67755b4e036d1508520010c6b9f240edab0cf92061c74c21f3d232c8774fa01284b95045bcd0564983fe6c8a1c77297ce0a82a101f23eb4d64ab3d821d6b98e94ff6bfd7729e7bc70cef9cabf8e6bf5783bb11b12e4fb499b1a49cbbeeab1bb458e2db800279bc639a34e812d5a718b0fcd0804e4b7e4af1f69b951805227e40d922f417bda20e24a7f1cc52140f2d81fa1b5608b888ad021340783a59a42ebccca35de87c45b4f05ff8a0873301fdb185a7ae216af4a7f09f47c36c0708aa5391404cd558a3289cc978c77 [...]
-M = 493bfe8d92e171ef7bbc819a45e0fb9fde14ea4f8a0e861837ac11d1205f1fb25e2d144dc01d041777b66a58e054aff7846c58d04f464efdb4bfa87d45b5b7500a4f06c6d020b9156a89768a7c0442878e14930e5b18a0628804bda64eeac2a688bdb1102a812ad3ca29f1b02fbe5c2ccc60b71db43ed7feb6322b00f1015696b1155b73bceb33cd032a8886d502c5f1d3b7df9195ca5ac7e75566aac9b14e6fbe58cb96a2e8e98c59130a3312681002aae2508ef9495d44634b0cd0319924ff84293e62a51208dbe40ec35c19951d88c7776dca101e4eb5b6bbeaccccb69e67cdf91ae3a9d8ad87fe3994d8e3fc7ab6c4bc59b2 [...]
-RESULT = 0,
-
-TEST = 51,
-P = c69a1ec07c1f71407e29e2f20dfe55d4ed7567a388f27520987df7a497a18059d1975315ab4f022725214c982f1f9b2205e162d966c74f1f7ced89e42704f95b95580a4c220ac55ca3d1549b6bb632406afd3ec300650e29bf0803ce6ac55336023bab362de648f57ac4e8010b192155333ab2b1ad2d1e6c55d232cb0e5d33fd,
-Q = e9d6338abed2c398635d3b3d4ef47096040101019fb23281345c9913e6cc285e2e2fffa1cd25472656b54edae22e4347cbefef624f200e90a3c0244258550ba82f29efb3442106235645447963bbab475f6cbdac93f02f8f10e88010cf3172936e1790d34abd10bcef14691ae0bcb3a79ce52a77f31d59d10f6da36ce012f197,
-N = b56872cf3d1f31d73f4a72fd7b56397d0ff699203065625e9fe4f3df96aadc8485046644406c4ac4a6dc7e3b8dba70cdc1fd2facc464a2a9b1ea0788014b29618da80fce94feeea21932eb02e561bd860f22661fa694e8a5bed47cf669ff65ab6280fb060419da84ac7680c19a6ef30c5b1b4f992ffaff292454c7c7a5ee75aa1ef2aa730b5caa0054603a9ebf7e030b4c398be384c76b6f8fe8157dfc7aa17f0149691697dab226d5b43cd06e2ec93d2e94d72c4063746dfa7a03b302370f4a6240f05cf60e76e9250f175c26dd43b36eacb1565163895795242668017d2f2e1f9b3124d2d4e289050c4dd492e3dc54e180d3ba [...]
-G = b56872cf3d1f31d73f4a72fd7b56397d0ff699203065625e9fe4f3df96aadc8485046644406c4ac4a6dc7e3b8dba70cdc1fd2facc464a2a9b1ea0788014b29618da80fce94feeea21932eb02e561bd860f22661fa694e8a5bed47cf669ff65ab6280fb060419da84ac7680c19a6ef30c5b1b4f992ffaff292454c7c7a5ee75aa1ef2aa730b5caa0054603a9ebf7e030b4c398be384c76b6f8fe8157dfc7aa17f0149691697dab226d5b43cd06e2ec93d2e94d72c4063746dfa7a03b302370f4a6240f05cf60e76e9250f175c26dd43b36eacb1565163895795242668017d2f2e1f9b3124d2d4e289050c4dd492e3dc54e180d3ba [...]
-L = b56872cf3d1f31d73f4a72fd7b56397d0ff699203065625e9fe4f3df96aadc8485046644406c4ac4a6dc7e3b8dba70cdc1fd2facc464a2a9b1ea0788014b29618da80fce94feeea21932eb02e561bd860f22661fa694e8a5bed47cf669ff65ab6280fb060419da84ac7680c19a6ef30c5b1b4f992ffaff292454c7c7a5ee75a86e825827d06a752772d91c6f628b3ca05ac3233e5c22c3cdc30d84c57e0cf8c70182165f1f6668d959dda15d5ce0ead35cc384f08a7c16bdd9cc558c82dd0a469dbef65d8fe2ab692af87e47576b662ba442b4e6bd0e4b9ec533a288c7866964af47f51b5a3188d69b32fcb8a70e07581160f690 [...]
-M = 419f3a5e76bf02bf23482c48989c0fe43c10adfea0a25a15df48449da135a4b5330c9147acaee76aa6e8dbe046d07cb66aafa6a0289df3373adcc2f644d2a4fc98d0285c77bd35ff5b1d3f9e87e796e8fe1249145b0fa0f70e1832600aa6a01f02985106e8f0a078cf0f402c1730002e728afc10e074e7b24e5e0f4eab1926be23c2ff9a44c12ce6994b4560ac58c145d4bba367035505ebb7b631620f0035b654e834a4f4c4d7a787b8a9f7aff8713c36ee3948ae4ab51cc39d4d1cd0692f14744aca87c9b5ad49037a1403a110b4bfbb8591059887624add06bfc306b0227bc45dad3ff4ef7f1dc1b95e98b0eaa26db61bd7b3 [...]
-RESULT = 0,
-
-TEST = 52,
-P = b57bbeba09d63b0a4e40d8d1ab871c3692a6b5b8ef17080c293425a50b2a7bbec9e0776e312f7ce5cc3a03b6364a380543d993ba48e3a8057ba5e4f74a8e0907c72a64380d84dff60c6ae6cecb057a602327a4043c6daa4de6143919357c3e2347cdf14fb2e9137d39bc29eebb0e1062418999202082879e9cf9597f5cb5245f,
-Q = d49d9b6268af4a802f5b08b8bd84687ad90de8f95d028581b6d0d53cfccc3fe72c055df0f1bcbd02cb567344172ecc27d2055eff140c1c074bcdcb2bdc39452bd6a08fba44ef43e3e5184a51dcc2410cd4830e599598948c6916be2331b061314c10b72065ac32fe143c904eed09ceff86daecea420e58a8dd95f12dedc9d853,
-N = 96ba34fdb84da256d1a0af20fff15239ed32f02edc5ac1fae68ed32fe44efdee1bf07249299f53e201f147b405edfdcc4d13e0a7afd9d2fd7d16aa4a807e9c6b4c076fad47e63e953a7bb0ebb98f60acce545a93a6cf793e696dd319eb1acdf181cd37f20c22c83612ef4b55cc83382f2b46092d1b5458e10b1305651920d6a6bcdf5892c07e18bcc60f7731974e37d5255311e04352d2cd8821131beffbe46b5d649d01f7425207a22489581ace012ae4cd31bf5b3fa36be02df8553c43a33c3571fa6f7fd1bee9608526a1c068129379cd52f18b1967ade23ae46a64ae10375e59fa33c953543092ebac5f562edfd0a9da0280 [...]
-G = 96ba34fdb84da256d1a0af20fff15239ed32f02edc5ac1fae68ed32fe44efdee1bf07249299f53e201f147b405edfdcc4d13e0a7afd9d2fd7d16aa4a807e9c6b4c076fad47e63e953a7bb0ebb98f60acce545a93a6cf793e696dd319eb1acdf181cd37f20c22c83612ef4b55cc83382f2b46092d1b5458e10b1305651920d6a6bcdf5892c07e18bcc60f7731974e37d5255311e04352d2cd8821131beffbe46b5d649d01f7425207a22489581ace012ae4cd31bf5b3fa36be02df8553c43a33c3571fa6f7fd1bee9608526a1c068129379cd52f18b1967ade23ae46a64ae10375e59fa33c953543092ebac5f562edfd0a9da0280 [...]
-L = 96ba34fdb84da256d1a0af20fff15239ed32f02edc5ac1fae68ed32fe44efdee1bf07249299f53e201f147b405edfdcc4d13e0a7afd9d2fd7d16aa4a807e9c6b4c076fad47e63e953a7bb0ebb98f60acce545a93a6cf793e696dd319eb1acdf181cd37f20c22c83612ef4b55cc83382f2b46092d1b5458e10b1305651920d6a532c5fe764df89332487395a72e42b323b99e732df739453fa81c1839e80528c5677ec7a2d456181f0a94125dcd54fcfdceee3f05fe4fdf5f18ba4832157c550897a7067d2d5d9b0f6f01f58118a057268222a093b91328d3930fed2dfd8170e2ca7b51c3b0be0db544f2f221ae17006ee1757c76 [...]
-M = 458f32480f54742b6fbbc7e49cb35c069acf5b0bdc862381fc1a7dbeea0e5c7a15439a9de560df57d6f6189f61bdef10edaa4afdc66577bbf6666b952cc6e2c4c932ef13c4333b8c65cbdc2952471f1b65bd082394081d7a63da36db76c802ac2b0127f1477a4053431b5d3c9cc8c4593380d3b9279560839249882757220f7e37cc8cbd065632b3d58be40b4575eda47159fef0b0f1b7f62a790caae3caf3a3e0f2dce57d305bc181ea74318cab1968f617d3958760eb73a58e808a88200d71858102e1449bf657ff32292845dd6f206acb85b27ee253a2467ecd15dacc9773fb9d1af7e6d2e4b63dbc80e6d08fe7e1edbf02b7 [...]
-RESULT = 0,
-
-TEST = 53,
-P = c5f104dc8c0251d783b1332941f5b6111a34137331ee3dcf964da659bddaab03972b7f86c67c2af71fa894f91f7aa4686d5380c1c9983815c504b253601d902f0e85d6404e9116ffe2338f560d96b3568e535984e8e53fd00b6b54142c6abf1308823a7c883faf274a1865df73fac5a3127f0b150f4c0dd1e33b117b80bffc39,
-Q = d7edb6a4f7577cf45e864b0c8718ecea953e99abb4369a4487b3254680377536ecc28106061591616ea2920774551b1d80842970da573f6aa66b59ec0a1c0cde1149cf0014f397f17ad4bccc02499355dcaa88512dc7a4956ef56f412b2184601c5721e0750834d07e88da2362db6b5497bb3621756a548c0d19d90e1e0144b5,
-N = a6f5386fa0deaaec3efe007480ac0074f2f7cadba0b825ab0fb7e592b6c3e9e06d5f94de2a94cbeeb545aaabf3537fd7e1628cdae985a2af038aae23f21d7a3fe7c9af9fae24085ec767c47e668a748eaf2a4924324e04e50442793a8a160c130f0b82dac566fcaaccca3cd7fb77561acc931b005b59fdf4f3ea243682ddd26e3cbdbbb7151bb6d10428f6db77dcf6c1dcd9818bb105f96cda6f6b3493e33edeb53a4a65eec3c02b1cf767d757677196172850b3150305805aadb8e8337bde9473fedb30e933fc4e752d213523f26975d3250c69b946eb3e6eddbbbf402c88a661c6ebb04c16e8277db67a36c34d83d5ef28ef85 [...]
-G = a6f5386fa0deaaec3efe007480ac0074f2f7cadba0b825ab0fb7e592b6c3e9e06d5f94de2a94cbeeb545aaabf3537fd7e1628cdae985a2af038aae23f21d7a3fe7c9af9fae24085ec767c47e668a748eaf2a4924324e04e50442793a8a160c130f0b82dac566fcaaccca3cd7fb77561acc931b005b59fdf4f3ea243682ddd26e3cbdbbb7151bb6d10428f6db77dcf6c1dcd9818bb105f96cda6f6b3493e33edeb53a4a65eec3c02b1cf767d757677196172850b3150305805aadb8e8337bde9473fedb30e933fc4e752d213523f26975d3250c69b946eb3e6eddbbbf402c88a661c6ebb04c16e8277db67a36c34d83d5ef28ef85 [...]
-L = a6f5386fa0deaaec3efe007480ac0074f2f7cadba0b825ab0fb7e592b6c3e9e06d5f94de2a94cbeeb545aaabf3537fd7e1628cdae985a2af038aae23f21d7a3fe7c9af9fae24085ec767c47e668a748eaf2a4924324e04e50442793a8a160c130f0b82dac566fcaaccca3cd7fb77561acc931b005b59fdf4f3ea243682ddd26c9edf003591c1e80521f178a5aece53c62d66d46ccae12158bc6e9f9455d11ea4314c49d9223203d28eac40d6c397b2102950a68071138dffef3daca8c9424187542f35f085af4d5d1824d513141222c968272a93a29a06d8f47cf869e8a045333ced8f534ecf042fb5153a33ec7752de44eeae4e [...]
-M = 9872dd56ce12df4bb6f570c45d9cfc27afb162c3fa35d38a33ded7f39556db6cba27ec484f1ef9b377e79b011a96bfbbedffe19e13bfa4fbbae39b92f6d2212e8debbdce063eecd0691a5d5f3ac0fa52fbeaf119b5daf885abf6f541d90e969cac2c60f13f42a5221c693ea4462e33e5b4da7c0a23588b5f17e8f6e5db741527b36f36739185b35692d8c614e14749af3393b5cb9bc09fd356fd7b9962622d4dc945ed0bcbeb3ed7cc552f32b3e232308fc7606306536f823db79914ada73349f28cad1d7625b313b0f94beff96cb97009862ef6900c475aef97561abe5c7b3842c8dabc7306003693766f937788a3010f0c5db8 [...]
-RESULT = 0,
-
-TEST = 54,
-P = f0ee7b2a5097cb48d32e1314d9bb7a14cc939262eb9e91c58ee69d8e287a5c1ed8789df8814db1262134efb8dc8e14628ed43e551b7cea0c28d768362f6e49b580e89601e40b3b17ac6d434cf9a4354189aa40052ebea36418584459a587401c54aba074809d0c1b08c73e791d104d737a3b245596d1f570749464ca60a3e8a3,
-Q = fca996486bac8865d90f20e76a66d6214f1e7238ec52745e75d36271f3e3475e4e2f19baacc520c4e78938135a2a8603da070fcdfbfa16180b8be1c1ba232f1bc5f52362a51ba56619dea67ce51048792935048b74d529e1e5a38b91500630e8127b9bd9455038faa4bf5c0c8fdc35e6648979f5b897757aa39102a8e11fc267,
-N = edca5c1cdad81d847aadaa39a8d5403e1ebf850a08c770124bfe0c27e441488642f08f1487be18909750012a7feb29279f7a10a4a061199626d236509079a1aba9f46368c4db7c656b6bff53f013ec2dbdbe9d834fd7a9564b854df40349ed1ca342acfe11e3d559bc934f4eb55d19e89129ca6acf3d4f479945b050dbafeeba2ed845a948b66805726d3d81c8b44fe9a42a4d6ac4444e6139cf6cc5bdf4a4cfdeac7ba22d6ae5d33adfda18c2b5e6a3366e6a51ad234b3d67e7cf4863bfab8c367f5d43b080acb78eab49057bad8eb2f8c589d038523e580c8e476b683df87566e4d3d3d081d7ddc396a0ee89d679f8468bc34e [...]
-G = edca5c1cdad81d847aadaa39a8d5403e1ebf850a08c770124bfe0c27e441488642f08f1487be18909750012a7feb29279f7a10a4a061199626d236509079a1aba9f46368c4db7c656b6bff53f013ec2dbdbe9d834fd7a9564b854df40349ed1ca342acfe11e3d559bc934f4eb55d19e89129ca6acf3d4f479945b050dbafeeba2ed845a948b66805726d3d81c8b44fe9a42a4d6ac4444e6139cf6cc5bdf4a4cfdeac7ba22d6ae5d33adfda18c2b5e6a3366e6a51ad234b3d67e7cf4863bfab8c367f5d43b080acb78eab49057bad8eb2f8c589d038523e580c8e476b683df87566e4d3d3d081d7ddc396a0ee89d679f8468bc34e [...]
-L = edca5c1cdad81d847aadaa39a8d5403e1ebf850a08c770124bfe0c27e441488642f08f1487be18909750012a7feb29279f7a10a4a061199626d236509079a1aba9f46368c4db7c656b6bff53f013ec2dbdbe9d834fd7a9564b854df40349ed1ca342acfe11e3d559bc934f4eb55d19e89129ca6acf3d4f479945b050dbafeeb8414034368c721456c63009858491ffb3887848ceec53483d35156cc5a1970152b804c3eeff5813e83221b24c8bfd4c3ccd931c2e95ac4b19338485507a2e32baefa1a3df2759cc39c85f5f3b9cf910f845e6453f94be71120e92778072b08770ffbd97860a9492c816100668dce9f69e67c72502 [...]
-M = 7cc025fe32af38a127818c4ceaa1e4614dd9aca873f34c0f46ddc42ca3b06b14bd36e17bc0b1084f14946e4e73001072ecce21b0769ea7647071808e93b31d03a30f0eb1644334efb4e7ed6a48fb6a5b106e859c0f4181e03814f8a42263b15dcb4c529e5ac6c653f96b8cea47b6c5d321b49c6272a9733b54390ce282e9440cdf2c2b57a867e4cc570953c2d9234591e0d12af3f1273ca6da9907619a078ab980ea25505f5b5fa3432a444b0148ec1c08fcde0228a243612b5bd4f4740b4280c63fe8016b16d9c65cd327f420242e1677823416f637776f954dac95c00e35dcb788fb37cba548ce12c6aad34c3c41d91b7d3c0d [...]
-RESULT = 0,
-
-TEST = 55,
-P = bdd12971abbde81b2f803d03bd611efd6e6eff38ac4b17c46be74b0f5c300fc3d41fbc1078fc56e1cedc0f74cb20304e1607838c9d7fca89161dea2bd1e16c6cb7c56b27992a44284e997ba4db32746bedef35099806e6530e384f827b6ed4b97c3d7ef04931ab2dca501624504532a43f9e335e6ca256162b895dfa43376359,
-Q = cec43436635af6f965300cddb8e05c3b1f54470b3282b30b26e8180ff31468ae25e73b4d3463cf74cdc7b17413f3bef276dd5bba73eaae7bb13b01bd515061162f73eaa8eb4a13d0cc19fa6c789b46667e9c2508912fc5c6e559012b8a9b363cbc588b77db79ca0a180e186120e55760aef239ff1ccc107676a901eee2e30cef,
-N = 994fca34036f78b7d2ea8ce44309dfdf0a7c190b597532dac83056d87caf4bfbd61e8cea857cefb628601e87feeee080ce6f616842a448991bcc0e7da469db09cc72f19cc76dd3e5b316af4d02b55420c6e525bcb487668cec530c164948a3b688bac384c5ec5b8faf976efc59a4a546d71ecca4a276a0a2dedb81e3cc41a34af68b5c9607d0e07c3e2e003cec1c8b76c996c9907e886219797bcff9ac88d7c69022b69d7e9160b705b8b4303220a963c8718997994ce963ba67e4784d853bda25cff537e6bd4663c1a3463674202d7d75e43b3d4efee24a362c3462daa9091ca264967db1037a286eb7b8c57244863401178f2f [...]
-G = 994fca34036f78b7d2ea8ce44309dfdf0a7c190b597532dac83056d87caf4bfbd61e8cea857cefb628601e87feeee080ce6f616842a448991bcc0e7da469db09cc72f19cc76dd3e5b316af4d02b55420c6e525bcb487668cec530c164948a3b688bac384c5ec5b8faf976efc59a4a546d71ecca4a276a0a2dedb81e3cc41a34af68b5c9607d0e07c3e2e003cec1c8b76c996c9907e886219797bcff9ac88d7c69022b69d7e9160b705b8b4303220a963c8718997994ce963ba67e4784d853bda25cff537e6bd4663c1a3463674202d7d75e43b3d4efee24a362c3462daa9091ca264967db1037a286eb7b8c57244863401178f2f [...]
-L = 994fca34036f78b7d2ea8ce44309dfdf0a7c190b597532dac83056d87caf4bfbd61e8cea857cefb628601e87feeee080ce6f616842a448991bcc0e7da469db09cc72f19cc76dd3e5b316af4d02b55420c6e525bcb487668cec530c164948a3b688bac384c5ec5b8faf976efc59a4a546d71ecca4a276a0a2dedb81e3cc41a34969f5feedf8b80167a97db65b75db103e3bd3834c9fba9749e6ac6cda5d445f54961bbf3fd1313a606914f347530cba233b8caa5087e2705ef30ef88f2a536e573e969f676248ee6aa6efd025205272ab0958e12b25c83630429ae3b4d49efe2669ce8c158c5804f08c598a400119fc2f128721d2 [...]
-M = 844cb0832b2245203f35677f118598c3875d1d75d4e92b007bf951f16cc8343a3f120eb6511d89792d213aeb8e0fc0a306c91106922bf02a04a2946641e26fed801706183cb2e21203abf82f0cc556560e805955c2671ca86f679d432e6f59407ae52c610e108bd7ef63a535d0dab0554ae1e73d686531d92ea9055506a461aecbc91749aeb699e5a17e9d3a07aa0aa329faaa694145746706cddefe1ce4572d5d643d1bf8e0ac7fd541093503561e3fcdbf3b4c7d2c93ba6bf7c48ac41216dd5cbf6b0c6fdfb7e67ec48afd242e3666ca7ce230be1b08495187b934a15523ca1b1e185361f017a735bd27493811f9125bfc2f0d [...]
-RESULT = 0,
-
-TEST = 56,
-P = ce43fbcce562617674424eb26b67a6237883ebc54bd23fe24cd14944baced383a418e460e886a932b102afb4320c9d5ad53499dc34c96e2fe36c62a196f08a135c13eca56a100925eccb6dfecb6f32927b26a32a38b14b697c76eb3dbc75a829a08571f66482dc3f53b67ed0df6c55f77d80f1700d0fb08bde6dd6199f5faf79,
-Q = ee2391941a7d178a60a23e8818dc163afa397a055661de57eaa961ea3cec7fc1989347bbdd31e94244a8b072f9b53de60cebdf7dd07d595c5fd0364ae8419f23e916a32d7012c6b1f6129322d724e7641a3b4e786e6976b211af3a11fab3a324d6c7e477759cebaebaa79742ac767004851639a5bc5d9e910074bfd107270715,
-N = bfdfdcafc089252d25d55662d0666d6e696c4b08a904863aca0dfa73eed3a385fa2e8d7e1af246962beb427ff50da3b40cd09421b341a94d2d8514ded8eccbc8932f266de96b15df63a7e22eab5d1ca88161b7a8c169131e59c6726beb24b9fb08c88fa62291f57e9310e1429ba7cfd49fe4691b5320d7d9e00a0858e94a1fa92eb658de4a4b17ba12957efefb209d854cbaf1e317bb28769d52ded7015f39f5f0b9ccbc8dc72024ce605d3bad2875d038eec23fe0af696e041b6f73b6e00ca9f95cb8489bcfd5d1f5e83d36575377fd6593f70f316cca54f08bf22e1240e07d68cb39ae411520c9d4d204c3370fab395f5ada2a [...]
-G = bfdfdcafc089252d25d55662d0666d6e696c4b08a904863aca0dfa73eed3a385fa2e8d7e1af246962beb427ff50da3b40cd09421b341a94d2d8514ded8eccbc8932f266de96b15df63a7e22eab5d1ca88161b7a8c169131e59c6726beb24b9fb08c88fa62291f57e9310e1429ba7cfd49fe4691b5320d7d9e00a0858e94a1fa92eb658de4a4b17ba12957efefb209d854cbaf1e317bb28769d52ded7015f39f5f0b9ccbc8dc72024ce605d3bad2875d038eec23fe0af696e041b6f73b6e00ca9f95cb8489bcfd5d1f5e83d36575377fd6593f70f316cca54f08bf22e1240e07d68cb39ae411520c9d4d204c3370fab395f5ada2a [...]
-L = bfdfdcafc089252d25d55662d0666d6e696c4b08a904863aca0dfa73eed3a385fa2e8d7e1af246962beb427ff50da3b40cd09421b341a94d2d8514ded8eccbc8932f266de96b15df63a7e22eab5d1ca88161b7a8c169131e59c6726beb24b9fb08c88fa62291f57e9310e1429ba7cfd49fe4691b5320d7d9e00a0858e94a1fa7724ecb7d4a6b9eb93db0f1c476dce126d9fd8c1875870a3c65d833a809a3e6b0b40da09fc80e8dafd8b4fd1481669a8f56ce48e5db68a1e1c0ded68737ade372b4322875c1ad05fa130a3c14b4bf5e06d032056c8a5208396265ccde5b17952ef17de34066f558dbc673eeafab2ce53d5cc3af14 [...]
-M = 6824f429f3cc57e3b2a3ba4cef6d478e1f8ae0df92d3df0ff26e7bd99e96d2c3232b4f36ce202dc3496f4b8c1119d5135f03c981ff0ee7f1361637425b0ac9330c2d902ddb3bd34584520379dc1f2b9a832e9dbfe2bbb83118c8514e5f6e3586ae4016c0ec5d1613c2a32138743dd5f34adbffb72ecc53d79c37104918e40e6decb194843b64fe91d7ea1e3c63064ef604c869e6b06b7d4be8796efb24f4ad4c909f6673f53e643ddc0fa35398ec2cbf174dd59067eee7202da1058dd626beecb341283f5a9617dfa2816c350d846010ed9cce2f36e3c7fd40d4eab359bfa7d070b04b97c30fccb632e75f680efd311642f0b7c7 [...]
-RESULT = 0,
-
-TEST = 57,
-P = e0346257f0271b05dbee244a68796f964318d162a8a5e5632ae80b9c5a8d8f852c6ee0d0755c1a5cf14585266a1438c01bd387fe9681d70f665de552f9410ba4eb6eae317f94188e6e52b6631b919f0b8b79d76b11c6f75c45b9bc2a1104397fe9b5494b4a390b49954c549a2d66a63c7d5cc2e10024e853caffb77edd4856bf,
-Q = ff0978342433383255d6266aba5cba24e58384349f40712743920bf13f68ab976d2865a67284b256207750cc09d6923968f72b7ac125f68efdf6bc51a4e566dc96aa340798d32e54f297680860787c1aeb2b4e683deaeebbcab86cc8a1231ff6221cdc58c76238c9b629184482c8f0b374ed148d266d4d29cf1a4d91f5811939,
-N = df5c791345bfd1356618e93104768754df18e4faebb47c6e3a06baee710378a598018ad08be239aa5195f16c80e41c1caf2e65ce10b01130e20bacdc612480e599907e8409d63d2a9bf582319301c3bef8dbb089e5068608ff54d198f0e3831b812ff29ef74bbf0b9456146cd2254ed8c838c75537558374ee6712e39cd941e8d9770abf3021f4a20512bbfac986c8e9f65c0779e960862330d445d3c1f69c55f68f83641a6c114844c32983846645033437aa7a3aa69bc04e0cdf97ed6268d9144373ae55b4f99ec28a030540f40d3798ff4d1cadd3bff2eefa27bbcd4d25d95c519a17091e77f154a1a32e5c4aeaa2cf1824ab [...]
-G = df5c791345bfd1356618e93104768754df18e4faebb47c6e3a06baee710378a598018ad08be239aa5195f16c80e41c1caf2e65ce10b01130e20bacdc612480e599907e8409d63d2a9bf582319301c3bef8dbb089e5068608ff54d198f0e3831b812ff29ef74bbf0b9456146cd2254ed8c838c75537558374ee6712e39cd941e8d9770abf3021f4a20512bbfac986c8e9f65c0779e960862330d445d3c1f69c55f68f83641a6c114844c32983846645033437aa7a3aa69bc04e0cdf97ed6268d9144373ae55b4f99ec28a030540f40d3798ff4d1cadd3bff2eefa27bbcd4d25d95c519a17091e77f154a1a32e5c4aeaa2cf1824ab [...]
-L = df5c791345bfd1356618e93104768754df18e4faebb47c6e3a06baee710378a598018ad08be239aa5195f16c80e41c1caf2e65ce10b01130e20bacdc612480e599907e8409d63d2a9bf582319301c3bef8dbb089e5068608ff54d198f0e3831b812ff29ef74bbf0b9456146cd2254ed8c838c75537558374ee6712e39cd941e6fa3930331bc7a169d34e7145a6b09f2ecdbfb1e2a17a2f98c25a2e46280061395cf83ced328b449533065391107b7a09af6cf700e2fece21e9b83df34f3bf657922a91753d4db2bb619fe499c4e9f211225a27495e21d9dade87fec91b25cc63507f7472f78333de092c364fac1b53b2dcce4d3d [...]
-M = df4837b9308916a1c95674e540d9f38148acdb1d638d2cf5db9ce6b37ebdea0a43d32c3bb2b2d7acc2097d92068580c6a2d9ff661366869896f24aa4a5d8935ff08fa10ae2154928ae9c69f1006a18f38f0436dbc5ff379d6efb51c975f4da4e5f7fee3a9e15ea0961fd0c69a5bb2c27421abef0a0359a7f3b0d82affbb25c5c3686b7a9933aa793359a152d59d7cbc094a735f9b431a515cab97e13c4096d9fb2dbe70113c35ed81b819f9c7e966c68e428af8a95ab235f2ef42721ab819425aa28ed79c986a69605649c4aff2660049344d64e0c7300c4c3e58c3fdcbac8b30d390a32287419f571fb043bf7a1243d676323a9 [...]
-RESULT = 0,
-
-TEST = 58,
-P = bb201c0644121daae546588b0ddb84e8bde17e7782a4ce6740dd6ec25e61828655da79ea6736e442d879bc65d644b31491f4deadbdc8683cea9acb184efd954f89fb4b5be5aed4fe811c21bafa46395fd4345286e25dd6d404615cef18ff1cc1c6c7bf7369dfccbfcfa362b135c82a08abbdeb771e9aae0b220201f0c6a9c717,
-Q = cd74c9f068e960f2e578d8d3da40c801a0a440be1ad3050f051c745a882524ac20912d9e74c0d0ff457bee75bfb7fb592835d38cfc310b6de9d6d358132f2935c6bbe1357e67f3721fea122eec597ab2ae5e9c3ec2d9a9c7634b47e60d0248393b25c4ac156b6f96586384c5a9703f8dcf5268f7b4beed09d17fcc27d0d4c4af,
-N = 962e1499a8242dc2f9446d9ce8fbd562edb3370f7246bd1a8ba6412ffc24273626040a3bab350772ba349ed640f6a8515bc7333740079703f65ac0205d6f3594d93b72245b458ae1881b60546a4361057deb55e45a5d3e5c25d4d309af2839f43ec23c029c53dea9bc6ec26e2a41fc9085d0918878a26d877b27083c342e4d4bfb7884e02d9784e4ab1b33b1d91391e5e381040bcfe695594f3717177685d101122bc325b3677f08a87b9930eff26c4120b0c8c8c552d29c2c246f3f780c035b1ec940933246fcba6c49d0919300cab1c354c5bfda658dd1db3053d64bae3fab305cecadf15017773614413d242d2926c0784f4e [...]
-G = 962e1499a8242dc2f9446d9ce8fbd562edb3370f7246bd1a8ba6412ffc24273626040a3bab350772ba349ed640f6a8515bc7333740079703f65ac0205d6f3594d93b72245b458ae1881b60546a4361057deb55e45a5d3e5c25d4d309af2839f43ec23c029c53dea9bc6ec26e2a41fc9085d0918878a26d877b27083c342e4d4bfb7884e02d9784e4ab1b33b1d91391e5e381040bcfe695594f3717177685d101122bc325b3677f08a87b9930eff26c4120b0c8c8c552d29c2c246f3f780c035b1ec940933246fcba6c49d0919300cab1c354c5bfda658dd1db3053d64bae3fab305cecadf15017773614413d242d2926c0784f4e [...]
-L = 962e1499a8242dc2f9446d9ce8fbd562edb3370f7246bd1a8ba6412ffc24273626040a3bab350772ba349ed640f6a8515bc7333740079703f65ac0205d6f3594d93b72245b458ae1881b60546a4361057deb55e45a5d3e5c25d4d309af2839f43ec23c029c53dea9bc6ec26e2a41fc9085d0918878a26d877b27083c342e4d4a72e39ee9809c0646e05c0252f0f744fb84fb44d6326ec1e3093d33fa8fff29ce9bc01b9cd76fc9c68a85ee5559f5bdd36686168e0b595ef157b2d0cf15df44d5ce121401ce303449cb439ca7ac61169f40c1d6fa352e0d367383af0125acdab02e6f688e7204db210e0d59c644f4bf904567fae0 [...]
-M = 5f3e29a7c62b59bab235578ddf4da81deb1e89f548a58a9f7387e1ad33395359604e6086f2d9694a9f34a8153e800499f825030d618eaee6d03fc69b1c07c8cbb85fb7b3a803809da1edfed4e07167c694a57e10f758636fb7743f09a780605b2f82e8c112596c5715a86fd1057c8811888210700a8ebb39f68bba8e288388094de3488e0cba38f7fed56c25b75ae3ccedc9cdd43bf40ec481cdac2abd26d2bf037a813d714047ec6fa79110a792f0fd49557553d005daa0b73ce1cb9b6893021fedb9212f9459413f84d9febe349b37a9c623927d43b864d99da1b61868f863e74e017d02505fe6e4ae8b5c72e2ef9fb1dc7ba7 [...]
-RESULT = 0,
-
-TEST = 59,
-P = bcc74237f9f7b9055a3220edd90d8009ff54beb3893eb28ca7bf91cbdd675f76ba19a8587bc33a928f9aa21b1e82fa1030fe22bc0dfe786f74ad99b5c0155d57b8a2568b3bb6d02e37fb79af2c74ca4e10df5a1b524403f5b93363145da4caa3c39aba18b0e6f3291a29cee845ffeae230db95fd4f4f891c04dab1a145fc4d2b,
-Q = d5d0cd325db8147324a2089c5a01f543d17721ab9fa047345624b7550130653649fae157e883498b881b3c62040340e896b1135613b6b417b7c9dd87f7bd6125fe8b8f9b47e5dc66fc3272bc3bc55b96dd5419922bd22436574e09ebb1bb2d4d657092f6fddc379b4c0d2ce48c0bf4a599a13ac0ce3ab75e6dd7ca24f4228f19,
-N = 9dabc34f148419ac61adb31847cbabd59b85cccceb0667d975532fe70445535fcf85ddc69f05c93d60c519a39dd79c7de8bc85db2ccfaf8ccfefb2c3fc53b5187f0dc6498aa4b206fa1255570247087661c588c26e217cb5e7d1bdf90aa161c5c9e8a484e303315cf9f0613aafd57b2f6273f3c21719ef77e5f407c2a457feb72d9178379852892d91d11f41c0b66fc4247d6e9b2b9deb297ea718acdfef62caab481dc86274152fdf6ef9dd42929491f5f83193cbfede4e4f0f315cfcf3750ddb2d3366df267fdf3119bab7101117e2c811187461a4eb857827bb289c4226d37163a40a6afb61361c3b9225d28c4071cb52131c [...]
-G = 9dabc34f148419ac61adb31847cbabd59b85cccceb0667d975532fe70445535fcf85ddc69f05c93d60c519a39dd79c7de8bc85db2ccfaf8ccfefb2c3fc53b5187f0dc6498aa4b206fa1255570247087661c588c26e217cb5e7d1bdf90aa161c5c9e8a484e303315cf9f0613aafd57b2f6273f3c21719ef77e5f407c2a457feb72d9178379852892d91d11f41c0b66fc4247d6e9b2b9deb297ea718acdfef62caab481dc86274152fdf6ef9dd42929491f5f83193cbfede4e4f0f315cfcf3750ddb2d3366df267fdf3119bab7101117e2c811187461a4eb857827bb289c4226d37163a40a6afb61361c3b9225d28c4071cb52131c [...]
-L = 9dabc34f148419ac61adb31847cbabd59b85cccceb0667d975532fe70445535fcf85ddc69f05c93d60c519a39dd79c7de8bc85db2ccfaf8ccfefb2c3fc53b5187f0dc6498aa4b206fa1255570247087661c588c26e217cb5e7d1bdf90aa161c5c9e8a484e303315cf9f0613aafd57b2f6273f3c21719ef77e5f407c2a457feb59af968cd40a2bbb512fcf5b78da6fa7653b18e3c02bef16880c2cf8c01579e1da7339417fe2d9111c7b91b60200c59992e48fb81aa49b1c72297ba1f4520b69023ff4d405b89d349fcebce4ba7d6f1fdd9dda4c6e38ec35967a64e288ce22ee2485856fabc383671b6049659008060ea00d5425e [...]
-M = 1c0072ae72d5cd7b29202ff496bf859ee6d9e26dfbe660a1af74b6d80b0703e2b082a58c2fa06b44a1e0d163f270b41bf030de15c257f31495a2b4fab6cbaca6344f19d4ce86605fafc37f613a0e742c4ea041d9b48df5d35466b1cef46c3dc1bb822dbd2c667a3675a68fb8a54eaf897864dd1e7f8bedc518bb58ab8514b7e9487a7e487cb41e4c9dcad2735447ef35d099e11d1cf1a01c9df0336003e3d8867285b1a0baef063a4db666ffbe2bac3a7f26ae9baa206be16fa34e930d394e6e0f4303f4dda80657c48dbf2b752fbef7d3347d3259a6c4ee9923cf18e5789320380bbdd6bd7863e9b5fe60d40209bc0f5ec02f44 [...]
-RESULT = 0,
-
-TEST = 60,
-P = db5aaeffc554fe777a4acfae9c51ef2559068a72069f1c0286ed11ada74a0e9e227789c490a89153c0baa00afff28faa4edb228de09010f2ea4ef54e5df469668349e083fbc2ce1beef73d45bdcd5277bdbca10ca4c3f1021f896a68212e99f2bde9ad84f81702394afc95c7313c490f57d65394c1d6fce0f72307ed67a948d5,
-Q = fcf427f2fe473ca250ebb806f4a3abfccf43b8352044a36152aefa47b8df43dbf7eaa5d7e49f23abeb7f73d0ceec0df3892391f525dc283501b8fed892fe678d1dfe2efd22443db240e8b826acce933a7497e95c42ec18e68b2550343c409eff9c318db5c5c8c1e07135b2945d3cf582ee3f81a6379ef91e0f565b086343977b,
-N = d8be78ed984b281547d60416748b10bac422a41bf233f8b7970503b21fdbe0da785f052bdaa0975a796c12ed9785783ff781b8b4af7d5c51d1fc9abf0c4466c86d65d84e18d323b6fc289a34bded19304e9e429801fa44dcdd95a569b8a6008800e42d700f5d4a05f31f34e435440969d9026e0207475262cba784f8b222015ac3ff5c81e8071172070b387ff602998558e8ebf471f61e619b17f285812fab7462356d07f3452ca80ae610a75c0ae6757de93e7a0d3544906f269fd1607e09946648a89b9f52ba8a1dfaf121692de4e1a6569ae95a4c65829f1fddd7606d14758fff3db43a7ab6673a23b8cee4fa3af8095577df [...]
-G = d8be78ed984b281547d60416748b10bac422a41bf233f8b7970503b21fdbe0da785f052bdaa0975a796c12ed9785783ff781b8b4af7d5c51d1fc9abf0c4466c86d65d84e18d323b6fc289a34bded19304e9e429801fa44dcdd95a569b8a6008800e42d700f5d4a05f31f34e435440969d9026e0207475262cba784f8b222015ac3ff5c81e8071172070b387ff602998558e8ebf471f61e619b17f285812fab7462356d07f3452ca80ae610a75c0ae6757de93e7a0d3544906f269fd1607e09946648a89b9f52ba8a1dfaf121692de4e1a6569ae95a4c65829f1fddd7606d14758fff3db43a7ab6673a23b8cee4fa3af8095577df [...]
-L = d8be78ed984b281547d60416748b10bac422a41bf233f8b7970503b21fdbe0da785f052bdaa0975a796c12ed9785783ff781b8b4af7d5c51d1fc9abf0c4466c86d65d84e18d323b6fc289a34bded19304e9e429801fa44dcdd95a569b8a6008800e42d700f5d4a05f31f34e435440969d9026e0207475262cba784f8b2220158ebb0858f246ad6583bd4b0ca650cfe63309ea94d4b125efdc17be690210658fa47d33d6b7dfd77a85eabfccb8d2c48d7a5ea89f706c90b68831eabaa6f8b38a0c500991a814baebbee1afbb4fe91ff2f74021080729c5b99f471233b02fddb8335e402797c9af24d7df170735680fc65c33fa2a4 [...]
-M = c62ca0d6f184fa397835f263cb13904486bbaf564c7ce02562d5750a07a57704ee57b6399fc5f590c36ad321b65a3cb04cb59dbe6daf2408ee9bf97620f5769a2c49d2b5b82a6bc5c0f846f7996736447d7713b3d525ab8182eae7008f4b9df8afdd877aaea1de86f72d05d9c4ebbc6e21738664c3aed0cc744fb6bb08d5b807b078e7d9dd76c7f756607914bdb5ff9f41635a851a04f2deecf65204b29fbfc255baf20267a86ea1adec4c4a40556ee8cf0ed0c0ea9c5ef5c5ad41e88c5cbac85fc7b85812c2842272f030671856a6a58ed6809202dfe253aa26bfd825ee76a253323ea3f825e7df4d9bac9bfbbf0be46d20f784 [...]
-RESULT = 0,
-
-TEST = 61,
-P = cd67352bc0fbf73e75de2b7acb8ca9a5e38c73792bf4f0f6fe9a97959276a954b3b99dd2e6b974b17d0c8bec92a53b59a1c8dc9c2bcf6db272e2856336ff17d250b5de396dfc97121d750421c2d651068871977c8db5ee4ce8a76e719516f1533cbb216af60e7ea48e61c9d38acc15697e65424e13a2ae3b3b567ea6b0afec77,
-Q = feb5ebe008b9eed56be0627d7e77ea185bb45d3b61eb13d82ca91591dadfbf508079fefffda8eb9d3f39d304bc5a588cfc1fd66685c63acc4fdc66ae3fc8639923548c131d919921165e76dc6f021dbf82f83bac8c06f64460f73b11feadedd57e8986b38aa5fa442c0cc1d2b2b0118915a2535427b7407fe48b3fe380bdc259,
-N = cc5e5dfb80878ac5ec0cdf421c950c8ee905860cf14642823a801b2a826e6c0bb5cee0eee3e1389fa6ed9f701bfea4c22c7f221f79928aa986eef2f60d4230e86d031b38b4576bed0939077ead6151a577cbe0a3cc24155da856419e6d73f2df9d0b614c8f2ea5cdbf580c2ec30cc4624d55747fa376576780a349997ecebd5da99c7f807f8b00ffcd7b99ffeb7d345ba09984ae88c80d0a2a9077d1f06896eec8a5fa91fcd50f88148cbbe3e4d78c445353b0d9f7e6569b8fa357e9ec5f18dffab1c1532e2c51a11466b1f29986b27c65d0078ecc97cd3ab38f8512314ea25a716de47d9321b81573c054faddf904abdf6428d3 [...]
-G = cc5e5dfb80878ac5ec0cdf421c950c8ee905860cf14642823a801b2a826e6c0bb5cee0eee3e1389fa6ed9f701bfea4c22c7f221f79928aa986eef2f60d4230e86d031b38b4576bed0939077ead6151a577cbe0a3cc24155da856419e6d73f2df9d0b614c8f2ea5cdbf580c2ec30cc4624d55747fa376576780a349997ecebd5da99c7f807f8b00ffcd7b99ffeb7d345ba09984ae88c80d0a2a9077d1f06896eec8a5fa91fcd50f88148cbbe3e4d78c445353b0d9f7e6569b8fa357e9ec5f18dffab1c1532e2c51a11466b1f29986b27c65d0078ecc97cd3ab38f8512314ea25a716de47d9321b81573c054faddf904abdf6428d3 [...]
-L = cc5e5dfb80878ac5ec0cdf421c950c8ee905860cf14642823a801b2a826e6c0bb5cee0eee3e1389fa6ed9f701bfea4c22c7f221f79928aa986eef2f60d4230e86d031b38b4576bed0939077ead6151a577cbe0a3cc24155da856419e6d73f2df9d0b614c8f2ea5cdbf580c2ec30cc4624d55747fa376576780a349997ecebd5bdd7f5e74b5d51aebebbd0c07a178a09d6158b3f9fae8083aff4ccaaa83122e4994725dbf1872af3958465cf295d7f85db56afdd74650ae1ccce46bd875979d7486a75706a29e216de09336f467ae43b65a663465b2dae8a969f0db8e9d89c331b6293c5f126d3f2cb951c954a07cddb94b5c9331 [...]
-M = 8a3fbd3741424a4af44bbcad75f33baf4eabccff7c59dc0a512e021d65618adbb4a324148ff97d03f8a4b6442c5db858965a013125477fbb4f263df187d2b49e4f76a7254b44f9c72c228b67ec9a635b4a2d7659e39ba98f68e2e6ea9f93ea8449bd8e39658566f22c8f19541b3d73de0ec5833d87fb2b5aaed94b0d7cbf48236d8bb28ee7471350cc22c5ef338506b81a3e00345bb0b84c496ff3ddb02d6c0e8c45528f608ac960ea12df25ee28b44f441f31c589c9acd4af26340ff6e97334944e3923ab4fb0739f87c76e82a56b4a1df0ab04fd31c22c6aca2f022c261ede1ef04f3843dcbe33802e502e3e55b541db45cc56 [...]
-RESULT = 0,
-
-TEST = 62,
-P = bcf7de222458da2fa4f718933fe53400023208c9eb22c4a253c5a94837c9861aba33e97cd6e171f6f1b41c091352a53d4e475d3e006c035f01960d4a1aa7147ed304ec78f733281ebc0aa51f3aa33ae225354222b621f425a0555994f2e9c8c70cdc024c148168f8a978e870e23ffd0d6d654b358bcf42e1c8071f5f5ab32bff,
-Q = c81466475b361f9177a4969d9972b8f773529516c82d3541ec0fdae075697ff62a56d224bdb73dd1a6a4319014aeb875d8ded9361a1bafc5bb15ba4530db1f1a581246e513238b1437f383c223a5ae23bf8433920d2035d174ce03bddb71f196742cf0ff66ee86299fc89a007d197ceb88c26cfca424c9041f96c41367ea770d,
-N = 93b0b46775a486e622e857b636632be6691d1d7d2eb362f88527ea2c5ff53b7314289b9b1546baa8cf22e7c0d8fa0115286822725fe0d80e859971c4cd9dccf35b80e34b059c97c0b3f0f72dfb87f1dce701695be4b4eaa005bf0bf92115600f3ae9215bf28c8897659a53b8508ab7fefbd8c74246a28aa627ee4e6bc997450c4843179933f66f5866f2ee0c79e7f0dc80a71ff7063e6092fd3e54e6611dd8463f67c8bf8ed6e3e235113bb4d5264cf00a21a451f447af85649c359155e053a2807cd097bd74437a95cdaca825bc1136fd0d7c016e30b3f8d3211fc356fa35fc8923d6b96023b7dd6a5c182b529860fb6ad6920b [...]
-G = 93b0b46775a486e622e857b636632be6691d1d7d2eb362f88527ea2c5ff53b7314289b9b1546baa8cf22e7c0d8fa0115286822725fe0d80e859971c4cd9dccf35b80e34b059c97c0b3f0f72dfb87f1dce701695be4b4eaa005bf0bf92115600f3ae9215bf28c8897659a53b8508ab7fefbd8c74246a28aa627ee4e6bc997450c4843179933f66f5866f2ee0c79e7f0dc80a71ff7063e6092fd3e54e6611dd8463f67c8bf8ed6e3e235113bb4d5264cf00a21a451f447af85649c359155e053a2807cd097bd74437a95cdaca825bc1136fd0d7c016e30b3f8d3211fc356fa35fc8923d6b96023b7dd6a5c182b529860fb6ad6920b [...]
-L = 93b0b46775a486e622e857b636632be6691d1d7d2eb362f88527ea2c5ff53b7314289b9b1546baa8cf22e7c0d8fa0115286822725fe0d80e859971c4cd9dccf35b80e34b059c97c0b3f0f72dfb87f1dce701695be4b4eaa005bf0bf92115600f3ae9215bf28c8897659a53b8508ab7fefbd8c74246a28aa627ee4e6bc997450ac336d32fb46775974a573edba09003e50b22821652ee66aebd68d0bdb3ead2355add0d1dfa3e34199cb8ee1bad24ef3ce2fb6dddd9bffc60a7f06e020a5e200955659d39b31d9047a1cf83c6c77328311854064caaee8a01bdfdc270889e7b9f081ae36de4b3c8bb211a95b9f33ee70274aed9d9 [...]
-M = 301d7b4fcb2e338487a7ed19e26c196f5718618c79b3f07ee83d8b1a4d5a7ac3209591a06c029bbab703524e8414c670c88f20b1bf41a7c8dc82124f413dc645c363508b7d769a0d75e64a852d4ba96e39168d18842f3b49a056cc0180bd0832abd37f4ee3cfe769b4b2804e804b073801623d3cb696c901ef3221684ad04b0d2031250701b6a18cd8c71145e8f369c1e1958c81185d9f3470e8be8613769850e73b1ec378acf68b97c51623f3c7cd5a018a80258e1335cf05446c11cd42e1cdb838ab6fd3601e26e1b92d5f998bb29f1637ef1e03634bcc93a2388dfb3fd8782c4ad558836541f9f101752c40339f8418202239 [...]
-RESULT = 0,
-
-TEST = 63,
-P = f167ae5ed23c2336c6bc3baa76d1a44e28152126e5d07c2d46809ea27806986fbb6ec76c50d97259fa9e611807f6e7fd4b0d99ed140d69f309fc8c60040fb61e94d485268aad3c6823719ab30f7c290ae418669a39aed297ae8f0e8c55b8177f48176817041939d94f9a2aaf940104fb0335f081787e792f379662da4499a8ab,
-Q = feecf0bfb9b92ac4bd75413780177e8e8b39ae55997791d30ad05f5506ddd3929b4e05e3f0c209a4a78b4a868083a5adf6a5acd70652df23aedb6887a69e9ca2dac6a9e8c8b69a7b73be06aee7d4d6047d4b77ad12509b534c4d493559f04bbb68973daaada386c0ab681b7cf7216962990f7e5f009f536c9e942058fc83c0e5,
-N = f0644d9cd2f8017c1ca82886195279a00b1a180c53c0f12d492dc69b42f6bb121efb997c9887e9ae96234f2ee44052fc4d8f7b5c26a0aef6b0e66abbdaa0844a5918978d489f98921b8d15d8d58e3aa946ebdf9606b143ed5ca16b8117d630672885f7bf609bafbf4d433a694a5044a1f374a97bdf306711578c39a0ce301065534dd2baee057f870a53f6dbfd83fa4d3904a450a04e814046eb38dcfea00c84597f17636de87fc3b77b616e7c1c6a1280c2458a48196a601c9f54ef0eb53b38d5e92f4dbee920602f11d9042a1ef1778be5a347907015786ca8c1cd410137efa16c4e039ba594154b5eaadf9a58a9270cd6be8b [...]
-G = f0644d9cd2f8017c1ca82886195279a00b1a180c53c0f12d492dc69b42f6bb121efb997c9887e9ae96234f2ee44052fc4d8f7b5c26a0aef6b0e66abbdaa0844a5918978d489f98921b8d15d8d58e3aa946ebdf9606b143ed5ca16b8117d630672885f7bf609bafbf4d433a694a5044a1f374a97bdf306711578c39a0ce301065534dd2baee057f870a53f6dbfd83fa4d3904a450a04e814046eb38dcfea00c84597f17636de87fc3b77b616e7c1c6a1280c2458a48196a601c9f54ef0eb53b38d5e92f4dbee920602f11d9042a1ef1778be5a347907015786ca8c1cd410137efa16c4e039ba594154b5eaadf9a58a9270cd6be8b [...]
-L = f0644d9cd2f8017c1ca82886195279a00b1a180c53c0f12d492dc69b42f6bb121efb997c9887e9ae96234f2ee44052fc4d8f7b5c26a0aef6b0e66abbdaa0844a5918978d489f98921b8d15d8d58e3aa946ebdf9606b143ed5ca16b8117d630672885f7bf609bafbf4d433a694a5044a1f374a97bdf306711578c39a0ce30106362f9339c6210318b862279fa069ad77085b5d4d42106733ff59a3ae57fbba08202c24a132c4d03c51551b5cff3a1dc673f0efec62db9214963c760076406e877664e003e6b85497c97e237a232cdf2682a81c5004470a78d71cc6a0b9158d4b4f0bda841e9e8d37b505c64b30f363ac970914faa [...]
-M = 66a31df5194e1b7186857f10843ea78045b27a333f4dab2bf7576af96e924492c14600b57baf6a1e904d487acfa0d2ad3736cd93c69146ae851f4187e964d2d4856d0873511c1ced0a9e6496379025e167bd0e8e04afc994302c01a1be18bd404b476708f5e892ad7e92eb269e307562893cf182718d66b5e608567230165f50575c1b8fbaed460cd8b4d2b766ee112be97ae10c9f97c51400da630ce59ea6483d7abb11770c4c746bc80a0a60588e3c78de646d6298465b391515a67f64f1022b5342a2b3f1318461232528b613f0fd15dc1b57ded16dba77b1c57f2c6bf56682b1cd6f41feeb0fefea6c2d344fc2426648219c [...]
-RESULT = 0,
-
-TEST = 64,
-P = d5b98803d295c5bc3f5a640eaca705c6842426ca9c536bcbb09d31a2697084cfe78ac4059cf179336981ddaa1cb9be7920c2d4384a5dc2e7f73775ca5245124c8826b6d772b9abe40e11f6f1bb2cb0807f74be3108d8b19e13f55e298d99c6bcb91d7903158e7809d0ba1ceb6120a75e9851e26e713a0ec998e837483ad67afd,
-Q = f9727d4c184c68bd5e0190c504a48ee00786451a1ee7a376cd4fb887644850d1b1651b7e0ca59a2bfb204aff5c6e0067cf6d715cb11bd2cd48cd8026654c6102fd5b550702161b8a6fc402a25e1925deb20bf9d0a78354e36d90b29e67ce68ff8cadb7291ad23c5247d083f1913b1cd88bababa82682ef1e092464700b745639,
-N = d0410a85684ee242020db64c3861de6f608b70b1509ab75f8c5744c2a78571aef775760993f9feb45ec7b8f1a0b71ba12a900396a9e710228c28998260ee808eebc5c0f65e8c2373c87ba1557199dd8982efa22f8bc2d730d7fd9755244ee6f23f1436b2e96dab47acdfb26eea2389bd56fc8b077090d6a08aa7ad6ff44627b2f25cc470cb8e0edfcc531bcbdb0b1944d7f54627e6b09c246d78a5f8de1405ef33513234ecf508632874476af461921ee9b71b880d774cb5a54648fb4c85c4d7960f53ae5318fd2ec7f07b18bf9e2b5a634073ba347f0e7b0dbab9983edb4ec7b106b90d834e3dd9bb3694ed1b9c8a05103f89b2 [...]
-G = d0410a85684ee242020db64c3861de6f608b70b1509ab75f8c5744c2a78571aef775760993f9feb45ec7b8f1a0b71ba12a900396a9e710228c28998260ee808eebc5c0f65e8c2373c87ba1557199dd8982efa22f8bc2d730d7fd9755244ee6f23f1436b2e96dab47acdfb26eea2389bd56fc8b077090d6a08aa7ad6ff44627b2f25cc470cb8e0edfcc531bcbdb0b1944d7f54627e6b09c246d78a5f8de1405ef33513234ecf508632874476af461921ee9b71b880d774cb5a54648fb4c85c4d7960f53ae5318fd2ec7f07b18bf9e2b5a634073ba347f0e7b0dbab9983edb4ec7b106b90d834e3dd9bb3694ed1b9c8a05103f89b2 [...]
-L = d0410a85684ee242020db64c3861de6f608b70b1509ab75f8c5744c2a78571aef775760993f9feb45ec7b8f1a0b71ba12a900396a9e710228c28998260ee808eebc5c0f65e8c2373c87ba1557199dd8982efa22f8bc2d730d7fd9755244ee6f23f1436b2e96dab47acdfb26eea2389bd56fc8b077090d6a08aa7ad6ff44627b12330bf20e0abe0662ef726f829bf849e4c4ada432b758ce1ef8bbbcf105b304d9a6152b1435df503c3d21ec17b39d33df986d5f311fdb7006541530a94f45188108d47cfde4935c04a1a8184a65854fb31bfbbb8842307f98c34a8d049731f0b6b3b88e152ed897da2abf4102940c5cdec41fb9b [...]
-M = 23b3c64d0611c5123f8211f853a04fdb6663122e1f271c84f553910ea53782e482e6d82773e9d09fb86f460e77cdb49bd0a6a84fa1428f2bfaf951caf7b7a68c19e2c0b2e3782d99c83b7c2feb1ff6389d5daa882f4f04893c8a52fec430b9fe4c43283dba14bffc20800bd75a23752a5e04e39f9a762e250e34008bb82904df2427600d0a5297ee46e3eaf1cdd0255c6382839da46cc2c39c10904fecf6e436f0e8a1b1606dd7b77ec4cb6734c8d40680cd765f8e4bd004fa05c95b62feb9b52aa7acd8946905894321d361c5876e397fc337cc33a3f43fae7a1dd1d4063fb02fb9ab0ba53c9b289f9f7d3199c7ae8b444f080c [...]
-RESULT = 0,
-
-TEST = 65,
-P = c0fb8392202559d9302b4b516019d7c73bc21a88e1771f41bc7dbb702fb81db65e39e9dfef8b2b11e234bf2a5f50298bc94a6c4d020f33e800027b8468773ae4c70606b55fc05958c83f34462a14a9ce390aa9469be261b7e775d1f2034df5442c25c04f3cbbb088e8221e4fc72a3b7e0dbf84f500be7c30aea37ab191127001,
-Q = e7f2cb380c710ff6d079ef207c507ec434d223eb6a53d8f5fd029a6446dd6d82a2e17a7495f875a2bdcc7df2d18bad505f8f0af5582baccc353e6b7559b5db270f59b98faa3f4a2aca6ef442d9f6117551abce01c7f5519c19d09fd0c5fcbf309d3d4b0627c761c6e6c97b0570384e84b738a57168bfe8093ec65c9c46c12471,
-N = aed9faacecdec40f48c1afa3a14a7121922dd58aed480cd8f7628741aa79e6407b1f9afda5b84d13b4d1c335b5da399205dca11ee51c7970e43ba62e5f8c25de66b1f5f51eaa9cc5000e1ef05aefc08571572fe1929378e85db43bf6e25eb78bdb7642c21748251016e0aafd0bcb0e77ff9d44c638abdd29fcc270c377d0b037cb9f43c54316748b19a2240e3b0bb9f6efc6d2de20434675a66503e3af7b1a2a670883e7f69d49fd74eb2dafb8f2a919b044f00aad5bc4ce77fb9ede68ca6c75674270581ff6c1517829af48f59bc6f04d022d99e03be64f9a9f35005ffa07bd01b57203eedd0603c6c09c9a381d449416b4abcf [...]
-G = aed9faacecdec40f48c1afa3a14a7121922dd58aed480cd8f7628741aa79e6407b1f9afda5b84d13b4d1c335b5da399205dca11ee51c7970e43ba62e5f8c25de66b1f5f51eaa9cc5000e1ef05aefc08571572fe1929378e85db43bf6e25eb78bdb7642c21748251016e0aafd0bcb0e77ff9d44c638abdd29fcc270c377d0b037cb9f43c54316748b19a2240e3b0bb9f6efc6d2de20434675a66503e3af7b1a2a670883e7f69d49fd74eb2dafb8f2a919b044f00aad5bc4ce77fb9ede68ca6c75674270581ff6c1517829af48f59bc6f04d022d99e03be64f9a9f35005ffa07bd01b57203eedd0603c6c09c9a381d449416b4abcf [...]
-L = aed9faacecdec40f48c1afa3a14a7121922dd58aed480cd8f7628741aa79e6407b1f9afda5b84d13b4d1c335b5da399205dca11ee51c7970e43ba62e5f8c25de66b1f5f51eaa9cc5000e1ef05aefc08571572fe1929378e85db43bf6e25eb78bdb7642c21748251016e0aafd0bcb0e77ff9d44c638abdd29fcc270c377d0b03622b0f4fb16800abb18fce99c5ea1636b7f329469d4784e3dece4ae0f38e58ef165ed1f937119a948d4e9f0928816d23d876b78c85320e41a42bab7e4a69d566990e2b01315f71dcde57b86bff1910bacc24bb6517c6432fb9958c33d96af5348385266ae8a59f3b3f7d5034500baba9151bc8169 [...]
-M = 895f521364b69cbf6453eb4144487e99dee99730348983f00118d9f3b336cf5895c7241f0e781d1dab9e5c8531fa8ef93c3fe7be13164df3380392dff4998c7df6e465e3e2d6b316f9dcdccc990f4e9a6fe36702e5ca925764e80f16967692424b8e7f5e9a3f8cb8f9844d35719e51ef5e2955dd9bb94b1fa641b70e46401eefd1f076f7cb681bd6affcd4d12d7c86edba09554514ee2eb6747778282ca2be2ed13fc2d741a8dd96cd00db5a7672038beb71ffc156f50e24d7b63901010a95e0ba402f4427199eb6cb7ead7a4943587d5bab92216d531784370135eeb43c70ca0a032fd3951ff34b7a2fcb071211733578cf0a51 [...]
-RESULT = 0,
-
-TEST = 66,
-P = d05d042f68e9dae191a0b91b5fcb8d0e4a892de48cc6f780e4521a817e21f1ad9a09a4624129357caafdc5a74c8e8d35168f892c5a9f48ef1dd1246c1633f6058b4c4e756c043aa66e5e41bf96eada5289cb95b93a34b8cce192313a97450ccce33a020e7d69f576efb2aea564898dbbc20dd72adb7d75bc3ead7cc86aafc8a3,
-Q = d63c25a12816213095bf7a919ea84a13a4b2b0534703df43c345043f9ce5dcc1a567498b0b697fb32fa64dbdcdd39ce13384e269a52a8fa220dc9936303c2e6082f47c56924ce012cfa3fdc868382330488bca5bf89f69f2fe91646490dd3ab98922d0d23ff69aeb5aceb7252eb6d214450436150f125b8b2b22d97e5bc67a93,
-N = ae5eb5ed398b1b6bf1a42e9f85c775203a3a1661715a0dd5af57c2d1488893b014a3ed2787509ef3f6a3755ffc5d39b51f2a507e97eadc9d36dea6528197826e7ef2dfd5a15ba8ecf8a5d1ca54b260745513627fb35b4810beee90b45453827cd7ce719fe9c5d63aca3c5805ebd391a9186727e04816eedde4ba778be91274f76f715ec48ccc0c66d772943f47d7c8094ec6ce88a34f69e8b53fecc4d565b1e382d87603b10c7586f6e0da337ca13752e7be1a73980503a1ec366ef80183dc2dfc0bd6a12ac5be54f5e2816ca274b11eed439eeae2f107c7b91cad4ea566744e90b972896311c640d843d44fea02af926debf41c [...]
-G = ae5eb5ed398b1b6bf1a42e9f85c775203a3a1661715a0dd5af57c2d1488893b014a3ed2787509ef3f6a3755ffc5d39b51f2a507e97eadc9d36dea6528197826e7ef2dfd5a15ba8ecf8a5d1ca54b260745513627fb35b4810beee90b45453827cd7ce719fe9c5d63aca3c5805ebd391a9186727e04816eedde4ba778be91274f76f715ec48ccc0c66d772943f47d7c8094ec6ce88a34f69e8b53fecc4d565b1e382d87603b10c7586f6e0da337ca13752e7be1a73980503a1ec366ef80183dc2dfc0bd6a12ac5be54f5e2816ca274b11eed439eeae2f107c7b91cad4ea566744e90b972896311c640d843d44fea02af926debf41c [...]
-L = ae5eb5ed398b1b6bf1a42e9f85c775203a3a1661715a0dd5af57c2d1488893b014a3ed2787509ef3f6a3755ffc5d39b51f2a507e97eadc9d36dea6528197826e7ef2dfd5a15ba8ecf8a5d1ca54b260745513627fb35b4810beee90b45453827cd7ce719fe9c5d63aca3c5805ebd391a9186727e04816eedde4ba778be91274f5c8d834f3fbcc1054b01260924963f0e75f8af050cf8493240da8ce03ba5de374436788166479c0571c3cc6ce623f0d3c9da9aedd983b2b10ad88b155bb13b7c7edcb0bd52c74a39bb7e041e4a351b39c1aec3ed5b01ce507d8f917af7d442cc8245c9fa8a5b135de8dc26e8556c24fc266d9e6dc [...]
-M = 8e97a4bf57831981012fa40cf4c5ded63c07bf6aa70fb5ecb744731d54a66a65ab3167fdadd51240d92a92aa0ccad3cb03b2cb15cd6a10aae6614b34a8ed1cdafa1bbbcfcba31ab09db8559d8a209938440beed34b947e84159223bf084c14306dddab1daee1c31eb4081881adcc169830cb5ad169dd257d099e6dec792b21ce772ab8075f6cb3f5b0ecc964dec68960f7ebfef0bd952c52b2e0183d826f4009d3dc44a4cea095d607b7c2c033b15c38d18b54dd06296e4aff2ffaf47ab555459c5c6ea3e7ec89b2877140f53c4723f49bbd41b1e70313a4559ec9155b4f16619a6be0990af98f2dbf24a0e114176735887f9ac2 [...]
-RESULT = 0,
-
-TEST = 67,
-P = c61c9aeedbe0d5444dd509323bf89502bbcbbbf4a09a28921e101e7bab6d32ddc40384424c18d4ea5cc1a713f1bae0a3bf5dab259183f90ce99e1f29939f48c550acc73e3e0711ecf5f338f11facef990352a9e7a2e782f6baaa68e370157c271b9a7a325c7deaf8fb41e332b4b58fde648ace722ecdfe7b90ce63189cf0463d,
-Q = f55508e601ee69e07ad80321ad75aa2f34f7de15715b8850cb8eada7c9830e54f1b724944a13938fdcbdac13e544afbac117a292903753567b06e9b5f5648f084c5efcbed7a0bac40f34f55cb3d26daa97fc1d85270226dabea3dfb7efd41fa520ca3298fe7fed49389b04dfca49ab87a2e8d304ac8f46515b587992e4735f35,
-N = bddb2ea8edc6745c2d6518c5d0d44a1d31d4479d858b46ad769a44a8aca6cb2e5e0c8fc0c0dce57177799c4ed713bad013078d15893313a9f8f1dd112b902ab8143260cf82c0ee095dbfc977c56b41b83cbc70713b11619f9ccae2145e6bed1e30830e9d1fda597186f8775b2e3b0a19428397d468d3091af22f93b1ca88d08c28db5d44d4b8e8d3e032df347653f314e8506dea91552a9ffc1d8421b9eb9dae1e0331e20bbfe9ecd1588031e2c0f50a0fab9229596c987a273dcb28fb7ab582f3d80a02e551c408b15e6013cb88d24753281398fffba3b456f1be6d858aad8750ecb90b54fc53dd72ceba9877abe1bf1b8ed757 [...]
-G = bddb2ea8edc6745c2d6518c5d0d44a1d31d4479d858b46ad769a44a8aca6cb2e5e0c8fc0c0dce57177799c4ed713bad013078d15893313a9f8f1dd112b902ab8143260cf82c0ee095dbfc977c56b41b83cbc70713b11619f9ccae2145e6bed1e30830e9d1fda597186f8775b2e3b0a19428397d468d3091af22f93b1ca88d08c28db5d44d4b8e8d3e032df347653f314e8506dea91552a9ffc1d8421b9eb9dae1e0331e20bbfe9ecd1588031e2c0f50a0fab9229596c987a273dcb28fb7ab582f3d80a02e551c408b15e6013cb88d24753281398fffba3b456f1be6d858aad8750ecb90b54fc53dd72ceba9877abe1bf1b8ed757 [...]
-L = bddb2ea8edc6745c2d6518c5d0d44a1d31d4479d858b46ad769a44a8aca6cb2e5e0c8fc0c0dce57177799c4ed713bad013078d15893313a9f8f1dd112b902ab8143260cf82c0ee095dbfc977c56b41b83cbc70713b11619f9ccae2145e6bed1e30830e9d1fda597186f8775b2e3b0a19428397d468d3091af22f93b1ca88d08a6d69b96ff6e9a9af1785d2e08ce5b3e2f78cd3e07f5f79bd127eb7fe44fb5c7b6848890b7593817297d92d0a0bc164ab8f36447137b14c16c298c2497276ddb556cc4605cfa9f757ac3631c5f8097503b7d94c2c3611f9e2dda375d225a111bb14880c3ff9fe7b9b3ef1d285f8aca659141b35e0 [...]
-M = 8ed6471f4ca73d9acbd7dd7cd3a4173401debdee8bbb0b9422c2bd04784a5a186e8edd3c8c25b58134abdcac2b69f0f679c607e7f4125b1de60baf8f901f9f4111716042742f64eaaf37b712872bae9b4fd9c7a0bfa872952e5baf708d37069510585d656487f2042a47cc87d78ee7d5fad434de264cafa73ab23a05d2c0fe5df9272c7d15fbc9405c405c9a89db94a21ec0153580ce55d90983ff95212913fbdb9c9e8483f9c4d166e9bf2fba019394df9d425c12da551b002ca85d134cdbac4c4dd78c8028acdceb0799b367fd963e296e30d4639027c6bc91b07d23a5f1d969fb524863f2266de689717ef2998da730fc4ebf [...]
-RESULT = 0,
-
-TEST = 68,
-P = c5a60e6deed7bd03f12fd5450e8d70fa1f66042ce5289b5a15ea92c6576e36a8405fdabfd824b4af982fc25a0382fe82293090e59f924fef61c85d813f43fbfd2d0d766898d6bc4dcc7a0cb76cc3d078372993c07067e07af3a5461c551aa7b49ba39be4e27fbe1efbdf6d5089d44e8da19562b93a887aab94d290e528e8004d,
-Q = fa13ad8c551365f248fa8326a9533abaa640033c7482e1f21870796a5306286d78059587957151a838c6171a1bb46effaef8694e3cc60ac1a14bb5f7c43e53e30f14a2ddeba020aa53c2677d938420ce5628233e82987b2accca4ed741a64a958cb23d1f229337076270885003fe5a7b44d4ae839bae9fddedd6c4a2bbf1039f,
-N = c1135b67fda6b3f26f04215e8eccb8c2564312770a3c85b4c17cddf5a9e71aeaefdc3e888f1a00d98e34c52fe89dfd87e7a1f8a79494a4244a4dacf5bcacdc12014d31b920028bcc8b98d4d57a3de51b9ab7b57839d3f25ad6c32f76d607b7ed276baa25573c743f02e4a6429a24b40821462d386156c1f1d51b35d45a89f4f31382e65f93b5f87f8c63d22e62eb62af52f54077c41cd58719678a1ee7290f1eb6d34ca314cc3ca7619cff988c06f9c7047d164d87f718f809a51342c2234a3d296c89e8796ab55db685202d760f0dc9fc7d77a9362010d6c2c3d198eac81d3efb795bef06623ca05fc9f0593fe0fbf7168ccd02 [...]
-G = c1135b67fda6b3f26f04215e8eccb8c2564312770a3c85b4c17cddf5a9e71aeaefdc3e888f1a00d98e34c52fe89dfd87e7a1f8a79494a4244a4dacf5bcacdc12014d31b920028bcc8b98d4d57a3de51b9ab7b57839d3f25ad6c32f76d607b7ed276baa25573c743f02e4a6429a24b40821462d386156c1f1d51b35d45a89f4f31382e65f93b5f87f8c63d22e62eb62af52f54077c41cd58719678a1ee7290f1eb6d34ca314cc3ca7619cff988c06f9c7047d164d87f718f809a51342c2234a3d296c89e8796ab55db685202d760f0dc9fc7d77a9362010d6c2c3d198eac81d3efb795bef06623ca05fc9f0593fe0fbf7168ccd02 [...]
-L = c1135b67fda6b3f26f04215e8eccb8c2564312770a3c85b4c17cddf5a9e71aeaefdc3e888f1a00d98e34c52fe89dfd87e7a1f8a79494a4244a4dacf5bcacdc12014d31b920028bcc8b98d4d57a3de51b9ab7b57839d3f25ad6c32f76d607b7ed276baa25573c743f02e4a6429a24b40821462d386156c1f1d51b35d45a89f4f153c92a654fcad589523979c2ab0ab6fa8d4f390e6a71583aeb0c7dee3cb4b008fe6ddc5ba736364f90a726246ccf8c452c541c19ab9ebe470690ffc9bea0fa5ced4a70a1f4f3d8659648abf875c71c836f2bc0aa431fb53102543ca554072af4d32382eb014f477a0179fab8b20e52ee3022bbc5 [...]
-M = a389c8bcc5008df76b64c78fb40255ccda9aabe5cb8c4f2a4404cdcb13f8407927f686e7d9df74509720a25c253067706bb85290ef8e251b6eedd107f595828b441f1e0f4507b307064d67c51a4acc8088217ee7300528f77bb9766ac0b74891920b4b03858e891dfba8009e0a8f27eb9aec1274f06637cfe3d6541de8c457e41d66e698cd16b480df44b185f5ed2f670cd862e9f07ff87621f1c0e415bb1710d045e22491b20186dc1d67b60c847fdc50d5ce1c85cd5bc0c6e49a17569e15c7ec103b8d8e64a0f9ce704c78f0fbedd3f7663955c596ac7b48ca62ee650201f771cb33d31042df37e44776b939ad70b9eb8158ae [...]
-RESULT = 0,
-
-TEST = 69,
-P = dd73da625b0a66bbfa64d79a8c2fd148dce6cfd7bdd971f4eee45b89b0a85f328efa56d732e97fd0a8f7d4495eccb1afe36cc7d194ba8c42e30184e0d5c233f9ad8984bd2935a4a9a1ae603b0a376c096772b70cce44be8f2f314a4350d0d7371e4c17f50a589faba9100e2d4b33a3a89536e5c2a8a0fed9d27fab3478664e9d,
-Q = de4197a4237e12ed25f63a5f8c7440274687457d6b3bd3f51c3269d15e63037a23b34f2049ce46e4daa7cbd3105fb4b61bbd7c1a1dd30b7be88349ad843ce516aa7891facd7d014ef80af61f9c5899377590809fc1ae619a0c20f436ebb4ca27b1cba5550f96ed9ab487e6ca2ac603a33b497b16dd82745d239933a594a045b5,
-N = c04334f910a7f3b0c76ec8b2e7d4ed753276b203844b66d99bb800758ea9517a33930a4a03c16e89d1c531c4287c3ff9e5cc1ad4b4e941afa381903660aec40c8bdbef66fb61398432f4246a6d0e5542f7c0277bb042575bdf4a09a7e050adf4a47933409586b0bb7eadd96508d4a3856de29e727f26c6d2e646fad0de7f28f92c9b3ebc58913420aea0c1a374b7cd5b2ca685f1b2770c187009a3f44797ab159926fe39c405b2817086163ce821fb975707d4891a357bb7bdfb60f4457aef9b0273e34044c4e450da548e4955c416c9900ab9592a1f5d8ce76fee684d63c0c523b71e137dc49d4a5c2ac0204f87ed6df243eb00 [...]
-G = c04334f910a7f3b0c76ec8b2e7d4ed753276b203844b66d99bb800758ea9517a33930a4a03c16e89d1c531c4287c3ff9e5cc1ad4b4e941afa381903660aec40c8bdbef66fb61398432f4246a6d0e5542f7c0277bb042575bdf4a09a7e050adf4a47933409586b0bb7eadd96508d4a3856de29e727f26c6d2e646fad0de7f28f92c9b3ebc58913420aea0c1a374b7cd5b2ca685f1b2770c187009a3f44797ab159926fe39c405b2817086163ce821fb975707d4891a357bb7bdfb60f4457aef9b0273e34044c4e450da548e4955c416c9900ab9592a1f5d8ce76fee684d63c0c523b71e137dc49d4a5c2ac0204f87ed6df243eb00 [...]
-L = c04334f910a7f3b0c76ec8b2e7d4ed753276b203844b66d99bb800758ea9517a33930a4a03c16e89d1c531c4287c3ff9e5cc1ad4b4e941afa381903660aec40c8bdbef66fb61398432f4246a6d0e5542f7c0277bb042575bdf4a09a7e050adf4a47933409586b0bb7eadd96508d4a3856de29e727f26c6d2e646fad0de7f28f770e5ccb5da08ba778e45afa95c13bbeb0938709c8961c62e64f2de99388c4868e6795842474debcbece6762078f5953157dd909d67a7e3f8f2769265eb7bd68aaa71cc884e123e58409b37eeaf341188b30781ac9a2c3d63ac1dafee10de1f66539f60c963d51003fe92cb28d98e462221c38a27 [...]
-M = 37b07bd61d984cb2f9d82675cdb8701c5ca4bdb0c3465cc69c03db64328ef5b4125dfa2bd851fcdb7b7786c60526e985963b114da310d8a47c985e96fb24d27b60596c368f57c12e4fa7c30ce68280c8d39c9e46bc439df2bb677d8aecffeea612715dddd985729ab7e665dcadf9b6e8408c21ccdc31bddefab8f6fbf47e99434577a59984205fd8a8b2644374a18fe49872fc84db7f142eb3d264c2945d599549b88ff78f44a7630698e322fa1028ed8453d367329b7085886619298076662aac7bb9e23cf33a65456a16c6a23f743220ea0e63971d7ad8dbe1d57c175b837e35420ecdb88c970de5691f6d76514f2b9d7c1aaa [...]
-RESULT = 0,
-
-TEST = 70,
-P = d27b42825d75fd16f3df9c02a98bf495e14a9cc159e852bee400499ed76ccf7ef413b960f62086cba6af9073b9f1110d83b935189c28e658d8b91f880649b02e096652aca7ec45ac5a38f55914fe15863b931916c6aa54b001b9e3a556e098916460e0e902c1dec07dcbe140f864667b895432d6762797c744ce89e1bfc491db,
-Q = d834e7405304fcf14dacb9acf6d5d176cc691c6a84523e21915a573438411c467bdb49ebb7f1b437f04a15a52b3eae1108006f782a59064c356bf0d18a2244e772639d731c9fffa5f25cfcbd3941bf491af1e81360d415355d38e0e7087ced62786d2e0e9acb6e4085f25337092dc78587804d6873f3ec3151c14832f40544b3,
-N = b1c37f499d6cdce4a502eef5626f8469bdb73c92c168b606212dbf2d9276e51744b6cd1def99bbfd2cde30946526de494869b45111a9ad182af386f1f2cf77f15d808f9debe30b8cdf5743eb7762313bf7ef09dd4c4513c40dd855083cb906c9ffdb6ceda321592eef5ed5aa083f97323c3744e94432a3073385a335f14da3fed46ceb6cdcd98b28a91c84b6a3532cd0beb147fb49fa2c641c579dfb84b90298addfd4b6452e0486968925c9b5431380042263a3e3b5f50e2f41549f9762fd7adf3830f9f19c2bce90c668a9d293e5d3d0a9cbca0adb2443d0e53bbb608db361fc3cb0dc0f66a70bfc2a9cd0517a93e0c9e76e75 [...]
-G = b1c37f499d6cdce4a502eef5626f8469bdb73c92c168b606212dbf2d9276e51744b6cd1def99bbfd2cde30946526de494869b45111a9ad182af386f1f2cf77f15d808f9debe30b8cdf5743eb7762313bf7ef09dd4c4513c40dd855083cb906c9ffdb6ceda321592eef5ed5aa083f97323c3744e94432a3073385a335f14da3fed46ceb6cdcd98b28a91c84b6a3532cd0beb147fb49fa2c641c579dfb84b90298addfd4b6452e0486968925c9b5431380042263a3e3b5f50e2f41549f9762fd7adf3830f9f19c2bce90c668a9d293e5d3d0a9cbca0adb2443d0e53bbb608db361fc3cb0dc0f66a70bfc2a9cd0517a93e0c9e76e75 [...]
-L = b1c37f499d6cdce4a502eef5626f8469bdb73c92c168b606212dbf2d9276e51744b6cd1def99bbfd2cde30946526de494869b45111a9ad182af386f1f2cf77f15d808f9debe30b8cdf5743eb7762313bf7ef09dd4c4513c40dd855083cb906c9ffdb6ceda321592eef5ed5aa083f97323c3744e94432a3073385a335f14da3fd29bcc1aa2c5e912067902f0702f166c410fd8ecf6bbf9b83a6fcfd28750b16d33df0d169971bc982ff8f7fb0d01354617868bf131d340869211c444606f70865636e40da2d0fe67c44307693845411047a24ca9fe35cba5e71f2772f01302d6e1f6ea1e471d95a0af86c68584fe865dfb912ee36 [...]
-M = 40b72603de9ba4f1055c76c5942e4db1745e3f6c9dfe5b83187221e9621e4124d3bd6122ed7be32211e9f882e1f6cac215d27cbe0dbb3388f3362dca4939d661d2b9a9f9a387fb7f929436984fc9fb226cb8f3596dcbfdb423a964aa54f28cd0747bd812a1500880a5afed8dc7a22297baaba63ed6535d29651e8ce013fd3140e6eece8325e7fc31875d41cd943523d06a5870f520e475971b031da4ba0e50f05727ae1f86f05ca47250602f955d53a35aa09d4927351fb396cc3d0db299b379be5af12cfe0ab41752d307dbb8a569f6a4435d47eafa42f6510e58a8fb544325ef23dcb4aeb44eeeb9e6f0c6906f374151d7e3ad [...]
-RESULT = 0,
-
-TEST = 71,
-P = c2a3f9cd78440ccd719e5efaf3a1bbe82facac681cf0aef62550bf4e18059a55777e6ca0b873d519595d41771b02f4ade3735d152d70948e5604c5b08b2a37f4c2bfb9e17410c758a1ad62cb849af6221d9c570ecc9d14e9c63b9cba8956c63512103fbdd5f87a2ad57b602393219a14c72c29597629ecd0d7950251d89cf8bb,
-Q = d60c8ca6ccae4f70a0f5c3de7d4174a4fe3c7f7a2b454a0033bcb0e471dc24718b8d541a7e1020ea3724c12b540c143631028f564782f73d5ae35bec6648ab3d54dde6fa617d33af4db30d73091ab2b7307a7a594d60378be8e9f1f37a84d6984b87a73acbf23f587a83c62104dca7e0ea4bc4d45655f80124822491d75f553b,
-N = a2be9d71f6ba11cf4b6f609d197a791bba81c5fab27d4baf92693c6d64540a5c33ecdb4e06adb9e7bf2b9ab487d370b99c25d89d7084fa0693756f9e4290695fab2501a7ab211a584813a313ed48cf58ad2bf74ce182d10c649969ebd0258d2e9cfe662d699e2a3b73ea7e35e1cdecb6237870e1a67eba48642afd95561b04c383476de3ff7dfcfb38551cfe940a2ae55aab60f0fc4735795ba8ebe89096753fa5a9de8599ca2639ce74e491123583974e3b3f239dacaf3e2a797ef82eabc61303c8e3074b6bab9e434380f4f050b02e07bc9dde9ce2fcc04044131c7b6e1ccf746ca29f5fe54e6d5b3492d3e091586c51bf5499 [...]
-G = a2be9d71f6ba11cf4b6f609d197a791bba81c5fab27d4baf92693c6d64540a5c33ecdb4e06adb9e7bf2b9ab487d370b99c25d89d7084fa0693756f9e4290695fab2501a7ab211a584813a313ed48cf58ad2bf74ce182d10c649969ebd0258d2e9cfe662d699e2a3b73ea7e35e1cdecb6237870e1a67eba48642afd95561b04c383476de3ff7dfcfb38551cfe940a2ae55aab60f0fc4735795ba8ebe89096753fa5a9de8599ca2639ce74e491123583974e3b3f239dacaf3e2a797ef82eabc61303c8e3074b6bab9e434380f4f050b02e07bc9dde9ce2fcc04044131c7b6e1ccf746ca29f5fe54e6d5b3492d3e091586c51bf5499 [...]
-L = a2be9d71f6ba11cf4b6f609d197a791bba81c5fab27d4baf92693c6d64540a5c33ecdb4e06adb9e7bf2b9ab487d370b99c25d89d7084fa0693756f9e4290695fab2501a7ab211a584813a313ed48cf58ad2bf74ce182d10c649969ebd0258d2e9cfe662d699e2a3b73ea7e35e1cdecb6237870e1a67eba48642afd95561b04c1ea96e76fba8ba0bd25c0fa252326fa582cc2350eb4113c83029b7bb606b4b678a29e1dca634630363df2e1eea3267ab339c552b828b9237279915d5b3d38e2e0ec2b422b75ddb09653e310b6629b0754b9a5cc7682e5b04a911e846e7792800216d4bba6bdfa94ea0b356c8f48931676a047666b [...]
-M = 5db371d34c34f874dbf146b089a88cf3309b729a2d06599c528da098d1d2a7407893a14b2fad4d3c280766ea275fee034e1cc86f7c22f35d004550016eb48ecec539a5ad09651fc84013c65d22c075dedc0a8e8f45466137920b27acecaa1f35c44f4ffdc1b2fcf127e6899c335938c367d76014597ab88c02b506d1d977730434788685ea08d004029995490a2b20c83a96a3b155c31393e621934d04c3b5207456e0b575279e71ef618923feccca5dd9a365ceff0df7a25c64c5e708c984ffddee1b2472df26428728bd09ef8bd12f1c47098f93083d0b5da6c6aac66244626d200411b6dbc01612c0784dbb4c8f2ca950c790 [...]
-RESULT = 0,
-
-TEST = 72,
-P = bb4a52b33dba514b8442b93e265963a74a8f32f0f764ba144eafe4dcab1fd94663d9129ba5507f9f0595934f66ee0ef08070ecd3ad4e6519baed07e3194bfacd27533c883a106ce7253cf82e911031ad6db8a97cf66dee43416450cb883ab696fba39478d0cdfb979c3bb060da2ed8263d44df98953e16cdfea249b48943eecb,
-Q = f5998538fbf364b56e49d12047aa1659b69eb904299fba3ac8a0ffffb245aa5071fb9215e33d57fbee1b7540e86f616a9161a4e19669d0da076e6fca5c567f4ef341a393141a75ba2f0796d72dc678aa7fb7b03a1e76d4151b45f33c46892d79aba26247b4220060094406fb2cb005f11da6ee57286836ad8d2262a0db84dadd,
-N = b3ae720844c05abf2ae79e86506699d5f284981a92d90957f2191621cf42204d125c1fa7110f322e095eca6946227ef5f35db3de67b9d9a038aeda03aff4b0ffeb39e36994ec1f92af30f8ff89d3c3f75571bb78a492967d9551a945c147767445555fad485eb82fb4afba04e4b96e1e86f18e9abb56e1ec3982a9dbda05b2de1103478374f4ebce04d0af4b7e400655bb64fb818bad695e52245c8a98d71a6ee3f3d66a325a1073bd3ef770c03e1f4feb47e66bd99c010689ffc8008fc4acf08e0be432c618aeb85fad6b27436f7eb0cafb5e9440754121672e252051b85340eb4bd022b295c9fa11f3573e7973dfd200157d90 [...]
-G = b3ae720844c05abf2ae79e86506699d5f284981a92d90957f2191621cf42204d125c1fa7110f322e095eca6946227ef5f35db3de67b9d9a038aeda03aff4b0ffeb39e36994ec1f92af30f8ff89d3c3f75571bb78a492967d9551a945c147767445555fad485eb82fb4afba04e4b96e1e86f18e9abb56e1ec3982a9dbda05b2de1103478374f4ebce04d0af4b7e400655bb64fb818bad695e52245c8a98d71a6ee3f3d66a325a1073bd3ef770c03e1f4feb47e66bd99c010689ffc8008fc4acf08e0be432c618aeb85fad6b27436f7eb0cafb5e9440754121672e252051b85340eb4bd022b295c9fa11f3573e7973dfd200157d90 [...]
-L = b3ae720844c05abf2ae79e86506699d5f284981a92d90957f2191621cf42204d125c1fa7110f322e095eca6946227ef5f35db3de67b9d9a038aeda03aff4b0ffeb39e36994ec1f92af30f8ff89d3c3f75571bb78a492967d9551a945c147767445555fad485eb82fb4afba04e4b96e1e86f18e9abb56e1ec3982a9dbda05b2dc601f6f973b4735cd124424ed103c8c54ba370f8c6aa8f50f3ad377ae3b7196d80e1f31b8a9cc38d8c98deee070e0aef4d97554b695e3cb12c7a450531a2232d47377041777edcc170b68dc218498d458dd8b04dd2b907ec90a83e11882f46f304405d9622da5ce026c739fe2729501baa529afa0 [...]
-M = 274218dd4c2a452d0d7cc2b98fbce438bb1e9786bce243ee78ba2df40ad27420cbf64ace3af531896735608613e4b00f87519bcabb062d26828229ec3f948d15dd094fa757592a440ea5ce05780a8d921bc4220b5b45df06218523243287e143f3ed3c29d5df8305e204d565e981412fa1852a22f3ac41bae98f78d74d7c90527adc3de0c8d118169f9f6889b91bfcfafff8c8e43f9868180d37b7e2bb9c633494eae7b0f9b764e41e60d9adf58c5a5839b2eb84abc03ad36ca4ba27f79ad29cf6111a5baa00298ce3652a93dd769f84ff838a6286f4b8a15b113d96d37b575b640248d2b5658534a2d31c679a84ba1ada513169 [...]
-RESULT = 0,
-
-TEST = 73,
-P = bc1f5c4d2745170392f67f349f284a6ea432c3d0b9cfbb59be72459cedca92ecfb27291f1c3a604fee816d7dd49980960612d3c75486c2b2e78e53b92237cf99294ca7c547399814eb23afac50a7aeccdf4c5105864959910ea900005e25020acf8751f692c684c0f62bd1ac3b59d035d3396ef41b81b34d3a95220b423f3957,
-Q = f85db10dd19355dfd91c2b48a22cbfd484d6edec92530e74a21e7a8d9b0513de6268adcff380138a9d318fa4cb8e97abda256497324c959b1be78468b02d66c2b4b59e65441fbec2ddce3aa0c6ef7cbf3a9523be9ca207e34f7f067a391109c05d243865307570ad2a1e39a4d4198a4aea2506f30a40d935c86a5d875b3b226d,
-N = b6833aeb1c7d19ee7bf614c17fda10e37bb558a0392f56fba0747a4b4477b162b8ad5cec15f3eb42b9b4d1ac429f6886391b00c38a4610584aff430a24265dce119103bedf337deb2fb886910e337afa65083bf8fa194ff5dbdc068f8e96dc40fc039023eeac9354ff556339788309c3c5a0ae36e044a9abdb1fe9be5999a54d6c31d488d04b2f7ed969a25fc2e4cd9602e48dff3f9cb7586a65b77493bd822622492151a22d5f4e46f4440d2f92eb687a664077b5992e77d44cc4105db203b61f2784e1289a9f7d05c1db1ada17077df819950ee2de0f70ce01ce6865d732fd6d77d98e9782a3d5328ee680e4324759c69292af [...]
-G = b6833aeb1c7d19ee7bf614c17fda10e37bb558a0392f56fba0747a4b4477b162b8ad5cec15f3eb42b9b4d1ac429f6886391b00c38a4610584aff430a24265dce119103bedf337deb2fb886910e337afa65083bf8fa194ff5dbdc068f8e96dc40fc039023eeac9354ff556339788309c3c5a0ae36e044a9abdb1fe9be5999a54d6c31d488d04b2f7ed969a25fc2e4cd9602e48dff3f9cb7586a65b77493bd822622492151a22d5f4e46f4440d2f92eb687a664077b5992e77d44cc4105db203b61f2784e1289a9f7d05c1db1ada17077df819950ee2de0f70ce01ce6865d732fd6d77d98e9782a3d5328ee680e4324759c69292af [...]
-L = b6833aeb1c7d19ee7bf614c17fda10e37bb558a0392f56fba0747a4b4477b162b8ad5cec15f3eb42b9b4d1ac429f6886391b00c38a4610584aff430a24265dce119103bedf337deb2fb886910e337afa65083bf8fa194ff5dbdc068f8e96dc40fc039023eeac9354ff556339788309c3c5a0ae36e044a9abdb1fe9be5999a54bb7b4c72dd772c29b6d56f7e2818fc352d9dadc41f379ed8a09d4f74a0aeddb5ac4b94a629272eb73bb4146ea8f6ad3269a2e08192ec5d629d0d6ebee8b4ccd5a41253eb69d4148a53ccff0cdc27fdbf1de38204abff2adfc6fd9c7edcea1273240cc4f32d446ae671244db2fd4beecd909341cc8 [...]
-M = 1116dcd639d5515648c983ed2eb7026d797595a5f6a46ebef94ee7f32b368c1b90fe4fcc839e7933c14f5cb1a51ceeda8bd779f03eb9d223bf90cf4174d05f4d6768f031632a42a02c9aaa2fd871d3ccd3bdd537a2a4856240b6b54ded4fe015ccf1e526083a2c5f2e36b420bd5edabb4b0bb70252f686921972c8ab58322f3a7c523c7aff9a70a17de6c967b0f7f29d9c3be1da1652ffc30f4725c51b00ececc75aada8938c8e95dcf64cb0728da5e7d5315b873575c6e9ea01c60a6f8012d964baa270591cef6b20e995f72b86e4bb181c8af027a93b85fee174560e907daa298dc095e3cd073df635ec3586c2966a86dc76e6 [...]
-RESULT = 0,
-
-TEST = 74,
-P = b89dc64c6cc68169d3b56362dc72682933fc7198c448e0a7526c78c2810d5c43c429c91faaf630e82e75eab59fc69c9d72b05b887eef505aa07feac68df08e83a604770e11b92cdba15883028aba202a7c5cbb0d70fbfb427118a3252c64c2f9a25ba925efb538748b5c66bcde034d314b328155632bcf6b48a3b003ee142f73,
-Q = fe053c250afb9688525757dcce684e94f9a5906c057d4b02253858df909673a7759c127cdef6f034a1d001e0bac60b0199cc7107234bd4c652823079d411ed99a9e3c20a73f4de199d6b6b0ce666badddb014d0f80253df77024f4cc8badd149f79fc4f619d79e4db6757e55c5828c22f74fecdcc450d70b4d071c8df49e654b,
-N = b7305134649e3fd0f0b6ab95fc1fe36d081078e7459d8b6d39b4b132f262725dd77821a775689230e72079427da6adb26b847079da1ddb900c540fab2f410456924375ac914a18582c12adfe38cb31e72d786d1925c82b365b005752becd46ca936f13d98a945bc6e712f2f79c39a8947c75d43bac7ea5b4c5a52f5221ca8b7be4b5c09db354f0c0b2fe0d23fd54077403cfbe9d8e6f12fd41e672c3901c23018aea0a4d4795c9ca419d1a21617f6b3ad404d3ebd0f29a0b1178c681b5fc139aac1b79b897219941fa71b1224c5e3139a8cc87270c22190f2c0438cb7b9f75818a9369efdf6a61cbdb478ed0d3c022aeee963fe9 [...]
-G = b7305134649e3fd0f0b6ab95fc1fe36d081078e7459d8b6d39b4b132f262725dd77821a775689230e72079427da6adb26b847079da1ddb900c540fab2f410456924375ac914a18582c12adfe38cb31e72d786d1925c82b365b005752becd46ca936f13d98a945bc6e712f2f79c39a8947c75d43bac7ea5b4c5a52f5221ca8b7be4b5c09db354f0c0b2fe0d23fd54077403cfbe9d8e6f12fd41e672c3901c23018aea0a4d4795c9ca419d1a21617f6b3ad404d3ebd0f29a0b1178c681b5fc139aac1b79b897219941fa71b1224c5e3139a8cc87270c22190f2c0438cb7b9f75818a9369efdf6a61cbdb478ed0d3c022aeee963fe9 [...]
-L = b7305134649e3fd0f0b6ab95fc1fe36d081078e7459d8b6d39b4b132f262725dd77821a775689230e72079427da6adb26b847079da1ddb900c540fab2f410456924375ac914a18582c12adfe38cb31e72d786d1925c82b365b005752becd46ca936f13d98a945bc6e712f2f79c39a8947c75d43bac7ea5b4c5a52f5221ca8b7a2e12be2c3b92d8ce8cf151e4527950b5d62dbc98c4a8e753ca41a1217e78531651242eb0bda8a8ad71572d8b06f2c39bc788075c2eb774ea1e76ab4153f9977d5c3340a011738e4cbbadc312db3d5631516e7f0a1b00dfd54ac6a0d9c38ce13df097fbd3d5dd8b099975a9be303a495aac13d1b7 [...]
-M = 1389e8b3afd0d9d53d4aef06326b351d79fd1b1b2f25054999db5e7d8282a23f3147ad582e8f1e60b468b96a838caad12aff065d6b41991f8be80bc982841839f160eaea761e7744f943f96ad3131719ba4a08641f1eaac7b469c7b5f904399ee59148b970be256e1b33826055fc7248766d5be40b777e374f1e16e7b8ddbdc51424e6a7b5249e2beb81efe76529e48d7f3d228f1b83811998a326677fe3a26fdaa1e6f92983eda9842b940751a133a879b1cbfe0f1a9f3d19f953d46ec7c7f1e52d793b89f57402b591a448679e7ff1536b96f0108ae75a2403f74292cc14ae310ddc5b81365310074f1fce8734f85971bf3a06 [...]
-RESULT = 0,
-
-TEST = 75,
-P = bc9d1288cb146c2140c4e196bd7e4160a16b1b142955ef051fe116ca97228b607164bcb6f570f932f138e31a7ab63404c8100033326d9ec38ab2d5ba3a3efff028487ce4eecb4d9b42f2eeb6a9cc19c97ba03443f53bd3ec66cf6243368bcc3dfec745a13e63ae8aeabd8b2073c9cb1230f77001fac327c9bb20c90845730d5b,
-Q = ca8039d90eb0bed58e0e8e80149d20f1b8edefa22e458cc1ffa92a930108cf2a107aeea27cb9acb0d939c07cdffac401e18bddcce2c97e6d108c03b090c6d01f184dfe7664cacd32e3475df7017f86c69805e4fde9922cca2135d54db84172519a4a995622f625e2a80229b5eb6e706f69c45871da6bbae0fc9fec509d15b013,
-N = 953269c819bba24e2261546824c9b74d07a10f1585dd4fc0e59bf300b7c296b86edd1a8f6ffcd4e92f520d038605465d5c0e6c0cc1a67ce1baec1429ad39ad2d0c2590bb2ccabfa0c590926dfa0df752ecf38bcabee520101debcfeecd221d57da4f4348aa5ecacd1a6a6f8e9ec22dfbac001e6681ca9f431a8c541c2d351f31c288eb5f23a54ba4320f2d47cd6037bdc9ef7b0b4267947d2f84ca7ebeb39add758430374c4b3a109f96f5cdae06c2b3e984baa28acee31f0fdf9ba45c4b933c6abb1f99e5513ef8e0557ca2e600a598b159beab6827bfd2589750391f130784f4b8fb9576549ab9341a6e2e9754161617e0ec15 [...]
-G = 953269c819bba24e2261546824c9b74d07a10f1585dd4fc0e59bf300b7c296b86edd1a8f6ffcd4e92f520d038605465d5c0e6c0cc1a67ce1baec1429ad39ad2d0c2590bb2ccabfa0c590926dfa0df752ecf38bcabee520101debcfeecd221d57da4f4348aa5ecacd1a6a6f8e9ec22dfbac001e6681ca9f431a8c541c2d351f31c288eb5f23a54ba4320f2d47cd6037bdc9ef7b0b4267947d2f84ca7ebeb39add758430374c4b3a109f96f5cdae06c2b3e984baa28acee31f0fdf9ba45c4b933c6abb1f99e5513ef8e0557ca2e600a598b159beab6827bfd2589750391f130784f4b8fb9576549ab9341a6e2e9754161617e0ec15 [...]
-L = 953269c819bba24e2261546824c9b74d07a10f1585dd4fc0e59bf300b7c296b86edd1a8f6ffcd4e92f520d038605465d5c0e6c0cc1a67ce1baec1429ad39ad2d0c2590bb2ccabfa0c590926dfa0df752ecf38bcabee520101debcfeecd221d57da4f4348aa5ecacd1a6a6f8e9ec22dfbac001e6681ca9f431a8c541c2d351f303b6b9efd49e020ad633bbd30fb44d56b6f967054eacc18b60ffa892126884052f3a484ddda20942cd52452365355caad3fe8dca27597c5ee74a0c2399145c32d2a24a43e91bb242aba1b2ff53ab505089db3a5698959bf1bd09218a83045c8f55ba71c9e14fac64ba15ab958381bda947d2523a2 [...]
-M = 021b0f7ce42b8db21d16b1518ba41f5eacc5a10404df2d43dd8b76341b97a8b66a88289e06010e6ac3ff3cf6ecc7e2ab89e0d7ccda9aebef723f38b2268ba8813ff85de530242514e590cb102cf32c491479f0adc402150f06a9e6ef3171673941b0fb62452184e8b382cdc584cc7f37faa4e06ba44c1342419dff22717c421f79dba9a4baeaaefd217a77a5ecf894b3dd59d6ffdf249740d12370be777537432654ca689e192dcc9054692f72b110dc5fb4059fb1032ba4e40c1d2499b47bc219543948b5893cf7c10c5f130f7efdf5d1d529448559ce2c052ee4840496acf7a528e097cba5812c456229c4d80021e41decd6d5 [...]
-RESULT = 0,
-
-TEST = 76,
-P = dd455926f40699586214ba70faf46c6cd74fb182d0a7ec6b86de22d94d8bc569279dc29ba9a203e0053663a70da21468df6b9e83da8625d33743d1f259e1421e517e95d6b60975182ffa24ea92b212d3efd919a758cf6225be07e8bfd6ac07630f7772a6eef592b7613df2848219b4c1624229896d402121724a0f80982a69e9,
-Q = f5962d56fde9186f448332a0f74870e221509e538db7f5f8e0aa2df687b55f353887772cfbbe8edefa764e09836c0e9dce842e375b804d3ad347de720ea639fc9bbfcf67a2f8bbfbf3784d64fd7c16002a5e984d2b694166067cd2795f6f860e8d348d711e0e061228d43dbb551c47f17dba37ec18a03caa99fda59808d0e845,
-N = d4452c24e5cc1af2e3171bc1f1f676e5fc178c9ee8305b1ff91aebf31aa017a5290d9bb088fe6d5cd4c388c2db0a760b9e7d72491087ffd34757aa187e209f31e3ffae6d85ab4c40c709a894c7abeef1be58a328060457637eb1a1deb449bd06ed7975fbdf02d22c67a2bf81f08da206fd6382f02debc9db84acef592e340e47af4337e981752bd9e7dc5a1720235b472b0d98de9e1d0d8c8e9a895e1b9bfb0b634266ab13abe2649bb257b6ba9301299356d44ec26c8ca74e908312b60597445ff75890f139770868624d5b75533368bd2fe91b1469fe97e045e01a2282991faf2679ea3f0b90bbf5be759a2531234586ef2876 [...]
-G = d4452c24e5cc1af2e3171bc1f1f676e5fc178c9ee8305b1ff91aebf31aa017a5290d9bb088fe6d5cd4c388c2db0a760b9e7d72491087ffd34757aa187e209f31e3ffae6d85ab4c40c709a894c7abeef1be58a328060457637eb1a1deb449bd06ed7975fbdf02d22c67a2bf81f08da206fd6382f02debc9db84acef592e340e47af4337e981752bd9e7dc5a1720235b472b0d98de9e1d0d8c8e9a895e1b9bfb0b634266ab13abe2649bb257b6ba9301299356d44ec26c8ca74e908312b60597445ff75890f139770868624d5b75533368bd2fe91b1469fe97e045e01a2282991faf2679ea3f0b90bbf5be759a2531234586ef2876 [...]
-L = d4452c24e5cc1af2e3171bc1f1f676e5fc178c9ee8305b1ff91aebf31aa017a5290d9bb088fe6d5cd4c388c2db0a760b9e7d72491087ffd34757aa187e209f31e3ffae6d85ab4c40c709a894c7abeef1be58a328060457637eb1a1deb449bd06ed7975fbdf02d22c67a2bf81f08da206fd6382f02debc9db84acef592e340e45dc67b16b8f857a1241446d052de67df8326d49083fbd2b282712388e465ad66d031d2ce26e4b4fa59c05a6062984de22e56707938c6619994404d2ae4d7e1b2972b8f352983745f444efdb0be5250a94a2f8372690315b0c1bc124e0ec670bae127a79d23207f7f26bac455a4dfb2692a6f2c700 [...]
-M = 8b04d4d03491c334348cfc591a5372bc462e69b3625c29180764489ed270b3f37620909758f51465e0c0a2ed24b2ac55764c80746d20faf9716471c2107a103f7bb94e40a19fb56781ebac7609ae04da39f3e37955588f676dd3f226ed6928eb5cfb20f8b3c3a7beeae7b313dd5f292bd257dd243a682125d7f80489454ce5c8e9cd0ade84702b7c02a58689081ea1021d7d28fb6f84f2eb847457cfad1f71e21d7f6394068232dc1b353e7a7f16eef1288a17fc30e3f244b5d1bcfe04105cae442bee48f8843e89d5b468c58a771954124277fc0370b62c5baf0ad42e5b8664da39757485837017370f1e2369ac98b2896ac51a [...]
-RESULT = 0,
-
-TEST = 77,
-P = b8c0132d0d6b82aab1178cb22c1fcd6bb5a4a2833bc664a41a7786549b16ec2abcce1c997631a4f3f489cd318da67f37cc20b1f122af919c5b79efd8a3fe5192518af2ff6c5323364cb70be9cbdd7117144e843ca6c2c0330703764c2b3ccf74b0a5c309234814eee0673df47db4000f5c860af75808892bff7b7a377e5b1f75,
-Q = bffd2415eb597a0093e9899aa2247568ea792a3bcd837a66e794cf59b0413548029dec3e273a3987db021747561248e5b7efd494901257b588ff51093ffda6d7296b9419655576277be8e6f46436b3d7f39690372e2833156a4f7987f178855416a9d16fc227cd07105f9e69f4daec2c66d3f36419775dd9a6e9fd5a4ca4bdc7,
-N = 8a8dfe2c64d646bfaee0f801e16eea4b6a72c1b36973eb72f2e83aaa22f59658952a07b03e9323cb57ea3940e65c4dc34e9e1e6aee97afefefc417aeaceed08de7484e7a6fd4ceb8b9ab76b9a0ed279a948253f0e0d2c3b4f65d63500870cb75a198c7cf57f935e9d65f32b0779d77c1486af35b7579a7a4d07a0d951f3227d4f43fb7b9b0070b212100f9fb645c58f2b95b40bded3093395fce24016d9fbaeb616f1ba91e15ba44c337366e7fc3977aaf8b82e9a3cadd1c44638b68252c3c71ce8bfd253456f942fe21129ebaf195f6cc102f308d7ba3bb51f22cf758d3f77999fecab7b4273b473fd2b6e63a889fdb263f1b1e [...]
-G = 8a8dfe2c64d646bfaee0f801e16eea4b6a72c1b36973eb72f2e83aaa22f59658952a07b03e9323cb57ea3940e65c4dc34e9e1e6aee97afefefc417aeaceed08de7484e7a6fd4ceb8b9ab76b9a0ed279a948253f0e0d2c3b4f65d63500870cb75a198c7cf57f935e9d65f32b0779d77c1486af35b7579a7a4d07a0d951f3227d4f43fb7b9b0070b212100f9fb645c58f2b95b40bded3093395fce24016d9fbaeb616f1ba91e15ba44c337366e7fc3977aaf8b82e9a3cadd1c44638b68252c3c71ce8bfd253456f942fe21129ebaf195f6cc102f308d7ba3bb51f22cf758d3f77999fecab7b4273b473fd2b6e63a889fdb263f1b1e [...]
-L = 8a8dfe2c64d646bfaee0f801e16eea4b6a72c1b36973eb72f2e83aaa22f59658952a07b03e9323cb57ea3940e65c4dc34e9e1e6aee97afefefc417aeaceed08de7484e7a6fd4ceb8b9ab76b9a0ed279a948253f0e0d2c3b4f65d63500870cb75a198c7cf57f935e9d65f32b0779d77c1486af35b7579a7a4d07a0d951f3227d37b828076b7420e75dbffe3ae9618161e193d73fee3e6b42e5dc1ce5322479978a20312d180a9dbc8f3ab51f59c0acf5d2b7afc63f108f3ca5fea4a86413044085395760c62ae5fe535811fc08add7107c42b1abcb890b072e09f3d233c1ea2b0d2af363eceb759514f0bda87c7f9b39f62e51cc3 [...]
-M = 26573c8f5805f416d1ac4b191b3731b96f5b5808c3bc8408fbbbb310709cf145c37c337991e2331de98e275657671a8dbc1afb9a08feb6a1d319cdd11671daa07d6ec26ef9efc4a3733eaeef7ca63ec0a5f1754c52c3888bba83becdd637b8e83010e946ae3fb581805b2a61b9c7491e58892e4acd04c98b6714d7564c7e5e89ea2b8e7c0e40f3a14b032e91a67c52536ee57a6774f249fdd671e565db5c9fcffd52d98fb85e40bc56ae85e6d78136d7145f7e5c73e18ca86b3f5c5b31974a691fd4cbb5ff855b07cc499f2fa4921893251e8307094d7792b1f64cf26a727a431924ea8bb6f03c55cd64fe02e78c19c4175d838f [...]
-RESULT = 0,
-
-TEST = 78,
-P = da4062488b5b932379fad24d8a02ce6ffc90cc85dafc04b30489368be22a0dd59582d05a13b33998b5aa3e4ce09735ce9c8e40b2fd2e91f421dda29eab55ac8798ea857a95cc7117a7e09b7b914ab794050ed161ebec657cf944021010661950ff14647d80dba0ac30771dba1cc9a0dbebdf17ffb528dec4aa60bf556b30740d,
-Q = fde3e82342eddad20e7cd6c2ee3e72bf021fbdd71918a5d66d07b7ea3399fcb0448c02530181fd3117a3fd9aab879786a78427e9b3cae318e2e2987a2d682eed84b33bf0776ef3ece41aede864d0ea01d591eb3d62e1028f8f57558722dc835e0add48a15f5554e6bf49d42831da0ea9b14bd807161157d967d770656cef861d,
-N = d873ee2140fba2532cd24930568f673e9a91d914f3dddb7be03328e238449ec5addd8e64767d58e509bc7fd35e87cedc6862fad0be9505dfb240fc6e46502456aa090b3492f9c38f530bea86122ac4fdcceb28ddd3b44517cf9d09cc12fa98f71a075e9094f1727b5b14f985c1a6cfc7189b723c619323330fa6d87c60bc479922bd0c005e13d910571ff5b102a217edb61391547692023421c08e29a298deb1fd67e7bf71b11a89eb1df857deea1848f65e395a630d6dd1a65b1349c2157fcfaf94706054f49b1323698d6f8206484db05393c90a871218848f586a0bdba2e49468e0ef111d4158f9c14feebab36b247f4285ac [...]
-G = d873ee2140fba2532cd24930568f673e9a91d914f3dddb7be03328e238449ec5addd8e64767d58e509bc7fd35e87cedc6862fad0be9505dfb240fc6e46502456aa090b3492f9c38f530bea86122ac4fdcceb28ddd3b44517cf9d09cc12fa98f71a075e9094f1727b5b14f985c1a6cfc7189b723c619323330fa6d87c60bc479922bd0c005e13d910571ff5b102a217edb61391547692023421c08e29a298deb1fd67e7bf71b11a89eb1df857deea1848f65e395a630d6dd1a65b1349c2157fcfaf94706054f49b1323698d6f8206484db05393c90a871218848f586a0bdba2e49468e0ef111d4158f9c14feebab36b247f4285ac [...]
-L = d873ee2140fba2532cd24930568f673e9a91d914f3dddb7be03328e238449ec5addd8e64767d58e509bc7fd35e87cedc6862fad0be9505dfb240fc6e46502456aa090b3492f9c38f530bea86122ac4fdcceb28ddd3b44517cf9d09cc12fa98f71a075e9094f1727b5b14f985c1a6cfc7189b723c619323330fa6d87c60bc47974a98c1948fca6b1acea84ca08a60d6beb76306f7827d57aab02f9fb38cd4d42c235915125c7be3c01dcfbc7052cb4af3b24bd0bdb213f8c4a19ad830e957a45a91f6aef547b9360e976e040b8beaa6b7d5b2d729bbb9aa0bfbf400d2d89906358a7733d030ec4bc60a005e0c6c0fbb9ee21795a5 [...]
-M = 1e25395349a1cef696bc48ee104eb23a8e122feafbdd745837606d94a6ea18b5aaad759ce6b1d7eb8053517073a9d7c0e7960f7bb3253e65e37613ad1335ba37373f49899335781dfddd8d16a718e3312b7838d773fd551d9a843406e0037aa242f2b5623b6b8f143b6d9d634b6248c55626d3b3061a6ea4e15b7d10929c91a5e5b9ab5af00bf3c6487fc81c45ec03a204d0deb7f57f3bcf20e7b86ede561b56d1c7ccb36231d1441c784ae7f9919183b8edabd989e6035e5375fe64f466c233ea88414577939444ef1f2338646884bde431f542058cb6bff9d9d11f11343ac4225bcb748d5902b1feef0daf76b8257f720269ee [...]
-RESULT = 0,
-
-TEST = 79,
-P = c467ba8541943f9aba6d58a199679dfc069c04255e937d4228f13bd01cb94f8c276040d756134fd3cdd1a3e02d2b3cef4a2d31467913766197636a2fe60a834a7e5fcfb1f60b48d03562451e89a44379163184cca5870265d44a8b343f9667f39017d6690880ccd455cc7016e16f40c3bef518b837f3c52c0144ae105e65c15f,
-Q = d21ae406563aca0a4daff7201bca9c5adca9d858a5f1497e0fff0e61cd3be14be1bb56f50e510319ca2d2187288ba7bab63aff0ee7cfe0f8946b05d4844407aec6ba9419dca42ac835595e44a3127d50094ff37e6372c826014c620329ba2b342350a64a8de7e0b105661c1eb4d2ca3747be774784806d1884a7b92345ec900d,
-N = a131b87b800945edbbd138fc8c7bd11bffbc87d079d972bfe3eecca03710fce57750dc6743fee1371597dc56bb7037c6eb031fef0d15896ca9e267a2eb157ddc59cb55f7d4f15e942c5efa9a66ed3a02f366cc5181d8874f75dc147180f9f4719b848c603599b3288b21d57b815a438ddf9d0e86f2466669338dc733389e08fc7b14a8cc80e101b43aeb22ec6321772e91de0ad93cbd1d3109cc45a9897475ac19a1c493f9ecae05617e1b8be96fcde9a6cffb94fcf3d420c5eb268b1fe52de67018ca7035a83a1d5c8bfa22ea123070b879afcd58fa3abdec80a3276dbf5d292c737950fa783ed2170587a3258623034f75e7d8 [...]
-G = a131b87b800945edbbd138fc8c7bd11bffbc87d079d972bfe3eecca03710fce57750dc6743fee1371597dc56bb7037c6eb031fef0d15896ca9e267a2eb157ddc59cb55f7d4f15e942c5efa9a66ed3a02f366cc5181d8874f75dc147180f9f4719b848c603599b3288b21d57b815a438ddf9d0e86f2466669338dc733389e08fc7b14a8cc80e101b43aeb22ec6321772e91de0ad93cbd1d3109cc45a9897475ac19a1c493f9ecae05617e1b8be96fcde9a6cffb94fcf3d420c5eb268b1fe52de67018ca7035a83a1d5c8bfa22ea123070b879afcd58fa3abdec80a3276dbf5d292c737950fa783ed2170587a3258623034f75e7d8 [...]
-L = a131b87b800945edbbd138fc8c7bd11bffbc87d079d972bfe3eecca03710fce57750dc6743fee1371597dc56bb7037c6eb031fef0d15896ca9e267a2eb157ddc59cb55f7d4f15e942c5efa9a66ed3a02f366cc5181d8874f75dc147180f9f4719b848c603599b3288b21d57b815a438ddf9d0e86f2466669338dc733389e08fae4920a40e911f80f32cdd32aadef3cd7ae982e5b38385670d0dbfb779f7f44d410862cc795885b17c97f562493b8e93fa667cb3f9c107cc69a1cb686b596a2ed2afe66a462f8c684f1d056bfbd5b6fa798f837825000703216e9b5f0046eca01790afc9d640f914cbbd2fb6d8f44180848c257d8 [...]
-M = 74bc432039530ef39a442290bf23ca337bc17dce86feff4d03b6f645b847059fc386668ff63e55e58e4be09951e00c3bde0a5c37b13d58326241e667a31f132d763e805956be8b62747683d50000028e616773216639a19f72c4dd1862f4b2752729bb7d4bbd9b223e7d88320e7f04a9c6da8cd03a81fd2156d6191d8a6c76c4ac59592fdf12d5b402652a16d41e74f3400b94741155cd25bdb027b75692da34f9ef6c8c497ed9a7772521c586f953a822858191f73b4183240994e8a1534e6326839893785b781db872fdccdf436593e93987799032b4dc432af096d4c2c0d4b96f4267b272383a092e52e83750f400a24af590 [...]
-RESULT = 0,
-
-TEST = 80,
-P = f557226a55f8e538ddbe1f1bc41849be8b4fada3e99dfa28299d41fb3a618d87624f33fc4fe9e4b04c8d0566e63ef7ea5174dad4ced3dd19e475892bc993155fada3155cc3e4a0f09a9bec48715e5972ae2e63ad6fdb40dd87c1efb7719e6fc82ba2c9b42793dc51cdfb5299d33ffc9b99b39bd4fdb5edd63d7313684013e98b,
-Q = fdeccd610ac2c4073fbc1e0db3c06cc9b01801825745db106fa9b0af8e58ebc391552dbeb1319c4d2d83e0ed4e8d1a16edfdc05962563e133d1de30db7e92f311b81c04f5c20232ce4c2d3f25a634bf0ec68dec1792c26f76ace78640f6fcd254fef9177c5bec5f44490f81ef921d33ea8f14d52ae44a9287328cb4e8da19fd7,
-N = f35a0e2a97e17c5d4b2fa8b0026001c767b39920ee0dc85ff610c30409ecd2abaab3d92ef545d20e56e25862090e34d7efecc464bd2e392932649e16ccc1111475f13f2b39d09adab2b42f7621057eab54bd8b1f80ba56bbced841e087a4d99fe3fe11fae6a992fcf21adc1e2f75665bb01ce7d1bac398117bb48d5db899e4100ebf59ce316c7eba062705abeb16f5c638d2b6531bae78117ec0e1bf39e7841d27614db151a66eb69b0ec12210f490775ab1ddb6cef143fec5edcff3bfc4e1c99c2f5e08710ae08b86ba6116d572b30b7e109c5604165acabc6517b84ce42a32a98f6f40022e35982ecf551fc2ec596a18f198b6 [...]
-G = f35a0e2a97e17c5d4b2fa8b0026001c767b39920ee0dc85ff610c30409ecd2abaab3d92ef545d20e56e25862090e34d7efecc464bd2e392932649e16ccc1111475f13f2b39d09adab2b42f7621057eab54bd8b1f80ba56bbced841e087a4d99fe3fe11fae6a992fcf21adc1e2f75665bb01ce7d1bac398117bb48d5db899e4100ebf59ce316c7eba062705abeb16f5c638d2b6531bae78117ec0e1bf39e7841d27614db151a66eb69b0ec12210f490775ab1ddb6cef143fec5edcff3bfc4e1c99c2f5e08710ae08b86ba6116d572b30b7e109c5604165acabc6517b84ce42a32a98f6f40022e35982ecf551fc2ec596a18f198b6 [...]
-L = f35a0e2a97e17c5d4b2fa8b0026001c767b39920ee0dc85ff610c30409ecd2abaab3d92ef545d20e56e25862090e34d7efecc464bd2e392932649e16ccc1111475f13f2b39d09adab2b42f7621057eab54bd8b1f80ba56bbced841e087a4d99fe3fe11fae6a992fcf21adc1e2f75665bb01ce7d1bac398117bb48d5db899e40e1b7b6a02d0b0d579e8acc882733e3f3dfd6b072cdacaa2d8e579ef14712d0ad233bcebf6508aedb920fddacddc287e761b3f42889dc728d1a45a63ba3e489d38d30a885c51061c6e075ba0dc09b10da7e37959e71b0ef2f5c9d4af9ccbd5ed452dfd141414db93521c430a66f68a898fd64caf8e [...]
-M = bb2a0b8bd1ea565e621998ba1255679b855703a817af0421d0475fb7e474f413188e8d7385236163d1d260ec81a4806ca9983e0df2795632767fc04ff2bc33ea7b5ea50ef25ccac46560b82d8af185ea6fba0cf726518dbd005b47225d02c882f04429344a585df6865cd56f8eb78a6499c219ec776e799f74077ed481c403dcdc23f352955aac13f0e4d4f53269be61ef03c48b39a51ba601458452d8c5e07e1aa0715e1cbcfadcd05500eb9c5f084283f476c17448575d733a301f703cf2e0f9159f8fa452522127f107c1d7bb04c6a191d1e2ae8ffb5b8a428823ea81dc5fe18658dda30ffb6048acf8fab32590bd6a6a8925 [...]
-RESULT = 0,
-
-TEST = 81,
-P = c7ccc585fa7d357dd02e262187e8aeb2d05f7708a4d28e4f58f8cc1cb98a81b811ee46563aa7804873c3357ffa9ece68ea22ea1f9a5ac8d0c57117c10f939a1725e22add1b9f92a35aae472994adcdd58a912549e9a121f792b76e288aaef2d6bf0dfa988f5556549ccbb6061fb355c44b936c41fd4178711ff80ed06f891b75,
-Q = d7cb85d7f16bc3e396d827aa4027b134d2e8aeef8cc6c3fe04a1e829a210d0c15ebd64a45e3e85c44010238bdb2c50074c855097d0258dbc25a37ab4204382574ba8816eb073ebcd4ab2dd60cbeb74f5b808ae96c78dc503c034d0d667b774064837f4a1ffb079ab7ecb6d75b521af78f9210990c9c2446a4e505f884baf2f79,
-N = a86bd1ba12a1294acb1f9533bb98d251a622699b8dcceb60da54136624e134b8e9f27bc9112863881cecf588abb4ebe8425f22129806e97adfaa0a18826bb4f82684e9a34f04094e441ba63835eef158f1182bcf05a60eebe07f26b90d6c4825b38f79f51b78495f6cb9812d98d126911fb9ec387032aba77c27f6f2ec9d07f481af19b271109988c79f733030674adf50f3d9c43a3582152abc2ae86f372c357093fac8e4bb3abbb43a86e177ff7149cf7bd533c3a2badd9e8c85fc62d8cc4bd38ccb66a8953f711cca94564ff14bd10450697df56da897f4b06cad07a4b087015dc3fad81152b4e74c393dce92adadf9c65aec [...]
-G = a86bd1ba12a1294acb1f9533bb98d251a622699b8dcceb60da54136624e134b8e9f27bc9112863881cecf588abb4ebe8425f22129806e97adfaa0a18826bb4f82684e9a34f04094e441ba63835eef158f1182bcf05a60eebe07f26b90d6c4825b38f79f51b78495f6cb9812d98d126911fb9ec387032aba77c27f6f2ec9d07f481af19b271109988c79f733030674adf50f3d9c43a3582152abc2ae86f372c357093fac8e4bb3abbb43a86e177ff7149cf7bd533c3a2badd9e8c85fc62d8cc4bd38ccb66a8953f711cca94564ff14bd10450697df56da897f4b06cad07a4b087015dc3fad81152b4e74c393dce92adadf9c65aec [...]
-L = a86bd1ba12a1294acb1f9533bb98d251a622699b8dcceb60da54136624e134b8e9f27bc9112863881cecf588abb4ebe8425f22129806e97adfaa0a18826bb4f82684e9a34f04094e441ba63835eef158f1182bcf05a60eebe07f26b90d6c4825b38f79f51b78495f6cb9812d98d126911fb9ec387032aba77c27f6f2ec9d07f2e216ce548527a027609925646856eaf7adabb3cc089c2fc7cd2176a2139bd9bbffe84fce4bd534af00672dd5a23452d998d39a7c59226450b377f3873301afdd62021f1adc81c10077696fcbef580905c1b6959d443ec19ca1c42dae153e49a9fa17d4c0490b82b4cbb515c1f9bda870b511e519 [...]
-M = 534daa4154777ceb130dceadc17a3480f479f189b79e527298e0eeacba0ef15a6e34a16a495ac3a7e3ef4b4f6ab91701d2e960c14fb07915b4fbe161e5eb8c643cf8d651a9dbe52fab49f28fcfa420e560de9e6d81911debf0970a8a0716dc9b710f3dfce5163b148ba6e437749ee10c9d8213f1b963be7402d548dd7f79dc45d19f681cb6fa82619b1aa9a6c685a95786e29fa11d3ec1427f16eee92d3c4d04cad6d66ec44822075a7fd43761563e000c254e5254ffda13f1f5459007312643b3a55ab0ec02380909931e7b1efd0e24e7907347f44f6df8be2853535d5f5d22ce5789e7dd69f95482ba86c987575aaa447b5cae [...]
-RESULT = 0,
-
-TEST = 82,
-P = cd2507baa7bde5a8ea84c841f504f55e4edca93eda1b1933713439d57c7389536da3ab44f37fd6a4840478d1e17f3926646ee7d34bb547a2c00b9645705d3baf37230b3b4c2bc87937ab3bf49bdba008bcf78749e9a24ac58d22447f1ae6db3b0c5d3745061d0907d6cc0f1b1354743690be2b1e60e2b9bffc9ca8cc9f038ad5,
-Q = f0e9108d21a80597ac6f01ded56b710ca50ebece8768a9b055954b58d8f8102d6b823e81fa0175fa0b2c1f22355be7c95e43214966d39c9dcdea59dce3e8b24d9be61b575c01084c51074063535c20298b12092a960db30fdbd05122e73c939ed814bc3e5e4e0a31f7674fc6533f7082999911ae22b8e58b0566346b4ecef02b,
-N = c10d7b366efe0a360ad594a22dc384042150ca9ff515dd401689bd9b9c3a9824e996810e9def28fd3ee3b413c1cb534bae57966fa58e4f6c0ec539c1dd025f35b3c2f9b04db5fd35fb4c5a3e3a82647a66e3c6aca8f91882d1c8b2a31ac1ff917cff0f989d3f7b3db43651a4cfdd653160192ea0cc953cb919c6469901e50b7526660825270a301bff94168484999cc73bd5a69b31ad40c38e7c604de90c4181e0706263a2d88342c4590416fe433cc5d280abe78023d6b0ff21412b2f61612b2e98f93952df9aec5bce9d5d3b32949467afccaea2f4e66bf3f5325737cde0125b7c5664ee9c408aefddd187b029707d3e6e1259 [...]
-G = c10d7b366efe0a360ad594a22dc384042150ca9ff515dd401689bd9b9c3a9824e996810e9def28fd3ee3b413c1cb534bae57966fa58e4f6c0ec539c1dd025f35b3c2f9b04db5fd35fb4c5a3e3a82647a66e3c6aca8f91882d1c8b2a31ac1ff917cff0f989d3f7b3db43651a4cfdd653160192ea0cc953cb919c6469901e50b7526660825270a301bff94168484999cc73bd5a69b31ad40c38e7c604de90c4181e0706263a2d88342c4590416fe433cc5d280abe78023d6b0ff21412b2f61612b2e98f93952df9aec5bce9d5d3b32949467afccaea2f4e66bf3f5325737cde0125b7c5664ee9c408aefddd187b029707d3e6e1259 [...]
-L = c10d7b366efe0a360ad594a22dc384042150ca9ff515dd401689bd9b9c3a9824e996810e9def28fd3ee3b413c1cb534bae57966fa58e4f6c0ec539c1dd025f35b3c2f9b04db5fd35fb4c5a3e3a82647a66e3c6aca8f91882d1c8b2a31ac1ff917cff0f989d3f7b3db43651a4cfdd653160192ea0cc953cb919c6469901e50b736857efdd5da444db68a04c63ba29365c47ea3e8dd0297ddfc7b2db1f93a0a801074a789cb55736a435286c22e7681bd60fcea2cacd9af270712b5108db1b732e5b8fd2a6aab2ca26d31c21054bfad4621fa63c3a2344e8968b029cb535aa7138770a62e18a312d5121aa72a649958bc41416d58c [...]
-M = 01bc1275036dbecb9cd2a8c3fec62ea7ae28754acc29d4e11bc6489e3bc7b8a14a60dcc43e44734acab55104839578f07a66a4f94ae38623ab035ce7d39ea46acc2a7c488d042c41d8c084114be7e26058672c51f6ea7d2e95ec73d02c21b129591240e69e84a19cb198267d09f7acbf48548e8a5a70b3f7d1c925e3732746ef6213ca381eb553928b6ba7a3f287abbecd0fa9f574d85ca473dfba22c266f0e6fdd7b9a085f2d3124f1a5b97061614f1ed30e348d5f470563f8028c985cb29f4d88e50da33a60ba7f646de63c35b30afea41f97baef8982124c8d31a20b7049d56baf30e84b005869309ab50ed6d2692a1314d43 [...]
-RESULT = 0,
-
-TEST = 83,
-P = dcbaa201c3ae7efd9722e1205dc683e03cfd23ab912d73ae4d12a5ca9315cdc6b58647ba483313e6552a8d0a82c7019e5364204ef1eae6cd004c2f29a2ae8903262031979d7857925bae43a2bce47a09654308f495770d04e7dd33746448eda821fb128845c910c8c5e42c8aa0c7078595fd87e934942217a9c7b3c97f03afd7,
-Q = e6bd8938b4ec1ca802640e50e131ff7e8e67b9e924352cff4ce28fa1bd8ea20453c1a3828d3bfbec2ea81388b844751d04c139580f7049e3912f45fa258f18bbb9d7c17fabfc2574cea459e661e60f09e7b6a752aa005ffcd9c14377cd7f955eb245a543cbbeb2734ef65a6c08272ba43cf035a01ff5d57197b7610be96b0b67,
-N = c6f319a7f6a16eb2a49cbb982145bf83bbafc0cc7a9d40955bc46da07d7ea06741dff8a530b6f388761f3fc8715a7f7061f5679df5ab54edcb98e2e12075fa893c02a633b6603c98ad056c1a2fcb5a6c7a8ee7ff46b27f04540ef96e8210f6e69b5795d2236b8a203a91a67504a6978983923fdde59d8c8434a34932034f55e7682d3d02a524910fe83af39cd7fe8993cb1bc2c3952700df6b71becf08a683774559d1a770f37e8849de08bdadd5a2bac0878a35dc0293cbb51c4edf425255295305e8a851a1fe233890c1ddb940d7489b24c73c5c985de3a1afd9a719ac70ac3f63ec0d63bbc038904ba5bfde2d9009f7be8500 [...]
-G = c6f319a7f6a16eb2a49cbb982145bf83bbafc0cc7a9d40955bc46da07d7ea06741dff8a530b6f388761f3fc8715a7f7061f5679df5ab54edcb98e2e12075fa893c02a633b6603c98ad056c1a2fcb5a6c7a8ee7ff46b27f04540ef96e8210f6e69b5795d2236b8a203a91a67504a6978983923fdde59d8c8434a34932034f55e7682d3d02a524910fe83af39cd7fe8993cb1bc2c3952700df6b71becf08a683774559d1a770f37e8849de08bdadd5a2bac0878a35dc0293cbb51c4edf425255295305e8a851a1fe233890c1ddb940d7489b24c73c5c985de3a1afd9a719ac70ac3f63ec0d63bbc038904ba5bfde2d9009f7be8500 [...]
-L = c6f319a7f6a16eb2a49cbb982145bf83bbafc0cc7a9d40955bc46da07d7ea06741dff8a530b6f388761f3fc8715a7f7061f5679df5ab54edcb98e2e12075fa893c02a633b6603c98ad056c1a2fcb5a6c7a8ee7ff46b27f04540ef96e8210f6e69b5795d2236b8a203a91a67504a6978983923fdde59d8c8434a34932034f55e5a4b511c82c89f56a4eb4042b99060634ffb6e52edfc46031d17c8962b80213ac3c11e66a9b846eb5c60b682a72ca2bff6862308edaa7631b23a0d9bb7a14b36a730df591082d811c0e3e24549a764e354e2b16f51d20f0e1e01162bae7e3eda56b2334415233fcfc7b711ec9353f5ce024d0c776 [...]
-M = 3440a96628ed4284cf9a3b5c7a269da57d5bbe32ffeb0d991934d2da1eddd8b27b36b8713576c21016d8fec10a2851294bbe44ea2db034c652c2b431b3852d6e952c0bd465fdb1a6991195d20b217fe84a3e0832b00c6a2e9c42781f693495932c94d2ef0da29ab8f607dba693040cb9d0b81456dd4757c1dc76383ef002a633927c50a2de80f55dd7639284caa63a88eda4891584f78d14416af19f3774615e1a7ce7beaeb95b72c6889eafdc781a767025e72b3c3bf694cf5c1c6f3fa35e96c516402e7a63642a3264810039e0b5568f2e837f57ce45b4c9a80973db53317b9f10aa9ddc696140881c54bcfd80a5f4e5f6c8c7 [...]
-RESULT = 0,
-
-TEST = 84,
-P = b68cd5c8e83b113543069677e4de93c47138f466bbbb518afde91226b5ef423d716982f490fa9819caa7b4dd2d086ec4f55d74a2d52cb445f91a04b534500776952c97542a022b24a38ff46cc731962b73a238909ee289f37b3114660efde9b71502397efba9af9e12750adf02863bd9386ed6e1e8cd9bccb300caa46d7affb7,
-Q = cb3f74dd7423663b6d2d88bf4453b48aaa3841276d7e51bf9fb43932d3285e2c8d647540e475758534884a3f5f9af9b3146fb638e6d05600c5cafaa7f14a0261f0c8a35c368d90ec57e02845e676e7badd0f02657481188d3c8ac319cbc3a4062e0834f0eb6e2ed14f19a611d2afda50b7277c7752d99926631f15d556e7b703,
-N = 90eeed84a7dca3e0783bfa49d28caf63795a0c084fc2b3027908ac719dc78c731ffb5f34ff98babb6d7bea2701001b92466bc0c11a78909ba64376190f77331fdda03db95f8cc6efc98139c12ac4fcd2b6a83413ce0f8cf852b42202f9b60f3c6596aa6095ba1d7c4a142f0c9ce3c5f78a0c832365e5d616aba6a9305688fe804889e08c71b592068895e49b4569c60323a5596d84937bb01562dc956deb6e3e088be2349bc65a0321f58f3866c9115d9f083fc50c7ec7dc5bde36720311fe966dbecbb86ab572d8fac3994e5227d99b1cf91dd32cb062da3c0fedf9e94fa0c332c5ffd1edf2c71a76f279d7582ace6e006a9c78 [...]
-G = 90eeed84a7dca3e0783bfa49d28caf63795a0c084fc2b3027908ac719dc78c731ffb5f34ff98babb6d7bea2701001b92466bc0c11a78909ba64376190f77331fdda03db95f8cc6efc98139c12ac4fcd2b6a83413ce0f8cf852b42202f9b60f3c6596aa6095ba1d7c4a142f0c9ce3c5f78a0c832365e5d616aba6a9305688fe804889e08c71b592068895e49b4569c60323a5596d84937bb01562dc956deb6e3e088be2349bc65a0321f58f3866c9115d9f083fc50c7ec7dc5bde36720311fe966dbecbb86ab572d8fac3994e5227d99b1cf91dd32cb062da3c0fedf9e94fa0c332c5ffd1edf2c71a76f279d7582ace6e006a9c78 [...]
-L = 90eeed84a7dca3e0783bfa49d28caf63795a0c084fc2b3027908ac719dc78c731ffb5f34ff98babb6d7bea2701001b92466bc0c11a78909ba64376190f77331fdda03db95f8cc6efc98139c12ac4fcd2b6a83413ce0f8cf852b42202f9b60f3c6596aa6095ba1d7c4a142f0c9ce3c5f78a0c832365e5d616aba6a9305688fe7ec6bd95e615571a95d861c5641c377db4083423df5b59d86577c5913be4d3cdd409bde9ff26564c6422c5901bda25a8e5953b14e95081bd959cf93714dd77f4bde7c991080a25b6c7ff537c9ba47f5bb4cc47e2dd194cc0598454167a0e8e1305efbb916206dae8ab1563c8e682f4b84410d4491f [...]
-M = 7658572a5f1035d0391294874a3a5736f0d7cd337d1e217d4e9c3c4ae9988de3bb2c279c6b662ab442c241ec6fc3a292dcf32987cd540fa0de4f6da92c8e6617bcd914efca2be74eb6b63f24bd020b9f0a649b56574c154f086469f46e90ab51cb82d784468d87f9acb507396338b257d6465a2816233a998b05febc931ee3bc65df6d2e7c0c90ebd6c737db4bb0ae3413263f7c9e82aad2ee6e5c113e9b3ec2a8bf1391bbb9c81e4c4ec6d9e8dcc4d822d542537d73dba6f5ec02a386eb84d05d5b0f7621524f9f0feac6f11795cfdee4cb255e92aa07b29330ecea2472d07eb486cf0372b1910c1fdbeaae3e3b86a32521be06 [...]
-RESULT = 0,
-
-TEST = 85,
-P = ba8a9796485b7c4b0f5c2130de98e35e83efe04fe01adf99cc5c574e671e70b04ff7ca78633313be679264880021d4edd984db4a575cfde0b57032d284bdc24f4f68bb3f9569bb906594cb06ee71ca56df9982b1b32853a7a626402f36133ec73b0a7de1dcf62879395429d17a29aa4e8ed2da53426a4cd0004b5f0ac06e6169,
-Q = c4ebf615895282a81c3fd30b3f1229ff1b34f9c9d387ebec0e01673ca8ba0613c6afe896a5271e68484d8836ceb928cfe6d87e79297cc3a2db870c0145c96d4a641267e25b854a9a2d102a345803d78cf0d6596618fa6560e32be11c69c5c14b865fa5bcb5d575c37401377350a47b112992a6ebe95b604eaf015e69e2ba3835,
-N = 8f7e0c9915739ab944fa8e8ec3e88485f1f3e8e11423e49b7d20324c870be88de4322cfd5ee2dda77594cc807763a1ab06e7e6683b5121543fe3f30e4bfdf772aa6e36046d78f8493d5ebf50f2a8041685fa5941cdabebb419c2320b408928dcf30faa48aaa2c8db237b7088f35eb68819382e1a957ce7d40e17eb911d9e49630a6d3d381b32604abcef06ea0122d3372ce02bc5de95732130002ce9c428933f8ace3696f0a7007bfad725d555e73bb385b0345593b3b8084760f22926d7eae7f7541f3466135f12d8ec739e7c0510a26e0f3f9d983fb9dcdf9703b317c0536da78d9f1eef36f44df304b53f14fc11dc194c4737 [...]
-G = 8f7e0c9915739ab944fa8e8ec3e88485f1f3e8e11423e49b7d20324c870be88de4322cfd5ee2dda77594cc807763a1ab06e7e6683b5121543fe3f30e4bfdf772aa6e36046d78f8493d5ebf50f2a8041685fa5941cdabebb419c2320b408928dcf30faa48aaa2c8db237b7088f35eb68819382e1a957ce7d40e17eb911d9e49630a6d3d381b32604abcef06ea0122d3372ce02bc5de95732130002ce9c428933f8ace3696f0a7007bfad725d555e73bb385b0345593b3b8084760f22926d7eae7f7541f3466135f12d8ec739e7c0510a26e0f3f9d983fb9dcdf9703b317c0536da78d9f1eef36f44df304b53f14fc11dc194c4737 [...]
-L = 8f7e0c9915739ab944fa8e8ec3e88485f1f3e8e11423e49b7d20324c870be88de4322cfd5ee2dda77594cc807763a1ab06e7e6683b5121543fe3f30e4bfdf772aa6e36046d78f8493d5ebf50f2a8041685fa5941cdabebb419c2320b408928dcf30faa48aaa2c8db237b7088f35eb68819382e1a957ce7d40e17eb911d9e49618af6af8c49846157915312ade377c5d98dbb51ac2af2a79b55a26e5eb4501c7b74268387e84cce554af73916870c3df5c552da9212d9f684b669b3555c50bb4e43d8fc12752458e846477e63358f6ebe9d9f6385cc1d00d45644e26777e7535ae6237b805c6b561145af53fa4a2dec7c60e6c5f8 [...]
-M = 322952aee724eef91ae6c2b6a90f1715f469c63587236b340e4ca1081ba0ddc7df9332e3fb9e85ca901693ce05800dca62db5683777eb2cb110c4868662166cd08a049d7f9f9ef9b004b7918e666a1fa77869dea77b8c97e111fc79ae1c8cad2062c8ea1a54a0802da32be80475e35722e2e8481cb93cbce49cf19eb92899c16e0e062c9ed09b3634a645271f459d706c186efb0fc9f529cb110032e3154de0c4cce7cefd006724251b6924d3d5e845278750e1bff713d6b4e9822d28e831df6c84a3375990ca2702f3aaf847d414a506cf6c56c821518f1c5e8db22c0c9b0d608b55ae023df725ef8790b3fba33ca1463268a2f [...]
-RESULT = 0,
-
-TEST = 86,
-P = ed55e5418504b92e4b5785f1d56e8378f17644c8d391d656e013317f5138c20a2a88a409f826ff5d9346f5a5435cad18903eab9df90561d3f72ce99d933b51e1163147d2944ee28064709b50663100e27f9aa6332d3d34850fe02b5cd27490ce9f6e95062d24635d44f19fafd6b49fcfa088f3eba5161989b8b11efb91555395,
-Q = fa61663787626e07c43fc3d4cf9fa4d8a80da412dada4b51b5c24901b06467e08ee3e5272f0ca1e90da56e7c90360b267abbe998e85cb406562847e6d0f6b95985e3399ac7a469ef226b179e1275a1cb09ccfffecbeb1e7fddcb7aa948260260c6b2ccbac3f222190855136f6f44fc19e85e51c3d52940f3bad3fe9b39ff2e9b,
-N = e8202e318e09ec7e41f0f68f4099731d4f45020aa4cff41aa11f0989d50fbc30be339794bf1a75e3484c8bf8230c6ee491a4da0affcb74f0f4b1dafd5fae65e7e9e0a57cbf6b4177f55ac22a312f2d5455e9912f97cf65835f5008fd918f46681f8667c1b9756fbe4b51c58f1a6d36f9c4fb35955cd83773022ee3c117e7ffbe990da7eec58da3d85713e1c82c82e01e3e0ed29dfe6a4a6135d3f36fcc6dd4096e19c9a09a615929cd57cd07517910034a036f24a4c4704c41b2975ecb0a2c77e4164d847573504f566a298b9bc30a49f38f66a52ee2a032c81854810081599d763bd5284a13e8c24ae225fa30d16dcf86e3cc00 [...]
-G = e8202e318e09ec7e41f0f68f4099731d4f45020aa4cff41aa11f0989d50fbc30be339794bf1a75e3484c8bf8230c6ee491a4da0affcb74f0f4b1dafd5fae65e7e9e0a57cbf6b4177f55ac22a312f2d5455e9912f97cf65835f5008fd918f46681f8667c1b9756fbe4b51c58f1a6d36f9c4fb35955cd83773022ee3c117e7ffbe990da7eec58da3d85713e1c82c82e01e3e0ed29dfe6a4a6135d3f36fcc6dd4096e19c9a09a615929cd57cd07517910034a036f24a4c4704c41b2975ecb0a2c77e4164d847573504f566a298b9bc30a49f38f66a52ee2a032c81854810081599d763bd5284a13e8c24ae225fa30d16dcf86e3cc00 [...]
-L = e8202e318e09ec7e41f0f68f4099731d4f45020aa4cff41aa11f0989d50fbc30be339794bf1a75e3484c8bf8230c6ee491a4da0affcb74f0f4b1dafd5fae65e7e9e0a57cbf6b4177f55ac22a312f2d5455e9912f97cf65835f5008fd918f46681f8667c1b9756fbe4b51c58f1a6d36f9c4fb35955cd83773022ee3c117e7ffbcb1565c75b9267ca2477c98018774b7cca48ae9c24ffe28b89ffe78eecad0aa1eb4ad406f732db7e32c6b68e57de657c43f08d9edc3625a71f45d65da66d8213d4801cc17198003dfcf8e769d231c679c6a27c07335ba4d2dda6cae7ae5e6c66e101a736758fd634bfd9b72daead7d1e5fdfc8651 [...]
-M = 6f0e2979cdc53f8c2a40938388f16af5afce0ffb2f3ae3782ee6563d78eb286c7a5a695f7b749b87f89315007cd8f214288745b704d7ca4cf27b0588e7a35801c7331d76d86a0564db1e6edef2beedaf1480e38705268fe70713cef45ec5278a141c3258b6acc4154bbc3ba896f8249fc3824d1609c50d765d741e177e6a50b1dd89ef0ffcc5635c88df73af102298cb2fdbf58b0ea613622cfd262f7533acad9c4541d208d77116844d92759c509e139ba7018365751c63bca904435bb91f7c794bde716438bad3bf0e4fdf96f6bf55e4e640a992ae3fe00b62095d73698d8b3829871b474e4b310b9b2d2672d78bdfd0f25ae5 [...]
-RESULT = 0,
-
-TEST = 87,
-P = d117c6a361cb433c8d7623963b02260f4359dde7817b23708a2848b2304db448287f753acb679a0ac04c232e32f1861ca8200db98ad8f8181653c7a98b53dbe0e1bc8bff3ee592c65d8e057c47c03e11e60166181181ff9ceefc2e5e5ee6d197fb18b43dfaa00449ed7ef270f0ec35e9e3adec31c8a76823b2eed18d257b1c45,
-Q = e23248842de5375a84827ba087fa4aecfdcd62e114a2f686f733725c4ff07ddc29d978a45b92f91c01efe71cbb66a39c5c66377497ed1c98f2d50774dbd79c860e83e82b76c27c20ee9162257bfaef2f11ad5a5f07052c040965d5ea417fcfc1a127ff0913e2d36cb9e1916e38a490938dadabc62be42c5d020ae388139dfdfb,
-N = b8c00f3baddb5033a1089a103d0d10d905fb837a572bf1567d995a829baf9008d875916250c4afd8c261e6711cac7e30b554a179a3218080e6953ceb5f1c35247b71271753eaf95b18540a339b127931a2e3612083cd30cddf081f81fce0f891b69da1988e97d4b8e91692245f6f843c38ea6f33f1fdbfb6d443432b2e9d9f9daa6a7a396b7fb537a5fdb8e6fd70f4cb2efb8610d6a8b1162eccbf0619a6b40c32894db3c2e3aff2731dd703566590d2c7a15597280465653d5d08d5661fe5817785f9f670627431d7aa47949e5a65bf0d691462ef3a14af8641d542609af1df797f464068337f9ee324d36987a34c75c5f47f95 [...]
-G = b8c00f3baddb5033a1089a103d0d10d905fb837a572bf1567d995a829baf9008d875916250c4afd8c261e6711cac7e30b554a179a3218080e6953ceb5f1c35247b71271753eaf95b18540a339b127931a2e3612083cd30cddf081f81fce0f891b69da1988e97d4b8e91692245f6f843c38ea6f33f1fdbfb6d443432b2e9d9f9daa6a7a396b7fb537a5fdb8e6fd70f4cb2efb8610d6a8b1162eccbf0619a6b40c32894db3c2e3aff2731dd703566590d2c7a15597280465653d5d08d5661fe5817785f9f670627431d7aa47949e5a65bf0d691462ef3a14af8641d542609af1df797f464068337f9ee324d36987a34c75c5f47f95 [...]
-L = b8c00f3baddb5033a1089a103d0d10d905fb837a572bf1567d995a829baf9008d875916250c4afd8c261e6711cac7e30b554a179a3218080e6953ceb5f1c35247b71271753eaf95b18540a339b127931a2e3612083cd30cddf081f81fce0f891b69da1988e97d4b8e91692245f6f843c38ea6f33f1fdbfb6d443432b2e9d9f9bf7206b11dbcf3aa0940519b03a7483ceedd44548408a971ead7103f7996881e7e0305fd49be91ccbb0e1ccb8680d6719c31b1069053e50b4343439b6fef46d1a874585cbbaba654a8b8adff2da9f387e15ba53ebd6b2e90e8ddfd0f9c0345085dd3e92f959b0a7e83bc44f8a5e1285f85498e79d [...]
-M = 5cda6aebb30d6faae91792a89b4532a7ebc1b51b3266442a36a434280aa019d6a04542ccb2d86fe36dde38839b41f14fd6ddd7e6c88c38032a1d60f4611285db36d3bb700dc5e6dd9f775449392d2348cdd1921189bb7b35ddf55ae9883c514c55e60691159cfddc86b9b24c1ead9467e3d694cc02535fb7a2a09041c7d5af367377b896916a618ed215a189a9b57147f048dae0f769619262ebf1c6dca052cf875a21a5103282305f6c44643656b5edd1355204210142984cc6b889e8c55c1aee02b4597d468d3245dd983a2c05d7f3b9a6e85400ba453fdd44678898c4625e1822dbe7eef1b0211f297fa59377370fd842b978 [...]
-RESULT = 0,
-
-TEST = 88,
-P = c8a3995b6da9dcc7b895eb71bd483c2823813077e6140846e2f62e91bca68ec4be713368b8a92cce4cc4d0a44e40afb1b16deb730bb80c769829451be996e0a4f1559704303934e836acc189dd127b902a1fd6398755d48a84e5c2153d1add1d2bec293dda8a516d0d2776c6b77c362094a91cadf77822fc5549d2f7fc71e031,
-Q = e26bd19d38ba0b044c93496e28ad0e2bec106af373e97bcd28f2e22fe173fc22081e69748f7baeea45c6e2b927c484e5d18103231236e65ff484053888238f0fa160b5a251271669db5e816baa30442e6fc0f0d7e1500583afd0fdf28dacdf58f3f6fd8133cc5b89d8dd499ee9566b7a7015bca3702362b2df22d8dedd73c4bb,
-N = b174ee0c9905158d596e1e91b864a254d343db71759871c1e96b62839fbbcb4f4d1f48ec54ee0fa8a41a37b38b4f9638cff8bfd857fc606c5e82351ad9ca58df4928b8b9b195897823e00ed0970e1d63cc04fcb607d472af8a57f4c63baa2390bea2edd8664eb7772c7470db31921db04bde535bee8b244714a5bea54e017038c2272c43f0a8370a8e90a0174a241750d8b9533a3ca1aaf7a7c5f150d2309c14843a703476be7af446f69607fc951260722f5a7b659d2e543613eabf5c6edbbed15de4ea3aaa43fae1cb38ba3778b1a8884d9973b7f5380da6364555db6ec9ceb8a4179889ffcc1fa766d59ce59099fea56396fe [...]
-G = b174ee0c9905158d596e1e91b864a254d343db71759871c1e96b62839fbbcb4f4d1f48ec54ee0fa8a41a37b38b4f9638cff8bfd857fc606c5e82351ad9ca58df4928b8b9b195897823e00ed0970e1d63cc04fcb607d472af8a57f4c63baa2390bea2edd8664eb7772c7470db31921db04bde535bee8b244714a5bea54e017038c2272c43f0a8370a8e90a0174a241750d8b9533a3ca1aaf7a7c5f150d2309c14843a703476be7af446f69607fc951260722f5a7b659d2e543613eabf5c6edbbed15de4ea3aaa43fae1cb38ba3778b1a8884d9973b7f5380da6364555db6ec9ceb8a4179889ffcc1fa766d59ce59099fea56396fe [...]
-L = b174ee0c9905158d596e1e91b864a254d343db71759871c1e96b62839fbbcb4f4d1f48ec54ee0fa8a41a37b38b4f9638cff8bfd857fc606c5e82351ad9ca58df4928b8b9b195897823e00ed0970e1d63cc04fcb607d472af8a57f4c63baa2390bea2edd8664eb7772c7470db31921db04bde535bee8b244714a5bea54e0170371717c14b4a444f3e89676b37642eccfcc927b7cee2a426e39bdce08f3416112dbdaad3572e999f3bb46ae2aa868fddc8ef406be547ae3b7da966a06aeab46c0a3ea79843b949f8a8cfbff5c4b035f1e9ee6cd2624f4f5dff717f854e10a70d5898c0f0d97ba91f28c162153744bdf863a0a4bdad [...]
-M = 23f81ce88af9bd5e8deb47f391833afe32372d0aea1d95e0b2239af74fd1ba583762ea21098e5949b05b5e689589d30d6da8b364df0d4ac5875ea9e27514fff5ef78df81255c177efbcfedc51e3de64304aee128a666b369138a837f0248b5a9bd0c9f297d7c94344033cd8b68932c6d178b6bd31a5fd164a62ec79305a9c5aca12a19dfc1d37e72b158398d99ec2088426ce8dc1d0ec40b8736b72198b2acce212a95862edbf3e9bff48612848eb394c929caf530c88f9f417d76a08b0c40dd6d85c7e91b4c9c126daf52331bd7c48273eb58172e630df1efc2e64acaf5fd599dd281ebad5f33bbb8e2f3a52e2f5df46bcb6478 [...]
-RESULT = 0,
-
-TEST = 89,
-P = db09bb1e4c99764539cb8ecd26ea53d75951cd310e6b392ab95e6147fef5cb02abe068ab8ecd1ffa97d04ded7cb4a1bd4c02d153605ce0ec227e8da7d4dd9c1c3fca9fe1a87cd1c9170632d24fcfd35b8af2f55baa9ef9d5c16d993296ab72c65879daae43369f8d0d2d9a7dedec8bddb5865bc3331e618804cfc7244d594881,
-Q = eb0512cef2b28a53e8175fe5458cb701c26679110f6b77642d6dd2d8a5d9d27379fd59833bb3325923bbc2813ebc1214b9f4163a0319fa00704d3a2b8b4bed5450d642b88577416a64549e00e3b5a2606fc51e12f862affa2ea61ecf89d281aa7cadf241296dc004484bc65e1d81475d1cda39562636ade264d506d00107ef05,
-N = c916460d388d0857124b2cf437a41453982bc038818c346f980610789cb4f98228b6e12cc65fc6d7b2b9c6074b5677906e6fc710a679995f4f3a85bf0de4ef6bfc95ca7489babc4d86075b2191f07c1fe1502c039ff19da906273f3b370e8750b0babcc5f8c15374cff3df9377608e48ed9a0a3aeb39872ca8e10ad265c7eabc23eb49c587ff14ae52d992b545208a706ddb2100d70b303c5bed7b2da22465316b8b5428e575b73d9e8bca404e8f79e3d2fb664108cc5b87f7962e3aff21ba51d92dd04d8f1940f9fe7db00b395593f9078ce9b9db804286e553336efc3811ab44089b64b456d3d5726e5b1346dd58f78cfc214b [...]
-G = c916460d388d0857124b2cf437a41453982bc038818c346f980610789cb4f98228b6e12cc65fc6d7b2b9c6074b5677906e6fc710a679995f4f3a85bf0de4ef6bfc95ca7489babc4d86075b2191f07c1fe1502c039ff19da906273f3b370e8750b0babcc5f8c15374cff3df9377608e48ed9a0a3aeb39872ca8e10ad265c7eabc23eb49c587ff14ae52d992b545208a706ddb2100d70b303c5bed7b2da22465316b8b5428e575b73d9e8bca404e8f79e3d2fb664108cc5b87f7962e3aff21ba51d92dd04d8f1940f9fe7db00b395593f9078ce9b9db804286e553336efc3811ab44089b64b456d3d5726e5b1346dd58f78cfc214b [...]
-L = c916460d388d0857124b2cf437a41453982bc038818c346f980610789cb4f98228b6e12cc65fc6d7b2b9c6074b5677906e6fc710a679995f4f3a85bf0de4ef6bfc95ca7489babc4d86075b2191f07c1fe1502c039ff19da906273f3b370e8750b0babcc5f8c15374cff3df9377608e48ed9a0a3aeb39872ca8e10ad265c7eaba5ddc7bd848b3141530f6a402d8a97f975222dabeb9347fad7521470cfd54c7bb45ad91fa1af564e9e2ffb9d1931ec611cd047eb3a555809b64ca66679ef830e1488cedb361252dc68322df3805d01e3d0cd4d64b387e98b6f53f7b6cdbba1d3a6ee0ce7547b274441cf4fa373b6f85bcba9b8c31 [...]
-M = 718fff817a210bdb8c3961374b29dbe70887b24de95faf573fa12779308b91ab68b40d594a52f54ce8bf00a33ce642dee8c74317ecafd82a364fe14d63c6cbec9d30c7acbec22da79d375398ad5365d2538db97b3899db00bf5faac90eafb06595b290c0b65d6efdd77238e222e227ad0b64559d2cb539c3a9074ed6709330f88ca8f2a127ee73d89d32afeddfe09d7e337eb48c85fd9417bed173e8614452eb4396fd6445c42b0a1561a1b2329a6532d88bfe379745f91a11e21a73b7afeb5bdb23c5e4bbee7b25035c2ad4b07d4a73ef08b3339aede6a7896df804cff5b570f74f231f6ce6fc5411c8bb9c227eb79ba355db39 [...]
-RESULT = 0,
-
-TEST = 90,
-P = d558c0dc20c275f7ac963b5e247eba9bd3cb0e989c30f4baf5592a0bc2b4c1242033b663fda17a7f1623fbdce63c961a019ae579c35a3b1bb057576f6a977f56caf7076e0a945b6c789780a6df70d4ee1e5fbb12b3202e9c097165b7f0602dec8e3af2d2d333cc211ba0e553749e4680931b6801199e5ba3fc894af07ce85b51,
-Q = dd1a080f74a415f2bef8d70b3c96df339871bed7ab646a1a2353a0dbfdec0cef6f3bebaac86390db1d62e59a42b684027c0234f60b67cafedc6c842c2e319913be3e9412c5183378076c01bde2e6137d90f90e5b38a351c4dcff56088bc212d14b872cf89843fd22f54976ee81dd446bca370bc55b78bf74c66a37ed5cb5307f,
-N = b84350394612580caaf6988df0f0c22e787e769a88657a02b585da80a99e8ca38dfba98991491c02cbdc9acabe3003c330543782ab8cab5070b84e38376df95480de69376ef0b0f1809a175845c9553cfdb73ba7f8dc4b04814063985d2680009f7273f944c6a59b3bf09dd0658372bd6a3f663421995c7c45c44b148141900722e53dfd7cabf19b2c1550670e57037ad85439be2d0800b0f5c267143dcda200ad8f9608f62cc4efd7a0cbfd963ae7488858599d959d0b499fcd6dae7c1a71bb0db83d2a1bc9c2887ae9533cd9b9444ded2d6cfb3c7a0a86889bd3b45052497b277b8ccdf521a0bd256880a140a97811adfaee00 [...]
-G = b84350394612580caaf6988df0f0c22e787e769a88657a02b585da80a99e8ca38dfba98991491c02cbdc9acabe3003c330543782ab8cab5070b84e38376df95480de69376ef0b0f1809a175845c9553cfdb73ba7f8dc4b04814063985d2680009f7273f944c6a59b3bf09dd0658372bd6a3f663421995c7c45c44b148141900722e53dfd7cabf19b2c1550670e57037ad85439be2d0800b0f5c267143dcda200ad8f9608f62cc4efd7a0cbfd963ae7488858599d959d0b499fcd6dae7c1a71bb0db83d2a1bc9c2887ae9533cd9b9444ded2d6cfb3c7a0a86889bd3b45052497b277b8ccdf521a0bd256880a140a97811adfaee00 [...]
-L = b84350394612580caaf6988df0f0c22e787e769a88657a02b585da80a99e8ca38dfba98991491c02cbdc9acabe3003c330543782ab8cab5070b84e38376df95480de69376ef0b0f1809a175845c9553cfdb73ba7f8dc4b04814063985d2680009f7273f944c6a59b3bf09dd0658372bd6a3f663421995c7c45c44b148141900570727511e74565b0c0863dfdad4169ab6c176c4de572a1dbdd159c2c7d2cd3ed1e1ff3fa3027b995a419ea866d47cd2c0abb3f2dc6db052f13099212e35159508482a1a94c1d33a3fae5d0d817625be23dd4a38d50b68a25a22b17f3d43008bd4db96d0289a9d779147e245f4a2ded2550a87a39 [...]
-M = 9718c40ffbebfe62dfb70bd581fac13e92ef76d42368d9dcd85dad693f96f962733e1a774ecd5b3f0087b6836f5f0ddb2d794aebf94bc374c84da876c2fdcbe0b5399b706d801c009bcbeb7fb98728badb6a505488f75d9c7e98cf8b461e4ac18103af8edb5871bbe8a876bad0564401725f37e0f6d8b6d1fba4b2915bc19763c5942e9128c74dac5ae094afc819a2da8dd59ec86aa22dd74f4717be8857c9e591ce526659c721b3076a98c7e4d941b5484667a6dba1eab4bc3f1d05cffae5f53f34bb43722feef87e37094fa4f0c91484cc7b4ccfa48a93e7fbd3ac9a1f804978ea5c4952d9820c28a33a871b348968826d32e0 [...]
-RESULT = 0,
-
-TEST = 91,
-P = bda18d5a3498cd868a1f76a0d7f7c383264a9349f759b5ac7d93474ab8abdf8ba2e8306d688f59ad6675bc91cd0d5ad3c8a6264831793ee59db266a79a6992fca55cf5e13ce28e43d39b9ccc0094857618f37980f34c2765fbaac0777c93e1d21770ad8094b5eb8df4ef8fb21a59d3dd21436a0f3f658016975478ea2f276e83,
-Q = e56bfc46396310dc9e0fbe8e4f91e8abbe3c089b5837b1f382538136ce3ce6ccc8f376f8dc3324c40018aec5e04d84efc88fb8dabdc3c7acfb3699347e21838a3683497511d54df4cfe6828b25f4188349712d5692e0c385b5d8605eacdbdb0a0c6e682cde1b57d1c75e7326b1c24cdc6cfb72f5f9c50f18b03d24d4e9ac356b,
-N = a9f180d6d1947898513b5b8aa9f2cd3485b1cfca6d112d57f3f5021513c0d6fe9079db5ba688845b3c441d8ba1638d77a8a46dc2ce9fb27dab00e96179bd9e8574a2e307949cf6b3d28dadeddb22b060df98ca055bfe591dc2d6fcd9ce17346dc8167d25cc99680a06698f85d2ab47dbe5f235a625fcfbeaf2abd284d54cee9185491fa546c13c71e1c3b449b77decac79840932d57785a03cf7fab5ea57d50d1b03dd3be07b6e7bf17f0a1aec4df1bc05bdf3b47804c5854990b773e7b2ba81a1ca82cd774197d23e8845a1d60184d52a060612a4a26496978d386a32cd19932e6d8836ee20825ee286e686c6f89581180aa471 [...]
-G = a9f180d6d1947898513b5b8aa9f2cd3485b1cfca6d112d57f3f5021513c0d6fe9079db5ba688845b3c441d8ba1638d77a8a46dc2ce9fb27dab00e96179bd9e8574a2e307949cf6b3d28dadeddb22b060df98ca055bfe591dc2d6fcd9ce17346dc8167d25cc99680a06698f85d2ab47dbe5f235a625fcfbeaf2abd284d54cee9185491fa546c13c71e1c3b449b77decac79840932d57785a03cf7fab5ea57d50d1b03dd3be07b6e7bf17f0a1aec4df1bc05bdf3b47804c5854990b773e7b2ba81a1ca82cd774197d23e8845a1d60184d52a060612a4a26496978d386a32cd19932e6d8836ee20825ee286e686c6f89581180aa471 [...]
-L = a9f180d6d1947898513b5b8aa9f2cd3485b1cfca6d112d57f3f5021513c0d6fe9079db5ba688845b3c441d8ba1638d77a8a46dc2ce9fb27dab00e96179bd9e8574a2e307949cf6b3d28dadeddb22b060df98ca055bfe591dc2d6fcd9ce17346dc8167d25cc99680a06698f85d2ab47dbe5f235a625fcfbeaf2abd284d54cee8fe23b9604d8c55e0eb9947f1a8ff4407d94fd6d4d85e61e003d113234636f0eb4af2835d59bb8f00a8af09ec33ef311f87488149188c7bef2b0a7b797cf27a3fac5ea43772889bb999b06264aaf78e6dbc7a15f3b1e7579aae60a1794095d5cb70a8e72897b4f3eff2638e3adfadc74c789cbc76c [...]
-M = 8541a528e7b07168f8e0e34851121849c58680d8418255e7aa7457e2e6265a012b7fbe47e3309b3d9cd2bd48071b89e8ebdace5053992aadd4caea8ec75074d467f532dc915be85a6f53f4dcf55519f9585b8482db5f4a7f33dbb030f8699cffef3e3c29156eaace0b8ea74e2fc466390932872e61e441beb4ebd9a60a556d3b2cc73ff721174777f8b0ed7005dd6eff46d1c68272f58e5e445c2007712b4bfaedee224872bef149ea85cc41182c2da26bc92609bb876ec25a4a5372a45d9ff47d38f393fd371cdb3cf9eae29ccae34739fc9730ab082abe216ea8f6d44eadd2bf8ea7caea4676039e76998c129ce7a61ba8552a [...]
-RESULT = 0,
-
-TEST = 92,
-P = d8647807222e561fcebd69c045cb53dca8fe0aa7676b1f3ccf88be5157af02501552f6ddd3bebcb9401d3a116f4c916572dd15c78859a0de668614b2a471a6a56e2b8b38da118df2754995dd56032d1fa610ab732e30ad1636f432075d4195407433d4c56beac8cb4c0a3cc95eb7cf7d0b446d2b9952a7c44a0862d76c42a7bb,
-Q = de7cb023d98944e7ce81fc8381faeb5236af3ae041373d7bc6e8e183d08d4cd8cd20ab323a7b4bb09630e05482c7aa9ea1ef04b932fe7755c20f73164b44fee736f15f946cef34585bf78efd0641b3cea213a5dcfc159738764b185fbd23dc87251449fcb548d94a947824f5322f73493910999f0783265dc3fbafd6b225ec2d,
-N = bc1085a3b33b3f5bbd1f87e8eebecf905e9a89fabf70e01251f2fd4b9545407745d1524a6b1c7bffb3f6336e48ef7ec7c10113db021f975e277b661f10119d40b117284c8b1e793372d441ce0ac8e95976e3ed4f3bfb700884bb38a9e3f73907ddc66d86e97bf5d698a67d48708c8eb6ebbd1deb415dc26aeba175f6cfe803e6a9c65fb4aac45ba8e7ad391878f107176d5d9a4e3de35619f3155bdf566712029cdc09531cc14f1340e0a431c52fdca0ba42fb7a7c0eaa6d3834142a8fd0ebc46f8ae95cf82c11557c9efcb20a9dfe3406e461b98d8488a3d77db35ade78dc993ae056f920c500ff0eeb7139edcc14e1a37374fa [...]
-G = bc1085a3b33b3f5bbd1f87e8eebecf905e9a89fabf70e01251f2fd4b9545407745d1524a6b1c7bffb3f6336e48ef7ec7c10113db021f975e277b661f10119d40b117284c8b1e793372d441ce0ac8e95976e3ed4f3bfb700884bb38a9e3f73907ddc66d86e97bf5d698a67d48708c8eb6ebbd1deb415dc26aeba175f6cfe803e6a9c65fb4aac45ba8e7ad391878f107176d5d9a4e3de35619f3155bdf566712029cdc09531cc14f1340e0a431c52fdca0ba42fb7a7c0eaa6d3834142a8fd0ebc46f8ae95cf82c11557c9efcb20a9dfe3406e461b98d8488a3d77db35ade78dc993ae056f920c500ff0eeb7139edcc14e1a37374fa [...]
-L = bc1085a3b33b3f5bbd1f87e8eebecf905e9a89fabf70e01251f2fd4b9545407745d1524a6b1c7bffb3f6336e48ef7ec7c10113db021f975e277b661f10119d40b117284c8b1e793372d441ce0ac8e95976e3ed4f3bfb700884bb38a9e3f73907ddc66d86e97bf5d698a67d48708c8eb6ebbd1deb415dc26aeba175f6cfe803e4f2e53789af0cc0a14a6dd2d4b12ac7e88db054c69540f9615ca3bc0a2e2ac2d9ba6867430e8746a96a9289cbd31ba09ca576e0f9c0b692390f9e8c61a01a4637ca6dfe8fb12b4f0aab5dd7d7ae591d45bec01069633e44552a3e68f3c4136ad1a1983836ff915ee92e690f7b5ce4d21b5f1e6e30 [...]
-M = 6f1202db78fbf6e020b724a890bd198c37945df9ca397a0188144514dcf7e0fc345e9d249a0b8e55f495c2300760f1eaf5f73e6679c74e4b7c802638fac4e9cfa890b633cf7eb38ff1be19aaa0820ee9ef92ce3af0bdee9f18f44cffd623c7c97965e78115a096fba15c9fdc6066dc28a4c061c27e5bb3d3cdf210f3d27b0b328fd2db00f60d3a8531c8414b7541e48a8be6fba8d0168d40cb51843600b64bcf0116941ed00a11d41f3da5a2ca79c87fa1e6c89cbe067f58f3acea691cceece96bce4d9426f745db9abaa93b775865bec166b1410b845e1ad246f8fab4a300d4ee701a89a8a32fb5785430c224218f2013b38a81 [...]
-RESULT = 0,
-
-TEST = 93,
-P = cb5103563a5b1b6da9cad09ad4b428d638184f6e1e287235b482c8cbb28c812b8c561960378093c472005a5a508eaaf06355ce4de3ee4693e9db1162525c7f8aca6807e429b41fddac86c72617db09b812f06ac79b9291d7cc61e5264fd910f2487ee69f2fb27e2ca92dc14f89b81356a6a2b8b6354f85f99a117e4cca8c50bd,
-Q = f277dcd85c2df2dac2f94a6330db20f1d7bf4043f114a844cbecae1a07e9b054790885543de5ca127065b03490ea454b22e60d93b210a345d5a39b47503d0d4f5f50209fe485541c291ee4b79137ccfda36d2990152b677327218c0936fa967f929b49d55e5030855c3a7b4d1d89447fd044569420bcdf0099ee9d4f51ca8c61,
-N = c091c73584adc67fd90bc4c9b96f3f004f81c048d58496c146026de8d972e708a8173aacbe54fab7559f88728d14a9b17fbeda993fd836caf66a91b2ab36904f2f50d9907ccaf8c3d0770fd63f8eb0823b39ca86bedbb1ddf7e650f87f55bd5a67d93733cd5afeb6445760daf0265632d3452241c4cf6d07089acc9f8999b9ebb53f431a45fb3ddbdc9dffa5e6b864917691de4a15121e8729f504c0f33790b6737c9c646d911648948d948190af28669f8d94208625cd25ff0865a4803e6e72947fa080e87a9104e351cd06e66035e7d7d939d61773ba45cbccfea99be8f7ee073a98130ec76e34ff1fa0517c2628a45053516f [...]
-G = c091c73584adc67fd90bc4c9b96f3f004f81c048d58496c146026de8d972e708a8173aacbe54fab7559f88728d14a9b17fbeda993fd836caf66a91b2ab36904f2f50d9907ccaf8c3d0770fd63f8eb0823b39ca86bedbb1ddf7e650f87f55bd5a67d93733cd5afeb6445760daf0265632d3452241c4cf6d07089acc9f8999b9ebb53f431a45fb3ddbdc9dffa5e6b864917691de4a15121e8729f504c0f33790b6737c9c646d911648948d948190af28669f8d94208625cd25ff0865a4803e6e72947fa080e87a9104e351cd06e66035e7d7d939d61773ba45cbccfea99be8f7ee073a98130ec76e34ff1fa0517c2628a45053516f [...]
-L = c091c73584adc67fd90bc4c9b96f3f004f81c048d58496c146026de8d972e708a8173aacbe54fab7559f88728d14a9b17fbeda993fd836caf66a91b2ab36904f2f50d9907ccaf8c3d0770fd63f8eb0823b39ca86bedbb1ddf7e650f87f55bd5a67d93733cd5afeb6445760daf0265632d3452241c4cf6d07089acc9f8999b9e9f77662ebaf722f936fd9e4a7e1291ac966ba4e9805d5040ca9858ddb38c15f366e1dfdaff82ab871b22789f2af36382b1951b83ef026e34c3f89b8fadda4e1986ac777fcda411d0b0dac21293d4d5f32217ba57e66b5c0fad8498d7a1515507c2c20679e80c4bf82f9b763b4d4e4d0cdd96c4224 [...]
-M = 840c07e7de6072825b372efb19630d2c70c6fc149e12be25b7f20803385688646ffa48fed46af4b5116bdb77c632645122f2757a8c41f4b80a4c580ffaa21fc7def92d82da5500adfbe8d6e0b65a6e46311f7e8bcc0c4f048b3002dfba9d77b82a730f5efa84150f2ea6774a283ad0cdbbcf3f7a2ccbad7bd9b03d3bb60434768c8f90a5e3cf2bc1b87a63c65427c97ff6c1c0ab77d364f06bedba95e2a1c3fdf37bba3a88eea0075a7477c7124ee77ac62310547a4c8183d680e5817a3fc8439ec1d684e24a757a5abd4e7cbd08d5a92a69ca7384242f0ae43662857954a6be64e890aeaebde6ee76ce34233ec0de8664f2da98 [...]
-RESULT = 0,
-
-TEST = 94,
-P = e543f72e85b2036250d67d48c1ad0a1a031d961463d97e153609d1d95d30d235e9a0d26d1f14549b1214f29001230e19b7a2db5478a475895da826d49bd26755c2eb166003f97feddc6a297232a517447b1d7defdb05e9aa668f9ba9052d6eeb1b1058766b8c207578971ce6dc8dfe1eaaad0e381b2c708ff053c4ba3667362b,
-Q = ef9077073084116b3e08cce350cb41f5e8dc8e46f2a0f301dfd202f33d4ea6c5e54053e702e8d3adcaae5f0262c44bc19d336f4d38e8bb57de449b19d4ee124a881b6a575ac26b1833a155f8c68e865bcf7e87f500c3a755b60a384c7b75fa7f655b8dafa1046a36e3d048bf657434a0cf5db2d6d10e29aa08bcc814ae36b23b,
-N = d68bd4988131ccb3d3a5921aebc064b752fb3377560843c024f6c0eb76c88dcc6c5b5e44b338ed3676d227ad49b9b479f20b776bf22fc567b2d0468efe4e0b8f91eb4f5461271ec98b226166e93141bd6f73333186bc4049dee8d2796e58998886c7a47abf39a4b32f82ba4a5a607d789cca5d9c87cb193f4f8c24a043ef6b22fc5f6a9b06843a62577802d94d5b5210206191eaf735e744e6972c7e2894134e33659e90a7f090548da3a65e50031d38e973902d990027232dd56a0f7bccadad8630ac51bb8553c0473e28f4d3f569e432520be520dd9a3e5dcfdb20cdd6e130c5e24bfd3a40f446bbd2d90639a1df9947ff758d [...]
-G = d68bd4988131ccb3d3a5921aebc064b752fb3377560843c024f6c0eb76c88dcc6c5b5e44b338ed3676d227ad49b9b479f20b776bf22fc567b2d0468efe4e0b8f91eb4f5461271ec98b226166e93141bd6f73333186bc4049dee8d2796e58998886c7a47abf39a4b32f82ba4a5a607d789cca5d9c87cb193f4f8c24a043ef6b22fc5f6a9b06843a62577802d94d5b5210206191eaf735e744e6972c7e2894134e33659e90a7f090548da3a65e50031d38e973902d990027232dd56a0f7bccadad8630ac51bb8553c0473e28f4d3f569e432520be520dd9a3e5dcfdb20cdd6e130c5e24bfd3a40f446bbd2d90639a1df9947ff758d [...]
-L = d68bd4988131ccb3d3a5921aebc064b752fb3377560843c024f6c0eb76c88dcc6c5b5e44b338ed3676d227ad49b9b479f20b776bf22fc567b2d0468efe4e0b8f91eb4f5461271ec98b226166e93141bd6f73333186bc4049dee8d2796e58998886c7a47abf39a4b32f82ba4a5a607d789cca5d9c87cb193f4f8c24a043ef6b21278afc65504e2594c898b8ad3ae3060034676d8fa0bb762dd0bb57b18e149a526484783c85f3680bb0e054cbec1bc35d949d458be772f641f1e8a8210b0c340d3b2a2b9a5cc968ba3732a989dac1cc43e7b606004514093e4136072b4d3377c6457665d72db0699a5f6b735ff79facd9cdf4b47f [...]
-M = 52718cfb87b64b1c3129cb3d18f331d5070e89bcdf85ad213783d370ac3d87241661962fb458a0a50fef5482ba7bcdc135463eb74b52005eb9c94b648f2008ec4413548660aa6453af56a6e8db8e34e9aabfdef267106fd21bc8e5aa0c2ea10ad3af6ed7a9d5767c69f52f62b0a9aad6815e752963b5754d1a43b09a811526d1d6f0bd6a2ee31a75d9b3f274634ee5764e79deb3e0d54656d86d0bcbed520601a98728b576de308b5c45d10cc27c334c312128fe04c650e052712a59dde7093842895ebb0c07398f165f6a26ed08cbb37aab22b7763f21711d81d0c882ecf4bc83450d716549c466c7a19eeb3ef2d8de54a25ac3 [...]
-RESULT = 0,
-
-TEST = 95,
-P = cacd5cbec1e4a841fb111e854cf0f7a4a6d8a7e14f4cd41f3567492bd815887a0368b13105e550c30bcc1396a47c9be7bf297095cbd72b764aa8bcd4a8e31bd75048054f993c9d1fc3a2e1dd527c1b112fdf9add896836b90a4bd714b35c8dba97b8b5423cd0c442efc1bb7ab97261de04eb64c112768d094096518a68b4e319,
-Q = ec337893de5173d70f145f28dc8595c4632987e3314ca3c0d510ac3259cabd40591d240061e7bce5dd22f7b6b9a8f633977b805c68bd84a0d85c6415c724c09f8a3327654c3beeb33904510d31708b1cde490ab1d2a90a867396f35384e718913afbfc8dfaf25d81fafd38d472a4db0d6a655875ab0a258ff9ad4d41e7d9eee3,
-N = bb1e17eebc43b5434158bc8d2c4ed9837095277eda0d54c91b9cfcd287f27b66aa888f2ad14484c1b0b4574cb8a6528648318a367eb6a2417a0dedb0cabc4d9ffdb2628fe9338914ece5609644ae57b814de086c032a7e8548068a4fffdb006a38d5c458458649aafea28135b0b8f48b576fe4ead496dd6f596cbf78e2942a084f803b4f9d373c180fff52485c39a9a9502006a10448b3365f0d30ee4679b68941a96fe60ae11028255d5f7a4686e2594e5417205bb64cb495766902a5f31b60b373b0fbc530bc18ed89cfd60a3f321125077c818e3144672471265b3e879f23b9c6434f9a96350c2698d1977dd43a84e802c36c [...]
-G = bb1e17eebc43b5434158bc8d2c4ed9837095277eda0d54c91b9cfcd287f27b66aa888f2ad14484c1b0b4574cb8a6528648318a367eb6a2417a0dedb0cabc4d9ffdb2628fe9338914ece5609644ae57b814de086c032a7e8548068a4fffdb006a38d5c458458649aafea28135b0b8f48b576fe4ead496dd6f596cbf78e2942a084f803b4f9d373c180fff52485c39a9a9502006a10448b3365f0d30ee4679b68941a96fe60ae11028255d5f7a4686e2594e5417205bb64cb495766902a5f31b60b373b0fbc530bc18ed89cfd60a3f321125077c818e3144672471265b3e879f23b9c6434f9a96350c2698d1977dd43a84e802c36c [...]
-L = bb1e17eebc43b5434158bc8d2c4ed9837095277eda0d54c91b9cfcd287f27b66aa888f2ad14484c1b0b4574cb8a6528648318a367eb6a2417a0dedb0cabc4d9ffdb2628fe9338914ece5609644ae57b814de086c032a7e8548068a4fffdb006a38d5c458458649aafea28135b0b8f48b576fe4ead496dd6f596cbf78e2942a06987f65fcfd011fff05d9d49a32c31c40461dd6dc83af3b5654953b90149970cee5239ab4a314027f3c6e542ce861503df7af262e27219c9d7271481835eb3ee9d8f88446dfb83045f0e29ceb86528be316ded6f232200327a68e5bf30643f8d7e711917f62d313473bd9dd4851bcfd9978b20635 [...]
-M = 542f574b40e9013e3c615e1bb1adfa9c7a9c1dcbd8e5a4b99141cb2f25ac508206c563ac7f11b39e95614a76f2e97bf831362ffa7a7b1cbb6c99a23afeeb928892215e00821ea2f95fcbbc44845d0712690fd5018ea58d04ff13e506d60d4d939ba7999118fc13673898637f1ddf855c05ed597325de00c7ba7171e912840f8cc11185212cfebaa6a4276be46cae5f9c420de36eedbafde569e3b6e2fba31a1f77bc53693a8d8b57145dd3310c8b64d4d0a9cfc07e382927153333423109eebf2e052de0fa6d7275f71872cab32dc2788f46b4851a68ceddab0de3f2aee883b5cf8c584a52238aef61b7b7f790d9dc602fcb41dc [...]
-RESULT = 0,
-
-TEST = 96,
-P = bfb74bc11bda8c723862fcd736802f3487d686f18ea05d48b3b9a94442670eeec9540988abb9811e37fabd56057ae3f3b9bb6c3f3626523bc8b6c700a4c0b9abdf8ed15d4a74d3fdb908bdac7d686a752366e987e6060ae9a67f573537e268ba7d7a04d0cc5c403ac8ec7c336d90c986925ce11563d8bdf0acd0f99a03bf12fd,
-Q = fd3956278851a4e983bc5517193b36b0244c298d0dc70670c4abac12eeb877014eb3cc503b0f54cbbc0d42de3f062f077f0f4ee184877b068da0ca5b579234da0dcede4ed83e2c34ee9db41613e143db45421cf99ee00cc5a69b2a57fd096e7d0088b7607d3e732aa678ed010ffe36f1a717add82a5b4e91abf25c2605e09f35,
-N = bda31632e4fc1efaac8b8fb8ea5d859267da6e293f96a043ca8c2bf68b16b8781e58f6cbfb11f9b99731755be525057f78e24d6a816a95e32b561e18cb292d82d9cb4caf9cc53fd6ff6a666efe605b8b14acfaef6787fd258254d685c1d141386d860a69cda87f33c6514430875176bd5f0e9bbfbd21549f3e125d6b54f397ed828066216ed5d85a06efbccafbb03e4e68d8a5feed8122df5406414de37ba2062d2fd61203ce00f33f003e77eff25d273020f5a72cb80a40e68c16f78c1e1295725da0b3c834b29486c814ba83e7f3e131c7e0c61a8c1d6507b142ea80763b133731dabcb760daeaa93a83b5c311fbabf7a219c9 [...]
-G = bda31632e4fc1efaac8b8fb8ea5d859267da6e293f96a043ca8c2bf68b16b8781e58f6cbfb11f9b99731755be525057f78e24d6a816a95e32b561e18cb292d82d9cb4caf9cc53fd6ff6a666efe605b8b14acfaef6787fd258254d685c1d141386d860a69cda87f33c6514430875176bd5f0e9bbfbd21549f3e125d6b54f397ed828066216ed5d85a06efbccafbb03e4e68d8a5feed8122df5406414de37ba2062d2fd61203ce00f33f003e77eff25d273020f5a72cb80a40e68c16f78c1e1295725da0b3c834b29486c814ba83e7f3e131c7e0c61a8c1d6507b142ea80763b133731dabcb760daeaa93a83b5c311fbabf7a219c9 [...]
-L = bda31632e4fc1efaac8b8fb8ea5d859267da6e293f96a043ca8c2bf68b16b8781e58f6cbfb11f9b99731755be525057f78e24d6a816a95e32b561e18cb292d82d9cb4caf9cc53fd6ff6a666efe605b8b14acfaef6787fd258254d685c1d141386d860a69cda87f33c6514430875176bd5f0e9bbfbd21549f3e125d6b54f397ebc58fc438caa9a6fe4ad06adcabf4d869bcb5f5805119bf25dba0ebf6b25c1c16152800391d052b094af83e43ab714a2bf7563a86720a3cfe9034859b8fcb240f84fff107a581b261df21a2f7f29e4590c91eda4495a605b5ba96c15d4b8a63dbb92f1e8b6dc6278539d51a814582fb33be2d8adb [...]
-M = 41d0a0c3b1cd581cce9bfc1cf1fb21af926358b1a7ae4afee97422cea6819ef6d96895611dac11c7e533b35196cc45eca7e20e7f0cd24a1a4d4abf5917b84b56f02a6b2b91f4cd79b249fe670cd72a91ec8e5ae973bf37580f6f0a32257b60fa074151570fd720b9da8161dea64145c534a146fde14e65a889f8330d8504fc1d020ca6cf6ce528945ee2d8998442cc77ba614e93b241754f698032c5d58c4da53198a29fdbc5b8655830cfb9e36e905ad73ef6169403dad40a5c94c233b1ad7043fafc138c37339a6c7315f8237afe2944db4c9e743d33efd993ea22db0f3f43a8d2c53c8053f11dcc0e82f624e52db1c9aac29f [...]
-RESULT = 0,
-
-TEST = 97,
-P = ea2bfae730255d0956075d61a2db8abf3f170f6ff9a7f5adfa959bd3e94ec1f177fddf38ede0e99a8e37eff54062e995315a1e1bf2612738abe6ac43173cbf9570deea0a7cc9f8575ba4818d122987e6a6c16d23d50424c27854fb2db515496c1a7bd5794a13540e4625af8ab7ef44883d23a93795d2b3661a7a34896113482f,
-Q = ecccd66abc4227217d498d85659c01bd1923e66877aae9a0b0cda32c8db4e61d62726c2f6bfb8d26d264bacc9bdd94a4203aba03126f013eea05dde1e3ee9e806c3ec91c5d502d1308f493a7eadcc73c5d66269e242f771658ab38b9f1d481d811a8a6cba676c207ef16bc117593d849dcaa8efc57bcf38ab0509a091fea1525,
-N = d89bea7b76c4c4e7b672d7559e0b2b4bbf09eff9a92ba22f1964f398950447eb0138d2a5a5aa308c5a24b78f4f31b13dce5a9e32e43fc96c11a113c443b776eb7b688593dc7e3505212b4d03e9ef195efb222d66046de7c793bf09704f6f9550815ee8a344b9fa4391d6fd3f144943b36e2060b55d36bbedc7f789759724a727750844ecac3947053cbe7e47ad4f224f8042b428f83a3e90f10fb67a576172b0a27588143be69f77a892110d86db6b9e7da1bb3f1263e15295d5d4c75c046aa2988eb13f5093b6e7e6d4bc145082c77d86bbb1572c6a902fa62421cd067fdd443efd726aafa8856677fb0bd4efe42425904730a0 [...]
-G = d89bea7b76c4c4e7b672d7559e0b2b4bbf09eff9a92ba22f1964f398950447eb0138d2a5a5aa308c5a24b78f4f31b13dce5a9e32e43fc96c11a113c443b776eb7b688593dc7e3505212b4d03e9ef195efb222d66046de7c793bf09704f6f9550815ee8a344b9fa4391d6fd3f144943b36e2060b55d36bbedc7f789759724a727750844ecac3947053cbe7e47ad4f224f8042b428f83a3e90f10fb67a576172b0a27588143be69f77a892110d86db6b9e7da1bb3f1263e15295d5d4c75c046aa2988eb13f5093b6e7e6d4bc145082c77d86bbb1572c6a902fa62421cd067fdd443efd726aafa8856677fb0bd4efe42425904730a0 [...]
-L = d89bea7b76c4c4e7b672d7559e0b2b4bbf09eff9a92ba22f1964f398950447eb0138d2a5a5aa308c5a24b78f4f31b13dce5a9e32e43fc96c11a113c443b776eb7b688593dc7e3505212b4d03e9ef195efb222d66046de7c793bf09704f6f9550815ee8a344b9fa4391d6fd3f144943b36e2060b55d36bbedc7f789759724a7259e0f739abfd1c2da696d9360a4d795d32807be5086e75f4245ac7779e05dcaa1c8053cabe20a28b647f5664baa9aed652c0ce3200d93b8daffe94aa260d90c8cbb70fe187679917d823ba6df537c785a82941d953336f456d523ede55f96120012d8f625bf1e6f5042bea038c26107537678f86c [...]
-M = 3ff989a78e53c6d3ca5d05f4d2363d8a49fd56427f60841799b10d3a2d7b8a206d2ec98ae0ecc1462c60366325d7e6c29a830983a5cacf68d102f54351a326d396ca45425755e6d92eb49c4c807e056608d585a77e9e2a596d5b0bf05c4c835ef1250d2113e6a251a01746f049d2d4e6982211b58d01ee36e601d9b188e213bafffe19a26f8d976c5ea54cb80d346e1f2b40b8a46a7c70d31831270ba91beca4836f70a73a50abc4ba75d1a540e633e879cbf75b894d265297c42bc11d7e320c865aa84f368544ca6465f9ce9e2e41758ae2d4a40e9e8558b156a48ba5d8e731c4a31d4cec52bf60d007ea23dcfb65316a3289a0 [...]
-RESULT = 0,
-
-TEST = 98,
-P = ee8eaf7cea7b6adba9b8973498ec53decb079e546398d06b5d535adffdf5acd9d64be64bc38c129416ed0ace840d837f830bcb1ff7112f609559db4240f8478a0b7912356c6297a72300d4fd75fe11cb6bc828ffa3a1d636594d80f913b67c329b58fa0803a57c37948e84c21bfc98b8d6cea75344e5b152af8d249f5b94146b,
-Q = f3e6f2a1625c486f4c5dc5c80be518c5a09b3efe264a600fffd3a3f7894c527eef41d029e4a67fabbca24b0d681dcd0e63ce24bc3c09953dd01c78232fa2b3a37439ed703c607b45e9eaa1844ccf5ba6bd281aa888791ad6c2c5d30fec62fb426df367f1a6e54607e1dd9111f70981271908e9a88774a7bbdac09c756270340f,
-N = e348a6de8216e27d61210890ef82f8a0785f69116275a68c39935e6407a38486da9877771dde9f8e0021e2da40083d2339cf8e401c19dc492cc23076b73e9b43b4eb02461f69fe90152a61c47980c25a3456cb23abb4ffd3a5c546edcd17bd3e991cf1609b9af016c20878e2dcaf4728f0a17f3ea7662dd645e5787f6fe0ad4f559af018a4230c00df699b48e80121fe7e244f2877d3756890e6418a82ff71624b434ea55d735eb9c1ced4c8bf5b201b0d2ee71a532a1e875f4ffd43e6894c335a067a29edaeb1f0c3006f09b0e35f40986f13fa3740d89ad62a19d313fcef7a75ebf9098b218c4292ba63b60c71f047680a2749 [...]
-G = e348a6de8216e27d61210890ef82f8a0785f69116275a68c39935e6407a38486da9877771dde9f8e0021e2da40083d2339cf8e401c19dc492cc23076b73e9b43b4eb02461f69fe90152a61c47980c25a3456cb23abb4ffd3a5c546edcd17bd3e991cf1609b9af016c20878e2dcaf4728f0a17f3ea7662dd645e5787f6fe0ad4f559af018a4230c00df699b48e80121fe7e244f2877d3756890e6418a82ff71624b434ea55d735eb9c1ced4c8bf5b201b0d2ee71a532a1e875f4ffd43e6894c335a067a29edaeb1f0c3006f09b0e35f40986f13fa3740d89ad62a19d313fcef7a75ebf9098b218c4292ba63b60c71f047680a2749 [...]
-L = e348a6de8216e27d61210890ef82f8a0785f69116275a68c39935e6407a38486da9877771dde9f8e0021e2da40083d2339cf8e401c19dc492cc23076b73e9b43b4eb02461f69fe90152a61c47980c25a3456cb23abb4ffd3a5c546edcd17bd3e991cf1609b9af016c20878e2dcaf4728f0a17f3ea7662dd645e5787f6fe0ad4d73254dfa574b58b5e9533e4c432fb55a128171d5edf044ed33bf42b2fbbd720985b5982fb540cc79ee3f7eecd32fcf8d2654f73e200f59e8f9d9a9de75ee5105da537a8444eb9f03b614f887ee15f1ce6f7ed0520b25e78dba16c5ca13e378056c9f970fe096ca031c4e4de1f96bd6677832964d [...]
-M = 0f34daa45c21ade5f0d8aabf5e254cca6e2d8104a85bfd7b75a07abc62f4ce9ae0ffffe205d91023b741a678ce032ea0f36ea8d3279c267a02b9a1ecac040c653240903759665c23cb645e449015b6f95f1e3bb6a4bc0f3901523247b8752de6faf84a06db81d69e4e41bf55013072b647267a229057cc76a3f4839dcd7087aaae5cb13ace870bd9a94881d604d798a450c4f9131b7437020a09aa7bc8f44f1d4142acfa29d29b03bc4d0ba04464ddc459aa75522a06622e23179e25c7579f73a822d2e9d474a17cf0b5a21ec890da5b90919b36b8daad2a091724dd9860045dcb183bf90375cf975b4bddf94fb75096f440eeac [...]
-RESULT = 0,
-
-TEST = 99,
-P = c8865987f5bf53a1fc324e5b69c7224aa98587c4b5fb5f8037259f4b1b99b7416b229912f77c17040b541be0d89b5616898d2f25d3c9f2f9dec22ea64252d0c54ed321881a606c7e1221522cf6fecf823e14b190090bddfbb665fa1e16b86e6f46b7aaa3351a2dedde8672591aae2361d60dad4b56f9ac781e6d12bda4145b03,
-Q = dde1e1974874b135583492568ec4aac926de2a48f66f99f0644bb7dc67b69fc38e0a50e0c452e1f290e9f39756eefb65c88081539b981e7206ca9bb9c60f65033901cb2ede803a2ca31c24ccecebce608b7ebbf10622911aa8a312a0895a3777047708b23aeacc340e2d13db973cef733c19c546306f7ab3665a77892dab5199,
-N = adccea13a455a767eff9da07b7150cfd4caf4cac449a265f26fc013ee344a754b9a1c4b66ed0e00f19872f34cf8c29c8e26562a0f0e7847e704d62ada0f739a2ea65129f8d5f79e4ee8944170c45eec6185131cce53fe4b4d749b4247ffa40449b80c6adf466875158b2a4f1310595548241e0d2a4b2a0a99d09f1e6e98575c0c6ae55a7d5914ca820c0a62f50fcbde47a973755467009206bbb8cb0806d275fc5030fcce89c4c2b807ca3a2420ee6f51655a41a5110b5fa492e5b7540f227100f8e8cfd4b5ca2f0fd65c4c772f28dda42e92c2683a111df0a1db7f439e776ae4485db2368f1809e5f74d25e2cdb531f69d75161 [...]
-G = adccea13a455a767eff9da07b7150cfd4caf4cac449a265f26fc013ee344a754b9a1c4b66ed0e00f19872f34cf8c29c8e26562a0f0e7847e704d62ada0f739a2ea65129f8d5f79e4ee8944170c45eec6185131cce53fe4b4d749b4247ffa40449b80c6adf466875158b2a4f1310595548241e0d2a4b2a0a99d09f1e6e98575c0c6ae55a7d5914ca820c0a62f50fcbde47a973755467009206bbb8cb0806d275fc5030fcce89c4c2b807ca3a2420ee6f51655a41a5110b5fa492e5b7540f227100f8e8cfd4b5ca2f0fd65c4c772f28dda42e92c2683a111df0a1db7f439e776ae4485db2368f1809e5f74d25e2cdb531f69d75161 [...]
-L = adccea13a455a767eff9da07b7150cfd4caf4cac449a265f26fc013ee344a754b9a1c4b66ed0e00f19872f34cf8c29c8e26562a0f0e7847e704d62ada0f739a2ea65129f8d5f79e4ee8944170c45eec6185131cce53fe4b4d749b4247ffa40449b80c6adf466875158b2a4f1310595548241e0d2a4b2a0a99d09f1e6e98575bf20461a88975d47d0cc59c57d5870f0d0aa3385479a050fafd04a3588fd1cd05acbd625d92ccd5334e43e942a12849578c447f3a0e1aea48e63a19115388ff14787b9a046527bfc4648284dcd8f07eff77955bea57472a2c8ab14ab3599d4d0c7f95727cdf8ec867c72c14c297af0404a57afded0 [...]
-M = 16ebf36f3a7e94ccd2034c93fed2037cfddd75da0005d3d08d4bd1c54faab5aad2163afa6d81ad1fc4eecaa8bd6548cddbd3eb3427442e473babe8873d4b23efa6d83a493ee7db4533f7acb43551a59c755a4a8b713d477f95c7df02bd90353ba6a9db19bb267c7df3ed50950666f4394db3412501f3034859a51699652c750390cb824fed5c135e79896350115f1b502dee56200f4cc32139ea6cbf76c42cb817c38247cb868f36c2c5238a1e1a7fcb95821584daf526b7fe112583776f0ab28dd743d642812b6ad7534b76c0f65cafb3e9ff82ec2cfd20cee6a9bd947c18ffb6df8a6e73ebb00f51bdbcc6878a482c498e70c9 [...]
-RESULT = 0,
-
+P = bec4370eb56d63302250b75a05572962f75bfb586687be11cb38c7f762282b7db0d79ad33457df79cf1268bb62142a1f7a8cbdc2fbedd9c1d9204cdf6db4b43aed85fab8b3cd8a731369fbab33b77bb096c4cb188f06edc248bca706ca6321215ebc2e2be7e0fc42fbd2359376199e54991f57604c3c0d25c5ded218b669c4e1,
+Q = e4f1865ddd9109fcef77977462cd80cd4db16a521819087db9cfae743091e6743a1e3296de9a3d1a8b98ebd75aa4df8a322fffb02a52f5ec0f564de3000f815aac77ad19055493330225c8061980469b611e1f1f37113337a2e01387fe56bf302f7716d19861e3ba97875b03e7d053a8e06e859b28d20f841b0aa1fd0f1e3057,
+N = aa9abbe195a363bcad04a1a576142a5070900408bb22c19f1cf21265fe2f7ad64e00a301e5b09a589b7310b1f5e805901c8b4b581d58aaca603c9e2efd5f4ddae371eeda7e23c3d7e7aa92c5f657531138ecd32fc97a7262936b04e2463edd3cdb530edf15be2622b33a4931b3b11eddf84ff29d78f17184c3e13056c878840153baaf618dea2d1090ff2b9a1f058b0b6f2cad3c1dd0dd35806d26d277949e1719bc7181bc1a781e4a08ea1ff596823264d062a0ef28c66379e8681706e5c161a300312497b22715e5f3b35f8029f1d7ecd760a90df4279feee951fc86012b4f83387e8628ca8bb5c9ac2e2707fdece28eba38a6 [...]
+G = aa9abbe195a363bcad04a1a576142a5070900408bb22c19f1cf21265fe2f7ad64e00a301e5b09a589b7310b1f5e805901c8b4b581d58aaca603c9e2efd5f4ddae371eeda7e23c3d7e7aa92c5f657531138ecd32fc97a7262936b04e2463edd3cdb530edf15be2622b33a4931b3b11eddf84ff29d78f17184c3e13056c878840153baaf618dea2d1090ff2b9a1f058b0b6f2cad3c1dd0dd35806d26d277949e1719bc7181bc1a781e4a08ea1ff596823264d062a0ef28c66379e8681706e5c161a300312497b22715e5f3b35f8029f1d7ecd760a90df4279feee951fc86012b4f83387e8628ca8bb5c9ac2e2707fdece28eba38a6 [...]
+LP = bec4370eb56d63302250b75a05572962f75bfb586687be11cb38c7f762282b7db0d79ad33457df79cf1268bb62142a1f7a8cbdc2fbedd9c1d9204cdf6db4b43aed85fab8b3cd8a731369fbab33b77bb096c4cb188f06edc248bca706ca6321215ebc2e2be7e0fc42fbd2359376199e54991f57604c3c0d25c5ded218b669c4e0,
+LQ = e4f1865ddd9109fcef77977462cd80cd4db16a521819087db9cfae743091e6743a1e3296de9a3d1a8b98ebd75aa4df8a322fffb02a52f5ec0f564de3000f815aac77ad19055493330225c8061980469b611e1f1f37113337a2e01387fe56bf302f7716d19861e3ba97875b03e7d053a8e06e859b28d20f841b0aa1fd0f1e3056,
+MP = 64a656ba6b1aa76ee7f0cd2c44c907c0c55bae11c5cf24218f07480af783eb26ffa75b43fb606db69f0e3dfa918d8091419c8a8567c67d7d1607219640ccabf1334a358a87bd298c26f03ce501efebda0c192ea3c66e95f33fefb1c448fd8a5356f677c541f9d3e6db699846cd64f84017d6c45f938a35f7773962fa18529177,
+MQ = 6c26b7aad34619b3db5094c82c9e89c55fd36462923cdfeace83118b50ae21126d22f9effe11efa1348e7c958cffac2fcb8d4b38fbd0822e852d87b96eeb9bfc6eeff33a6676911717ed8a8f866eaee96871972ee50ffb099957423c56ed4e3a008a19944861097bf820ac55f08bbef47193def6ecafbde882c14ffe9220f4a5,


[incubator-milagro-crypto-c] 03/10: fix bug where r was generated in Zn instead of Zn2

Posted by sa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sandreoli pushed a commit to branch issue51
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-crypto-c.git

commit 52a2d98c40062b55226b18532e090f5371d1cf3a
Author: samuele-andreoli <sa...@yahoo.it>
AuthorDate: Wed Nov 27 14:17:29 2019 +0000

    fix bug where r was generated in Zn instead of Zn2
---
 src/paillier.c                   | 31 +++++++++----------------------
 test/test_paillier_encrypt.c     |  2 +-
 testVectors/paillier/encrypt.txt | 22 +++++++++++-----------
 3 files changed, 21 insertions(+), 34 deletions(-)

diff --git a/src/paillier.c b/src/paillier.c
index f2040c4..d607a99 100644
--- a/src/paillier.c
+++ b/src/paillier.c
@@ -183,8 +183,6 @@ int PAILLIER_ENCRYPT(csprng *RNG, octet* N, octet* G, octet* PT, octet* CT, octe
     BIG_512_60 n2[FFLEN_4096];
 
     // Random r < n
-    BIG_1024_58 n1[FFLEN_2048];
-    BIG_1024_58 r1[FFLEN_2048];
     BIG_512_60 r[FFLEN_4096];
 
     // plaintext
@@ -199,34 +197,23 @@ int PAILLIER_ENCRYPT(csprng *RNG, octet* N, octet* G, octet* PT, octet* CT, octe
     FF_4096_zero(g, FFLEN_4096);
     FF_4096_fromOctet(g,G,HFLEN_4096);
 
+    FF_4096_zero(pt, FFLEN_4096);
+    FF_4096_fromOctet(pt,PT,HFLEN_4096);
+
+    // n2 = n^2
+    FF_4096_sqr(n2, n, HFLEN_4096);
+    FF_4096_norm(n2, FFLEN_4096);
+
     // In production generate R from RNG
     if (RNG!=NULL)
     {
-        // r < n
-        FF_2048_fromOctet(n1,N,FFLEN_2048);
-        FF_2048_randomnum(r1,n1,RNG,FFLEN_2048);
-
-        // Convert r from FF_2048 to FF_4096
-        char roct[FS_2048] = {0};
-        octet ROCT = {0,FS_2048,roct};
-        FF_2048_toOctet(&ROCT, r1, FFLEN_2048);
-
-        FF_4096_zero(r, FFLEN_4096);
-        FF_4096_fromOctet(r,&ROCT,HFLEN_4096);
+        FF_4096_randomnum(r,n2,RNG,FFLEN_4096);
     }
     else
     {
-        FF_4096_zero(r, FFLEN_4096);
-        FF_4096_fromOctet(r,R,HFLEN_4096);
+        FF_4096_fromOctet(r,R,FFLEN_4096);
     }
 
-    FF_4096_zero(pt, FFLEN_4096);
-    FF_4096_fromOctet(pt,PT,HFLEN_4096);
-
-    // n2 = n^2
-    FF_4096_sqr(n2, n, HFLEN_4096);
-    FF_4096_norm(n2, FFLEN_4096);
-
     // ct = g^pt * r^n mod n2
     FF_4096_bpow2(ct, g, pt, r, n, n2, FFLEN_4096);
 
diff --git a/test/test_paillier_encrypt.c b/test/test_paillier_encrypt.c
index 62bb7e1..da759cb 100644
--- a/test/test_paillier_encrypt.c
+++ b/test/test_paillier_encrypt.c
@@ -75,7 +75,7 @@ int main(int argc, char** argv)
     octet GGOLDEN = {0,sizeof(ggolden),ggolden};
     const char* Lline = "G = ";
 
-    char rgolden[FS_2048]= {0};
+    char rgolden[FS_4096]= {0};
     octet RGOLDEN = {0,sizeof(rgolden),rgolden};
     const char* Rline = "R = ";
 
diff --git a/testVectors/paillier/encrypt.txt b/testVectors/paillier/encrypt.txt
index e67285c..a929e31 100644
--- a/testVectors/paillier/encrypt.txt
+++ b/testVectors/paillier/encrypt.txt
@@ -1,7 +1,7 @@
 TEST = 0,
 N = 59f668761d66864604a05a647ce112452830f0426d02e4141781c7431eb1845c2ed32ea93150fb3b8c17553629edc84fab77080e4200b815f338aaa58fa030a4b562f43d5f24a25d3dcb419ae75e281e37c8a1f0d2f47d733e040fcec7f45e293ef656c91d0045b6b97c64f72977c01ea85214e5847b425ea410a66b59cc2ef6d6fdf6509afe8d48eeb1335f58aaabf42799fe636a2f7653842cea779d0d1dc455c8d99b862ef5e96ae83626baf9d11aeecbf9cca683cb833ceeb09bd7e1bf7e63cf76d1d48d036cbcb05c185f08c72228ecd5ccffd9192443f007a3016249584504f7c0d483fb934365a58fbcf0df13a20d5864 [...]
 G = 59f668761d66864604a05a647ce112452830f0426d02e4141781c7431eb1845c2ed32ea93150fb3b8c17553629edc84fab77080e4200b815f338aaa58fa030a4b562f43d5f24a25d3dcb419ae75e281e37c8a1f0d2f47d733e040fcec7f45e293ef656c91d0045b6b97c64f72977c01ea85214e5847b425ea410a66b59cc2ef6d6fdf6509afe8d48eeb1335f58aaabf42799fe636a2f7653842cea779d0d1dc455c8d99b862ef5e96ae83626baf9d11aeecbf9cca683cb833ceeb09bd7e1bf7e63cf76d1d48d036cbcb05c185f08c72228ecd5ccffd9192443f007a3016249584504f7c0d483fb934365a58fbcf0df13a20d5864 [...]
-R = 0d789a7e48f97b19a6345ef330020d2b463370479e34e501b976a55fea49811ea883e978ae101b677f5bf85059a26da7a5659be2067d4c1a23da3f6180f6772611227152344df20b3fbaab21c5e44f6ecf58caeddf3cbd61c5421d60c1f5a830271d57834e258f9d31a279b691350134714dbc6ed40eddbc6a9b37df729ac919b91a6b6964106b0a901b5b6cc8e2d8cfe2e54bac731ab5db46f19933a3b5a20c794fa716c69323dabca2fe161560ac3daef333fb7d4fce5abbfb24993bdaf049745b4f18e96c00dddd2c667bb7ec54f005b3ea12f7a6cfc43405a91b61b8d63585b29cd0f5cb97e497405e9dee3d8e04e736ca91 [...]
+R = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
 PLAINTEXT = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
 CIPHERTEXT = 17cc5e81709f423f7d8495bd1067e4ca508775400e082f151381f4fe382f7d70b8fe1a33d1b59252c7813bf04c0cf3cd3e8ae66739319bdb152eac1b85fb8ce7e764c7376cebec6d973e0585818c319e0ad23abe9ca45c003bd1affda99ddd09b5af1469d4a526fa00eb9165e16fc9b6dd34f3f7997f39c000ff47424962513e72877cb12260c10eb540dced8b2e604dcadabcea1a150f4813036aab0dabb1658d11bd43faa125c5f1a7635b83c7c5ff110734344292cfba049e15fc4c54128fbeb5b7b0392d5456d578af190da2c5231541992c7b98c33871796b6e7f9fdb6138d352e6338fdf34d661145f8e0a89b [...]
 RESULT = 0,
@@ -9,7 +9,7 @@ RESULT = 0,
 TEST = 1,
 N = c00c772067caf42abcc2a403c269b198c8052169bc7464505809d30c66cad8f97fc2e6872e4762a0e7e62fd421dc9d0f5e949409528d4bc173378fcc7a4f7e44bd7a950fea1e29c01b0b19a51b8528adaa42d5b1cb57c07e0bbdfc7ffe080c69f7649d428dcb29a72e6be50d002f0ffc07fecf440857f38a2d962475869655b9357ab0fc7f8338758bfcb9ccdbe69dbe8a61d62908e4ee6b692a23c650e83a4959619bf965c64eabec783741c5231d5c7a07da5e92a5f4daa372a7011b1b167356e7d5d52b253b5e392ab602aa7376561eab3098f5d0175f6b7bda3718c593caab71fc023c74505bcc1ad92ca5dbb767ba2f737a [...]
 G = c00c772067caf42abcc2a403c269b198c8052169bc7464505809d30c66cad8f97fc2e6872e4762a0e7e62fd421dc9d0f5e949409528d4bc173378fcc7a4f7e44bd7a950fea1e29c01b0b19a51b8528adaa42d5b1cb57c07e0bbdfc7ffe080c69f7649d428dcb29a72e6be50d002f0ffc07fecf440857f38a2d962475869655b9357ab0fc7f8338758bfcb9ccdbe69dbe8a61d62908e4ee6b692a23c650e83a4959619bf965c64eabec783741c5231d5c7a07da5e92a5f4daa372a7011b1b167356e7d5d52b253b5e392ab602aa7376561eab3098f5d0175f6b7bda3718c593caab71fc023c74505bcc1ad92ca5dbb767ba2f737a [...]
-R = b500d1306edcf7fbe21d2f38b04970634ef97e87200a74f4c8f7bdac61befee1bcd398d75849403f09b02417341b51dbd0afc8167d9502b16a9a5648fa2873d40d10f40d62846cc522ff7ae12e0c3b667d7495d0e77b0e7fb4336ac3aa8427039aa2bd8a31b47ffaf276cb94fb97edf20609a812ea8e68fa0215c6f9c8d972b1770e454efb0d033dbce96dff65200898a1b82a416fa588acf6560fcdb2c9fbf5f9bdbe0c91f3401c6aa3db2979814342438e451402687867e2e0aa28a476528d9ab400c20358f7196b43aec8f2d5ead6025667e834021f9b1099427f7e5dcc174a388f8b417d763160cff4ea84c58c8bf50c5236 [...]
+R = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
 PLAINTEXT = 703bb2fb3713fb95d6d4a880765fe0ef57ed6c4bd17ceea07d4e8fd4aa2f16214dcca373a93a61775b76940a67da60e77a22351c9af8b71e63a519d66e561ec8501eef4c8fd7adcd9e12e0f6ed99ae970b617b679012734de1033843d18171faa6db85bac46d166893add7dd20918685da713a3dc27d9dc94942ca313147a4dbb56af0ce8d415c249ae7a233effc60600fa685ee266a315b3505429d18448b5260b4e59cf374644a6ff5629ceac5f7137ebdba05989737e0aa6fb4b5bc604147a5cc23c43e5e0c1e1424567dd34ffe704e3e61c7b3a81f26ad1609896f8ad593414f08fb640bd5b19ce35b1f63d87ec4 [...]
 CIPHERTEXT = 6d267ecd8ae31833eaa38d73636cf032fbd9cf4d97ecf3db12d09224d773c3e4690f98f608c175fbf810956086eb7235b893203aa693bdaaf855e4b63c34025006fe4d032d3ba9dfa0b374b6c6713f0343c887d2f5ed5f632016ed70282600440dc1d496c63a5956d140745082fe2dc6c83d77fc037d36fecde1ce68c8e88bcdfc32729277ab8b88119cfec2ba4362e96dcc7c2af5c11986dd32aab61759fc9a736858ee471317c7e94d70917e948ee0012b52394f4584f5e26160c88259b42f0f01cad5675143fde2e81b46f0d302b7c32591b543d747eec5c192483e0d35211ada8abbf191ce7ec5aa5eacb420d52 [...]
 RESULT = 0,
@@ -17,7 +17,7 @@ RESULT = 0,
 TEST = 2,
 N = b88f2b8924501463af224d3df70407db8b405ecd074e0144bd87ca4fc02b02b6e1778831d1819fe095a804a802d6ece44b5793ea5b65c1a9a00d36d643fa47584c8626fc3f75bbaf120e319da8c6357c9c0608cebbf5281e36a57069069da6874f01e0dcf276e01a49c04e96cff4de890dbb306d017fb774e0842b0b611a2908b5513ecf502a6deacfbed4d0dcd406b3a225bc1a3f54439b963f4d7dae3d7af4e4234a489bb9c5a4bf1331293793805de0c8364663d79b84c3f7b3235ef241a727f65a9f57f74652b90e924651178a4d47cf21db59859fa10a681ddf4c3aad8faa49edef1d379a1f659786b08b15e16200930ec9 [...]
 G = b88f2b8924501463af224d3df70407db8b405ecd074e0144bd87ca4fc02b02b6e1778831d1819fe095a804a802d6ece44b5793ea5b65c1a9a00d36d643fa47584c8626fc3f75bbaf120e319da8c6357c9c0608cebbf5281e36a57069069da6874f01e0dcf276e01a49c04e96cff4de890dbb306d017fb774e0842b0b611a2908b5513ecf502a6deacfbed4d0dcd406b3a225bc1a3f54439b963f4d7dae3d7af4e4234a489bb9c5a4bf1331293793805de0c8364663d79b84c3f7b3235ef241a727f65a9f57f74652b90e924651178a4d47cf21db59859fa10a681ddf4c3aad8faa49edef1d379a1f659786b08b15e16200930ec9 [...]
-R = 08457e1892274e4f5a445fa44ed45d789e60c113baeda9178ecc22f2a1b69c7d1301121eb61e505ccef5f8878d4be3c7f1a6d3aca983a30675a1fcc32749df55fe4e807199b42408035c04088a70512fefc630209a427c174ceb9b96f76e859d05ba8545fff0d416b1f65d5860c57169450dc34749116e9c97300cc7753d83777e93f973f19ce7fb8eb35ea46a656b5f7ee0d59cf19ef18ea6c2ad7563e036f7af4ebcdd48c4eb1ec65ff0c61a28466aed67b94447574a09699fd11ff1f544685e154e3669c117261acdecebcda820adcf404f00b419a8257a121f72e1b934d0f40fb6af7c42f84886b0ccca12c4326a5471bd54 [...]
+R = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
 PLAINTEXT = 1e4591f66d27fa2b4b231a895f1767de67ab3784dc221b6a7fa919b235b56b496d4d0e2f2b07f7d19031c6978eb117545517d3566f14dc8fb94129f1b66c594bef4ddda3f942cfa5fd4d4e33b5f3d2451ad50dd3055e7545fbb4750856777de60dfbf0f2dd790695676ea1db0bb91bfd02dd82b04ef860f9d35ae045699c2f6f6249d413536d5d85689f5bc566083944de48e13e3ea70de5088e71eeb7d610faa20584f71e2b84fbacec93a59775aab4449534f3bf552c82207d0c3f8a6b4c02ff3c1e53e23a2565a8e01c286c15ad36a071ea02b4d6c288634612d7aa1e6ababe78a6c2bfb59e81fed6597cb2c2bb8b [...]
 CIPHERTEXT = 46298b203d6014f97dfef8ba606c4fa264ca27177729b23117db2ee9900aa63d80f69bff90ed31dee7dd430575ad9487dab9954ed21c18134908b7a5c2e74602aeffe1e507aa7cc09fbb470dd41c69e911e1387313368f752d4ffa52b1333bed47e6777da5c0722bd44f58c65ba489e73b87c326e332a33761a9e2f4849e934188e074d5836815e5e2bfb5a8a410394e6bd141508faf6cf2e4b9f32572f7c3c11ca4bc749d1d2e85bf701ecceda41b885fe86e2cb405314bf0af36c8495a3ad0c976e6777e937b4dfe92e0abb0c813cd4211a9e4fa3fc73593fb9a9cc81b38f1ebb0941ab6886dbc5dd7b47a9132098 [...]
 RESULT = 0,
@@ -25,7 +25,7 @@ RESULT = 0,
 TEST = 3,
 N = b393cadc6c0911cf5183b8f372d6131807ba3594ebe307afb90de7151dbb82b50eefe54bcba9c7fe0e3c756474331d14d48d613ebe0b876686ffd8fb1ccddfd137cefdf23c6bd34fe94acab43a4c56e7c72205b6c1f0ba4c0841967841d0f539178fd908d6418aefce048c430243ca73b5d3f418a3f3df1f6060215aa55a0a084103c312dedf5d802a03b107f3eba961a5ef42909154779980af161c101311118b75a3886b83c1faa0b5dbbc16434c1f53d31a8828c6c7cc0e4943414fb0d7572d3dd984980f6402530f66d846c5c79f4940c14b3be5a4b14203763b0b12068be3614fee0d1323d198981bb793bb988527aede5d [...]
 G = b393cadc6c0911cf5183b8f372d6131807ba3594ebe307afb90de7151dbb82b50eefe54bcba9c7fe0e3c756474331d14d48d613ebe0b876686ffd8fb1ccddfd137cefdf23c6bd34fe94acab43a4c56e7c72205b6c1f0ba4c0841967841d0f539178fd908d6418aefce048c430243ca73b5d3f418a3f3df1f6060215aa55a0a084103c312dedf5d802a03b107f3eba961a5ef42909154779980af161c101311118b75a3886b83c1faa0b5dbbc16434c1f53d31a8828c6c7cc0e4943414fb0d7572d3dd984980f6402530f66d846c5c79f4940c14b3be5a4b14203763b0b12068be3614fee0d1323d198981bb793bb988527aede5d [...]
-R = 2f101d68fa27f270fee23d3f91b4924967d67315fbb7884276c8fd22e93ba20942d330efe51760e712f0b106aed2da66d7bddd3023a3eeb41438789d8ef1bc1a835d8e3eaf25637e655de2d27dde76ed6316a54f33609c23b279986e19945db2b3335596d72be6f7a495cf21f3db428afe55612fb5e559394be46771fb5ba01680e7c57d25f4fd988baf686ef4816c65c95d048a2d49d2a3ad63101a703646ff14f241515b43599efac3a2fc747c22367e5386e9ba752d6cffd3b33387ce92f0458465d5aaf21d0d0ee29643a8ede821ba0ef5f663099e0120ea38e3775447bb3147d0ade2c4a756267e23c4f2a9d546c0610bf5 [...]
+R = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
 PLAINTEXT = 17f1ded0f3ae2a32043aa43fba74c2f411f29256893a5ed7b35fd53b6883bd0dedd187d6fc1a0c4938874566169ba056adcb39839be44541ca3919c8fc18d6d556fb66f01ec24478fdbf05154b06516428f13fd35aeaff34aa4daa38b7e3df9936b5eaee54ca606a18f208cd0bfdd1d67f4427e00f993985797633081a32dec42cbaa202cf5452aa02872bd24b459e8a0e621837df94cd276d243c7f05ebbe1c977d70d00de110350f764d62d838a20e1b8c091c33dbc2af28dd4a565c7e412fb9da01446f97ef2255b4f0b7900824678057771ef2c8f6b898e837981a6e8cad53d2f46d023a1f87920d3193b7be44ed [...]
 CIPHERTEXT = 179dd45c96b791abe3f4df3758d36598d1f4979c47f0934d7b9af92a7e1389581b099a07770903c501ff312c27ab21de99c36c3454f3024274537ab25a8940562e1e19a1320a9a44e9bd64ca2e0fdd8147c8ad2d9934054a4d57be0be160669f6a114ba5703bd25c2e34763b51b26acd9ce73bd733021347e29f63788de7adb29c24bd1343622759dc6cf275eb9022ce5997f03ae7a6d9eea411b2eb63bf4f683ebbf677cb46f1f1115f457f3dd300b6a2cf28af7c6d0cd36b385e86533e4b316e7fe089dfa74e51ef8e32e5dbc59908be6cf6f169f93494b79af4c198e1b39c70fde35c1713285d06d20c5e6fae526 [...]
 RESULT = 0,
@@ -33,7 +33,7 @@ RESULT = 0,
 TEST = 4,
 N = c4ef4291a72a5ac2eca50745f2b000fb78b99dcc38637dca985cc29ed078b892399134f213850ea2ade373c9ca0b85f507cc3b5e2ecbabd54209f94328823de58708d69cebef56da0f3b9e8652d3e6bc541b9f243064e532a568d258c3d4562b98a94d20f4a5cf954d7279e41bf14197b67b64e63918714094141ac927e1a88582615c33a8921194bd99513ddbd4711f2febbe19d0bc77a7b85da3be7595de28e36d67ca7656429fe09f3db6ff91af075bb0df46cf9efbfb7e3631dabf1a633c517c178fe582cda63d94e57afee4365ba9f37d0b80dadc6b42a3736962e52d879a19c19bfaca558d18e616e5712fae2dafee6fbe [...]
 G = c4ef4291a72a5ac2eca50745f2b000fb78b99dcc38637dca985cc29ed078b892399134f213850ea2ade373c9ca0b85f507cc3b5e2ecbabd54209f94328823de58708d69cebef56da0f3b9e8652d3e6bc541b9f243064e532a568d258c3d4562b98a94d20f4a5cf954d7279e41bf14197b67b64e63918714094141ac927e1a88582615c33a8921194bd99513ddbd4711f2febbe19d0bc77a7b85da3be7595de28e36d67ca7656429fe09f3db6ff91af075bb0df46cf9efbfb7e3631dabf1a633c517c178fe582cda63d94e57afee4365ba9f37d0b80dadc6b42a3736962e52d879a19c19bfaca558d18e616e5712fae2dafee6fbe [...]
-R = 5662218ee3842056003265bab7cc814e1b726ee99dd3b9ec5c40aa839893bf35fec4f23477e08ae0bce9bb74fc5c06790949d48de3455ae3bb64ecbe9e8af23c284daa9d9324cb6d85c3ae575a02a96ba6b1267f9fd92a372bd252c6ba9c605a0d1411a8f0e0c2c8f41f8890157bf9f6f7a5489c25fb00a7d281da25da2af7c32a95312d34406a07a19701c368ab4eeb7f85cbaafffe992ce726663e217fce03aed09872d8613bddbf20a45c76a61727876862b0dbb731ea39bc19d39e7a5d2b4b03fad5e563744707f06c57b91691db92bee3a89d1a36bf3618b0fa5ec2e169a12e4ba11b39848b4bce6f87c3435d9a7a7c7a98 [...]
+R = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
 PLAINTEXT = 0dd0bb78553bbd96f6abcdeb1597c9c5c96cd9013b580ab890dbc13be6938f589c62bf8be1f5e3184e2fc1c5a6a6a52993d13ae830b6b974cb54cb7606e7972e2481fc5c6cb33f1464cac9f8a6686f5938fa88a6fd514ecf3c63b26056f3d0bd80fb7b44eadfde5471001084767050e6cfbc0f4e5ef3c626c433a687a2749210aa8e6376f92c7c8de68c74a965c1b9c5d2e66dd83ad4d1a8b6378eb6f296734717577acfe41376f78f7b1b559969aeb277bb22762f0f7fd62cd3ce5c7b5003037eb2b3026f24d8cf5b96bc8b4bf9b680aed0d9ca9ae0a82001b75de8fe763e7c97b794c5110c157b0be02ed39349cdf8 [...]
 CIPHERTEXT = 74ad2e38cb3d19b3f2865863bef7dba997728039292029b0f73810b8125a46d6830f19b1fe784e53e4e64a3fa9175086676952f72299043032c421663485a5918c1d3adbaba58da3c27a5b872704e8a5f3c8e715b9904cb5bb29a6ad2f586633e2011f25bfa17dddc595087982deb4ce425dfa6512db0f1ca20cf0f71a3474cd0f85075484fdcc07b74fc6ddee33c37fed72de3b02896d230293a4411bef3524ac1b94a93479222816c7da214df9a5230f8c6acb8751e920dcd438a542c5567bc9e71f33713b4382ac57847e4cdb10c3e441a3ef8917db3d42fe84c53eea637078209f7392251c55958ff1a6c538334 [...]
 RESULT = 0,
@@ -41,7 +41,7 @@ RESULT = 0,
 TEST = 5,
 N = af16ac873ae2d5c326ea813a65e11e1de536ad77a2a233484f30add683ad0eab5492f77231c59685e837ee82cd275edfba3cfaba2cb71541813723608eaab5fae091dca6c3b7b7dcd3374662dc15bd38b30465dcccadf654d628d932953c2ea2a8591012d0cfc6a0c6a3e4ed0c873b0a1a5d2c7d01ea80d7e3b15177a0f23309cbfa3f3ba95d6ac192e22b69a1ce1640cb0e3b504018742578c23f500024ff7c611ec75db05af47a6481ca90061292ab1db3cccbfdafb21fbec45a3ae35205fc8586c610cb9963862886c6fa63acd95ab3d712b24484bbad6b11e2596814bbf3c7783004fd002566ce145d739525737a2a7ba815 [...]
 G = af16ac873ae2d5c326ea813a65e11e1de536ad77a2a233484f30add683ad0eab5492f77231c59685e837ee82cd275edfba3cfaba2cb71541813723608eaab5fae091dca6c3b7b7dcd3374662dc15bd38b30465dcccadf654d628d932953c2ea2a8591012d0cfc6a0c6a3e4ed0c873b0a1a5d2c7d01ea80d7e3b15177a0f23309cbfa3f3ba95d6ac192e22b69a1ce1640cb0e3b504018742578c23f500024ff7c611ec75db05af47a6481ca90061292ab1db3cccbfdafb21fbec45a3ae35205fc8586c610cb9963862886c6fa63acd95ab3d712b24484bbad6b11e2596814bbf3c7783004fd002566ce145d739525737a2a7ba815 [...]
-R = 4bd59f9cefccea9ba99416bc302660705069758b2d9b9d86fc3fe79154dd672251dff3ce8c33da32c550af5ade677fea67d0f41babdba66da6d0a860079b93c1928d53bdeee7d24ae06a2be75f96863d98bdf8012388504bf3a58778d4287d89bee710be545231d8b3922f39c75e7b5eb49f78bb49d685994b6c251dc7b7355c4771e9917b963a6b67154b0d52b129c9a41798036c6357a063dc84cd7aade0ea7fcbab9be3feea730561444e2729a997f29f7cf1e82adb21c77d1d9f78af17118cdd812eb2c20d59698c5836216634f142a26721613ebb645e26d81ff4b56a41b1650c8ce9bf78bf696a3622a9e99e3ffeca2354 [...]
+R = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
 PLAINTEXT = 14ca9f2915b9ef4ef05837931ec6db5d949f9d0c4cbd58bfe184156f05663303d0307fdbb3c5a3ac1cf0cff15d630bd5b224289768f695805c94dd059517b8c2897f07aa96ae4828579665c0fa585b7567a15e2cd3f3dd5963b2681f1b6183649958c27f62e48d9a4e93e5c7af5d3341e0784eacae4c9426c07d5838fdbe687cbb2a568954a6c05e103e16bd940e7f9921859ea2dfedfddd2387ea10e1b86b01190ed69df80d24e2e297e2653648c6873a3dede6f7f742bd959509ab2c0611d3dede615c49668cc7987a29a7d5ccf36c8e9739e4de3ed4db48c0ad37d33b580a7ed86085a5ec8776bbb0c217d3210763 [...]
 CIPHERTEXT = 57ea33919d1c89883e1bc7c7f91e3c31ecbace3021bb5c19c2bd9689b98a077a14e4c930b63d7a67a9d60e1e628321f70d265eeed777b341ab595bfbc90c1d0caf2bfa659f04a9d82dd4e6bbf3aee91fc39753b493321a4b5812cbc5daefa4fe156a3ac362d40af8f3310b72e52e222f95bab34aff443664e4971667dd503eb6c610c589d0d484048f943900a748ee89e4fe06a5c879b76afcd977c9887c59862db7a850d6efe8b258762f0376cc9f8b5b6e870a309a7c1d5470754e2e854fa2786b2ba21bf4391e1b9b976fd574f1a1582177cee7febd6361b678de5d3454b6ef37473a1fbdaf993de233f28537b78 [...]
 RESULT = 0,
@@ -49,7 +49,7 @@ RESULT = 0,
 TEST = 6,
 N = b8cf06d4fbea3d487a92eee3659b4c95e0956c2bbd5ecc0211eb164cbbcb10e69522f95ddf64ede505482f42a47759234bc6e7a164f7156e48f1d9126c4cef37d43cf3e3a71ed05a676a55ada136606da2194d4d1a141a16bb29212aed27aeccb63d00d8367436a66fa52034bd3ac498aa0fea56c9ae53f44a45779a3148203a61c89273cd2b3b15129bac14cf6559c49df8ef83dc4c85f1074a0768385884ab58a8b1313b278beb036112ba56e1a0a709dcfdc7510a3efca2d47f55daa4d50db0c37eefefcf5b9f5b73a48ec42911d0e314560a681945564fab924d10c6b0c0ee1a50beb42d38978da09c2f2e4d317500ec91e3 [...]
 G = b8cf06d4fbea3d487a92eee3659b4c95e0956c2bbd5ecc0211eb164cbbcb10e69522f95ddf64ede505482f42a47759234bc6e7a164f7156e48f1d9126c4cef37d43cf3e3a71ed05a676a55ada136606da2194d4d1a141a16bb29212aed27aeccb63d00d8367436a66fa52034bd3ac498aa0fea56c9ae53f44a45779a3148203a61c89273cd2b3b15129bac14cf6559c49df8ef83dc4c85f1074a0768385884ab58a8b1313b278beb036112ba56e1a0a709dcfdc7510a3efca2d47f55daa4d50db0c37eefefcf5b9f5b73a48ec42911d0e314560a681945564fab924d10c6b0c0ee1a50beb42d38978da09c2f2e4d317500ec91e3 [...]
-R = a9cf6e1919b58840a4072ce635a2dbc2e46a3b765f46ca7620d72bf137ce2b831ac91c4e73c06708bfbc105f60a50937c279292e05a307544a2e9eaa83cf847c8366b3279d12c928910e121978f0c93d7a670e18b65f3cd6936f58f44287419a989c377daa7df92721c82c0f4e92e311c73a29c93cef65200f67d9b9eff962085737a3ff96fa20508e560240e54c6d77a7905c3b3cd13b10e60f4bd00fc21cc75fa72bf0c7175c198bb2250dab3e6a497128c31f99b42243b7b4ed4c862b6b6e8b9bc7f8f9ac1103f4e0e303f44b860d084db4a93eec85c186d5ed0b29f39153b6a827f607c5271d4ad1378c10e3034097a515d2 [...]
+R = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
 PLAINTEXT = 6d4afb41b659124e5fd9e1c78a1aff756f63d29c068c82e3dc712ad16e1afa2b3e68fea890b231a2581a75110a39cc27907291949cba31a6c8c3c8adb02c02ae74a0b867ad99ccc8fa8b5f5c03e95ab375b756e5250da3746dd74fc18c110be3b9463f13b3195cf68314f122296c2c6feff221b720355cf91f7875c875d847f5c63f23550e2bed4de31daea0eb7c16507dc91349bb7749531aeee21f7d254f2fbb559cf30cf948e244343d2b726aa3fb48e63130e35e9f887e1d00420e7a4f1ec2f6a4c729b37d7ef88629edf2a14d60c58ff80860add2510e8618a106034718209f7e2148c5877d44ffc3e50c85edf4 [...]
 CIPHERTEXT = 020795fc41a1267d5ce0e1b60032ad764ac6719b8be8498e1d88f2986fe9c77d86136222790dbc671a1dab50f41f2676ac4e593474b25f4050d717c35dbde5bd39e8d465db751a4ac935b494a5fec2859e9cc67b6a5e79ad14e3458ff5595d74e1c10d7b1cb54bf95467815de852fb1fddd4df812964bdc22be405a28709052b703e52e0665e5f640525b48b44bba90271d83f53511b2f125cb48f985f31c82063443cc89ab35da7fbb00de5a6a119c83a6f3304e83c878a63c46fa802296a8e0aa6b117d115b5edd49bff18bac6106bb811f4df739b68f71c84e93a8930df98409e29ea44c59e62ce2fc5e2e68e149 [...]
 RESULT = 0,
@@ -57,7 +57,7 @@ RESULT = 0,
 TEST = 7,
 N = d62fa41104581916f595817c831a63131aae85f542016402ee1ffd4e73ee681273eb79d2187aa4b5ccb488fca0340f60ec857599e3a24d44ca68e6901a674ac97a1775c98e51c4d5058f616f18a0846127a5f9a8f672b1d79b9edf0e70209b78e03048e35741452523e81c0b45cd78616cb24732f583c40ab32b9b425667c4dd02822a9ae2c0f0aa3240d3f148c7227d3d007684855504c4495d656afbdbae63d98fa69635ab86930bf1e4ea70a85c69966755803916db3b2f048a718828c5d4fa1175dfd711f3fd5fa70791e730859f6555f5a69a2d3a8e25ca02c67ef375cfeef05c83cff8ecf1894de60420ae99dd10e962f4 [...]
 G = d62fa41104581916f595817c831a63131aae85f542016402ee1ffd4e73ee681273eb79d2187aa4b5ccb488fca0340f60ec857599e3a24d44ca68e6901a674ac97a1775c98e51c4d5058f616f18a0846127a5f9a8f672b1d79b9edf0e70209b78e03048e35741452523e81c0b45cd78616cb24732f583c40ab32b9b425667c4dd02822a9ae2c0f0aa3240d3f148c7227d3d007684855504c4495d656afbdbae63d98fa69635ab86930bf1e4ea70a85c69966755803916db3b2f048a718828c5d4fa1175dfd711f3fd5fa70791e730859f6555f5a69a2d3a8e25ca02c67ef375cfeef05c83cff8ecf1894de60420ae99dd10e962f4 [...]
-R = ad4359f2122b712e8dfc0ae350a7357aa82cee22b0a323aa805d87416a7bba1fd1f663fe2d34f79f3d9ae46b7a57f4c2aa214c75bf5687dbac1d117586620b0beef494d407e03239bf54e00de3b37688f2ce9ef9bbe776405638eaffc295e6deffaeaeea7f7031ef349c3a94778d18f343822921638ec6ee0121573306d5984846374eca1736a9a727120dbbbb1a8cea907afa7390de9fbfa6492ab923f3e1e651f57cf58c708f8f61811516dd441f899454999da6ca8cfd402289dbd91b119fb913de2610af1c9c2368402402e4ca25f9ee2960c05076ac2f2e8751e1a6e2ad4432cc0703307e594df35f32db7156d8c65fd45b [...]
+R = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
 PLAINTEXT = d1b3b07d68a2f0947745f4a28f0487c7c86bccbde160c16c65f82a055c85fa67cbbac2e5934d02c0ff68f3d7fc52557ea5cf5436d1b36460739ed46dd89bfad4e5026af49491a3c5b84dfd560ea707517efa870c3e5e137637bd74f3c52e26af3270bfa2e9cf6c5d7d4b05b4317d99fd41ebd58133f03e6a9862f5275915398c7ba2f828a3829480e75e7dff8c811190a6831a0ff6b4899fb5b4f2a82d01dc8ba8f24c7d6c2321919b48b745706170c0ff37390b15eb3fad7b840102c7f85de99f91e2ded75ece345ea2a30eb37083f6276726dc55a4c8ffe4c5f295b260d721fe2d99343844dac27e7504b4ee9c9cf3 [...]
 CIPHERTEXT = 1b8d12e3719703562135922063291fca86608a661dc21ed76fd4a439d6d30a13ca3f87ccc81c9f2a190e49d327bc7e485c7c6ed7dfcbecc4cff143778523a92ce903c1e314cca07603ec049d1c9fd1ba70cb00635354ff70ab9d0ca906a23edd7bf8965b5a44c169014aaa12955a10df9c383763f3140d5264eb0a2615a996b1016901b1c8a2e649f6b9ac1ab96b2378c6d46dec175e78c167f914c6cebd93f23efac8be11fb56f2aa598bff4111f0d05b7594b0ae7c5b7896b6b3f44019fa0fb292cee68ed90a87faa8279192e2f968746c58b7c9c16ccbd0efe41a07cf3f363fcec1e39a2b22378381c7659bb38d2 [...]
 RESULT = 0,
@@ -65,7 +65,7 @@ RESULT = 0,
 TEST = 8,
 N = fd7238b8971db7adff22fbe2e5e225be870f9c08130aeed7a5fd25dd824caf1bc60fcfc67fbd1987aa82eb2e9661ef1c935b8381b9188dd982c5fee402818ea1cf9d79273431ab226759d31009999bd015ef206951a88f0d1a451d54d8ae03bfd27926ee18a2e81857f1f9e125f0c3cd68384906f8ce828dde33732d3bb344df2be8afacaafee3a9cdff2f10c4763ab4a3642adbabbb5ebbac82ced1f045548ed616dd91fa7e312c4a3963a7753615db190e7e6452364b5f558b765c1161abe7a506ab07722b13797a68a5c8acbe2fb3a3d4b09bf83d3dd933d3500ed596fc51c12ffbb42a8d86edf4204d23a01b264939dcf9e1 [...]
 G = fd7238b8971db7adff22fbe2e5e225be870f9c08130aeed7a5fd25dd824caf1bc60fcfc67fbd1987aa82eb2e9661ef1c935b8381b9188dd982c5fee402818ea1cf9d79273431ab226759d31009999bd015ef206951a88f0d1a451d54d8ae03bfd27926ee18a2e81857f1f9e125f0c3cd68384906f8ce828dde33732d3bb344df2be8afacaafee3a9cdff2f10c4763ab4a3642adbabbb5ebbac82ced1f045548ed616dd91fa7e312c4a3963a7753615db190e7e6452364b5f558b765c1161abe7a506ab07722b13797a68a5c8acbe2fb3a3d4b09bf83d3dd933d3500ed596fc51c12ffbb42a8d86edf4204d23a01b264939dcf9e1 [...]
-R = 17c5a990f4cfa2bfd11d136d572603ddf4828d6b2541b609fe30cc8c7fe8febb8e815bd7d7fe6e02b59437584e7498e266602fd6ce090666fadf70504af9874d894de3a6415ffb151fd467f8029ea35dd59a92d8187b73a751cfdbf67fcc108c3f7515189d60b01359618038d4c1b46518cd10296c6b7e81e39b53150758c6f9902f938633e3d8d18da21c0280f9949fefe70e9b670512ba01f6fdce841a4213aaddbc3f3a78bc3ccfc20e7ad32f43f3582d4e87835ed9aad10e70217de0ebfec7c875ebb2dcc529ae55ae07363f951486f4bf07025d5c4769c0098a18985a97c0f6a18c3d30dea487ddd180d22c5b46977fd074 [...]
+R = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
 PLAINTEXT = 65c4fa90056c2b217d8d62826522cd50e57d75c400daeb3c2fda217abfa97a4f17dcb3bf191c8642967335082bd1f99ac23663a8f117f4353b7dba1b2d92f6b2f722b7e3c5958835d165c8b9e9dbfddae221b97ca1e68149ef181cfd0458d9bde71cab2d2eccea62a5eb93e1290fbbb1864fb3a4fab577a31c1551323233ca2fb02fd2bb9622a4d27889882275c4d986669d52d6f013e0ff37d5fe6ee468b90d5a404acc302d3185204706b47e59450202b3cf55a1cd570cd7f48d9b84110a06c009088f6e3a12a81b02688102d5271fc0ee4bc56bb98924d545d92a9d14883f4e032625fedb2fe281d9a2e6119585ec [...]
 CIPHERTEXT = 2abc3baaa287dfc635e06570c4f65dae84329ccfb0009c4598a66fc2d6a9ad5a9c22b14c63eee88149781258116dbc73637664393eb7c83e690597ffc7650043ebcc268140d0b3ecfd24ed1edfa04f7ddf7f873432f479d7ba4709edfd6117b369c922c98a758e44abffdca4c71882ab76c6a64276667b4cda9671bb6ac50e142c89e34d919dbbe7268b45ba0aa272744737ca42d5b4bffde795c42d7815f6b34c190191653cfc05b1c8e5f947aec10c12a74e4c5a1544e2d4c3e3cac83ccf9163beb791d63ad8067ecbad2983fedf850e2cb6f9ea77ce5451b786bb88f0bc49a93bc05cb429d5d034fcfdb329181b5 [...]
 RESULT = 0,
@@ -73,7 +73,7 @@ RESULT = 0,
 TEST = 9,
 N = 9911017a8231f6fbb7cccb71fc1f124057d11b1c7910160b312474866f1d2edc48f8de835bccd57e1d60ee9c056a8cad768c453a989f63dfa9a612cde1f1f578b5fd0056b410ccb93efac2ca8a14161cb18c2f31ffcd50edb618eb439c59be80aa7867d5ae6ca728f6a12e062854ab82edfb93521c5e07b68ce88d154412aa43b09194bcf9fda79fbb52ad9792fe7fe1b9145cc0c0627791eaccded11a39e5e9a05b9eefa5bea58172aad2d3392827b440f3ec45b46a0cacf9f50bd56fd73b3d825950981e600ab7f35d23157602254552db2c44cf0a0de17dd9db35e06ec1018b19b24621e12abb0373da223af9a0956703dda1 [...]
 G = 9911017a8231f6fbb7cccb71fc1f124057d11b1c7910160b312474866f1d2edc48f8de835bccd57e1d60ee9c056a8cad768c453a989f63dfa9a612cde1f1f578b5fd0056b410ccb93efac2ca8a14161cb18c2f31ffcd50edb618eb439c59be80aa7867d5ae6ca728f6a12e062854ab82edfb93521c5e07b68ce88d154412aa43b09194bcf9fda79fbb52ad9792fe7fe1b9145cc0c0627791eaccded11a39e5e9a05b9eefa5bea58172aad2d3392827b440f3ec45b46a0cacf9f50bd56fd73b3d825950981e600ab7f35d23157602254552db2c44cf0a0de17dd9db35e06ec1018b19b24621e12abb0373da223af9a0956703dda1 [...]
-R = 696630d932260f0215012ba7871b5517699c65026075d91b62549b932b07ff5c23525a157fd84a5826e36e95829fe88ff6640fa2e9c366de0a23c1c6f4f28d65ad6e671c98a3d9911dcca26c0e941a127829fb8a8bdb624f037315015434637fa836b6ac1d2fcb9d374f6a108d61ed96d8f31f7ea1c90fa433d760b0680900f3b5189fb3f4424ebcfc7f9c9c9b8b22faadb3c4f3a795fbd985b72aa7dfeb950d322e9a685a944d5334403d7598fc26b8382eaffac6aa71075fa0aaabc4decf5183599e5613677109d24f1d8a63f70cd64a8d34764b45519fb5e6a60dcdc12ba441ba4eaf6defbce843048c736872cbc0d75e6bc1 [...]
+R = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
 PLAINTEXT = 0d9cf84ee9483ef2786fed58ebe1aae60458bce18cd2b8369e8bd1d1fc91e62d9a09c29b556c474f681a828943304d93cf5d9587a0630585632b52496897239b0e77cf038731bb0ecd055f8566137fe70e2f361d1b5d3df28f1fba86a70eec092f39d8afe00f4cceabf43d2474d76d6225f24298f111f21340403a182597c0380ef8045679a5f6dca3414f74296546be747e9d21349f79a5dbfb66122dc8eaa354cde4b7286cc0c48e2ab7823dff59832d70e6e2e6bb5873a13d20a05cc7f1e5fbc02a2ff88dc2044678e718abcf39b421e70bc250d2380dd8752e53a36f8c6a6d98326d442b00523cf4bf78afafaeaa [...]
 CIPHERTEXT = 52606f6f210cbd51d1bf547b2d130de478d044693c22a625aa0b77793c99d462f15d4919b88469c07198121b19b5bf5d614fb7f1fe9500c70c5eb4da56fb9078764419ed51edd724941524ac3b5a48822062004bf78f31f38930d81f6ba4d1e01a31343a66c5bc793580d777c053a28f76f166a54a92c9bf4639cc79352e7ebfabb4f0467c599ca159b1b0515be09d96053602501cff37a132b1c20647ef98442ff8873b9ae9068a5be30dd2eab27657b1880e9e20e53184cfd04fd4eaed301e8f59080b66d7cd2571d826a9e41c5cf5f1797d328545e8947189fcb6801d2a59e53b2e2338e7db266865751f7d60ba1 [...]
 RESULT = 0,
@@ -81,7 +81,7 @@ RESULT = 0,
 TEST = 10,
 N = b4d5d0495ac9a9dd6ce49c649737d3835c62f45c4bcd88a7eaee40cbe5a5713f8d686fdcc890f1b10dcc2e8643f53cf18bc8484d7acbe2127fc5375829d40d11049b9a2263aa314da73159684fda52f5b7905c02ffbb5df9f99aacbc41f558455f43c4aaf54245da213bf584278ee1c47c7f1a65283f28187ecf67913d3fb76e07c0fe2a0af9411abcb609fd7ccfd6d10aac7dc42d223c58600090553b56d4b60c45be5609cefa2792cb7eb3c1661299c9a142ac5b4650112b7e411f3cad81532bc8130803ef28f4c55f2c0fae68052ed1abae7be7b70e727d9732dc503d5404662a9988b14c509047571f6d1c9d97b6819eed42 [...]
 G = b4d5d0495ac9a9dd6ce49c649737d3835c62f45c4bcd88a7eaee40cbe5a5713f8d686fdcc890f1b10dcc2e8643f53cf18bc8484d7acbe2127fc5375829d40d11049b9a2263aa314da73159684fda52f5b7905c02ffbb5df9f99aacbc41f558455f43c4aaf54245da213bf584278ee1c47c7f1a65283f28187ecf67913d3fb76e07c0fe2a0af9411abcb609fd7ccfd6d10aac7dc42d223c58600090553b56d4b60c45be5609cefa2792cb7eb3c1661299c9a142ac5b4650112b7e411f3cad81532bc8130803ef28f4c55f2c0fae68052ed1abae7be7b70e727d9732dc503d5404662a9988b14c509047571f6d1c9d97b6819eed42 [...]
-R = a527d4b5581b0f5ac17b92054c7529111228fc93c3353440900d501378697f9a5d3f297cda14fcb9b2c5488e156dcfa3866304091e513c3e3cb5b2ebad5aecf3f27ea8636ba8c35e5e2e34906865f584d2a76c91fb6edb6fb80d821918943023f8cad6ed3fffb153b9b20ebaecf1a00f505afcfa3ac8896c04310ff8feb70e01b0abfb533806906e9de33fb9df1ab3581844b1953660c8bce6d29be0b334f446c9975e61f4c7fb1ba0cd75c555f9decd61a102a4464842e1d7430402efea936e7da12a6b102300ae0cc16a731ad25b7b225f502fe1cb93afb40384ff671d56011fd8ae5c3f3c2dcc70d80a55591479532db5d75b [...]
+R = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
 PLAINTEXT = b353df2d862f1db5380826e1028e06094be0c568dff963bed3324d2f9cec5aafcb5f057959e0843ac1f72008da23b3511f5ef672370726e70d95981579eb7a9c8391e14536623dee6016dfb2870f1cf46cf14239d76296f6c9a59605ff84b8026471089d8b17232b78413dcb0a4116c6009348bbabe4ba205d350845f0c1f21787a48bf4b28ee88294c16d6c2f8c2917e4d24e2105a7014459a48d4a12d4122a3b02d36d9dbc45e109d0fb85b860609e89f116805ab23df378c07ab5e917da82280f71c6661a8c8d04b249a1a47c9f6e889862ce05fba7b6a58e5573f2b13fa563abddf6cb29cf500df07e03321f6f28 [...]
 CIPHERTEXT = 590b514b409c544ae8aeb5d04fd4d6dcaaf905e133755f777f0fc8796d8248834a7d1c6ab387e821cd21a48b4dcd16401b4cd9b2d811d794f459b6d36fa8104bfb2ab2a14bc4e30d33cb14f729aedb2cc9d2ba74784a5e08fedd788e877dd466b31b8319d12a502213b92357afdf4d7ed3badf596cf7d8b1f706c7432c85dd53ddf6273139fa43262b06875f3e5b33ea3eb5d21d45bf1aa49beaabea70fd8bc0e8d90d9d6c9d0e8d018fa360ff6440d5fa3eb551d889f71a74c4bac8fc91e49a07304d01aad1cda69a4ff9806ec9e8853e2f00f109e77e78e687b52bee587fd09eeaebf4249e582d8f9c186b2b6d603 [...]
 RESULT = 0,


[incubator-milagro-crypto-c] 09/10: add i/o functions for paillier public key

Posted by sa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sandreoli pushed a commit to branch issue51
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-crypto-c.git

commit 294e3c04a10da7f46f66fed28ea066fc26cef6aa
Author: samuele-andreoli <sa...@yahoo.it>
AuthorDate: Wed Dec 4 13:00:30 2019 +0000

    add i/o functions for paillier public key
---
 include/paillier.h               | 14 +++++++++++
 src/paillier.c                   | 17 ++++++++++++++
 test/test_paillier_consistency.c | 50 ++++++++++++++++++++--------------------
 3 files changed, 56 insertions(+), 25 deletions(-)

diff --git a/include/paillier.h b/include/paillier.h
index 94bf087..38b9ef0 100644
--- a/include/paillier.h
+++ b/include/paillier.h
@@ -152,3 +152,17 @@ void PAILLIER_ADD(PAILLIER_public_key *PUB, octet* CT1, octet* CT2, octet* CT);
  *  @param   CT               Ciphertext
  */
 void PAILLIER_MULT(PAILLIER_public_key *PUB, octet* CT1, octet* PT, octet* CT);
+
+/**! \brief Read a public key from its octet representation
+ *
+ * @param   PUB   Public key
+ * @param   PK    Octet representation of the public key
+ */
+void PAILLIER_PK_fromOctet(PAILLIER_public_key *PUB, octet *PK);
+
+/**! \brief Write a public key to an octet
+ *
+ * @param   PK    Destination octet
+ * @param   PUB   Public key
+ */
+void PAILLIER_PK_toOctet(octet *PK, PAILLIER_public_key *PUB);
diff --git a/src/paillier.c b/src/paillier.c
index 15532ab..61534f3 100644
--- a/src/paillier.c
+++ b/src/paillier.c
@@ -410,3 +410,20 @@ void PAILLIER_MULT(PAILLIER_public_key *PUB, octet* CT1, octet* PT, octet* CT)
     // Clean memory
     FF_4096_zero(pt, HFLEN_4096);
 }
+
+void PAILLIER_PK_fromOctet(PAILLIER_public_key *PUB, octet *PK)
+{
+    FF_4096_zero(PUB->n, FFLEN_4096);
+    FF_4096_fromOctet(PUB->n, PK, HFLEN_4096);
+
+    FF_4096_sqr(PUB->n2, PUB->n, HFLEN_4096);
+    FF_4096_norm(PUB->n2, FFLEN_4096);
+
+    FF_4096_copy(PUB->g, PUB->n, FFLEN_4096);
+    FF_4096_inc(PUB->g,1,HFLEN_4096);
+}
+
+void PAILLIER_PK_toOctet(octet *PK, PAILLIER_public_key *PUB)
+{
+    FF_4096_toOctet(PK, PUB->n, HFLEN_4096);
+}
diff --git a/test/test_paillier_consistency.c b/test/test_paillier_consistency.c
index dd8a3c8..f07b11f 100644
--- a/test/test_paillier_consistency.c
+++ b/test/test_paillier_consistency.c
@@ -32,13 +32,25 @@ under the License.
 
 char* PT3GOLDEN_hex = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
 
+void ff_compare(BIG_512_60 *a, BIG_512_60 *b, char *msg, int n)
+{
+    if(FF_4096_comp(a, b, n))
+    {
+        fprintf(stderr, "FAILURE %s\n", msg);
+        exit(EXIT_FAILURE);
+    }
+}
+
 int paillier(csprng *RNG)
 {
     BIG_512_60 zero[FFLEN_4096];
 
     // Key material
     PAILLIER_private_key PRIV;
-    PAILLIER_public_key PUB;
+    PAILLIER_public_key PUB, PUBIN;
+
+    char pub[HFS_4096];
+    octet PUBOCT = {0,HFS_4096,pub};
 
     // Plaintext to encrypt
     char ptin[NTHREADS][FS_2048];
@@ -100,6 +112,14 @@ int paillier(csprng *RNG)
 
     PAILLIER_KEY_PAIR(RNG, NULL, NULL, &PUB, &PRIV);
 
+    // Check public key i/o functions
+    PAILLIER_PK_toOctet(&PUBOCT, &PUB);
+    PAILLIER_PK_fromOctet(&PUBIN, &PUBOCT);
+
+    ff_compare(PUB.n,  PUBIN.n,  "n not correctly loaded",   FFLEN_4096);
+    ff_compare(PUB.g,  PUBIN.g,  "g not correctly loaded",   FFLEN_4096);
+    ff_compare(PUB.n2, PUBIN.n2, "n^2 not correctly loaded", FFLEN_4096);
+
 #ifdef DEBUG
     printf("P: ");
     FF_4096_output(PRIV.p, HFLEN_4096);
@@ -224,30 +244,10 @@ int paillier(csprng *RNG)
     PAILLIER_PRIVATE_KEY_KILL(&PRIV);
 
     FF_4096_zero(zero, FFLEN_4096);
-
-    if(FF_4096_comp(zero, PRIV.p, HFLEN_4096))
-    {
-        fprintf(stderr, "FAILURE p not cleaned from private key\n");
-        exit(EXIT_FAILURE);
-    }
-
-    if(FF_4096_comp(zero, PRIV.q, HFLEN_4096))
-    {
-        fprintf(stderr, "FAILURE q not cleaned from private key\n");
-        exit(EXIT_FAILURE);
-    }
-
-    if(FF_4096_comp(zero, PRIV.l, FFLEN_4096))
-    {
-        fprintf(stderr, "FAILURE l not cleaned from private key\n");
-        exit(EXIT_FAILURE);
-    }
-
-    if(FF_4096_comp(zero, PRIV.m, FFLEN_4096))
-    {
-        fprintf(stderr, "FAILURE m not cleaned from private key\n");
-        exit(EXIT_FAILURE);
-    }
+    ff_compare(zero, PRIV.p, "p not cleaned from private key", HFLEN_4096);
+    ff_compare(zero, PRIV.q, "p not cleaned from private key", HFLEN_4096);
+    ff_compare(zero, PRIV.l, "p not cleaned from private key", HFLEN_4096);
+    ff_compare(zero, PRIV.m, "p not cleaned from private key", FFLEN_4096);
 
     OCT_clear(&CT3);
     OCT_clear(&PT3);


[incubator-milagro-crypto-c] 02/10: rework paillier so ff_8192 is not needed

Posted by sa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sandreoli pushed a commit to branch issue51
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-crypto-c.git

commit 02699cc05380ded365a70b34fdc7932a040cdc8f
Author: samuele-andreoli <sa...@yahoo.it>
AuthorDate: Tue Nov 26 16:49:41 2019 +0000

    rework paillier so ff_8192 is not needed
---
 CMakeLists.txt                    |  2 +-
 benchmark/benchtest_paillier.c.in |  3 --
 cmake/AMCLParameters.cmake        |  1 -
 config.mk                         |  2 +-
 examples/example_paillier.c       |  3 --
 include/ff.h.in                   |  2 +-
 include/paillier.h                | 17 ----------
 src/paillier.c                    | 65 +++++++++++++--------------------------
 test/test_paillier_add.c          |  3 --
 test/test_paillier_consistency.c  |  3 --
 test/test_paillier_decrypt.c      |  3 --
 test/test_paillier_encrypt.c      |  3 --
 test/test_paillier_keygen.c       |  3 --
 test/test_paillier_mult.c         |  3 --
 14 files changed, 25 insertions(+), 88 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index ace56aa..436c36e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -301,7 +301,7 @@ endif()
 ##################################################
 
 if(BUILD_PAILLIER)
-  foreach(level 2048 4096 8192)
+  foreach(level 2048 4096)
     amcl_rsa_field(BD "${level}")
     amcl_rsa_field(TFF "${level}")
 
diff --git a/benchmark/benchtest_paillier.c.in b/benchmark/benchtest_paillier.c.in
index 2cfb594..2e5a2ec 100644
--- a/benchmark/benchtest_paillier.c.in
+++ b/benchmark/benchtest_paillier.c.in
@@ -25,9 +25,6 @@ under the License.
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
-#include "ff_8192.h"
-#include "ff_4096.h"
-#include "ff_2048.h"
 #include "randapi.h"
 #include "paillier.h"
 #include "amcl.h"
diff --git a/cmake/AMCLParameters.cmake b/cmake/AMCLParameters.cmake
index c4333f4..b9f8a93 100644
--- a/cmake/AMCLParameters.cmake
+++ b/cmake/AMCLParameters.cmake
@@ -101,7 +101,6 @@ set(AMCL_RSA_FIELDS          TB   TFF  NB  BASE ML)
 set(AMCL_RSA_64_2048         1024 2048 128 58   2 )
 set(AMCL_RSA_64_3072         384  3072 48  56   8 )
 set(AMCL_RSA_64_4096         512  4096 64  60   8 )
-set(AMCL_RSA_64_8192         512  8192 64  60   16)
 #  (                         TB   TFF  NB  BASE ML)
 set(AMCL_RSA_32_2048         1024 2048 128 28   2 )
 set(AMCL_RSA_32_3072         384  3072 48  28   8 )
diff --git a/config.mk b/config.mk
index 4a12ba5..bdbc4cd 100644
--- a/config.mk
+++ b/config.mk
@@ -7,7 +7,7 @@ WORD_SIZE:=64
 AMCL_CURVE:=ED25519,NIST256,GOLDILOCKS,BLS381
 
 # RSA security level: 2048 3072 4096 (8192 for Paillier)
-AMCL_RSA:=2048,4096,8192
+AMCL_RSA:=2048,4096
 
 # Build type Debug Release Coverage ASan Check CheckFull
 CMAKE_BUILD_TYPE:=Release
diff --git a/examples/example_paillier.c b/examples/example_paillier.c
index 884929f..b293724 100644
--- a/examples/example_paillier.c
+++ b/examples/example_paillier.c
@@ -28,9 +28,6 @@ under the License.
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
-#include "ff_8192.h"
-#include "ff_4096.h"
-#include "ff_2048.h"
 #include "randapi.h"
 #include "paillier.h"
 
diff --git a/include/ff.h.in b/include/ff.h.in
index cb468b2..a3fc4c8 100644
--- a/include/ff.h.in
+++ b/include/ff.h.in
@@ -294,7 +294,7 @@ extern int FF_WWW_prime(BIG_XXX *x,csprng *R,int n);
 extern void FF_WWW_pow2(BIG_XXX *r,BIG_XXX *x,BIG_XXX e,BIG_XXX *y,BIG_XXX f,BIG_XXX *m,int n);
 /**	@brief Calculate r=x^e.y^f mod m for big e and f
  *
-	@param r FF instance, on exit = x^e.y^f mod p
+	@param r FF instance, on exit = x^e.y^f mod m
 	@param x FF instance
 	@param e FF exponent
 	@param y FF instance
diff --git a/include/paillier.h b/include/paillier.h
index 4f9fee8..8072370 100644
--- a/include/paillier.h
+++ b/include/paillier.h
@@ -27,34 +27,17 @@ under the License.
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
-#include "ff_8192.h"
 #include "ff_4096.h"
 #include "ff_2048.h"
 
-#define HASH_TYPE SHA256  /**< Hash function used */
-
 // Field size
-#define FS_8192 MODBYTES_512_60*FFLEN_8192    /**< 8192 field size in bytes */
 #define FS_4096 MODBYTES_512_60*FFLEN_4096    /**< 4096 field size in bytes */
 #define FS_2048 MODBYTES_1024_58*FFLEN_2048   /**< 2048 field size in bytes */
 
 // Half field size
-#define HFS_8192 MODBYTES_512_60*HFLEN_8192   /**< Half 8192 field size in bytes */
 #define HFS_4096 MODBYTES_512_60*HFLEN_4096   /**< Half 4096 field size in bytes */
 #define HFS_2048 MODBYTES_1024_58*HFLEN_2048  /**< Half 2048 field size in bytes */
 
-/*! \brief quotient of y divided by x
- *
- *  <ol>
- *  <li> \f$ z = y / x \f$
- *  </ol>
- *
- *  @param  x       Demominator
- *  @param  y       Numerator
- *  @param  z       Quotient of y divided by x
- *  @return         Returns 0 or else error code
- */
-int FF_4096_divide(BIG_512_60 x[], BIG_512_60 y[], BIG_512_60 z[]);
 
 /*! \brief Generate the key pair
  *
diff --git a/src/paillier.c b/src/paillier.c
index d19776a..f2040c4 100644
--- a/src/paillier.c
+++ b/src/paillier.c
@@ -23,7 +23,6 @@ under the License.
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
-#include "ff_8192.h"
 #include "ff_4096.h"
 #include "ff_2048.h"
 #include "paillier.h"
@@ -256,24 +255,9 @@ int PAILLIER_ENCRYPT(csprng *RNG, octet* N, octet* G, octet* PT, octet* CT, octe
     printf("pt ");
     FF_4096_output(pt,FFLEN_4096);
     printf("\n\n");
-    printf("gpt ");
-    FF_4096_output(gpt,FFLEN_4096);
-    printf("\n\n");
-    printf("rn ");
-    FF_4096_output(rn,FFLEN_4096);
-    printf("\n\n");
-    printf("gpt8 ");
-    FF_8192_output(gpt8,FFLEN_8192);
-    printf("\n\n");
-    printf("rn8 ");
-    FF_8192_output(rn8,FFLEN_8192);
-    printf("\n\n");
     printf("ct ");
-    FF_8192_output(ct,FFLEN_8192);
+    FF_4096_output(ct,FFLEN_4096);
     printf("\n\n");
-    printf("CT2: ");
-    OCT_output(&CT2);
-    printf("\n");
     printf("CT: ");
     OCT_output(CT);
     printf("\n");
@@ -384,60 +368,56 @@ int PAILLIER_DECRYPT(octet* N, octet* L, octet* M, octet* CT, octet* PT)
 int PAILLIER_ADD(octet* N, octet* CT1, octet* CT2, octet* CT)
 {
     // Public key
-    BIG_512_60 n[FFLEN_8192];
+    BIG_512_60 n[HFLEN_4096];
 
     // n2 = n^2
-    BIG_512_60 n2[FFLEN_8192];
+    BIG_512_60 n2[FFLEN_4096];
 
     // ciphertext
-    BIG_512_60 ct1[FFLEN_8192];
-    BIG_512_60 ct2[FFLEN_8192];
-    BIG_512_60 ct[FFLEN_8192];
-
-    FF_8192_zero(n,FFLEN_8192);
-    FF_8192_fromOctet(n,N,FFLEN_8192/4);
-
-    FF_8192_zero(ct1,FFLEN_8192);
-    FF_8192_fromOctet(ct1,CT1,HFLEN_8192);
+    BIG_512_60 ct1[FFLEN_4096];
+    BIG_512_60 ct2[FFLEN_4096];
+    BIG_512_60 ct[2 * FFLEN_4096];
 
-    FF_8192_zero(ct2,FFLEN_8192);
-    FF_8192_fromOctet(ct2,CT2,HFLEN_8192);
+    FF_4096_fromOctet(n,N,HFLEN_4096);
+    FF_4096_fromOctet(ct1,CT1,FFLEN_4096);
+    FF_4096_fromOctet(ct2,CT2,FFLEN_4096);
 
     // n2 = n^2
-    FF_8192_sqr(n2, n, HFLEN_8192);
+    FF_4096_sqr(n2, n, HFLEN_4096);
+    FF_4096_norm(n2, FFLEN_4096);
 
 #ifdef DEBUG
     printf("PAILLIER_ADD ct1 ");
-    FF_8192_output(ct1,FFLEN_8192);
+    FF_4096_output(ct1,FFLEN_4096);
     printf("\n\n");
     printf("PAILLIER_ADD ct2 ");
-    FF_8192_output(ct2,FFLEN_8192);
+    FF_4096_output(ct2,FFLEN_4096);
     printf("\n\n");
 #endif
 
     // ct = ct1 * ct2 mod n^2
-    FF_8192_mul(ct,ct1,ct2,HFLEN_8192);
+    FF_4096_mul(ct,ct1,ct2,FFLEN_4096);
 
 #ifdef DEBUG
     printf("PAILLIER_ADD ct1 * ct2 ");
-    FF_8192_output(ct,FFLEN_8192);
+    FF_4096_output(ct,2 * FFLEN_4096);
     printf("\n\n");
 #endif
 
-    FF_8192_mod(ct,n2,FFLEN_8192);
+    FF_4096_dmod(ct,ct,n2,FFLEN_4096);
 
     // Output
-    FF_8192_toOctet(CT, ct, HFLEN_8192);
+    FF_4096_toOctet(CT, ct, FFLEN_4096);
 
 #ifdef DEBUG
     printf("PAILLIER_ADD n ");
-    FF_8192_output(n,FFLEN_8192);
+    FF_4096_output(n,HFLEN_4096);
     printf("\n\n");
     printf("PAILLIER_ADD ct1 ");
-    FF_8192_output(ct1,FFLEN_8192);
+    FF_4096_output(ct1,FFLEN_4096);
     printf("\n\n");
     printf("PAILLIER_ADD ct2 ");
-    FF_8192_output(ct2,FFLEN_8192);
+    FF_4096_output(ct2,FFLEN_4096);
     printf("\n\n");
 #endif
 
@@ -452,7 +432,7 @@ int PAILLIER_ADD(octet* N, octet* CT1, octet* CT2, octet* CT)
 int PAILLIER_MULT(octet* N, octet* CT1, octet* PT, octet* CT)
 {
     // Public key
-    BIG_512_60 n[FFLEN_4096];
+    BIG_512_60 n[HFLEN_4096];
 
     // n^2
     BIG_512_60 n2[FFLEN_4096];
@@ -467,7 +447,6 @@ int PAILLIER_MULT(octet* N, octet* CT1, octet* PT, octet* CT)
     BIG_512_60 ct[FFLEN_4096];
 
     // Convert n from FF_2048 to FF_4096
-    FF_4096_zero(n, FFLEN_4096);
     FF_4096_fromOctet(n,N,HFLEN_4096);
 
     FF_4096_zero(pt, FFLEN_4096);
@@ -487,7 +466,7 @@ int PAILLIER_MULT(octet* N, octet* CT1, octet* PT, octet* CT)
 
 #ifdef DEBUG
     printf("PAILLIER_MULT n: ");
-    FF_4096_output(n,FFLEN_4096);
+    FF_4096_output(n,HFLEN_4096);
     printf("\n\n");
     printf("PAILLIER_MULT n2: ");
     FF_4096_output(n2,FFLEN_4096);
diff --git a/test/test_paillier_add.c b/test/test_paillier_add.c
index 63f2674..7408547 100644
--- a/test/test_paillier_add.c
+++ b/test/test_paillier_add.c
@@ -22,9 +22,6 @@
 #include <string.h>
 #include <time.h>
 #include "amcl.h"
-#include "ff_8192.h"
-#include "ff_4096.h"
-#include "ff_2048.h"
 #include "paillier.h"
 
 #define LINE_LEN 2000
diff --git a/test/test_paillier_consistency.c b/test/test_paillier_consistency.c
index 01ffa43..b21a1cb 100644
--- a/test/test_paillier_consistency.c
+++ b/test/test_paillier_consistency.c
@@ -26,9 +26,6 @@ under the License.
 #include <string.h>
 #include <time.h>
 #include "randapi.h"
-#include "ff_8192.h"
-#include "ff_4096.h"
-#include "ff_2048.h"
 #include "paillier.h"
 
 #define NTHREADS 2
diff --git a/test/test_paillier_decrypt.c b/test/test_paillier_decrypt.c
index 3d4c490..6f12989 100644
--- a/test/test_paillier_decrypt.c
+++ b/test/test_paillier_decrypt.c
@@ -22,9 +22,6 @@
 #include <string.h>
 #include <time.h>
 #include "amcl.h"
-#include "ff_8192.h"
-#include "ff_4096.h"
-#include "ff_2048.h"
 #include "paillier.h"
 
 #define LINE_LEN 2000
diff --git a/test/test_paillier_encrypt.c b/test/test_paillier_encrypt.c
index 3d4586d..62bb7e1 100644
--- a/test/test_paillier_encrypt.c
+++ b/test/test_paillier_encrypt.c
@@ -22,9 +22,6 @@
 #include <string.h>
 #include <time.h>
 #include "amcl.h"
-#include "ff_8192.h"
-#include "ff_4096.h"
-#include "ff_2048.h"
 #include "paillier.h"
 
 #define LINE_LEN 2000
diff --git a/test/test_paillier_keygen.c b/test/test_paillier_keygen.c
index 334cd10..74c8673 100644
--- a/test/test_paillier_keygen.c
+++ b/test/test_paillier_keygen.c
@@ -22,9 +22,6 @@
 #include <string.h>
 #include <time.h>
 #include "amcl.h"
-#include "ff_8192.h"
-#include "ff_4096.h"
-#include "ff_2048.h"
 #include "randapi.h"
 #include "paillier.h"
 
diff --git a/test/test_paillier_mult.c b/test/test_paillier_mult.c
index 4f832d3..b8b7aae 100644
--- a/test/test_paillier_mult.c
+++ b/test/test_paillier_mult.c
@@ -22,9 +22,6 @@
 #include <string.h>
 #include <time.h>
 #include "amcl.h"
-#include "ff_8192.h"
-#include "ff_4096.h"
-#include "ff_2048.h"
 #include "paillier.h"
 
 #define LINE_LEN 2000


[incubator-milagro-crypto-c] 07/10: use inversion modulo 2^m trick for division

Posted by sa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sandreoli pushed a commit to branch issue51
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-crypto-c.git

commit fc31c16e2941e435d667247fc4e687913b536a4a
Author: samuele-andreoli <sa...@yahoo.it>
AuthorDate: Wed Dec 4 11:28:36 2019 +0000

    use inversion modulo 2^m trick for division
---
 include/ff.h.in              |  7 +++++
 include/paillier.h           | 10 +++----
 src/ff.c.in                  |  2 +-
 src/paillier.c               | 69 ++++++++++----------------------------------
 test/test_paillier_decrypt.c |  2 ++
 test/test_paillier_keygen.c  | 24 ++++++++-------
 6 files changed, 44 insertions(+), 70 deletions(-)

diff --git a/include/ff.h.in b/include/ff.h.in
index 7c50c00..05907b8 100644
--- a/include/ff.h.in
+++ b/include/ff.h.in
@@ -211,6 +211,13 @@ extern void FF_WWW_dmod(BIG_XXX *x,BIG_XXX *y,BIG_XXX *z,int n);
 	@param n size of FF in BIGs
  */
 extern void FF_WWW_invmodp(BIG_XXX *x,BIG_XXX *y,BIG_XXX *z,int n);
+/** @brief Invert an FF mod 2^(n*BIGBITS)
+ *
+ * @param U FF instance, on exit 1/a mod 2^(n*BIGBITS)
+ * @param a FF instance
+ * @param n size of FF in BIGs
+ */
+extern void FF_WWW_invmod2m(BIG_XXX U[],BIG_XXX a[],int n);
 /**	@brief Create an FF from a random number generator
  *
 	@param x FF instance, on exit x is a random number of length n BIGs with most significant bit a 1
diff --git a/include/paillier.h b/include/paillier.h
index 30cae34..94bf087 100644
--- a/include/paillier.h
+++ b/include/paillier.h
@@ -57,9 +57,10 @@ typedef struct{
     BIG_512_60 l[HFLEN_4096]; /**< Private Key (Euler totient of n) */
     BIG_512_60 m[FFLEN_4096]; /**< Precomputed l^(-1) */
 
-    BIG_512_60 p[HFLEN_4096];  /**< Secret Prime */
-    BIG_512_60 q[HFLEN_4096];  /**< Secret Prime */
-    BIG_512_60 n2[FFLEN_4096]; /**< Precomputed n^2 */
+    BIG_512_60 p[HFLEN_4096];     /**< Secret Prime */
+    BIG_512_60 q[HFLEN_4096];     /**< Secret Prime */
+    BIG_512_60 invn[FFLEN_4096];  /**< Precomputed inverse of n */
+    BIG_512_60 n2[FFLEN_4096];    /**< Precomputed n^2 */
 }PAILLIER_private_key;
 
 /*! \brief Generate the key pair
@@ -110,8 +111,7 @@ void PAILLIER_ENCRYPT(csprng *RNG, PAILLIER_public_key *PUB, octet* PT, octet* C
  *  These are the decryption steps.
  *
  *  <ol>
- *  <li> \f$ n2  = n*n \f$
- *  <li> \f$ ctl = ct^l \pmod{n2} - 1 \f$
+ *  <li> \f$ ctl = ct^l \pmod{n^2} - 1 \f$
  *  <li> \f$ ctln = ctl / n \f$
  *  <li> \f$ pt = ctln * m \pmod{n} \f$
  *  </ol>
diff --git a/src/ff.c.in b/src/ff.c.in
index 946388c..a1dfd2d 100644
--- a/src/ff.c.in
+++ b/src/ff.c.in
@@ -635,7 +635,7 @@ static void FF_WWW_redc(BIG_XXX a[],BIG_XXX m[],BIG_XXX ND[],int n)
 }
 
 /* U=1/a mod 2^m - Arazi & Qi */
-static void FF_WWW_invmod2m(BIG_XXX U[],BIG_XXX a[],int n)
+void FF_WWW_invmod2m(BIG_XXX U[],BIG_XXX a[],int n)
 {
     int i;
 #ifndef C99
diff --git a/src/paillier.c b/src/paillier.c
index cacf40d..15532ab 100644
--- a/src/paillier.c
+++ b/src/paillier.c
@@ -27,42 +27,6 @@ under the License.
 #include "ff_2048.h"
 #include "paillier.h"
 
-void FF_4096_divide(BIG_512_60 x[], BIG_512_60 y[], BIG_512_60 z[])
-{
-    BIG_512_60 d[FFLEN_4096];
-    BIG_512_60 q[FFLEN_4096];
-
-    FF_4096_zero(z,FFLEN_4096);
-
-    while(FF_4096_comp(x,y,FFLEN_4096) <= 0)
-    {
-        // (Re)set values for d and q
-        FF_4096_one(q,FFLEN_4096);
-        FF_4096_copy(d,x,FFLEN_4096);
-
-        // Left shift the denominator until bigger that remainder
-        while(FF_4096_comp(d,y,FFLEN_4096) == -1)
-        {
-            FF_4096_shl(d,FFLEN_4096);
-            FF_4096_shl(q,FFLEN_4096);
-        }
-
-        // Right shift the denominator if bigger than the remainder
-        if(FF_4096_comp(d,y,FFLEN_4096) == 1)
-        {
-            FF_4096_shr(q,FFLEN_4096);
-            FF_4096_shr(d,FFLEN_4096);
-        }
-
-        // y = y - d i.e. remainder
-        FF_4096_sub(y,y,d,FFLEN_4096);
-        FF_4096_norm(y,FFLEN_4096);
-
-        // z = z + q i.e. update quotient
-        FF_4096_add(z,z,q,FFLEN_4096);
-    }
-}
-
 /* generate a Paillier key pair */
 void PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, PAILLIER_public_key *PUB, PAILLIER_private_key *PRIV)
 {
@@ -129,7 +93,6 @@ void PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, PAILLIER_public_key *PUB
     FF_2048_inc(p,1,HFLEN_2048);
     FF_2048_inc(q,1,HFLEN_2048);
 
-
     // Output Private Key
     char oct[FS_2048];
     octet OCT = {0,FS_2048, oct};
@@ -161,12 +124,15 @@ void PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, PAILLIER_public_key *PUB
     FF_2048_toOctet(&OCT, m, FFLEN_2048);
     FF_4096_zero(PRIV->m, FFLEN_4096);
     FF_4096_fromOctet(PRIV->m, &OCT, HFLEN_4096);
-    OCT_empty(&OCT);
+    OCT_clear(&OCT);
 
     // Precompute n^2
     FF_4096_sqr(PRIV->n2, PRIV->n, HFLEN_4096);
     FF_4096_norm(PRIV->n2, FFLEN_4096);
 
+    // Precompute n^-1 mod 2^m
+    FF_4096_invmod2m(PRIV->invn, PRIV->n, FFLEN_4096);
+
     // Output Public Key
     FF_4096_copy(PUB->n , PRIV->n , FFLEN_4096);
     FF_4096_copy(PUB->g , PRIV->g , FFLEN_4096);
@@ -280,34 +246,31 @@ void PAILLIER_ENCRYPT(csprng *RNG, PAILLIER_public_key *PUB, octet* PT, octet* C
 /* Paillier decrypt */
 void PAILLIER_DECRYPT(PAILLIER_private_key *PRIV, octet* CT, octet* PT)
 {
-       // Ciphertext
+    // Ciphertext
     BIG_512_60 ct[FFLEN_4096];
 
     // Plaintext
     BIG_512_60 pt[FFLEN_4096];
 
-    // ctl = ct^l mod n^2
-    BIG_512_60 ctl[FFLEN_4096];
-
-    // ctln = ctl / n
-    BIG_512_60 ctln[FFLEN_4096];
+    // ctln = (ct^l - 1) / n
+    BIG_512_60 ctln[2 * FFLEN_4096];
 
     FF_4096_fromOctet(ct,CT,FFLEN_4096);
 
-    // ct^l mod n^2 - 1
-    FF_4096_skpow(ctl,ct,PRIV->l,PRIV->n2,FFLEN_4096,HFLEN_4096);
-    FF_4096_dec(ctl,1,FFLEN_4096);
+    // (ct^l mod n^2) - 1
+    FF_4096_skpow(ct,ct,PRIV->l,PRIV->n2,FFLEN_4096,HFLEN_4096);
+    FF_4096_dec(ct,1,FFLEN_4096);
 
 #ifdef DEBUG
-    printf("PAILLIER_DECRYPT ctl ");
-    FF_4096_output(ctl,FFLEN_4096);
+    printf("PAILLIER_DECRYPT ct^l-1 ");
+    FF_4096_output(ct,FFLEN_4096);
     printf("\n\n");
 #endif
 
-    // ctln = ctl / n
-    // note that ctln fits into a FF_2048 element,
+    // Division using the inverse mod 2^m trick.
+    // ctln actually fits into a FF_2048 element
     // since ctln = ctl/n < n^2 / n = n
-    FF_4096_divide(PRIV->n, ctl, ctln);
+    FF_4096_mul(ctln,ct,PRIV->invn,FFLEN_4096);
 
     // pt = ctln * m mod n
     // the result fits into a FF_4096 element,
@@ -345,7 +308,7 @@ void PAILLIER_DECRYPT(PAILLIER_private_key *PRIV, octet* CT, octet* PT)
 #endif
 
     // Clean memory
-    FF_4096_zero(ctl, FFLEN_4096);
+    FF_4096_zero(ct, FFLEN_4096);
     FF_4096_zero(ctln, FFLEN_4096);
     FF_4096_zero(pt, HFLEN_4096);
 }
diff --git a/test/test_paillier_decrypt.c b/test/test_paillier_decrypt.c
index f60d034..e050f79 100644
--- a/test/test_paillier_decrypt.c
+++ b/test/test_paillier_decrypt.c
@@ -111,6 +111,8 @@ int main(int argc, char** argv)
 
             FF_4096_sqr(PRIV.n2,PRIV.n, HFLEN_4096);
             FF_4096_norm(PRIV.n2, FFLEN_4096);
+
+            FF_4096_invmod2m(PRIV.invn,PRIV.n,FFLEN_4096);
 #ifdef DEBUG
             printf("N = ");
             FF_4096_output(PRIV.n , FFLEN_4096);
diff --git a/test/test_paillier_keygen.c b/test/test_paillier_keygen.c
index fecb25d..e241d38 100644
--- a/test/test_paillier_keygen.c
+++ b/test/test_paillier_keygen.c
@@ -184,6 +184,8 @@ int main(int argc, char** argv)
             FF_4096_sqr(PRIVGOLDEN.n2,PRIVGOLDEN.n, HFLEN_4096);
             FF_4096_norm(PRIVGOLDEN.n2, FFLEN_4096);
 
+            FF_4096_invmod2m(PRIVGOLDEN.invn, PRIVGOLDEN.n, FFLEN_4096);
+
             FF_4096_copy(PUBGOLDEN.n, PRIVGOLDEN.n, HFLEN_4096);
             FF_4096_copy(PUBGOLDEN.n2, PRIVGOLDEN.n2, FFLEN_4096);
         }
@@ -255,16 +257,17 @@ int main(int argc, char** argv)
             printf("\n\n");
 #endif
 
-            compare_FF("PRIV.p" , "PRIVGOLDEN.p" , PRIV.p , PRIVGOLDEN.p , HFLEN_4096);
-            compare_FF("PRIV.q" , "PRIVGOLDEN.q" , PRIV.q , PRIVGOLDEN.q , HFLEN_4096);
-            compare_FF("PRIV.l" , "PRIVGOLDEN.l" , PRIV.l , PRIVGOLDEN.l , FFLEN_4096);
-            compare_FF("PRIV.m" , "PRIVGOLDEN.m" , PRIV.m , PRIVGOLDEN.m , FFLEN_4096);
-            compare_FF("PRIV.n" , "PRIVGOLDEN.n" , PRIV.n , PRIVGOLDEN.n , FFLEN_4096);
-            compare_FF("PRIV.g" , "PRIVGOLDEN.g" , PRIV.g , PRIVGOLDEN.g , FFLEN_4096);
-            compare_FF("PRIV.n2", "PRIVGOLDEN.n2", PRIV.n2, PRIVGOLDEN.n2, FFLEN_4096);
-
-            compare_FF("PUB.n" , "PUBGOLDEN.n" , PUB.n , PUBGOLDEN.n , FFLEN_4096);
-            compare_FF("PUB.g" , "PUBGOLDEN.g" , PUB.g , PUBGOLDEN.g , FFLEN_4096);
+            compare_FF("PRIV.p",    "PRIVGOLDEN.p",    PRIV.p,    PRIVGOLDEN.p,    HFLEN_4096);
+            compare_FF("PRIV.q",    "PRIVGOLDEN.q",    PRIV.q,    PRIVGOLDEN.q,    HFLEN_4096);
+            compare_FF("PRIV.l",    "PRIVGOLDEN.l",    PRIV.l,    PRIVGOLDEN.l,    FFLEN_4096);
+            compare_FF("PRIV.m",    "PRIVGOLDEN.m",    PRIV.m,    PRIVGOLDEN.m,    FFLEN_4096);
+            compare_FF("PRIV.n",    "PRIVGOLDEN.n",    PRIV.n,    PRIVGOLDEN.n,    FFLEN_4096);
+            compare_FF("PRIV.g",    "PRIVGOLDEN.g",    PRIV.g,    PRIVGOLDEN.g,    FFLEN_4096);
+            compare_FF("PRIV.invn", "PRIVGOLDEN.invn", PRIV.invn, PRIVGOLDEN.invn, FFLEN_4096);
+            compare_FF("PRIV.n2",   "PRIVGOLDEN.n2",   PRIV.n2,   PRIVGOLDEN.n2,   FFLEN_4096);
+
+            compare_FF("PUB.n",  "PUBGOLDEN.n",  PUB.n,  PUBGOLDEN.n,  FFLEN_4096);
+            compare_FF("PUB.g",  "PUBGOLDEN.g",  PUB.g,  PUBGOLDEN.g,  FFLEN_4096);
             compare_FF("PUB.n2", "PUBGOLDEN.n2", PUB.n2, PUBGOLDEN.n2, FFLEN_4096);
 
             // Clean keys for next test vector
@@ -281,4 +284,3 @@ int main(int argc, char** argv)
     printf("SUCCESS TEST PAILLIER KEYGEN PASSED\n");
     exit(EXIT_SUCCESS);
 }
-


[incubator-milagro-crypto-c] 06/10: ff - allow specification of exponent size in skpow

Posted by sa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sandreoli pushed a commit to branch issue51
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-crypto-c.git

commit aee0051a6dd8ea278527f1be725290242da45ea7
Author: samuele-andreoli <sa...@yahoo.it>
AuthorDate: Thu Nov 28 15:49:08 2019 +0000

    ff - allow specification of exponent size in skpow
---
 include/ff.h.in              | 69 +++++++++++++++++++-------------------------
 include/paillier.h           |  2 +-
 src/ff.c.in                  | 46 +++--------------------------
 src/paillier.c               | 26 +++++++----------
 src/rsa.c.in                 |  4 +--
 test/test_paillier_decrypt.c |  3 +-
 6 files changed, 49 insertions(+), 101 deletions(-)

diff --git a/include/ff.h.in b/include/ff.h.in
index dd48cc3..7c50c00 100644
--- a/include/ff.h.in
+++ b/include/ff.h.in
@@ -181,11 +181,11 @@ extern void FF_WWW_mul(BIG_XXX *x,BIG_XXX *y,BIG_XXX *z,int n);
 /**	@brief Reduce FF mod a modulus
  *
 	This is slow
-	@param x FF instance to be reduced mod m - on exit = x mod m
-	@param m FF modulus
+	@param x FF instance to be reduced mod p - on exit = x mod p
+	@param p FF modulus
 	@param n size of FF in BIGs
  */
-extern void FF_WWW_mod(BIG_XXX *x,BIG_XXX *m,int n);
+extern void FF_WWW_mod(BIG_XXX *x,BIG_XXX *p,int n);
 /**	@brief Square an FF
  *
 	Uses Karatsuba method internally
@@ -226,55 +226,57 @@ extern void FF_WWW_random(BIG_XXX *x,csprng *R,int n);
 	@param n size of FF in BIGs
  */
 extern void FF_WWW_randomnum(BIG_XXX *x,BIG_XXX *y,csprng *R,int n);
-/**	@brief Calculate r=x^e mod m, side channel resistant
+/**	@brief Calculate r=x^e mod p, side channel resistant
  *
 	@param r FF instance, on exit = x^e mod p
 	@param x FF instance
 	@param e FF exponent
-	@param m FF modulus
+	@param p FF modulus
 	@param n size of FF in BIGs
+	@param en size of the exponent in BIGs
  */
-extern void FF_WWW_skpow(BIG_XXX *r,BIG_XXX *x,BIG_XXX * e,BIG_XXX *m,int n);
-/**	@brief Calculate r=x^e mod m, side channel resistant
+extern void FF_WWW_skpow(BIG_XXX *r,BIG_XXX *x,BIG_XXX * e,BIG_XXX *p,int n, int en);
+/**	@brief Calculate r=x^e mod p, side channel resistant
  *
 	For short BIG exponent
 	@param r FF instance, on exit = x^e mod p
 	@param x FF instance
 	@param e BIG exponent
-	@param m FF modulus
+	@param p FF modulus
 	@param n size of FF in BIGs
  */
-extern void FF_WWW_skspow(BIG_XXX *r,BIG_XXX *x,BIG_XXX e,BIG_XXX *m,int n);
-/**	@brief Calculate r=x^e.y^f mod m for big e and f, side channel resistant
+extern void FF_WWW_skspow(BIG_XXX *r,BIG_XXX *x,BIG_XXX e,BIG_XXX *p,int n);
+/**	@brief Calculate r=x^e.y^f mod p for big e and f, side channel resistant
  *
-	@param r FF instance, on exit = x^e.y^f mod m
-	@param x FF instance
-	@param e FF exponent
-	@param y FF instance
-	@param f FF exponent
-	@param m FF modulus
-	@param n size of FF in BIGs
+	@param r  FF instance, on exit = x^e.y^f mod p
+	@param x  FF instance
+	@param e  FF exponent
+	@param y  FF instance
+	@param f  FF exponent
+	@param p  FF modulus
+	@param n  size of FF in BIGs
+	@param en size of the exponent in BIGs
  */
-extern void FF_WWW_skpow2(BIG_XXX r[],BIG_XXX x[], BIG_XXX e[], BIG_XXX y[], BIG_XXX f[], BIG_XXX m[], int n);
-/**	@brief Calculate r=x^e mod m
+extern void FF_WWW_skpow2(BIG_XXX *r,BIG_XXX *x, BIG_XXX *e, BIG_XXX *y, BIG_XXX *f, BIG_XXX *p, int n, int en);
+/**	@brief Calculate r=x^e mod p
  *
 	For very short integer exponent
-	@param r FF instance, on exit = x^e mod p
-	@param x FF instance
-	@param e integer exponent
-	@param m FF modulus
-	@param n size of FF in BIGs
+	@param r  FF instance, on exit = x^e mod p
+	@param x  FF instance
+	@param e  integer exponent
+	@param p  FF modulus
+	@param n  size of FF in BIGs
  */
-extern void FF_WWW_power(BIG_XXX *r,BIG_XXX *x,int e,BIG_XXX *m,int n);
-/**	@brief Calculate r=x^e mod m
+extern void FF_WWW_power(BIG_XXX *r,BIG_XXX *x,int e,BIG_XXX *p,int n);
+/**	@brief Calculate r=x^e mod p
  *
 	@param r FF instance, on exit = x^e mod p
 	@param x FF instance
 	@param e FF exponent
-	@param m FF modulus
+	@param p FF modulus
 	@param n size of FF in BIGs
  */
-extern void FF_WWW_pow(BIG_XXX *r,BIG_XXX *x,BIG_XXX *e,BIG_XXX *m,int n);
+extern void FF_WWW_pow(BIG_XXX *r,BIG_XXX *x,BIG_XXX *e,BIG_XXX *p,int n);
 /**	@brief Test if an FF has factor in common with integer s
  *
 	@param x FF instance to be tested
@@ -292,16 +294,5 @@ extern int FF_WWW_cfactor(BIG_XXX *x,sign32 s,int n);
 	@return 1 if x is (almost certainly) prime, else return 0
  */
 extern int FF_WWW_prime(BIG_XXX *x,csprng *R,int n);
-/**	@brief Calculate r=x^e.y^f mod m
- *
-	@param r FF instance, on exit = x^e.y^f mod p
-	@param x FF instance
-	@param e BIG exponent
-	@param y FF instance
-	@param f BIG exponent
-	@param m FF modulus
-	@param n size of FF in BIGs
- */
-extern void FF_WWW_pow2(BIG_XXX *r,BIG_XXX *x,BIG_XXX e,BIG_XXX *y,BIG_XXX f,BIG_XXX *m,int n);
 
 #endif
diff --git a/include/paillier.h b/include/paillier.h
index 7ba9592..30cae34 100644
--- a/include/paillier.h
+++ b/include/paillier.h
@@ -54,7 +54,7 @@ typedef struct{
 typedef struct{
     BIG_512_60 n[FFLEN_4096]; /**< Paillier Modulus - n = pq*/
     BIG_512_60 g[FFLEN_4096]; /**< Public Base - n+1 */
-    BIG_512_60 l[FFLEN_4096]; /**< Private Key (Euler totient of n) */
+    BIG_512_60 l[HFLEN_4096]; /**< Private Key (Euler totient of n) */
     BIG_512_60 m[FFLEN_4096]; /**< Precomputed l^(-1) */
 
     BIG_512_60 p[HFLEN_4096];  /**< Secret Prime */
diff --git a/src/ff.c.in b/src/ff.c.in
index 31347c7..946388c 100644
--- a/src/ff.c.in
+++ b/src/ff.c.in
@@ -767,7 +767,7 @@ static void FF_WWW_modsqr(BIG_XXX z[],BIG_XXX x[],BIG_XXX p[],BIG_XXX ND[],int n
 }
 
 /* r=x^e mod p using side-channel resistant Montgomery Ladder, for large e */
-void FF_WWW_skpow(BIG_XXX r[],BIG_XXX x[],BIG_XXX e[],BIG_XXX p[],int n)
+void FF_WWW_skpow(BIG_XXX r[],BIG_XXX x[],BIG_XXX e[],BIG_XXX p[],int n, int en)
 {
     int i,b;
 #ifndef C99
@@ -782,7 +782,7 @@ void FF_WWW_skpow(BIG_XXX r[],BIG_XXX x[],BIG_XXX e[],BIG_XXX p[],int n)
     FF_WWW_nres(R0,p,n);
     FF_WWW_nres(R1,p,n);
 
-    for (i=8*MODBYTES_XXX*n-1; i>=0; i--)
+    for (i=8*MODBYTES_XXX*en-1; i>=0; i--)
     {
         b=BIG_XXX_bit(e[i/BIGBITS_XXX],i%BIGBITS_XXX);
         FF_WWW_modmul(r,R0,R1,p,ND,n);
@@ -825,7 +825,7 @@ void FF_WWW_skspow(BIG_XXX r[],BIG_XXX x[],BIG_XXX e,BIG_XXX p[],int n)
 }
 
 /* r=x^e*y^f mod p - side channel resistant */
-void FF_WWW_skpow2(BIG_XXX r[],BIG_XXX x[], BIG_XXX e[], BIG_XXX y[], BIG_XXX f[], BIG_XXX p[], int n) {
+void FF_WWW_skpow2(BIG_XXX r[],BIG_XXX x[], BIG_XXX e[], BIG_XXX y[], BIG_XXX f[], BIG_XXX p[], int n, int en) {
     int i,eb,fb;
 #ifndef C99
     BIG_XXX xn[FFLEN_WWW],yn[FFLEN_WWW],xy[FFLEN_WWW],w[FFLEN_WWW],ND[FFLEN_WWW];
@@ -845,7 +845,7 @@ void FF_WWW_skpow2(BIG_XXX r[],BIG_XXX x[], BIG_XXX e[], BIG_XXX y[], BIG_XXX f[
     FF_WWW_one(r,n);
     FF_WWW_nres(r,p,n);
 
-    for (i=8*MODBYTES_XXX*n-1; i>=0; i--)
+    for (i=8*MODBYTES_XXX*en-1; i>=0; i--)
     {
         eb=BIG_XXX_bit(e[i/BIGBITS_XXX],i%BIGBITS_XXX);
         fb=BIG_XXX_bit(f[i/BIGBITS_XXX],i%BIGBITS_XXX);
@@ -924,44 +924,6 @@ void FF_WWW_pow(BIG_XXX r[],BIG_XXX x[],BIG_XXX e[],BIG_XXX p[],int n)
     FF_WWW_redc(r,p,ND,n);
 }
 
-/* double exponentiation r=x^e.y^f mod p */
-void FF_WWW_pow2(BIG_XXX r[],BIG_XXX x[],BIG_XXX e,BIG_XXX y[],BIG_XXX f,BIG_XXX p[],int n)
-{
-    int i,eb,fb;
-#ifndef C99
-    BIG_XXX xn[FFLEN_WWW],yn[FFLEN_WWW],xy[FFLEN_WWW],ND[FFLEN_WWW];
-#else
-    BIG_XXX xn[n],yn[n],xy[n],ND[n];
-#endif
-
-    FF_WWW_invmod2m(ND,p,n);
-
-    FF_WWW_copy(xn,x,n);
-    FF_WWW_copy(yn,y,n);
-    FF_WWW_nres(xn,p,n);
-    FF_WWW_nres(yn,p,n);
-    FF_WWW_modmul(xy,xn,yn,p,ND,n);
-    FF_WWW_one(r,n);
-    FF_WWW_nres(r,p,n);
-
-    for (i=8*MODBYTES_XXX-1; i>=0; i--)
-    {
-        eb=BIG_XXX_bit(e,i);
-        fb=BIG_XXX_bit(f,i);
-        FF_WWW_modsqr(r,r,p,ND,n);
-        if (eb==1)
-        {
-            if (fb==1) FF_WWW_modmul(r,r,xy,p,ND,n);
-            else FF_WWW_modmul(r,r,xn,p,ND,n);
-        }
-        else
-        {
-            if (fb==1) FF_WWW_modmul(r,r,yn,p,ND,n);
-        }
-    }
-    FF_WWW_redc(r,p,ND,n);
-}
-
 static sign32 igcd(sign32 x,sign32 y)
 {
     /* integer GCD, returns GCD of x and y */
diff --git a/src/paillier.c b/src/paillier.c
index aa3a5c5..cacf40d 100644
--- a/src/paillier.c
+++ b/src/paillier.c
@@ -155,7 +155,6 @@ void PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, PAILLIER_public_key *PUB
     OCT_empty(&OCT);
 
     FF_2048_toOctet(&OCT, l, FFLEN_2048);
-    FF_4096_zero(PRIV->l, FFLEN_4096);
     FF_4096_fromOctet(PRIV->l, &OCT, HFLEN_4096);
     OCT_empty(&OCT);
 
@@ -206,10 +205,10 @@ void PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, PAILLIER_public_key *PUB
 /* Clean secrets from private key */
 void PAILLIER_PRIVATE_KEY_KILL(PAILLIER_private_key *PRIV)
 {
-    FF_4096_zero(PRIV->l, FFLEN_4096);
+    FF_4096_zero(PRIV->l, HFLEN_4096);
     FF_4096_zero(PRIV->m, FFLEN_4096);
-    FF_4096_zero(PRIV->p, HFLEN_4096/2);
-    FF_4096_zero(PRIV->q, HFLEN_4096/2);
+    FF_4096_zero(PRIV->p, HFLEN_4096);
+    FF_4096_zero(PRIV->q, HFLEN_4096);
 }
 
 /* Paillier encrypt
@@ -221,12 +220,11 @@ void PAILLIER_ENCRYPT(csprng *RNG, PAILLIER_public_key *PUB, octet* PT, octet* C
     BIG_512_60 r[FFLEN_4096];
 
     // plaintext
-    BIG_512_60 pt[FFLEN_4096];
+    BIG_512_60 pt[HFLEN_4096];
 
     // ciphertext
     BIG_512_60 ct[FFLEN_4096];
 
-    FF_4096_zero(pt, FFLEN_4096);
     FF_4096_fromOctet(pt,PT,HFLEN_4096);
 
     // In production generate R from RNG
@@ -240,7 +238,7 @@ void PAILLIER_ENCRYPT(csprng *RNG, PAILLIER_public_key *PUB, octet* PT, octet* C
     }
 
     // ct = g^pt * r^n mod n2
-    FF_4096_skpow2(ct, PUB->g, pt, r, PUB->n, PUB->n2, FFLEN_4096);
+    FF_4096_skpow2(ct, PUB->g, pt, r, PUB->n, PUB->n2, FFLEN_4096, HFLEN_4096);
 
     // Output
     FF_4096_toOctet(CT, ct, FFLEN_4096);
@@ -265,7 +263,7 @@ void PAILLIER_ENCRYPT(csprng *RNG, PAILLIER_public_key *PUB, octet* PT, octet* C
     FF_4096_output(r,FFLEN_4096);
     printf("\n\n");
     printf("pt ");
-    FF_4096_output(pt,FFLEN_4096);
+    FF_4096_output(pt,HFLEN_4096);
     printf("\n\n");
     printf("ct ");
     FF_4096_output(ct,FFLEN_4096);
@@ -297,7 +295,7 @@ void PAILLIER_DECRYPT(PAILLIER_private_key *PRIV, octet* CT, octet* PT)
     FF_4096_fromOctet(ct,CT,FFLEN_4096);
 
     // ct^l mod n^2 - 1
-    FF_4096_skpow(ctl,ct,PRIV->l,PRIV->n2,FFLEN_4096);
+    FF_4096_skpow(ctl,ct,PRIV->l,PRIV->n2,FFLEN_4096,HFLEN_4096);
     FF_4096_dec(ctl,1,FFLEN_4096);
 
 #ifdef DEBUG
@@ -330,7 +328,7 @@ void PAILLIER_DECRYPT(PAILLIER_private_key *PRIV, octet* CT, octet* PT)
     FF_4096_output(PRIV->n,FFLEN_4096);
     printf("\n\n");
     printf("PAILLIER_DECRYPT l ");
-    FF_4096_output(PRIV->l,FFLEN_4096);
+    FF_4096_output(PRIV->l,HFLEN_4096);
     printf("\n\n");
     printf("PAILLIER_DECRYPT m ");
     FF_4096_output(PRIV->m,FFLEN_4096);
@@ -414,18 +412,16 @@ void PAILLIER_MULT(PAILLIER_public_key *PUB, octet* CT1, octet* PT, octet* CT)
     BIG_512_60 ct1[FFLEN_4096];
 
     // Plaintext
-    BIG_512_60 pt[FFLEN_4096];
+    BIG_512_60 pt[HFLEN_4096];
 
     // Ciphertext output. ct = ct1 ^ pt mod n^2
     BIG_512_60 ct[FFLEN_4096];
 
-    FF_4096_zero(pt, FFLEN_4096);
     FF_4096_fromOctet(pt,PT,HFLEN_4096);
-
     FF_4096_fromOctet(ct1,CT1,FFLEN_4096);
 
     // ct1^pt mod n^2
-    FF_4096_skpow(ct,ct1,pt,PUB->n2,FFLEN_4096);
+    FF_4096_skpow(ct,ct1,pt,PUB->n2,FFLEN_4096, HFLEN_4096);
 
     // output
     FF_4096_toOctet(CT, ct, FFLEN_4096);
@@ -441,7 +437,7 @@ void PAILLIER_MULT(PAILLIER_public_key *PUB, octet* CT1, octet* PT, octet* CT)
     FF_4096_output(ct1,FFLEN_4096);
     printf("\n\n");
     printf("PAILLIER_MULT pt: ");
-    FF_4096_output(pt,FFLEN_4096);
+    FF_4096_output(pt,HFLEN_4096);
     printf("\n\n");
     printf("PAILLIER_MULT ct: ");
     FF_4096_output(ct,FFLEN_4096);
diff --git a/src/rsa.c.in b/src/rsa.c.in
index bbe41b2..ba996bd 100644
--- a/src/rsa.c.in
+++ b/src/rsa.c.in
@@ -136,8 +136,8 @@ void RSA_WWW_DECRYPT(rsa_private_key_WWW *PRIV,octet *G,octet *F)
     FF_WWW_dmod(jp,g,PRIV->p,HFLEN_WWW);
     FF_WWW_dmod(jq,g,PRIV->q,HFLEN_WWW);
 
-    FF_WWW_skpow(jp,jp,PRIV->dp,PRIV->p,HFLEN_WWW);
-    FF_WWW_skpow(jq,jq,PRIV->dq,PRIV->q,HFLEN_WWW);
+    FF_WWW_skpow(jp,jp,PRIV->dp,PRIV->p,HFLEN_WWW,HFLEN_WWW);
+    FF_WWW_skpow(jq,jq,PRIV->dq,PRIV->q,HFLEN_WWW,HFLEN_WWW);
 
 
     FF_WWW_zero(g,FFLEN_WWW);
diff --git a/test/test_paillier_decrypt.c b/test/test_paillier_decrypt.c
index 855cb14..f60d034 100644
--- a/test/test_paillier_decrypt.c
+++ b/test/test_paillier_decrypt.c
@@ -123,11 +123,10 @@ int main(int argc, char** argv)
         {
             len = strlen(Lline);
             linePtr = line + len;
-            FF_4096_zero(PRIV.l, FFLEN_4096);
             read_FF_4096(PRIV.l, linePtr, HFLEN_4096);
 #ifdef DEBUG
             printf("L = ");
-            FF_4096_output(PRIV.l , FFLEN_4096);
+            FF_4096_output(PRIV.l , HFLEN_4096);
             printf("\n");
 #endif
         }


[incubator-milagro-crypto-c] 01/10: Revert "remove DEBUG statements from Paillier code"

Posted by sa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sandreoli pushed a commit to branch issue51
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-crypto-c.git

commit bfd2d297806d0258109f43c6f9e755511c875816
Author: samuele-andreoli <sa...@yahoo.it>
AuthorDate: Tue Nov 26 16:39:27 2019 +0000

    Revert "remove DEBUG statements from Paillier code"
    
    This reverts commit 6b56b35f65469932debc755abc682caa7a3d029b.
---
 src/paillier.c | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 139 insertions(+)

diff --git a/src/paillier.c b/src/paillier.c
index a565d6d..d19776a 100644
--- a/src/paillier.c
+++ b/src/paillier.c
@@ -145,6 +145,29 @@ int PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, octet* N, octet* G, octet
     FF_2048_toOctet(L, l, FFLEN_2048);
     FF_2048_toOctet(M, m, FFLEN_2048);
 
+#ifdef DEBUG
+    printf("p ");
+    FF_2048_output(p,HFLEN_2048);
+    printf("\n");
+    printf("q ");
+    FF_2048_output(q,HFLEN_2048);
+    printf("\n");
+
+    printf("n ");
+    FF_2048_output(n,FFLEN_2048);
+    printf("\n");
+    printf("g ");
+    FF_2048_output(g,FFLEN_2048);
+    printf("\n");
+
+    printf("l ");
+    FF_2048_output(l,FFLEN_2048);
+    printf("\n");
+    printf("m ");
+    FF_2048_output(m,FFLEN_2048);
+    printf("\n");
+#endif
+
     return 0;
 }
 
@@ -217,6 +240,45 @@ int PAILLIER_ENCRYPT(csprng *RNG, octet* N, octet* G, octet* PT, octet* CT, octe
         FF_4096_toOctet(R, r, HFLEN_4096);
     }
 
+#ifdef DEBUG
+    printf("n ");
+    FF_4096_output(n,FFLEN_4096);
+    printf("\n\n");
+    printf("g ");
+    FF_4096_output(g,FFLEN_4096);
+    printf("\n\n");
+    printf("n2 ");
+    FF_4096_output(n2,FFLEN_4096);
+    printf("\n\n");
+    printf("r ");
+    FF_4096_output(r,FFLEN_4096);
+    printf("\n\n");
+    printf("pt ");
+    FF_4096_output(pt,FFLEN_4096);
+    printf("\n\n");
+    printf("gpt ");
+    FF_4096_output(gpt,FFLEN_4096);
+    printf("\n\n");
+    printf("rn ");
+    FF_4096_output(rn,FFLEN_4096);
+    printf("\n\n");
+    printf("gpt8 ");
+    FF_8192_output(gpt8,FFLEN_8192);
+    printf("\n\n");
+    printf("rn8 ");
+    FF_8192_output(rn8,FFLEN_8192);
+    printf("\n\n");
+    printf("ct ");
+    FF_8192_output(ct,FFLEN_8192);
+    printf("\n\n");
+    printf("CT2: ");
+    OCT_output(&CT2);
+    printf("\n");
+    printf("CT: ");
+    OCT_output(CT);
+    printf("\n");
+#endif
+
     return 0;
 }
 
@@ -264,6 +326,12 @@ int PAILLIER_DECRYPT(octet* N, octet* L, octet* M, octet* CT, octet* PT)
     FF_4096_pow(ctl,ct,l,n2,FFLEN_4096);
     FF_4096_dec(ctl,1,FFLEN_4096);
 
+#ifdef DEBUG
+    printf("PAILLIER_DECRYPT ctl ");
+    FF_4096_output(ctl,FFLEN_4096);
+    printf("\n\n");
+#endif
+
     // ctln = ctl / n
     // note that ctln fits into a FF_2048 element,
     // since ctln = ctl/n < n^2 / n = n
@@ -273,11 +341,37 @@ int PAILLIER_DECRYPT(octet* N, octet* L, octet* M, octet* CT, octet* PT)
     // the result fits into a FF_4096 element,
     // since both m and ctln fit into a FF_2048 element
     FF_4096_mul(pt, ctln, m, HFLEN_4096);
+#ifdef DEBUG
+    printf("pt1 ");
+    FF_4096_output(pt,FFLEN_4096);
+    printf("\n\n");
+#endif
     FF_4096_mod(pt,n,FFLEN_4096);
 
     // Output
     FF_4096_toOctet(PT, pt, HFLEN_4096);
 
+#ifdef DEBUG
+    printf("PAILLIER_DECRYPT n ");
+    FF_4096_output(n,FFLEN_4096);
+    printf("\n\n");
+    printf("PAILLIER_DECRYPT l ");
+    FF_4096_output(l,FFLEN_4096);
+    printf("\n\n");
+    printf("PAILLIER_DECRYPT m ");
+    FF_4096_output(m,FFLEN_4096);
+    printf("\n\n");
+    printf("PAILLIER_DECRYPT ct ");
+    FF_4096_output(ct,FFLEN_4096);
+    printf("\n\n");
+    printf("PAILLIER_DECRYPT ctln ");
+    FF_4096_output(ctln,FFLEN_4096);
+    printf("\n\n");
+    printf("PAILLIER_DECRYPT pt ");
+    FF_4096_output(pt,FFLEN_4096);
+    printf("\n\n");
+#endif
+
     return 0;
 
 }
@@ -312,14 +406,41 @@ int PAILLIER_ADD(octet* N, octet* CT1, octet* CT2, octet* CT)
     // n2 = n^2
     FF_8192_sqr(n2, n, HFLEN_8192);
 
+#ifdef DEBUG
+    printf("PAILLIER_ADD ct1 ");
+    FF_8192_output(ct1,FFLEN_8192);
+    printf("\n\n");
+    printf("PAILLIER_ADD ct2 ");
+    FF_8192_output(ct2,FFLEN_8192);
+    printf("\n\n");
+#endif
+
     // ct = ct1 * ct2 mod n^2
     FF_8192_mul(ct,ct1,ct2,HFLEN_8192);
 
+#ifdef DEBUG
+    printf("PAILLIER_ADD ct1 * ct2 ");
+    FF_8192_output(ct,FFLEN_8192);
+    printf("\n\n");
+#endif
+
     FF_8192_mod(ct,n2,FFLEN_8192);
 
     // Output
     FF_8192_toOctet(CT, ct, HFLEN_8192);
 
+#ifdef DEBUG
+    printf("PAILLIER_ADD n ");
+    FF_8192_output(n,FFLEN_8192);
+    printf("\n\n");
+    printf("PAILLIER_ADD ct1 ");
+    FF_8192_output(ct1,FFLEN_8192);
+    printf("\n\n");
+    printf("PAILLIER_ADD ct2 ");
+    FF_8192_output(ct2,FFLEN_8192);
+    printf("\n\n");
+#endif
+
     return 0;
 }
 
@@ -364,5 +485,23 @@ int PAILLIER_MULT(octet* N, octet* CT1, octet* PT, octet* CT)
     // output
     FF_4096_toOctet(CT, ct, FFLEN_4096);
 
+#ifdef DEBUG
+    printf("PAILLIER_MULT n: ");
+    FF_4096_output(n,FFLEN_4096);
+    printf("\n\n");
+    printf("PAILLIER_MULT n2: ");
+    FF_4096_output(n2,FFLEN_4096);
+    printf("\n\n");
+    printf("PAILLIER_MULT ct1: ");
+    FF_4096_output(ct1,FFLEN_4096);
+    printf("\n\n");
+    printf("PAILLIER_MULT pt: ");
+    FF_4096_output(pt,FFLEN_4096);
+    printf("\n\n");
+    printf("PAILLIER_MULT ct: ");
+    FF_4096_output(ct,FFLEN_4096);
+    printf("\n\n");
+#endif
+
     return 0;
 }


[incubator-milagro-crypto-c] 08/10: remove unnecessary clause from rsa tests

Posted by sa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sandreoli pushed a commit to branch issue51
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-crypto-c.git

commit 363552b359c34baf33a9656ce2e1a92f00c37495
Author: samuele-andreoli <sa...@yahoo.it>
AuthorDate: Wed Dec 4 11:30:18 2019 +0000

    remove unnecessary clause from rsa tests
---
 test/CMakeLists.txt | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 851ada9..1033a82 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -219,14 +219,12 @@ endforeach()
 # RSA Tests
 ################################################
 foreach(level ${AMCL_RSA})
-  if (NOT level STREQUAL "8192")
-    amcl_rsa_field(BD "${level}")
-    amcl_rsa_field(TFF "${level}")
-
-    amcl_rsa_test(${level} test_big_arithmetics_${BD} test_big_arithmetics_XXX.c.in amcl_rsa_${TFF} "SUCCESS" "big/test_vector_big.txt")
-    amcl_rsa_test(${level} test_big_consistency_${BD} test_big_consistency_XXX.c.in amcl_rsa_${TFF} "SUCCESS")
-    amcl_rsa_test(${level} test_rsa_${TFF}            test_rsa_WWW.c.in             amcl_rsa_${TFF} "SUCCESS")
-  endif()  
+  amcl_rsa_field(BD "${level}")
+  amcl_rsa_field(TFF "${level}")
+
+  amcl_rsa_test(${level} test_big_arithmetics_${BD} test_big_arithmetics_XXX.c.in amcl_rsa_${TFF} "SUCCESS" "big/test_vector_big.txt")
+  amcl_rsa_test(${level} test_big_consistency_${BD} test_big_consistency_XXX.c.in amcl_rsa_${TFF} "SUCCESS")
+  amcl_rsa_test(${level} test_rsa_${TFF}            test_rsa_WWW.c.in             amcl_rsa_${TFF} "SUCCESS")
 endforeach()
 
 ################################################


[incubator-milagro-crypto-c] 04/10: use side channel resistant functions when necessary

Posted by sa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sandreoli pushed a commit to branch issue51
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-crypto-c.git

commit 63785bbc86ec20e78c193618e086b66366abf03c
Author: samuele-andreoli <sa...@yahoo.it>
AuthorDate: Wed Nov 27 14:43:21 2019 +0000

    use side channel resistant functions when necessary
---
 include/ff.h.in | 22 ++++++++--------
 src/ff.c.in     | 81 ++++++++++++++++++++++++++++++---------------------------
 src/paillier.c  |  7 +++--
 3 files changed, 56 insertions(+), 54 deletions(-)

diff --git a/include/ff.h.in b/include/ff.h.in
index a3fc4c8..dd48cc3 100644
--- a/include/ff.h.in
+++ b/include/ff.h.in
@@ -245,6 +245,17 @@ extern void FF_WWW_skpow(BIG_XXX *r,BIG_XXX *x,BIG_XXX * e,BIG_XXX *m,int n);
 	@param n size of FF in BIGs
  */
 extern void FF_WWW_skspow(BIG_XXX *r,BIG_XXX *x,BIG_XXX e,BIG_XXX *m,int n);
+/**	@brief Calculate r=x^e.y^f mod m for big e and f, side channel resistant
+ *
+	@param r FF instance, on exit = x^e.y^f mod m
+	@param x FF instance
+	@param e FF exponent
+	@param y FF instance
+	@param f FF exponent
+	@param m FF modulus
+	@param n size of FF in BIGs
+ */
+extern void FF_WWW_skpow2(BIG_XXX r[],BIG_XXX x[], BIG_XXX e[], BIG_XXX y[], BIG_XXX f[], BIG_XXX m[], int n);
 /**	@brief Calculate r=x^e mod m
  *
 	For very short integer exponent
@@ -292,16 +303,5 @@ extern int FF_WWW_prime(BIG_XXX *x,csprng *R,int n);
 	@param n size of FF in BIGs
  */
 extern void FF_WWW_pow2(BIG_XXX *r,BIG_XXX *x,BIG_XXX e,BIG_XXX *y,BIG_XXX f,BIG_XXX *m,int n);
-/**	@brief Calculate r=x^e.y^f mod m for big e and f
- *
-	@param r FF instance, on exit = x^e.y^f mod m
-	@param x FF instance
-	@param e FF exponent
-	@param y FF instance
-	@param f FF exponent
-	@param m FF modulus
-	@param n size of FF in BIGs
- */
-extern void FF_WWW_bpow2(BIG_XXX *r,BIG_XXX *x,BIG_XXX *e,BIG_XXX *y,BIG_XXX *f,BIG_XXX *m,int n);
 
 #endif
diff --git a/src/ff.c.in b/src/ff.c.in
index 1d495bf..31347c7 100644
--- a/src/ff.c.in
+++ b/src/ff.c.in
@@ -536,7 +536,7 @@ void FF_WWW_invmodp(BIG_XXX r[],BIG_XXX a[],BIG_XXX p[],int n)
     FF_WWW_copy(x1,one,n);
     FF_WWW_zero(x2,n);
 
-// reduce n in here as well!
+    // reduce n in here as well!
     while (FF_WWW_comp(u,one,n)!=0 && FF_WWW_comp(v,one,n)!=0)
     {
         while (FF_WWW_parity(u)==0)
@@ -824,6 +824,47 @@ void FF_WWW_skspow(BIG_XXX r[],BIG_XXX x[],BIG_XXX e,BIG_XXX p[],int n)
     FF_WWW_redc(r,p,ND,n);
 }
 
+/* r=x^e*y^f mod p - side channel resistant */
+void FF_WWW_skpow2(BIG_XXX r[],BIG_XXX x[], BIG_XXX e[], BIG_XXX y[], BIG_XXX f[], BIG_XXX p[], int n) {
+    int i,eb,fb;
+#ifndef C99
+    BIG_XXX xn[FFLEN_WWW],yn[FFLEN_WWW],xy[FFLEN_WWW],w[FFLEN_WWW],ND[FFLEN_WWW];
+#else
+    BIG_XXX xn[n],yn[n],xy[n],w[n],ND[n];
+#endif
+
+    FF_WWW_invmod2m(ND,p,n);
+
+    FF_WWW_copy(xn,x,n);
+    FF_WWW_copy(yn,y,n);
+    FF_WWW_nres(xn,p,n);
+    FF_WWW_nres(yn,p,n);
+    FF_WWW_modmul(xy,xn,yn,p,ND,n);
+    FF_WWW_one(w,n);
+    FF_WWW_nres(w,p,n);
+    FF_WWW_one(r,n);
+    FF_WWW_nres(r,p,n);
+
+    for (i=8*MODBYTES_XXX*n-1; i>=0; i--)
+    {
+        eb=BIG_XXX_bit(e[i/BIGBITS_XXX],i%BIGBITS_XXX);
+        fb=BIG_XXX_bit(f[i/BIGBITS_XXX],i%BIGBITS_XXX);
+
+        FF_WWW_cswap(w, xn, eb & (eb ^ fb), n);
+        FF_WWW_cswap(w, yn, fb & (eb ^ fb), n);
+        FF_WWW_cswap(w, xy, eb & fb, n);
+
+        FF_WWW_modsqr(r,r,p,ND,n);
+        FF_WWW_modmul(r,w,r,p,ND,n);
+
+        FF_WWW_cswap(w, xn, eb & (eb ^ fb), n);
+        FF_WWW_cswap(w, yn, fb & (eb ^ fb), n);
+        FF_WWW_cswap(w, xy, eb & fb, n);
+    }
+
+    FF_WWW_redc(r,p,ND,n);
+}
+
 /* raise to an integer power - right-to-left method */
 void FF_WWW_power(BIG_XXX r[],BIG_XXX x[],int e,BIG_XXX p[],int n)
 {
@@ -921,44 +962,6 @@ void FF_WWW_pow2(BIG_XXX r[],BIG_XXX x[],BIG_XXX e,BIG_XXX y[],BIG_XXX f,BIG_XXX
     FF_WWW_redc(r,p,ND,n);
 }
 
-/* double exponentiation r=x^e.y^f mod p */
-void FF_WWW_bpow2(BIG_XXX r[],BIG_XXX x[],BIG_XXX e[],BIG_XXX y[],BIG_XXX f[],BIG_XXX p[],int n)
-{
-    int i,eb,fb;
-#ifndef C99
-    BIG_XXX xn[FFLEN_WWW],yn[FFLEN_WWW],xy[FFLEN_WWW],ND[FFLEN_WWW];
-#else
-    BIG_XXX xn[n],yn[n],xy[n],ND[n];
-#endif
-
-    FF_WWW_invmod2m(ND,p,n);
-
-    FF_WWW_copy(xn,x,n);
-    FF_WWW_copy(yn,y,n);
-    FF_WWW_nres(xn,p,n);
-    FF_WWW_nres(yn,p,n);
-    FF_WWW_modmul(xy,xn,yn,p,ND,n);
-    FF_WWW_one(r,n);
-    FF_WWW_nres(r,p,n);
-
-    for (i=8*MODBYTES_XXX*(n-1); i>=0; i--)
-    {
-        eb=BIG_XXX_bit(e[i/BIGBITS_XXX],i%BIGBITS_XXX);
-        fb=BIG_XXX_bit(f[i/BIGBITS_XXX],i%BIGBITS_XXX);
-        FF_WWW_modsqr(r,r,p,ND,n);
-        if (eb==1)
-        {
-            if (fb==1) FF_WWW_modmul(r,r,xy,p,ND,n);
-            else FF_WWW_modmul(r,r,xn,p,ND,n);
-        }
-        else
-        {
-            if (fb==1) FF_WWW_modmul(r,r,yn,p,ND,n);
-        }
-    }
-    FF_WWW_redc(r,p,ND,n);
-}
-
 static sign32 igcd(sign32 x,sign32 y)
 {
     /* integer GCD, returns GCD of x and y */
diff --git a/src/paillier.c b/src/paillier.c
index d607a99..ddf25be 100644
--- a/src/paillier.c
+++ b/src/paillier.c
@@ -215,7 +215,7 @@ int PAILLIER_ENCRYPT(csprng *RNG, octet* N, octet* G, octet* PT, octet* CT, octe
     }
 
     // ct = g^pt * r^n mod n2
-    FF_4096_bpow2(ct, g, pt, r, n, n2, FFLEN_4096);
+    FF_4096_skpow2(ct, g, pt, r, n, n2, FFLEN_4096);
 
     // Output
     FF_4096_toOctet(CT, ct, FFLEN_4096);
@@ -294,7 +294,7 @@ int PAILLIER_DECRYPT(octet* N, octet* L, octet* M, octet* CT, octet* PT)
     FF_4096_norm(n2, FFLEN_4096);
 
     // ct^l mod n^2 - 1
-    FF_4096_pow(ctl,ct,l,n2,FFLEN_4096);
+    FF_4096_skpow(ctl,ct,l,n2,FFLEN_4096);
     FF_4096_dec(ctl,1,FFLEN_4096);
 
 #ifdef DEBUG
@@ -433,7 +433,6 @@ int PAILLIER_MULT(octet* N, octet* CT1, octet* PT, octet* CT)
     // Ciphertext output. ct = ct1 ^ pt mod n^2
     BIG_512_60 ct[FFLEN_4096];
 
-    // Convert n from FF_2048 to FF_4096
     FF_4096_fromOctet(n,N,HFLEN_4096);
 
     FF_4096_zero(pt, FFLEN_4096);
@@ -446,7 +445,7 @@ int PAILLIER_MULT(octet* N, octet* CT1, octet* PT, octet* CT)
     FF_4096_norm(n2, FFLEN_4096);
 
     // ct1^pt mod n^2
-    FF_4096_pow(ct,ct1,pt,n2,FFLEN_4096);
+    FF_4096_skpow(ct,ct1,pt,n2,FFLEN_4096);
 
     // output
     FF_4096_toOctet(CT, ct, FFLEN_4096);