From 932beef79dfd3a4e501e006ef257115463aedde7 Mon Sep 17 00:00:00 2001 From: Vlad Krasnov Date: Wed, 24 Jan 2024 11:59:35 -0500 Subject: [PATCH] ec: additional P521 tests from generate_tests.cc --- src/ec/suite_b/ops.rs | 99 + .../suite_b/ops/p521_elem_div_by_2_tests.txt | 27 + src/ec/suite_b/ops/p521_elem_mul_tests.txt | 32 + src/ec/suite_b/ops/p521_elem_neg_tests.txt | 24 + src/ec/suite_b/ops/p521_elem_sum_tests.txt | 2107 +++++++++++++++++ .../suite_b/ops/p521_point_double_tests.txt | 20 + src/ec/suite_b/ops/p521_point_sum_tests.txt | 120 + src/ec/suite_b/ops/p521_scalar_mul_tests.txt | 32 + 8 files changed, 2461 insertions(+) create mode 100644 src/ec/suite_b/ops/p521_elem_div_by_2_tests.txt create mode 100644 src/ec/suite_b/ops/p521_elem_mul_tests.txt create mode 100644 src/ec/suite_b/ops/p521_elem_neg_tests.txt create mode 100644 src/ec/suite_b/ops/p521_elem_sum_tests.txt create mode 100644 src/ec/suite_b/ops/p521_point_double_tests.txt create mode 100644 src/ec/suite_b/ops/p521_point_sum_tests.txt create mode 100644 src/ec/suite_b/ops/p521_scalar_mul_tests.txt diff --git a/src/ec/suite_b/ops.rs b/src/ec/suite_b/ops.rs index 7b75bea79c..682dbbd3a3 100644 --- a/src/ec/suite_b/ops.rs +++ b/src/ec/suite_b/ops.rs @@ -505,6 +505,11 @@ mod tests { q_minus_n_plus_n_equals_0_test(&p384::PUBLIC_SCALAR_OPS); } + #[test] + fn p521_q_minus_n_plus_n_equals_0_test() { + q_minus_n_plus_n_equals_0_test(&p521::PUBLIC_SCALAR_OPS); + } + #[test] fn p256_elem_add_test() { elem_add_test( @@ -521,6 +526,15 @@ mod tests { ); } + #[cfg(target_pointer_width = "64")] + #[test] + fn p521_elem_add_test() { + elem_add_test( + &p521::PUBLIC_SCALAR_OPS, + test_file!("ops/p521_elem_sum_tests.txt"), + ); + } + fn elem_add_test(ops: &PublicScalarOps, test_file: test::File) { test::run(test_file, |section, test_case| { assert_eq!(section, ""); @@ -557,6 +571,19 @@ mod tests { ); } + #[cfg(target_pointer_width = "64")] + #[test] + fn p521_elem_sub_test() { + prefixed_extern! { + fn p521_elem_sub(r: *mut Limb, a: *const Limb, b: *const Limb); + } + elem_sub_test( + &p521::COMMON_OPS, + p521_elem_sub, + test_file!("ops/p521_elem_sum_tests.txt"), + ); + } + fn elem_sub_test( ops: &CommonOps, elem_sub: unsafe extern "C" fn(r: *mut Limb, a: *const Limb, b: *const Limb), @@ -608,6 +635,19 @@ mod tests { ); } + #[cfg(target_pointer_width = "64")] + #[test] + fn p521_elem_div_by_2_test() { + prefixed_extern! { + fn p521_elem_div_by_2(r: *mut Limb, a: *const Limb); + } + elem_div_by_2_test( + &p521::COMMON_OPS, + p521_elem_div_by_2, + test_file!("ops/p521_elem_div_by_2_tests.txt"), + ); + } + fn elem_div_by_2_test( ops: &CommonOps, elem_div_by_2: unsafe extern "C" fn(r: *mut Limb, a: *const Limb), @@ -655,6 +695,19 @@ mod tests { ); } + #[cfg(target_pointer_width = "64")] + #[test] + fn p521_elem_neg_test() { + prefixed_extern! { + fn p521_elem_neg(r: *mut Limb, a: *const Limb); + } + elem_neg_test( + &p521::COMMON_OPS, + p521_elem_neg, + test_file!("ops/p521_elem_neg_tests.txt"), + ); + } + fn elem_neg_test( ops: &CommonOps, elem_neg: unsafe extern "C" fn(r: *mut Limb, a: *const Limb), @@ -698,6 +751,12 @@ mod tests { elem_mul_test(&p384::COMMON_OPS, test_file!("ops/p384_elem_mul_tests.txt")); } + #[cfg(target_pointer_width = "64")] + #[test] + fn p521_elem_mul_test() { + elem_mul_test(&p521::COMMON_OPS, test_file!("ops/p521_elem_mul_tests.txt")); + } + fn elem_mul_test(ops: &CommonOps, test_file: test::File) { test::run(test_file, |section, test_case| { assert_eq!(section, ""); @@ -728,6 +787,15 @@ mod tests { ); } + #[cfg(target_pointer_width = "64")] + #[test] + fn p521_scalar_mul_test() { + scalar_mul_test( + &p521::SCALAR_OPS, + test_file!("ops/p521_scalar_mul_tests.txt"), + ); + } + fn scalar_mul_test(ops: &ScalarOps, test_file: test::File) { test::run(test_file, |section, test_case| { assert_eq!(section, ""); @@ -801,6 +869,12 @@ mod tests { let _ = p384::PRIVATE_SCALAR_OPS.scalar_inv_to_mont(&ZERO_SCALAR); } + #[test] + #[should_panic(expected = "!self.scalar_ops.common.is_zero(a)")] + fn p521_scalar_inv_to_mont_zero_panic_test() { + let _ = p521::PRIVATE_SCALAR_OPS.scalar_inv_to_mont(&ZERO_SCALAR); + } + #[test] fn p256_point_sum_test() { point_sum_test( @@ -817,6 +891,15 @@ mod tests { ); } + #[cfg(target_pointer_width = "64")] + #[test] + fn p521_point_sum_test() { + point_sum_test( + &p521::PRIVATE_KEY_OPS, + test_file!("ops/p521_point_sum_tests.txt"), + ); + } + fn point_sum_test(ops: &PrivateKeyOps, test_file: test::File) { test::run(test_file, |section, test_case| { assert_eq!(section, ""); @@ -907,6 +990,22 @@ mod tests { ); } + #[cfg(target_pointer_width = "64")] + #[test] + fn p521_point_double_test() { + prefixed_extern! { + fn p521_point_double( + r: *mut Limb, + a: *const Limb, + ); + } + point_double_test( + &p521::PRIVATE_KEY_OPS, + p521_point_double, + test_file!("ops/p521_point_double_tests.txt"), + ); + } + fn point_double_test( ops: &PrivateKeyOps, point_double: unsafe extern "C" fn( diff --git a/src/ec/suite_b/ops/p521_elem_div_by_2_tests.txt b/src/ec/suite_b/ops/p521_elem_div_by_2_tests.txt new file mode 100644 index 0000000000..7c7fe90a83 --- /dev/null +++ b/src/ec/suite_b/ops/p521_elem_div_by_2_tests.txt @@ -0,0 +1,27 @@ + +a = 00 +r = 00 + +a = 00 +r = 00 + +a = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 02 +r = 01 + +a = 03 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 + +a = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe +r = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +r = 017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + +a = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/src/ec/suite_b/ops/p521_elem_mul_tests.txt b/src/ec/suite_b/ops/p521_elem_mul_tests.txt new file mode 100644 index 0000000000..5d38e6d3d8 --- /dev/null +++ b/src/ec/suite_b/ops/p521_elem_mul_tests.txt @@ -0,0 +1,32 @@ + +a = 00 +b = 00 +r = 00 + +a = 00 +b = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe +r = 00 + +a = 01 +b = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe +r = 01fffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + +a = 02 +b = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe +r = 01fffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + +a = 03 +b = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe +r = 01fffffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 02 +r = 01fffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + +a = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 02 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 02 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/src/ec/suite_b/ops/p521_elem_neg_tests.txt b/src/ec/suite_b/ops/p521_elem_neg_tests.txt new file mode 100644 index 0000000000..060facc0fa --- /dev/null +++ b/src/ec/suite_b/ops/p521_elem_neg_tests.txt @@ -0,0 +1,24 @@ + +a = 00 +b = 00 + +a = 01 +b = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe + +a = 02 +b = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd + +a = 03 +b = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc + +a = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe +b = 01 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + +a = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/src/ec/suite_b/ops/p521_elem_sum_tests.txt b/src/ec/suite_b/ops/p521_elem_sum_tests.txt new file mode 100644 index 0000000000..d12b59cce8 --- /dev/null +++ b/src/ec/suite_b/ops/p521_elem_sum_tests.txt @@ -0,0 +1,2107 @@ +# Montgomery Arithmetic; values are in the range [0, q). + +a = 00 +b = 00 +r = 00 + +a = 00 +b = 01 +r = 01 + +a = 00 +b = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe +r = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe + +a = 01 +b = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe +r = 00 + +a = 02 +b = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe +r = 01 + +a = 03 +b = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe +r = 02 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 00 + +a = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 01 + +a = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 01 + +a = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 01 + +a = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 +b = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +r = 01 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 00 + +a = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +r = 00 + +# Carry Propagation. + +a = ff +b = 01 +r = 0100 + +a = 01ff +b = 01 +r = 0200 + +a = 03ff +b = 01 +r = 0400 + +a = 07ff +b = 01 +r = 0800 + +a = 0fff +b = 01 +r = 1000 + +a = 1fff +b = 01 +r = 2000 + +a = 3fff +b = 01 +r = 4000 + +a = 7fff +b = 01 +r = 8000 + +a = ffff +b = 01 +r = 010000 + +a = 01ffff +b = 01 +r = 020000 + +a = 03ffff +b = 01 +r = 040000 + +a = 07ffff +b = 01 +r = 080000 + +a = 0fffff +b = 01 +r = 100000 + +a = 1fffff +b = 01 +r = 200000 + +a = 3fffff +b = 01 +r = 400000 + +a = 7fffff +b = 01 +r = 800000 + +a = ffffff +b = 01 +r = 01000000 + +a = 01ffffff +b = 01 +r = 02000000 + +a = 03ffffff +b = 01 +r = 04000000 + +a = 07ffffff +b = 01 +r = 08000000 + +a = 0fffffff +b = 01 +r = 10000000 + +a = 1fffffff +b = 01 +r = 20000000 + +a = 3fffffff +b = 01 +r = 40000000 + +a = 7fffffff +b = 01 +r = 80000000 + +a = ffffffff +b = 01 +r = 0100000000 + +a = 01ffffffff +b = 01 +r = 0200000000 + +a = 03ffffffff +b = 01 +r = 0400000000 + +a = 07ffffffff +b = 01 +r = 0800000000 + +a = 0fffffffff +b = 01 +r = 1000000000 + +a = 1fffffffff +b = 01 +r = 2000000000 + +a = 3fffffffff +b = 01 +r = 4000000000 + +a = 7fffffffff +b = 01 +r = 8000000000 + +a = ffffffffff +b = 01 +r = 010000000000 + +a = 01ffffffffff +b = 01 +r = 020000000000 + +a = 03ffffffffff +b = 01 +r = 040000000000 + +a = 07ffffffffff +b = 01 +r = 080000000000 + +a = 0fffffffffff +b = 01 +r = 100000000000 + +a = 1fffffffffff +b = 01 +r = 200000000000 + +a = 3fffffffffff +b = 01 +r = 400000000000 + +a = 7fffffffffff +b = 01 +r = 800000000000 + +a = ffffffffffff +b = 01 +r = 01000000000000 + +a = 01ffffffffffff +b = 01 +r = 02000000000000 + +a = 03ffffffffffff +b = 01 +r = 04000000000000 + +a = 07ffffffffffff +b = 01 +r = 08000000000000 + +a = 0fffffffffffff +b = 01 +r = 10000000000000 + +a = 1fffffffffffff +b = 01 +r = 20000000000000 + +a = 3fffffffffffff +b = 01 +r = 40000000000000 + +a = 7fffffffffffff +b = 01 +r = 80000000000000 + +a = ffffffffffffff +b = 01 +r = 0100000000000000 + +a = 01ffffffffffffff +b = 01 +r = 0200000000000000 + +a = 03ffffffffffffff +b = 01 +r = 0400000000000000 + +a = 07ffffffffffffff +b = 01 +r = 0800000000000000 + +a = 0fffffffffffffff +b = 01 +r = 1000000000000000 + +a = 1fffffffffffffff +b = 01 +r = 2000000000000000 + +a = 3fffffffffffffff +b = 01 +r = 4000000000000000 + +a = 7fffffffffffffff +b = 01 +r = 8000000000000000 + +a = ffffffffffffffff +b = 01 +r = 010000000000000000 + +a = 01ffffffffffffffff +b = 01 +r = 020000000000000000 + +a = 03ffffffffffffffff +b = 01 +r = 040000000000000000 + +a = 07ffffffffffffffff +b = 01 +r = 080000000000000000 + +a = 0fffffffffffffffff +b = 01 +r = 100000000000000000 + +a = 1fffffffffffffffff +b = 01 +r = 200000000000000000 + +a = 3fffffffffffffffff +b = 01 +r = 400000000000000000 + +a = 7fffffffffffffffff +b = 01 +r = 800000000000000000 + +a = ffffffffffffffffff +b = 01 +r = 01000000000000000000 + +a = 01ffffffffffffffffff +b = 01 +r = 02000000000000000000 + +a = 03ffffffffffffffffff +b = 01 +r = 04000000000000000000 + +a = 07ffffffffffffffffff +b = 01 +r = 08000000000000000000 + +a = 0fffffffffffffffffff +b = 01 +r = 10000000000000000000 + +a = 1fffffffffffffffffff +b = 01 +r = 20000000000000000000 + +a = 3fffffffffffffffffff +b = 01 +r = 40000000000000000000 + +a = 7fffffffffffffffffff +b = 01 +r = 80000000000000000000 + +a = ffffffffffffffffffff +b = 01 +r = 0100000000000000000000 + +a = 01ffffffffffffffffffff +b = 01 +r = 0200000000000000000000 + +a = 03ffffffffffffffffffff +b = 01 +r = 0400000000000000000000 + +a = 07ffffffffffffffffffff +b = 01 +r = 0800000000000000000000 + +a = 0fffffffffffffffffffff +b = 01 +r = 1000000000000000000000 + +a = 1fffffffffffffffffffff +b = 01 +r = 2000000000000000000000 + +a = 3fffffffffffffffffffff +b = 01 +r = 4000000000000000000000 + +a = 7fffffffffffffffffffff +b = 01 +r = 8000000000000000000000 + +a = ffffffffffffffffffffff +b = 01 +r = 010000000000000000000000 + +a = 01ffffffffffffffffffffff +b = 01 +r = 020000000000000000000000 + +a = 03ffffffffffffffffffffff +b = 01 +r = 040000000000000000000000 + +a = 07ffffffffffffffffffffff +b = 01 +r = 080000000000000000000000 + +a = 0fffffffffffffffffffffff +b = 01 +r = 100000000000000000000000 + +a = 1fffffffffffffffffffffff +b = 01 +r = 200000000000000000000000 + +a = 3fffffffffffffffffffffff +b = 01 +r = 400000000000000000000000 + +a = 7fffffffffffffffffffffff +b = 01 +r = 800000000000000000000000 + +a = ffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000 + +a = 01ffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000 + +a = 03ffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000 + +a = 07ffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000 + +a = 0fffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000 + +a = 1fffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000 + +a = 3fffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000 + +a = 7fffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000 + +a = ffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000 + +a = 01ffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000 + +a = 03ffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000 + +a = 07ffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000 + +a = 0fffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000 + +a = 1fffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000 + +a = 3fffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000 + +a = 7fffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000 + +a = ffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000 + +a = ffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/src/ec/suite_b/ops/p521_point_double_tests.txt b/src/ec/suite_b/ops/p521_point_double_tests.txt new file mode 100644 index 0000000000..c236c0fd58 --- /dev/null +++ b/src/ec/suite_b/ops/p521_point_double_tests.txt @@ -0,0 +1,20 @@ + +# G doubled once. +a = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 01e0022e452fda163e8deccc7aa224abcda2340bd7de8b939f33164bf7394caf7a132062a85c809fd683b09a9e384351396120445f4a3b4fe8b328460e4a5a9e268e, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +r = 013f3417e59440a461413a3a0193cd8e66031a96372a82ebb4df4bd9d9026d377aaa83d508251d1ae2d7a0e797d1b26b07ecb3fa1f1c99dd36bc1e90cf08640909df, 01338053f9f6777769f85ae35a883e26d4bba05590d14c836216ddd9f1bbef4f928fb5c9c9bfd4cd19247a757e5f4af6e07a7b8df1ab6b30fa0d813d2ee331fe1b6c + +# Point at infinity doubled. This uses the (0, 0, 0) representation of +# the point at infinity instead of the classic (1, 1, 0) +# representation. +a = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# Point at infinity doubled. This form is the result of multiplying +# n * G (affine), which is more interesting than the above case +# because only the Z coordinate is zero. +a = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# (n - 1) * G doubled. +a = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 0126b62f8595a15df90754a596cb5ccdb9fd06bd52e76f666d6d8f7eed0c87f7bad664baf9846c1b8dcb762a8721d9649a901c3d6ef629e12db56c8e3a978f88899a, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +r = 013f3417e59440a461413a3a0193cd8e66031a96372a82ebb4df4bd9d9026d377aaa83d508251d1ae2d7a0e797d1b26b07ecb3fa1f1c99dd36bc1e90cf08640909df, 00cc7fac060988889607a51ca577c1d92b445faa6f2eb37c9de922260e4410b06d704a3636402b32e6db858a81a0b5091f8584720e5494cf05f27ec2d11cce01e493 diff --git a/src/ec/suite_b/ops/p521_point_sum_tests.txt b/src/ec/suite_b/ops/p521_point_sum_tests.txt new file mode 100644 index 0000000000..999d4fc4f7 --- /dev/null +++ b/src/ec/suite_b/ops/p521_point_sum_tests.txt @@ -0,0 +1,120 @@ + +# inf + inf == 2 * inf == inf +a = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# inf (n*G) + inf (n*G) == 2 * inf == inf +a = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# inf (n*G) + inf == 2 * inf == inf +a = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# inf + inf (n*G) == 2 * inf == inf +a = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# G + inf == G +a = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 01e0022e452fda163e8deccc7aa224abcda2340bd7de8b939f33164bf7394caf7a132062a85c809fd683b09a9e384351396120445f4a3b4fe8b328460e4a5a9e268e, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +b = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 01e0022e452fda163e8deccc7aa224abcda2340bd7de8b939f33164bf7394caf7a132062a85c809fd683b09a9e384351396120445f4a3b4fe8b328460e4a5a9e268e + +# G + inf (n*G) == G +a = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 01e0022e452fda163e8deccc7aa224abcda2340bd7de8b939f33164bf7394caf7a132062a85c809fd683b09a9e384351396120445f4a3b4fe8b328460e4a5a9e268e, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +b = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 01e0022e452fda163e8deccc7aa224abcda2340bd7de8b939f33164bf7394caf7a132062a85c809fd683b09a9e384351396120445f4a3b4fe8b328460e4a5a9e268e + +# inf + G == G +a = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 01e0022e452fda163e8deccc7aa224abcda2340bd7de8b939f33164bf7394caf7a132062a85c809fd683b09a9e384351396120445f4a3b4fe8b328460e4a5a9e268e, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +r = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 01e0022e452fda163e8deccc7aa224abcda2340bd7de8b939f33164bf7394caf7a132062a85c809fd683b09a9e384351396120445f4a3b4fe8b328460e4a5a9e268e + +# inf (n*G) + G == G +a = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 01e0022e452fda163e8deccc7aa224abcda2340bd7de8b939f33164bf7394caf7a132062a85c809fd683b09a9e384351396120445f4a3b4fe8b328460e4a5a9e268e, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +r = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 01e0022e452fda163e8deccc7aa224abcda2340bd7de8b939f33164bf7394caf7a132062a85c809fd683b09a9e384351396120445f4a3b4fe8b328460e4a5a9e268e + +# G + G == 2*G +a = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 01e0022e452fda163e8deccc7aa224abcda2340bd7de8b939f33164bf7394caf7a132062a85c809fd683b09a9e384351396120445f4a3b4fe8b328460e4a5a9e268e, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +b = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 01e0022e452fda163e8deccc7aa224abcda2340bd7de8b939f33164bf7394caf7a132062a85c809fd683b09a9e384351396120445f4a3b4fe8b328460e4a5a9e268e, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +r = 013f3417e59440a461413a3a0193cd8e66031a96372a82ebb4df4bd9d9026d377aaa83d508251d1ae2d7a0e797d1b26b07ecb3fa1f1c99dd36bc1e90cf08640909df, 01338053f9f6777769f85ae35a883e26d4bba05590d14c836216ddd9f1bbef4f928fb5c9c9bfd4cd19247a757e5f4af6e07a7b8df1ab6b30fa0d813d2ee331fe1b6c + +# (n-1)*G + G == inf; note that -G is (n-1)*G +a = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 0126b62f8595a15df90754a596cb5ccdb9fd06bd52e76f666d6d8f7eed0c87f7bad664baf9846c1b8dcb762a8721d9649a901c3d6ef629e12db56c8e3a978f88899a, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +b = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 01e0022e452fda163e8deccc7aa224abcda2340bd7de8b939f33164bf7394caf7a132062a85c809fd683b09a9e384351396120445f4a3b4fe8b328460e4a5a9e268e, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +r = inf + +# G + (n-1)*G == inf; note that -G is (n-1)*G +a = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 01e0022e452fda163e8deccc7aa224abcda2340bd7de8b939f33164bf7394caf7a132062a85c809fd683b09a9e384351396120445f4a3b4fe8b328460e4a5a9e268e, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +b = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 0126b62f8595a15df90754a596cb5ccdb9fd06bd52e76f666d6d8f7eed0c87f7bad664baf9846c1b8dcb762a8721d9649a901c3d6ef629e12db56c8e3a978f88899a, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +r = inf + +# (n-1)*G + (n-1)*G == 2*(n-1)*G +a = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 0126b62f8595a15df90754a596cb5ccdb9fd06bd52e76f666d6d8f7eed0c87f7bad664baf9846c1b8dcb762a8721d9649a901c3d6ef629e12db56c8e3a978f88899a, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +b = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 0126b62f8595a15df90754a596cb5ccdb9fd06bd52e76f666d6d8f7eed0c87f7bad664baf9846c1b8dcb762a8721d9649a901c3d6ef629e12db56c8e3a978f88899a, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +r = 013f3417e59440a461413a3a0193cd8e66031a96372a82ebb4df4bd9d9026d377aaa83d508251d1ae2d7a0e797d1b26b07ecb3fa1f1c99dd36bc1e90cf08640909df, 00cc7fac060988889607a51ca577c1d92b445faa6f2eb37c9de922260e4410b06d704a3636402b32e6db858a81a0b5091f8584720e5494cf05f27ec2d11cce01e493 + +# (n-1)*G + (n-1)*G (affine) == 2*(n-1)*G +a = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 001ffdd1bad025e9c1721333855ddb54325dcbf42821746c60cce9b408c6b35085ecdf9d57a37f60297c4f6561c7bcaec69edfbba0b5c4b0174cd7b9f1b5a561d971, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +b = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 0126b62f8595a15df90754a596cb5ccdb9fd06bd52e76f666d6d8f7eed0c87f7bad664baf9846c1b8dcb762a8721d9649a901c3d6ef629e12db56c8e3a978f88899a, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +r = 013f3417e59440a461413a3a0193cd8e66031a96372a82ebb4df4bd9d9026d377aaa83d508251d1ae2d7a0e797d1b26b07ecb3fa1f1c99dd36bc1e90cf08640909df, 00cc7fac060988889607a51ca577c1d92b445faa6f2eb37c9de922260e4410b06d704a3636402b32e6db858a81a0b5091f8584720e5494cf05f27ec2d11cce01e493 + +# (n-1)*G + -(n-1)*G == inf +a = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 0126b62f8595a15df90754a596cb5ccdb9fd06bd52e76f666d6d8f7eed0c87f7bad664baf9846c1b8dcb762a8721d9649a901c3d6ef629e12db56c8e3a978f88899a, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +b = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 00d949d07a6a5ea206f8ab5a6934a3324602f942ad1890999292708112f3780845299b45067b93e4723489d578de269b656fe3c29109d61ed24a9371c56870777665, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +r = inf + +# -(n-1)*G + (n-1)*G == inf +a = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 00d949d07a6a5ea206f8ab5a6934a3324602f942ad1890999292708112f3780845299b45067b93e4723489d578de269b656fe3c29109d61ed24a9371c56870777665, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +b = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 0126b62f8595a15df90754a596cb5ccdb9fd06bd52e76f666d6d8f7eed0c87f7bad664baf9846c1b8dcb762a8721d9649a901c3d6ef629e12db56c8e3a978f88899a, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +r = inf + +# -(n-1)*G (affine) + (n-1)*G == inf +a = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 00d949d07a6a5ea206f8ab5a6934a3324602f942ad1890999292708112f3780845299b45067b93e4723489d578de269b656fe3c29109d61ed24a9371c56870777665, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +b = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 0126b62f8595a15df90754a596cb5ccdb9fd06bd52e76f666d6d8f7eed0c87f7bad664baf9846c1b8dcb762a8721d9649a901c3d6ef629e12db56c8e3a978f88899a, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +r = inf + +# -(n-1)*G + -G == inf; note that -G is (n-1)*G (affine) +a = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 00d949d07a6a5ea206f8ab5a6934a3324602f942ad1890999292708112f3780845299b45067b93e4723489d578de269b656fe3c29109d61ed24a9371c56870777665, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +b = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 001ffdd1bad025e9c1721333855ddb54325dcbf42821746c60cce9b408c6b35085ecdf9d57a37f60297c4f6561c7bcaec69edfbba0b5c4b0174cd7b9f1b5a561d971, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +r = inf + +# -G + -(n-1)*G == inf; note that -G is (n-1)*G (affine) +a = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 001ffdd1bad025e9c1721333855ddb54325dcbf42821746c60cce9b408c6b35085ecdf9d57a37f60297c4f6561c7bcaec69edfbba0b5c4b0174cd7b9f1b5a561d971, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +b = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 00d949d07a6a5ea206f8ab5a6934a3324602f942ad1890999292708112f3780845299b45067b93e4723489d578de269b656fe3c29109d61ed24a9371c56870777665, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +r = inf + +# (n-1)*G + -G; == -2*G; note that -G == (n-1)*G (affine) +a = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 0126b62f8595a15df90754a596cb5ccdb9fd06bd52e76f666d6d8f7eed0c87f7bad664baf9846c1b8dcb762a8721d9649a901c3d6ef629e12db56c8e3a978f88899a, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +b = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 001ffdd1bad025e9c1721333855ddb54325dcbf42821746c60cce9b408c6b35085ecdf9d57a37f60297c4f6561c7bcaec69edfbba0b5c4b0174cd7b9f1b5a561d971, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +r = 013f3417e59440a461413a3a0193cd8e66031a96372a82ebb4df4bd9d9026d377aaa83d508251d1ae2d7a0e797d1b26b07ecb3fa1f1c99dd36bc1e90cf08640909df, 00cc7fac060988889607a51ca577c1d92b445faa6f2eb37c9de922260e4410b06d704a3636402b32e6db858a81a0b5091f8584720e5494cf05f27ec2d11cce01e493 + +# -G + (n-1)*G == -2*G; note that -G is (n-1)*G (affine) +a = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 001ffdd1bad025e9c1721333855ddb54325dcbf42821746c60cce9b408c6b35085ecdf9d57a37f60297c4f6561c7bcaec69edfbba0b5c4b0174cd7b9f1b5a561d971, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +b = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 0126b62f8595a15df90754a596cb5ccdb9fd06bd52e76f666d6d8f7eed0c87f7bad664baf9846c1b8dcb762a8721d9649a901c3d6ef629e12db56c8e3a978f88899a, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +r = 013f3417e59440a461413a3a0193cd8e66031a96372a82ebb4df4bd9d9026d377aaa83d508251d1ae2d7a0e797d1b26b07ecb3fa1f1c99dd36bc1e90cf08640909df, 00cc7fac060988889607a51ca577c1d92b445faa6f2eb37c9de922260e4410b06d704a3636402b32e6db858a81a0b5091f8584720e5494cf05f27ec2d11cce01e493 + +# (n-1)*G + -G == -2*G; note that -G is (n-1)*G (affine) +a = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 0126b62f8595a15df90754a596cb5ccdb9fd06bd52e76f666d6d8f7eed0c87f7bad664baf9846c1b8dcb762a8721d9649a901c3d6ef629e12db56c8e3a978f88899a, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +b = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 001ffdd1bad025e9c1721333855ddb54325dcbf42821746c60cce9b408c6b35085ecdf9d57a37f60297c4f6561c7bcaec69edfbba0b5c4b0174cd7b9f1b5a561d971, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +r = 013f3417e59440a461413a3a0193cd8e66031a96372a82ebb4df4bd9d9026d377aaa83d508251d1ae2d7a0e797d1b26b07ecb3fa1f1c99dd36bc1e90cf08640909df, 00cc7fac060988889607a51ca577c1d92b445faa6f2eb37c9de922260e4410b06d704a3636402b32e6db858a81a0b5091f8584720e5494cf05f27ec2d11cce01e493 + +# -G + (n-1)*G == -2*G; note that -G = (n-1)*G +a = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 001ffdd1bad025e9c1721333855ddb54325dcbf42821746c60cce9b408c6b35085ecdf9d57a37f60297c4f6561c7bcaec69edfbba0b5c4b0174cd7b9f1b5a561d971, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +b = 0021b8fdece11e368e9bd3fab9861276d73570f9f9b8c16bd152427e08c858aa2176dc1ad7bb7823e8cd755fa304c2abab3022717d01a5020142f29818868207b5a0, 0126b62f8595a15df90754a596cb5ccdb9fd06bd52e76f666d6d8f7eed0c87f7bad664baf9846c1b8dcb762a8721d9649a901c3d6ef629e12db56c8e3a978f88899a, 011c9c16ef1130b89badb27b23566dbe074ca9ade2cc58f03b634356450076491b8f272aaa042ddaa7df9a34042eb8607145633faffcdc6d99cb3298143fb959e02d +r = 013f3417e59440a461413a3a0193cd8e66031a96372a82ebb4df4bd9d9026d377aaa83d508251d1ae2d7a0e797d1b26b07ecb3fa1f1c99dd36bc1e90cf08640909df, 00cc7fac060988889607a51ca577c1d92b445faa6f2eb37c9de922260e4410b06d704a3636402b32e6db858a81a0b5091f8584720e5494cf05f27ec2d11cce01e493 + +# -G + G == inf; note that -G is (n-1)*G (affine) +a = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 001ffdd1bad025e9c1721333855ddb54325dcbf42821746c60cce9b408c6b35085ecdf9d57a37f60297c4f6561c7bcaec69edfbba0b5c4b0174cd7b9f1b5a561d971, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +b = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 01e0022e452fda163e8deccc7aa224abcda2340bd7de8b939f33164bf7394caf7a132062a85c809fd683b09a9e384351396120445f4a3b4fe8b328460e4a5a9e268e, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +r = inf + +# G + -G == inf; note that -G is (n-1)*G (affine) +a = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 01e0022e452fda163e8deccc7aa224abcda2340bd7de8b939f33164bf7394caf7a132062a85c809fd683b09a9e384351396120445f4a3b4fe8b328460e4a5a9e268e, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +b = 0074e6cf1f65b311cada214e32409c829fda90fc1457b035a69edd50a5af3bf7f3ac947f0ee093d17fd46f19a459e0c2b5214dfcbf3f18e172deb331a16381adc101, 001ffdd1bad025e9c1721333855ddb54325dcbf42821746c60cce9b408c6b35085ecdf9d57a37f60297c4f6561c7bcaec69edfbba0b5c4b0174cd7b9f1b5a561d971, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 +r = inf diff --git a/src/ec/suite_b/ops/p521_scalar_mul_tests.txt b/src/ec/suite_b/ops/p521_scalar_mul_tests.txt new file mode 100644 index 0000000000..8e250c53b7 --- /dev/null +++ b/src/ec/suite_b/ops/p521_scalar_mul_tests.txt @@ -0,0 +1,32 @@ + +a = 00 +b = 00 +r = 00 + +a = 00 +b = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408 +r = 00 + +a = 01 +b = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408 +r = fe2f36fa73a2b61a3663ea41cdbbfcfa43e3f3f9420e2dbe82fcb379def1478fcd6e52bce74027a9e3781e5b91b4414d010b0e564c05b78a21866b9e9a5c6aec94 + +a = 02 +b = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408 +r = 01fc5e6df4e7456c346cc7d4839b77f9f487c7e7f2841c5b7d05f966f3bde28f1f9adca579ce804f53c6f03cb72368829a02161cac980b6f14430cd73d34b8d5d928 + +a = 03 +b = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408 +r = fa8da4ef5ae8224ea32bbec56933f6eecbabdbebc62a893b88f61a6d9cd3d6af6df971af320147673ee88f116c25ba4132e575392b878a56b5d7d324b0840861b3 + +a = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28c343c1df97cb35bfe600a47b84d2e81ddae4dc44ce23d75db7db8f489c3204 +b = 02 +r = fe2f36fa73a2b61a3663ea41cdbbfcfa43e3f3f9420e2dbe82fcb379def1478fcd6e52bce74027a9e3781e5b91b4414d010b0e564c05b78a21866b9e9a5c6aec94 + +a = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28c343c1df97cb35bfe600a47b84d2e81ddae4dc44ce23d75db7db8f489c3205 +b = 02 +r = 0101d0c9058c5d49e5c99c15be32440305bc1c0c06bdf1d2417d034c86210eb8702ce333ca9c7f07ec8807ada5b742c858cf30a7736c83e4bd8d3504188434cd7775 + +a = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 02 +r = bd7335e6a6571bfffffffffffffffffffffffffffffffffffffffffffffffffffde5d0df9ec617ae71608d54a043c86a4b9d5fa76d4919ca432510c5680e7e7bf6